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.
Files changed (149) hide show
  1. package/esm2022/app/_utils/date-pt-br.utils.mjs +82 -0
  2. package/esm2022/app/_utils/decimal-br.utils.mjs +154 -0
  3. package/esm2022/app/_utils/estados-br.data.mjs +37 -0
  4. package/esm2022/app/_utils/integer-br.utils.mjs +48 -0
  5. package/esm2022/app/_utils/integer-value.utils.mjs +19 -0
  6. package/esm2022/app/_utils/scroll/body-scroll-lock.util.mjs +97 -0
  7. package/esm2022/app/app-shell/_models/breadcrumb-item.model.mjs +2 -0
  8. package/esm2022/app/app-shell/app-shell-sidebar-template.directive.mjs +29 -0
  9. package/esm2022/app/app-shell/app-shell.component.mjs +105 -0
  10. package/esm2022/app/app-shell/breadcrumb/breadcrumb.component.mjs +18 -0
  11. package/esm2022/app/app-shell/index.mjs +19 -0
  12. package/esm2022/app/app-shell/sidebar/app-sidebar-toolbar.directive.mjs +23 -0
  13. package/esm2022/app/app-shell/sidebar/shell-sidebar-toggle.component.mjs +36 -0
  14. package/esm2022/app/app-shell/sidebar/sidebar.component.mjs +84 -0
  15. package/esm2022/app/app-shell/sidebar-reveal.constants.mjs +9 -0
  16. package/esm2022/app/app-shell/topbar/topbar.component.mjs +14 -0
  17. package/esm2022/app/app-shell/user-menu/user-menu.component.mjs +52 -0
  18. package/esm2022/app/buttons/base-button/base-button.component.mjs +97 -0
  19. package/esm2022/app/buttons/index.mjs +2 -0
  20. package/esm2022/app/data-display/_models/card-item-view.model.mjs +2 -0
  21. package/esm2022/app/data-display/_models/data-display.models.mjs +2 -0
  22. package/esm2022/app/data-display/_models/data-grid-column.model.mjs +2 -0
  23. package/esm2022/app/data-display/_models/index.mjs +2 -0
  24. package/esm2022/app/data-display/adaptive-data-view/adaptive-data-view.component.mjs +124 -0
  25. package/esm2022/app/data-display/card-list/card-list.component.mjs +208 -0
  26. package/esm2022/app/data-display/dashboard-section/dashboard-section.component.mjs +25 -0
  27. package/esm2022/app/data-display/data-card/data-card.component.mjs +40 -0
  28. package/esm2022/app/data-display/data-grid/data-grid-actions-cell-renderer.component.mjs +41 -0
  29. package/esm2022/app/data-display/data-grid/data-grid.component.mjs +253 -0
  30. package/esm2022/app/data-display/data-list/data-list.component.mjs +40 -0
  31. package/esm2022/app/data-display/data-toolbar/data-toolbar.component.mjs +12 -0
  32. package/esm2022/app/data-display/details-field/details-field.component.mjs +21 -0
  33. package/esm2022/app/data-display/details-view/details-view.component.mjs +44 -0
  34. package/esm2022/app/data-display/empty-state/empty-state-overlay.util.mjs +19 -0
  35. package/esm2022/app/data-display/empty-state/empty-state.component.mjs +30 -0
  36. package/esm2022/app/data-display/index.mjs +19 -0
  37. package/esm2022/app/data-display/list-item/list-item.component.mjs +59 -0
  38. package/esm2022/app/data-display/stat-card/stat-card.component.mjs +59 -0
  39. package/esm2022/app/data-display/status-badge/status-badge.component.mjs +41 -0
  40. package/esm2022/app/data-display/table-empty-state/table-empty-state.component.mjs +31 -0
  41. package/esm2022/app/data-display/table-toolbar/table-toolbar.component.mjs +22 -0
  42. package/esm2022/app/dialogs/_models/lib-dialog-size.model.mjs +8 -0
  43. package/esm2022/app/dialogs/_utils/app-lib-light-block-scroll-strategy.mjs +22 -0
  44. package/esm2022/app/dialogs/_utils/lib-dialog-panel-classes.mjs +6 -0
  45. package/esm2022/app/dialogs/app-dialog/app-dialog.component.mjs +200 -0
  46. package/esm2022/app/dialogs/app-dialog/dialog-footer.directive.mjs +15 -0
  47. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog-data.model.mjs +2 -0
  48. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.component.mjs +36 -0
  49. package/esm2022/app/dialogs/confirm-dialog/confirm-dialog.service.mjs +47 -0
  50. package/esm2022/app/dialogs/index.mjs +12 -0
  51. package/esm2022/app/dialogs/loading-dialog/loading-dialog-data.model.mjs +2 -0
  52. package/esm2022/app/dialogs/loading-dialog/loading-dialog.component.mjs +19 -0
  53. package/esm2022/app/dialogs/loading-dialog/loading-dialog.service.mjs +38 -0
  54. package/esm2022/app/dialogs/toast/toast-host.component.mjs +65 -0
  55. package/esm2022/app/dialogs/toast/toast.models.mjs +2 -0
  56. package/esm2022/app/dialogs/toast/toast.service.mjs +76 -0
  57. package/esm2022/app/fields/checkbox-fields/_base/boolean-field.directive.mjs +158 -0
  58. package/esm2022/app/fields/checkbox-fields/checkbox-field/checkbox-field.component.mjs +36 -0
  59. package/esm2022/app/fields/checkbox-fields/index.mjs +4 -0
  60. package/esm2022/app/fields/checkbox-fields/switch-field/switch-field.component.mjs +35 -0
  61. package/esm2022/app/fields/dropdown-fields/_base/dropdown-base/dropdown-base.component.mjs +117 -0
  62. package/esm2022/app/fields/dropdown-fields/_base/dropdown-multi-option-field.base.mjs +152 -0
  63. package/esm2022/app/fields/dropdown-fields/_base/dropdown-option-field.base.mjs +149 -0
  64. package/esm2022/app/fields/dropdown-fields/_base/dropdown-trigger-blur.util.mjs +32 -0
  65. package/esm2022/app/fields/dropdown-fields/_models/dropdown-list-bindings.model.mjs +2 -0
  66. package/esm2022/app/fields/dropdown-fields/_models/dropdown-search-page-requested.model.mjs +2 -0
  67. package/esm2022/app/fields/dropdown-fields/_models/index.mjs +2 -0
  68. package/esm2022/app/fields/dropdown-fields/_models/select-option.model.mjs +2 -0
  69. package/esm2022/app/fields/dropdown-fields/_models/select-pagination.model.mjs +2 -0
  70. package/esm2022/app/fields/dropdown-fields/dropdown-search-field/dropdown-search-field.component.mjs +520 -0
  71. package/esm2022/app/fields/dropdown-fields/index.mjs +7 -0
  72. package/esm2022/app/fields/dropdown-fields/multiselect-field/multiselect-field.component.mjs +379 -0
  73. package/esm2022/app/fields/dropdown-fields/select-field/select-field.component.mjs +359 -0
  74. package/esm2022/app/fields/input-fields/_base/base-field.component.mjs +151 -0
  75. package/esm2022/app/fields/input-fields/_base/base-field.directive.mjs +224 -0
  76. package/esm2022/app/fields/input-fields/_base/masked-text-field.base.mjs +135 -0
  77. package/esm2022/app/fields/input-fields/_base/ng-control-field.directive.mjs +127 -0
  78. package/esm2022/app/fields/input-fields/_models/field-common-inputs.model.mjs +2 -0
  79. package/esm2022/app/fields/input-fields/_models/index.mjs +2 -0
  80. package/esm2022/app/fields/input-fields/_utils/mask-complete.validators.mjs +61 -0
  81. package/esm2022/app/fields/input-fields/_utils/mask-format.utils.mjs +40 -0
  82. package/esm2022/app/fields/input-fields/cep-field/cep-field.component.mjs +48 -0
  83. package/esm2022/app/fields/input-fields/cpf-cnpj-field/cpf-cnpj-field.component.mjs +61 -0
  84. package/esm2022/app/fields/input-fields/date-field/date-field.component.mjs +147 -0
  85. package/esm2022/app/fields/input-fields/decimal-field/decimal-field.component.mjs +166 -0
  86. package/esm2022/app/fields/input-fields/index.mjs +22 -0
  87. package/esm2022/app/fields/input-fields/input-mask-field/input-mask-field.component.mjs +52 -0
  88. package/esm2022/app/fields/input-fields/integer-field/integer-field.component.mjs +143 -0
  89. package/esm2022/app/fields/input-fields/password-field/password-field.component.mjs +130 -0
  90. package/esm2022/app/fields/input-fields/phone-field/phone-field.component.mjs +66 -0
  91. package/esm2022/app/fields/input-fields/text-field/text-field.component.mjs +90 -0
  92. package/esm2022/app/fields/input-fields/textarea-field/textarea-field.component.mjs +125 -0
  93. package/esm2022/app/form-layout/_models/form-layout.model.mjs +48 -0
  94. package/esm2022/app/form-layout/_models/form-tabs.model.mjs +2 -0
  95. package/esm2022/app/form-layout/_models/index.mjs +2 -0
  96. package/esm2022/app/form-layout/_models/validation-summary.model.mjs +2 -0
  97. package/esm2022/app/form-layout/form-actions/form-actions.component.mjs +55 -0
  98. package/esm2022/app/form-layout/form-col/form-col.component.mjs +76 -0
  99. package/esm2022/app/form-layout/form-group/form-group.component.mjs +358 -0
  100. package/esm2022/app/form-layout/form-group/form-path.utils.mjs +65 -0
  101. package/esm2022/app/form-layout/form-group/form-root-invalid-ui-refresh.util.mjs +54 -0
  102. package/esm2022/app/form-layout/form-row/form-row.component.mjs +49 -0
  103. package/esm2022/app/form-layout/form-section/form-section.component.mjs +43 -0
  104. package/esm2022/app/form-layout/form-tab/form-tab.component.mjs +67 -0
  105. package/esm2022/app/form-layout/form-tabs/form-tabs.component.mjs +126 -0
  106. package/esm2022/app/form-layout/index.mjs +14 -0
  107. package/esm2022/app/form-layout/layout-stack/layout-stack.component.mjs +56 -0
  108. package/esm2022/app/form-layout/validation-summary/validation-summary.component.mjs +343 -0
  109. package/esm2022/app/loading/skeleton-loading/index.mjs +7 -0
  110. package/esm2022/app/loading/skeleton-loading/skeleton-block/skeleton-block.component.mjs +43 -0
  111. package/esm2022/app/loading/skeleton-loading/skeleton-card/skeleton-card.component.mjs +23 -0
  112. package/esm2022/app/loading/skeleton-loading/skeleton-field-shell/skeleton-field-shell.component.mjs +34 -0
  113. package/esm2022/app/loading/skeleton-loading/skeleton-list/skeleton-list.component.mjs +38 -0
  114. package/esm2022/app/loading/skeleton-loading/skeleton-table/skeleton-table.component.mjs +37 -0
  115. package/esm2022/app/loading/skeleton-loading/skeleton-text/skeleton-text.component.mjs +45 -0
  116. package/esm2022/app/menus/_models/drawer-side.model.mjs +8 -0
  117. package/esm2022/app/menus/_models/drawer-size.model.mjs +8 -0
  118. package/esm2022/app/menus/_models/menu-dropdown-placement.model.mjs +12 -0
  119. package/esm2022/app/menus/_models/menu-item.model.mjs +6 -0
  120. package/esm2022/app/menus/_utils/menu-connected-positions.util.mjs +41 -0
  121. package/esm2022/app/menus/_utils/menu-rows.util.mjs +39 -0
  122. package/esm2022/app/menus/_utils/submenu-connected-positions.util.mjs +23 -0
  123. package/esm2022/app/menus/action-menu/action-menu.component.mjs +48 -0
  124. package/esm2022/app/menus/context-menu/context-menu.component.mjs +112 -0
  125. package/esm2022/app/menus/drawer/drawer.component.mjs +142 -0
  126. package/esm2022/app/menus/dropdown-menu/dropdown-menu.component.mjs +99 -0
  127. package/esm2022/app/menus/index.mjs +11 -0
  128. package/esm2022/app/menus/menu-divider/menu-divider.component.mjs +14 -0
  129. package/esm2022/app/menus/menu-group/menu-group.component.mjs +32 -0
  130. package/esm2022/app/menus/menu-list/menu-list.component.mjs +399 -0
  131. package/esm2022/app/overlay/_models/overlay-placement.model.mjs +11 -0
  132. package/esm2022/app/overlay/_utils/anchored-overlay-positions.util.mjs +84 -0
  133. package/esm2022/app/overlay/anchored-overlay/anchored-overlay.component.mjs +121 -0
  134. package/esm2022/app/overlay/index.mjs +21 -0
  135. package/esm2022/app/overlay/popover/popover-body-template.directive.mjs +17 -0
  136. package/esm2022/app/overlay/popover/popover-footer-template.directive.mjs +17 -0
  137. package/esm2022/app/overlay/popover/popover-trigger.directive.mjs +15 -0
  138. package/esm2022/app/overlay/popover/popover.component.mjs +93 -0
  139. package/esm2022/app/overlay/tooltip/tooltip-panel-template.directive.mjs +20 -0
  140. package/esm2022/app/overlay/tooltip/tooltip.component.mjs +118 -0
  141. package/esm2022/app/theme/app-theme.service.mjs +49 -0
  142. package/esm2022/app/theme/index.mjs +2 -0
  143. package/esm2022/structra-public-api.mjs +18 -0
  144. package/esm2022/structra-ui.mjs +5 -0
  145. package/esm2022/structra-version.mjs +3 -0
  146. package/fesm2022/structra-ui.mjs +8971 -0
  147. package/fesm2022/structra-ui.mjs.map +1 -0
  148. package/index.d.ts +5 -0
  149. 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=
@@ -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==