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,399 @@
1
+ import { NgClass } from '@angular/common';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChildren, booleanAttribute, computed, forwardRef, inject, } from '@angular/core';
3
+ import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
4
+ import { AppThemeService } from '../../theme';
5
+ import { MenuDividerComponent } from '../menu-divider/menu-divider.component';
6
+ import { MenuGroupComponent } from '../menu-group/menu-group.component';
7
+ import { buildMenuRows, focusableActionCount, } from '../_utils/menu-rows.util';
8
+ import { submenuConnectedPositions } from '../_utils/submenu-connected-positions.util';
9
+ import * as i0 from "@angular/core";
10
+ const SUBMENU_OPEN_MS = 220;
11
+ const SUBMENU_CLOSE_MS = 160;
12
+ export class MenuListComponent {
13
+ constructor() {
14
+ this.cdr = inject(ChangeDetectorRef);
15
+ this.appTheme = inject(AppThemeService);
16
+ this.hostRef = inject((ElementRef));
17
+ this.items = [];
18
+ /** Prefixo dos `id` das opções focáveis (`${menuId}-opt-${focusIndex}`). */
19
+ this.menuId = 'app-menu';
20
+ this.dense = false;
21
+ /** Quando `true`, o menu está dentro de um submenu — seta ← regressa um nível. */
22
+ this.nested = false;
23
+ /**
24
+ * Destaca visualmente o item cuja `id` coincide (navegação actual / rota activa).
25
+ * Só aplica a linhas `kind: 'item'` neste nível.
26
+ */
27
+ this.selectedItemId = null;
28
+ /**
29
+ * Oculta rótulos e descrições (ex.: sidebar colapsada), mantendo ícones; define `title` nativo para hover.
30
+ */
31
+ this.compressText = false;
32
+ this.itemSelect = new EventEmitter();
33
+ this.closeRequest = new EventEmitter();
34
+ this.submenuBack = new EventEmitter();
35
+ this.rows = [];
36
+ this.focusableCount = 0;
37
+ /** Índice entre `0` e `focusableCount - 1`, ou `-1` = nenhum realce. */
38
+ this.activeIndex = -1;
39
+ /** Painel de submenu aberto (um por instância de lista). */
40
+ this.openSubmenuKey = null;
41
+ this.submenuOpenTimer = null;
42
+ this.submenuCloseTimer = null;
43
+ this.submenuPositions = submenuConnectedPositions();
44
+ this.panelThemeNgClass = computed(() => {
45
+ const themeClass = this.appTheme.themeClass();
46
+ return {
47
+ 'app-library-theme': true,
48
+ [themeClass]: true,
49
+ };
50
+ });
51
+ }
52
+ overlayPanelClasses() {
53
+ return ['app-library-theme', this.appTheme.themeClass(), 'menu-submenu__cdk-panel'];
54
+ }
55
+ onNestedItemSelect(id) {
56
+ this.closeOpenSubmenu();
57
+ this.itemSelect.emit(id);
58
+ }
59
+ ngOnChanges(changes) {
60
+ if (changes['items']) {
61
+ this.rows = buildMenuRows(this.items ?? []);
62
+ this.focusableCount = focusableActionCount(this.rows);
63
+ if (this.focusableCount === 0) {
64
+ this.activeIndex = -1;
65
+ }
66
+ else if (this.activeIndex >= this.focusableCount) {
67
+ this.activeIndex = -1;
68
+ }
69
+ }
70
+ }
71
+ submenuRowKey(row, index) {
72
+ return row.kind === 'submenu' ? `sm-${String(row.item.id)}-${index}` : '';
73
+ }
74
+ isSubmenuOpen(row, index) {
75
+ return (row.kind === 'submenu' && this.openSubmenuKey === this.submenuRowKey(row, index));
76
+ }
77
+ submenuMenuId(row) {
78
+ if (row.kind !== 'submenu') {
79
+ return this.menuId;
80
+ }
81
+ return `${this.menuId}-sub-${String(row.item.id)}`;
82
+ }
83
+ onRowMouseEnter(row) {
84
+ if (row.kind !== 'action' && row.kind !== 'submenu') {
85
+ return;
86
+ }
87
+ if (row.focusIndex === null) {
88
+ return;
89
+ }
90
+ this.activeIndex = row.focusIndex;
91
+ this.cdr.markForCheck();
92
+ }
93
+ onSubmenuTriggerEnter(row, index) {
94
+ if (row.kind !== 'submenu' || row.item.disabled) {
95
+ return;
96
+ }
97
+ this.cancelSubmenuCloseTimer();
98
+ this.cancelSubmenuOpenTimer();
99
+ if (row.focusIndex !== null) {
100
+ this.activeIndex = row.focusIndex;
101
+ }
102
+ const key = this.submenuRowKey(row, index);
103
+ this.submenuOpenTimer = setTimeout(() => {
104
+ this.submenuOpenTimer = null;
105
+ this.openSubmenuKey = key;
106
+ this.queueFocusNestedFirst();
107
+ this.cdr.markForCheck();
108
+ }, SUBMENU_OPEN_MS);
109
+ this.cdr.markForCheck();
110
+ }
111
+ onSubmenuTriggerLeave(_row, index) {
112
+ this.cancelSubmenuOpenTimer();
113
+ this.scheduleSubmenuClose(index);
114
+ }
115
+ onSubmenuPanelEnter() {
116
+ this.cancelSubmenuCloseTimer();
117
+ }
118
+ onSubmenuPanelLeave(row, index) {
119
+ this.scheduleSubmenuClose(index);
120
+ }
121
+ scheduleSubmenuClose(index) {
122
+ this.cancelSubmenuCloseTimer();
123
+ this.submenuCloseTimer = setTimeout(() => {
124
+ this.submenuCloseTimer = null;
125
+ const row = this.rows[index];
126
+ if (row?.kind === 'submenu') {
127
+ const key = this.submenuRowKey(row, index);
128
+ if (this.openSubmenuKey === key) {
129
+ this.openSubmenuKey = null;
130
+ this.cdr.markForCheck();
131
+ }
132
+ }
133
+ }, SUBMENU_CLOSE_MS);
134
+ }
135
+ cancelSubmenuOpenTimer() {
136
+ if (this.submenuOpenTimer) {
137
+ clearTimeout(this.submenuOpenTimer);
138
+ this.submenuOpenTimer = null;
139
+ }
140
+ }
141
+ cancelSubmenuCloseTimer() {
142
+ if (this.submenuCloseTimer) {
143
+ clearTimeout(this.submenuCloseTimer);
144
+ this.submenuCloseTimer = null;
145
+ }
146
+ }
147
+ /** Fecha o submenu deste nível (seta ← no filho ou fecho de irmão). */
148
+ closeOpenSubmenu() {
149
+ this.cancelSubmenuOpenTimer();
150
+ this.cancelSubmenuCloseTimer();
151
+ this.openSubmenuKey = null;
152
+ this.cdr.markForCheck();
153
+ }
154
+ onSubmenuRowClick(ev, row, index) {
155
+ if (row.kind !== 'submenu') {
156
+ return;
157
+ }
158
+ if (row.item.disabled) {
159
+ ev.preventDefault();
160
+ ev.stopPropagation();
161
+ return;
162
+ }
163
+ ev.preventDefault();
164
+ const key = this.submenuRowKey(row, index);
165
+ if (this.openSubmenuKey === key) {
166
+ this.closeOpenSubmenu();
167
+ }
168
+ else {
169
+ this.openSubmenuKey = key;
170
+ this.queueFocusNestedFirst();
171
+ this.cdr.markForCheck();
172
+ }
173
+ }
174
+ onSubmenuOutsideClick(row, index) {
175
+ if (row.kind === 'submenu' && this.isSubmenuOpen(row, index)) {
176
+ this.closeOpenSubmenu();
177
+ }
178
+ }
179
+ openSubmenuForRowAt(index) {
180
+ const row = this.rows[index];
181
+ if (row?.kind !== 'submenu' || row.item.disabled) {
182
+ return;
183
+ }
184
+ this.openSubmenuKey = this.submenuRowKey(row, index);
185
+ this.queueFocusNestedFirst();
186
+ this.cdr.markForCheck();
187
+ }
188
+ queueFocusNestedFirst() {
189
+ queueMicrotask(() => {
190
+ const nested = this.nestedLists?.last;
191
+ nested?.focusFirstOption();
192
+ });
193
+ }
194
+ /** Primeira opção focável (abertura por teclado). */
195
+ focusFirstOption() {
196
+ if (this.focusableCount === 0) {
197
+ return;
198
+ }
199
+ this.activeIndex = 0;
200
+ this.focusActiveDom();
201
+ this.cdr.markForCheck();
202
+ }
203
+ onItemClick(ev, item) {
204
+ if (item.disabled || item.loading) {
205
+ ev.preventDefault();
206
+ ev.stopPropagation();
207
+ return;
208
+ }
209
+ ev.preventDefault();
210
+ this.closeOpenSubmenu();
211
+ this.itemSelect.emit(item.id);
212
+ }
213
+ optionId(focusIndex) {
214
+ return `${this.menuId}-opt-${focusIndex}`;
215
+ }
216
+ isActiveRow(row) {
217
+ if (this.activeIndex < 0) {
218
+ return false;
219
+ }
220
+ if (row.kind === 'action' || row.kind === 'submenu') {
221
+ return row.focusIndex !== null && row.focusIndex === this.activeIndex;
222
+ }
223
+ return false;
224
+ }
225
+ /** Realce de selecção persistente (ex.: item de navegação activo). */
226
+ isRowSelected(row) {
227
+ if (this.selectedItemId == null) {
228
+ return false;
229
+ }
230
+ if (row.kind === 'action') {
231
+ return row.item.id === this.selectedItemId;
232
+ }
233
+ if (row.kind === 'submenu') {
234
+ return row.item.id === this.selectedItemId;
235
+ }
236
+ return false;
237
+ }
238
+ resetHighlight() {
239
+ this.activeIndex = -1;
240
+ this.cdr.markForCheck();
241
+ }
242
+ onMenuSurfaceLeave() {
243
+ if (this.openSubmenuKey !== null) {
244
+ return;
245
+ }
246
+ this.activeIndex = -1;
247
+ this.cdr.markForCheck();
248
+ }
249
+ focusActiveDom() {
250
+ if (this.activeIndex < 0) {
251
+ return;
252
+ }
253
+ const id = this.optionId(this.activeIndex);
254
+ const el = this.hostRef.nativeElement.querySelector(`#${CSS.escape(id)}`);
255
+ el?.focus({ preventScroll: true });
256
+ }
257
+ onKeydown(ev) {
258
+ if (ev.key === 'ArrowLeft' && this.nested) {
259
+ ev.preventDefault();
260
+ this.submenuBack.emit();
261
+ return;
262
+ }
263
+ if (this.focusableCount === 0) {
264
+ return;
265
+ }
266
+ const n = this.focusableCount;
267
+ switch (ev.key) {
268
+ case 'ArrowDown':
269
+ ev.preventDefault();
270
+ if (this.activeIndex < 0) {
271
+ this.activeIndex = 0;
272
+ }
273
+ else {
274
+ this.activeIndex = (this.activeIndex + 1) % n;
275
+ }
276
+ this.focusActiveDom();
277
+ this.cdr.markForCheck();
278
+ break;
279
+ case 'ArrowUp':
280
+ ev.preventDefault();
281
+ if (this.activeIndex < 0) {
282
+ this.activeIndex = n - 1;
283
+ }
284
+ else {
285
+ this.activeIndex = (this.activeIndex - 1 + n) % n;
286
+ }
287
+ this.focusActiveDom();
288
+ this.cdr.markForCheck();
289
+ break;
290
+ case 'Home':
291
+ ev.preventDefault();
292
+ this.activeIndex = 0;
293
+ this.focusActiveDom();
294
+ this.cdr.markForCheck();
295
+ break;
296
+ case 'End':
297
+ ev.preventDefault();
298
+ this.activeIndex = n - 1;
299
+ this.focusActiveDom();
300
+ this.cdr.markForCheck();
301
+ break;
302
+ case 'ArrowRight': {
303
+ if (this.activeIndex < 0) {
304
+ break;
305
+ }
306
+ let handled = false;
307
+ for (let i = 0; i < this.rows.length; i++) {
308
+ const r = this.rows[i];
309
+ if (r.kind === 'submenu' &&
310
+ r.focusIndex === this.activeIndex &&
311
+ !r.item.disabled) {
312
+ ev.preventDefault();
313
+ this.openSubmenuForRowAt(i);
314
+ handled = true;
315
+ break;
316
+ }
317
+ }
318
+ if (!handled) {
319
+ /* deixar propagar para o campo, se necessário */
320
+ }
321
+ break;
322
+ }
323
+ case 'Enter':
324
+ case ' ': {
325
+ ev.preventDefault();
326
+ for (let i = 0; i < this.rows.length; i++) {
327
+ const r = this.rows[i];
328
+ if (r.kind !== 'action' && r.kind !== 'submenu') {
329
+ continue;
330
+ }
331
+ if (r.focusIndex !== this.activeIndex || r.focusIndex === null) {
332
+ continue;
333
+ }
334
+ if (r.kind === 'action') {
335
+ if (r.item.disabled || r.item.loading) {
336
+ break;
337
+ }
338
+ this.itemSelect.emit(r.item.id);
339
+ break;
340
+ }
341
+ if (r.item.disabled) {
342
+ break;
343
+ }
344
+ this.openSubmenuForRowAt(i);
345
+ break;
346
+ }
347
+ break;
348
+ }
349
+ case 'Escape':
350
+ ev.preventDefault();
351
+ this.closeRequest.emit();
352
+ break;
353
+ default:
354
+ break;
355
+ }
356
+ }
357
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
358
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MenuListComponent, isStandalone: true, selector: "app-menu-list", inputs: { items: "items", menuId: "menuId", dense: ["dense", "dense", booleanAttribute], nested: ["nested", "nested", booleanAttribute], selectedItemId: "selectedItemId", compressText: ["compressText", "compressText", booleanAttribute] }, outputs: { itemSelect: "itemSelect", closeRequest: "closeRequest", submenuBack: "submenuBack" }, host: { listeners: { "keydown": "onKeydown($event)" } }, viewQueries: [{ propertyName: "nestedLists", predicate: MenuListComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"menu-list\"\n [class.menu-list--dense]=\"dense\"\n [class.menu-list--compress-text]=\"compressText\"\n role=\"menu\"\n [attr.aria-labelledby]=\"null\"\n tabindex=\"-1\"\n (mouseleave)=\"onMenuSurfaceLeave()\"\n>\n @for (row of rows; track idx; let idx = $index) {\n @switch (row.kind) {\n @case ('divider') {\n <app-menu-divider />\n }\n @case ('group') {\n <app-menu-group [label]=\"row.label\" [hideLabel]=\"compressText\" />\n }\n @case ('submenu') {\n <div\n class=\"menu-list__submenu-wrap\"\n cdkOverlayOrigin\n #subOrigin=\"cdkOverlayOrigin\"\n (mouseenter)=\"onSubmenuTriggerEnter(row, idx)\"\n (mouseleave)=\"onSubmenuTriggerLeave(row, idx)\"\n >\n <div\n class=\"menu-list__option menu-list__option--submenu\"\n role=\"menuitem\"\n [attr.aria-haspopup]=\"'true'\"\n [attr.aria-expanded]=\"isSubmenuOpen(row, idx)\"\n [id]=\"row.focusIndex !== null ? optionId(row.focusIndex) : null\"\n [attr.tabindex]=\"row.focusIndex !== null && !row.item.disabled ? (isActiveRow(row) ? 0 : -1) : -1\"\n [attr.aria-disabled]=\"row.item.disabled ? true : null\"\n [attr.title]=\"compressText ? row.item.label : null\"\n [attr.aria-label]=\"compressText ? row.item.label : null\"\n [class.menu-list__option--disabled]=\"row.item.disabled\"\n [class.menu-list__option--active]=\"isActiveRow(row)\"\n [class.menu-list__option--selected]=\"isRowSelected(row)\"\n (click)=\"onSubmenuRowClick($event, row, idx)\"\n (mouseenter)=\"onRowMouseEnter(row)\"\n >\n @if (row.item.icon?.trim()) {\n <span class=\"menu-list__icon\" aria-hidden=\"true\">\n <i [ngClass]=\"row.item.icon\"></i>\n </span>\n }\n <span class=\"menu-list__text\">\n <span class=\"menu-list__label\">{{ row.item.label }}</span>\n @if (row.item.description?.trim()) {\n <span class=\"menu-list__description\">{{ row.item.description }}</span>\n }\n </span>\n <span class=\"menu-list__submenu-chevron\" aria-hidden=\"true\">\u203A</span>\n </div>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"subOrigin\"\n [cdkConnectedOverlayOpen]=\"isSubmenuOpen(row, idx)\"\n [cdkConnectedOverlayPositions]=\"submenuPositions\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClasses()\"\n [cdkConnectedOverlayMinWidth]=\"200\"\n (overlayOutsideClick)=\"onSubmenuOutsideClick(row, idx)\"\n >\n <div\n class=\"menu-submenu__panel\"\n [ngClass]=\"panelThemeNgClass()\"\n (mouseenter)=\"onSubmenuPanelEnter()\"\n (mouseleave)=\"onSubmenuPanelLeave(row, idx)\"\n (click)=\"$event.stopPropagation()\"\n >\n <app-menu-list\n [items]=\"row.item.items\"\n [menuId]=\"submenuMenuId(row)\"\n [nested]=\"true\"\n [dense]=\"dense\"\n [compressText]=\"compressText\"\n [selectedItemId]=\"selectedItemId\"\n (itemSelect)=\"onNestedItemSelect($event)\"\n (closeRequest)=\"closeRequest.emit()\"\n (submenuBack)=\"closeOpenSubmenu()\"\n />\n </div>\n </ng-template>\n </div>\n }\n @case ('action') {\n <div\n class=\"menu-list__option\"\n role=\"menuitem\"\n [id]=\"row.focusIndex !== null ? optionId(row.focusIndex) : null\"\n [attr.tabindex]=\"row.focusIndex !== null && !row.item.disabled ? (isActiveRow(row) ? 0 : -1) : -1\"\n [attr.aria-disabled]=\"row.item.disabled ? true : null\"\n [attr.aria-busy]=\"row.item.loading ? true : null\"\n [attr.title]=\"compressText ? row.item.label : null\"\n [attr.aria-label]=\"compressText ? row.item.label : null\"\n [class.menu-list__option--disabled]=\"row.item.disabled\"\n [class.menu-list__option--loading]=\"row.item.loading\"\n [class.menu-list__option--danger]=\"row.item.danger\"\n [class.menu-list__option--active]=\"isActiveRow(row)\"\n [class.menu-list__option--selected]=\"isRowSelected(row)\"\n (click)=\"onItemClick($event, row.item)\"\n (mouseenter)=\"onRowMouseEnter(row)\"\n >\n @if (row.item.loading) {\n <span class=\"menu-list__icon menu-list__icon--spin\" aria-hidden=\"true\">\n <i class=\"fa-solid fa-spinner\"></i>\n </span>\n } @else if (row.item.icon?.trim()) {\n <span class=\"menu-list__icon\" aria-hidden=\"true\">\n <i [ngClass]=\"row.item.icon\"></i>\n </span>\n }\n <span class=\"menu-list__text\">\n <span class=\"menu-list__label\">{{ row.item.label }}</span>\n @if (row.item.description?.trim()) {\n <span class=\"menu-list__description\">{{ row.item.description }}</span>\n }\n </span>\n </div>\n }\n }\n }\n</div>\n", styles: ["@charset \"UTF-8\";@keyframes app-sidebar-nav-reveal-in{0%{opacity:0;transform:translate3d(-.45rem,0,0)}to{opacity:1;transform:translateZ(0)}}:host{display:block;min-width:0;box-sizing:border-box}.menu-list{background:var(--app-color-surface, #ffffff);border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .12));border-radius:10px;box-shadow:0 10px 28px -14px #0f172a29;max-height:min(70vh,22rem);overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;gap:.1rem;padding:.45rem 0;outline:none}.menu-list--dense{padding:.2rem 0;gap:0}.menu-list__submenu-wrap{position:relative;display:block}.menu-list__option{display:flex;align-items:center;box-sizing:border-box;gap:.5rem;margin:0 .25rem;padding:.48rem .6rem;border-radius:8px;cursor:pointer;color:var(--app-color-text-primary, #1a2f45);background:transparent;border:1px solid transparent;text-align:left;font:inherit;line-height:1.25}.menu-list__option:focus-visible{outline:2px solid var(--app-color-focus-ring-strong, rgba(43, 127, 217, .45));outline-offset:1px}.menu-list__option:hover:not(.menu-list__option--disabled):not(.menu-list__option--loading){background:color-mix(in srgb,var(--app-color-primary) 6%,transparent)}.menu-list__option.menu-list__option--active:not(.menu-list__option--disabled):not(.menu-list__option--loading){background:color-mix(in srgb,var(--app-color-primary) 7%,transparent);border-color:transparent;box-shadow:none}.menu-list__option.menu-list__option--disabled{cursor:not-allowed;color:var(--app-color-text-muted, #6b8299);background:transparent;opacity:.72}.menu-list__option.menu-list__option--loading{cursor:wait;opacity:.92;pointer-events:none}.menu-list__option.menu-list__option--danger:not(.menu-list__option--disabled):not(.menu-list__option--loading){color:var(--app-color-error, #b91c1c)}.menu-list__option.menu-list__option--danger:not(.menu-list__option--disabled):not(.menu-list__option--loading):hover,.menu-list__option.menu-list__option--danger:not(.menu-list__option--disabled):not(.menu-list__option--loading).menu-list__option--active{background:var(--app-color-error-bg-subtle, rgba(185, 28, 28, .12));border-color:transparent;box-shadow:inset 2px 0 0 0 var(--app-color-error-border, #dc2626)}.menu-list__option--submenu{padding-right:.35rem}.menu-list__option--selected:not(.menu-list__option--disabled){background:color-mix(in srgb,var(--app-color-primary) 9%,transparent);border-radius:8px;border-color:transparent;box-shadow:inset 2px 0 0 0 var(--app-color-primary, #2b7fd9)}.menu-list__option--selected:not(.menu-list__option--disabled) .menu-list__label{color:var(--app-color-primary, #2b7fd9);font-weight:600}.menu-list__option--selected:not(.menu-list__option--disabled) .menu-list__icon{color:var(--app-color-primary, #2b7fd9)}.menu-list--compress-text .menu-list__label,.menu-list--compress-text .menu-list__description{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.menu-list--compress-text .menu-list__text,.menu-list--compress-text .menu-list__submenu-chevron{display:none}.menu-list--compress-text .menu-list__submenu-wrap{width:100%}.menu-list--compress-text .menu-list__option{justify-content:center;align-items:center;text-align:center;width:calc(100% - .5rem);max-width:100%;box-sizing:border-box;margin-left:.25rem;margin-right:.25rem;padding:.5rem .35rem}.menu-list--compress-text .menu-list__option--submenu{padding-left:.35rem;padding-right:.35rem}.menu-list--compress-text .menu-list__icon{flex:0 0 auto;width:auto;min-width:1.75rem;display:inline-flex;align-items:center;justify-content:center;padding-top:0}.menu-list__submenu-chevron{flex:0 0 auto;margin-left:auto;padding-left:.35rem;font-size:1rem;line-height:1;color:var(--app-color-text-muted, #6b8299);opacity:.85}.menu-list__icon{flex:0 0 auto;width:1.25rem;height:1.25rem;min-height:1.25rem;display:inline-flex;align-items:center;justify-content:center;text-align:center;color:var(--app-color-text-secondary, #5a7fa3);line-height:1}.menu-list__icon i{display:flex;align-items:center;justify-content:center;width:100%;height:100%;line-height:1;font-size:.95rem}.menu-list__option--disabled .menu-list__icon{opacity:.55}.menu-list__icon--spin i{animation:menu-list-spin .8s linear infinite}.menu-list__text{display:flex;flex-direction:column;gap:.1rem;min-width:0;flex:1}.menu-list__label{font-size:.875rem;font-weight:500;line-height:1.25rem;display:inline-flex;align-items:center;min-height:1.25rem}.menu-list__description{font-size:.75rem;color:var(--app-color-text-muted, #6b8299);line-height:1.3}.menu-list:not(.menu-list--compress-text){animation:app-sidebar-nav-reveal-in .45s cubic-bezier(.16,1,.32,1) both}@media (prefers-reduced-motion: reduce){.menu-list:not(.menu-list--compress-text){animation:none}}.menu-submenu__panel{box-sizing:border-box;min-width:0;padding:0;background:transparent;border:none;box-shadow:none;border-radius:10px;overflow:hidden}@keyframes menu-list-spin{to{transform:rotate(360deg)}}:host ::ng-deep .menu-submenu__cdk-panel{background:transparent;box-shadow:none;border-radius:10px}\n"], dependencies: [{ kind: "component", type: i0.forwardRef(() => MenuListComponent), selector: "app-menu-list", inputs: ["items", "menuId", "dense", "nested", "selectedItemId", "compressText"], outputs: ["itemSelect", "closeRequest", "submenuBack"] }, { kind: "directive", type: i0.forwardRef(() => NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => CdkConnectedOverlay), selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i0.forwardRef(() => CdkOverlayOrigin), selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: i0.forwardRef(() => MenuDividerComponent), selector: "app-menu-divider" }, { kind: "component", type: i0.forwardRef(() => MenuGroupComponent), selector: "app-menu-group", inputs: ["label", "hideLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
359
+ }
360
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuListComponent, decorators: [{
361
+ type: Component,
362
+ args: [{ selector: 'app-menu-list', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
363
+ NgClass,
364
+ forwardRef(() => MenuListComponent),
365
+ CdkConnectedOverlay,
366
+ CdkOverlayOrigin,
367
+ MenuDividerComponent,
368
+ MenuGroupComponent,
369
+ ], template: "<div\n class=\"menu-list\"\n [class.menu-list--dense]=\"dense\"\n [class.menu-list--compress-text]=\"compressText\"\n role=\"menu\"\n [attr.aria-labelledby]=\"null\"\n tabindex=\"-1\"\n (mouseleave)=\"onMenuSurfaceLeave()\"\n>\n @for (row of rows; track idx; let idx = $index) {\n @switch (row.kind) {\n @case ('divider') {\n <app-menu-divider />\n }\n @case ('group') {\n <app-menu-group [label]=\"row.label\" [hideLabel]=\"compressText\" />\n }\n @case ('submenu') {\n <div\n class=\"menu-list__submenu-wrap\"\n cdkOverlayOrigin\n #subOrigin=\"cdkOverlayOrigin\"\n (mouseenter)=\"onSubmenuTriggerEnter(row, idx)\"\n (mouseleave)=\"onSubmenuTriggerLeave(row, idx)\"\n >\n <div\n class=\"menu-list__option menu-list__option--submenu\"\n role=\"menuitem\"\n [attr.aria-haspopup]=\"'true'\"\n [attr.aria-expanded]=\"isSubmenuOpen(row, idx)\"\n [id]=\"row.focusIndex !== null ? optionId(row.focusIndex) : null\"\n [attr.tabindex]=\"row.focusIndex !== null && !row.item.disabled ? (isActiveRow(row) ? 0 : -1) : -1\"\n [attr.aria-disabled]=\"row.item.disabled ? true : null\"\n [attr.title]=\"compressText ? row.item.label : null\"\n [attr.aria-label]=\"compressText ? row.item.label : null\"\n [class.menu-list__option--disabled]=\"row.item.disabled\"\n [class.menu-list__option--active]=\"isActiveRow(row)\"\n [class.menu-list__option--selected]=\"isRowSelected(row)\"\n (click)=\"onSubmenuRowClick($event, row, idx)\"\n (mouseenter)=\"onRowMouseEnter(row)\"\n >\n @if (row.item.icon?.trim()) {\n <span class=\"menu-list__icon\" aria-hidden=\"true\">\n <i [ngClass]=\"row.item.icon\"></i>\n </span>\n }\n <span class=\"menu-list__text\">\n <span class=\"menu-list__label\">{{ row.item.label }}</span>\n @if (row.item.description?.trim()) {\n <span class=\"menu-list__description\">{{ row.item.description }}</span>\n }\n </span>\n <span class=\"menu-list__submenu-chevron\" aria-hidden=\"true\">\u203A</span>\n </div>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"subOrigin\"\n [cdkConnectedOverlayOpen]=\"isSubmenuOpen(row, idx)\"\n [cdkConnectedOverlayPositions]=\"submenuPositions\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayPanelClass]=\"overlayPanelClasses()\"\n [cdkConnectedOverlayMinWidth]=\"200\"\n (overlayOutsideClick)=\"onSubmenuOutsideClick(row, idx)\"\n >\n <div\n class=\"menu-submenu__panel\"\n [ngClass]=\"panelThemeNgClass()\"\n (mouseenter)=\"onSubmenuPanelEnter()\"\n (mouseleave)=\"onSubmenuPanelLeave(row, idx)\"\n (click)=\"$event.stopPropagation()\"\n >\n <app-menu-list\n [items]=\"row.item.items\"\n [menuId]=\"submenuMenuId(row)\"\n [nested]=\"true\"\n [dense]=\"dense\"\n [compressText]=\"compressText\"\n [selectedItemId]=\"selectedItemId\"\n (itemSelect)=\"onNestedItemSelect($event)\"\n (closeRequest)=\"closeRequest.emit()\"\n (submenuBack)=\"closeOpenSubmenu()\"\n />\n </div>\n </ng-template>\n </div>\n }\n @case ('action') {\n <div\n class=\"menu-list__option\"\n role=\"menuitem\"\n [id]=\"row.focusIndex !== null ? optionId(row.focusIndex) : null\"\n [attr.tabindex]=\"row.focusIndex !== null && !row.item.disabled ? (isActiveRow(row) ? 0 : -1) : -1\"\n [attr.aria-disabled]=\"row.item.disabled ? true : null\"\n [attr.aria-busy]=\"row.item.loading ? true : null\"\n [attr.title]=\"compressText ? row.item.label : null\"\n [attr.aria-label]=\"compressText ? row.item.label : null\"\n [class.menu-list__option--disabled]=\"row.item.disabled\"\n [class.menu-list__option--loading]=\"row.item.loading\"\n [class.menu-list__option--danger]=\"row.item.danger\"\n [class.menu-list__option--active]=\"isActiveRow(row)\"\n [class.menu-list__option--selected]=\"isRowSelected(row)\"\n (click)=\"onItemClick($event, row.item)\"\n (mouseenter)=\"onRowMouseEnter(row)\"\n >\n @if (row.item.loading) {\n <span class=\"menu-list__icon menu-list__icon--spin\" aria-hidden=\"true\">\n <i class=\"fa-solid fa-spinner\"></i>\n </span>\n } @else if (row.item.icon?.trim()) {\n <span class=\"menu-list__icon\" aria-hidden=\"true\">\n <i [ngClass]=\"row.item.icon\"></i>\n </span>\n }\n <span class=\"menu-list__text\">\n <span class=\"menu-list__label\">{{ row.item.label }}</span>\n @if (row.item.description?.trim()) {\n <span class=\"menu-list__description\">{{ row.item.description }}</span>\n }\n </span>\n </div>\n }\n }\n }\n</div>\n", styles: ["@charset \"UTF-8\";@keyframes app-sidebar-nav-reveal-in{0%{opacity:0;transform:translate3d(-.45rem,0,0)}to{opacity:1;transform:translateZ(0)}}:host{display:block;min-width:0;box-sizing:border-box}.menu-list{background:var(--app-color-surface, #ffffff);border:1px solid var(--app-color-border-subtle, rgba(26, 47, 69, .12));border-radius:10px;box-shadow:0 10px 28px -14px #0f172a29;max-height:min(70vh,22rem);overflow-x:hidden;overflow-y:auto;display:flex;flex-direction:column;gap:.1rem;padding:.45rem 0;outline:none}.menu-list--dense{padding:.2rem 0;gap:0}.menu-list__submenu-wrap{position:relative;display:block}.menu-list__option{display:flex;align-items:center;box-sizing:border-box;gap:.5rem;margin:0 .25rem;padding:.48rem .6rem;border-radius:8px;cursor:pointer;color:var(--app-color-text-primary, #1a2f45);background:transparent;border:1px solid transparent;text-align:left;font:inherit;line-height:1.25}.menu-list__option:focus-visible{outline:2px solid var(--app-color-focus-ring-strong, rgba(43, 127, 217, .45));outline-offset:1px}.menu-list__option:hover:not(.menu-list__option--disabled):not(.menu-list__option--loading){background:color-mix(in srgb,var(--app-color-primary) 6%,transparent)}.menu-list__option.menu-list__option--active:not(.menu-list__option--disabled):not(.menu-list__option--loading){background:color-mix(in srgb,var(--app-color-primary) 7%,transparent);border-color:transparent;box-shadow:none}.menu-list__option.menu-list__option--disabled{cursor:not-allowed;color:var(--app-color-text-muted, #6b8299);background:transparent;opacity:.72}.menu-list__option.menu-list__option--loading{cursor:wait;opacity:.92;pointer-events:none}.menu-list__option.menu-list__option--danger:not(.menu-list__option--disabled):not(.menu-list__option--loading){color:var(--app-color-error, #b91c1c)}.menu-list__option.menu-list__option--danger:not(.menu-list__option--disabled):not(.menu-list__option--loading):hover,.menu-list__option.menu-list__option--danger:not(.menu-list__option--disabled):not(.menu-list__option--loading).menu-list__option--active{background:var(--app-color-error-bg-subtle, rgba(185, 28, 28, .12));border-color:transparent;box-shadow:inset 2px 0 0 0 var(--app-color-error-border, #dc2626)}.menu-list__option--submenu{padding-right:.35rem}.menu-list__option--selected:not(.menu-list__option--disabled){background:color-mix(in srgb,var(--app-color-primary) 9%,transparent);border-radius:8px;border-color:transparent;box-shadow:inset 2px 0 0 0 var(--app-color-primary, #2b7fd9)}.menu-list__option--selected:not(.menu-list__option--disabled) .menu-list__label{color:var(--app-color-primary, #2b7fd9);font-weight:600}.menu-list__option--selected:not(.menu-list__option--disabled) .menu-list__icon{color:var(--app-color-primary, #2b7fd9)}.menu-list--compress-text .menu-list__label,.menu-list--compress-text .menu-list__description{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.menu-list--compress-text .menu-list__text,.menu-list--compress-text .menu-list__submenu-chevron{display:none}.menu-list--compress-text .menu-list__submenu-wrap{width:100%}.menu-list--compress-text .menu-list__option{justify-content:center;align-items:center;text-align:center;width:calc(100% - .5rem);max-width:100%;box-sizing:border-box;margin-left:.25rem;margin-right:.25rem;padding:.5rem .35rem}.menu-list--compress-text .menu-list__option--submenu{padding-left:.35rem;padding-right:.35rem}.menu-list--compress-text .menu-list__icon{flex:0 0 auto;width:auto;min-width:1.75rem;display:inline-flex;align-items:center;justify-content:center;padding-top:0}.menu-list__submenu-chevron{flex:0 0 auto;margin-left:auto;padding-left:.35rem;font-size:1rem;line-height:1;color:var(--app-color-text-muted, #6b8299);opacity:.85}.menu-list__icon{flex:0 0 auto;width:1.25rem;height:1.25rem;min-height:1.25rem;display:inline-flex;align-items:center;justify-content:center;text-align:center;color:var(--app-color-text-secondary, #5a7fa3);line-height:1}.menu-list__icon i{display:flex;align-items:center;justify-content:center;width:100%;height:100%;line-height:1;font-size:.95rem}.menu-list__option--disabled .menu-list__icon{opacity:.55}.menu-list__icon--spin i{animation:menu-list-spin .8s linear infinite}.menu-list__text{display:flex;flex-direction:column;gap:.1rem;min-width:0;flex:1}.menu-list__label{font-size:.875rem;font-weight:500;line-height:1.25rem;display:inline-flex;align-items:center;min-height:1.25rem}.menu-list__description{font-size:.75rem;color:var(--app-color-text-muted, #6b8299);line-height:1.3}.menu-list:not(.menu-list--compress-text){animation:app-sidebar-nav-reveal-in .45s cubic-bezier(.16,1,.32,1) both}@media (prefers-reduced-motion: reduce){.menu-list:not(.menu-list--compress-text){animation:none}}.menu-submenu__panel{box-sizing:border-box;min-width:0;padding:0;background:transparent;border:none;box-shadow:none;border-radius:10px;overflow:hidden}@keyframes menu-list-spin{to{transform:rotate(360deg)}}:host ::ng-deep .menu-submenu__cdk-panel{background:transparent;box-shadow:none;border-radius:10px}\n"] }]
370
+ }], propDecorators: { items: [{
371
+ type: Input,
372
+ args: [{ required: true }]
373
+ }], menuId: [{
374
+ type: Input
375
+ }], dense: [{
376
+ type: Input,
377
+ args: [{ transform: booleanAttribute }]
378
+ }], nested: [{
379
+ type: Input,
380
+ args: [{ transform: booleanAttribute }]
381
+ }], selectedItemId: [{
382
+ type: Input
383
+ }], compressText: [{
384
+ type: Input,
385
+ args: [{ transform: booleanAttribute }]
386
+ }], itemSelect: [{
387
+ type: Output
388
+ }], closeRequest: [{
389
+ type: Output
390
+ }], submenuBack: [{
391
+ type: Output
392
+ }], nestedLists: [{
393
+ type: ViewChildren,
394
+ args: [MenuListComponent]
395
+ }], onKeydown: [{
396
+ type: HostListener,
397
+ args: ['keydown', ['$event']]
398
+ }] } });
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbWVudXMvbWVudS1saXN0L21lbnUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21lbnVzL21lbnUtbGlzdC9tZW51LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUdOLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBRUwsYUFBYSxFQUNiLG9CQUFvQixHQUNyQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOztBQUV2RixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFpQjdCLE1BQU0sT0FBTyxpQkFBaUI7SUFmOUI7UUFnQm1CLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxhQUFRLEdBQUcsTUFBTSxDQUFDLGVB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QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFFbkIsVUFBVTtzQkFBNUIsTUFBTTtnQkFDWSxZQUFZO3NCQUE5QixNQUFNO2dCQUNZLFdBQVc7c0JBQTdCLE1BQU07Z0JBR0MsV0FBVztzQkFEbEIsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBb1EvQixTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRyZW4sXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIGNvbXB1dGVkLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgQ2RrT3ZlcmxheU9yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB0eXBlIHsgTWVudUl0ZW1BY3Rpb24sIE1lbnVOb2RlSXRlbSB9IGZyb20gJy4uL19tb2RlbHMvbWVudS1pdGVtLm1vZGVsJztcbmltcG9ydCB7IEFwcFRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uL3RoZW1lJztcbmltcG9ydCB7IE1lbnVEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1kaXZpZGVyL21lbnUtZGl2aWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVudUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1ncm91cC9tZW51LWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICB0eXBlIE1lbnVSb3csXG4gIGJ1aWxkTWVudVJvd3MsXG4gIGZvY3VzYWJsZUFjdGlvbkNvdW50LFxufSBmcm9tICcuLi9fdXRpbHMvbWVudS1yb3dzLnV0aWwnO1xuaW1wb3J0IHsgc3VibWVudUNvbm5lY3RlZFBvc2l0aW9ucyB9IGZyb20gJy4uL191dGlscy9zdWJtZW51LWNvbm5lY3RlZC1wb3NpdGlvbnMudXRpbCc7XG5cbmNvbnN0IFNVQk1FTlVfT1BFTl9NUyA9IDIyMDtcbmNvbnN0IFNVQk1FTlVfQ0xPU0VfTVMgPSAxNjA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tZW51LWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21lbnUtbGlzdC5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTmdDbGFzcyxcbiAgICBmb3J3YXJkUmVmKCgpID0+IE1lbnVMaXN0Q29tcG9uZW50KSxcbiAgICBDZGtDb25uZWN0ZWRPdmVybGF5LFxuICAgIENka092ZXJsYXlPcmlnaW4sXG4gICAgTWVudURpdmlkZXJDb21wb25lbnQsXG4gICAgTWVudUdyb3VwQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51TGlzdENvbXBvbmVudDxUID0gc3RyaW5nPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBUaGVtZSA9IGluamVjdChBcHBUaGVtZVNlcnZpY2UpO1xuICByZWFkb25seSBob3N0UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBpdGVtczogcmVhZG9ubHkgTWVudU5vZGVJdGVtPFQ+W10gPSBbXTtcblxuICAvKiogUHJlZml4byBkb3MgYGlkYCBkYXMgb3DDp8O1ZXMgZm9jw6F2ZWlzIChgJHttZW51SWR9LW9wdC0ke2ZvY3VzSW5kZXh9YCkuICovXG4gIEBJbnB1dCgpIG1lbnVJZCA9ICdhcHAtbWVudSc7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRlbnNlID0gZmFsc2U7XG5cbiAgLyoqIFF1YW5kbyBgdHJ1ZWAsIG8gbWVudSBlc3TDoSBkZW50cm8gZGUgdW0gc3VibWVudSDigJQgc2V0YSDihpAgcmVncmVzc2EgdW0gbsOtdmVsLiAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbmVzdGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERlc3RhY2EgdmlzdWFsbWVudGUgbyBpdGVtIGN1amEgYGlkYCBjb2luY2lkZSAobmF2ZWdhw6fDo28gYWN0dWFsIC8gcm90YSBhY3RpdmEpLlxuICAgKiBTw7MgYXBsaWNhIGEgbGluaGFzIGBraW5kOiAnaXRlbSdgIG5lc3RlIG7DrXZlbC5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbUlkOiBUIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE9jdWx0YSByw7N0dWxvcyBlIGRlc2NyacOnw7VlcyAoZXguOiBzaWRlYmFyIGNvbGFwc2FkYSksIG1hbnRlbmRvIMOtY29uZXM7IGRlZmluZSBgdGl0bGVgIG5hdGl2byBwYXJhIGhvdmVyLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNvbXByZXNzVGV4dCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSByZWFkb25seSBpdGVtU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xvc2VSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc3VibWVudUJhY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZHJlbihNZW51TGlzdENvbXBvbmVudClcbiAgcHJpdmF0ZSBuZXN0ZWRMaXN0cz86IFF1ZXJ5TGlzdDxNZW51TGlzdENvbXBvbmVudDxUPj47XG5cbiAgcm93czogTWVudVJvdzxUPltdID0gW107XG4gIHByaXZhdGUgZm9jdXNhYmxlQ291bnQgPSAwO1xuXG4gIC8qKiDDjW5kaWNlIGVudHJlIGAwYCBlIGBmb2N1c2FibGVDb3VudCAtIDFgLCBvdSBgLTFgID0gbmVuaHVtIHJlYWxjZS4gKi9cbiAgYWN0aXZlSW5kZXggPSAtMTtcblxuICAvKiogUGFpbmVsIGRlIHN1Ym1lbnUgYWJlcnRvICh1bSBwb3IgaW5zdMOibmNpYSBkZSBsaXN0YSkuICovXG4gIG9wZW5TdWJtZW51S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHN1Ym1lbnVPcGVuVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3VibWVudUNsb3NlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgcmVhZG9ubHkgc3VibWVudVBvc2l0aW9ucyA9IHN1Ym1lbnVDb25uZWN0ZWRQb3NpdGlvbnMoKTtcblxuICByZWFkb25seSBwYW5lbFRoZW1lTmdDbGFzcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0aGVtZUNsYXNzID0gdGhpcy5hcHBUaGVtZS50aGVtZUNsYXNzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICdhcHAtbGlicmFyeS10aGVtZSc6IHRydWUsXG4gICAgICBbdGhlbWVDbGFzc106IHRydWUsXG4gICAgfTtcbiAgfSk7XG5cbiAgb3ZlcmxheVBhbmVsQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnYXBwLWxpYnJhcnktdGhlbWUnLCB0aGlzLmFwcFRoZW1lLnRoZW1lQ2xhc3MoKSwgJ21lbnUtc3VibWVudV9fY2RrLXBhbmVsJ107XG4gIH1cblxuICBvbk5lc3RlZEl0ZW1TZWxlY3QoaWQ6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlT3BlblN1Ym1lbnUoKTtcbiAgICB0aGlzLml0ZW1TZWxlY3QuZW1pdChpZCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgIHRoaXMucm93cyA9IGJ1aWxkTWVudVJvd3ModGhpcy5pdGVtcyA/PyBbXSk7XG4gICAgICB0aGlzLmZvY3VzYWJsZUNvdW50ID0gZm9jdXNhYmxlQWN0aW9uQ291bnQodGhpcy5yb3dzKTtcbiAgICAgIGlmICh0aGlzLmZvY3VzYWJsZUNvdW50ID09PSAwKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtMTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmVJbmRleCA+PSB0aGlzLmZvY3VzYWJsZUNvdW50KSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdWJtZW51Um93S2V5KHJvdzogTWVudVJvdzxUPiwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJvdy5raW5kID09PSAnc3VibWVudScgPyBgc20tJHtTdHJpbmcocm93Lml0ZW0uaWQpfS0ke2luZGV4fWAgOiAnJztcbiAgfVxuXG4gIGlzU3VibWVudU9wZW4ocm93OiBNZW51Um93PFQ+LCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHJvdy5raW5kID09PSAnc3VibWVudScgJiYgdGhpcy5vcGVuU3VibWVudUtleSA9PT0gdGhpcy5zdWJtZW51Um93S2V5KHJvdywgaW5kZXgpXG4gICAgKTtcbiAgfVxuXG4gIHN1Ym1lbnVNZW51SWQocm93OiBNZW51Um93PFQ+KTogc3RyaW5nIHtcbiAgICBpZiAocm93LmtpbmQgIT09ICdzdWJtZW51Jykge1xuICAgICAgcmV0dXJuIHRoaXMubWVudUlkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5tZW51SWR9LXN1Yi0ke1N0cmluZyhyb3cuaXRlbS5pZCl9YDtcbiAgfVxuXG4gIG9uUm93TW91c2VFbnRlcihyb3c6IE1lbnVSb3c8VD4pOiB2b2lkIHtcbiAgICBpZiAocm93LmtpbmQgIT09ICdhY3Rpb24nICYmIHJvdy5raW5kICE9PSAnc3VibWVudScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvdy5mb2N1c0luZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSByb3cuZm9jdXNJbmRleDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uU3VibWVudVRyaWdnZXJFbnRlcihyb3c6IE1lbnVSb3c8VD4sIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAocm93LmtpbmQgIT09ICdzdWJtZW51JyB8fCByb3cuaXRlbS5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNhbmNlbFN1Ym1lbnVDbG9zZVRpbWVyKCk7XG4gICAgdGhpcy5jYW5jZWxTdWJtZW51T3BlblRpbWVyKCk7XG4gICAgaWYgKHJvdy5mb2N1c0luZGV4ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gcm93LmZvY3VzSW5kZXg7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHRoaXMuc3VibWVudVJvd0tleShyb3csIGluZGV4KTtcbiAgICB0aGlzLnN1Ym1lbnVPcGVuVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VibWVudU9wZW5UaW1lciA9IG51bGw7XG4gICAgICB0aGlzLm9wZW5TdWJtZW51S2V5ID0ga2V5O1xuICAgICAgdGhpcy5xdWV1ZUZvY3VzTmVzdGVkRmlyc3QoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0sIFNVQk1FTlVfT1BFTl9NUyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblN1Ym1lbnVUcmlnZ2VyTGVhdmUoX3JvdzogTWVudVJvdzxUPiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsU3VibWVudU9wZW5UaW1lcigpO1xuICAgIHRoaXMuc2NoZWR1bGVTdWJtZW51Q2xvc2UoaW5kZXgpO1xuICB9XG5cbiAgb25TdWJtZW51UGFuZWxFbnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbFN1Ym1lbnVDbG9zZVRpbWVyKCk7XG4gIH1cblxuICBvblN1Ym1lbnVQYW5lbExlYXZlKHJvdzogTWVudVJvdzxUPiwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVTdWJtZW51Q2xvc2UoaW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVN1Ym1lbnVDbG9zZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxTdWJtZW51Q2xvc2VUaW1lcigpO1xuICAgIHRoaXMuc3VibWVudUNsb3NlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VibWVudUNsb3NlVGltZXIgPSBudWxsO1xuICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3dzW2luZGV4XTtcbiAgICAgIGlmIChyb3c/LmtpbmQgPT09ICdzdWJtZW51Jykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnN1Ym1lbnVSb3dLZXkocm93LCBpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLm9wZW5TdWJtZW51S2V5ID09PSBrZXkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5TdWJtZW51S2V5ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFNVQk1FTlVfQ0xPU0VfTVMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5jZWxTdWJtZW51T3BlblRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1Ym1lbnVPcGVuVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVPcGVuVGltZXIpO1xuICAgICAgdGhpcy5zdWJtZW51T3BlblRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbFN1Ym1lbnVDbG9zZVRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1Ym1lbnVDbG9zZVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5zdWJtZW51Q2xvc2VUaW1lcik7XG4gICAgICB0aGlzLnN1Ym1lbnVDbG9zZVRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogRmVjaGEgbyBzdWJtZW51IGRlc3RlIG7DrXZlbCAoc2V0YSDihpAgbm8gZmlsaG8gb3UgZmVjaG8gZGUgaXJtw6NvKS4gKi9cbiAgY2xvc2VPcGVuU3VibWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbFN1Ym1lbnVPcGVuVGltZXIoKTtcbiAgICB0aGlzLmNhbmNlbFN1Ym1lbnVDbG9zZVRpbWVyKCk7XG4gICAgdGhpcy5vcGVuU3VibWVudUtleSA9IG51bGw7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblN1Ym1lbnVSb3dDbGljayhldjogTW91c2VFdmVudCwgcm93OiBNZW51Um93PFQ+LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHJvdy5raW5kICE9PSAnc3VibWVudScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvdy5pdGVtLmRpc2FibGVkKSB7XG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5zdWJtZW51Um93S2V5KHJvdywgaW5kZXgpO1xuICAgIGlmICh0aGlzLm9wZW5TdWJtZW51S2V5ID09PSBrZXkpIHtcbiAgICAgIHRoaXMuY2xvc2VPcGVuU3VibWVudSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5TdWJtZW51S2V5ID0ga2V5O1xuICAgICAgdGhpcy5xdWV1ZUZvY3VzTmVzdGVkRmlyc3QoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VibWVudU91dHNpZGVDbGljayhyb3c6IE1lbnVSb3c8VD4sIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAocm93LmtpbmQgPT09ICdzdWJtZW51JyAmJiB0aGlzLmlzU3VibWVudU9wZW4ocm93LCBpbmRleCkpIHtcbiAgICAgIHRoaXMuY2xvc2VPcGVuU3VibWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlblN1Ym1lbnVGb3JSb3dBdChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgcm93ID0gdGhpcy5yb3dzW2luZGV4XTtcbiAgICBpZiAocm93Py5raW5kICE9PSAnc3VibWVudScgfHwgcm93Lml0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcGVuU3VibWVudUtleSA9IHRoaXMuc3VibWVudVJvd0tleShyb3csIGluZGV4KTtcbiAgICB0aGlzLnF1ZXVlRm9jdXNOZXN0ZWRGaXJzdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBxdWV1ZUZvY3VzTmVzdGVkRmlyc3QoKTogdm9pZCB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgY29uc3QgbmVzdGVkID0gdGhpcy5uZXN0ZWRMaXN0cz8ubGFzdDtcbiAgICAgIG5lc3RlZD8uZm9jdXNGaXJzdE9wdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFByaW1laXJhIG9ww6fDo28gZm9jw6F2ZWwgKGFiZXJ0dXJhIHBvciB0ZWNsYWRvKS4gKi9cbiAgZm9jdXNGaXJzdE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb2N1c2FibGVDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDtcbiAgICB0aGlzLmZvY3VzQWN0aXZlRG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkl0ZW1DbGljayhldjogTW91c2VFdmVudCwgaXRlbTogTWVudUl0ZW1BY3Rpb248VD4pOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5kaXNhYmxlZCB8fCBpdGVtLmxvYWRpbmcpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmNsb3NlT3BlblN1Ym1lbnUoKTtcbiAgICB0aGlzLml0ZW1TZWxlY3QuZW1pdChpdGVtLmlkKTtcbiAgfVxuXG4gIG9wdGlvbklkKGZvY3VzSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubWVudUlkfS1vcHQtJHtmb2N1c0luZGV4fWA7XG4gIH1cblxuICBpc0FjdGl2ZVJvdyhyb3c6IE1lbnVSb3c8VD4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHJvdy5raW5kID09PSAnYWN0aW9uJyB8fCByb3cua2luZCA9PT0gJ3N1Ym1lbnUnKSB7XG4gICAgICByZXR1cm4gcm93LmZvY3VzSW5kZXggIT09IG51bGwgJiYgcm93LmZvY3VzSW5kZXggPT09IHRoaXMuYWN0aXZlSW5kZXg7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBSZWFsY2UgZGUgc2VsZWPDp8OjbyBwZXJzaXN0ZW50ZSAoZXguOiBpdGVtIGRlIG5hdmVnYcOnw6NvIGFjdGl2bykuICovXG4gIGlzUm93U2VsZWN0ZWQocm93OiBNZW51Um93PFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtSWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocm93LmtpbmQgPT09ICdhY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcm93Lml0ZW0uaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVtSWQ7XG4gICAgfVxuICAgIGlmIChyb3cua2luZCA9PT0gJ3N1Ym1lbnUnKSB7XG4gICAgICByZXR1cm4gcm93Lml0ZW0uaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVtSWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJlc2V0SGlnaGxpZ2h0KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtMTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uTWVudVN1cmZhY2VMZWF2ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcGVuU3VibWVudUtleSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gLTE7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzQWN0aXZlRG9tKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHRoaXMub3B0aW9uSWQodGhpcy5hY3RpdmVJbmRleCk7XG4gICAgY29uc3QgZWwgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHtDU1MuZXNjYXBlKGlkKX1gKSBhc1xuICAgICAgfCBIVE1MRWxlbWVudFxuICAgICAgfCBudWxsO1xuICAgIGVsPy5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlkb3duKGV2OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2LmtleSA9PT0gJ0Fycm93TGVmdCcgJiYgdGhpcy5uZXN0ZWQpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnN1Ym1lbnVCYWNrLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb2N1c2FibGVDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuID0gdGhpcy5mb2N1c2FibGVDb3VudDtcblxuICAgIHN3aXRjaCAoZXYua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA8IDApIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gKHRoaXMuYWN0aXZlSW5kZXggKyAxKSAlIG47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZURvbSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPCAwKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IG4gLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAodGhpcy5hY3RpdmVJbmRleCAtIDEgKyBuKSAlIG47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZURvbSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuZm9jdXNBY3RpdmVEb20oKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IG4gLSAxO1xuICAgICAgICB0aGlzLmZvY3VzQWN0aXZlRG9tKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDwgMCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgciA9IHRoaXMucm93c1tpXTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByLmtpbmQgPT09ICdzdWJtZW51JyAmJlxuICAgICAgICAgICAgci5mb2N1c0luZGV4ID09PSB0aGlzLmFjdGl2ZUluZGV4ICYmXG4gICAgICAgICAgICAhci5pdGVtLmRpc2FibGVkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuU3VibWVudUZvclJvd0F0KGkpO1xuICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYW5kbGVkKSB7XG4gICAgICAgICAgLyogZGVpeGFyIHByb3BhZ2FyIHBhcmEgbyBjYW1wbywgc2UgbmVjZXNzw6FyaW8gKi9cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOiB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgciA9IHRoaXMucm93c1tpXTtcbiAgICAgICAgICBpZiAoci5raW5kICE9PSAnYWN0aW9uJyAmJiByLmtpbmQgIT09ICdzdWJtZW51Jykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyLmZvY3VzSW5kZXggIT09IHRoaXMuYWN0aXZlSW5kZXggfHwgci5mb2N1c0luZGV4ID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHIua2luZCA9PT0gJ2FjdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChyLml0ZW0uZGlzYWJsZWQgfHwgci5pdGVtLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW1TZWxlY3QuZW1pdChyLml0ZW0uaWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyLml0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9wZW5TdWJtZW51Rm9yUm93QXQoaSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsb3NlUmVxdWVzdC5lbWl0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibWVudS1saXN0XCJcbiAgW2NsYXNzLm1lbnUtbGlzdC0tZGVuc2VdPVwiZGVuc2VcIlxuICBbY2xhc3MubWVudS1saXN0LS1jb21wcmVzcy10ZXh0XT1cImNvbXByZXNzVGV4dFwiXG4gIHJvbGU9XCJtZW51XCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIm51bGxcIlxuICB0YWJpbmRleD1cIi0xXCJcbiAgKG1vdXNlbGVhdmUpPVwib25NZW51U3VyZmFjZUxlYXZlKClcIlxuPlxuICBAZm9yIChyb3cgb2Ygcm93czsgdHJhY2sgaWR4OyBsZXQgaWR4ID0gJGluZGV4KSB7XG4gICAgQHN3aXRjaCAocm93LmtpbmQpIHtcbiAgICAgIEBjYXNlICgnZGl2aWRlcicpIHtcbiAgICAgICAgPGFwcC1tZW51LWRpdmlkZXIgLz5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnZ3JvdXAnKSB7XG4gICAgICAgIDxhcHAtbWVudS1ncm91cCBbbGFiZWxdPVwicm93LmxhYmVsXCIgW2hpZGVMYWJlbF09XCJjb21wcmVzc1RleHRcIiAvPlxuICAgICAgfVxuICAgICAgQGNhc2UgKCdzdWJtZW51Jykge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJtZW51LWxpc3RfX3N1Ym1lbnUtd3JhcFwiXG4gICAgICAgICAgY2RrT3ZlcmxheU9yaWdpblxuICAgICAgICAgICNzdWJPcmlnaW49XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJvblN1Ym1lbnVUcmlnZ2VyRW50ZXIocm93LCBpZHgpXCJcbiAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvblN1Ym1lbnVUcmlnZ2VyTGVhdmUocm93LCBpZHgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1saXN0X19vcHRpb24gbWVudS1saXN0X19vcHRpb24tLXN1Ym1lbnVcIlxuICAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiJ3RydWUnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNTdWJtZW51T3Blbihyb3csIGlkeClcIlxuICAgICAgICAgICAgW2lkXT1cInJvdy5mb2N1c0luZGV4ICE9PSBudWxsID8gb3B0aW9uSWQocm93LmZvY3VzSW5kZXgpIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJyb3cuZm9jdXNJbmRleCAhPT0gbnVsbCAmJiAhcm93Lml0ZW0uZGlzYWJsZWQgPyAoaXNBY3RpdmVSb3cocm93KSA/IDAgOiAtMSkgOiAtMVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInJvdy5pdGVtLmRpc2FibGVkID8gdHJ1ZSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiY29tcHJlc3NUZXh0ID8gcm93Lml0ZW0ubGFiZWwgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29tcHJlc3NUZXh0ID8gcm93Lml0ZW0ubGFiZWwgOiBudWxsXCJcbiAgICAgICAgICAgIFtjbGFzcy5tZW51LWxpc3RfX29wdGlvbi0tZGlzYWJsZWRdPVwicm93Lml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NsYXNzLm1lbnUtbGlzdF9fb3B0aW9uLS1hY3RpdmVdPVwiaXNBY3RpdmVSb3cocm93KVwiXG4gICAgICAgICAgICBbY2xhc3MubWVudS1saXN0X19vcHRpb24tLXNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TdWJtZW51Um93Q2xpY2soJGV2ZW50LCByb3csIGlkeClcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Sb3dNb3VzZUVudGVyKHJvdylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAocm93Lml0ZW0uaWNvbj8udHJpbSgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saXN0X19pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwicm93Lml0ZW0uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpc3RfX3RleHRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpc3RfX2xhYmVsXCI+e3sgcm93Lml0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAocm93Lml0ZW0uZGVzY3JpcHRpb24/LnRyaW0oKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saXN0X19kZXNjcmlwdGlvblwiPnt7IHJvdy5pdGVtLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGlzdF9fc3VibWVudS1jaGV2cm9uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+4oC6PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwic3ViT3JpZ2luXCJcbiAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJpc1N1Ym1lbnVPcGVuKHJvdywgaWR4KVwiXG4gICAgICAgICAgICBbY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uc109XCJzdWJtZW51UG9zaXRpb25zXCJcbiAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UHVzaF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzc109XCJvdmVybGF5UGFuZWxDbGFzc2VzKClcIlxuICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aF09XCIyMDBcIlxuICAgICAgICAgICAgKG92ZXJsYXlPdXRzaWRlQ2xpY2spPVwib25TdWJtZW51T3V0c2lkZUNsaWNrKHJvdywgaWR4KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtc3VibWVudV9fcGFuZWxcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJwYW5lbFRoZW1lTmdDbGFzcygpXCJcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25TdWJtZW51UGFuZWxFbnRlcigpXCJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25TdWJtZW51UGFuZWxMZWF2ZShyb3csIGlkeClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGFwcC1tZW51LWxpc3RcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwicm93Lml0ZW0uaXRlbXNcIlxuICAgICAgICAgICAgICAgIFttZW51SWRdPVwic3VibWVudU1lbnVJZChyb3cpXCJcbiAgICAgICAgICAgICAgICBbbmVzdGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtkZW5zZV09XCJkZW5zZVwiXG4gICAgICAgICAgICAgICAgW2NvbXByZXNzVGV4dF09XCJjb21wcmVzc1RleHRcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1JZF09XCJzZWxlY3RlZEl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgKGl0ZW1TZWxlY3QpPVwib25OZXN0ZWRJdGVtU2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbG9zZVJlcXVlc3QpPVwiY2xvc2VSZXF1ZXN0LmVtaXQoKVwiXG4gICAgICAgICAgICAgICAgKHN1Ym1lbnVCYWNrKT1cImNsb3NlT3BlblN1Ym1lbnUoKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBjYXNlICgnYWN0aW9uJykge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJtZW51LWxpc3RfX29wdGlvblwiXG4gICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICBbaWRdPVwicm93LmZvY3VzSW5kZXggIT09IG51bGwgPyBvcHRpb25JZChyb3cuZm9jdXNJbmRleCkgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJyb3cuZm9jdXNJbmRleCAhPT0gbnVsbCAmJiAhcm93Lml0ZW0uZGlzYWJsZWQgPyAoaXNBY3RpdmVSb3cocm93KSA/IDAgOiAtMSkgOiAtMVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJyb3cuaXRlbS5kaXNhYmxlZCA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWJ1c3ldPVwicm93Lml0ZW0ubG9hZGluZyA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci50aXRsZV09XCJjb21wcmVzc1RleHQgPyByb3cuaXRlbS5sYWJlbCA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29tcHJlc3NUZXh0ID8gcm93Lml0ZW0ubGFiZWwgOiBudWxsXCJcbiAgICAgICAgICBbY2xhc3MubWVudS1saXN0X19vcHRpb24tLWRpc2FibGVkXT1cInJvdy5pdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICBbY2xhc3MubWVudS1saXN0X19vcHRpb24tLWxvYWRpbmddPVwicm93Lml0ZW0ubG9hZGluZ1wiXG4gICAgICAgICAgW2NsYXNzLm1lbnUtbGlzdF9fb3B0aW9uLS1kYW5nZXJdPVwicm93Lml0ZW0uZGFuZ2VyXCJcbiAgICAgICAgICBbY2xhc3MubWVudS1saXN0X19vcHRpb24tLWFjdGl2ZV09XCJpc0FjdGl2ZVJvdyhyb3cpXCJcbiAgICAgICAgICBbY2xhc3MubWVudS1saXN0X19vcHRpb24tLXNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudCwgcm93Lml0ZW0pXCJcbiAgICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd01vdXNlRW50ZXIocm93KVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKHJvdy5pdGVtLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saXN0X19pY29uIG1lbnUtbGlzdF9faWNvbi0tc3BpblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXNwaW5uZXJcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfSBAZWxzZSBpZiAocm93Lml0ZW0uaWNvbj8udHJpbSgpKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGlzdF9faWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8aSBbbmdDbGFzc109XCJyb3cuaXRlbS5pY29uXCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGlzdF9fdGV4dFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpc3RfX2xhYmVsXCI+e3sgcm93Lml0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHJvdy5pdGVtLmRlc2NyaXB0aW9uPy50cmltKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpc3RfX2Rlc2NyaXB0aW9uXCI+e3sgcm93Lml0ZW0uZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gIH1cbjwvZGl2PlxuIl19
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Posição preferencial do painel em relação à âncora (com fallbacks via CDK `push` / ordem de posições).
3
+ */
4
+ export var OverlayPlacement;
5
+ (function (OverlayPlacement) {
6
+ OverlayPlacement["Top"] = "top";
7
+ OverlayPlacement["Bottom"] = "bottom";
8
+ OverlayPlacement["Left"] = "left";
9
+ OverlayPlacement["Right"] = "right";
10
+ })(OverlayPlacement || (OverlayPlacement = {}));
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1wbGFjZW1lbnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL292ZXJsYXkvX21vZGVscy9vdmVybGF5LXBsYWNlbWVudC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQUtYO0FBTEQsV0FBWSxnQkFBZ0I7SUFDMUIsK0JBQVcsQ0FBQTtJQUNYLHFDQUFpQixDQUFBO0lBQ2pCLGlDQUFhLENBQUE7SUFDYixtQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFBvc2nDp8OjbyBwcmVmZXJlbmNpYWwgZG8gcGFpbmVsIGVtIHJlbGHDp8OjbyDDoCDDom5jb3JhIChjb20gZmFsbGJhY2tzIHZpYSBDREsgYHB1c2hgIC8gb3JkZW0gZGUgcG9zacOnw7VlcykuXHJcbiAqL1xyXG5leHBvcnQgZW51bSBPdmVybGF5UGxhY2VtZW50IHtcclxuICBUb3AgPSAndG9wJyxcclxuICBCb3R0b20gPSAnYm90dG9tJyxcclxuICBMZWZ0ID0gJ2xlZnQnLFxyXG4gIFJpZ2h0ID0gJ3JpZ2h0JyxcclxufVxyXG4iXX0=
@@ -0,0 +1,84 @@
1
+ import { OverlayPlacement } from '../_models/overlay-placement.model';
2
+ const DEFAULT_GAP = 8;
3
+ /**
4
+ * Constrói posições CDK para overlay ancorado (tooltip, popover, autocomplete, etc.).
5
+ * Inclui alternativas para inverter quando não há espaço (`push` no componente).
6
+ *
7
+ * Menus dropdown usam {@link menuConnectedPositions} em `menus/_utils` (alinhamento `start`, gap tipicamente menor).
8
+ */
9
+ export function anchoredOverlayPositions(placement, offsetPx = DEFAULT_GAP) {
10
+ const o = offsetPx;
11
+ switch (placement) {
12
+ case OverlayPlacement.Top:
13
+ return [
14
+ {
15
+ originX: 'center',
16
+ originY: 'top',
17
+ overlayX: 'center',
18
+ overlayY: 'bottom',
19
+ offsetY: -o,
20
+ },
21
+ {
22
+ originX: 'center',
23
+ originY: 'bottom',
24
+ overlayX: 'center',
25
+ overlayY: 'top',
26
+ offsetY: o,
27
+ },
28
+ ];
29
+ case OverlayPlacement.Bottom:
30
+ return [
31
+ {
32
+ originX: 'center',
33
+ originY: 'bottom',
34
+ overlayX: 'center',
35
+ overlayY: 'top',
36
+ offsetY: o,
37
+ },
38
+ {
39
+ originX: 'center',
40
+ originY: 'top',
41
+ overlayX: 'center',
42
+ overlayY: 'bottom',
43
+ offsetY: -o,
44
+ },
45
+ ];
46
+ case OverlayPlacement.Left:
47
+ return [
48
+ {
49
+ originX: 'start',
50
+ originY: 'center',
51
+ overlayX: 'end',
52
+ overlayY: 'center',
53
+ offsetX: -o,
54
+ },
55
+ {
56
+ originX: 'end',
57
+ originY: 'center',
58
+ overlayX: 'start',
59
+ overlayY: 'center',
60
+ offsetX: o,
61
+ },
62
+ ];
63
+ case OverlayPlacement.Right:
64
+ return [
65
+ {
66
+ originX: 'end',
67
+ originY: 'center',
68
+ overlayX: 'start',
69
+ overlayY: 'center',
70
+ offsetX: o,
71
+ },
72
+ {
73
+ originX: 'start',
74
+ originY: 'center',
75
+ overlayX: 'end',
76
+ overlayY: 'center',
77
+ offsetX: -o,
78
+ },
79
+ ];
80
+ default:
81
+ return anchoredOverlayPositions(OverlayPlacement.Bottom, o);
82
+ }
83
+ }
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9yZWQtb3ZlcmxheS1wb3NpdGlvbnMudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvb3ZlcmxheS9fdXRpbHMvYW5jaG9yZWQtb3ZlcmxheS1wb3NpdGlvbnMudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV0RSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFFdEI7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLFNBQTJCLEVBQzNCLFFBQVEsR0FBRyxXQUFXO0lBRXRCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNuQixRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLEtBQUssZ0JBQWdCLENBQUMsR0FBRztZQUN2QixPQUFPO2dCQUNMO29CQUNFLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsUUFBUTtvQkFDbEIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLENBQUM7aUJBQ1o7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsT0FBTyxFQUFFLENBQUM7aUJBQ1g7YUFDRixDQUFDO1FBQ0osS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO1lBQzFCLE9BQU87Z0JBQ0w7b0JBQ0UsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsT0FBTyxFQUFFLENBQUM7aUJBQ1g7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxRQUFRO29CQUNsQixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsT0FBTyxFQUFFLENBQUMsQ0FBQztpQkFDWjthQUNGLENBQUM7UUFDSixLQUFLLGdCQUFnQixDQUFDLElBQUk7WUFDeEIsT0FBTztnQkFDTDtvQkFDRSxPQUFPLEVBQUUsT0FBTztvQkFDaEIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFFBQVEsRUFBRSxLQUFLO29CQUNmLFFBQVEsRUFBRSxRQUFRO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxDQUFDO2lCQUNaO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxLQUFLO29CQUNkLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDO2lCQUNYO2FBQ0YsQ0FBQztRQUNKLEtBQUssZ0JBQWdCLENBQUMsS0FBSztZQUN6QixPQUFPO2dCQUNMO29CQUNFLE9BQU8sRUFBRSxLQUFLO29CQUNkLE9BQU8sRUFBRSxRQUFRO29CQUNqQixRQUFRLEVBQUUsT0FBTztvQkFDakIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDO2lCQUNYO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxPQUFPO29CQUNoQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLENBQUM7aUJBQ1o7YUFDRixDQUFDO1FBQ0o7WUFDRSxPQUFPLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IE92ZXJsYXlQbGFjZW1lbnQgfSBmcm9tICcuLi9fbW9kZWxzL292ZXJsYXktcGxhY2VtZW50Lm1vZGVsJztcclxuXHJcbmNvbnN0IERFRkFVTFRfR0FQID0gODtcclxuXHJcbi8qKlxyXG4gKiBDb25zdHLDs2kgcG9zacOnw7VlcyBDREsgcGFyYSBvdmVybGF5IGFuY29yYWRvICh0b29sdGlwLCBwb3BvdmVyLCBhdXRvY29tcGxldGUsIGV0Yy4pLlxyXG4gKiBJbmNsdWkgYWx0ZXJuYXRpdmFzIHBhcmEgaW52ZXJ0ZXIgcXVhbmRvIG7Do28gaMOhIGVzcGHDp28gKGBwdXNoYCBubyBjb21wb25lbnRlKS5cclxuICpcclxuICogTWVudXMgZHJvcGRvd24gdXNhbSB7QGxpbmsgbWVudUNvbm5lY3RlZFBvc2l0aW9uc30gZW0gYG1lbnVzL191dGlsc2AgKGFsaW5oYW1lbnRvIGBzdGFydGAsIGdhcCB0aXBpY2FtZW50ZSBtZW5vcikuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yZWRPdmVybGF5UG9zaXRpb25zKFxyXG4gIHBsYWNlbWVudDogT3ZlcmxheVBsYWNlbWVudCxcclxuICBvZmZzZXRQeCA9IERFRkFVTFRfR0FQLFxyXG4pOiBDb25uZWN0ZWRQb3NpdGlvbltdIHtcclxuICBjb25zdCBvID0gb2Zmc2V0UHg7XHJcbiAgc3dpdGNoIChwbGFjZW1lbnQpIHtcclxuICAgIGNhc2UgT3ZlcmxheVBsYWNlbWVudC5Ub3A6XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ2NlbnRlcicsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnY2VudGVyJyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcclxuICAgICAgICAgIG9mZnNldFk6IC1vLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ2NlbnRlcicsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnY2VudGVyJyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcclxuICAgICAgICAgIG9mZnNldFk6IG8sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgIGNhc2UgT3ZlcmxheVBsYWNlbWVudC5Cb3R0b206XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ2NlbnRlcicsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnY2VudGVyJyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcclxuICAgICAgICAgIG9mZnNldFk6IG8sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnY2VudGVyJyxcclxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgICAgb2Zmc2V0WTogLW8sXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgIGNhc2UgT3ZlcmxheVBsYWNlbWVudC5MZWZ0OlxyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnY2VudGVyJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJyxcclxuICAgICAgICAgIG9mZnNldFg6IC1vLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXHJcbiAgICAgICAgICBvcmlnaW5ZOiAnY2VudGVyJyxcclxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3ZlcmxheVk6ICdjZW50ZXInLFxyXG4gICAgICAgICAgb2Zmc2V0WDogbyxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgY2FzZSBPdmVybGF5UGxhY2VtZW50LlJpZ2h0OlxyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ2NlbnRlcicsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcclxuICAgICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJyxcclxuICAgICAgICAgIG9mZnNldFg6IG8sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxyXG4gICAgICAgICAgb3JpZ2luWTogJ2NlbnRlcicsXHJcbiAgICAgICAgICBvdmVybGF5WDogJ2VuZCcsXHJcbiAgICAgICAgICBvdmVybGF5WTogJ2NlbnRlcicsXHJcbiAgICAgICAgICBvZmZzZXRYOiAtbyxcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIGFuY2hvcmVkT3ZlcmxheVBvc2l0aW9ucyhPdmVybGF5UGxhY2VtZW50LkJvdHRvbSwgbyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==