structra-ui 0.1.15 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/app/_utils/date-pt-br.utils.mjs +82 -0
- package/esm2022/app/_utils/decimal-br.utils.mjs +154 -0
- package/esm2022/app/_utils/estados-br.data.mjs +37 -0
- package/esm2022/app/_utils/integer-br.utils.mjs +48 -0
- package/esm2022/app/_utils/integer-value.utils.mjs +19 -0
- package/esm2022/app/_utils/scroll/body-scroll-lock.util.mjs +97 -0
- package/esm2022/app/app-shell/_models/breadcrumb-item.model.mjs +2 -0
- package/esm2022/app/app-shell/app-shell-sidebar-template.directive.mjs +29 -0
- package/esm2022/app/app-shell/app-shell.component.mjs +105 -0
- package/esm2022/app/app-shell/breadcrumb/breadcrumb.component.mjs +18 -0
- package/esm2022/app/app-shell/index.mjs +19 -0
- package/esm2022/app/app-shell/sidebar/app-sidebar-toolbar.directive.mjs +23 -0
- package/esm2022/app/app-shell/sidebar/shell-sidebar-toggle.component.mjs +36 -0
- package/esm2022/app/app-shell/sidebar/sidebar.component.mjs +84 -0
- package/esm2022/app/app-shell/sidebar-reveal.constants.mjs +9 -0
- package/esm2022/app/app-shell/topbar/topbar.component.mjs +14 -0
- package/esm2022/app/app-shell/user-menu/user-menu.component.mjs +52 -0
- package/esm2022/app/buttons/base-button/base-button.component.mjs +97 -0
- package/esm2022/app/buttons/index.mjs +2 -0
- package/esm2022/app/data-display/_models/card-item-view.model.mjs +2 -0
- package/esm2022/app/data-display/_models/data-display.models.mjs +2 -0
- package/esm2022/app/data-display/_models/data-grid-column.model.mjs +2 -0
- package/esm2022/app/data-display/_models/index.mjs +2 -0
- package/esm2022/app/data-display/adaptive-data-view/adaptive-data-view.component.mjs +124 -0
- package/esm2022/app/data-display/card-list/card-list.component.mjs +208 -0
- package/esm2022/app/data-display/dashboard-section/dashboard-section.component.mjs +25 -0
- package/esm2022/app/data-display/data-card/data-card.component.mjs +40 -0
- package/esm2022/app/data-display/data-grid/data-grid-actions-cell-renderer.component.mjs +41 -0
- package/esm2022/app/data-display/data-grid/data-grid.component.mjs +253 -0
- package/esm2022/app/data-display/data-list/data-list.component.mjs +40 -0
- package/esm2022/app/data-display/data-toolbar/data-toolbar.component.mjs +12 -0
- package/esm2022/app/data-display/details-field/details-field.component.mjs +21 -0
- package/esm2022/app/data-display/details-view/details-view.component.mjs +44 -0
- package/esm2022/app/data-display/empty-state/empty-state-overlay.util.mjs +19 -0
- package/esm2022/app/data-display/empty-state/empty-state.component.mjs +30 -0
- package/esm2022/app/data-display/index.mjs +19 -0
- package/esm2022/app/data-display/list-item/list-item.component.mjs +59 -0
- package/esm2022/app/data-display/stat-card/stat-card.component.mjs +59 -0
- package/esm2022/app/data-display/status-badge/status-badge.component.mjs +41 -0
- package/esm2022/app/data-display/table-empty-state/table-empty-state.component.mjs +31 -0
- package/esm2022/app/data-display/table-toolbar/table-toolbar.component.mjs +22 -0
- package/esm2022/app/dialogs/_models/lib-dialog-size.model.mjs +8 -0
- package/esm2022/app/dialogs/_utils/app-lib-light-block-scroll-strategy.mjs +22 -0
- package/esm2022/app/dialogs/_utils/lib-dialog-panel-classes.mjs +6 -0
- package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +200 -0
- package/esm2022/app/dialogs/app-dialog/dialog-footer.directive.mjs +15 -0
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog-data.model.mjs +2 -0
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.component.mjs +36 -0
- package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.service.mjs +47 -0
- package/esm2022/app/dialogs/index.mjs +12 -0
- package/esm2022/app/dialogs/loading-dialog/loading-dialog-data.model.mjs +2 -0
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.component.mjs +19 -0
- package/esm2022/app/dialogs/loading-dialog/loading-dialog.service.mjs +38 -0
- package/esm2022/app/dialogs/toast/toast-host.component.mjs +65 -0
- package/esm2022/app/dialogs/toast/toast.models.mjs +2 -0
- package/esm2022/app/dialogs/toast/toast.service.mjs +76 -0
- package/esm2022/app/fields/checkbox-fields/_base/boolean-field.directive.mjs +158 -0
- package/esm2022/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.mjs +36 -0
- package/esm2022/app/fields/checkbox-fields/index.mjs +4 -0
- package/esm2022/app/fields/checkbox-fields/switch-field/switch-field.component.mjs +35 -0
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.mjs +117 -0
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.mjs +152 -0
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-option-field.base.mjs +149 -0
- package/esm2022/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.mjs +32 -0
- package/esm2022/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/_models/index.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/_models/select-option.model.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/_models/select-pagination.model.mjs +2 -0
- package/esm2022/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.mjs +520 -0
- package/esm2022/app/fields/dropdown-fields/index.mjs +7 -0
- package/esm2022/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.mjs +379 -0
- package/esm2022/app/fields/dropdown-fields/select-field/select-field.component.mjs +359 -0
- package/esm2022/app/fields/input-fields/_base/base-field.component.mjs +151 -0
- package/esm2022/app/fields/input-fields/_base/base-field.directive.mjs +224 -0
- package/esm2022/app/fields/input-fields/_base/masked-text-field.base.mjs +135 -0
- package/esm2022/app/fields/input-fields/_base/ng-control-field.directive.mjs +127 -0
- package/esm2022/app/fields/input-fields/_models/field-common-inputs.model.mjs +2 -0
- package/esm2022/app/fields/input-fields/_models/index.mjs +2 -0
- package/esm2022/app/fields/input-fields/_utils/mask-complete.validators.mjs +61 -0
- package/esm2022/app/fields/input-fields/_utils/mask-format.utils.mjs +40 -0
- package/esm2022/app/fields/input-fields/cep-field/cep-field.component.mjs +48 -0
- package/esm2022/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.mjs +61 -0
- package/esm2022/app/fields/input-fields/date-field/date-field.component.mjs +147 -0
- package/esm2022/app/fields/input-fields/decimal-field/decimal-field.component.mjs +166 -0
- package/esm2022/app/fields/input-fields/index.mjs +22 -0
- package/esm2022/app/fields/input-fields/input-mask-field/input-mask-field.component.mjs +52 -0
- package/esm2022/app/fields/input-fields/integer-field/integer-field.component.mjs +143 -0
- package/esm2022/app/fields/input-fields/password-field/password-field.component.mjs +130 -0
- package/esm2022/app/fields/input-fields/phone-field/phone-field.component.mjs +66 -0
- package/esm2022/app/fields/input-fields/text-field/text-field.component.mjs +90 -0
- package/esm2022/app/fields/input-fields/textarea-field/textarea-field.component.mjs +125 -0
- package/esm2022/app/form-layout/_models/form-layout.model.mjs +48 -0
- package/esm2022/app/form-layout/_models/form-tabs.model.mjs +2 -0
- package/esm2022/app/form-layout/_models/index.mjs +2 -0
- package/esm2022/app/form-layout/_models/validation-summary.model.mjs +2 -0
- package/esm2022/app/form-layout/form-actions/form-actions.component.mjs +55 -0
- package/esm2022/app/form-layout/form-col/form-col.component.mjs +76 -0
- package/esm2022/app/form-layout/form-group/form-group.component.mjs +358 -0
- package/esm2022/app/form-layout/form-group/form-path.utils.mjs +65 -0
- package/esm2022/app/form-layout/form-group/form-root-invalid-ui-refresh.util.mjs +54 -0
- package/esm2022/app/form-layout/form-row/form-row.component.mjs +49 -0
- package/esm2022/app/form-layout/form-section/form-section.component.mjs +43 -0
- package/esm2022/app/form-layout/form-tab/form-tab.component.mjs +67 -0
- package/esm2022/app/form-layout/form-tabs/form-tabs.component.mjs +126 -0
- package/esm2022/app/form-layout/index.mjs +14 -0
- package/esm2022/app/form-layout/layout-stack/layout-stack.component.mjs +56 -0
- package/esm2022/app/form-layout/validation-summary/validation-summary.component.mjs +343 -0
- package/esm2022/app/loading/skeleton-loading/index.mjs +7 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.mjs +43 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.mjs +23 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.mjs +34 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.mjs +38 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.mjs +37 -0
- package/esm2022/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.mjs +45 -0
- package/esm2022/app/menus/_models/drawer-side.model.mjs +8 -0
- package/esm2022/app/menus/_models/drawer-size.model.mjs +8 -0
- package/esm2022/app/menus/_models/menu-dropdown-placement.model.mjs +12 -0
- package/esm2022/app/menus/_models/menu-item.model.mjs +6 -0
- package/esm2022/app/menus/_utils/menu-connected-positions.util.mjs +41 -0
- package/esm2022/app/menus/_utils/menu-rows.util.mjs +39 -0
- package/esm2022/app/menus/_utils/submenu-connected-positions.util.mjs +23 -0
- package/esm2022/app/menus/action-menu/action-menu.component.mjs +48 -0
- package/esm2022/app/menus/context-menu/context-menu.component.mjs +112 -0
- package/esm2022/app/menus/drawer/drawer.component.mjs +142 -0
- package/esm2022/app/menus/dropdown-menu/dropdown-menu.component.mjs +99 -0
- package/esm2022/app/menus/index.mjs +11 -0
- package/esm2022/app/menus/menu-divider/menu-divider.component.mjs +14 -0
- package/esm2022/app/menus/menu-group/menu-group.component.mjs +32 -0
- package/esm2022/app/menus/menu-list/menu-list.component.mjs +399 -0
- package/esm2022/app/overlay/_models/overlay-placement.model.mjs +11 -0
- package/esm2022/app/overlay/_utils/anchored-overlay-positions.util.mjs +84 -0
- package/esm2022/app/overlay/anchored-overlay/anchored-overlay.component.mjs +121 -0
- package/esm2022/app/overlay/index.mjs +21 -0
- package/esm2022/app/overlay/popover/popover-body-template.directive.mjs +17 -0
- package/esm2022/app/overlay/popover/popover-footer-template.directive.mjs +17 -0
- package/esm2022/app/overlay/popover/popover-trigger.directive.mjs +15 -0
- package/esm2022/app/overlay/popover/popover.component.mjs +93 -0
- package/esm2022/app/overlay/tooltip/tooltip-panel-template.directive.mjs +20 -0
- package/esm2022/app/overlay/tooltip/tooltip.component.mjs +118 -0
- package/esm2022/app/theme/app-theme.service.mjs +49 -0
- package/esm2022/app/theme/index.mjs +2 -0
- package/esm2022/structra-public-api.mjs +18 -0
- package/esm2022/structra-ui.mjs +5 -0
- package/esm2022/structra-version.mjs +3 -0
- package/fesm2022/structra-ui.mjs +8971 -0
- package/fesm2022/structra-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +15 -6
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { ApplicationRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, Injector, Output, afterNextRender, booleanAttribute, inject, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** Evento no host `app-form-group`: expandir grupo sem scroll próprio (navegação a partir do resumo). */
|
|
4
|
+
const UI_REQUEST_EXPAND_FORM_GROUP = 'ui-request-expand';
|
|
5
|
+
export class ValidationSummaryComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
/** Troca de aba (`beforeItemActivate`) + `queueMicrotask` no `app-form-tabs` — o alvo pode ficar em `[hidden]` até o próximo CD. */
|
|
8
|
+
this.navigateToFieldMaxAttempts = 28;
|
|
9
|
+
this.appRef = inject(ApplicationRef);
|
|
10
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
11
|
+
this.injector = inject(Injector);
|
|
12
|
+
this.hostRef = inject((ElementRef));
|
|
13
|
+
/** `id` único para `aria-labelledby` quando há vários resumos na página. */
|
|
14
|
+
this.titleElementId = `validation-summary-title-${++ValidationSummaryComponent.nextTitleUid}`;
|
|
15
|
+
/** `id` da região da lista (acessibilidade do botão recolher / expandir). */
|
|
16
|
+
this.listRegionId = `validation-summary-list-${++ValidationSummaryComponent.nextListRegionUid}`;
|
|
17
|
+
/** Lista simples (retrocompatível). Ignorada se {@link items} tiver entradas. */
|
|
18
|
+
this.messages = null;
|
|
19
|
+
/** Lista rica com `fieldId` opcional para navegação até o controle. */
|
|
20
|
+
this.items = null;
|
|
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
|
+
this.summaryHeading = '';
|
|
27
|
+
this.visible = true;
|
|
28
|
+
/**
|
|
29
|
+
* `false` (padrão): fluxo em documento (ex.: no topo do formulário) — o consumidor pode fazer scroll até o painel.
|
|
30
|
+
* `true`: painel `position: fixed` no topo do viewport, com fade-in **sem** reservar espaço no formulário
|
|
31
|
+
* nem alterar o scroll da página (útil em formulários muito longos).
|
|
32
|
+
*/
|
|
33
|
+
this.pinned = false;
|
|
34
|
+
this.variant = 'error';
|
|
35
|
+
this.compact = false;
|
|
36
|
+
/**
|
|
37
|
+
* Altura máxima do painel da lista (ex.: `12rem`, `min(40vh, 14rem)`).
|
|
38
|
+
* Quando definido, a lista obtém scroll vertical interno.
|
|
39
|
+
*/
|
|
40
|
+
this.panelMaxHeight = null;
|
|
41
|
+
/** Comportamento de scroll ao centrar o alvo na tela. */
|
|
42
|
+
this.scrollBehavior = 'smooth';
|
|
43
|
+
/** Mostra botão que apenas fecha o painel (não altera validação nem o formulário). */
|
|
44
|
+
this.showCloseButton = false;
|
|
45
|
+
/**
|
|
46
|
+
* Mostra o botão com setas (recolher / expandir) ao lado do título para esconder só a lista
|
|
47
|
+
* e poupar espaço vertical sem fechar o painel.
|
|
48
|
+
*/
|
|
49
|
+
this.showListCollapseToggle = true;
|
|
50
|
+
this.closeButtonLabel = 'Fechar';
|
|
51
|
+
/** Texto da dica nativa (`title`) nas linhas com destino ao campo. */
|
|
52
|
+
this.fieldNavigateHint = 'Clique para ir ao campo.';
|
|
53
|
+
this.panelClose = new EventEmitter();
|
|
54
|
+
/** Com `pinned`: breve fade-in após o painel passar a visível (sem deslocar o layout). */
|
|
55
|
+
this.pinnedOpen = false;
|
|
56
|
+
/** `true`: lista de erros visível; `false`: só cabeçalho + botões (menos altura). */
|
|
57
|
+
this.panelBodyExpanded = true;
|
|
58
|
+
this.wasShown = false;
|
|
59
|
+
}
|
|
60
|
+
static { this.nextTitleUid = 0; }
|
|
61
|
+
static { this.nextListRegionUid = 0; }
|
|
62
|
+
get hostClass() {
|
|
63
|
+
const parts = [
|
|
64
|
+
'validation-summary',
|
|
65
|
+
`validation-summary--${this.variant}`,
|
|
66
|
+
];
|
|
67
|
+
if (this.compact) {
|
|
68
|
+
parts.push('validation-summary--compact');
|
|
69
|
+
}
|
|
70
|
+
if (this.pinned && this.isShown) {
|
|
71
|
+
parts.push('validation-summary--pinned-host');
|
|
72
|
+
}
|
|
73
|
+
return parts.join(' ');
|
|
74
|
+
}
|
|
75
|
+
ngOnChanges(_changes) {
|
|
76
|
+
const shown = this.isShown;
|
|
77
|
+
if (this.pinned && shown && !this.wasShown) {
|
|
78
|
+
this.pinnedOpen = false;
|
|
79
|
+
this.cdr.markForCheck();
|
|
80
|
+
requestAnimationFrame(() => {
|
|
81
|
+
requestAnimationFrame(() => {
|
|
82
|
+
this.pinnedOpen = true;
|
|
83
|
+
this.cdr.markForCheck();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else if (!shown) {
|
|
88
|
+
this.pinnedOpen = false;
|
|
89
|
+
this.panelBodyExpanded = true;
|
|
90
|
+
}
|
|
91
|
+
this.wasShown = shown;
|
|
92
|
+
}
|
|
93
|
+
get hostHidden() {
|
|
94
|
+
return this.isShown ? null : true;
|
|
95
|
+
}
|
|
96
|
+
get resolvedItems() {
|
|
97
|
+
const fromItems = (this.items ?? []).filter((i) => i && typeof i.message === 'string' && i.message.trim().length > 0);
|
|
98
|
+
if (fromItems.length > 0) {
|
|
99
|
+
return fromItems.map((i) => ({
|
|
100
|
+
message: i.message.trim(),
|
|
101
|
+
fieldId: i.fieldId?.trim() || undefined,
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
return (this.messages ?? [])
|
|
105
|
+
.filter((m) => typeof m === 'string' && m.trim().length > 0)
|
|
106
|
+
.map((message) => ({ message: message.trim() }));
|
|
107
|
+
}
|
|
108
|
+
get isShown() {
|
|
109
|
+
return this.visible && this.resolvedItems.length > 0;
|
|
110
|
+
}
|
|
111
|
+
onCloseClick() {
|
|
112
|
+
this.panelClose.emit();
|
|
113
|
+
this.cdr.markForCheck();
|
|
114
|
+
}
|
|
115
|
+
toggleListBody() {
|
|
116
|
+
this.panelBodyExpanded = !this.panelBodyExpanded;
|
|
117
|
+
this.cdr.markForCheck();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Chave estável para `@for` — `track $index` reutiliza mal nós quando a lista muda ao vivo
|
|
121
|
+
* e o getter `resolvedItems` devolve novas referências a cada CD.
|
|
122
|
+
*/
|
|
123
|
+
itemTrackKey(row, index) {
|
|
124
|
+
const fid = row.fieldId?.trim();
|
|
125
|
+
if (fid) {
|
|
126
|
+
return fid;
|
|
127
|
+
}
|
|
128
|
+
return `msg-${index}-${row.message}`;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Clique na linha com destino: primeiro alinha a linha no `list-wrap` com scroll
|
|
132
|
+
* (itens parcialmente visíveis passam a ficar totalmente visíveis), depois navega.
|
|
133
|
+
*/
|
|
134
|
+
onSummaryLinkActivate(ev, item) {
|
|
135
|
+
const el = ev.currentTarget;
|
|
136
|
+
if (el) {
|
|
137
|
+
el.scrollIntoView({
|
|
138
|
+
block: 'nearest',
|
|
139
|
+
inline: 'nearest',
|
|
140
|
+
behavior: 'auto',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
this.onItemActivate(item);
|
|
144
|
+
}
|
|
145
|
+
/** Navegação até o controle com `fieldId` (chamado após {@link onSummaryLinkActivate}). */
|
|
146
|
+
onItemActivate(item) {
|
|
147
|
+
const id = item.fieldId?.trim();
|
|
148
|
+
if (!id) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
this.beforeItemActivate?.(item);
|
|
152
|
+
// 1) `afterNextRender`: após o DOM refletir (ex.: mudança de aba em `beforeItemActivate`).
|
|
153
|
+
// 2) `setTimeout(0)`: fora do ciclo de verificação — evita NG0100 ao expandir `app-form-group`.
|
|
154
|
+
afterNextRender(() => {
|
|
155
|
+
setTimeout(() => this.navigateToFieldId(id), 0);
|
|
156
|
+
}, { injector: this.injector });
|
|
157
|
+
}
|
|
158
|
+
navigateToFieldId(id, attempt = 0) {
|
|
159
|
+
const resolved = document.getElementById(id);
|
|
160
|
+
if (!resolved || !(resolved instanceof HTMLElement)) {
|
|
161
|
+
if (attempt < this.navigateToFieldMaxAttempts) {
|
|
162
|
+
/*
|
|
163
|
+
* Com `destroyOnCollapse`, o controle não existe no DOM enquanto o `app-form-group` está fechado;
|
|
164
|
+
* `expandCollapsedFormGroupAncestors` nunca corre porque depende do elemento já existir.
|
|
165
|
+
* Expandimos todos os grupos colapsados no `<form>` mais próximo e repetimos após um CD.
|
|
166
|
+
*/
|
|
167
|
+
this.expandCollapsedFormGroupsInNearestForm();
|
|
168
|
+
this.appRef.tick();
|
|
169
|
+
queueMicrotask(() => this.navigateToFieldId(id, attempt + 1));
|
|
170
|
+
}
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// Separadores inativos (`app-form-tab`) usam `[hidden]` — `getElementById` existe mas foco falha
|
|
174
|
+
// até o painel estar visível; re-tenta após CD (ex.: demo Abas ao saltar de aba).
|
|
175
|
+
if (resolved.closest('[hidden]')) {
|
|
176
|
+
if (attempt < this.navigateToFieldMaxAttempts) {
|
|
177
|
+
this.appRef.tick();
|
|
178
|
+
queueMicrotask(() => this.navigateToFieldId(id, attempt + 1));
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Com `app-form-group` colapsado (corpo `display: none`), `getElementById` ainda encontra o alvo
|
|
184
|
+
* mas o foco falha até o próximo CD — sem reintento parece que é preciso um segundo clique no resumo.
|
|
185
|
+
*/
|
|
186
|
+
if (this.isInsideCollapsedFormGroupBody(resolved)) {
|
|
187
|
+
this.expandCollapsedFormGroupAncestors(resolved);
|
|
188
|
+
this.appRef.tick();
|
|
189
|
+
if (attempt < this.navigateToFieldMaxAttempts) {
|
|
190
|
+
queueMicrotask(() => this.navigateToFieldId(id, attempt + 1));
|
|
191
|
+
}
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
this.expandCollapsedFormGroupAncestors(resolved);
|
|
195
|
+
this.appRef.tick();
|
|
196
|
+
this.scheduleScrollAndFocusAfterDomFlush(id);
|
|
197
|
+
}
|
|
198
|
+
/** Após `tick()`, garante um frame de pintura antes de scroll/foco (evita foco em ramo ainda oculto). */
|
|
199
|
+
scheduleScrollAndFocusAfterDomFlush(id) {
|
|
200
|
+
queueMicrotask(() => {
|
|
201
|
+
requestAnimationFrame(() => {
|
|
202
|
+
requestAnimationFrame(() => this.scrollAndFocusFieldById(id));
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
isInsideCollapsedFormGroupBody(el) {
|
|
207
|
+
let node = el;
|
|
208
|
+
while (node) {
|
|
209
|
+
if (node.classList?.contains('form-group__body--collapsed-hidden')) {
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
node = node.parentElement;
|
|
213
|
+
}
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
scrollAndFocusFieldById(id) {
|
|
217
|
+
const el = document.getElementById(id);
|
|
218
|
+
if (!el || !(el instanceof HTMLElement)) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const focusable = this.resolveFocusable(el);
|
|
222
|
+
focusable.scrollIntoView({
|
|
223
|
+
behavior: this.scrollBehavior,
|
|
224
|
+
block: 'center',
|
|
225
|
+
inline: 'nearest',
|
|
226
|
+
});
|
|
227
|
+
queueMicrotask(() => {
|
|
228
|
+
try {
|
|
229
|
+
focusable.focus({ preventScroll: true });
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
focusable.focus({ preventScroll: true });
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
this.cdr.markForCheck();
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Dispara `ui-request-expand` em cada `app-form-group` colapsado do formulário que contém este resumo,
|
|
239
|
+
* para montar campos com `destroyOnCollapse` antes de `getElementById(fieldId)`.
|
|
240
|
+
* Ordem do DOM (pais antes dos filhos) alinha a expansão de grupos aninhados.
|
|
241
|
+
*/
|
|
242
|
+
expandCollapsedFormGroupsInNearestForm() {
|
|
243
|
+
const form = this.hostRef.nativeElement.closest('form');
|
|
244
|
+
if (!(form instanceof HTMLFormElement)) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
const hosts = Array.from(form.querySelectorAll('app-form-group.form-group--collapsed'));
|
|
248
|
+
for (const host of hosts) {
|
|
249
|
+
host.dispatchEvent(new CustomEvent(UI_REQUEST_EXPAND_FORM_GROUP, {
|
|
250
|
+
bubbles: false,
|
|
251
|
+
cancelable: true,
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/** Expande do mais externo para o mais interno para o conteúdo ficar visível. */
|
|
256
|
+
expandCollapsedFormGroupAncestors(start) {
|
|
257
|
+
const hosts = [];
|
|
258
|
+
let node = start.parentElement;
|
|
259
|
+
while (node) {
|
|
260
|
+
if (node.tagName.toLowerCase() === 'app-form-group' &&
|
|
261
|
+
node.classList.contains('form-group--collapsed')) {
|
|
262
|
+
hosts.push(node);
|
|
263
|
+
}
|
|
264
|
+
node = node.parentElement;
|
|
265
|
+
}
|
|
266
|
+
for (let i = hosts.length - 1; i >= 0; i--) {
|
|
267
|
+
hosts[i].dispatchEvent(new CustomEvent(UI_REQUEST_EXPAND_FORM_GROUP, {
|
|
268
|
+
bubbles: false,
|
|
269
|
+
cancelable: true,
|
|
270
|
+
}));
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
resolveFocusable(el) {
|
|
274
|
+
if (this.isFocusableElement(el)) {
|
|
275
|
+
return el;
|
|
276
|
+
}
|
|
277
|
+
const inner = el.querySelector('input, select, textarea, button, [href], [tabindex]:not([tabindex="-1"])');
|
|
278
|
+
return inner ?? el;
|
|
279
|
+
}
|
|
280
|
+
isFocusableElement(el) {
|
|
281
|
+
if (el.hasAttribute('disabled')) {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
const tag = el.tagName;
|
|
285
|
+
if (tag === 'INPUT' ||
|
|
286
|
+
tag === 'SELECT' ||
|
|
287
|
+
tag === 'TEXTAREA' ||
|
|
288
|
+
tag === 'BUTTON') {
|
|
289
|
+
return true;
|
|
290
|
+
}
|
|
291
|
+
const tab = el.getAttribute('tabindex');
|
|
292
|
+
return tab != null && tab !== '-1';
|
|
293
|
+
}
|
|
294
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidationSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
295
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ValidationSummaryComponent, isStandalone: true, selector: "app-validation-summary", inputs: { messages: "messages", items: "items", summaryHeading: ["title", "summaryHeading"], visible: ["visible", "visible", booleanAttribute], pinned: ["pinned", "pinned", booleanAttribute], variant: "variant", compact: ["compact", "compact", booleanAttribute], panelMaxHeight: "panelMaxHeight", scrollBehavior: "scrollBehavior", beforeItemActivate: "beforeItemActivate", showCloseButton: ["showCloseButton", "showCloseButton", booleanAttribute], showListCollapseToggle: ["showListCollapseToggle", "showListCollapseToggle", booleanAttribute], closeButtonLabel: "closeButtonLabel", fieldNavigateHint: "fieldNavigateHint" }, outputs: { panelClose: "panelClose" }, host: { properties: { "class": "this.hostClass", "attr.hidden": "this.hostHidden" } }, usesOnChanges: true, ngImport: i0, template: "@if (isShown) {\r\n<div class=\"validation-summary__panel\" role=\"region\"\r\n [attr.aria-labelledby]=\"summaryHeading.trim() ? titleElementId : null\"\r\n [attr.aria-label]=\"summaryHeading.trim() ? null : 'Resumo de valida\u00E7\u00E3o'\"\r\n [class.validation-summary__panel--pinned]=\"pinned\"\r\n [class.validation-summary__panel--pinned-open]=\"pinned && pinnedOpen\"\r\n [class.validation-summary__panel--list-collapsed]=\"!panelBodyExpanded\">\r\n <div class=\"validation-summary__head\">\r\n @if (showListCollapseToggle) {\r\n <button type=\"button\" class=\"validation-summary__collapse-toggle\" (click)=\"toggleListBody()\"\r\n [attr.aria-expanded]=\"panelBodyExpanded\" [attr.aria-controls]=\"listRegionId\"\r\n [attr.aria-label]=\"panelBodyExpanded ? 'Recolher lista de erros' : 'Expandir lista de erros'\">\r\n <i class=\"fa-solid\" aria-hidden=\"true\" [class.fa-chevron-up]=\"panelBodyExpanded\"\r\n [class.fa-chevron-down]=\"!panelBodyExpanded\"></i>\r\n </button>\r\n }\r\n @if (summaryHeading.trim()) {\r\n <h3 class=\"validation-summary__title\" [id]=\"titleElementId\">\r\n {{ summaryHeading }}\r\n </h3>\r\n }\r\n @if (showCloseButton) {\r\n <button type=\"button\" class=\"validation-summary__close\" (click)=\"onCloseClick()\">\r\n {{ closeButtonLabel }}\r\n </button>\r\n }\r\n </div>\r\n <div class=\"validation-summary__list-wrap\" [id]=\"listRegionId\"\r\n [class.validation-summary__list-wrap--scrollable]=\"!!panelMaxHeight && panelBodyExpanded\"\r\n [class.validation-summary__list-wrap--collapsed]=\"!panelBodyExpanded\"\r\n [style.max-height]=\"panelBodyExpanded ? (panelMaxHeight || null) : null\" [attr.title]=\"fieldNavigateHint\">\r\n <ul class=\"validation-summary__list\" role=\"list\">\r\n @for (row of resolvedItems; track itemTrackKey(row, $index)) {\r\n <li class=\"validation-summary__item\" role=\"listitem\" (click)=\"onSummaryLinkActivate($event, row)\">\r\n @if (row.fieldId) {\r\n <button type=\"button\" class=\"validation-summary__link\" [attr.title]=\"fieldNavigateHint\">\r\n {{ row.message }}\r\n </button>\r\n } @else {\r\n <span class=\"validation-summary__text\">{{ row.message }}</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</div>\r\n}", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box;flex:0 0 auto;align-self:stretch}:host.validation-summary--pinned-host{position:static;display:block;box-sizing:border-box;flex:0 0 auto!important;width:100%;max-width:100%;height:0!important;min-height:0!important;margin:0!important;padding:0!important;overflow:visible;pointer-events:none}.validation-summary__panel.validation-summary__panel--pinned{position:fixed;z-index:var(--app-z-validation-summary-pinned, 1400);top:max(.65rem,env(safe-area-inset-top,0px));left:1rem;right:1rem;width:auto;max-width:min(100%,52rem);margin-left:auto;margin-right:auto;box-sizing:border-box;pointer-events:auto;box-shadow:0 4px 6px -1px #00000014,0 10px 24px -6px #0000001f;transform:none;opacity:0;transition:opacity .2s ease-out}.validation-summary__panel.validation-summary__panel--pinned.validation-summary__panel--pinned-open{opacity:1}.validation-summary__panel{width:100%;border-radius:10px;padding:.85rem 1rem;box-sizing:border-box;border:1px solid transparent}.validation-summary__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.45rem .75rem;margin-bottom:.55rem}.validation-summary__panel--list-collapsed .validation-summary__head{margin-bottom:0}.validation-summary__collapse-toggle{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin:0;padding:0;border:1px solid rgba(183,28,28,.35);border-radius:8px;background:#ffffffbf;color:var(--ui-validation-summary-title-error, #b71c1c);font-size:.8rem;line-height:1;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease}.validation-summary__collapse-toggle:hover{background:#fff;border-color:#b71c1c8c}.validation-summary__collapse-toggle:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px}.validation-summary__title{margin:0;flex:1 1 auto;min-width:0;font-size:1rem;font-weight:600;line-height:1.35;user-select:none;-webkit-user-select:none}.validation-summary__close{flex-shrink:0;margin:0 0 0 auto;padding:.3rem .7rem;border:1px solid rgba(183,28,28,.35);border-radius:8px;background:#ffffffbf;color:var(--ui-validation-summary-title-error, #b71c1c);font-size:.85rem;font-weight:500;font-family:inherit;line-height:1.3;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease}.validation-summary__close:hover{background:#fff;border-color:#b71c1c8c}.validation-summary__close:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px}.validation-summary__list-wrap{min-width:0;user-select:none;-webkit-user-select:none;overflow:hidden;transition:max-height .28s ease,opacity .22s ease,margin .2s ease}.validation-summary__list-wrap--collapsed{max-height:0!important;opacity:0;margin:0;padding:0;pointer-events:none}.validation-summary__list-wrap--scrollable{overflow-y:auto;overflow-x:hidden;padding-right:.15rem;scrollbar-gutter:stable}.validation-summary__list{margin:0;padding:0;list-style:none}.validation-summary__item{display:flex;align-items:flex-start;gap:.4rem;margin:.2rem 0;padding:0;line-height:1.45;color:var(--ui-validation-summary-text, #1a1a1a);user-select:none;-webkit-user-select:none}.validation-summary__item:before{content:\"\\2022\";flex-shrink:0;line-height:inherit;color:var(--ui-validation-summary-text, #1a1a1a)}.validation-summary__text{display:inline;font:inherit;user-select:none;-webkit-user-select:none}.validation-summary__link{flex:1;min-width:0;display:block;margin:0;padding:0;border:none;background:none;font:inherit;color:inherit;text-align:left;text-decoration:underline;text-underline-offset:.12em;cursor:pointer;user-select:none;-webkit-user-select:none}.validation-summary__link:hover{color:var(--ui-validation-summary-link-hover, #0d47a1)}.validation-summary__link:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px;border-radius:4px}:host.validation-summary--error .validation-summary__link:hover{color:var(--app-color-error, #b91c1c)}:host.validation-summary--error .validation-summary__panel{background:var(--ui-validation-summary-bg-error, #ffebee);border-color:var(--ui-validation-summary-border-error, #ffcdd2)}:host.validation-summary--error .validation-summary__title{color:var(--ui-validation-summary-title-error, #b71c1c)}:host.validation-summary--warning .validation-summary__panel{background:var(--ui-validation-summary-bg-warning, #fff8e1);border-color:var(--ui-validation-summary-border-warning, #ffe082)}:host.validation-summary--warning .validation-summary__title{color:var(--ui-validation-summary-title-warning, #e65100)}:host.validation-summary--warning .validation-summary__close{color:var(--ui-validation-summary-title-warning, #e65100);border-color:#e6510059}:host.validation-summary--warning .validation-summary__collapse-toggle{color:var(--ui-validation-summary-title-warning, #e65100);border-color:#e6510059}:host.validation-summary--warning .validation-summary__collapse-toggle:hover{border-color:#e651008c}:host.validation-summary--info .validation-summary__panel{background:var(--ui-validation-summary-bg-info, #e3f2fd);border-color:var(--ui-validation-summary-border-info, #90caf9)}:host.validation-summary--info .validation-summary__title{color:var(--ui-validation-summary-title-info, #0d47a1)}:host.validation-summary--info .validation-summary__close{color:var(--ui-validation-summary-title-info, #0d47a1);border-color:#0d47a159}:host.validation-summary--info .validation-summary__collapse-toggle{color:var(--ui-validation-summary-title-info, #0d47a1);border-color:#0d47a159}:host.validation-summary--info .validation-summary__collapse-toggle:hover{border-color:#0d47a18c}:host.validation-summary--compact .validation-summary__panel{padding:.55rem .7rem}:host.validation-summary--compact .validation-summary__head{margin-bottom:.35rem}:host.validation-summary--compact .validation-summary__title{font-size:.92rem}:host.validation-summary--compact .validation-summary__list{padding-left:0}:host.validation-summary--compact .validation-summary__item{font-size:.88rem;margin:.12rem 0}:host.validation-summary--compact .validation-summary__collapse-toggle{width:1.75rem;height:1.75rem;font-size:.72rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
296
|
+
}
|
|
297
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidationSummaryComponent, decorators: [{
|
|
298
|
+
type: Component,
|
|
299
|
+
args: [{ selector: 'app-validation-summary', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isShown) {\r\n<div class=\"validation-summary__panel\" role=\"region\"\r\n [attr.aria-labelledby]=\"summaryHeading.trim() ? titleElementId : null\"\r\n [attr.aria-label]=\"summaryHeading.trim() ? null : 'Resumo de valida\u00E7\u00E3o'\"\r\n [class.validation-summary__panel--pinned]=\"pinned\"\r\n [class.validation-summary__panel--pinned-open]=\"pinned && pinnedOpen\"\r\n [class.validation-summary__panel--list-collapsed]=\"!panelBodyExpanded\">\r\n <div class=\"validation-summary__head\">\r\n @if (showListCollapseToggle) {\r\n <button type=\"button\" class=\"validation-summary__collapse-toggle\" (click)=\"toggleListBody()\"\r\n [attr.aria-expanded]=\"panelBodyExpanded\" [attr.aria-controls]=\"listRegionId\"\r\n [attr.aria-label]=\"panelBodyExpanded ? 'Recolher lista de erros' : 'Expandir lista de erros'\">\r\n <i class=\"fa-solid\" aria-hidden=\"true\" [class.fa-chevron-up]=\"panelBodyExpanded\"\r\n [class.fa-chevron-down]=\"!panelBodyExpanded\"></i>\r\n </button>\r\n }\r\n @if (summaryHeading.trim()) {\r\n <h3 class=\"validation-summary__title\" [id]=\"titleElementId\">\r\n {{ summaryHeading }}\r\n </h3>\r\n }\r\n @if (showCloseButton) {\r\n <button type=\"button\" class=\"validation-summary__close\" (click)=\"onCloseClick()\">\r\n {{ closeButtonLabel }}\r\n </button>\r\n }\r\n </div>\r\n <div class=\"validation-summary__list-wrap\" [id]=\"listRegionId\"\r\n [class.validation-summary__list-wrap--scrollable]=\"!!panelMaxHeight && panelBodyExpanded\"\r\n [class.validation-summary__list-wrap--collapsed]=\"!panelBodyExpanded\"\r\n [style.max-height]=\"panelBodyExpanded ? (panelMaxHeight || null) : null\" [attr.title]=\"fieldNavigateHint\">\r\n <ul class=\"validation-summary__list\" role=\"list\">\r\n @for (row of resolvedItems; track itemTrackKey(row, $index)) {\r\n <li class=\"validation-summary__item\" role=\"listitem\" (click)=\"onSummaryLinkActivate($event, row)\">\r\n @if (row.fieldId) {\r\n <button type=\"button\" class=\"validation-summary__link\" [attr.title]=\"fieldNavigateHint\">\r\n {{ row.message }}\r\n </button>\r\n } @else {\r\n <span class=\"validation-summary__text\">{{ row.message }}</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n</div>\r\n}", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box;flex:0 0 auto;align-self:stretch}:host.validation-summary--pinned-host{position:static;display:block;box-sizing:border-box;flex:0 0 auto!important;width:100%;max-width:100%;height:0!important;min-height:0!important;margin:0!important;padding:0!important;overflow:visible;pointer-events:none}.validation-summary__panel.validation-summary__panel--pinned{position:fixed;z-index:var(--app-z-validation-summary-pinned, 1400);top:max(.65rem,env(safe-area-inset-top,0px));left:1rem;right:1rem;width:auto;max-width:min(100%,52rem);margin-left:auto;margin-right:auto;box-sizing:border-box;pointer-events:auto;box-shadow:0 4px 6px -1px #00000014,0 10px 24px -6px #0000001f;transform:none;opacity:0;transition:opacity .2s ease-out}.validation-summary__panel.validation-summary__panel--pinned.validation-summary__panel--pinned-open{opacity:1}.validation-summary__panel{width:100%;border-radius:10px;padding:.85rem 1rem;box-sizing:border-box;border:1px solid transparent}.validation-summary__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-start;gap:.45rem .75rem;margin-bottom:.55rem}.validation-summary__panel--list-collapsed .validation-summary__head{margin-bottom:0}.validation-summary__collapse-toggle{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin:0;padding:0;border:1px solid rgba(183,28,28,.35);border-radius:8px;background:#ffffffbf;color:var(--ui-validation-summary-title-error, #b71c1c);font-size:.8rem;line-height:1;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease}.validation-summary__collapse-toggle:hover{background:#fff;border-color:#b71c1c8c}.validation-summary__collapse-toggle:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px}.validation-summary__title{margin:0;flex:1 1 auto;min-width:0;font-size:1rem;font-weight:600;line-height:1.35;user-select:none;-webkit-user-select:none}.validation-summary__close{flex-shrink:0;margin:0 0 0 auto;padding:.3rem .7rem;border:1px solid rgba(183,28,28,.35);border-radius:8px;background:#ffffffbf;color:var(--ui-validation-summary-title-error, #b71c1c);font-size:.85rem;font-weight:500;font-family:inherit;line-height:1.3;cursor:pointer;user-select:none;-webkit-user-select:none;transition:background .15s ease,border-color .15s ease}.validation-summary__close:hover{background:#fff;border-color:#b71c1c8c}.validation-summary__close:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px}.validation-summary__list-wrap{min-width:0;user-select:none;-webkit-user-select:none;overflow:hidden;transition:max-height .28s ease,opacity .22s ease,margin .2s ease}.validation-summary__list-wrap--collapsed{max-height:0!important;opacity:0;margin:0;padding:0;pointer-events:none}.validation-summary__list-wrap--scrollable{overflow-y:auto;overflow-x:hidden;padding-right:.15rem;scrollbar-gutter:stable}.validation-summary__list{margin:0;padding:0;list-style:none}.validation-summary__item{display:flex;align-items:flex-start;gap:.4rem;margin:.2rem 0;padding:0;line-height:1.45;color:var(--ui-validation-summary-text, #1a1a1a);user-select:none;-webkit-user-select:none}.validation-summary__item:before{content:\"\\2022\";flex-shrink:0;line-height:inherit;color:var(--ui-validation-summary-text, #1a1a1a)}.validation-summary__text{display:inline;font:inherit;user-select:none;-webkit-user-select:none}.validation-summary__link{flex:1;min-width:0;display:block;margin:0;padding:0;border:none;background:none;font:inherit;color:inherit;text-align:left;text-decoration:underline;text-underline-offset:.12em;cursor:pointer;user-select:none;-webkit-user-select:none}.validation-summary__link:hover{color:var(--ui-validation-summary-link-hover, #0d47a1)}.validation-summary__link:focus-visible{outline:2px solid var(--app-color-validation-focus-ring, rgba(185, 28, 28, .45));outline-offset:2px;border-radius:4px}:host.validation-summary--error .validation-summary__link:hover{color:var(--app-color-error, #b91c1c)}:host.validation-summary--error .validation-summary__panel{background:var(--ui-validation-summary-bg-error, #ffebee);border-color:var(--ui-validation-summary-border-error, #ffcdd2)}:host.validation-summary--error .validation-summary__title{color:var(--ui-validation-summary-title-error, #b71c1c)}:host.validation-summary--warning .validation-summary__panel{background:var(--ui-validation-summary-bg-warning, #fff8e1);border-color:var(--ui-validation-summary-border-warning, #ffe082)}:host.validation-summary--warning .validation-summary__title{color:var(--ui-validation-summary-title-warning, #e65100)}:host.validation-summary--warning .validation-summary__close{color:var(--ui-validation-summary-title-warning, #e65100);border-color:#e6510059}:host.validation-summary--warning .validation-summary__collapse-toggle{color:var(--ui-validation-summary-title-warning, #e65100);border-color:#e6510059}:host.validation-summary--warning .validation-summary__collapse-toggle:hover{border-color:#e651008c}:host.validation-summary--info .validation-summary__panel{background:var(--ui-validation-summary-bg-info, #e3f2fd);border-color:var(--ui-validation-summary-border-info, #90caf9)}:host.validation-summary--info .validation-summary__title{color:var(--ui-validation-summary-title-info, #0d47a1)}:host.validation-summary--info .validation-summary__close{color:var(--ui-validation-summary-title-info, #0d47a1);border-color:#0d47a159}:host.validation-summary--info .validation-summary__collapse-toggle{color:var(--ui-validation-summary-title-info, #0d47a1);border-color:#0d47a159}:host.validation-summary--info .validation-summary__collapse-toggle:hover{border-color:#0d47a18c}:host.validation-summary--compact .validation-summary__panel{padding:.55rem .7rem}:host.validation-summary--compact .validation-summary__head{margin-bottom:.35rem}:host.validation-summary--compact .validation-summary__title{font-size:.92rem}:host.validation-summary--compact .validation-summary__list{padding-left:0}:host.validation-summary--compact .validation-summary__item{font-size:.88rem;margin:.12rem 0}:host.validation-summary--compact .validation-summary__collapse-toggle{width:1.75rem;height:1.75rem;font-size:.72rem}\n"] }]
|
|
300
|
+
}], propDecorators: { messages: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], items: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], summaryHeading: [{
|
|
305
|
+
type: Input,
|
|
306
|
+
args: ['title']
|
|
307
|
+
}], visible: [{
|
|
308
|
+
type: Input,
|
|
309
|
+
args: [{ transform: booleanAttribute }]
|
|
310
|
+
}], pinned: [{
|
|
311
|
+
type: Input,
|
|
312
|
+
args: [{ transform: booleanAttribute }]
|
|
313
|
+
}], variant: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], compact: [{
|
|
316
|
+
type: Input,
|
|
317
|
+
args: [{ transform: booleanAttribute }]
|
|
318
|
+
}], panelMaxHeight: [{
|
|
319
|
+
type: Input
|
|
320
|
+
}], scrollBehavior: [{
|
|
321
|
+
type: Input
|
|
322
|
+
}], beforeItemActivate: [{
|
|
323
|
+
type: Input
|
|
324
|
+
}], showCloseButton: [{
|
|
325
|
+
type: Input,
|
|
326
|
+
args: [{ transform: booleanAttribute }]
|
|
327
|
+
}], showListCollapseToggle: [{
|
|
328
|
+
type: Input,
|
|
329
|
+
args: [{ transform: booleanAttribute }]
|
|
330
|
+
}], closeButtonLabel: [{
|
|
331
|
+
type: Input
|
|
332
|
+
}], fieldNavigateHint: [{
|
|
333
|
+
type: Input
|
|
334
|
+
}], panelClose: [{
|
|
335
|
+
type: Output
|
|
336
|
+
}], hostClass: [{
|
|
337
|
+
type: HostBinding,
|
|
338
|
+
args: ['class']
|
|
339
|
+
}], hostHidden: [{
|
|
340
|
+
type: HostBinding,
|
|
341
|
+
args: ['attr.hidden']
|
|
342
|
+
}] } });
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZm9ybS1sYXlvdXQvdmFsaWRhdGlvbi1zdW1tYXJ5L3ZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2Zvcm0tbGF5b3V0L3ZhbGlkYXRpb24tc3VtbWFyeS92YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBQ0wsUUFBUSxFQUVSLE1BQU0sRUFFTixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7QUFNdkIseUdBQXlHO0FBQ3pHLE1BQU0sNEJBQTRCLEdBQUcsbUJBQW1CLENBQUM7QUFTekQsTUFBTSxPQUFPLDBCQUEwQjtJQVB2QztRQVdFLG9JQUFvSTtRQUNuSCwrQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFFaEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoQyxRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixZQUFPLEdBQUcsTUFBTSxDQUFDLENBQUEsVUFBdUIsQ0FBQSxDQUFDLENBQUM7UUFFM0QsNEVBQTRFO1FBQ25FLG1CQUFjLEdBQUcsNEJBQTRCLEVBQUUsMEJBQTBCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFbEcsNkVBQTZFO1FBQ3BFLGlCQUFZLEdBQUcsMkJBQTJCLEVBQUUsMEJBQTBCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVwRyxp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LEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRTdCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRWEsVUFBVTtzQkFBNUIsTUFBTTtnQkFXSCxTQUFTO3NCQURaLFdBQVc7dUJBQUMsT0FBTztnQkFrQ2hCLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgSW5qZWN0b3IsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBhZnRlck5leHRSZW5kZXIsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIFZhbGlkYXRpb25TdW1tYXJ5SXRlbSxcbiAgVmFsaWRhdGlvblN1bW1hcnlWYXJpYW50LFxufSBmcm9tICcuLi9fbW9kZWxzL3ZhbGlkYXRpb24tc3VtbWFyeS5tb2RlbCc7XG5cbi8qKiBFdmVudG8gbm8gaG9zdCBgYXBwLWZvcm0tZ3JvdXBgOiBleHBhbmRpciBncnVwbyBzZW0gc2Nyb2xsIHByw7NwcmlvIChuYXZlZ2HDp8OjbyBhIHBhcnRpciBkbyByZXN1bW8pLiAqL1xuY29uc3QgVUlfUkVRVUVTVF9FWFBBTkRfRk9STV9HUk9VUCA9ICd1aS1yZXF1ZXN0LWV4cGFuZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC12YWxpZGF0aW9uLXN1bW1hcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vdmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3ZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU3VtbWFyeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgc3RhdGljIG5leHRUaXRsZVVpZCA9IDA7XG4gIHByaXZhdGUgc3RhdGljIG5leHRMaXN0UmVnaW9uVWlkID0gMDtcblxuICAvKiogVHJvY2EgZGUgYWJhIChgYmVmb3JlSXRlbUFjdGl2YXRlYCkgKyBgcXVldWVNaWNyb3Rhc2tgIG5vIGBhcHAtZm9ybS10YWJzYCDigJQgbyBhbHZvIHBvZGUgZmljYXIgZW0gYFtoaWRkZW5dYCBhdMOpIG8gcHLDs3hpbW8gQ0QuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbmF2aWdhdGVUb0ZpZWxkTWF4QXR0ZW1wdHMgPSAyODtcblxuICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZiA9IGluamVjdChBcHBsaWNhdGlvblJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaG9zdFJlZiA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50Pik7XG5cbiAgLyoqIGBpZGAgw7puaWNvIHBhcmEgYGFyaWEtbGFiZWxsZWRieWAgcXVhbmRvIGjDoSB2w6FyaW9zIHJlc3Vtb3MgbmEgcMOhZ2luYS4gKi9cbiAgcmVhZG9ubHkgdGl0bGVFbGVtZW50SWQgPSBgdmFsaWRhdGlvbi1zdW1tYXJ5LXRpdGxlLSR7KytWYWxpZGF0aW9uU3VtbWFyeUNvbXBvbmVudC5uZXh0VGl0bGVVaWR9YDtcblxuICAvKiogYGlkYCBkYSByZWdpw6NvIGRhIGxpc3RhIChhY2Vzc2liaWxpZGFkZSBkbyBib3TDo28gcmVjb2xoZXIgLyBleHBhbmRpcikuICovXG4gIHJlYWRvbmx5IGxpc3RSZWdpb25JZCA9IGB2YWxpZGF0aW9uLXN1bW1hcnktbGlzdC0keysrVmFsaWRhdGlvblN1bW1hcnlDb21wb25lbnQubmV4dExpc3RSZWdpb25VaWR9YDtcblxuICAvKiogTGlzdGEgc2ltcGxlcyAocmV0cm9jb21wYXTDrXZlbCkuIElnbm9yYWRhIHNlIHtAbGluayBpdGVtc30gdGl2ZXIgZW50cmFkYXMuICovXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBMaXN0YSByaWNhIGNvbSBgZmllbGRJZGAgb3BjaW9uYWwgcGFyYSBuYXZlZ2HDp8OjbyBhdMOpIG8gY29udHJvbGUuICovXG4gIEBJbnB1dCgpIGl0ZW1zOiBWYWxpZGF0aW9uU3VtbWFyeUl0ZW1bXSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUw610dWxvIGRvIGNhYmXDp2FsaG8gKGB0aXRsZT1cIuKAplwiYCBubyB0ZW1wbGF0ZSkuXG4gICAqIE7Do28gdXNhciBhIHByb3ByaWVkYWRlIGB0aXRsZWAgbmEgY2xhc3NlOiBjb2xpZGUgY29tIGBIVE1MRWxlbWVudC50aXRsZWAgbm8gaG9zdCBlIG9cbiAgICogYnJvd3NlciBwb2RlIGRlc2VuaGFyIHRvb2x0aXAgbmF0aXZvIC8gY29tcG9ydGFtZW50b3MgZXN0cmFuaG9zLlxuICAgKi9cbiAgQElucHV0KCd0aXRsZScpIHN1bW1hcnlIZWFkaW5nID0gJyc7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHZpc2libGUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBgZmFsc2VgIChwYWRyw6NvKTogZmx1eG8gZW0gZG9jdW1lbnRvIChleC46IG5vIHRvcG8gZG8gZm9ybXVsw6FyaW8pIOKAlCBvIGNvbnN1bWlkb3IgcG9kZSBmYXplciBzY3JvbGwgYXTDqSBvIHBhaW5lbC5cbiAgICogYHRydWVgOiBwYWluZWwgYHBvc2l0aW9uOiBmaXhlZGAgbm8gdG9wbyBkbyB2aWV3cG9ydCwgY29tIGZhZGUtaW4gKipzZW0qKiByZXNlcnZhciBlc3Bhw6dvIG5vIGZvcm11bMOhcmlvXG4gICAqIG5lbSBhbHRlcmFyIG8gc2Nyb2xsIGRhIHDDoWdpbmEgKMO6dGlsIGVtIGZvcm11bMOhcmlvcyBtdWl0byBsb25nb3MpLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBpbm5lZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFZhbGlkYXRpb25TdW1tYXJ5VmFyaWFudCA9ICdlcnJvcic7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNvbXBhY3QgPSBmYWxzZTtcblxuICAvKipcbiAgICogQWx0dXJhIG3DoXhpbWEgZG8gcGFpbmVsIGRhIGxpc3RhIChleC46IGAxMnJlbWAsIGBtaW4oNDB2aCwgMTRyZW0pYCkuXG4gICAqIFF1YW5kbyBkZWZpbmlkbywgYSBsaXN0YSBvYnTDqW0gc2Nyb2xsIHZlcnRpY2FsIGludGVybm8uXG4gICAqL1xuICBASW5wdXQoKSBwYW5lbE1heEhlaWdodDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIENvbXBvcnRhbWVudG8gZGUgc2Nyb2xsIGFvIGNlbnRyYXIgbyBhbHZvIG5hIHRlbGEuICovXG4gIEBJbnB1dCgpIHNjcm9sbEJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdzbW9vdGgnO1xuXG4gIC8qKlxuICAgKiBDaGFtYWRvIGFudGVzIGRlIGxvY2FsaXphciBvIGVsZW1lbnRvIHBvciBgZmllbGRJZGAgKGV4LjogYXRpdmFyIGEgYWJhIG9uZGUgZXN0w6EgbyBjYW1wbykuXG4gICAqIE1hbnTDqW0gbyBjb250cmF0byBkbyByZXN1bW8gY29tbyBmb250ZSDDum5pY2EgZGUgc2Nyb2xsL2ZvY28gZW0gYG5hdmlnYXRlVG9GaWVsZElkYC5cbiAgICovXG4gIEBJbnB1dCgpIGJlZm9yZUl0ZW1BY3RpdmF0ZT86IChpdGVtOiBWYWxpZGF0aW9uU3VtbWFyeUl0ZW0pID0+IHZvaWQ7XG5cbiAgLyoqIE1vc3RyYSBib3TDo28gcXVlIGFwZW5hcyBmZWNoYSBvIHBhaW5lbCAobsOjbyBhbHRlcmEgdmFsaWRhw6fDo28gbmVtIG8gZm9ybXVsw6FyaW8pLiAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0Nsb3NlQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE1vc3RyYSBvIGJvdMOjbyBjb20gc2V0YXMgKHJlY29saGVyIC8gZXhwYW5kaXIpIGFvIGxhZG8gZG8gdMOtdHVsbyBwYXJhIGVzY29uZGVyIHPDsyBhIGxpc3RhXG4gICAqIGUgcG91cGFyIGVzcGHDp28gdmVydGljYWwgc2VtIGZlY2hhciBvIHBhaW5lbC5cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93TGlzdENvbGxhcHNlVG9nZ2xlID0gdHJ1ZTtcblxuICBASW5wdXQoKSBjbG9zZUJ1dHRvbkxhYmVsID0gJ0ZlY2hhcic7XG5cbiAgLyoqIFRleHRvIGRhIGRpY2EgbmF0aXZhIChgdGl0bGVgKSBuYXMgbGluaGFzIGNvbSBkZXN0aW5vIGFvIGNhbXBvLiAqL1xuICBASW5wdXQoKSBmaWVsZE5hdmlnYXRlSGludCA9ICdDbGlxdWUgcGFyYSBpciBhbyBjYW1wby4nO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBwYW5lbENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBDb20gYHBpbm5lZGA6IGJyZXZlIGZhZGUtaW4gYXDDs3MgbyBwYWluZWwgcGFzc2FyIGEgdmlzw612ZWwgKHNlbSBkZXNsb2NhciBvIGxheW91dCkuICovXG4gIHBpbm5lZE9wZW4gPSBmYWxzZTtcblxuICAvKiogYHRydWVgOiBsaXN0YSBkZSBlcnJvcyB2aXPDrXZlbDsgYGZhbHNlYDogc8OzIGNhYmXDp2FsaG8gKyBib3TDtWVzIChtZW5vcyBhbHR1cmEpLiAqL1xuICBwYW5lbEJvZHlFeHBhbmRlZCA9IHRydWU7XG5cbiAgcHJpdmF0ZSB3YXNTaG93biA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICBnZXQgaG9zdENsYXNzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAndmFsaWRhdGlvbi1zdW1tYXJ5JyxcbiAgICAgIGB2YWxpZGF0aW9uLXN1bW1hcnktLSR7dGhpcy52YXJpYW50fWAsXG4gICAgXTtcbiAgICBpZiAodGhpcy5jb21wYWN0KSB7XG4gICAgICBwYXJ0cy5wdXNoKCd2YWxpZGF0aW9uLXN1bW1hcnktLWNvbXBhY3QnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGlubmVkICYmIHRoaXMuaXNTaG93bikge1xuICAgICAgcGFydHMucHVzaCgndmFsaWRhdGlvbi1zdW1tYXJ5LS1waW5uZWQtaG9zdCcpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydHMuam9pbignICcpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoX2NoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCBzaG93biA9IHRoaXMuaXNTaG93bjtcbiAgICBpZiAodGhpcy5waW5uZWQgJiYgc2hvd24gJiYgIXRoaXMud2FzU2hvd24pIHtcbiAgICAgIHRoaXMucGlubmVkT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucGlubmVkT3BlbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghc2hvd24pIHtcbiAgICAgIHRoaXMucGlubmVkT3BlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5wYW5lbEJvZHlFeHBhbmRlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMud2FzU2hvd24gPSBzaG93bjtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5oaWRkZW4nKVxuICBnZXQgaG9zdEhpZGRlbigpOiB0cnVlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuaXNTaG93biA/IG51bGwgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IHJlc29sdmVkSXRlbXMoKTogVmFsaWRhdGlvblN1bW1hcnlJdGVtW10ge1xuICAgIGNvbnN0IGZyb21JdGVtcyA9ICh0aGlzLml0ZW1zID8/IFtdKS5maWx0ZXIoXG4gICAgICAoaSkgPT4gaSAmJiB0eXBlb2YgaS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBpLm1lc3NhZ2UudHJpbSgpLmxlbmd0aCA+IDAsXG4gICAgKTtcbiAgICBpZiAoZnJvbUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBmcm9tSXRlbXMubWFwKChpKSA9PiAoe1xuICAgICAgICBtZXNzYWdlOiBpLm1lc3NhZ2UudHJpbSgpLFxuICAgICAgICBmaWVsZElkOiBpLmZpZWxkSWQ/LnRyaW0oKSB8fCB1bmRlZmluZWQsXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5tZXNzYWdlcyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKG0pID0+IHR5cGVvZiBtID09PSAnc3RyaW5nJyAmJiBtLnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgLm1hcCgobWVzc2FnZSkgPT4gKHsgbWVzc2FnZTogbWVzc2FnZS50cmltKCkgfSkpO1xuICB9XG5cbiAgZ2V0IGlzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZSAmJiB0aGlzLnJlc29sdmVkSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnBhbmVsQ2xvc2UuZW1pdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgdG9nZ2xlTGlzdEJvZHkoKTogdm9pZCB7XG4gICAgdGhpcy5wYW5lbEJvZHlFeHBhbmRlZCA9ICF0aGlzLnBhbmVsQm9keUV4cGFuZGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYXZlIGVzdMOhdmVsIHBhcmEgYEBmb3JgIOKAlCBgdHJhY2sgJGluZGV4YCByZXV0aWxpemEgbWFsIG7Ds3MgcXVhbmRvIGEgbGlzdGEgbXVkYSBhbyB2aXZvXG4gICAqIGUgbyBnZXR0ZXIgYHJlc29sdmVkSXRlbXNgIGRldm9sdmUgbm92YXMgcmVmZXLDqm5jaWFzIGEgY2FkYSBDRC5cbiAgICovXG4gIGl0ZW1UcmFja0tleShyb3c6IFZhbGlkYXRpb25TdW1tYXJ5SXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZmlkID0gcm93LmZpZWxkSWQ/LnRyaW0oKTtcbiAgICBpZiAoZmlkKSB7XG4gICAgICByZXR1cm4gZmlkO1xuICAgIH1cbiAgICByZXR1cm4gYG1zZy0ke2luZGV4fS0ke3Jvdy5tZXNzYWdlfWA7XG4gIH1cblxuICAvKipcbiAgICogQ2xpcXVlIG5hIGxpbmhhIGNvbSBkZXN0aW5vOiBwcmltZWlybyBhbGluaGEgYSBsaW5oYSBubyBgbGlzdC13cmFwYCBjb20gc2Nyb2xsXG4gICAqIChpdGVucyBwYXJjaWFsbWVudGUgdmlzw612ZWlzIHBhc3NhbSBhIGZpY2FyIHRvdGFsbWVudGUgdmlzw612ZWlzKSwgZGVwb2lzIG5hdmVnYS5cbiAgICovXG4gIG9uU3VtbWFyeUxpbmtBY3RpdmF0ZShldjogRXZlbnQsIGl0ZW06IFZhbGlkYXRpb25TdW1tYXJ5SXRlbSk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZXYuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgIGlubGluZTogJ25lYXJlc3QnLFxuICAgICAgICBiZWhhdmlvcjogJ2F1dG8nLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMub25JdGVtQWN0aXZhdGUoaXRlbSk7XG4gIH1cblxuICAvKiogTmF2ZWdhw6fDo28gYXTDqSBvIGNvbnRyb2xlIGNvbSBgZmllbGRJZGAgKGNoYW1hZG8gYXDDs3Mge0BsaW5rIG9uU3VtbWFyeUxpbmtBY3RpdmF0ZX0pLiAqL1xuICBvbkl0ZW1BY3RpdmF0ZShpdGVtOiBWYWxpZGF0aW9uU3VtbWFyeUl0ZW0pOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IGl0ZW0uZmllbGRJZD8udHJpbSgpO1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmJlZm9yZUl0ZW1BY3RpdmF0ZT8uKGl0ZW0pO1xuXG4gICAgLy8gMSkgYGFmdGVyTmV4dFJlbmRlcmA6IGFww7NzIG8gRE9NIHJlZmxldGlyIChleC46IG11ZGFuw6dhIGRlIGFiYSBlbSBgYmVmb3JlSXRlbUFjdGl2YXRlYCkuXG4gICAgLy8gMikgYHNldFRpbWVvdXQoMClgOiBmb3JhIGRvIGNpY2xvIGRlIHZlcmlmaWNhw6fDo28g4oCUIGV2aXRhIE5HMDEwMCBhbyBleHBhbmRpciBgYXBwLWZvcm0tZ3JvdXBgLlxuICAgIGFmdGVyTmV4dFJlbmRlcihcbiAgICAgICgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hdmlnYXRlVG9GaWVsZElkKGlkKSwgMCk7XG4gICAgICB9LFxuICAgICAgeyBpbmplY3RvcjogdGhpcy5pbmplY3RvciB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG5hdmlnYXRlVG9GaWVsZElkKGlkOiBzdHJpbmcsIGF0dGVtcHQgPSAwKTogdm9pZCB7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgaWYgKCFyZXNvbHZlZCB8fCAhKHJlc29sdmVkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG4gICAgICBpZiAoYXR0ZW1wdCA8IHRoaXMubmF2aWdhdGVUb0ZpZWxkTWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgLypcbiAgICAgICAgICogQ29tIGBkZXN0cm95T25Db2xsYXBzZWAsIG8gY29udHJvbGUgbsOjbyBleGlzdGUgbm8gRE9NIGVucXVhbnRvIG8gYGFwcC1mb3JtLWdyb3VwYCBlc3TDoSBmZWNoYWRvO1xuICAgICAgICAgKiBgZXhwYW5kQ29sbGFwc2VkRm9ybUdyb3VwQW5jZXN0b3JzYCBudW5jYSBjb3JyZSBwb3JxdWUgZGVwZW5kZSBkbyBlbGVtZW50byBqw6EgZXhpc3Rpci5cbiAgICAgICAgICogRXhwYW5kaW1vcyB0b2RvcyBvcyBncnVwb3MgY29sYXBzYWRvcyBubyBgPGZvcm0+YCBtYWlzIHByw7N4aW1vIGUgcmVwZXRpbW9zIGFww7NzIHVtIENELlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmRDb2xsYXBzZWRGb3JtR3JvdXBzSW5OZWFyZXN0Rm9ybSgpO1xuICAgICAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMubmF2aWdhdGVUb0ZpZWxkSWQoaWQsIGF0dGVtcHQgKyAxKSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFNlcGFyYWRvcmVzIGluYXRpdm9zIChgYXBwLWZvcm0tdGFiYCkgdXNhbSBgW2hpZGRlbl1gIOKAlCBgZ2V0RWxlbWVudEJ5SWRgIGV4aXN0ZSBtYXMgZm9jbyBmYWxoYVxuICAgIC8vIGF0w6kgbyBwYWluZWwgZXN0YXIgdmlzw612ZWw7IHJlLXRlbnRhIGFww7NzIENEIChleC46IGRlbW8gQWJhcyBhbyBzYWx0YXIgZGUgYWJhKS5cbiAgICBpZiAocmVzb2x2ZWQuY2xvc2VzdCgnW2hpZGRlbl0nKSkge1xuICAgICAgaWYgKGF0dGVtcHQgPCB0aGlzLm5hdmlnYXRlVG9GaWVsZE1heEF0dGVtcHRzKSB7XG4gICAgICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvRmllbGRJZChpZCwgYXR0ZW1wdCArIDEpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb20gYGFwcC1mb3JtLWdyb3VwYCBjb2xhcHNhZG8gKGNvcnBvIGBkaXNwbGF5OiBub25lYCksIGBnZXRFbGVtZW50QnlJZGAgYWluZGEgZW5jb250cmEgbyBhbHZvXG4gICAgICogbWFzIG8gZm9jbyBmYWxoYSBhdMOpIG8gcHLDs3hpbW8gQ0Qg4oCUIHNlbSByZWludGVudG8gcGFyZWNlIHF1ZSDDqSBwcmVjaXNvIHVtIHNlZ3VuZG8gY2xpcXVlIG5vIHJlc3Vtby5cbiAgICAgKi9cbiAgICBpZiAodGhpcy5pc0luc2lkZUNvbGxhcHNlZEZvcm1Hcm91cEJvZHkocmVzb2x2ZWQpKSB7XG4gICAgICB0aGlzLmV4cGFuZENvbGxhcHNlZEZvcm1Hcm91cEFuY2VzdG9ycyhyZXNvbHZlZCk7XG4gICAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gICAgICBpZiAoYXR0ZW1wdCA8IHRoaXMubmF2aWdhdGVUb0ZpZWxkTWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvRmllbGRJZChpZCwgYXR0ZW1wdCArIDEpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmV4cGFuZENvbGxhcHNlZEZvcm1Hcm91cEFuY2VzdG9ycyhyZXNvbHZlZCk7XG4gICAgdGhpcy5hcHBSZWYudGljaygpO1xuICAgIHRoaXMuc2NoZWR1bGVTY3JvbGxBbmRGb2N1c0FmdGVyRG9tRmx1c2goaWQpO1xuICB9XG5cbiAgLyoqIEFww7NzIGB0aWNrKClgLCBnYXJhbnRlIHVtIGZyYW1lIGRlIHBpbnR1cmEgYW50ZXMgZGUgc2Nyb2xsL2ZvY28gKGV2aXRhIGZvY28gZW0gcmFtbyBhaW5kYSBvY3VsdG8pLiAqL1xuICBwcml2YXRlIHNjaGVkdWxlU2Nyb2xsQW5kRm9jdXNBZnRlckRvbUZsdXNoKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zY3JvbGxBbmRGb2N1c0ZpZWxkQnlJZChpZCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW5zaWRlQ29sbGFwc2VkRm9ybUdyb3VwQm9keShlbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBsZXQgbm9kZTogSFRNTEVsZW1lbnQgfCBudWxsID0gZWw7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmNsYXNzTGlzdD8uY29udGFpbnMoJ2Zvcm0tZ3JvdXBfX2JvZHktLWNvbGxhcHNlZC1oaWRkZW4nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQW5kRm9jdXNGaWVsZEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghZWwgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb2N1c2FibGUgPSB0aGlzLnJlc29sdmVGb2N1c2FibGUoZWwpO1xuICAgIGZvY3VzYWJsZS5zY3JvbGxJbnRvVmlldyh7XG4gICAgICBiZWhhdmlvcjogdGhpcy5zY3JvbGxCZWhhdmlvcixcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgIGlubGluZTogJ25lYXJlc3QnLFxuICAgIH0pO1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvY3VzYWJsZS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgZm9jdXNhYmxlLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXJhIGB1aS1yZXF1ZXN0LWV4cGFuZGAgZW0gY2FkYSBgYXBwLWZvcm0tZ3JvdXBgIGNvbGFwc2FkbyBkbyBmb3JtdWzDoXJpbyBxdWUgY29udMOpbSBlc3RlIHJlc3VtbyxcbiAgICogcGFyYSBtb250YXIgY2FtcG9zIGNvbSBgZGVzdHJveU9uQ29sbGFwc2VgIGFudGVzIGRlIGBnZXRFbGVtZW50QnlJZChmaWVsZElkKWAuXG4gICAqIE9yZGVtIGRvIERPTSAocGFpcyBhbnRlcyBkb3MgZmlsaG9zKSBhbGluaGEgYSBleHBhbnPDo28gZGUgZ3J1cG9zIGFuaW5oYWRvcy5cbiAgICovXG4gIHByaXZhdGUgZXhwYW5kQ29sbGFwc2VkRm9ybUdyb3Vwc0luTmVhcmVzdEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICBpZiAoIShmb3JtIGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBob3N0cyA9IEFycmF5LmZyb20oXG4gICAgICBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2FwcC1mb3JtLWdyb3VwLmZvcm0tZ3JvdXAtLWNvbGxhcHNlZCcpLFxuICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICBmb3IgKGNvbnN0IGhvc3Qgb2YgaG9zdHMpIHtcbiAgICAgIGhvc3QuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KFVJX1JFUVVFU1RfRVhQQU5EX0ZPUk1fR1JPVVAsIHtcbiAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEV4cGFuZGUgZG8gbWFpcyBleHRlcm5vIHBhcmEgbyBtYWlzIGludGVybm8gcGFyYSBvIGNvbnRlw7pkbyBmaWNhciB2aXPDrXZlbC4gKi9cbiAgcHJpdmF0ZSBleHBhbmRDb2xsYXBzZWRGb3JtR3JvdXBBbmNlc3RvcnMoc3RhcnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgaG9zdHM6IEhUTUxFbGVtZW50W10gPSBbXTtcbiAgICBsZXQgbm9kZTogSFRNTEVsZW1lbnQgfCBudWxsID0gc3RhcnQucGFyZW50RWxlbWVudDtcbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2FwcC1mb3JtLWdyb3VwJyAmJlxuICAgICAgICBub2RlLmNsYXNzTGlzdC5jb250YWlucygnZm9ybS1ncm91cC0tY29sbGFwc2VkJylcbiAgICAgICkge1xuICAgICAgICBob3N0cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGhvc3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBob3N0c1tpXS5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoVUlfUkVRVUVTVF9FWFBBTkRfRk9STV9HUk9VUCwge1xuICAgICAgICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVGb2N1c2FibGUoZWw6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgIGlmICh0aGlzLmlzRm9jdXNhYmxlRWxlbWVudChlbCkpIHtcbiAgICAgIHJldHVybiBlbDtcbiAgICB9XG4gICAgY29uc3QgaW5uZXIgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcbiAgICAgICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBbaHJlZl0sIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKScsXG4gICAgKTtcbiAgICByZXR1cm4gaW5uZXIgPz8gZWw7XG4gIH1cblxuICBwcml2YXRlIGlzRm9jdXNhYmxlRWxlbWVudChlbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoZWwuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRhZyA9IGVsLnRhZ05hbWU7XG4gICAgaWYgKFxuICAgICAgdGFnID09PSAnSU5QVVQnIHx8XG4gICAgICB0YWcgPT09ICdTRUxFQ1QnIHx8XG4gICAgICB0YWcgPT09ICdURVhUQVJFQScgfHxcbiAgICAgIHRhZyA9PT0gJ0JVVFRPTidcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0YWIgPSBlbC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgcmV0dXJuIHRhYiAhPSBudWxsICYmIHRhYiAhPT0gJy0xJztcbiAgfVxuXG59XG4iLCJAaWYgKGlzU2hvd24pIHtcclxuPGRpdiBjbGFzcz1cInZhbGlkYXRpb24tc3VtbWFyeV9fcGFuZWxcIiByb2xlPVwicmVnaW9uXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwic3VtbWFyeUhlYWRpbmcudHJpbSgpID8gdGl0bGVFbGVtZW50SWQgOiBudWxsXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cInN1bW1hcnlIZWFkaW5nLnRyaW0oKSA/IG51bGwgOiAnUmVzdW1vIGRlIHZhbGlkYcOnw6NvJ1wiXHJcbiAgW2NsYXNzLnZhbGlkYXRpb24tc3VtbWFyeV9fcGFuZWwtLXBpbm5lZF09XCJwaW5uZWRcIlxyXG4gIFtjbGFzcy52YWxpZGF0aW9uLXN1bW1hcnlfX3BhbmVsLS1waW5uZWQtb3Blbl09XCJwaW5uZWQgJiYgcGlubmVkT3BlblwiXHJcbiAgW2NsYXNzLnZhbGlkYXRpb24tc3VtbWFyeV9fcGFuZWwtLWxpc3QtY29sbGFwc2VkXT1cIiFwYW5lbEJvZHlFeHBhbmRlZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ2YWxpZGF0aW9uLXN1bW1hcnlfX2hlYWRcIj5cclxuICAgIEBpZiAoc2hvd0xpc3RDb2xsYXBzZVRvZ2dsZSkge1xyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLXN1bW1hcnlfX2NvbGxhcHNlLXRvZ2dsZVwiIChjbGljayk9XCJ0b2dnbGVMaXN0Qm9keSgpXCJcclxuICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJwYW5lbEJvZHlFeHBhbmRlZFwiIFthdHRyLmFyaWEtY29udHJvbHNdPVwibGlzdFJlZ2lvbklkXCJcclxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJwYW5lbEJvZHlFeHBhbmRlZCA/ICdSZWNvbGhlciBsaXN0YSBkZSBlcnJvcycgOiAnRXhwYW5kaXIgbGlzdGEgZGUgZXJyb3MnXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEtc29saWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbY2xhc3MuZmEtY2hldnJvbi11cF09XCJwYW5lbEJvZHlFeHBhbmRlZFwiXHJcbiAgICAgICAgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhcGFuZWxCb2R5RXhwYW5kZWRcIj48L2k+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIEBpZiAoc3VtbWFyeUhlYWRpbmcudHJpbSgpKSB7XHJcbiAgICA8aDMgY2xhc3M9XCJ2YWxpZGF0aW9uLXN1bW1hcnlfX3RpdGxlXCIgW2lkXT1cInRpdGxlRWxlbWVudElkXCI+XHJcbiAgICAgIHt7IHN1bW1hcnlIZWFkaW5nIH19XHJcbiAgICA8L2gzPlxyXG4gICAgfVxyXG4gICAgQGlmIChzaG93Q2xvc2VCdXR0b24pIHtcclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidmFsaWRhdGlvbi1zdW1tYXJ5X19jbG9zZVwiIChjbGljayk9XCJvbkNsb3NlQ2xpY2soKVwiPlxyXG4gICAgICB7eyBjbG9zZUJ1dHRvbkxhYmVsIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwidmFsaWRhdGlvbi1zdW1tYXJ5X19saXN0LXdyYXBcIiBbaWRdPVwibGlzdFJlZ2lvbklkXCJcclxuICAgIFtjbGFzcy52YWxpZGF0aW9uLXN1bW1hcnlfX2xpc3Qtd3JhcC0tc2Nyb2xsYWJsZV09XCIhIXBhbmVsTWF4SGVpZ2h0ICYmIHBhbmVsQm9keUV4cGFuZGVkXCJcclxuICAgIFtjbGFzcy52YWxpZGF0aW9uLXN1bW1hcnlfX2xpc3Qtd3JhcC0tY29sbGFwc2VkXT1cIiFwYW5lbEJvZHlFeHBhbmRlZFwiXHJcbiAgICBbc3R5bGUubWF4LWhlaWdodF09XCJwYW5lbEJvZHlFeHBhbmRlZCA/IChwYW5lbE1heEhlaWdodCB8fCBudWxsKSA6IG51bGxcIiBbYXR0ci50aXRsZV09XCJmaWVsZE5hdmlnYXRlSGludFwiPlxyXG4gICAgPHVsIGNsYXNzPVwidmFsaWRhdGlvbi1zdW1tYXJ5X19saXN0XCIgcm9sZT1cImxpc3RcIj5cclxuICAgICAgQGZvciAocm93IG9mIHJlc29sdmVkSXRlbXM7IHRyYWNrIGl0ZW1UcmFja0tleShyb3csICRpbmRleCkpIHtcclxuICAgICAgPGxpIGNsYXNzPVwidmFsaWRhdGlvbi1zdW1tYXJ5X19pdGVtXCIgcm9sZT1cImxpc3RpdGVtXCIgKGNsaWNrKT1cIm9uU3VtbWFyeUxpbmtBY3RpdmF0ZSgkZXZlbnQsIHJvdylcIj5cclxuICAgICAgICBAaWYgKHJvdy5maWVsZElkKSB7XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ2YWxpZGF0aW9uLXN1bW1hcnlfX2xpbmtcIiBbYXR0ci50aXRsZV09XCJmaWVsZE5hdmlnYXRlSGludFwiPlxyXG4gICAgICAgICAge3sgcm93Lm1lc3NhZ2UgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cInZhbGlkYXRpb24tc3VtbWFyeV9fdGV4dFwiPnt7IHJvdy5tZXNzYWdlIH19PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9saT5cclxuICAgICAgfVxyXG4gICAgPC91bD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbn0iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { SkeletonBlockComponent } from './skeleton-block/skeleton-block.component';
|
|
2
|
+
export { SkeletonTextComponent } from './skeleton-text/skeleton-text.component';
|
|
3
|
+
export { SkeletonListComponent } from './skeleton-list/skeleton-list.component';
|
|
4
|
+
export { SkeletonCardComponent } from './skeleton-card/skeleton-card.component';
|
|
5
|
+
export { SkeletonTableComponent } from './skeleton-table/skeleton-table.component';
|
|
6
|
+
export { SkeletonFieldShellComponent, } from './skeleton-field-shell/skeleton-field-shell.component';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2xvYWRpbmcvc2tlbGV0b24tbG9hZGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQ0wsMkJBQTJCLEdBRTVCLE1BQU0sdURBQXVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBTa2VsZXRvbkJsb2NrQ29tcG9uZW50IH0gZnJvbSAnLi9za2VsZXRvbi1ibG9jay9za2VsZXRvbi1ibG9jay5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBTa2VsZXRvblRleHRDb21wb25lbnQgfSBmcm9tICcuL3NrZWxldG9uLXRleHQvc2tlbGV0b24tdGV4dC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBTa2VsZXRvbkxpc3RDb21wb25lbnQgfSBmcm9tICcuL3NrZWxldG9uLWxpc3Qvc2tlbGV0b24tbGlzdC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBTa2VsZXRvbkNhcmRDb21wb25lbnQgfSBmcm9tICcuL3NrZWxldG9uLWNhcmQvc2tlbGV0b24tY2FyZC5jb21wb25lbnQnO1xyXG5leHBvcnQgeyBTa2VsZXRvblRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9za2VsZXRvbi10YWJsZS9za2VsZXRvbi10YWJsZS5jb21wb25lbnQnO1xyXG5leHBvcnQge1xyXG4gIFNrZWxldG9uRmllbGRTaGVsbENvbXBvbmVudCxcclxuICB0eXBlIFNrZWxldG9uRmllbGRTaGVsbFZhcmlhbnQsXHJcbn0gZnJvbSAnLi9za2VsZXRvbi1maWVsZC1zaGVsbC9za2VsZXRvbi1maWVsZC1zaGVsbC5jb21wb25lbnQnO1xyXG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, Input, booleanAttribute, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** Bloco genérico de skeleton (linhas, caixas, células). */
|
|
4
|
+
export class SkeletonBlockComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
/** Largura CSS (ex.: `100%`, `6rem`, `40%`). */
|
|
7
|
+
this.width = '100%';
|
|
8
|
+
/** Altura CSS. */
|
|
9
|
+
this.height = '0.75rem';
|
|
10
|
+
/** Raio de canto. */
|
|
11
|
+
this.radius = '8px';
|
|
12
|
+
this.animate = true;
|
|
13
|
+
}
|
|
14
|
+
get hostClass() {
|
|
15
|
+
const parts = ['skeleton-block'];
|
|
16
|
+
if (this.animate) {
|
|
17
|
+
parts.push('skeleton-block--animate');
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
parts.push('skeleton-block--static');
|
|
21
|
+
}
|
|
22
|
+
return parts.join(' ');
|
|
23
|
+
}
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.3.12", type: SkeletonBlockComponent, isStandalone: true, selector: "app-skeleton-block", inputs: { width: "width", height: "height", radius: "radius", animate: ["animate", "animate", booleanAttribute] }, host: { properties: { "class": "this.hostClass" } }, ngImport: i0, template: "<span class=\"skeleton-block__inner\" aria-hidden=\"true\" [style.width]=\"width\" [style.height]=\"height\"\r\n [style.border-radius]=\"radius\"></span>\r\n", styles: ["@keyframes ui-skeleton-shimmer{to{transform:translate(100%)}}:host{display:block;min-width:0;box-sizing:border-box}.skeleton-block__inner{display:block;min-width:0;box-sizing:border-box}:host(.skeleton-block--animate) .skeleton-block__inner{position:relative;overflow:hidden;background:var(--app-color-skeleton-track, rgba(26, 47, 69, .09))}:host(.skeleton-block--animate) .skeleton-block__inner:after{content:\"\";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,var(--app-color-skeleton-shine, rgba(255, 255, 255, .22)),transparent);animation:ui-skeleton-shimmer 1.35s ease-in-out infinite}:host(.skeleton-block--static) .skeleton-block__inner{background:var(--app-color-skeleton-track-strong, rgba(26, 47, 69, .12))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonBlockComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'app-skeleton-block', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span class=\"skeleton-block__inner\" aria-hidden=\"true\" [style.width]=\"width\" [style.height]=\"height\"\r\n [style.border-radius]=\"radius\"></span>\r\n", styles: ["@keyframes ui-skeleton-shimmer{to{transform:translate(100%)}}:host{display:block;min-width:0;box-sizing:border-box}.skeleton-block__inner{display:block;min-width:0;box-sizing:border-box}:host(.skeleton-block--animate) .skeleton-block__inner{position:relative;overflow:hidden;background:var(--app-color-skeleton-track, rgba(26, 47, 69, .09))}:host(.skeleton-block--animate) .skeleton-block__inner:after{content:\"\";position:absolute;inset:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,var(--app-color-skeleton-shine, rgba(255, 255, 255, .22)),transparent);animation:ui-skeleton-shimmer 1.35s ease-in-out infinite}:host(.skeleton-block--static) .skeleton-block__inner{background:var(--app-color-skeleton-track-strong, rgba(26, 47, 69, .12))}\n"] }]
|
|
30
|
+
}], propDecorators: { width: [{
|
|
31
|
+
type: Input
|
|
32
|
+
}], height: [{
|
|
33
|
+
type: Input
|
|
34
|
+
}], radius: [{
|
|
35
|
+
type: Input
|
|
36
|
+
}], animate: [{
|
|
37
|
+
type: Input,
|
|
38
|
+
args: [{ transform: booleanAttribute }]
|
|
39
|
+
}], hostClass: [{
|
|
40
|
+
type: HostBinding,
|
|
41
|
+
args: ['class']
|
|
42
|
+
}] } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tYmxvY2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9sb2FkaW5nL3NrZWxldG9uLWxvYWRpbmcvc2tlbGV0b24tYmxvY2svc2tlbGV0b24tYmxvY2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9sb2FkaW5nL3NrZWxldG9uLWxvYWRpbmcvc2tlbGV0b24tYmxvY2svc2tlbGV0b24tYmxvY2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFDTCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7O0FBRXZCLDREQUE0RDtBQVE1RCxNQUFNLE9BQU8sc0JBQXNCO0lBUG5DO1FBUUUsZ0RBQWdEO1FBQ3ZDLFVBQUssR0FBRyxNQUFNLENBQUM7UUFDeEIsa0JBQWtCO1FBQ1QsV0FBTSxHQUFHLFNBQVMsQ0FBQztRQUM1QixxQkFBcUI7UUFDWixXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWdCLFlBQU8sR0FBRyxJQUFJLENBQUM7S0FZeEQ7SUFWQyxJQUNJLFNBQVM7UUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQzsrR0FuQlUsc0JBQXNCO21HQUF0QixzQkFBc0Isb0pBUWIsZ0JBQWdCLGtGQ3hCdEMsZ0tBRUE7OzRGRGNhLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxtQkFHQyx1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFa0MsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFHbEMsU0FBUztzQkFEWixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBib29sZWFuQXR0cmlidXRlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqIEJsb2NvIGdlbsOpcmljbyBkZSBza2VsZXRvbiAobGluaGFzLCBjYWl4YXMsIGPDqWx1bGFzKS4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2tlbGV0b24tYmxvY2snLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NrZWxldG9uLWJsb2NrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2tlbGV0b24tYmxvY2suY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2tlbGV0b25CbG9ja0NvbXBvbmVudCB7XHJcbiAgLyoqIExhcmd1cmEgQ1NTIChleC46IGAxMDAlYCwgYDZyZW1gLCBgNDAlYCkuICovXHJcbiAgQElucHV0KCkgd2lkdGggPSAnMTAwJSc7XHJcbiAgLyoqIEFsdHVyYSBDU1MuICovXHJcbiAgQElucHV0KCkgaGVpZ2h0ID0gJzAuNzVyZW0nO1xyXG4gIC8qKiBSYWlvIGRlIGNhbnRvLiAqL1xyXG4gIEBJbnB1dCgpIHJhZGl1cyA9ICc4cHgnO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYW5pbWF0ZSA9IHRydWU7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxyXG4gIGdldCBob3N0Q2xhc3MoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhcnRzID0gWydza2VsZXRvbi1ibG9jayddO1xyXG4gICAgaWYgKHRoaXMuYW5pbWF0ZSkge1xyXG4gICAgICBwYXJ0cy5wdXNoKCdza2VsZXRvbi1ibG9jay0tYW5pbWF0ZScpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFydHMucHVzaCgnc2tlbGV0b24tYmxvY2stLXN0YXRpYycpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcclxuICB9XHJcbn1cclxuIiwiPHNwYW4gY2xhc3M9XCJza2VsZXRvbi1ibG9ja19faW5uZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbc3R5bGUud2lkdGhdPVwid2lkdGhcIiBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgW3N0eWxlLmJvcmRlci1yYWRpdXNdPVwicmFkaXVzXCI+PC9zcGFuPlxyXG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, booleanAttribute, } from '@angular/core';
|
|
2
|
+
import { SkeletonBlockComponent } from '../skeleton-block/skeleton-block.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/** Placeholder de cartão (avatar + texto + ações). */
|
|
5
|
+
export class SkeletonCardComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.showActions = true;
|
|
8
|
+
this.animate = true;
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SkeletonCardComponent, isStandalone: true, selector: "app-skeleton-card", inputs: { showActions: ["showActions", "showActions", booleanAttribute], animate: ["animate", "animate", booleanAttribute] }, ngImport: i0, template: "<div class=\"skeleton-card\" aria-hidden=\"true\">\r\n <div class=\"skeleton-card__row\">\r\n <div class=\"skeleton-card__main\">\r\n <app-skeleton-block class=\"skeleton-card__avatar\" width=\"2.35rem\" height=\"2.35rem\" radius=\"999px\"\r\n [animate]=\"animate\" />\r\n <div class=\"skeleton-card__text\">\r\n <app-skeleton-block width=\"72%\" height=\"0.72rem\" radius=\"6px\" [animate]=\"animate\" />\r\n <app-skeleton-block width=\"48%\" height=\"0.62rem\" radius=\"6px\" [animate]=\"animate\" />\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"skeleton-card__actions\">\r\n <app-skeleton-block width=\"2rem\" height=\"2rem\" radius=\"8px\" [animate]=\"animate\" />\r\n <app-skeleton-block width=\"2rem\" height=\"2rem\" radius=\"8px\" [animate]=\"animate\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}.skeleton-card{box-sizing:border-box;border-radius:10px;border:1px solid rgba(26,47,69,.08);background:#fff;padding:.85rem 1rem}.skeleton-card__row{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.skeleton-card__main{display:flex;align-items:flex-start;gap:.65rem;min-width:0;flex:1}.skeleton-card__avatar{flex-shrink:0}.skeleton-card__text{display:flex;flex-direction:column;gap:.45rem;flex:1 1 auto;min-width:0;padding-top:.15rem}.skeleton-card__actions{display:flex;gap:.35rem;flex-shrink:0}\n"], dependencies: [{ kind: "component", type: SkeletonBlockComponent, selector: "app-skeleton-block", inputs: ["width", "height", "radius", "animate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonCardComponent, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'app-skeleton-card', standalone: true, imports: [SkeletonBlockComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"skeleton-card\" aria-hidden=\"true\">\r\n <div class=\"skeleton-card__row\">\r\n <div class=\"skeleton-card__main\">\r\n <app-skeleton-block class=\"skeleton-card__avatar\" width=\"2.35rem\" height=\"2.35rem\" radius=\"999px\"\r\n [animate]=\"animate\" />\r\n <div class=\"skeleton-card__text\">\r\n <app-skeleton-block width=\"72%\" height=\"0.72rem\" radius=\"6px\" [animate]=\"animate\" />\r\n <app-skeleton-block width=\"48%\" height=\"0.62rem\" radius=\"6px\" [animate]=\"animate\" />\r\n </div>\r\n </div>\r\n @if (showActions) {\r\n <div class=\"skeleton-card__actions\">\r\n <app-skeleton-block width=\"2rem\" height=\"2rem\" radius=\"8px\" [animate]=\"animate\" />\r\n <app-skeleton-block width=\"2rem\" height=\"2rem\" radius=\"8px\" [animate]=\"animate\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;width:100%;min-width:0}.skeleton-card{box-sizing:border-box;border-radius:10px;border:1px solid rgba(26,47,69,.08);background:#fff;padding:.85rem 1rem}.skeleton-card__row{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.skeleton-card__main{display:flex;align-items:flex-start;gap:.65rem;min-width:0;flex:1}.skeleton-card__avatar{flex-shrink:0}.skeleton-card__text{display:flex;flex-direction:column;gap:.45rem;flex:1 1 auto;min-width:0;padding-top:.15rem}.skeleton-card__actions{display:flex;gap:.35rem;flex-shrink:0}\n"] }]
|
|
16
|
+
}], propDecorators: { showActions: [{
|
|
17
|
+
type: Input,
|
|
18
|
+
args: [{ transform: booleanAttribute }]
|
|
19
|
+
}], animate: [{
|
|
20
|
+
type: Input,
|
|
21
|
+
args: [{ transform: booleanAttribute }]
|
|
22
|
+
}] } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2xvYWRpbmcvc2tlbGV0b24tbG9hZGluZy9za2VsZXRvbi1jYXJkL3NrZWxldG9uLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9sb2FkaW5nL3NrZWxldG9uLWxvYWRpbmcvc2tlbGV0b24tY2FyZC9za2VsZXRvbi1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBRXBGLHNEQUFzRDtBQVN0RCxNQUFNLE9BQU8scUJBQXFCO0lBUmxDO1FBUzBDLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLFlBQU8sR0FBRyxJQUFJLENBQUM7S0FDeEQ7K0dBSFkscUJBQXFCO21HQUFyQixxQkFBcUIsMkdBQ1osZ0JBQWdCLG1DQUNoQixnQkFBZ0IsNkJDbkJ0QywyM0JBa0JBLGtuQkROWSxzQkFBc0I7OzRGQUtyQixxQkFBcUI7a0JBUmpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLHNCQUFzQixDQUFDLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUdQLFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNrZWxldG9uQmxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9za2VsZXRvbi1ibG9jay9za2VsZXRvbi1ibG9jay5jb21wb25lbnQnO1xyXG5cclxuLyoqIFBsYWNlaG9sZGVyIGRlIGNhcnTDo28gKGF2YXRhciArIHRleHRvICsgYcOnw7VlcykuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNrZWxldG9uLWNhcmQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1NrZWxldG9uQmxvY2tDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9za2VsZXRvbi1jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2tlbGV0b24tY2FyZC5jb21wb25lbnQuc2NzcycsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTa2VsZXRvbkNhcmRDb21wb25lbnQge1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93QWN0aW9ucyA9IHRydWU7XHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFuaW1hdGUgPSB0cnVlO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJza2VsZXRvbi1jYXJkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNhcmRfX3Jvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNhcmRfX21haW5cIj5cclxuICAgICAgPGFwcC1za2VsZXRvbi1ibG9jayBjbGFzcz1cInNrZWxldG9uLWNhcmRfX2F2YXRhclwiIHdpZHRoPVwiMi4zNXJlbVwiIGhlaWdodD1cIjIuMzVyZW1cIiByYWRpdXM9XCI5OTlweFwiXHJcbiAgICAgICAgW2FuaW1hdGVdPVwiYW5pbWF0ZVwiIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJza2VsZXRvbi1jYXJkX190ZXh0XCI+XHJcbiAgICAgICAgPGFwcC1za2VsZXRvbi1ibG9jayB3aWR0aD1cIjcyJVwiIGhlaWdodD1cIjAuNzJyZW1cIiByYWRpdXM9XCI2cHhcIiBbYW5pbWF0ZV09XCJhbmltYXRlXCIgLz5cclxuICAgICAgICA8YXBwLXNrZWxldG9uLWJsb2NrIHdpZHRoPVwiNDglXCIgaGVpZ2h0PVwiMC42MnJlbVwiIHJhZGl1cz1cIjZweFwiIFthbmltYXRlXT1cImFuaW1hdGVcIiAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmIChzaG93QWN0aW9ucykge1xyXG4gICAgPGRpdiBjbGFzcz1cInNrZWxldG9uLWNhcmRfX2FjdGlvbnNcIj5cclxuICAgICAgPGFwcC1za2VsZXRvbi1ibG9jayB3aWR0aD1cIjJyZW1cIiBoZWlnaHQ9XCIycmVtXCIgcmFkaXVzPVwiOHB4XCIgW2FuaW1hdGVdPVwiYW5pbWF0ZVwiIC8+XHJcbiAgICAgIDxhcHAtc2tlbGV0b24tYmxvY2sgd2lkdGg9XCIycmVtXCIgaGVpZ2h0PVwiMnJlbVwiIHJhZGl1cz1cIjhweFwiIFthbmltYXRlXT1cImFuaW1hdGVcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
package/esm2022/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.mjs
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, booleanAttribute, } from '@angular/core';
|
|
2
|
+
import { SkeletonBlockComponent } from '../skeleton-block/skeleton-block.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Placeholder de campo: barra de valor e, opcionalmente, quadrado à esquerda quando não há
|
|
6
|
+
* ícone Font Awesome na coluna de prefixo do `app-base-field`.
|
|
7
|
+
*/
|
|
8
|
+
export class SkeletonFieldShellComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
/** @deprecated Ignorado: todos os campos usam o mesmo layout. */
|
|
11
|
+
this.variant = 'text';
|
|
12
|
+
this.animate = true;
|
|
13
|
+
/**
|
|
14
|
+
* Quando `false`, não renderiza o quadrado à esquerda (o `app-base-field` já mostra o ícone
|
|
15
|
+
* de prefixo inerte na coluna correcta durante `loading`).
|
|
16
|
+
*/
|
|
17
|
+
this.showLeadingIcon = true;
|
|
18
|
+
}
|
|
19
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonFieldShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
20
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SkeletonFieldShellComponent, isStandalone: true, selector: "app-skeleton-field-shell", inputs: { variant: "variant", animate: ["animate", "animate", booleanAttribute], showLeadingIcon: ["showLeadingIcon", "showLeadingIcon", booleanAttribute] }, ngImport: i0, template: "<div class=\"skeleton-field-shell\" [class.skeleton-field-shell--bar-only]=\"!showLeadingIcon\" aria-hidden=\"true\">\r\n @if (showLeadingIcon) {\r\n <app-skeleton-block class=\"skeleton-field-shell__prefix\" width=\"1.35em\" height=\"1.35em\" radius=\"8px\"\r\n [animate]=\"animate\" />\r\n }\r\n <app-skeleton-block class=\"skeleton-field-shell__value\" width=\"100%\" height=\"1.35em\" radius=\"6px\"\r\n [animate]=\"animate\" />\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;min-width:0}.skeleton-field-shell{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:.35rem;width:100%;min-width:0;min-height:calc(1.8rem + 1.35em);margin:0;padding:0 .75rem;box-sizing:border-box}.skeleton-field-shell--bar-only{gap:0}.skeleton-field-shell__prefix{flex:0 0 auto}.skeleton-field-shell__value{flex:1 1 auto;min-width:0}.skeleton-field-shell app-skeleton-block.skeleton-field-shell__value{display:block;width:100%}\n"], dependencies: [{ kind: "component", type: SkeletonBlockComponent, selector: "app-skeleton-block", inputs: ["width", "height", "radius", "animate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
21
|
+
}
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SkeletonFieldShellComponent, decorators: [{
|
|
23
|
+
type: Component,
|
|
24
|
+
args: [{ selector: 'app-skeleton-field-shell', standalone: true, imports: [SkeletonBlockComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"skeleton-field-shell\" [class.skeleton-field-shell--bar-only]=\"!showLeadingIcon\" aria-hidden=\"true\">\r\n @if (showLeadingIcon) {\r\n <app-skeleton-block class=\"skeleton-field-shell__prefix\" width=\"1.35em\" height=\"1.35em\" radius=\"8px\"\r\n [animate]=\"animate\" />\r\n }\r\n <app-skeleton-block class=\"skeleton-field-shell__value\" width=\"100%\" height=\"1.35em\" radius=\"6px\"\r\n [animate]=\"animate\" />\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block;width:100%;min-width:0}.skeleton-field-shell{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:.35rem;width:100%;min-width:0;min-height:calc(1.8rem + 1.35em);margin:0;padding:0 .75rem;box-sizing:border-box}.skeleton-field-shell--bar-only{gap:0}.skeleton-field-shell__prefix{flex:0 0 auto}.skeleton-field-shell__value{flex:1 1 auto;min-width:0}.skeleton-field-shell app-skeleton-block.skeleton-field-shell__value{display:block;width:100%}\n"] }]
|
|
25
|
+
}], propDecorators: { variant: [{
|
|
26
|
+
type: Input
|
|
27
|
+
}], animate: [{
|
|
28
|
+
type: Input,
|
|
29
|
+
args: [{ transform: booleanAttribute }]
|
|
30
|
+
}], showLeadingIcon: [{
|
|
31
|
+
type: Input,
|
|
32
|
+
args: [{ transform: booleanAttribute }]
|
|
33
|
+
}] } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tZmllbGQtc2hlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9sb2FkaW5nL3NrZWxldG9uLWxvYWRpbmcvc2tlbGV0b24tZmllbGQtc2hlbGwvc2tlbGV0b24tZmllbGQtc2hlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9sb2FkaW5nL3NrZWxldG9uLWxvYWRpbmcvc2tlbGV0b24tZmllbGQtc2hlbGwvc2tlbGV0b24tZmllbGQtc2hlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUNMLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFLcEY7OztHQUdHO0FBU0gsTUFBTSxPQUFPLDJCQUEyQjtJQVJ4QztRQVNFLGlFQUFpRTtRQUN4RCxZQUFPLEdBQThCLE1BQU0sQ0FBQztRQUNiLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFdkQ7OztXQUdHO1FBQ3FDLG9CQUFlLEdBQUcsSUFBSSxDQUFDO0tBQ2hFOytHQVZZLDJCQUEyQjttR0FBM0IsMkJBQTJCLDBIQUdsQixnQkFBZ0IsMkRBTWhCLGdCQUFnQiw2QkNoQ3RDLDBjQVFBLHlrQkRVWSxzQkFBc0I7OzRGQUtyQiwyQkFBMkI7a0JBUnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLElBQUksV0FDUCxDQUFDLHNCQUFzQixDQUFDLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ2tDLE9BQU87c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBTUUsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNrZWxldG9uQmxvY2tDb21wb25lbnQgfSBmcm9tICcuLi9za2VsZXRvbi1ibG9jay9za2VsZXRvbi1ibG9jay5jb21wb25lbnQnO1xyXG5cclxuLyoqIE1hbnRpZG8gcG9yIGNvbXBhdGliaWxpZGFkZTsgbyBsYXlvdXQgZG8gc2tlbGV0b24gw6kgw7puaWNvIHBhcmEgdG9kb3Mgb3MgY2FtcG9zLiAqL1xyXG5leHBvcnQgdHlwZSBTa2VsZXRvbkZpZWxkU2hlbGxWYXJpYW50ID0gJ3RleHQnIHwgJ3NlbGVjdCc7XHJcblxyXG4vKipcclxuICogUGxhY2Vob2xkZXIgZGUgY2FtcG86IGJhcnJhIGRlIHZhbG9yIGUsIG9wY2lvbmFsbWVudGUsIHF1YWRyYWRvIMOgIGVzcXVlcmRhIHF1YW5kbyBuw6NvIGjDoVxyXG4gKiDDrWNvbmUgRm9udCBBd2Vzb21lIG5hIGNvbHVuYSBkZSBwcmVmaXhvIGRvIGBhcHAtYmFzZS1maWVsZGAuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1za2VsZXRvbi1maWVsZC1zaGVsbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbU2tlbGV0b25CbG9ja0NvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NrZWxldG9uLWZpZWxkLXNoZWxsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc2tlbGV0b24tZmllbGQtc2hlbGwuY29tcG9uZW50LnNjc3MnLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2tlbGV0b25GaWVsZFNoZWxsQ29tcG9uZW50IHtcclxuICAvKiogQGRlcHJlY2F0ZWQgSWdub3JhZG86IHRvZG9zIG9zIGNhbXBvcyB1c2FtIG8gbWVzbW8gbGF5b3V0LiAqL1xyXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFNrZWxldG9uRmllbGRTaGVsbFZhcmlhbnQgPSAndGV4dCc7XHJcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFuaW1hdGUgPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBRdWFuZG8gYGZhbHNlYCwgbsOjbyByZW5kZXJpemEgbyBxdWFkcmFkbyDDoCBlc3F1ZXJkYSAobyBgYXBwLWJhc2UtZmllbGRgIGrDoSBtb3N0cmEgbyDDrWNvbmVcclxuICAgKiBkZSBwcmVmaXhvIGluZXJ0ZSBuYSBjb2x1bmEgY29ycmVjdGEgZHVyYW50ZSBgbG9hZGluZ2ApLlxyXG4gICAqL1xyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93TGVhZGluZ0ljb24gPSB0cnVlO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJza2VsZXRvbi1maWVsZC1zaGVsbFwiIFtjbGFzcy5za2VsZXRvbi1maWVsZC1zaGVsbC0tYmFyLW9ubHldPVwiIXNob3dMZWFkaW5nSWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gIEBpZiAoc2hvd0xlYWRpbmdJY29uKSB7XHJcbiAgPGFwcC1za2VsZXRvbi1ibG9jayBjbGFzcz1cInNrZWxldG9uLWZpZWxkLXNoZWxsX19wcmVmaXhcIiB3aWR0aD1cIjEuMzVlbVwiIGhlaWdodD1cIjEuMzVlbVwiIHJhZGl1cz1cIjhweFwiXHJcbiAgICBbYW5pbWF0ZV09XCJhbmltYXRlXCIgLz5cclxuICB9XHJcbiAgPGFwcC1za2VsZXRvbi1ibG9jayBjbGFzcz1cInNrZWxldG9uLWZpZWxkLXNoZWxsX192YWx1ZVwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEuMzVlbVwiIHJhZGl1cz1cIjZweFwiXHJcbiAgICBbYW5pbWF0ZV09XCJhbmltYXRlXCIgLz5cclxuPC9kaXY+XHJcbiJdfQ==
|