@tuki-io/tuki-widgets 0.0.77 → 0.0.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/di2mt/api/api.endpoints.d.ts +5 -0
  2. package/di2mt/shared/types/constants.d.ts +7 -0
  3. package/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.d.ts +4 -6
  4. package/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.d.ts +9 -2
  5. package/di2mt/widgets/site-upgrade/site-upgrade.service.d.ts +53 -3
  6. package/di2mt/widgets/site-upgrade/types/user-upgrade.d.ts +8 -3
  7. package/di2mt/widgets/user-upgrade/types/user-upgrade.d.ts +4 -3
  8. package/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.d.ts +4 -0
  9. package/di2mt/widgets/user-upgrade/user-upgrade.service.d.ts +9 -1
  10. package/esm2020/di2mt/api/api.endpoints.mjs +8 -3
  11. package/esm2020/di2mt/shared/components/card/card.component.mjs +3 -3
  12. package/esm2020/di2mt/shared/types/constants.mjs +9 -1
  13. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +15 -21
  14. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +145 -44
  15. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade.service.mjs +17 -3
  16. package/esm2020/di2mt/widgets/site-upgrade/types/user-upgrade.mjs +1 -1
  17. package/esm2020/di2mt/widgets/user-upgrade/types/user-upgrade.mjs +1 -1
  18. package/esm2020/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.mjs +40 -9
  19. package/esm2020/di2mt/widgets/user-upgrade/user-upgrade.service.mjs +15 -3
  20. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +251 -81
  21. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  22. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +246 -81
  23. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  24. package/package.json +1 -1
@@ -13,6 +13,7 @@ export declare const API: {
13
13
  UPGRADE_USER: string;
14
14
  SINGLE_COLLECT: string;
15
15
  SINGLE_MIGRATION: string;
16
+ UPGRADE_STATUS: string;
16
17
  };
17
18
  SITE_UPGRADE: {
18
19
  GET_SITES_UPGRADE_DATA: string;
@@ -22,5 +23,9 @@ export declare const API: {
22
23
  WEBEX_BATCH_STATUS: string;
23
24
  MIGRATE_SITE: string;
24
25
  BATCH_STATUS: string;
26
+ GET_BATCH_SITES: string;
27
+ WEBEX_CACHE_COLLECTION_SITE_LIST: string;
28
+ WEBEX_CACHE_COLLECTION_CUCM_LIST: string;
29
+ MIGRATION_STATUS: string;
25
30
  };
26
31
  };
@@ -6,3 +6,10 @@ export declare const STATUS_ENTRIES: {
6
6
  export declare const DEPENDENCIES_STATUS: {
7
7
  [key: string]: string;
8
8
  };
9
+ export declare enum UPGRADE_STATUS {
10
+ NOT_READY = "not_ready",
11
+ READY = "ready",
12
+ COMPLETED = "completed",
13
+ IN_PROGRESS = "in progress",
14
+ FAILED = "failed"
15
+ }
@@ -1,12 +1,10 @@
1
- import { OnInit } from '@angular/core';
2
1
  import * as i0 from "@angular/core";
3
- export declare class ProgressBarComponent implements OnInit {
2
+ export declare class ProgressBarComponent {
4
3
  isAvailable: boolean;
5
- progress: number;
4
+ private _progress;
5
+ set progress(value: number);
6
+ get progress(): number;
6
7
  color: string;
7
- constructor();
8
- ngOnInit(): void;
9
- updatedProgress(progress: number): void;
10
8
  private setColor;
11
9
  static ɵfac: i0.ɵɵFactoryDeclaration<ProgressBarComponent, never>;
12
10
  static ɵcmp: i0.ɵɵComponentDeclaration<ProgressBarComponent, "app-progress-bar", never, { "isAvailable": "isAvailable"; "progress": "progress"; }, {}, never, never, false, never>;
@@ -10,7 +10,6 @@ import * as i0 from "@angular/core";
10
10
  export declare class SiteUpgradeDataTableComponent implements OnInit, OnDestroy {
11
11
  readonly siteUpgradeService: SiteUpgradeService;
12
12
  private readonly apiService;
13
- private sites;
14
13
  readonly destroy$: Subject<void>;
15
14
  readonly STATUS_ENTRIES: {
16
15
  [key: string]: import("../../../shared/types/constants").Status;
@@ -35,7 +34,10 @@ export declare class SiteUpgradeDataTableComponent implements OnInit, OnDestroy
35
34
  private resetMigrationProgress;
36
35
  onCollect(site: SiteUpgradeRecord): void;
37
36
  private initCollectInterval;
38
- private runBatchCheckStatus;
37
+ private getSiteListForCollectAndBuildWebexCache;
38
+ private removeInterval;
39
+ private handleBatchCUCMAlreadyInCollectCache;
40
+ private getCUCMListAlreadyInCollectWebexCache;
39
41
  private checkBatchStatus;
40
42
  private handleCheckBatchStatusResponse;
41
43
  private getSiteIndex;
@@ -56,6 +58,11 @@ export declare class SiteUpgradeDataTableComponent implements OnInit, OnDestroy
56
58
  getLocationMappingClass(locationMapping: boolean): string;
57
59
  getSiteUpgradeStatusClass(status: string): string;
58
60
  upgradeSite(site: SiteUpgradeRecord): void;
61
+ private setMigratedStatus;
62
+ private getSiteStatusMappingObj;
63
+ private setBatchIdToSites;
64
+ private getBatchId;
65
+ private initCollectProgress;
59
66
  ngOnDestroy(): void;
60
67
  static ɵfac: i0.ɵɵFactoryDeclaration<SiteUpgradeDataTableComponent, never>;
61
68
  static ɵcmp: i0.ɵɵComponentDeclaration<SiteUpgradeDataTableComponent, "tk-site-upgrade-data-table", never, { "token": "token"; "customerId": "customerId"; }, {}, never, never, false, never>;
@@ -2,23 +2,29 @@ import { Observable, Subject } from "rxjs";
2
2
  import { SiteUpgradeRecord } from "./types/user-upgrade";
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class SiteUpgradeService {
5
+ siteSetForCollectAndBuildWebexCache: number[] | undefined;
6
+ cucmSetInCollectAndBuildWebexCache: number[] | undefined;
5
7
  siteUpdateStatusEvent: Subject<BatchStatusDTO[]>;
6
8
  private apiService;
7
9
  customerId: string;
8
10
  getSiteUpgradeStatusCounts(): Observable<any>;
9
11
  getSiteUpgradeRecords(): Observable<SiteUpgradeRecord[]>;
12
+ getBatchSites(): Observable<MigrationBatch[]>;
10
13
  collectSiteCache(siteId: number, migrationType?: string): Observable<any>;
11
- migrateSite(siteId: string): Observable<any>;
14
+ migrateSite(siteId: string, batchId: string): Observable<any>;
12
15
  getBatchesStatuses(batchIds: string[]): Observable<BatchStatusDTO[]>;
16
+ getSiteListForCollectAndBuildWebexCache(): Observable<number[]>;
17
+ getCUCMListCurrentlyInCollectAndBuildWebexCache(): Observable<number[]>;
13
18
  getMigrationBatchesStatuses(): Observable<BatchStatusDTO[]>;
19
+ getMigratedSiteStatus(pageSize: number, page: number): Observable<WebexMigratedSiteStatusInterface[]>;
14
20
  upgradeSite(site: SiteUpgradeRecord): void;
15
21
  static ɵfac: i0.ɵɵFactoryDeclaration<SiteUpgradeService, never>;
16
22
  static ɵprov: i0.ɵɵInjectableDeclaration<SiteUpgradeService>;
17
23
  }
18
24
  export interface BatchStatusDTO {
19
- id: string;
25
+ id: number;
20
26
  status: string;
21
- progress: string;
27
+ progress: number;
22
28
  migErrorsCount: string;
23
29
  }
24
30
  export declare const STATUSES: {
@@ -32,3 +38,47 @@ export declare const STATUSES: {
32
38
  FAILED_COLLECTING: string;
33
39
  WAITING_FOR_REVIEW: string;
34
40
  };
41
+ export interface WebexMigratedSiteStatusInterface {
42
+ site?: {
43
+ id: number;
44
+ name: string;
45
+ };
46
+ migrationFormStatus: string;
47
+ }
48
+ export interface SiteMigrationProgressInterface {
49
+ id: number;
50
+ status: string;
51
+ progress: number;
52
+ migErrorsCount: number | null;
53
+ }
54
+ export interface MigrationBatch {
55
+ id: number;
56
+ sourceId: number;
57
+ targetId: number;
58
+ name: string;
59
+ sourceIp: string;
60
+ sourceCucIp: string | null;
61
+ targetIp: string | null;
62
+ size: number;
63
+ status: string;
64
+ suggestedDestination: string | null;
65
+ destination: string | null;
66
+ regionName: string | null;
67
+ progress: number;
68
+ migrationProcessUUID: string | null;
69
+ customerId: number;
70
+ owner: string | null;
71
+ date: string | null;
72
+ comments: string | null;
73
+ siteId: number;
74
+ planUUID: string;
75
+ comparisonProcessUUID: string | null;
76
+ type: string;
77
+ migErrorsCount: number | null;
78
+ sourceCucId: number | null;
79
+ targetCucId: number | null;
80
+ sites: unknown | null;
81
+ serverType: string;
82
+ migrationFormId: number;
83
+ hasValidationErrors: boolean;
84
+ }
@@ -1,21 +1,26 @@
1
1
  import { UpgradeStatus } from "../../../shared/types/constants";
2
2
  export interface SiteUpgradeRecord {
3
- id: string;
3
+ id: number;
4
4
  customerId: string;
5
- siteId: string;
5
+ siteId: number;
6
+ batchId: number;
6
7
  siteName: string;
7
8
  totalUsers: number;
8
9
  totalReadyUsers: number;
9
10
  totalNotReadyUsers: number;
10
11
  totalUpgradedUsers: number;
11
12
  totalFailedUsers: number;
13
+ migrationFormId?: number;
14
+ progress?: number;
12
15
  locationMapping: boolean;
13
16
  PSTNTrunk: boolean;
14
- upgradeStatus: UpgradeStatus;
17
+ upgradeStatus: UpgradeStatus | string;
15
18
  pending?: boolean;
16
19
  initPending?: boolean;
17
20
  interval?: any;
18
21
  status?: string;
19
22
  isProgressBarAvailable?: boolean;
20
23
  isMigrationInProgress?: boolean;
24
+ isCUCMInCollectCache?: boolean;
25
+ isCollected?: boolean;
21
26
  }
@@ -1,17 +1,18 @@
1
- import { DEPENDENCIES_STATUS, Status } from "../../../shared/types/constants";
1
+ import { DEPENDENCIES_STATUS, Status, UpgradeStatus } from "../../../shared/types/constants";
2
2
  export type DependenciesStatus = typeof DEPENDENCIES_STATUS[keyof typeof DEPENDENCIES_STATUS];
3
3
  export interface UserUpgradeRecord {
4
4
  userId: string;
5
5
  userName: string;
6
6
  customerId: string;
7
7
  siteId: string;
8
- cucmId: string;
8
+ cucmId: number;
9
9
  siteName: string;
10
10
  devices: string[];
11
11
  primaryExtension?: string;
12
12
  deviceStatus: Status;
13
13
  dialPlanStatus: Status;
14
14
  dependenciesStatus: DependenciesStatus;
15
- upgradeStatus: Status;
15
+ upgradeStatus: Status | UpgradeStatus;
16
16
  pending?: boolean;
17
+ showDevices?: boolean;
17
18
  }
@@ -26,11 +26,13 @@ export declare class UserUpgradeDataTableComponent implements OnInit, OnDestroy
26
26
  selection: SelectionModel<UserUpgradeRecord>;
27
27
  filters: TableFilter[];
28
28
  pagination: PaginationDataDto;
29
+ users: UserUpgradeRecord[];
29
30
  private subscriptions;
30
31
  statusCounts: any;
31
32
  private activeFilters;
32
33
  ngOnInit(): void;
33
34
  ngOnDestroy(): void;
35
+ onMultipleDevices(user: UserUpgradeRecord): void;
34
36
  pageEvent(event: PageEvent): void;
35
37
  changePerPageNumber(pageSizeEvent: any): void;
36
38
  private getData;
@@ -40,6 +42,8 @@ export declare class UserUpgradeDataTableComponent implements OnInit, OnDestroy
40
42
  /** Selects all rows if they are not all selected; otherwise clear selection. */
41
43
  masterToggle(): void;
42
44
  upgradeUser(user: UserUpgradeRecord): void;
45
+ updateUsersStatusAfterUpgrade(users: UserUpgradeRecord[]): void;
46
+ getUserIndex(userId: string): number;
43
47
  upgradeSelectedUsers(): void;
44
48
  onFilter(filterEvent: {
45
49
  key: string;
@@ -1,5 +1,6 @@
1
1
  import { UserUpgradeRecord } from "./types/user-upgrade";
2
2
  import { Observable } from "rxjs";
3
+ import { Status, UpgradeStatus } from '../../shared/types/constants';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class UserUpgradeService {
5
6
  private apiService;
@@ -8,7 +9,9 @@ export declare class UserUpgradeService {
8
9
  filteredUsersDataSource: UserUpgradeRecord[];
9
10
  bulkUpgrade(users: UserUpgradeRecord[]): Observable<unknown>;
10
11
  collectUsers(users: UserUpgradeRecord[]): Observable<unknown>;
12
+ getUsersUpgradeStatuses(users: UserUpgradeRecord[]): Observable<User2UpgradeStatusDTO[]>;
11
13
  generateUserUpgradeBody(users: UserUpgradeRecord[]): UserUpgradeBody;
14
+ generateUserUpgradeStatusBody(users: UserUpgradeRecord[]): Record<string, string[]>;
12
15
  getUserUpgradeStatusCounts(): Observable<any>;
13
16
  getUserUpgradeRecords(pageSize: number, pageIndex: number): Observable<any>;
14
17
  static ɵfac: i0.ɵɵFactoryDeclaration<UserUpgradeService, never>;
@@ -18,8 +21,13 @@ export type UserUpgradeBody = {
18
21
  customerId: string;
19
22
  entities: {
20
23
  PERSON: {
21
- cucmId: string;
24
+ cucmId: number;
22
25
  entityId: string;
23
26
  }[];
24
27
  };
25
28
  };
29
+ export declare class User2UpgradeStatusDTO {
30
+ userId: string;
31
+ cucmId: string;
32
+ upgradeStatus: Status | UpgradeStatus;
33
+ }
@@ -12,7 +12,8 @@ export const API = {
12
12
  GET_USERS_UPGRADE_STATUS_COUNTS: '/api/webex-upgrade/customers/:customerId/user-upgrades/status-counts',
13
13
  UPGRADE_USER: '/api/migration/webex/sites/:siteId/users/:userId',
14
14
  SINGLE_COLLECT: '/api/migration/webex/singlecollect/features/:featureName',
15
- SINGLE_MIGRATION: '/api/migration/webex/singlemigration/features/:featureName'
15
+ SINGLE_MIGRATION: '/api/migration/webex/singlemigration/features/:featureName',
16
+ UPGRADE_STATUS: '/api/webex-upgrade/customers/:customerId/users/upgrade-status'
16
17
  },
17
18
  SITE_UPGRADE: {
18
19
  GET_SITES_UPGRADE_DATA: '/api/webex-upgrade/customers/:customerId/site-upgrades',
@@ -21,7 +22,11 @@ export const API = {
21
22
  UPGRADE_SITE: '/api/migration/webex/sites/:siteId',
22
23
  WEBEX_BATCH_STATUS: "/api/migration/webex/customer/:customerId/batchesstatus",
23
24
  MIGRATE_SITE: "/api/migration/webex/sites/:siteId/migrate",
24
- BATCH_STATUS: "/api/e2emigration/batches-status/:customerId"
25
+ BATCH_STATUS: "/api/e2emigration/batches-status/:customerId",
26
+ GET_BATCH_SITES: "/api/e2emigration/batch/:customerId/Sites",
27
+ WEBEX_CACHE_COLLECTION_SITE_LIST: "/api/migration/webex/customers/:customerId/sitelistforcollectbuildwebexcache",
28
+ WEBEX_CACHE_COLLECTION_CUCM_LIST: "/api/migration/webex/customers/:customerId/cucmlistforcollectbuildwebexcache",
29
+ MIGRATION_STATUS: "/api/migration/state/webex/customers/:customerId/migrationstatus"
25
30
  }
26
31
  };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmVuZHBvaW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC9hcGkvYXBpLmVuZHBvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUc7SUFDakIsUUFBUSxFQUFFO1FBQ1IseUJBQXlCLEVBQUUsOERBQThEO1FBQ3pGLHVCQUF1QixFQUFFLHNEQUFzRDtRQUMvRSx5QkFBeUIsRUFBRSw4REFBOEQ7UUFDekYseUJBQXlCLEVBQUUsOERBQThEO1FBQ3pGLDJCQUEyQixFQUFFLGdFQUFnRTtRQUM3RiwyQkFBMkIsRUFBRSxnRUFBZ0U7S0FDOUY7SUFDRCxZQUFZLEVBQUU7UUFDWixzQkFBc0IsRUFBRSx1REFBdUQ7UUFDL0UsK0JBQStCLEVBQUUsc0VBQXNFO1FBQ3ZHLFlBQVksRUFBRSxrREFBa0Q7UUFDaEUsY0FBYyxFQUFFLDBEQUEwRDtRQUMxRSxnQkFBZ0IsRUFBRSw0REFBNEQ7S0FDL0U7SUFDRCxZQUFZLEVBQUU7UUFDWixzQkFBc0IsRUFBRSx3REFBd0Q7UUFDaEYsK0JBQStCLEVBQUUsc0VBQXNFO1FBQ3ZHLHNCQUFzQixFQUFFLG9FQUFvRTtRQUM1RixZQUFZLEVBQUUsb0NBQW9DO1FBQ2xELGtCQUFrQixFQUFFLHlEQUF5RDtRQUM3RSxZQUFZLEVBQUUsNENBQTRDO1FBQzFELFlBQVksRUFBRSw4Q0FBOEM7S0FDN0Q7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFQSSA9IHtcclxuICBPVkVSVklFVzoge1xyXG4gICAgR0VUX1VQR1JBREVfUFJFQ09ORElUSU9OUzogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvcHJlY29uZGl0aW9ucy9mZXRjaCcsXHJcbiAgICBHRVRfU0lURV9JTkZSQVNUUlVDVFVSRTogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvaW5mcmEvZmV0Y2gnLFxyXG4gICAgR0VUX1VTRVJTX1VQR1JBREVfU1VNTUFSWTogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvdXNlcnMvdXBncmFkZS9mZXRjaCcsXHJcbiAgICBHRVRfU0lURVNfVVBHUkFERV9TVU1NQVJZOiAnL2FwaS93ZWJleC11cGdyYWRlL2N1c3RvbWVycy86Y3VzdG9tZXJJZC9zaXRlcy91cGdyYWRlL2ZldGNoJyxcclxuICAgIEdFVF9VU0VSU19VUEdSQURFX1JFQURJTkVTUzogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvdXNlcnMvcmVhZGluZXNzL2ZldGNoJyxcclxuICAgIEdFVF9TSVRFU19VUEdSQURFX1JFQURJTkVTUzogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvc2l0ZXMvcmVhZGluZXNzL2ZldGNoJ1xyXG4gIH0sXHJcbiAgVVNFUl9VUEdSQURFOiB7XHJcbiAgICBHRVRfVVNFUlNfVVBHUkFERV9EQVRBOiAnL2FwaS93ZWJleC11cGdyYWRlL2N1c3RvbWVycy86Y3VzdG9tZXJJZC91c2VyLXVwZ3JhZGUnLFxyXG4gICAgR0VUX1VTRVJTX1VQR1JBREVfU1RBVFVTX0NPVU5UUzogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvdXNlci11cGdyYWRlcy9zdGF0dXMtY291bnRzJyxcclxuICAgIFVQR1JBREVfVVNFUjogJy9hcGkvbWlncmF0aW9uL3dlYmV4L3NpdGVzLzpzaXRlSWQvdXNlcnMvOnVzZXJJZCcsXHJcbiAgICBTSU5HTEVfQ09MTEVDVDogJy9hcGkvbWlncmF0aW9uL3dlYmV4L3NpbmdsZWNvbGxlY3QvZmVhdHVyZXMvOmZlYXR1cmVOYW1lJyxcclxuICAgIFNJTkdMRV9NSUdSQVRJT046ICcvYXBpL21pZ3JhdGlvbi93ZWJleC9zaW5nbGVtaWdyYXRpb24vZmVhdHVyZXMvOmZlYXR1cmVOYW1lJ1xyXG4gIH0sXHJcbiAgU0lURV9VUEdSQURFOiB7XHJcbiAgICBHRVRfU0lURVNfVVBHUkFERV9EQVRBOiAnL2FwaS93ZWJleC11cGdyYWRlL2N1c3RvbWVycy86Y3VzdG9tZXJJZC9zaXRlLXVwZ3JhZGVzJyxcclxuICAgIEdFVF9TSVRFU19VUEdSQURFX1NUQVRVU19DT1VOVFM6ICcvYXBpL3dlYmV4LXVwZ3JhZGUvY3VzdG9tZXJzLzpjdXN0b21lcklkL3NpdGUtdXBncmFkZXMvc3RhdHVzLWNvdW50cycsXHJcbiAgICBXRUJFWF9DQUNIRV9DT0xMRUNUSU9OOiAnL2FwaS9taWdyYXRpb24vOm1pZ3JhdGlvblR5cGUvc2l0ZXMvOnNpdGVJZC9jb2xsZWN0YnVpbGR3ZWJleGNhY2hlJyxcclxuICAgIFVQR1JBREVfU0lURTogJy9hcGkvbWlncmF0aW9uL3dlYmV4L3NpdGVzLzpzaXRlSWQnLFxyXG4gICAgV0VCRVhfQkFUQ0hfU1RBVFVTOiBcIi9hcGkvbWlncmF0aW9uL3dlYmV4L2N1c3RvbWVyLzpjdXN0b21lcklkL2JhdGNoZXNzdGF0dXNcIixcclxuICAgIE1JR1JBVEVfU0lURTogXCIvYXBpL21pZ3JhdGlvbi93ZWJleC9zaXRlcy86c2l0ZUlkL21pZ3JhdGVcIixcclxuICAgIEJBVENIX1NUQVRVUzogXCIvYXBpL2UyZW1pZ3JhdGlvbi9iYXRjaGVzLXN0YXR1cy86Y3VzdG9tZXJJZFwiXHJcbiAgfVxyXG59O1xyXG4iXX0=
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmVuZHBvaW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC9hcGkvYXBpLmVuZHBvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUc7SUFDakIsUUFBUSxFQUFFO1FBQ1IseUJBQXlCLEVBQUUsOERBQThEO1FBQ3pGLHVCQUF1QixFQUFFLHNEQUFzRDtRQUMvRSx5QkFBeUIsRUFBRSw4REFBOEQ7UUFDekYseUJBQXlCLEVBQUUsOERBQThEO1FBQ3pGLDJCQUEyQixFQUFFLGdFQUFnRTtRQUM3RiwyQkFBMkIsRUFBRSxnRUFBZ0U7S0FDOUY7SUFDRCxZQUFZLEVBQUU7UUFDWixzQkFBc0IsRUFBRSx1REFBdUQ7UUFDL0UsK0JBQStCLEVBQUUsc0VBQXNFO1FBQ3ZHLFlBQVksRUFBRSxrREFBa0Q7UUFDaEUsY0FBYyxFQUFFLDBEQUEwRDtRQUMxRSxnQkFBZ0IsRUFBRSw0REFBNEQ7UUFDOUUsY0FBYyxFQUFFLCtEQUErRDtLQUNoRjtJQUNELFlBQVksRUFBRTtRQUNaLHNCQUFzQixFQUFFLHdEQUF3RDtRQUNoRiwrQkFBK0IsRUFBRSxzRUFBc0U7UUFDdkcsc0JBQXNCLEVBQUUsb0VBQW9FO1FBQzVGLFlBQVksRUFBRSxvQ0FBb0M7UUFDbEQsa0JBQWtCLEVBQUUseURBQXlEO1FBQzdFLFlBQVksRUFBRSw0Q0FBNEM7UUFDMUQsWUFBWSxFQUFFLDhDQUE4QztRQUM1RCxlQUFlLEVBQUUsMkNBQTJDO1FBQzVELGdDQUFnQyxFQUFFLDhFQUE4RTtRQUNoSCxnQ0FBZ0MsRUFBRSw4RUFBOEU7UUFDaEgsZ0JBQWdCLEVBQUUsa0VBQWtFO0tBQ3JGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBUEkgPSB7XHJcbiAgT1ZFUlZJRVc6IHtcclxuICAgIEdFVF9VUEdSQURFX1BSRUNPTkRJVElPTlM6ICcvYXBpL3dlYmV4LXVwZ3JhZGUvY3VzdG9tZXJzLzpjdXN0b21lcklkL3ByZWNvbmRpdGlvbnMvZmV0Y2gnLFxyXG4gICAgR0VUX1NJVEVfSU5GUkFTVFJVQ1RVUkU6ICcvYXBpL3dlYmV4LXVwZ3JhZGUvY3VzdG9tZXJzLzpjdXN0b21lcklkL2luZnJhL2ZldGNoJyxcclxuICAgIEdFVF9VU0VSU19VUEdSQURFX1NVTU1BUlk6ICcvYXBpL3dlYmV4LXVwZ3JhZGUvY3VzdG9tZXJzLzpjdXN0b21lcklkL3VzZXJzL3VwZ3JhZGUvZmV0Y2gnLFxyXG4gICAgR0VUX1NJVEVTX1VQR1JBREVfU1VNTUFSWTogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvc2l0ZXMvdXBncmFkZS9mZXRjaCcsXHJcbiAgICBHRVRfVVNFUlNfVVBHUkFERV9SRUFESU5FU1M6ICcvYXBpL3dlYmV4LXVwZ3JhZGUvY3VzdG9tZXJzLzpjdXN0b21lcklkL3VzZXJzL3JlYWRpbmVzcy9mZXRjaCcsXHJcbiAgICBHRVRfU0lURVNfVVBHUkFERV9SRUFESU5FU1M6ICcvYXBpL3dlYmV4LXVwZ3JhZGUvY3VzdG9tZXJzLzpjdXN0b21lcklkL3NpdGVzL3JlYWRpbmVzcy9mZXRjaCdcclxuICB9LFxyXG4gIFVTRVJfVVBHUkFERToge1xyXG4gICAgR0VUX1VTRVJTX1VQR1JBREVfREFUQTogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvdXNlci11cGdyYWRlJyxcclxuICAgIEdFVF9VU0VSU19VUEdSQURFX1NUQVRVU19DT1VOVFM6ICcvYXBpL3dlYmV4LXVwZ3JhZGUvY3VzdG9tZXJzLzpjdXN0b21lcklkL3VzZXItdXBncmFkZXMvc3RhdHVzLWNvdW50cycsXHJcbiAgICBVUEdSQURFX1VTRVI6ICcvYXBpL21pZ3JhdGlvbi93ZWJleC9zaXRlcy86c2l0ZUlkL3VzZXJzLzp1c2VySWQnLFxyXG4gICAgU0lOR0xFX0NPTExFQ1Q6ICcvYXBpL21pZ3JhdGlvbi93ZWJleC9zaW5nbGVjb2xsZWN0L2ZlYXR1cmVzLzpmZWF0dXJlTmFtZScsXHJcbiAgICBTSU5HTEVfTUlHUkFUSU9OOiAnL2FwaS9taWdyYXRpb24vd2ViZXgvc2luZ2xlbWlncmF0aW9uL2ZlYXR1cmVzLzpmZWF0dXJlTmFtZScsXHJcbiAgICBVUEdSQURFX1NUQVRVUzogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvdXNlcnMvdXBncmFkZS1zdGF0dXMnXHJcbiAgfSxcclxuICBTSVRFX1VQR1JBREU6IHtcclxuICAgIEdFVF9TSVRFU19VUEdSQURFX0RBVEE6ICcvYXBpL3dlYmV4LXVwZ3JhZGUvY3VzdG9tZXJzLzpjdXN0b21lcklkL3NpdGUtdXBncmFkZXMnLFxyXG4gICAgR0VUX1NJVEVTX1VQR1JBREVfU1RBVFVTX0NPVU5UUzogJy9hcGkvd2ViZXgtdXBncmFkZS9jdXN0b21lcnMvOmN1c3RvbWVySWQvc2l0ZS11cGdyYWRlcy9zdGF0dXMtY291bnRzJyxcclxuICAgIFdFQkVYX0NBQ0hFX0NPTExFQ1RJT046ICcvYXBpL21pZ3JhdGlvbi86bWlncmF0aW9uVHlwZS9zaXRlcy86c2l0ZUlkL2NvbGxlY3RidWlsZHdlYmV4Y2FjaGUnLFxyXG4gICAgVVBHUkFERV9TSVRFOiAnL2FwaS9taWdyYXRpb24vd2ViZXgvc2l0ZXMvOnNpdGVJZCcsXHJcbiAgICBXRUJFWF9CQVRDSF9TVEFUVVM6IFwiL2FwaS9taWdyYXRpb24vd2ViZXgvY3VzdG9tZXIvOmN1c3RvbWVySWQvYmF0Y2hlc3N0YXR1c1wiLFxyXG4gICAgTUlHUkFURV9TSVRFOiBcIi9hcGkvbWlncmF0aW9uL3dlYmV4L3NpdGVzLzpzaXRlSWQvbWlncmF0ZVwiLFxyXG4gICAgQkFUQ0hfU1RBVFVTOiBcIi9hcGkvZTJlbWlncmF0aW9uL2JhdGNoZXMtc3RhdHVzLzpjdXN0b21lcklkXCIsXHJcbiAgICBHRVRfQkFUQ0hfU0lURVM6IFwiL2FwaS9lMmVtaWdyYXRpb24vYmF0Y2gvOmN1c3RvbWVySWQvU2l0ZXNcIixcclxuICAgIFdFQkVYX0NBQ0hFX0NPTExFQ1RJT05fU0lURV9MSVNUOiBcIi9hcGkvbWlncmF0aW9uL3dlYmV4L2N1c3RvbWVycy86Y3VzdG9tZXJJZC9zaXRlbGlzdGZvcmNvbGxlY3RidWlsZHdlYmV4Y2FjaGVcIixcclxuICAgIFdFQkVYX0NBQ0hFX0NPTExFQ1RJT05fQ1VDTV9MSVNUOiBcIi9hcGkvbWlncmF0aW9uL3dlYmV4L2N1c3RvbWVycy86Y3VzdG9tZXJJZC9jdWNtbGlzdGZvcmNvbGxlY3RidWlsZHdlYmV4Y2FjaGVcIixcclxuICAgIE1JR1JBVElPTl9TVEFUVVM6IFwiL2FwaS9taWdyYXRpb24vc3RhdGUvd2ViZXgvY3VzdG9tZXJzLzpjdXN0b21lcklkL21pZ3JhdGlvbnN0YXR1c1wiXHJcbiAgfVxyXG59O1xyXG4iXX0=
@@ -3,11 +3,11 @@ import * as i0 from "@angular/core";
3
3
  export class CardComponent {
4
4
  }
5
5
  CardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
- CardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardComponent, selector: "tk-card", inputs: { title: "title" }, ngImport: i0, template: "<article class=\"card\">\r\n <header class=\"card__header\">\r\n <h2>{{ title }}</h2>\r\n <div class=\"card__menu-button\">\r\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n </div>\r\n </header>\r\n <div class=\"card__content\">\r\n <ng-content select=\"card-content\"></ng-content>\r\n </div>\r\n</article>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;height:100%;box-sizing:border-box}.card{font-family:Inter,Inter,sans-serif;background-color:#fff;border-radius:1rem;padding:2rem;border:1px solid hsl(0,0%,50%);min-width:300px;max-width:100%;height:100%;display:flex;flex-direction:column;box-sizing:border-box;gap:2.5rem}.card__header{position:relative;display:flex;align-items:center;justify-content:space-between}.card__header h2{font-size:16px;margin:0}.card__header .card__menu-button{position:relative;display:flex;align-items:center}.card__content{display:flex;flex-direction:column;gap:2.5rem;flex-grow:1}\n"] });
6
+ CardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: CardComponent, selector: "tk-card", inputs: { title: "title" }, ngImport: i0, template: "<article class=\"card\">\r\n <header class=\"card__header\">\r\n <h2>{{ title }}</h2>\r\n <!--<div class=\"card__menu-button\">\r\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n </div>-->\r\n </header>\r\n <div class=\"card__content\">\r\n <ng-content select=\"card-content\"></ng-content>\r\n </div>\r\n</article>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;height:100%;box-sizing:border-box}.card{font-family:Inter,Inter,sans-serif;background-color:#fff;border-radius:1rem;padding:2rem;border:1px solid hsl(0,0%,50%);min-width:300px;max-width:100%;height:100%;display:flex;flex-direction:column;box-sizing:border-box;gap:2.5rem}.card__header{position:relative;display:flex;align-items:center;justify-content:space-between}.card__header h2{font-size:16px;margin:0}.card__header .card__menu-button{position:relative;display:flex;align-items:center}.card__content{display:flex;flex-direction:column;gap:2.5rem;flex-grow:1}\n"] });
7
7
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CardComponent, decorators: [{
8
8
  type: Component,
9
- args: [{ selector: 'tk-card', template: "<article class=\"card\">\r\n <header class=\"card__header\">\r\n <h2>{{ title }}</h2>\r\n <div class=\"card__menu-button\">\r\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n </div>\r\n </header>\r\n <div class=\"card__content\">\r\n <ng-content select=\"card-content\"></ng-content>\r\n </div>\r\n</article>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;height:100%;box-sizing:border-box}.card{font-family:Inter,Inter,sans-serif;background-color:#fff;border-radius:1rem;padding:2rem;border:1px solid hsl(0,0%,50%);min-width:300px;max-width:100%;height:100%;display:flex;flex-direction:column;box-sizing:border-box;gap:2.5rem}.card__header{position:relative;display:flex;align-items:center;justify-content:space-between}.card__header h2{font-size:16px;margin:0}.card__header .card__menu-button{position:relative;display:flex;align-items:center}.card__content{display:flex;flex-direction:column;gap:2.5rem;flex-grow:1}\n"] }]
9
+ args: [{ selector: 'tk-card', template: "<article class=\"card\">\r\n <header class=\"card__header\">\r\n <h2>{{ title }}</h2>\r\n <!--<div class=\"card__menu-button\">\r\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n </div>-->\r\n </header>\r\n <div class=\"card__content\">\r\n <ng-content select=\"card-content\"></ng-content>\r\n </div>\r\n</article>\r\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";:host{display:block;height:100%;box-sizing:border-box}.card{font-family:Inter,Inter,sans-serif;background-color:#fff;border-radius:1rem;padding:2rem;border:1px solid hsl(0,0%,50%);min-width:300px;max-width:100%;height:100%;display:flex;flex-direction:column;box-sizing:border-box;gap:2.5rem}.card__header{position:relative;display:flex;align-items:center;justify-content:space-between}.card__header h2{font-size:16px;margin:0}.card__header .card__menu-button{position:relative;display:flex;align-items:center}.card__content{display:flex;flex-direction:column;gap:2.5rem;flex-grow:1}\n"] }]
10
10
  }], propDecorators: { title: [{
11
11
  type: Input
12
12
  }] } });
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvZGkybXQvc2hhcmVkL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC9zaGFyZWQvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT2pELE1BQU0sT0FBTyxhQUFhOzsyR0FBYixhQUFhOytGQUFiLGFBQWEsMkVDUDFCLDBZQVdBOzRGREphLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0ksU0FBUzs4QkFLVixLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0ay1jYXJkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhcmQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FyZENvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcclxufSIsIjxhcnRpY2xlIGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmRfX2hlYWRlclwiPlxyXG4gICAgICAgIDxoMj57eyB0aXRsZSB9fTwvaDI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRfX21lbnUtYnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxpbWcgd2lkdGg9XCIxOFwiIHNyYz1cImFzc2V0cy9pY29ucy9tZW51X2ljb24ucG5nXCIgYWx0PVwiTWVudSBJY29uXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2hlYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkX19jb250ZW50XCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiY2FyZC1jb250ZW50XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbjwvYXJ0aWNsZT5cclxuIl19
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvZGkybXQvc2hhcmVkL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC9zaGFyZWQvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT2pELE1BQU0sT0FBTyxhQUFhOzsyR0FBYixhQUFhOytGQUFiLGFBQWEsMkVDUDFCLGlaQVdBOzRGREphLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0ksU0FBUzs4QkFLVixLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd0ay1jYXJkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhcmQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FyZENvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSB0aXRsZSE6IHN0cmluZztcclxufSIsIjxhcnRpY2xlIGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmRfX2hlYWRlclwiPlxyXG4gICAgICAgIDxoMj57eyB0aXRsZSB9fTwvaDI+XHJcbiAgICAgICAgPCEtLTxkaXYgY2xhc3M9XCJjYXJkX19tZW51LWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8aW1nIHdpZHRoPVwiMThcIiBzcmM9XCJhc3NldHMvaWNvbnMvbWVudV9pY29uLnBuZ1wiIGFsdD1cIk1lbnUgSWNvblwiPlxyXG4gICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgPC9oZWFkZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZF9fY29udGVudFwiPlxyXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImNhcmQtY29udGVudFwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG48L2FydGljbGU+XHJcbiJdfQ==
@@ -9,4 +9,12 @@ export const DEPENDENCIES_STATUS = {
9
9
  DEPENDENCIES_FOUND: 'Dependencies found',
10
10
  NO_DEPENDENCIES: 'No dependencies',
11
11
  };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2RpMm10L3NoYXJlZC90eXBlcy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUE4QjtJQUNyRCxLQUFLLEVBQUUsT0FBTztJQUNkLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLGFBQWEsRUFBRSxlQUFlO0lBQzlCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLFNBQVMsRUFBRSxXQUFXO0NBQ3pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBOEI7SUFDMUQsa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLGVBQWUsRUFBRSxpQkFBaUI7Q0FDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFN0YXR1cyA9ICdSZWFkeScgfCAnTm90IFJlYWR5JyB8ICdQYXJ0aWFsIFJlYWR5JyB8ICdGYWlsZWQnIHwgJ0NvbXBsZXRlZCc7XHJcbmV4cG9ydCB0eXBlIFVwZ3JhZGVTdGF0dXMgPSAnUkVBRFknIHwgJ05PVF9SRUFEWScgfCAnUEFSVElBTF9SRUFEWScgfCAnRkFJTEVEJyB8ICdDT01QTEVURUQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNUQVRVU19FTlRSSUVTOiB7IFtrZXk6IHN0cmluZ106IFN0YXR1cyB9ID0ge1xyXG4gICAgUkVBRFk6ICdSZWFkeScsXHJcbiAgICBOT1RfUkVBRFk6ICdOb3QgUmVhZHknLFxyXG4gICAgUEFSVElBTF9SRUFEWTogJ1BhcnRpYWwgUmVhZHknLFxyXG4gICAgRkFJTEVEOiAnRmFpbGVkJyxcclxuICAgIENPTVBMRVRFRDogJ0NvbXBsZXRlZCdcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBERVBFTkRFTkNJRVNfU1RBVFVTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgREVQRU5ERU5DSUVTX0ZPVU5EOiAnRGVwZW5kZW5jaWVzIGZvdW5kJyxcclxuICAgIE5PX0RFUEVOREVOQ0lFUzogJ05vIGRlcGVuZGVuY2llcycsXHJcbn07XHJcbiJdfQ==
12
+ export var UPGRADE_STATUS;
13
+ (function (UPGRADE_STATUS) {
14
+ UPGRADE_STATUS["NOT_READY"] = "not_ready";
15
+ UPGRADE_STATUS["READY"] = "ready";
16
+ UPGRADE_STATUS["COMPLETED"] = "completed";
17
+ UPGRADE_STATUS["IN_PROGRESS"] = "in progress";
18
+ UPGRADE_STATUS["FAILED"] = "failed";
19
+ })(UPGRADE_STATUS || (UPGRADE_STATUS = {}));
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL2RpMm10L3NoYXJlZC90eXBlcy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUE4QjtJQUNyRCxLQUFLLEVBQUUsT0FBTztJQUNkLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLGFBQWEsRUFBRSxlQUFlO0lBQzlCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLFNBQVMsRUFBRSxXQUFXO0NBQ3pCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBOEI7SUFDMUQsa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLGVBQWUsRUFBRSxpQkFBaUI7Q0FDckMsQ0FBQztBQUNGLE1BQU0sQ0FBTixJQUFZLGNBTVg7QUFORCxXQUFZLGNBQWM7SUFDeEIseUNBQXVCLENBQUE7SUFDdkIsaUNBQWUsQ0FBQTtJQUNmLHlDQUF1QixDQUFBO0lBQ3ZCLDZDQUEyQixDQUFBO0lBQzNCLG1DQUFpQixDQUFBO0FBQ25CLENBQUMsRUFOVyxjQUFjLEtBQWQsY0FBYyxRQU16QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFN0YXR1cyA9ICdSZWFkeScgfCAnTm90IFJlYWR5JyB8ICdQYXJ0aWFsIFJlYWR5JyB8ICdGYWlsZWQnIHwgJ0NvbXBsZXRlZCc7XHJcbmV4cG9ydCB0eXBlIFVwZ3JhZGVTdGF0dXMgPSAnUkVBRFknIHwgJ05PVF9SRUFEWScgfCAnUEFSVElBTF9SRUFEWScgfCAnRkFJTEVEJyB8ICdDT01QTEVURUQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IFNUQVRVU19FTlRSSUVTOiB7IFtrZXk6IHN0cmluZ106IFN0YXR1cyB9ID0ge1xyXG4gICAgUkVBRFk6ICdSZWFkeScsXHJcbiAgICBOT1RfUkVBRFk6ICdOb3QgUmVhZHknLFxyXG4gICAgUEFSVElBTF9SRUFEWTogJ1BhcnRpYWwgUmVhZHknLFxyXG4gICAgRkFJTEVEOiAnRmFpbGVkJyxcclxuICAgIENPTVBMRVRFRDogJ0NvbXBsZXRlZCdcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBERVBFTkRFTkNJRVNfU1RBVFVTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgREVQRU5ERU5DSUVTX0ZPVU5EOiAnRGVwZW5kZW5jaWVzIGZvdW5kJyxcclxuICAgIE5PX0RFUEVOREVOQ0lFUzogJ05vIGRlcGVuZGVuY2llcycsXHJcbn07XHJcbmV4cG9ydCBlbnVtIFVQR1JBREVfU1RBVFVTIHtcclxuICBOT1RfUkVBRFkgPSAnbm90X3JlYWR5JyxcclxuICBSRUFEWSA9ICdyZWFkeScsXHJcbiAgQ09NUExFVEVEID0gJ2NvbXBsZXRlZCcsXHJcbiAgSU5fUFJPR1JFU1MgPSAnaW4gcHJvZ3Jlc3MnLFxyXG4gIEZBSUxFRCA9ICdmYWlsZWQnXHJcbn1cclxuIl19
@@ -4,41 +4,35 @@ import * as i1 from "@angular/common";
4
4
  export class ProgressBarComponent {
5
5
  constructor() {
6
6
  this.isAvailable = false;
7
- this.progress = 0;
7
+ this._progress = 0;
8
8
  this.color = 'grey';
9
9
  }
10
- ngOnInit() {
10
+ set progress(value) {
11
+ this._progress = Math.max(0, Math.min(100, Number(value) || 0));
12
+ this.setColor(this._progress);
11
13
  }
12
- updatedProgress(progress) {
13
- this.progress = progress;
14
- this.setColor(this.progress);
15
- }
16
- setColor(progress) {
17
- if (progress <= 20) {
14
+ get progress() { return this._progress; }
15
+ setColor(p) {
16
+ if (p <= 20)
18
17
  this.color = 'red';
19
- }
20
- else if (progress <= 40) {
18
+ else if (p <= 40)
21
19
  this.color = 'yellow';
22
- }
23
- else if (progress <= 60) {
20
+ else if (p <= 60)
24
21
  this.color = 'darkblue';
25
- }
26
- else if (progress <= 80) {
22
+ else if (p <= 80)
27
23
  this.color = 'lightblue';
28
- }
29
- else if (progress <= 100.0) {
24
+ else
30
25
  this.color = 'green';
31
- }
32
26
  }
33
27
  }
34
28
  ProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
- ProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProgressBarComponent, selector: "app-progress-bar", inputs: { isAvailable: "isAvailable", progress: "progress" }, ngImport: i0, template: "<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\n <div class=\"progress-bar {{color}}\" [ngStyle]=\"{'width': progress + '%'}\"></div>\n</div>\n", styles: [".progress-bar-container{background-color:#e5e5e5;border-radius:20px;width:100%}.progress-bar{height:7px;width:0;border-radius:15px;text-align:center}.progress-percent{font-weight:600}.progress-bar.green{background-color:#94d326}.progress-bar.red{background-color:#ed4364}.progress-bar.yellow{background-color:#fed200}.progress-bar.darkblue{background-color:#2c355d}.progress-bar.lightblue{background-color:#2299d9}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
29
+ ProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProgressBarComponent, selector: "app-progress-bar", inputs: { isAvailable: "isAvailable", progress: "progress" }, ngImport: i0, template: "<!--<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\n <div class=\"progress-bar {{color}}\" [ngStyle]=\"{'width': progress + '%'}\"></div>\n</div>-->\n<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\n <div class=\"progress-bar\" [ngClass]=\"color\" [style.width.%]=\"progress\"></div>\n</div>\n", styles: [".progress-bar-container{background-color:#e5e5e5;border-radius:20px;width:100%}.progress-bar{height:7px;width:0;border-radius:15px;text-align:center}.progress-percent{font-weight:600}.progress-bar.green{background-color:#94d326}.progress-bar.red{background-color:#ed4364}.progress-bar.yellow{background-color:#fed200}.progress-bar{height:8px;border-radius:4px;transition:width .25s ease,background-color .25s ease}.progress-bar.red{background-color:#e53935}.progress-bar.yellow{background-color:#fbc02d}.progress-bar.darkblue{background-color:#1e3a8a}.progress-bar.lightblue{background-color:#60a5fa}.progress-bar.green{background-color:#22c55e}.progress-bar.grey{background-color:#9ca3af}.progress-bar.darkblue{background-color:#2c355d}.progress-bar.lightblue{background-color:#2299d9}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
36
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProgressBarComponent, decorators: [{
37
31
  type: Component,
38
- args: [{ selector: 'app-progress-bar', template: "<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\n <div class=\"progress-bar {{color}}\" [ngStyle]=\"{'width': progress + '%'}\"></div>\n</div>\n", styles: [".progress-bar-container{background-color:#e5e5e5;border-radius:20px;width:100%}.progress-bar{height:7px;width:0;border-radius:15px;text-align:center}.progress-percent{font-weight:600}.progress-bar.green{background-color:#94d326}.progress-bar.red{background-color:#ed4364}.progress-bar.yellow{background-color:#fed200}.progress-bar.darkblue{background-color:#2c355d}.progress-bar.lightblue{background-color:#2299d9}\n"] }]
39
- }], ctorParameters: function () { return []; }, propDecorators: { isAvailable: [{
32
+ args: [{ selector: 'app-progress-bar', template: "<!--<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\n <div class=\"progress-bar {{color}}\" [ngStyle]=\"{'width': progress + '%'}\"></div>\n</div>-->\n<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\n <div class=\"progress-bar\" [ngClass]=\"color\" [style.width.%]=\"progress\"></div>\n</div>\n", styles: [".progress-bar-container{background-color:#e5e5e5;border-radius:20px;width:100%}.progress-bar{height:7px;width:0;border-radius:15px;text-align:center}.progress-percent{font-weight:600}.progress-bar.green{background-color:#94d326}.progress-bar.red{background-color:#ed4364}.progress-bar.yellow{background-color:#fed200}.progress-bar{height:8px;border-radius:4px;transition:width .25s ease,background-color .25s ease}.progress-bar.red{background-color:#e53935}.progress-bar.yellow{background-color:#fbc02d}.progress-bar.darkblue{background-color:#1e3a8a}.progress-bar.lightblue{background-color:#60a5fa}.progress-bar.green{background-color:#22c55e}.progress-bar.grey{background-color:#9ca3af}.progress-bar.darkblue{background-color:#2c355d}.progress-bar.lightblue{background-color:#2299d9}\n"] }]
33
+ }], propDecorators: { isAvailable: [{
40
34
  type: Input
41
35
  }], progress: [{
42
36
  type: Input
43
37
  }] } });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC93aWRnZXRzL3NpdGUtdXBncmFkZS9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC93aWRnZXRzL3NpdGUtdXBncmFkZS9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFPekQsTUFBTSxPQUFPLG9CQUFvQjtJQU8vQjtRQUxPLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixVQUFLLEdBQUcsTUFBTSxDQUFDO0lBSXRCLENBQUM7SUFFRCxRQUFRO0lBQ1IsQ0FBQztJQUVNLGVBQWUsQ0FBQyxRQUFnQjtRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sUUFBUSxDQUFDLFFBQWdCO1FBQy9CLElBQUksUUFBUSxJQUFJLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztTQUNwQjthQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztTQUN2QjthQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztTQUN6QjthQUFNLElBQUksUUFBUSxJQUFJLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztTQUMxQjthQUFNLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRTtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztTQUN0QjtJQUNILENBQUM7O2tIQS9CVSxvQkFBb0I7c0dBQXBCLG9CQUFvQixzSENQakMsZ0tBR0E7NEZESWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQjswRUFNckIsV0FBVztzQkFEakIsS0FBSztnQkFHQyxRQUFRO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb2dyZXNzLWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0JhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpc0F2YWlsYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgcHJvZ3Jlc3MgPSAwO1xuICBwdWJsaWMgY29sb3IgPSAnZ3JleSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlZFByb2dyZXNzKHByb2dyZXNzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyZXNzID0gcHJvZ3Jlc3M7XG4gICAgdGhpcy5zZXRDb2xvcih0aGlzLnByb2dyZXNzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29sb3IocHJvZ3Jlc3M6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChwcm9ncmVzcyA8PSAyMCkge1xuICAgICAgdGhpcy5jb2xvciA9ICdyZWQnO1xuICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3MgPD0gNDApIHtcbiAgICAgIHRoaXMuY29sb3IgPSAneWVsbG93JztcbiAgICB9IGVsc2UgaWYgKHByb2dyZXNzIDw9IDYwKSB7XG4gICAgICB0aGlzLmNvbG9yID0gJ2RhcmtibHVlJztcbiAgICB9IGVsc2UgaWYgKHByb2dyZXNzIDw9IDgwKSB7XG4gICAgICB0aGlzLmNvbG9yID0gJ2xpZ2h0Ymx1ZSc7XG4gICAgfSBlbHNlIGlmIChwcm9ncmVzcyA8PSAxMDAuMCkge1xuICAgICAgdGhpcy5jb2xvciA9ICdncmVlbic7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiaXNBdmFpbGFibGVcIiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhciB7e2NvbG9yfX1cIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogcHJvZ3Jlc3MgKyAnJSd9XCI+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC93aWRnZXRzL3NpdGUtdXBncmFkZS9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy9kaTJtdC93aWRnZXRzL3NpdGUtdXBncmFkZS9wcm9ncmVzcy1iYXIvcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1XLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXJCLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFPdEIsVUFBSyxHQUFXLE1BQU0sQ0FBQztLQVN4QjtJQWZDLElBQWEsUUFBUSxDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxRQUFRLEtBQUssT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUlqQyxRQUFRLENBQUMsQ0FBUztRQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7YUFDakMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO2FBQ3BDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFBRyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQzthQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7O1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0lBQzFDLENBQUM7O2tIQWxCVSxvQkFBb0I7c0dBQXBCLG9CQUFvQixzSENQakMsb1VBTUE7NEZEQ2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQjs4QkFLbkIsV0FBVztzQkFBbkIsS0FBSztnQkFHTyxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcHJvZ3Jlc3MtYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2dyZXNzLWJhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb2dyZXNzLWJhci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQmFyQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaXNBdmFpbGFibGUgPSBmYWxzZTtcblxuICBwcml2YXRlIF9wcm9ncmVzcyA9IDA7XG4gIEBJbnB1dCgpIHNldCBwcm9ncmVzcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcHJvZ3Jlc3MgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE51bWJlcih2YWx1ZSkgfHwgMCkpO1xuICAgIHRoaXMuc2V0Q29sb3IodGhpcy5fcHJvZ3Jlc3MpO1xuICB9XG4gIGdldCBwcm9ncmVzcygpIHsgcmV0dXJuIHRoaXMuX3Byb2dyZXNzOyB9XG5cbiAgY29sb3I6IHN0cmluZyA9ICdncmV5JztcblxuICBwcml2YXRlIHNldENvbG9yKHA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChwIDw9IDIwKSAgICAgICB0aGlzLmNvbG9yID0gJ3JlZCc7XG4gICAgZWxzZSBpZiAocCA8PSA0MCkgIHRoaXMuY29sb3IgPSAneWVsbG93JztcbiAgICBlbHNlIGlmIChwIDw9IDYwKSAgdGhpcy5jb2xvciA9ICdkYXJrYmx1ZSc7XG4gICAgZWxzZSBpZiAocCA8PSA4MCkgIHRoaXMuY29sb3IgPSAnbGlnaHRibHVlJztcbiAgICBlbHNlICAgICAgICAgICAgICAgdGhpcy5jb2xvciA9ICdncmVlbic7XG4gIH1cbn1cbiIsIjwhLS08ZGl2ICpuZ0lmPVwiaXNBdmFpbGFibGVcIiBjbGFzcz1cInByb2dyZXNzLWJhci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cInByb2dyZXNzLWJhciB7e2NvbG9yfX1cIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogcHJvZ3Jlc3MgKyAnJSd9XCI+PC9kaXY+XG48L2Rpdj4tLT5cbjxkaXYgKm5nSWY9XCJpc0F2YWlsYWJsZVwiIGNsYXNzPVwicHJvZ3Jlc3MtYmFyLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW25nQ2xhc3NdPVwiY29sb3JcIiBbc3R5bGUud2lkdGguJV09XCJwcm9ncmVzc1wiPjwvZGl2PlxuPC9kaXY+XG4iXX0=