@openziti/ziti-console-lib 0.12.4 → 0.12.6

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 (59) hide show
  1. package/esm2022/lib/features/progress-meter/progress-meter.component.mjs +44 -0
  2. package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +91 -0
  3. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +4 -2
  4. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +4 -2
  5. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +4 -2
  6. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +19 -19
  7. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +10 -4
  8. package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +3 -2
  9. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +3 -2
  10. package/esm2022/lib/pages/config-types/config-types-page.service.mjs +3 -2
  11. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +3 -2
  12. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +3 -2
  13. package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +3 -2
  14. package/esm2022/lib/pages/identities/identities-page.service.mjs +3 -2
  15. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +3 -2
  16. package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +3 -2
  17. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +3 -2
  18. package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +3 -2
  19. package/esm2022/lib/pages/services/services-page.service.mjs +3 -2
  20. package/esm2022/lib/pages/terminators/terminators-page.service.mjs +3 -2
  21. package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +3 -2
  22. package/esm2022/lib/shared/list-page-service.class.mjs +21 -1
  23. package/esm2022/lib/version.mjs +2 -2
  24. package/esm2022/lib/ziti-console-lib.module.mjs +19 -5
  25. package/esm2022/public-api.mjs +5 -1
  26. package/fesm2022/openziti-ziti-console-lib.mjs +727 -544
  27. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  28. package/lib/features/progress-meter/progress-meter.component.d.ts +19 -0
  29. package/lib/features/progress-meter/progress-meter.component.d.ts.map +1 -0
  30. package/lib/features/progress-wizard/progress-wizard.component.d.ts +31 -0
  31. package/lib/features/progress-wizard/progress-wizard.component.d.ts.map +1 -0
  32. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  33. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
  34. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  35. package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts +1 -0
  36. package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts.map +1 -1
  37. package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +1 -1
  38. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +1 -1
  39. package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -1
  40. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +1 -1
  41. package/lib/pages/config-types/config-types-page.service.d.ts.map +1 -1
  42. package/lib/pages/configurations/configurations-page.service.d.ts.map +1 -1
  43. package/lib/pages/edge-router-policies/edge-router-policies-page.service.d.ts.map +1 -1
  44. package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +1 -1
  45. package/lib/pages/identities/identities-page.service.d.ts.map +1 -1
  46. package/lib/pages/jwt-signers/jwt-signers-page.service.d.ts.map +1 -1
  47. package/lib/pages/posture-checks/posture-checks-page.service.d.ts.map +1 -1
  48. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.d.ts.map +1 -1
  49. package/lib/pages/service-policies/service-policies-page.service.d.ts.map +1 -1
  50. package/lib/pages/services/services-page.service.d.ts.map +1 -1
  51. package/lib/pages/terminators/terminators-page.service.d.ts.map +1 -1
  52. package/lib/pages/transit-routers/transit-routers-page.service.d.ts.map +1 -1
  53. package/lib/shared/list-page-service.class.d.ts +21 -0
  54. package/lib/shared/list-page-service.class.d.ts.map +1 -1
  55. package/lib/ziti-console-lib.module.d.ts +20 -18
  56. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  57. package/package.json +1 -1
  58. package/public-api.d.ts +4 -0
  59. package/public-api.d.ts.map +1 -1
@@ -4,7 +4,7 @@ import * as i4 from '@angular/router';
4
4
  import { NavigationEnd, RouterModule } from '@angular/router';
5
5
  import { Subject, BehaviorSubject, firstValueFrom, tap, map, Subscription } from 'rxjs';
6
6
  import { catchError } from 'rxjs/operators';
7
- import _, { isEmpty, isNumber, includes, isNil, defer, cloneDeep, set, invoke, get, debounce, isNaN as isNaN$1, forEach, isString, isFunction, unset, isBoolean, keys, isEqual, isObject, isArray, forOwn, invert, some, filter, sortedUniq, map as map$1, trim, delay } from 'lodash';
7
+ import _, { isEmpty, isNumber, includes, isNil, defer, cloneDeep, set, invoke, get, debounce, isNaN as isNaN$1, forEach, isString, isFunction, unset, isBoolean, keys, isEqual, isObject, isArray, forOwn, invert, some, filter, sortBy, sortedUniq, map as map$1, trim, delay } from 'lodash';
8
8
  import * as i1$1 from '@angular/common/http';
9
9
  import { HttpClient, HttpParams, HttpClientModule, HttpHeaders } from '@angular/common/http';
10
10
  import * as i1 from 'ngx-logger';
@@ -2777,387 +2777,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2777
2777
  }]
2778
2778
  }], ctorParameters: function () { return [{ type: LoggerService }, { type: GrowlerService }, { type: SettingsServiceClass }, { type: i1$1.HttpClient }, { type: i4.Router }]; } });
2779
2779
 
2780
- /*
2781
- Copyright NetFoundry Inc.
2782
-
2783
- Licensed under the Apache License, Version 2.0 (the "License");
2784
- you may not use this file except in compliance with the License.
2785
- You may obtain a copy of the License at
2786
-
2787
- https://www.apache.org/licenses/LICENSE-2.0
2788
-
2789
- Unless required by applicable law or agreed to in writing, software
2790
- distributed under the License is distributed on an "AS IS" BASIS,
2791
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2792
- See the License for the specific language governing permissions and
2793
- limitations under the License.
2794
- */
2795
- let ListPageServiceClass = class ListPageServiceClass {
2796
- constructor(settings, filterService, csvDownloadService, extensionService, router) {
2797
- this.settings = settings;
2798
- this.filterService = filterService;
2799
- this.csvDownloadService = csvDownloadService;
2800
- this.extensionService = extensionService;
2801
- this.router = router;
2802
- this.CSV_COLUMNS = [
2803
- { label: 'Name', path: 'name' },
2804
- { label: 'ID', path: 'id' },
2805
- { label: 'Created At', path: 'createdAt' }
2806
- ];
2807
- this.basePath = '';
2808
- this.headerComponentParams = {
2809
- filterType: 'TEXTINPUT',
2810
- enableSorting: true
2811
- };
2812
- this.DEFAULT_PAGING = {
2813
- filter: "",
2814
- noSearch: false,
2815
- order: "asc",
2816
- page: 1,
2817
- searchOn: "name",
2818
- sort: "name",
2819
- total: 50
2820
- };
2821
- this.totalCount = 0;
2822
- this.menuItems = [];
2823
- this.tableHeaderActions = [];
2824
- this.currentSettings = {};
2825
- this.sideModalOpen = false;
2826
- this.currentSort = {
2827
- sortBy: 'name',
2828
- ordering: 'asc'
2829
- };
2830
- this.nameColumnRenderer = (row) => {
2831
- return `<div class="col cell-name-renderer" data-id="${row?.data?.id}">
2832
- <strong>${row?.data?.name}</strong>
2833
- </div>`;
2834
- };
2835
- this.rolesRenderer = (row) => {
2836
- const colId = row.column.colId;
2837
- let roles = '';
2838
- if (row?.data?.[colId + 'Display']) {
2839
- row?.data?.[colId + 'Display'].forEach((attr) => {
2840
- const className = attr?.name?.indexOf('@') === 0 ? 'attag' : 'hashtag';
2841
- roles += `<div>
2842
- <div class="${className}">${attr.name}</div>
2843
- <div class="tag-name">${attr.name}</div>
2844
- </div>`;
2845
- });
2846
- }
2847
- else {
2848
- row?.data?.[colId]?.forEach((attr) => {
2849
- const className = attr.indexOf('@') === 0 ? 'attag' : 'hashtag';
2850
- roles += `<div>
2851
- <div class="${className}">${attr}</div>
2852
- <div class="tag-name">${attr}</div>
2853
- </div>`;
2854
- });
2855
- }
2856
- return roles;
2857
- };
2858
- this.createdAtFormatter = (row) => {
2859
- return moment(row?.data?.createdAt).local().format('M/D/YYYY HH:mm A');
2860
- };
2861
- this.dataService = inject(ZITI_DATA_SERVICE);
2862
- this.settings.settingsChange.subscribe((settings) => {
2863
- if (!isEmpty(this.settings?.settings?.session?.id) || this.dataService.dataServiceType === ZitiDataService.NODE_DATA_SERVICE_TYPE) {
2864
- if ((this.currentSettings?.session?.id !== settings?.session?.id || this.dataService.dataServiceType === ZitiDataService.NODE_DATA_SERVICE_TYPE) && this.refreshData) {
2865
- this.refreshData();
2866
- }
2867
- }
2868
- this.currentSettings = settings;
2869
- });
2870
- router.events.subscribe((event) => {
2871
- if (event => event instanceof NavigationEnd) {
2872
- if (!event?.snapshot?.routeConfig?.path) {
2873
- return;
2874
- }
2875
- const pathSegments = event.snapshot.routeConfig.path.split('/');
2876
- this.basePath = pathSegments[0];
2877
- }
2878
- });
2879
- }
2880
- initMenuActions() {
2881
- if (this.extensionService.listActions) {
2882
- this.menuItems = this.menuItems.map((item) => {
2883
- this.extensionService.listActions.forEach((extItem) => {
2884
- if (item.action === extItem.action) {
2885
- item = extItem;
2886
- }
2887
- });
2888
- return item;
2889
- });
2890
- let filteredActions = this.extensionService.listActions.filter((extItem) => {
2891
- return !this.menuItems.some((item) => {
2892
- return item.action === extItem.action;
2893
- });
2894
- });
2895
- this.menuItems = [...this.menuItems, ...filteredActions];
2896
- }
2897
- }
2898
- addListItemExtensionActions(row) {
2899
- if (this.extensionService.listActions) {
2900
- const keys = this.extensionService.listActions.map((action) => {
2901
- return action.action;
2902
- });
2903
- row.actionList = [...row.actionList, ...keys];
2904
- }
2905
- }
2906
- downloadItems(selectedItems) {
2907
- this.csvDownloadService.download(this.resourceType, selectedItems, this.CSV_COLUMNS, false, false, undefined, false);
2908
- }
2909
- downloadAllItems() {
2910
- const paging = cloneDeep(this.DEFAULT_PAGING);
2911
- paging.total = -1;
2912
- return this.getTableData(this.resourceType, paging, undefined, undefined)
2913
- .then((results) => {
2914
- return this.downloadItems(results?.data);
2915
- });
2916
- }
2917
- getTableData(resourceType, paging, filters, sort) {
2918
- if (!paging) {
2919
- paging = { ...this.DEFAULT_PAGING };
2920
- }
2921
- if (sort) {
2922
- paging.sort = sort.sortBy;
2923
- paging.order = sort.ordering;
2924
- }
2925
- for (let idx = 0; idx < filters?.length; idx++) {
2926
- paging.noSearch = false;
2927
- paging.searchOn = filters[idx].columnId;
2928
- paging.filter = filters[idx].value;
2929
- paging.rawFilter = true;
2930
- }
2931
- this.filterService.filtering.next(true);
2932
- return this.dataService.get(resourceType, paging, filters).finally(() => {
2933
- this.filterService.filtering.next(false);
2934
- });
2935
- }
2936
- checkForAssociatedEntities(items, type, associatedType) {
2937
- const itemsWithAssociations = [];
2938
- const promises = [];
2939
- items.forEach((config) => {
2940
- const prom = this.dataService.getSubdata(type, config.id, associatedType).then((result) => {
2941
- const services = result.data || [];
2942
- if (services.length > 0) {
2943
- itemsWithAssociations.push(config);
2944
- }
2945
- });
2946
- promises.push(prom);
2947
- });
2948
- return Promise.all(promises).then(() => {
2949
- return itemsWithAssociations;
2950
- });
2951
- }
2952
- removeItems(ids) {
2953
- const promises = [];
2954
- ids.forEach((id) => {
2955
- const prom = this.dataService.delete(this.resourceType, id);
2956
- promises.push(prom);
2957
- });
2958
- return Promise.all(promises);
2959
- }
2960
- sort(sortBy, ordering = 'asc') {
2961
- this.currentSort = { sortBy, ordering };
2962
- if (this.refreshData)
2963
- this.refreshData({ sortBy, ordering });
2964
- }
2965
- hasSelectedText() {
2966
- let text = '';
2967
- if (window.getSelection) {
2968
- text = window.getSelection().toString();
2969
- }
2970
- return text?.length > 0;
2971
- }
2972
- getNetworkJwt() {
2973
- return this.dataService.get('network-jwts', {}, []);
2974
- }
2975
- openEditForm(itemId = '', basePath) {
2976
- if (isEmpty(itemId)) {
2977
- itemId = 'create';
2978
- }
2979
- basePath = basePath ? basePath : this.basePath;
2980
- this.router?.navigateByUrl(`${basePath}/${itemId}`);
2981
- }
2982
- remToPx(remValue) {
2983
- const rootFontSize = parseFloat(window.getComputedStyle(document.documentElement).fontSize);
2984
- return remValue * rootFontSize;
2985
- }
2986
- ;
2987
- };
2988
- ListPageServiceClass = __decorate([
2989
- __param(0, Inject(SETTINGS_SERVICE)),
2990
- __param(3, Inject(SHAREDZ_EXTENSION))
2991
- ], ListPageServiceClass);
2992
-
2993
- class ListPageComponent {
2994
- constructor(filterService, svc, consoleEvents, dialogForm, extensionService) {
2995
- this.filterService = filterService;
2996
- this.svc = svc;
2997
- this.consoleEvents = consoleEvents;
2998
- this.dialogForm = dialogForm;
2999
- this.extensionService = extensionService;
3000
- this.startCount = '-';
3001
- this.endCount = '-';
3002
- this.totalCount = '-';
3003
- this.itemsSelected = false;
3004
- this.selectedItems = [];
3005
- this.columnDefs = [];
3006
- this.rowData = [];
3007
- this.reservedNames = [];
3008
- this.filterApplied = false;
3009
- this.modalOpen = false;
3010
- this.gridObj = {};
3011
- this.subscription = new Subscription();
3012
- this.growlerSvc = inject(GrowlerService);
3013
- }
3014
- ngOnInit() {
3015
- this.filterService.currentPage = 1;
3016
- this.svc.sideModalOpen = false;
3017
- this.svc.refreshData = this.refreshData.bind(this);
3018
- this.svc.initMenuActions();
3019
- this.columnDefs = this.svc.initTableColumns();
3020
- this.filterService.clearFilters();
3021
- this.extensionService?.extendOnInit();
3022
- this.subscription.add(this.filterService.filtersChanged.subscribe(filters => {
3023
- this.filterApplied = filters && filters.length > 0;
3024
- this.refreshData();
3025
- }));
3026
- this.filterService.pageChanged.subscribe(page => {
3027
- this.refreshData();
3028
- });
3029
- this.subscription.add(this.consoleEvents.closeSideModal.subscribe((event) => {
3030
- this.closeModal();
3031
- }));
3032
- this.subscription.add(this.consoleEvents.refreshData.subscribe((event) => {
3033
- this.refreshData();
3034
- }));
3035
- this.consoleEvents.enableZACEvents();
3036
- }
3037
- ngOnDestroy() {
3038
- this.subscription.unsubscribe();
3039
- }
3040
- itemToggled(item) {
3041
- this.updateSelectedItems(item);
3042
- }
3043
- updateSelectedItems(toggledItem) {
3044
- let itemSelected = false;
3045
- this.selectedItems = [];
3046
- this.rowData.forEach((item) => {
3047
- const reserved = this.reservedNames?.includes(item.name);
3048
- if (reserved) {
3049
- item.selected = false;
3050
- }
3051
- else if (toggledItem?.id && toggledItem?.id === item?.id) {
3052
- item.selected = toggledItem.selected;
3053
- }
3054
- if (item.selected) {
3055
- itemSelected = true;
3056
- this.selectedItems.push(item);
3057
- }
3058
- });
3059
- this.itemsSelected = itemSelected;
3060
- }
3061
- refreshData(sort, hardRefresh = false) {
3062
- this.isLoading = true;
3063
- sort = sort ? sort : this.svc.currentSort;
3064
- this.svc.getData(this.filterService.filters, sort, this.filterService.currentPage)
3065
- .then((data) => {
3066
- this.rowData = [];
3067
- if (hardRefresh) {
3068
- defer(() => {
3069
- this.rowData = data.data;
3070
- });
3071
- }
3072
- else {
3073
- this.rowData = data.data;
3074
- }
3075
- this.totalCount = data.meta.pagination.totalCount;
3076
- this.startCount = (data.meta.pagination.offset + 1);
3077
- if (this.startCount + data.meta.pagination.limit > this.totalCount) {
3078
- this.endCount = this.totalCount;
3079
- }
3080
- else {
3081
- this.endCount = data.meta.pagination.offset + data.meta.pagination.limit;
3082
- }
3083
- this.updateSelectedItems();
3084
- this.refreshCells();
3085
- }).finally(() => {
3086
- this.isLoading = false;
3087
- });
3088
- }
3089
- downloadAllItems() {
3090
- this.isLoading = true;
3091
- this.svc.downloadAllItems().then(() => {
3092
- const growlerData = new GrowlerModel('success', 'Success', `Download Finished`, `The requested items have been downloaded`);
3093
- this.growlerSvc.show(growlerData);
3094
- }).catch(() => {
3095
- const growlerData = new GrowlerModel('error', 'Error', `Download Failed`, `Failed to retrieve items for download`);
3096
- this.growlerSvc.show(growlerData);
3097
- }).finally(() => {
3098
- this.isLoading = false;
3099
- });
3100
- }
3101
- openBulkDelete(selectedItems, entityTypeLabel = 'item(s)') {
3102
- const selectedIds = selectedItems.map((row) => {
3103
- return row.id;
3104
- });
3105
- const selectedNames = selectedItems.map((item) => {
3106
- return item.name;
3107
- });
3108
- const countLabel = selectedItems.length > 1 ? selectedItems.length : '';
3109
- const data = {
3110
- appendId: 'DeleteServices',
3111
- title: 'Delete',
3112
- message: `Are you sure you would like to delete the following ${countLabel} ${entityTypeLabel}?`,
3113
- bulletList: selectedNames,
3114
- confirmLabel: 'Yes',
3115
- cancelLabel: 'Oops, no get me out of here',
3116
- imageUrl: '../../assets/svgs/Confirm_Trash.svg',
3117
- showCancelLink: true
3118
- };
3119
- this.dialogRef = this.dialogForm.open(ConfirmComponent, {
3120
- data: data,
3121
- autoFocus: false,
3122
- });
3123
- this.dialogRef.afterClosed().subscribe((result) => {
3124
- if (result?.confirmed) {
3125
- this.svc.removeItems(selectedIds).then(() => {
3126
- this.refreshData(this.svc.currentSort);
3127
- });
3128
- }
3129
- });
3130
- }
3131
- handleExtensionActions(event) {
3132
- let extensionFound = false;
3133
- if (this.extensionService?.listActions?.length > 0) {
3134
- this.extensionService?.listActions?.forEach((extAction) => {
3135
- if (extAction?.action === event?.action) {
3136
- extAction.callback(event.item);
3137
- extensionFound = true;
3138
- }
3139
- });
3140
- }
3141
- return extensionFound;
3142
- }
3143
- gridReady(event) {
3144
- this.gridObj = event;
3145
- }
3146
- refreshCells() {
3147
- defer(() => {
3148
- var params = {
3149
- force: true,
3150
- };
3151
- this.gridObj?.api?.refreshCells(params);
3152
- });
3153
- }
3154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
3155
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent }); }
3156
- }
3157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, decorators: [{
3158
- type: Injectable
3159
- }], ctorParameters: function () { return [{ type: DataTableFilterService }, { type: ListPageServiceClass }, { type: ConsoleEventsService }, { type: i5$1.MatDialog }, { type: undefined }]; } });
3160
-
3161
2780
  /*
3162
2781
  Copyright NetFoundry Inc.
3163
2782
 
@@ -3352,157 +2971,557 @@ class TableColumnDefaultComponent {
3352
2971
  this.sortDir = undefined;
3353
2972
  }
3354
2973
  else {
3355
- this.sortDir = _.get(event, 'sortDir');
2974
+ this.sortDir = _.get(event, 'sortDir');
2975
+ }
2976
+ });
2977
+ headerParams.api.addEventListener('columnEverythingChanged', (event) => {
2978
+ _.forEach(event.api?.columnModel?.columnDefs, colDef => {
2979
+ if (this.columnDef.colId === colDef.colId && colDef.headerComponentParams?.filterOptions) {
2980
+ this.updateFilterOptions();
2981
+ }
2982
+ });
2983
+ });
2984
+ }
2985
+ ngAfterViewInit() {
2986
+ if (this.showBubble) {
2987
+ // this.updateStatusClass();
2988
+ }
2989
+ }
2990
+ pin() {
2991
+ this.columnDef.pinColumn(this.columnObj, this.pinned ? false : 'left');
2992
+ this.pinned = !this.pinned;
2993
+ }
2994
+ hide() {
2995
+ this.headerParams.api.zitiHideColumn(this.columnObj, false);
2996
+ }
2997
+ sort(event) {
2998
+ if (!this.columnDef.sortable) {
2999
+ return;
3000
+ }
3001
+ const targetId = _.get(event, 'target.id');
3002
+ if (_.includes([`HeaderStatus_${this.columnDef.colId}`, 'SearchFilter', `HeaderFilterIcon_${this.columnDef.colId}`], targetId)) {
3003
+ return;
3004
+ }
3005
+ if (_.isEmpty(this.sortDir)) {
3006
+ this.sortDir = 'asc';
3007
+ }
3008
+ else if (this.sortDir === 'asc') {
3009
+ this.sortDir = 'desc';
3010
+ }
3011
+ else {
3012
+ this.sortDir = 'asc';
3013
+ }
3014
+ _.set(this.headerParams, 'api.sortDir', this.sortDir);
3015
+ _.set(this.headerParams, 'api.sortDir', this.columnDef.colId);
3016
+ if (this.columnDef.sortColumn) {
3017
+ this.columnDef.sortColumn(this.columnDef.colId, this.sortDir, this.headerParams.api);
3018
+ this.headerParams.api.dispatchEvent({
3019
+ type: 'sortChanged',
3020
+ columnDef: this.columnDef,
3021
+ sortDir: this.sortDir,
3022
+ });
3023
+ }
3024
+ }
3025
+ toggleFilter(event) {
3026
+ this.showFilter = !this.showFilter;
3027
+ if (this.filterType === 'SELECT' || this.filterType === 'COMBO' || this.filterType === 'DATETIME' || this.filterType === 'ATTRIBUTE') {
3028
+ if (this.showFilter) {
3029
+ this.updateFilterOptions();
3030
+ _.invoke(this.headerParams, 'api.openHeaderFilter', event, this.filterOptions, this.filterType, this.columnDef?.colId, this.headerName, this.columnDef?.headerComponentParams);
3031
+ }
3032
+ else {
3033
+ _.invoke(this.headerParams, 'api.closeHeaderFilter', event);
3034
+ }
3035
+ }
3036
+ else if (this.filterType === 'CUSTOM') {
3037
+ if (this.showFilter) {
3038
+ this.updateFilterOptions();
3039
+ _.invoke(this.headerParams, 'column.colDef.headerComponentParams.openHeaderFilter', event, this.filterOptions);
3040
+ }
3041
+ else {
3042
+ _.invoke(this.headerParams, 'column.colDef.headerComponentParams.closeHeaderFilter', event);
3043
+ }
3044
+ }
3045
+ }
3046
+ toggleSecondaryFilter(event) {
3047
+ this.showSecondaryFilter = !this.showSecondaryFilter;
3048
+ if (this.showSecondaryFilter) {
3049
+ const options = [
3050
+ {
3051
+ label: 'Any',
3052
+ columnId: this.onlineStatusFilter,
3053
+ filterName: 'Status',
3054
+ value: undefined,
3055
+ bubbleClass: 'v7OnlineOffline',
3056
+ },
3057
+ {
3058
+ label: 'Online',
3059
+ columnId: this.onlineStatusFilter,
3060
+ filterName: 'Status',
3061
+ value: 'true',
3062
+ bubbleClass: 'v7Online',
3063
+ },
3064
+ {
3065
+ label: 'Offline',
3066
+ columnId: this.onlineStatusFilter,
3067
+ filterName: 'Status',
3068
+ value: 'false',
3069
+ bubbleClass: 'v7Offline',
3070
+ },
3071
+ ];
3072
+ _.invoke(this.headerParams, 'api.openHeaderFilter', event, options);
3073
+ }
3074
+ else {
3075
+ _.invoke(this.headerParams, 'api.closeHeaderFilter', event);
3076
+ }
3077
+ }
3078
+ hideFilter(event) {
3079
+ const targetId = _.get(event, 'target.id');
3080
+ if (_.includes([`HeaderFilterButton_${this.columnDef.colId}`, `HeaderFilterIcon_${this.columnDef.colId}`], targetId)) {
3081
+ return;
3082
+ }
3083
+ else if (targetId === this.columnDef?.colId && this.filterType === 'COMBO') {
3084
+ return;
3085
+ }
3086
+ _.invoke(this.headerParams, 'api.closeHeaderFilter', event);
3087
+ this.comboActive = false;
3088
+ this.showFilter = false;
3089
+ this.showSecondaryFilter = false;
3090
+ }
3091
+ refresh(params) {
3092
+ return true;
3093
+ }
3094
+ openGridMenu() {
3095
+ if (!this._showColumnMenu) {
3096
+ return;
3097
+ }
3098
+ this._showColumnMenu(this.menuButton.nativeElement);
3099
+ }
3100
+ updateFilterOptions() {
3101
+ let options = [];
3102
+ if (this.headerParams.getFilterOptions) {
3103
+ options = this.headerParams.getFilterOptions();
3104
+ }
3105
+ else {
3106
+ options = this.headerParams.filterOptions;
3107
+ }
3108
+ this.filterOptions = _.map(options, (option) => {
3109
+ option.columnId = this.columnDef.colId;
3110
+ option.filterName = this.headerName;
3111
+ option.type = this.filterType;
3112
+ return option;
3113
+ });
3114
+ }
3115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableColumnDefaultComponent, deps: [{ token: DataTableFilterService }], target: i0.ɵɵFactoryTarget.Component }); }
3116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableColumnDefaultComponent, selector: "app-table-column-default", viewQueries: [{ propertyName: "menuButton", first: true, predicate: ["menuButton"], descendants: true }], ngImport: i0, template: "<div\n (click)=\"sort($event)\"\n [ngClass]=\"{ 'nf-can-sort': enableSorting }\"\n class=\"ag-cell-label-container ag-header-cell-sorted-none\"\n id=\"TableHeaderContainer_{{ columnDef.colId }}\"\n>\n <span\n #menuButton\n (click)=\"openGridMenu()\"\n *ngIf=\"false\"\n class=\"ag-header-icon ag-header-cell-menu-button\"\n id=\"HeaderMenu_{{ columnDef.colId }}\"\n ref=\"eMenu\"\n >\n <span class=\"ag-icon ag-icon-menu\" unselectable=\"on\"></span>\n </span>\n <span\n (click)=\"pin()\"\n class=\"ag-header-icon ag-header-col-pin-button\"\n id=\"HeaderPin_{{ columnDef.colId }}\"\n title=\"{{ pinned ? 'Unpin Column' : 'Pin Column' }}\"\n >\n <span class=\"ag-icon ag-icon-pin\"></span>\n </span>\n <span\n (click)=\"hide()\"\n class=\"ag-header-icon ag-header-col-hide-button\"\n id=\"HeaderHide_{{ columnDef.colId }}\"\n title=\"Hide Column\"\n >\n <span class=\"ag-icon ag-icon-eye-slash\"></span>\n </span>\n <div class=\"ag-header-cell-label\" ref=\"eLabel\" unselectable=\"on\">\n <span\n *ngIf=\"!headerParams.filterType\"\n [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n class=\"ag-header-icon ag-header-col-filter-button\"\n id=\"HeaderFilterSpacer_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterSpace_{{ columnDef.colId }}\" style=\"opacity: 0\"></span>\n </span>\n <span\n (click)=\"toggleFilter($event)\"\n *ngIf=\"headerParams.filterType\"\n [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n class=\"ag-header-icon ag-header-col-filter-button\"\n id=\"HeaderFilterButton_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterIcon_{{ columnDef.colId }}\"></span>\n </span>\n <div\n (clickOutside)=\"hideFilter($event)\"\n [ngClass]=\"{ 'show-input-filter': showFilter }\"\n class=\"header-text-container text-input-filter\"\n >\n <span\n (click)=\"toggleSecondaryFilter($event)\"\n *ngIf=\"showBubble\"\n [ngClass]=\"statusClass\"\n class=\"bubble\"\n id=\"HeaderStatus_{{ columnDef.colId }}\"\n >\n <svg *ngIf=\"showLoader\" class=\"circular\" viewBox=\"25 25 50 50\">\n <circle\n class=\"path\"\n cx=\"50\"\n cy=\"50\"\n fill=\"none\"\n r=\"20\"\n stroke-miterlimit=\"10\"\n stroke-width=\"3\"\n ></circle>\n </svg>\n </span>\n <app-table-column-filter\n *ngIf=\"((showFilter || comboActive) && !(filterType === 'COMBO' && !comboActive)) && filterType !== 'SELECT' && filterType !== 'CUSTOM'\"\n [columnDef]=\"columnDef\"\n [filterName]=\"headerName\"\n [filterString]=\"''\"\n [openStatusMenu]=\"toggleSecondaryFilter.bind(this)\"\n [type]=\"filterType\"\n ></app-table-column-filter>\n <span\n *ngIf=\"((!showFilter && !comboActive) || (filterType === 'COMBO' && !comboActive)) || filterType === 'SELECT' || filterType === 'CUSTOM'\"\n [title]=\"headerName\"\n class=\"ag-header-cell-text\"\n id=\"HeaderName_{{ columnDef.colId }}\"\n unselectable=\"on\"\n >{{ headerName }}</span\n >\n </div>\n <span\n *ngIf=\"enableSorting && !showFilter\"\n [ngClass]=\"{ 'ag-hidden': sortDir !== 'desc' }\"\n class=\"ag-header-icon ag-header-label-icon ag-sort-ascending-icon\"\n id=\"HeaderSortAsc_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-asc\" unselectable=\"on\"></span>\n </span>\n <span\n *ngIf=\"enableSorting && !showFilter\"\n [ngClass]=\"{ 'ag-hidden': sortDir !== 'asc' }\"\n class=\"ag-header-icon ag-header-label-icon ag-sort-descending-icon\"\n id=\"HeaderSortDesc_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-desc\" unselectable=\"on\"></span>\n </span>\n </div>\n</div>\n", styles: [".ag-header-sort-click-space{display:flex;height:100%;position:relative;width:100%}.ag-header-col-filter-button.ag-filter-applied{opacity:1!important}.Online,.v7Online,.v7Offline{margin-right:.5rem!important;height:.875rem!important;width:.875rem!important}.Online:hover,.v7Online:hover,.v7Offline:hover{border-color:var(--primaryColor)!important;border-style:solid;border-width:var(--inputBorderWidth);height:.625rem!important;width:.625rem!important}.header-text-container{white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.text-input-filter{display:flex;flex-direction:row;align-items:center}.text-input-filter .bubble{margin-top:.5rem;margin-left:.0625rem;margin-right:.5rem;width:.875rem;height:.875rem;flex-shrink:0}.ag-header-col-filter-button{margin-top:.5rem}.ag-header-cell-text{margin-top:.125rem;width:100%}.ag-header-cell-label .ag-sort-descending-icon{margin-top:1.25rem!important}.show-input-filter{width:100%}.filterButton{background-image:none}.filterButton .options{position:fixed}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { kind: "component", type: TableColumnFilterComponent, selector: "app-table-column-filter", inputs: ["type", "filterString", "filterName", "columnDef", "openStatusMenu", "dateFilter"] }] }); }
3117
+ }
3118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableColumnDefaultComponent, decorators: [{
3119
+ type: Component,
3120
+ args: [{ selector: 'app-table-column-default', template: "<div\n (click)=\"sort($event)\"\n [ngClass]=\"{ 'nf-can-sort': enableSorting }\"\n class=\"ag-cell-label-container ag-header-cell-sorted-none\"\n id=\"TableHeaderContainer_{{ columnDef.colId }}\"\n>\n <span\n #menuButton\n (click)=\"openGridMenu()\"\n *ngIf=\"false\"\n class=\"ag-header-icon ag-header-cell-menu-button\"\n id=\"HeaderMenu_{{ columnDef.colId }}\"\n ref=\"eMenu\"\n >\n <span class=\"ag-icon ag-icon-menu\" unselectable=\"on\"></span>\n </span>\n <span\n (click)=\"pin()\"\n class=\"ag-header-icon ag-header-col-pin-button\"\n id=\"HeaderPin_{{ columnDef.colId }}\"\n title=\"{{ pinned ? 'Unpin Column' : 'Pin Column' }}\"\n >\n <span class=\"ag-icon ag-icon-pin\"></span>\n </span>\n <span\n (click)=\"hide()\"\n class=\"ag-header-icon ag-header-col-hide-button\"\n id=\"HeaderHide_{{ columnDef.colId }}\"\n title=\"Hide Column\"\n >\n <span class=\"ag-icon ag-icon-eye-slash\"></span>\n </span>\n <div class=\"ag-header-cell-label\" ref=\"eLabel\" unselectable=\"on\">\n <span\n *ngIf=\"!headerParams.filterType\"\n [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n class=\"ag-header-icon ag-header-col-filter-button\"\n id=\"HeaderFilterSpacer_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterSpace_{{ columnDef.colId }}\" style=\"opacity: 0\"></span>\n </span>\n <span\n (click)=\"toggleFilter($event)\"\n *ngIf=\"headerParams.filterType\"\n [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n class=\"ag-header-icon ag-header-col-filter-button\"\n id=\"HeaderFilterButton_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterIcon_{{ columnDef.colId }}\"></span>\n </span>\n <div\n (clickOutside)=\"hideFilter($event)\"\n [ngClass]=\"{ 'show-input-filter': showFilter }\"\n class=\"header-text-container text-input-filter\"\n >\n <span\n (click)=\"toggleSecondaryFilter($event)\"\n *ngIf=\"showBubble\"\n [ngClass]=\"statusClass\"\n class=\"bubble\"\n id=\"HeaderStatus_{{ columnDef.colId }}\"\n >\n <svg *ngIf=\"showLoader\" class=\"circular\" viewBox=\"25 25 50 50\">\n <circle\n class=\"path\"\n cx=\"50\"\n cy=\"50\"\n fill=\"none\"\n r=\"20\"\n stroke-miterlimit=\"10\"\n stroke-width=\"3\"\n ></circle>\n </svg>\n </span>\n <app-table-column-filter\n *ngIf=\"((showFilter || comboActive) && !(filterType === 'COMBO' && !comboActive)) && filterType !== 'SELECT' && filterType !== 'CUSTOM'\"\n [columnDef]=\"columnDef\"\n [filterName]=\"headerName\"\n [filterString]=\"''\"\n [openStatusMenu]=\"toggleSecondaryFilter.bind(this)\"\n [type]=\"filterType\"\n ></app-table-column-filter>\n <span\n *ngIf=\"((!showFilter && !comboActive) || (filterType === 'COMBO' && !comboActive)) || filterType === 'SELECT' || filterType === 'CUSTOM'\"\n [title]=\"headerName\"\n class=\"ag-header-cell-text\"\n id=\"HeaderName_{{ columnDef.colId }}\"\n unselectable=\"on\"\n >{{ headerName }}</span\n >\n </div>\n <span\n *ngIf=\"enableSorting && !showFilter\"\n [ngClass]=\"{ 'ag-hidden': sortDir !== 'desc' }\"\n class=\"ag-header-icon ag-header-label-icon ag-sort-ascending-icon\"\n id=\"HeaderSortAsc_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-asc\" unselectable=\"on\"></span>\n </span>\n <span\n *ngIf=\"enableSorting && !showFilter\"\n [ngClass]=\"{ 'ag-hidden': sortDir !== 'asc' }\"\n class=\"ag-header-icon ag-header-label-icon ag-sort-descending-icon\"\n id=\"HeaderSortDesc_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-desc\" unselectable=\"on\"></span>\n </span>\n </div>\n</div>\n", styles: [".ag-header-sort-click-space{display:flex;height:100%;position:relative;width:100%}.ag-header-col-filter-button.ag-filter-applied{opacity:1!important}.Online,.v7Online,.v7Offline{margin-right:.5rem!important;height:.875rem!important;width:.875rem!important}.Online:hover,.v7Online:hover,.v7Offline:hover{border-color:var(--primaryColor)!important;border-style:solid;border-width:var(--inputBorderWidth);height:.625rem!important;width:.625rem!important}.header-text-container{white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.text-input-filter{display:flex;flex-direction:row;align-items:center}.text-input-filter .bubble{margin-top:.5rem;margin-left:.0625rem;margin-right:.5rem;width:.875rem;height:.875rem;flex-shrink:0}.ag-header-col-filter-button{margin-top:.5rem}.ag-header-cell-text{margin-top:.125rem;width:100%}.ag-header-cell-label .ag-sort-descending-icon{margin-top:1.25rem!important}.show-input-filter{width:100%}.filterButton{background-image:none}.filterButton .options{position:fixed}\n"] }]
3121
+ }], ctorParameters: function () { return [{ type: DataTableFilterService }]; }, propDecorators: { menuButton: [{
3122
+ type: ViewChild,
3123
+ args: ['menuButton']
3124
+ }] } });
3125
+
3126
+ /*
3127
+ Copyright NetFoundry Inc.
3128
+
3129
+ Licensed under the Apache License, Version 2.0 (the "License");
3130
+ you may not use this file except in compliance with the License.
3131
+ You may obtain a copy of the License at
3132
+
3133
+ https://www.apache.org/licenses/LICENSE-2.0
3134
+
3135
+ Unless required by applicable law or agreed to in writing, software
3136
+ distributed under the License is distributed on an "AS IS" BASIS,
3137
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3138
+ See the License for the specific language governing permissions and
3139
+ limitations under the License.
3140
+ */
3141
+ let ListPageServiceClass = class ListPageServiceClass {
3142
+ constructor(settings, filterService, csvDownloadService, extensionService, router) {
3143
+ this.settings = settings;
3144
+ this.filterService = filterService;
3145
+ this.csvDownloadService = csvDownloadService;
3146
+ this.extensionService = extensionService;
3147
+ this.router = router;
3148
+ this.CSV_COLUMNS = [
3149
+ { label: 'Name', path: 'name' },
3150
+ { label: 'ID', path: 'id' },
3151
+ { label: 'Created At', path: 'createdAt' }
3152
+ ];
3153
+ this.basePath = '';
3154
+ this.headerComponentParams = {
3155
+ filterType: 'TEXTINPUT',
3156
+ enableSorting: true
3157
+ };
3158
+ this.ID_COLUMN_DEF = {
3159
+ colId: 'id',
3160
+ field: 'id',
3161
+ headerName: 'ID',
3162
+ headerComponent: TableColumnDefaultComponent,
3163
+ headerComponentParams: this.headerComponentParams,
3164
+ cellRendererParams: { pathRoot: this.basePath, showIdentityIcons: true },
3165
+ onCellClicked: (data) => {
3166
+ if (this.hasSelectedText()) {
3167
+ return;
3168
+ }
3169
+ this.openEditForm(data?.data?.id);
3170
+ },
3171
+ resizable: true,
3172
+ cellClass: 'nf-cell-vert-align tCol',
3173
+ sortable: true,
3174
+ filter: true,
3175
+ hide: true,
3176
+ };
3177
+ this.DEFAULT_PAGING = {
3178
+ filter: "",
3179
+ noSearch: false,
3180
+ order: "asc",
3181
+ page: 1,
3182
+ searchOn: "name",
3183
+ sort: "name",
3184
+ total: 50
3185
+ };
3186
+ this.totalCount = 0;
3187
+ this.menuItems = [];
3188
+ this.tableHeaderActions = [];
3189
+ this.currentSettings = {};
3190
+ this.sideModalOpen = false;
3191
+ this.currentSort = {
3192
+ sortBy: 'name',
3193
+ ordering: 'asc'
3194
+ };
3195
+ this.nameColumnRenderer = (row) => {
3196
+ return `<div class="col cell-name-renderer" data-id="${row?.data?.id}">
3197
+ <strong>${row?.data?.name}</strong>
3198
+ </div>`;
3199
+ };
3200
+ this.rolesRenderer = (row) => {
3201
+ const colId = row.column.colId;
3202
+ let roles = '';
3203
+ if (row?.data?.[colId + 'Display']) {
3204
+ row?.data?.[colId + 'Display'].forEach((attr) => {
3205
+ const className = attr?.name?.indexOf('@') === 0 ? 'attag' : 'hashtag';
3206
+ roles += `<div>
3207
+ <div class="${className}">${attr.name}</div>
3208
+ <div class="tag-name">${attr.name}</div>
3209
+ </div>`;
3210
+ });
3211
+ }
3212
+ else {
3213
+ row?.data?.[colId]?.forEach((attr) => {
3214
+ const className = attr.indexOf('@') === 0 ? 'attag' : 'hashtag';
3215
+ roles += `<div>
3216
+ <div class="${className}">${attr}</div>
3217
+ <div class="tag-name">${attr}</div>
3218
+ </div>`;
3219
+ });
3220
+ }
3221
+ return roles;
3222
+ };
3223
+ this.createdAtFormatter = (row) => {
3224
+ return moment(row?.data?.createdAt).local().format('M/D/YYYY HH:mm A');
3225
+ };
3226
+ this.dataService = inject(ZITI_DATA_SERVICE);
3227
+ this.settings.settingsChange.subscribe((settings) => {
3228
+ if (!isEmpty(this.settings?.settings?.session?.id) || this.dataService.dataServiceType === ZitiDataService.NODE_DATA_SERVICE_TYPE) {
3229
+ if ((this.currentSettings?.session?.id !== settings?.session?.id || this.dataService.dataServiceType === ZitiDataService.NODE_DATA_SERVICE_TYPE) && this.refreshData) {
3230
+ this.refreshData();
3231
+ }
3356
3232
  }
3233
+ this.currentSettings = settings;
3357
3234
  });
3358
- headerParams.api.addEventListener('columnEverythingChanged', (event) => {
3359
- _.forEach(event.api?.columnModel?.columnDefs, colDef => {
3360
- if (this.columnDef.colId === colDef.colId && colDef.headerComponentParams?.filterOptions) {
3361
- this.updateFilterOptions();
3235
+ router.events.subscribe((event) => {
3236
+ if (event => event instanceof NavigationEnd) {
3237
+ if (!event?.snapshot?.routeConfig?.path) {
3238
+ return;
3362
3239
  }
3363
- });
3240
+ const pathSegments = event.snapshot.routeConfig.path.split('/');
3241
+ this.basePath = pathSegments[0];
3242
+ }
3364
3243
  });
3365
3244
  }
3366
- ngAfterViewInit() {
3367
- if (this.showBubble) {
3368
- // this.updateStatusClass();
3245
+ initMenuActions() {
3246
+ if (this.extensionService.listActions) {
3247
+ this.menuItems = this.menuItems.map((item) => {
3248
+ this.extensionService.listActions.forEach((extItem) => {
3249
+ if (item.action === extItem.action) {
3250
+ item = extItem;
3251
+ }
3252
+ });
3253
+ return item;
3254
+ });
3255
+ let filteredActions = this.extensionService.listActions.filter((extItem) => {
3256
+ return !this.menuItems.some((item) => {
3257
+ return item.action === extItem.action;
3258
+ });
3259
+ });
3260
+ this.menuItems = [...this.menuItems, ...filteredActions];
3369
3261
  }
3370
3262
  }
3371
- pin() {
3372
- this.columnDef.pinColumn(this.columnObj, this.pinned ? false : 'left');
3373
- this.pinned = !this.pinned;
3263
+ addListItemExtensionActions(row) {
3264
+ if (this.extensionService.listActions) {
3265
+ const keys = this.extensionService.listActions.map((action) => {
3266
+ return action.action;
3267
+ });
3268
+ row.actionList = [...row.actionList, ...keys];
3269
+ }
3374
3270
  }
3375
- hide() {
3376
- this.headerParams.api.zitiHideColumn(this.columnObj, false);
3271
+ downloadItems(selectedItems) {
3272
+ this.csvDownloadService.download(this.resourceType, selectedItems, this.CSV_COLUMNS, false, false, undefined, false);
3377
3273
  }
3378
- sort(event) {
3379
- if (!this.columnDef.sortable) {
3380
- return;
3381
- }
3382
- const targetId = _.get(event, 'target.id');
3383
- if (_.includes([`HeaderStatus_${this.columnDef.colId}`, 'SearchFilter', `HeaderFilterIcon_${this.columnDef.colId}`], targetId)) {
3384
- return;
3385
- }
3386
- if (_.isEmpty(this.sortDir)) {
3387
- this.sortDir = 'asc';
3274
+ downloadAllItems() {
3275
+ const paging = cloneDeep(this.DEFAULT_PAGING);
3276
+ paging.total = -1;
3277
+ return this.getTableData(this.resourceType, paging, undefined, undefined)
3278
+ .then((results) => {
3279
+ return this.downloadItems(results?.data);
3280
+ });
3281
+ }
3282
+ getTableData(resourceType, paging, filters, sort) {
3283
+ if (!paging) {
3284
+ paging = { ...this.DEFAULT_PAGING };
3388
3285
  }
3389
- else if (this.sortDir === 'asc') {
3390
- this.sortDir = 'desc';
3286
+ if (sort) {
3287
+ paging.sort = sort.sortBy;
3288
+ paging.order = sort.ordering;
3391
3289
  }
3392
- else {
3393
- this.sortDir = 'asc';
3290
+ for (let idx = 0; idx < filters?.length; idx++) {
3291
+ paging.noSearch = false;
3292
+ paging.searchOn = filters[idx].columnId;
3293
+ paging.filter = filters[idx].value;
3294
+ paging.rawFilter = true;
3394
3295
  }
3395
- _.set(this.headerParams, 'api.sortDir', this.sortDir);
3396
- _.set(this.headerParams, 'api.sortDir', this.columnDef.colId);
3397
- if (this.columnDef.sortColumn) {
3398
- this.columnDef.sortColumn(this.columnDef.colId, this.sortDir, this.headerParams.api);
3399
- this.headerParams.api.dispatchEvent({
3400
- type: 'sortChanged',
3401
- columnDef: this.columnDef,
3402
- sortDir: this.sortDir,
3296
+ this.filterService.filtering.next(true);
3297
+ return this.dataService.get(resourceType, paging, filters).finally(() => {
3298
+ this.filterService.filtering.next(false);
3299
+ });
3300
+ }
3301
+ checkForAssociatedEntities(items, type, associatedType) {
3302
+ const itemsWithAssociations = [];
3303
+ const promises = [];
3304
+ items.forEach((config) => {
3305
+ const prom = this.dataService.getSubdata(type, config.id, associatedType).then((result) => {
3306
+ const services = result.data || [];
3307
+ if (services.length > 0) {
3308
+ itemsWithAssociations.push(config);
3309
+ }
3403
3310
  });
3311
+ promises.push(prom);
3312
+ });
3313
+ return Promise.all(promises).then(() => {
3314
+ return itemsWithAssociations;
3315
+ });
3316
+ }
3317
+ removeItems(ids) {
3318
+ const promises = [];
3319
+ ids.forEach((id) => {
3320
+ const prom = this.dataService.delete(this.resourceType, id);
3321
+ promises.push(prom);
3322
+ });
3323
+ return Promise.all(promises);
3324
+ }
3325
+ sort(sortBy, ordering = 'asc') {
3326
+ this.currentSort = { sortBy, ordering };
3327
+ if (this.refreshData)
3328
+ this.refreshData({ sortBy, ordering });
3329
+ }
3330
+ hasSelectedText() {
3331
+ let text = '';
3332
+ if (window.getSelection) {
3333
+ text = window.getSelection().toString();
3404
3334
  }
3335
+ return text?.length > 0;
3405
3336
  }
3406
- toggleFilter(event) {
3407
- this.showFilter = !this.showFilter;
3408
- if (this.filterType === 'SELECT' || this.filterType === 'COMBO' || this.filterType === 'DATETIME' || this.filterType === 'ATTRIBUTE') {
3409
- if (this.showFilter) {
3410
- this.updateFilterOptions();
3411
- _.invoke(this.headerParams, 'api.openHeaderFilter', event, this.filterOptions, this.filterType, this.columnDef?.colId, this.headerName, this.columnDef?.headerComponentParams);
3337
+ getNetworkJwt() {
3338
+ return this.dataService.get('network-jwts', {}, []);
3339
+ }
3340
+ openEditForm(itemId = '', basePath) {
3341
+ if (isEmpty(itemId)) {
3342
+ itemId = 'create';
3343
+ }
3344
+ basePath = basePath ? basePath : this.basePath;
3345
+ this.router?.navigateByUrl(`${basePath}/${itemId}`);
3346
+ }
3347
+ remToPx(remValue) {
3348
+ const rootFontSize = parseFloat(window.getComputedStyle(document.documentElement).fontSize);
3349
+ return remValue * rootFontSize;
3350
+ }
3351
+ ;
3352
+ };
3353
+ ListPageServiceClass = __decorate([
3354
+ __param(0, Inject(SETTINGS_SERVICE)),
3355
+ __param(3, Inject(SHAREDZ_EXTENSION))
3356
+ ], ListPageServiceClass);
3357
+
3358
+ class ListPageComponent {
3359
+ constructor(filterService, svc, consoleEvents, dialogForm, extensionService) {
3360
+ this.filterService = filterService;
3361
+ this.svc = svc;
3362
+ this.consoleEvents = consoleEvents;
3363
+ this.dialogForm = dialogForm;
3364
+ this.extensionService = extensionService;
3365
+ this.startCount = '-';
3366
+ this.endCount = '-';
3367
+ this.totalCount = '-';
3368
+ this.itemsSelected = false;
3369
+ this.selectedItems = [];
3370
+ this.columnDefs = [];
3371
+ this.rowData = [];
3372
+ this.reservedNames = [];
3373
+ this.filterApplied = false;
3374
+ this.modalOpen = false;
3375
+ this.gridObj = {};
3376
+ this.subscription = new Subscription();
3377
+ this.growlerSvc = inject(GrowlerService);
3378
+ }
3379
+ ngOnInit() {
3380
+ this.filterService.currentPage = 1;
3381
+ this.svc.sideModalOpen = false;
3382
+ this.svc.refreshData = this.refreshData.bind(this);
3383
+ this.svc.initMenuActions();
3384
+ this.columnDefs = this.svc.initTableColumns();
3385
+ this.filterService.clearFilters();
3386
+ this.extensionService?.extendOnInit();
3387
+ this.subscription.add(this.filterService.filtersChanged.subscribe(filters => {
3388
+ this.filterApplied = filters && filters.length > 0;
3389
+ this.refreshData();
3390
+ }));
3391
+ this.filterService.pageChanged.subscribe(page => {
3392
+ this.refreshData();
3393
+ });
3394
+ this.subscription.add(this.consoleEvents.closeSideModal.subscribe((event) => {
3395
+ this.closeModal();
3396
+ }));
3397
+ this.subscription.add(this.consoleEvents.refreshData.subscribe((event) => {
3398
+ this.refreshData();
3399
+ }));
3400
+ this.consoleEvents.enableZACEvents();
3401
+ }
3402
+ ngOnDestroy() {
3403
+ this.subscription.unsubscribe();
3404
+ }
3405
+ itemToggled(item) {
3406
+ this.updateSelectedItems(item);
3407
+ }
3408
+ updateSelectedItems(toggledItem) {
3409
+ let itemSelected = false;
3410
+ this.selectedItems = [];
3411
+ this.rowData.forEach((item) => {
3412
+ const reserved = this.reservedNames?.includes(item.name);
3413
+ if (reserved) {
3414
+ item.selected = false;
3415
+ }
3416
+ else if (toggledItem?.id && toggledItem?.id === item?.id) {
3417
+ item.selected = toggledItem.selected;
3418
+ }
3419
+ if (item.selected) {
3420
+ itemSelected = true;
3421
+ this.selectedItems.push(item);
3422
+ }
3423
+ });
3424
+ this.itemsSelected = itemSelected;
3425
+ }
3426
+ refreshData(sort, hardRefresh = false) {
3427
+ this.isLoading = true;
3428
+ sort = sort ? sort : this.svc.currentSort;
3429
+ this.svc.getData(this.filterService.filters, sort, this.filterService.currentPage)
3430
+ .then((data) => {
3431
+ this.rowData = [];
3432
+ if (hardRefresh) {
3433
+ defer(() => {
3434
+ this.rowData = data.data;
3435
+ });
3412
3436
  }
3413
3437
  else {
3414
- _.invoke(this.headerParams, 'api.closeHeaderFilter', event);
3438
+ this.rowData = data.data;
3415
3439
  }
3416
- }
3417
- else if (this.filterType === 'CUSTOM') {
3418
- if (this.showFilter) {
3419
- this.updateFilterOptions();
3420
- _.invoke(this.headerParams, 'column.colDef.headerComponentParams.openHeaderFilter', event, this.filterOptions);
3440
+ this.totalCount = data.meta.pagination.totalCount;
3441
+ this.startCount = (data.meta.pagination.offset + 1);
3442
+ if (this.startCount + data.meta.pagination.limit > this.totalCount) {
3443
+ this.endCount = this.totalCount;
3421
3444
  }
3422
3445
  else {
3423
- _.invoke(this.headerParams, 'column.colDef.headerComponentParams.closeHeaderFilter', event);
3446
+ this.endCount = data.meta.pagination.offset + data.meta.pagination.limit;
3424
3447
  }
3425
- }
3426
- }
3427
- toggleSecondaryFilter(event) {
3428
- this.showSecondaryFilter = !this.showSecondaryFilter;
3429
- if (this.showSecondaryFilter) {
3430
- const options = [
3431
- {
3432
- label: 'Any',
3433
- columnId: this.onlineStatusFilter,
3434
- filterName: 'Status',
3435
- value: undefined,
3436
- bubbleClass: 'v7OnlineOffline',
3437
- },
3438
- {
3439
- label: 'Online',
3440
- columnId: this.onlineStatusFilter,
3441
- filterName: 'Status',
3442
- value: 'true',
3443
- bubbleClass: 'v7Online',
3444
- },
3445
- {
3446
- label: 'Offline',
3447
- columnId: this.onlineStatusFilter,
3448
- filterName: 'Status',
3449
- value: 'false',
3450
- bubbleClass: 'v7Offline',
3451
- },
3452
- ];
3453
- _.invoke(this.headerParams, 'api.openHeaderFilter', event, options);
3454
- }
3455
- else {
3456
- _.invoke(this.headerParams, 'api.closeHeaderFilter', event);
3457
- }
3448
+ this.updateSelectedItems();
3449
+ this.refreshCells();
3450
+ }).finally(() => {
3451
+ this.isLoading = false;
3452
+ });
3458
3453
  }
3459
- hideFilter(event) {
3460
- const targetId = _.get(event, 'target.id');
3461
- if (_.includes([`HeaderFilterButton_${this.columnDef.colId}`, `HeaderFilterIcon_${this.columnDef.colId}`], targetId)) {
3462
- return;
3463
- }
3464
- else if (targetId === this.columnDef?.colId && this.filterType === 'COMBO') {
3465
- return;
3466
- }
3467
- _.invoke(this.headerParams, 'api.closeHeaderFilter', event);
3468
- this.comboActive = false;
3469
- this.showFilter = false;
3470
- this.showSecondaryFilter = false;
3454
+ downloadAllItems() {
3455
+ this.isLoading = true;
3456
+ this.svc.downloadAllItems().then(() => {
3457
+ const growlerData = new GrowlerModel('success', 'Success', `Download Finished`, `The requested items have been downloaded`);
3458
+ this.growlerSvc.show(growlerData);
3459
+ }).catch(() => {
3460
+ const growlerData = new GrowlerModel('error', 'Error', `Download Failed`, `Failed to retrieve items for download`);
3461
+ this.growlerSvc.show(growlerData);
3462
+ }).finally(() => {
3463
+ this.isLoading = false;
3464
+ });
3471
3465
  }
3472
- refresh(params) {
3473
- return true;
3466
+ openBulkDelete(selectedItems, entityTypeLabel = 'item(s)') {
3467
+ const selectedIds = selectedItems.map((row) => {
3468
+ return row.id;
3469
+ });
3470
+ const selectedNames = selectedItems.map((item) => {
3471
+ return item.name;
3472
+ });
3473
+ const countLabel = selectedItems.length > 1 ? selectedItems.length : '';
3474
+ const data = {
3475
+ appendId: 'DeleteServices',
3476
+ title: 'Delete',
3477
+ message: `Are you sure you would like to delete the following ${countLabel} ${entityTypeLabel}?`,
3478
+ bulletList: selectedNames,
3479
+ confirmLabel: 'Yes',
3480
+ cancelLabel: 'Oops, no get me out of here',
3481
+ imageUrl: '../../assets/svgs/Confirm_Trash.svg',
3482
+ showCancelLink: true
3483
+ };
3484
+ this.dialogRef = this.dialogForm.open(ConfirmComponent, {
3485
+ data: data,
3486
+ autoFocus: false,
3487
+ });
3488
+ this.dialogRef.afterClosed().subscribe((result) => {
3489
+ if (result?.confirmed) {
3490
+ this.svc.removeItems(selectedIds).then(() => {
3491
+ this.refreshData(this.svc.currentSort);
3492
+ });
3493
+ }
3494
+ });
3474
3495
  }
3475
- openGridMenu() {
3476
- if (!this._showColumnMenu) {
3477
- return;
3496
+ handleExtensionActions(event) {
3497
+ let extensionFound = false;
3498
+ if (this.extensionService?.listActions?.length > 0) {
3499
+ this.extensionService?.listActions?.forEach((extAction) => {
3500
+ if (extAction?.action === event?.action) {
3501
+ extAction.callback(event.item);
3502
+ extensionFound = true;
3503
+ }
3504
+ });
3478
3505
  }
3479
- this._showColumnMenu(this.menuButton.nativeElement);
3506
+ return extensionFound;
3480
3507
  }
3481
- updateFilterOptions() {
3482
- let options = [];
3483
- if (this.headerParams.getFilterOptions) {
3484
- options = this.headerParams.getFilterOptions();
3485
- }
3486
- else {
3487
- options = this.headerParams.filterOptions;
3488
- }
3489
- this.filterOptions = _.map(options, (option) => {
3490
- option.columnId = this.columnDef.colId;
3491
- option.filterName = this.headerName;
3492
- option.type = this.filterType;
3493
- return option;
3508
+ gridReady(event) {
3509
+ this.gridObj = event;
3510
+ }
3511
+ refreshCells() {
3512
+ defer(() => {
3513
+ var params = {
3514
+ force: true,
3515
+ };
3516
+ this.gridObj?.api?.refreshCells(params);
3494
3517
  });
3495
3518
  }
3496
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableColumnDefaultComponent, deps: [{ token: DataTableFilterService }], target: i0.ɵɵFactoryTarget.Component }); }
3497
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableColumnDefaultComponent, selector: "app-table-column-default", viewQueries: [{ propertyName: "menuButton", first: true, predicate: ["menuButton"], descendants: true }], ngImport: i0, template: "<div\n (click)=\"sort($event)\"\n [ngClass]=\"{ 'nf-can-sort': enableSorting }\"\n class=\"ag-cell-label-container ag-header-cell-sorted-none\"\n id=\"TableHeaderContainer_{{ columnDef.colId }}\"\n>\n <span\n #menuButton\n (click)=\"openGridMenu()\"\n *ngIf=\"false\"\n class=\"ag-header-icon ag-header-cell-menu-button\"\n id=\"HeaderMenu_{{ columnDef.colId }}\"\n ref=\"eMenu\"\n >\n <span class=\"ag-icon ag-icon-menu\" unselectable=\"on\"></span>\n </span>\n <span\n (click)=\"pin()\"\n class=\"ag-header-icon ag-header-col-pin-button\"\n id=\"HeaderPin_{{ columnDef.colId }}\"\n title=\"{{ pinned ? 'Unpin Column' : 'Pin Column' }}\"\n >\n <span class=\"ag-icon ag-icon-pin\"></span>\n </span>\n <span\n (click)=\"hide()\"\n class=\"ag-header-icon ag-header-col-hide-button\"\n id=\"HeaderHide_{{ columnDef.colId }}\"\n title=\"Hide Column\"\n >\n <span class=\"ag-icon ag-icon-eye-slash\"></span>\n </span>\n <div class=\"ag-header-cell-label\" ref=\"eLabel\" unselectable=\"on\">\n <span\n *ngIf=\"!headerParams.filterType\"\n [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n class=\"ag-header-icon ag-header-col-filter-button\"\n id=\"HeaderFilterSpacer_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterSpace_{{ columnDef.colId }}\" style=\"opacity: 0\"></span>\n </span>\n <span\n (click)=\"toggleFilter($event)\"\n *ngIf=\"headerParams.filterType\"\n [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n class=\"ag-header-icon ag-header-col-filter-button\"\n id=\"HeaderFilterButton_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterIcon_{{ columnDef.colId }}\"></span>\n </span>\n <div\n (clickOutside)=\"hideFilter($event)\"\n [ngClass]=\"{ 'show-input-filter': showFilter }\"\n class=\"header-text-container text-input-filter\"\n >\n <span\n (click)=\"toggleSecondaryFilter($event)\"\n *ngIf=\"showBubble\"\n [ngClass]=\"statusClass\"\n class=\"bubble\"\n id=\"HeaderStatus_{{ columnDef.colId }}\"\n >\n <svg *ngIf=\"showLoader\" class=\"circular\" viewBox=\"25 25 50 50\">\n <circle\n class=\"path\"\n cx=\"50\"\n cy=\"50\"\n fill=\"none\"\n r=\"20\"\n stroke-miterlimit=\"10\"\n stroke-width=\"3\"\n ></circle>\n </svg>\n </span>\n <app-table-column-filter\n *ngIf=\"((showFilter || comboActive) && !(filterType === 'COMBO' && !comboActive)) && filterType !== 'SELECT' && filterType !== 'CUSTOM'\"\n [columnDef]=\"columnDef\"\n [filterName]=\"headerName\"\n [filterString]=\"''\"\n [openStatusMenu]=\"toggleSecondaryFilter.bind(this)\"\n [type]=\"filterType\"\n ></app-table-column-filter>\n <span\n *ngIf=\"((!showFilter && !comboActive) || (filterType === 'COMBO' && !comboActive)) || filterType === 'SELECT' || filterType === 'CUSTOM'\"\n [title]=\"headerName\"\n class=\"ag-header-cell-text\"\n id=\"HeaderName_{{ columnDef.colId }}\"\n unselectable=\"on\"\n >{{ headerName }}</span\n >\n </div>\n <span\n *ngIf=\"enableSorting && !showFilter\"\n [ngClass]=\"{ 'ag-hidden': sortDir !== 'desc' }\"\n class=\"ag-header-icon ag-header-label-icon ag-sort-ascending-icon\"\n id=\"HeaderSortAsc_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-asc\" unselectable=\"on\"></span>\n </span>\n <span\n *ngIf=\"enableSorting && !showFilter\"\n [ngClass]=\"{ 'ag-hidden': sortDir !== 'asc' }\"\n class=\"ag-header-icon ag-header-label-icon ag-sort-descending-icon\"\n id=\"HeaderSortDesc_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-desc\" unselectable=\"on\"></span>\n </span>\n </div>\n</div>\n", styles: [".ag-header-sort-click-space{display:flex;height:100%;position:relative;width:100%}.ag-header-col-filter-button.ag-filter-applied{opacity:1!important}.Online,.v7Online,.v7Offline{margin-right:.5rem!important;height:.875rem!important;width:.875rem!important}.Online:hover,.v7Online:hover,.v7Offline:hover{border-color:var(--primaryColor)!important;border-style:solid;border-width:var(--inputBorderWidth);height:.625rem!important;width:.625rem!important}.header-text-container{white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.text-input-filter{display:flex;flex-direction:row;align-items:center}.text-input-filter .bubble{margin-top:.5rem;margin-left:.0625rem;margin-right:.5rem;width:.875rem;height:.875rem;flex-shrink:0}.ag-header-col-filter-button{margin-top:.5rem}.ag-header-cell-text{margin-top:.125rem;width:100%}.ag-header-cell-label .ag-sort-descending-icon{margin-top:1.25rem!important}.show-input-filter{width:100%}.filterButton{background-image:none}.filterButton .options{position:fixed}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { kind: "component", type: TableColumnFilterComponent, selector: "app-table-column-filter", inputs: ["type", "filterString", "filterName", "columnDef", "openStatusMenu", "dateFilter"] }] }); }
3519
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
3520
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent }); }
3498
3521
  }
3499
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableColumnDefaultComponent, decorators: [{
3500
- type: Component,
3501
- args: [{ selector: 'app-table-column-default', template: "<div\n (click)=\"sort($event)\"\n [ngClass]=\"{ 'nf-can-sort': enableSorting }\"\n class=\"ag-cell-label-container ag-header-cell-sorted-none\"\n id=\"TableHeaderContainer_{{ columnDef.colId }}\"\n>\n <span\n #menuButton\n (click)=\"openGridMenu()\"\n *ngIf=\"false\"\n class=\"ag-header-icon ag-header-cell-menu-button\"\n id=\"HeaderMenu_{{ columnDef.colId }}\"\n ref=\"eMenu\"\n >\n <span class=\"ag-icon ag-icon-menu\" unselectable=\"on\"></span>\n </span>\n <span\n (click)=\"pin()\"\n class=\"ag-header-icon ag-header-col-pin-button\"\n id=\"HeaderPin_{{ columnDef.colId }}\"\n title=\"{{ pinned ? 'Unpin Column' : 'Pin Column' }}\"\n >\n <span class=\"ag-icon ag-icon-pin\"></span>\n </span>\n <span\n (click)=\"hide()\"\n class=\"ag-header-icon ag-header-col-hide-button\"\n id=\"HeaderHide_{{ columnDef.colId }}\"\n title=\"Hide Column\"\n >\n <span class=\"ag-icon ag-icon-eye-slash\"></span>\n </span>\n <div class=\"ag-header-cell-label\" ref=\"eLabel\" unselectable=\"on\">\n <span\n *ngIf=\"!headerParams.filterType\"\n [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n class=\"ag-header-icon ag-header-col-filter-button\"\n id=\"HeaderFilterSpacer_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterSpace_{{ columnDef.colId }}\" style=\"opacity: 0\"></span>\n </span>\n <span\n (click)=\"toggleFilter($event)\"\n *ngIf=\"headerParams.filterType\"\n [ngClass]=\"{ 'ag-filter-applied': filterApplied }\"\n class=\"ag-header-icon ag-header-col-filter-button\"\n id=\"HeaderFilterButton_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-filter\" id=\"HeaderFilterIcon_{{ columnDef.colId }}\"></span>\n </span>\n <div\n (clickOutside)=\"hideFilter($event)\"\n [ngClass]=\"{ 'show-input-filter': showFilter }\"\n class=\"header-text-container text-input-filter\"\n >\n <span\n (click)=\"toggleSecondaryFilter($event)\"\n *ngIf=\"showBubble\"\n [ngClass]=\"statusClass\"\n class=\"bubble\"\n id=\"HeaderStatus_{{ columnDef.colId }}\"\n >\n <svg *ngIf=\"showLoader\" class=\"circular\" viewBox=\"25 25 50 50\">\n <circle\n class=\"path\"\n cx=\"50\"\n cy=\"50\"\n fill=\"none\"\n r=\"20\"\n stroke-miterlimit=\"10\"\n stroke-width=\"3\"\n ></circle>\n </svg>\n </span>\n <app-table-column-filter\n *ngIf=\"((showFilter || comboActive) && !(filterType === 'COMBO' && !comboActive)) && filterType !== 'SELECT' && filterType !== 'CUSTOM'\"\n [columnDef]=\"columnDef\"\n [filterName]=\"headerName\"\n [filterString]=\"''\"\n [openStatusMenu]=\"toggleSecondaryFilter.bind(this)\"\n [type]=\"filterType\"\n ></app-table-column-filter>\n <span\n *ngIf=\"((!showFilter && !comboActive) || (filterType === 'COMBO' && !comboActive)) || filterType === 'SELECT' || filterType === 'CUSTOM'\"\n [title]=\"headerName\"\n class=\"ag-header-cell-text\"\n id=\"HeaderName_{{ columnDef.colId }}\"\n unselectable=\"on\"\n >{{ headerName }}</span\n >\n </div>\n <span\n *ngIf=\"enableSorting && !showFilter\"\n [ngClass]=\"{ 'ag-hidden': sortDir !== 'desc' }\"\n class=\"ag-header-icon ag-header-label-icon ag-sort-ascending-icon\"\n id=\"HeaderSortAsc_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-asc\" unselectable=\"on\"></span>\n </span>\n <span\n *ngIf=\"enableSorting && !showFilter\"\n [ngClass]=\"{ 'ag-hidden': sortDir !== 'asc' }\"\n class=\"ag-header-icon ag-header-label-icon ag-sort-descending-icon\"\n id=\"HeaderSortDesc_{{ columnDef.colId }}\"\n >\n <span class=\"ag-icon ag-icon-desc\" unselectable=\"on\"></span>\n </span>\n </div>\n</div>\n", styles: [".ag-header-sort-click-space{display:flex;height:100%;position:relative;width:100%}.ag-header-col-filter-button.ag-filter-applied{opacity:1!important}.Online,.v7Online,.v7Offline{margin-right:.5rem!important;height:.875rem!important;width:.875rem!important}.Online:hover,.v7Online:hover,.v7Offline:hover{border-color:var(--primaryColor)!important;border-style:solid;border-width:var(--inputBorderWidth);height:.625rem!important;width:.625rem!important}.header-text-container{white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}.text-input-filter{display:flex;flex-direction:row;align-items:center}.text-input-filter .bubble{margin-top:.5rem;margin-left:.0625rem;margin-right:.5rem;width:.875rem;height:.875rem;flex-shrink:0}.ag-header-col-filter-button{margin-top:.5rem}.ag-header-cell-text{margin-top:.125rem;width:100%}.ag-header-cell-label .ag-sort-descending-icon{margin-top:1.25rem!important}.show-input-filter{width:100%}.filterButton{background-image:none}.filterButton .options{position:fixed}\n"] }]
3502
- }], ctorParameters: function () { return [{ type: DataTableFilterService }]; }, propDecorators: { menuButton: [{
3503
- type: ViewChild,
3504
- args: ['menuButton']
3505
- }] } });
3522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListPageComponent, decorators: [{
3523
+ type: Injectable
3524
+ }], ctorParameters: function () { return [{ type: DataTableFilterService }, { type: ListPageServiceClass }, { type: ConsoleEventsService }, { type: i5$1.MatDialog }, { type: undefined }]; } });
3506
3525
 
3507
3526
  let Service$1 = class Service {
3508
3527
  constructor() {
@@ -4857,7 +4876,8 @@ class ConfigurationsPageService extends ListPageServiceClass {
4857
4876
  valueFormatter: this.createdAtFormatter,
4858
4877
  resizable: true,
4859
4878
  cellClass: 'nf-cell-vert-align tCol',
4860
- }
4879
+ },
4880
+ this.ID_COLUMN_DEF
4861
4881
  ];
4862
4882
  }
4863
4883
  get typeHeaderComponentParams() {
@@ -5874,7 +5894,8 @@ class IdentitiesPageService extends ListPageServiceClass {
5874
5894
  resizable: true,
5875
5895
  cellClass: 'nf-cell-vert-align tCol',
5876
5896
  width: 100,
5877
- }
5897
+ },
5898
+ this.ID_COLUMN_DEF
5878
5899
  ];
5879
5900
  }
5880
5901
  getData(filters, sort, page) {
@@ -6408,7 +6429,8 @@ class EdgeRoutersPageService extends ListPageServiceClass {
6408
6429
  cellRenderer: 'cellTokenComponent',
6409
6430
  resizable: true,
6410
6431
  cellClass: 'nf-cell-vert-align tCol',
6411
- }
6432
+ },
6433
+ this.ID_COLUMN_DEF
6412
6434
  ];
6413
6435
  if (this.extService.processTableColumns) {
6414
6436
  tableColumns = this.extService.processTableColumns(tableColumns);
@@ -9873,8 +9895,14 @@ class IdentityServicePathHelper {
9873
9895
  node.id = ePoint.id;
9874
9896
  node.name = ePoint.name;
9875
9897
  node.type = 'Identity';
9876
- node.apiSession = ePoint.hasApiSession === false ? 'No' : 'Yes';
9877
- node.routerConnection = ePoint.hasEdgeRouterConnection === false ? 'No' : 'Yes';
9898
+ if (_.has(ePoint, 'edgeRouterConnectionStatus')) {
9899
+ node.routerConnection = ePoint.edgeRouterConnectionStatus === 'offline' ? 'No' : 'Yes';
9900
+ node.apiSession = node.routerConnection;
9901
+ }
9902
+ else {
9903
+ node.routerConnection = ePoint['hasEdgeRouterConnection'] === false ? 'No' : 'Yes';
9904
+ node.apiSession = ePoint['hasApiSession'] === false ? 'No' : 'Yes';
9905
+ }
9878
9906
  node.os = ePoint.envInfo ? ePoint.envInfo.os : '';
9879
9907
  node.mfaEnabled = ePoint.isMfaEnabled;
9880
9908
  node.status = ePoint.envInfo && ePoint.envInfo.os !== null ? 'Registered' : 'Un-Registered';
@@ -9933,7 +9961,7 @@ class IdentityServicePathHelper {
9933
9961
  else if (endpointNode.apiSession === 'No') {
9934
9962
  linkstate = 0;
9935
9963
  }
9936
- else if (endpointNode.status === 'Registered' && endpointNode.apiSession === 'Yes') {
9964
+ else if (endpointNode.status === 'Registered' && endpointNode.routerConnection === 'Yes') {
9937
9965
  linkstate = 1;
9938
9966
  }
9939
9967
  else {
@@ -9994,6 +10022,7 @@ class IdentityServicePathComponent {
9994
10022
  this.router = router;
9995
10023
  this.dialogRef = dialogRef;
9996
10024
  this.data = data;
10025
+ this.isDarkMode = false;
9997
10026
  this.refreshRotate = false;
9998
10027
  this.closeRotate = true;
9999
10028
  this.filterText = 'fetching services..';
@@ -10014,6 +10043,8 @@ class IdentityServicePathComponent {
10014
10043
  this.getEndpointNetworkAsCode();
10015
10044
  this.autocompleteOptions = [];
10016
10045
  this.isLoading = true;
10046
+ const bgCol = d3.color(d3.select('body').style("background-color")).formatHex();
10047
+ this.isDarkMode = bgCol == '#18191d' ? true : false;
10017
10048
  }
10018
10049
  getEndpointNetworkAsCode() {
10019
10050
  const pagesize = 500;
@@ -10273,16 +10304,15 @@ class IdentityServicePathComponent {
10273
10304
  link.each(function (d, i) {
10274
10305
  const _this = d3.select(this);
10275
10306
  if (d.status === 1) {
10276
- let doInUsage = true; // false;
10307
+ let doInUsage = true;
10277
10308
  _this
10278
10309
  .append('text')
10279
- // .text(d.netspeed)
10280
10310
  .style('fill', 'rgb(255,198,22)')
10281
10311
  .style('font-size', '11');
10282
10312
  _this
10283
10313
  .append('rect')
10284
10314
  .attr('fill', function (d) {
10285
- return '#555';
10315
+ return 'white';
10286
10316
  })
10287
10317
  .attr('width', function (d) {
10288
10318
  if (doInUsage) {
@@ -10364,14 +10394,12 @@ class IdentityServicePathComponent {
10364
10394
  .attr('y', -25)
10365
10395
  .attr('width', '40')
10366
10396
  .attr('height', '40');
10367
- // node.append('title') .text(function (d) {return d.name;});
10368
10397
  node
10369
10398
  .append('text')
10370
10399
  .attr('x', 10)
10371
10400
  .attr('y', 12)
10372
- .style('font-weight', '600')
10401
+ .attr('fill', 'var(--tableText)')
10373
10402
  .text(function (d) {
10374
- // const name = d.type.includes('Service') ? d.alias : d.name;
10375
10403
  return d.name;
10376
10404
  });
10377
10405
  simulation.nodes(nodes).on('tick', ticked);
@@ -10462,7 +10490,7 @@ class IdentityServicePathComponent {
10462
10490
  }
10463
10491
  }
10464
10492
  function drawTooltip(event, d, endpointUtlizationJson) {
10465
- document.getElementById('epTooltip').innerHTML = readKeyValues(d, endpointUtlizationJson); // readObjectValues(d);
10493
+ document.getElementById('epTooltip').innerHTML = readKeyValues(d, endpointUtlizationJson);
10466
10494
  tooltip.style('display', 'block');
10467
10495
  tooltip.style('white-space', 'pre-wrap');
10468
10496
  const x = event.pageX + 'px';
@@ -10495,35 +10523,35 @@ class IdentityServicePathComponent {
10495
10523
  else if (k === 'children') {
10496
10524
  const kVal = d[k];
10497
10525
  if (kVal && kVal !== '') {
10498
- info = info + '<div class="prop-row"><div class="prop-name">' + k + ':</div><div class="prop-val">' + kVal.length + '</div></div>';
10526
+ info = info + '<div class="prop-row">' + k + ': ' + kVal.length + '</div>';
10499
10527
  }
10500
10528
  }
10501
10529
  else {
10502
10530
  if (isAnObject(d[k])) {
10503
10531
  const kVal = d[k];
10504
10532
  if (kVal && kVal !== '') {
10505
- info = info + '<div class="prop-row"><div class="prop-name">' + k + ':</div><div class="prop-val">' + kVal.name + '</div></div>';
10533
+ info = info + '<div class="prop-row">' + k + ': ' + kVal.name + '</div>';
10506
10534
  }
10507
10535
  }
10508
10536
  else if (d[k] instanceof Array) {
10509
10537
  info =
10510
10538
  info +
10511
- '<div class="prop-row"><div class="prop-name">' +
10539
+ '<div class="prop-row">' +
10512
10540
  k +
10513
- ':</div><div class="prop-val">' +
10541
+ ': ' +
10514
10542
  d[k].join('<br> &nbsp;&nbsp; &nbsp;&nbsp;') +
10515
- '</div></div>';
10543
+ '</div>';
10516
10544
  }
10517
10545
  else {
10518
10546
  const vo = d[k];
10519
10547
  if (vo && vo !== '') {
10520
10548
  info =
10521
10549
  info +
10522
- '<div class="prop-row"><div class="prop-name">' +
10550
+ '<div class="prop-row">' +
10523
10551
  k +
10524
- ':</div><div class="prop-val">' +
10552
+ ': ' +
10525
10553
  (vo !== null || vo !== '' ? d[k] : 'N/A') +
10526
- '</div></div>';
10554
+ '</div>';
10527
10555
  }
10528
10556
  }
10529
10557
  }
@@ -10536,11 +10564,11 @@ class IdentityServicePathComponent {
10536
10564
  this.refreshRotate = false;
10537
10565
  } // end of initTopoView
10538
10566
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathComponent, deps: [{ token: IdentityServicePathHelper }, { token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i4.Router }, { token: i5$1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
10539
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentityServicePathComponent, selector: "app-identity-visualizer", ngImport: i0, template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizerDataModal\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n\n <div class=\"identity-topology-container\">\n\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizerDataModal{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizerDataModal .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizerDataModal .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizerDataModal .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizerDataModal .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:absolute;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizerDataModal .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizerDataModal.full-screen{width:100%;height:100%;border-radius:0}#IdentityVisualizerDataModal .ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}#IdentityVisualizerDataModal .buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}#IdentityVisualizerDataModal .identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab;background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}#IdentityVisualizerDataModal .tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}#IdentityVisualizerDataModal .node text{font:.75rem Open Sans,Arial,sans-serif}#IdentityVisualizerDataModal .modaltitle{filter:brightness(50%);padding-top:.375rem;padding-left:.3125rem}#IdentityVisualizerDataModal .modalbuttons{padding-right:1.25rem}#IdentityVisualizerDataModal .listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}#IdentityVisualizerDataModal .tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}#IdentityVisualizerDataModal .services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}#IdentityVisualizerDataModal select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}#IdentityVisualizerDataModal .topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}#IdentityVisualizerDataModal .topotip{display:none;position:fixed;background:var(--navigation);border:0rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:28.125rem}#IdentityVisualizerDataModal .topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}#IdentityVisualizerDataModal .topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}#IdentityVisualizerDataModal .legend-item{width:100%;height:100%;display:inline-block}#IdentityVisualizerDataModal .legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}#IdentityVisualizerDataModal .legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}#IdentityVisualizerDataModal .legend-circle.unregistered{background-color:#d8dce7}#IdentityVisualizerDataModal .legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}#IdentityVisualizerDataModal .legend-circle.registered_in_use{background-color:#08dc5a}#IdentityVisualizerDataModal .legend-circle.errored{background-color:#fb0d3d}#IdentityVisualizerDataModal .legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}#IdentityVisualizerDataModal .legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}#IdentityVisualizerDataModal .legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}#IdentityVisualizerDataModal .legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}#IdentityVisualizerDataModal .filters-area{display:flex;flex-direction:row;align-items:center;justify-content:flex-end;margin-top:.625rem}#IdentityVisualizerDataModal .dateTimeField input{height:2.5rem;vertical-align:middle;margin-right:.0625rem}#IdentityVisualizerDataModal .p-datepicker table td{padding:0rem}#IdentityVisualizerDataModal .p-datepicker table td>span{padding:0rem}#IdentityVisualizerDataModal .p-timepicker{padding:.0625rem}#IdentityVisualizerDataModal .p-datepicker-header,#IdentityVisualizerDataModal .p-datepicker-header-group{padding:0rem}#IdentityVisualizerDataModal .p-datepicker .p-timepicker button:last-child{height:.9375rem}#IdentityVisualizerDataModal .p-datepicker .p-timepicker button{height:.9375rem}#IdentityVisualizerDataModal .ng-tns-c15-3{font-size:.9375rem;font-weight:700}#IdentityVisualizerDataModal .p-datepicker .p-datepicker-buttonbar{padding:0rem}#IdentityVisualizerDataModal .reset-button{height:3.125rem;width:3.125rem;margin-top:-7%;margin-left:70%;border-radius:3.125rem;margin-right:.625rem;background-size:contain;--background-image: url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:.3s}#IdentityVisualizerDataModal .refresh-button{position:absolute;display:inline-block;height:2.6875rem;width:7.625rem;margin-top:-5.3125rem;margin-left:65%;border-radius:.625rem;margin-right:.625rem;font-color:blue;font-weight:700}#IdentityVisualizerDataModal .reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}#IdentityVisualizerDataModal .reset-button:active{transform:scale(.9);transition:.3s}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#IdentityVisualizerDataModal .rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:2fr 3fr;grid-gap:.625rem;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:1.5625rem;align-items:center;padding:0 .625rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }], encapsulation: i0.ViewEncapsulation.None }); }
10567
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: IdentityServicePathComponent, selector: "app-identity-visualizer", ngImport: i0, template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizer\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n <div [ngClass]=\"isDarkMode==true?'darkMode':'lightMode'\" class=\"identity-topology-container\">\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizer{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizer .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizer .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizer .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizer .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:relative;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizer .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizer.full-screen{width:100%;height:100%;border-radius:0}.ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}.buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}.identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab}.lightMode{background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.darkMode{background:#000a17;background-image:linear-gradient(#001127 .125rem,transparent 0),linear-gradient(90deg,#001127 .125rem,transparent 0),linear-gradient(#001127 1px,transparent 0),linear-gradient(90deg,#001127 1px,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}.node text{font:.75rem Open Sans,Arial,sans-serif}.modaltitle{padding-top:.375rem;padding-left:.3125rem;color:var(--primaryColor)}.modalbuttons{padding-right:1.25rem}.listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}.tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}.services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}.topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}.topotip{display:none;position:fixed;background:var(--navigation);border:.1rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;padding:1rem}.topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}.topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}.legend-item{width:100%;height:100%;display:inline-block}.legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}.legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}.legend-circle.unregistered{background-color:#d8dce7}.legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}.legend-circle.registered_in_use{background-color:#08dc5a}.legend-circle.errored{background-color:#fb0d3d}.legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}.legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}.legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}.legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:auto auto;grid-gap:.625rem;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;min-height:1.5625rem;align-items:center;padding:.5rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}::ng-deep .cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-radius:14px;background:var(--background);color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item{align-items:center;color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item:hover:not(.mat-option-disabled),::ng-deep .mat-mdc-option.mdc-list-item:focus:not(.mat-option-disabled){border-color:var(--primaryColor);border-radius:14px;border:.01rem solid var(--primaryColor)}::ng-deep .mat-mdc-raised-button .mdc-button__ripple{border:.1rem solid var(--primaryColor)}::ng-deep .p-button.p-button-icon-only{width:1.357rem}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i7$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }] }); }
10540
10568
  }
10541
10569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathComponent, decorators: [{
10542
10570
  type: Component,
10543
- args: [{ selector: 'app-identity-visualizer', encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizerDataModal\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n\n <div class=\"identity-topology-container\">\n\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizerDataModal{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizerDataModal .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizerDataModal .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizerDataModal .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizerDataModal .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:absolute;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizerDataModal .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizerDataModal.full-screen{width:100%;height:100%;border-radius:0}#IdentityVisualizerDataModal .ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}#IdentityVisualizerDataModal .buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}#IdentityVisualizerDataModal .identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab;background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}#IdentityVisualizerDataModal .tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}#IdentityVisualizerDataModal .node text{font:.75rem Open Sans,Arial,sans-serif}#IdentityVisualizerDataModal .modaltitle{filter:brightness(50%);padding-top:.375rem;padding-left:.3125rem}#IdentityVisualizerDataModal .modalbuttons{padding-right:1.25rem}#IdentityVisualizerDataModal .listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}#IdentityVisualizerDataModal .tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}#IdentityVisualizerDataModal .services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}#IdentityVisualizerDataModal select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}#IdentityVisualizerDataModal .topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}#IdentityVisualizerDataModal .topotip{display:none;position:fixed;background:var(--navigation);border:0rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:28.125rem}#IdentityVisualizerDataModal .topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}#IdentityVisualizerDataModal .topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}#IdentityVisualizerDataModal .legend-item{width:100%;height:100%;display:inline-block}#IdentityVisualizerDataModal .legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}#IdentityVisualizerDataModal .legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}#IdentityVisualizerDataModal .legend-circle.unregistered{background-color:#d8dce7}#IdentityVisualizerDataModal .legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}#IdentityVisualizerDataModal .legend-circle.registered_in_use{background-color:#08dc5a}#IdentityVisualizerDataModal .legend-circle.errored{background-color:#fb0d3d}#IdentityVisualizerDataModal .legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}#IdentityVisualizerDataModal .legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}#IdentityVisualizerDataModal .legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}#IdentityVisualizerDataModal .legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}#IdentityVisualizerDataModal .filters-area{display:flex;flex-direction:row;align-items:center;justify-content:flex-end;margin-top:.625rem}#IdentityVisualizerDataModal .dateTimeField input{height:2.5rem;vertical-align:middle;margin-right:.0625rem}#IdentityVisualizerDataModal .p-datepicker table td{padding:0rem}#IdentityVisualizerDataModal .p-datepicker table td>span{padding:0rem}#IdentityVisualizerDataModal .p-timepicker{padding:.0625rem}#IdentityVisualizerDataModal .p-datepicker-header,#IdentityVisualizerDataModal .p-datepicker-header-group{padding:0rem}#IdentityVisualizerDataModal .p-datepicker .p-timepicker button:last-child{height:.9375rem}#IdentityVisualizerDataModal .p-datepicker .p-timepicker button{height:.9375rem}#IdentityVisualizerDataModal .ng-tns-c15-3{font-size:.9375rem;font-weight:700}#IdentityVisualizerDataModal .p-datepicker .p-datepicker-buttonbar{padding:0rem}#IdentityVisualizerDataModal .reset-button{height:3.125rem;width:3.125rem;margin-top:-7%;margin-left:70%;border-radius:3.125rem;margin-right:.625rem;background-size:contain;--background-image: url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:.3s}#IdentityVisualizerDataModal .refresh-button{position:absolute;display:inline-block;height:2.6875rem;width:7.625rem;margin-top:-5.3125rem;margin-left:65%;border-radius:.625rem;margin-right:.625rem;font-color:blue;font-weight:700}#IdentityVisualizerDataModal .reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}#IdentityVisualizerDataModal .reset-button:active{transform:scale(.9);transition:.3s}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}#IdentityVisualizerDataModal .rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:2fr 3fr;grid-gap:.625rem;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:1.5625rem;align-items:center;padding:0 .625rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal}\n"] }]
10571
+ args: [{ selector: 'app-identity-visualizer', template: "<div [ngClass]=\"{ 'full-screen': fullScreen }\" class=\"modal solid\" id=\"IdentityVisualizer\">\n <div class=\"tp-data-header\">\n <div class=\"modaltitle\">Identity Service Path</div>\n <div (click)=\"hide()\" class=\"buttonBall icon-close\" id=\"EscZEndpointClose\"></div>\n <div (click)=\"toggleModalSize()\" class=\"buttonBall resize\" id=\"ResizeModalButton\"></div>\n </div>\n <div [ngClass]=\"isDarkMode==true?'darkMode':'lightMode'\" class=\"identity-topology-container\">\n <div style=\"width: 100%; height: 80px; float: left\">\n <div class=\"ep-topology-filter-container listBox row\">\n <input\n (keyup)=\"filterSearchArray()\"\n [(ngModel)]=\"selectedService\"\n [matAutocomplete]=\"auto\"\n class=\"topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to search identity accessible services.\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText\"\n class=\"clear-svc-icon icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n <div [hidden]=\"!noSearchResults\" class=\"no-results-warning\">No Results Found</div>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option.name\">\n {{ option.name }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"epTooltip\"></div>\n\n <svg style='pointer-events:all' height=\"1000\" id=\"IdentityTopology\" width=\"1200\">\n </svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n\n <div class=\"topology-legendA\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Component Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Unregistered / Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">Registered, Online</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle errored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n <div class=\"topology-legendB\">\n <div class=\"legend-item-head\">\n <div class=\"legend-text-heading\">Link Status</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle unregistered\"></div>\n <div class=\"legend-text\">Offline</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_in_use\"></div>\n <div class=\"legend-text\">In Usage</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle registered_not_in_use\"></div>\n <div class=\"legend-text\">Usage Date N/A</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle linkerrored\"></div>\n <div class=\"legend-text\">Errored</div>\n </div>\n </div>\n\n </div>\n</div>\n", styles: ["#IdentityVisualizer{overflow:hidden;width:75%;height:85%;background-color:var(--background);border-radius:1.5625rem;z-index:1001;margin:auto;inset:0rem;position:fixed}#IdentityVisualizer .buttonBall{cursor:pointer;font-weight:600}#IdentityVisualizer .buttonBall.icon-close{position:absolute;top:1.25rem;right:1.25rem;font-size:1.4375rem;color:var(--icon)}#IdentityVisualizer .buttonBall:hover{filter:brightness(50%)}#IdentityVisualizer .clear-svc-icon{font-size:1.4375rem;font-weight:600;position:relative;top:.9375rem;right:2.5rem;color:var(--icon);cursor:pointer}#IdentityVisualizer .clear-svc-icon:hover{filter:brightness(50%)}#IdentityVisualizer.full-screen{width:100%;height:100%;border-radius:0}.ep-topology-filter-container{width:37%;display:flex;flex-direction:row;position:absolute;margin:1.25rem;padding:0}.buttonBall.resize{top:1.25rem;width:1.4375rem;height:1.4375rem;right:3.4375rem;background-image:url(/assets/svgs/Resize.svg);background-size:1.4375rem 1.4375rem;position:absolute;cursor:pointer}.identity-topology-container{display:flex;margin-left:-.3125rem;margin-top:.625rem;flex-direction:column;cursor:grab}.lightMode{background:#f5e9f2;background-image:linear-gradient(#ecd3e6 .125rem,transparent 0),linear-gradient(90deg,#ecd3e6 .125rem,transparent 0),linear-gradient(#ecd3e6 .0625rem,transparent 0),linear-gradient(90deg,#ecd3e6 .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.darkMode{background:#000a17;background-image:linear-gradient(#001127 .125rem,transparent 0),linear-gradient(90deg,#001127 .125rem,transparent 0),linear-gradient(#001127 1px,transparent 0),linear-gradient(90deg,#001127 1px,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.tp-data-header{height:2.5rem;font-size:1.5625rem;font-weight:600;margin-left:1.25rem;margin-top:.625rem;margin-bottom:.3125rem;font-family:Russo One;color:var(--primaryColor);font-size:1.875rem;text-transform:uppercase;font-weight:400}.node text{font:.75rem Open Sans,Arial,sans-serif}.modaltitle{padding-top:.375rem;padding-left:.3125rem;color:var(--primaryColor)}.modalbuttons{padding-right:1.25rem}.listBox.row .close{position:fixed;display:flex;flex-direction:column;font-family:icomoon!important;font-style:normal;font-weight:600;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--icon);text-align:center;font-size:2.1875rem;line-height:2.5rem;left:35%;top:17%;width:2.5rem;height:2.5rem;background-image:url(/assets/svgs/close.svg);z-index:600;background-position:center center;background-size:75%;cursor:pointer;transition:.3s;justify-content:end;align-items:center}.tp-topo-data-header{border:0rem solid black;height:75rem;font-size:.75rem;font-weight:400;margin-left:.75rem;margin-top:.1875rem;color:var(--primaryColor)}.services-select{width:25rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:1.375rem;margin-top:.625rem;background-color:#fff;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right .9375rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.9375rem}.topology-filter-input{height:3.125rem;width:95%;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}.topotip{display:none;position:fixed;background:var(--navigation);border:.1rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem 0;font-size:1.0625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;padding:1rem}.topology-legendA{border:0rem solid blue;width:12.5rem;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;display:inline-block;top:4.6875rem;right:0rem;background:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-top:0}.topology-legendB{width:12.5rem;border:0rem solid blue;border-radius:.75rem;margin-bottom:.625rem;margin-right:.625rem;position:absolute;top:12.5rem;right:0rem;background:var(--navigation);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:0rem .625rem .3125rem;margin-left:.625rem}.legend-item{width:100%;height:100%;display:inline-block}.legend-item-head{width:105%;height:100%;display:inline-block;border:0rem solid blue;left:-.1875rem}.legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}.legend-circle.unregistered{background-color:#d8dce7}.legend-circle.registered_not_in_use{border:.0625rem solid #08dc5a;background-color:#fff}.legend-circle.registered_in_use{background-color:#08dc5a}.legend-circle.errored{background-color:#fb0d3d}.legend-circle.linkerrored{background-image:url(/assets/images/visualizer/link-cut.png);background-size:contain}.legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}.legend-text-heading{text-align:center;display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:.625rem;padding-top:.125rem;padding-bottom:.125rem;color:#8a2be2}.legend-text2{display:inline-block;font-size:.625rem;font-weight:400;color:var(--tableText);padding-left:.125rem;padding-bottom:.25rem}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.tool-tip-container .prop-row{display:grid;grid-template-columns:auto auto;grid-gap:.625rem;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;min-height:1.5625rem;align-items:center;padding:.5rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}::ng-deep .cdk-overlay-pane:not(.mat-mdc-autocomplete-panel-above) div.mat-mdc-autocomplete-panel{border-radius:14px;background:var(--background);color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item{align-items:center;color:var(--tableText)}::ng-deep .mat-mdc-option.mdc-list-item:hover:not(.mat-option-disabled),::ng-deep .mat-mdc-option.mdc-list-item:focus:not(.mat-option-disabled){border-color:var(--primaryColor);border-radius:14px;border:.01rem solid var(--primaryColor)}::ng-deep .mat-mdc-raised-button .mdc-button__ripple{border:.1rem solid var(--primaryColor)}::ng-deep .p-button.p-button-icon-only{width:1.357rem}\n"] }]
10544
10572
  }], ctorParameters: function () { return [{ type: IdentityServicePathHelper }, { type: SettingsService, decorators: [{
10545
10573
  type: Inject,
10546
10574
  args: [SETTINGS_SERVICE]
@@ -11293,7 +11321,8 @@ class TransitRoutersPageService extends ListPageServiceClass {
11293
11321
  cellRenderer: 'cellTokenComponent',
11294
11322
  resizable: true,
11295
11323
  cellClass: 'nf-cell-vert-align tCol',
11296
- }
11324
+ },
11325
+ this.ID_COLUMN_DEF
11297
11326
  ];
11298
11327
  if (this.extService.processTableColumns) {
11299
11328
  tableColumns = this.extService.processTableColumns(tableColumns);
@@ -12151,6 +12180,7 @@ class ServicePolicyFormService {
12151
12180
  return svc.name;
12152
12181
  });
12153
12182
  this.associatedServiceNames = [...this.associatedServiceNames, ...namedAttributes];
12183
+ this.associatedServiceNames = sortBy(this.associatedServices);
12154
12184
  this.associatedServiceNames = sortedUniq(this.associatedServiceNames);
12155
12185
  return this.associatedServices;
12156
12186
  });
@@ -12170,6 +12200,7 @@ class ServicePolicyFormService {
12170
12200
  return svc.name;
12171
12201
  });
12172
12202
  this.associatedIdentityNames = [...this.associatedIdentityNames, ...namedAttributes];
12203
+ this.associatedIdentityNames = sortBy(this.associatedIdentityNames);
12173
12204
  this.associatedIdentityNames = sortedUniq(this.associatedIdentityNames);
12174
12205
  });
12175
12206
  }
@@ -12399,7 +12430,8 @@ class ServicesPageService extends ListPageServiceClass {
12399
12430
  this.serviceType = '';
12400
12431
  this.openAdvanced(data.data.id);
12401
12432
  },
12402
- }
12433
+ },
12434
+ this.ID_COLUMN_DEF
12403
12435
  ];
12404
12436
  }
12405
12437
  getData(filters, sort, page) {
@@ -19131,7 +19163,8 @@ class EdgeRouterPoliciesPageService extends ListPageServiceClass {
19131
19163
  this.openEditForm(data.data.id);
19132
19164
  },
19133
19165
  hide: true
19134
- }
19166
+ },
19167
+ this.ID_COLUMN_DEF
19135
19168
  ];
19136
19169
  }
19137
19170
  getData(filters, sort, page) {
@@ -19673,7 +19706,8 @@ class ServicePoliciesPageService extends ListPageServiceClass {
19673
19706
  this.openEditForm(data.data.id);
19674
19707
  },
19675
19708
  hide: true
19676
- }
19709
+ },
19710
+ this.ID_COLUMN_DEF
19677
19711
  ];
19678
19712
  }
19679
19713
  getData(filters, sort, page) {
@@ -20219,6 +20253,7 @@ class EdgeRouterPolicyFormService {
20219
20253
  return svc.name;
20220
20254
  });
20221
20255
  this.associatedEdgeRouterNames = [...this.associatedEdgeRouterNames, ...namedAttributes];
20256
+ this.associatedEdgeRouterNames = sortBy(this.associatedEdgeRouterNames);
20222
20257
  this.associatedEdgeRouterNames = sortedUniq(this.associatedEdgeRouterNames);
20223
20258
  });
20224
20259
  }
@@ -20237,6 +20272,7 @@ class EdgeRouterPolicyFormService {
20237
20272
  return svc.name;
20238
20273
  });
20239
20274
  this.associatedIdentityNames = [...this.associatedIdentityNames, ...namedAttributes];
20275
+ this.associatedIdentityNames = sortBy(this.associatedIdentityNames);
20240
20276
  this.associatedIdentityNames = sortedUniq(this.associatedIdentityNames);
20241
20277
  });
20242
20278
  }
@@ -20826,7 +20862,8 @@ class ServiceEdgeRouterPoliciesPageService extends ListPageServiceClass {
20826
20862
  this.openEditForm(data.data.id);
20827
20863
  },
20828
20864
  hide: true
20829
- }
20865
+ },
20866
+ this.ID_COLUMN_DEF
20830
20867
  ];
20831
20868
  }
20832
20869
  getData(filters, sort, page) {
@@ -21101,6 +21138,7 @@ class ServiceEdgeRouterPolicyFormService {
21101
21138
  return svc.name;
21102
21139
  });
21103
21140
  this.associatedEdgeRouterNames = [...this.associatedEdgeRouterNames, ...namedAttributes];
21141
+ this.associatedEdgeRouterNames = sortBy(this.associatedEdgeRouterNames);
21104
21142
  this.associatedEdgeRouterNames = sortedUniq(this.associatedEdgeRouterNames);
21105
21143
  });
21106
21144
  }
@@ -21119,6 +21157,7 @@ class ServiceEdgeRouterPolicyFormService {
21119
21157
  return svc.name;
21120
21158
  });
21121
21159
  this.associatedServiceNames = [...this.associatedServiceNames, ...namedAttributes];
21160
+ this.associatedServiceNames = sortBy(this.associatedServiceNames);
21122
21161
  this.associatedServiceNames = sortedUniq(this.associatedServiceNames);
21123
21162
  });
21124
21163
  }
@@ -21615,7 +21654,8 @@ class TerminatorsPageService extends ListPageServiceClass {
21615
21654
  this.openEditForm(data.data.id);
21616
21655
  },
21617
21656
  hide: false
21618
- }
21657
+ },
21658
+ this.ID_COLUMN_DEF
21619
21659
  ];
21620
21660
  }
21621
21661
  getData(filters, sort) {
@@ -22252,7 +22292,8 @@ class JwtSignersPageService extends ListPageServiceClass {
22252
22292
  valueFormatter: this.createdAtFormatter,
22253
22293
  resizable: true,
22254
22294
  cellClass: 'nf-cell-vert-align tCol',
22255
- }
22295
+ },
22296
+ this.ID_COLUMN_DEF
22256
22297
  ];
22257
22298
  }
22258
22299
  getData(filters, sort) {
@@ -23255,7 +23296,8 @@ class AuthPoliciesPageService extends ListPageServiceClass {
23255
23296
  valueFormatter: this.createdAtFormatter,
23256
23297
  resizable: true,
23257
23298
  cellClass: 'nf-cell-vert-align tCol',
23258
- }
23299
+ },
23300
+ this.ID_COLUMN_DEF
23259
23301
  ];
23260
23302
  }
23261
23303
  checkDefaultAuthPolicy(authPolicy) {
@@ -24036,7 +24078,8 @@ class CertificateAuthoritiesPageService extends ListPageServiceClass {
24036
24078
  valueFormatter: this.createdAtFormatter,
24037
24079
  resizable: true,
24038
24080
  cellClass: 'nf-cell-vert-align tCol',
24039
- }
24081
+ },
24082
+ this.ID_COLUMN_DEF
24040
24083
  ];
24041
24084
  }
24042
24085
  getData(filters, sort) {
@@ -25105,7 +25148,8 @@ class ConfigTypesPageService extends ListPageServiceClass {
25105
25148
  resizable: true,
25106
25149
  cellClass: 'nf-cell-vert-align tCol',
25107
25150
  width: this.remToPx(10),
25108
- }
25151
+ },
25152
+ this.ID_COLUMN_DEF
25109
25153
  ];
25110
25154
  }
25111
25155
  getData(filters, sort) {
@@ -25734,7 +25778,8 @@ class PostureChecksPageService extends ListPageServiceClass {
25734
25778
  resizable: true,
25735
25779
  cellClass: 'nf-cell-vert-align tCol',
25736
25780
  width: this.remToPx(10),
25737
- }
25781
+ },
25782
+ this.ID_COLUMN_DEF
25738
25783
  ];
25739
25784
  }
25740
25785
  getData(filters, sort) {
@@ -27668,6 +27713,132 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27668
27713
  args: [SETTINGS_SERVICE]
27669
27714
  }] }]; } });
27670
27715
 
27716
+ class ProgressMeterStep {
27717
+ constructor() {
27718
+ this.index = 0;
27719
+ this.label = '';
27720
+ this.state = '';
27721
+ }
27722
+ }
27723
+ ;
27724
+ class ProgressMeterComponent {
27725
+ constructor() {
27726
+ this.errors = {};
27727
+ this.title = '';
27728
+ this.steps = [];
27729
+ this.currentStepIndex = 0;
27730
+ this.currentStepChange = new EventEmitter;
27731
+ }
27732
+ getProgressBarStyle(index) {
27733
+ const step = this.steps[index];
27734
+ const nextStep = this.steps[index + 1];
27735
+ if (step?.state === 'COMPLETE' && nextStep?.state === 'COMPLETE') {
27736
+ return true;
27737
+ }
27738
+ return false;
27739
+ }
27740
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProgressMeterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27741
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ProgressMeterComponent, selector: "lib-progress-meter", inputs: { title: "title", steps: "steps", currentStepIndex: "currentStepIndex" }, outputs: { currentStepChange: "currentStepChange" }, ngImport: i0, template: "<div class=\"progress-meter-wrapper\">\n <div class=\"progress-meter-container\">\n <div\n *ngFor=\"let step of steps; let index = index\"\n [ngClass]=\"{ 'last-step': index === steps.length - 1 }\"\n class=\"progress-meter-step-container\"\n >\n <div class=\"progress-step-item\" [ngClass]=\"{'in-progress': currentStepIndex === step.index}\">\n <div class=\"progress-step-ball\" [ngClass]=\"{'progress-step-complete': step.state === 'COMPLETE', 'step-in-progress': step.state === 'IN_PROGRESS'}\">\n </div>\n <div *ngIf=\"step.state === 'IN_PROGRESS'\" class=\"spinner\"></div>\n <div class=\"progress-step-label\" [ngClass]=\"{'step-in-progress': step.state === 'IN_PROGRESS'}\">{{ step.label }}</div>\n </div>\n <div *ngIf=\"index !== steps.length - 1\">\n <div class=\"progress-step-bar\"\n [ngClass]=\"{\n 'progress-step-complete': getProgressBarStyle(index),\n 'step-in-progress': currentStepIndex === index + 1\n }\"\n >\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".progress-meter-wrapper{display:flex;align-items:flex-start;font-size:1rem;gap:1rem;width:100%;height:6rem}.progress-meter-wrapper .progress-meter-container{display:flex;flex-direction:row;align-items:center;justify-content:center;position:relative;width:100%;height:3.4375rem;z-index:999999999}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container{display:flex;flex-direction:row;align-items:center;justify-content:center;width:18rem;height:100%}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container.last-step{width:1.875rem}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item{display:flex;flex-direction:row;align-items:center;justify-content:center;height:100%;width:1.875rem}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-ball{width:1.875rem;height:1.875rem;border-radius:1.875rem;border:none;background-size:45%;background-position:center center;background-color:var(--placeholder);opacity:.35}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-ball.progress-step-complete{background-color:var(--green);background-image:url(/assets/images/Icon_Check.png);border:none;opacity:1}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-ball.step-in-progress{opacity:.35}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .spinner{display:inline-block;width:2rem;height:2rem;border-radius:50%;background:transparent;border-top:.25rem solid var(--stroke);border-right:.25rem solid var(--stroke);border-bottom:.25rem solid transparent;border-left:.25rem solid transparent;animation:loading .5s infinite linear;margin-left:-.125rem;margin-top:-.125rem;position:absolute}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-label{height:1.25rem;font-size:.9375rem;margin-top:.3125rem;display:flex;align-items:center;justify-content:center;position:absolute;top:3.4375rem;color:var(--tableText);text-align:center;width:9.5rem;font-weight:600;opacity:.5}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-label.step-in-progress{opacity:1}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-bar{background-color:var(--placeholder);border:none;width:16.2rem;height:.5rem;opacity:.35}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-bar.progress-step-complete{background-color:var(--green);opacity:1}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-bar.step-in-progress{opacity:1}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
27742
+ }
27743
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProgressMeterComponent, decorators: [{
27744
+ type: Component,
27745
+ args: [{ selector: 'lib-progress-meter', template: "<div class=\"progress-meter-wrapper\">\n <div class=\"progress-meter-container\">\n <div\n *ngFor=\"let step of steps; let index = index\"\n [ngClass]=\"{ 'last-step': index === steps.length - 1 }\"\n class=\"progress-meter-step-container\"\n >\n <div class=\"progress-step-item\" [ngClass]=\"{'in-progress': currentStepIndex === step.index}\">\n <div class=\"progress-step-ball\" [ngClass]=\"{'progress-step-complete': step.state === 'COMPLETE', 'step-in-progress': step.state === 'IN_PROGRESS'}\">\n </div>\n <div *ngIf=\"step.state === 'IN_PROGRESS'\" class=\"spinner\"></div>\n <div class=\"progress-step-label\" [ngClass]=\"{'step-in-progress': step.state === 'IN_PROGRESS'}\">{{ step.label }}</div>\n </div>\n <div *ngIf=\"index !== steps.length - 1\">\n <div class=\"progress-step-bar\"\n [ngClass]=\"{\n 'progress-step-complete': getProgressBarStyle(index),\n 'step-in-progress': currentStepIndex === index + 1\n }\"\n >\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".progress-meter-wrapper{display:flex;align-items:flex-start;font-size:1rem;gap:1rem;width:100%;height:6rem}.progress-meter-wrapper .progress-meter-container{display:flex;flex-direction:row;align-items:center;justify-content:center;position:relative;width:100%;height:3.4375rem;z-index:999999999}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container{display:flex;flex-direction:row;align-items:center;justify-content:center;width:18rem;height:100%}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container.last-step{width:1.875rem}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item{display:flex;flex-direction:row;align-items:center;justify-content:center;height:100%;width:1.875rem}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-ball{width:1.875rem;height:1.875rem;border-radius:1.875rem;border:none;background-size:45%;background-position:center center;background-color:var(--placeholder);opacity:.35}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-ball.progress-step-complete{background-color:var(--green);background-image:url(/assets/images/Icon_Check.png);border:none;opacity:1}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-ball.step-in-progress{opacity:.35}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .spinner{display:inline-block;width:2rem;height:2rem;border-radius:50%;background:transparent;border-top:.25rem solid var(--stroke);border-right:.25rem solid var(--stroke);border-bottom:.25rem solid transparent;border-left:.25rem solid transparent;animation:loading .5s infinite linear;margin-left:-.125rem;margin-top:-.125rem;position:absolute}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-label{height:1.25rem;font-size:.9375rem;margin-top:.3125rem;display:flex;align-items:center;justify-content:center;position:absolute;top:3.4375rem;color:var(--tableText);text-align:center;width:9.5rem;font-weight:600;opacity:.5}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-item .progress-step-label.step-in-progress{opacity:1}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-bar{background-color:var(--placeholder);border:none;width:16.2rem;height:.5rem;opacity:.35}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-bar.progress-step-complete{background-color:var(--green);opacity:1}.progress-meter-wrapper .progress-meter-container .progress-meter-step-container .progress-step-bar.step-in-progress{opacity:1}\n"] }]
27746
+ }], ctorParameters: function () { return []; }, propDecorators: { title: [{
27747
+ type: Input
27748
+ }], steps: [{
27749
+ type: Input
27750
+ }], currentStepIndex: [{
27751
+ type: Input
27752
+ }], currentStepChange: [{
27753
+ type: Output
27754
+ }] } });
27755
+
27756
+ class ProgressWizardStep {
27757
+ constructor() {
27758
+ this.index = 0;
27759
+ this.label = '';
27760
+ }
27761
+ }
27762
+ ;
27763
+ class ProgressWizardComponent {
27764
+ constructor() {
27765
+ this.errors = {};
27766
+ this.title = '';
27767
+ this.steps = [];
27768
+ this.backButtonLabel = 'Back';
27769
+ this.nextButtonLabel = 'Next';
27770
+ this.nextButtonDisabled = false;
27771
+ this.titleImageSrc = '';
27772
+ this.showCloseButton = true;
27773
+ this.currentStepIndex = 0;
27774
+ this.currentStepIndexChange = new EventEmitter;
27775
+ this.close = new EventEmitter;
27776
+ this.done = new EventEmitter;
27777
+ this.stepChanged = new EventEmitter;
27778
+ }
27779
+ cancel() {
27780
+ this.close.emit();
27781
+ }
27782
+ confirm() {
27783
+ this.close.emit();
27784
+ }
27785
+ nextStep() {
27786
+ if (this.currentStepIndex >= (this.steps.length - 1)) {
27787
+ this.done.emit();
27788
+ return;
27789
+ }
27790
+ this.currentStepIndex++;
27791
+ this.currentStepIndexChange.emit(this.currentStepIndex);
27792
+ this.stepChanged.emit(this.steps[this.currentStepIndex]);
27793
+ }
27794
+ goToStep(stepNum) {
27795
+ this.currentStepIndex = stepNum.index;
27796
+ this.currentStepIndexChange.emit(this.currentStepIndex);
27797
+ this.stepChanged.emit(this.steps[this.currentStepIndex]);
27798
+ }
27799
+ prevStep() {
27800
+ this.currentStepIndex--;
27801
+ this.currentStepIndexChange.emit(this.currentStepIndex);
27802
+ this.stepChanged.emit(this.steps[this.currentStepIndex]);
27803
+ }
27804
+ get progressTrackHeight() {
27805
+ const heightfactor = 8.333;
27806
+ const trackNumber = ((this.steps ? this.steps.length : 1) - 1);
27807
+ const trackHeight = heightfactor * trackNumber;
27808
+ return trackHeight + 'rem';
27809
+ }
27810
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProgressWizardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27811
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ProgressWizardComponent, selector: "lib-progress-wizard", inputs: { title: "title", steps: "steps", backButtonLabel: "backButtonLabel", nextButtonLabel: "nextButtonLabel", nextButtonDisabled: "nextButtonDisabled", titleImageSrc: "titleImageSrc", showCloseButton: "showCloseButton", currentStepIndex: "currentStepIndex" }, outputs: { currentStepIndexChange: "currentStepIndexChange", close: "close", done: "done", stepChanged: "stepChanged" }, ngImport: i0, template: "<div class=\"progress-wizard-wrapper\">\n <div class=\"progress-wizard-container\">\n <div *ngIf=\"showCloseButton\" (click)=\"cancel()\" class=\"close cancel\"></div>\n <div class=\"side-progress-bar\">\n <div class=\"progress-steps\">\n <div class=\"progress-track\" style=\"height: {{progressTrackHeight}}\"></div>\n <div *ngFor=\"let step of steps\" class=\"progress-step\" [ngClass]=\"{'step-active': step.index === currentStepIndex}\" (click)=\"goToStep(step)\">\n <div class=\"progress-step-number\">{{step.index}}</div>\n <div class=\"progress-step-number-background\"></div>\n <div class=\"progress-step-label\">{{step.label}}</div>\n </div>\n </div>\n </div>\n <div>\n <div class=\"center-content-container\">\n <div class=\"center-content\">\n <div class=\"header-title-container\" style=\"display: flex; flex-direction: row; gap: var(--gapSmall);align-items: center;\">\n <div class=\"header-title-image\" style=\"background-image: url({{titleImageSrc}});\"></div>\n <div class=\"header-title-container\">\n <div class=\"header-title\">{{title}}</div>\n </div>\n </div>\n <form name=\"form\" class=\"step-content-form\">\n <div class=\"step-content-wrapper\">\n <ng-content></ng-content>\n </div>\n <div class=\"buttons-container\">\n <div *ngIf=\"currentStepIndex === 0\">\n </div>\n <button *ngIf=\"currentStepIndex > 0\" name=\"action\" type=\"submit\" class=\"btn-primary\" (click)=\"prevStep()\">\n {{backButtonLabel}}\n </button>\n <button name=\"action\" type=\"submit\" class=\"btn-primary\" (click)=\"nextStep()\" [disabled]=\"nextButtonDisabled\">\n {{nextButtonLabel}}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".progress-wizard-wrapper{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;box-shadow:-1px 1rem 1.5625rem #0003}.progress-wizard-wrapper .progress-wizard-container{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;display:flex;flex-direction:row;position:relative}.progress-wizard-wrapper .progress-wizard-container .center-content-container{-webkit-backdrop-filter:saturate(180%) blur(1.25rem);backdrop-filter:saturate(180%) blur(1.25rem);background-color:#eceef2;padding:2.1875rem;border-radius:.5rem;box-shadow:0 0 1.5625rem #0003;display:flex;flex-direction:column;height:100%;max-width:52rem}.progress-wizard-wrapper .progress-wizard-container .center-content-container .center-content{display:flex;flex-direction:column;height:100%}.header-title{color:var(--primaryColor)!important;filter:brightness(var(--brightnessDark));opacity:1;font-family:Russo One,Arial,sans-serif;font-size:2.35rem!important;line-height:unset;font-weight:400!important;margin:0!important;text-align:center;height:100%}.header-title-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;overflow:visible}.step-content-container{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;margin-top:var(--marginXL);padding:0!important;width:100%}.step-content-container .step-label-text{text-transform:none;font-size:1.125rem;width:100%;margin-bottom:var(--marginSmall);font-weight:600}.step-content-container .step-label-text.list-instructions{font-size:1rem;font-weight:600}.header-title-image{background-image:url(/assets/svgs/zlan-logo.svg);background-size:4.25rem;height:4.25rem;width:4.25rem}.buttons-container{display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-top:var(--marginXXL)}.buttons-container button{box-shadow:0 .1875rem .5625rem 0 var(--primaryColorOpaque)!important;color:#fff!important;line-height:2.5rem!important;height:3.125rem!important;border:none!important;vertical-align:middle!important;text-align:center!important;position:relative!important;z-index:1!important;display:inline-block!important;padding:0rem;margin-top:1.5625rem!important;transition:color .2s!important;font-size:.875rem!important;font-weight:600!important;font-family:Open Sans!important;text-transform:uppercase!important;border-radius:.5rem!important;min-width:10rem;background:var(--primaryColor)!important;cursor:pointer}.buttons-container button:hover{outline:0!important;box-shadow:0 .3125rem 1.25rem #0000000d!important}.buttons-container button:active{filter:brightness(95%)!important;box-shadow:none!important;transform:translateY(1px)!important}.buttons-container button.btn-primary{position:relative;width:10rem;margin-top:0!important}.buttons-container button.btn-primary:disabled{filter:grayscale(1);opacity:.5;pointer-events:none}.buttons-container .saving-button,.buttons-container .saving-button:hover{filter:grayscale(1)!important;opacity:.5!important}.side-progress-bar{display:flex;flex-direction:row;width:20rem;margin-right:-1rem;position:relative;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;background-color:#eceef2f4;align-items:flex-start}.side-progress-bar .progress-steps{display:flex;flex-direction:column;height:100%;width:100%;justify-content:flex-start;align-items:flex-start;gap:5.5rem;cursor:pointer;padding:var(--paddingXXL) 0}.side-progress-bar .progress-steps .progress-track{position:absolute;width:.175rem;background-color:var(--stroke);left:2.175rem;height:23rem;opacity:.4}.side-progress-bar .progress-steps .progress-step{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;width:100%;height:2.5rem;filter:grayscale(1)}.side-progress-bar .progress-steps .progress-step.step-active{filter:none}.side-progress-bar .progress-steps .progress-step.step-active .progress-step-number{opacity:1;box-shadow:1px 0 .8rem #0003}.side-progress-bar .progress-steps .progress-step.step-active .progress-step-label{opacity:1}.side-progress-bar .progress-steps .progress-step-number{width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;font-size:1.125rem;font-weight:600;background-color:var(--primary);border-style:solid;border-radius:2rem;border-color:#fff;color:var(--white);margin-left:1rem;border-width:.25rem;z-index:999999;opacity:.4}.side-progress-bar .progress-steps .progress-step-label{font-size:1.125rem;font-weight:600;margin-left:var(--marginSmall);opacity:.4}.side-progress-bar .progress-steps .progress-step-number-background{position:absolute;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;font-size:1.125rem;font-weight:600;background-color:#eceef2;border-style:solid;border-radius:2rem;border-color:#fff;color:var(--white);margin-left:1rem;border-width:.25rem;z-index:999}.step-content-form{display:flex;flex-direction:column;background-color:transparent;font-family:Open Sans;height:100%}.step-content-form .step-content-wrapper{height:100%;display:flex;flex-direction:column;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i1$4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
27812
+ }
27813
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProgressWizardComponent, decorators: [{
27814
+ type: Component,
27815
+ args: [{ selector: 'lib-progress-wizard', template: "<div class=\"progress-wizard-wrapper\">\n <div class=\"progress-wizard-container\">\n <div *ngIf=\"showCloseButton\" (click)=\"cancel()\" class=\"close cancel\"></div>\n <div class=\"side-progress-bar\">\n <div class=\"progress-steps\">\n <div class=\"progress-track\" style=\"height: {{progressTrackHeight}}\"></div>\n <div *ngFor=\"let step of steps\" class=\"progress-step\" [ngClass]=\"{'step-active': step.index === currentStepIndex}\" (click)=\"goToStep(step)\">\n <div class=\"progress-step-number\">{{step.index}}</div>\n <div class=\"progress-step-number-background\"></div>\n <div class=\"progress-step-label\">{{step.label}}</div>\n </div>\n </div>\n </div>\n <div>\n <div class=\"center-content-container\">\n <div class=\"center-content\">\n <div class=\"header-title-container\" style=\"display: flex; flex-direction: row; gap: var(--gapSmall);align-items: center;\">\n <div class=\"header-title-image\" style=\"background-image: url({{titleImageSrc}});\"></div>\n <div class=\"header-title-container\">\n <div class=\"header-title\">{{title}}</div>\n </div>\n </div>\n <form name=\"form\" class=\"step-content-form\">\n <div class=\"step-content-wrapper\">\n <ng-content></ng-content>\n </div>\n <div class=\"buttons-container\">\n <div *ngIf=\"currentStepIndex === 0\">\n </div>\n <button *ngIf=\"currentStepIndex > 0\" name=\"action\" type=\"submit\" class=\"btn-primary\" (click)=\"prevStep()\">\n {{backButtonLabel}}\n </button>\n <button name=\"action\" type=\"submit\" class=\"btn-primary\" (click)=\"nextStep()\" [disabled]=\"nextButtonDisabled\">\n {{nextButtonLabel}}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".progress-wizard-wrapper{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;box-shadow:-1px 1rem 1.5625rem #0003}.progress-wizard-wrapper .progress-wizard-container{width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;display:flex;flex-direction:row;position:relative}.progress-wizard-wrapper .progress-wizard-container .center-content-container{-webkit-backdrop-filter:saturate(180%) blur(1.25rem);backdrop-filter:saturate(180%) blur(1.25rem);background-color:#eceef2;padding:2.1875rem;border-radius:.5rem;box-shadow:0 0 1.5625rem #0003;display:flex;flex-direction:column;height:100%;max-width:52rem}.progress-wizard-wrapper .progress-wizard-container .center-content-container .center-content{display:flex;flex-direction:column;height:100%}.header-title{color:var(--primaryColor)!important;filter:brightness(var(--brightnessDark));opacity:1;font-family:Russo One,Arial,sans-serif;font-size:2.35rem!important;line-height:unset;font-weight:400!important;margin:0!important;text-align:center;height:100%}.header-title-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;overflow:visible}.step-content-container{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;margin-top:var(--marginXL);padding:0!important;width:100%}.step-content-container .step-label-text{text-transform:none;font-size:1.125rem;width:100%;margin-bottom:var(--marginSmall);font-weight:600}.step-content-container .step-label-text.list-instructions{font-size:1rem;font-weight:600}.header-title-image{background-image:url(/assets/svgs/zlan-logo.svg);background-size:4.25rem;height:4.25rem;width:4.25rem}.buttons-container{display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-top:var(--marginXXL)}.buttons-container button{box-shadow:0 .1875rem .5625rem 0 var(--primaryColorOpaque)!important;color:#fff!important;line-height:2.5rem!important;height:3.125rem!important;border:none!important;vertical-align:middle!important;text-align:center!important;position:relative!important;z-index:1!important;display:inline-block!important;padding:0rem;margin-top:1.5625rem!important;transition:color .2s!important;font-size:.875rem!important;font-weight:600!important;font-family:Open Sans!important;text-transform:uppercase!important;border-radius:.5rem!important;min-width:10rem;background:var(--primaryColor)!important;cursor:pointer}.buttons-container button:hover{outline:0!important;box-shadow:0 .3125rem 1.25rem #0000000d!important}.buttons-container button:active{filter:brightness(95%)!important;box-shadow:none!important;transform:translateY(1px)!important}.buttons-container button.btn-primary{position:relative;width:10rem;margin-top:0!important}.buttons-container button.btn-primary:disabled{filter:grayscale(1);opacity:.5;pointer-events:none}.buttons-container .saving-button,.buttons-container .saving-button:hover{filter:grayscale(1)!important;opacity:.5!important}.side-progress-bar{display:flex;flex-direction:row;width:20rem;margin-right:-1rem;position:relative;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;background-color:#eceef2f4;align-items:flex-start}.side-progress-bar .progress-steps{display:flex;flex-direction:column;height:100%;width:100%;justify-content:flex-start;align-items:flex-start;gap:5.5rem;cursor:pointer;padding:var(--paddingXXL) 0}.side-progress-bar .progress-steps .progress-track{position:absolute;width:.175rem;background-color:var(--stroke);left:2.175rem;height:23rem;opacity:.4}.side-progress-bar .progress-steps .progress-step{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;width:100%;height:2.5rem;filter:grayscale(1)}.side-progress-bar .progress-steps .progress-step.step-active{filter:none}.side-progress-bar .progress-steps .progress-step.step-active .progress-step-number{opacity:1;box-shadow:1px 0 .8rem #0003}.side-progress-bar .progress-steps .progress-step.step-active .progress-step-label{opacity:1}.side-progress-bar .progress-steps .progress-step-number{width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;font-size:1.125rem;font-weight:600;background-color:var(--primary);border-style:solid;border-radius:2rem;border-color:#fff;color:var(--white);margin-left:1rem;border-width:.25rem;z-index:999999;opacity:.4}.side-progress-bar .progress-steps .progress-step-label{font-size:1.125rem;font-weight:600;margin-left:var(--marginSmall);opacity:.4}.side-progress-bar .progress-steps .progress-step-number-background{position:absolute;width:2.5rem;height:2.5rem;display:flex;align-items:center;justify-content:center;font-size:1.125rem;font-weight:600;background-color:#eceef2;border-style:solid;border-radius:2rem;border-color:#fff;color:var(--white);margin-left:1rem;border-width:.25rem;z-index:999}.step-content-form{display:flex;flex-direction:column;background-color:transparent;font-family:Open Sans;height:100%}.step-content-form .step-content-wrapper{height:100%;display:flex;flex-direction:column;justify-content:center}\n"] }]
27816
+ }], ctorParameters: function () { return []; }, propDecorators: { title: [{
27817
+ type: Input
27818
+ }], steps: [{
27819
+ type: Input
27820
+ }], backButtonLabel: [{
27821
+ type: Input
27822
+ }], nextButtonLabel: [{
27823
+ type: Input
27824
+ }], nextButtonDisabled: [{
27825
+ type: Input
27826
+ }], titleImageSrc: [{
27827
+ type: Input
27828
+ }], showCloseButton: [{
27829
+ type: Input
27830
+ }], currentStepIndex: [{
27831
+ type: Input
27832
+ }], currentStepIndexChange: [{
27833
+ type: Output
27834
+ }], close: [{
27835
+ type: Output
27836
+ }], done: [{
27837
+ type: Output
27838
+ }], stepChanged: [{
27839
+ type: Output
27840
+ }] } });
27841
+
27671
27842
  /*
27672
27843
  Copyright NetFoundry Inc.
27673
27844
 
@@ -27780,7 +27951,9 @@ class OpenZitiConsoleLibModule {
27780
27951
  SessionFormComponent,
27781
27952
  APISessionsPageComponent,
27782
27953
  APISessionFormComponent,
27783
- CallbackComponent], imports: [CommonModule,
27954
+ CallbackComponent,
27955
+ ProgressMeterComponent,
27956
+ ProgressWizardComponent], imports: [CommonModule,
27784
27957
  FormsModule,
27785
27958
  MatDialogModule,
27786
27959
  MatRadioModule,
@@ -27845,7 +28018,11 @@ class OpenZitiConsoleLibModule {
27845
28018
  APISessionFormComponent,
27846
28019
  CallbackComponent,
27847
28020
  FormHeaderComponent,
27848
- JsonViewComponent] }); }
28021
+ JsonViewComponent,
28022
+ PreviewListComponent,
28023
+ TagSelectorComponent,
28024
+ ProgressMeterComponent,
28025
+ ProgressWizardComponent] }); }
27849
28026
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OpenZitiConsoleLibModule, providers: [
27850
28027
  { provide: SHAREDZ_EXTENSION, useClass: ExtensionsNoopService },
27851
28028
  { provide: ZITI_NAVIGATOR, useValue: {} },
@@ -27969,7 +28146,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27969
28146
  SessionFormComponent,
27970
28147
  APISessionsPageComponent,
27971
28148
  APISessionFormComponent,
27972
- CallbackComponent
28149
+ CallbackComponent,
28150
+ ProgressMeterComponent,
28151
+ ProgressWizardComponent
27973
28152
  ],
27974
28153
  imports: [
27975
28154
  CommonModule,
@@ -28042,7 +28221,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28042
28221
  APISessionFormComponent,
28043
28222
  CallbackComponent,
28044
28223
  FormHeaderComponent,
28045
- JsonViewComponent
28224
+ JsonViewComponent,
28225
+ PreviewListComponent,
28226
+ TagSelectorComponent,
28227
+ ProgressMeterComponent,
28228
+ ProgressWizardComponent
28046
28229
  ],
28047
28230
  providers: [
28048
28231
  { provide: SHAREDZ_EXTENSION, useClass: ExtensionsNoopService },
@@ -28058,7 +28241,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28058
28241
  }] });
28059
28242
 
28060
28243
  const VERSION = {
28061
- "version": "3.12.3"
28244
+ "version": "3.12.5"
28062
28245
  };
28063
28246
 
28064
28247
  /*
@@ -29758,5 +29941,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
29758
29941
  * Generated bundle index. Do not edit.
29759
29942
  */
29760
29943
 
29761
- export { APISessionFormComponent, APISessionsPageComponent, ApiSessionsPageService, AuthPoliciesPageComponent, AuthPoliciesPageService, AuthPolicyFormComponent, AuthPolicyFormService, AuthService, BooleanToggleInputComponent, COMPONENTS, CallbackComponent, CardListComponent, CertificateAuthoritiesPageComponent, CertificateAuthoritiesPageService, CertificateAuthorityFormComponent, CertificateAuthorityFormService, CheckboxListInputComponent, ConfigTypeFormComponent, ConfigTypesPageComponent, ConfigurationFormComponent, ConfigurationService, ConfigurationsPageComponent, CsvDownloadService, DEACTIVATE_GUARD, DataTableFilterService, DeactivateGuardService, EDGE_ROUTER_EXTENSION_SERVICE, EDGE_ROUTER_POLICY_EXTENSION_SERVICE, EdgeRouter, EdgeRouterFormComponent, EdgeRouterFormService, EdgeRouterPoliciesPageComponent, EdgeRouterPoliciesPageService, EdgeRouterPolicyFormComponent, EdgeRouterPolicyFormService, EdgeRoutersPageComponent, EdgeRoutersPageService, Entity, ExtendableComponent, ExtensionsNoopService, FormFieldContainerComponent, FormFieldToggleComponent, FormHeaderComponent, GrowlerComponent, GrowlerModel, GrowlerModule, GrowlerService, IDENTITY_EXTENSION_SERVICE, IdentitiesPageComponent, IdentitiesPageService, Identity$1 as Identity, IdentityFormComponent, IdentityFormService, IdentityServicePathComponent, JsonViewComponent, JwtSignerFormComponent, JwtSignerFormService, JwtSignersPageComponent, JwtSignersPageService, KEY_CODES, ListPageComponent, ListPageServiceClass, LoadingIndicatorComponent, LoggerService, LoginDialogComponent, LoginServiceClass, NetworkVisualizerComponent, NodeDataService, NodeWrapperService, NoopLoginService, NoopTabInterceptorService, NumberInputComponent, ObjectComponent, OpenZitiConsoleLibModule, PasswordInputComponent, PostureCheckFormComponent, PostureChecksPageComponent, PostureChecksPageService, ProjectableForm, ProtocolAddressPortInputComponent, ResetEnrollmentService, SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE, SERVICE_EXTENSION_SERVICE, SERVICE_POLICY_EXTENSION_SERVICE, SETTINGS_SERVICE, SHAREDZ_EXTENSION, SelectorInputComponent, ServiceEdgeRouterPoliciesPageComponent, ServiceEdgeRouterPoliciesPageService, ServiceEdgeRouterPolicyFormComponent, ServiceEdgeRouterPolicyFormService, ServiceFormComponent, ServiceFormService, ServicePoliciesPageComponent, ServicePoliciesPageService, ServicePolicyFormComponent, ServicePolicyFormService, ServicesPageComponent, ServicesPageService, Session, SessionFormComponent, SessionsPageComponent, SessionsPageService, SettingsService, SettingsServiceClass, SideBannerComponent, SideModalComponent, SideNavbarComponent, SideToolbarComponent, SimpleServiceComponent, StringInputComponent, TabNameService, TerminatorFormComponent, TerminatorFormService, TerminatorsPageComponent, TerminatorsPageService, TextListInputComponent, TransitRouterFormComponent, TransitRouterFormService, TransitRoutersPageComponent, TransitRoutersPageService, VERSION, ValidationService, VerifyCertificateComponent, VisualizerServiceClass, ZAC_LOGIN_SERVICE, ZAC_WRAPPER_SERVICE, ZITI_DATA_SERVICE, ZITI_DOMAIN_CONTROLLER, ZITI_NAVIGATOR, ZITI_TAB_OVERRIDES, ZITI_URLS, ZacRoutingModule, ZacWrapperComponent, ZacWrapperService, ZacWrapperServiceClass, ZitiControllerDataService, ZitiDataService, playerFactory };
29944
+ export { APISessionFormComponent, APISessionsPageComponent, ApiSessionsPageService, AuthPoliciesPageComponent, AuthPoliciesPageService, AuthPolicyFormComponent, AuthPolicyFormService, AuthService, BooleanToggleInputComponent, COMPONENTS, CallbackComponent, CardListComponent, CertificateAuthoritiesPageComponent, CertificateAuthoritiesPageService, CertificateAuthorityFormComponent, CertificateAuthorityFormService, CheckboxListInputComponent, ConfigTypeFormComponent, ConfigTypesPageComponent, ConfigurationFormComponent, ConfigurationService, ConfigurationsPageComponent, CsvDownloadService, DEACTIVATE_GUARD, DataTableFilterService, DeactivateGuardService, EDGE_ROUTER_EXTENSION_SERVICE, EDGE_ROUTER_POLICY_EXTENSION_SERVICE, EdgeRouter, EdgeRouterFormComponent, EdgeRouterFormService, EdgeRouterPoliciesPageComponent, EdgeRouterPoliciesPageService, EdgeRouterPolicyFormComponent, EdgeRouterPolicyFormService, EdgeRoutersPageComponent, EdgeRoutersPageService, Entity, ExtendableComponent, ExtensionsNoopService, FormFieldContainerComponent, FormFieldToggleComponent, FormHeaderComponent, GrowlerComponent, GrowlerModel, GrowlerModule, GrowlerService, IDENTITY_EXTENSION_SERVICE, IdentitiesPageComponent, IdentitiesPageService, Identity$1 as Identity, IdentityFormComponent, IdentityFormService, IdentityServicePathComponent, JsonViewComponent, JwtSignerFormComponent, JwtSignerFormService, JwtSignersPageComponent, JwtSignersPageService, KEY_CODES, ListPageComponent, ListPageServiceClass, LoadingIndicatorComponent, LoggerService, LoginDialogComponent, LoginServiceClass, NetworkVisualizerComponent, NodeDataService, NodeWrapperService, NoopLoginService, NoopTabInterceptorService, NumberInputComponent, ObjectComponent, OpenZitiConsoleLibModule, PasswordInputComponent, PostureCheckFormComponent, PostureChecksPageComponent, PostureChecksPageService, PreviewListComponent, ProgressMeterComponent, ProgressMeterStep, ProgressWizardComponent, ProgressWizardStep, ProjectableForm, ProtocolAddressPortInputComponent, ResetEnrollmentService, SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE, SERVICE_EXTENSION_SERVICE, SERVICE_POLICY_EXTENSION_SERVICE, SETTINGS_SERVICE, SHAREDZ_EXTENSION, SelectorInputComponent, ServiceEdgeRouterPoliciesPageComponent, ServiceEdgeRouterPoliciesPageService, ServiceEdgeRouterPolicyFormComponent, ServiceEdgeRouterPolicyFormService, ServiceFormComponent, ServiceFormService, ServicePoliciesPageComponent, ServicePoliciesPageService, ServicePolicyFormComponent, ServicePolicyFormService, ServicesPageComponent, ServicesPageService, Session, SessionFormComponent, SessionsPageComponent, SessionsPageService, SettingsService, SettingsServiceClass, SideBannerComponent, SideModalComponent, SideNavbarComponent, SideToolbarComponent, SimpleServiceComponent, StringInputComponent, TabNameService, TagSelectorComponent, TerminatorFormComponent, TerminatorFormService, TerminatorsPageComponent, TerminatorsPageService, TextListInputComponent, TransitRouterFormComponent, TransitRouterFormService, TransitRoutersPageComponent, TransitRoutersPageService, VERSION, ValidationService, VerifyCertificateComponent, VisualizerServiceClass, ZAC_LOGIN_SERVICE, ZAC_WRAPPER_SERVICE, ZITI_DATA_SERVICE, ZITI_DOMAIN_CONTROLLER, ZITI_NAVIGATOR, ZITI_TAB_OVERRIDES, ZITI_URLS, ZacRoutingModule, ZacWrapperComponent, ZacWrapperService, ZacWrapperServiceClass, ZitiControllerDataService, ZitiDataService, playerFactory };
29762
29945
  //# sourceMappingURL=openziti-ziti-console-lib.mjs.map