@resolveio/client-lib-core 15.1.19 → 15.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/index.d.ts +0 -3
  2. package/package.json +1 -1
  3. package/esm2020/lib/account-manager.service.mjs +0 -222
  4. package/esm2020/lib/auth/auth-guard.service.mjs +0 -165
  5. package/esm2020/lib/auth/auth-permissions.service.mjs +0 -24
  6. package/esm2020/lib/auth/auth.service.mjs +0 -244
  7. package/esm2020/lib/auth/auth365.component.mjs +0 -44
  8. package/esm2020/lib/auth/can-deactivate-guard.service.mjs +0 -13
  9. package/esm2020/lib/auth/enroll.component.mjs +0 -81
  10. package/esm2020/lib/auth/forgot-password.component.mjs +0 -82
  11. package/esm2020/lib/core.component.mjs +0 -400
  12. package/esm2020/lib/core.module.mjs +0 -184
  13. package/esm2020/lib/core.service.mjs +0 -89
  14. package/esm2020/lib/directive/focus.mjs +0 -22
  15. package/esm2020/lib/directive/scroll.mjs +0 -55
  16. package/esm2020/lib/home/home.component.mjs +0 -77
  17. package/esm2020/lib/logger/logger.component.mjs +0 -220
  18. package/esm2020/lib/models/app-status.model.mjs +0 -2
  19. package/esm2020/lib/models/collection-document.model.mjs +0 -2
  20. package/esm2020/lib/models/cron-job.model.mjs +0 -2
  21. package/esm2020/lib/models/dialog.model.mjs +0 -2
  22. package/esm2020/lib/models/file.model.mjs +0 -2
  23. package/esm2020/lib/models/log-method-latency.model.mjs +0 -2
  24. package/esm2020/lib/models/navbar-main-tab.model.mjs +0 -2
  25. package/esm2020/lib/models/pagination.model.mjs +0 -2
  26. package/esm2020/lib/models/permission.model.mjs +0 -2
  27. package/esm2020/lib/models/select-data-label.model.mjs +0 -2
  28. package/esm2020/lib/models/subscription.model.mjs +0 -2
  29. package/esm2020/lib/models/support-ticket.model.mjs +0 -2
  30. package/esm2020/lib/models/user-group.model.mjs +0 -2
  31. package/esm2020/lib/models/user.model.mjs +0 -2
  32. package/esm2020/lib/offline-db.mjs +0 -519
  33. package/esm2020/lib/offline-manager.service.mjs +0 -107
  34. package/esm2020/lib/pipes/domsanitizor.pipe.mjs +0 -28
  35. package/esm2020/lib/pipes/filter.pipe.mjs +0 -36
  36. package/esm2020/lib/pipes/json-parse.pipe.mjs +0 -29
  37. package/esm2020/lib/pipes/minus-currency.pipe.mjs +0 -16
  38. package/esm2020/lib/pipes/phone.pipe.mjs +0 -47
  39. package/esm2020/lib/pipes/pipe.module.mjs +0 -54
  40. package/esm2020/lib/pipes/reverse-list.pipe.mjs +0 -17
  41. package/esm2020/lib/pipes/titlecase.pipe.mjs +0 -22
  42. package/esm2020/lib/report-builder.permission.mjs +0 -13
  43. package/esm2020/lib/resolveio-class.mjs +0 -41
  44. package/esm2020/lib/shared/shared.module.mjs +0 -96
  45. package/esm2020/lib/socket-manager.service.mjs +0 -339
  46. package/esm2020/lib/socket.service.mjs +0 -215
  47. package/esm2020/lib/super-admin.permission.mjs +0 -9
  48. package/esm2020/lib/support-ticket/detail/support-ticket-detail.component.mjs +0 -204
  49. package/esm2020/lib/support-ticket/edit/support-ticket-edit.component.mjs +0 -122
  50. package/esm2020/lib/support-ticket/list/support-ticket-list.component.mjs +0 -137
  51. package/esm2020/lib/support-ticket/new/support-ticket-new.component.mjs +0 -115
  52. package/esm2020/lib/support-ticket/support-ticket.component.mjs +0 -63
  53. package/esm2020/lib/support-ticket/support-ticket.module.mjs +0 -50
  54. package/esm2020/lib/support-ticket/support-ticket.routing.mjs +0 -20
  55. package/esm2020/lib/support-ticket/support-ticket.service.mjs +0 -17
  56. package/esm2020/lib/token-manager.service.mjs +0 -26
  57. package/esm2020/lib/user-settings/settings/users-settings.component.mjs +0 -296
  58. package/esm2020/lib/user-settings/user-settings.component.mjs +0 -57
  59. package/esm2020/lib/user-settings/user-settings.module.mjs +0 -41
  60. package/esm2020/lib/user-settings/user-settings.permission.mjs +0 -10
  61. package/esm2020/lib/user-settings/user-settings.routing.mjs +0 -14
  62. package/esm2020/lib/user-settings/user-settings.service.mjs +0 -17
  63. package/esm2020/lib/util/action-name.helper.mjs +0 -9
  64. package/esm2020/lib/util/aws.service.mjs +0 -79
  65. package/esm2020/lib/util/common.helper.mjs +0 -161
  66. package/esm2020/lib/util/validation.service.mjs +0 -185
  67. package/esm2020/lib/util/window-resize.service.mjs +0 -24
  68. package/esm2020/lib/util/window.service.mjs +0 -16
  69. package/esm2020/lib/widgets/alert/alert.model.mjs +0 -2
  70. package/esm2020/lib/widgets/alert/alert.service.mjs +0 -78
  71. package/esm2020/lib/widgets/collapse-table/collapse-table.component.mjs +0 -79
  72. package/esm2020/lib/widgets/collapse-table/collapse-table.module.mjs +0 -34
  73. package/esm2020/lib/widgets/data-table/data-table.component.mjs +0 -77
  74. package/esm2020/lib/widgets/data-table/data-table.model.mjs +0 -2
  75. package/esm2020/lib/widgets/data-table/data-table.module.mjs +0 -41
  76. package/esm2020/lib/widgets/date-shortcut/date-shortcut.component.mjs +0 -295
  77. package/esm2020/lib/widgets/date-shortcut/date-shortcut.module.mjs +0 -32
  78. package/esm2020/lib/widgets/dialog/dialog.confirm.content.mjs +0 -63
  79. package/esm2020/lib/widgets/dialog/dialog.error.content.mjs +0 -57
  80. package/esm2020/lib/widgets/dialog/dialog.input.content.mjs +0 -271
  81. package/esm2020/lib/widgets/dialog/dialog.login.content.mjs +0 -517
  82. package/esm2020/lib/widgets/dialog/dialog.notify.content.mjs +0 -57
  83. package/esm2020/lib/widgets/dialog/dialog.register.content.mjs +0 -328
  84. package/esm2020/lib/widgets/dialog/dialog.select-array-objs.content.mjs +0 -200
  85. package/esm2020/lib/widgets/dialog/dialog.select-array.content.mjs +0 -305
  86. package/esm2020/lib/widgets/dialog/dialog.select-data-labels.content.mjs +0 -191
  87. package/esm2020/lib/widgets/dialog/dialog.select-datetime.content.mjs +0 -185
  88. package/esm2020/lib/widgets/dialog/dialog.select-with-buttons-url.content.mjs +0 -162
  89. package/esm2020/lib/widgets/dialog/dialog.service.mjs +0 -97
  90. package/esm2020/lib/widgets/file/file-upload.component.mjs +0 -426
  91. package/esm2020/lib/widgets/file/file-upload.module.mjs +0 -48
  92. package/esm2020/lib/widgets/form-button/form-button.component.mjs +0 -94
  93. package/esm2020/lib/widgets/form-button/form-button.module.mjs +0 -28
  94. package/esm2020/lib/widgets/navbar-main/navbar-main.component.mjs +0 -220
  95. package/esm2020/lib/widgets/navbar-module/navbar-module.component.mjs +0 -104
  96. package/esm2020/lib/widgets/navbar-module/navbar-module.model.mjs +0 -2
  97. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +0 -38
  98. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +0 -24
  99. package/esm2020/lib/widgets/scheduler/scheduler.component.mjs +0 -184
  100. package/esm2020/lib/widgets/scheduler/scheduler.module.mjs +0 -37
  101. package/esm2020/lib/widgets/sort-table/sort-table-header.component.mjs +0 -67
  102. package/esm2020/lib/widgets/sort-table/sort-table-ngfor.component.mjs +0 -48
  103. package/esm2020/lib/widgets/sort-table/sort-table.directive.mjs +0 -174
  104. package/esm2020/lib/widgets/sort-table/sort-table.module.mjs +0 -38
  105. package/esm2020/lib/widgets/user-role/user-role.component.mjs +0 -27
  106. package/esm2020/lib/widgets/user-role/user-role.module.mjs +0 -24
  107. package/esm2020/public_api.mjs +0 -91
  108. package/esm2020/resolveio-client-lib-core.mjs +0 -5
  109. package/fesm2015/resolveio-client-lib-core.mjs +0 -9191
  110. package/fesm2015/resolveio-client-lib-core.mjs.map +0 -1
  111. package/fesm2020/resolveio-client-lib-core.mjs +0 -9184
  112. package/fesm2020/resolveio-client-lib-core.mjs.map +0 -1
  113. package/lib/account-manager.service.d.ts +0 -41
  114. package/lib/auth/auth-guard.service.d.ts +0 -26
  115. package/lib/auth/auth-permissions.service.d.ts +0 -10
  116. package/lib/auth/auth.service.d.ts +0 -30
  117. package/lib/auth/auth365.component.d.ts +0 -20
  118. package/lib/auth/can-deactivate-guard.service.d.ts +0 -11
  119. package/lib/auth/enroll.component.d.ts +0 -28
  120. package/lib/auth/forgot-password.component.d.ts +0 -28
  121. package/lib/core.component.d.ts +0 -64
  122. package/lib/core.module.d.ts +0 -35
  123. package/lib/core.service.d.ts +0 -49
  124. package/lib/directive/focus.d.ts +0 -10
  125. package/lib/directive/scroll.d.ts +0 -20
  126. package/lib/home/home.component.d.ts +0 -28
  127. package/lib/logger/logger.component.d.ts +0 -37
  128. package/lib/models/app-status.model.d.ts +0 -4
  129. package/lib/models/collection-document.model.d.ts +0 -6
  130. package/lib/models/cron-job.model.d.ts +0 -13
  131. package/lib/models/dialog.model.d.ts +0 -23
  132. package/lib/models/file.model.d.ts +0 -9
  133. package/lib/models/log-method-latency.model.d.ts +0 -7
  134. package/lib/models/navbar-main-tab.model.d.ts +0 -14
  135. package/lib/models/pagination.model.d.ts +0 -17
  136. package/lib/models/permission.model.d.ts +0 -14
  137. package/lib/models/select-data-label.model.d.ts +0 -9
  138. package/lib/models/subscription.model.d.ts +0 -19
  139. package/lib/models/support-ticket.model.d.ts +0 -71
  140. package/lib/models/user-group.model.d.ts +0 -20
  141. package/lib/models/user.model.d.ts +0 -70
  142. package/lib/offline-db.d.ts +0 -28
  143. package/lib/offline-manager.service.d.ts +0 -23
  144. package/lib/pipes/domsanitizor.pipe.d.ts +0 -10
  145. package/lib/pipes/filter.pipe.d.ts +0 -12
  146. package/lib/pipes/json-parse.pipe.d.ts +0 -7
  147. package/lib/pipes/minus-currency.pipe.d.ts +0 -7
  148. package/lib/pipes/phone.pipe.d.ts +0 -7
  149. package/lib/pipes/pipe.module.d.ts +0 -13
  150. package/lib/pipes/reverse-list.pipe.d.ts +0 -6
  151. package/lib/pipes/titlecase.pipe.d.ts +0 -7
  152. package/lib/report-builder.permission.d.ts +0 -2
  153. package/lib/resolveio-class.d.ts +0 -26
  154. package/lib/shared/shared.module.d.ts +0 -17
  155. package/lib/socket-manager.service.d.ts +0 -38
  156. package/lib/socket.service.d.ts +0 -44
  157. package/lib/super-admin.permission.d.ts +0 -2
  158. package/lib/support-ticket/detail/support-ticket-detail.component.d.ts +0 -32
  159. package/lib/support-ticket/edit/support-ticket-edit.component.d.ts +0 -30
  160. package/lib/support-ticket/list/support-ticket-list.component.d.ts +0 -26
  161. package/lib/support-ticket/new/support-ticket-new.component.d.ts +0 -26
  162. package/lib/support-ticket/support-ticket.component.d.ts +0 -20
  163. package/lib/support-ticket/support-ticket.module.d.ts +0 -15
  164. package/lib/support-ticket/support-ticket.routing.d.ts +0 -3
  165. package/lib/support-ticket/support-ticket.service.d.ts +0 -9
  166. package/lib/token-manager.service.d.ts +0 -11
  167. package/lib/user-settings/settings/users-settings.component.d.ts +0 -54
  168. package/lib/user-settings/user-settings.component.d.ts +0 -20
  169. package/lib/user-settings/user-settings.module.d.ts +0 -12
  170. package/lib/user-settings/user-settings.permission.d.ts +0 -2
  171. package/lib/user-settings/user-settings.routing.d.ts +0 -3
  172. package/lib/user-settings/user-settings.service.d.ts +0 -9
  173. package/lib/util/action-name.helper.d.ts +0 -1
  174. package/lib/util/aws.service.d.ts +0 -17
  175. package/lib/util/common.helper.d.ts +0 -12
  176. package/lib/util/validation.service.d.ts +0 -88
  177. package/lib/util/window-resize.service.d.ts +0 -12
  178. package/lib/util/window.service.d.ts +0 -6
  179. package/lib/widgets/alert/alert.model.d.ts +0 -1
  180. package/lib/widgets/alert/alert.service.d.ts +0 -11
  181. package/lib/widgets/collapse-table/collapse-table.component.d.ts +0 -23
  182. package/lib/widgets/collapse-table/collapse-table.module.d.ts +0 -9
  183. package/lib/widgets/data-table/data-table.component.d.ts +0 -23
  184. package/lib/widgets/data-table/data-table.model.d.ts +0 -13
  185. package/lib/widgets/data-table/data-table.module.d.ts +0 -12
  186. package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +0 -24
  187. package/lib/widgets/date-shortcut/date-shortcut.module.d.ts +0 -10
  188. package/lib/widgets/dialog/dialog.confirm.content.d.ts +0 -12
  189. package/lib/widgets/dialog/dialog.error.content.d.ts +0 -11
  190. package/lib/widgets/dialog/dialog.input.content.d.ts +0 -18
  191. package/lib/widgets/dialog/dialog.login.content.d.ts +0 -17
  192. package/lib/widgets/dialog/dialog.notify.content.d.ts +0 -11
  193. package/lib/widgets/dialog/dialog.register.content.d.ts +0 -13
  194. package/lib/widgets/dialog/dialog.select-array-objs.content.d.ts +0 -23
  195. package/lib/widgets/dialog/dialog.select-array.content.d.ts +0 -31
  196. package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +0 -22
  197. package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +0 -21
  198. package/lib/widgets/dialog/dialog.select-with-buttons-url.content.d.ts +0 -25
  199. package/lib/widgets/dialog/dialog.service.d.ts +0 -21
  200. package/lib/widgets/file/file-upload.component.d.ts +0 -49
  201. package/lib/widgets/file/file-upload.module.d.ts +0 -14
  202. package/lib/widgets/form-button/form-button.component.d.ts +0 -15
  203. package/lib/widgets/form-button/form-button.module.d.ts +0 -9
  204. package/lib/widgets/navbar-main/navbar-main.component.d.ts +0 -53
  205. package/lib/widgets/navbar-module/navbar-module.component.d.ts +0 -24
  206. package/lib/widgets/navbar-module/navbar-module.model.d.ts +0 -13
  207. package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +0 -17
  208. package/lib/widgets/responsive-button-group/responsive-button-group.module.d.ts +0 -8
  209. package/lib/widgets/scheduler/scheduler.component.d.ts +0 -50
  210. package/lib/widgets/scheduler/scheduler.module.d.ts +0 -11
  211. package/lib/widgets/sort-table/sort-table-header.component.d.ts +0 -23
  212. package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +0 -17
  213. package/lib/widgets/sort-table/sort-table.directive.d.ts +0 -48
  214. package/lib/widgets/sort-table/sort-table.module.d.ts +0 -11
  215. package/lib/widgets/user-role/user-role.component.d.ts +0 -10
  216. package/lib/widgets/user-role/user-role.module.d.ts +0 -8
@@ -1,94 +0,0 @@
1
- import { Component, Input, ViewChild } from '@angular/core';
2
- import { FormGroup } from '@angular/forms';
3
- import { ProviderService, BaseComponent } from '../../resolveio-class';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "../../resolveio-class";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "@ng-bootstrap/ng-bootstrap";
8
- export class FormButtonComponent extends BaseComponent {
9
- constructor(_services) {
10
- super(_services);
11
- this._services = _services;
12
- this.disabled = false;
13
- this.type = 'submit';
14
- }
15
- getTipErrors() {
16
- let res = [];
17
- if (this.form && this.form.invalid && typeof (this.form.controls) === 'object') {
18
- let keys = Object.keys(this.form.controls);
19
- keys.forEach(key => {
20
- let ctrl = this.form.controls[key];
21
- if (ctrl.invalid) {
22
- res.push(key.replace('_id', '').replace('id_', '').replace('_', ' ').replace(/\b\S/g, function (t) { return t.toUpperCase(); }) + ' is invalid');
23
- if (this.isSuperAdmin()) {
24
- if (typeof (ctrl.value) === 'object' && Array.isArray(ctrl.value) && ctrl.controls) {
25
- for (let i = 0; i < ctrl.controls.length; i++) {
26
- let group = ctrl.controls[i];
27
- if (group.controls) {
28
- let arrayKeys = Object.keys(group.controls);
29
- arrayKeys.forEach(arrayKey => {
30
- let arrayCtrl = group.controls[arrayKey];
31
- if (arrayCtrl.invalid) {
32
- res.push('[' + i + '] -> ' + arrayKey.replace('_id', '').replace('id_', '').replace('_', ' ').replace(/\b\S/g, function (t) { return t.toUpperCase(); }) + ' is invalid');
33
- }
34
- });
35
- }
36
- }
37
- }
38
- }
39
- }
40
- });
41
- }
42
- return res;
43
- }
44
- isSuperAdmin() {
45
- if (this._services._account.getUser() && this._services._account.getUser().roles.super_admin) {
46
- return true;
47
- }
48
- return false;
49
- }
50
- }
51
- FormButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FormButtonComponent, deps: [{ token: i1.ProviderService }], target: i0.ɵɵFactoryTarget.Component });
52
- FormButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FormButtonComponent, selector: "form-button", inputs: { form: "form", disabled: "disabled", type: "type" }, providers: [ProviderService], viewQueries: [{ propertyName: "formButton", first: true, predicate: ["formButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
53
- <div style="position: relative; text-align: left; width: 100%">
54
- <ng-template #tipContent>
55
- <span style="font-weight: bold">Errors:<br></span>
56
- <ul>
57
- <li *ngFor="let error of getTipErrors()">{{error}}</li>
58
- </ul>
59
- </ng-template>
60
- <div [ngbTooltip]="(getTipErrors().length ? tipContent : '')" placement="top-left" #t>
61
- <button [type]="type" [ngClass]="['btn', form && form.valid ? 'btn-success' : 'btn-danger']" [disabled]="!form || !form.valid || disabled" style="width: 200px" [autofocus]="true" #formButton>Submit</button>
62
- </div>
63
- </div>
64
- `, isInline: true, 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: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }] });
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FormButtonComponent, decorators: [{
66
- type: Component,
67
- args: [{
68
- providers: [ProviderService],
69
- selector: 'form-button',
70
- template: `
71
- <div style="position: relative; text-align: left; width: 100%">
72
- <ng-template #tipContent>
73
- <span style="font-weight: bold">Errors:<br></span>
74
- <ul>
75
- <li *ngFor="let error of getTipErrors()">{{error}}</li>
76
- </ul>
77
- </ng-template>
78
- <div [ngbTooltip]="(getTipErrors().length ? tipContent : '')" placement="top-left" #t>
79
- <button [type]="type" [ngClass]="['btn', form && form.valid ? 'btn-success' : 'btn-danger']" [disabled]="!form || !form.valid || disabled" style="width: 200px" [autofocus]="true" #formButton>Submit</button>
80
- </div>
81
- </div>
82
- `
83
- }]
84
- }], ctorParameters: function () { return [{ type: i1.ProviderService }]; }, propDecorators: { form: [{
85
- type: Input
86
- }], disabled: [{
87
- type: Input
88
- }], type: [{
89
- type: Input
90
- }], formButton: [{
91
- type: ViewChild,
92
- args: ['formButton', { static: false }]
93
- }] } });
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvZm9ybS1idXR0b24vZm9ybS1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUFvQnZFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxhQUFhO0lBT3JELFlBQW9CLFNBQTBCO1FBQzdDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQURFLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBTHJDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsU0FBSSxHQUFHLFFBQVEsQ0FBQztJQU16QixDQUFDO0lBRUQsWUFBWTtRQUNYLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUViLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDOUUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTNDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2xCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVuQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBUyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztvQkFFaEosSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7d0JBQ3hCLElBQUksT0FBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQWdCLElBQUssQ0FBQyxRQUFRLEVBQUU7NEJBQy9GLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBZSxJQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQ0FDM0QsSUFBSSxLQUFLLEdBQTJCLElBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLENBQUM7Z0NBRXZELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtvQ0FDbkIsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7b0NBRTVDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7d0NBQzVCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7d0NBRXpDLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTs0Q0FDdEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO3lDQUN6SztvQ0FDRixDQUFDLENBQUMsQ0FBQztpQ0FDSDs2QkFDRDt5QkFDRDtxQkFDRDtpQkFDRDtZQUNGLENBQUMsQ0FBQyxDQUFDO1NBQ0g7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNaLENBQUM7SUFFRCxZQUFZO1FBQ1gsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1lBQzdGLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7O2lIQXZEVyxtQkFBbUI7cUdBQW5CLG1CQUFtQixvR0FqQnBCLENBQUMsZUFBZSxDQUFDLDJKQUVsQjs7Ozs7Ozs7Ozs7O0VBWVQ7NEZBR1csbUJBQW1CO2tCQWxCL0IsU0FBUzttQkFBQztvQkFDVixTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQzVCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7OztFQVlUO2lCQUNEO3NHQUdTLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFMkMsVUFBVTtzQkFBMUQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlLCBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVzb2x2ZWlvLWNsYXNzJztcblxuQENvbXBvbmVudCh7XG5cdHByb3ZpZGVyczogW1Byb3ZpZGVyU2VydmljZV0sXG5cdHNlbGVjdG9yOiAnZm9ybS1idXR0b24nLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IHRleHQtYWxpZ246IGxlZnQ7IHdpZHRoOiAxMDAlXCI+XG5cdFx0XHQ8bmctdGVtcGxhdGUgI3RpcENvbnRlbnQ+XG5cdFx0XHRcdDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGRcIj5FcnJvcnM6PGJyPjwvc3Bhbj5cblx0XHRcdFx0PHVsPlxuXHRcdFx0XHRcdDxsaSAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZ2V0VGlwRXJyb3JzKClcIj57e2Vycm9yfX08L2xpPlxuXHRcdFx0XHQ8L3VsPlxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDxkaXYgW25nYlRvb2x0aXBdPVwiKGdldFRpcEVycm9ycygpLmxlbmd0aCA/IHRpcENvbnRlbnQgOiAnJylcIiBwbGFjZW1lbnQ9XCJ0b3AtbGVmdFwiICN0PlxuXHRcdFx0XHQ8YnV0dG9uIFt0eXBlXT1cInR5cGVcIiBbbmdDbGFzc109XCJbJ2J0bicsIGZvcm0gJiYgZm9ybS52YWxpZCA/ICdidG4tc3VjY2VzcycgOiAnYnRuLWRhbmdlciddXCIgW2Rpc2FibGVkXT1cIiFmb3JtIHx8ICFmb3JtLnZhbGlkIHx8IGRpc2FibGVkXCIgc3R5bGU9XCJ3aWR0aDogMjAwcHhcIiBbYXV0b2ZvY3VzXT1cInRydWVcIiAjZm9ybUJ1dHRvbj5TdWJtaXQ8L2J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRgXG59KVxuXG5leHBvcnQgY2xhc3MgRm9ybUJ1dHRvbkNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgeyBcblx0QElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xuXHRASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXHRASW5wdXQoKSB0eXBlID0gJ3N1Ym1pdCc7XG5cblx0QFZpZXdDaGlsZCgnZm9ybUJ1dHRvbicsIHtzdGF0aWM6IGZhbHNlfSkgcHVibGljIGZvcm1CdXR0b247XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfc2VydmljZXM6IFByb3ZpZGVyU2VydmljZSkge1xuXHRcdHN1cGVyKF9zZXJ2aWNlcyk7XG5cdH1cblxuXHRnZXRUaXBFcnJvcnMoKSB7XG5cdFx0bGV0IHJlcyA9IFtdO1xuXG5cdFx0aWYgKHRoaXMuZm9ybSAmJiB0aGlzLmZvcm0uaW52YWxpZCAmJiB0eXBlb2YodGhpcy5mb3JtLmNvbnRyb2xzKSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGxldCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKTtcblxuXHRcdFx0a2V5cy5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRcdGxldCBjdHJsID0gdGhpcy5mb3JtLmNvbnRyb2xzW2tleV07XG5cblx0XHRcdFx0aWYgKGN0cmwuaW52YWxpZCkge1xuXHRcdFx0XHRcdHJlcy5wdXNoKGtleS5yZXBsYWNlKCdfaWQnLCAnJykucmVwbGFjZSgnaWRfJywgJycpLnJlcGxhY2UoJ18nLCAnICcpLnJlcGxhY2UoL1xcYlxcUy9nLCBmdW5jdGlvbih0KSB7IHJldHVybiB0LnRvVXBwZXJDYXNlKCk7IH0pICsgJyBpcyBpbnZhbGlkJyk7XG5cblx0XHRcdFx0XHRpZiAodGhpcy5pc1N1cGVyQWRtaW4oKSkge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZihjdHJsLnZhbHVlKSA9PT0gJ29iamVjdCcgJiYgQXJyYXkuaXNBcnJheShjdHJsLnZhbHVlKSAmJiAoPEZvcm1BcnJheT5jdHJsKS5jb250cm9scykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8ICg8Rm9ybUFycmF5PmN0cmwpLmNvbnRyb2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGdyb3VwID0gKDxGb3JtR3JvdXA+KDxGb3JtQXJyYXk+Y3RybCkuY29udHJvbHNbaV0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGdyb3VwLmNvbnRyb2xzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgYXJyYXlLZXlzID0gT2JqZWN0LmtleXMoZ3JvdXAuY29udHJvbHMpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRhcnJheUtleXMuZm9yRWFjaChhcnJheUtleSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBhcnJheUN0cmwgPSBncm91cC5jb250cm9sc1thcnJheUtleV07XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFycmF5Q3RybC5pbnZhbGlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzLnB1c2goJ1snICsgaSArICddIC0+ICcgKyBhcnJheUtleS5yZXBsYWNlKCdfaWQnLCAnJykucmVwbGFjZSgnaWRfJywgJycpLnJlcGxhY2UoJ18nLCAnICcpLnJlcGxhY2UoL1xcYlxcUy9nLCBmdW5jdGlvbih0KSB7IHJldHVybiB0LnRvVXBwZXJDYXNlKCk7IH0pICsgJyBpcyBpbnZhbGlkJyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGlzU3VwZXJBZG1pbigpIHtcblx0XHRpZiAodGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpICYmIHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKS5yb2xlcy5zdXBlcl9hZG1pbikge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4iXX0=
@@ -1,28 +0,0 @@
1
- import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
2
- import { NgModule } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import { FormButtonComponent } from './form-button.component';
5
- import * as i0 from "@angular/core";
6
- export class FormButtonModule {
7
- }
8
- FormButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FormButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- FormButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: FormButtonModule, declarations: [FormButtonComponent], imports: [CommonModule,
10
- NgbTooltipModule], exports: [FormButtonComponent] });
11
- FormButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FormButtonModule, imports: [CommonModule,
12
- NgbTooltipModule] });
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FormButtonModule, decorators: [{
14
- type: NgModule,
15
- args: [{
16
- imports: [
17
- CommonModule,
18
- NgbTooltipModule
19
- ],
20
- exports: [
21
- FormButtonComponent
22
- ],
23
- declarations: [
24
- FormButtonComponent
25
- ]
26
- }]
27
- }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1idXR0b24ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvZm9ybS1idXR0b24vZm9ybS1idXR0b24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQWM5RCxNQUFNLE9BQU8sZ0JBQWdCOzs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsaUJBSDNCLG1CQUFtQixhQVBuQixZQUFZO1FBQ1osZ0JBQWdCLGFBR2hCLG1CQUFtQjsrR0FNUixnQkFBZ0IsWUFWM0IsWUFBWTtRQUNaLGdCQUFnQjs0RkFTTCxnQkFBZ0I7a0JBWjVCLFFBQVE7bUJBQUM7b0JBQ1QsT0FBTyxFQUFFO3dCQUNSLFlBQVk7d0JBQ1osZ0JBQWdCO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1IsbUJBQW1CO3FCQUNuQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ2IsbUJBQW1CO3FCQUNuQjtpQkFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nYlRvb2x0aXBNb2R1bGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJzsgXG5cbmltcG9ydCB7IEZvcm1CdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2Zvcm0tYnV0dG9uLmNvbXBvbmVudCc7XHRcdFx0XG5cbkBOZ01vZHVsZSh7XG5cdGltcG9ydHM6IFtcblx0XHRDb21tb25Nb2R1bGUsXG5cdFx0TmdiVG9vbHRpcE1vZHVsZVxuXHRdLFxuXHRleHBvcnRzOiBbXG5cdFx0Rm9ybUJ1dHRvbkNvbXBvbmVudFxuXHRdLFxuXHRkZWNsYXJhdGlvbnM6IFtcblx0XHRGb3JtQnV0dG9uQ29tcG9uZW50XG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybUJ1dHRvbk1vZHVsZSB7IH1cbiJdfQ==
@@ -1,220 +0,0 @@
1
- import { BaseComponent, ProviderService } from '../../resolveio-class';
2
- import { Component, Input, QueryList, ViewChildren, ViewChild, ElementRef } from '@angular/core';
3
- import { AuthService } from '../../auth/auth.service';
4
- import { Validators } from '@angular/forms';
5
- import { DialogService } from '../dialog/dialog.service';
6
- import { CoreService } from '../../core.service';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "../../resolveio-class";
9
- import * as i2 from "../../auth/auth.service";
10
- import * as i3 from "../dialog/dialog.service";
11
- import * as i4 from "../../core.service";
12
- import * as i5 from "@angular/router";
13
- import * as i6 from "@ng-bootstrap/ng-bootstrap";
14
- import * as i7 from "@angular/common";
15
- import * as i8 from "../../directive/scroll";
16
- export class NavbarMainComponent extends BaseComponent {
17
- constructor(_services, auth, _ds, _app) {
18
- super(_services);
19
- this._services = _services;
20
- this.auth = auth;
21
- this._ds = _ds;
22
- this._app = _app;
23
- this.logo = '';
24
- this.navTabs = [];
25
- this.fontSize = 12;
26
- this.publicProgram = false;
27
- this.digitalSign = false;
28
- this.user = null;
29
- this.collapseShowing = false;
30
- this.client = '';
31
- this.isResolveIO = false;
32
- this.standardProgram = false;
33
- this.tourStarted = false;
34
- this.scrollRightInterval = null;
35
- this.scrollLeftInterval = null;
36
- this.isDemo = false;
37
- }
38
- ngOnInit() {
39
- this._services._account.user.subscribe(user => {
40
- this.user = user;
41
- });
42
- this.client = this._app.client.getValue();
43
- this.standardProgram = this._app.standardProgram.getValue();
44
- this.tourStarted = this._services._app.tourStarted.getValue();
45
- if (!this.client) {
46
- this.isResolveIO = true;
47
- }
48
- this._services._app.tourStarted.subscribe(tourStarted => {
49
- this.tourStarted = tourStarted;
50
- });
51
- this._services._app.isDemo.subscribe(isDemo => {
52
- this.isDemo = isDemo;
53
- });
54
- }
55
- ngAfterViewInit() {
56
- setInterval(() => {
57
- this.calculateDropdownsLeft();
58
- }, 500);
59
- document.documentElement.style.setProperty('--font-size', this.fontSize + 'px');
60
- }
61
- async logout() {
62
- this._app.isLoggingOut.next(true);
63
- await this._services._account.logOut();
64
- this._app.isLoggingOut.next(false);
65
- }
66
- login() {
67
- this.auth.loginUser().then(() => { }, err => { });
68
- }
69
- hasScrolled() {
70
- if (this.scrollable.nativeElement.scrollLeft <= 0) {
71
- this.stopScrollRight();
72
- }
73
- return this.scrollable.nativeElement.scrollLeft > 0 ? true : false;
74
- }
75
- hasMoreScroll() {
76
- if (this.scrollable.nativeElement.scrollWidth <= this.scrollable.nativeElement.clientWidth + this.scrollable.nativeElement.scrollLeft) {
77
- this.stopScrollLeft();
78
- }
79
- return this.scrollable.nativeElement.scrollWidth > this.scrollable.nativeElement.clientWidth + this.scrollable.nativeElement.scrollLeft ? true : false;
80
- }
81
- startScrollRight() {
82
- this.scrollRightInterval = setInterval(() => {
83
- this.scrollable.nativeElement.scrollLeft -= 2;
84
- }, 1);
85
- }
86
- stopScrollRight() {
87
- clearInterval(this.scrollRightInterval);
88
- }
89
- scrollRightOnce() {
90
- this.scrollable.nativeElement.scrollLeft -= 50;
91
- }
92
- startScrollLeft() {
93
- this.scrollLeftInterval = setInterval(() => {
94
- this.scrollable.nativeElement.scrollLeft += 2;
95
- }, 1);
96
- }
97
- stopScrollLeft() {
98
- clearInterval(this.scrollLeftInterval);
99
- }
100
- scrollLeftOnce() {
101
- this.scrollable.nativeElement.scrollLeft += 50;
102
- }
103
- calculateDropdownsLeft() {
104
- if (this.dropdowns && this.dropdowns.toArray() && this.dropdowns.toArray().length && this.scrollable) {
105
- this.navTabs.filter(a => a.type === 'dropdown').forEach(tab => {
106
- let dropDown = this.dropdowns.toArray().filter(a => a.nativeElement.innerText.split('\n')[0].replace(/[^A-Za-z0-9]/g, '') === tab.label.replace(/[^A-Za-z0-9]/g, ''))[0];
107
- if (dropDown) {
108
- tab.left = Math.max(dropDown.nativeElement.offsetLeft - this.scrollable.nativeElement.scrollLeft, this.scrollable.nativeElement.offsetLeft);
109
- }
110
- else {
111
- tab.left = 0;
112
- }
113
- });
114
- return true;
115
- }
116
- return false;
117
- }
118
- isInRole(role) {
119
- if (!role) {
120
- return true;
121
- }
122
- if (this.isSuperAdmin()) {
123
- return true;
124
- }
125
- if (this.user) {
126
- if (this.user.roles.groups) {
127
- for (let i = 0; i < this.user.roles.groups.length; i++) {
128
- let group = this.user.roles.groups[i];
129
- for (let j = 0; j < group.views.length; j++) {
130
- let view = group.views[j];
131
- if (view === role || view.startsWith(role + '/')) {
132
- return true;
133
- }
134
- }
135
- }
136
- }
137
- }
138
- return false;
139
- }
140
- isSuperAdmin() {
141
- return this.user && this.user.roles ? this.user.roles.super_admin : false;
142
- }
143
- isInOneRole(roles) {
144
- if (this.isSuperAdmin()) {
145
- return true;
146
- }
147
- for (let i = 0; i < roles.length; i++) {
148
- let role = roles[i];
149
- if (!role) {
150
- return true;
151
- }
152
- if (this._services._account.isUserInView(role)) {
153
- return true;
154
- }
155
- }
156
- return false;
157
- }
158
- navigateTo(route) {
159
- this._services._router.navigateByUrl(route);
160
- }
161
- help() {
162
- this._ds.input('What do you need help with?', [
163
- {
164
- label: 'Title of Problem',
165
- form: 'problem_title',
166
- data: '',
167
- validators: [Validators.required],
168
- validatorErrors: ['required'],
169
- validatorMsg: ['Problem title is required.'],
170
- required: true
171
- },
172
- {
173
- label: 'Description of Problem',
174
- form: 'problem_desc',
175
- data: '',
176
- validators: [Validators.required],
177
- validatorErrors: ['required'],
178
- validatorMsg: ['Problem description is required.'],
179
- required: true,
180
- type: 'textarea'
181
- }
182
- ]).then(helpRes => {
183
- this._services._socket.call('getHelpNotification', this._services._account.getUser().fullname, helpRes.problem_title.value, helpRes.problem_desc.value);
184
- }, () => { });
185
- }
186
- isCustomer() {
187
- return this._services._account.getUser().other.customers && this._services._account.getUser().other.customers.length ? true : false;
188
- }
189
- getWindowWidth() {
190
- return window.innerWidth;
191
- }
192
- }
193
- NavbarMainComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NavbarMainComponent, deps: [{ token: i1.ProviderService }, { token: i2.AuthService }, { token: i3.DialogService }, { token: i4.CoreService }], target: i0.ɵɵFactoryTarget.Component });
194
- NavbarMainComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: NavbarMainComponent, selector: "navbar-main", inputs: { logo: "logo", navTabs: "navTabs", fontSize: "fontSize", publicProgram: "publicProgram", digitalSign: "digitalSign" }, providers: [ProviderService], viewQueries: [{ propertyName: "scrollable", first: true, predicate: ["scrollable"], descendants: true, static: true }, { propertyName: "dropdowns", predicate: ["dropdowns"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<style>\n\t:root {\n --font-size: 12;\n }\n\n\t:host /deep/ * {\n\t\tfont-size: var(--font-size);\n\t}\n\n @media (max-width: 1200px) {\n .navbarMain a {\n font-size: 18px !important;\n }\n }\n @media (min-width: 1200px) {\n .scrollable-x {\n max-width: 60vw;\n overflow-x: auto;\n overflow-y: visible;\n align-items: center;\n }\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n .verticalAlign {\n display: flex;\n align-items: center;\n }\n\n .dropdown {\n position: static;\n }\n }\n\n .navbar li {\n cursor: pointer;\n text-align: center;\n }\n\n .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: gray;\n }\n</style>\n\n<div class=\"row\">\n <nav class=\"navbar navbar-expand-xl navbar-dark bg-dark navbarMain\" style=\"width: 100%\">\n <a class=\"navbar-brand\" href=\"#\">\n <img [src]=\"logo\" style=\"width: auto; height: 36px;\" *ngIf=\"!isDemo\">\n </a>\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" aria-controls=\"navbarMainNav\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse collapse\" id=\"navbarMainNav\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!standardProgram && !digitalSign\" [style.border-right]=\"getWindowWidth() > 1200 ? '1px solid white' : ''\">\n <a class=\"nav-link\" routerLink=\"home\" [class.disabled]=\"tourStarted ? true : null\" routerLinkActive=\"active\">Home</a>\n </li>\n </ul>\n <div *ngIf=\"hasScrolled()\" (mouseover)=\"startScrollRight()\" (mouseout)=\"stopScrollRight()\" (click)=\"scrollRightOnce()\">\n <i class=\"fa fa-arrow-left\" style=\"color: white; font-size: 20px\"></i>\n </div>\n <ul [ngClass]=\"['navbar-nav', 'scrollable-x']\" #scrollable detect-scroll (onScroll)=\"calculateDropdownsLeft()\">\n <ng-container *ngFor=\"let tab of navTabs; let i = index;\">\n <ng-container *ngIf=\"tab.type === 'link'\">\n <li class=\"nav-item\" *ngIf=\"(publicProgram || user) && !digitalSign && isInRole(tab.links[0].role)\" data-toggle=\"collapse\" [tourAnchor]=\"tab.tourAnchor\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" [routerLink]=\"tab.links[0].routerLink\" routerLinkActive=\"active\">{{tab.links[0].label}}</a>\n </li>\n </ng-container>\n <ng-container *ngIf=\"tab.type === 'dropdown'\">\n <li #dropdowns class=\"nav-item dropdown\" *ngIf=\"(publicProgram || user) && isInOneRole(tab.roles)\">\n <a class=\"nav-link dropdown-toggle\" [class.disabled]=\"tourStarted ? true : null\" id=\"navbarDropdownAsset\" role=\"button\" [tourAnchor]=\"tab.tourAnchor\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{tab.label}}\n </a>\n <div class=\"dropdown-menu bg-dark\" aria-labelledby=\"navbarDropdownAsset\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" [style.left.px]=\"tab.left || 0\">\n <ng-container *ngFor=\"let link of tab.links\">\n <a class=\"dropdown-item nav-link\" *ngIf=\"(publicProgram || user) && isInRole(link.role)\" [routerLink]=\"link.routerLink\">{{link.label}}</a>\n </ng-container>\n </div>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n <div *ngIf=\"hasMoreScroll()\" (mouseover)=\"startScrollLeft()\" (mouseout)=\"stopScrollLeft()\" (click)=\"scrollLeftOnce()\">\n <i class=\"fa fa-arrow-right\" style=\"color: white; font-size: 20px\"></i>\n </div>\n <hr />\n <ul [ngClass]=\"['navbar-nav', getWindowWidth() > 1200 ? 'float-lg-right' : '']\">\n <!-- <li class=\"nav-item\" *ngIf=\"user\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" [style.border-left]=\"getWindowWidth() > 1200 ? '1px solid white' : ''\" style=\"height: 30px;\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" (click)=\"print()\" style=\"cursor: pointer;\"><i style=\"font-size:20px; color: white;\" class=\"fa fa-print\" aria-hidden=\"true\"></i></a>\n </li> -->\n <li class=\"nav-item\" *ngIf=\"user && client\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" style=\"height: 30px;\" tourAnchor=\"supportSection\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"support-ticket\" routerLinkActive=\"active\">Support</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && isInRole('super-admin')\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"logs\" routerLinkActive=\"active\">Logs</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && isInRole('super-admin')\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"super-admin\" routerLinkActive=\"active\">Super Admin</a>\n </li>\n </ul>\n <hr />\n <ul [ngClass]=\"['navbar-nav', getWindowWidth() > 1200 ? 'float-lg-right' : '']\" *ngIf=\"!publicProgram\">\n <li class=\"nav-item\" *ngIf=\"!user\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" (click)=\"login()\" style=\"cursor: pointer;\" routerLinkActive=\"active\">Login</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user\" tourAnchor=\"userSettings\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"user-settings\">Hello {{user.fullname}}!</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user\" style=\"cursor: pointer\" (click)=\"logout()\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\">Logout</a>\n <li>\n </ul>\n </div>\n </nav>\n</div>", styles: ["\n\t:root {\n --font-size: 12;\n }\n\n\t:host /deep/ * {\n\t\tfont-size: var(--font-size);\n\t}\n\n @media (max-width: 1200px) {\n .navbarMain a {\n font-size: 18px !important;\n }\n }\n @media (min-width: 1200px) {\n .scrollable-x {\n max-width: 60vw;\n overflow-x: auto;\n overflow-y: visible;\n align-items: center;\n }\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n .verticalAlign {\n display: flex;\n align-items: center;\n }\n\n .dropdown {\n position: static;\n }\n }\n\n .navbar li {\n cursor: pointer;\n text-align: center;\n }\n\n .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: gray;\n }\n"], dependencies: [{ kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.NgbNavbar, selector: ".navbar" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ScrollDirective, selector: "[detect-scroll]", inputs: ["bottomOffset", "topOffset"], outputs: ["onScroll"] }] });
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NavbarMainComponent, decorators: [{
196
- type: Component,
197
- args: [{ selector: 'navbar-main', providers: [ProviderService], template: "<style>\n\t:root {\n --font-size: 12;\n }\n\n\t:host /deep/ * {\n\t\tfont-size: var(--font-size);\n\t}\n\n @media (max-width: 1200px) {\n .navbarMain a {\n font-size: 18px !important;\n }\n }\n @media (min-width: 1200px) {\n .scrollable-x {\n max-width: 60vw;\n overflow-x: auto;\n overflow-y: visible;\n align-items: center;\n }\n\n ::-webkit-scrollbar {\n display: none;\n }\n\n .verticalAlign {\n display: flex;\n align-items: center;\n }\n\n .dropdown {\n position: static;\n }\n }\n\n .navbar li {\n cursor: pointer;\n text-align: center;\n }\n\n .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: gray;\n }\n</style>\n\n<div class=\"row\">\n <nav class=\"navbar navbar-expand-xl navbar-dark bg-dark navbarMain\" style=\"width: 100%\">\n <a class=\"navbar-brand\" href=\"#\">\n <img [src]=\"logo\" style=\"width: auto; height: 36px;\" *ngIf=\"!isDemo\">\n </a>\n <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" aria-controls=\"navbarMainNav\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse collapse\" id=\"navbarMainNav\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" *ngIf=\"!standardProgram && !digitalSign\" [style.border-right]=\"getWindowWidth() > 1200 ? '1px solid white' : ''\">\n <a class=\"nav-link\" routerLink=\"home\" [class.disabled]=\"tourStarted ? true : null\" routerLinkActive=\"active\">Home</a>\n </li>\n </ul>\n <div *ngIf=\"hasScrolled()\" (mouseover)=\"startScrollRight()\" (mouseout)=\"stopScrollRight()\" (click)=\"scrollRightOnce()\">\n <i class=\"fa fa-arrow-left\" style=\"color: white; font-size: 20px\"></i>\n </div>\n <ul [ngClass]=\"['navbar-nav', 'scrollable-x']\" #scrollable detect-scroll (onScroll)=\"calculateDropdownsLeft()\">\n <ng-container *ngFor=\"let tab of navTabs; let i = index;\">\n <ng-container *ngIf=\"tab.type === 'link'\">\n <li class=\"nav-item\" *ngIf=\"(publicProgram || user) && !digitalSign && isInRole(tab.links[0].role)\" data-toggle=\"collapse\" [tourAnchor]=\"tab.tourAnchor\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" [routerLink]=\"tab.links[0].routerLink\" routerLinkActive=\"active\">{{tab.links[0].label}}</a>\n </li>\n </ng-container>\n <ng-container *ngIf=\"tab.type === 'dropdown'\">\n <li #dropdowns class=\"nav-item dropdown\" *ngIf=\"(publicProgram || user) && isInOneRole(tab.roles)\">\n <a class=\"nav-link dropdown-toggle\" [class.disabled]=\"tourStarted ? true : null\" id=\"navbarDropdownAsset\" role=\"button\" [tourAnchor]=\"tab.tourAnchor\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n {{tab.label}}\n </a>\n <div class=\"dropdown-menu bg-dark\" aria-labelledby=\"navbarDropdownAsset\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" [style.left.px]=\"tab.left || 0\">\n <ng-container *ngFor=\"let link of tab.links\">\n <a class=\"dropdown-item nav-link\" *ngIf=\"(publicProgram || user) && isInRole(link.role)\" [routerLink]=\"link.routerLink\">{{link.label}}</a>\n </ng-container>\n </div>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n <div *ngIf=\"hasMoreScroll()\" (mouseover)=\"startScrollLeft()\" (mouseout)=\"stopScrollLeft()\" (click)=\"scrollLeftOnce()\">\n <i class=\"fa fa-arrow-right\" style=\"color: white; font-size: 20px\"></i>\n </div>\n <hr />\n <ul [ngClass]=\"['navbar-nav', getWindowWidth() > 1200 ? 'float-lg-right' : '']\">\n <!-- <li class=\"nav-item\" *ngIf=\"user\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" [style.border-left]=\"getWindowWidth() > 1200 ? '1px solid white' : ''\" style=\"height: 30px;\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" (click)=\"print()\" style=\"cursor: pointer;\"><i style=\"font-size:20px; color: white;\" class=\"fa fa-print\" aria-hidden=\"true\"></i></a>\n </li> -->\n <li class=\"nav-item\" *ngIf=\"user && client\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\" style=\"height: 30px;\" tourAnchor=\"supportSection\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"support-ticket\" routerLinkActive=\"active\">Support</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && isInRole('super-admin')\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"logs\" routerLinkActive=\"active\">Logs</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user && isInRole('super-admin')\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" routerLink=\"super-admin\" routerLinkActive=\"active\">Super Admin</a>\n </li>\n </ul>\n <hr />\n <ul [ngClass]=\"['navbar-nav', getWindowWidth() > 1200 ? 'float-lg-right' : '']\" *ngIf=\"!publicProgram\">\n <li class=\"nav-item\" *ngIf=\"!user\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" (click)=\"login()\" style=\"cursor: pointer;\" routerLinkActive=\"active\">Login</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user\" tourAnchor=\"userSettings\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" routerLink=\"user-settings\">Hello {{user.fullname}}!</a>\n </li>\n <li class=\"nav-item\" *ngIf=\"user\" style=\"cursor: pointer\" (click)=\"logout()\" data-toggle=\"collapse\" data-target=\"#navbarMainNav\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\">Logout</a>\n <li>\n </ul>\n </div>\n </nav>\n</div>" }]
198
- }], ctorParameters: function () { return [{ type: i1.ProviderService }, { type: i2.AuthService }, { type: i3.DialogService }, { type: i4.CoreService }]; }, propDecorators: { dropdowns: [{
199
- type: ViewChildren,
200
- args: ['dropdowns']
201
- }], scrollable: [{
202
- type: ViewChild,
203
- args: ['scrollable', { static: true }]
204
- }], logo: [{
205
- type: Input,
206
- args: ['logo']
207
- }], navTabs: [{
208
- type: Input,
209
- args: ['navTabs']
210
- }], fontSize: [{
211
- type: Input,
212
- args: ['fontSize']
213
- }], publicProgram: [{
214
- type: Input,
215
- args: ['publicProgram']
216
- }], digitalSign: [{
217
- type: Input,
218
- args: ['digitalSign']
219
- }] } });
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLW1haW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvbmF2YmFyLW1haW4vbmF2YmFyLW1haW4uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvbmF2YmFyLW1haW4vbmF2YmFyLW1haW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWlCLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXhILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7OztBQU9qRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBYTtJQXdCckQsWUFBb0IsU0FBMEIsRUFBVSxJQUFpQixFQUFVLEdBQWtCLEVBQVUsSUFBaUI7UUFDL0gsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBREUsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQUFVLFNBQUksR0FBSixJQUFJLENBQWE7UUFuQmpILFNBQUksR0FBRyxFQUFFLENBQUM7UUFDUCxZQUFPLEdBQXlCLEVBQUUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ1Qs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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9yZXNvbHZlaW8tY2xhc3MnO1xuaW1wb3J0IHsgVXNlck1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXIubW9kZWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgUXVlcnlMaXN0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGRyZW4sIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5hdmJhck1haW5UYWJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9uYXZiYXItbWFpbi10YWIubW9kZWwnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25hdmJhci1tYWluJyxcblx0dGVtcGxhdGVVcmw6ICcuL25hdmJhci1tYWluLmNvbXBvbmVudC5odG1sJyxcblx0cHJvdmlkZXJzOiBbUHJvdmlkZXJTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBOYXZiYXJNYWluQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cblx0QFZpZXdDaGlsZHJlbignZHJvcGRvd25zJykgZHJvcGRvd25zOiBRdWVyeUxpc3Q8YW55Pjtcblx0QFZpZXdDaGlsZCgnc2Nyb2xsYWJsZScsIHtzdGF0aWM6IHRydWV9KSBzY3JvbGxhYmxlOiBFbGVtZW50UmVmO1xuXG5cdEBJbnB1dCgnbG9nbycpIGxvZ28gPSAnJztcblx0QElucHV0KCduYXZUYWJzJykgbmF2VGFiczogTmF2YmFyTWFpblRhYk1vZGVsW10gPSBbXTtcblx0QElucHV0KCdmb250U2l6ZScpIGZvbnRTaXplID0gMTI7XG5cdEBJbnB1dCgncHVibGljUHJvZ3JhbScpIHB1YmxpY1Byb2dyYW0gPSBmYWxzZTtcblx0QElucHV0KCdkaWdpdGFsU2lnbicpIGRpZ2l0YWxTaWduID0gZmFsc2U7XG5cblx0dXNlcjogVXNlck1vZGVsID0gbnVsbDtcblx0Y29sbGFwc2VTaG93aW5nID0gZmFsc2U7XG5cblx0Y2xpZW50ID0gJyc7XG5cblx0aXNSZXNvbHZlSU8gPSBmYWxzZTtcblx0c3RhbmRhcmRQcm9ncmFtID0gZmFsc2U7XG5cdHRvdXJTdGFydGVkID0gZmFsc2U7XG5cblx0c2Nyb2xsUmlnaHRJbnRlcnZhbCA9IG51bGw7XG5cdHNjcm9sbExlZnRJbnRlcnZhbCA9IG51bGw7XG5cdGlzRGVtbyA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX3NlcnZpY2VzOiBQcm92aWRlclNlcnZpY2UsIHByaXZhdGUgYXV0aDogQXV0aFNlcnZpY2UsIHByaXZhdGUgX2RzOiBEaWFsb2dTZXJ2aWNlLCBwcml2YXRlIF9hcHA6IENvcmVTZXJ2aWNlKSB7XG5cdFx0c3VwZXIoX3NlcnZpY2VzKTtcblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LnVzZXIuc3Vic2NyaWJlKHVzZXIgPT4ge1xuXHRcdFx0dGhpcy51c2VyID0gdXNlcjtcblx0XHR9KTtcblxuXHRcdHRoaXMuY2xpZW50ID0gdGhpcy5fYXBwLmNsaWVudC5nZXRWYWx1ZSgpO1xuXHRcdHRoaXMuc3RhbmRhcmRQcm9ncmFtID0gdGhpcy5fYXBwLnN0YW5kYXJkUHJvZ3JhbS5nZXRWYWx1ZSgpO1xuXHRcdHRoaXMudG91clN0YXJ0ZWQgPSB0aGlzLl9zZXJ2aWNlcy5fYXBwLnRvdXJTdGFydGVkLmdldFZhbHVlKCk7XG5cblx0XHRpZiAoIXRoaXMuY2xpZW50KSB7XG5cdFx0XHR0aGlzLmlzUmVzb2x2ZUlPID0gdHJ1ZTtcblx0XHR9XG5cblx0XHR0aGlzLl9zZXJ2aWNlcy5fYXBwLnRvdXJTdGFydGVkLnN1YnNjcmliZSh0b3VyU3RhcnRlZCA9PiB7XG5cdFx0XHR0aGlzLnRvdXJTdGFydGVkID0gdG91clN0YXJ0ZWQ7XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9zZXJ2aWNlcy5fYXBwLmlzRGVtby5zdWJzY3JpYmUoaXNEZW1vID0+IHtcblx0XHRcdHRoaXMuaXNEZW1vID0gaXNEZW1vO1xuXHRcdH0pO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuY2FsY3VsYXRlRHJvcGRvd25zTGVmdCgpO1xuXHRcdH0sIDUwMCk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWZvbnQtc2l6ZScsIHRoaXMuZm9udFNpemUgKyAncHgnKTtcblx0fVxuXG5cdGFzeW5jIGxvZ291dCgpIHtcblx0XHR0aGlzLl9hcHAuaXNMb2dnaW5nT3V0Lm5leHQodHJ1ZSk7XG5cdFx0YXdhaXQgdGhpcy5fc2VydmljZXMuX2FjY291bnQubG9nT3V0KCk7XG5cdFx0dGhpcy5fYXBwLmlzTG9nZ2luZ091dC5uZXh0KGZhbHNlKTtcblx0fVxuXG5cdGxvZ2luKCkge1xuXHRcdHRoaXMuYXV0aC5sb2dpblVzZXIoKS50aGVuKCgpID0+IHt9LCBlcnIgPT4ge30pO1xuXHR9XG5cblx0aGFzU2Nyb2xsZWQoKSB7XG5cdFx0aWYgKHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPD0gMCkge1xuXHRcdFx0dGhpcy5zdG9wU2Nyb2xsUmlnaHQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA+IDAgPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHRoYXNNb3JlU2Nyb2xsKCkge1xuXHRcdGlmICh0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA8PSB0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCArIHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpIHtcblx0XHRcdHRoaXMuc3RvcFNjcm9sbExlZnQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggPiB0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCArIHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPyB0cnVlIDogZmFsc2U7XG5cdH1cblxuXHRzdGFydFNjcm9sbFJpZ2h0KCkge1xuXHRcdHRoaXMuc2Nyb2xsUmlnaHRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgLT0gMjtcblx0XHR9LCAxKTtcblx0fVxuXG5cdHN0b3BTY3JvbGxSaWdodCgpIHtcblx0XHRjbGVhckludGVydmFsKHRoaXMuc2Nyb2xsUmlnaHRJbnRlcnZhbCk7XG5cdH1cblxuXHRzY3JvbGxSaWdodE9uY2UoKSB7XG5cdFx0dGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCAtPSA1MDtcblx0fVxuXG5cdHN0YXJ0U2Nyb2xsTGVmdCgpIHtcblx0XHR0aGlzLnNjcm9sbExlZnRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdHRoaXMuc2Nyb2xsYWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgKz0gMjtcblx0XHR9LCAxKTtcblx0fVxuXG5cdHN0b3BTY3JvbGxMZWZ0KCkge1xuXHRcdGNsZWFySW50ZXJ2YWwodGhpcy5zY3JvbGxMZWZ0SW50ZXJ2YWwpO1xuXHR9XG5cblx0c2Nyb2xsTGVmdE9uY2UoKSB7XG5cdFx0dGhpcy5zY3JvbGxhYmxlLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCArPSA1MDtcblx0fVxuXHRcblx0Y2FsY3VsYXRlRHJvcGRvd25zTGVmdCgpIHtcblx0XHRpZiAodGhpcy5kcm9wZG93bnMgJiYgdGhpcy5kcm9wZG93bnMudG9BcnJheSgpICYmIHRoaXMuZHJvcGRvd25zLnRvQXJyYXkoKS5sZW5ndGggJiYgdGhpcy5zY3JvbGxhYmxlKSB7XG5cdFx0XHR0aGlzLm5hdlRhYnMuZmlsdGVyKGEgPT4gYS50eXBlID09PSAnZHJvcGRvd24nKS5mb3JFYWNoKHRhYiA9PiB7XG5cdFx0XHRcdGxldCBkcm9wRG93biA9IHRoaXMuZHJvcGRvd25zLnRvQXJyYXkoKS5maWx0ZXIoYSA9PiBhLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0LnNwbGl0KCdcXG4nKVswXS5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywgJycpID09PSB0YWIubGFiZWwucmVwbGFjZSgvW15BLVphLXowLTldL2csICcnKSlbMF07XG5cblx0XHRcdFx0aWYgKGRyb3BEb3duKSB7XG5cdFx0XHRcdFx0dGFiLmxlZnQgPSBNYXRoLm1heChkcm9wRG93bi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgLSB0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0LCB0aGlzLnNjcm9sbGFibGUubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR0YWIubGVmdCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNJblJvbGUocm9sZTogYW55KSB7XG5cdFx0aWYgKCFyb2xlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5pc1N1cGVyQWRtaW4oKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMudXNlcikge1xuXHRcdFx0aWYgKCg8YW55PnRoaXMudXNlci5yb2xlcykuZ3JvdXBzKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgKDxhbnk+dGhpcy51c2VyLnJvbGVzKS5ncm91cHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRsZXQgZ3JvdXAgPSAoPGFueT50aGlzLnVzZXIucm9sZXMpLmdyb3Vwc1tpXTtcblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwLnZpZXdzLmxlbmd0aDsgaisrKSB7XHRcblx0XHRcdFx0XHRcdGxldCB2aWV3ID0gZ3JvdXAudmlld3Nbal07XG5cdFx0XHRcdFx0XHRpZiAodmlldyA9PT0gcm9sZSB8fCB2aWV3LnN0YXJ0c1dpdGgocm9sZSArICcvJykpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aXNTdXBlckFkbWluKCkge1xuXHRcdHJldHVybiB0aGlzLnVzZXIgJiYgdGhpcy51c2VyLnJvbGVzID8gKDxhbnk+dGhpcy51c2VyLnJvbGVzKS5zdXBlcl9hZG1pbiA6IGZhbHNlO1xuXHR9XG5cblx0aXNJbk9uZVJvbGUocm9sZXM6IHN0cmluZ1tdKSB7XG5cdFx0aWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcm9sZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCByb2xlID0gcm9sZXNbaV07XG5cblx0XHRcdGlmICghcm9sZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmlzVXNlckluVmlldyhyb2xlKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRuYXZpZ2F0ZVRvKHJvdXRlOiBzdHJpbmcpIHtcblx0XHR0aGlzLl9zZXJ2aWNlcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwocm91dGUpO1xuXHR9XG5cblx0aGVscCgpIHtcblx0XHR0aGlzLl9kcy5pbnB1dCgnV2hhdCBkbyB5b3UgbmVlZCBoZWxwIHdpdGg/JywgW1xuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogJ1RpdGxlIG9mIFByb2JsZW0nLCBcblx0XHRcdFx0Zm9ybTogJ3Byb2JsZW1fdGl0bGUnLCBcblx0XHRcdFx0ZGF0YTogJycsIFxuXHRcdFx0XHR2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cdFx0XHRcdHZhbGlkYXRvckVycm9yczogWydyZXF1aXJlZCddLFxuXHRcdFx0XHR2YWxpZGF0b3JNc2c6IFsnUHJvYmxlbSB0aXRsZSBpcyByZXF1aXJlZC4nXSxcblx0XHRcdFx0cmVxdWlyZWQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGxhYmVsOiAnRGVzY3JpcHRpb24gb2YgUHJvYmxlbScsIFxuXHRcdFx0XHRmb3JtOiAncHJvYmxlbV9kZXNjJywgXG5cdFx0XHRcdGRhdGE6ICcnLCBcblx0XHRcdFx0dmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuXHRcdFx0XHR2YWxpZGF0b3JFcnJvcnM6IFsncmVxdWlyZWQnXSxcblx0XHRcdFx0dmFsaWRhdG9yTXNnOiBbJ1Byb2JsZW0gZGVzY3JpcHRpb24gaXMgcmVxdWlyZWQuJ10sXG5cdFx0XHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiAndGV4dGFyZWEnXG5cdFx0XHR9XG5cdFx0XSkudGhlbihoZWxwUmVzID0+IHtcblx0XHRcdHRoaXMuX3NlcnZpY2VzLl9zb2NrZXQuY2FsbCgnZ2V0SGVscE5vdGlmaWNhdGlvbicsIHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKS5mdWxsbmFtZSwgaGVscFJlcy5wcm9ibGVtX3RpdGxlLnZhbHVlLCBoZWxwUmVzLnByb2JsZW1fZGVzYy52YWx1ZSk7XG5cdFx0fSwgKCkgPT4ge30pO1xuXHR9XG5cblx0aXNDdXN0b21lcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpLm90aGVyLmN1c3RvbWVycyAmJiB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkub3RoZXIuY3VzdG9tZXJzLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdGdldFdpbmRvd1dpZHRoKCkge1xuXHRcdHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aDtcblx0fVxuXG5cdC8vIHByaW50KCkge1xuXHQvLyBcdHdpbmRvdy5wcmludCgpO1xuXHQvLyB9XG59IiwiPHN0eWxlPlxuXHQ6cm9vdCB7XG4gICAgICAgIC0tZm9udC1zaXplOiAxMjtcbiAgICB9XG5cblx0Omhvc3QgL2RlZXAvICoge1xuXHRcdGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcblx0fVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMDBweCkge1xuICAgICAgICAubmF2YmFyTWFpbiBhIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIEBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgICAgICAgLnNjcm9sbGFibGUteCB7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDYwdnc7XG4gICAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC52ZXJ0aWNhbEFsaWduIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmRyb3Bkb3duIHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubmF2YmFyIGxpIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLm5hdmJhci1kYXJrIC5uYXZiYXItbmF2IC5uYXYtbGluazpob3ZlciwgLm5hdmJhci1kYXJrIC5uYXZiYXItbmF2IC5uYXYtbGluazpmb2N1cyB7XG4gICAgICAgIGNvbG9yOiBncmF5O1xuICAgIH1cbjwvc3R5bGU+XG5cbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8bmF2IGNsYXNzPVwibmF2YmFyIG5hdmJhci1leHBhbmQteGwgbmF2YmFyLWRhcmsgYmctZGFyayBuYXZiYXJNYWluXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiIGhyZWY9XCIjXCI+XG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwibG9nb1wiIHN0eWxlPVwid2lkdGg6IGF1dG87IGhlaWdodDogMzZweDtcIiAqbmdJZj1cIiFpc0RlbW9cIj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyTWFpbk5hdlwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5hdmJhci1jb2xsYXBzZSBjb2xsYXBzZVwiIGlkPVwibmF2YmFyTWFpbk5hdlwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdlwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIiAqbmdJZj1cIiFzdGFuZGFyZFByb2dyYW0gJiYgIWRpZ2l0YWxTaWduXCIgW3N0eWxlLmJvcmRlci1yaWdodF09XCJnZXRXaW5kb3dXaWR0aCgpID4gMTIwMCA/ICcxcHggc29saWQgd2hpdGUnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCJob21lXCIgW2NsYXNzLmRpc2FibGVkXT1cInRvdXJTdGFydGVkID8gdHJ1ZSA6IG51bGxcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+SG9tZTwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXNTY3JvbGxlZCgpXCIgKG1vdXNlb3Zlcik9XCJzdGFydFNjcm9sbFJpZ2h0KClcIiAobW91c2VvdXQpPVwic3RvcFNjcm9sbFJpZ2h0KClcIiAoY2xpY2spPVwic2Nyb2xsUmlnaHRPbmNlKClcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZTsgZm9udC1zaXplOiAyMHB4XCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8dWwgW25nQ2xhc3NdPVwiWyduYXZiYXItbmF2JywgJ3Njcm9sbGFibGUteCddXCIgI3Njcm9sbGFibGUgZGV0ZWN0LXNjcm9sbCAob25TY3JvbGwpPVwiY2FsY3VsYXRlRHJvcGRvd25zTGVmdCgpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIG5hdlRhYnM7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWIudHlwZSA9PT0gJ2xpbmsnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0lmPVwiKHB1YmxpY1Byb2dyYW0gfHwgdXNlcikgJiYgIWRpZ2l0YWxTaWduICYmIGlzSW5Sb2xlKHRhYi5saW5rc1swXS5yb2xlKVwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBbdG91ckFuY2hvcl09XCJ0YWIudG91ckFuY2hvclwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgW2NsYXNzLmRpc2FibGVkXT1cInRvdXJTdGFydGVkID8gdHJ1ZSA6IG51bGxcIiBbcm91dGVyTGlua109XCJ0YWIubGlua3NbMF0ucm91dGVyTGlua1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj57e3RhYi5saW5rc1swXS5sYWJlbH19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWIudHlwZSA9PT0gJ2Ryb3Bkb3duJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICNkcm9wZG93bnMgY2xhc3M9XCJuYXYtaXRlbSBkcm9wZG93blwiICpuZ0lmPVwiKHB1YmxpY1Byb2dyYW0gfHwgdXNlcikgJiYgaXNJbk9uZVJvbGUodGFiLnJvbGVzKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmsgZHJvcGRvd24tdG9nZ2xlXCIgW2NsYXNzLmRpc2FibGVkXT1cInRvdXJTdGFydGVkID8gdHJ1ZSA6IG51bGxcIiBpZD1cIm5hdmJhckRyb3Bkb3duQXNzZXRcIiByb2xlPVwiYnV0dG9uXCIgW3RvdXJBbmNob3JdPVwidGFiLnRvdXJBbmNob3JcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0YWIubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBiZy1kYXJrXCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25Bc3NldFwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCIgW3N0eWxlLmxlZnQucHhdPVwidGFiLmxlZnQgfHwgMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsaW5rIG9mIHRhYi5saW5rc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgKm5nSWY9XCIocHVibGljUHJvZ3JhbSB8fCB1c2VyKSAmJiBpc0luUm9sZShsaW5rLnJvbGUpXCIgW3JvdXRlckxpbmtdPVwibGluay5yb3V0ZXJMaW5rXCI+e3tsaW5rLmxhYmVsfX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc01vcmVTY3JvbGwoKVwiIChtb3VzZW92ZXIpPVwic3RhcnRTY3JvbGxMZWZ0KClcIiAobW91c2VvdXQpPVwic3RvcFNjcm9sbExlZnQoKVwiIChjbGljayk9XCJzY3JvbGxMZWZ0T25jZSgpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1yaWdodFwiIHN0eWxlPVwiY29sb3I6IHdoaXRlOyBmb250LXNpemU6IDIwcHhcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxociAvPlxuICAgICAgICAgICAgPHVsIFtuZ0NsYXNzXT1cIlsnbmF2YmFyLW5hdicsIGdldFdpbmRvd1dpZHRoKCkgPiAxMjAwID8gJ2Zsb2F0LWxnLXJpZ2h0JyA6ICcnXVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cInVzZXJcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS10YXJnZXQ9XCIjbmF2YmFyTWFpbk5hdlwiIFtzdHlsZS5ib3JkZXItbGVmdF09XCJnZXRXaW5kb3dXaWR0aCgpID4gMTIwMCA/ICcxcHggc29saWQgd2hpdGUnIDogJydcIiBzdHlsZT1cImhlaWdodDogMzBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIFtjbGFzcy5kaXNhYmxlZF09XCJ0b3VyU3RhcnRlZCA/IHRydWUgOiBudWxsXCIgKGNsaWNrKT1cInByaW50KClcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj48aSBzdHlsZT1cImZvbnQtc2l6ZToyMHB4OyBjb2xvcjogd2hpdGU7XCIgY2xhc3M9XCJmYSBmYS1wcmludFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgICAgICAgICAgPC9saT4gLS0+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cInVzZXIgJiYgY2xpZW50XCIgZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtdGFyZ2V0PVwiI25hdmJhck1haW5OYXZcIiBzdHlsZT1cImhlaWdodDogMzBweDtcIiB0b3VyQW5jaG9yPVwic3VwcG9ydFNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIFtjbGFzcy5kaXNhYmxlZF09XCJ0b3VyU3RhcnRlZCA/IHRydWUgOiBudWxsXCIgcm91dGVyTGluaz1cInN1cHBvcnQtdGlja2V0XCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPlN1cHBvcnQ8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiICpuZ0lmPVwidXNlciAmJiBpc0luUm9sZSgnc3VwZXItYWRtaW4nKVwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwibG9nc1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj5Mb2dzPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdJZj1cInVzZXIgJiYgaXNJblJvbGUoJ3N1cGVyLWFkbWluJylcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS10YXJnZXQ9XCIjbmF2YmFyTWFpbk5hdlwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgcm91dGVyTGluaz1cInN1cGVyLWFkbWluXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPlN1cGVyIEFkbWluPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICA8dWwgW25nQ2xhc3NdPVwiWyduYXZiYXItbmF2JywgZ2V0V2luZG93V2lkdGgoKSA+IDEyMDAgPyAnZmxvYXQtbGctcmlnaHQnIDogJyddXCIgKm5nSWY9XCIhcHVibGljUHJvZ3JhbVwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCIhdXNlclwiIGRhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNYWluTmF2XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiAoY2xpY2spPVwibG9naW4oKVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj5Mb2dpbjwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCJ1c2VyXCIgdG91ckFuY2hvcj1cInVzZXJTZXR0aW5nc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgW2NsYXNzLmRpc2FibGVkXT1cInRvdXJTdGFydGVkID8gdHJ1ZSA6IG51bGxcIiByb3V0ZXJMaW5rPVwidXNlci1zZXR0aW5nc1wiPkhlbGxvIHt7dXNlci5mdWxsbmFtZX19ITwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKm5nSWY9XCJ1c2VyXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIiAoY2xpY2spPVwibG9nb3V0KClcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS10YXJnZXQ9XCIjbmF2YmFyTWFpbk5hdlwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgW2NsYXNzLmRpc2FibGVkXT1cInRvdXJTdGFydGVkID8gdHJ1ZSA6IG51bGxcIj5Mb2dvdXQ8L2E+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uYXY+XG48L2Rpdj4iXX0=
@@ -1,104 +0,0 @@
1
- import { Component, Input, ChangeDetectorRef } from '@angular/core';
2
- import { ProviderService, BaseComponent } from '../../resolveio-class';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../resolveio-class";
5
- import * as i2 from "@angular/router";
6
- import * as i3 from "@ng-bootstrap/ng-bootstrap";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "../../pipes/filter.pipe";
9
- export class NavbarModuleComponent extends BaseComponent {
10
- constructor(_cdRef, _services) {
11
- super(_services);
12
- this._cdRef = _cdRef;
13
- this._services = _services;
14
- this.menuData = {
15
- title: '',
16
- module: null,
17
- description: null,
18
- description_name: 'Description',
19
- tabs: []
20
- };
21
- this.selectedTab = null;
22
- this.currentRoute = '';
23
- this.routerEvents$ = [];
24
- this.tourStarted = false;
25
- }
26
- ngOnInit() {
27
- this.tourStarted = this._services._app.tourStarted.getValue();
28
- this.routerEvents$.push(this._services._router.events
29
- //.filter(event => event instanceof NavigationEnd)
30
- .subscribe((event) => {
31
- if (this._services._router.url.replace(/\/[a-f0-9]{24}$/, '').replace(/\?.+$/, '') !== this.currentRoute || !this.selectedTab) {
32
- this.selectTabFromRouter();
33
- }
34
- }));
35
- this.routerEvents$.push(this._services._app.navbarModuleData.subscribe(data => {
36
- this.menuData = data;
37
- if (this._services._router.url.replace(/\/[a-f0-9]{24}$/, '').replace(/\?.+$/, '') !== this.currentRoute || !this.selectedTab) {
38
- this.selectTabFromRouter();
39
- }
40
- }));
41
- this.routerEvents$.push(this._services._app.tourStarted.subscribe(tourStarted => {
42
- this.tourStarted = tourStarted;
43
- }));
44
- }
45
- ngOnDestroy() {
46
- this.routerEvents$.forEach(sub => {
47
- sub.unsubscribe();
48
- });
49
- }
50
- selectTabFromRouter() {
51
- if (this.menuData) {
52
- if (this._services._router.url === '/') {
53
- this.selectedTab = this.menuData.tabs[0];
54
- }
55
- else {
56
- this.currentRoute = this._services._router.url.replace(/\/[a-f0-9]{24}$/, '').replace(/\?.+$/, '');
57
- this.selectedTab = null;
58
- while (!this.selectedTab && this.currentRoute.split('/').length > 2) {
59
- for (let i = 0; i < this.menuData.tabs.length; i++) {
60
- let tab = this.menuData.tabs[i];
61
- if (tab.link === this.currentRoute) {
62
- this.selectedTab = tab;
63
- break;
64
- }
65
- }
66
- this.currentRoute = this.currentRoute.replace(/(\/[^\/]+$)/, '');
67
- }
68
- if (!this.selectedTab) {
69
- this.selectedTab = this.menuData.tabs[0];
70
- }
71
- }
72
- }
73
- }
74
- tabClass(tab) {
75
- if (this.selectedTab) {
76
- if (this.selectedTab.label === tab.label) {
77
- return 'active';
78
- }
79
- }
80
- return '';
81
- }
82
- navigateTo(tab) {
83
- if (this.selectedTab !== tab) {
84
- this.selectedTab = tab;
85
- if (tab.params === null) {
86
- this._services._router.navigateByUrl(tab.link);
87
- }
88
- else {
89
- this._services._router.navigateByUrl(tab.link + '/' + tab.params);
90
- }
91
- }
92
- }
93
- }
94
- NavbarModuleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NavbarModuleComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ProviderService }], target: i0.ɵɵFactoryTarget.Component });
95
- NavbarModuleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: NavbarModuleComponent, selector: "navbar-module", inputs: { sideNavHeight: "sideNavHeight", sideNavWidth: "sideNavWidth" }, providers: [ProviderService], usesInheritance: true, ngImport: i0, template: "<style>\n .navbarModule li {\n cursor: pointer;\n }\n .navbarModule li.active {\n border-left: 3px solid #d19b3d;\n }\n .navbarModule nav {\n width: 100%;\n }\n\n @media (min-width: 1200px) {\n .navbarModule {\n height: 95vh;\n margin-left: -10px;\n }\n\n hr {\n border-top: white 1px solid;\n }\n }\n\n @media (max-width: 1200px) {\n hr {\n display: none;\n }\n\n .navbarModule a {\n font-size: 18px !important;\n }\n }\n\n \n</style> \n\n<div style=\"margin-left: -15px; margin-right: -15px;\">\n <nav class=\"navbar navbar-expand-xl navbar-dark bg-dark flex-xl-column navbarModule\" [style.height]=\"sideNavHeight ? sideNavHeight + 'px' : ''\" [style.width]=\"sideNavWidth ? sideNavWidth : ''\">\n <div href=\"#\" style=\"color: white; font-size: 16px;\">\n {{ menuData.title }}\n </div>\n <button class=\"navbar-toggler\" type=\"button\" aria-controls=\"#navbarModuleNav\" data-target=\"#navbarModuleNav\" data-toggle=\"collapse\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse collapse\" id=\"navbarModuleNav\" style=\"align-items:baseline; width: 100%; overflow-y: auto; overflow-x: hidden;\">\n <ul class=\"navbar-nav\" style=\"display: block; float: left; width: 100%;\">\n <div *ngFor=\"let tab of (menuData.tabs | filterNotEqual : 'params' : '0'); let i = index\">\n <div *ngIf=\"tab.params !== null && menuData.tabs[i - 1] && menuData.tabs[i - 1].params === null\">\n <hr>\n <div href=\"#\" style=\"color: white; font-size: 16px;\">\n Selected {{ menuData.module }}\n </div>\n <hr>\n <div style=\"color:white; margin-left: 5px; text-decoration: underline; font-size: 14px\">{{menuData.description_name}}:</div>\n <div style=\"color:white; margin-left: 8px; font-size: 12px\">{{menuData.description}}</div>\n <br />\n </div>\n <li [ngClass]=\"['nav-item', tabClass(tab)]\"data-toggle=\"collapse\" data-target=\"#navbarModuleNav\" [tourAnchor]=\"tab.tourAnchor\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" [routerLink]=\"[tab.params ? tab.link + '/' + tab.params : tab.link]\" routerLinkActive=\"active\">{{ tab.label }}</a>\n </li>\n </div>\n </ul>\n </div>\n </nav>\n</div>\n", styles: ["\n .navbarModule li {\n cursor: pointer;\n }\n .navbarModule li.active {\n border-left: 3px solid #d19b3d;\n }\n .navbarModule nav {\n width: 100%;\n }\n\n @media (min-width: 1200px) {\n .navbarModule {\n height: 95vh;\n margin-left: -10px;\n }\n\n hr {\n border-top: white 1px solid;\n }\n }\n\n @media (max-width: 1200px) {\n hr {\n display: none;\n }\n\n .navbarModule a {\n font-size: 18px !important;\n }\n }\n\n \n"], dependencies: [{ kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.NgbNavbar, selector: ".navbar" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.FilterNotEqualPipe, name: "filterNotEqual" }] });
96
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NavbarModuleComponent, decorators: [{
97
- type: Component,
98
- args: [{ providers: [ProviderService], selector: 'navbar-module', template: "<style>\n .navbarModule li {\n cursor: pointer;\n }\n .navbarModule li.active {\n border-left: 3px solid #d19b3d;\n }\n .navbarModule nav {\n width: 100%;\n }\n\n @media (min-width: 1200px) {\n .navbarModule {\n height: 95vh;\n margin-left: -10px;\n }\n\n hr {\n border-top: white 1px solid;\n }\n }\n\n @media (max-width: 1200px) {\n hr {\n display: none;\n }\n\n .navbarModule a {\n font-size: 18px !important;\n }\n }\n\n \n</style> \n\n<div style=\"margin-left: -15px; margin-right: -15px;\">\n <nav class=\"navbar navbar-expand-xl navbar-dark bg-dark flex-xl-column navbarModule\" [style.height]=\"sideNavHeight ? sideNavHeight + 'px' : ''\" [style.width]=\"sideNavWidth ? sideNavWidth : ''\">\n <div href=\"#\" style=\"color: white; font-size: 16px;\">\n {{ menuData.title }}\n </div>\n <button class=\"navbar-toggler\" type=\"button\" aria-controls=\"#navbarModuleNav\" data-target=\"#navbarModuleNav\" data-toggle=\"collapse\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse collapse\" id=\"navbarModuleNav\" style=\"align-items:baseline; width: 100%; overflow-y: auto; overflow-x: hidden;\">\n <ul class=\"navbar-nav\" style=\"display: block; float: left; width: 100%;\">\n <div *ngFor=\"let tab of (menuData.tabs | filterNotEqual : 'params' : '0'); let i = index\">\n <div *ngIf=\"tab.params !== null && menuData.tabs[i - 1] && menuData.tabs[i - 1].params === null\">\n <hr>\n <div href=\"#\" style=\"color: white; font-size: 16px;\">\n Selected {{ menuData.module }}\n </div>\n <hr>\n <div style=\"color:white; margin-left: 5px; text-decoration: underline; font-size: 14px\">{{menuData.description_name}}:</div>\n <div style=\"color:white; margin-left: 8px; font-size: 12px\">{{menuData.description}}</div>\n <br />\n </div>\n <li [ngClass]=\"['nav-item', tabClass(tab)]\"data-toggle=\"collapse\" data-target=\"#navbarModuleNav\" [tourAnchor]=\"tab.tourAnchor\">\n <a class=\"nav-link\" [class.disabled]=\"tourStarted ? true : null\" [routerLink]=\"[tab.params ? tab.link + '/' + tab.params : tab.link]\" routerLinkActive=\"active\">{{ tab.label }}</a>\n </li>\n </div>\n </ul>\n </div>\n </nav>\n</div>\n" }]
99
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ProviderService }]; }, propDecorators: { sideNavHeight: [{
100
- type: Input
101
- }], sideNavWidth: [{
102
- type: Input
103
- }] } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLW1vZHVsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvd2lkZ2V0cy9uYXZiYXItbW9kdWxlL25hdmJhci1tb2R1bGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3dpZGdldHMvbmF2YmFyLW1vZHVsZS9uYXZiYXItbW9kdWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt2RixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7O0FBUXZFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxhQUFhO0lBbUJ2RCxZQUFvQixNQUF5QixFQUFVLFNBQTBCO1FBQ2hGLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQURFLFdBQU0sR0FBTixNQUFNLENBQW1CO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFkakYsYUFBUSxHQUFnQjtZQUN2QixLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxJQUFJO1lBQ1osV0FBVyxFQUFFLElBQUk7WUFDakIsZ0JBQWdCLEVBQUUsYUFBYTtZQUMvQixJQUFJLEVBQUUsRUFBRTtTQUNSLENBQUM7UUFFRixnQkFBVyxHQUFtQixJQUFJLENBQUM7UUFDbkMsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFFMUIsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBSXBCLENBQUM7SUFFRCxRQUFRO1FBRVAsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFOUQs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dCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkNhbmNlbCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOYXZiYXJNb2RlbCwgTmF2YmFyVGFiTW9kZWwgfSBmcm9tICcuL25hdmJhci1tb2R1bGUubW9kZWwnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFByb3ZpZGVyU2VydmljZSwgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Jlc29sdmVpby1jbGFzcyc7XG5cbkBDb21wb25lbnQoe1xuXHRwcm92aWRlcnM6IFtQcm92aWRlclNlcnZpY2VdLFxuXHRzZWxlY3RvcjogJ25hdmJhci1tb2R1bGUnLFxuXHR0ZW1wbGF0ZVVybDogJy4vbmF2YmFyLW1vZHVsZS5jb21wb25lbnQuaHRtbCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBOYXZiYXJNb2R1bGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kgeyBcblxuXHRASW5wdXQoKSBzaWRlTmF2SGVpZ2h0OiBudW1iZXI7XG5cdEBJbnB1dCgpIHNpZGVOYXZXaWR0aDogbnVtYmVyO1xuXG5cdG1lbnVEYXRhOiBOYXZiYXJNb2RlbCA9IHtcblx0XHR0aXRsZTogJycsXG5cdFx0bW9kdWxlOiBudWxsLFxuXHRcdGRlc2NyaXB0aW9uOiBudWxsLFxuXHRcdGRlc2NyaXB0aW9uX25hbWU6ICdEZXNjcmlwdGlvbicsXG5cdFx0dGFiczogW11cblx0fTtcblxuXHRzZWxlY3RlZFRhYjogTmF2YmFyVGFiTW9kZWwgPSBudWxsO1xuXHRjdXJyZW50Um91dGU6IFN0cmluZyA9ICcnO1xuXG5cdHJvdXRlckV2ZW50cyQ6IFN1YnNjcmlwdGlvbltdID0gW107XG5cdHRvdXJTdGFydGVkID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIF9zZXJ2aWNlczogUHJvdmlkZXJTZXJ2aWNlKSB7XG5cdFx0c3VwZXIoX3NlcnZpY2VzKTtcblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXG5cdFx0dGhpcy50b3VyU3RhcnRlZCA9IHRoaXMuX3NlcnZpY2VzLl9hcHAudG91clN0YXJ0ZWQuZ2V0VmFsdWUoKTtcblxuXHRcdHRoaXMucm91dGVyRXZlbnRzJC5wdXNoKHRoaXMuX3NlcnZpY2VzLl9yb3V0ZXIuZXZlbnRzXG5cdFx0XHQvLy5maWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKVxuXHRcdFx0LnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuX3NlcnZpY2VzLl9yb3V0ZXIudXJsLnJlcGxhY2UoL1xcL1thLWYwLTldezI0fSQvLCAnJykucmVwbGFjZSgvXFw/LiskLywgJycpICE9PSB0aGlzLmN1cnJlbnRSb3V0ZSB8fCAhdGhpcy5zZWxlY3RlZFRhYikge1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0VGFiRnJvbVJvdXRlcigpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHR0aGlzLnJvdXRlckV2ZW50cyQucHVzaCh0aGlzLl9zZXJ2aWNlcy5fYXBwLm5hdmJhck1vZHVsZURhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xuXHRcdFx0dGhpcy5tZW51RGF0YSA9IGRhdGE7XG5cdFx0XHRpZiAodGhpcy5fc2VydmljZXMuX3JvdXRlci51cmwucmVwbGFjZSgvXFwvW2EtZjAtOV17MjR9JC8sICcnKS5yZXBsYWNlKC9cXD8uKyQvLCAnJykgIT09IHRoaXMuY3VycmVudFJvdXRlIHx8ICF0aGlzLnNlbGVjdGVkVGFiKSB7XG5cdFx0XHRcdHRoaXMuc2VsZWN0VGFiRnJvbVJvdXRlcigpO1xuXHRcdFx0fVxuXHRcdH0pKTtcblxuXHRcdHRoaXMucm91dGVyRXZlbnRzJC5wdXNoKHRoaXMuX3NlcnZpY2VzLl9hcHAudG91clN0YXJ0ZWQuc3Vic2NyaWJlKHRvdXJTdGFydGVkID0+IHtcblx0XHRcdHRoaXMudG91clN0YXJ0ZWQgPSB0b3VyU3RhcnRlZDtcblx0XHR9KSk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnJvdXRlckV2ZW50cyQuZm9yRWFjaChzdWIgPT4ge1xuXHRcdFx0c3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRzZWxlY3RUYWJGcm9tUm91dGVyKCkge1xuXHRcdGlmICh0aGlzLm1lbnVEYXRhKSB7XG5cdFx0XHRpZiAodGhpcy5fc2VydmljZXMuX3JvdXRlci51cmwgPT09ICcvJykge1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkVGFiID0gdGhpcy5tZW51RGF0YS50YWJzWzBdO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHRoaXMuY3VycmVudFJvdXRlID0gdGhpcy5fc2VydmljZXMuX3JvdXRlci51cmwucmVwbGFjZSgvXFwvW2EtZjAtOV17MjR9JC8sICcnKS5yZXBsYWNlKC9cXD8uKyQvLCAnJyk7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRUYWIgPSBudWxsO1xuXG5cdFx0XHRcdHdoaWxlICghdGhpcy5zZWxlY3RlZFRhYiAmJiB0aGlzLmN1cnJlbnRSb3V0ZS5zcGxpdCgnLycpLmxlbmd0aCA+IDIpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWVudURhdGEudGFicy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0bGV0IHRhYiA9IHRoaXMubWVudURhdGEudGFic1tpXTtcblx0XG5cdFx0XHRcdFx0XHRpZiAodGFiLmxpbmsgPT09IHRoaXMuY3VycmVudFJvdXRlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRUYWIgPSB0YWI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRoaXMuY3VycmVudFJvdXRlID0gdGhpcy5jdXJyZW50Um91dGUucmVwbGFjZSgvKFxcL1teXFwvXSskKS8sICcnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5zZWxlY3RlZFRhYikge1xuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRUYWIgPSB0aGlzLm1lbnVEYXRhLnRhYnNbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0YWJDbGFzcyh0YWI6IE5hdmJhclRhYk1vZGVsKSB7XG5cdFx0aWYgKHRoaXMuc2VsZWN0ZWRUYWIpIHtcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkVGFiLmxhYmVsID09PSB0YWIubGFiZWwpIHtcblx0XHRcdFx0cmV0dXJuICdhY3RpdmUnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAnJztcblx0fVxuXG5cdG5hdmlnYXRlVG8odGFiOiBOYXZiYXJUYWJNb2RlbCkge1xuXHRcdGlmICh0aGlzLnNlbGVjdGVkVGFiICE9PSB0YWIpIHtcblx0XHRcdHRoaXMuc2VsZWN0ZWRUYWIgPSB0YWI7XG5cblx0XHRcdGlmICh0YWIucGFyYW1zID09PSBudWxsKSB7XG5cdFx0XHRcdHRoaXMuX3NlcnZpY2VzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCh0YWIubGluayk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dGhpcy5fc2VydmljZXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRhYi5saW5rICsgJy8nICsgdGFiLnBhcmFtcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iLCI8c3R5bGU+XG4gICAgLm5hdmJhck1vZHVsZSBsaSB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLm5hdmJhck1vZHVsZSBsaS5hY3RpdmUge1xuICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICNkMTliM2Q7XG4gICAgfVxuICAgIC5uYXZiYXJNb2R1bGUgbmF2IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAgICAgICAubmF2YmFyTW9kdWxlIHtcbiAgICAgICAgICAgIGhlaWdodDogOTV2aDtcbiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMTBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGhyIHtcbiAgICAgICAgICAgIGJvcmRlci10b3A6IHdoaXRlIDFweCBzb2xpZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjAwcHgpIHtcbiAgICAgICAgaHIge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5uYXZiYXJNb2R1bGUgYSB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFxuPC9zdHlsZT4gXG5cbjxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTE1cHg7IG1hcmdpbi1yaWdodDogLTE1cHg7XCI+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLXhsIG5hdmJhci1kYXJrIGJnLWRhcmsgZmxleC14bC1jb2x1bW4gbmF2YmFyTW9kdWxlXCIgW3N0eWxlLmhlaWdodF09XCJzaWRlTmF2SGVpZ2h0ID8gc2lkZU5hdkhlaWdodCArICdweCcgOiAnJ1wiIFtzdHlsZS53aWR0aF09XCJzaWRlTmF2V2lkdGggPyBzaWRlTmF2V2lkdGggOiAnJ1wiPlxuICAgICAgICA8ZGl2IGhyZWY9XCIjXCIgc3R5bGU9XCJjb2xvcjogd2hpdGU7IGZvbnQtc2l6ZTogMTZweDtcIj5cbiAgICAgICAgICAgIHt7IG1lbnVEYXRhLnRpdGxlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1jb250cm9scz1cIiNuYXZiYXJNb2R1bGVOYXZcIiBkYXRhLXRhcmdldD1cIiNuYXZiYXJNb2R1bGVOYXZcIiBkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIlRvZ2dsZSBuYXZpZ2F0aW9uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdmJhci10b2dnbGVyLWljb25cIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2YmFyLWNvbGxhcHNlIGNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJNb2R1bGVOYXZcIiBzdHlsZT1cImFsaWduLWl0ZW1zOmJhc2VsaW5lOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3cteTogYXV0bzsgb3ZlcmZsb3cteDogaGlkZGVuO1wiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdlwiIHN0eWxlPVwiZGlzcGxheTogYmxvY2s7IGZsb2F0OiBsZWZ0OyB3aWR0aDogMTAwJTtcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0YWIgb2YgKG1lbnVEYXRhLnRhYnMgfCBmaWx0ZXJOb3RFcXVhbCA6ICdwYXJhbXMnIDogJzAnKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGFiLnBhcmFtcyAhPT0gbnVsbCAmJiBtZW51RGF0YS50YWJzW2kgLSAxXSAmJiBtZW51RGF0YS50YWJzW2kgLSAxXS5wYXJhbXMgPT09IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxocj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaHJlZj1cIiNcIiBzdHlsZT1cImNvbG9yOiB3aGl0ZTsgZm9udC1zaXplOiAxNnB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkIHt7IG1lbnVEYXRhLm1vZHVsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6d2hpdGU7IG1hcmdpbi1sZWZ0OiA1cHg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBmb250LXNpemU6IDE0cHhcIj57e21lbnVEYXRhLmRlc2NyaXB0aW9uX25hbWV9fTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjb2xvcjp3aGl0ZTsgbWFyZ2luLWxlZnQ6IDhweDsgIGZvbnQtc2l6ZTogMTJweFwiPnt7bWVudURhdGEuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bGkgW25nQ2xhc3NdPVwiWyduYXYtaXRlbScsIHRhYkNsYXNzKHRhYildXCJkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCIgZGF0YS10YXJnZXQ9XCIjbmF2YmFyTW9kdWxlTmF2XCIgW3RvdXJBbmNob3JdPVwidGFiLnRvdXJBbmNob3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiBbY2xhc3MuZGlzYWJsZWRdPVwidG91clN0YXJ0ZWQgPyB0cnVlIDogbnVsbFwiIFtyb3V0ZXJMaW5rXT1cIlt0YWIucGFyYW1zID8gdGFiLmxpbmsgKyAnLycgKyB0YWIucGFyYW1zIDogdGFiLmxpbmtdXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPnt7IHRhYi5sYWJlbCB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmF2PlxuPC9kaXY+XG4iXX0=
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLW1vZHVsZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi93aWRnZXRzL25hdmJhci1tb2R1bGUvbmF2YmFyLW1vZHVsZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBOYXZiYXJNb2RlbCB7XG5cdHRpdGxlOiBzdHJpbmc7XG5cdG1vZHVsZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbjogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbl9uYW1lOiBzdHJpbmc7XG5cdHRhYnM6IEFycmF5PE5hdmJhclRhYk1vZGVsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOYXZiYXJUYWJNb2RlbCB7XG5cdGxpbms6IHN0cmluZztcblx0cGFyYW1zOiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHRvdXJBbmNob3I/OiBzdHJpbmc7XG59XG4iXX0=