cloud-ide-layout 0.0.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +466 -13
  2. package/esm2022/lib/cloud-ide-layout.routes.mjs +24 -10
  3. package/esm2022/lib/layout/console/console-wrapper/console-wrapper.component.mjs +6 -6
  4. package/esm2022/lib/layout/console/console.service.mjs +28 -0
  5. package/esm2022/lib/layout/footer/footer-wrapper/footer-wrapper.component.mjs +16 -8
  6. package/esm2022/lib/layout/footer/footer.service.mjs +28 -0
  7. package/esm2022/lib/layout/header/header-wrapper/header-wrapper.component.mjs +69 -18
  8. package/esm2022/lib/layout/header/header.service.mjs +17 -6
  9. package/esm2022/lib/layout/home/home-wrapper/home-wrapper.component.mjs +194 -7
  10. package/esm2022/lib/layout/layout/layout-wrapper/layout-wrapper.component.mjs +18 -9
  11. package/esm2022/lib/layout/request/request-wrapper/request-wrapper.component.mjs +54 -6
  12. package/esm2022/lib/layout/request/request.service.mjs +235 -0
  13. package/esm2022/lib/layout/request/tab-content/tab-content.component.mjs +84 -0
  14. package/esm2022/lib/layout/shared/shared-wrapper/shared-wrapper.component.mjs +32 -20
  15. package/esm2022/lib/layout/shared/shared.service.mjs +490 -14
  16. package/esm2022/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.mjs +480 -15
  17. package/esm2022/lib/layout/sidebar/sidebar.service.mjs +20 -7
  18. package/esm2022/lib/layout/sidedrawer/cide-lyt-drawer-base.class.mjs +40 -0
  19. package/esm2022/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.mjs +296 -0
  20. package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.mjs +175 -0
  21. package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.mjs +51 -0
  22. package/esm2022/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.mjs +254 -9
  23. package/esm2022/lib/layout/sidedrawer/sidedrawer.service.mjs +70 -0
  24. package/esm2022/lib/services/app-state/app-state-helper.service.mjs +222 -0
  25. package/esm2022/lib/services/app-state/app-state.service.mjs +256 -0
  26. package/esm2022/lib/services/app-state/index.mjs +3 -0
  27. package/esm2022/lib/services/cache-manager/cache-manager.service.mjs +112 -0
  28. package/esm2022/lib/services/file-manager/file-manager.service.mjs +7 -7
  29. package/esm2022/lib/services/tab-state.service.mjs +128 -0
  30. package/esm2022/lib/services/theme/theme.service.mjs +151 -0
  31. package/esm2022/lib/services/user-status/user-status.service.mjs +135 -0
  32. package/esm2022/lib/utils/custom-route-reuse-strategy.mjs +61 -0
  33. package/esm2022/lib/utils/index.mjs +2 -0
  34. package/esm2022/public-api.mjs +7 -1
  35. package/fesm2022/cloud-ide-layout-cloud-ide-layout-DqL3A73V.mjs +2914 -0
  36. package/fesm2022/cloud-ide-layout-cloud-ide-layout-DqL3A73V.mjs.map +1 -0
  37. package/fesm2022/cloud-ide-layout-drawer-theme.component-xd8IG3WP.mjs +443 -0
  38. package/fesm2022/cloud-ide-layout-drawer-theme.component-xd8IG3WP.mjs.map +1 -0
  39. package/fesm2022/cloud-ide-layout-home-wrapper.component-DEdsEiaq.mjs +197 -0
  40. package/fesm2022/cloud-ide-layout-home-wrapper.component-DEdsEiaq.mjs.map +1 -0
  41. package/fesm2022/cloud-ide-layout-sidedrawer-notes.component-ds12wZbh.mjs +260 -0
  42. package/fesm2022/cloud-ide-layout-sidedrawer-notes.component-ds12wZbh.mjs.map +1 -0
  43. package/fesm2022/cloud-ide-layout.mjs +1 -261
  44. package/fesm2022/cloud-ide-layout.mjs.map +1 -1
  45. package/lib/cloud-ide-layout.routes.d.ts +1 -0
  46. package/lib/layout/console/console-wrapper/console-wrapper.component.d.ts +3 -3
  47. package/lib/layout/console/console.service.d.ts +9 -0
  48. package/lib/layout/footer/footer-wrapper/footer-wrapper.component.d.ts +7 -3
  49. package/lib/layout/footer/footer.service.d.ts +9 -0
  50. package/lib/layout/header/header-wrapper/header-wrapper.component.d.ts +17 -9
  51. package/lib/layout/header/header.service.d.ts +4 -3
  52. package/lib/layout/home/home-wrapper/home-wrapper.component.d.ts +90 -1
  53. package/lib/layout/request/request-wrapper/request-wrapper.component.d.ts +10 -1
  54. package/lib/layout/request/request.service.d.ts +60 -0
  55. package/lib/layout/request/tab-content/tab-content.component.d.ts +19 -0
  56. package/lib/layout/shared/shared-wrapper/shared-wrapper.component.d.ts +4 -5
  57. package/lib/layout/shared/shared.service.d.ts +104 -6
  58. package/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.d.ts +135 -6
  59. package/lib/layout/sidebar/sidebar.service.d.ts +3 -2
  60. package/lib/layout/sidedrawer/cide-lyt-drawer-base.class.d.ts +16 -0
  61. package/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.d.ts +71 -0
  62. package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.d.ts +48 -0
  63. package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.d.ts +13 -0
  64. package/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.d.ts +28 -3
  65. package/lib/layout/sidedrawer/sidedrawer.service.d.ts +30 -0
  66. package/lib/services/app-state/app-state-helper.service.d.ts +150 -0
  67. package/lib/services/app-state/app-state.service.d.ts +85 -0
  68. package/lib/services/app-state/index.d.ts +3 -0
  69. package/lib/services/cache-manager/cache-manager.service.d.ts +64 -0
  70. package/lib/services/file-manager/file-manager.service.d.ts +0 -2
  71. package/lib/services/tab-state.service.d.ts +79 -0
  72. package/lib/services/theme/theme.service.d.ts +71 -0
  73. package/lib/services/user-status/user-status.service.d.ts +57 -0
  74. package/lib/utils/custom-route-reuse-strategy.d.ts +15 -0
  75. package/lib/utils/index.d.ts +1 -0
  76. package/package.json +2 -2
  77. package/public-api.d.ts +4 -0
  78. package/src/lib/assets/css/cide-lyt-style.scss +182 -0
  79. package/src/lib/assets/css/cide-lyt-variable.scss +119 -0
  80. package/fesm2022/cloud-ide-layout-home-wrapper.component-BV7ptL0Y.mjs +0 -14
  81. package/fesm2022/cloud-ide-layout-home-wrapper.component-BV7ptL0Y.mjs.map +0 -1
@@ -0,0 +1,135 @@
1
+ import { Injectable, signal, computed } from '@angular/core';
2
+ import { BehaviorSubject, interval } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class CideLytUserStatusService {
5
+ constructor() {
6
+ // Modern Angular Signals pattern
7
+ this._userStatus = signal({
8
+ status: 'online',
9
+ lastActive: new Date(),
10
+ message: undefined
11
+ });
12
+ // Public readonly access to status
13
+ this.userStatus = this._userStatus.asReadonly();
14
+ // Computed properties
15
+ this.isOnline = computed(() => this._userStatus().status !== 'offline');
16
+ this.statusColor = computed(() => this.getStatusColor(this._userStatus().status));
17
+ this.statusText = computed(() => this.getStatusText(this._userStatus().status));
18
+ // Legacy observable for compatibility
19
+ this.statusSubject = new BehaviorSubject(this._userStatus());
20
+ this.status$ = this.statusSubject.asObservable();
21
+ // Auto-away functionality
22
+ this.lastActivityTime = Date.now();
23
+ this.autoAwayTimeout = 5 * 60 * 1000; // 5 minutes
24
+ this.autoAwayEnabled = true;
25
+ this.initializeActivityTracking();
26
+ this.startAutoAwayTimer();
27
+ }
28
+ /**
29
+ * Sets the user status
30
+ * @param status The new status to set
31
+ * @param message Optional custom status message
32
+ */
33
+ setStatus(status, message) {
34
+ const statusData = {
35
+ status,
36
+ lastActive: new Date(),
37
+ message
38
+ };
39
+ this._userStatus.set(statusData);
40
+ this.statusSubject.next(statusData);
41
+ this.lastActivityTime = Date.now();
42
+ }
43
+ /**
44
+ * Marks user as active (resets away timer)
45
+ */
46
+ markUserActive() {
47
+ this.lastActivityTime = Date.now();
48
+ // If user was away, bring them back to online
49
+ if (this._userStatus().status === 'away') {
50
+ this.setStatus('online');
51
+ }
52
+ }
53
+ /**
54
+ * Gets CSS class for status color
55
+ */
56
+ getStatusColor(status) {
57
+ switch (status) {
58
+ case 'online': return 'tw-bg-green-500';
59
+ case 'away': return 'tw-bg-yellow-500';
60
+ case 'busy': return 'tw-bg-orange-500';
61
+ case 'do-not-disturb': return 'tw-bg-red-500';
62
+ case 'offline': return 'tw-bg-gray-400';
63
+ default: return 'tw-bg-gray-400';
64
+ }
65
+ }
66
+ /**
67
+ * Gets human-readable status text
68
+ */
69
+ getStatusText(status) {
70
+ const current = this._userStatus();
71
+ const baseText = this.getBaseStatusText(status);
72
+ return current.message ? `${baseText} - ${current.message}` : baseText;
73
+ }
74
+ getBaseStatusText(status) {
75
+ switch (status) {
76
+ case 'online': return 'Online';
77
+ case 'away': return 'Away';
78
+ case 'busy': return 'Busy';
79
+ case 'do-not-disturb': return 'Do not disturb';
80
+ case 'offline': return 'Offline';
81
+ default: return 'Unknown';
82
+ }
83
+ }
84
+ /**
85
+ * Initialize activity tracking for auto-away
86
+ */
87
+ initializeActivityTracking() {
88
+ if (typeof window === 'undefined')
89
+ return;
90
+ const events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];
91
+ events.forEach(event => {
92
+ document.addEventListener(event, () => {
93
+ this.markUserActive();
94
+ }, { passive: true });
95
+ });
96
+ }
97
+ /**
98
+ * Start the auto-away timer
99
+ */
100
+ startAutoAwayTimer() {
101
+ if (!this.autoAwayEnabled)
102
+ return;
103
+ interval(30000).subscribe({
104
+ next: () => {
105
+ const now = Date.now();
106
+ const timeSinceActivity = now - this.lastActivityTime;
107
+ if (timeSinceActivity > this.autoAwayTimeout &&
108
+ this._userStatus().status === 'online') {
109
+ this.setStatus('away', 'Auto-away due to inactivity');
110
+ }
111
+ }
112
+ });
113
+ }
114
+ /**
115
+ * Enable or disable auto-away functionality
116
+ */
117
+ setAutoAwayEnabled(enabled) {
118
+ this.autoAwayEnabled = enabled;
119
+ }
120
+ /**
121
+ * Set the auto-away timeout (in milliseconds)
122
+ */
123
+ setAutoAwayTimeout(timeout) {
124
+ this.autoAwayTimeout = timeout;
125
+ }
126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytUserStatusService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
127
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytUserStatusService, providedIn: 'root' }); }
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytUserStatusService, decorators: [{
130
+ type: Injectable,
131
+ args: [{
132
+ providedIn: 'root'
133
+ }]
134
+ }], ctorParameters: () => [] });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zdGF0dXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLXN0YXR1cy91c2VyLXN0YXR1cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFhakQsTUFBTSxPQUFPLHdCQUF3QjtJQXlCbkM7UUF4QkEsaUNBQWlDO1FBQ3pCLGdCQUFXLEdBQUcsTUFBTSxDQUFpQjtZQUMzQyxNQUFNLEVBQUUsUUFBUTtZQUNoQixVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDdEIsT0FBTyxFQUFFLFNBQVM7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25CLGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTNELHNCQUFzQjtRQUNOLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNuRSxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzdFLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUUzRixzQ0FBc0M7UUFDOUIsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBaUIsSUFBSSxDQUFD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QkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcclxuXHJcbmV4cG9ydCB0eXBlIFVzZXJTdGF0dXMgPSAnb25saW5lJyB8ICdvZmZsaW5lJyB8ICdhd2F5JyB8ICdidXN5JyB8ICdkby1ub3QtZGlzdHVyYic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJTdGF0dXNEYXRhIHtcclxuICBzdGF0dXM6IFVzZXJTdGF0dXM7XHJcbiAgbGFzdEFjdGl2ZTogRGF0ZTtcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaWRlTHl0VXNlclN0YXR1c1NlcnZpY2Uge1xyXG4gIC8vIE1vZGVybiBBbmd1bGFyIFNpZ25hbHMgcGF0dGVyblxyXG4gIHByaXZhdGUgX3VzZXJTdGF0dXMgPSBzaWduYWw8VXNlclN0YXR1c0RhdGE+KHtcclxuICAgIHN0YXR1czogJ29ubGluZScsXHJcbiAgICBsYXN0QWN0aXZlOiBuZXcgRGF0ZSgpLFxyXG4gICAgbWVzc2FnZTogdW5kZWZpbmVkXHJcbiAgfSk7XHJcblxyXG4gIC8vIFB1YmxpYyByZWFkb25seSBhY2Nlc3MgdG8gc3RhdHVzXHJcbiAgcHVibGljIHJlYWRvbmx5IHVzZXJTdGF0dXMgPSB0aGlzLl91c2VyU3RhdHVzLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgLy8gQ29tcHV0ZWQgcHJvcGVydGllc1xyXG4gIHB1YmxpYyByZWFkb25seSBpc09ubGluZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuX3VzZXJTdGF0dXMoKS5zdGF0dXMgIT09ICdvZmZsaW5lJyk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvbG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXRTdGF0dXNDb2xvcih0aGlzLl91c2VyU3RhdHVzKCkuc3RhdHVzKSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1c1RleHQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldFN0YXR1c1RleHQodGhpcy5fdXNlclN0YXR1cygpLnN0YXR1cykpO1xyXG5cclxuICAvLyBMZWdhY3kgb2JzZXJ2YWJsZSBmb3IgY29tcGF0aWJpbGl0eVxyXG4gIHByaXZhdGUgc3RhdHVzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXNlclN0YXR1c0RhdGE+KHRoaXMuX3VzZXJTdGF0dXMoKSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyQgPSB0aGlzLnN0YXR1c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8vIEF1dG8tYXdheSBmdW5jdGlvbmFsaXR5XHJcbiAgcHJpdmF0ZSBsYXN0QWN0aXZpdHlUaW1lID0gRGF0ZS5ub3coKTtcclxuICBwcml2YXRlIGF1dG9Bd2F5VGltZW91dCA9IDUgKiA2MCAqIDEwMDA7IC8vIDUgbWludXRlc1xyXG4gIHByaXZhdGUgYXV0b0F3YXlFbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVBY3Rpdml0eVRyYWNraW5nKCk7XHJcbiAgICB0aGlzLnN0YXJ0QXV0b0F3YXlUaW1lcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdXNlciBzdGF0dXNcclxuICAgKiBAcGFyYW0gc3RhdHVzIFRoZSBuZXcgc3RhdHVzIHRvIHNldFxyXG4gICAqIEBwYXJhbSBtZXNzYWdlIE9wdGlvbmFsIGN1c3RvbSBzdGF0dXMgbWVzc2FnZVxyXG4gICAqL1xyXG4gIHNldFN0YXR1cyhzdGF0dXM6IFVzZXJTdGF0dXMsIG1lc3NhZ2U/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXR1c0RhdGE6IFVzZXJTdGF0dXNEYXRhID0ge1xyXG4gICAgICBzdGF0dXMsXHJcbiAgICAgIGxhc3RBY3RpdmU6IG5ldyBEYXRlKCksXHJcbiAgICAgIG1lc3NhZ2VcclxuICAgIH07XHJcbiAgICBcclxuICAgIHRoaXMuX3VzZXJTdGF0dXMuc2V0KHN0YXR1c0RhdGEpO1xyXG4gICAgdGhpcy5zdGF0dXNTdWJqZWN0Lm5leHQoc3RhdHVzRGF0YSk7XHJcbiAgICB0aGlzLmxhc3RBY3Rpdml0eVRpbWUgPSBEYXRlLm5vdygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFya3MgdXNlciBhcyBhY3RpdmUgKHJlc2V0cyBhd2F5IHRpbWVyKVxyXG4gICAqL1xyXG4gIG1hcmtVc2VyQWN0aXZlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgIFxyXG4gICAgLy8gSWYgdXNlciB3YXMgYXdheSwgYnJpbmcgdGhlbSBiYWNrIHRvIG9ubGluZVxyXG4gICAgaWYgKHRoaXMuX3VzZXJTdGF0dXMoKS5zdGF0dXMgPT09ICdhd2F5Jykge1xyXG4gICAgICB0aGlzLnNldFN0YXR1cygnb25saW5lJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIENTUyBjbGFzcyBmb3Igc3RhdHVzIGNvbG9yXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRTdGF0dXNDb2xvcihzdGF0dXM6IFVzZXJTdGF0dXMpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgY2FzZSAnb25saW5lJzogcmV0dXJuICd0dy1iZy1ncmVlbi01MDAnO1xyXG4gICAgICBjYXNlICdhd2F5JzogcmV0dXJuICd0dy1iZy15ZWxsb3ctNTAwJztcclxuICAgICAgY2FzZSAnYnVzeSc6IHJldHVybiAndHctYmctb3JhbmdlLTUwMCc7XHJcbiAgICAgIGNhc2UgJ2RvLW5vdC1kaXN0dXJiJzogcmV0dXJuICd0dy1iZy1yZWQtNTAwJztcclxuICAgICAgY2FzZSAnb2ZmbGluZSc6IHJldHVybiAndHctYmctZ3JheS00MDAnO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gJ3R3LWJnLWdyYXktNDAwJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgaHVtYW4tcmVhZGFibGUgc3RhdHVzIHRleHRcclxuICAgKi9cclxuICBwcml2YXRlIGdldFN0YXR1c1RleHQoc3RhdHVzOiBVc2VyU3RhdHVzKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl91c2VyU3RhdHVzKCk7XHJcbiAgICBjb25zdCBiYXNlVGV4dCA9IHRoaXMuZ2V0QmFzZVN0YXR1c1RleHQoc3RhdHVzKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIGN1cnJlbnQubWVzc2FnZSA/IGAke2Jhc2VUZXh0fSAtICR7Y3VycmVudC5tZXNzYWdlfWAgOiBiYXNlVGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QmFzZVN0YXR1c1RleHQoc3RhdHVzOiBVc2VyU3RhdHVzKTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgJ29ubGluZSc6IHJldHVybiAnT25saW5lJztcclxuICAgICAgY2FzZSAnYXdheSc6IHJldHVybiAnQXdheSc7XHJcbiAgICAgIGNhc2UgJ2J1c3knOiByZXR1cm4gJ0J1c3knO1xyXG4gICAgICBjYXNlICdkby1ub3QtZGlzdHVyYic6IHJldHVybiAnRG8gbm90IGRpc3R1cmInO1xyXG4gICAgICBjYXNlICdvZmZsaW5lJzogcmV0dXJuICdPZmZsaW5lJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdVbmtub3duJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgYWN0aXZpdHkgdHJhY2tpbmcgZm9yIGF1dG8tYXdheVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFjdGl2aXR5VHJhY2tpbmcoKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBldmVudHMgPSBbJ21vdXNlZG93bicsICdtb3VzZW1vdmUnLCAna2V5cHJlc3MnLCAnc2Nyb2xsJywgJ3RvdWNoc3RhcnQnLCAnY2xpY2snXTtcclxuICAgIFxyXG4gICAgZXZlbnRzLmZvckVhY2goZXZlbnQgPT4ge1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tYXJrVXNlckFjdGl2ZSgpO1xyXG4gICAgICB9LCB7IHBhc3NpdmU6IHRydWUgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0YXJ0IHRoZSBhdXRvLWF3YXkgdGltZXJcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXJ0QXV0b0F3YXlUaW1lcigpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hdXRvQXdheUVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpbnRlcnZhbCgzMDAwMCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKCkgPT4geyAvLyBDaGVjayBldmVyeSAzMCBzZWNvbmRzXHJcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBjb25zdCB0aW1lU2luY2VBY3Rpdml0eSA9IG5vdyAtIHRoaXMubGFzdEFjdGl2aXR5VGltZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodGltZVNpbmNlQWN0aXZpdHkgPiB0aGlzLmF1dG9Bd2F5VGltZW91dCAmJiBcclxuICAgICAgICAgICAgdGhpcy5fdXNlclN0YXR1cygpLnN0YXR1cyA9PT0gJ29ubGluZScpIHtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdHVzKCdhd2F5JywgJ0F1dG8tYXdheSBkdWUgdG8gaW5hY3Rpdml0eScpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBhdXRvLWF3YXkgZnVuY3Rpb25hbGl0eVxyXG4gICAqL1xyXG4gIHNldEF1dG9Bd2F5RW5hYmxlZChlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmF1dG9Bd2F5RW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGF1dG8tYXdheSB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpXHJcbiAgICovXHJcbiAgc2V0QXV0b0F3YXlUaW1lb3V0KHRpbWVvdXQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5hdXRvQXdheVRpbWVvdXQgPSB0aW1lb3V0O1xyXG4gIH1cclxufSAiXX0=
@@ -0,0 +1,61 @@
1
+ /**
2
+ * A custom route reuse strategy that allows storing and retrieving routes
3
+ * to persist component state, especially for tabbed navigation.
4
+ */
5
+ export class CustomRouteReuseStrategy {
6
+ constructor() {
7
+ this.storedRoutes = {};
8
+ }
9
+ // Generates a unique key for a route.
10
+ // For routes marked with 'reuseTab', this key includes sorted query parameters
11
+ // to ensure distinct states for tabs differing by query params.
12
+ getPathKey(route) {
13
+ let path = route.pathFromRoot
14
+ .map(r => r.url.map(segment => segment.path).join('/'))
15
+ .filter(p => p.length > 0)
16
+ .join('/');
17
+ // If the route is marked for tab reuse and has query parameters,
18
+ // append them to the key in a sorted, consistent manner.
19
+ if (route.data && route.data['reuseTab'] && route.queryParamMap.keys.length > 0) {
20
+ const queryParams = route.queryParamMap.keys
21
+ .sort() // Ensure consistent order of query parameters
22
+ .map(key => `${key}=${route.queryParamMap.get(key)}`)
23
+ .join('&');
24
+ path += '?' + queryParams;
25
+ }
26
+ return path;
27
+ }
28
+ // Determines if this route (and its subtree) should be detached to be reused later.
29
+ shouldDetach(route) {
30
+ return !!(route.data && route.data['reuseTab']);
31
+ }
32
+ // Stores the detached route.
33
+ store(route, handle) {
34
+ const pathKey = this.getPathKey(route);
35
+ if (handle && route.data && route.data['reuseTab'] && pathKey) {
36
+ this.storedRoutes[pathKey] = handle;
37
+ }
38
+ }
39
+ // Determines if this route (and its subtree) should be reattached.
40
+ shouldAttach(route) {
41
+ const pathKey = this.getPathKey(route);
42
+ return !!pathKey && !!this.storedRoutes[pathKey];
43
+ }
44
+ // Retrieves the previously stored route.
45
+ retrieve(route) {
46
+ const pathKey = this.getPathKey(route);
47
+ if (!pathKey || !this.storedRoutes[pathKey]) {
48
+ return null;
49
+ }
50
+ return this.storedRoutes[pathKey];
51
+ }
52
+ // Determines if a route should be reused.
53
+ shouldReuseRoute(future, curr) {
54
+ return future.routeConfig === curr.routeConfig;
55
+ }
56
+ // Clears a stored route, typically when a tab is closed.
57
+ clearStoredRoute(pathKey) {
58
+ delete this.storedRoutes[pathKey];
59
+ }
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJvdXRlLXJldXNlLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL3V0aWxzL2N1c3RvbS1yb3V0ZS1yZXVzZS1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBQXJDO1FBQ1UsaUJBQVksR0FBMkMsRUFBRSxDQUFDO0lBNERwRSxDQUFDO0lBMURDLHNDQUFzQztJQUN0QywrRUFBK0U7SUFDL0UsZ0VBQWdFO0lBQ3hELFVBQVUsQ0FBQyxLQUE2QjtRQUM5QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWTthQUMxQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDdEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWIsaUVBQWlFO1FBQ2pFLHlEQUF5RDtRQUN6RCxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEYsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJO2lCQUN6QyxJQUFJLEVBQUUsQ0FBQyw4Q0FBOEM7aUJBQ3JELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7aUJBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNiLElBQUksSUFBSSxHQUFHLEdBQUcsV0FBVyxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxvRkFBb0Y7SUFDcEYsWUFBWSxDQUFDLEtBQTZCO1FBQ3hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixLQUFLLENBQUMsS0FBNkIsRUFBRSxNQUFrQztRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxZQUFZLENBQUMsS0FBNkI7UUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxRQUFRLENBQUMsS0FBNkI7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsMENBQTBDO0lBQzFDLGdCQUFnQixDQUFDLE1BQThCLEVBQUUsSUFBNEI7UUFDM0UsT0FBTyxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDakQsQ0FBQztJQUVELHlEQUF5RDtJQUNsRCxnQkFBZ0IsQ0FBQyxPQUFlO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBEZXRhY2hlZFJvdXRlSGFuZGxlLCBSb3V0ZVJldXNlU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuLyoqXHJcbiAqIEEgY3VzdG9tIHJvdXRlIHJldXNlIHN0cmF0ZWd5IHRoYXQgYWxsb3dzIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgcm91dGVzXHJcbiAqIHRvIHBlcnNpc3QgY29tcG9uZW50IHN0YXRlLCBlc3BlY2lhbGx5IGZvciB0YWJiZWQgbmF2aWdhdGlvbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21Sb3V0ZVJldXNlU3RyYXRlZ3kgaW1wbGVtZW50cyBSb3V0ZVJldXNlU3RyYXRlZ3kge1xyXG4gIHByaXZhdGUgc3RvcmVkUm91dGVzOiB7IFtrZXk6IHN0cmluZ106IERldGFjaGVkUm91dGVIYW5kbGUgfSA9IHt9O1xyXG5cclxuICAvLyBHZW5lcmF0ZXMgYSB1bmlxdWUga2V5IGZvciBhIHJvdXRlLlxyXG4gIC8vIEZvciByb3V0ZXMgbWFya2VkIHdpdGggJ3JldXNlVGFiJywgdGhpcyBrZXkgaW5jbHVkZXMgc29ydGVkIHF1ZXJ5IHBhcmFtZXRlcnNcclxuICAvLyB0byBlbnN1cmUgZGlzdGluY3Qgc3RhdGVzIGZvciB0YWJzIGRpZmZlcmluZyBieSBxdWVyeSBwYXJhbXMuXHJcbiAgcHJpdmF0ZSBnZXRQYXRoS2V5KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogc3RyaW5nIHtcclxuICAgIGxldCBwYXRoID0gcm91dGUucGF0aEZyb21Sb290XHJcbiAgICAgIC5tYXAociA9PiByLnVybC5tYXAoc2VnbWVudCA9PiBzZWdtZW50LnBhdGgpLmpvaW4oJy8nKSlcclxuICAgICAgLmZpbHRlcihwID0+IHAubGVuZ3RoID4gMClcclxuICAgICAgLmpvaW4oJy8nKTtcclxuXHJcbiAgICAvLyBJZiB0aGUgcm91dGUgaXMgbWFya2VkIGZvciB0YWIgcmV1c2UgYW5kIGhhcyBxdWVyeSBwYXJhbWV0ZXJzLFxyXG4gICAgLy8gYXBwZW5kIHRoZW0gdG8gdGhlIGtleSBpbiBhIHNvcnRlZCwgY29uc2lzdGVudCBtYW5uZXIuXHJcbiAgICBpZiAocm91dGUuZGF0YSAmJiByb3V0ZS5kYXRhWydyZXVzZVRhYiddICYmIHJvdXRlLnF1ZXJ5UGFyYW1NYXAua2V5cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gcm91dGUucXVlcnlQYXJhbU1hcC5rZXlzXHJcbiAgICAgICAgLnNvcnQoKSAvLyBFbnN1cmUgY29uc2lzdGVudCBvcmRlciBvZiBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgLm1hcChrZXkgPT4gYCR7a2V5fT0ke3JvdXRlLnF1ZXJ5UGFyYW1NYXAuZ2V0KGtleSl9YClcclxuICAgICAgICAuam9pbignJicpO1xyXG4gICAgICBwYXRoICs9ICc/JyArIHF1ZXJ5UGFyYW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhdGg7XHJcbiAgfVxyXG5cclxuICAvLyBEZXRlcm1pbmVzIGlmIHRoaXMgcm91dGUgKGFuZCBpdHMgc3VidHJlZSkgc2hvdWxkIGJlIGRldGFjaGVkIHRvIGJlIHJldXNlZCBsYXRlci5cclxuICBzaG91bGREZXRhY2gocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIShyb3V0ZS5kYXRhICYmIHJvdXRlLmRhdGFbJ3JldXNlVGFiJ10pO1xyXG4gIH1cclxuXHJcbiAgLy8gU3RvcmVzIHRoZSBkZXRhY2hlZCByb3V0ZS5cclxuICBzdG9yZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgaGFuZGxlOiBEZXRhY2hlZFJvdXRlSGFuZGxlIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGF0aEtleSA9IHRoaXMuZ2V0UGF0aEtleShyb3V0ZSk7XHJcbiAgICBpZiAoaGFuZGxlICYmIHJvdXRlLmRhdGEgJiYgcm91dGUuZGF0YVsncmV1c2VUYWInXSAmJiBwYXRoS2V5KSB7XHJcbiAgICAgIHRoaXMuc3RvcmVkUm91dGVzW3BhdGhLZXldID0gaGFuZGxlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRGV0ZXJtaW5lcyBpZiB0aGlzIHJvdXRlIChhbmQgaXRzIHN1YnRyZWUpIHNob3VsZCBiZSByZWF0dGFjaGVkLlxyXG4gIHNob3VsZEF0dGFjaChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGF0aEtleSA9IHRoaXMuZ2V0UGF0aEtleShyb3V0ZSk7XHJcbiAgICByZXR1cm4gISFwYXRoS2V5ICYmICEhdGhpcy5zdG9yZWRSb3V0ZXNbcGF0aEtleV07XHJcbiAgfVxyXG5cclxuICAvLyBSZXRyaWV2ZXMgdGhlIHByZXZpb3VzbHkgc3RvcmVkIHJvdXRlLlxyXG4gIHJldHJpZXZlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogRGV0YWNoZWRSb3V0ZUhhbmRsZSB8IG51bGwge1xyXG4gICAgY29uc3QgcGF0aEtleSA9IHRoaXMuZ2V0UGF0aEtleShyb3V0ZSk7XHJcbiAgICBpZiAoIXBhdGhLZXkgfHwgIXRoaXMuc3RvcmVkUm91dGVzW3BhdGhLZXldKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVkUm91dGVzW3BhdGhLZXldO1xyXG4gIH1cclxuXHJcbiAgLy8gRGV0ZXJtaW5lcyBpZiBhIHJvdXRlIHNob3VsZCBiZSByZXVzZWQuXHJcbiAgc2hvdWxkUmV1c2VSb3V0ZShmdXR1cmU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIGN1cnI6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmdXR1cmUucm91dGVDb25maWcgPT09IGN1cnIucm91dGVDb25maWc7XHJcbiAgfVxyXG5cclxuICAvLyBDbGVhcnMgYSBzdG9yZWQgcm91dGUsIHR5cGljYWxseSB3aGVuIGEgdGFiIGlzIGNsb3NlZC5cclxuICBwdWJsaWMgY2xlYXJTdG9yZWRSb3V0ZShwYXRoS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGRlbGV0ZSB0aGlzLnN0b3JlZFJvdXRlc1twYXRoS2V5XTtcclxuICB9XHJcbn0iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './custom-route-reuse-strategy';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtbGF5b3V0L3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY3VzdG9tLXJvdXRlLXJldXNlLXN0cmF0ZWd5JzsiXX0=
@@ -6,4 +6,10 @@ export * from './lib/cloud-ide-layout.component';
6
6
  export * from './lib/layout/shared/shared-wrapper/shared-wrapper.component';
7
7
  export * from './lib/layout/shared/shared.service';
8
8
  export * from './lib/cloud-ide-layout.routes';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgY2xvdWQtaWRlLWxheW91dFxyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nsb3VkLWlkZS1sYXlvdXQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nsb3VkLWlkZS1sYXlvdXQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbGF5b3V0L3NoYXJlZC9zaGFyZWQtd3JhcHBlci9zaGFyZWQtd3JhcHBlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYXlvdXQvc2hhcmVkL3NoYXJlZC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY2xvdWQtaWRlLWxheW91dC5yb3V0ZXMnOyJdfQ==
9
+ export * from './lib/utils';
10
+ // App State Management
11
+ export * from './lib/services/app-state';
12
+ export * from './lib/services/user-status/user-status.service';
13
+ // Modern Page Data Management (Legacy code removed)
14
+ export * from './lib/services/cache-manager/cache-manager.service';
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxhQUFhLENBQUM7QUFFNUIsdUJBQXVCO0FBQ3ZCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnREFBZ0QsQ0FBQztBQUUvRCxvREFBb0Q7QUFDcEQsY0FBYyxvREFBb0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgY2xvdWQtaWRlLWxheW91dFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nsb3VkLWlkZS1sYXlvdXQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jbG91ZC1pZGUtbGF5b3V0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYXlvdXQvc2hhcmVkL3NoYXJlZC13cmFwcGVyL3NoYXJlZC13cmFwcGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYXlvdXQvc2hhcmVkL3NoYXJlZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nsb3VkLWlkZS1sYXlvdXQucm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcblxuLy8gQXBwIFN0YXRlIE1hbmFnZW1lbnRcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2FwcC1zdGF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy91c2VyLXN0YXR1cy91c2VyLXN0YXR1cy5zZXJ2aWNlJztcblxuLy8gTW9kZXJuIFBhZ2UgRGF0YSBNYW5hZ2VtZW50IChMZWdhY3kgY29kZSByZW1vdmVkKVxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvY2FjaGUtbWFuYWdlci9jYWNoZS1tYW5hZ2VyLnNlcnZpY2UnOyJdfQ==