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.
- package/README.md +466 -13
- package/esm2022/lib/cloud-ide-layout.routes.mjs +24 -10
- package/esm2022/lib/layout/console/console-wrapper/console-wrapper.component.mjs +6 -6
- package/esm2022/lib/layout/console/console.service.mjs +28 -0
- package/esm2022/lib/layout/footer/footer-wrapper/footer-wrapper.component.mjs +16 -8
- package/esm2022/lib/layout/footer/footer.service.mjs +28 -0
- package/esm2022/lib/layout/header/header-wrapper/header-wrapper.component.mjs +69 -18
- package/esm2022/lib/layout/header/header.service.mjs +17 -6
- package/esm2022/lib/layout/home/home-wrapper/home-wrapper.component.mjs +194 -7
- package/esm2022/lib/layout/layout/layout-wrapper/layout-wrapper.component.mjs +18 -9
- package/esm2022/lib/layout/request/request-wrapper/request-wrapper.component.mjs +54 -6
- package/esm2022/lib/layout/request/request.service.mjs +235 -0
- package/esm2022/lib/layout/request/tab-content/tab-content.component.mjs +84 -0
- package/esm2022/lib/layout/shared/shared-wrapper/shared-wrapper.component.mjs +32 -20
- package/esm2022/lib/layout/shared/shared.service.mjs +490 -14
- package/esm2022/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.mjs +480 -15
- package/esm2022/lib/layout/sidebar/sidebar.service.mjs +20 -7
- package/esm2022/lib/layout/sidedrawer/cide-lyt-drawer-base.class.mjs +40 -0
- package/esm2022/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.mjs +296 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.mjs +175 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.mjs +51 -0
- package/esm2022/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.mjs +254 -9
- package/esm2022/lib/layout/sidedrawer/sidedrawer.service.mjs +70 -0
- package/esm2022/lib/services/app-state/app-state-helper.service.mjs +222 -0
- package/esm2022/lib/services/app-state/app-state.service.mjs +256 -0
- package/esm2022/lib/services/app-state/index.mjs +3 -0
- package/esm2022/lib/services/cache-manager/cache-manager.service.mjs +112 -0
- package/esm2022/lib/services/file-manager/file-manager.service.mjs +7 -7
- package/esm2022/lib/services/tab-state.service.mjs +128 -0
- package/esm2022/lib/services/theme/theme.service.mjs +151 -0
- package/esm2022/lib/services/user-status/user-status.service.mjs +135 -0
- package/esm2022/lib/utils/custom-route-reuse-strategy.mjs +61 -0
- package/esm2022/lib/utils/index.mjs +2 -0
- package/esm2022/public-api.mjs +7 -1
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-DqL3A73V.mjs +2914 -0
- package/fesm2022/cloud-ide-layout-cloud-ide-layout-DqL3A73V.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-drawer-theme.component-xd8IG3WP.mjs +443 -0
- package/fesm2022/cloud-ide-layout-drawer-theme.component-xd8IG3WP.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-DEdsEiaq.mjs +197 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-DEdsEiaq.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout-sidedrawer-notes.component-ds12wZbh.mjs +260 -0
- package/fesm2022/cloud-ide-layout-sidedrawer-notes.component-ds12wZbh.mjs.map +1 -0
- package/fesm2022/cloud-ide-layout.mjs +1 -261
- package/fesm2022/cloud-ide-layout.mjs.map +1 -1
- package/lib/cloud-ide-layout.routes.d.ts +1 -0
- package/lib/layout/console/console-wrapper/console-wrapper.component.d.ts +3 -3
- package/lib/layout/console/console.service.d.ts +9 -0
- package/lib/layout/footer/footer-wrapper/footer-wrapper.component.d.ts +7 -3
- package/lib/layout/footer/footer.service.d.ts +9 -0
- package/lib/layout/header/header-wrapper/header-wrapper.component.d.ts +17 -9
- package/lib/layout/header/header.service.d.ts +4 -3
- package/lib/layout/home/home-wrapper/home-wrapper.component.d.ts +90 -1
- package/lib/layout/request/request-wrapper/request-wrapper.component.d.ts +10 -1
- package/lib/layout/request/request.service.d.ts +60 -0
- package/lib/layout/request/tab-content/tab-content.component.d.ts +19 -0
- package/lib/layout/shared/shared-wrapper/shared-wrapper.component.d.ts +4 -5
- package/lib/layout/shared/shared.service.d.ts +104 -6
- package/lib/layout/sidebar/sidebar-wrapper/sidebar-wrapper.component.d.ts +135 -6
- package/lib/layout/sidebar/sidebar.service.d.ts +3 -2
- package/lib/layout/sidedrawer/cide-lyt-drawer-base.class.d.ts +16 -0
- package/lib/layout/sidedrawer/drawer-theme/drawer-theme.component.d.ts +71 -0
- package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.component.d.ts +48 -0
- package/lib/layout/sidedrawer/sidedrawer-notes/sidedrawer-notes.service.d.ts +13 -0
- package/lib/layout/sidedrawer/sidedrawer-wrapper/sidedrawer-wrapper.component.d.ts +28 -3
- package/lib/layout/sidedrawer/sidedrawer.service.d.ts +30 -0
- package/lib/services/app-state/app-state-helper.service.d.ts +150 -0
- package/lib/services/app-state/app-state.service.d.ts +85 -0
- package/lib/services/app-state/index.d.ts +3 -0
- package/lib/services/cache-manager/cache-manager.service.d.ts +64 -0
- package/lib/services/file-manager/file-manager.service.d.ts +0 -2
- package/lib/services/tab-state.service.d.ts +79 -0
- package/lib/services/theme/theme.service.d.ts +71 -0
- package/lib/services/user-status/user-status.service.d.ts +57 -0
- package/lib/utils/custom-route-reuse-strategy.d.ts +15 -0
- package/lib/utils/index.d.ts +1 -0
- package/package.json +2 -2
- package/public-api.d.ts +4 -0
- package/src/lib/assets/css/cide-lyt-style.scss +182 -0
- package/src/lib/assets/css/cide-lyt-variable.scss +119 -0
- package/fesm2022/cloud-ide-layout-home-wrapper.component-BV7ptL0Y.mjs +0 -14
- 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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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
|
-
}]
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
}] });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWxheW91dC9zcmMvbGliL2xheW91dC9zaGFyZWQvc2hhcmVkLXdyYXBwZXIvc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7O0FBUzdGLE1BQU0sT0FBTyw2QkFBNkI7SUFQMUM7UUFRUywrQkFBMEIsR0FBNEMsRUFBRSxDQUFDO1FBQ3pFLGNBQVMsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0Msc0JBQWlCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbkQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0tBa0NwRDtJQWhDQyxRQUFRO1FBQ04sbURBQW1EO1FBQ25ELElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxNQUFNLGlCQUFpQixHQUFrQjtnQkFDdkMsY0FBYyxFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxjQUFjO2dCQUMvRCxtQkFBbUIsRUFBRSxRQUFRLElBQUksU0FBUzthQUMzQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBRXhELElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxJQUFJO2dCQUNkLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLENBQUMsa0JBQWtELEVBQUUsRUFBRTtvQkFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1REFBdUQsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDdkcsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUVoRCw4RkFBOEY7b0JBQzlGLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztvQkFDekQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO29CQUMzRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7OEdBcENVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLG1GQ2IxQyxrQ0FDQTs7MkZEWWEsNkJBQTZCO2tCQVB6QyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLFdBQ1AsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENpZGVMeXRTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVzaWduQ29uZmlnQ29udHJvbGxlclJlc3BvbnNlLCBkZXNpZ25Db25maWdSZXNwb25zZURhdGEsIE1EZXNpZ25Db25maWcgfSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcbmltcG9ydCB7IENpZGVMeXRTaWRlZHJhd2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NpZGVkcmF3ZXIvc2lkZWRyYXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFN0YXRlSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcC1zdGF0ZS9hcHAtc3RhdGUtaGVscGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjaWRlLWx5dC1zaGFyZWQtd3JhcHBlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2hhcmVkLXdyYXBwZXIuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQ2lkZUx5dFNoYXJlZFdyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgc2hhcmVkX3dyYXBwZXJfc2V0dXBfcGFyYW06IFBhcnRpYWw8Q2lkZUx5dFNoYXJlZFdyYXBwZXJTZXR1cFBhcmFtPiA9IHt9O1xuICBwdWJsaWMgcGFnZV9kYXRhOiBkZXNpZ25Db25maWdSZXNwb25zZURhdGEgPSB7fTtcbiAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlID0gaW5qZWN0KENpZGVMeXRTaGFyZWRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzaWRlZHJhd2VyU2VydmljZSA9IGluamVjdChDaWRlTHl0U2lkZWRyYXdlclNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgYXBwU3RhdGUgPSBpbmplY3QoQXBwU3RhdGVIZWxwZXJTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBMb2FkIGFuZCBwcm9jZXNzIHBhZ2UgZGF0YSB1c2luZyBtb2Rlcm4gYXBwcm9hY2hcbiAgICBpZiAodGhpcy5zaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbT8uc3lwZ19wYWdlX2NvZGUpIHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gdGhpcy5hcHBTdGF0ZS5nZXRBY3RpdmVFbnRpdHlJZCgpO1xuICAgICAgY29uc3QgcGFnZV9kYXRhX3BheWxvYWQ6IE1EZXNpZ25Db25maWcgPSB7IFxuICAgICAgICBzeXBnX3BhZ2VfY29kZTogdGhpcy5zaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbT8uc3lwZ19wYWdlX2NvZGUsIFxuICAgICAgICBzeXRtX2VudGl0eV9pZF9zeWVuOiBlbnRpdHlJZCB8fCB1bmRlZmluZWQgXG4gICAgICB9O1xuICAgICAgY29uc29sZS5sb2coJ/CflI0gUGFnZSBkYXRhIHBheWxvYWQ6JywgcGFnZV9kYXRhX3BheWxvYWQpO1xuICAgICAgXG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2UubG9hZEFuZFByb2Nlc3NQYWdlRGF0YShwYWdlX2RhdGFfcGF5bG9hZCwge1xuICAgICAgICBzZXRUaXRsZTogdHJ1ZSxcbiAgICAgICAgc2V0U2lkZWJhckNvbnRleHQ6IHRydWUsXG4gICAgICAgIHVwZGF0ZUxheW91dDogdHJ1ZVxuICAgICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHBhZ2VfZGF0YV9yZXNwb25zZTogZGVzaWduQ29uZmlnQ29udHJvbGxlclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ+KchSBTSEFSRUQgV1JBUFBFUjogUGFnZSBkYXRhIGxvYWRlZCBhbmQgcHJvY2Vzc2VkIGZvcjonLCBwYWdlX2RhdGFfcGF5bG9hZC5zeXBnX3BhZ2VfY29kZSk7XG4gICAgICAgICAgdGhpcy5wYWdlX2RhdGEgPSBwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGEgfHwge307XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU2lkZWJhciBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgc2V0IGJ5IGxvYWRBbmRQcm9jZXNzUGFnZURhdGEgd2hlbiBzZXRTaWRlYmFyQ29udGV4dDogdHJ1ZVxuICAgICAgICAgIGNvbnN0IHBhZ2VJZCA9IHBhZ2VfZGF0YV9yZXNwb25zZT8uZGF0YT8ucGFnZT8uX2lkIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IHRoZW1lSWQgPSBwYWdlX2RhdGFfcmVzcG9uc2U/LmRhdGE/LnRoZW1lPy5faWQgfHwgJyc7XG4gICAgICAgICAgdGhpcy5zaWRlZHJhd2VyU2VydmljZS5zZXRDb250ZXh0KHBhZ2VJZCwgdGhlbWVJZCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcign4p2MIFNIQVJFRCBXUkFQUEVSOiBFcnJvciBsb2FkaW5nIHBhZ2UgZGF0YTonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lkZUx5dFNoYXJlZFdyYXBwZXJTZXR1cFBhcmFtIHtcbiAgc3lwZ19wYWdlX2NvZGU6IHN0cmluZ1xufSIsIjxwPnNoYXJlZC13cmFwcGVyIHdvcmtzITwvcD5cclxuIl19
|