tango-app-ui-store-ticket-infra 3.7.7 → 3.7.8
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/esm2022/lib/components/tango-store-infra/tango-store-infra.component.mjs +121 -12
- package/esm2022/lib/components/ticket-infra-v2/file-logs/file-logs.component.mjs +18 -0
- package/esm2022/lib/components/ticket-infra-v2/remote-terminal/remote-terminal.component.mjs +355 -0
- package/esm2022/lib/services/tickets.service.mjs +13 -1
- package/esm2022/lib/tango-store-infra.module.mjs +5 -3
- package/fesm2022/tango-app-ui-store-ticket-infra.mjs +513 -33
- package/fesm2022/tango-app-ui-store-ticket-infra.mjs.map +1 -1
- package/lib/components/tango-store-infra/tango-store-infra.component.d.ts +25 -2
- package/lib/components/ticket-infra-v2/file-logs/file-logs.component.d.ts +10 -0
- package/lib/components/ticket-infra-v2/remote-terminal/remote-terminal.component.d.ts +76 -0
- package/lib/services/tickets.service.d.ts +3 -0
- package/lib/tango-store-infra.module.d.ts +9 -7
- package/package.json +1 -1
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import { RemoteTerminalComponent } from '../ticket-infra-v2/remote-terminal/remote-terminal.component';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "tango-app-ui-global";
|
|
5
6
|
import * as i2 from "@angular/router";
|
|
6
|
-
import * as i3 from "
|
|
7
|
-
import * as i4 from "
|
|
8
|
-
import * as i5 from "
|
|
9
|
-
import * as i6 from "
|
|
10
|
-
import * as i7 from "../ticket-
|
|
11
|
-
import * as i8 from "../
|
|
7
|
+
import * as i3 from "../../services/tickets.service";
|
|
8
|
+
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
import * as i5 from "tango-app-ui-shared";
|
|
10
|
+
import * as i6 from "@angular/common";
|
|
11
|
+
import * as i7 from "../ticket-infra/ticket-infra.component";
|
|
12
|
+
import * as i8 from "../summary-infra/summary-infra.component";
|
|
13
|
+
import * as i9 from "../footfall-directory/footfall-directory.component";
|
|
14
|
+
import * as i10 from "../ticket-camera-angle/ticket-camera-angle.component";
|
|
15
|
+
import * as i11 from "../ticket-infra-v2/ticket-infra-v2.component";
|
|
16
|
+
import * as i12 from "../ticket-infra-v2/file-logs/file-logs.component";
|
|
12
17
|
export class TangoStoreInfraComponent {
|
|
13
18
|
pageInfo;
|
|
14
19
|
router;
|
|
15
20
|
gs;
|
|
16
21
|
route;
|
|
22
|
+
ticketsService;
|
|
23
|
+
modal;
|
|
24
|
+
authService;
|
|
17
25
|
selectedTab;
|
|
18
26
|
detach = new Subject();
|
|
19
27
|
storeId;
|
|
@@ -21,11 +29,14 @@ export class TangoStoreInfraComponent {
|
|
|
21
29
|
selectedTab1;
|
|
22
30
|
subTabFromUrlApplied = false;
|
|
23
31
|
clientName;
|
|
24
|
-
constructor(pageInfo, router, gs, route) {
|
|
32
|
+
constructor(pageInfo, router, gs, route, ticketsService, modal, authService) {
|
|
25
33
|
this.pageInfo = pageInfo;
|
|
26
34
|
this.router = router;
|
|
27
35
|
this.gs = gs;
|
|
28
36
|
this.route = route;
|
|
37
|
+
this.ticketsService = ticketsService;
|
|
38
|
+
this.modal = modal;
|
|
39
|
+
this.authService = authService;
|
|
29
40
|
}
|
|
30
41
|
headerFilters;
|
|
31
42
|
ngOnDestroy() {
|
|
@@ -86,6 +97,9 @@ export class TangoStoreInfraComponent {
|
|
|
86
97
|
}
|
|
87
98
|
this.updateStoreIdQueryParam(this.storeId);
|
|
88
99
|
this.setPageData();
|
|
100
|
+
this.loadStoreName(this.storeId);
|
|
101
|
+
this.loadLiveStatus(this.storeId, data);
|
|
102
|
+
this.loadClient(data);
|
|
89
103
|
}
|
|
90
104
|
},
|
|
91
105
|
});
|
|
@@ -169,6 +183,76 @@ export class TangoStoreInfraComponent {
|
|
|
169
183
|
}
|
|
170
184
|
this.pageInfo.setBreadcrumbs(breadcrumbs);
|
|
171
185
|
}
|
|
186
|
+
// Store name for the card above the tabs. The header filter doesn't carry it on
|
|
187
|
+
// this page, so it comes from get-store. '--' while loading or on failure.
|
|
188
|
+
storeNameFromApi = '';
|
|
189
|
+
get storeName() { return this.storeNameFromApi || '--'; }
|
|
190
|
+
// Open / close time from the store profile, as the store header shows them.
|
|
191
|
+
storeOpen = '';
|
|
192
|
+
storeClose = '';
|
|
193
|
+
loadStoreName(storeId) {
|
|
194
|
+
this.storeNameFromApi = '';
|
|
195
|
+
this.storeOpen = '';
|
|
196
|
+
this.storeClose = '';
|
|
197
|
+
if (!storeId)
|
|
198
|
+
return;
|
|
199
|
+
this.ticketsService.getStoreDetails(storeId).pipe(takeUntil(this.detach)).subscribe({
|
|
200
|
+
next: (res) => {
|
|
201
|
+
// Ignore a late reply for a store that is no longer selected.
|
|
202
|
+
if (storeId !== this.storeId)
|
|
203
|
+
return;
|
|
204
|
+
this.storeNameFromApi = res?.data?.storeName || '';
|
|
205
|
+
this.storeOpen = res?.data?.storeProfile?.open || '';
|
|
206
|
+
this.storeClose = res?.data?.storeProfile?.close || '';
|
|
207
|
+
},
|
|
208
|
+
error: () => { },
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
// The store-card buttons (Terminal access, File access, Call) are for Tango users only.
|
|
212
|
+
get isTango() { return this.gs.userAccess.value?.userType === 'tango'; }
|
|
213
|
+
// ...and only for Infra V2 clients. Same call and field the Tickets page uses for
|
|
214
|
+
// its Infra V2 tab. Hidden while loading or on error.
|
|
215
|
+
infraTicketType = null;
|
|
216
|
+
clientDisplayName = '';
|
|
217
|
+
get showStoreActions() { return this.isTango && this.infraTicketType === 'V2'; }
|
|
218
|
+
loadClient(header) {
|
|
219
|
+
this.infraTicketType = null;
|
|
220
|
+
this.clientDisplayName = '';
|
|
221
|
+
const clientId = header?.client || String(this.storeId || '').split('-')[0];
|
|
222
|
+
if (!clientId)
|
|
223
|
+
return;
|
|
224
|
+
this.authService.getBrandDetails(clientId).pipe(takeUntil(this.detach)).subscribe({
|
|
225
|
+
next: (res) => {
|
|
226
|
+
this.infraTicketType = res?.data?.ticketConfigs?.infraTicketType ?? null;
|
|
227
|
+
this.clientDisplayName = res?.data?.clientName || '';
|
|
228
|
+
},
|
|
229
|
+
error: () => { },
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
// Live / Not Live beside the name, by the same rule as the Summary card's tiles.
|
|
233
|
+
// Empty - and hidden - while loading, for a non-V2 client, or for a store V2
|
|
234
|
+
// does not count (inactive, or no first file yet).
|
|
235
|
+
liveStatus = '';
|
|
236
|
+
loadLiveStatus(storeId, header) {
|
|
237
|
+
this.liveStatus = '';
|
|
238
|
+
const clientId = header?.client || String(storeId || '').split('-')[0];
|
|
239
|
+
if (!storeId || !clientId || !header?.date?.endDate)
|
|
240
|
+
return;
|
|
241
|
+
const body = {
|
|
242
|
+
clientId: [clientId], fromDate: header.date.startDate || header.date.endDate, toDate: header.date.endDate,
|
|
243
|
+
search: storeId, offset: 1, limit: 50,
|
|
244
|
+
};
|
|
245
|
+
this.ticketsService.storeLiveStatus(body).pipe(takeUntil(this.detach)).subscribe({
|
|
246
|
+
next: (res) => {
|
|
247
|
+
if (storeId !== this.storeId)
|
|
248
|
+
return;
|
|
249
|
+
// search is a partial match (406-1 also finds 406-10), so pick the exact store.
|
|
250
|
+
const row = (res?.data?.rows ?? []).find((r) => r.storeId === storeId);
|
|
251
|
+
this.liveStatus = row?.status === 'Live' || row?.status === 'Not Live' ? row.status : '';
|
|
252
|
+
},
|
|
253
|
+
error: () => { },
|
|
254
|
+
});
|
|
255
|
+
}
|
|
172
256
|
selectedTabs(value) {
|
|
173
257
|
this.selectedTab = value;
|
|
174
258
|
if (this.selectedTab === 'infra') {
|
|
@@ -186,11 +270,36 @@ export class TangoStoreInfraComponent {
|
|
|
186
270
|
queryParams['type'] = type === 'ticketsV2' ? 'infrav2' : 'infra';
|
|
187
271
|
this.router.navigate([], { relativeTo: this.route, queryParams: queryParams });
|
|
188
272
|
}
|
|
189
|
-
|
|
190
|
-
|
|
273
|
+
// Terminal access pop-up: opens at once, then fills from /remote/session.
|
|
274
|
+
// Every call is audit-logged as a session opened, Cancel included.
|
|
275
|
+
session = null;
|
|
276
|
+
sessionState = 'loading';
|
|
277
|
+
sessionError = '';
|
|
278
|
+
openTerminal(tpl) {
|
|
279
|
+
this.session = null;
|
|
280
|
+
this.sessionError = '';
|
|
281
|
+
this.sessionState = 'loading';
|
|
282
|
+
this.modal.open(tpl, { centered: true });
|
|
283
|
+
this.ticketsService.remoteSession(this.storeId).pipe(takeUntil(this.detach)).subscribe({
|
|
284
|
+
next: (res) => { this.session = res?.data ?? null; this.sessionState = 'ready'; },
|
|
285
|
+
// The API's own message: "Store not found", "No edge agent...", "not configured".
|
|
286
|
+
error: (err) => { this.sessionError = err?.error?.error || ''; this.sessionState = 'error'; },
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
// Connect: swap the confirmation for the terminal pop-up. Static backdrop and
|
|
290
|
+
// no Esc, so a stray click cannot drop a live shell; it closes via Close.
|
|
291
|
+
connect(confirmRef) {
|
|
292
|
+
confirmRef.close();
|
|
293
|
+
const ref = this.modal.open(RemoteTerminalComponent, {
|
|
294
|
+
size: 'xl', centered: true, backdrop: 'static', keyboard: false, modalDialogClass: 'remote-terminal-modal',
|
|
295
|
+
});
|
|
296
|
+
ref.componentInstance.session = this.session;
|
|
297
|
+
}
|
|
298
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoStoreInfraComponent, deps: [{ token: i1.PageInfoService }, { token: i2.Router }, { token: i1.GlobalStateService }, { token: i2.ActivatedRoute }, { token: i3.TicketsService }, { token: i4.NgbModal }, { token: i5.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
299
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TangoStoreInfraComponent, selector: "lib-tango-store-infra", ngImport: i0, template: "<!-- Store card: name and timings from get-store, Live status from the V2 store list. -->\r\n<div class=\"card mb-5 py-4 px-5\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-3\"><svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#D1FADF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#ECFDF3\" stroke-width=\"6\"/>\r\n <path d=\"M15.6799 18.8039L15.6267 18.8871C15.0686 19.8741 15.6644 21.1215 16.7361 21.2646C16.8331 21.2765 16.9235 21.2828 17.0118 21.2828C17.5899 21.2828 18.1011 21.0348 18.4574 20.648L19.0107 20.0474L19.5621 20.6498C19.9141 21.0342 20.4241 21.2828 21.0061 21.2828C21.5856 21.2828 22.0985 21.0338 22.4502 20.6498L23.0033 20.0455L23.5565 20.6498C23.9081 21.0338 24.4211 21.2828 25.0005 21.2828C25.58 21.2828 26.0929 21.0338 26.4445 20.6498L26.9977 20.0455L27.5509 20.6498C27.9025 21.0338 28.4155 21.2828 28.9949 21.2828C29.0803 21.2828 29.1733 21.2765 29.2697 21.2647C30.3649 21.1154 30.9627 19.8012 30.324 18.8044C30.324 18.8043 30.324 18.8043 30.3239 18.8042L28.5658 16.0628L28.5658 16.0628L28.5648 16.0614C28.5496 16.0375 28.5121 16.012 28.465 16.012H17.5356C17.4884 16.012 17.4509 16.0375 17.4357 16.0614L17.4351 16.0623L15.6799 18.8039ZM28.6514 23.7372V26.8691V27.6191H27.9014H18.0992H17.3492V26.8691V23.7376C17.239 23.7458 17.1274 23.7501 17.0148 23.7501C16.9725 23.7501 16.9305 23.7494 16.8888 23.7482V26.8691V28.8036C16.8888 29.4471 17.4227 29.9882 18.0992 29.9882H27.9014C28.5779 29.9882 29.1118 29.4471 29.1118 28.8036V26.8691V23.7484C29.072 23.7495 29.032 23.7501 28.9918 23.7501C28.8774 23.7501 28.7639 23.7457 28.6514 23.7372Z\" stroke=\"#027A48\" stroke-width=\"1.5\"/>\r\n </svg></span>\r\n <div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"store-card-name\">{{ storeName }}</span>\r\n <span *ngIf=\"liveStatus\" class=\"live-status ms-4\" [class.down]=\"liveStatus === 'Not Live'\">\r\n <span class=\"live-dot\"></span>{{ liveStatus }}\r\n </span>\r\n </div>\r\n <div class=\"store-card-meta d-flex align-items-center mt-1\">\r\n <span>{{ storeId || '--' }}</span>\r\n <span class=\"mx-2\">\u00B7</span>\r\n <svg class=\"me-1\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 4.5V9L12 10.5M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ storeOpen || '--' }} - {{ storeClose || '--' }}</span>\r\n </div>\r\n </div>\r\n <!-- Tango users of Infra V2 clients only. The hovered button expands; Terminal access is expanded while none is. -->\r\n <div *ngIf=\"showStoreActions\" class=\"store-actions ms-auto d-flex align-items-center gap-3\">\r\n <button type=\"button\" class=\"store-act is-default\" (click)=\"openTerminal(terminalTpl)\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Terminal access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 7.5C3 6.4 3.9 5.5 5 5.5H9.2L11.2 7.5H19C20.1 7.5 21 8.4 21 9.5V17C21 18.1 20.1 19 19 19H5C3.9 19 3 18.1 3 17V7.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">File access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8.6 4.5L6.4 3.6C5.8 3.4 5.1 3.6 4.7 4.1L3.5 5.6C3.1 6.1 3 6.8 3.2 7.4C4.9 12.7 9.3 17.1 14.6 18.8C15.2 19 15.9 18.9 16.4 18.5L17.9 17.3C18.4 16.9 18.6 16.2 18.4 15.6L17.5 13.4C17.3 12.8 16.6 12.5 16 12.6L13.6 13.1C11.9 12.2 10.8 11.1 9.9 9.4L10.4 7C10.5 6.4 10.2 5.7 9.6 5.5L8.6 4.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Call</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n <!-- File logs, at the right end of the row: its own page at ?type=fileLogs. -->\r\n <li class=\"nav-item ms-auto\" (click)=\"selectedTabs('fileLogs')\">\r\n <a [ngClass]=\"selectedTab ==='fileLogs' ? 'active' :''\" class=\"nav-link cursor-pointer file-logs-link\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M14 3H7C5.9 3 5 3.9 5 5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V8L14 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 3V8H19M9 13H15M9 17H13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n File logs\r\n </a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='fileLogs'\">\r\n <lib-file-logs [storeId]=\"storeId\"></lib-file-logs>\r\n</div>\r\n<router-outlet></router-outlet>\r\n\r\n<!-- Terminal access confirmation. Filled from /infra/v2/remote/session; Client name from the client record. -->\r\n<ng-template #terminalTpl let-modal>\r\n <div class=\"access-modal\">\r\n <div class=\"access-head\">\r\n <span class=\"access-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"access-title fs-4 text-gray-800 fw-bold\">Open terminal access?</span>\r\n </div>\r\n <div class=\"access-body\">\r\n <p class=\"access-text\">This opens a command window on the store system. Commands run on the live system.</p>\r\n <div class=\"access-box\">\r\n <!-- Loading: shimmering placeholder rows (see .skel). -->\r\n <ng-container *ngIf=\"sessionState === 'loading'\">\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n </ng-container>\r\n <div *ngIf=\"sessionState === 'error'\" class=\"access-note error\">{{ sessionError || \"Couldn't open the session.\" }}</div>\r\n <ng-container *ngIf=\"sessionState === 'ready'\">\r\n <div class=\"access-row\"><span class=\"access-label\">Client name</span><span class=\"access-value\">{{ clientDisplayName || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store ID</span><span class=\"access-value\">{{ session?.storeId || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store name</span><span class=\"access-value\">{{ session?.storeName || '--' }}</span></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"access-foot\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"sessionState !== 'ready'\" (click)=\"connect(modal)\">Connect</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}.nav-item .nav-link.file-logs-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px}.nav-item .nav-link.file-logs-link:hover{border-bottom:1px solid transparent}.store-card-name{font-size:18px;line-height:28px;font-weight:600;color:var(--Gray-900, #101828)}.store-act{display:inline-flex;align-items:center;height:44px;padding:0 12px;border:0;border-radius:12px;background:var(--Primary-700, #009BF3);color:#fff;font-size:15px;font-weight:700;transition:background-color .3s ease,color .3s ease,padding .3s ease}.store-act svg{flex-shrink:0}.store-act .act-label{max-width:0;opacity:0;margin-left:0;overflow:hidden;white-space:nowrap;transition:max-width .3s ease,opacity .2s ease,margin-left .3s ease}.store-actions:not(:has(.store-act:hover)) .store-act.is-default,.store-act:hover{background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:0 18px}.store-actions:not(:has(.store-act:hover)) .store-act.is-default .act-label,.store-act:hover .act-label{max-width:160px;opacity:1;margin-left:8px}.store-card-meta{font-size:12px;line-height:18px;font-weight:500;color:var(--Gray-500, #667085)}.live-status{display:inline-flex;align-items:center;padding:2px 8px;border-radius:16px;font-size:12px;line-height:18px;font-weight:500;background:#ecfdf3;border:1px solid #ABEFC6;color:#067647}.live-status .live-dot{width:6px;height:6px;border-radius:50%;background:#17b26a;margin-right:6px}.live-status.down{background:#fef3f2;border-color:#fecdca;color:#b42318}.live-status.down .live-dot{background:#d92d20}.access-modal{background:#fff;border-radius:16px;overflow:hidden}.access-head{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.access-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:12px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)}.access-title{flex:1}.access-body{padding:20px 24px 0}.access-text{margin:0 0 20px;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-box{padding:16px 20px;border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:var(--Gray-50, #F9FAFB)}.access-row{display:flex;align-items:center;padding:8px 0}.access-label{width:180px;flex-shrink:0;font-size:12px;line-height:18px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--Gray-500, #667085)}.access-value{font-size:14px;line-height:20px;font-weight:500;color:var(--Gray-900, #101828)}.skel{display:inline-block;height:14px;margin:3px 0;border-radius:6px;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:skel-shimmer 1.5s linear infinite}@keyframes skel-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skel-label{width:110px;margin-right:70px}.skel-value{width:160px}.access-note{padding:8px 0;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-note.error{color:var(--Error-700, #B42318)}.access-foot{display:flex;justify-content:flex-end;gap:12px;padding:24px}.access-foot .btn{font-size:14px!important;line-height:20px!important;padding:8px 16px!important}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i7.TicketInfraComponent, selector: "lib-ticket-infra", inputs: ["selectedTab"] }, { kind: "component", type: i8.SummaryInfraComponent, selector: "lib-summary-infra", inputs: ["selectedTab"] }, { kind: "component", type: i9.FootfallDirectoryComponent, selector: "lib-footfall-directory", inputs: ["selectedTab"] }, { kind: "component", type: i10.TicketCameraAngleComponent, selector: "lib-ticket-camera-angle", inputs: ["selectedTab"] }, { kind: "component", type: i11.TicketInfraV2Component, selector: "lib-ticket-infra-v2", inputs: ["selectedTab"] }, { kind: "component", type: i12.FileLogsComponent, selector: "lib-file-logs", inputs: ["storeId"] }] });
|
|
191
300
|
}
|
|
192
301
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoStoreInfraComponent, decorators: [{
|
|
193
302
|
type: Component,
|
|
194
|
-
args: [{ selector: 'lib-tango-store-infra', template: "<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<router-outlet></router-outlet>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}\n"] }]
|
|
195
|
-
}], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.Router }, { type: i1.GlobalStateService }, { type: i2.ActivatedRoute }] });
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtdGlja2V0LWluZnJhL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1zdG9yZS1pbmZyYS90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLXN0b3JlLWluZnJhL3RhbmdvLXN0b3JlLWluZnJhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBUTFDLE1BQU0sT0FBTyx3QkFBd0I7SUFRZjtJQUFpQztJQUFxQjtJQUE4QjtJQVB4RyxXQUFXLENBQU07SUFDVCxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUMvQixPQUFPLENBQU07SUFDYixJQUFJLENBQU07SUFDVixZQUFZLENBQU07SUFDVixvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDckMsVUFBVSxDQUFNO0lBQ2hCLFlBQW9CLFFBQXdCLEVBQVMsTUFBYSxFQUFRLEVBQXFCLEVBQVMsS0FBb0I7UUFBeEcsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQVEsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFlO0lBRTVILENBQUM7SUFDRCxhQUFhLENBQUs7SUFDbEIsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENB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QUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQzt3R0E3S1ksd0JBQXdCOzRGQUF4Qix3QkFBd0IsNkRDVnJDLDQvRkFpRCtCOzs0RkR2Q2xCLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhbmdvLXN0b3JlLWluZnJhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvU3RvcmVJbmZyYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIHNlbGVjdGVkVGFiOiBhbnk7XHJcbiAgcHJpdmF0ZSBkZXRhY2ggPSBuZXcgU3ViamVjdCgpO1xyXG4gIHN0b3JlSWQ6IGFueTtcclxuICB0eXBlOiBhbnk7XHJcbiAgc2VsZWN0ZWRUYWIxOiBhbnk7XHJcbiAgcHJpdmF0ZSBzdWJUYWJGcm9tVXJsQXBwbGllZCA9IGZhbHNlO1xyXG4gIGNsaWVudE5hbWU6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2VJbmZvOlBhZ2VJbmZvU2VydmljZSxwcml2YXRlIHJvdXRlcjpSb3V0ZXIscHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlKXtcclxuXHJcbiAgfVxyXG4gIGhlYWRlckZpbHRlcnM6YW55O1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXRhY2gubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGV0YWNoLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGNsaWVudERhdGE6YW55O1xyXG4gICB1c2VyVHlwZTphbnk7XHJcbnByaXZhdGUgaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFzdG9yZUlkIHx8ICF0aGlzLnVzZXJUeXBlPy5jbGllbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyAvLyBUYW5nbyB1c2VycyBjYW4gYWNjZXNzIGFsbFxyXG4gIC8vIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSAndGFuZ28nKSB7XHJcbiAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAvLyB9XHJcblxyXG4gIGNvbnN0IHN0b3JlQ2xpZW50SWQgPSBzdG9yZUlkLnNwbGl0KCctJylbMF07XHJcbiAgcmV0dXJuIHN0b3JlQ2xpZW50SWQgPT09IFN0cmluZyh0aGlzLnVzZXJUeXBlLmNsaWVudElkKTtcclxufVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgdGhpcy51c2VyVHlwZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgJ3t9Jyk7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBjb25zdCB0eXBlID0gcGFyYW1zWyd0eXBlJ10gPyBwYXJhbXNbJ3R5cGUnXSA6ICdpbmZyYSc7XHJcbiAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAvLyBFdmVyeSBJbmZyYSBibG9jayBpcyBnYXRlZCBvbiBzZWxlY3RlZFRhYiA9PT0gJ2luZnJhJywgc28gdGhpcyByZWFkc1xyXG4gICAgICAgIC8vIGFzIFwidGhlIEluZnJhIHRhYiwgb3BlbmVkIG9uIFRpY2tldHMgVjJcIiByYXRoZXIgdGhhbiBhIHRhYiBvZiBpdHMgb3duLlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSAnaW5mcmEnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gT25seSBvbiB0aGUgZmlyc3QgZW1pc3Npb246IHNlbGVjdGVkVGFiczEoKSByZXdyaXRlcyBgdHlwZWAsIHdoaWNoXHJcbiAgICAgIC8vIGZpcmVzIHRoaXMgc3Vic2NyaXB0aW9uIGFnYWluLCBhbmQgd2l0aG91dCB0aGUgZ3VhcmQgdGhhdCB3b3VsZCB1bmRvXHJcbiAgICAgIC8vIHRoZSBjbGljayAtIFN1bW1hcnkgaW4gcGFydGljdWxhciB3b3VsZCBib3VuY2UgdG8gVGlja2V0cyBWMS5cclxuICAgICAgaWYoIXRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQpe1xyXG4gICAgICAgIHRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0gJ3RpY2tldHNWMidcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5zZWxlY3RlZFRhYiA9PT0naW5mcmEnKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0ndGlja2V0cydcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgICAgICAgIGNvbnN0IGNsaWVudERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcInt9XCIpO1xyXG4gICAgdGhpcy5jbGllbnREYXRhID0gY2xpZW50RGF0YTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlSWQgPVxyXG4gICAgICAgICAgICBkYXRhICYmIGRhdGEuc3RvcmUgPyBkYXRhLnN0b3JlIDogdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiL1wiKVszXTtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnROYW1lID0gZGF0YT8uY2xpZW50TmFtZSA/IGRhdGE/LmNsaWVudE5hbWU6Jyc7XHJcbiAgICAgICAgICAgICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSAhPT0gJ3RhbmdvJykge1xyXG4gICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3RvcmVJZFZhbGlkRm9yQ2xpZW50KHRoaXMuc3RvcmVJZCkpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9yLzQwNCddKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmVJZFF1ZXJ5UGFyYW0odGhpcy5zdG9yZUlkKTtcclxuICAgICAgICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIH1cclxuICAgIHVwZGF0ZVN0b3JlSWRRdWVyeVBhcmFtKHN0b3JlSWQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlICE9PSAndGFuZ28nKSB7XHJcbiAgICAgICBpZiAoIXRoaXMuaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZCkpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9yLzQwNCddKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcbn1cclxuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfTtcclxuICAgICAgLy8gVXBkYXRlIHN0b3JlSWQgaW4gcXVlcnlQYXJhbXNcclxuICAgICAgcXVlcnlQYXJhbXMuc3RvcmVJZCA9IHN0b3JlSWQ7XHJcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBzYW1lIHJvdXRlIHdpdGggdXBkYXRlZCBxdWVyeVBhcmFtc1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICB9XHJcbiAgc2V0UGFnZURhdGEoKXtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJUaWNrZXRzXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcclxuICAgICAgXCJWaWV3LCBzaGFyZSwgZG93bmxvYWQgYW5kIGJlbmNobWFyayB0aGUgc3RvcmVzIHBlcmZvcm1hbmNlIGluIG9uZSBzY3JlZW5cIlxyXG4gICAgKTtcclxuICAgIGxldCBicmVhZGNydW1iczogYW55W10gPSBbXTtcclxuICAgIGNvbnN0IGNvbW1vbkJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY2xpZW50TmFtZSxcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3RvcmVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmNsaWVudE5hbWUsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N0b3Jlc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnN0b3JlSWQsXHJcbiAgICAgICAgcGF0aDogYC9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXM/c3RvcmVJZD0ke3RoaXMuc3RvcmVJZH1gLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5zdG9yZUlkLFxyXG4gICAgICAgIHBhdGg6IGAvbWFuYWdlL3N0b3Jlcy9jYW1lcmFzP3N0b3JlSWQ9JHt0aGlzLnN0b3JlSWR9YCxcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiKSB7XHJcbiAgICAgIGJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL2JyYW5kc1wiLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvYnJhbmRzXCIsXHJcbiAgICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLmNvbW1vbkJyZWFkY3J1bWJzLFxyXG4gICAgICBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSBcImNsaWVudFwiKSB7XHJcbiAgICAgIGJyZWFkY3J1bWJzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uY29tbW9uQnJlYWRjcnVtYnMsXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoYnJlYWRjcnVtYnMpO1xyXG4gIH1cclxuc2VsZWN0ZWRUYWJzKHZhbHVlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFRhYiA9IHZhbHVlO1xyXG4gIGlmKHRoaXMuc2VsZWN0ZWRUYWIgPT09J2luZnJhJyl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiMSA9J3RpY2tldHMnXHJcbiAgfVxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH07XHJcbiAgICAgIHF1ZXJ5UGFyYW1zWyd0eXBlJ10gPSB2YWx1ZTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzp0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXN9KTtcclxufVxyXG5cclxuc2VsZWN0ZWRUYWJzMSh0eXBlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFRhYjEgPSB0eXBlO1xyXG4gIC8vIEtlZXAgdGhlIFVSTCBpbiBzdGVwLCB0aGUgc2FtZSB3YXkgc2VsZWN0ZWRUYWJzKCkgZG9lcyBmb3IgdGhlIHRvcCB0YWJzLlxyXG4gIC8vIFN1bW1hcnkgaGFzIG5vIGB0eXBlYCBvZiBpdHMgb3duLCBzbyBpdCBzaGFyZXMgJ2luZnJhJyB3aXRoIFRpY2tldHMgVjEuXHJcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfTtcclxuICAgICAgcXVlcnlQYXJhbXNbJ3R5cGUnXSA9IHR5cGUgPT09ICd0aWNrZXRzVjInID8gJ2luZnJhdjInIDogJ2luZnJhJztcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzp0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXN9KTtcclxufVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtYi01IHB5LTMgcHgtNVwiPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzMSBuYXYtbGluZS10YWJzIGJvcmRlci10cmFuc3BhcmVudCBmbGV4LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2luZnJhJylcIj48YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnID8gJ2FjdGl2ZScgOicnXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIGN1cnNvci1wb2ludGVyIG5vLWJvcmRlciBtZS02IFwiPkluZnJhPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ2RhdGFNaXNtYXRjaCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0nZGF0YU1pc21hdGNoJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkRhdGEgTWlzbWF0Y2g8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnY2FtZXJhQW5nbGVDaGFuZ2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09J2NhbWVyYUFuZ2xlQ2hhbmdlJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkNhbWVyYSBBbmdsZTwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuXHJcbiAgICAgICAgICAgICA8IS0tIDxsaSAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyB8fCBjbGllbnREYXRhPy5pc1ZNU1wiIGNsYXNzPVwibmF2LWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzKCdmb290ZmFsbCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0nZm9vdGZhbGwnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBtZS02XCI+Rm9vdGZhbGwgRGlyZWN0b3J5PC9hPlxyXG4gICAgICAgICAgICA8L2xpPiAtLT5cclxuICAgICAgICA8L3VsPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdpbmZyYSdcIiBjbGFzcz1cIm1iLTUgcHktMyBweC01XCI+XHJcbiAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXBcIj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBuYXYtaXRlbTFcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzMSgnc3VtbWFyeScpXCI+PGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIxID09PSdzdW1tYXJ5JyA/ICdhY3RpdmUnIDonJ1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIG5hdi1saW5rMSBjdXJzb3ItcG9pbnRlciBuby1ib3JkZXIgbWUtNiBcIj5TdW1tYXJ5PC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWl0ZW0xXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiczEoJ3RpY2tldHMnKVwiPlxyXG4gICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYjEgPT09J3RpY2tldHMnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBuYXYtbGluazEgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPlRpY2tldHMgVjE8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBuYXYtaXRlbTFcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzMSgndGlja2V0c1YyJylcIj5cclxuICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIxID09PSd0aWNrZXRzVjInID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBuYXYtbGluazEgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPlRpY2tldHMgVjI8L2E+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2luZnJhJyAmJiBzZWxlY3RlZFRhYjEgPT09J3N1bW1hcnknXCI+XHJcbiAgICA8bGliLXN1bW1hcnktaW5mcmEgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItc3VtbWFyeS1pbmZyYT5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnICYmIHNlbGVjdGVkVGFiMSA9PT0ndGlja2V0cydcIj5cclxuICAgIDxsaWItdGlja2V0LWluZnJhIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXRpY2tldC1pbmZyYT5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnICYmIHNlbGVjdGVkVGFiMSA9PT0ndGlja2V0c1YyJ1wiPlxyXG4gICAgPGxpYi10aWNrZXQtaW5mcmEtdjIgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItdGlja2V0LWluZnJhLXYyPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdkYXRhTWlzbWF0Y2gnXCI+XHJcbiAgICA8bGliLXRpY2tldC1pbmZyYSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi10aWNrZXQtaW5mcmE+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdjYW1lcmFBbmdsZUNoYW5nZSdcIj5cclxuICAgIDxsaWItdGlja2V0LWNhbWVyYS1hbmdsZSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi10aWNrZXQtY2FtZXJhLWFuZ2xlPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdmb290ZmFsbCdcIj5cclxuICAgIDxsaWItZm9vdGZhbGwtZGlyZWN0b3J5IFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLWZvb3RmYWxsLWRpcmVjdG9yeT5cclxuPC9kaXY+XHJcbjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD4iXX0=
|
|
303
|
+
args: [{ selector: 'lib-tango-store-infra', template: "<!-- Store card: name and timings from get-store, Live status from the V2 store list. -->\r\n<div class=\"card mb-5 py-4 px-5\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"me-3\"><svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#D1FADF\"/>\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#ECFDF3\" stroke-width=\"6\"/>\r\n <path d=\"M15.6799 18.8039L15.6267 18.8871C15.0686 19.8741 15.6644 21.1215 16.7361 21.2646C16.8331 21.2765 16.9235 21.2828 17.0118 21.2828C17.5899 21.2828 18.1011 21.0348 18.4574 20.648L19.0107 20.0474L19.5621 20.6498C19.9141 21.0342 20.4241 21.2828 21.0061 21.2828C21.5856 21.2828 22.0985 21.0338 22.4502 20.6498L23.0033 20.0455L23.5565 20.6498C23.9081 21.0338 24.4211 21.2828 25.0005 21.2828C25.58 21.2828 26.0929 21.0338 26.4445 20.6498L26.9977 20.0455L27.5509 20.6498C27.9025 21.0338 28.4155 21.2828 28.9949 21.2828C29.0803 21.2828 29.1733 21.2765 29.2697 21.2647C30.3649 21.1154 30.9627 19.8012 30.324 18.8044C30.324 18.8043 30.324 18.8043 30.3239 18.8042L28.5658 16.0628L28.5658 16.0628L28.5648 16.0614C28.5496 16.0375 28.5121 16.012 28.465 16.012H17.5356C17.4884 16.012 17.4509 16.0375 17.4357 16.0614L17.4351 16.0623L15.6799 18.8039ZM28.6514 23.7372V26.8691V27.6191H27.9014H18.0992H17.3492V26.8691V23.7376C17.239 23.7458 17.1274 23.7501 17.0148 23.7501C16.9725 23.7501 16.9305 23.7494 16.8888 23.7482V26.8691V28.8036C16.8888 29.4471 17.4227 29.9882 18.0992 29.9882H27.9014C28.5779 29.9882 29.1118 29.4471 29.1118 28.8036V26.8691V23.7484C29.072 23.7495 29.032 23.7501 28.9918 23.7501C28.8774 23.7501 28.7639 23.7457 28.6514 23.7372Z\" stroke=\"#027A48\" stroke-width=\"1.5\"/>\r\n </svg></span>\r\n <div>\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"store-card-name\">{{ storeName }}</span>\r\n <span *ngIf=\"liveStatus\" class=\"live-status ms-4\" [class.down]=\"liveStatus === 'Not Live'\">\r\n <span class=\"live-dot\"></span>{{ liveStatus }}\r\n </span>\r\n </div>\r\n <div class=\"store-card-meta d-flex align-items-center mt-1\">\r\n <span>{{ storeId || '--' }}</span>\r\n <span class=\"mx-2\">\u00B7</span>\r\n <svg class=\"me-1\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M9 4.5V9L12 10.5M16.5 9C16.5 13.1421 13.1421 16.5 9 16.5C4.85786 16.5 1.5 13.1421 1.5 9C1.5 4.85786 4.85786 1.5 9 1.5C13.1421 1.5 16.5 4.85786 16.5 9Z\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span>{{ storeOpen || '--' }} - {{ storeClose || '--' }}</span>\r\n </div>\r\n </div>\r\n <!-- Tango users of Infra V2 clients only. The hovered button expands; Terminal access is expanded while none is. -->\r\n <div *ngIf=\"showStoreActions\" class=\"store-actions ms-auto d-flex align-items-center gap-3\">\r\n <button type=\"button\" class=\"store-act is-default\" (click)=\"openTerminal(terminalTpl)\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Terminal access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 7.5C3 6.4 3.9 5.5 5 5.5H9.2L11.2 7.5H19C20.1 7.5 21 8.4 21 9.5V17C21 18.1 20.1 19 19 19H5C3.9 19 3 18.1 3 17V7.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">File access</span>\r\n </button>\r\n <button type=\"button\" class=\"store-act\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M8.6 4.5L6.4 3.6C5.8 3.4 5.1 3.6 4.7 4.1L3.5 5.6C3.1 6.1 3 6.8 3.2 7.4C4.9 12.7 9.3 17.1 14.6 18.8C15.2 19 15.9 18.9 16.4 18.5L17.9 17.3C18.4 16.9 18.6 16.2 18.4 15.6L17.5 13.4C17.3 12.8 16.6 12.5 16 12.6L13.6 13.1C11.9 12.2 10.8 11.1 9.9 9.4L10.4 7C10.5 6.4 10.2 5.7 9.6 5.5L8.6 4.5Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n </svg><span class=\"act-label\">Call</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"card mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('infra')\"><a [ngClass]=\"selectedTab ==='infra' ? 'active' :''\"\r\n class=\"nav-link cursor-pointer no-border me-6 \">Infra</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('dataMismatch')\">\r\n <a [ngClass]=\"selectedTab ==='dataMismatch' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Data Mismatch</a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('cameraAngleChange')\">\r\n <a [ngClass]=\"selectedTab ==='cameraAngleChange' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Camera Angle</a>\r\n </li>\r\n <!-- File logs, at the right end of the row: its own page at ?type=fileLogs. -->\r\n <li class=\"nav-item ms-auto\" (click)=\"selectedTabs('fileLogs')\">\r\n <a [ngClass]=\"selectedTab ==='fileLogs' ? 'active' :''\" class=\"nav-link cursor-pointer file-logs-link\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M14 3H7C5.9 3 5 3.9 5 5V19C5 20.1 5.9 21 7 21H17C18.1 21 19 20.1 19 19V8L14 3Z\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 3V8H19M9 13H15M9 17H13\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n File logs\r\n </a>\r\n </li>\r\n\r\n <!-- <li *ngIf=\"(gs.userAccess | async)?.userType === 'tango' || clientData?.isVMS\" class=\"nav-item\" (click)=\"selectedTabs('footfall')\">\r\n <a [ngClass]=\"selectedTab ==='footfall' ? 'active' :''\" class=\"nav-link cursor-pointer me-6\">Footfall Directory</a>\r\n </li> -->\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra'\" class=\"mb-5 py-3 px-5\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap\">\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('summary')\"><a [ngClass]=\"selectedTab1 ==='summary' ? 'active' :''\"\r\n class=\"nav-link nav-link1 cursor-pointer no-border me-6 \">Summary</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('tickets')\">\r\n <a [ngClass]=\"selectedTab1 ==='tickets' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V1</a>\r\n </li>\r\n <li class=\"nav-item nav-item1\" (click)=\"selectedTabs1('ticketsV2')\">\r\n <a [ngClass]=\"selectedTab1 ==='ticketsV2' ? 'active' :''\" class=\"nav-link nav-link1 cursor-pointer me-6\">Tickets V2</a>\r\n </li>\r\n </ul>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='summary'\">\r\n <lib-summary-infra [selectedTab]=\"selectedTab\"></lib-summary-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='tickets'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='infra' && selectedTab1 ==='ticketsV2'\">\r\n <lib-ticket-infra-v2 [selectedTab]=\"selectedTab\"></lib-ticket-infra-v2>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='dataMismatch'\">\r\n <lib-ticket-infra [selectedTab]=\"selectedTab\"></lib-ticket-infra>\r\n</div>\r\n\r\n<div *ngIf=\"selectedTab ==='cameraAngleChange'\">\r\n <lib-ticket-camera-angle [selectedTab]=\"selectedTab\"></lib-ticket-camera-angle>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='footfall'\">\r\n <lib-footfall-directory [selectedTab]=\"selectedTab\"></lib-footfall-directory>\r\n</div>\r\n<div *ngIf=\"selectedTab ==='fileLogs'\">\r\n <lib-file-logs [storeId]=\"storeId\"></lib-file-logs>\r\n</div>\r\n<router-outlet></router-outlet>\r\n\r\n<!-- Terminal access confirmation. Filled from /infra/v2/remote/session; Client name from the client record. -->\r\n<ng-template #terminalTpl let-modal>\r\n <div class=\"access-modal\">\r\n <div class=\"access-head\">\r\n <span class=\"access-icon\">\r\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"2.5\" y=\"3.5\" width=\"19\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.8\"/>\r\n <path d=\"M8 21H16M12 16.5V21M6.5 8L9 10L6.5 12M11 12H14\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span class=\"access-title fs-4 text-gray-800 fw-bold\">Open terminal access?</span>\r\n </div>\r\n <div class=\"access-body\">\r\n <p class=\"access-text\">This opens a command window on the store system. Commands run on the live system.</p>\r\n <div class=\"access-box\">\r\n <!-- Loading: shimmering placeholder rows (see .skel). -->\r\n <ng-container *ngIf=\"sessionState === 'loading'\">\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n <div class=\"access-row\"><span class=\"skel skel-label\"></span><span class=\"skel skel-value\"></span></div>\r\n </ng-container>\r\n <div *ngIf=\"sessionState === 'error'\" class=\"access-note error\">{{ sessionError || \"Couldn't open the session.\" }}</div>\r\n <ng-container *ngIf=\"sessionState === 'ready'\">\r\n <div class=\"access-row\"><span class=\"access-label\">Client name</span><span class=\"access-value\">{{ clientDisplayName || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store ID</span><span class=\"access-value\">{{ session?.storeId || '--' }}</span></div>\r\n <div class=\"access-row\"><span class=\"access-label\">Store name</span><span class=\"access-value\">{{ session?.storeName || '--' }}</span></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"access-foot\">\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"modal.close()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"sessionState !== 'ready'\" (click)=\"connect(modal)\">Connect</button>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.nav-item1 .nav-link1.active{border:none;border-radius:0;background:var(--Primary-50, #EAF8FF);border-bottom:2px solid #009BF3!important;padding:8px 12px}.nav-item1 .nav-link1:hover{border:none}.nav-item .nav-link.file-logs-link{display:inline-flex;align-items:center;gap:6px;padding:8px 12px;border-radius:6px}.nav-item .nav-link.file-logs-link:hover{border-bottom:1px solid transparent}.store-card-name{font-size:18px;line-height:28px;font-weight:600;color:var(--Gray-900, #101828)}.store-act{display:inline-flex;align-items:center;height:44px;padding:0 12px;border:0;border-radius:12px;background:var(--Primary-700, #009BF3);color:#fff;font-size:15px;font-weight:700;transition:background-color .3s ease,color .3s ease,padding .3s ease}.store-act svg{flex-shrink:0}.store-act .act-label{max-width:0;opacity:0;margin-left:0;overflow:hidden;white-space:nowrap;transition:max-width .3s ease,opacity .2s ease,margin-left .3s ease}.store-actions:not(:has(.store-act:hover)) .store-act.is-default,.store-act:hover{background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);padding:0 18px}.store-actions:not(:has(.store-act:hover)) .store-act.is-default .act-label,.store-act:hover .act-label{max-width:160px;opacity:1;margin-left:8px}.store-card-meta{font-size:12px;line-height:18px;font-weight:500;color:var(--Gray-500, #667085)}.live-status{display:inline-flex;align-items:center;padding:2px 8px;border-radius:16px;font-size:12px;line-height:18px;font-weight:500;background:#ecfdf3;border:1px solid #ABEFC6;color:#067647}.live-status .live-dot{width:6px;height:6px;border-radius:50%;background:#17b26a;margin-right:6px}.live-status.down{background:#fef3f2;border-color:#fecdca;color:#b42318}.live-status.down .live-dot{background:#d92d20}.access-modal{background:#fff;border-radius:16px;overflow:hidden}.access-head{display:flex;align-items:center;gap:16px;padding:20px 24px;border-bottom:1px solid var(--Gray-200, #EAECF0)}.access-icon{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;flex-shrink:0;border-radius:12px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)}.access-title{flex:1}.access-body{padding:20px 24px 0}.access-text{margin:0 0 20px;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-box{padding:16px 20px;border:1px solid var(--Gray-200, #EAECF0);border-radius:12px;background:var(--Gray-50, #F9FAFB)}.access-row{display:flex;align-items:center;padding:8px 0}.access-label{width:180px;flex-shrink:0;font-size:12px;line-height:18px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--Gray-500, #667085)}.access-value{font-size:14px;line-height:20px;font-weight:500;color:var(--Gray-900, #101828)}.skel{display:inline-block;height:14px;margin:3px 0;border-radius:6px;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:skel-shimmer 1.5s linear infinite}@keyframes skel-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.skel-label{width:110px;margin-right:70px}.skel-value{width:160px}.access-note{padding:8px 0;font-size:14px;line-height:20px;color:var(--Gray-500, #667085)}.access-note.error{color:var(--Error-700, #B42318)}.access-foot{display:flex;justify-content:flex-end;gap:12px;padding:24px}.access-foot .btn{font-size:14px!important;line-height:20px!important;padding:8px 16px!important}\n"] }]
|
|
304
|
+
}], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.Router }, { type: i1.GlobalStateService }, { type: i2.ActivatedRoute }, { type: i3.TicketsService }, { type: i4.NgbModal }, { type: i5.AuthService }] });
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtdGlja2V0LWluZnJhL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1zdG9yZS1pbmZyYS90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLXN0b3JlLWluZnJhL3RhbmdvLXN0b3JlLWluZnJhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU92RyxNQUFNLE9BQU8sd0JBQXdCO0lBUWY7SUFBaUM7SUFBcUI7SUFBOEI7SUFBNkI7SUFBc0M7SUFBdUI7SUFQbE0sV0FBVyxDQUFNO0lBQ1QsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDL0IsT0FBTyxDQUFNO0lBQ2IsSUFBSSxDQUFNO0lBQ1YsWUFBWSxDQUFNO0lBQ1Ysb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLFVBQVUsQ0FBTTtJQUNoQixZQUFvQixRQUF3QixFQUFTLE1BQWEsRUFBUSxFQUFxQixFQUFTLEtBQW9CLEVBQVMsY0FBNkIsRUFBUyxLQUFjLEVBQVMsV0FBdUI7UUFBck0sYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQVEsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFlO1FBQVMsbUJBQWMs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dHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpY2tldHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlbW90ZVRlcm1pbmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGlja2V0LWluZnJhLXYyL3JlbW90ZS10ZXJtaW5hbC9yZW1vdGUtdGVybWluYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRhbmdvLXN0b3JlLWluZnJhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFuZ28tc3RvcmUtaW5mcmEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90YW5nby1zdG9yZS1pbmZyYS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvU3RvcmVJbmZyYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIHNlbGVjdGVkVGFiOiBhbnk7XHJcbiAgcHJpdmF0ZSBkZXRhY2ggPSBuZXcgU3ViamVjdCgpO1xyXG4gIHN0b3JlSWQ6IGFueTtcclxuICB0eXBlOiBhbnk7XHJcbiAgc2VsZWN0ZWRUYWIxOiBhbnk7XHJcbiAgcHJpdmF0ZSBzdWJUYWJGcm9tVXJsQXBwbGllZCA9IGZhbHNlO1xyXG4gIGNsaWVudE5hbWU6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhZ2VJbmZvOlBhZ2VJbmZvU2VydmljZSxwcml2YXRlIHJvdXRlcjpSb3V0ZXIscHVibGljIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIHJvdXRlOkFjdGl2YXRlZFJvdXRlLHByaXZhdGUgdGlja2V0c1NlcnZpY2U6VGlja2V0c1NlcnZpY2UscHJpdmF0ZSBtb2RhbDpOZ2JNb2RhbCxwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlKXtcclxuXHJcbiAgfVxyXG4gIGhlYWRlckZpbHRlcnM6YW55O1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXRhY2gubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGV0YWNoLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG4gIGNsaWVudERhdGE6YW55O1xyXG4gICB1c2VyVHlwZTphbnk7XHJcbnByaXZhdGUgaXNTdG9yZUlkVmFsaWRGb3JDbGllbnQoc3RvcmVJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFzdG9yZUlkIHx8ICF0aGlzLnVzZXJUeXBlPy5jbGllbnRJZCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAvLyAvLyBUYW5nbyB1c2VycyBjYW4gYWNjZXNzIGFsbFxyXG4gIC8vIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSAndGFuZ28nKSB7XHJcbiAgLy8gICByZXR1cm4gdHJ1ZTtcclxuICAvLyB9XHJcblxyXG4gIGNvbnN0IHN0b3JlQ2xpZW50SWQgPSBzdG9yZUlkLnNwbGl0KCctJylbMF07XHJcbiAgcmV0dXJuIHN0b3JlQ2xpZW50SWQgPT09IFN0cmluZyh0aGlzLnVzZXJUeXBlLmNsaWVudElkKTtcclxufVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgdGhpcy51c2VyVHlwZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgJ3t9Jyk7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICBjb25zdCB0eXBlID0gcGFyYW1zWyd0eXBlJ10gPyBwYXJhbXNbJ3R5cGUnXSA6ICdpbmZyYSc7XHJcbiAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAvLyBFdmVyeSBJbmZyYSBibG9jayBpcyBnYXRlZCBvbiBzZWxlY3RlZFRhYiA9PT0gJ2luZnJhJywgc28gdGhpcyByZWFkc1xyXG4gICAgICAgIC8vIGFzIFwidGhlIEluZnJhIHRhYiwgb3BlbmVkIG9uIFRpY2tldHMgVjJcIiByYXRoZXIgdGhhbiBhIHRhYiBvZiBpdHMgb3duLlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSAnaW5mcmEnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IHR5cGU7XHJcbiAgICAgIH1cclxuICAgICAgLy8gT25seSBvbiB0aGUgZmlyc3QgZW1pc3Npb246IHNlbGVjdGVkVGFiczEoKSByZXdyaXRlcyBgdHlwZWAsIHdoaWNoXHJcbiAgICAgIC8vIGZpcmVzIHRoaXMgc3Vic2NyaXB0aW9uIGFnYWluLCBhbmQgd2l0aG91dCB0aGUgZ3VhcmQgdGhhdCB3b3VsZCB1bmRvXHJcbiAgICAgIC8vIHRoZSBjbGljayAtIFN1bW1hcnkgaW4gcGFydGljdWxhciB3b3VsZCBib3VuY2UgdG8gVGlja2V0cyBWMS5cclxuICAgICAgaWYoIXRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQpe1xyXG4gICAgICAgIHRoaXMuc3ViVGFiRnJvbVVybEFwcGxpZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmKHR5cGUgPT09J2luZnJhdjInKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0gJ3RpY2tldHNWMidcclxuICAgICAgICB9IGVsc2UgaWYodGhpcy5zZWxlY3RlZFRhYiA9PT0naW5mcmEnKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWIxID0ndGlja2V0cydcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgICAgICAgIGNvbnN0IGNsaWVudERhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGllbnQtZGV0YWlsc1wiKSB8fCBcInt9XCIpO1xyXG4gICAgdGhpcy5jbGllbnREYXRhID0gY2xpZW50RGF0YTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlSWQgPVxyXG4gICAgICAgICAgICBkYXRhICYmIGRhdGEuc3RvcmUgPyBkYXRhLnN0b3JlIDogdGhpcy5yb3V0ZXIudXJsLnNwbGl0KFwiL1wiKVszXTtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnROYW1lID0gZGF0YT8uY2xpZW50TmFtZSA/IGRhdGE/LmNsaWVudE5hbWU6Jyc7XHJcbiAgICAgICAgICAgICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSAhPT0gJ3RhbmdvJykge1xyXG4gICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3RvcmVJZFZhbGlkRm9yQ2xpZW50KHRoaXMuc3RvcmVJZCkpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2Vycm9yLzQwNCddKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmVJZFF1ZXJ5UGFyYW0odGhpcy5zdG9yZUlkKTtcclxuICAgICAgICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgICAgICAgIHRoaXMubG9hZFN0b3JlTmFtZSh0aGlzLnN0b3JlSWQpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkTGl2ZVN0YXR1cyh0aGlzLnN0b3JlSWQsIGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkQ2xpZW50KGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlU3RvcmVJZFF1ZXJ5UGFyYW0oc3RvcmVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3MudXNlckFjY2Vzcy52YWx1ZT8udXNlclR5cGUgIT09ICd0YW5nbycpIHtcclxuICAgICAgIGlmICghdGhpcy5pc1N0b3JlSWRWYWxpZEZvckNsaWVudChzdG9yZUlkKSkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZXJyb3IvNDA0J10pO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxufVxyXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9O1xyXG4gICAgICAvLyBVcGRhdGUgc3RvcmVJZCBpbiBxdWVyeVBhcmFtc1xyXG4gICAgICBxdWVyeVBhcmFtcy5zdG9yZUlkID0gc3RvcmVJZDtcclxuICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIHNhbWUgcm91dGUgd2l0aCB1cGRhdGVkIHF1ZXJ5UGFyYW1zXHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtcywgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyB9KTtcclxuICAgIH1cclxuICBzZXRQYWdlRGF0YSgpe1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIlRpY2tldHNcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKFxyXG4gICAgICBcIlZpZXcsIHNoYXJlLCBkb3dubG9hZCBhbmQgYmVuY2htYXJrIHRoZSBzdG9yZXMgcGVyZm9ybWFuY2UgaW4gb25lIHNjcmVlblwiXHJcbiAgICApO1xyXG4gICAgbGV0IGJyZWFkY3J1bWJzOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3QgY29tbW9uQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jbGllbnROYW1lLFxyXG4gICAgICAgIHBhdGg6IFwiL21hbmFnZS9zdG9yZXNcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY2xpZW50TmFtZSxcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3RvcmVzXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuc3RvcmVJZCxcclxuICAgICAgICBwYXRoOiBgL21hbmFnZS9zdG9yZXMvY2FtZXJhcz9zdG9yZUlkPSR7dGhpcy5zdG9yZUlkfWAsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnN0b3JlSWQsXHJcbiAgICAgICAgcGF0aDogYC9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXM/c3RvcmVJZD0ke3RoaXMuc3RvcmVJZH1gLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSBcInRhbmdvXCIpIHtcclxuICAgICAgYnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvYnJhbmRzXCIsXHJcbiAgICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aXRsZTogXCJNYW5hZ2VcIixcclxuICAgICAgICAgIHBhdGg6IFwiL21hbmFnZS9icmFuZHNcIixcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uY29tbW9uQnJlYWRjcnVtYnMsXHJcbiAgICAgIF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3MudXNlckFjY2Vzcy52YWx1ZT8udXNlclR5cGUgPT09IFwiY2xpZW50XCIpIHtcclxuICAgICAgYnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3VtbWFyeVwiLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgICBwYXRoOiBcIi9tYW5hZ2Uvc3VtbWFyeVwiLFxyXG4gICAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi5jb21tb25CcmVhZGNydW1icyxcclxuICAgICAgXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhicmVhZGNydW1icyk7XHJcbiAgfVxyXG4vLyBTdG9yZSBuYW1lIGZvciB0aGUgY2FyZCBhYm92ZSB0aGUgdGFicy4gVGhlIGhlYWRlciBmaWx0ZXIgZG9lc24ndCBjYXJyeSBpdCBvblxyXG4vLyB0aGlzIHBhZ2UsIHNvIGl0IGNvbWVzIGZyb20gZ2V0LXN0b3JlLiAnLS0nIHdoaWxlIGxvYWRpbmcgb3Igb24gZmFpbHVyZS5cclxucHJpdmF0ZSBzdG9yZU5hbWVGcm9tQXBpID0gJyc7XHJcbmdldCBzdG9yZU5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuc3RvcmVOYW1lRnJvbUFwaSB8fCAnLS0nOyB9XHJcbi8vIE9wZW4gLyBjbG9zZSB0aW1lIGZyb20gdGhlIHN0b3JlIHByb2ZpbGUsIGFzIHRoZSBzdG9yZSBoZWFkZXIgc2hvd3MgdGhlbS5cclxuc3RvcmVPcGVuID0gJyc7XHJcbnN0b3JlQ2xvc2UgPSAnJztcclxuXHJcbnByaXZhdGUgbG9hZFN0b3JlTmFtZShzdG9yZUlkOiBhbnkpOiB2b2lkIHtcclxuICB0aGlzLnN0b3JlTmFtZUZyb21BcGkgPSAnJztcclxuICB0aGlzLnN0b3JlT3BlbiA9ICcnO1xyXG4gIHRoaXMuc3RvcmVDbG9zZSA9ICcnO1xyXG4gIGlmICghc3RvcmVJZCkgcmV0dXJuO1xyXG4gIHRoaXMudGlja2V0c1NlcnZpY2UuZ2V0U3RvcmVEZXRhaWxzKHN0b3JlSWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGV0YWNoKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAvLyBJZ25vcmUgYSBsYXRlIHJlcGx5IGZvciBhIHN0b3JlIHRoYXQgaXMgbm8gbG9uZ2VyIHNlbGVjdGVkLlxyXG4gICAgICBpZiAoc3RvcmVJZCAhPT0gdGhpcy5zdG9yZUlkKSByZXR1cm47XHJcbiAgICAgIHRoaXMuc3RvcmVOYW1lRnJvbUFwaSA9IHJlcz8uZGF0YT8uc3RvcmVOYW1lIHx8ICcnO1xyXG4gICAgICB0aGlzLnN0b3JlT3BlbiA9IHJlcz8uZGF0YT8uc3RvcmVQcm9maWxlPy5vcGVuIHx8ICcnO1xyXG4gICAgICB0aGlzLnN0b3JlQ2xvc2UgPSByZXM/LmRhdGE/LnN0b3JlUHJvZmlsZT8uY2xvc2UgfHwgJyc7XHJcbiAgICB9LFxyXG4gICAgZXJyb3I6ICgpID0+IHt9LFxyXG4gIH0pO1xyXG59XHJcblxyXG4vLyBUaGUgc3RvcmUtY2FyZCBidXR0b25zIChUZXJtaW5hbCBhY2Nlc3MsIEZpbGUgYWNjZXNzLCBDYWxsKSBhcmUgZm9yIFRhbmdvIHVzZXJzIG9ubHkuXHJcbmdldCBpc1RhbmdvKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gJ3RhbmdvJzsgfVxyXG5cclxuLy8gLi4uYW5kIG9ubHkgZm9yIEluZnJhIFYyIGNsaWVudHMuIFNhbWUgY2FsbCBhbmQgZmllbGQgdGhlIFRpY2tldHMgcGFnZSB1c2VzIGZvclxyXG4vLyBpdHMgSW5mcmEgVjIgdGFiLiBIaWRkZW4gd2hpbGUgbG9hZGluZyBvciBvbiBlcnJvci5cclxuaW5mcmFUaWNrZXRUeXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuY2xpZW50RGlzcGxheU5hbWUgPSAnJztcclxuZ2V0IHNob3dTdG9yZUFjdGlvbnMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzVGFuZ28gJiYgdGhpcy5pbmZyYVRpY2tldFR5cGUgPT09ICdWMic7IH1cclxuXHJcbnByaXZhdGUgbG9hZENsaWVudChoZWFkZXI6IGFueSk6IHZvaWQge1xyXG4gIHRoaXMuaW5mcmFUaWNrZXRUeXBlID0gbnVsbDtcclxuICB0aGlzLmNsaWVudERpc3BsYXlOYW1lID0gJyc7XHJcbiAgY29uc3QgY2xpZW50SWQgPSBoZWFkZXI/LmNsaWVudCB8fCBTdHJpbmcodGhpcy5zdG9yZUlkIHx8ICcnKS5zcGxpdCgnLScpWzBdO1xyXG4gIGlmICghY2xpZW50SWQpIHJldHVybjtcclxuICB0aGlzLmF1dGhTZXJ2aWNlLmdldEJyYW5kRGV0YWlscyhjbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaW5mcmFUaWNrZXRUeXBlID0gcmVzPy5kYXRhPy50aWNrZXRDb25maWdzPy5pbmZyYVRpY2tldFR5cGUgPz8gbnVsbDtcclxuICAgICAgdGhpcy5jbGllbnREaXNwbGF5TmFtZSA9IHJlcz8uZGF0YT8uY2xpZW50TmFtZSB8fCAnJztcclxuICAgIH0sXHJcbiAgICBlcnJvcjogKCkgPT4ge30sXHJcbiAgfSk7XHJcbn1cclxuXHJcbi8vIExpdmUgLyBOb3QgTGl2ZSBiZXNpZGUgdGhlIG5hbWUsIGJ5IHRoZSBzYW1lIHJ1bGUgYXMgdGhlIFN1bW1hcnkgY2FyZCdzIHRpbGVzLlxyXG4vLyBFbXB0eSAtIGFuZCBoaWRkZW4gLSB3aGlsZSBsb2FkaW5nLCBmb3IgYSBub24tVjIgY2xpZW50LCBvciBmb3IgYSBzdG9yZSBWMlxyXG4vLyBkb2VzIG5vdCBjb3VudCAoaW5hY3RpdmUsIG9yIG5vIGZpcnN0IGZpbGUgeWV0KS5cclxubGl2ZVN0YXR1czogJycgfCAnTGl2ZScgfCAnTm90IExpdmUnID0gJyc7XHJcblxyXG5wcml2YXRlIGxvYWRMaXZlU3RhdHVzKHN0b3JlSWQ6IGFueSwgaGVhZGVyOiBhbnkpOiB2b2lkIHtcclxuICB0aGlzLmxpdmVTdGF0dXMgPSAnJztcclxuICBjb25zdCBjbGllbnRJZCA9IGhlYWRlcj8uY2xpZW50IHx8IFN0cmluZyhzdG9yZUlkIHx8ICcnKS5zcGxpdCgnLScpWzBdO1xyXG4gIGlmICghc3RvcmVJZCB8fCAhY2xpZW50SWQgfHwgIWhlYWRlcj8uZGF0ZT8uZW5kRGF0ZSkgcmV0dXJuO1xyXG4gIGNvbnN0IGJvZHkgPSB7XHJcbiAgICBjbGllbnRJZDogW2NsaWVudElkXSwgZnJvbURhdGU6IGhlYWRlci5kYXRlLnN0YXJ0RGF0ZSB8fCBoZWFkZXIuZGF0ZS5lbmREYXRlLCB0b0RhdGU6IGhlYWRlci5kYXRlLmVuZERhdGUsXHJcbiAgICBzZWFyY2g6IHN0b3JlSWQsIG9mZnNldDogMSwgbGltaXQ6IDUwLFxyXG4gIH07XHJcbiAgdGhpcy50aWNrZXRzU2VydmljZS5zdG9yZUxpdmVTdGF0dXMoYm9keSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXRhY2gpKS5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChzdG9yZUlkICE9PSB0aGlzLnN0b3JlSWQpIHJldHVybjtcclxuICAgICAgLy8gc2VhcmNoIGlzIGEgcGFydGlhbCBtYXRjaCAoNDA2LTEgYWxzbyBmaW5kcyA0MDYtMTApLCBzbyBwaWNrIHRoZSBleGFjdCBzdG9yZS5cclxuICAgICAgY29uc3Qgcm93ID0gKHJlcz8uZGF0YT8ucm93cyA/PyBbXSkuZmluZCgocjogYW55KSA9PiByLnN0b3JlSWQgPT09IHN0b3JlSWQpO1xyXG4gICAgICB0aGlzLmxpdmVTdGF0dXMgPSByb3c/LnN0YXR1cyA9PT0gJ0xpdmUnIHx8IHJvdz8uc3RhdHVzID09PSAnTm90IExpdmUnID8gcm93LnN0YXR1cyA6ICcnO1xyXG4gICAgfSxcclxuICAgIGVycm9yOiAoKSA9PiB7fSxcclxuICB9KTtcclxufVxyXG5cclxuc2VsZWN0ZWRUYWJzKHZhbHVlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFRhYiA9IHZhbHVlO1xyXG4gIGlmKHRoaXMuc2VsZWN0ZWRUYWIgPT09J2luZnJhJyl7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiMSA9J3RpY2tldHMnXHJcbiAgfVxyXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH07XHJcbiAgICAgIHF1ZXJ5UGFyYW1zWyd0eXBlJ10gPSB2YWx1ZTtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzp0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXN9KTtcclxufVxyXG5cclxuc2VsZWN0ZWRUYWJzMSh0eXBlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFRhYjEgPSB0eXBlO1xyXG4gIC8vIEtlZXAgdGhlIFVSTCBpbiBzdGVwLCB0aGUgc2FtZSB3YXkgc2VsZWN0ZWRUYWJzKCkgZG9lcyBmb3IgdGhlIHRvcCB0YWJzLlxyXG4gIC8vIFN1bW1hcnkgaGFzIG5vIGB0eXBlYCBvZiBpdHMgb3duLCBzbyBpdCBzaGFyZXMgJ2luZnJhJyB3aXRoIFRpY2tldHMgVjEuXHJcbiAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgfTtcclxuICAgICAgcXVlcnlQYXJhbXNbJ3R5cGUnXSA9IHR5cGUgPT09ICd0aWNrZXRzVjInID8gJ2luZnJhdjInIDogJ2luZnJhJztcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgcmVsYXRpdmVUbzp0aGlzLnJvdXRlLCBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXN9KTtcclxufVxyXG5cclxuLy8gVGVybWluYWwgYWNjZXNzIHBvcC11cDogb3BlbnMgYXQgb25jZSwgdGhlbiBmaWxscyBmcm9tIC9yZW1vdGUvc2Vzc2lvbi5cclxuLy8gRXZlcnkgY2FsbCBpcyBhdWRpdC1sb2dnZWQgYXMgYSBzZXNzaW9uIG9wZW5lZCwgQ2FuY2VsIGluY2x1ZGVkLlxyXG5zZXNzaW9uOiBhbnkgPSBudWxsO1xyXG5zZXNzaW9uU3RhdGU6ICdsb2FkaW5nJyB8ICdyZWFkeScgfCAnZXJyb3InID0gJ2xvYWRpbmcnO1xyXG5zZXNzaW9uRXJyb3IgPSAnJztcclxuXHJcbm9wZW5UZXJtaW5hbCh0cGw6IFRlbXBsYXRlUmVmPGFueT4pOiB2b2lkIHtcclxuICB0aGlzLnNlc3Npb24gPSBudWxsO1xyXG4gIHRoaXMuc2Vzc2lvbkVycm9yID0gJyc7XHJcbiAgdGhpcy5zZXNzaW9uU3RhdGUgPSAnbG9hZGluZyc7XHJcbiAgdGhpcy5tb2RhbC5vcGVuKHRwbCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICB0aGlzLnRpY2tldHNTZXJ2aWNlLnJlbW90ZVNlc3Npb24odGhpcy5zdG9yZUlkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRldGFjaCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzOiBhbnkpID0+IHsgdGhpcy5zZXNzaW9uID0gcmVzPy5kYXRhID8/IG51bGw7IHRoaXMuc2Vzc2lvblN0YXRlID0gJ3JlYWR5JzsgfSxcclxuICAgIC8vIFRoZSBBUEkncyBvd24gbWVzc2FnZTogXCJTdG9yZSBub3QgZm91bmRcIiwgXCJObyBlZGdlIGFnZW50Li4uXCIsIFwibm90IGNvbmZpZ3VyZWRcIi5cclxuICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHsgdGhpcy5zZXNzaW9uRXJyb3IgPSBlcnI/LmVycm9yPy5lcnJvciB8fCAnJzsgdGhpcy5zZXNzaW9uU3RhdGUgPSAnZXJyb3InOyB9LFxyXG4gIH0pO1xyXG59XHJcblxyXG4vLyBDb25uZWN0OiBzd2FwIHRoZSBjb25maXJtYXRpb24gZm9yIHRoZSB0ZXJtaW5hbCBwb3AtdXAuIFN0YXRpYyBiYWNrZHJvcCBhbmRcclxuLy8gbm8gRXNjLCBzbyBhIHN0cmF5IGNsaWNrIGNhbm5vdCBkcm9wIGEgbGl2ZSBzaGVsbDsgaXQgY2xvc2VzIHZpYSBDbG9zZS5cclxuY29ubmVjdChjb25maXJtUmVmOiBhbnkpOiB2b2lkIHtcclxuICBjb25maXJtUmVmLmNsb3NlKCk7XHJcbiAgY29uc3QgcmVmID0gdGhpcy5tb2RhbC5vcGVuKFJlbW90ZVRlcm1pbmFsQ29tcG9uZW50LCB7XHJcbiAgICBzaXplOiAneGwnLCBjZW50ZXJlZDogdHJ1ZSwgYmFja2Ryb3A6ICdzdGF0aWMnLCBrZXlib2FyZDogZmFsc2UsIG1vZGFsRGlhbG9nQ2xhc3M6ICdyZW1vdGUtdGVybWluYWwtbW9kYWwnLFxyXG4gIH0pO1xyXG4gIHJlZi5jb21wb25lbnRJbnN0YW5jZS5zZXNzaW9uID0gdGhpcy5zZXNzaW9uO1xyXG59XHJcblxyXG59XHJcbiIsIjwhLS0gU3RvcmUgY2FyZDogbmFtZSBhbmQgdGltaW5ncyBmcm9tIGdldC1zdG9yZSwgTGl2ZSBzdGF0dXMgZnJvbSB0aGUgVjIgc3RvcmUgbGlzdC4gLS0+XHJcbjxkaXYgY2xhc3M9XCJjYXJkIG1iLTUgcHktNCBweC01XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWUtM1wiPjxzdmcgd2lkdGg9XCI0NlwiIGhlaWdodD1cIjQ2XCIgdmlld0JveD1cIjAgMCA0NiA0NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjRDFGQURGXCIvPlxyXG4gICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIHN0cm9rZT1cIiNFQ0ZERjNcIiBzdHJva2Utd2lkdGg9XCI2XCIvPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTE1LjY3OTkgMTguODAzOUwxNS42MjY3IDE4Ljg4NzFDMTUuMDY4NiAxOS44NzQxIDE1LjY2NDQgMjEuMTIxNSAxNi43MzYxIDIxLjI2NDZDMTYuODMzMSAyMS4yNzY1IDE2LjkyMzUgMjEuMjgyOCAxNy4wMTE4IDIxLjI4MjhDMTcuNTg5OSAyMS4yODI4IDE4LjEwMTEgMjEuMDM0OCAxOC40NTc0IDIwLjY0OEwxOS4wMTA3IDIwLjA0NzRMMTkuNTYyMSAyMC42NDk4QzE5LjkxNDEgMjEuMDM0MiAyMC40MjQxIDIxLjI4MjggMjEuMDA2MSAyMS4yODI4QzIxLjU4NTYgMjEuMjgyOCAyMi4wOTg1IDIxLjAzMzggMjIuNDUwMiAyMC42NDk4TDIzLjAwMzMgMjAuMDQ1NUwyMy41NTY1IDIwLjY0OThDMjMuOTA4MSAyMS4wMzM4IDI0LjQyMTEgMjEuMjgyOCAyNS4wMDA1IDIxLjI4MjhDMjUuNTggMjEuMjgyOCAyNi4wOTI5IDIxLjAzMzggMjYuNDQ0NSAyMC42NDk4TDI2Ljk5NzcgMjAuMDQ1NUwyNy41NTA5IDIwLjY0OThDMjcuOTAyNSAyMS4wMzM4IDI4LjQxNTUgMjEuMjgyOCAyOC45OTQ5IDIxLjI4MjhDMjkuMDgwMyAyMS4yODI4IDI5LjE3MzMgMjEuMjc2NSAyOS4yNjk3IDIxLjI2NDdDMzAuMzY0OSAyMS4xMTU0IDMwLjk2MjcgMTkuODAxMiAzMC4zMjQgMTguODA0NEMzMC4zMjQgMTguODA0MyAzMC4zMjQgMTguODA0MyAzMC4zMjM5IDE4LjgwNDJMMjguNTY1OCAxNi4wNjI4TDI4LjU2NTggMTYuMDYyOEwyOC41NjQ4IDE2LjA2MTRDMjguNTQ5NiAxNi4wMzc1IDI4LjUxMjEgMTYuMDEyIDI4LjQ2NSAxNi4wMTJIMTcuNTM1NkMxNy40ODg0IDE2LjAxMiAxNy40NTA5IDE2LjAzNzUgMTcuNDM1NyAxNi4wNjE0TDE3LjQzNTEgMTYuMDYyM0wxNS42Nzk5IDE4LjgwMzlaTTI4LjY1MTQgMjMuNzM3MlYyNi44NjkxVjI3LjYxOTFIMjcuOTAxNEgxOC4wOTkySDE3LjM0OTJWMjYuODY5MVYyMy43Mzc2QzE3LjIzOSAyMy43NDU4IDE3LjEyNzQgMjMuNzUwMSAxNy4wMTQ4IDIzLjc1MDFDMTYuOTcyNSAyMy43NTAxIDE2LjkzMDUgMjMuNzQ5NCAxNi44ODg4IDIzLjc0ODJWMjYuODY5MVYyOC44MDM2QzE2Ljg4ODggMjkuNDQ3MSAxNy40MjI3IDI5Ljk4ODIgMTguMDk5MiAyOS45ODgySDI3LjkwMTRDMjguNTc3OSAyOS45ODgyIDI5LjExMTggMjkuNDQ3MSAyOS4xMTE4IDI4LjgwMzZWMjYuODY5MVYyMy43NDg0QzI5LjA3MiAyMy43NDk1IDI5LjAzMiAyMy43NTAxIDI4Ljk5MTggMjMuNzUwMUMyOC44Nzc0IDIzLjc1MDEgMjguNzYzOSAyMy43NDU3IDI4LjY1MTQgMjMuNzM3MlpcIiBzdHJva2U9XCIjMDI3QTQ4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdG9yZS1jYXJkLW5hbWVcIj57eyBzdG9yZU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxpdmVTdGF0dXNcIiBjbGFzcz1cImxpdmUtc3RhdHVzIG1zLTRcIiBbY2xhc3MuZG93bl09XCJsaXZlU3RhdHVzID09PSAnTm90IExpdmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaXZlLWRvdFwiPjwvc3Bhbj57eyBsaXZlU3RhdHVzIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RvcmUtY2FyZC1tZXRhIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3RvcmVJZCB8fCAnLS0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yXCI+wrc8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMVwiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgNC41VjlMMTIgMTAuNU0xNi41IDlDMTYuNSAxMy4xNDIxIDEzLjE0MjEgMTYuNSA5IDE2LjVDNC44NTc4NiAxNi41IDEuNSAxMy4xNDIxIDEuNSA5QzEuNSA0Ljg1Nzg2IDQuODU3ODYgMS41IDkgMS41QzEzLjE0MjEgMS41IDE2LjUgNC44NTc4NiAxNi41IDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHN0b3JlT3BlbiB8fCAnLS0nIH19IC0ge3sgc3RvcmVDbG9zZSB8fCAnLS0nIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIFRhbmdvIHVzZXJzIG9mIEluZnJhIFYyIGNsaWVudHMgb25seS4gVGhlIGhvdmVyZWQgYnV0dG9uIGV4cGFuZHM7IFRlcm1pbmFsIGFjY2VzcyBpcyBleHBhbmRlZCB3aGlsZSBub25lIGlzLiAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1N0b3JlQWN0aW9uc1wiIGNsYXNzPVwic3RvcmUtYWN0aW9ucyBtcy1hdXRvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzdG9yZS1hY3QgaXMtZGVmYXVsdFwiIChjbGljayk9XCJvcGVuVGVybWluYWwodGVybWluYWxUcGwpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjMuNVwiIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxM1wiIHJ4PVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggMjFIMTZNMTIgMTYuNVYyMU02LjUgOEw5IDEwTDYuNSAxMk0xMSAxMkgxNFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwiYWN0LWxhYmVsXCI+VGVybWluYWwgYWNjZXNzPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzdG9yZS1hY3RcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyA3LjVDMyA2LjQgMy45IDUuNSA1IDUuNUg5LjJMMTEuMiA3LjVIMTlDMjAuMSA3LjUgMjEgOC40IDIxIDkuNVYxN0MyMSAxOC4xIDIwLjEgMTkgMTkgMTlINUMzLjkgMTkgMyAxOC4xIDMgMTdWNy41WlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJhY3QtbGFiZWxcIj5GaWxlIGFjY2Vzczwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3RvcmUtYWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguNiA0LjVMNi40IDMuNkM1LjggMy40IDUuMSAzLjYgNC43IDQuMUwzLjUgNS42QzMuMSA2LjEgMyA2LjggMy4yIDcuNEM0LjkgMTIuNyA5LjMgMTcuMSAxNC42IDE4LjhDMTUuMiAxOSAxNS45IDE4LjkgMTYuNCAxOC41TDE3LjkgMTcuM0MxOC40IDE2LjkgMTguNiAxNi4yIDE4LjQgMTUuNkwxNy41IDEzLjRDMTcuMyAxMi44IDE2LjYgMTIuNSAxNiAxMi42TDEzLjYgMTMuMUMxMS45IDEyLjIgMTAuOCAxMS4xIDkuOSA5LjRMMTAuNCA3QzEwLjUgNi40IDEwLjIgNS43IDkuNiA1LjVMOC42IDQuNVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwiYWN0LWxhYmVsXCI+Q2FsbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJjYXJkIG1iLTUgcHktMyBweC01XCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi1zdHJldGNoIG5hdi1saW5lLXRhYnMxIG5hdi1saW5lLXRhYnMgYm9yZGVyLXRyYW5zcGFyZW50IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnaW5mcmEnKVwiPjxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSdpbmZyYScgPyAnYWN0aXZlJyA6JydcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTYgXCI+SW5mcmE8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnZGF0YU1pc21hdGNoJylcIj5cclxuICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSdkYXRhTWlzbWF0Y2gnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBtZS02XCI+RGF0YSBNaXNtYXRjaDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzKCdjYW1lcmFBbmdsZUNoYW5nZScpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0nY2FtZXJhQW5nbGVDaGFuZ2UnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBtZS02XCI+Q2FtZXJhIEFuZ2xlPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8IS0tIEZpbGUgbG9ncywgYXQgdGhlIHJpZ2h0IGVuZCBvZiB0aGUgcm93OiBpdHMgb3duIHBhZ2UgYXQgP3R5cGU9ZmlsZUxvZ3MuIC0tPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBtcy1hdXRvXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnZmlsZUxvZ3MnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09J2ZpbGVMb2dzJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgZmlsZS1sb2dzLWxpbmtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAzSDdDNS45IDMgNSAzLjkgNSA1VjE5QzUgMjAuMSA1LjkgMjEgNyAyMUgxN0MxOC4xIDIxIDE5IDIwLjEgMTkgMTlWOEwxNCAzWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDNWOEgxOU05IDEzSDE1TTkgMTdIMTNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgRmlsZSBsb2dzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgPCEtLSA8bGkgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgfHwgY2xpZW50RGF0YT8uaXNWTVNcIiBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnZm9vdGZhbGwnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09J2Zvb3RmYWxsJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbWUtNlwiPkZvb3RmYWxsIERpcmVjdG9yeTwvYT5cclxuICAgICAgICAgICAgPC9saT4gLS0+XHJcbiAgICAgICAgPC91bD5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0naW5mcmEnXCIgY2xhc3M9XCJtYi01IHB5LTMgcHgtNVwiPlxyXG4gICAgPHVsIGNsYXNzPVwibmF2IG5hdi1zdHJldGNoIG5hdi1saW5lLXRhYnMxIG5hdi1saW5lLXRhYnMgYm9yZGVyLXRyYW5zcGFyZW50IGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWl0ZW0xXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiczEoJ3N1bW1hcnknKVwiPjxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiMSA9PT0nc3VtbWFyeScgPyAnYWN0aXZlJyA6JydcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayBuYXYtbGluazEgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTYgXCI+U3VtbWFyeTwvYT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG5hdi1pdGVtMVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMxKCd0aWNrZXRzJylcIj5cclxuICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIxID09PSd0aWNrZXRzJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmsxIGN1cnNvci1wb2ludGVyIG1lLTZcIj5UaWNrZXRzIFYxPC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gbmF2LWl0ZW0xXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiczEoJ3RpY2tldHNWMicpXCI+XHJcbiAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiMSA9PT0ndGlja2V0c1YyJyA/ICdhY3RpdmUnIDonJ1wiIGNsYXNzPVwibmF2LWxpbmsgbmF2LWxpbmsxIGN1cnNvci1wb2ludGVyIG1lLTZcIj5UaWNrZXRzIFYyPC9hPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGVkVGFiID09PSdpbmZyYScgJiYgc2VsZWN0ZWRUYWIxID09PSdzdW1tYXJ5J1wiPlxyXG4gICAgPGxpYi1zdW1tYXJ5LWluZnJhIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXN1bW1hcnktaW5mcmE+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2luZnJhJyAmJiBzZWxlY3RlZFRhYjEgPT09J3RpY2tldHMnXCI+XHJcbiAgICA8bGliLXRpY2tldC1pbmZyYSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi10aWNrZXQtaW5mcmE+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2luZnJhJyAmJiBzZWxlY3RlZFRhYjEgPT09J3RpY2tldHNWMidcIj5cclxuICAgIDxsaWItdGlja2V0LWluZnJhLXYyIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiPjwvbGliLXRpY2tldC1pbmZyYS12Mj5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0nZGF0YU1pc21hdGNoJ1wiPlxyXG4gICAgPGxpYi10aWNrZXQtaW5mcmEgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItdGlja2V0LWluZnJhPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0nY2FtZXJhQW5nbGVDaGFuZ2UnXCI+XHJcbiAgICA8bGliLXRpY2tldC1jYW1lcmEtYW5nbGUgW3NlbGVjdGVkVGFiXT1cInNlbGVjdGVkVGFiXCI+PC9saWItdGlja2V0LWNhbWVyYS1hbmdsZT5cclxuPC9kaXY+XHJcbjxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0nZm9vdGZhbGwnXCI+XHJcbiAgICA8bGliLWZvb3RmYWxsLWRpcmVjdG9yeSBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIj48L2xpYi1mb290ZmFsbC1kaXJlY3Rvcnk+XHJcbjwvZGl2PlxyXG48ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09J2ZpbGVMb2dzJ1wiPlxyXG4gICAgPGxpYi1maWxlLWxvZ3MgW3N0b3JlSWRdPVwic3RvcmVJZFwiPjwvbGliLWZpbGUtbG9ncz5cclxuPC9kaXY+XHJcbjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuXHJcbjwhLS0gVGVybWluYWwgYWNjZXNzIGNvbmZpcm1hdGlvbi4gRmlsbGVkIGZyb20gL2luZnJhL3YyL3JlbW90ZS9zZXNzaW9uOyBDbGllbnQgbmFtZSBmcm9tIHRoZSBjbGllbnQgcmVjb3JkLiAtLT5cclxuPG5nLXRlbXBsYXRlICN0ZXJtaW5hbFRwbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLW1vZGFsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1oZWFkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWNjZXNzLWljb25cIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMy41XCIgd2lkdGg9XCIxOVwiIGhlaWdodD1cIjEzXCIgcng9XCIyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOCAyMUgxNk0xMiAxNi41VjIxTTYuNSA4TDkgMTBMNi41IDEyTTExIDEySDE0XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2Nlc3MtdGl0bGUgZnMtNCB0ZXh0LWdyYXktODAwIGZ3LWJvbGRcIj5PcGVuIHRlcm1pbmFsIGFjY2Vzcz88L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiYWNjZXNzLXRleHRcIj5UaGlzIG9wZW5zIGEgY29tbWFuZCB3aW5kb3cgb24gdGhlIHN0b3JlIHN5c3RlbS4gQ29tbWFuZHMgcnVuIG9uIHRoZSBsaXZlIHN5c3RlbS48L3A+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3MtYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmc6IHNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgcm93cyAoc2VlIC5za2VsKS4gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2Vzc2lvblN0YXRlID09PSAnbG9hZGluZydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwic2tlbCBza2VsLWxhYmVsXCI+PC9zcGFuPjxzcGFuIGNsYXNzPVwic2tlbCBza2VsLXZhbHVlXCI+PC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2Nlc3Mtcm93XCI+PHNwYW4gY2xhc3M9XCJza2VsIHNrZWwtbGFiZWxcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJza2VsIHNrZWwtdmFsdWVcIj48L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1yb3dcIj48c3BhbiBjbGFzcz1cInNrZWwgc2tlbC1sYWJlbFwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cInNrZWwgc2tlbC12YWx1ZVwiPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlc3Npb25TdGF0ZSA9PT0gJ2Vycm9yJ1wiIGNsYXNzPVwiYWNjZXNzLW5vdGUgZXJyb3JcIj57eyBzZXNzaW9uRXJyb3IgfHwgXCJDb3VsZG4ndCBvcGVuIHRoZSBzZXNzaW9uLlwiIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2Vzc2lvblN0YXRlID09PSAncmVhZHknXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1yb3dcIj48c3BhbiBjbGFzcz1cImFjY2Vzcy1sYWJlbFwiPkNsaWVudCBuYW1lPC9zcGFuPjxzcGFuIGNsYXNzPVwiYWNjZXNzLXZhbHVlXCI+e3sgY2xpZW50RGlzcGxheU5hbWUgfHwgJy0tJyB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLXJvd1wiPjxzcGFuIGNsYXNzPVwiYWNjZXNzLWxhYmVsXCI+U3RvcmUgSUQ8L3NwYW4+PHNwYW4gY2xhc3M9XCJhY2Nlc3MtdmFsdWVcIj57eyBzZXNzaW9uPy5zdG9yZUlkIHx8ICctLScgfX08L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjY2Vzcy1yb3dcIj48c3BhbiBjbGFzcz1cImFjY2Vzcy1sYWJlbFwiPlN0b3JlIG5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9XCJhY2Nlc3MtdmFsdWVcIj57eyBzZXNzaW9uPy5zdG9yZU5hbWUgfHwgJy0tJyB9fTwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWZvb3RcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtkaXNhYmxlZF09XCJzZXNzaW9uU3RhdGUgIT09ICdyZWFkeSdcIiAoY2xpY2spPVwiY29ubmVjdChtb2RhbClcIj5Db25uZWN0PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* File logs page of the store Tickets page (…/infra-ticket?type=fileLogs).
|
|
5
|
+
* No data source yet, so it shows the empty state; storeId is ready for the API.
|
|
6
|
+
*/
|
|
7
|
+
export class FileLogsComponent {
|
|
8
|
+
storeId = '';
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FileLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FileLogsComponent, selector: "lib-file-logs", inputs: { storeId: "storeId" }, ngImport: i0, template: "<div class=\"card mb-5\">\r\n <div class=\"card-body py-4 px-5\">\r\n <div class=\"file-logs-heading\">File logs</div>\r\n <!-- No data source yet. -->\r\n <div class=\"file-logs-empty d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".file-logs-heading{font-size:14px;line-height:20px;font-weight:600;color:var(--Gray-900, #101828)}.file-logs-empty{padding:32px 0}.img-nodata{max-width:160px;height:auto}\n"] });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FileLogsComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{ selector: 'lib-file-logs', template: "<div class=\"card mb-5\">\r\n <div class=\"card-body py-4 px-5\">\r\n <div class=\"file-logs-heading\">File logs</div>\r\n <!-- No data source yet. -->\r\n <div class=\"file-logs-empty d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-nodata\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodata-title\">No data found</div>\r\n <div class=\"nodata-sub\">There is no result </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".file-logs-heading{font-size:14px;line-height:20px;font-weight:600;color:var(--Gray-900, #101828)}.file-logs-empty{padding:32px 0}.img-nodata{max-width:160px;height:auto}\n"] }]
|
|
15
|
+
}], propDecorators: { storeId: [{
|
|
16
|
+
type: Input
|
|
17
|
+
}] } });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1sb2dzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLXRpY2tldC1pbmZyYS9zcmMvbGliL2NvbXBvbmVudHMvdGlja2V0LWluZnJhLXYyL2ZpbGUtbG9ncy9maWxlLWxvZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtdGlja2V0LWluZnJhL3NyYy9saWIvY29tcG9uZW50cy90aWNrZXQtaW5mcmEtdjIvZmlsZS1sb2dzL2ZpbGUtbG9ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFakQ7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGlCQUFpQjtJQUNuQixPQUFPLEdBQUcsRUFBRSxDQUFDO3dHQURYLGlCQUFpQjs0RkFBakIsaUJBQWlCLHFGQ1g5Qiw4aEJBV0E7OzRGREFhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogRmlsZSBsb2dzIHBhZ2Ugb2YgdGhlIHN0b3JlIFRpY2tldHMgcGFnZSAo4oCmL2luZnJhLXRpY2tldD90eXBlPWZpbGVMb2dzKS5cclxuICogTm8gZGF0YSBzb3VyY2UgeWV0LCBzbyBpdCBzaG93cyB0aGUgZW1wdHkgc3RhdGU7IHN0b3JlSWQgaXMgcmVhZHkgZm9yIHRoZSBBUEkuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1maWxlLWxvZ3MnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLWxvZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9maWxlLWxvZ3MuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUxvZ3NDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHN0b3JlSWQgPSAnJztcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtYi01XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTQgcHgtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWxvZ3MtaGVhZGluZ1wiPkZpbGUgbG9nczwvZGl2PlxyXG4gICAgICAgIDwhLS0gTm8gZGF0YSBzb3VyY2UgeWV0LiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1sb2dzLWVtcHR5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLW5vZGF0YVwiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+VGhlcmUgaXMgbm8gcmVzdWx0IDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|