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
@@ -1,12 +1,60 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, ViewChildren } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
2
3
  import { CideIconComponent } from 'cloud-ide-element';
3
4
  import * as i0 from "@angular/core";
5
+ import * as i1 from "../request.service";
6
+ import * as i2 from "@angular/common";
4
7
  export class CideLytRequestWrapperComponent {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideLytRequestWrapperComponent, isStandalone: true, selector: "cide-lyt-request-wrapper", ngImport: i0, template: "<div\r\n class=\"cide-request tw-w-[calc(100%-13rem-1.5rem)] tw-left-52 tw-right-6 tw-absolute tw-items-center tw-h-6 tw-border-b-gray-200 tw-border-solid tw-border-b tw-select-none tw-z-[100] tw-top-9 tw-justify-between tw-flex\">\r\n <div class=\"tw-h-full tw-items-center tw-inline-flex tw-text-xs tw-px-2 tw-text-gray-600\">\r\n Item master \r\n <cide-ele-icon class=\"tw-ml-3 tw-mt-[0.1rem]\" size=\"3xs\" type=\"box\">close</cide-ele-icon>\r\n <span class=\"tw-border-gray-100 tw-border-solid tw-border-r-2 tw-my-1 tw-h-4/5 tw-mx-2\"></span>\r\n <cide-ele-icon size=\"2xs\" type=\"box\">add</cide-ele-icon>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }] }); }
8
+ constructor(requestService) {
9
+ this.requestService = requestService;
10
+ // Modern Signal-based access for better performance
11
+ this.requestItems = this.requestService.tabs;
12
+ }
13
+ ngAfterViewInit() {
14
+ // Apply entrance animation to initial items
15
+ this.applyAnimations();
16
+ // Listen for changes in request items and apply animations
17
+ this.requestItemElements.changes.subscribe({
18
+ next: () => {
19
+ this.applyAnimations();
20
+ }
21
+ });
22
+ }
23
+ // Apply animations to request items
24
+ applyAnimations() {
25
+ if (!this.requestItemElements)
26
+ return;
27
+ this.requestItemElements.forEach((itemEl) => {
28
+ const element = itemEl.nativeElement;
29
+ element.classList.remove('request-item-enter');
30
+ void element.offsetWidth; // Force reflow
31
+ element.classList.add('request-item-enter');
32
+ });
33
+ }
34
+ // Apply flicker effect to clicked item
35
+ applyFlickerEffect(event) {
36
+ const target = event.currentTarget;
37
+ if (target) {
38
+ // Remove any existing flicker class
39
+ target.classList.remove('request-item-flicker');
40
+ // Force reflow to ensure the class removal is processed
41
+ void target.offsetWidth;
42
+ // Add flicker class to trigger animation
43
+ target.classList.add('request-item-flicker');
44
+ // Remove the class after animation completes
45
+ setTimeout(() => {
46
+ target.classList.remove('request-item-flicker');
47
+ }, 400); // Match the animation duration
48
+ }
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestWrapperComponent, deps: [{ token: i1.CideLytRequestService }], target: i0.ɵɵFactoryTarget.Component }); }
51
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideLytRequestWrapperComponent, isStandalone: true, selector: "cide-lyt-request-wrapper", viewQueries: [{ propertyName: "requestItemElements", predicate: ["requestItemEl"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"requestItems() as requestItems\">\n <div id=\"cide-lyt-request-wrapper\" class=\"cide-lyt-request tw-w-[inherit]\" [class.cide-lyt-request-wrapper-hide]=\"!requestItems.length\">\n <div class=\"request-content tw-flex tw-items-center tw-overflow-x-auto\">\n <ng-container *ngFor=\"let item of requestItems; let i = index\">\n <div #requestItemEl class=\"request-item\" (keydown.enter)=\"requestService.activateTab(item.id); applyFlickerEffect($event)\"\n [class.active]=\"item.active\" tabindex=\"0\" (click)=\"requestService.activateTab(item.id); applyFlickerEffect($event)\"\n [attr.data-tooltip]=\"item.title\">\n <span class=\"request-title\">{{ item.title }}</span>\n <button class=\"request-action close-action\" \n (click)=\"requestService.closeTab(item.id); $event.stopPropagation();\"\n (keydown.enter)=\"requestService.closeTab(item.id); $event.stopPropagation();\" \n tabindex=\"0\"\n data-tooltip=\"Close this tab\">\n <cide-ele-icon size=\"3xs\">close</cide-ele-icon>\n </button>\n </div>\n <!-- Only add divider between items -->\n <div class=\"request-divider\" *ngIf=\"i < requestItems.length - 1\"></div>\n </ng-container>\n </div>\n </div>\n</ng-container>", styles: [".cide-lyt-request{height:20px;background:linear-gradient(to right,#fff,#f9fafbf2);border-bottom:1px solid rgba(229,231,235,.8);box-shadow:0 2px 6px #0000000d,0 1px 1px #00000008;display:flex;align-items:center;padding:0 .5rem;position:relative;z-index:15;transition:all .2s cubic-bezier(.4,0,.2,1);will-change:transform;-webkit-user-select:none;user-select:none;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.request-content{display:flex;align-items:center;height:100%;width:100%;position:relative;overflow:hidden}.request-item{position:relative;padding:8px 12px;margin:0 4px;border-radius:.375rem;display:flex;align-items:center;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);overflow:hidden;background-color:#fff9;box-shadow:0 1px 2px #00000005;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(229,231,235,.4)}.request-item:hover{background-color:#ffffffe6;transform:translateY(-1px);box-shadow:0 2px 5px #0000000d;border-color:#d1d5db99}.request-item:active{transform:translateY(0);box-shadow:0 1px 2px #00000008}.request-item.active{background:#eff6ffcc;border-color:#3b82f64d;box-shadow:0 2px 6px #3b82f61a,0 0 0 1px #3b82f626;position:relative}@keyframes shimmerGradient{0%{background-position:100% 50%}to{background-position:0% 50%}}.request-title{font-size:.875rem;color:#374151;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .2s ease}.request-item.active .request-title{color:#2563eb;font-weight:500;text-shadow:0 0 1px rgba(37,99,235,.1)}.request-action,.request-add-action{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background-color:transparent;transition:all .2s ease}.request-action:hover,.request-add-action:hover{background-color:#f3f4f6cc;transform:scale(1.1)}.request-action:active,.request-add-action:active{transform:scale(.95)}:host-context(.dark-mode) .cide-lyt-request{background:linear-gradient(to right,#0f172a,#0f172af2);border-bottom-color:#1e293be6;box-shadow:0 2px 6px #00000026,0 1px 1px #0000001a}:host-context(.dark-mode) .request-item{background-color:#1e293b99;border-color:#33415566;box-shadow:0 1px 2px #0000001a}:host-context(.dark-mode) .request-item:hover{background-color:#1e293bcc;border-color:#47556999;box-shadow:0 2px 5px #00000026}:host-context(.dark-mode) .request-title{color:#e2e8f0}:host-context(.dark-mode) .request-item:hover .request-title{color:#f8fafc}:host-context(.dark-mode) .request-item.active{background:#1e3a8a4d;border-color:#3b82f666;box-shadow:0 2px 6px #1e40af40,0 0 0 1px #3b82f633}:host-context(.dark-mode) .request-item.active .request-title{color:#60a5fa;text-shadow:0 0 2px rgba(96,165,250,.2)}:host-context(.dark-mode) .request-action:hover,:host-context(.dark-mode) .request-add-action:hover{background-color:#334155cc}.request-item:hover{transform:translateY(-.5px);box-shadow:0 1px 3px #00000008}.request-item:hover:before{opacity:1}.request-item.active{background:linear-gradient(to right,#eff6ffcc,#dbeafe99);box-shadow:0 1px 3px #3b82f626;transform:translateZ(0)}@keyframes glowEffect{0%{opacity:.6;box-shadow:0 1px 2px #3b82f61a}50%{opacity:1;box-shadow:0 1px 3px #3b82f64d}to{opacity:.6;box-shadow:0 1px 2px #3b82f61a}}.request-title{font-size:.7rem;color:#374151;margin-right:.5rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px;letter-spacing:.01em;transition:all .2s ease;position:relative}.request-item.active .request-title{color:#1e40af;font-weight:600;text-shadow:0 0 .5px rgba(37,99,235,.3);letter-spacing:.015em}.request-action{display:flex;align-items:center;justify-content:center;height:14px;width:14px;border-radius:3px;transition:all .2s ease;cursor:pointer;color:#9ca3af;border:none;background:transparent;padding:0;outline:none;position:relative;overflow:hidden;transform:translateZ(0)}.request-action:hover{background-color:#3b82f614;color:#3b82f6;transform:translateY(-.5px) scale(1.05);box-shadow:0 1px 2px #0000000d}.request-action:active{transform:translateY(.5px) scale(.97);transition:all .1s ease}.request-action:focus-visible{outline:1px solid #3b82f6;outline-offset:1px;box-shadow:0 0 0 2px #3b82f61a}.close-action:hover{background-color:#ef444414;color:#ef4444}.close-action:focus-visible{outline-color:#ef4444;box-shadow:0 0 0 2px #ef44441a}.request-divider{width:1px;height:18px;background:linear-gradient(to bottom,#d1d5db1a,#d1d5db80,#d1d5db1a);margin:0 4px}:host-context(.dark-mode) .request-divider{background:linear-gradient(to bottom,#4755691a,#47556980,#4755691a)}.request-divider:before{content:\"\";position:absolute;top:0;bottom:0;left:-1px;width:3px;background:radial-gradient(ellipse at center,#ffffff80,#fff0 70%);opacity:0;transition:opacity .3s ease}.request-content:hover .request-divider:before{opacity:.7}.request-add-action{display:flex;align-items:center;justify-content:center;height:16px;width:16px;border-radius:3px;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;color:#6b7280;background-color:transparent;border:none;padding:0;outline:none;position:relative;overflow:hidden}.request-add-action:hover{background-color:#3b82f614;color:#3b82f6;transform:translateY(-.5px) scale(1.05);box-shadow:0 1px 3px #3b82f626}.request-add-action:active{transform:translateY(.5px) scale(.97);transition:all .1s ease}.request-add-action:focus-visible{outline:1px solid #3b82f6;outline-offset:1px;box-shadow:0 0 0 2px #3b82f61a}.request-add-action:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background:radial-gradient(circle,#3b82f64d,#3b82f600 70%);opacity:0;transform:scale(0);transition:transform .4s ease,opacity .3s ease}.request-add-action:active:after{opacity:1;transform:scale(3);transition:transform .1s ease,opacity .1s ease}@keyframes subtlePulse{0%{box-shadow:0 0 #3b82f600;transform:scale(1)}50%{box-shadow:0 0 0 3px #3b82f626;transform:scale(1.05)}to{box-shadow:0 0 #3b82f600;transform:scale(1)}}.request-add-action-pulse{animation:subtlePulse 2s cubic-bezier(.4,0,.6,1) infinite}:host-context(.dark-mode) .cide-lyt-request{background:linear-gradient(to right,#111827f2,#1f2937e6);border-bottom:1px solid rgba(55,65,81,.5)}:host-context(.dark-mode) .request-title{color:#e5e7eb}:host-context(.dark-mode) .request-item.active{background:linear-gradient(to right,#1e3a8a26,#2563eb1a)}:host-context(.dark-mode) .request-item.active .request-title{color:#93c5fd}:host-context(.dark-mode) .request-action,:host-context(.dark-mode) .request-add-action{color:#9ca3af}:host-context(.dark-mode) .request-divider{background:linear-gradient(to bottom,#4b55634d,#6b728080,#4b55634d)}@keyframes slideIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}@keyframes slideOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-5px)}}@keyframes flickerEffect{0%{opacity:1;transform:scale(1);box-shadow:0 1px 2px #00000005}25%{opacity:.7;transform:scale(.98);box-shadow:0 2px 8px #3b82f64d}50%{opacity:.9;transform:scale(1.02);box-shadow:0 4px 12px #3b82f666}75%{opacity:.8;transform:scale(.99);box-shadow:0 2px 6px #3b82f633}to{opacity:1;transform:scale(1);box-shadow:0 1px 2px #00000005}}@keyframes flickerEffectDark{0%{opacity:1;transform:scale(1);box-shadow:0 1px 2px #0000001a}25%{opacity:.7;transform:scale(.98);box-shadow:0 2px 8px #60a5fa4d}50%{opacity:.9;transform:scale(1.02);box-shadow:0 4px 12px #60a5fa66}75%{opacity:.8;transform:scale(.99);box-shadow:0 2px 6px #60a5fa33}to{opacity:1;transform:scale(1);box-shadow:0 1px 2px #0000001a}}.request-item-enter{animation:slideIn .2s cubic-bezier(.4,0,.2,1)}.request-item-exit{animation:slideOut .2s cubic-bezier(.4,0,.2,1)}.request-item-flicker{animation:flickerEffect .4s cubic-bezier(.4,0,.2,1)}:host-context(.dark-mode) .request-item-flicker{animation:flickerEffectDark .4s cubic-bezier(.4,0,.2,1)}@media (max-width: 640px){.request-title{max-width:80px}}.request-item:focus,.request-action:focus,.request-add-action:focus{outline:none;box-shadow:0 0 0 2px #3b82f64d}:host-context(.dark-mode) .request-item:focus,:host-context(.dark-mode) .request-action:focus,:host-context(.dark-mode) .request-add-action:focus{box-shadow:0 0 0 2px #60a5fa66}.cide-lyt-request:hover{box-shadow:0 3px 8px #00000012,0 1px 2px #0000000d;transform:translateY(-1px)}.request-content:empty .request-add-action{animation:pulseAttention 2s infinite}@keyframes pulseAttention{0%{box-shadow:0 0 #3b82f666;transform:scale(1)}70%{box-shadow:0 0 0 8px #3b82f600;transform:scale(1.05)}to{box-shadow:0 0 #3b82f600;transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }] }); }
7
52
  }
8
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytRequestWrapperComponent, decorators: [{
9
54
  type: Component,
10
- args: [{ selector: 'cide-lyt-request-wrapper', standalone: true, imports: [CideIconComponent], template: "<div\r\n class=\"cide-request tw-w-[calc(100%-13rem-1.5rem)] tw-left-52 tw-right-6 tw-absolute tw-items-center tw-h-6 tw-border-b-gray-200 tw-border-solid tw-border-b tw-select-none tw-z-[100] tw-top-9 tw-justify-between tw-flex\">\r\n <div class=\"tw-h-full tw-items-center tw-inline-flex tw-text-xs tw-px-2 tw-text-gray-600\">\r\n Item master \r\n <cide-ele-icon class=\"tw-ml-3 tw-mt-[0.1rem]\" size=\"3xs\" type=\"box\">close</cide-ele-icon>\r\n <span class=\"tw-border-gray-100 tw-border-solid tw-border-r-2 tw-my-1 tw-h-4/5 tw-mx-2\"></span>\r\n <cide-ele-icon size=\"2xs\" type=\"box\">add</cide-ele-icon>\r\n </div>\r\n</div>" }]
11
- }] });
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9sYXlvdXQvcmVxdWVzdC9yZXF1ZXN0LXdyYXBwZXIvcmVxdWVzdC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9sYXlvdXQvcmVxdWVzdC9yZXF1ZXN0LXdyYXBwZXIvcmVxdWVzdC13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBU3RELE1BQU0sT0FBTyw4QkFBOEI7OEdBQTlCLDhCQUE4QjtrR0FBOUIsOEJBQThCLG9GQ1YzQyxncUJBUU0sMERERk0saUJBQWlCOzsyRkFJaEIsOEJBQThCO2tCQVAxQyxTQUFTOytCQUNFLDBCQUEwQixjQUN4QixJQUFJLFdBQ1AsQ0FBQyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaWRlSWNvbkNvbXBvbmVudCB9IGZyb20gJ2Nsb3VkLWlkZS1lbGVtZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2lkZS1seXQtcmVxdWVzdC13cmFwcGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDaWRlSWNvbkNvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcXVlc3Qtd3JhcHBlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3JlcXVlc3Qtd3JhcHBlci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2lkZUx5dFJlcXVlc3RXcmFwcGVyQ29tcG9uZW50IHtcclxuXHJcbn1cclxuIiwiPGRpdlxyXG4gICAgY2xhc3M9XCJjaWRlLXJlcXVlc3QgdHctdy1bY2FsYygxMDAlLTEzcmVtLTEuNXJlbSldIHR3LWxlZnQtNTIgdHctcmlnaHQtNiB0dy1hYnNvbHV0ZSB0dy1pdGVtcy1jZW50ZXIgdHctaC02IHR3LWJvcmRlci1iLWdyYXktMjAwIHR3LWJvcmRlci1zb2xpZCB0dy1ib3JkZXItYiB0dy1zZWxlY3Qtbm9uZSB0dy16LVsxMDBdIHR3LXRvcC05IHR3LWp1c3RpZnktYmV0d2VlbiB0dy1mbGV4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidHctaC1mdWxsIHR3LWl0ZW1zLWNlbnRlciB0dy1pbmxpbmUtZmxleCB0dy10ZXh0LXhzIHR3LXB4LTIgdHctdGV4dC1ncmF5LTYwMFwiPlxyXG4gICAgICAgIEl0ZW0gbWFzdGVyIFxyXG4gICAgICAgIDxjaWRlLWVsZS1pY29uIGNsYXNzPVwidHctbWwtMyB0dy1tdC1bMC4xcmVtXVwiIHNpemU9XCIzeHNcIiB0eXBlPVwiYm94XCI+Y2xvc2U8L2NpZGUtZWxlLWljb24+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0dy1ib3JkZXItZ3JheS0xMDAgdHctYm9yZGVyLXNvbGlkIHR3LWJvcmRlci1yLTIgdHctbXktMSB0dy1oLTQvNSB0dy1teC0yXCI+PC9zcGFuPlxyXG4gICAgICAgIDxjaWRlLWVsZS1pY29uIHNpemU9XCIyeHNcIiB0eXBlPVwiYm94XCI+YWRkPC9jaWRlLWVsZS1pY29uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
55
+ args: [{ selector: 'cide-lyt-request-wrapper', standalone: true, imports: [CommonModule, CideIconComponent], template: "<ng-container *ngIf=\"requestItems() as requestItems\">\n <div id=\"cide-lyt-request-wrapper\" class=\"cide-lyt-request tw-w-[inherit]\" [class.cide-lyt-request-wrapper-hide]=\"!requestItems.length\">\n <div class=\"request-content tw-flex tw-items-center tw-overflow-x-auto\">\n <ng-container *ngFor=\"let item of requestItems; let i = index\">\n <div #requestItemEl class=\"request-item\" (keydown.enter)=\"requestService.activateTab(item.id); applyFlickerEffect($event)\"\n [class.active]=\"item.active\" tabindex=\"0\" (click)=\"requestService.activateTab(item.id); applyFlickerEffect($event)\"\n [attr.data-tooltip]=\"item.title\">\n <span class=\"request-title\">{{ item.title }}</span>\n <button class=\"request-action close-action\" \n (click)=\"requestService.closeTab(item.id); $event.stopPropagation();\"\n (keydown.enter)=\"requestService.closeTab(item.id); $event.stopPropagation();\" \n tabindex=\"0\"\n data-tooltip=\"Close this tab\">\n <cide-ele-icon size=\"3xs\">close</cide-ele-icon>\n </button>\n </div>\n <!-- Only add divider between items -->\n <div class=\"request-divider\" *ngIf=\"i < requestItems.length - 1\"></div>\n </ng-container>\n </div>\n </div>\n</ng-container>", styles: [".cide-lyt-request{height:20px;background:linear-gradient(to right,#fff,#f9fafbf2);border-bottom:1px solid rgba(229,231,235,.8);box-shadow:0 2px 6px #0000000d,0 1px 1px #00000008;display:flex;align-items:center;padding:0 .5rem;position:relative;z-index:15;transition:all .2s cubic-bezier(.4,0,.2,1);will-change:transform;-webkit-user-select:none;user-select:none;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}.request-content{display:flex;align-items:center;height:100%;width:100%;position:relative;overflow:hidden}.request-item{position:relative;padding:8px 12px;margin:0 4px;border-radius:.375rem;display:flex;align-items:center;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);overflow:hidden;background-color:#fff9;box-shadow:0 1px 2px #00000005;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid rgba(229,231,235,.4)}.request-item:hover{background-color:#ffffffe6;transform:translateY(-1px);box-shadow:0 2px 5px #0000000d;border-color:#d1d5db99}.request-item:active{transform:translateY(0);box-shadow:0 1px 2px #00000008}.request-item.active{background:#eff6ffcc;border-color:#3b82f64d;box-shadow:0 2px 6px #3b82f61a,0 0 0 1px #3b82f626;position:relative}@keyframes shimmerGradient{0%{background-position:100% 50%}to{background-position:0% 50%}}.request-title{font-size:.875rem;color:#374151;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .2s ease}.request-item.active .request-title{color:#2563eb;font-weight:500;text-shadow:0 0 1px rgba(37,99,235,.1)}.request-action,.request-add-action{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background-color:transparent;transition:all .2s ease}.request-action:hover,.request-add-action:hover{background-color:#f3f4f6cc;transform:scale(1.1)}.request-action:active,.request-add-action:active{transform:scale(.95)}:host-context(.dark-mode) .cide-lyt-request{background:linear-gradient(to right,#0f172a,#0f172af2);border-bottom-color:#1e293be6;box-shadow:0 2px 6px #00000026,0 1px 1px #0000001a}:host-context(.dark-mode) .request-item{background-color:#1e293b99;border-color:#33415566;box-shadow:0 1px 2px #0000001a}:host-context(.dark-mode) .request-item:hover{background-color:#1e293bcc;border-color:#47556999;box-shadow:0 2px 5px #00000026}:host-context(.dark-mode) .request-title{color:#e2e8f0}:host-context(.dark-mode) .request-item:hover .request-title{color:#f8fafc}:host-context(.dark-mode) .request-item.active{background:#1e3a8a4d;border-color:#3b82f666;box-shadow:0 2px 6px #1e40af40,0 0 0 1px #3b82f633}:host-context(.dark-mode) .request-item.active .request-title{color:#60a5fa;text-shadow:0 0 2px rgba(96,165,250,.2)}:host-context(.dark-mode) .request-action:hover,:host-context(.dark-mode) .request-add-action:hover{background-color:#334155cc}.request-item:hover{transform:translateY(-.5px);box-shadow:0 1px 3px #00000008}.request-item:hover:before{opacity:1}.request-item.active{background:linear-gradient(to right,#eff6ffcc,#dbeafe99);box-shadow:0 1px 3px #3b82f626;transform:translateZ(0)}@keyframes glowEffect{0%{opacity:.6;box-shadow:0 1px 2px #3b82f61a}50%{opacity:1;box-shadow:0 1px 3px #3b82f64d}to{opacity:.6;box-shadow:0 1px 2px #3b82f61a}}.request-title{font-size:.7rem;color:#374151;margin-right:.5rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px;letter-spacing:.01em;transition:all .2s ease;position:relative}.request-item.active .request-title{color:#1e40af;font-weight:600;text-shadow:0 0 .5px rgba(37,99,235,.3);letter-spacing:.015em}.request-action{display:flex;align-items:center;justify-content:center;height:14px;width:14px;border-radius:3px;transition:all .2s ease;cursor:pointer;color:#9ca3af;border:none;background:transparent;padding:0;outline:none;position:relative;overflow:hidden;transform:translateZ(0)}.request-action:hover{background-color:#3b82f614;color:#3b82f6;transform:translateY(-.5px) scale(1.05);box-shadow:0 1px 2px #0000000d}.request-action:active{transform:translateY(.5px) scale(.97);transition:all .1s ease}.request-action:focus-visible{outline:1px solid #3b82f6;outline-offset:1px;box-shadow:0 0 0 2px #3b82f61a}.close-action:hover{background-color:#ef444414;color:#ef4444}.close-action:focus-visible{outline-color:#ef4444;box-shadow:0 0 0 2px #ef44441a}.request-divider{width:1px;height:18px;background:linear-gradient(to bottom,#d1d5db1a,#d1d5db80,#d1d5db1a);margin:0 4px}:host-context(.dark-mode) .request-divider{background:linear-gradient(to bottom,#4755691a,#47556980,#4755691a)}.request-divider:before{content:\"\";position:absolute;top:0;bottom:0;left:-1px;width:3px;background:radial-gradient(ellipse at center,#ffffff80,#fff0 70%);opacity:0;transition:opacity .3s ease}.request-content:hover .request-divider:before{opacity:.7}.request-add-action{display:flex;align-items:center;justify-content:center;height:16px;width:16px;border-radius:3px;transition:all .2s cubic-bezier(.4,0,.2,1);cursor:pointer;color:#6b7280;background-color:transparent;border:none;padding:0;outline:none;position:relative;overflow:hidden}.request-add-action:hover{background-color:#3b82f614;color:#3b82f6;transform:translateY(-.5px) scale(1.05);box-shadow:0 1px 3px #3b82f626}.request-add-action:active{transform:translateY(.5px) scale(.97);transition:all .1s ease}.request-add-action:focus-visible{outline:1px solid #3b82f6;outline-offset:1px;box-shadow:0 0 0 2px #3b82f61a}.request-add-action:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background:radial-gradient(circle,#3b82f64d,#3b82f600 70%);opacity:0;transform:scale(0);transition:transform .4s ease,opacity .3s ease}.request-add-action:active:after{opacity:1;transform:scale(3);transition:transform .1s ease,opacity .1s ease}@keyframes subtlePulse{0%{box-shadow:0 0 #3b82f600;transform:scale(1)}50%{box-shadow:0 0 0 3px #3b82f626;transform:scale(1.05)}to{box-shadow:0 0 #3b82f600;transform:scale(1)}}.request-add-action-pulse{animation:subtlePulse 2s cubic-bezier(.4,0,.6,1) infinite}:host-context(.dark-mode) .cide-lyt-request{background:linear-gradient(to right,#111827f2,#1f2937e6);border-bottom:1px solid rgba(55,65,81,.5)}:host-context(.dark-mode) .request-title{color:#e5e7eb}:host-context(.dark-mode) .request-item.active{background:linear-gradient(to right,#1e3a8a26,#2563eb1a)}:host-context(.dark-mode) .request-item.active .request-title{color:#93c5fd}:host-context(.dark-mode) .request-action,:host-context(.dark-mode) .request-add-action{color:#9ca3af}:host-context(.dark-mode) .request-divider{background:linear-gradient(to bottom,#4b55634d,#6b728080,#4b55634d)}@keyframes slideIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}@keyframes slideOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-5px)}}@keyframes flickerEffect{0%{opacity:1;transform:scale(1);box-shadow:0 1px 2px #00000005}25%{opacity:.7;transform:scale(.98);box-shadow:0 2px 8px #3b82f64d}50%{opacity:.9;transform:scale(1.02);box-shadow:0 4px 12px #3b82f666}75%{opacity:.8;transform:scale(.99);box-shadow:0 2px 6px #3b82f633}to{opacity:1;transform:scale(1);box-shadow:0 1px 2px #00000005}}@keyframes flickerEffectDark{0%{opacity:1;transform:scale(1);box-shadow:0 1px 2px #0000001a}25%{opacity:.7;transform:scale(.98);box-shadow:0 2px 8px #60a5fa4d}50%{opacity:.9;transform:scale(1.02);box-shadow:0 4px 12px #60a5fa66}75%{opacity:.8;transform:scale(.99);box-shadow:0 2px 6px #60a5fa33}to{opacity:1;transform:scale(1);box-shadow:0 1px 2px #0000001a}}.request-item-enter{animation:slideIn .2s cubic-bezier(.4,0,.2,1)}.request-item-exit{animation:slideOut .2s cubic-bezier(.4,0,.2,1)}.request-item-flicker{animation:flickerEffect .4s cubic-bezier(.4,0,.2,1)}:host-context(.dark-mode) .request-item-flicker{animation:flickerEffectDark .4s cubic-bezier(.4,0,.2,1)}@media (max-width: 640px){.request-title{max-width:80px}}.request-item:focus,.request-action:focus,.request-add-action:focus{outline:none;box-shadow:0 0 0 2px #3b82f64d}:host-context(.dark-mode) .request-item:focus,:host-context(.dark-mode) .request-action:focus,:host-context(.dark-mode) .request-add-action:focus{box-shadow:0 0 0 2px #60a5fa66}.cide-lyt-request:hover{box-shadow:0 3px 8px #00000012,0 1px 2px #0000000d;transform:translateY(-1px)}.request-content:empty .request-add-action{animation:pulseAttention 2s infinite}@keyframes pulseAttention{0%{box-shadow:0 0 #3b82f666;transform:scale(1)}70%{box-shadow:0 0 0 8px #3b82f600;transform:scale(1.05)}to{box-shadow:0 0 #3b82f600;transform:scale(1)}}\n"] }]
56
+ }], ctorParameters: () => [{ type: i1.CideLytRequestService }], propDecorators: { requestItemElements: [{
57
+ type: ViewChildren,
58
+ args: ['requestItemEl']
59
+ }] } });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9sYXlvdXQvcmVxdWVzdC9yZXF1ZXN0LXdyYXBwZXIvcmVxdWVzdC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1sYXlvdXQvc3JjL2xpYi9sYXlvdXQvcmVxdWVzdC9yZXF1ZXN0LXdyYXBwZXIvcmVxdWVzdC13cmFwcGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFVdEQsTUFBTSxPQUFPLDhCQUE4QjtJQU16QyxZQUNTLGNBQXFDO1FBQXJDLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUo5QyxvREFBb0Q7UUFDN0MsaUJBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztJQUk1QyxDQUFDO0lBRUosZUFBZTtRQUNiLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ3pDLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsb0NBQW9DO0lBQzVCLGVBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxPQUFPO1FBRXRDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFrQixFQUFFLEVBQUU7WUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNyQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQy9DLEtBQUssT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGVBQWU7WUFDekMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsa0JBQWtCLENBQUMsS0FBWTtRQUM3QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBNEIsQ0FBQztRQUNsRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsb0NBQW9DO1lBQ3BDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFFaEQsd0RBQXdEO1lBQ3hELEtBQUssTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUV4Qix5Q0FBeUM7WUFDekMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUU3Qyw2Q0FBNkM7WUFDN0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQ2xELENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUMxQyxDQUFDO0lBQ0gsQ0FBQzs4R0FwRFUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsNkxDWjNDLHMrQ0FxQmUsODVRRGJILFlBQVksZ1FBQUUsaUJBQWlCOzsyRkFJOUIsOEJBQThCO2tCQVAxQyxTQUFTOytCQUNFLDBCQUEwQixjQUN4QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUM7MEZBS1gsbUJBQW1CO3NCQUFqRCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2lkZUljb25Db21wb25lbnQgfSBmcm9tICdjbG91ZC1pZGUtZWxlbWVudCc7XG5pbXBvcnQgeyBDaWRlTHl0UmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi9yZXF1ZXN0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjaWRlLWx5dC1yZXF1ZXN0LXdyYXBwZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaWRlSWNvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXF1ZXN0LXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcmVxdWVzdC13cmFwcGVyLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIENpZGVMeXRSZXF1ZXN0V3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkcmVuKCdyZXF1ZXN0SXRlbUVsJykgcmVxdWVzdEl0ZW1FbGVtZW50cyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgXG4gIC8vIE1vZGVybiBTaWduYWwtYmFzZWQgYWNjZXNzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgcHVibGljIHJlcXVlc3RJdGVtcyA9IHRoaXMucmVxdWVzdFNlcnZpY2UudGFicztcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZXF1ZXN0U2VydmljZTogQ2lkZUx5dFJlcXVlc3RTZXJ2aWNlXG4gICkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gQXBwbHkgZW50cmFuY2UgYW5pbWF0aW9uIHRvIGluaXRpYWwgaXRlbXNcbiAgICB0aGlzLmFwcGx5QW5pbWF0aW9ucygpO1xuICAgIFxuICAgIC8vIExpc3RlbiBmb3IgY2hhbmdlcyBpbiByZXF1ZXN0IGl0ZW1zIGFuZCBhcHBseSBhbmltYXRpb25zXG4gICAgdGhpcy5yZXF1ZXN0SXRlbUVsZW1lbnRzLmNoYW5nZXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseUFuaW1hdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFwcGx5IGFuaW1hdGlvbnMgdG8gcmVxdWVzdCBpdGVtc1xuICBwcml2YXRlIGFwcGx5QW5pbWF0aW9ucygpIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdEl0ZW1FbGVtZW50cykgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMucmVxdWVzdEl0ZW1FbGVtZW50cy5mb3JFYWNoKChpdGVtRWw6IEVsZW1lbnRSZWYpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBpdGVtRWwubmF0aXZlRWxlbWVudDtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncmVxdWVzdC1pdGVtLWVudGVyJyk7XG4gICAgICB2b2lkIGVsZW1lbnQub2Zmc2V0V2lkdGg7IC8vIEZvcmNlIHJlZmxvd1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdyZXF1ZXN0LWl0ZW0tZW50ZXInKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEFwcGx5IGZsaWNrZXIgZWZmZWN0IHRvIGNsaWNrZWQgaXRlbVxuICBhcHBseUZsaWNrZXJFZmZlY3QoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGZsaWNrZXIgY2xhc3NcbiAgICAgIHRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdyZXF1ZXN0LWl0ZW0tZmxpY2tlcicpO1xuICAgICAgXG4gICAgICAvLyBGb3JjZSByZWZsb3cgdG8gZW5zdXJlIHRoZSBjbGFzcyByZW1vdmFsIGlzIHByb2Nlc3NlZFxuICAgICAgdm9pZCB0YXJnZXQub2Zmc2V0V2lkdGg7XG4gICAgICBcbiAgICAgIC8vIEFkZCBmbGlja2VyIGNsYXNzIHRvIHRyaWdnZXIgYW5pbWF0aW9uXG4gICAgICB0YXJnZXQuY2xhc3NMaXN0LmFkZCgncmVxdWVzdC1pdGVtLWZsaWNrZXInKTtcbiAgICAgIFxuICAgICAgLy8gUmVtb3ZlIHRoZSBjbGFzcyBhZnRlciBhbmltYXRpb24gY29tcGxldGVzXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ3JlcXVlc3QtaXRlbS1mbGlja2VyJyk7XG4gICAgICB9LCA0MDApOyAvLyBNYXRjaCB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uXG4gICAgfVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicmVxdWVzdEl0ZW1zKCkgYXMgcmVxdWVzdEl0ZW1zXCI+XG4gICAgPGRpdiBpZD1cImNpZGUtbHl0LXJlcXVlc3Qtd3JhcHBlclwiIGNsYXNzPVwiY2lkZS1seXQtcmVxdWVzdCB0dy13LVtpbmhlcml0XVwiIFtjbGFzcy5jaWRlLWx5dC1yZXF1ZXN0LXdyYXBwZXItaGlkZV09XCIhcmVxdWVzdEl0ZW1zLmxlbmd0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1jb250ZW50IHR3LWZsZXggdHctaXRlbXMtY2VudGVyIHR3LW92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXF1ZXN0SXRlbXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICNyZXF1ZXN0SXRlbUVsIGNsYXNzPVwicmVxdWVzdC1pdGVtXCIgKGtleWRvd24uZW50ZXIpPVwicmVxdWVzdFNlcnZpY2UuYWN0aXZhdGVUYWIoaXRlbS5pZCk7IGFwcGx5RmxpY2tlckVmZmVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLmFjdGl2ZVwiIHRhYmluZGV4PVwiMFwiIChjbGljayk9XCJyZXF1ZXN0U2VydmljZS5hY3RpdmF0ZVRhYihpdGVtLmlkKTsgYXBwbHlGbGlja2VyRWZmZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiaXRlbS50aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVlc3QtdGl0bGVcIj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVxdWVzdC1hY3Rpb24gY2xvc2UtYWN0aW9uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVxdWVzdFNlcnZpY2UuY2xvc2VUYWIoaXRlbS5pZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwicmVxdWVzdFNlcnZpY2UuY2xvc2VUYWIoaXRlbS5pZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvb2x0aXA9XCJDbG9zZSB0aGlzIHRhYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpZGUtZWxlLWljb24gc2l6ZT1cIjN4c1wiPmNsb3NlPC9jaWRlLWVsZS1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE9ubHkgYWRkIGRpdmlkZXIgYmV0d2VlbiBpdGVtcyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1kaXZpZGVyXCIgKm5nSWY9XCJpIDwgcmVxdWVzdEl0ZW1zLmxlbmd0aCAtIDFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPiJdfQ==
@@ -0,0 +1,235 @@
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==
@@ -0,0 +1,84 @@
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,37 +1,49 @@
1
- import { Component } from '@angular/core';
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';
2
5
  import * as i0 from "@angular/core";
3
- import * as i1 from "../shared.service";
4
6
  export class CideLytSharedWrapperComponent {
5
- constructor(sharedService) {
6
- this.sharedService = sharedService;
7
+ constructor() {
7
8
  this.shared_wrapper_setup_param = {};
8
9
  this.page_data = {};
10
+ this.sharedService = inject(CideLytSharedService);
11
+ this.sidedrawerService = inject(CideLytSidedrawerService);
12
+ this.appState = inject(AppStateHelperService);
9
13
  }
10
14
  ngOnInit() {
11
- // Load the page data
12
- this.loadPageData();
13
- }
14
- loadPageData() {
15
+ // Load and process page data using modern approach
15
16
  if (this.shared_wrapper_setup_param?.sypg_page_code) {
16
- const page_data_payload = { sypg_page_code: this.shared_wrapper_setup_param?.sypg_page_code };
17
- this.sharedService.loadPageData(page_data_payload)?.subscribe((page_data_response) => {
18
- if (page_data_response) {
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);
19
30
  this.page_data = page_data_response?.data || {};
20
- this.sharedService.setPageData(page_data_response);
21
- // Set Page Tile
22
- this.setTitle(page_data_response?.data?.page?.sypg_title || '');
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);
23
38
  }
24
39
  });
25
40
  }
26
41
  }
27
- setTitle(title) {
28
- this.sharedService?.titleService.setTitle(title);
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSharedWrapperComponent, deps: [{ token: i1.CideLytSharedService }], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSharedWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
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: [""] }); }
32
44
  }
33
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideLytSharedWrapperComponent, decorators: [{
34
46
  type: Component,
35
47
  args: [{ selector: 'cide-lyt-shared-wrapper', standalone: true, imports: [], template: "<p>shared-wrapper works!</p>\r\n" }]
36
- }], ctorParameters: () => [{ type: i1.CideLytSharedService }] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBV2xELE1BQU0sT0FBTyw2QkFBNkI7SUFHeEMsWUFBb0IsYUFBbUM7UUFBbkMsa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBRmhELCtCQUEwQixHQUE0QyxFQUFFLENBQUM7UUFDekUsY0FBUyxHQUE2QixFQUFFLENBQUM7SUFFaEQsQ0FBQztJQUVELFFBQVE7UUFDTixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDcEQsTUFBTSxpQkFBaUIsR0FBa0IsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxDQUFBO1lBQzVHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsa0JBQWtELEVBQUUsRUFBRTtnQkFDbkgsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLGtCQUFrQixFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQ25ELGdCQUFnQjtvQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbEUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQzs4R0EzQlUsNkJBQTZCO2tHQUE3Qiw2QkFBNkIsbUZDWDFDLGtDQUNBOzsyRkRVYSw2QkFBNkI7a0JBUHpDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksV0FDUCxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2lkZUx5dFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlc2lnbkNvbmZpZ0NvbnRyb2xsZXJSZXNwb25zZSwgZGVzaWduQ29uZmlnUmVzcG9uc2VEYXRhLCBNRGVzaWduQ29uZmlnIH0gZnJvbSAnY2xvdWQtaWRlLWxtcy1tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NpZGUtbHl0LXNoYXJlZC13cmFwcGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zaGFyZWQtd3JhcHBlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3NoYXJlZC13cmFwcGVyLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaWRlTHl0U2hhcmVkV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIHNoYXJlZF93cmFwcGVyX3NldHVwX3BhcmFtOiBQYXJ0aWFsPENpZGVMeXRTaGFyZWRXcmFwcGVyU2V0dXBQYXJhbT4gPSB7fTtcclxuICBwdWJsaWMgcGFnZV9kYXRhOiBkZXNpZ25Db25maWdSZXNwb25zZURhdGEgPSB7fTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNoYXJlZFNlcnZpY2U6IENpZGVMeXRTaGFyZWRTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIExvYWQgdGhlIHBhZ2UgZGF0YVxyXG4gICAgdGhpcy5sb2FkUGFnZURhdGEoKTtcclxuICB9XHJcblxyXG4gIGxvYWRQYWdlRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLnNoYXJlZF93cmFwcGVyX3NldHVwX3BhcmFtPy5zeXBnX3BhZ2VfY29kZSkge1xyXG4gICAgICBjb25zdCBwYWdlX2RhdGFfcGF5bG9hZDogTURlc2lnbkNvbmZpZyA9IHsgc3lwZ19wYWdlX2NvZGU6IHRoaXMuc2hhcmVkX3dyYXBwZXJfc2V0dXBfcGFyYW0/LnN5cGdfcGFnZV9jb2RlIH1cclxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmxvYWRQYWdlRGF0YShwYWdlX2RhdGFfcGF5bG9hZCk/LnN1YnNjcmliZSgocGFnZV9kYXRhX3Jlc3BvbnNlOiBkZXNpZ25Db25maWdDb250cm9sbGVyUmVzcG9uc2UpID0+IHtcclxuICAgICAgICBpZiAocGFnZV9kYXRhX3Jlc3BvbnNlKSB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VfZGF0YSA9IHBhZ2VfZGF0YV9yZXNwb25zZT8uZGF0YSB8fCB7fTtcclxuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zZXRQYWdlRGF0YShwYWdlX2RhdGFfcmVzcG9uc2UpO1xyXG4gICAgICAgICAgLy8gU2V0IFBhZ2UgVGlsZVxyXG4gICAgICAgICAgdGhpcy5zZXRUaXRsZShwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGE/LnBhZ2U/LnN5cGdfdGl0bGUgfHwgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2U/LnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENpZGVMeXRTaGFyZWRXcmFwcGVyU2V0dXBQYXJhbSB7XHJcbiAgc3lwZ19wYWdlX2NvZGU6IHN0cmluZ1xyXG59IiwiPHA+c2hhcmVkLXdyYXBwZXIgd29ya3MhPC9wPlxyXG4iXX0=
48
+ }] });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7O0FBUzdGLE1BQU0sT0FBTyw2QkFBNkI7SUFQMUM7UUFRUywrQkFBMEIsR0FBNEMsRUFBRSxDQUFDO1FBQ3pFLGNBQVMsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0Msc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbkQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0tBa0NwRDtJQWhDQyxRQUFRO1FBQ04sbURBQW1EO1FBQ25ELElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLGlCQUFpQixHQUFrQjtnQkFDdkMsY0FBYyxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxjQUFjO2dCQUMvRCxtQkFBbUIsRUFBRSxRQUFRLElBQUksU0FBUzthQUMzQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRXhELElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxJQUFJO2dCQUNkLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsa0JBQWtELEVBQUUsRUFBRTtvQkFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1REFBdUQsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDdkcsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUVoRCw4RkFBOEY7b0JBQzlGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDekQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBcENVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLG1GQ2IxQyxrQ0FDQTs7MkZEWWEsNkJBQTZCO2tCQVB6QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1AsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENpZGVMeXRTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVzaWduQ29uZmlnQ29udHJvbGxlclJlc3BvbnNlLCBkZXNpZ25Db25maWdSZXNwb25zZURhdGEsIE1EZXNpZ25Db25maWcgfSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcbmltcG9ydCB7IENpZGVMeXRTaWRlZHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NpZGVkcmF3ZXIvc2lkZWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcC1zdGF0ZS9hcHAtc3RhdGUtaGVscGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjaWRlLWx5dC1zaGFyZWQtd3JhcHBlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQ2lkZUx5dFNoYXJlZFdyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgc2hhcmVkX3dyYXBwZXJfc2V0dXBfcGFyYW06IFBhcnRpYWw8Q2lkZUx5dFNoYXJlZFdyYXBwZXJTZXR1cFBhcmFtPiA9IHt9O1xuICBwdWJsaWMgcGFnZV9kYXRhOiBkZXNpZ25Db25maWdSZXNwb25zZURhdGEgPSB7fTtcbiAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KENpZGVMeXRTaGFyZWRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzaWRlZHJhd2VyU2VydmljZSA9IGluamVjdChDaWRlTHl0U2lkZWRyYXdlclNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVIZWxwZXJTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBMb2FkIGFuZCBwcm9jZXNzIHBhZ2UgZGF0YSB1c2luZyBtb2Rlcm4gYXBwcm9hY2hcbiAgICBpZiAodGhpcy5zaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbT8uc3lwZ19wYWdlX2NvZGUpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gdGhpcy5hcHBTdGF0ZS5nZXRBY3RpdmVFbnRpdHlJZCgpO1xuICAgICAgY29uc3QgcGFnZV9kYXRhX3BheWxvYWQ6IE1EZXNpZ25Db25maWcgPSB7IFxuICAgICAgICBzeXBnX3BhZ2VfY29kZTogdGhpcy5zaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbT8uc3lwZ19wYWdlX2NvZGUsIFxuICAgICAgICBzeXRtX2VudGl0eV9pZF9zeWVuOiBlbnRpdHlJZCB8fCB1bmRlZmluZWQgXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ/CflI0gUGFnZSBkYXRhIHBheWxvYWQ6JywgcGFnZV9kYXRhX3BheWxvYWQpO1xuICAgICAgXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UubG9hZEFuZFByb2Nlc3NQYWdlRGF0YShwYWdlX2RhdGFfcGF5bG9hZCwge1xuICAgICAgICBzZXRUaXRsZTogdHJ1ZSxcbiAgICAgICAgc2V0U2lkZWJhckNvbnRleHQ6IHRydWUsXG4gICAgICAgIHVwZGF0ZUxheW91dDogdHJ1ZVxuICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHBhZ2VfZGF0YV9yZXNwb25zZTogZGVzaWduQ29uZmlnQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ+KchSBTSEFSRUQgV1JBUFBFUjogUGFnZSBkYXRhIGxvYWRlZCBhbmQgcHJvY2Vzc2VkIGZvcjonLCBwYWdlX2RhdGFfcGF5bG9hZC5zeXBnX3BhZ2VfY29kZSk7XG4gICAgICAgICAgdGhpcy5wYWdlX2RhdGEgPSBwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGEgfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2lkZWJhciBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgc2V0IGJ5IGxvYWRBbmRQcm9jZXNzUGFnZURhdGEgd2hlbiBzZXRTaWRlYmFyQ29udGV4dDogdHJ1ZVxuICAgICAgICAgIGNvbnN0IHBhZ2VJZCA9IHBhZ2VfZGF0YV9yZXNwb25zZT8uZGF0YT8ucGFnZT8uX2lkIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IHRoZW1lSWQgPSBwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGE/LnRoZW1lPy5faWQgfHwgJyc7XG4gICAgICAgICAgdGhpcy5zaWRlZHJhd2VyU2VydmljZS5zZXRDb250ZXh0KHBhZ2VJZCwgdGhlbWVJZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIFNIQVJFRCBXUkFQUEVSOiBFcnJvciBsb2FkaW5nIHBhZ2UgZGF0YTonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lkZUx5dFNoYXJlZFdyYXBwZXJTZXR1cFBhcmFtIHtcbiAgc3lwZ19wYWdlX2NvZGU6IHN0cmluZ1xufSIsIjxwPnNoYXJlZC13cmFwcGVyIHdvcmtzITwvcD5cclxuIl19