aril 1.1.64 → 1.1.66

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 (31) hide show
  1. package/boot/config/api/src/api.service.d.ts +1 -0
  2. package/esm2022/boot/config/api/src/api.service.mjs +15 -3
  3. package/esm2022/boot/host/src/bootstrap.mjs +4 -2
  4. package/esm2022/ui-business/assetPicker/src/asset-picker.component.mjs +63 -30
  5. package/esm2022/ui-business/assetPicker/src/interface.mjs +1 -1
  6. package/esm2022/util/directives/aril-util-directives.mjs +5 -0
  7. package/esm2022/util/directives/index.mjs +4 -0
  8. package/esm2022/util/directives/src/detail-page-customization/detail-page-customization.directive.mjs +298 -0
  9. package/esm2022/util/directives/src/detail-page-customization/index.mjs +3 -0
  10. package/esm2022/util/directives/src/detail-page-customization/models.mjs +4 -0
  11. package/esm2022/util/directives/src/dialog-component/plugin-dialog.component.mjs +25 -0
  12. package/esm2022/util/directives/src/dialog-service/plugin-dialog.service.mjs +16 -0
  13. package/fesm2022/aril-boot-config-api.mjs +15 -3
  14. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  15. package/fesm2022/aril-boot-host.mjs +3 -1
  16. package/fesm2022/aril-boot-host.mjs.map +1 -1
  17. package/fesm2022/aril-ui-business-assetPicker.mjs +62 -29
  18. package/fesm2022/aril-ui-business-assetPicker.mjs.map +1 -1
  19. package/fesm2022/aril-util-directives.mjs +343 -0
  20. package/fesm2022/aril-util-directives.mjs.map +1 -0
  21. package/fesm2022/aril.mjs +3 -1
  22. package/fesm2022/aril.mjs.map +1 -1
  23. package/package.json +72 -66
  24. package/ui-business/assetPicker/src/asset-picker.component.d.ts +7 -2
  25. package/ui-business/assetPicker/src/interface.d.ts +1 -0
  26. package/util/directives/index.d.ts +3 -0
  27. package/util/directives/src/detail-page-customization/detail-page-customization.directive.d.ts +26 -0
  28. package/util/directives/src/detail-page-customization/index.d.ts +2 -0
  29. package/util/directives/src/detail-page-customization/models.d.ts +53 -0
  30. package/util/directives/src/dialog-component/plugin-dialog.component.d.ts +10 -0
  31. package/util/directives/src/dialog-service/plugin-dialog.service.d.ts +7 -0
@@ -0,0 +1,298 @@
1
+ import { Directive, Inject, computed, effect, inject, signal } from '@angular/core';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
+ import { TranslocoService } from '@ngneat/transloco';
4
+ import { DETAIL_COMPONENT, PLUGIN_DIALOG_SERVICE } from './models';
5
+ import * as i0 from "@angular/core";
6
+ export class DetailPageCustomizationDirective {
7
+ constructor(detailComponent) {
8
+ this.detailComponent = detailComponent;
9
+ this.route = inject(ActivatedRoute);
10
+ this.router = inject(Router);
11
+ this.dialogService = inject(PLUGIN_DIALOG_SERVICE); // Use token instead
12
+ this.translocoService = inject(TranslocoService);
13
+ // Internal signal to track when TabView and the menu are ready
14
+ this.viewsInitialized = signal(false);
15
+ this.getRouteConfig = () => {
16
+ const configs = globalThis.routeConfigs;
17
+ if (!configs || !Array.isArray(configs))
18
+ return undefined;
19
+ const currentUrl = this.router.url.split('?')[0];
20
+ let bestMatch;
21
+ for (const config of configs) {
22
+ if (!config.path)
23
+ continue;
24
+ const urlToCheck = config.path.startsWith('/') ? config.path : `/${config.path}`;
25
+ if (currentUrl.startsWith(urlToCheck)) {
26
+ bestMatch = config;
27
+ break;
28
+ }
29
+ }
30
+ if (!bestMatch)
31
+ return undefined;
32
+ try {
33
+ return JSON.parse(bestMatch.content);
34
+ }
35
+ catch (e) {
36
+ console.error('Failed to parse route config content:', e);
37
+ return undefined;
38
+ }
39
+ };
40
+ this.getProcessedTabs = computed(() => {
41
+ if (!this.config?.tabs)
42
+ return [];
43
+ const activeLang = this.translocoService.getActiveLang();
44
+ return this.config.tabs
45
+ .filter((tab) => tab.visible !== false)
46
+ .map((tab) => ({
47
+ id: tab.id ?? null,
48
+ icon: tab.icon,
49
+ header: tab.label ? tab.label[activeLang] : '',
50
+ visible: tab.visible,
51
+ position: tab.position,
52
+ components: tab.components || []
53
+ }));
54
+ });
55
+ this.config = this.getRouteConfig();
56
+ effect((onCleanup) => {
57
+ if (this.viewsInitialized())
58
+ return;
59
+ // Poll every animation frame until both TabView and the menu is ready
60
+ // The menu can be directly defined in the component from init step, or be built dynamically after waiting for a network response. So we must wait for it to be ready.
61
+ const checkViews = () => {
62
+ if (this.detailComponent.tabView?.tabs && this.detailComponent.mdInfoPluginProps?.generalMenu()?.length) {
63
+ this.viewsInitialized.set(true);
64
+ this.onViewsReady();
65
+ }
66
+ else if (!this.viewsInitialized()) {
67
+ frameId = requestAnimationFrame(checkViews);
68
+ }
69
+ };
70
+ let frameId = requestAnimationFrame(checkViews);
71
+ onCleanup(() => {
72
+ cancelAnimationFrame(frameId);
73
+ });
74
+ }, { allowSignalWrites: true });
75
+ }
76
+ onViewsReady() {
77
+ if (!this.config)
78
+ return;
79
+ // step 1 - hide tabs based on config
80
+ if (this.detailComponent.tabView?.tabs) {
81
+ this.updateTabVisibility();
82
+ }
83
+ // step 2 - append config tabs to the static tabs (only new ones, not those matching static tabs)
84
+ const allConfigTabs = this.getProcessedTabs();
85
+ // Get IDs of existing static tabs
86
+ const staticTabIds = new Set();
87
+ if (this.detailComponent.tabView?.tabs) {
88
+ this.detailComponent.tabView.tabs.forEach((tabPanel) => {
89
+ const tabId = tabPanel?.el?.nativeElement?.id;
90
+ if (tabId) {
91
+ staticTabIds.add(tabId);
92
+ }
93
+ });
94
+ }
95
+ // Filter out config tabs that are meant to *reorder* existing static tabs.
96
+ // Any tab whose id matches an existing static tab id is considered a "reorder"
97
+ // instruction; everything else (id === null OR an id that doesn't exist yet)
98
+ // is treated as a brand new tab.
99
+ const newConfigTabs = allConfigTabs.filter((tab) => {
100
+ // new tab when id is null/undefined
101
+ if (!tab.id)
102
+ return true;
103
+ // new tab when id is provided but doesn't match any static tab id
104
+ return !staticTabIds.has(tab.id);
105
+ });
106
+ if (newConfigTabs.length > 0 && this.detailComponent.configTabs) {
107
+ this.detailComponent.configTabs.set(newConfigTabs);
108
+ }
109
+ else if (newConfigTabs.length > 0) {
110
+ this.detailComponent.tabs = newConfigTabs;
111
+ }
112
+ // using setTimeout to ensure tabView is ready as we want to work directly with the generated elements
113
+ setTimeout(() => {
114
+ // step 3 - reorder tabs
115
+ this.reorderTabsByPosition();
116
+ // step 4 - activate tab from URL if specified
117
+ this.activateTabFromUrl();
118
+ // step 5 - update the menu
119
+ if (this.config?.menu) {
120
+ this.updateMenu(this.config.menu);
121
+ }
122
+ });
123
+ }
124
+ updateTabVisibility() {
125
+ if (!this.config?.tabs)
126
+ return;
127
+ // Find tabs in config that have visible: false
128
+ const hiddenTabPositions = this.config.tabs.filter((tab) => tab.visible === false).map((tab) => tab.position);
129
+ hiddenTabPositions.forEach((position) => {
130
+ this.hideTabByPosition(position, true);
131
+ });
132
+ }
133
+ hideTabByPosition(position, hide = true) {
134
+ if (!this.detailComponent.tabView?.tabs)
135
+ return;
136
+ const panelToHide = this.detailComponent.tabView.tabs[position];
137
+ const tabToHide = this.detailComponent.tabView.list?.children[position];
138
+ if (tabToHide && panelToHide) {
139
+ panelToHide.el.nativeElement.hidden = hide;
140
+ tabToHide.style.display = 'none';
141
+ }
142
+ }
143
+ /**
144
+ * Reorder tabs based on config positions
145
+ * Iterates over visible config tabs and rearranges both static and config tabs
146
+ */
147
+ reorderTabsByPosition() {
148
+ if (!this.detailComponent.tabView?.tabs || !this.detailComponent.tabView?.list)
149
+ return;
150
+ const configTabs = this.getProcessedTabs();
151
+ const allTabs = this.detailComponent.tabView.tabs;
152
+ const navList = this.detailComponent.tabView.list;
153
+ const configTabMap = new Map();
154
+ configTabs.forEach((tab) => {
155
+ // Only treat tabs that both:
156
+ // - have an id
157
+ // - and have an explicit position
158
+ // as "reorder instructions" for existing static tabs.
159
+ // Tabs without a position (even if they have an id) are considered
160
+ // regular/new tabs and should keep their natural order.
161
+ if (tab.id && tab.position) {
162
+ configTabMap.set(tab.id, tab);
163
+ }
164
+ });
165
+ // separate static from config tabs
166
+ const staticTabs = [];
167
+ const configTabInstances = [];
168
+ allTabs.forEach((tabPanel, index) => {
169
+ const tabId = tabPanel?.el?.nativeElement?.id || null;
170
+ const configTab = tabId ? configTabMap.get(tabId) : null;
171
+ if (configTab) {
172
+ configTabInstances.push({ tab: tabPanel, index, config: configTab });
173
+ }
174
+ else {
175
+ staticTabs.push({ tab: tabPanel, index, id: tabId });
176
+ }
177
+ });
178
+ const positionMap = new Map();
179
+ // place config tabs at their specified positions
180
+ configTabInstances.forEach(({ tab, config }) => {
181
+ if (config.position !== undefined && config.position !== null) {
182
+ positionMap.set(config.position, { tab, isConfig: true, id: config.id });
183
+ }
184
+ });
185
+ // place static tabs at available positions (maintaining relative order)
186
+ let staticIndex = 0;
187
+ let currentPosition = 0;
188
+ while (staticIndex < staticTabs.length) {
189
+ while (positionMap.has(currentPosition)) {
190
+ currentPosition++;
191
+ }
192
+ // place static tab at this position
193
+ const staticTab = staticTabs[staticIndex];
194
+ positionMap.set(currentPosition, { tab: staticTab.tab, isConfig: false, id: staticTab.id });
195
+ staticIndex++;
196
+ currentPosition++;
197
+ }
198
+ // build ordered array
199
+ const sortedPositions = Array.from(positionMap.keys()).sort((a, b) => a - b);
200
+ const reorderedTabs = [];
201
+ const reorderedHeaders = [];
202
+ sortedPositions.forEach((position) => {
203
+ const tabInfo = positionMap.get(position);
204
+ reorderedTabs.push(tabInfo.tab);
205
+ const originalIndex = allTabs.indexOf(tabInfo.tab);
206
+ if (originalIndex !== -1 && navList.children[originalIndex]) {
207
+ reorderedHeaders.push(navList.children[originalIndex]);
208
+ }
209
+ });
210
+ // reorder tabs array
211
+ this.detailComponent.tabView.tabs.length = 0;
212
+ reorderedTabs.forEach((tab) => this.detailComponent.tabView.tabs.push(tab));
213
+ // reorder dom headers
214
+ reorderedHeaders.forEach((header, newIndex) => {
215
+ const targetHeader = navList.children[newIndex];
216
+ if (targetHeader && targetHeader !== header) {
217
+ navList.insertBefore(header, targetHeader);
218
+ }
219
+ else if (!targetHeader) {
220
+ navList.appendChild(header);
221
+ }
222
+ });
223
+ // reorder dom panels
224
+ const panelsContainer = allTabs[0]?.el.nativeElement.parentElement;
225
+ if (panelsContainer) {
226
+ reorderedTabs.forEach((tabPanel, newIndex) => {
227
+ const targetPanel = panelsContainer.children[newIndex];
228
+ if (targetPanel && targetPanel !== tabPanel.el.nativeElement) {
229
+ panelsContainer.insertBefore(tabPanel.el.nativeElement, targetPanel);
230
+ }
231
+ else if (!targetPanel) {
232
+ panelsContainer.appendChild(tabPanel.el.nativeElement);
233
+ }
234
+ });
235
+ }
236
+ if (this.detailComponent.tabView.cd) {
237
+ this.detailComponent.tabView.cd.markForCheck();
238
+ }
239
+ }
240
+ activateTabFromUrl() {
241
+ if (!this.detailComponent.tabView)
242
+ return;
243
+ const activeTabParam = this.route.snapshot.queryParamMap.get('activeTab');
244
+ if (activeTabParam) {
245
+ const activeTabIndex = Number(activeTabParam);
246
+ if (!isNaN(activeTabIndex) &&
247
+ activeTabIndex >= 0 &&
248
+ this.detailComponent.tabView.tabs &&
249
+ activeTabIndex < this.detailComponent.tabView.tabs.length) {
250
+ this.detailComponent.tabView.activeIndex = activeTabIndex;
251
+ }
252
+ }
253
+ }
254
+ updateMenu(menuConfig) {
255
+ const context = {
256
+ router: this.router,
257
+ route: this.route,
258
+ dialogService: this.dialogService,
259
+ component: this.detailComponent
260
+ };
261
+ const activeLang = this.translocoService.getActiveLang();
262
+ const dynamicMenu = menuConfig.map((m) => ({
263
+ label: m.label[activeLang] ?? '',
264
+ icon: m.icon,
265
+ command: (_event) => {
266
+ const commandFn = new Function('ctx', m.command);
267
+ commandFn(context)(context);
268
+ }
269
+ }));
270
+ // Update the existing signal instead of replacing it to ensure change
271
+ // detection picks up the menu update after browser back navigation.
272
+ const generalMenuSignal = this.detailComponent.mdInfoPluginProps.generalMenu;
273
+ const existingMenu = generalMenuSignal();
274
+ // Avoid duplicating previously added dynamic items (identified by label/icon match)
275
+ const mergedMenu = [
276
+ ...existingMenu.filter((item) => !dynamicMenu.some((dyn) => dyn.label === item.label && dyn.icon === item.icon)),
277
+ ...dynamicMenu
278
+ ];
279
+ if (generalMenuSignal?.set) {
280
+ generalMenuSignal.set(mergedMenu);
281
+ }
282
+ else {
283
+ this.detailComponent.mdInfoPluginProps.generalMenu = signal(mergedMenu);
284
+ }
285
+ }
286
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DetailPageCustomizationDirective, deps: [{ token: DETAIL_COMPONENT }], target: i0.ɵɵFactoryTarget.Directive }); }
287
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: DetailPageCustomizationDirective, isStandalone: true, ngImport: i0 }); }
288
+ }
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DetailPageCustomizationDirective, decorators: [{
290
+ type: Directive,
291
+ args: [{
292
+ standalone: true
293
+ }]
294
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
295
+ type: Inject,
296
+ args: [DETAIL_COMPONENT]
297
+ }] }] });
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLXBhZ2UtY3VzdG9taXphdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3V0aWwvZGlyZWN0aXZlcy9zcmMvZGV0YWlsLXBhZ2UtY3VzdG9taXphdGlvbi9kZXRhaWwtcGFnZS1jdXN0b21pemF0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRCxPQUFPLEVBQ04sZ0JBQWdCLEVBSWhCLHFCQUFxQixFQUVyQixNQUFNLFVBQVUsQ0FBQzs7QUFLbEIsTUFBTSxPQUFPLGdDQUFnQztJQXlENUMsWUFBdUQsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBeER0RSxVQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9CLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsa0JBQWEsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtRQUNuRSxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3RCwrREFBK0Q7UUFDdkQscUJBQWdCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLG1CQUFjLEdBQUcsR0FBNkIsRUFBRTtZQUN2RCxNQUFNLE9BQU8sR0FBSSxVQUFrQixDQUFDLFlBRXhCLENBQUM7WUFDYixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9B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QUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QixDQUFDO1NBQ0QsQ0FBQyxDQUFDLENBQUM7UUFFSixzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFrQixDQUFDO1FBQ3BGLE1BQU0sWUFBWSxHQUFlLGlCQUFpQixFQUFFLENBQUM7UUFFckQsb0ZBQW9GO1FBQ3BGLE1BQU0sVUFBVSxHQUFHO1lBQ2xCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEgsR0FBRyxXQUFXO1NBQ2QsQ0FBQztRQUVGLElBQUksaUJBQWlCLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDNUIsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDRixDQUFDOzhHQWxVVyxnQ0FBZ0Msa0JBeUR4QixnQkFBZ0I7a0dBekR4QixnQ0FBZ0M7OzJGQUFoQyxnQ0FBZ0M7a0JBSDVDLFNBQVM7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLElBQUk7aUJBQ2hCOzswQkEwRGEsTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdCwgU2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcclxuXHJcbmltcG9ydCB7XHJcblx0REVUQUlMX0NPTVBPTkVOVCxcclxuXHREZXRhaWxDb21wb25lbnQsXHJcblx0RGV0YWlsQ29uZmlnLFxyXG5cdERldGFpbENvbmZpZ01lbnVJdGVtLFxyXG5cdFBMVUdJTl9ESUFMT0dfU0VSVklDRSxcclxuXHRUYWJDb25maWdcclxufSBmcm9tICcuL21vZGVscyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuXHRzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxQYWdlQ3VzdG9taXphdGlvbkRpcmVjdGl2ZSB7XHJcblx0cHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XHJcblx0cHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoUExVR0lOX0RJQUxPR19TRVJWSUNFKTsgLy8gVXNlIHRva2VuIGluc3RlYWRcclxuXHRwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jb1NlcnZpY2UgPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XHJcblxyXG5cdC8vIEludGVybmFsIHNpZ25hbCB0byB0cmFjayB3aGVuIFRhYlZpZXcgYW5kIHRoZSBtZW51IGFyZSByZWFkeVxyXG5cdHByaXZhdGUgdmlld3NJbml0aWFsaXplZCA9IHNpZ25hbChmYWxzZSk7XHJcblx0cHJpdmF0ZSBjb25maWc6IERldGFpbENvbmZpZyB8IHVuZGVmaW5lZDtcclxuXHRwcml2YXRlIGdldFJvdXRlQ29uZmlnID0gKCk6IERldGFpbENvbmZpZyB8IHVuZGVmaW5lZCA9PiB7XHJcblx0XHRjb25zdCBjb25maWdzID0gKGdsb2JhbFRoaXMgYXMgYW55KS5yb3V0ZUNvbmZpZ3MgYXNcclxuXHRcdFx0fCBBcnJheTx7IHBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nOyB2ZXJzaW9uOiBudW1iZXIgfT5cclxuXHRcdFx0fCB1bmRlZmluZWQ7XHJcblx0XHRpZiAoIWNvbmZpZ3MgfHwgIUFycmF5LmlzQXJyYXkoY29uZmlncykpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG5cdFx0Y29uc3QgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xyXG5cclxuXHRcdGxldCBiZXN0TWF0Y2g6IHsgcGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmc7IHZlcnNpb246IG51bWJlciB9IHwgdW5kZWZpbmVkO1xyXG5cclxuXHRcdGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3MpIHtcclxuXHRcdFx0aWYgKCFjb25maWcucGF0aCkgY29udGludWU7XHJcblxyXG5cdFx0XHRjb25zdCB1cmxUb0NoZWNrID0gY29uZmlnLnBhdGguc3RhcnRzV2l0aCgnLycpID8gY29uZmlnLnBhdGggOiBgLyR7Y29uZmlnLnBhdGh9YDtcclxuXHJcblx0XHRcdGlmIChjdXJyZW50VXJsLnN0YXJ0c1dpdGgodXJsVG9DaGVjaykpIHtcclxuXHRcdFx0XHRiZXN0TWF0Y2ggPSBjb25maWc7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWJlc3RNYXRjaCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShiZXN0TWF0Y2guY29udGVudCkgYXMgRGV0YWlsQ29uZmlnO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcGFyc2Ugcm91dGUgY29uZmlnIGNvbnRlbnQ6JywgZSk7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0cHJpdmF0ZSBnZXRQcm9jZXNzZWRUYWJzOiBTaWduYWw8VGFiQ29uZmlnW10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0aWYgKCF0aGlzLmNvbmZpZz8udGFicykgcmV0dXJuIFtdO1xyXG5cclxuXHRcdGNvbnN0IGFjdGl2ZUxhbmcgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UuZ2V0QWN0aXZlTGFuZygpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmNvbmZpZy50YWJzXHJcblx0XHRcdC5maWx0ZXIoKHRhYikgPT4gdGFiLnZpc2libGUgIT09IGZhbHNlKVxyXG5cdFx0XHQubWFwKCh0YWIpID0+ICh7XHJcblx0XHRcdFx0aWQ6IHRhYi5pZCA/PyBudWxsLFxyXG5cdFx0XHRcdGljb246IHRhYi5pY29uLFxyXG5cdFx0XHRcdGhlYWRlcjogdGFiLmxhYmVsID8gdGFiLmxhYmVsW2FjdGl2ZUxhbmddIDogJycsXHJcblx0XHRcdFx0dmlzaWJsZTogdGFiLnZpc2libGUsXHJcblx0XHRcdFx0cG9zaXRpb246IHRhYi5wb3NpdGlvbixcclxuXHRcdFx0XHRjb21wb25lbnRzOiB0YWIuY29tcG9uZW50cyB8fCBbXVxyXG5cdFx0XHR9KSk7XHJcblx0fSk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKEBJbmplY3QoREVUQUlMX0NPTVBPTkVOVCkgcHJpdmF0ZSByZWFkb25seSBkZXRhaWxDb21wb25lbnQ6IERldGFpbENvbXBvbmVudCkge1xyXG5cdFx0dGhpcy5jb25maWcgPSB0aGlzLmdldFJvdXRlQ29uZmlnKCk7XHJcblx0XHRlZmZlY3QoXHJcblx0XHRcdChvbkNsZWFudXApID0+IHtcclxuXHRcdFx0XHRpZiAodGhpcy52aWV3c0luaXRpYWxpemVkKCkpIHJldHVybjtcclxuXHJcblx0XHRcdFx0Ly8gUG9sbCBldmVyeSBhbmltYXRpb24gZnJhbWUgdW50aWwgYm90aCBUYWJWaWV3IGFuZCB0aGUgbWVudSBpcyByZWFkeVxyXG5cdFx0XHRcdC8vIFRoZSBtZW51IGNhbiBiZSBkaXJlY3RseSBkZWZpbmVkIGluIHRoZSBjb21wb25lbnQgZnJvbSBpbml0IHN0ZXAsIG9yIGJlIGJ1aWx0IGR5bmFtaWNhbGx5IGFmdGVyIHdhaXRpbmcgZm9yIGEgbmV0d29yayByZXNwb25zZS4gU28gd2UgbXVzdCB3YWl0IGZvciBpdCB0byBiZSByZWFkeS5cclxuXHRcdFx0XHRjb25zdCBjaGVja1ZpZXdzID0gKCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuZGV0YWlsQ29tcG9uZW50LnRhYlZpZXc/LnRhYnMgJiYgdGhpcy5kZXRhaWxDb21wb25lbnQubWRJbmZvUGx1Z2luUHJvcHM/LmdlbmVyYWxNZW51KCk/Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnZpZXdzSW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLm9uVmlld3NSZWFkeSgpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmICghdGhpcy52aWV3c0luaXRpYWxpemVkKCkpIHtcclxuXHRcdFx0XHRcdFx0ZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShjaGVja1ZpZXdzKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRsZXQgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShjaGVja1ZpZXdzKTtcclxuXHJcblx0XHRcdFx0b25DbGVhbnVwKCgpID0+IHtcclxuXHRcdFx0XHRcdGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9uVmlld3NSZWFkeSgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5jb25maWcpIHJldHVybjtcclxuXHJcblx0XHQvLyBzdGVwIDEgLSBoaWRlIHRhYnMgYmFzZWQgb24gY29uZmlnXHJcblx0XHRpZiAodGhpcy5kZXRhaWxDb21wb25lbnQudGFiVmlldz8udGFicykge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVRhYlZpc2liaWxpdHkoKTtcclxuXHRcdH1cclxuXHRcdC8vIHN0ZXAgMiAtIGFwcGVuZCBjb25maWcgdGFicyB0byB0aGUgc3RhdGljIHRhYnMgKG9ubHkgbmV3IG9uZXMsIG5vdCB0aG9zZSBtYXRjaGluZyBzdGF0aWMgdGFicylcclxuXHRcdGNvbnN0IGFsbENvbmZpZ1RhYnMgPSB0aGlzLmdldFByb2Nlc3NlZFRhYnMoKTtcclxuXHJcblx0XHQvLyBHZXQgSURzIG9mIGV4aXN0aW5nIHN0YXRpYyB0YWJzXHJcblx0XHRjb25zdCBzdGF0aWNUYWJJZHMgPSBuZXcgU2V0PHN0cmluZyB8IG51bWJlciB8IG51bGw+KCk7XHJcblx0XHRpZiAodGhpcy5kZXRhaWxDb21wb25lbnQudGFiVmlldz8udGFicykge1xyXG5cdFx0XHR0aGlzLmRldGFpbENvbXBvbmVudC50YWJWaWV3LnRhYnMuZm9yRWFjaCgodGFiUGFuZWwpID0+IHtcclxuXHRcdFx0XHRjb25zdCB0YWJJZCA9IHRhYlBhbmVsPy5lbD8ubmF0aXZlRWxlbWVudD8uaWQ7XHJcblx0XHRcdFx0aWYgKHRhYklkKSB7XHJcblx0XHRcdFx0XHRzdGF0aWNUYWJJZHMuYWRkKHRhYklkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEZpbHRlciBvdXQgY29uZmlnIHRhYnMgdGhhdCBhcmUgbWVhbnQgdG8gKnJlb3JkZXIqIGV4aXN0aW5nIHN0YXRpYyB0YWJzLlxyXG5cdFx0Ly8gQW55IHRhYiB3aG9zZSBpZCBtYXRjaGVzIGFuIGV4aXN0aW5nIHN0YXRpYyB0YWIgaWQgaXMgY29uc2lkZXJlZCBhIFwicmVvcmRlclwiXHJcblx0XHQvLyBpbnN0cnVjdGlvbjsgZXZlcnl0aGluZyBlbHNlIChpZCA9PT0gbnVsbCBPUiBhbiBpZCB0aGF0IGRvZXNuJ3QgZXhpc3QgeWV0KVxyXG5cdFx0Ly8gaXMgdHJlYXRlZCBhcyBhIGJyYW5kIG5ldyB0YWIuXHJcblx0XHRjb25zdCBuZXdDb25maWdUYWJzID0gYWxsQ29uZmlnVGFicy5maWx0ZXIoKHRhYikgPT4ge1xyXG5cdFx0XHQvLyBuZXcgdGFiIHdoZW4gaWQgaXMgbnVsbC91bmRlZmluZWRcclxuXHRcdFx0aWYgKCF0YWIuaWQpIHJldHVybiB0cnVlO1xyXG5cclxuXHRcdFx0Ly8gbmV3IHRhYiB3aGVuIGlkIGlzIHByb3ZpZGVkIGJ1dCBkb2Vzbid0IG1hdGNoIGFueSBzdGF0aWMgdGFiIGlkXHJcblx0XHRcdHJldHVybiAhc3RhdGljVGFiSWRzLmhhcyh0YWIuaWQpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKG5ld0NvbmZpZ1RhYnMubGVuZ3RoID4gMCAmJiB0aGlzLmRldGFpbENvbXBvbmVudC5jb25maWdUYWJzKSB7XHJcblx0XHRcdCh0aGlzLmRldGFpbENvbXBvbmVudC5jb25maWdUYWJzIGFzIGFueSkuc2V0KG5ld0NvbmZpZ1RhYnMpO1xyXG5cdFx0fSBlbHNlIGlmIChuZXdDb25maWdUYWJzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0dGhpcy5kZXRhaWxDb21wb25lbnQudGFicyA9IG5ld0NvbmZpZ1RhYnM7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gdXNpbmcgc2V0VGltZW91dCB0byBlbnN1cmUgdGFiVmlldyBpcyByZWFkeSBhcyB3ZSB3YW50IHRvIHdvcmsgZGlyZWN0bHkgd2l0aCB0aGUgZ2VuZXJhdGVkIGVsZW1lbnRzXHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0Ly8gc3RlcCAzIC0gcmVvcmRlciB0YWJzXHJcblx0XHRcdHRoaXMucmVvcmRlclRhYnNCeVBvc2l0aW9uKCk7XHJcblx0XHRcdC8vIHN0ZXAgNCAtIGFjdGl2YXRlIHRhYiBmcm9tIFVSTCBpZiBzcGVjaWZpZWRcclxuXHRcdFx0dGhpcy5hY3RpdmF0ZVRhYkZyb21VcmwoKTtcclxuXHRcdFx0Ly8gc3RlcCA1IC0gdXBkYXRlIHRoZSBtZW51XHJcblx0XHRcdGlmICh0aGlzLmNvbmZpZz8ubWVudSkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlTWVudSh0aGlzLmNvbmZpZy5tZW51KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVRhYlZpc2liaWxpdHkoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuY29uZmlnPy50YWJzKSByZXR1cm47XHJcblxyXG5cdFx0Ly8gRmluZCB0YWJzIGluIGNvbmZpZyB0aGF0IGhhdmUgdmlzaWJsZTogZmFsc2VcclxuXHRcdGNvbnN0IGhpZGRlblRhYlBvc2l0aW9ucyA9IHRoaXMuY29uZmlnLnRhYnMuZmlsdGVyKCh0YWIpID0+IHRhYi52aXNpYmxlID09PSBmYWxzZSkubWFwKCh0YWIpID0+IHRhYi5wb3NpdGlvbik7XHJcblxyXG5cdFx0aGlkZGVuVGFiUG9zaXRpb25zLmZvckVhY2goKHBvc2l0aW9uKSA9PiB7XHJcblx0XHRcdHRoaXMuaGlkZVRhYkJ5UG9zaXRpb24ocG9zaXRpb24sIHRydWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRoaWRlVGFiQnlQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBoaWRlID0gdHJ1ZSk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLmRldGFpbENvbXBvbmVudC50YWJWaWV3Py50YWJzKSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgcGFuZWxUb0hpZGUgPSB0aGlzLmRldGFpbENvbXBvbmVudC50YWJWaWV3LnRhYnNbcG9zaXRpb25dO1xyXG5cdFx0Y29uc3QgdGFiVG9IaWRlID0gdGhpcy5kZXRhaWxDb21wb25lbnQudGFiVmlldy5saXN0Py5jaGlsZHJlbltwb3NpdGlvbl0gYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG5cdFx0aWYgKHRhYlRvSGlkZSAmJiBwYW5lbFRvSGlkZSkge1xyXG5cdFx0XHRwYW5lbFRvSGlkZS5lbC5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IGhpZGU7XHJcblx0XHRcdHRhYlRvSGlkZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVvcmRlciB0YWJzIGJhc2VkIG9uIGNvbmZpZyBwb3NpdGlvbnNcclxuXHQgKiBJdGVyYXRlcyBvdmVyIHZpc2libGUgY29uZmlnIHRhYnMgYW5kIHJlYXJyYW5nZXMgYm90aCBzdGF0aWMgYW5kIGNvbmZpZyB0YWJzXHJcblx0ICovXHJcblx0cHJpdmF0ZSByZW9yZGVyVGFic0J5UG9zaXRpb24oKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuZGV0YWlsQ29tcG9uZW50LnRhYlZpZXc/LnRhYnMgfHwgIXRoaXMuZGV0YWlsQ29tcG9uZW50LnRhYlZpZXc/Lmxpc3QpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBjb25maWdUYWJzID0gdGhpcy5nZXRQcm9jZXNzZWRUYWJzKCk7XHJcblx0XHRjb25zdCBhbGxUYWJzID0gdGhpcy5kZXRhaWxDb21wb25lbnQudGFiVmlldy50YWJzO1xyXG5cdFx0Y29uc3QgbmF2TGlzdCA9IHRoaXMuZGV0YWlsQ29tcG9uZW50LnRhYlZpZXcubGlzdDtcclxuXHJcblx0XHRjb25zdCBjb25maWdUYWJNYXAgPSBuZXcgTWFwPHN0cmluZyB8IG51bWJlciB8IG51bGwsIFRhYkNvbmZpZz4oKTtcclxuXHRcdGNvbmZpZ1RhYnMuZm9yRWFjaCgodGFiKSA9PiB7XHJcblx0XHRcdC8vIE9ubHkgdHJlYXQgdGFicyB0aGF0IGJvdGg6XHJcblx0XHRcdC8vIC0gaGF2ZSBhbiBpZFxyXG5cdFx0XHQvLyAtIGFuZCBoYXZlIGFuIGV4cGxpY2l0IHBvc2l0aW9uXHJcblx0XHRcdC8vIGFzIFwicmVvcmRlciBpbnN0cnVjdGlvbnNcIiBmb3IgZXhpc3Rpbmcgc3RhdGljIHRhYnMuXHJcblx0XHRcdC8vIFRhYnMgd2l0aG91dCBhIHBvc2l0aW9uIChldmVuIGlmIHRoZXkgaGF2ZSBhbiBpZCkgYXJlIGNvbnNpZGVyZWRcclxuXHRcdFx0Ly8gcmVndWxhci9uZXcgdGFicyBhbmQgc2hvdWxkIGtlZXAgdGhlaXIgbmF0dXJhbCBvcmRlci5cclxuXHRcdFx0aWYgKHRhYi5pZCAmJiB0YWIucG9zaXRpb24pIHtcclxuXHRcdFx0XHRjb25maWdUYWJNYXAuc2V0KHRhYi5pZCwgdGFiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gc2VwYXJhdGUgc3RhdGljIGZyb20gY29uZmlnIHRhYnNcclxuXHRcdGNvbnN0IHN0YXRpY1RhYnM6IEFycmF5PHsgdGFiOiBhbnk7IGluZGV4OiBudW1iZXI7IGlkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIH0+ID0gW107XHJcblx0XHRjb25zdCBjb25maWdUYWJJbnN0YW5jZXM6IEFycmF5PHsgdGFiOiBhbnk7IGluZGV4OiBudW1iZXI7IGNvbmZpZzogVGFiQ29uZmlnIH0+ID0gW107XHJcblxyXG5cdFx0YWxsVGFicy5mb3JFYWNoKCh0YWJQYW5lbCwgaW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3QgdGFiSWQgPSB0YWJQYW5lbD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkIHx8IG51bGw7XHJcblx0XHRcdGNvbnN0IGNvbmZpZ1RhYiA9IHRhYklkID8gY29uZmlnVGFiTWFwLmdldCh0YWJJZCkgOiBudWxsO1xyXG5cclxuXHRcdFx0aWYgKGNvbmZpZ1RhYikge1xyXG5cdFx0XHRcdGNvbmZpZ1RhYkluc3RhbmNlcy5wdXNoKHsgdGFiOiB0YWJQYW5lbCwgaW5kZXgsIGNvbmZpZzogY29uZmlnVGFiIH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHN0YXRpY1RhYnMucHVzaCh7IHRhYjogdGFiUGFuZWwsIGluZGV4LCBpZDogdGFiSWQgfSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdGNvbnN0IHBvc2l0aW9uTWFwID0gbmV3IE1hcDxudW1iZXIsIHsgdGFiOiBhbnk7IGlzQ29uZmlnOiBib29sZWFuOyBpZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB9PigpO1xyXG5cclxuXHRcdC8vIHBsYWNlIGNvbmZpZyB0YWJzIGF0IHRoZWlyIHNwZWNpZmllZCBwb3NpdGlvbnNcclxuXHRcdGNvbmZpZ1RhYkluc3RhbmNlcy5mb3JFYWNoKCh7IHRhYiwgY29uZmlnIH0pID0+IHtcclxuXHRcdFx0aWYgKGNvbmZpZy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy5wb3NpdGlvbiAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdHBvc2l0aW9uTWFwLnNldChjb25maWcucG9zaXRpb24sIHsgdGFiLCBpc0NvbmZpZzogdHJ1ZSwgaWQ6IGNvbmZpZy5pZCB9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gcGxhY2Ugc3RhdGljIHRhYnMgYXQgYXZhaWxhYmxlIHBvc2l0aW9ucyAobWFpbnRhaW5pbmcgcmVsYXRpdmUgb3JkZXIpXHJcblx0XHRsZXQgc3RhdGljSW5kZXggPSAwO1xyXG5cdFx0bGV0IGN1cnJlbnRQb3NpdGlvbiA9IDA7XHJcblxyXG5cdFx0d2hpbGUgKHN0YXRpY0luZGV4IDwgc3RhdGljVGFicy5sZW5ndGgpIHtcclxuXHRcdFx0d2hpbGUgKHBvc2l0aW9uTWFwLmhhcyhjdXJyZW50UG9zaXRpb24pKSB7XHJcblx0XHRcdFx0Y3VycmVudFBvc2l0aW9uKys7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIHBsYWNlIHN0YXRpYyB0YWIgYXQgdGhpcyBwb3NpdGlvblxyXG5cdFx0XHRjb25zdCBzdGF0aWNUYWIgPSBzdGF0aWNUYWJzW3N0YXRpY0luZGV4XTtcclxuXHRcdFx0cG9zaXRpb25NYXAuc2V0KGN1cnJlbnRQb3NpdGlvbiwgeyB0YWI6IHN0YXRpY1RhYi50YWIsIGlzQ29uZmlnOiBmYWxzZSwgaWQ6IHN0YXRpY1RhYi5pZCB9KTtcclxuXHRcdFx0c3RhdGljSW5kZXgrKztcclxuXHRcdFx0Y3VycmVudFBvc2l0aW9uKys7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYnVpbGQgb3JkZXJlZCBhcnJheVxyXG5cdFx0Y29uc3Qgc29ydGVkUG9zaXRpb25zID0gQXJyYXkuZnJvbShwb3NpdGlvbk1hcC5rZXlzKCkpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcclxuXHRcdGNvbnN0IHJlb3JkZXJlZFRhYnM6IGFueVtdID0gW107XHJcblx0XHRjb25zdCByZW9yZGVyZWRIZWFkZXJzOiBIVE1MRWxlbWVudFtdID0gW107XHJcblxyXG5cdFx0c29ydGVkUG9zaXRpb25zLmZvckVhY2goKHBvc2l0aW9uKSA9PiB7XHJcblx0XHRcdGNvbnN0IHRhYkluZm8gPSBwb3NpdGlvbk1hcC5nZXQocG9zaXRpb24pITtcclxuXHRcdFx0cmVvcmRlcmVkVGFicy5wdXNoKHRhYkluZm8udGFiKTtcclxuXHJcblx0XHRcdGNvbnN0IG9yaWdpbmFsSW5kZXggPSBhbGxUYWJzLmluZGV4T2YodGFiSW5mby50YWIpO1xyXG5cdFx0XHRpZiAob3JpZ2luYWxJbmRleCAhPT0gLTEgJiYgbmF2TGlzdC5jaGlsZHJlbltvcmlnaW5hbEluZGV4XSkge1xyXG5cdFx0XHRcdHJlb3JkZXJlZEhlYWRlcnMucHVzaChuYXZMaXN0LmNoaWxkcmVuW29yaWdpbmFsSW5kZXhdIGFzIEhUTUxFbGVtZW50KTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gcmVvcmRlciB0YWJzIGFycmF5XHJcblx0XHR0aGlzLmRldGFpbENvbXBvbmVudC50YWJWaWV3LnRhYnMubGVuZ3RoID0gMDtcclxuXHRcdHJlb3JkZXJlZFRhYnMuZm9yRWFjaCgodGFiKSA9PiB0aGlzLmRldGFpbENvbXBvbmVudC50YWJWaWV3IS50YWJzLnB1c2godGFiKSk7XHJcblxyXG5cdFx0Ly8gcmVvcmRlciBkb20gaGVhZGVyc1xyXG5cdFx0cmVvcmRlcmVkSGVhZGVycy5mb3JFYWNoKChoZWFkZXIsIG5ld0luZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IHRhcmdldEhlYWRlciA9IG5hdkxpc3QuY2hpbGRyZW5bbmV3SW5kZXhdO1xyXG5cdFx0XHRpZiAodGFyZ2V0SGVhZGVyICYmIHRhcmdldEhlYWRlciAhPT0gaGVhZGVyKSB7XHJcblx0XHRcdFx0bmF2TGlzdC5pbnNlcnRCZWZvcmUoaGVhZGVyLCB0YXJnZXRIZWFkZXIpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCF0YXJnZXRIZWFkZXIpIHtcclxuXHRcdFx0XHRuYXZMaXN0LmFwcGVuZENoaWxkKGhlYWRlcik7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIHJlb3JkZXIgZG9tIHBhbmVsc1xyXG5cdFx0Y29uc3QgcGFuZWxzQ29udGFpbmVyID0gYWxsVGFic1swXT8uZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG5cdFx0aWYgKHBhbmVsc0NvbnRhaW5lcikge1xyXG5cdFx0XHRyZW9yZGVyZWRUYWJzLmZvckVhY2goKHRhYlBhbmVsLCBuZXdJbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHRhcmdldFBhbmVsID0gcGFuZWxzQ29udGFpbmVyLmNoaWxkcmVuW25ld0luZGV4XTtcclxuXHRcdFx0XHRpZiAodGFyZ2V0UGFuZWwgJiYgdGFyZ2V0UGFuZWwgIT09IHRhYlBhbmVsLmVsLm5hdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdHBhbmVsc0NvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFiUGFuZWwuZWwubmF0aXZlRWxlbWVudCwgdGFyZ2V0UGFuZWwpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoIXRhcmdldFBhbmVsKSB7XHJcblx0XHRcdFx0XHRwYW5lbHNDb250YWluZXIuYXBwZW5kQ2hpbGQodGFiUGFuZWwuZWwubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5kZXRhaWxDb21wb25lbnQudGFiVmlldy5jZCkge1xyXG5cdFx0XHR0aGlzLmRldGFpbENvbXBvbmVudC50YWJWaWV3LmNkLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhY3RpdmF0ZVRhYkZyb21VcmwoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMuZGV0YWlsQ29tcG9uZW50LnRhYlZpZXcpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBhY3RpdmVUYWJQYXJhbSA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ2FjdGl2ZVRhYicpO1xyXG5cdFx0aWYgKGFjdGl2ZVRhYlBhcmFtKSB7XHJcblx0XHRcdGNvbnN0IGFjdGl2ZVRhYkluZGV4ID0gTnVtYmVyKGFjdGl2ZVRhYlBhcmFtKTtcclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHQhaXNOYU4oYWN0aXZlVGFiSW5kZXgpICYmXHJcblx0XHRcdFx0YWN0aXZlVGFiSW5kZXggPj0gMCAmJlxyXG5cdFx0XHRcdHRoaXMuZGV0YWlsQ29tcG9uZW50LnRhYlZpZXcudGFicyAmJlxyXG5cdFx0XHRcdGFjdGl2ZVRhYkluZGV4IDwgdGhpcy5kZXRhaWxDb21wb25lbnQudGFiVmlldy50YWJzLmxlbmd0aFxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHR0aGlzLmRldGFpbENvbXBvbmVudC50YWJWaWV3LmFjdGl2ZUluZGV4ID0gYWN0aXZlVGFiSW5kZXg7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlTWVudShtZW51Q29uZmlnOiBEZXRhaWxDb25maWdNZW51SXRlbVtdKSB7XHJcblx0XHRjb25zdCBjb250ZXh0ID0ge1xyXG5cdFx0XHRyb3V0ZXI6IHRoaXMucm91dGVyLFxyXG5cdFx0XHRyb3V0ZTogdGhpcy5yb3V0ZSxcclxuXHRcdFx0ZGlhbG9nU2VydmljZTogdGhpcy5kaWFsb2dTZXJ2aWNlLFxyXG5cdFx0XHRjb21wb25lbnQ6IHRoaXMuZGV0YWlsQ29tcG9uZW50XHJcblx0XHR9O1xyXG5cclxuXHRcdGNvbnN0IGFjdGl2ZUxhbmcgPSB0aGlzLnRyYW5zbG9jb1NlcnZpY2UuZ2V0QWN0aXZlTGFuZygpO1xyXG5cdFx0Y29uc3QgZHluYW1pY01lbnU6IE1lbnVJdGVtW10gPSBtZW51Q29uZmlnLm1hcCgobSkgPT4gKHtcclxuXHRcdFx0bGFiZWw6IG0ubGFiZWxbYWN0aXZlTGFuZ10gPz8gJycsXHJcblx0XHRcdGljb246IG0uaWNvbixcclxuXHRcdFx0Y29tbWFuZDogKF9ldmVudDogYW55KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY29tbWFuZEZuID0gbmV3IEZ1bmN0aW9uKCdjdHgnLCBtLmNvbW1hbmQpO1xyXG5cdFx0XHRcdGNvbW1hbmRGbihjb250ZXh0KShjb250ZXh0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSkpO1xyXG5cclxuXHRcdC8vIFVwZGF0ZSB0aGUgZXhpc3Rpbmcgc2lnbmFsIGluc3RlYWQgb2YgcmVwbGFjaW5nIGl0IHRvIGVuc3VyZSBjaGFuZ2VcclxuXHRcdC8vIGRldGVjdGlvbiBwaWNrcyB1cCB0aGUgbWVudSB1cGRhdGUgYWZ0ZXIgYnJvd3NlciBiYWNrIG5hdmlnYXRpb24uXHJcblx0XHRjb25zdCBnZW5lcmFsTWVudVNpZ25hbCA9IHRoaXMuZGV0YWlsQ29tcG9uZW50Lm1kSW5mb1BsdWdpblByb3BzLmdlbmVyYWxNZW51IGFzIGFueTtcclxuXHRcdGNvbnN0IGV4aXN0aW5nTWVudTogTWVudUl0ZW1bXSA9IGdlbmVyYWxNZW51U2lnbmFsKCk7XHJcblxyXG5cdFx0Ly8gQXZvaWQgZHVwbGljYXRpbmcgcHJldmlvdXNseSBhZGRlZCBkeW5hbWljIGl0ZW1zIChpZGVudGlmaWVkIGJ5IGxhYmVsL2ljb24gbWF0Y2gpXHJcblx0XHRjb25zdCBtZXJnZWRNZW51ID0gW1xyXG5cdFx0XHQuLi5leGlzdGluZ01lbnUuZmlsdGVyKChpdGVtKSA9PiAhZHluYW1pY01lbnUuc29tZSgoZHluKSA9PiBkeW4ubGFiZWwgPT09IGl0ZW0ubGFiZWwgJiYgZHluLmljb24gPT09IGl0ZW0uaWNvbikpLFxyXG5cdFx0XHQuLi5keW5hbWljTWVudVxyXG5cdFx0XTtcclxuXHJcblx0XHRpZiAoZ2VuZXJhbE1lbnVTaWduYWw/LnNldCkge1xyXG5cdFx0XHRnZW5lcmFsTWVudVNpZ25hbC5zZXQobWVyZ2VkTWVudSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmRldGFpbENvbXBvbmVudC5tZEluZm9QbHVnaW5Qcm9wcy5nZW5lcmFsTWVudSA9IHNpZ25hbChtZXJnZWRNZW51KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './detail-page-customization.directive';
2
+ export * from './models';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3V0aWwvZGlyZWN0aXZlcy9zcmMvZGV0YWlsLXBhZ2UtY3VzdG9taXphdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kZXRhaWwtcGFnZS1jdXN0b21pemF0aW9uLmRpcmVjdGl2ZSc7IFxyXG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7Il19
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const DETAIL_COMPONENT = new InjectionToken('DETAIL_COMPONENT');
3
+ export const PLUGIN_DIALOG_SERVICE = new InjectionToken('PLUGIN_DIALOG_SERVICE');
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91dGlsL2RpcmVjdGl2ZXMvc3JjL2RldGFpbC1wYWdlLWN1c3RvbWl6YXRpb24vbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFrQnZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFrQixrQkFBa0IsQ0FBQyxDQUFDO0FBQ3hGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFDLHVCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVGFiVmlldyB9IGZyb20gJ3ByaW1lbmcvdGFidmlldyc7XHJcblxyXG5pbXBvcnQgeyBzb2xpZEljb25zIH0gZnJvbSAnYXJpbC91dGlsL2xpYic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERldGFpbENvbXBvbmVudCB7XHJcblx0bWRJbmZvUGx1Z2luUHJvcHM6IHtcclxuXHRcdGdlbmVyYWxNZW51OiBTaWduYWw8TWVudUl0ZW1bXT47XHJcblx0fTtcclxuXHQvLyBzaWduYWxzIGZvciByZWFjdGl2ZSB1cGRhdGVzXHJcblx0Y29uZmlnVGFiczogU2lnbmFsPFRhYkNvbmZpZ1tdPjtcclxuXHRhY3RpdmVUYWJDb21wb25lbnRzOiBTaWduYWw8VGFiQ29uZmlnWydjb21wb25lbnRzJ10+O1xyXG5cdHRhYnM6IFRhYkNvbmZpZ1tdO1xyXG5cdHRhYlZpZXc/OiBUYWJWaWV3O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgREVUQUlMX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEZXRhaWxDb21wb25lbnQ+KCdERVRBSUxfQ09NUE9ORU5UJyk7XHJcbmV4cG9ydCBjb25zdCBQTFVHSU5fRElBTE9HX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ1BMVUdJTl9ESUFMT0dfU0VSVklDRScpO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUYWJDb25maWcge1xyXG5cdGlkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsO1xyXG5cdGhlYWRlcjogc3RyaW5nO1xyXG5cdGljb246IGtleW9mIHR5cGVvZiBzb2xpZEljb25zO1xyXG5cdHZpc2libGU6IGJvb2xlYW47XHJcblx0cG9zaXRpb246IG51bWJlcjtcclxuXHRjb21wb25lbnRzOiBBcnJheTx7XHJcblx0XHRpZDogc3RyaW5nIHwgbnVsbDtcclxuXHRcdHBsdWdpbk5hbWU6IHN0cmluZztcclxuXHRcdHZpc2libGU6IGJvb2xlYW47XHJcblx0XHRvcmRlcj86IG51bWJlcjtcclxuXHR9PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEZXRhaWxDb25maWdNZW51SXRlbSB7XHJcblx0bGFiZWw6IHtcclxuXHRcdFtrZXk6IHN0cmluZ106IHN0cmluZztcclxuXHR9O1xyXG5cdGNvbW1hbmQ6IHN0cmluZztcclxuXHRpY29uOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGV0YWlsQ29uZmlnIHtcclxuXHRtZW51OiBBcnJheTxEZXRhaWxDb25maWdNZW51SXRlbT47XHJcblx0dGFiczogQXJyYXk8e1xyXG5cdFx0aWQ6IHN0cmluZyB8IG51bGw7XHJcblx0XHRpY29uOiBrZXlvZiB0eXBlb2Ygc29saWRJY29ucztcclxuXHRcdGxhYmVsPzoge1xyXG5cdFx0XHRba2V5OiBzdHJpbmddOiBzdHJpbmc7XHJcblx0XHR9O1xyXG5cdFx0dmlzaWJsZTogYm9vbGVhbjtcclxuXHRcdHBvc2l0aW9uOiBudW1iZXI7XHJcblx0XHRjb21wb25lbnRzOiBBcnJheTx7XHJcblx0XHRcdGlkOiBzdHJpbmcgfCBudWxsO1xyXG5cdFx0XHRwbHVnaW5OYW1lOiBzdHJpbmc7XHJcblx0XHRcdHZpc2libGU6IGJvb2xlYW47XHJcblx0XHRcdG9yZGVyPzogbnVtYmVyO1xyXG5cdFx0fT47XHJcblx0fT47XHJcbn1cclxuIl19
@@ -0,0 +1,25 @@
1
+ import { Component } from '@angular/core';
2
+ import { ModuleFederationToolsModule } from '@angular-architects/module-federation-tools';
3
+ import { PLUGINS } from 'aril/boot/config/plugins';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "primeng/dynamicdialog";
6
+ import * as i2 from "@angular-architects/module-federation-tools";
7
+ export class CustomizedPluginDialogComponent {
8
+ constructor(dialogConfig) {
9
+ this.dialogConfig = dialogConfig;
10
+ this.PLUGINS = PLUGINS;
11
+ this.dialogConfig.draggable = true;
12
+ this.name = this.dialogConfig.data;
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CustomizedPluginDialogComponent, deps: [{ token: i1.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: CustomizedPluginDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `<mft-wc-wrapper [options]="PLUGINS[name].options" />`, isInline: true, dependencies: [{ kind: "ngmodule", type: ModuleFederationToolsModule }, { kind: "component", type: i2.WebComponentWrapper, selector: "mft-wc-wrapper", inputs: ["options", "props", "events"] }] }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CustomizedPluginDialogComponent, decorators: [{
18
+ type: Component,
19
+ args: [{
20
+ standalone: true,
21
+ imports: [ModuleFederationToolsModule],
22
+ template: `<mft-wc-wrapper [options]="PLUGINS[name].options" />`
23
+ }]
24
+ }], ctorParameters: () => [{ type: i1.DynamicDialogConfig }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3V0aWwvZGlyZWN0aXZlcy9zcmMvZGlhbG9nLWNvbXBvbmVudC9wbHVnaW4tZGlhbG9nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRTFGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQU9uRCxNQUFNLE9BQU8sK0JBQStCO0lBSTNDLFlBQTZCLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUY5RCxZQUFPLEdBQUcsT0FBTyxDQUFDO1FBR2pCLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQ3BDLENBQUM7OEdBUFcsK0JBQStCO2tHQUEvQiwrQkFBK0Isd0VBRmpDLHNEQUFzRCwyREFEdEQsMkJBQTJCOzsyRkFHekIsK0JBQStCO2tCQUwzQyxTQUFTO21CQUFDO29CQUNWLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDdEMsUUFBUSxFQUFFLHNEQUFzRDtpQkFDaEUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgTW9kdWxlRmVkZXJhdGlvblRvb2xzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXItYXJjaGl0ZWN0cy9tb2R1bGUtZmVkZXJhdGlvbi10b29scyc7XHJcblxyXG5pbXBvcnQgeyBQTFVHSU5TIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9wbHVnaW5zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW01vZHVsZUZlZGVyYXRpb25Ub29sc01vZHVsZV0sXHJcblx0dGVtcGxhdGU6IGA8bWZ0LXdjLXdyYXBwZXIgW29wdGlvbnNdPVwiUExVR0lOU1tuYW1lXS5vcHRpb25zXCIgLz5gXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21pemVkUGx1Z2luRGlhbG9nQ29tcG9uZW50IHtcclxuXHRuYW1lOiBzdHJpbmc7XHJcblx0UExVR0lOUyA9IFBMVUdJTlM7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnKSB7XHJcblx0XHR0aGlzLmRpYWxvZ0NvbmZpZy5kcmFnZ2FibGUgPSB0cnVlO1xyXG5cdFx0dGhpcy5uYW1lID0gdGhpcy5kaWFsb2dDb25maWcuZGF0YTtcclxuXHR9XHJcbn1cclxuIl19
@@ -0,0 +1,16 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DialogService } from 'primeng/dynamicdialog';
3
+ import { CustomizedPluginDialogComponent } from '../dialog-component/plugin-dialog.component';
4
+ import * as i0 from "@angular/core";
5
+ export class CustomizedPluginDialogService extends DialogService {
6
+ openDialog(config) {
7
+ return super.open(CustomizedPluginDialogComponent, config);
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CustomizedPluginDialogService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
10
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CustomizedPluginDialogService, providedIn: 'root' }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CustomizedPluginDialogService, decorators: [{
13
+ type: Injectable,
14
+ args: [{ providedIn: 'root' }]
15
+ }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWRpYWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91dGlsL2RpcmVjdGl2ZXMvc3JjL2RpYWxvZy1zZXJ2aWNlL3BsdWdpbi1kaWFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxhQUFhLEVBQXlDLE1BQU0sdUJBQXVCLENBQUM7QUFFN0YsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBRzlGLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxhQUFhO0lBQy9ELFVBQVUsQ0FBQyxNQUEyQjtRQUNyQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUQsQ0FBQzs4R0FIVyw2QkFBNkI7a0hBQTdCLDZCQUE2QixjQURoQixNQUFNOzsyRkFDbkIsNkJBQTZCO2tCQUR6QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgQ3VzdG9taXplZFBsdWdpbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZy1jb21wb25lbnQvcGx1Z2luLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbWl6ZWRQbHVnaW5EaWFsb2dTZXJ2aWNlIGV4dGVuZHMgRGlhbG9nU2VydmljZSB7XHJcblx0b3BlbkRpYWxvZyhjb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcpOiBEeW5hbWljRGlhbG9nUmVmIHtcclxuXHRcdHJldHVybiBzdXBlci5vcGVuKEN1c3RvbWl6ZWRQbHVnaW5EaWFsb2dDb21wb25lbnQsIGNvbmZpZyk7XHJcblx0fVxyXG59XHJcbiJdfQ==
@@ -93,8 +93,7 @@ const loadApiConfigs = (httpClient, keycloak, appName, microAppService) => () =>
93
93
  function setApiConfigOnMFEMode(httpClient, keycloak, appName) {
94
94
  return () => {
95
95
  const observable$ = httpClient
96
- .get(isDevMode() ? './assets/local-configs/api.local.json'
97
- : './api.json')
96
+ .get(isDevMode() ? './assets/local-configs/api.local.json' : './api.json')
98
97
  .pipe(tap((configs) => {
99
98
  Object.assign(API_CONFIGS, { ...configs });
100
99
  if (appName !== Apps.THOR && appName !== Apps.YEAP) {
@@ -104,10 +103,23 @@ function setApiConfigOnMFEMode(httpClient, keycloak, appName) {
104
103
  return firstValueFrom(observable$);
105
104
  };
106
105
  }
106
+ const loadInitData = (httpClient) => () => new Promise((resolve, _reject) => {
107
+ const endpoint = API_CONFIGS.api + '/ui-route-content-configs/all';
108
+ httpClient.get(endpoint).subscribe({
109
+ next: (data) => {
110
+ globalThis.routeConfigs = data;
111
+ resolve();
112
+ },
113
+ error: (err) => {
114
+ console.error(`Failed to load init data from ${endpoint}:`, err);
115
+ resolve();
116
+ }
117
+ });
118
+ });
107
119
 
108
120
  /**
109
121
  * Generated bundle index. Do not edit.
110
122
  */
111
123
 
112
- export { API_CONFIGS, loadApiConfigs, setApiConfigOnMFEMode };
124
+ export { API_CONFIGS, loadApiConfigs, loadInitData, setApiConfigOnMFEMode };
113
125
  //# sourceMappingURL=aril-boot-config-api.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"aril-boot-config-api.mjs","sources":["../../projects/aril/boot/config/api/src/interfaces.ts","../../projects/aril/boot/config/api/src/api.service.ts","../../projects/aril/boot/config/api/aril-boot-config-api.ts"],"sourcesContent":["export enum Apps {\r\n\tTHOR = 'thor',\r\n\tCRM = 'crm',\r\n\tWDM = 'wdm',\r\n\tBILLING = 'billing',\r\n\tPAYMENT = 'payment',\r\n\tYEAP = 'yeap',\r\n\tMW = 'mw',\r\n\tLENA = 'lena',\r\n\tHES = 'hes',\r\n\tCTS = 'cts',\r\n\tSIS = 'sis',\r\n\tMNG = 'mng',\r\n\tMDM = 'mdm',\r\n\tSTATE_MACHINE = 'state-machine',\r\n\tREPORT = 'report',\r\n\tLGC = 'lgc',\r\n\tDMS = 'dms'\r\n}\r\n\r\nexport enum AppsRoutes {\r\n\tMNG_BASE_URL = 'mngBaseUrl',\r\n}\r\n\r\nexport interface KeycloakConfig {\r\n\turl: string;\r\n\trealm: string;\r\n\tclientId: string;\r\n}\r\n\r\nexport class ApiConfigsFactory {\r\n\tapi: string = '';\r\n\tfromMail: string = '';\r\n\tmwApi: string = '';\r\n\taiApi: string = '';\r\n\tstatusApi: string = '';\r\n\tkeycloak!: Keycloak.KeycloakConfig;\r\n\troutes: Record<AppsRoutes, string> = {\r\n\t\tmngBaseUrl: '',\r\n\t};\r\n\tprefixMap: Record<Apps, string> = {\r\n\t\t[Apps.THOR]: '',\r\n\t\t[Apps.CRM]: '',\r\n\t\t[Apps.WDM]: '',\r\n\t\t[Apps.BILLING]: '',\r\n\t\t[Apps.PAYMENT]: '',\r\n\t\t[Apps.YEAP]: '',\r\n\t\t[Apps.MW]: '',\r\n\t\t[Apps.LENA]: '',\r\n\t\t[Apps.HES]: '',\r\n\t\t[Apps.CTS]: '',\r\n\t\t[Apps.SIS]: '',\r\n\t\t[Apps.MNG]: '',\r\n\t\t[Apps.STATE_MACHINE]: '',\r\n\t\t[Apps.MDM]:'',\r\n\t\t[Apps.REPORT]: '',\r\n\t\t[Apps.LGC]: '',\r\n\t\t[Apps.DMS]: ''\r\n\t};\r\n\tgetExternalAppEndpoint(appName: Apps): string {\r\n\t\tconst prefix = this.prefixMap[appName] || this.prefixMap[Apps.MNG];\r\n\t\treturn `${new URL(this.api).origin}/${prefix}`;\r\n\t}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { isDevMode, signal } from '@angular/core';\r\n\r\nimport { KeycloakEventType, KeycloakService } from 'keycloak-angular';\r\nimport { EMPTY, finalize, firstValueFrom, from, switchMap, tap } from 'rxjs';\r\n\r\nimport { MicroAppService } from 'aril/boot/config/apps';\r\n\r\nimport { ApiConfigsFactory, Apps } from './interfaces';\r\n\r\nexport const API_CONFIGS = new ApiConfigsFactory();\r\n\r\nexport const loadApiConfigs =\r\n\t(httpClient: HttpClient, keycloak: KeycloakService, appName: string, microAppService?: MicroAppService) => () =>\r\n\t\tnew Promise<void>((resolve) =>\r\n\t\t\thttpClient\r\n\t\t\t\t.get<ApiConfigsFactory>(isDevMode() ? './assets/local-configs/api.local.json' : './api.json')\r\n\t\t\t\t.pipe(\r\n\t\t\t\t\tswitchMap((configs) => {\r\n\t\t\t\t\t\t(globalThis as any).hostMenuItems = signal([]);\r\n\t\t\t\t\t\t(globalThis as any).pluginJson = {};\r\n\r\n\t\t\t\t\t\tObject.assign(API_CONFIGS, { ...configs });\r\n\r\n\t\t\t\t\t\treturn from(\r\n\t\t\t\t\t\t\tkeycloak.init({\r\n\t\t\t\t\t\t\t\tconfig: API_CONFIGS.keycloak,\r\n\t\t\t\t\t\t\t\tloadUserProfileAtStartUp: true,\r\n\t\t\t\t\t\t\t\tinitOptions: { onLoad: 'login-required', checkLoginIframe: false },\r\n\t\t\t\t\t\t\t\tbearerExcludedUrls: ['/assets']\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t).pipe(\r\n\t\t\t\t\t\t\tfinalize(() =>\r\n\t\t\t\t\t\t\t\taddEventListener('module-ready', (event) => {\r\n\t\t\t\t\t\t\t\t\tconst app = (event as CustomEvent).detail;\r\n\t\t\t\t\t\t\t\t\tdispatchEvent(new CustomEvent(`${app}:init-keycloak`, { detail: keycloak }));\r\n\r\n\t\t\t\t\t\t\t\t\tkeycloak.keycloakEvents$.subscribe((e) => {\r\n\t\t\t\t\t\t\t\t\t\tif (e.type === KeycloakEventType.OnAuthRefreshSuccess) {\r\n\t\t\t\t\t\t\t\t\t\t\tdispatchEvent(new CustomEvent(`${app}:update-keycloak`, { detail: keycloak }));\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tswitchMap(() => microAppService?.init(httpClient, API_CONFIGS.api) ?? EMPTY)\r\n\t\t\t\t)\r\n\t\t\t\t.subscribe()\r\n\t\t\t\t.add(resolve)\r\n\t\t);\r\n\r\n/**\r\n * only works when isHostMode is true\r\n * micro-app access its own api.json file when opened in host\r\n */\r\nexport function setApiConfigOnMFEMode(\r\n\thttpClient: HttpClient,\r\n\tkeycloak: KeycloakService,\r\n\tappName: Apps\r\n): () => Promise<any> {\r\n\treturn () => {\r\n\t\tconst observable$ = httpClient\r\n\t\t\t.get<ApiConfigsFactory>(\r\n\t\t\t\tisDevMode() ? './assets/local-configs/api.local.json'\r\n\t\t\t\t: './api.json'\r\n\t\t\t)\r\n\t\t\t.pipe(\r\n\t\t\t\ttap((configs) => {\r\n\t\t\t\t\tObject.assign(API_CONFIGS, { ...configs });\r\n\t\t\t\t\tif(appName !== Apps.THOR && appName !== Apps.YEAP){\r\n\t\t\t\t\t\tAPI_CONFIGS.api = API_CONFIGS.getExternalAppEndpoint(appName);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t);\r\n\r\n\t\treturn firstValueFrom(observable$);\r\n\t};\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aril-boot-config-api.mjs","sources":["../../projects/aril/boot/config/api/src/interfaces.ts","../../projects/aril/boot/config/api/src/api.service.ts","../../projects/aril/boot/config/api/aril-boot-config-api.ts"],"sourcesContent":["export enum Apps {\r\n\tTHOR = 'thor',\r\n\tCRM = 'crm',\r\n\tWDM = 'wdm',\r\n\tBILLING = 'billing',\r\n\tPAYMENT = 'payment',\r\n\tYEAP = 'yeap',\r\n\tMW = 'mw',\r\n\tLENA = 'lena',\r\n\tHES = 'hes',\r\n\tCTS = 'cts',\r\n\tSIS = 'sis',\r\n\tMNG = 'mng',\r\n\tMDM = 'mdm',\r\n\tSTATE_MACHINE = 'state-machine',\r\n\tREPORT = 'report',\r\n\tLGC = 'lgc',\r\n\tDMS = 'dms'\r\n}\r\n\r\nexport enum AppsRoutes {\r\n\tMNG_BASE_URL = 'mngBaseUrl',\r\n}\r\n\r\nexport interface KeycloakConfig {\r\n\turl: string;\r\n\trealm: string;\r\n\tclientId: string;\r\n}\r\n\r\nexport class ApiConfigsFactory {\r\n\tapi: string = '';\r\n\tfromMail: string = '';\r\n\tmwApi: string = '';\r\n\taiApi: string = '';\r\n\tstatusApi: string = '';\r\n\tkeycloak!: Keycloak.KeycloakConfig;\r\n\troutes: Record<AppsRoutes, string> = {\r\n\t\tmngBaseUrl: '',\r\n\t};\r\n\tprefixMap: Record<Apps, string> = {\r\n\t\t[Apps.THOR]: '',\r\n\t\t[Apps.CRM]: '',\r\n\t\t[Apps.WDM]: '',\r\n\t\t[Apps.BILLING]: '',\r\n\t\t[Apps.PAYMENT]: '',\r\n\t\t[Apps.YEAP]: '',\r\n\t\t[Apps.MW]: '',\r\n\t\t[Apps.LENA]: '',\r\n\t\t[Apps.HES]: '',\r\n\t\t[Apps.CTS]: '',\r\n\t\t[Apps.SIS]: '',\r\n\t\t[Apps.MNG]: '',\r\n\t\t[Apps.STATE_MACHINE]: '',\r\n\t\t[Apps.MDM]:'',\r\n\t\t[Apps.REPORT]: '',\r\n\t\t[Apps.LGC]: '',\r\n\t\t[Apps.DMS]: ''\r\n\t};\r\n\tgetExternalAppEndpoint(appName: Apps): string {\r\n\t\tconst prefix = this.prefixMap[appName] || this.prefixMap[Apps.MNG];\r\n\t\treturn `${new URL(this.api).origin}/${prefix}`;\r\n\t}\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { isDevMode, signal } from '@angular/core';\r\n\r\nimport { KeycloakEventType, KeycloakService } from 'keycloak-angular';\r\nimport { EMPTY, finalize, firstValueFrom, from, switchMap, tap } from 'rxjs';\r\n\r\nimport { MicroAppService } from 'aril/boot/config/apps';\r\n\r\nimport { ApiConfigsFactory, Apps } from './interfaces';\r\n\r\nexport const API_CONFIGS = new ApiConfigsFactory();\r\n\r\nexport const loadApiConfigs =\r\n\t(httpClient: HttpClient, keycloak: KeycloakService, appName: string, microAppService?: MicroAppService) => () =>\r\n\t\tnew Promise<void>((resolve) =>\r\n\t\t\thttpClient\r\n\t\t\t\t.get<ApiConfigsFactory>(isDevMode() ? './assets/local-configs/api.local.json' : './api.json')\r\n\t\t\t\t.pipe(\r\n\t\t\t\t\tswitchMap((configs) => {\r\n\t\t\t\t\t\t(globalThis as any).hostMenuItems = signal([]);\r\n\t\t\t\t\t\t(globalThis as any).pluginJson = {};\r\n\r\n\t\t\t\t\t\tObject.assign(API_CONFIGS, { ...configs });\r\n\r\n\t\t\t\t\t\treturn from(\r\n\t\t\t\t\t\t\tkeycloak.init({\r\n\t\t\t\t\t\t\t\tconfig: API_CONFIGS.keycloak,\r\n\t\t\t\t\t\t\t\tloadUserProfileAtStartUp: true,\r\n\t\t\t\t\t\t\t\tinitOptions: { onLoad: 'login-required', checkLoginIframe: false },\r\n\t\t\t\t\t\t\t\tbearerExcludedUrls: ['/assets']\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t).pipe(\r\n\t\t\t\t\t\t\tfinalize(() =>\r\n\t\t\t\t\t\t\t\taddEventListener('module-ready', (event) => {\r\n\t\t\t\t\t\t\t\t\tconst app = (event as CustomEvent).detail;\r\n\t\t\t\t\t\t\t\t\tdispatchEvent(new CustomEvent(`${app}:init-keycloak`, { detail: keycloak }));\r\n\r\n\t\t\t\t\t\t\t\t\tkeycloak.keycloakEvents$.subscribe((e) => {\r\n\t\t\t\t\t\t\t\t\t\tif (e.type === KeycloakEventType.OnAuthRefreshSuccess) {\r\n\t\t\t\t\t\t\t\t\t\t\tdispatchEvent(new CustomEvent(`${app}:update-keycloak`, { detail: keycloak }));\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tswitchMap(() => microAppService?.init(httpClient, API_CONFIGS.api) ?? EMPTY)\r\n\t\t\t\t)\r\n\t\t\t\t.subscribe()\r\n\t\t\t\t.add(resolve)\r\n\t\t);\r\n\r\n/**\r\n * only works when isHostMode is true\r\n * micro-app access its own api.json file when opened in host\r\n */\r\nexport function setApiConfigOnMFEMode(\r\n\thttpClient: HttpClient,\r\n\tkeycloak: KeycloakService,\r\n\tappName: Apps\r\n): () => Promise<any> {\r\n\treturn () => {\r\n\t\tconst observable$ = httpClient\r\n\t\t\t.get<ApiConfigsFactory>(isDevMode() ? './assets/local-configs/api.local.json' : './api.json')\r\n\t\t\t.pipe(\r\n\t\t\t\ttap((configs) => {\r\n\t\t\t\t\tObject.assign(API_CONFIGS, { ...configs });\r\n\t\t\t\t\tif (appName !== Apps.THOR && appName !== Apps.YEAP) {\r\n\t\t\t\t\t\tAPI_CONFIGS.api = API_CONFIGS.getExternalAppEndpoint(appName);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t);\r\n\r\n\t\treturn firstValueFrom(observable$);\r\n\t};\r\n}\r\n\r\nexport const loadInitData = (httpClient: HttpClient) => () =>\r\n\tnew Promise<void>((resolve, _reject) => {\r\n\t\tconst endpoint = API_CONFIGS.api + '/ui-route-content-configs/all';\r\n\t\thttpClient.get(endpoint).subscribe({\r\n\t\t\tnext: (data) => {\r\n\t\t\t\t(globalThis as any).routeConfigs = data;\r\n\t\t\t\tresolve();\r\n\t\t\t},\r\n\t\t\terror: (err) => {\r\n\t\t\t\tconsole.error(`Failed to load init data from ${endpoint}:`, err);\r\n\t\t\t\tresolve();\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ import { provideAnimations } from '@angular/platform-browser/animations';
6
6
  import { provideRouter, withComponentInputBinding, withHashLocation, withViewTransitions, withRouterConfig, RouteReuseStrategy, Router } from '@angular/router';
7
7
  import { MessageService, ConfirmationService } from 'primeng/api';
8
8
  import { KeycloakBearerInterceptor, KeycloakAngularModule, KeycloakService } from 'keycloak-angular';
9
- import { loadApiConfigs } from 'aril/boot/config/api';
9
+ import { loadApiConfigs, loadInitData } from 'aril/boot/config/api';
10
10
  import { ArilReuseStrategy, MicroAppService } from 'aril/boot/config/apps';
11
11
  import { loadPlugins } from 'aril/boot/config/plugins';
12
12
  import { acceptLanguageInterceptor } from 'aril/http';
@@ -80,9 +80,11 @@ const boot = (_appName, routes) => {
80
80
  if (router)
81
81
  globalThis.hostRouter = router;
82
82
  const runLoadApiConfigs = loadApiConfigs(httpClient, keycloak, folderName, microAppService);
83
+ const runLoadInitData = loadInitData(httpClient);
83
84
  const runLoadPlugins = loadPlugins();
84
85
  return async () => {
85
86
  await runLoadApiConfigs();
87
+ await runLoadInitData();
86
88
  runLoadPlugins();
87
89
  };
88
90
  },
@@ -1 +1 @@
1
- {"version":3,"file":"aril-boot-host.mjs","sources":["../../projects/aril/boot/host/src/app.component.ts","../../projects/aril/boot/host/src/bootstrap.ts","../../projects/aril/boot/host/aril-boot-host.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, NgZone, inject, signal } from '@angular/core';\r\n\r\nimport { AppLayoutComponent, LayoutService } from 'aril/theme/layout';\r\nimport { PubSubService } from 'aril/util/pub-sub';\r\n\r\nimport { appName } from './bootstrap';\r\n\t\r\ntype MenuMode = 'static' | 'expandable';\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\tselector: 'aril-root',\r\n\ttemplate: ` <app-layout></app-layout> `,\r\n\timports: [AppLayoutComponent]\r\n})\r\nexport class AppComponent {\r\n\tconstructor(\r\n\t\tprivate layoutService: LayoutService,\r\n\t\tprivate pubSubService: PubSubService\r\n\t) {\r\n\t\t(<any>globalThis).activeHost = appName;\r\n\t\t(<any>globalThis).__ARIL_PAGE_TITLE__ = signal('');\r\n\t\t(<any>globalThis).ngZone = inject(NgZone);\r\n\t\t(<any>globalThis).isHostMode = true;\r\n\r\n\t\tthis.pubSubService.subscribe('menuModeChanged', (data) => {\r\n\t\t\tconst menuMode = data?.custom;\r\n\t\t\t\r\n\t\t\tif (menuMode && (menuMode === 'static' || menuMode === 'expandable')) {\t\t\t\t\r\n\t\t\t\tthis.layoutService.config.update((config) => {\r\n\t\t\t\t\tconst newConfig = {\r\n\t\t\t\t\t\t...config,\r\n\t\t\t\t\t\tmenuMode: menuMode as MenuMode\r\n\t\t\t\t\t};\r\n\t\t\t\t\treturn newConfig;\r\n\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\tif (menuMode === 'static') {\r\n\t\t\t\t\tthis.layoutService.state.staticSidebarVisible = true;\r\n\t\t\t\t} else if (menuMode === 'expandable') {\r\n\t\t\t\t\tthis.layoutService.state.staticSidebarVisible = false;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t// Always close mobile menu on mode change\r\n\t\t\t\tthis.layoutService.state.staticMenuMobileActive = false;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import { HttpClient, provideHttpClient, withInterceptors } from '@angular/common/http';\r\nimport { APP_INITIALIZER, ApplicationConfig, importProvidersFrom } from '@angular/core';\r\nimport { bootstrapApplication } from '@angular/platform-browser';\r\nimport { provideAnimations } from '@angular/platform-browser/animations';\r\nimport {\r\n\tRouteReuseStrategy,\r\n\tRouter,\r\n\tRoutes,\r\n\tprovideRouter,\r\n\twithComponentInputBinding,\r\n\twithHashLocation,\r\n\twithRouterConfig,\r\n\twithViewTransitions\r\n} from '@angular/router';\r\n\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\n\r\nimport { KeycloakAngularModule, KeycloakBearerInterceptor, KeycloakService } from 'keycloak-angular';\r\n\r\nimport { loadApiConfigs } from 'aril/boot/config/api';\r\nimport { Apps, ArilReuseStrategy, MicroAppService } from 'aril/boot/config/apps';\r\nimport { loadPlugins } from 'aril/boot/config/plugins';\r\nimport { acceptLanguageInterceptor } from 'aril/http';\r\nimport { i18nFolderName, i18nModule } from 'aril/i18n';\r\nimport { authInterceptor, keycloakAuthInterceptor } from 'aril/keycloak';\r\nimport { provideLocaleId } from 'aril/provider';\r\n\r\nimport { AppComponent } from './app.component';\r\n\r\nexport var appName: Apps;\r\n\r\nexport const boot = (_appName: Apps, routes: Routes) => {\r\n\tappName = _appName;\r\n\tconst appConfig: ApplicationConfig = {\r\n\t\tproviders: [\r\n\t\t\tprovideAnimations(),\r\n\t\t\tprovideLocaleId(),\r\n\t\t\tKeycloakBearerInterceptor,\r\n\t\t\tprovideHttpClient(withInterceptors([acceptLanguageInterceptor, authInterceptor, keycloakAuthInterceptor])),\r\n\t\t\tprovideRouter(\r\n\t\t\t\troutes,\r\n\t\t\t\twithComponentInputBinding(),\r\n\t\t\t\twithHashLocation(),\r\n\t\t\t\twithViewTransitions(),\r\n\t\t\t\twithRouterConfig({ onSameUrlNavigation: 'reload' })\r\n\t\t\t),\r\n\t\t\t{ provide: RouteReuseStrategy, useClass: ArilReuseStrategy },\r\n\t\t\timportProvidersFrom(i18nModule, KeycloakAngularModule),\r\n\t\t\tMessageService,\r\n\t\t\tConfirmationService,\r\n\t\t\t{\r\n\t\t\t\tprovide: APP_INITIALIZER,\r\n\t\t\t\tuseFactory: (\r\n\t\t\t\t\thttpClient: HttpClient,\r\n\t\t\t\t\tkeycloak: KeycloakService,\r\n\t\t\t\t\trouter: Router,\r\n\t\t\t\t\tfolderName: typeof i18nFolderName,\r\n\t\t\t\t\tmicroAppService: MicroAppService\r\n\t\t\t\t) => {\r\n\t\t\t\t\tif (router) (globalThis as any).hostRouter = router;\r\n\r\n\t\t\t\t\tconst runLoadApiConfigs = loadApiConfigs(\r\n\t\t\t\t\t\thttpClient,\r\n\t\t\t\t\t\tkeycloak,\r\n\t\t\t\t\t\tfolderName as unknown as string,\r\n\t\t\t\t\t\tmicroAppService\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst runLoadPlugins = loadPlugins();\r\n\t\t\t\t\treturn async () => {\r\n\t\t\t\t\t\tawait runLoadApiConfigs();\r\n\t\t\t\t\t\trunLoadPlugins();\r\n\t\t\t\t\t};\r\n\t\t\t\t},\r\n\t\t\t\tmulti: true,\r\n\t\t\t\tdeps: [HttpClient, KeycloakService, Router, i18nFolderName, MicroAppService]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tprovide: i18nFolderName,\r\n\t\t\t\tuseValue: 'host'\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\tbootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));\r\n};\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aril-boot-host.mjs","sources":["../../projects/aril/boot/host/src/app.component.ts","../../projects/aril/boot/host/src/bootstrap.ts","../../projects/aril/boot/host/aril-boot-host.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { Component, NgZone, inject, signal } from '@angular/core';\r\n\r\nimport { AppLayoutComponent, LayoutService } from 'aril/theme/layout';\r\nimport { PubSubService } from 'aril/util/pub-sub';\r\n\r\nimport { appName } from './bootstrap';\r\n\t\r\ntype MenuMode = 'static' | 'expandable';\r\n\r\n@Component({\r\n\tstandalone: true,\r\n\tselector: 'aril-root',\r\n\ttemplate: ` <app-layout></app-layout> `,\r\n\timports: [AppLayoutComponent]\r\n})\r\nexport class AppComponent {\r\n\tconstructor(\r\n\t\tprivate layoutService: LayoutService,\r\n\t\tprivate pubSubService: PubSubService\r\n\t) {\r\n\t\t(<any>globalThis).activeHost = appName;\r\n\t\t(<any>globalThis).__ARIL_PAGE_TITLE__ = signal('');\r\n\t\t(<any>globalThis).ngZone = inject(NgZone);\r\n\t\t(<any>globalThis).isHostMode = true;\r\n\r\n\t\tthis.pubSubService.subscribe('menuModeChanged', (data) => {\r\n\t\t\tconst menuMode = data?.custom;\r\n\t\t\t\r\n\t\t\tif (menuMode && (menuMode === 'static' || menuMode === 'expandable')) {\t\t\t\t\r\n\t\t\t\tthis.layoutService.config.update((config) => {\r\n\t\t\t\t\tconst newConfig = {\r\n\t\t\t\t\t\t...config,\r\n\t\t\t\t\t\tmenuMode: menuMode as MenuMode\r\n\t\t\t\t\t};\r\n\t\t\t\t\treturn newConfig;\r\n\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\tif (menuMode === 'static') {\r\n\t\t\t\t\tthis.layoutService.state.staticSidebarVisible = true;\r\n\t\t\t\t} else if (menuMode === 'expandable') {\r\n\t\t\t\t\tthis.layoutService.state.staticSidebarVisible = false;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t// Always close mobile menu on mode change\r\n\t\t\t\tthis.layoutService.state.staticMenuMobileActive = false;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n","import { HttpClient, provideHttpClient, withInterceptors } from '@angular/common/http';\r\nimport { APP_INITIALIZER, ApplicationConfig, importProvidersFrom } from '@angular/core';\r\nimport { bootstrapApplication } from '@angular/platform-browser';\r\nimport { provideAnimations } from '@angular/platform-browser/animations';\r\nimport {\r\n\tRouteReuseStrategy,\r\n\tRouter,\r\n\tRoutes,\r\n\tprovideRouter,\r\n\twithComponentInputBinding,\r\n\twithHashLocation,\r\n\twithRouterConfig,\r\n\twithViewTransitions\r\n} from '@angular/router';\r\n\r\nimport { ConfirmationService, MessageService } from 'primeng/api';\r\n\r\nimport { KeycloakAngularModule, KeycloakBearerInterceptor, KeycloakService } from 'keycloak-angular';\r\n\r\nimport { loadApiConfigs, loadInitData } from 'aril/boot/config/api';\r\nimport { Apps, ArilReuseStrategy, MicroAppService } from 'aril/boot/config/apps';\r\nimport { loadPlugins } from 'aril/boot/config/plugins';\r\nimport { acceptLanguageInterceptor } from 'aril/http';\r\nimport { i18nFolderName, i18nModule } from 'aril/i18n';\r\nimport { authInterceptor, keycloakAuthInterceptor } from 'aril/keycloak';\r\nimport { provideLocaleId } from 'aril/provider';\r\n\r\nimport { AppComponent } from './app.component';\r\n\r\nexport var appName: Apps;\r\n\r\nexport const boot = (_appName: Apps, routes: Routes) => {\r\n\tappName = _appName;\r\n\tconst appConfig: ApplicationConfig = {\r\n\t\tproviders: [\r\n\t\t\tprovideAnimations(),\r\n\t\t\tprovideLocaleId(),\r\n\t\t\tKeycloakBearerInterceptor,\r\n\t\t\tprovideHttpClient(withInterceptors([acceptLanguageInterceptor, authInterceptor, keycloakAuthInterceptor])),\r\n\t\t\tprovideRouter(\r\n\t\t\t\troutes,\r\n\t\t\t\twithComponentInputBinding(),\r\n\t\t\t\twithHashLocation(),\r\n\t\t\t\twithViewTransitions(),\r\n\t\t\t\twithRouterConfig({ onSameUrlNavigation: 'reload' })\r\n\t\t\t),\r\n\t\t\t{ provide: RouteReuseStrategy, useClass: ArilReuseStrategy },\r\n\t\t\timportProvidersFrom(i18nModule, KeycloakAngularModule),\r\n\t\t\tMessageService,\r\n\t\t\tConfirmationService,\r\n\t\t\t{\r\n\t\t\t\tprovide: APP_INITIALIZER,\r\n\t\t\t\tuseFactory: (\r\n\t\t\t\t\thttpClient: HttpClient,\r\n\t\t\t\t\tkeycloak: KeycloakService,\r\n\t\t\t\t\trouter: Router,\r\n\t\t\t\t\tfolderName: typeof i18nFolderName,\r\n\t\t\t\t\tmicroAppService: MicroAppService\r\n\t\t\t\t) => {\r\n\t\t\t\t\tif (router) (globalThis as any).hostRouter = router;\r\n\r\n\t\t\t\t\tconst runLoadApiConfigs = loadApiConfigs(\r\n\t\t\t\t\t\thttpClient,\r\n\t\t\t\t\t\tkeycloak,\r\n\t\t\t\t\t\tfolderName as unknown as string,\r\n\t\t\t\t\t\tmicroAppService\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst runLoadInitData = loadInitData(httpClient);\r\n\t\t\t\t\tconst runLoadPlugins = loadPlugins();\r\n\t\t\t\t\treturn async () => {\r\n\t\t\t\t\t\tawait runLoadApiConfigs();\r\n\t\t\t\t\t\tawait runLoadInitData();\r\n\t\t\t\t\t\trunLoadPlugins();\r\n\t\t\t\t\t};\r\n\t\t\t\t},\r\n\t\t\t\tmulti: true,\r\n\t\t\t\tdeps: [HttpClient, KeycloakService, Router, i18nFolderName, MicroAppService]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tprovide: i18nFolderName,\r\n\t\t\t\tuseValue: 'host'\r\n\t\t\t}\r\n\t\t]\r\n\t};\r\n\r\n\tbootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err));\r\n};\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}