keevo-components 1.8.39 → 1.8.41

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. package/README.md +24 -24
  2. package/esm2022/keevo-components.mjs +4 -4
  3. package/esm2022/lib/api/base-components/base-component-button.mjs +36 -36
  4. package/esm2022/lib/api/base-components/base-component-chart.mjs +92 -92
  5. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +298 -298
  6. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +78 -78
  7. package/esm2022/lib/api/base-components/base-component-crud.mjs +65 -65
  8. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -31
  9. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +169 -169
  10. package/esm2022/lib/api/base-components/base-component-input.mjs +94 -94
  11. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +130 -130
  12. package/esm2022/lib/api/base-components/base-component.mjs +51 -51
  13. package/esm2022/lib/api/components/chart/chart.config.mjs +2 -2
  14. package/esm2022/lib/api/components/chart/chart.model.mjs +2 -2
  15. package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -2
  16. package/esm2022/lib/api/components/chart/orchart.item.mjs +2 -2
  17. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -2
  18. package/esm2022/lib/api/components/table/action-item.mjs +2 -2
  19. package/esm2022/lib/api/components/table/kv-menuitem.mjs +3 -3
  20. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +2 -2
  21. package/esm2022/lib/api/components/table/table.config.column.mjs +2 -2
  22. package/esm2022/lib/api/components/table/table.config.mjs +2 -2
  23. package/esm2022/lib/api/components/table/table.paginate.mjs +9 -9
  24. package/esm2022/lib/api/components/table/tabledit.config.mjs +2 -2
  25. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +2 -2
  26. package/esm2022/lib/api/directives/template/template.directive.mjs +24 -24
  27. package/esm2022/lib/api/helpers/component-providers.mjs +16 -16
  28. package/esm2022/lib/api/helpers/keevo-validators.mjs +72 -72
  29. package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -23
  30. package/esm2022/lib/api/models/menu/menu.model.mjs +2 -2
  31. package/esm2022/lib/api/models/menu/menucompleto.model.mjs +2 -2
  32. package/esm2022/lib/api/models/menu/sistemamenu.model.mjs +2 -2
  33. package/esm2022/lib/api/modules/primeng.module.mjs +255 -251
  34. package/esm2022/lib/api/pipes/codigofile.pipe.mjs +19 -19
  35. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +25 -25
  36. package/esm2022/lib/api/pipes/mask.pipe.mjs +29 -29
  37. package/esm2022/lib/api/pipes/pipes.module.mjs +39 -39
  38. package/esm2022/lib/api/pipes/telefone.pipe.mjs +45 -45
  39. package/esm2022/lib/api/services/base.api.service.mjs +74 -74
  40. package/esm2022/lib/api/services/breadcrumbs.service.mjs +57 -57
  41. package/esm2022/lib/api/services/component.service.mjs +27 -27
  42. package/esm2022/lib/api/services/form.service.mjs +85 -85
  43. package/esm2022/lib/api/services/imagens.service.mjs +28 -28
  44. package/esm2022/lib/api/services/notification.service.mjs +67 -67
  45. package/esm2022/lib/api/services/object.service.mjs +39 -39
  46. package/esm2022/lib/components/keevo-components.module.mjs +137 -144
  47. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +78 -78
  48. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +32 -32
  49. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +31 -31
  50. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +31 -31
  51. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +17 -17
  52. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +17 -17
  53. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +39 -39
  54. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +92 -92
  55. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +28 -28
  56. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +145 -145
  57. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +32 -32
  58. package/esm2022/lib/components/kv-error/kv-error.component.mjs +26 -26
  59. package/esm2022/lib/components/kv-error/kv-error.module.mjs +35 -35
  60. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +26 -26
  61. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +37 -37
  62. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +88 -88
  63. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +89 -89
  64. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +29 -29
  65. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +59 -59
  66. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +33 -33
  67. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +21 -21
  68. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +42 -42
  69. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +43 -43
  70. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +24 -24
  71. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +108 -108
  72. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +44 -44
  73. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +53 -53
  74. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +34 -34
  75. package/esm2022/lib/components/kv-label/kv-label.component.mjs +15 -15
  76. package/esm2022/lib/components/kv-label/kv-label.module.mjs +24 -24
  77. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +17 -17
  78. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +28 -28
  79. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +29 -29
  80. package/esm2022/lib/components/kv-login/kv-login.component.mjs +52 -52
  81. package/esm2022/lib/components/kv-login/kv-login.module.mjs +47 -47
  82. package/esm2022/lib/components/kv-menu/kv-menu.component.mjs +189 -188
  83. package/esm2022/lib/components/kv-menu/kv-menu.module.mjs +47 -47
  84. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +67 -67
  85. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +31 -31
  86. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +100 -100
  87. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +24 -24
  88. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +147 -147
  89. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +38 -38
  90. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +48 -48
  91. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +32 -32
  92. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +58 -58
  93. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +28 -28
  94. package/esm2022/lib/components/kv-table/kv-table.component.mjs +554 -554
  95. package/esm2022/lib/components/kv-table/kv-table.module.mjs +36 -36
  96. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +567 -567
  97. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +34 -34
  98. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +215 -215
  99. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +28 -28
  100. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +30 -30
  101. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +28 -28
  102. package/esm2022/lib/components/kv-workspace/kv-workspace.component.mjs +178 -178
  103. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +51 -51
  104. package/esm2022/public-api.mjs +167 -169
  105. package/fesm2022/keevo-components.mjs +5406 -5790
  106. package/fesm2022/keevo-components.mjs.map +1 -1
  107. package/index.d.ts +5 -5
  108. package/lib/api/base-components/base-component-button.d.ts +14 -14
  109. package/lib/api/base-components/base-component-chart.d.ts +40 -40
  110. package/lib/api/base-components/base-component-crud-form.d.ts +145 -145
  111. package/lib/api/base-components/base-component-crud-list.d.ts +63 -63
  112. package/lib/api/base-components/base-component-crud.d.ts +36 -36
  113. package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -15
  114. package/lib/api/base-components/base-component-dropdown.d.ts +44 -44
  115. package/lib/api/base-components/base-component-input.d.ts +31 -31
  116. package/lib/api/base-components/base-component-multi-select.d.ts +35 -35
  117. package/lib/api/base-components/base-component.d.ts +22 -22
  118. package/lib/api/components/chart/chart.config.d.ts +11 -11
  119. package/lib/api/components/chart/chart.model.d.ts +9 -9
  120. package/lib/api/components/chart/orchart.config.d.ts +35 -35
  121. package/lib/api/components/chart/orchart.item.d.ts +26 -26
  122. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -4
  123. package/lib/api/components/table/action-item.d.ts +11 -11
  124. package/lib/api/components/table/kv-menuitem.d.ts +10 -10
  125. package/lib/api/components/table/table-dropdown-control.d.ts +6 -6
  126. package/lib/api/components/table/table.config.column.d.ts +25 -25
  127. package/lib/api/components/table/table.config.d.ts +19 -19
  128. package/lib/api/components/table/table.paginate.d.ts +6 -6
  129. package/lib/api/components/table/tabledit.config.d.ts +8 -8
  130. package/lib/api/components/table/tableedit.config.column.d.ts +10 -10
  131. package/lib/api/directives/template/template.directive.d.ts +11 -11
  132. package/lib/api/helpers/component-providers.d.ts +2 -2
  133. package/lib/api/helpers/keevo-validators.d.ts +11 -11
  134. package/lib/api/helpers/translate-primeng.d.ts +4 -4
  135. package/lib/api/models/menu/menu.model.d.ts +10 -10
  136. package/lib/api/models/menu/menucompleto.model.d.ts +6 -6
  137. package/lib/api/models/menu/sistemamenu.model.d.ts +8 -8
  138. package/lib/api/modules/primeng.module.d.ts +62 -61
  139. package/lib/api/pipes/codigofile.pipe.d.ts +7 -7
  140. package/lib/api/pipes/cpfcnpj.pipe.d.ts +7 -7
  141. package/lib/api/pipes/mask.pipe.d.ts +7 -7
  142. package/lib/api/pipes/pipes.module.d.ts +11 -11
  143. package/lib/api/pipes/telefone.pipe.d.ts +7 -7
  144. package/lib/api/services/base.api.service.d.ts +25 -25
  145. package/lib/api/services/breadcrumbs.service.d.ts +16 -16
  146. package/lib/api/services/component.service.d.ts +11 -11
  147. package/lib/api/services/form.service.d.ts +28 -28
  148. package/lib/api/services/imagens.service.d.ts +10 -10
  149. package/lib/api/services/notification.service.d.ts +25 -25
  150. package/lib/api/services/object.service.d.ts +9 -9
  151. package/lib/components/keevo-components.module.d.ts +24 -25
  152. package/lib/components/kv-avatar/kv-avatar.component.d.ts +22 -22
  153. package/lib/components/kv-avatar/kv-avatar.module.d.ts +10 -10
  154. package/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.d.ts +13 -13
  155. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +13 -13
  156. package/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.d.ts +7 -7
  157. package/lib/components/kv-buttons/kv-button-success/kv-button-success.component.d.ts +7 -7
  158. package/lib/components/kv-buttons/kv-button.module.d.ts +11 -11
  159. package/lib/components/kv-carousel/kv-carousel.component.d.ts +16 -16
  160. package/lib/components/kv-carousel/kv-carousel.module.d.ts +9 -9
  161. package/lib/components/kv-chart/kv-chart.component.d.ts +56 -56
  162. package/lib/components/kv-chart/kv-chart.module.d.ts +10 -10
  163. package/lib/components/kv-error/kv-error.component.d.ts +12 -12
  164. package/lib/components/kv-error/kv-error.module.d.ts +10 -10
  165. package/lib/components/kv-inputs/kv-check/kv-check.component.d.ts +11 -11
  166. package/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.d.ts +14 -14
  167. package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +36 -36
  168. package/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.d.ts +27 -27
  169. package/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.d.ts +12 -12
  170. package/lib/components/kv-inputs/kv-input-number/kv-input-number.component.d.ts +19 -19
  171. package/lib/components/kv-inputs/kv-input-password/kv-input-password.component.d.ts +13 -13
  172. package/lib/components/kv-inputs/kv-input-text/kv-input-text.component.d.ts +9 -9
  173. package/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.d.ts +16 -16
  174. package/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.d.ts +16 -16
  175. package/lib/components/kv-inputs/kv-input-time/kv-input-time.component.d.ts +10 -10
  176. package/lib/components/kv-inputs/kv-inputs.module.d.ts +25 -25
  177. package/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.d.ts +15 -15
  178. package/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.d.ts +18 -18
  179. package/lib/components/kv-inputs/kv-switch/kv-switch.component.d.ts +14 -14
  180. package/lib/components/kv-label/kv-label.component.d.ts +7 -7
  181. package/lib/components/kv-label/kv-label.module.d.ts +8 -8
  182. package/lib/components/kv-loader/kv-loader.component.d.ts +8 -8
  183. package/lib/components/kv-loader/kv-loader.module.d.ts +9 -9
  184. package/lib/components/kv-loader/kv-loader.service.d.ts +10 -10
  185. package/lib/components/kv-login/kv-login.component.d.ts +30 -30
  186. package/lib/components/kv-login/kv-login.module.d.ts +13 -13
  187. package/lib/components/kv-menu/kv-menu.component.d.ts +60 -61
  188. package/lib/components/kv-menu/kv-menu.module.d.ts +13 -13
  189. package/lib/components/kv-modal/kv-modal.component.d.ts +20 -20
  190. package/lib/components/kv-modal/kv-modal.module.d.ts +10 -10
  191. package/lib/components/kv-orgchart/kv-orgchart.component.d.ts +27 -27
  192. package/lib/components/kv-orgchart/kv-orgchart.module.d.ts +9 -9
  193. package/lib/components/kv-page-form/kv-page-form.component.d.ts +70 -70
  194. package/lib/components/kv-page-form/kv-page-form.module.d.ts +11 -11
  195. package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +20 -20
  196. package/lib/components/kv-pick-list/kv-pick-list.module.d.ts +10 -10
  197. package/lib/components/kv-progress-bar/kv-progress-bar.component.d.ts +67 -67
  198. package/lib/components/kv-progress-bar/kv-progress-bar.module.d.ts +9 -9
  199. package/lib/components/kv-table/kv-table.component.d.ts +113 -113
  200. package/lib/components/kv-table/kv-table.module.d.ts +11 -11
  201. package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +116 -116
  202. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +12 -12
  203. package/lib/components/kv-tree-table/kv-tree-table.component.d.ts +42 -42
  204. package/lib/components/kv-tree-table/kv-tree-table.module.d.ts +9 -9
  205. package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +14 -14
  206. package/lib/components/kv-tree-view/kv-tree-view.module.d.ts +9 -9
  207. package/lib/components/kv-workspace/kv-workspace.component.d.ts +46 -46
  208. package/lib/components/kv-workspace/kv-workspace.module.d.ts +14 -14
  209. package/package.json +2 -2
  210. package/public-api.d.ts +163 -165
  211. package/esm2022/lib/components/kv-treetable/kv-treetable.component.mjs +0 -371
  212. package/esm2022/lib/components/kv-treetable/kv-treetable.module.mjs +0 -32
  213. package/lib/components/kv-treetable/kv-treetable.component.d.ts +0 -85
  214. package/lib/components/kv-treetable/kv-treetable.module.d.ts +0 -11
@@ -1,188 +1,189 @@
1
- import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/router";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "primeng/api";
6
- import * as i4 from "primeng/button";
7
- import * as i5 from "primeng/card";
8
- import * as i6 from "primeng/tooltip";
9
- import * as i7 from "primeng/divider";
10
- import * as i8 from "primeng/overlaypanel";
11
- import * as i9 from "primeng/ripple";
12
- import * as i10 from "primeng/sidebar";
13
- import * as i11 from "primeng/styleclass";
14
- import * as i12 from "primeng/breadcrumb";
15
- import * as i13 from "../../api/pipes/cpfcnpj.pipe";
16
- export class KvMenuComponent {
17
- constructor(cdr, router, route) {
18
- this.cdr = cdr;
19
- this.router = router;
20
- this.route = route;
21
- this.breadCrumbItems = [];
22
- this.licencas = [];
23
- this.menuCompleto = [];
24
- this.expandMenuEmit = new EventEmitter();
25
- this.gerenciarKeePassEvent = new EventEmitter();
26
- this.licencaChange = new EventEmitter();
27
- this.sairEvent = new EventEmitter();
28
- this.trocarLicencaEmit = new EventEmitter();
29
- this.menusFiltrados = [];
30
- this.menus = [];
31
- this.expandMenu = true;
32
- this.visibleDialogLicenca = false;
33
- }
34
- ajustarHeigthCard() {
35
- if (this.widthCard > 400) {
36
- if (this.breadCrumbItems.length > 0)
37
- return 105;
38
- else
39
- return 85;
40
- }
41
- else
42
- return 83;
43
- }
44
- callRoute(e, expand) {
45
- if (!expand)
46
- !this.expandMenu ? this.expandMenu = !this.expandMenu : '';
47
- this.router.navigateByUrl(e);
48
- }
49
- closeCallback(e) {
50
- this.sidebarRef.close(e);
51
- }
52
- configurarLicencas() {
53
- setTimeout(() => {
54
- this.definirMenusPorSistema(this.menuCompleto[0]?.sistema.idsistema);
55
- }, 1);
56
- }
57
- definirMenusPorSistema(idsistema) {
58
- this.menus = this.menuCompleto.find((x) => x.sistema.idsistema == idsistema)?.menus || [];
59
- if (this.router.url === '/') {
60
- this.navigateToFirstMenu();
61
- }
62
- else {
63
- const menuSelecionado = this.menus.find((menu) => menu.link.includes(this.router.url.slice(1)));
64
- if (menuSelecionado) {
65
- this.navigateToMenu(menuSelecionado);
66
- }
67
- }
68
- this.sistemasPanel.hide();
69
- }
70
- expandMenuEvent() {
71
- this.expandMenuEmit.emit(this.expandMenu);
72
- }
73
- gerenciarKeePass(event) {
74
- this.sistemasPanel.hide();
75
- this.gerenciarKeePassEvent.emit(event);
76
- }
77
- mascaraNomeLicenca(nomeLicenca) {
78
- if (nomeLicenca) {
79
- if (nomeLicenca.length > 23)
80
- return nomeLicenca.substring(0, 23) + '...';
81
- else
82
- return nomeLicenca;
83
- }
84
- else
85
- return '';
86
- }
87
- navigateToFirstMenu() {
88
- const firstMenu = this.menus[0];
89
- if (firstMenu.menupai) {
90
- const filhos = this.retornarMenuFilhos(firstMenu.idsistema, firstMenu.idmenu);
91
- if (filhos) {
92
- this.callRoute(filhos[0].link, true);
93
- }
94
- }
95
- else {
96
- this.callRoute(firstMenu.link, true);
97
- }
98
- }
99
- navigateToMenu(menu) {
100
- if (menu.menupai) {
101
- const filhos = this.retornarMenuFilhos(menu.idsistema, menu.idmenu);
102
- if (filhos) {
103
- this.callRoute(filhos[0].link, true);
104
- }
105
- }
106
- else {
107
- this.callRoute(menu.link, true);
108
- }
109
- }
110
- ngOnInit() {
111
- this.configurarLicencas();
112
- this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
113
- this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
114
- }
115
- onMouseEnter(index) {
116
- this.mouseOverIndex = index;
117
- }
118
- onMouseFilhoEnter(index) {
119
- this.mouseOverFilhoIndex = index;
120
- }
121
- onMouseLeave() {
122
- this.mouseOverIndex = null;
123
- this.mouseOverFilhoIndex = null;
124
- }
125
- onWindowResize() {
126
- this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
127
- this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
128
- this.cdr.detectChanges();
129
- }
130
- retornarMenuFilhos(idsistema, idmenu) {
131
- return this.menuCompleto.find((x) => x.sistema.idsistema == idsistema)?.menus.filter((x) => x.idmenupai == idmenu);
132
- }
133
- sair(event) {
134
- this.sistemasPanel.hide();
135
- this.sairEvent.emit(event);
136
- }
137
- toggleMenu() {
138
- this.expandMenu = !this.expandMenu;
139
- this.expandMenuEvent();
140
- }
141
- trocarLicenca() {
142
- this.trocarLicencaEmit.emit();
143
- }
144
- verificarPaginaSelecionada(link) {
145
- return this.router.url.includes(link);
146
- }
147
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: KvMenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
148
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: KvMenuComponent, selector: "kv-menu", inputs: { breadCrumbItems: "breadCrumbItems", licencas: "licencas", licencaSelecionada: "licencaSelecionada", logoImage: "logoImage", menuCompleto: "menuCompleto", nomeUsuario: "nomeUsuario" }, outputs: { expandMenuEmit: "expandMenuEmit", gerenciarKeePassEvent: "gerenciarKeePassEvent", licencaChange: "licencaChange", sairEvent: "sairEvent", trocarLicencaEmit: "trocarLicencaEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }, { propertyName: "sidebarRef", first: true, predicate: ["sidebarRef"], descendants: true }, { propertyName: "sistemasPanel", first: true, predicate: ["sistemasPanel"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\r\n\r\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\r\n\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{width: expandMenu ? '300px' : '60px'}\">\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"flex flex-column mx-1\">\r\n <div\r\n class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\">\r\n <img\r\n *ngIf=\"expandMenu\"\r\n alt=\"Card\"\r\n [src]=\"logoImage\"\r\n width=\"150\" />\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"toggleMenu()\"\r\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\r\n [tooltipPosition]=\"'right'\">\r\n <i class=\"material-symbols-outlined\">\r\n menu\r\n </i>\r\n </button>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\">\r\n <div\r\n class=\"flex flex-column cursor-pointer\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"trocarLicenca()\">\r\n <span\r\n class=\"text-sm font-semibold mr-2\"\r\n [pTooltip]=\"this.licencaSelecionada.nome\"\r\n [tooltipPosition]=\"'right'\">\r\n {{mascaraNomeLicenca(this.licencaSelecionada.nome)}}\r\n </span>\r\n <span class=\"text-sm mt-1\">{{this.licencaSelecionada.cpfcnpj |\r\n cpfCnpj }}</span>\r\n </div>\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"trocarLicenca()\"\r\n [pTooltip]=\"'Alterar workspace'\"\r\n [tooltipPosition]=\"'right'\">\r\n <i class=\"material-symbols-outlined\">\r\n sync_alt\r\n </i>\r\n </button>\r\n\r\n </div>\r\n <p-divider type=\"solid\"></p-divider>\r\n </div>\r\n\r\n <div\r\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\r\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\r\n style=\"overflow-y: auto;\">\r\n <!-- menus -->\r\n <li *ngFor=\"let menu of menus; let i = index\">\r\n <!-- menu que n\u00E3o tem filho -->\r\n <a\r\n (mouseenter)=\"onMouseEnter(i)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\r\n (click)=\"callRoute(menu.link)\"\r\n *ngIf=\"!menu.menupai && menu.idmenupai == 0\"\r\n pRipple\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n [tooltipPosition]=\"'right'\"\r\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"menu.icone && menu.icone !== ''\">\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\r\n </a>\r\n <!-- menu com filho -->\r\n <div *ngIf=\"menu.menupai\">\r\n <a\r\n (mouseenter)=\"onMouseEnter(i)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterClass=\"hidden\"\r\n enterActiveClass=\"slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"slideup\"\r\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\r\n [tooltipPosition]=\"'right'\"\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\">\r\n <div class=\"flex flex-row align-items-center\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\r\n *ngIf=\"menu.icone && menu.icone !== ''\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium\"\r\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\r\n </div>\r\n <i\r\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\r\n *ngIf=\"expandMenu\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"></i>\r\n </a>\r\n\r\n <!-- filhos -->\r\n <div\r\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\">\r\n <li *ngFor=\"\r\n let filho of retornarMenuFilhos(menu.idsistema, menu.idmenu); let iFilho = index\r\n \">\r\n <a\r\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"callRoute(filho.link)\"\r\n pRipple\r\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\">\r\n <i\r\n class=\"pi pi-chart-line mr-2 ml-1 adjust-icon-menu\"\r\n *ngIf=\"filho.icone && filho.icone !== ''\"></i>\r\n <span\r\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"expandMenu\">{{ filho.descricaomenu }}</span>\r\n </a>\r\n </li>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden\"\r\n id=\"page-content\">\r\n\r\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\r\n <div>\r\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length - 1]?.label}}</p>\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\r\n [model]=\"breadCrumbItems\"\r\n [style]=\"{backgroundColor: '#d4d3d3'}\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"></p-breadcrumb>\r\n </div>\r\n\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n\r\n <p-button\r\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\r\n icon=\"pi pi-th-large\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"sistemasPanel.toggle($event)\"\r\n [pTooltip]=\"'Sistemas'\"\r\n [tooltipPosition]=\"'left'\"></p-button>\r\n\r\n <p-button\r\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\r\n icon=\"pi pi-user\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\r\n [tooltipPosition]=\"'left'\"\r\n (click)=\"meusDadosPanel.toggle($event)\"></p-button>\r\n\r\n </div>\r\n </div>\r\n\r\n <p-card\r\n class=\"card-container\"\r\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\r\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\">\r\n <div class=\"card-container w-full\">\r\n <ng-content></ng-content>\r\n </div>\r\n </p-card>\r\n\r\n </div>\r\n\r\n <p-overlayPanel\r\n #sistemasPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\">\r\n <ng-template pTemplate=\"container\">\r\n <p class=\"title-style mt-3\">Sistemas</p>\r\n <div\r\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\r\n style=\"width: 250px; height: 100%;\">\r\n <button\r\n *ngFor=\"let menu of menuCompleto\"\r\n pButton\r\n pRipple\r\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\r\n (click)=\"definirMenusPorSistema(menu.sistema.idsistema)\"\r\n [pTooltip]=\"menu.sistema.descricaosistema\"\r\n [tooltipPosition]=\"'left'\">\r\n {{ menu.sistema.nomesistema.charAt(0).toUpperCase() }}\r\n </button>\r\n\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\">\r\n\r\n <ng-template pTemplate=\"container\">\r\n\r\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ?\r\n nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\r\n <div class=\"mt-5 mb-3\">\r\n\r\n </div>\r\n\r\n <p-button\r\n icon=\"pi pi-lock\"\r\n label=\"Ger\u00EAnciar KeevoPass\"\r\n (onClick)=\"gerenciarKeePass($event)\"\r\n styleClass=\"border-noround w-full text-blue-900\"\r\n [text]=\"true\"\r\n [disabled]=\"true\"></p-button>\r\n <p-button\r\n icon=\"pi pi-sign-out\"\r\n label=\"Sair\"\r\n (onClick)=\"sair($event)\"\r\n styleClass=\"border-noround w-full text-blue-900\"\r\n [text]=\"true\"></p-button>\r\n </ng-template>\r\n\r\n </p-overlayPanel>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#fff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}span{font-size:.9rem!important}.breadcrumb-title{font-size:1rem!important;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "size", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i5.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i8.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i9.Ripple, selector: "[pRipple]" }, { kind: "component", type: i10.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i11.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "component", type: i12.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "pipe", type: i13.CpfCnpjPipe, name: "cpfCnpj" }] }); }
149
- }
150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: KvMenuComponent, decorators: [{
151
- type: Component,
152
- args: [{ selector: 'kv-menu', template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\r\n\r\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\r\n\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{width: expandMenu ? '300px' : '60px'}\">\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"flex flex-column mx-1\">\r\n <div\r\n class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\">\r\n <img\r\n *ngIf=\"expandMenu\"\r\n alt=\"Card\"\r\n [src]=\"logoImage\"\r\n width=\"150\" />\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"toggleMenu()\"\r\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\r\n [tooltipPosition]=\"'right'\">\r\n <i class=\"material-symbols-outlined\">\r\n menu\r\n </i>\r\n </button>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\">\r\n <div\r\n class=\"flex flex-column cursor-pointer\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"trocarLicenca()\">\r\n <span\r\n class=\"text-sm font-semibold mr-2\"\r\n [pTooltip]=\"this.licencaSelecionada.nome\"\r\n [tooltipPosition]=\"'right'\">\r\n {{mascaraNomeLicenca(this.licencaSelecionada.nome)}}\r\n </span>\r\n <span class=\"text-sm mt-1\">{{this.licencaSelecionada.cpfcnpj |\r\n cpfCnpj }}</span>\r\n </div>\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"trocarLicenca()\"\r\n [pTooltip]=\"'Alterar workspace'\"\r\n [tooltipPosition]=\"'right'\">\r\n <i class=\"material-symbols-outlined\">\r\n sync_alt\r\n </i>\r\n </button>\r\n\r\n </div>\r\n <p-divider type=\"solid\"></p-divider>\r\n </div>\r\n\r\n <div\r\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\r\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\r\n style=\"overflow-y: auto;\">\r\n <!-- menus -->\r\n <li *ngFor=\"let menu of menus; let i = index\">\r\n <!-- menu que n\u00E3o tem filho -->\r\n <a\r\n (mouseenter)=\"onMouseEnter(i)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\r\n (click)=\"callRoute(menu.link)\"\r\n *ngIf=\"!menu.menupai && menu.idmenupai == 0\"\r\n pRipple\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n [tooltipPosition]=\"'right'\"\r\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"menu.icone && menu.icone !== ''\">\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\r\n </a>\r\n <!-- menu com filho -->\r\n <div *ngIf=\"menu.menupai\">\r\n <a\r\n (mouseenter)=\"onMouseEnter(i)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterClass=\"hidden\"\r\n enterActiveClass=\"slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"slideup\"\r\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\r\n [tooltipPosition]=\"'right'\"\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\">\r\n <div class=\"flex flex-row align-items-center\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\r\n *ngIf=\"menu.icone && menu.icone !== ''\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium\"\r\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\r\n </div>\r\n <i\r\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\r\n *ngIf=\"expandMenu\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"></i>\r\n </a>\r\n\r\n <!-- filhos -->\r\n <div\r\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\">\r\n <li *ngFor=\"\r\n let filho of retornarMenuFilhos(menu.idsistema, menu.idmenu); let iFilho = index\r\n \">\r\n <a\r\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"callRoute(filho.link)\"\r\n pRipple\r\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\">\r\n <i\r\n class=\"pi pi-chart-line mr-2 ml-1 adjust-icon-menu\"\r\n *ngIf=\"filho.icone && filho.icone !== ''\"></i>\r\n <span\r\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"expandMenu\">{{ filho.descricaomenu }}</span>\r\n </a>\r\n </li>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden\"\r\n id=\"page-content\">\r\n\r\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\r\n <div>\r\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length - 1]?.label}}</p>\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\r\n [model]=\"breadCrumbItems\"\r\n [style]=\"{backgroundColor: '#d4d3d3'}\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"></p-breadcrumb>\r\n </div>\r\n\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n\r\n <p-button\r\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\r\n icon=\"pi pi-th-large\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"sistemasPanel.toggle($event)\"\r\n [pTooltip]=\"'Sistemas'\"\r\n [tooltipPosition]=\"'left'\"></p-button>\r\n\r\n <p-button\r\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\r\n icon=\"pi pi-user\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\r\n [tooltipPosition]=\"'left'\"\r\n (click)=\"meusDadosPanel.toggle($event)\"></p-button>\r\n\r\n </div>\r\n </div>\r\n\r\n <p-card\r\n class=\"card-container\"\r\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\r\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\">\r\n <div class=\"card-container w-full\">\r\n <ng-content></ng-content>\r\n </div>\r\n </p-card>\r\n\r\n </div>\r\n\r\n <p-overlayPanel\r\n #sistemasPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\">\r\n <ng-template pTemplate=\"container\">\r\n <p class=\"title-style mt-3\">Sistemas</p>\r\n <div\r\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\r\n style=\"width: 250px; height: 100%;\">\r\n <button\r\n *ngFor=\"let menu of menuCompleto\"\r\n pButton\r\n pRipple\r\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\r\n (click)=\"definirMenusPorSistema(menu.sistema.idsistema)\"\r\n [pTooltip]=\"menu.sistema.descricaosistema\"\r\n [tooltipPosition]=\"'left'\">\r\n {{ menu.sistema.nomesistema.charAt(0).toUpperCase() }}\r\n </button>\r\n\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\">\r\n\r\n <ng-template pTemplate=\"container\">\r\n\r\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ?\r\n nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\r\n <div class=\"mt-5 mb-3\">\r\n\r\n </div>\r\n\r\n <p-button\r\n icon=\"pi pi-lock\"\r\n label=\"Ger\u00EAnciar KeevoPass\"\r\n (onClick)=\"gerenciarKeePass($event)\"\r\n styleClass=\"border-noround w-full text-blue-900\"\r\n [text]=\"true\"\r\n [disabled]=\"true\"></p-button>\r\n <p-button\r\n icon=\"pi pi-sign-out\"\r\n label=\"Sair\"\r\n (onClick)=\"sair($event)\"\r\n styleClass=\"border-noround w-full text-blue-900\"\r\n [text]=\"true\"></p-button>\r\n </ng-template>\r\n\r\n </p-overlayPanel>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#fff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}span{font-size:.9rem!important}.breadcrumb-title{font-size:1rem!important;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"] }]
153
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { breadCrumbItems: [{
154
- type: Input
155
- }], licencas: [{
156
- type: Input
157
- }], licencaSelecionada: [{
158
- type: Input
159
- }], logoImage: [{
160
- type: Input
161
- }], menuCompleto: [{
162
- type: Input
163
- }], nomeUsuario: [{
164
- type: Input
165
- }], expandMenuEmit: [{
166
- type: Output
167
- }], gerenciarKeePassEvent: [{
168
- type: Output
169
- }], licencaChange: [{
170
- type: Output
171
- }], sairEvent: [{
172
- type: Output
173
- }], trocarLicencaEmit: [{
174
- type: Output
175
- }], meusDadosPanel: [{
176
- type: ViewChild,
177
- args: ['meusDadosPanel']
178
- }], sidebarRef: [{
179
- type: ViewChild,
180
- args: ['sidebarRef']
181
- }], sistemasPanel: [{
182
- type: ViewChild,
183
- args: ['sistemasPanel']
184
- }], onWindowResize: [{
185
- type: HostListener,
186
- args: ['window:resize', ['$event']]
187
- }] } });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi1tZW51L2t2LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtbWVudS9rdi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBY3ZCLE1BQU0sT0FBTyxlQUFlO0lBNkIxQixZQUFvQixHQUFzQixFQUFZLE1BQWMsRUFBVSxLQUFxQjtRQUEvRSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQTNCMUYsb0JBQWUsR0FBNEMsRUFBRSxDQUFDO1FBQzlELGFBQVEsR0FBdUIsRUFBRSxDQUFBO1FBR2pDLGlCQUFZLEdBQXdCLEVBQUUsQ0FBQztRQUd0QyxtQkFBYyxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNELDBCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELHNCQUFpQixHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBTXhFLG1CQUFjLEdBQXdCLEVBQUUsQ0FBQztRQUN6QyxVQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUV4QixlQUFVLEdBQVksSUFBSSxDQUFDO1FBSTNCLHlCQUFvQixHQUFZ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LElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsMEJBQTBCLENBQUMsSUFBUztRQUNsQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDOytHQTdKVSxlQUFlO21HQUFmLGVBQWUsa3lCQzdCNUIsKzRXQWdRcUI7OzRGRG5PUixlQUFlO2tCQUwzQixTQUFTOytCQUNFLFNBQVM7MEpBTVYsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUVzQixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDRixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0ssYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlO2dCQWtIMUIsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlLFxyXG4gIFJvdXRlclxyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNYXN0ZXJDb21ib01vZGVsIH0gZnJvbSAna2Vldm8tYXBpLXNlcnZpY2VzLWtlZXZvY2VudGVyJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAncHJpbWVuZy9zaWRlYmFyJztcclxuXHJcbmltcG9ydCB7IG1lbnVDb21wbGV0b01vZGVsIH0gZnJvbSAnLi4vLi4vYXBpL21vZGVscy9tZW51L21lbnVjb21wbGV0by5tb2RlbCc7XHJcbmltcG9ydCB7IG1lbnVNb2RlbCB9IGZyb20gJy4uLy4uL2FwaS9tb2RlbHMvbWVudS9tZW51Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2t2LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LW1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEt2TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGJyZWFkQ3J1bWJJdGVtczogeyBsYWJlbDogc3RyaW5nLCByb3V0ZXJMaW5rOiBzdHJpbmcgfVtdID0gW107XHJcbiAgQElucHV0KCkgbGljZW5jYXM6IE1hc3RlckNvbWJvTW9kZWxbXSA9IFtdXHJcbiAgQElucHV0KCkgbGljZW5jYVNlbGVjaW9uYWRhITogTWFzdGVyQ29tYm9Nb2RlbDtcclxuICBASW5wdXQoKSBsb2dvSW1hZ2UhOiBhbnk7XHJcbiAgQElucHV0KCkgbWVudUNvbXBsZXRvOiBtZW51Q29tcGxldG9Nb2RlbFtdID0gW107XHJcbiAgQElucHV0KCkgbm9tZVVzdWFyaW8hOiBzdHJpbmc7XHJcblxyXG4gIEBPdXRwdXQoKSBleHBhbmRNZW51RW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBnZXJlbmNpYXJLZWVQYXNzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBsaWNlbmNhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2FpckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdHJvY2FyTGljZW5jYUVtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbWV1c0RhZG9zUGFuZWwnKSBtZXVzRGFkb3NQYW5lbCE6IE92ZXJsYXlQYW5lbDtcclxuICBAVmlld0NoaWxkKCdzaWRlYmFyUmVmJykgc2lkZWJhclJlZiE6IFNpZGViYXI7XHJcbiAgQFZpZXdDaGlsZCgnc2lzdGVtYXNQYW5lbCcpIHNpc3RlbWFzUGFuZWwhOiBPdmVybGF5UGFuZWw7XHJcblxyXG4gIG1lbnVzRmlsdHJhZG9zOiBtZW51Q29tcGxldG9Nb2RlbFtdID0gW107XHJcbiAgbWVudXM6IG1lbnVNb2RlbFtdID0gW107XHJcblxyXG4gIGV4cGFuZE1lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGhlaWd0aENhcmQhOiBudW1iZXI7XHJcbiAgbW91c2VPdmVyRmlsaG9JbmRleDogYW55O1xyXG4gIG1vdXNlT3ZlckluZGV4OiBhbnk7XHJcbiAgdmlzaWJsZURpYWxvZ0xpY2VuY2E6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3aWR0aENhcmQhOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkgeyB9XHJcblxyXG4gIGFqdXN0YXJIZWlndGhDYXJkKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy53aWR0aENhcmQgPiA0MDApIHtcclxuICAgICAgaWYgKHRoaXMuYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCA+IDApIHJldHVybiAxMDVcclxuICAgICAgZWxzZSByZXR1cm4gODVcclxuICAgIH0gZWxzZSByZXR1cm4gODNcclxuICB9XHJcblxyXG4gIGNhbGxSb3V0ZShlOiBhbnksIGV4cGFuZD86IGJvb2xlYW4pIHtcclxuICAgIGlmICghZXhwYW5kKVxyXG4gICAgICAhdGhpcy5leHBhbmRNZW51ID8gdGhpcy5leHBhbmRNZW51ID0gIXRoaXMuZXhwYW5kTWVudSA6ICcnO1xyXG5cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZSlcclxuICB9XHJcblxyXG4gIGNsb3NlQ2FsbGJhY2soZTogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuc2lkZWJhclJlZi5jbG9zZShlKTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyYXJMaWNlbmNhcygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRlZmluaXJNZW51c1BvclNpc3RlbWEodGhpcy5tZW51Q29tcGxldG9bMF0/LnNpc3RlbWEuaWRzaXN0ZW1hKVxyXG4gICAgfSwgMSk7XHJcbiAgfVxyXG5cclxuICBkZWZpbmlyTWVudXNQb3JTaXN0ZW1hKGlkc2lzdGVtYTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1lbnVzID0gdGhpcy5tZW51Q29tcGxldG8uZmluZCgoeCkgPT4geC5zaXN0ZW1hLmlkc2lzdGVtYSA9PSBpZHNpc3RlbWEpPy5tZW51cyB8fCBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsID09PSAnLycpIHtcclxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvRmlyc3RNZW51KClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zdCBtZW51U2VsZWNpb25hZG8gPSB0aGlzLm1lbnVzLmZpbmQoKG1lbnU6IGFueSkgPT4gbWVudS5saW5rLmluY2x1ZGVzKHRoaXMucm91dGVyLnVybC5zbGljZSgxKSkpO1xyXG4gICAgICBpZiAobWVudVNlbGVjaW9uYWRvKSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTWVudShtZW51U2VsZWNpb25hZG8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaXN0ZW1hc1BhbmVsLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZE1lbnVFdmVudCgpIHtcclxuICAgIHRoaXMuZXhwYW5kTWVudUVtaXQuZW1pdCh0aGlzLmV4cGFuZE1lbnUpO1xyXG4gIH1cclxuXHJcbiAgZ2VyZW5jaWFyS2VlUGFzcyhldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNpc3RlbWFzUGFuZWwuaGlkZSgpO1xyXG4gICAgdGhpcy5nZXJlbmNpYXJLZWVQYXNzRXZlbnQuZW1pdChldmVudClcclxuICB9XHJcblxyXG4gIG1hc2NhcmFOb21lTGljZW5jYShub21lTGljZW5jYTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChub21lTGljZW5jYSkge1xyXG4gICAgICBpZiAobm9tZUxpY2VuY2EubGVuZ3RoID4gMjMpXHJcbiAgICAgICAgcmV0dXJuIG5vbWVMaWNlbmNhLnN1YnN0cmluZygwLCAyMykgKyAnLi4uJztcclxuICAgICAgZWxzZSByZXR1cm4gbm9tZUxpY2VuY2E7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb0ZpcnN0TWVudSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZpcnN0TWVudSA9IHRoaXMubWVudXNbMF07XHJcbiAgICBpZiAoZmlyc3RNZW51Lm1lbnVwYWkpIHtcclxuICAgICAgY29uc3QgZmlsaG9zID0gdGhpcy5yZXRvcm5hck1lbnVGaWxob3MoZmlyc3RNZW51Lmlkc2lzdGVtYSwgZmlyc3RNZW51LmlkbWVudSk7XHJcbiAgICAgIGlmIChmaWxob3MpIHtcclxuICAgICAgICB0aGlzLmNhbGxSb3V0ZShmaWxob3NbMF0ubGluaywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FsbFJvdXRlKGZpcnN0TWVudS5saW5rLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9NZW51KG1lbnU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKG1lbnUubWVudXBhaSkge1xyXG4gICAgICBjb25zdCBmaWxob3MgPSB0aGlzLnJldG9ybmFyTWVudUZpbGhvcyhtZW51Lmlkc2lzdGVtYSwgbWVudS5pZG1lbnUpO1xyXG4gICAgICBpZiAoZmlsaG9zKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUm91dGUoZmlsaG9zWzBdLmxpbmssIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhbGxSb3V0ZShtZW51LmxpbmssIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXJMaWNlbmNhcygpO1xyXG4gICAgdGhpcy5oZWlndGhDYXJkID0gTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLWNvbnRlbnQnKT8ub2Zmc2V0SGVpZ2h0KTtcclxuICAgIHRoaXMud2lkdGhDYXJkID0gTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKSAtICh0aGlzLmV4cGFuZE1lbnUgPyAzMzMgOiA5Myk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlRW50ZXIoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5tb3VzZU92ZXJJbmRleCA9IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgb25Nb3VzZUZpbGhvRW50ZXIoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5tb3VzZU92ZXJGaWxob0luZGV4ID0gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTGVhdmUoKSB7XHJcbiAgICB0aGlzLm1vdXNlT3ZlckluZGV4ID0gbnVsbDtcclxuICAgIHRoaXMubW91c2VPdmVyRmlsaG9JbmRleCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMuaGVpZ3RoQ2FyZCA9IE51bWJlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1jb250ZW50Jyk/Lm9mZnNldEhlaWdodCk7XHJcbiAgICB0aGlzLndpZHRoQ2FyZCA9IE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCkgLSAodGhpcy5leHBhbmRNZW51ID8gMzMzIDogOTMpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcmV0b3JuYXJNZW51RmlsaG9zKGlkc2lzdGVtYTogbnVtYmVyLCBpZG1lbnU6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMubWVudUNvbXBsZXRvLmZpbmQoKHgpID0+IHguc2lzdGVtYS5pZHNpc3RlbWEgPT0gaWRzaXN0ZW1hKT8ubWVudXMuZmlsdGVyKCh4KSA9PiB4LmlkbWVudXBhaSA9PSBpZG1lbnUpO1xyXG4gIH1cclxuXHJcbiAgc2FpcihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnNpc3RlbWFzUGFuZWwuaGlkZSgpO1xyXG4gICAgdGhpcy5zYWlyRXZlbnQuZW1pdChldmVudClcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1lbnUoKSB7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnUgPSAhdGhpcy5leHBhbmRNZW51O1xyXG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKVxyXG4gIH1cclxuXHJcbiAgdHJvY2FyTGljZW5jYSgpIHtcclxuICAgIHRoaXMudHJvY2FyTGljZW5jYUVtaXQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZpY2FyUGFnaW5hU2VsZWNpb25hZGEobGluazogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKGxpbmspO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBvdmVyZmxvdy15LWhpZGRlbiB3LSBmdWxsLWNvbnRhaW5lclwiPlxyXG5cclxuICA8ZGl2IFtzdHlsZV09XCJ7bWluV2lkdGg6IGV4cGFuZE1lbnUgPyAnMzAwcHgnIDogJzYwcHgnfVwiPjwvZGl2PlxyXG5cclxuICA8cC1zaWRlYmFyXHJcbiAgICAjc2lkZWJhclJlZlxyXG4gICAgW3Zpc2libGVdPVwidHJ1ZVwiXHJcbiAgICBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiXHJcbiAgICBbbW9kYWxdPVwiZmFsc2VcIlxyXG4gICAgW3N0eWxlXT1cInt3aWR0aDogZXhwYW5kTWVudSA/ICczMDBweCcgOiAnNjBweCd9XCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGxlc3NcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gbXgtMVwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LXNocmluay0wIG14LTJcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB7e2V4cGFuZE1lbnUgPyAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nIDogJ2p1c3RpZnktY29udGVudC1jZW50ZXInfX0gcHktM1wiPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcclxuICAgICAgICAgICAgICBhbHQ9XCJDYXJkXCJcclxuICAgICAgICAgICAgICBbc3JjXT1cImxvZ29JbWFnZVwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxNTBcIiAvPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwYWRkaW5nLXN0eWxlIGgtMnJlbSB3LTJyZW0gaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgaWNvbi1tZW51XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgpXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZXhwYW5kTWVudSA/ICdPY3V0YXIgTWVudScgOiAnRXhwYW5kaXIgTWVudSdcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgbWVudVxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ319XCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRyb2NhckxpY2VuY2EoKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gZm9udC1zZW1pYm9sZCBtci0yXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJ0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYS5ub21lXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiPlxyXG4gICAgICAgICAgICAgICAge3ttYXNjYXJhTm9tZUxpY2VuY2EodGhpcy5saWNlbmNhU2VsZWNpb25hZGEubm9tZSl9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gbXQtMVwiPnt7dGhpcy5saWNlbmNhU2VsZWNpb25hZGEuY3BmY25waiB8XHJcbiAgICAgICAgICAgICAgICBjcGZDbnBqIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcGFkZGluZy1zdHlsZSBoLTJyZW0gdy0ycmVtIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIGljb24tbWVudVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRyb2NhckxpY2VuY2EoKVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBbHRlcmFyIHdvcmtzcGFjZSdcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgc3luY19hbHRcclxuICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHAtZGl2aWRlciB0eXBlPVwic29saWRcIj48L3AtZGl2aWRlcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJsaXN0LW5vbmUgbS0wICBjYXJkLWNvbnRhaW5lciB7e2V4cGFuZE1lbnUgPyAnbXgtMScgOiAnJ319XCJcclxuICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIihoZWlndGhDYXJkIC0gMjIwKSArICdweCdcIlxyXG4gICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvO1wiPlxyXG4gICAgICAgICAgPCEtLSBtZW51cyAtLT5cclxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbWVudSBvZiBtZW51czsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICA8IS0tIG1lbnUgcXVlIG7Do28gdGVtIGZpbGhvIC0tPlxyXG4gICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcihpKVwiXHJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaG92ZXItY29sb3InOiBtb3VzZU92ZXJJbmRleCA9PT0gaX1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYWxsUm91dGUobWVudS5saW5rKVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWVudS5tZW51cGFpICYmIG1lbnUuaWRtZW51cGFpID09IDBcIlxyXG4gICAgICAgICAgICAgIHBSaXBwbGVcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUgPyBtZW51LmRlc2NyaWNhb21lbnUgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInt7dmVyaWZpY2FyUGFnaW5hU2VsZWNpb25hZGEobWVudS5saW5rKSA/ICdiZy1ncmVlbi02MDAnIDogJyd9fSBtZW51LW9wdGlvbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBuby11bmRlcmxpbmUge3shZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJyA6ICcnfX0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXJvdW5kIHRleHQtNzAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tZHVyYXRpb24tMTUwIHRyYW5zaXRpb24tY29sb3JzIHAtcmlwcGxlXCI+XHJcblxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1tZW51IHt7ZXhwYW5kTWVudSA/ICdtbC0xIG1yLTInIDogJyd9fSAgaWNvbi1ob3Zlci1jb2xvciB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKG1lbnUubGluaykgPyAndGV4dC13aGl0ZScgOiAnJ319XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5pY29uZSAmJiBtZW51Lmljb25lICE9PSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgbWVudS5pY29uZSB9fVxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJhc2UgdGV4dC1ibHVlLTkwMCBmb250LW1lZGl1bSB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKG1lbnUubGluaykgPyAndGV4dC13aGl0ZScgOiAnJ319XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiPnt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8IS0tIG1lbnUgY29tIGZpbGhvIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWVudS5tZW51cGFpXCI+XHJcbiAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcihpKVwiXHJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hvdmVyLWNvbG9yJzogbW91c2VPdmVySW5kZXggPT09IGl9XCJcclxuICAgICAgICAgICAgICAgIHBSaXBwbGVcclxuICAgICAgICAgICAgICAgIHBTdHlsZUNsYXNzPVwiQG5leHRcIlxyXG4gICAgICAgICAgICAgICAgZW50ZXJDbGFzcz1cImhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICBlbnRlckFjdGl2ZUNsYXNzPVwic2xpZGVkb3duXCJcclxuICAgICAgICAgICAgICAgIGxlYXZlVG9DbGFzcz1cImhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICBsZWF2ZUFjdGl2ZUNsYXNzPVwic2xpZGV1cFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtb3B0aW9uIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIHt7IWV4cGFuZE1lbnUgPyAnanVzdGlmeS1jb250ZW50LWNlbnRlcicgOiAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nfX0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXJvdW5kIHRleHQtNzAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tZHVyYXRpb24tMTUwIHRyYW5zaXRpb24tY29sb3JzIHAtcmlwcGxlXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUgPyBtZW51LmRlc2NyaWNhb21lbnUgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiIWV4cGFuZE1lbnUgPyBleHBhbmRNZW51ID0gIWV4cGFuZE1lbnUgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLW1lbnUge3tleHBhbmRNZW51ID8gJ21sLTEgbXItMicgOiAnJ319IGljb24taG92ZXItY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibWVudS5pY29uZSAmJiBtZW51Lmljb25lICE9PSAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG1lbnUuaWNvbmUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgZm9udC1tZWRpdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiPnt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwaSBwaS1jaGV2cm9uLWRvd24gdGV4dC1ibHVlLTkwMCBtci0xIGljb24taG92ZXItY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hvdmVyLWNvbG9yJzogbW91c2VPdmVySW5kZXggPT09IGl9XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBmaWxob3MgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LW5vbmUgcHktMCBwbC0zIHByLTAgbS0wIGhpZGRlbiBvdmVyZmxvdy15LWhpZGRlbiB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTQwMCB0cmFuc2l0aW9uLWVhc2UtaW4tb3V0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgbGV0IGZpbGhvIG9mIHJldG9ybmFyTWVudUZpbGhvcyhtZW51Lmlkc2lzdGVtYSwgbWVudS5pZG1lbnUpOyAgbGV0IGlGaWxobyA9IGluZGV4XHJcbiAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VGaWxob0VudGVyKGZpbGhvLmlkbWVudSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hvdmVyLWNvbG9yJzogbW91c2VPdmVyRmlsaG9JbmRleCA9PT0gZmlsaG8uaWRtZW51fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKGZpbGhvLmxpbmspXCJcclxuICAgICAgICAgICAgICAgICAgICBwUmlwcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGZpbGhvLmxpbmspID8gJ2JnLWdyZWVuLTYwMCcgOiAnJ319IG1lbnUtb3B0aW9uIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIG5vLXVuZGVybGluZSBjdXJzb3ItcG9pbnRlciBib3JkZXItcm91bmQgdGV4dC03MDAgaG92ZXI6YmctZ3JlZW4tNjAwIHRyYW5zaXRpb24tZHVyYXRpb24tMTUwIHRyYW5zaXRpb24tY29sb3JzIHAtcmlwcGxlIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHBpLWNoYXJ0LWxpbmUgbXItMiBtbC0xIGFkanVzdC1pY29uLW1lbnVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWxoby5pY29uZSAmJiBmaWxoby5pY29uZSAhPT0gJydcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgbWwtNCB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGZpbGhvLmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIj57eyBmaWxoby5kZXNjcmljYW9tZW51IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXNpZGViYXI+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInctYXV0byBoLXNjcmVlbiBwYWdlLWNvbnRlbnQgb3ZlcmZsb3cteS1oaWRkZW5cIlxyXG4gICAgICBpZD1cInBhZ2UtY29udGVudFwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG0tM1wiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LWJsdWUtOTAwIGJyZWFkY3J1bWItdGl0bGVcIj57e2JyZWFkQ3J1bWJJdGVtc1ticmVhZENydW1iSXRlbXMubGVuZ3RoIC0gMV0/LmxhYmVsfX08L3A+XHJcbiAgICAgICAgICA8cC1icmVhZGNydW1iXHJcbiAgICAgICAgICAgICpuZ0lmPVwid2lkdGhDYXJkID4gNDAwXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub25lIHAtMCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTJyZW0gIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICBbbW9kZWxdPVwiYnJlYWRDcnVtYkl0ZW1zXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cIntiYWNrZ3JvdW5kQ29sb3I6ICcjZDRkM2QzJ31cIlxyXG4gICAgICAgICAgICAob25JdGVtQ2xpY2spPVwiY2FsbFJvdXRlKCRldmVudC5pdGVtLnJvdXRlckxpbmssIHRydWUpXCI+PC9wLWJyZWFkY3J1bWI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuXHJcbiAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMnJlbSBoLTJyZW0gdGV4dC1ibHVlLTkwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS10aC1sYXJnZVwiXHJcbiAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNpc3RlbWFzUGFuZWwudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1Npc3RlbWFzJ1wiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCI+PC9wLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMnJlbSBoLTJyZW0gdGV4dC1ibHVlLTkwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS11c2VyXCJcclxuICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ01lbnUgZG8gVXN1w6FyaW8nXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibWV1c0RhZG9zUGFuZWwudG9nZ2xlKCRldmVudClcIj48L3AtYnV0dG9uPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8cC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJjYXJkLWNvbnRhaW5lclwiXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cIm0tMyBib3JkZXItbm9yb3VuZCBvdmVyZmxvdy15LWF1dG8gY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7aGVpZ2h0OiBoZWlndGhDYXJkIC0gYWp1c3RhckhlaWd0aENhcmQoKSArICdweCd9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGFpbmVyIHctZnVsbFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3AtY2FyZD5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8cC1vdmVybGF5UGFuZWxcclxuICAgICAgI3Npc3RlbWFzUGFuZWxcclxuICAgICAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCInMzUwbXMgZWFzZS1vdXQnXCJcclxuICAgICAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCInMjUwbXMgZWFzZS1pbidcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxwIGNsYXNzPVwidGl0bGUtc3R5bGUgbXQtM1wiPlNpc3RlbWFzPC9wPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtNSBtYi0zXCJcclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVDb21wbGV0b1wiXHJcbiAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgcFJpcHBsZVxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0bi1zaXN0ZW1hLTIgYnRuLXNpc3RlbWEgaG92ZXItYnRuLWNvci1wYWRyYW8gcmVtb3ZlLWZvY3VzIGgtNHJlbSB3LTRyZW1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVmaW5pck1lbnVzUG9yU2lzdGVtYShtZW51LnNpc3RlbWEuaWRzaXN0ZW1hKVwiXHJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJtZW51LnNpc3RlbWEuZGVzY3JpY2Fvc2lzdGVtYVwiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCI+XHJcbiAgICAgICAgICAgIHt7IG1lbnUuc2lzdGVtYS5ub21lc2lzdGVtYS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLW92ZXJsYXlQYW5lbD5cclxuXHJcbiAgICA8cC1vdmVybGF5UGFuZWxcclxuICAgICAgI21ldXNEYWRvc1BhbmVsXHJcbiAgICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzM1MG1zIGVhc2Utb3V0J1wiXHJcbiAgICAgIFtoaWRlVHJhbnNpdGlvbk9wdGlvbnNdPVwiJzI1MG1zIGVhc2UtaW4nXCI+XHJcblxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGFpbmVyXCI+XHJcblxyXG4gICAgICAgIDxwIGNsYXNzPVwidGl0bGUtc3R5bGUgbXQtM1wiPk9sw6EsIHt7bm9tZVVzdWFyaW8gP1xyXG4gICAgICAgICAgbm9tZVVzdWFyaW8uc3BsaXQoJyAnKVswXSA6ICdVc3XDoXJpbyd9fSAhPC9wPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC01IG1iLTNcIj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgaWNvbj1cInBpIHBpLWxvY2tcIlxyXG4gICAgICAgICAgbGFiZWw9XCJHZXLDqm5jaWFyIEtlZXZvUGFzc1wiXHJcbiAgICAgICAgICAob25DbGljayk9XCJnZXJlbmNpYXJLZWVQYXNzKCRldmVudClcIlxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub3JvdW5kIHctZnVsbCB0ZXh0LWJsdWUtOTAwXCJcclxuICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj48L3AtYnV0dG9uPlxyXG4gICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgaWNvbj1cInBpIHBpLXNpZ24tb3V0XCJcclxuICAgICAgICAgIGxhYmVsPVwiU2FpclwiXHJcbiAgICAgICAgICAob25DbGljayk9XCJzYWlyKCRldmVudClcIlxyXG4gICAgICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub3JvdW5kIHctZnVsbCB0ZXh0LWJsdWUtOTAwXCJcclxuICAgICAgICAgIFt0ZXh0XT1cInRydWVcIj48L3AtYnV0dG9uPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDwvcC1vdmVybGF5UGFuZWw+Il19
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/router";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "primeng/api";
6
+ import * as i4 from "primeng/button";
7
+ import * as i5 from "primeng/card";
8
+ import * as i6 from "primeng/tooltip";
9
+ import * as i7 from "primeng/divider";
10
+ import * as i8 from "primeng/overlaypanel";
11
+ import * as i9 from "primeng/ripple";
12
+ import * as i10 from "primeng/sidebar";
13
+ import * as i11 from "primeng/styleclass";
14
+ import * as i12 from "primeng/breadcrumb";
15
+ import * as i13 from "../../api/pipes/cpfcnpj.pipe";
16
+ export class KvMenuComponent {
17
+ constructor(cdr, router, route) {
18
+ this.cdr = cdr;
19
+ this.router = router;
20
+ this.route = route;
21
+ this.aplicativos = [];
22
+ this.breadCrumbItems = [];
23
+ this.licencas = [];
24
+ this.expandMenuEmit = new EventEmitter();
25
+ this.gerenciarKeePassEvent = new EventEmitter();
26
+ this.licencaChange = new EventEmitter();
27
+ this.sairEvent = new EventEmitter();
28
+ this.trocarLicencaEmit = new EventEmitter();
29
+ this.menusFiltrados = [];
30
+ this.menus = [];
31
+ this.expandMenu = true;
32
+ this.visibleDialogLicenca = false;
33
+ }
34
+ ajustarHeigthCard() {
35
+ if (this.widthCard > 400) {
36
+ if (this.breadCrumbItems.length > 0)
37
+ return 105;
38
+ else
39
+ return 85;
40
+ }
41
+ else
42
+ return 83;
43
+ }
44
+ callRoute(e, expand) {
45
+ if (!expand)
46
+ !this.expandMenu ? this.expandMenu = !this.expandMenu : '';
47
+ this.router.navigateByUrl(e);
48
+ }
49
+ closeCallback(e) {
50
+ this.sidebarRef.close(e);
51
+ }
52
+ configurarLicencas() {
53
+ setTimeout(() => {
54
+ this.definirMenusPorSistema(this.aplicativos[0]?.idaplicativo);
55
+ }, 1);
56
+ }
57
+ definirMenusPorSistema(idaplicativo) {
58
+ this.menus = this.aplicativos.find((x) => x.idaplicativo == idaplicativo)?.menus || [];
59
+ if (this.router.url === '/') {
60
+ this.navigateToFirstMenu();
61
+ }
62
+ else {
63
+ const menuSelecionado = this.menus.find((menu) => menu.link.includes(this.router.url.slice(1)));
64
+ if (menuSelecionado) {
65
+ this.navigateToMenu(menuSelecionado);
66
+ }
67
+ }
68
+ this.sistemasPanel.hide();
69
+ }
70
+ expandMenuEvent() {
71
+ this.expandMenuEmit.emit(this.expandMenu);
72
+ }
73
+ gerenciarKeePass(event) {
74
+ this.sistemasPanel.hide();
75
+ this.gerenciarKeePassEvent.emit(event);
76
+ }
77
+ mascaraNomeLicenca(nomeLicenca) {
78
+ if (nomeLicenca) {
79
+ if (nomeLicenca.length > 23)
80
+ return nomeLicenca.substring(0, 23) + '...';
81
+ else
82
+ return nomeLicenca;
83
+ }
84
+ else
85
+ return '';
86
+ }
87
+ navigateToFirstMenu() {
88
+ const firstMenu = this.menus[0];
89
+ if (firstMenu.indmenupai) {
90
+ const filhos = this.retornarMenuFilhos(firstMenu.idaplicativo, firstMenu.idmenu);
91
+ if (filhos) {
92
+ this.callRoute(filhos[0].link, true);
93
+ }
94
+ }
95
+ else {
96
+ this.callRoute(firstMenu.link, true);
97
+ }
98
+ }
99
+ navigateToMenu(menu) {
100
+ if (menu.menupai) {
101
+ const filhos = this.retornarMenuFilhos(menu.idsistema, menu.idmenu);
102
+ if (filhos) {
103
+ this.callRoute(filhos[0].link, true);
104
+ }
105
+ }
106
+ else {
107
+ this.callRoute(menu.link, true);
108
+ }
109
+ }
110
+ ngOnInit() {
111
+ this.configurarLicencas();
112
+ this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
113
+ this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
114
+ this.expandMenuEvent();
115
+ }
116
+ onMouseEnter(index) {
117
+ this.mouseOverIndex = index;
118
+ }
119
+ onMouseFilhoEnter(index) {
120
+ this.mouseOverFilhoIndex = index;
121
+ }
122
+ onMouseLeave() {
123
+ this.mouseOverIndex = null;
124
+ this.mouseOverFilhoIndex = null;
125
+ }
126
+ onWindowResize() {
127
+ this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
128
+ this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
129
+ this.cdr.detectChanges();
130
+ }
131
+ retornarMenuFilhos(idaplicativo, idmenu) {
132
+ return this.aplicativos.find((x) => x.idaplicativo == idaplicativo)?.menus.filter((x) => x.idmenupai == idmenu);
133
+ }
134
+ sair(event) {
135
+ this.sistemasPanel.hide();
136
+ this.sairEvent.emit(event);
137
+ }
138
+ toggleMenu() {
139
+ this.expandMenu = !this.expandMenu;
140
+ this.expandMenuEvent();
141
+ }
142
+ trocarLicenca() {
143
+ this.trocarLicencaEmit.emit();
144
+ }
145
+ verificarPaginaSelecionada(link) {
146
+ return this.router.url.includes(link);
147
+ }
148
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: KvMenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
149
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: KvMenuComponent, selector: "kv-menu", inputs: { aplicativos: "aplicativos", breadCrumbItems: "breadCrumbItems", licencas: "licencas", licencaSelecionada: "licencaSelecionada", logoImage: "logoImage", nomeUsuario: "nomeUsuario" }, outputs: { expandMenuEmit: "expandMenuEmit", gerenciarKeePassEvent: "gerenciarKeePassEvent", licencaChange: "licencaChange", sairEvent: "sairEvent", trocarLicencaEmit: "trocarLicencaEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }, { propertyName: "sidebarRef", first: true, predicate: ["sidebarRef"], descendants: true }, { propertyName: "sistemasPanel", first: true, predicate: ["sistemasPanel"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\n\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\n\n <p-sidebar\n #sidebarRef\n [visible]=\"true\"\n [showCloseIcon]=\"false\"\n [modal]=\"false\"\n [style]=\"{width: expandMenu ? '300px' : '60px'}\">\n <ng-template pTemplate=\"headless\">\n <div class=\"flex flex-column mx-1\">\n <div\n class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\">\n <img\n *ngIf=\"expandMenu\"\n alt=\"Card\"\n [src]=\"logoImage\"\n width=\"150\" />\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"toggleMenu()\"\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\n [tooltipPosition]=\"'right'\">\n <i class=\"material-symbols-outlined\">\n menu\n </i>\n </button>\n </div>\n\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\">\n <div\n class=\"flex flex-column cursor-pointer\"\n *ngIf=\"expandMenu\"\n (click)=\"trocarLicenca()\">\n <span\n class=\"text-sm font-semibold mr-2\"\n [pTooltip]=\"this.licencaSelecionada.nome\"\n [tooltipPosition]=\"'right'\">\n {{mascaraNomeLicenca(this.licencaSelecionada.nome)}}\n </span>\n <span class=\"text-sm mt-1\">{{this.licencaSelecionada.cpfcnpj |\n cpfCnpj }}</span>\n </div>\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"trocarLicenca()\"\n [pTooltip]=\"'Alterar workspace'\"\n [tooltipPosition]=\"'right'\">\n <i class=\"material-symbols-outlined\">\n sync_alt\n </i>\n </button>\n\n </div>\n <p-divider type=\"solid\"></p-divider>\n </div>\n\n <div\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\n style=\"overflow-y: auto;\">\n <!-- menus -->\n <li *ngFor=\"let menu of menus; let i = index\">\n <!-- menu que n\u00E3o tem filho -->\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n (click)=\"callRoute(menu.link)\"\n *ngIf=\"!menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)\"\n pRipple\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n [tooltipPosition]=\"'right'\"\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"menu.icone\">\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\n </a>\n <!-- menu com filho -->\n <div *ngIf=\"menu.indmenupai\">\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n pRipple\n pStyleClass=\"@next\"\n enterClass=\"hidden\"\n enterActiveClass=\"slidedown\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"slideup\"\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n [tooltipPosition]=\"'right'\"\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\">\n <div class=\"flex flex-row align-items-center\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"menu.icone\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\n </div>\n <i\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\n *ngIf=\"expandMenu\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"></i>\n </a>\n\n <!-- filhos -->\n <div\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\">\n <li *ngFor=\"\n let filho of retornarMenuFilhos(menu.idaplicativo, menu.idmenu); let iFilho = index\n \">\n <a\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\n *ngIf=\"expandMenu\"\n (click)=\"callRoute(filho.link)\"\n pRipple\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\">\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"filho.icone\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\n {{ filho.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\">{{ filho.descricaomenu }}</span>\n </a>\n </li>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </p-sidebar>\n\n <div\n class=\"w-auto h-screen page-content overflow-y-hidden\"\n id=\"page-content\">\n\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\n <div>\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length - 1]?.label}}</p>\n <p-breadcrumb\n *ngIf=\"widthCard > 400\"\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\n [model]=\"breadCrumbItems\"\n [style]=\"{backgroundColor: '#d4d3d3'}\"\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"></p-breadcrumb>\n </div>\n\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\n\n <p-button\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\n icon=\"pi pi-th-large\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"sistemasPanel.toggle($event)\"\n [pTooltip]=\"'Sistemas'\"\n [tooltipPosition]=\"'left'\"></p-button>\n\n <p-button\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\n icon=\"pi pi-user\"\n [rounded]=\"true\"\n [text]=\"true\"\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\n [tooltipPosition]=\"'left'\"\n (click)=\"meusDadosPanel.toggle($event)\"></p-button>\n\n </div>\n </div>\n\n <p-card\n class=\"card-container\"\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\">\n <div class=\"card-container w-full\" [style]=\"{width: widthCard + 'px'}\">\n <ng-content></ng-content>\n </div>\n </p-card>\n\n </div>\n\n <p-overlayPanel\n #sistemasPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\">\n <ng-template pTemplate=\"container\">\n <p class=\"title-style mt-3\">Sistemas</p>\n <div\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\n style=\"width: 250px; height: 100%;\">\n <button\n *ngFor=\"let aplicativo of aplicativos\"\n pButton\n pRipple\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\n (click)=\"definirMenusPorSistema(aplicativo.idaplicativo)\"\n [pTooltip]=\"aplicativo.descricaoaplicativo\"\n [tooltipPosition]=\"'left'\">\n {{ aplicativo.nomeaplicativo.charAt(0).toUpperCase() }}\n </button>\n </div>\n </ng-template>\n </p-overlayPanel>\n\n <p-overlayPanel\n #meusDadosPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\">\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ?\n nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\n <div class=\"mt-5 mb-3\">\n\n </div>\n\n <p-button\n icon=\"pi pi-lock\"\n label=\"Ger\u00EAnciar KeevoPass\"\n (onClick)=\"gerenciarKeePass($event)\"\n styleClass=\"border-noround w-full text-blue-900\"\n [text]=\"true\"\n [disabled]=\"true\"></p-button>\n <p-button\n icon=\"pi pi-sign-out\"\n label=\"Sair\"\n (onClick)=\"sair($event)\"\n styleClass=\"border-noround w-full text-blue-900\"\n [text]=\"true\"></p-button>\n </ng-template>\n\n </p-overlayPanel>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#fff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}span{font-size:.9rem!important}.breadcrumb-title{font-size:1rem!important;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-body{padding:0rem!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "size", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i5.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i8.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i9.Ripple, selector: "[pRipple]" }, { kind: "component", type: i10.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i11.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "component", type: i12.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "pipe", type: i13.CpfCnpjPipe, name: "cpfCnpj" }] }); }
150
+ }
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: KvMenuComponent, decorators: [{
152
+ type: Component,
153
+ args: [{ selector: 'kv-menu', template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\n\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\n\n <p-sidebar\n #sidebarRef\n [visible]=\"true\"\n [showCloseIcon]=\"false\"\n [modal]=\"false\"\n [style]=\"{width: expandMenu ? '300px' : '60px'}\">\n <ng-template pTemplate=\"headless\">\n <div class=\"flex flex-column mx-1\">\n <div\n class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\">\n <img\n *ngIf=\"expandMenu\"\n alt=\"Card\"\n [src]=\"logoImage\"\n width=\"150\" />\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"toggleMenu()\"\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\n [tooltipPosition]=\"'right'\">\n <i class=\"material-symbols-outlined\">\n menu\n </i>\n </button>\n </div>\n\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\">\n <div\n class=\"flex flex-column cursor-pointer\"\n *ngIf=\"expandMenu\"\n (click)=\"trocarLicenca()\">\n <span\n class=\"text-sm font-semibold mr-2\"\n [pTooltip]=\"this.licencaSelecionada.nome\"\n [tooltipPosition]=\"'right'\">\n {{mascaraNomeLicenca(this.licencaSelecionada.nome)}}\n </span>\n <span class=\"text-sm mt-1\">{{this.licencaSelecionada.cpfcnpj |\n cpfCnpj }}</span>\n </div>\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"trocarLicenca()\"\n [pTooltip]=\"'Alterar workspace'\"\n [tooltipPosition]=\"'right'\">\n <i class=\"material-symbols-outlined\">\n sync_alt\n </i>\n </button>\n\n </div>\n <p-divider type=\"solid\"></p-divider>\n </div>\n\n <div\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\n style=\"overflow-y: auto;\">\n <!-- menus -->\n <li *ngFor=\"let menu of menus; let i = index\">\n <!-- menu que n\u00E3o tem filho -->\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n (click)=\"callRoute(menu.link)\"\n *ngIf=\"!menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)\"\n pRipple\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n [tooltipPosition]=\"'right'\"\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"menu.icone\">\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\n </a>\n <!-- menu com filho -->\n <div *ngIf=\"menu.indmenupai\">\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n pRipple\n pStyleClass=\"@next\"\n enterClass=\"hidden\"\n enterActiveClass=\"slidedown\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"slideup\"\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n [tooltipPosition]=\"'right'\"\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\">\n <div class=\"flex flex-row align-items-center\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"menu.icone\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\n </div>\n <i\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\n *ngIf=\"expandMenu\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"></i>\n </a>\n\n <!-- filhos -->\n <div\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\">\n <li *ngFor=\"\n let filho of retornarMenuFilhos(menu.idaplicativo, menu.idmenu); let iFilho = index\n \">\n <a\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\n *ngIf=\"expandMenu\"\n (click)=\"callRoute(filho.link)\"\n pRipple\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\">\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"filho.icone\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\n {{ filho.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\">{{ filho.descricaomenu }}</span>\n </a>\n </li>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </p-sidebar>\n\n <div\n class=\"w-auto h-screen page-content overflow-y-hidden\"\n id=\"page-content\">\n\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\n <div>\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length - 1]?.label}}</p>\n <p-breadcrumb\n *ngIf=\"widthCard > 400\"\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\n [model]=\"breadCrumbItems\"\n [style]=\"{backgroundColor: '#d4d3d3'}\"\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"></p-breadcrumb>\n </div>\n\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\n\n <p-button\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\n icon=\"pi pi-th-large\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"sistemasPanel.toggle($event)\"\n [pTooltip]=\"'Sistemas'\"\n [tooltipPosition]=\"'left'\"></p-button>\n\n <p-button\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\n icon=\"pi pi-user\"\n [rounded]=\"true\"\n [text]=\"true\"\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\n [tooltipPosition]=\"'left'\"\n (click)=\"meusDadosPanel.toggle($event)\"></p-button>\n\n </div>\n </div>\n\n <p-card\n class=\"card-container\"\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\">\n <div class=\"card-container w-full\" [style]=\"{width: widthCard + 'px'}\">\n <ng-content></ng-content>\n </div>\n </p-card>\n\n </div>\n\n <p-overlayPanel\n #sistemasPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\">\n <ng-template pTemplate=\"container\">\n <p class=\"title-style mt-3\">Sistemas</p>\n <div\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\n style=\"width: 250px; height: 100%;\">\n <button\n *ngFor=\"let aplicativo of aplicativos\"\n pButton\n pRipple\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\n (click)=\"definirMenusPorSistema(aplicativo.idaplicativo)\"\n [pTooltip]=\"aplicativo.descricaoaplicativo\"\n [tooltipPosition]=\"'left'\">\n {{ aplicativo.nomeaplicativo.charAt(0).toUpperCase() }}\n </button>\n </div>\n </ng-template>\n </p-overlayPanel>\n\n <p-overlayPanel\n #meusDadosPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\">\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ?\n nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\n <div class=\"mt-5 mb-3\">\n\n </div>\n\n <p-button\n icon=\"pi pi-lock\"\n label=\"Ger\u00EAnciar KeevoPass\"\n (onClick)=\"gerenciarKeePass($event)\"\n styleClass=\"border-noround w-full text-blue-900\"\n [text]=\"true\"\n [disabled]=\"true\"></p-button>\n <p-button\n icon=\"pi pi-sign-out\"\n label=\"Sair\"\n (onClick)=\"sair($event)\"\n styleClass=\"border-noround w-full text-blue-900\"\n [text]=\"true\"></p-button>\n </ng-template>\n\n </p-overlayPanel>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#fff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}span{font-size:.9rem!important}.breadcrumb-title{font-size:1rem!important;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-body{padding:0rem!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"] }]
154
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { aplicativos: [{
155
+ type: Input
156
+ }], breadCrumbItems: [{
157
+ type: Input
158
+ }], licencas: [{
159
+ type: Input
160
+ }], licencaSelecionada: [{
161
+ type: Input
162
+ }], logoImage: [{
163
+ type: Input
164
+ }], nomeUsuario: [{
165
+ type: Input
166
+ }], expandMenuEmit: [{
167
+ type: Output
168
+ }], gerenciarKeePassEvent: [{
169
+ type: Output
170
+ }], licencaChange: [{
171
+ type: Output
172
+ }], sairEvent: [{
173
+ type: Output
174
+ }], trocarLicencaEmit: [{
175
+ type: Output
176
+ }], meusDadosPanel: [{
177
+ type: ViewChild,
178
+ args: ['meusDadosPanel']
179
+ }], sidebarRef: [{
180
+ type: ViewChild,
181
+ args: ['sidebarRef']
182
+ }], sistemasPanel: [{
183
+ type: ViewChild,
184
+ args: ['sistemasPanel']
185
+ }], onWindowResize: [{
186
+ type: HostListener,
187
+ args: ['window:resize', ['$event']]
188
+ }] } });
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi1tZW51L2t2LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtbWVudS9rdi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBYXZCLE1BQU0sT0FBTyxlQUFlO0lBOEIxQixZQUFvQixHQUFzQixFQUFZLE1BQWMsRUFBVSxLQUFxQjtRQUEvRSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQTVCMUYsZ0JBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQ3BDLG9CQUFlLEdBQTRDLEVBQUUsQ0FBQztRQUM5RCxhQUFRLEdBQXVCLEVBQUUsQ0FBQztRQU1qQyxtQkFBYyxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNELDBCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELHNCQUFpQixHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBTXhFLG1CQUFjLEdBQXdCLEVBQUUsQ0FBQztRQUN6QyxVQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUV4QixlQUFVLEdBQVksSUFBSSxDQUFDO1FBSTNCLHlCQUFvQixHQUFZ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WCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELDBCQUEwQixDQUFDLElBQVM7UUFDbEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQzsrR0EvSlUsZUFBZTttR0FBZixlQUFlLGd5QkM1QjVCLG9rV0FrUXFCOzs0RkR0T1IsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxTQUFTOzBKQU1WLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFc0IsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ0YsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNLLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFtSDFCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlLFxuICBSb3V0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBcGxpY2F0aXZvTW9kZWwsIE1hc3RlckNvbWJvTW9kZWwsIE1lbnVNb2RlbCB9IGZyb20gJ2tlZXZvLWFwaS1zZXJ2aWNlcy1rZWV2b2NlbnRlcic7XG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAncHJpbWVuZy9zaWRlYmFyJztcblxuaW1wb3J0IHsgbWVudUNvbXBsZXRvTW9kZWwgfSBmcm9tICcuLi8uLi9hcGkvbW9kZWxzL21lbnUvbWVudWNvbXBsZXRvLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna3YtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4va3YtbWVudS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBLdk1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGFwbGljYXRpdm9zOiBBcGxpY2F0aXZvTW9kZWxbXSA9IFtdO1xuICBASW5wdXQoKSBicmVhZENydW1iSXRlbXM6IHsgbGFiZWw6IHN0cmluZywgcm91dGVyTGluazogc3RyaW5nIH1bXSA9IFtdO1xuICBASW5wdXQoKSBsaWNlbmNhczogTWFzdGVyQ29tYm9Nb2RlbFtdID0gW107XG4gIEBJbnB1dCgpIGxpY2VuY2FTZWxlY2lvbmFkYSE6IE1hc3RlckNvbWJvTW9kZWw7XG4gIEBJbnB1dCgpIGxvZ29JbWFnZSE6IGFueTtcbiAgLy8gQElucHV0KCkgbWVudUNvbXBsZXRvOiBtZW51Q29tcGxldG9Nb2RlbFtdID0gW107XG4gIEBJbnB1dCgpIG5vbWVVc3VhcmlvITogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBleHBhbmRNZW51RW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZ2VyZW5jaWFyS2VlUGFzc0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGxpY2VuY2FDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2FpckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRyb2NhckxpY2VuY2FFbWl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnbWV1c0RhZG9zUGFuZWwnKSBtZXVzRGFkb3NQYW5lbCE6IE92ZXJsYXlQYW5lbDtcbiAgQFZpZXdDaGlsZCgnc2lkZWJhclJlZicpIHNpZGViYXJSZWYhOiBTaWRlYmFyO1xuICBAVmlld0NoaWxkKCdzaXN0ZW1hc1BhbmVsJykgc2lzdGVtYXNQYW5lbCE6IE92ZXJsYXlQYW5lbDtcblxuICBtZW51c0ZpbHRyYWRvczogbWVudUNvbXBsZXRvTW9kZWxbXSA9IFtdO1xuICBtZW51czogTWVudU1vZGVsW10gPSBbXTtcblxuICBleHBhbmRNZW51OiBib29sZWFuID0gdHJ1ZTtcbiAgaGVpZ3RoQ2FyZCE6IG51bWJlcjtcbiAgbW91c2VPdmVyRmlsaG9JbmRleDogYW55O1xuICBtb3VzZU92ZXJJbmRleDogYW55O1xuICB2aXNpYmxlRGlhbG9nTGljZW5jYTogYm9vbGVhbiA9IGZhbHNlO1xuICB3aWR0aENhcmQhOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7IH1cblxuICBhanVzdGFySGVpZ3RoQ2FyZCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLndpZHRoQ2FyZCA+IDQwMCkge1xuICAgICAgaWYgKHRoaXMuYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCA+IDApIHJldHVybiAxMDVcbiAgICAgIGVsc2UgcmV0dXJuIDg1XG4gICAgfSBlbHNlIHJldHVybiA4M1xuICB9XG5cbiAgY2FsbFJvdXRlKGU6IGFueSwgZXhwYW5kPzogYm9vbGVhbikge1xuICAgIGlmICghZXhwYW5kKVxuICAgICAgIXRoaXMuZXhwYW5kTWVudSA/IHRoaXMuZXhwYW5kTWVudSA9ICF0aGlzLmV4cGFuZE1lbnUgOiAnJztcblxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZSlcbiAgfVxuXG4gIGNsb3NlQ2FsbGJhY2soZTogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNpZGViYXJSZWYuY2xvc2UoZSk7XG4gIH1cblxuICBjb25maWd1cmFyTGljZW5jYXMoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRlZmluaXJNZW51c1BvclNpc3RlbWEodGhpcy5hcGxpY2F0aXZvc1swXT8uaWRhcGxpY2F0aXZvKVxuICAgIH0sIDEpO1xuICB9XG5cbiAgZGVmaW5pck1lbnVzUG9yU2lzdGVtYShpZGFwbGljYXRpdm86IG51bWJlcikge1xuICAgIHRoaXMubWVudXMgPSB0aGlzLmFwbGljYXRpdm9zLmZpbmQoKHgpID0+IHguaWRhcGxpY2F0aXZvID09IGlkYXBsaWNhdGl2byk/Lm1lbnVzIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMucm91dGVyLnVybCA9PT0gJy8nKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9GaXJzdE1lbnUoKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IG1lbnVTZWxlY2lvbmFkbyA9IHRoaXMubWVudXMuZmluZCgobWVudTogYW55KSA9PiBtZW51LmxpbmsuaW5jbHVkZXModGhpcy5yb3V0ZXIudXJsLnNsaWNlKDEpKSk7XG4gICAgICBpZiAobWVudVNlbGVjaW9uYWRvKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb01lbnUobWVudVNlbGVjaW9uYWRvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNpc3RlbWFzUGFuZWwuaGlkZSgpO1xuICB9XG5cbiAgZXhwYW5kTWVudUV2ZW50KCkge1xuICAgIHRoaXMuZXhwYW5kTWVudUVtaXQuZW1pdCh0aGlzLmV4cGFuZE1lbnUpO1xuICB9XG5cbiAgZ2VyZW5jaWFyS2VlUGFzcyhldmVudDogYW55KSB7XG4gICAgdGhpcy5zaXN0ZW1hc1BhbmVsLmhpZGUoKTtcbiAgICB0aGlzLmdlcmVuY2lhcktlZVBhc3NFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgbWFzY2FyYU5vbWVMaWNlbmNhKG5vbWVMaWNlbmNhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChub21lTGljZW5jYSkge1xuICAgICAgaWYgKG5vbWVMaWNlbmNhLmxlbmd0aCA+IDIzKVxuICAgICAgICByZXR1cm4gbm9tZUxpY2VuY2Euc3Vic3RyaW5nKDAsIDIzKSArICcuLi4nO1xuICAgICAgZWxzZSByZXR1cm4gbm9tZUxpY2VuY2E7XG4gICAgfSBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIG5hdmlnYXRlVG9GaXJzdE1lbnUoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RNZW51ID0gdGhpcy5tZW51c1swXTtcbiAgICBpZiAoZmlyc3RNZW51LmluZG1lbnVwYWkpIHtcbiAgICAgIGNvbnN0IGZpbGhvcyA9IHRoaXMucmV0b3JuYXJNZW51RmlsaG9zKGZpcnN0TWVudS5pZGFwbGljYXRpdm8sIGZpcnN0TWVudS5pZG1lbnUpO1xuICAgICAgaWYgKGZpbGhvcykge1xuICAgICAgICB0aGlzLmNhbGxSb3V0ZShmaWxob3NbMF0ubGluaywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsbFJvdXRlKGZpcnN0TWVudS5saW5rLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZVRvTWVudShtZW51OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAobWVudS5tZW51cGFpKSB7XG4gICAgICBjb25zdCBmaWxob3MgPSB0aGlzLnJldG9ybmFyTWVudUZpbGhvcyhtZW51Lmlkc2lzdGVtYSwgbWVudS5pZG1lbnUpO1xuICAgICAgaWYgKGZpbGhvcykge1xuICAgICAgICB0aGlzLmNhbGxSb3V0ZShmaWxob3NbMF0ubGluaywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsbFJvdXRlKG1lbnUubGluaywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWd1cmFyTGljZW5jYXMoKTtcbiAgICB0aGlzLmhlaWd0aENhcmQgPSBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHQpO1xuICAgIHRoaXMud2lkdGhDYXJkID0gTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKSAtICh0aGlzLmV4cGFuZE1lbnUgPyAzMzMgOiA5Myk7XG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKVxuICB9XG5cbiAgb25Nb3VzZUVudGVyKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLm1vdXNlT3ZlckluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBvbk1vdXNlRmlsaG9FbnRlcihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5tb3VzZU92ZXJGaWxob0luZGV4ID0gaW5kZXg7XG4gIH1cblxuICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5tb3VzZU92ZXJJbmRleCA9IG51bGw7XG4gICAgdGhpcy5tb3VzZU92ZXJGaWxob0luZGV4ID0gbnVsbDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICB0aGlzLmhlaWd0aENhcmQgPSBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHQpO1xuICAgIHRoaXMud2lkdGhDYXJkID0gTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKSAtICh0aGlzLmV4cGFuZE1lbnUgPyAzMzMgOiA5Myk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmV0b3JuYXJNZW51RmlsaG9zKGlkYXBsaWNhdGl2bzogbnVtYmVyLCBpZG1lbnU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmFwbGljYXRpdm9zLmZpbmQoKHgpID0+IHguaWRhcGxpY2F0aXZvID09IGlkYXBsaWNhdGl2byk/Lm1lbnVzLmZpbHRlcigoeCkgPT4geC5pZG1lbnVwYWkgPT0gaWRtZW51KTtcbiAgfVxuXG4gIHNhaXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2lzdGVtYXNQYW5lbC5oaWRlKCk7XG4gICAgdGhpcy5zYWlyRXZlbnQuZW1pdChldmVudClcbiAgfVxuXG4gIHRvZ2dsZU1lbnUoKSB7XG4gICAgdGhpcy5leHBhbmRNZW51ID0gIXRoaXMuZXhwYW5kTWVudTtcbiAgICB0aGlzLmV4cGFuZE1lbnVFdmVudCgpXG4gIH1cblxuICB0cm9jYXJMaWNlbmNhKCkge1xuICAgIHRoaXMudHJvY2FyTGljZW5jYUVtaXQuZW1pdCgpO1xuICB9XG5cbiAgdmVyaWZpY2FyUGFnaW5hU2VsZWNpb25hZGEobGluazogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhsaW5rKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgb3ZlcmZsb3cteS1oaWRkZW4gdy0gZnVsbC1jb250YWluZXJcIj5cblxuICA8ZGl2IFtzdHlsZV09XCJ7bWluV2lkdGg6IGV4cGFuZE1lbnUgPyAnMzAwcHgnIDogJzYwcHgnfVwiPjwvZGl2PlxuXG4gIDxwLXNpZGViYXJcbiAgICAjc2lkZWJhclJlZlxuICAgIFt2aXNpYmxlXT1cInRydWVcIlxuICAgIFtzaG93Q2xvc2VJY29uXT1cImZhbHNlXCJcbiAgICBbbW9kYWxdPVwiZmFsc2VcIlxuICAgIFtzdHlsZV09XCJ7d2lkdGg6IGV4cGFuZE1lbnUgPyAnMzAwcHgnIDogJzYwcHgnfVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkbGVzc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gbXgtMVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0yIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtc2hyaW5rLTAgbXgtMlwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ319IHB5LTNcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcbiAgICAgICAgICAgICAgYWx0PVwiQ2FyZFwiXG4gICAgICAgICAgICAgIFtzcmNdPVwibG9nb0ltYWdlXCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxNTBcIiAvPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcGFkZGluZy1zdHlsZSBoLTJyZW0gdy0ycmVtIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIGljb24tbWVudVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KClcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZXhwYW5kTWVudSA/ICdPY3V0YXIgTWVudScgOiAnRXhwYW5kaXIgTWVudSdcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgbWVudVxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ319XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0cm9jYXJMaWNlbmNhKClcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gZm9udC1zZW1pYm9sZCBtci0yXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwidGhpcy5saWNlbmNhU2VsZWNpb25hZGEubm9tZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCI+XG4gICAgICAgICAgICAgICAge3ttYXNjYXJhTm9tZUxpY2VuY2EodGhpcy5saWNlbmNhU2VsZWNpb25hZGEubm9tZSl9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBtdC0xXCI+e3t0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYS5jcGZjbnBqIHxcbiAgICAgICAgICAgICAgICBjcGZDbnBqIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwYWRkaW5nLXN0eWxlIGgtMnJlbSB3LTJyZW0gaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgaWNvbi1tZW51XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRyb2NhckxpY2VuY2EoKVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWx0ZXJhciB3b3Jrc3BhY2UnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgICAgICAgIHN5bmNfYWx0XG4gICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHAtZGl2aWRlciB0eXBlPVwic29saWRcIj48L3AtZGl2aWRlcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ub25lIG0tMCAgY2FyZC1jb250YWluZXIge3tleHBhbmRNZW51ID8gJ214LTEnIDogJyd9fVwiXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiKGhlaWd0aENhcmQgLSAyMjApICsgJ3B4J1wiXG4gICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvO1wiPlxuICAgICAgICAgIDwhLS0gbWVudXMgLS0+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8IS0tIG1lbnUgcXVlIG7Do28gdGVtIGZpbGhvIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKGkpXCJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hvdmVyLWNvbG9yJzogbW91c2VPdmVySW5kZXggPT09IGl9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShtZW51LmxpbmspXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWVudS5pbmRtZW51cGFpICYmICghbWVudS5pZG1lbnVwYWkgfHwgbWVudS5pZG1lbnVwYWkgPT0gMClcIlxuICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSA/IG1lbnUuZGVzY3JpY2FvbWVudSA6ICcnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKG1lbnUubGluaykgPyAnYmctZ3JlZW4tNjAwJyA6ICcnfX0gbWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tdW5kZXJsaW5lIHt7IWV4cGFuZE1lbnUgPyAnanVzdGlmeS1jb250ZW50LWNlbnRlcicgOiAnJ319IGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZVwiPlxuXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tbWVudSB7e2V4cGFuZE1lbnUgPyAnbWwtMSBtci0yJyA6ICcnfX0gIGljb24taG92ZXItY29sb3Ige3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShtZW51LmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lmljb25lXCI+XG4gICAgICAgICAgICAgICAge3sgbWVudS5pY29uZSB9fVxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJhc2UgdGV4dC1ibHVlLTkwMCBmb250LW1lZGl1bSB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKG1lbnUubGluaykgPyAndGV4dC13aGl0ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIj57eyBtZW51LmRlc2NyaWNhb21lbnUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8IS0tIG1lbnUgY29tIGZpbGhvIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1lbnUuaW5kbWVudXBhaVwiPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcihpKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaG92ZXItY29sb3InOiBtb3VzZU92ZXJJbmRleCA9PT0gaX1cIlxuICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICBwU3R5bGVDbGFzcz1cIkBuZXh0XCJcbiAgICAgICAgICAgICAgICBlbnRlckNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBlbnRlckFjdGl2ZUNsYXNzPVwic2xpZGVkb3duXCJcbiAgICAgICAgICAgICAgICBsZWF2ZVRvQ2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgIGxlYXZlQWN0aXZlQ2xhc3M9XCJzbGlkZXVwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtb3B0aW9uIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIHt7IWV4cGFuZE1lbnUgPyAnanVzdGlmeS1jb250ZW50LWNlbnRlcicgOiAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nfX0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXJvdW5kIHRleHQtNzAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tZHVyYXRpb24tMTUwIHRyYW5zaXRpb24tY29sb3JzIHAtcmlwcGxlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSA/IG1lbnUuZGVzY3JpY2FvbWVudSA6ICcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiIWV4cGFuZE1lbnUgPyBleHBhbmRNZW51ID0gIWV4cGFuZE1lbnUgOiAnJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuXG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1tZW51IHt7ZXhwYW5kTWVudSA/ICdtbC0xIG1yLTInIDogJyd9fSBpY29uLWhvdmVyLWNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lmljb25lXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZW51Lmljb25lIH19XG4gICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWJsdWUtOTAwIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCI+e3sgbWVudS5kZXNjcmljYW9tZW51IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHBpLWNoZXZyb24tZG93biB0ZXh0LWJsdWUtOTAwIG1yLTEgaWNvbi1ob3Zlci1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgIDwhLS0gZmlsaG9zIC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LW5vbmUgcHktMCBwbC0zIHByLTAgbS0wIGhpZGRlbiBvdmVyZmxvdy15LWhpZGRlbiB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTQwMCB0cmFuc2l0aW9uLWVhc2UtaW4tb3V0XCI+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgZmlsaG8gb2YgcmV0b3JuYXJNZW51RmlsaG9zKG1lbnUuaWRhcGxpY2F0aXZvLCBtZW51LmlkbWVudSk7ICBsZXQgaUZpbGhvID0gaW5kZXhcbiAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUZpbGhvRW50ZXIoZmlsaG8uaWRtZW51KVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckZpbGhvSW5kZXggPT09IGZpbGhvLmlkbWVudX1cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKGZpbGhvLmxpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7dmVyaWZpY2FyUGFnaW5hU2VsZWNpb25hZGEoZmlsaG8ubGluaykgPyAnYmctZ3JlZW4tNjAwJyA6ICcnfX0gbWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgdHJhbnNpdGlvbi1kdXJhdGlvbi0xNTAgdHJhbnNpdGlvbi1jb2xvcnMgcC1yaXBwbGUgcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLW1lbnUge3tleHBhbmRNZW51ID8gJ21sLTEgbXItMicgOiAnJ319IGljb24taG92ZXItY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbGhvLmljb25lXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBmaWxoby5pY29uZSB9fVxuICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgbWwtNCB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGZpbGhvLmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCI+e3sgZmlsaG8uZGVzY3JpY2FvbWVudSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXNpZGViYXI+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInctYXV0byBoLXNjcmVlbiBwYWdlLWNvbnRlbnQgb3ZlcmZsb3cteS1oaWRkZW5cIlxuICAgICAgaWQ9XCJwYWdlLWNvbnRlbnRcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG0tM1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14bCBmb250LXNlbWlib2xkIHRleHQtYmx1ZS05MDAgYnJlYWRjcnVtYi10aXRsZVwiPnt7YnJlYWRDcnVtYkl0ZW1zW2JyZWFkQ3J1bWJJdGVtcy5sZW5ndGggLSAxXT8ubGFiZWx9fTwvcD5cbiAgICAgICAgICA8cC1icmVhZGNydW1iXG4gICAgICAgICAgICAqbmdJZj1cIndpZHRoQ2FyZCA+IDQwMFwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwiYm9yZGVyLW5vbmUgcC0wIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMnJlbSAhaW1wb3J0YW50O1wiXG4gICAgICAgICAgICBbbW9kZWxdPVwiYnJlYWRDcnVtYkl0ZW1zXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiAnI2Q0ZDNkMyd9XCJcbiAgICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJjYWxsUm91dGUoJGV2ZW50Lml0ZW0ucm91dGVyTGluaywgdHJ1ZSlcIj48L3AtYnJlYWRjcnVtYj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuXG4gICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidy0ycmVtIGgtMnJlbSB0ZXh0LWJsdWUtOTAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS10aC1sYXJnZVwiXG4gICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNpc3RlbWFzUGFuZWwudG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIidTaXN0ZW1hcydcIlxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIj48L3AtYnV0dG9uPlxuXG4gICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidy0ycmVtIGgtMnJlbSB0ZXh0LWJsdWUtOTAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS11c2VyXCJcbiAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ01lbnUgZG8gVXN1w6FyaW8nXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtZXVzRGFkb3NQYW5lbC50b2dnbGUoJGV2ZW50KVwiPjwvcC1idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHAtY2FyZFxuICAgICAgICBjbGFzcz1cImNhcmQtY29udGFpbmVyXCJcbiAgICAgICAgc3R5bGVDbGFzcz1cIm0tMyBib3JkZXItbm9yb3VuZCBvdmVyZmxvdy15LWF1dG8gY2FyZC1jb250YWluZXJcIlxuICAgICAgICBbc3R5bGVdPVwie2hlaWdodDogaGVpZ3RoQ2FyZCAtIGFqdXN0YXJIZWlndGhDYXJkKCkgKyAncHgnfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250YWluZXIgdy1mdWxsXCIgW3N0eWxlXT1cInt3aWR0aDogd2lkdGhDYXJkICsgJ3B4J31cIj5cbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9wLWNhcmQ+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxwLW92ZXJsYXlQYW5lbFxuICAgICAgI3Npc3RlbWFzUGFuZWxcbiAgICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzM1MG1zIGVhc2Utb3V0J1wiXG4gICAgICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicyNTBtcyBlYXNlLWluJ1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRhaW5lclwiPlxuICAgICAgICA8cCBjbGFzcz1cInRpdGxlLXN0eWxlIG10LTNcIj5TaXN0ZW1hczwvcD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtNSBtYi0zXCJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyNTBweDsgaGVpZ2h0OiAxMDAlO1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhcGxpY2F0aXZvIG9mIGFwbGljYXRpdm9zXCJcbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLXNpc3RlbWEtMiBidG4tc2lzdGVtYSBob3Zlci1idG4tY29yLXBhZHJhbyByZW1vdmUtZm9jdXMgaC00cmVtIHctNHJlbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVmaW5pck1lbnVzUG9yU2lzdGVtYShhcGxpY2F0aXZvLmlkYXBsaWNhdGl2bylcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cImFwbGljYXRpdm8uZGVzY3JpY2FvYXBsaWNhdGl2b1wiXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiPlxuICAgICAgICAgICAge3sgYXBsaWNhdGl2by5ub21lYXBsaWNhdGl2by5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLW92ZXJsYXlQYW5lbD5cblxuICAgIDxwLW92ZXJsYXlQYW5lbFxuICAgICAgI21ldXNEYWRvc1BhbmVsXG4gICAgICBbc2hvd1RyYW5zaXRpb25PcHRpb25zXT1cIiczNTBtcyBlYXNlLW91dCdcIlxuICAgICAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCInMjUwbXMgZWFzZS1pbidcIj5cblxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgIDxwIGNsYXNzPVwidGl0bGUtc3R5bGUgbXQtM1wiPk9sw6EsIHt7bm9tZVVzdWFyaW8gP1xuICAgICAgICAgIG5vbWVVc3VhcmlvLnNwbGl0KCcgJylbMF0gOiAnVXN1w6FyaW8nfX0gITwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTUgbWItM1wiPlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgIGljb249XCJwaSBwaS1sb2NrXCJcbiAgICAgICAgICBsYWJlbD1cIkdlcsOqbmNpYXIgS2Vldm9QYXNzXCJcbiAgICAgICAgICAob25DbGljayk9XCJnZXJlbmNpYXJLZWVQYXNzKCRldmVudClcIlxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9yb3VuZCB3LWZ1bGwgdGV4dC1ibHVlLTkwMFwiXG4gICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj48L3AtYnV0dG9uPlxuICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICBpY29uPVwicGkgcGktc2lnbi1vdXRcIlxuICAgICAgICAgIGxhYmVsPVwiU2FpclwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwic2FpcigkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwiYm9yZGVyLW5vcm91bmQgdy1mdWxsIHRleHQtYmx1ZS05MDBcIlxuICAgICAgICAgIFt0ZXh0XT1cInRydWVcIj48L3AtYnV0dG9uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwvcC1vdmVybGF5UGFuZWw+Il19