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