cloud-ide-layout 1.0.8 → 1.0.10

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 (83) hide show
  1. package/README.md +34 -448
  2. package/fesm2022/{cloud-ide-layout-cloud-ide-layout-D3xzVSNA.mjs → cloud-ide-layout-cloud-ide-layout-DLceZY3Y.mjs} +335 -343
  3. package/fesm2022/{cloud-ide-layout-cloud-ide-layout-D3xzVSNA.mjs.map → cloud-ide-layout-cloud-ide-layout-DLceZY3Y.mjs.map} +1 -1
  4. package/fesm2022/{cloud-ide-layout-drawer-theme.component-BSUFE_o2.mjs → cloud-ide-layout-drawer-theme.component-Bn5--C_Q.mjs} +69 -67
  5. package/fesm2022/{cloud-ide-layout-drawer-theme.component-BSUFE_o2.mjs.map → cloud-ide-layout-drawer-theme.component-Bn5--C_Q.mjs.map} +1 -1
  6. package/fesm2022/{cloud-ide-layout-home-wrapper.component-Dr4MO4MB.mjs → cloud-ide-layout-home-wrapper.component-Bo-4LNLx.mjs} +56 -51
  7. package/fesm2022/{cloud-ide-layout-home-wrapper.component-Dr4MO4MB.mjs.map → cloud-ide-layout-home-wrapper.component-Bo-4LNLx.mjs.map} +1 -1
  8. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-BWx03JYS.mjs → cloud-ide-layout-sidedrawer-notes.component-BmadMzdl.mjs} +28 -32
  9. package/fesm2022/{cloud-ide-layout-sidedrawer-notes.component-BWx03JYS.mjs.map → cloud-ide-layout-sidedrawer-notes.component-BmadMzdl.mjs.map} +1 -1
  10. package/fesm2022/cloud-ide-layout.mjs +1 -1
  11. package/index.d.ts +579 -3
  12. package/package.json +4 -6
  13. package/esm2022/cloud-ide-layout.mjs +0 -5
  14. package/esm2022/lib/cloud-ide-layout.component.mjs +0 -16
  15. package/esm2022/lib/cloud-ide-layout.routes.mjs +0 -28
  16. package/esm2022/lib/cloud-ide-layout.service.mjs +0 -14
  17. package/esm2022/lib/layout/console/console-wrapper/console-wrapper.component.mjs +0 -11
  18. package/esm2022/lib/layout/console/console.service.mjs +0 -28
  19. package/esm2022/lib/layout/footer/footer-wrapper/footer-wrapper.component.mjs +0 -20
  20. package/esm2022/lib/layout/footer/footer.service.mjs +0 -28
  21. package/esm2022/lib/layout/header/header-wrapper/header-wrapper.component.mjs +0 -84
  22. package/esm2022/lib/layout/header/header.service.mjs +0 -28
  23. package/esm2022/lib/layout/home/home-wrapper/home-wrapper.component.mjs +0 -198
  24. package/esm2022/lib/layout/layout/layout-wrapper/layout-wrapper.component.mjs +0 -28
  25. package/esm2022/lib/layout/request/request-wrapper/request-wrapper.component.mjs +0 -60
  26. package/esm2022/lib/layout/request/request.service.mjs +0 -235
  27. package/esm2022/lib/layout/request/tab-content/tab-content.component.mjs +0 -84
  28. package/esm2022/lib/layout/shared/shared-wrapper/shared-wrapper.component.mjs +0 -49
  29. package/esm2022/lib/layout/shared/shared.service.mjs +0 -508
  30. package/esm2022/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.mjs +0 -488
  31. package/esm2022/lib/layout/sidebar/sidebar.service.mjs +0 -35
  32. package/esm2022/lib/layout/sidedrawer/cide-lyt-drawer-base.class.mjs +0 -40
  33. package/esm2022/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.mjs +0 -296
  34. package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.mjs +0 -175
  35. package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.mjs +0 -51
  36. package/esm2022/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.mjs +0 -257
  37. package/esm2022/lib/layout/sidedrawer/sidedrawer.service.mjs +0 -70
  38. package/esm2022/lib/services/app-state/app-state-helper.service.mjs +0 -222
  39. package/esm2022/lib/services/app-state/app-state.service.mjs +0 -256
  40. package/esm2022/lib/services/app-state/index.mjs +0 -3
  41. package/esm2022/lib/services/cache-manager/cache-manager.service.mjs +0 -112
  42. package/esm2022/lib/services/file-manager/file-manager.service.mjs +0 -21
  43. package/esm2022/lib/services/tab-state.service.mjs +0 -128
  44. package/esm2022/lib/services/theme/theme.service.mjs +0 -151
  45. package/esm2022/lib/services/user-status/user-status.service.mjs +0 -135
  46. package/esm2022/lib/utils/custom-route-reuse-strategy.mjs +0 -61
  47. package/esm2022/lib/utils/index.mjs +0 -2
  48. package/esm2022/public-api.mjs +0 -18
  49. package/lib/cloud-ide-layout.component.d.ts +0 -5
  50. package/lib/cloud-ide-layout.routes.d.ts +0 -3
  51. package/lib/cloud-ide-layout.service.d.ts +0 -6
  52. package/lib/layout/console/console-wrapper/console-wrapper.component.d.ts +0 -5
  53. package/lib/layout/console/console.service.d.ts +0 -9
  54. package/lib/layout/footer/footer-wrapper/footer-wrapper.component.d.ts +0 -9
  55. package/lib/layout/footer/footer.service.d.ts +0 -9
  56. package/lib/layout/header/header-wrapper/header-wrapper.component.d.ts +0 -25
  57. package/lib/layout/header/header.service.d.ts +0 -9
  58. package/lib/layout/home/home-wrapper/home-wrapper.component.d.ts +0 -94
  59. package/lib/layout/layout/layout-wrapper/layout-wrapper.component.d.ts +0 -5
  60. package/lib/layout/request/request-wrapper/request-wrapper.component.d.ts +0 -14
  61. package/lib/layout/request/request.service.d.ts +0 -60
  62. package/lib/layout/request/tab-content/tab-content.component.d.ts +0 -19
  63. package/lib/layout/shared/shared-wrapper/shared-wrapper.component.d.ts +0 -17
  64. package/lib/layout/shared/shared.service.d.ts +0 -114
  65. package/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.d.ts +0 -140
  66. package/lib/layout/sidebar/sidebar.service.d.ts +0 -12
  67. package/lib/layout/sidedrawer/cide-lyt-drawer-base.class.d.ts +0 -16
  68. package/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.d.ts +0 -71
  69. package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.d.ts +0 -48
  70. package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.d.ts +0 -13
  71. package/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.d.ts +0 -30
  72. package/lib/layout/sidedrawer/sidedrawer.service.d.ts +0 -30
  73. package/lib/services/app-state/app-state-helper.service.d.ts +0 -150
  74. package/lib/services/app-state/app-state.service.d.ts +0 -85
  75. package/lib/services/app-state/index.d.ts +0 -3
  76. package/lib/services/cache-manager/cache-manager.service.d.ts +0 -64
  77. package/lib/services/file-manager/file-manager.service.d.ts +0 -9
  78. package/lib/services/tab-state.service.d.ts +0 -79
  79. package/lib/services/theme/theme.service.d.ts +0 -71
  80. package/lib/services/user-status/user-status.service.d.ts +0 -57
  81. package/lib/utils/custom-route-reuse-strategy.d.ts +0 -15
  82. package/lib/utils/index.d.ts +0 -1
  83. package/public-api.d.ts +0 -12
@@ -1,235 +0,0 @@
1
- import { Injectable, inject, signal, computed } from '@angular/core';
2
- import { Router, RouteReuseStrategy } from '@angular/router';
3
- import { CustomRouteReuseStrategy } from '../../utils/custom-route-reuse-strategy';
4
- import { TabStateService } from '../../services/tab-state.service';
5
- import { CideLytSidedrawerService } from '../sidedrawer/sidedrawer.service';
6
- import { CideLytSharedService } from '../shared/shared.service';
7
- import * as i0 from "@angular/core";
8
- export class CideLytRequestService {
9
- constructor() {
10
- this.requestVisible = false;
11
- // Modern Angular v20+ pattern: Use Signals instead of BehaviorSubject
12
- this.tabsSignal = signal([]);
13
- this.activeTabIdSignal = signal(null);
14
- // Computed signals for derived state and public readonly access
15
- this.tabs = computed(() => this.tabsSignal());
16
- this.activeTabId = computed(() => this.activeTabIdSignal());
17
- this.activeTab = computed(() => this.tabsSignal().find(tab => tab.active));
18
- // Use inject() for all dependencies
19
- this.router = inject(Router);
20
- this.routeReuseStrategy = inject(RouteReuseStrategy);
21
- this.tabStateService = inject(TabStateService);
22
- this.sidedrawerService = inject(CideLytSidedrawerService);
23
- this.sharedService = inject(CideLytSharedService);
24
- // Initialize router
25
- this.router = inject(Router);
26
- this.router.routeReuseStrategy = new CustomRouteReuseStrategy();
27
- // Register tab management callback with shared service to avoid circular dependency
28
- this.sharedService.registerTabManagement(this.handleRouteBasedTabManagement.bind(this));
29
- // Register request visibility callback
30
- this.sharedService.registerRequestVisibility(this.handleRequestVisibility.bind(this));
31
- }
32
- /**
33
- * Handle request visibility changes from shared service
34
- */
35
- handleRequestVisibility(show) {
36
- if (show) {
37
- this.showRequest();
38
- }
39
- else {
40
- this.hideRequest();
41
- }
42
- }
43
- /**
44
- * Handle sidebar sync when tab becomes active
45
- */
46
- handleSidebarSync(tabInfo) {
47
- // The sidebar sync will be handled automatically by the shared service
48
- // when page data is loaded, so we don't need additional logic here
49
- console.log('🔗 REQUEST SERVICE: Tab activated, sidebar sync handled by shared service:', tabInfo.title);
50
- }
51
- /**
52
- * Handle route-based tab management - called by shared service
53
- * This method checks for existing tabs and creates/activates as needed
54
- */
55
- handleRouteBasedTabManagement(currentRoutePath, queryParams, layout, pageData, pageCode) {
56
- console.log('handleRouteBasedTabManagement', currentRoutePath, queryParams, layout, pageData, pageCode);
57
- const currentTabs = this.tabsSignal();
58
- const tabAlreadyExists = currentTabs.find((t) => {
59
- const tRoutePath = t.route.startsWith('/') ? t.route : '/' + t.route;
60
- const tParamsMatch = JSON.stringify(t.params || {}) === JSON.stringify(queryParams || {});
61
- return tRoutePath === currentRoutePath && tParamsMatch;
62
- });
63
- console.log('tabAlreadyExists', tabAlreadyExists);
64
- if (!tabAlreadyExists) {
65
- const title = pageData.data?.page?.sypg_title || pageCode.toString() || 'Untitled Tab';
66
- console.log(`🆕 Adding new tab: ${title}`);
67
- this.addTab(title, currentRoutePath, queryParams, layout);
68
- }
69
- else if (tabAlreadyExists && !tabAlreadyExists.active) {
70
- console.log(`🔄 Activating existing tab: ${tabAlreadyExists.title}`);
71
- this.activateTab(tabAlreadyExists.id);
72
- }
73
- else if (tabAlreadyExists && tabAlreadyExists.active) {
74
- console.log(`🔄 Activating existing tab: ${tabAlreadyExists.title}`);
75
- this.activateTab(tabAlreadyExists.id);
76
- }
77
- }
78
- addTab(title, route, params, layout) {
79
- console.log('addTab', title, route, params, layout);
80
- const id = this.generateId();
81
- const currentTabs = this.tabsSignal();
82
- console.log('currentTabs', currentTabs, route);
83
- // Check if a tab with the same route and params already exists
84
- const existingTab = currentTabs.find((tab) => {
85
- const paramsMatch = JSON.stringify(tab.params || {}) === JSON.stringify(params || {});
86
- return tab.route === route && paramsMatch;
87
- });
88
- console.log('existingTab', existingTab);
89
- if (existingTab) {
90
- this.activateTab(existingTab.id);
91
- return existingTab.id;
92
- }
93
- // Create new tab
94
- const newTab = {
95
- id,
96
- title,
97
- route,
98
- params,
99
- active: true,
100
- layout,
101
- sytm_page_id_sypg: '',
102
- themeId: ''
103
- };
104
- // Deactivate all other tabs
105
- currentTabs.forEach((tab) => tab.active = false);
106
- console.log('currentTabs after deactivate', currentTabs, 'activateTab', id);
107
- // Add new tab
108
- this.tabsSignal.set([...currentTabs, newTab]);
109
- this.activeTabIdSignal.set(id);
110
- // Sync with TabStateService
111
- this.tabStateService.addTab(title, id);
112
- // Request visibility is now controlled by layout configuration in setPageData
113
- // No need to automatically show request wrapper here
114
- // Navigate to the new route
115
- if (params) {
116
- this.router.navigate([route], { queryParams: params });
117
- }
118
- else {
119
- this.router.navigate([route]);
120
- }
121
- return id;
122
- }
123
- activateTab(tabId) {
124
- console.log('🔍 REQUEST SERVICE: Activating tab:', tabId);
125
- const tabs = this.tabsSignal();
126
- const tabToActivate = tabs.find(tab => tab.id === tabId);
127
- if (!tabToActivate) {
128
- console.warn('⚠️ Tab not found:', tabId);
129
- return;
130
- }
131
- // Update tabs: deactivate all, then activate the target
132
- const updatedTabs = tabs.map(tab => ({
133
- ...tab,
134
- active: tab.id === tabId
135
- }));
136
- this.tabsSignal.set(updatedTabs);
137
- this.activeTabIdSignal.set(tabId);
138
- console.log('✅ REQUEST SERVICE: Tab activated:', tabToActivate.title);
139
- // Navigate to the tab's route
140
- this.router.navigate([tabToActivate.route], {
141
- queryParams: tabToActivate.params || {},
142
- replaceUrl: false
143
- });
144
- // Trigger sidebar sync for the activated tab by calling shared service
145
- // The shared service will handle the sidebar sync when the route loads
146
- console.log('🔗 REQUEST SERVICE: Sidebar sync will be handled by route change');
147
- }
148
- closeTab(id) {
149
- const currentTabs = this.tabsSignal();
150
- const tabIndex = currentTabs.findIndex((tab) => tab.id === id);
151
- if (tabIndex === -1)
152
- return;
153
- const tabToClose = currentTabs[tabIndex];
154
- const wasActive = tabToClose.active;
155
- // Sync with TabStateService by removing the tab state
156
- this.tabStateService.removeTab(id);
157
- // Clear stored route from strategy
158
- if (this.routeReuseStrategy instanceof CustomRouteReuseStrategy) {
159
- let pathKey = tabToClose.route.startsWith('/') ? tabToClose.route.substring(1) : tabToClose.route;
160
- if (tabToClose.params && Object.keys(tabToClose.params).length > 0) {
161
- const queryParamsString = Object.keys(tabToClose.params)
162
- .sort()
163
- .map(key => `${key}=${tabToClose.params[key]}`)
164
- .join('&');
165
- pathKey += '?' + queryParamsString;
166
- }
167
- this.routeReuseStrategy.clearStoredRoute(pathKey);
168
- }
169
- // Remove the tab from this service's list
170
- const newTabs = currentTabs.filter((tab) => tab.id !== id);
171
- // If we're closing the active tab, activate the next available tab
172
- if (wasActive && newTabs.length > 0) {
173
- const newActiveIndex = Math.max(0, Math.min(tabIndex, newTabs.length - 1));
174
- const newActiveTab = newTabs[newActiveIndex];
175
- // Update sidedrawer for the new active tab
176
- this.sidedrawerService.updateDrawerItems(newActiveTab.layout);
177
- newTabs[newActiveIndex].active = true;
178
- this.activeTabIdSignal.set(newActiveTab.id);
179
- this.tabStateService.setActiveTab(newActiveTab.id);
180
- // Navigate to the new active tab's route
181
- if (newActiveTab.params) {
182
- this.router.navigate([newActiveTab.route], { queryParams: newActiveTab.params });
183
- }
184
- else {
185
- this.router.navigate([newActiveTab.route]);
186
- }
187
- }
188
- else if (newTabs.length === 0) {
189
- this.activeTabIdSignal.set(null);
190
- this.tabStateService.setActiveTab(null);
191
- // Clear sidedrawer as no tabs are open
192
- this.sidedrawerService.updateDrawerItems(undefined);
193
- }
194
- this.tabsSignal.set(newTabs);
195
- // Request wrapper visibility is now controlled by layout configuration
196
- // The wrapper will be hidden/shown based on sytm_layout_request.status in setPageData
197
- }
198
- // Hide Request
199
- hideRequest() {
200
- console.log('🚫 REQUEST SERVICE - Hiding request wrapper');
201
- this.requestVisible = false;
202
- document.querySelector(`#cide-lyt-request-wrapper`)?.classList.add('cide-lyt-request-wrapper-hide');
203
- document.querySelector(`body`)?.classList.remove('cide-lyt-request-exist');
204
- }
205
- // Show Request
206
- showRequest() {
207
- console.log('✅ REQUEST SERVICE - Showing request wrapper');
208
- this.requestVisible = true;
209
- document.querySelector(`#cide-lyt-request-wrapper`)?.classList.remove('cide-lyt-request-wrapper-hide');
210
- document.querySelector(`body`)?.classList.add('cide-lyt-request-exist');
211
- }
212
- generateId() {
213
- return 'tab-' + Math.random().toString(36).substr(2, 9);
214
- }
215
- updateTabScrollPosition(tabId, scrollTop, scrollLeft) {
216
- const currentTabs = this.tabsSignal();
217
- const tabIndex = currentTabs.findIndex((t) => t.id === tabId);
218
- if (tabIndex !== -1) {
219
- const tabToUpdate = currentTabs[tabIndex];
220
- tabToUpdate.scrollTop = scrollTop;
221
- tabToUpdate.scrollLeft = scrollLeft;
222
- // Create a new array reference to trigger change detection
223
- this.tabsSignal.set([...currentTabs]);
224
- }
225
- }
226
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
227
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestService, providedIn: 'root' }); }
228
- }
229
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestService, decorators: [{
230
- type: Injectable,
231
- args: [{
232
- providedIn: 'root'
233
- }]
234
- }], ctorParameters: () => [] });
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9yZXF1ZXN0L3JlcXVlc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQTBCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQTZCaEUsTUFBTSxPQUFPLHFCQUFxQjtJQW9CaEM7UUFuQk8sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDdkMsc0VBQXNFO1FBQy9ELGVBQVUsR0FBOEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELHNCQUFpQixHQUFrQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkUsZ0VBQWdFO1FBQ3pELFNBQUksR0FBc0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQTBCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLGNBQVMsR0FBZ0MsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUM1RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMs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LEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3ZHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFTyxVQUFVO1FBQ2hCLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBYSxFQUFFLFNBQWlCLEVBQUUsVUFBa0I7UUFDMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDbEMsV0FBVyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDcEMsMkRBQTJEO1lBQzNELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDOzhHQWhRVSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsLCBTaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlUmV1c2VTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZVJldXNlU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi91dGlscy9jdXN0b20tcm91dGUtcmV1c2Utc3RyYXRlZ3knO1xuaW1wb3J0IHsgVGFiU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFiLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2lkZUx5dFNpZGVkcmF3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2lkZWRyYXdlci9zaWRlZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2lkZUx5dFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVN5dG1MYXlvdXQgfSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJJbmZvIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgcm91dGU6IHN0cmluZztcbiAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFjdGl2ZTogYm9vbGVhbjtcbiAgc3l0bV9wYWdlX2lkX3N5cGc6IHN0cmluZztcbiAgdGhlbWVJZDogc3RyaW5nO1xuICBsb2FkZWRDb21wb25lbnQ/OiB1bmtub3duO1xuICBzY3JvbGxUb3A/OiBudW1iZXI7XG4gIHNjcm9sbExlZnQ/OiBudW1iZXI7XG4gIGxheW91dD86IElTeXRtTGF5b3V0O1xufVxuXG4vLyBJbnRlcmZhY2UgZm9yIHBhZ2UgZGF0YSBwYXNzZWQgZnJvbSBzaGFyZWQgc2VydmljZVxuaW50ZXJmYWNlIFBhZ2VEYXRhUmVzcG9uc2Uge1xuICBkYXRhPzoge1xuICAgIHBhZ2U/OiB7XG4gICAgICBzeXBnX3RpdGxlPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENpZGVMeXRSZXF1ZXN0U2VydmljZSB7XG4gIHB1YmxpYyByZXF1ZXN0VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBNb2Rlcm4gQW5ndWxhciB2MjArIHBhdHRlcm46IFVzZSBTaWduYWxzIGluc3RlYWQgb2YgQmVoYXZpb3JTdWJqZWN0XG4gIHB1YmxpYyB0YWJzU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxUYWJJbmZvW10+ID0gc2lnbmFsKFtdKTtcbiAgcHVibGljIGFjdGl2ZVRhYklkU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcbiAgXG4gIC8vIENvbXB1dGVkIHNpZ25hbHMgZm9yIGRlcml2ZWQgc3RhdGUgYW5kIHB1YmxpYyByZWFkb25seSBhY2Nlc3NcbiAgcHVibGljIHRhYnM6IFNpZ25hbDxUYWJJbmZvW10+ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50YWJzU2lnbmFsKCkpO1xuICBwdWJsaWMgYWN0aXZlVGFiSWQ6IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYWN0aXZlVGFiSWRTaWduYWwoKSk7XG4gIHB1YmxpYyBhY3RpdmVUYWI6IFNpZ25hbDxUYWJJbmZvIHwgdW5kZWZpbmVkPiA9IGNvbXB1dGVkKCgpID0+IFxuICAgIHRoaXMudGFic1NpZ25hbCgpLmZpbmQodGFiID0+IHRhYi5hY3RpdmUpXG4gICk7XG5cbiAgLy8gVXNlIGluamVjdCgpIGZvciBhbGwgZGVwZW5kZW5jaWVzXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcm91dGVSZXVzZVN0cmF0ZWd5ID0gaW5qZWN0KFJvdXRlUmV1c2VTdHJhdGVneSk7XG4gIHByaXZhdGUgdGFiU3RhdGVTZXJ2aWNlID0gaW5qZWN0KFRhYlN0YXRlU2VydmljZSk7XG4gIHByaXZhdGUgc2lkZWRyYXdlclNlcnZpY2UgPSBpbmplY3QoQ2lkZUx5dFNpZGVkcmF3ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KENpZGVMeXRTaGFyZWRTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBJbml0aWFsaXplIHJvdXRlclxuICAgIHRoaXMucm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5ID0gbmV3IEN1c3RvbVJvdXRlUmV1c2VTdHJhdGVneSgpO1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHRhYiBtYW5hZ2VtZW50IGNhbGxiYWNrIHdpdGggc2hhcmVkIHNlcnZpY2UgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5yZWdpc3RlclRhYk1hbmFnZW1lbnQodGhpcy5oYW5kbGVSb3V0ZUJhc2VkVGFiTWFuYWdlbWVudC5iaW5kKHRoaXMpKTtcbiAgICBcbiAgICAvLyBSZWdpc3RlciByZXF1ZXN0IHZpc2liaWxpdHkgY2FsbGJhY2tcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UucmVnaXN0ZXJSZXF1ZXN0VmlzaWJpbGl0eSh0aGlzLmhhbmRsZVJlcXVlc3RWaXNpYmlsaXR5LmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSByZXF1ZXN0IHZpc2liaWxpdHkgY2hhbmdlcyBmcm9tIHNoYXJlZCBzZXJ2aWNlXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlcXVlc3RWaXNpYmlsaXR5KHNob3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoc2hvdykge1xuICAgICAgdGhpcy5zaG93UmVxdWVzdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVSZXF1ZXN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzaWRlYmFyIHN5bmMgd2hlbiB0YWIgYmVjb21lcyBhY3RpdmVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlU2lkZWJhclN5bmModGFiSW5mbzogVGFiSW5mbyk6IHZvaWQge1xuICAgIC8vIFRoZSBzaWRlYmFyIHN5bmMgd2lsbCBiZSBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHNoYXJlZCBzZXJ2aWNlXG4gICAgLy8gd2hlbiBwYWdlIGRhdGEgaXMgbG9hZGVkLCBzbyB3ZSBkb24ndCBuZWVkIGFkZGl0aW9uYWwgbG9naWMgaGVyZVxuICAgIGNvbnNvbGUubG9nKCfwn5SXIFJFUVVFU1QgU0VSVklDRTogVGFiIGFjdGl2YXRlZCwgc2lkZWJhciBzeW5jIGhhbmRsZWQgYnkgc2hhcmVkIHNlcnZpY2U6JywgdGFiSW5mby50aXRsZSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHJvdXRlLWJhc2VkIHRhYiBtYW5hZ2VtZW50IC0gY2FsbGVkIGJ5IHNoYXJlZCBzZXJ2aWNlXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgZXhpc3RpbmcgdGFicyBhbmQgY3JlYXRlcy9hY3RpdmF0ZXMgYXMgbmVlZGVkXG4gICAqL1xuICBoYW5kbGVSb3V0ZUJhc2VkVGFiTWFuYWdlbWVudChcbiAgICBjdXJyZW50Um91dGVQYXRoOiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGxheW91dDogSVN5dG1MYXlvdXQsXG4gICAgcGFnZURhdGE6IFBhZ2VEYXRhUmVzcG9uc2UsXG4gICAgcGFnZUNvZGU6IHN0cmluZ1xuICApIHtcbiAgICBjb25zb2xlLmxvZygnaGFuZGxlUm91dGVCYXNlZFRhYk1hbmFnZW1lbnQnLCBjdXJyZW50Um91dGVQYXRoLCBxdWVyeVBhcmFtcywgbGF5b3V0LCBwYWdlRGF0YSwgcGFnZUNvZGUpO1xuICAgIGNvbnN0IGN1cnJlbnRUYWJzID0gdGhpcy50YWJzU2lnbmFsKCk7XG4gICAgY29uc3QgdGFiQWxyZWFkeUV4aXN0cyA9IGN1cnJlbnRUYWJzLmZpbmQoKHQ6IFRhYkluZm8pID0+IHtcbiAgICAgIGNvbnN0IHRSb3V0ZVBhdGggPSB0LnJvdXRlLnN0YXJ0c1dpdGgoJy8nKSA/IHQucm91dGUgOiAnLycgKyB0LnJvdXRlO1xuICAgICAgY29uc3QgdFBhcmFtc01hdGNoID0gSlNPTi5zdHJpbmdpZnkodC5wYXJhbXMgfHwge30pID09PSBKU09OLnN0cmluZ2lmeShxdWVyeVBhcmFtcyB8fCB7fSk7XG4gICAgICByZXR1cm4gdFJvdXRlUGF0aCA9PT0gY3VycmVudFJvdXRlUGF0aCAmJiB0UGFyYW1zTWF0Y2g7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJ3RhYkFscmVhZHlFeGlzdHMnLCB0YWJBbHJlYWR5RXhpc3RzKTtcbiAgICBpZiAoIXRhYkFscmVhZHlFeGlzdHMpIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gcGFnZURhdGEuZGF0YT8ucGFnZT8uc3lwZ190aXRsZSB8fCBwYWdlQ29kZS50b1N0cmluZygpIHx8ICdVbnRpdGxlZCBUYWInO1xuICAgICAgY29uc29sZS5sb2coYPCfhpUgQWRkaW5nIG5ldyB0YWI6ICR7dGl0bGV9YCk7XG4gICAgICB0aGlzLmFkZFRhYih0aXRsZSwgY3VycmVudFJvdXRlUGF0aCwgcXVlcnlQYXJhbXMsIGxheW91dCk7XG4gICAgfSBlbHNlIGlmICh0YWJBbHJlYWR5RXhpc3RzICYmICF0YWJBbHJlYWR5RXhpc3RzLmFjdGl2ZSkge1xuICAgICAgY29uc29sZS5sb2coYPCflIQgQWN0aXZhdGluZyBleGlzdGluZyB0YWI6ICR7dGFiQWxyZWFkeUV4aXN0cy50aXRsZX1gKTtcbiAgICAgIHRoaXMuYWN0aXZhdGVUYWIodGFiQWxyZWFkeUV4aXN0cy5pZCk7XG4gICAgfWVsc2UgaWYgKHRhYkFscmVhZHlFeGlzdHMgJiYgdGFiQWxyZWFkeUV4aXN0cy5hY3RpdmUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGDwn5SEIEFjdGl2YXRpbmcgZXhpc3RpbmcgdGFiOiAke3RhYkFscmVhZHlFeGlzdHMudGl0bGV9YCk7XG4gICAgICB0aGlzLmFjdGl2YXRlVGFiKHRhYkFscmVhZHlFeGlzdHMuaWQpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRhYih0aXRsZTogc3RyaW5nLCByb3V0ZTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbGF5b3V0PzogSVN5dG1MYXlvdXQpOiBzdHJpbmcge1xuICAgIGNvbnNvbGUubG9nKCdhZGRUYWInLCB0aXRsZSwgcm91dGUsIHBhcmFtcywgbGF5b3V0KTtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVJZCgpO1xuICAgIGNvbnN0IGN1cnJlbnRUYWJzID0gdGhpcy50YWJzU2lnbmFsKCk7XG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWJzJywgY3VycmVudFRhYnMsIHJvdXRlKTtcbiAgICAvLyBDaGVjayBpZiBhIHRhYiB3aXRoIHRoZSBzYW1lIHJvdXRlIGFuZCBwYXJhbXMgYWxyZWFkeSBleGlzdHNcbiAgICBjb25zdCBleGlzdGluZ1RhYiA9IGN1cnJlbnRUYWJzLmZpbmQoKHRhYjogVGFiSW5mbykgPT4ge1xuICAgICAgY29uc3QgcGFyYW1zTWF0Y2ggPSBKU09OLnN0cmluZ2lmeSh0YWIucGFyYW1zIHx8IHt9KSA9PT0gSlNPTi5zdHJpbmdpZnkocGFyYW1zIHx8IHt9KTtcbiAgICAgIHJldHVybiB0YWIucm91dGUgPT09IHJvdXRlICYmIHBhcmFtc01hdGNoO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKCdleGlzdGluZ1RhYicsIGV4aXN0aW5nVGFiKTtcbiAgICBpZiAoZXhpc3RpbmdUYWIpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVUYWIoZXhpc3RpbmdUYWIuaWQpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nVGFiLmlkO1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgbmV3IHRhYlxuICAgIGNvbnN0IG5ld1RhYjogVGFiSW5mbyA9IHtcbiAgICAgIGlkLFxuICAgICAgdGl0bGUsXG4gICAgICByb3V0ZSxcbiAgICAgIHBhcmFtcyxcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIGxheW91dCxcbiAgICAgIHN5dG1fcGFnZV9pZF9zeXBnOiAnJyxcbiAgICAgIHRoZW1lSWQ6ICcnXG4gICAgfTtcblxuICAgIC8vIERlYWN0aXZhdGUgYWxsIG90aGVyIHRhYnNcbiAgICBjdXJyZW50VGFicy5mb3JFYWNoKCh0YWI6IFRhYkluZm8pID0+IHRhYi5hY3RpdmUgPSBmYWxzZSk7XG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRUYWJzIGFmdGVyIGRlYWN0aXZhdGUnLCBjdXJyZW50VGFicywgJ2FjdGl2YXRlVGFiJywgaWQpO1xuICAgIC8vIEFkZCBuZXcgdGFiXG4gICAgdGhpcy50YWJzU2lnbmFsLnNldChbLi4uY3VycmVudFRhYnMsIG5ld1RhYl0pO1xuICAgIHRoaXMuYWN0aXZlVGFiSWRTaWduYWwuc2V0KGlkKTtcblxuICAgIC8vIFN5bmMgd2l0aCBUYWJTdGF0ZVNlcnZpY2VcbiAgICB0aGlzLnRhYlN0YXRlU2VydmljZS5hZGRUYWIodGl0bGUsIGlkKTtcbiAgICBcbiAgICAvLyBSZXF1ZXN0IHZpc2liaWxpdHkgaXMgbm93IGNvbnRyb2xsZWQgYnkgbGF5b3V0IGNvbmZpZ3VyYXRpb24gaW4gc2V0UGFnZURhdGFcbiAgICAvLyBObyBuZWVkIHRvIGF1dG9tYXRpY2FsbHkgc2hvdyByZXF1ZXN0IHdyYXBwZXIgaGVyZVxuICAgIFxuICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBuZXcgcm91dGVcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm91dGVdLCB7IHF1ZXJ5UGFyYW1zOiBwYXJhbXMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIGFjdGl2YXRlVGFiKHRhYklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygn8J+UjSBSRVFVRVNUIFNFUlZJQ0U6IEFjdGl2YXRpbmcgdGFiOicsIHRhYklkKTtcbiAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzU2lnbmFsKCk7XG4gICAgY29uc3QgdGFiVG9BY3RpdmF0ZSA9IHRhYnMuZmluZCh0YWIgPT4gdGFiLmlkID09PSB0YWJJZCk7XG4gICAgXG4gICAgaWYgKCF0YWJUb0FjdGl2YXRlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyBUYWIgbm90IGZvdW5kOicsIHRhYklkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGFiczogZGVhY3RpdmF0ZSBhbGwsIHRoZW4gYWN0aXZhdGUgdGhlIHRhcmdldFxuICAgIGNvbnN0IHVwZGF0ZWRUYWJzID0gdGFicy5tYXAodGFiID0+ICh7XG4gICAgICAuLi50YWIsXG4gICAgICBhY3RpdmU6IHRhYi5pZCA9PT0gdGFiSWRcbiAgICB9KSk7XG5cbiAgICB0aGlzLnRhYnNTaWduYWwuc2V0KHVwZGF0ZWRUYWJzKTtcbiAgICB0aGlzLmFjdGl2ZVRhYklkU2lnbmFsLnNldCh0YWJJZCk7XG4gICAgXG4gICAgY29uc29sZS5sb2coJ+KchSBSRVFVRVNUIFNFUlZJQ0U6IFRhYiBhY3RpdmF0ZWQ6JywgdGFiVG9BY3RpdmF0ZS50aXRsZSk7XG5cbiAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgdGFiJ3Mgcm91dGVcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGFiVG9BY3RpdmF0ZS5yb3V0ZV0sIHsgXG4gICAgICBxdWVyeVBhcmFtczogdGFiVG9BY3RpdmF0ZS5wYXJhbXMgfHwge30sXG4gICAgICByZXBsYWNlVXJsOiBmYWxzZSBcbiAgICB9KTtcbiAgICBcbiAgICAvLyBUcmlnZ2VyIHNpZGViYXIgc3luYyBmb3IgdGhlIGFjdGl2YXRlZCB0YWIgYnkgY2FsbGluZyBzaGFyZWQgc2VydmljZVxuICAgIC8vIFRoZSBzaGFyZWQgc2VydmljZSB3aWxsIGhhbmRsZSB0aGUgc2lkZWJhciBzeW5jIHdoZW4gdGhlIHJvdXRlIGxvYWRzXG4gICAgY29uc29sZS5sb2coJ/CflJcgUkVRVUVTVCBTRVJWSUNFOiBTaWRlYmFyIHN5bmMgd2lsbCBiZSBoYW5kbGVkIGJ5IHJvdXRlIGNoYW5nZScpO1xuICB9XG5cbiAgY2xvc2VUYWIoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRUYWJzID0gdGhpcy50YWJzU2lnbmFsKCk7XG4gICAgY29uc3QgdGFiSW5kZXggPSBjdXJyZW50VGFicy5maW5kSW5kZXgoKHRhYjogVGFiSW5mbykgPT4gdGFiLmlkID09PSBpZCk7XG5cbiAgICBpZiAodGFiSW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICBjb25zdCB0YWJUb0Nsb3NlID0gY3VycmVudFRhYnNbdGFiSW5kZXhdO1xuICAgIGNvbnN0IHdhc0FjdGl2ZSA9IHRhYlRvQ2xvc2UuYWN0aXZlO1xuXG4gICAgLy8gU3luYyB3aXRoIFRhYlN0YXRlU2VydmljZSBieSByZW1vdmluZyB0aGUgdGFiIHN0YXRlXG4gICAgdGhpcy50YWJTdGF0ZVNlcnZpY2UucmVtb3ZlVGFiKGlkKTtcblxuICAgIC8vIENsZWFyIHN0b3JlZCByb3V0ZSBmcm9tIHN0cmF0ZWd5XG4gICAgaWYgKHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5IGluc3RhbmNlb2YgQ3VzdG9tUm91dGVSZXVzZVN0cmF0ZWd5KSB7XG4gICAgICBsZXQgcGF0aEtleSA9IHRhYlRvQ2xvc2Uucm91dGUuc3RhcnRzV2l0aCgnLycpID8gdGFiVG9DbG9zZS5yb3V0ZS5zdWJzdHJpbmcoMSkgOiB0YWJUb0Nsb3NlLnJvdXRlO1xuXG4gICAgICBpZiAodGFiVG9DbG9zZS5wYXJhbXMgJiYgT2JqZWN0LmtleXModGFiVG9DbG9zZS5wYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXNTdHJpbmcgPSBPYmplY3Qua2V5cyh0YWJUb0Nsb3NlLnBhcmFtcylcbiAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgLm1hcChrZXkgPT4gYCR7a2V5fT0ke3RhYlRvQ2xvc2UucGFyYW1zIVtrZXldfWApXG4gICAgICAgICAgLmpvaW4oJyYnKTtcbiAgICAgICAgcGF0aEtleSArPSAnPycgKyBxdWVyeVBhcmFtc1N0cmluZztcbiAgICAgIH1cblxuICAgICAgKHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5IGFzIEN1c3RvbVJvdXRlUmV1c2VTdHJhdGVneSkuY2xlYXJTdG9yZWRSb3V0ZShwYXRoS2V5KTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIHRhYiBmcm9tIHRoaXMgc2VydmljZSdzIGxpc3RcbiAgICBjb25zdCBuZXdUYWJzID0gY3VycmVudFRhYnMuZmlsdGVyKCh0YWI6IFRhYkluZm8pID0+IHRhYi5pZCAhPT0gaWQpO1xuXG4gICAgLy8gSWYgd2UncmUgY2xvc2luZyB0aGUgYWN0aXZlIHRhYiwgYWN0aXZhdGUgdGhlIG5leHQgYXZhaWxhYmxlIHRhYlxuICAgIGlmICh3YXNBY3RpdmUgJiYgbmV3VGFicy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdBY3RpdmVJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRhYkluZGV4LCBuZXdUYWJzLmxlbmd0aCAtIDEpKTtcbiAgICAgIGNvbnN0IG5ld0FjdGl2ZVRhYiA9IG5ld1RhYnNbbmV3QWN0aXZlSW5kZXhdO1xuXG4gICAgICAvLyBVcGRhdGUgc2lkZWRyYXdlciBmb3IgdGhlIG5ldyBhY3RpdmUgdGFiXG4gICAgICB0aGlzLnNpZGVkcmF3ZXJTZXJ2aWNlLnVwZGF0ZURyYXdlckl0ZW1zKG5ld0FjdGl2ZVRhYi5sYXlvdXQpO1xuXG4gICAgICBuZXdUYWJzW25ld0FjdGl2ZUluZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5hY3RpdmVUYWJJZFNpZ25hbC5zZXQobmV3QWN0aXZlVGFiLmlkKTtcbiAgICAgIHRoaXMudGFiU3RhdGVTZXJ2aWNlLnNldEFjdGl2ZVRhYihuZXdBY3RpdmVUYWIuaWQpO1xuXG4gICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgbmV3IGFjdGl2ZSB0YWIncyByb3V0ZVxuICAgICAgaWYgKG5ld0FjdGl2ZVRhYi5wYXJhbXMpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25ld0FjdGl2ZVRhYi5yb3V0ZV0sIHsgcXVlcnlQYXJhbXM6IG5ld0FjdGl2ZVRhYi5wYXJhbXMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmV3QWN0aXZlVGFiLnJvdXRlXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXdUYWJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hY3RpdmVUYWJJZFNpZ25hbC5zZXQobnVsbCk7XG4gICAgICB0aGlzLnRhYlN0YXRlU2VydmljZS5zZXRBY3RpdmVUYWIobnVsbCk7XG4gICAgICAvLyBDbGVhciBzaWRlZHJhd2VyIGFzIG5vIHRhYnMgYXJlIG9wZW5cbiAgICAgIHRoaXMuc2lkZWRyYXdlclNlcnZpY2UudXBkYXRlRHJhd2VySXRlbXModW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy50YWJzU2lnbmFsLnNldChuZXdUYWJzKTtcbiAgICAvLyBSZXF1ZXN0IHdyYXBwZXIgdmlzaWJpbGl0eSBpcyBub3cgY29udHJvbGxlZCBieSBsYXlvdXQgY29uZmlndXJhdGlvblxuICAgIC8vIFRoZSB3cmFwcGVyIHdpbGwgYmUgaGlkZGVuL3Nob3duIGJhc2VkIG9uIHN5dG1fbGF5b3V0X3JlcXVlc3Quc3RhdHVzIGluIHNldFBhZ2VEYXRhXG4gIH1cblxuICAvLyBIaWRlIFJlcXVlc3RcbiAgaGlkZVJlcXVlc3QoKSB7XG4gICAgY29uc29sZS5sb2coJ/CfmqsgUkVRVUVTVCBTRVJWSUNFIC0gSGlkaW5nIHJlcXVlc3Qgd3JhcHBlcicpO1xuICAgIHRoaXMucmVxdWVzdFZpc2libGUgPSBmYWxzZTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjY2lkZS1seXQtcmVxdWVzdC13cmFwcGVyYCk/LmNsYXNzTGlzdC5hZGQoJ2NpZGUtbHl0LXJlcXVlc3Qtd3JhcHBlci1oaWRlJyk7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgYm9keWApPy5jbGFzc0xpc3QucmVtb3ZlKCdjaWRlLWx5dC1yZXF1ZXN0LWV4aXN0Jyk7XG4gIH1cblxuICAvLyBTaG93IFJlcXVlc3RcbiAgc2hvd1JlcXVlc3QoKSB7XG4gICAgY29uc29sZS5sb2coJ+KchSBSRVFVRVNUIFNFUlZJQ0UgLSBTaG93aW5nIHJlcXVlc3Qgd3JhcHBlcicpO1xuICAgIHRoaXMucmVxdWVzdFZpc2libGUgPSB0cnVlO1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNjaWRlLWx5dC1yZXF1ZXN0LXdyYXBwZXJgKT8uY2xhc3NMaXN0LnJlbW92ZSgnY2lkZS1seXQtcmVxdWVzdC13cmFwcGVyLWhpZGUnKTtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBib2R5YCk/LmNsYXNzTGlzdC5hZGQoJ2NpZGUtbHl0LXJlcXVlc3QtZXhpc3QnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAndGFiLScgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7XG4gIH1cblxuICB1cGRhdGVUYWJTY3JvbGxQb3NpdGlvbih0YWJJZDogc3RyaW5nLCBzY3JvbGxUb3A6IG51bWJlciwgc2Nyb2xsTGVmdDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFRhYnMgPSB0aGlzLnRhYnNTaWduYWwoKTtcbiAgICBjb25zdCB0YWJJbmRleCA9IGN1cnJlbnRUYWJzLmZpbmRJbmRleCgodDogVGFiSW5mbykgPT4gdC5pZCA9PT0gdGFiSWQpO1xuICAgIGlmICh0YWJJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IHRhYlRvVXBkYXRlID0gY3VycmVudFRhYnNbdGFiSW5kZXhdO1xuICAgICAgdGFiVG9VcGRhdGUuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgdGFiVG9VcGRhdGUuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgdGhpcy50YWJzU2lnbmFsLnNldChbLi4uY3VycmVudFRhYnNdKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,84 +0,0 @@
1
- import { Component, ViewChild, effect } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { NavigationEnd, RouterModule } from '@angular/router';
4
- import { filter } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../request.service";
7
- import * as i2 from "@angular/router";
8
- export class TabContentComponent {
9
- constructor(requestService, router, // Inject Router to listen for NavigationEnd
10
- cdr) {
11
- this.requestService = requestService;
12
- this.router = router;
13
- this.cdr = cdr;
14
- this.currentActiveTabId = null;
15
- this.isRestoringScroll = false; // Flag to prevent saving scroll during restoration attempts
16
- // Modern Angular signal pattern: Use effect to react to active tab changes
17
- effect(() => {
18
- const activeTab = this.requestService.activeTab();
19
- if (activeTab && activeTab.id !== this.currentActiveTabId) {
20
- this.currentActiveTabId = activeTab.id;
21
- // Delay scroll restoration to ensure DOM is ready
22
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
23
- delay(100).then(() => this.restoreScrollPosition(activeTab));
24
- }
25
- });
26
- // Listen to route changes for scroll restoration
27
- this.router.events.pipe(filter(event => event instanceof NavigationEnd)).subscribe({
28
- next: () => {
29
- // Use signal to get active tab after navigation
30
- const activeTab = this.requestService.activeTab();
31
- if (activeTab && activeTab.id !== this.currentActiveTabId) {
32
- this.currentActiveTabId = activeTab.id;
33
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
34
- delay(150).then(() => this.restoreScrollPosition(activeTab));
35
- }
36
- }
37
- });
38
- }
39
- ngAfterViewInit() {
40
- // Initial scroll restoration for the active tab
41
- const activeTab = this.requestService.activeTab();
42
- if (activeTab) {
43
- this.currentActiveTabId = activeTab.id;
44
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
45
- delay(50).then(() => this.restoreScrollPosition(activeTab));
46
- }
47
- }
48
- onScroll() {
49
- if (this.isRestoringScroll || !this.scrollContainerRef || !this.currentActiveTabId) {
50
- return;
51
- }
52
- const { scrollTop, scrollLeft } = this.scrollContainerRef.nativeElement;
53
- this.requestService.updateTabScrollPosition(this.currentActiveTabId, scrollTop, scrollLeft);
54
- }
55
- restoreScrollPosition(tab) {
56
- if (tab && this.scrollContainerRef?.nativeElement) {
57
- this.isRestoringScroll = true;
58
- const container = this.scrollContainerRef.nativeElement;
59
- container.scrollTop = tab.scrollTop ?? 0;
60
- container.scrollLeft = tab.scrollLeft ?? 0;
61
- // Modern ES2022+ pattern: Use Promise-based delay
62
- const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
63
- delay(150).then(() => { this.isRestoringScroll = false; }); // Allow scroll event to settle
64
- }
65
- }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TabContentComponent, deps: [{ token: i1.CideLytRequestService }, { token: i2.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: TabContentComponent, isStandalone: true, selector: "cide-lyt-tab-content", viewQueries: [{ propertyName: "scrollContainerRef", first: true, predicate: ["scrollContainer"], descendants: true }], ngImport: i0, template: `
68
- <div class="tab-content-container" #scrollContainer (scroll)="onScroll()">
69
- <router-outlet></router-outlet>
70
- </div>
71
- `, isInline: true, styles: [":host{height:100%;display:flex;flex-direction:column}.tab-content-container{height:100%;width:100%;position:relative;overflow:auto;display:flex;flex-direction:column;flex:1}::ng-deep router-outlet+*{height:100%;flex:1;display:flex;flex-direction:column}::ng-deep cide-lyt-home-wrapper,::ng-deep cide-adm-home-wrapper,::ng-deep cide-adm-entity,::ng-deep cide-adm-entity-list{height:100%!important;flex:1!important;display:flex!important;flex-direction:column!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
72
- }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TabContentComponent, decorators: [{
74
- type: Component,
75
- args: [{ selector: 'cide-lyt-tab-content', standalone: true, imports: [CommonModule, RouterModule], template: `
76
- <div class="tab-content-container" #scrollContainer (scroll)="onScroll()">
77
- <router-outlet></router-outlet>
78
- </div>
79
- `, styles: [":host{height:100%;display:flex;flex-direction:column}.tab-content-container{height:100%;width:100%;position:relative;overflow:auto;display:flex;flex-direction:column;flex:1}::ng-deep router-outlet+*{height:100%;flex:1;display:flex;flex-direction:column}::ng-deep cide-lyt-home-wrapper,::ng-deep cide-adm-home-wrapper,::ng-deep cide-adm-entity,::ng-deep cide-adm-entity-list{height:100%!important;flex:1!important;display:flex!important;flex-direction:column!important}\n"] }]
80
- }], ctorParameters: () => [{ type: i1.CideLytRequestService }, { type: i2.Router }, { type: i0.ChangeDetectorRef }], propDecorators: { scrollContainerRef: [{
81
- type: ViewChild,
82
- args: ['scrollContainer']
83
- }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWNvbnRlbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9yZXF1ZXN0L3RhYi1jb250ZW50L3RhYi1jb250ZW50LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFNBQVMsRUFBb0MsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFVLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQWdEeEMsTUFBTSxPQUFPLG1CQUFtQjtJQU05QixZQUNVLGNBQXFDLEVBQ3JDLE1BQWMsRUFBRSw0Q0FBNEM7SUFDNUQsR0FBc0I7UUFGdEIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQU54Qix1QkFBa0IsR0FBa0IsSUFBSSxDQUFDO1FBQ3pDLHNCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLDREQUE0RDtRQU83RiwyRUFBMkU7UUFDM0UsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLGtEQUFrRDtnQkFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFB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O1lBQ2xELE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5RSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUM3RixDQUFDO0lBQ0gsQ0FBQzs4R0FsRVUsbUJBQW1CO2tHQUFuQixtQkFBbUIsdU1BMUNwQjs7OztHQUlULCtoQkFMUyxZQUFZLDhCQUFFLFlBQVk7OzJGQTJDekIsbUJBQW1CO2tCQTlDL0IsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUMzQjs7OztHQUlUOytJQXVDNkIsa0JBQWtCO3NCQUEvQyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgZWZmZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2lkZUx5dFJlcXVlc3RTZXJ2aWNlLCBUYWJJbmZvIH0gZnJvbSAnLi4vcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2lkZS1seXQtdGFiLWNvbnRlbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSb3V0ZXJNb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudC1jb250YWluZXJcIiAjc2Nyb2xsQ29udGFpbmVyIChzY3JvbGwpPVwib25TY3JvbGwoKVwiPlxuICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuICAgIFxuICAgIC50YWItY29udGVudC1jb250YWluZXIge1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZmxleDogMTtcbiAgICB9XG4gICAgXG4gICAgLyogRW5zdXJlIHJvdXRlciBvdXRsZXQgY29tcG9uZW50cyB0YWtlIGZ1bGwgaGVpZ2h0ICovXG4gICAgOjpuZy1kZWVwIHJvdXRlci1vdXRsZXQgKyAqIHtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgXG4gICAgLyogU3BlY2lmaWMgaGVpZ2h0IGZpeGVzIGZvciBjb21tb24gY29tcG9uZW50IHNlbGVjdG9ycyAqL1xuICAgIDo6bmctZGVlcCBjaWRlLWx5dC1ob21lLXdyYXBwZXIsXG4gICAgOjpuZy1kZWVwIGNpZGUtYWRtLWhvbWUtd3JhcHBlcixcbiAgICA6Om5nLWRlZXAgY2lkZS1hZG0tZW50aXR5LFxuICAgIDo6bmctZGVlcCBjaWRlLWFkbS1lbnRpdHktbGlzdCB7XG4gICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgIGZsZXg6IDEgIWltcG9ydGFudDtcbiAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcbiAgICB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYkNvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJykgc2Nyb2xsQ29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG5cbiAgcHJpdmF0ZSBjdXJyZW50QWN0aXZlVGFiSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzUmVzdG9yaW5nU2Nyb2xsID0gZmFsc2U7IC8vIEZsYWcgdG8gcHJldmVudCBzYXZpbmcgc2Nyb2xsIGR1cmluZyByZXN0b3JhdGlvbiBhdHRlbXB0c1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IENpZGVMeXRSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLCAvLyBJbmplY3QgUm91dGVyIHRvIGxpc3RlbiBmb3IgTmF2aWdhdGlvbkVuZFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICAvLyBNb2Rlcm4gQW5ndWxhciBzaWduYWwgcGF0dGVybjogVXNlIGVmZmVjdCB0byByZWFjdCB0byBhY3RpdmUgdGFiIGNoYW5nZXNcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5yZXF1ZXN0U2VydmljZS5hY3RpdmVUYWIoKTtcbiAgICAgIGlmIChhY3RpdmVUYWIgJiYgYWN0aXZlVGFiLmlkICE9PSB0aGlzLmN1cnJlbnRBY3RpdmVUYWJJZCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVUYWJJZCA9IGFjdGl2ZVRhYi5pZDtcbiAgICAgICAgLy8gRGVsYXkgc2Nyb2xsIHJlc3RvcmF0aW9uIHRvIGVuc3VyZSBET00gaXMgcmVhZHlcbiAgICAgICAgY29uc3QgZGVsYXkgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgICAgIGRlbGF5KDEwMCkudGhlbigoKSA9PiB0aGlzLnJlc3RvcmVTY3JvbGxQb3NpdGlvbihhY3RpdmVUYWIpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExpc3RlbiB0byByb3V0ZSBjaGFuZ2VzIGZvciBzY3JvbGwgcmVzdG9yYXRpb25cbiAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAvLyBVc2Ugc2lnbmFsIHRvIGdldCBhY3RpdmUgdGFiIGFmdGVyIG5hdmlnYXRpb25cbiAgICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5yZXF1ZXN0U2VydmljZS5hY3RpdmVUYWIoKTtcbiAgICAgICAgaWYgKGFjdGl2ZVRhYiAmJiBhY3RpdmVUYWIuaWQgIT09IHRoaXMuY3VycmVudEFjdGl2ZVRhYklkKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlVGFiSWQgPSBhY3RpdmVUYWIuaWQ7XG4gICAgICAgICAgY29uc3QgZGVsYXkgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gICAgICAgICAgZGVsYXkoMTUwKS50aGVuKCgpID0+IHRoaXMucmVzdG9yZVNjcm9sbFBvc2l0aW9uKGFjdGl2ZVRhYikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbCBzY3JvbGwgcmVzdG9yYXRpb24gZm9yIHRoZSBhY3RpdmUgdGFiXG4gICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5yZXF1ZXN0U2VydmljZS5hY3RpdmVUYWIoKTtcbiAgICBpZiAoYWN0aXZlVGFiKSB7XG4gICAgICB0aGlzLmN1cnJlbnRBY3RpdmVUYWJJZCA9IGFjdGl2ZVRhYi5pZDtcbiAgICAgIGNvbnN0IGRlbGF5ID0gKG1zOiBudW1iZXIpID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuICAgICAgZGVsYXkoNTApLnRoZW4oKCkgPT4gdGhpcy5yZXN0b3JlU2Nyb2xsUG9zaXRpb24oYWN0aXZlVGFiKSk7XG4gICAgfVxuICB9XG5cbiAgb25TY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXN0b3JpbmdTY3JvbGwgfHwgIXRoaXMuc2Nyb2xsQ29udGFpbmVyUmVmIHx8ICF0aGlzLmN1cnJlbnRBY3RpdmVUYWJJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCB9ID0gdGhpcy5zY3JvbGxDb250YWluZXJSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlLnVwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKHRoaXMuY3VycmVudEFjdGl2ZVRhYklkLCBzY3JvbGxUb3AsIHNjcm9sbExlZnQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlU2Nyb2xsUG9zaXRpb24odGFiOiBUYWJJbmZvIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHRhYiAmJiB0aGlzLnNjcm9sbENvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5pc1Jlc3RvcmluZ1Njcm9sbCA9IHRydWU7XG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNjcm9sbENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IHRhYi5zY3JvbGxUb3AgPz8gMDtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxMZWZ0ID0gdGFiLnNjcm9sbExlZnQgPz8gMDtcbiAgICAgIC8vIE1vZGVybiBFUzIwMjIrIHBhdHRlcm46IFVzZSBQcm9taXNlLWJhc2VkIGRlbGF5XG4gICAgICBjb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICAgIGRlbGF5KDE1MCkudGhlbigoKSA9PiB7IHRoaXMuaXNSZXN0b3JpbmdTY3JvbGwgPSBmYWxzZTsgfSk7IC8vIEFsbG93IHNjcm9sbCBldmVudCB0byBzZXR0bGVcbiAgICB9XG4gIH1cblxuXG59XG4iXX0=
@@ -1,49 +0,0 @@
1
- import { Component, inject } from '@angular/core';
2
- import { CideLytSharedService } from '../shared.service';
3
- import { CideLytSidedrawerService } from '../../sidedrawer/sidedrawer.service';
4
- import { AppStateHelperService } from '../../../services/app-state/app-state-helper.service';
5
- import * as i0 from "@angular/core";
6
- export class CideLytSharedWrapperComponent {
7
- constructor() {
8
- this.shared_wrapper_setup_param = {};
9
- this.page_data = {};
10
- this.sharedService = inject(CideLytSharedService);
11
- this.sidedrawerService = inject(CideLytSidedrawerService);
12
- this.appState = inject(AppStateHelperService);
13
- }
14
- ngOnInit() {
15
- // Load and process page data using modern approach
16
- if (this.shared_wrapper_setup_param?.sypg_page_code) {
17
- const entityId = this.appState.getActiveEntityId();
18
- const page_data_payload = {
19
- sypg_page_code: this.shared_wrapper_setup_param?.sypg_page_code,
20
- sytm_entity_id_syen: entityId || undefined
21
- };
22
- console.log('🔍 Page data payload:', page_data_payload);
23
- this.sharedService.loadAndProcessPageData(page_data_payload, {
24
- setTitle: true,
25
- setSidebarContext: true,
26
- updateLayout: true
27
- }).subscribe({
28
- next: (page_data_response) => {
29
- console.log('✅ SHARED WRAPPER: Page data loaded and processed for:', page_data_payload.sypg_page_code);
30
- this.page_data = page_data_response?.data || {};
31
- // Sidebar context is automatically set by loadAndProcessPageData when setSidebarContext: true
32
- const pageId = page_data_response?.data?.page?._id || '';
33
- const themeId = page_data_response?.data?.theme?._id || '';
34
- this.sidedrawerService.setContext(pageId, themeId);
35
- },
36
- error: (err) => {
37
- console.error('❌ SHARED WRAPPER: Error loading page data:', err);
38
- }
39
- });
40
- }
41
- }
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSharedWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideLytSharedWrapperComponent, isStandalone: true, selector: "cide-lyt-shared-wrapper", ngImport: i0, template: "<p>shared-wrapper works!</p>\r\n", styles: [""] }); }
44
- }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSharedWrapperComponent, decorators: [{
46
- type: Component,
47
- args: [{ selector: 'cide-lyt-shared-wrapper', standalone: true, imports: [], template: "<p>shared-wrapper works!</p>\r\n" }]
48
- }] });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7O0FBUzdGLE1BQU0sT0FBTyw2QkFBNkI7SUFQMUM7UUFRUywrQkFBMEIsR0FBNEMsRUFBRSxDQUFDO1FBQ3pFLGNBQVMsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0Msc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbkQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0tBa0NwRDtJQWhDQyxRQUFRO1FBQ04sbURBQW1EO1FBQ25ELElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLGlCQUFpQixHQUFrQjtnQkFDdkMsY0FBYyxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxjQUFjO2dCQUMvRCxtQkFBbUIsRUFBRSxRQUFRLElBQUksU0FBUzthQUMzQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRXhELElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxJQUFJO2dCQUNkLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsa0JBQWtELEVBQUUsRUFBRTtvQkFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1REFBdUQsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDdkcsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUVoRCw4RkFBOEY7b0JBQzlGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDekQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBcENVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLG1GQ2IxQyxrQ0FDQTs7MkZEWWEsNkJBQTZCO2tCQVB6QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1AsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENpZGVMeXRTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVzaWduQ29uZmlnQ29udHJvbGxlclJlc3BvbnNlLCBkZXNpZ25Db25maWdSZXNwb25zZURhdGEsIE1EZXNpZ25Db25maWcgfSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcbmltcG9ydCB7IENpZGVMeXRTaWRlZHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NpZGVkcmF3ZXIvc2lkZWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcC1zdGF0ZS9hcHAtc3RhdGUtaGVscGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjaWRlLWx5dC1zaGFyZWQtd3JhcHBlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQ2lkZUx5dFNoYXJlZFdyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgc2hhcmVkX3dyYXBwZXJfc2V0dXBfcGFyYW06IFBhcnRpYWw8Q2lkZUx5dFNoYXJlZFdyYXBwZXJTZXR1cFBhcmFtPiA9IHt9O1xuICBwdWJsaWMgcGFnZV9kYXRhOiBkZXNpZ25Db25maWdSZXNwb25zZURhdGEgPSB7fTtcbiAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KENpZGVMeXRTaGFyZWRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzaWRlZHJhd2VyU2VydmljZSA9IGluamVjdChDaWRlTHl0U2lkZWRyYXdlclNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVIZWxwZXJTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBMb2FkIGFuZCBwcm9jZXNzIHBhZ2UgZGF0YSB1c2luZyBtb2Rlcm4gYXBwcm9hY2hcbiAgICBpZiAodGhpcy5zaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbT8uc3lwZ19wYWdlX2NvZGUpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gdGhpcy5hcHBTdGF0ZS5nZXRBY3RpdmVFbnRpdHlJZCgpO1xuICAgICAgY29uc3QgcGFnZV9kYXRhX3BheWxvYWQ6IE1EZXNpZ25Db25maWcgPSB7IFxuICAgICAgICBzeXBnX3BhZ2VfY29kZTogdGhpcy5zaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbT8uc3lwZ19wYWdlX2NvZGUsIFxuICAgICAgICBzeXRtX2VudGl0eV9pZF9zeWVuOiBlbnRpdHlJZCB8fCB1bmRlZmluZWQgXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ/CflI0gUGFnZSBkYXRhIHBheWxvYWQ6JywgcGFnZV9kYXRhX3BheWxvYWQpO1xuICAgICAgXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UubG9hZEFuZFByb2Nlc3NQYWdlRGF0YShwYWdlX2RhdGFfcGF5bG9hZCwge1xuICAgICAgICBzZXRUaXRsZTogdHJ1ZSxcbiAgICAgICAgc2V0U2lkZWJhckNvbnRleHQ6IHRydWUsXG4gICAgICAgIHVwZGF0ZUxheW91dDogdHJ1ZVxuICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHBhZ2VfZGF0YV9yZXNwb25zZTogZGVzaWduQ29uZmlnQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ+KchSBTSEFSRUQgV1JBUFBFUjogUGFnZSBkYXRhIGxvYWRlZCBhbmQgcHJvY2Vzc2VkIGZvcjonLCBwYWdlX2RhdGFfcGF5bG9hZC5zeXBnX3BhZ2VfY29kZSk7XG4gICAgICAgICAgdGhpcy5wYWdlX2RhdGEgPSBwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGEgfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2lkZWJhciBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgc2V0IGJ5IGxvYWRBbmRQcm9jZXNzUGFnZURhdGEgd2hlbiBzZXRTaWRlYmFyQ29udGV4dDogdHJ1ZVxuICAgICAgICAgIGNvbnN0IHBhZ2VJZCA9IHBhZ2VfZGF0YV9yZXNwb25zZT8uZGF0YT8ucGFnZT8uX2lkIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IHRoZW1lSWQgPSBwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGE/LnRoZW1lPy5faWQgfHwgJyc7XG4gICAgICAgICAgdGhpcy5zaWRlZHJhd2VyU2VydmljZS5zZXRDb250ZXh0KHBhZ2VJZCwgdGhlbWVJZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIFNIQVJFRCBXUkFQUEVSOiBFcnJvciBsb2FkaW5nIHBhZ2UgZGF0YTonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lkZUx5dFNoYXJlZFdyYXBwZXJTZXR1cFBhcmFtIHtcbiAgc3lwZ19wYWdlX2NvZGU6IHN0cmluZ1xufSIsIjxwPnNoYXJlZC13cmFwcGVyIHdvcmtzITwvcD5cclxuIl19