@ecodev/natural 62.1.2 → 63.0.0

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 (183) hide show
  1. package/fesm2022/ecodev-natural-vanilla.mjs +1193 -0
  2. package/fesm2022/ecodev-natural-vanilla.mjs.map +1 -0
  3. package/fesm2022/ecodev-natural.mjs +436 -425
  4. package/fesm2022/ecodev-natural.mjs.map +1 -1
  5. package/lib/classes/network-activity.service.d.ts +54 -0
  6. package/lib/classes/validators.d.ts +1 -1
  7. package/lib/modules/columns-picker/columns-picker.component.d.ts +2 -2
  8. package/lib/modules/common/services/seo.provider.d.ts +2 -2
  9. package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +1 -1
  10. package/lib/modules/file/abstract-file.d.ts +6 -3
  11. package/lib/modules/file/component/file.component.d.ts +2 -2
  12. package/lib/modules/file/file-drop.directive.d.ts +2 -3
  13. package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +2 -3
  14. package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -3
  15. package/lib/modules/icon/icon.module.d.ts +2 -2
  16. package/lib/modules/panels/panels.service.d.ts +1 -2
  17. package/lib/modules/relations/relations.component.d.ts +3 -3
  18. package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +2 -3
  19. package/lib/modules/search/group/group.component.d.ts +2 -3
  20. package/lib/modules/search/input/input.component.d.ts +5 -5
  21. package/lib/modules/search/search/search.component.d.ts +2 -2
  22. package/lib/modules/select/abstract-select.component.d.ts +3 -3
  23. package/lib/modules/select/select/select.component.d.ts +1 -1
  24. package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +1 -1
  25. package/lib/modules/table-button/table-button.component.d.ts +4 -2
  26. package/package.json +16 -14
  27. package/public-api.d.ts +1 -0
  28. package/src/lib/_natural.theme.scss +1 -2
  29. package/vanilla/index.d.ts +5 -0
  30. package/vanilla/package.json +3 -0
  31. package/vanilla/public-api.d.ts +11 -0
  32. package/vanilla/src/lib/classes/crypto.d.ts +8 -0
  33. package/vanilla/src/lib/classes/data-source.d.ts +32 -0
  34. package/vanilla/src/lib/classes/query-variable-manager-utils.d.ts +2 -0
  35. package/vanilla/src/lib/classes/query-variable-manager.d.ts +91 -0
  36. package/vanilla/src/lib/classes/signing.d.ts +7 -0
  37. package/vanilla/src/lib/classes/utility.d.ts +77 -0
  38. package/vanilla/src/lib/modules/search/classes/graphql-doctrine.types.d.ts +83 -0
  39. package/vanilla/src/lib/modules/search/classes/utils.d.ts +17 -0
  40. package/vanilla/src/lib/modules/search/types/dropdown-component.d.ts +20 -0
  41. package/vanilla/src/lib/modules/search/types/facet.d.ts +75 -0
  42. package/vanilla/src/lib/modules/search/types/values.d.ts +32 -0
  43. package/vanilla/src/lib/services/abstract-model.service.d.ts +244 -0
  44. package/vanilla/src/lib/services/debounce.service.d.ts +52 -0
  45. package/vanilla/src/lib/types/types.d.ts +100 -0
  46. package/esm2022/ecodev-natural.mjs +0 -5
  47. package/esm2022/lib/classes/abstract-detail.mjs +0 -229
  48. package/esm2022/lib/classes/abstract-editable-list.mjs +0 -99
  49. package/esm2022/lib/classes/abstract-list.mjs +0 -461
  50. package/esm2022/lib/classes/abstract-navigable-list.mjs +0 -133
  51. package/esm2022/lib/classes/apollo-utils.mjs +0 -59
  52. package/esm2022/lib/classes/crypto.mjs +0 -23
  53. package/esm2022/lib/classes/cumulative-changes.mjs +0 -50
  54. package/esm2022/lib/classes/data-source.mjs +0 -71
  55. package/esm2022/lib/classes/providers.mjs +0 -13
  56. package/esm2022/lib/classes/query-variable-manager-utils.mjs +0 -14
  57. package/esm2022/lib/classes/query-variable-manager.mjs +0 -172
  58. package/esm2022/lib/classes/rxjs.mjs +0 -54
  59. package/esm2022/lib/classes/signing.mjs +0 -38
  60. package/esm2022/lib/classes/tld.mjs +0 -1476
  61. package/esm2022/lib/classes/utility.mjs +0 -234
  62. package/esm2022/lib/classes/validators.mjs +0 -179
  63. package/esm2022/lib/directives/http-prefix.directive.mjs +0 -47
  64. package/esm2022/lib/modules/alert/alert.service.mjs +0 -53
  65. package/esm2022/lib/modules/alert/confirm.component.mjs +0 -16
  66. package/esm2022/lib/modules/alert/public-api.mjs +0 -6
  67. package/esm2022/lib/modules/avatar/component/avatar.component.mjs +0 -203
  68. package/esm2022/lib/modules/avatar/public-api.mjs +0 -6
  69. package/esm2022/lib/modules/avatar/service/avatar.service.mjs +0 -63
  70. package/esm2022/lib/modules/avatar/sources/gravatar.mjs +0 -29
  71. package/esm2022/lib/modules/avatar/sources/image.mjs +0 -13
  72. package/esm2022/lib/modules/avatar/sources/initials.mjs +0 -39
  73. package/esm2022/lib/modules/avatar/sources/source.mjs +0 -16
  74. package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +0 -145
  75. package/esm2022/lib/modules/columns-picker/public-api.mjs +0 -5
  76. package/esm2022/lib/modules/columns-picker/types.mjs +0 -2
  77. package/esm2022/lib/modules/common/directives/background-density.directive.mjs +0 -63
  78. package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +0 -93
  79. package/esm2022/lib/modules/common/directives/src-density.directive.mjs +0 -72
  80. package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +0 -24
  81. package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +0 -17
  82. package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +0 -24
  83. package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +0 -140
  84. package/esm2022/lib/modules/common/public-api.mjs +0 -14
  85. package/esm2022/lib/modules/common/services/memory-storage.mjs +0 -110
  86. package/esm2022/lib/modules/common/services/seo.provider.mjs +0 -23
  87. package/esm2022/lib/modules/common/services/seo.service.mjs +0 -235
  88. package/esm2022/lib/modules/detail-header/detail-header.component.mjs +0 -84
  89. package/esm2022/lib/modules/detail-header/public-api.mjs +0 -5
  90. package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +0 -72
  91. package/esm2022/lib/modules/dialog-trigger/public-api.mjs +0 -5
  92. package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +0 -100
  93. package/esm2022/lib/modules/dropdown-components/public-api.mjs +0 -14
  94. package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +0 -39
  95. package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +0 -173
  96. package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +0 -134
  97. package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +0 -80
  98. package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +0 -48
  99. package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +0 -110
  100. package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +0 -64
  101. package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +0 -175
  102. package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +0 -62
  103. package/esm2022/lib/modules/dropdown-components/types.mjs +0 -41
  104. package/esm2022/lib/modules/dropdown-components/utils.mjs +0 -35
  105. package/esm2022/lib/modules/file/abstract-file.mjs +0 -230
  106. package/esm2022/lib/modules/file/component/file.component.mjs +0 -172
  107. package/esm2022/lib/modules/file/file-drop.directive.mjs +0 -111
  108. package/esm2022/lib/modules/file/file-select.directive.mjs +0 -26
  109. package/esm2022/lib/modules/file/file.service.mjs +0 -43
  110. package/esm2022/lib/modules/file/public-api.mjs +0 -9
  111. package/esm2022/lib/modules/file/types.mjs +0 -2
  112. package/esm2022/lib/modules/file/utils.mjs +0 -129
  113. package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +0 -30
  114. package/esm2022/lib/modules/fixed-button/public-api.mjs +0 -5
  115. package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +0 -56
  116. package/esm2022/lib/modules/fixed-button-detail/public-api.mjs +0 -5
  117. package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +0 -18
  118. package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs +0 -2
  119. package/esm2022/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs +0 -2
  120. package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +0 -14
  121. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +0 -398
  122. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +0 -243
  123. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +0 -38
  124. package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +0 -22
  125. package/esm2022/lib/modules/hierarchic-selector/public-api.mjs +0 -10
  126. package/esm2022/lib/modules/icon/icon.directive.mjs +0 -96
  127. package/esm2022/lib/modules/icon/icon.module.mjs +0 -33
  128. package/esm2022/lib/modules/icon/public-api.mjs +0 -6
  129. package/esm2022/lib/modules/logger/error-handler.mjs +0 -87
  130. package/esm2022/lib/modules/logger/error.module.mjs +0 -22
  131. package/esm2022/lib/modules/logger/public-api.mjs +0 -6
  132. package/esm2022/lib/modules/matomo/matomo.service.mjs +0 -96
  133. package/esm2022/lib/modules/matomo/public-api.mjs +0 -5
  134. package/esm2022/lib/modules/panels/abstract-panel.mjs +0 -76
  135. package/esm2022/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs +0 -12
  136. package/esm2022/lib/modules/panels/panels.component.mjs +0 -27
  137. package/esm2022/lib/modules/panels/panels.module.mjs +0 -10
  138. package/esm2022/lib/modules/panels/panels.service.mjs +0 -329
  139. package/esm2022/lib/modules/panels/panels.urlmatcher.mjs +0 -75
  140. package/esm2022/lib/modules/panels/public-api.mjs +0 -11
  141. package/esm2022/lib/modules/panels/types.mjs +0 -3
  142. package/esm2022/lib/modules/relations/public-api.mjs +0 -5
  143. package/esm2022/lib/modules/relations/relations.component.mjs +0 -254
  144. package/esm2022/lib/modules/search/classes/graphql-doctrine.mjs +0 -111
  145. package/esm2022/lib/modules/search/classes/graphql-doctrine.types.mjs +0 -14
  146. package/esm2022/lib/modules/search/classes/transformers.mjs +0 -142
  147. package/esm2022/lib/modules/search/classes/url.mjs +0 -53
  148. package/esm2022/lib/modules/search/classes/utils.mjs +0 -25
  149. package/esm2022/lib/modules/search/dropdown-container/dropdown-container-animations.mjs +0 -44
  150. package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +0 -87
  151. package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +0 -24
  152. package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +0 -90
  153. package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +0 -45
  154. package/esm2022/lib/modules/search/group/group.component.mjs +0 -53
  155. package/esm2022/lib/modules/search/input/input.component.mjs +0 -365
  156. package/esm2022/lib/modules/search/public-api.mjs +0 -7
  157. package/esm2022/lib/modules/search/search/search.component.mjs +0 -102
  158. package/esm2022/lib/modules/search/types/dropdown-component.mjs +0 -2
  159. package/esm2022/lib/modules/search/types/facet.mjs +0 -2
  160. package/esm2022/lib/modules/search/types/values.mjs +0 -2
  161. package/esm2022/lib/modules/select/abstract-select.component.mjs +0 -232
  162. package/esm2022/lib/modules/select/public-api.mjs +0 -7
  163. package/esm2022/lib/modules/select/select/select.component.mjs +0 -310
  164. package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +0 -57
  165. package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +0 -155
  166. package/esm2022/lib/modules/sidenav/public-api.mjs +0 -9
  167. package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +0 -15
  168. package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +0 -90
  169. package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +0 -11
  170. package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +0 -50
  171. package/esm2022/lib/modules/sidenav/sidenav.service.mjs +0 -196
  172. package/esm2022/lib/modules/stamp/public-api.mjs +0 -5
  173. package/esm2022/lib/modules/stamp/stamp.component.mjs +0 -23
  174. package/esm2022/lib/modules/table-button/public-api.mjs +0 -5
  175. package/esm2022/lib/modules/table-button/table-button.component.mjs +0 -78
  176. package/esm2022/lib/services/abstract-model.service.mjs +0 -526
  177. package/esm2022/lib/services/debounce.service.mjs +0 -149
  178. package/esm2022/lib/services/enum.service.mjs +0 -64
  179. package/esm2022/lib/services/link-mutation.service.mjs +0 -154
  180. package/esm2022/lib/services/persistence.service.mjs +0 -115
  181. package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +0 -63
  182. package/esm2022/lib/types/types.mjs +0 -2
  183. package/esm2022/public-api.mjs +0 -46
@@ -1,329 +0,0 @@
1
- import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
2
- import { inject, Injectable, Injector, runInInjectionContext } from '@angular/core';
3
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
- import { MatDialog } from '@angular/material/dialog';
5
- import { DefaultUrlSerializer, NavigationError, Router } from '@angular/router';
6
- import { differenceWith, flatten, isEqual } from 'lodash-es';
7
- import { forkJoin, of, Subject } from 'rxjs';
8
- import { getStackConfig } from './panels.urlmatcher';
9
- import { PanelsHooksConfig, } from './types';
10
- import * as i0 from "@angular/core";
11
- function segmentsToString(segments) {
12
- return segments.map(s => s.toString()).join('/');
13
- }
14
- function compareConfigs(a, b) {
15
- return a.route.path === b.route.path && a.rule === b.rule && isEqual(a.params, b.params);
16
- }
17
- /**
18
- * TODO: implement route update when closing dialog with escape
19
- * @dynamic
20
- */
21
- export class NaturalPanelsService {
22
- router = inject(Router);
23
- dialog = inject(MatDialog);
24
- injector = inject(Injector);
25
- hooksConfig = inject(PanelsHooksConfig);
26
- panelWidth = '960px';
27
- /**
28
- * Because of this static property Panels are **not** compatible with SSR.
29
- * And we cannot make it non-static, because `UrlMatcher` cannot be injected.
30
- */
31
- static _opened = false;
32
- static get opened() {
33
- return this._opened;
34
- }
35
- /**
36
- * Stream that emits when all open dialog have finished closing
37
- */
38
- afterAllClosed = new Subject();
39
- /**
40
- * Cache for panels counter. Works more like an ID.
41
- * Is used to give an unique identifier to multiple similar panels configurations
42
- */
43
- counter = 1;
44
- /**
45
- * Class applied to dialog overlay related with panels
46
- * If change, change CSS too
47
- */
48
- panelClass = 'panel';
49
- /**
50
- * Cache for panels setup before navigation change.
51
- * Used to detect panels openings/closings and adapt for new configuration
52
- */
53
- oldFullConfig = [];
54
- /**
55
- * Cache for subscription stop
56
- */
57
- routeSub;
58
- /**
59
- * Cache for subscription stop
60
- */
61
- navSub;
62
- /**
63
- * Horizontal gaps between panels
64
- */
65
- panelsOffsetH = 35;
66
- /**
67
- * Vertical gaps between panels
68
- */
69
- panelsOffsetV = 40;
70
- /**
71
- * Cache of previous screen size
72
- * Used to change panels stack orientation on small screens
73
- */
74
- isVertical = false;
75
- constructor() {
76
- const breakpointObserver = inject(BreakpointObserver);
77
- // Watch media to know if display panels horizontally or vertically
78
- breakpointObserver
79
- .observe(Breakpoints.XSmall)
80
- .pipe(takeUntilDestroyed())
81
- .subscribe(result => {
82
- this.isVertical = result.matches;
83
- this.updateComponentsPosition();
84
- });
85
- }
86
- start(route) {
87
- NaturalPanelsService._opened = true;
88
- this.routeSub = route.url.subscribe(segments => {
89
- this.updatePanels(segments, route.snapshot.data.panelsRoutes);
90
- });
91
- this.navSub = this.router.events.subscribe(ev => {
92
- if (!(ev instanceof NavigationError)) {
93
- return;
94
- }
95
- // Abort and propagate navigation error
96
- if (ev.url.endsWith('/')) {
97
- this.stop();
98
- // This is a bit hackish: we hardcode an impossible url to trigger normal navigation error mechanism
99
- this.router.navigateByUrl('panels-reached-invalid-url');
100
- return;
101
- }
102
- this.counter++;
103
- // pc stands for "panel counter", required to give an identification to panels with exact same config
104
- // E.g /new
105
- const wantedUrl = ev.url + ';pc=' + this.counter;
106
- // Segments matching from wanted url. E.g ~ ['new']
107
- const wantedUrSegments = new DefaultUrlSerializer().parse(wantedUrl).root.children.primary.segments;
108
- // Don't match any config
109
- const wantedConfig = getStackConfig(wantedUrSegments, route.snapshot.data.panelsRoutes, this.injector);
110
- if (wantedConfig.length) {
111
- return this.appendConfigToCurrentUrl(wantedConfig);
112
- }
113
- // Currently activated routes. E.g ['objective', 'objective', 123, 'risk']
114
- const currentSegments = flatten(this.dialog.openDialogs.map(d => d.componentInstance.panelData.config.route.segments));
115
- // Last segment. E.g ['risk']
116
- const lastOfCurrentSegments = currentSegments.slice(-1);
117
- // Config for ['risk', 'new']
118
- const currentAndWantedConfig = getStackConfig(lastOfCurrentSegments.concat(wantedUrSegments), route.snapshot.data.panelsRoutes, this.injector);
119
- return this.appendConfigToCurrentUrl(currentAndWantedConfig);
120
- });
121
- }
122
- /**
123
- * Uses given configuration to add in the end of current url
124
- * Neutralizes router error handling
125
- */
126
- appendConfigToCurrentUrl(config) {
127
- const originalErrorHandler = this.router.errorHandler;
128
- // Nullify error handler (will be de-neutralized after route redirection)
129
- if (config) {
130
- this.router.errorHandler = () => undefined;
131
- }
132
- // Navigate to same url + /risk/new Result : /risk/risk/new
133
- const newUrl = config.map(conf => segmentsToString(conf.route.segments)).join('/');
134
- this.router.navigateByUrl(this.router.url + '/' + newUrl).then(() => {
135
- // After navigation has ended, restore original error handler because he's not a bad guy
136
- this.router.errorHandler = originalErrorHandler;
137
- });
138
- }
139
- stop() {
140
- NaturalPanelsService._opened = false;
141
- this.routeSub?.unsubscribe();
142
- this.navSub?.unsubscribe();
143
- this.dialog.closeAll();
144
- this.oldFullConfig = [];
145
- this.afterAllClosed.next();
146
- }
147
- /**
148
- * Go to panel matching given component. Causes an url change.
149
- */
150
- goToPanelByComponent(component) {
151
- this.goToPanelByIndex(this.getPanelIndex(component));
152
- }
153
- /**
154
- * Go to panel matching given component. Causes an url change.
155
- */
156
- goToPenultimatePanel() {
157
- this.goToPanelByIndex(this.dialog.openDialogs.length - 2);
158
- }
159
- /**
160
- * Calls the new url that only includes the segments from the panels we want to stay open
161
- */
162
- goToPanelByIndex(index) {
163
- // Extracts url segments from next panel until last one
164
- const url = this.dialog.openDialogs
165
- .slice(index + 1)
166
- .map(dialog => {
167
- return segmentsToString(dialog.componentInstance.panelData.config.route.segments);
168
- })
169
- .join('/');
170
- // Remove extra segments and redirects to root
171
- this.router.navigateByUrl(this.router.url.replace('/' + url, ''));
172
- }
173
- /**
174
- * Selecting a panel is equivalent to close all those that are in front of him
175
- * @param index of panel in stack. The most behind (the first one) is 0.
176
- */
177
- selectPanelByIndex(index) {
178
- const lastDialog = this.dialog.openDialogs[this.dialog.openDialogs.length - 1];
179
- // Update new panels set positions
180
- this.updateComponentsPosition();
181
- for (let i = this.dialog.openDialogs.length - 1; i >= index + 1; i--) {
182
- this.dialog.openDialogs[i].close();
183
- }
184
- return lastDialog.afterClosed();
185
- }
186
- /**
187
- * Open new panels if url has changed with new segments
188
- */
189
- updatePanels(segments, routes) {
190
- // Transform url segments into a config with component name and ID if provided in next segment
191
- // Returns an array of configs, each config represents the content relative to a panel
192
- const newFullConfig = getStackConfig(segments, routes, this.injector);
193
- const configsToRemove = differenceWith(this.oldFullConfig, newFullConfig, compareConfigs);
194
- const configsToAdd = differenceWith(newFullConfig, this.oldFullConfig, compareConfigs);
195
- const indexOfNextPanel = this.oldFullConfig.length - configsToRemove.length - 1;
196
- if (configsToRemove.length && configsToAdd.length) {
197
- // Add and remove panels
198
- this.selectPanelByIndex(indexOfNextPanel).subscribe(() => {
199
- this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());
200
- });
201
- }
202
- else if (configsToRemove.length && !configsToAdd.length) {
203
- // only remove panels
204
- this.selectPanelByIndex(indexOfNextPanel).subscribe(() => this.updateComponentsPosition());
205
- }
206
- else if (!configsToRemove.length && configsToAdd.length) {
207
- // only add panels
208
- this.openPanels(configsToAdd, newFullConfig).subscribe(() => this.updateComponentsPosition());
209
- }
210
- this.oldFullConfig = newFullConfig;
211
- }
212
- /**
213
- * Resolve all services, then open panels
214
- */
215
- openPanels(newItemsConfig, fullConfig) {
216
- const subject = new Subject();
217
- // Resolve everything before opening a single panel
218
- const resolves = newItemsConfig.map(conf => this.getResolvedData(conf));
219
- // ForkJoin emits when all promises are executed;
220
- forkJoin(resolves).subscribe(resolvedResult => {
221
- // For each new config entry, open a new panel
222
- for (let i = 0; i < newItemsConfig.length; i++) {
223
- const config = newItemsConfig[i];
224
- let itemData = {
225
- // Config of actual panel route
226
- config: config,
227
- // Data resolved by service
228
- // Use in component by calling this.panelData.data.xyz
229
- data: resolvedResult[i],
230
- linkableObjects: [],
231
- };
232
- if (this.hooksConfig?.beforeOpenPanel) {
233
- const event = {
234
- itemData: itemData,
235
- panelConfig: config,
236
- resolvedResult: resolvedResult,
237
- fullPanelsConfig: fullConfig,
238
- };
239
- itemData = this.hooksConfig.beforeOpenPanel(this.injector, event);
240
- }
241
- this.openPanel(config.component, itemData);
242
- }
243
- this.dialog.openDialogs[this.dialog.openDialogs.length - 1].afterOpened().subscribe(() => {
244
- subject.next(null);
245
- });
246
- });
247
- return subject;
248
- }
249
- getResolvedData(config) {
250
- if (!config.resolve || (config.resolve && Object.keys(config.resolve).length === 0)) {
251
- return of({});
252
- }
253
- const resolveKeys = Object.keys(config.resolve);
254
- const resolvedData = {};
255
- const injector = config.injector;
256
- if (injector) {
257
- resolveKeys.forEach(key => {
258
- resolvedData[key] = runInInjectionContext(injector, () => config.resolve[key](config));
259
- });
260
- }
261
- return forkJoin(resolvedData);
262
- }
263
- openPanel(componentOrTemplateRef, data) {
264
- const conf = {
265
- panelClass: this.panelClass,
266
- closeOnNavigation: false,
267
- hasBackdrop: this.dialog.openDialogs.length === 0,
268
- height: '100%',
269
- width: this.panelWidth,
270
- position: {
271
- top: '0',
272
- right: '0',
273
- },
274
- };
275
- const dialogRef = this.dialog.open(componentOrTemplateRef, conf);
276
- // Panelisable interface attributes/functions
277
- dialogRef.componentInstance.initPanel(data);
278
- dialogRef.beforeClosed().subscribe(() => {
279
- const index = this.getPanelIndex(dialogRef.componentInstance);
280
- this.goToPanelByIndex(index - 1);
281
- });
282
- }
283
- /**
284
- * Return panel position (index) by searching matching component
285
- */
286
- getPanelIndex(component) {
287
- if (!component) {
288
- return -1;
289
- }
290
- return this.dialog.openDialogs.findIndex(dialog => dialog.componentInstance === component);
291
- }
292
- /**
293
- * Repositions panels from start until given index
294
- */
295
- updateComponentsPosition() {
296
- if (!this.dialog.openDialogs.length) {
297
- return;
298
- }
299
- // Select the panels that are still opened, ignore the others because they'll be closed
300
- const affectedElements = this.dialog.openDialogs;
301
- for (let i = 0; i < affectedElements.length; i++) {
302
- const dialog = affectedElements[i];
303
- // Set all panels as "hidden" except last one. IsFrontPanel attribute causes a CSS that hides body via hostbinding
304
- dialog.componentInstance.isFrontPanel = i === affectedElements.length - 1;
305
- dialog.componentInstance.panelService = this;
306
- // Assign offset
307
- const deep = affectedElements.length - 1 - i;
308
- let position = { right: deep * this.panelsOffsetH + 'px' };
309
- if (this.isVertical && affectedElements.length > 1) {
310
- const top = i * this.panelsOffsetV + 'px';
311
- position = { top: top, right: '0px' };
312
- dialog.updateSize(this.panelWidth, `calc(100% - ${top})`); // call before updatePosition
313
- }
314
- else {
315
- dialog.updateSize(this.panelWidth, `100%`);
316
- }
317
- dialog.updatePosition(position);
318
- }
319
- }
320
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPanelsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
321
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPanelsService, providedIn: 'root' });
322
- }
323
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalPanelsService, decorators: [{
324
- type: Injectable,
325
- args: [{
326
- providedIn: 'root',
327
- }]
328
- }], ctorParameters: () => [] });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBFLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBaUIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBYSxNQUFNLGlCQUFpQixDQUFDO0FBQzFHLE9BQU8sRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQUMsUUFBUSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFFckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFLSCxpQkFBaUIsR0FDcEIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLFNBQVMsZ0JBQWdCLENBQUMsUUFBc0I7SUFDNUMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxDQUFxQixFQUFFLENBQXFCO0lBQ2hFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBRUQ7OztHQUdHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQUNaLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLFdBQVcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUUvQixVQUFVLEdBQUcsT0FBTyxDQUFDO0lBRXRDOzs7T0FHRztJQUNLLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLE1BQU0sS0FBSyxNQUFNO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDYSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNyRDs7O09BR0c7SUFDSyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCOzs7T0FHRztJQUNLLFVBQVUsR0FBRyxPQUFPLENBQUM7SUFFN0I7OztPQUdHO0lBQ0ssYUFBYSxHQUF5QixFQUFFLENBQUM7SUFFakQ7O09BRUc7SUFDSyxRQUFRLENBQWdCO0lBRWhDOztPQUVHO0lBQ0ssTUFBTSxDQUFnQjtJQUU5Qjs7T0FFRztJQUNLLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFFM0I7O09BRUc7SUFDSyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBRTNCOzs7T0FHRztJQUNLLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7UUFDSSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXRELG9FQUFvRTtRQUNwRSxrQkFBa0I7YUFDYixPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQzthQUMzQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2pDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFxQjtRQUM5QixvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsT0FBTztZQUNYLENBQUM7WUFFRCx1Q0FBdUM7WUFDdkMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBRVosb0dBQW9HO2dCQUNwRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUV4RCxPQUFPO1lBQ1gsQ0FBQztZQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUVmLHFHQUFxRztZQUNyRyxXQUFXO1lBQ1gsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUVqRCxtREFBbUQ7WUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLG9CQUFvQixFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUVwRyx5QkFBeUI7WUFDekIsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdkcsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCwwRUFBMEU7WUFDMUUsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQ3hGLENBQUM7WUFFRiw2QkFBNkI7WUFDN0IsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEQsNkJBQTZCO1lBQzdCLE1BQU0sc0JBQXNCLEdBQUcsY0FBYyxDQUN6QyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFDOUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUNoQyxJQUFJLENBQUMsUUFBUSxDQUNoQixDQUFDO1lBRUYsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNqRSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7SUFDSyx3QkFBd0IsQ0FBQyxNQUE0QjtRQUN6RCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRXRELHlFQUF5RTtRQUN6RSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQy9DLENBQUM7UUFFRCwyREFBMkQ7UUFDM0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDaEUsd0ZBQXdGO1lBQ3hGLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLG9CQUFvQixDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLElBQUk7UUFDUCxvQkFBb0IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CLENBQUMsU0FBK0I7UUFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0I7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxLQUFhO1FBQ2xDLHVEQUF1RDtRQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7YUFDOUIsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7YUFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWYsOENBQThDO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGtCQUFrQixDQUFDLEtBQWE7UUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRS9FLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVoQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLFFBQXNCLEVBQUUsTUFBaUM7UUFDMUUsOEZBQThGO1FBQzlGLHNGQUFzRjtRQUN0RixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEUsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV2RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWhGLElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEQsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQzthQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxrQkFBa0I7WUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVUsQ0FDZCxjQUFvQyxFQUNwQyxVQUFnQztRQUVoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUV0RCxtREFBbUQ7UUFDbkQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV4RSxpREFBaUQ7UUFDakQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMxQyw4Q0FBOEM7WUFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLFFBQVEsR0FBcUI7b0JBQzdCLCtCQUErQjtvQkFDL0IsTUFBTSxFQUFFLE1BQU07b0JBRWQsMkJBQTJCO29CQUMzQixzREFBc0Q7b0JBQ3RELElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUN2QixlQUFlLEVBQUUsRUFBRTtpQkFDdEIsQ0FBQztnQkFFRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sS0FBSyxHQUFpQzt3QkFDeEMsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixjQUFjLEVBQUUsY0FBYzt3QkFDOUIsZ0JBQWdCLEVBQUUsVUFBVTtxQkFDL0IsQ0FBQztvQkFFRixRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEUsQ0FBQztnQkFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNyRixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQTBCO1FBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQXdDLEVBQUUsQ0FBQztRQUM3RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBRWpDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMzRixDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU8sU0FBUyxDQUFDLHNCQUEyRCxFQUFFLElBQXNCO1FBQ2pHLE1BQU0sSUFBSSxHQUFvQjtZQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDakQsTUFBTSxFQUFFLE1BQU07WUFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdEIsUUFBUSxFQUFFO2dCQUNOLEdBQUcsRUFBRSxHQUFHO2dCQUNSLEtBQUssRUFBRSxHQUFHO2FBQ2I7U0FDSixDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQXVCLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZGLDZDQUE2QztRQUM3QyxTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNLLGFBQWEsQ0FBQyxTQUErQjtRQUNqRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsT0FBTztRQUNYLENBQUM7UUFFRCx1RkFBdUY7UUFDdkYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDL0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkMsa0hBQWtIO1lBQ2xILE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDMUUsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFFN0MsZ0JBQWdCO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTdDLElBQUksUUFBUSxHQUFRLEVBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksRUFBQyxDQUFDO1lBQzlELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDMUMsUUFBUSxHQUFHLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7WUFDNUYsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQzt1R0FuWFEsb0JBQW9COzJHQUFwQixvQkFBb0IsY0FGakIsTUFBTTs7MkZBRVQsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50c30gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBydW5JbkluamVjdGlvbkNvbnRleHR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7TWF0RGlhbG9nLCBNYXREaWFsb2dDb25maWd9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBEZWZhdWx0VXJsU2VyaWFsaXplciwgTmF2aWdhdGlvbkVycm9yLCBSb3V0ZXIsIFVybFNlZ21lbnR9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge2RpZmZlcmVuY2VXaXRoLCBmbGF0dGVuLCBpc0VxdWFsfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdFBhbmVsfSBmcm9tICcuL2Fic3RyYWN0LXBhbmVsJztcbmltcG9ydCB7Z2V0U3RhY2tDb25maWd9IGZyb20gJy4vcGFuZWxzLnVybG1hdGNoZXInO1xuaW1wb3J0IHtcbiAgICBOYXR1cmFsUGFuZWxDb25maWcsXG4gICAgTmF0dXJhbFBhbmVsRGF0YSxcbiAgICBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsLFxuICAgIE5hdHVyYWxQYW5lbHNSb3V0ZXJSdWxlLFxuICAgIFBhbmVsc0hvb2tzQ29uZmlnLFxufSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gc2VnbWVudHNUb1N0cmluZyhzZWdtZW50czogVXJsU2VnbWVudFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2VnbWVudHMubWFwKHMgPT4gcy50b1N0cmluZygpKS5qb2luKCcvJyk7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVDb25maWdzKGE6IE5hdHVyYWxQYW5lbENvbmZpZywgYjogTmF0dXJhbFBhbmVsQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGEucm91dGUucGF0aCA9PT0gYi5yb3V0ZS5wYXRoICYmIGEucnVsZSA9PT0gYi5ydWxlICYmIGlzRXF1YWwoYS5wYXJhbXMsIGIucGFyYW1zKTtcbn1cblxuLyoqXG4gKiBUT0RPOiBpbXBsZW1lbnQgcm91dGUgdXBkYXRlIHdoZW4gY2xvc2luZyBkaWFsb2cgd2l0aCBlc2NhcGVcbiAqIEBkeW5hbWljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxQYW5lbHNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSBob29rc0NvbmZpZyA9IGluamVjdChQYW5lbHNIb29rc0NvbmZpZyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhbmVsV2lkdGggPSAnOTYwcHgnO1xuXG4gICAgLyoqXG4gICAgICogQmVjYXVzZSBvZiB0aGlzIHN0YXRpYyBwcm9wZXJ0eSBQYW5lbHMgYXJlICoqbm90KiogY29tcGF0aWJsZSB3aXRoIFNTUi5cbiAgICAgKiBBbmQgd2UgY2Fubm90IG1ha2UgaXQgbm9uLXN0YXRpYywgYmVjYXVzZSBgVXJsTWF0Y2hlcmAgY2Fubm90IGJlIGluamVjdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIF9vcGVuZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgc3RhdGljIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFmdGVyQWxsQ2xvc2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgcGFuZWxzIGNvdW50ZXIuIFdvcmtzIG1vcmUgbGlrZSBhbiBJRC5cbiAgICAgKiBJcyB1c2VkIHRvIGdpdmUgYW4gdW5pcXVlIGlkZW50aWZpZXIgdG8gbXVsdGlwbGUgc2ltaWxhciBwYW5lbHMgY29uZmlndXJhdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICAgIC8qKlxuICAgICAqIENsYXNzIGFwcGxpZWQgdG8gZGlhbG9nIG92ZXJsYXkgcmVsYXRlZCB3aXRoIHBhbmVsc1xuICAgICAqIElmIGNoYW5nZSwgY2hhbmdlIENTUyB0b29cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsQ2xhc3MgPSAncGFuZWwnO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHBhbmVscyBzZXR1cCBiZWZvcmUgbmF2aWdhdGlvbiBjaGFuZ2UuXG4gICAgICogVXNlZCB0byBkZXRlY3QgcGFuZWxzIG9wZW5pbmdzL2Nsb3NpbmdzIGFuZCBhZGFwdCBmb3IgbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIG9sZEZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3Igc3Vic2NyaXB0aW9uIHN0b3BcbiAgICAgKi9cbiAgICBwcml2YXRlIHJvdXRlU3ViPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHN1YnNjcmlwdGlvbiBzdG9wXG4gICAgICovXG4gICAgcHJpdmF0ZSBuYXZTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBIb3Jpem9udGFsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldEggPSAzNTtcblxuICAgIC8qKlxuICAgICAqIFZlcnRpY2FsIGdhcHMgYmV0d2VlbiBwYW5lbHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhbmVsc09mZnNldFYgPSA0MDtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIG9mIHByZXZpb3VzIHNjcmVlbiBzaXplXG4gICAgICogVXNlZCB0byBjaGFuZ2UgcGFuZWxzIHN0YWNrIG9yaWVudGF0aW9uIG9uIHNtYWxsIHNjcmVlbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmVydGljYWwgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3QgYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG5cbiAgICAgICAgLy8gIFdhdGNoIG1lZGlhIHRvIGtub3cgaWYgZGlzcGxheSBwYW5lbHMgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHlcbiAgICAgICAgYnJlYWtwb2ludE9ic2VydmVyXG4gICAgICAgICAgICAub2JzZXJ2ZShCcmVha3BvaW50cy5YU21hbGwpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmVydGljYWwgPSByZXN1bHQubWF0Y2hlcztcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3V0ZVN1YiA9IHJvdXRlLnVybC5zdWJzY3JpYmUoc2VnbWVudHMgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQYW5lbHMoc2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5uYXZTdWIgPSB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ID0+IHtcbiAgICAgICAgICAgIGlmICghKGV2IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWJvcnQgYW5kIHByb3BhZ2F0ZSBuYXZpZ2F0aW9uIGVycm9yXG4gICAgICAgICAgICBpZiAoZXYudXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBiaXQgaGFja2lzaDogd2UgaGFyZGNvZGUgYW4gaW1wb3NzaWJsZSB1cmwgdG8gdHJpZ2dlciBub3JtYWwgbmF2aWdhdGlvbiBlcnJvciBtZWNoYW5pc21cbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCdwYW5lbHMtcmVhY2hlZC1pbnZhbGlkLXVybCcpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvdW50ZXIrKztcblxuICAgICAgICAgICAgLy8gcGMgc3RhbmRzIGZvciBcInBhbmVsIGNvdW50ZXJcIiwgcmVxdWlyZWQgdG8gZ2l2ZSBhbiBpZGVudGlmaWNhdGlvbiB0byBwYW5lbHMgd2l0aCBleGFjdCBzYW1lIGNvbmZpZ1xuICAgICAgICAgICAgLy8gRS5nIC9uZXdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZFVybCA9IGV2LnVybCArICc7cGM9JyArIHRoaXMuY291bnRlcjtcblxuICAgICAgICAgICAgLy8gU2VnbWVudHMgbWF0Y2hpbmcgZnJvbSB3YW50ZWQgdXJsLiBFLmcgfiBbJ25ldyddXG4gICAgICAgICAgICBjb25zdCB3YW50ZWRVclNlZ21lbnRzID0gbmV3IERlZmF1bHRVcmxTZXJpYWxpemVyKCkucGFyc2Uod2FudGVkVXJsKS5yb290LmNoaWxkcmVuLnByaW1hcnkuc2VnbWVudHM7XG5cbiAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIGFueSBjb25maWdcbiAgICAgICAgICAgIGNvbnN0IHdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHdhbnRlZFVyU2VnbWVudHMsIHJvdXRlLnNuYXBzaG90LmRhdGEucGFuZWxzUm91dGVzLCB0aGlzLmluamVjdG9yKTtcblxuICAgICAgICAgICAgaWYgKHdhbnRlZENvbmZpZy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlbmRDb25maWdUb0N1cnJlbnRVcmwod2FudGVkQ29uZmlnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3VycmVudGx5IGFjdGl2YXRlZCByb3V0ZXMuIEUuZyBbJ29iamVjdGl2ZScsICdvYmplY3RpdmUnLCAxMjMsICdyaXNrJ11cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWdtZW50cyA9IGZsYXR0ZW4oXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubWFwKGQgPT4gZC5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIExhc3Qgc2VnbWVudC4gRS5nIFsncmlzayddXG4gICAgICAgICAgICBjb25zdCBsYXN0T2ZDdXJyZW50U2VnbWVudHMgPSBjdXJyZW50U2VnbWVudHMuc2xpY2UoLTEpO1xuXG4gICAgICAgICAgICAvLyBDb25maWcgZm9yIFsncmlzaycsICduZXcnXVxuICAgICAgICAgICAgY29uc3QgY3VycmVudEFuZFdhbnRlZENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKFxuICAgICAgICAgICAgICAgIGxhc3RPZkN1cnJlbnRTZWdtZW50cy5jb25jYXQod2FudGVkVXJTZWdtZW50cyksXG4gICAgICAgICAgICAgICAgcm91dGUuc25hcHNob3QuZGF0YS5wYW5lbHNSb3V0ZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGVuZENvbmZpZ1RvQ3VycmVudFVybChjdXJyZW50QW5kV2FudGVkQ29uZmlnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXNlcyBnaXZlbiBjb25maWd1cmF0aW9uIHRvIGFkZCBpbiB0aGUgZW5kIG9mIGN1cnJlbnQgdXJsXG4gICAgICogTmV1dHJhbGl6ZXMgcm91dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBlbmRDb25maWdUb0N1cnJlbnRVcmwoY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVycm9ySGFuZGxlciA9IHRoaXMucm91dGVyLmVycm9ySGFuZGxlcjtcblxuICAgICAgICAvLyBOdWxsaWZ5IGVycm9yIGhhbmRsZXIgKHdpbGwgYmUgZGUtbmV1dHJhbGl6ZWQgYWZ0ZXIgcm91dGUgcmVkaXJlY3Rpb24pXG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmVycm9ySGFuZGxlciA9ICgpID0+IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5hdmlnYXRlIHRvIHNhbWUgdXJsICsgL3Jpc2svbmV3IFJlc3VsdCA6IC9yaXNrL3Jpc2svbmV3XG4gICAgICAgIGNvbnN0IG5ld1VybCA9IGNvbmZpZy5tYXAoY29uZiA9PiBzZWdtZW50c1RvU3RyaW5nKGNvbmYucm91dGUuc2VnbWVudHMpKS5qb2luKCcvJyk7XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwgKyAnLycgKyBuZXdVcmwpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgLy8gQWZ0ZXIgbmF2aWdhdGlvbiBoYXMgZW5kZWQsIHJlc3RvcmUgb3JpZ2luYWwgZXJyb3IgaGFuZGxlciBiZWNhdXNlIGhlJ3Mgbm90IGEgYmFkIGd1eVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIuZXJyb3JIYW5kbGVyID0gb3JpZ2luYWxFcnJvckhhbmRsZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wKCk6IHZvaWQge1xuICAgICAgICBOYXR1cmFsUGFuZWxzU2VydmljZS5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm91dGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubmF2U3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlckFsbENsb3NlZC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR28gdG8gcGFuZWwgbWF0Y2hpbmcgZ2l2ZW4gY29tcG9uZW50LiBDYXVzZXMgYW4gdXJsIGNoYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ29Ub1BhbmVsQnlDb21wb25lbnQoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgodGhpcy5nZXRQYW5lbEluZGV4KGNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdvIHRvIHBhbmVsIG1hdGNoaW5nIGdpdmVuIGNvbXBvbmVudC4gQ2F1c2VzIGFuIHVybCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHVibGljIGdvVG9QZW51bHRpbWF0ZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdvVG9QYW5lbEJ5SW5kZXgodGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgdGhlIG5ldyB1cmwgdGhhdCBvbmx5IGluY2x1ZGVzIHRoZSBzZWdtZW50cyBmcm9tIHRoZSBwYW5lbHMgd2Ugd2FudCB0byBzdGF5IG9wZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdvVG9QYW5lbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBFeHRyYWN0cyB1cmwgc2VnbWVudHMgZnJvbSBuZXh0IHBhbmVsIHVudGlsIGxhc3Qgb25lXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzXG4gICAgICAgICAgICAuc2xpY2UoaW5kZXggKyAxKVxuICAgICAgICAgICAgLm1hcChkaWFsb2cgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50c1RvU3RyaW5nKGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5wYW5lbERhdGEuY29uZmlnLnJvdXRlLnNlZ21lbnRzKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBleHRyYSBzZWdtZW50cyBhbmQgcmVkaXJlY3RzIHRvIHJvb3RcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJvdXRlci51cmwucmVwbGFjZSgnLycgKyB1cmwsICcnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0aW5nIGEgcGFuZWwgaXMgZXF1aXZhbGVudCB0byBjbG9zZSBhbGwgdGhvc2UgdGhhdCBhcmUgaW4gZnJvbnQgb2YgaGltXG4gICAgICogQHBhcmFtIGluZGV4IG9mIHBhbmVsIGluIHN0YWNrLiBUaGUgbW9zdCBiZWhpbmQgKHRoZSBmaXJzdCBvbmUpIGlzIDAuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RQYW5lbEJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBjb25zdCBsYXN0RGlhbG9nID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMV07XG5cbiAgICAgICAgLy8gVXBkYXRlIG5ldyBwYW5lbHMgc2V0IHBvc2l0aW9uc1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGggLSAxOyBpID49IGluZGV4ICsgMTsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuRGlhbG9nc1tpXS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxhc3REaWFsb2cuYWZ0ZXJDbG9zZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIG5ldyBwYW5lbHMgaWYgdXJsIGhhcyBjaGFuZ2VkIHdpdGggbmV3IHNlZ21lbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVQYW5lbHMoc2VnbWVudHM6IFVybFNlZ21lbnRbXSwgcm91dGVzOiBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFRyYW5zZm9ybSB1cmwgc2VnbWVudHMgaW50byBhIGNvbmZpZyB3aXRoIGNvbXBvbmVudCBuYW1lIGFuZCBJRCBpZiBwcm92aWRlZCBpbiBuZXh0IHNlZ21lbnRcbiAgICAgICAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBjb25maWdzLCBlYWNoIGNvbmZpZyByZXByZXNlbnRzIHRoZSBjb250ZW50IHJlbGF0aXZlIHRvIGEgcGFuZWxcbiAgICAgICAgY29uc3QgbmV3RnVsbENvbmZpZyA9IGdldFN0YWNrQ29uZmlnKHNlZ21lbnRzLCByb3V0ZXMsIHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICBjb25zdCBjb25maWdzVG9SZW1vdmUgPSBkaWZmZXJlbmNlV2l0aCh0aGlzLm9sZEZ1bGxDb25maWcsIG5ld0Z1bGxDb25maWcsIGNvbXBhcmVDb25maWdzKTtcbiAgICAgICAgY29uc3QgY29uZmlnc1RvQWRkID0gZGlmZmVyZW5jZVdpdGgobmV3RnVsbENvbmZpZywgdGhpcy5vbGRGdWxsQ29uZmlnLCBjb21wYXJlQ29uZmlncyk7XG5cbiAgICAgICAgY29uc3QgaW5kZXhPZk5leHRQYW5lbCA9IHRoaXMub2xkRnVsbENvbmZpZy5sZW5ndGggLSBjb25maWdzVG9SZW1vdmUubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAoY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiBjb25maWdzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBBZGQgYW5kIHJlbW92ZSBwYW5lbHNcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UGFuZWxCeUluZGV4KGluZGV4T2ZOZXh0UGFuZWwpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWxzKGNvbmZpZ3NUb0FkZCwgbmV3RnVsbENvbmZpZykuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29tcG9uZW50c1Bvc2l0aW9uKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnc1RvUmVtb3ZlLmxlbmd0aCAmJiAhY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gb25seSByZW1vdmUgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBhbmVsQnlJbmRleChpbmRleE9mTmV4dFBhbmVsKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNvbmZpZ3NUb1JlbW92ZS5sZW5ndGggJiYgY29uZmlnc1RvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gb25seSBhZGQgcGFuZWxzXG4gICAgICAgICAgICB0aGlzLm9wZW5QYW5lbHMoY29uZmlnc1RvQWRkLCBuZXdGdWxsQ29uZmlnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVDb21wb25lbnRzUG9zaXRpb24oKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9sZEZ1bGxDb25maWcgPSBuZXdGdWxsQ29uZmlnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc29sdmUgYWxsIHNlcnZpY2VzLCB0aGVuIG9wZW4gcGFuZWxzXG4gICAgICovXG4gICAgcHJpdmF0ZSBvcGVuUGFuZWxzKFxuICAgICAgICBuZXdJdGVtc0NvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnW10sXG4gICAgICAgIGZ1bGxDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdLFxuICAgICk6IE9ic2VydmFibGU8T2JzZXJ2YWJsZTxhbnk+IHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8T2JzZXJ2YWJsZTxhbnk+IHwgbnVsbD4oKTtcblxuICAgICAgICAvLyBSZXNvbHZlIGV2ZXJ5dGhpbmcgYmVmb3JlIG9wZW5pbmcgYSBzaW5nbGUgcGFuZWxcbiAgICAgICAgY29uc3QgcmVzb2x2ZXMgPSBuZXdJdGVtc0NvbmZpZy5tYXAoY29uZiA9PiB0aGlzLmdldFJlc29sdmVkRGF0YShjb25mKSk7XG5cbiAgICAgICAgLy8gRm9ya0pvaW4gZW1pdHMgd2hlbiBhbGwgcHJvbWlzZXMgYXJlIGV4ZWN1dGVkO1xuICAgICAgICBmb3JrSm9pbihyZXNvbHZlcykuc3Vic2NyaWJlKHJlc29sdmVkUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIC8vIEZvciBlYWNoIG5ldyBjb25maWcgZW50cnksIG9wZW4gYSBuZXcgcGFuZWxcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3SXRlbXNDb25maWcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSBuZXdJdGVtc0NvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBsZXQgaXRlbURhdGE6IE5hdHVyYWxQYW5lbERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbmZpZyBvZiBhY3R1YWwgcGFuZWwgcm91dGVcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSByZXNvbHZlZCBieSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBpbiBjb21wb25lbnQgYnkgY2FsbGluZyB0aGlzLnBhbmVsRGF0YS5kYXRhLnh5elxuICAgICAgICAgICAgICAgICAgICBkYXRhOiByZXNvbHZlZFJlc3VsdFtpXSxcbiAgICAgICAgICAgICAgICAgICAgbGlua2FibGVPYmplY3RzOiBbXSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaG9va3NDb25maWc/LmJlZm9yZU9wZW5QYW5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudDogTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsQ29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFJlc3VsdDogcmVzb2x2ZWRSZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmdWxsUGFuZWxzQ29uZmlnOiBmdWxsQ29uZmlnLFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhID0gdGhpcy5ob29rc0NvbmZpZy5iZWZvcmVPcGVuUGFuZWwodGhpcy5pbmplY3RvciwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKGNvbmZpZy5jb21wb25lbnQsIGl0ZW1EYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3NbdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MubGVuZ3RoIC0gMV0uYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc29sdmVkRGF0YShjb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZyk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICAgICAgaWYgKCFjb25maWcucmVzb2x2ZSB8fCAoY29uZmlnLnJlc29sdmUgJiYgT2JqZWN0LmtleXMoY29uZmlnLnJlc29sdmUpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNvbHZlS2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZy5yZXNvbHZlKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhOiBSZWNvcmQ8c3RyaW5nLCBPYnNlcnZhYmxlPHVua25vd24+PiA9IHt9O1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IGNvbmZpZy5pbmplY3RvcjtcblxuICAgICAgICBpZiAoaW5qZWN0b3IpIHtcbiAgICAgICAgICAgIHJlc29sdmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZERhdGFba2V5XSA9IHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4gY29uZmlnLnJlc29sdmVba2V5XShjb25maWcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHJlc29sdmVkRGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuUGFuZWwoY29tcG9uZW50T3JUZW1wbGF0ZVJlZjogQ29tcG9uZW50VHlwZTxOYXR1cmFsQWJzdHJhY3RQYW5lbD4sIGRhdGE6IE5hdHVyYWxQYW5lbERhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZjogTWF0RGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5wYW5lbENsYXNzLFxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuZGlhbG9nLm9wZW5EaWFsb2dzLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMucGFuZWxXaWR0aCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgdG9wOiAnMCcsXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbjxOYXR1cmFsQWJzdHJhY3RQYW5lbD4oY29tcG9uZW50T3JUZW1wbGF0ZVJlZiwgY29uZik7XG5cbiAgICAgICAgLy8gUGFuZWxpc2FibGUgaW50ZXJmYWNlIGF0dHJpYnV0ZXMvZnVuY3Rpb25zXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5pbml0UGFuZWwoZGF0YSk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0UGFuZWxJbmRleChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFuZWxCeUluZGV4KGluZGV4IC0gMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBwYW5lbCBwb3NpdGlvbiAoaW5kZXgpIGJ5IHNlYXJjaGluZyBtYXRjaGluZyBjb21wb25lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFBhbmVsSW5kZXgoY29tcG9uZW50OiBOYXR1cmFsQWJzdHJhY3RQYW5lbCk6IG51bWJlciB7XG4gICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3MuZmluZEluZGV4KGRpYWxvZyA9PiBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UgPT09IGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwb3NpdGlvbnMgcGFuZWxzIGZyb20gc3RhcnQgdW50aWwgZ2l2ZW4gaW5kZXhcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUNvbXBvbmVudHNQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZy5vcGVuRGlhbG9ncy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgcGFuZWxzIHRoYXQgYXJlIHN0aWxsIG9wZW5lZCwgaWdub3JlIHRoZSBvdGhlcnMgYmVjYXVzZSB0aGV5J2xsIGJlIGNsb3NlZFxuICAgICAgICBjb25zdCBhZmZlY3RlZEVsZW1lbnRzID0gdGhpcy5kaWFsb2cub3BlbkRpYWxvZ3M7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWZmZWN0ZWRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nID0gYWZmZWN0ZWRFbGVtZW50c1tpXTtcblxuICAgICAgICAgICAgLy8gU2V0IGFsbCBwYW5lbHMgYXMgXCJoaWRkZW5cIiBleGNlcHQgbGFzdCBvbmUuIElzRnJvbnRQYW5lbCBhdHRyaWJ1dGUgY2F1c2VzIGEgQ1NTIHRoYXQgaGlkZXMgYm9keSB2aWEgaG9zdGJpbmRpbmdcbiAgICAgICAgICAgIGRpYWxvZy5jb21wb25lbnRJbnN0YW5jZS5pc0Zyb250UGFuZWwgPSBpID09PSBhZmZlY3RlZEVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBkaWFsb2cuY29tcG9uZW50SW5zdGFuY2UucGFuZWxTZXJ2aWNlID0gdGhpcztcblxuICAgICAgICAgICAgLy8gQXNzaWduIG9mZnNldFxuICAgICAgICAgICAgY29uc3QgZGVlcCA9IGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoIC0gMSAtIGk7XG5cbiAgICAgICAgICAgIGxldCBwb3NpdGlvbjogYW55ID0ge3JpZ2h0OiBkZWVwICogdGhpcy5wYW5lbHNPZmZzZXRIICsgJ3B4J307XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZlcnRpY2FsICYmIGFmZmVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcCA9IGkgKiB0aGlzLnBhbmVsc09mZnNldFYgKyAncHgnO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uID0ge3RvcDogdG9wLCByaWdodDogJzBweCd9O1xuICAgICAgICAgICAgICAgIGRpYWxvZy51cGRhdGVTaXplKHRoaXMucGFuZWxXaWR0aCwgYGNhbGMoMTAwJSAtICR7dG9wfSlgKTsgLy8gY2FsbCBiZWZvcmUgdXBkYXRlUG9zaXRpb25cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nLnVwZGF0ZVNpemUodGhpcy5wYW5lbFdpZHRoLCBgMTAwJWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWFsb2cudXBkYXRlUG9zaXRpb24ocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,75 +0,0 @@
1
- import { flatten, merge } from 'lodash-es';
2
- function getConsumedSegments(segments, routes) {
3
- return flatten(getStackConfig(segments, routes).map(conf => conf.route.segments));
4
- }
5
- /**
6
- * Return a list of items specifying the component, the service and the optional id of url segments
7
- */
8
- export function getStackConfig(segments, routes, injector = null) {
9
- if (!routes) {
10
- return [];
11
- }
12
- const comp = getComponentConfig(segments, routes, injector);
13
- if (comp) {
14
- return [comp].concat(getStackConfig(segments.slice(comp.route.segments.length), routes, injector));
15
- }
16
- return [];
17
- }
18
- /**
19
- * Returns an object with a component class, a service and an optional id from current and next url segments
20
- */
21
- function getComponentConfig(segments, routes, injector = null) {
22
- if (!segments.length) {
23
- return null;
24
- }
25
- // For each config
26
- for (const routeConfig of routes) {
27
- const params = {};
28
- const configSegments = routeConfig.path.split('/');
29
- let match = true;
30
- // For each current url segment
31
- for (let i = 0; i < segments.length; i++) {
32
- if (!configSegments[i]) {
33
- match = false;
34
- break;
35
- }
36
- // If find variable, store it
37
- if (configSegments[i].includes(':') && +segments[i].path > 0) {
38
- params[configSegments[i].replace(':', '')] = segments[i].path;
39
- }
40
- else if (configSegments[i] !== segments[i].path) {
41
- // If segments are different, url does not match
42
- match = false;
43
- break;
44
- }
45
- }
46
- if (match) {
47
- const matrixParams = segments.reduce((groupedParams, segment) => {
48
- return merge(groupedParams, segment.parameters);
49
- }, {});
50
- return {
51
- component: routeConfig.component,
52
- injector: injector,
53
- resolve: routeConfig.resolve ?? {},
54
- params: merge(params, matrixParams),
55
- rule: routeConfig,
56
- route: {
57
- segments: segments,
58
- path: segments.map(s => s.path).join('/'),
59
- },
60
- };
61
- }
62
- }
63
- if (segments.length > 1) {
64
- return getComponentConfig(segments.slice(0, -1), routes, injector);
65
- }
66
- return null;
67
- }
68
- export const naturalPanelsUrlMatcher = (segments, group, route) => {
69
- const matchedSegments = getConsumedSegments(segments, route.data ? route.data.panelsRoutes : []);
70
- if (matchedSegments.length) {
71
- return { consumed: matchedSegments };
72
- }
73
- return null;
74
- };
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWxzLnVybG1hdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvcGFuZWxzLnVybG1hdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFJekMsU0FBUyxtQkFBbUIsQ0FBQyxRQUFzQixFQUFFLE1BQWlDO0lBQ2xGLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzFCLFFBQXNCLEVBQ3RCLE1BQWlDLEVBQ2pDLFdBQTRCLElBQUk7SUFFaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUU1RCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUN2QixRQUFzQixFQUN0QixNQUFpQyxFQUNqQyxXQUE0QixJQUFJO0lBRWhDLElBQUksQ0FBQyxR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T0FBTyxFQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3Rvcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlLCBVcmxNYXRjaGVyLCBVcmxNYXRjaFJlc3VsdCwgVXJsU2VnbWVudCwgVXJsU2VnbWVudEdyb3VwfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtmbGF0dGVuLCBtZXJnZX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TmF0dXJhbFBhbmVsQ29uZmlnLCBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uLy4uL3R5cGVzL3R5cGVzJztcblxuZnVuY3Rpb24gZ2V0Q29uc3VtZWRTZWdtZW50cyhzZWdtZW50czogVXJsU2VnbWVudFtdLCByb3V0ZXM6IE5hdHVyYWxQYW5lbHNSb3V0ZXJSdWxlW10pOiBVcmxTZWdtZW50W10ge1xuICAgIHJldHVybiBmbGF0dGVuKGdldFN0YWNrQ29uZmlnKHNlZ21lbnRzLCByb3V0ZXMpLm1hcChjb25mID0+IGNvbmYucm91dGUuc2VnbWVudHMpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBsaXN0IG9mIGl0ZW1zIHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCwgdGhlIHNlcnZpY2UgYW5kIHRoZSBvcHRpb25hbCBpZCBvZiB1cmwgc2VnbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YWNrQ29uZmlnKFxuICAgIHNlZ21lbnRzOiBVcmxTZWdtZW50W10sXG4gICAgcm91dGVzOiBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZVtdLFxuICAgIGluamVjdG9yOiBJbmplY3RvciB8IG51bGwgPSBudWxsLFxuKTogTmF0dXJhbFBhbmVsQ29uZmlnW10ge1xuICAgIGlmICghcm91dGVzKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wID0gZ2V0Q29tcG9uZW50Q29uZmlnKHNlZ21lbnRzLCByb3V0ZXMsIGluamVjdG9yKTtcblxuICAgIGlmIChjb21wKSB7XG4gICAgICAgIHJldHVybiBbY29tcF0uY29uY2F0KGdldFN0YWNrQ29uZmlnKHNlZ21lbnRzLnNsaWNlKGNvbXAucm91dGUuc2VnbWVudHMubGVuZ3RoKSwgcm91dGVzLCBpbmplY3RvcikpO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgY29tcG9uZW50IGNsYXNzLCBhIHNlcnZpY2UgYW5kIGFuIG9wdGlvbmFsIGlkIGZyb20gY3VycmVudCBhbmQgbmV4dCB1cmwgc2VnbWVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9uZW50Q29uZmlnKFxuICAgIHNlZ21lbnRzOiBVcmxTZWdtZW50W10sXG4gICAgcm91dGVzOiBOYXR1cmFsUGFuZWxzUm91dGVyUnVsZVtdLFxuICAgIGluamVjdG9yOiBJbmplY3RvciB8IG51bGwgPSBudWxsLFxuKTogTmF0dXJhbFBhbmVsQ29uZmlnIHwgbnVsbCB7XG4gICAgaWYgKCFzZWdtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gRm9yIGVhY2ggY29uZmlnXG4gICAgZm9yIChjb25zdCByb3V0ZUNvbmZpZyBvZiByb3V0ZXMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBMaXRlcmFsID0ge307XG4gICAgICAgIGNvbnN0IGNvbmZpZ1NlZ21lbnRzID0gcm91dGVDb25maWcucGF0aC5zcGxpdCgnLycpO1xuICAgICAgICBsZXQgbWF0Y2ggPSB0cnVlO1xuXG4gICAgICAgIC8vIEZvciBlYWNoIGN1cnJlbnQgdXJsIHNlZ21lbnRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFjb25maWdTZWdtZW50c1tpXSkge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGZpbmQgdmFyaWFibGUsIHN0b3JlIGl0XG4gICAgICAgICAgICBpZiAoY29uZmlnU2VnbWVudHNbaV0uaW5jbHVkZXMoJzonKSAmJiArc2VnbWVudHNbaV0ucGF0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNbY29uZmlnU2VnbWVudHNbaV0ucmVwbGFjZSgnOicsICcnKV0gPSBzZWdtZW50c1tpXS5wYXRoO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWdTZWdtZW50c1tpXSAhPT0gc2VnbWVudHNbaV0ucGF0aCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHNlZ21lbnRzIGFyZSBkaWZmZXJlbnQsIHVybCBkb2VzIG5vdCBtYXRjaFxuICAgICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdHJpeFBhcmFtcyA9IHNlZ21lbnRzLnJlZHVjZSgoZ3JvdXBlZFBhcmFtcywgc2VnbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZShncm91cGVkUGFyYW1zLCBzZWdtZW50LnBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgfSwge30pO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogcm91dGVDb25maWcuY29tcG9uZW50LFxuICAgICAgICAgICAgICAgIGluamVjdG9yOiBpbmplY3RvcixcbiAgICAgICAgICAgICAgICByZXNvbHZlOiByb3V0ZUNvbmZpZy5yZXNvbHZlID8/IHt9LFxuICAgICAgICAgICAgICAgIHBhcmFtczogbWVyZ2UocGFyYW1zLCBtYXRyaXhQYXJhbXMpLFxuICAgICAgICAgICAgICAgIHJ1bGU6IHJvdXRlQ29uZmlnLFxuICAgICAgICAgICAgICAgIHJvdXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBzZWdtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogc2VnbWVudHMubWFwKHMgPT4gcy5wYXRoKS5qb2luKCcvJyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50Q29uZmlnKHNlZ21lbnRzLnNsaWNlKDAsIC0xKSwgcm91dGVzLCBpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBuYXR1cmFsUGFuZWxzVXJsTWF0Y2hlcjogVXJsTWF0Y2hlciA9IChcbiAgICBzZWdtZW50czogVXJsU2VnbWVudFtdLFxuICAgIGdyb3VwOiBVcmxTZWdtZW50R3JvdXAsXG4gICAgcm91dGU6IFJvdXRlLFxuKTogVXJsTWF0Y2hSZXN1bHQgfCBudWxsID0+IHtcbiAgICBjb25zdCBtYXRjaGVkU2VnbWVudHMgPSBnZXRDb25zdW1lZFNlZ21lbnRzKHNlZ21lbnRzLCByb3V0ZS5kYXRhID8gcm91dGUuZGF0YS5wYW5lbHNSb3V0ZXMgOiBbXSk7XG5cbiAgICBpZiAobWF0Y2hlZFNlZ21lbnRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge2NvbnN1bWVkOiBtYXRjaGVkU2VnbWVudHN9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufTtcbiJdfQ==
@@ -1,11 +0,0 @@
1
- /*
2
- * Public API Surface of natural
3
- */
4
- export { providePanels } from './panels.module';
5
- export * from './panels.component';
6
- export * from './panels.service';
7
- export { naturalPanelsUrlMatcher } from './panels.urlmatcher';
8
- export { fallbackIfNoOpenedPanels } from './fallback-if-no-opened-panels.urlmatcher';
9
- export * from './abstract-panel';
10
- export * from './types';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3BhbmVscy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuYXR1cmFsXG4gKi9cblxuZXhwb3J0IHtwcm92aWRlUGFuZWxzfSBmcm9tICcuL3BhbmVscy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wYW5lbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcGFuZWxzLnNlcnZpY2UnO1xuZXhwb3J0IHtuYXR1cmFsUGFuZWxzVXJsTWF0Y2hlcn0gZnJvbSAnLi9wYW5lbHMudXJsbWF0Y2hlcic7XG5leHBvcnQge2ZhbGxiYWNrSWZOb09wZW5lZFBhbmVsc30gZnJvbSAnLi9mYWxsYmFjay1pZi1uby1vcGVuZWQtcGFuZWxzLnVybG1hdGNoZXInO1xuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdC1wYW5lbCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -1,3 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- export const PanelsHooksConfig = new InjectionToken('NaturalPanelsHooksConfig');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9wYW5lbHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLGNBQWMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQXVFdkQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQTJCLDBCQUEwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbiwgSW5qZWN0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVcmxTZWdtZW50fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi8uLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RQYW5lbH0gZnJvbSAnLi9hYnN0cmFjdC1wYW5lbCc7XG5pbXBvcnQge0xpbmthYmxlT2JqZWN0fSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saW5rLW11dGF0aW9uLnNlcnZpY2UnO1xuXG4vKipcbiAqIEtpbmQgb2Ygc25hcHNob3Qgb2YgdGhlIGluc3RhbmNlIG9mIGEgcGFuZWwgYWN0aXZhdGVkIHJvdXRlXG4gKi9cbmV4cG9ydCB0eXBlIE5hdHVyYWxQYW5lbHNSb3V0ZUNvbmZpZyA9IHtcbiAgICBzZWdtZW50czogVXJsU2VnbWVudFtdO1xuICAgIHBhdGg6IHN0cmluZztcbn07XG5cbi8qKlxuICogQ29uZmlnIHJlcXVpcmVkIHRvIG1hbmFnZSB1cmwgYW5kIGluc3RhbnRpYXRlIGNvbXBvbmVudCBjb3JyZWN0bHlcbiAqL1xuZXhwb3J0IHR5cGUgTmF0dXJhbFBhbmVsQ29uZmlnID0ge1xuICAgIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxOYXR1cmFsQWJzdHJhY3RQYW5lbD47XG4gICAgaW5qZWN0b3I6IEluamVjdG9yIHwgbnVsbDtcbiAgICByZXNvbHZlOiBOYXR1cmFsUGFuZWxSZXNvbHZlcztcbiAgICBwYXJhbXM6IExpdGVyYWw7XG4gICAgcnVsZTogTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGU7XG4gICAgcm91dGU6IE5hdHVyYWxQYW5lbHNSb3V0ZUNvbmZpZztcbn07XG5cbi8qKlxuICogRGF0YSBwcm92aWRlZCB0byBpbnN0YW50aWF0ZWQgY29tcG9uZW50cyBpbiBjb250ZXh0IG9mIGEgcGFuZWwvZGlhbG9nXG4gKi9cbmV4cG9ydCB0eXBlIE5hdHVyYWxQYW5lbERhdGEgPSB7XG4gICAgY29uZmlnOiBOYXR1cmFsUGFuZWxDb25maWc7XG4gICAgZGF0YTogTGl0ZXJhbDtcblxuICAgIC8qKlxuICAgICAqIFJlbGF0ZWQgb2JqZWN0cyB0aGF0IHNob3VsZCBiZSBsaW5rZWQgdG8gdGhlIG9iamVjdCBzaG93biBpbiB0aGUgcGFuZWwgYWZ0ZXIgaXRzIGNyZWF0aW9uXG4gICAgICovXG4gICAgbGlua2FibGVPYmplY3RzOiBMaW5rYWJsZU9iamVjdFtdO1xufTtcblxuLyoqXG4gKiBTaW1pbGFyIHRvIEFuZ3VsYXIgZnVuY3Rpb25hbCByZXNvbHZlciBpbnRlcmZhY2UsIGJ1dCBzaW1wbGVyIGZvciBvdXIgcGFuZWxzJyBuZWVkc1xuICovXG50eXBlIE5hdHVyYWxQYW5lbFJlc29sdmU8VD4gPSAocm91dGU6IE5hdHVyYWxQYW5lbENvbmZpZykgPT4gT2JzZXJ2YWJsZTxUPjtcbmV4cG9ydCB0eXBlIE5hdHVyYWxQYW5lbFJlc29sdmVzID0gUmVjb3JkPHN0cmluZywgTmF0dXJhbFBhbmVsUmVzb2x2ZTx1bmtub3duPj47XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgcm91dGVcbiAqL1xuZXhwb3J0IHR5cGUgTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGUgPSB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxOYXR1cmFsQWJzdHJhY3RQYW5lbD47XG4gICAgcmVzb2x2ZT86IE5hdHVyYWxQYW5lbFJlc29sdmVzO1xufTtcblxuZXhwb3J0IHR5cGUgTmF0dXJhbFBhbmVsc0JlZm9yZU9wZW5QYW5lbCA9IHtcbiAgICBpdGVtRGF0YTogTmF0dXJhbFBhbmVsRGF0YTtcbiAgICBwYW5lbENvbmZpZzogTmF0dXJhbFBhbmVsQ29uZmlnO1xuICAgIGZ1bGxQYW5lbHNDb25maWc6IE5hdHVyYWxQYW5lbENvbmZpZ1tdO1xuICAgIHJlc29sdmVkUmVzdWx0OiBhbnk7IC8vIHRvZG8gOiBHZW5lcmljIG9yIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZVxufTtcblxuZXhwb3J0IHR5cGUgTmF0dXJhbFBhbmVsc0hvb2tzQ29uZmlnID0ge1xuICAgIGJlZm9yZU9wZW5QYW5lbD86IChcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBuYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsOiBOYXR1cmFsUGFuZWxzQmVmb3JlT3BlblBhbmVsLFxuICAgICkgPT4gTmF0dXJhbFBhbmVsRGF0YTtcbn07XG5cbi8vIEFycmF5IG9mIE5hdHVyYWxQYW5lbHNSb3V0ZXJSdWxlXG5leHBvcnQgdHlwZSBOYXR1cmFsUGFuZWxzUm91dGVzQ29uZmlnID0gTmF0dXJhbFBhbmVsc1JvdXRlclJ1bGVbXTtcblxuZXhwb3J0IGNvbnN0IFBhbmVsc0hvb2tzQ29uZmlnID0gbmV3IEluamVjdGlvblRva2VuPE5hdHVyYWxQYW5lbHNIb29rc0NvbmZpZz4oJ05hdHVyYWxQYW5lbHNIb29rc0NvbmZpZycpO1xuIl19
@@ -1,5 +0,0 @@
1
- /*
2
- * Public API Surface of natural
3
- */
4
- export * from './relations.component';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3JlbGF0aW9ucy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbmF0dXJhbFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcmVsYXRpb25zLmNvbXBvbmVudCc7XG4iXX0=