@openziti/ziti-console-lib 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -254,7 +254,7 @@ declare class ChipsInputComponent implements ControlValueAccessor {
254
254
  onModelChange: EventEmitter<string[]>;
255
255
  onBlur: EventEmitter<FocusEvent>;
256
256
  keyup: EventEmitter<KeyboardEvent>;
257
- chipInput: ElementRef<HTMLInputElement>;
257
+ chipInput?: ElementRef<HTMLInputElement>;
258
258
  value: string[];
259
259
  disabled: boolean;
260
260
  focused: boolean;
@@ -739,6 +739,46 @@ declare class SettingsService extends SettingsServiceClass {
739
739
  static ɵprov: i0.ɵɵInjectableDeclaration<SettingsService>;
740
740
  }
741
741
 
742
+ declare const SAVE_DENIED_BY_PERMISSION_TOOLTIP = "You do not have permission to save changes.";
743
+ declare class ManagementPermissionsService {
744
+ private readonly settings;
745
+ private readonly zitiData;
746
+ readonly saveDeniedTooltip = "You do not have permission to save changes.";
747
+ private readonly permissionSet;
748
+ private identityIsAdmin;
749
+ /** Legacy controller, failed refresh, or empty permissions — keep prior UX (no gating). */
750
+ private unrestricted;
751
+ private readonly versionSubject;
752
+ readonly stateVersion$: rxjs.Observable<number>;
753
+ /** Coalesce overlapping current-identity HTTP calls (debounce + rapid settings churn). */
754
+ private identityLoadPromise;
755
+ constructor(settings: SettingsServiceClass, zitiData: ZitiDataService);
756
+ private bumpVersion;
757
+ clear(): void;
758
+ refresh(): Promise<void>;
759
+ private loadCurrentIdentity;
760
+ private fetchCurrentIdentity;
761
+ private applyLegacyMode;
762
+ isUnrestricted(): boolean;
763
+ private isAdmin;
764
+ isAdminReadonly(): boolean;
765
+ /** Read is not entity-scoped yet; parameter reserved for future use. */
766
+ canRead(_apiResource: string): boolean;
767
+ /** Create is global-role only until entity grants exist; apiResource unused for now. */
768
+ canCreate(_apiResource: string): boolean;
769
+ /** Update is global-role only until entity grants exist; apiResource unused for now. */
770
+ canUpdate(_apiResource: string): boolean;
771
+ /** Delete is global-role only until entity grants exist; apiResource unused for now. */
772
+ canDelete(_apiResource: string): boolean;
773
+ /** Strict read-only shell when the session has global admin_readonly (no writes). */
774
+ useStrictReadonlyFormUi(apiResource: string, isEdit: boolean): boolean;
775
+ isSaveDisabled(apiResource: string, isEdit: boolean): boolean;
776
+ isMenuActionAllowed(apiResource: string, action: string): boolean;
777
+ isTableHeaderActionAllowed(apiResource: string, action: string): boolean;
778
+ static ɵfac: i0.ɵɵFactoryDeclaration<ManagementPermissionsService, never>;
779
+ static ɵprov: i0.ɵɵInjectableDeclaration<ManagementPermissionsService>;
780
+ }
781
+
742
782
  declare class Entity {
743
783
  name: '';
744
784
  }
@@ -795,10 +835,17 @@ declare abstract class ProjectableForm extends ExtendableComponent implements Do
795
835
  ignoreDataChange: boolean;
796
836
  isScrolled: boolean;
797
837
  subscription: Subscription;
838
+ protected readonly managementPermissions: ManagementPermissionsService;
798
839
  formInit: boolean;
799
840
  formContainer: ElementRef;
800
841
  protected constructor(growlerService: GrowlerService, extService: ExtensionService, zitiService: ZitiDataService, router?: Router, route?: ActivatedRoute, location?: Location, settingsService?: SettingsService, dialogForm?: MatDialog);
801
842
  get isEdit(): boolean;
843
+ get formPermissionSaveDisabled(): boolean;
844
+ get formPermissionSaveTooltip(): string;
845
+ get useStrictReadonlyForm(): boolean;
846
+ /** Blocks save from shortcuts/callbacks when the controller denies create/update for this resource. */
847
+ protected canSaveByPermissions(): boolean;
848
+ get zacManagementReadonlyHostClass(): boolean;
802
849
  ngAfterViewInit(skipFocus?: boolean): void;
803
850
  ngOnInit(): void;
804
851
  initBaseHref(): void;
@@ -975,6 +1022,7 @@ declare abstract class ListPageServiceClass {
975
1022
  DEFAULT_PAGING: any;
976
1023
  totalCount: number;
977
1024
  dataService: ZitiDataService;
1025
+ protected readonly managementPermissions: ManagementPermissionsService;
978
1026
  refreshData: (sort?: {
979
1027
  sortBy: string;
980
1028
  ordering: string;
@@ -982,6 +1030,11 @@ declare abstract class ListPageServiceClass {
982
1030
  selectedEntityId: String;
983
1031
  menuItems: any;
984
1032
  tableHeaderActions: any;
1033
+ /** Original menus/header actions before permission filtering (for singleton page services). */
1034
+ private menuItemsBaseline;
1035
+ private tableHeaderActionsBaseline;
1036
+ private menuTemplateSnapshot;
1037
+ private tableHeaderActionsSnapshot;
985
1038
  currentSettings: any;
986
1039
  dialogRef: any;
987
1040
  sideModalOpen: boolean;
@@ -1009,6 +1062,11 @@ declare abstract class ListPageServiceClass {
1009
1062
  };
1010
1063
  }) => string;
1011
1064
  constructor(settings: SettingsServiceClass, filterService: DataTableFilterService, csvDownloadService: CsvDownloadService, extensionService: ExtensionService, router?: Router);
1065
+ /**
1066
+ * Root-provided page services survive route changes; restore baseline menus before each table init
1067
+ * so permission filtering does not stack on already-filtered items.
1068
+ */
1069
+ resetMenusForInit(): void;
1012
1070
  initMenuActions(): void;
1013
1071
  addListItemExtensionActions(row: {
1014
1072
  actionList: any[];
@@ -1023,6 +1081,8 @@ declare abstract class ListPageServiceClass {
1023
1081
  getNetworkJwt(): Promise<any>;
1024
1082
  openEditForm(itemId?: string, basePath?: undefined): void;
1025
1083
  remToPx(remValue: number): number;
1084
+ capturePermissionSnapshots(): void;
1085
+ rebuildMenusAndHeaders(perm: ManagementPermissionsService): void;
1026
1086
  }
1027
1087
 
1028
1088
  type CallbackResults = {
@@ -1186,10 +1246,14 @@ declare abstract class ListPageComponent {
1186
1246
  gridObj: any;
1187
1247
  subscription: Subscription;
1188
1248
  private growlerSvc;
1249
+ protected readonly managementPermissions: ManagementPermissionsService;
1250
+ get headerBlockCreate(): boolean;
1251
+ get headerBlockDelete(): boolean;
1189
1252
  constructor(filterService: DataTableFilterService, svc: ListPageServiceClass, consoleEvents: ConsoleEventsService, dialogForm: MatDialog, extensionService?: ExtensionService);
1190
1253
  ngOnInit(): void;
1191
1254
  ngOnDestroy(): void;
1192
1255
  itemToggled(item: any): void;
1256
+ protected syncBulkDownloadHeaderAction(): void;
1193
1257
  updateSelectedItems(toggledItem?: any): void;
1194
1258
  refreshData(sort?: {
1195
1259
  sortBy: string;
@@ -1309,6 +1373,8 @@ declare class ConfigEditorComponent implements OnInit, AfterViewInit {
1309
1373
  lColorArray: string[];
1310
1374
  bColorArray: string[];
1311
1375
  hideConfigJSON: boolean;
1376
+ /** When true, block edits to embedded config form and JSON editor (e.g. global admin_readonly). */
1377
+ readOnly: boolean;
1312
1378
  configErrors: any;
1313
1379
  configErrorsChange: EventEmitter<any>;
1314
1380
  _configData: any;
@@ -1344,7 +1410,7 @@ declare class ConfigEditorComponent implements OnInit, AfterViewInit {
1344
1410
  jsonDataChanged(event: any): void;
1345
1411
  removeUndefinedProperties(data: any): any;
1346
1412
  static ɵfac: i0.ɵɵFactoryDeclaration<ConfigEditorComponent, never>;
1347
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfigEditorComponent, "lib-config-editor", never, { "configErrors": { "alias": "configErrors"; "required": false; }; "configData": { "alias": "configData"; "required": false; }; "showJsonView": { "alias": "showJsonView"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; }, { "configErrorsChange": "configErrorsChange"; "configDataChange": "configDataChange"; }, never, never, false, never>;
1413
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConfigEditorComponent, "lib-config-editor", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "configErrors": { "alias": "configErrors"; "required": false; }; "configData": { "alias": "configData"; "required": false; }; "showJsonView": { "alias": "showJsonView"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; }, { "configErrorsChange": "configErrorsChange"; "configDataChange": "configDataChange"; }, never, never, false, never>;
1348
1414
  }
1349
1415
 
1350
1416
  declare class ConfigTypeFormComponent extends ProjectableForm implements OnInit, OnDestroy {
@@ -1401,11 +1467,15 @@ declare class ListPageHeaderComponent {
1401
1467
  tabs: any[];
1402
1468
  showAdd: boolean;
1403
1469
  hideAction: boolean;
1470
+ /** When true, hide the create (+) control even if showAdd is true. */
1471
+ blockCreate: boolean;
1472
+ /** When true, hide the bulk delete (-) control when rows are selected. */
1473
+ blockDelete: boolean;
1404
1474
  actionClicked: EventEmitter<string>;
1405
1475
  clickAction(value: string): void;
1406
1476
  tabSelected(tab: any): boolean;
1407
1477
  static ɵfac: i0.ɵɵFactoryDeclaration<ListPageHeaderComponent, never>;
1408
- static ɵcmp: i0.ɵɵComponentDeclaration<ListPageHeaderComponent, "lib-list-page-header", never, { "title": { "alias": "title"; "required": false; }; "tabs": { "alias": "tabs"; "required": false; }; "showAdd": { "alias": "showAdd"; "required": false; }; "hideAction": { "alias": "hideAction"; "required": false; }; }, { "actionClicked": "actionClicked"; }, never, never, false, never>;
1478
+ static ɵcmp: i0.ɵɵComponentDeclaration<ListPageHeaderComponent, "lib-list-page-header", never, { "title": { "alias": "title"; "required": false; }; "tabs": { "alias": "tabs"; "required": false; }; "showAdd": { "alias": "showAdd"; "required": false; }; "hideAction": { "alias": "hideAction"; "required": false; }; "blockCreate": { "alias": "blockCreate"; "required": false; }; "blockDelete": { "alias": "blockDelete"; "required": false; }; }, { "actionClicked": "actionClicked"; }, never, never, false, never>;
1409
1479
  }
1410
1480
 
1411
1481
  declare class FilterBarComponent {
@@ -1748,6 +1818,8 @@ declare class DataTableComponent implements OnChanges, OnInit {
1748
1818
  noItemsClass: any;
1749
1819
  entityTypeName: string;
1750
1820
  showNoItemsAdd: boolean;
1821
+ /** When true, empty-state copy does not prompt to add (e.g. admin_readonly / no create permission). */
1822
+ noItemsReadonly: boolean;
1751
1823
  currentPage: number;
1752
1824
  noItemsImage: string;
1753
1825
  rowHeight: number;
@@ -1882,7 +1954,7 @@ declare class DataTableComponent implements OnChanges, OnInit {
1882
1954
  _handleTableScroll(scroller: any): void;
1883
1955
  remToPx(remValue: any): number;
1884
1956
  static ɵfac: i0.ɵɵFactoryDeclaration<DataTableComponent, never>;
1885
- static ɵcmp: i0.ɵɵComponentDeclaration<DataTableComponent, "lib-data-table", never, { "rowData": { "alias": "rowData"; "required": false; }; "expandRowData": { "alias": "expandRowData"; "required": false; }; "collapseRowData": { "alias": "collapseRowData"; "required": false; }; "rowValidation": { "alias": "rowValidation"; "required": false; }; "isTimeSearchAvailable": { "alias": "isTimeSearchAvailable"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "tableId": { "alias": "tableId"; "required": false; }; "options": { "alias": "options"; "required": false; }; "validateService": { "alias": "validateService"; "required": false; }; "rowsToggled": { "alias": "rowsToggled"; "required": false; }; "tableRefreshCount": { "alias": "tableRefreshCount"; "required": false; }; "view": { "alias": "view"; "required": false; }; "serverSideDataSource": { "alias": "serverSideDataSource"; "required": false; }; "allowDownload": { "alias": "allowDownload"; "required": false; }; "startCount": { "alias": "startCount"; "required": false; }; "endCount": { "alias": "endCount"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "emptyMsg": { "alias": "emptyMsg"; "required": false; }; "filterApplied": { "alias": "filterApplied"; "required": false; }; "menuItems": { "alias": "menuItems"; "required": false; }; "headerActions": { "alias": "headerActions"; "required": false; }; "noItemsClass": { "alias": "noItemsClass"; "required": false; }; "entityTypeName": { "alias": "entityTypeName"; "required": false; }; "showNoItemsAdd": { "alias": "showNoItemsAdd"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "noItemsImage": { "alias": "noItemsImage"; "required": false; }; "rowHeight": { "alias": "rowHeight"; "required": false; }; "filterName": { "alias": "filterName"; "required": false; }; "filterColumn": { "alias": "filterColumn"; "required": false; }; "columnDefinitions": { "alias": "columnDefinitions"; "required": false; }; "refreshCount": { "alias": "refreshCount"; "required": false; }; }, { "actionRequested": "actionRequested"; "gridReady": "gridReady"; "dragStart": "dragStart"; "dragLeave": "dragLeave"; "pageChanged": "pageChanged"; }, never, never, false, never>;
1957
+ static ɵcmp: i0.ɵɵComponentDeclaration<DataTableComponent, "lib-data-table", never, { "rowData": { "alias": "rowData"; "required": false; }; "expandRowData": { "alias": "expandRowData"; "required": false; }; "collapseRowData": { "alias": "collapseRowData"; "required": false; }; "rowValidation": { "alias": "rowValidation"; "required": false; }; "isTimeSearchAvailable": { "alias": "isTimeSearchAvailable"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "tableId": { "alias": "tableId"; "required": false; }; "options": { "alias": "options"; "required": false; }; "validateService": { "alias": "validateService"; "required": false; }; "rowsToggled": { "alias": "rowsToggled"; "required": false; }; "tableRefreshCount": { "alias": "tableRefreshCount"; "required": false; }; "view": { "alias": "view"; "required": false; }; "serverSideDataSource": { "alias": "serverSideDataSource"; "required": false; }; "allowDownload": { "alias": "allowDownload"; "required": false; }; "startCount": { "alias": "startCount"; "required": false; }; "endCount": { "alias": "endCount"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "emptyMsg": { "alias": "emptyMsg"; "required": false; }; "filterApplied": { "alias": "filterApplied"; "required": false; }; "menuItems": { "alias": "menuItems"; "required": false; }; "headerActions": { "alias": "headerActions"; "required": false; }; "noItemsClass": { "alias": "noItemsClass"; "required": false; }; "entityTypeName": { "alias": "entityTypeName"; "required": false; }; "showNoItemsAdd": { "alias": "showNoItemsAdd"; "required": false; }; "noItemsReadonly": { "alias": "noItemsReadonly"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "noItemsImage": { "alias": "noItemsImage"; "required": false; }; "rowHeight": { "alias": "rowHeight"; "required": false; }; "filterName": { "alias": "filterName"; "required": false; }; "filterColumn": { "alias": "filterColumn"; "required": false; }; "columnDefinitions": { "alias": "columnDefinitions"; "required": false; }; "refreshCount": { "alias": "refreshCount"; "required": false; }; }, { "actionRequested": "actionRequested"; "gridReady": "gridReady"; "dragStart": "dragStart"; "dragLeave": "dragLeave"; "pageChanged": "pageChanged"; }, never, never, false, never>;
1886
1958
  }
1887
1959
 
1888
1960
  declare class TableCellSelectComponent implements ICellRendererAngularComp {
@@ -2239,6 +2311,7 @@ declare class NoItemsComponent implements OnChanges {
2239
2311
  hasAdd: boolean;
2240
2312
  hiddenResults: boolean;
2241
2313
  isLoading: boolean;
2314
+ readonly: boolean;
2242
2315
  background: any;
2243
2316
  clickEmit: EventEmitter<any>;
2244
2317
  refresh: EventEmitter<any>;
@@ -2246,7 +2319,7 @@ declare class NoItemsComponent implements OnChanges {
2246
2319
  ngOnChanges(): void;
2247
2320
  iconClick(): void;
2248
2321
  static ɵfac: i0.ɵɵFactoryDeclaration<NoItemsComponent, never>;
2249
- static ɵcmp: i0.ɵɵComponentDeclaration<NoItemsComponent, "lib-no-items", never, { "image": { "alias": "image"; "required": false; }; "typeName": { "alias": "typeName"; "required": false; }; "isEmpty": { "alias": "isEmpty"; "required": false; }; "hasAdd": { "alias": "hasAdd"; "required": false; }; "hiddenResults": { "alias": "hiddenResults"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; }, { "clickEmit": "clickEmit"; "refresh": "refresh"; }, never, never, false, never>;
2322
+ static ɵcmp: i0.ɵɵComponentDeclaration<NoItemsComponent, "lib-no-items", never, { "image": { "alias": "image"; "required": false; }; "typeName": { "alias": "typeName"; "required": false; }; "isEmpty": { "alias": "isEmpty"; "required": false; }; "hasAdd": { "alias": "hasAdd"; "required": false; }; "hiddenResults": { "alias": "hiddenResults"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; }, { "clickEmit": "clickEmit"; "refresh": "refresh"; }, never, never, false, never>;
2250
2323
  }
2251
2324
 
2252
2325
  declare class SideModalComponent implements OnInit {
@@ -2273,6 +2346,8 @@ declare class FormHeaderComponent implements OnChanges {
2273
2346
  moreActionsText: string;
2274
2347
  showHeaderToggle: boolean;
2275
2348
  showHeaderButton: boolean;
2349
+ /** Hide save / more-actions / multi-save and retitle Edit→View for global admin_readonly without write grants. */
2350
+ strictReadonlyUi: boolean;
2276
2351
  multiActions: any[];
2277
2352
  formViewChange: EventEmitter<string>;
2278
2353
  actionRequested: EventEmitter<any>;
@@ -2286,6 +2361,7 @@ declare class FormHeaderComponent implements OnChanges {
2286
2361
  showActionsDropDown: boolean;
2287
2362
  constructor();
2288
2363
  ngOnChanges(changes: SimpleChanges): void;
2364
+ get displayTitle(): string;
2289
2365
  get hasMoreActions(): boolean;
2290
2366
  actionClicked(event: any): void;
2291
2367
  requestAction(action: any): void;
@@ -2294,7 +2370,7 @@ declare class FormHeaderComponent implements OnChanges {
2294
2370
  get hasMultiActions(): boolean;
2295
2371
  get headerBadges(): any;
2296
2372
  static ɵfac: i0.ɵɵFactoryDeclaration<FormHeaderComponent, never>;
2297
- static ɵcmp: i0.ɵɵComponentDeclaration<FormHeaderComponent, "lib-form-header", never, { "data": { "alias": "data"; "required": false; }; "badges": { "alias": "badges"; "required": false; }; "title": { "alias": "title"; "required": false; }; "moreActions": { "alias": "moreActions"; "required": false; }; "formView": { "alias": "formView"; "required": false; }; "saveDisabled": { "alias": "saveDisabled"; "required": false; }; "saveTooltip": { "alias": "saveTooltip"; "required": false; }; "actionButtonText": { "alias": "actionButtonText"; "required": false; }; "moreActionsText": { "alias": "moreActionsText"; "required": false; }; "showHeaderToggle": { "alias": "showHeaderToggle"; "required": false; }; "showHeaderButton": { "alias": "showHeaderButton"; "required": false; }; "multiActions": { "alias": "multiActions"; "required": false; }; }, { "formViewChange": "formViewChange"; "actionRequested": "actionRequested"; "multiActionRequested": "multiActionRequested"; }, never, never, false, never>;
2373
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormHeaderComponent, "lib-form-header", never, { "data": { "alias": "data"; "required": false; }; "badges": { "alias": "badges"; "required": false; }; "title": { "alias": "title"; "required": false; }; "moreActions": { "alias": "moreActions"; "required": false; }; "formView": { "alias": "formView"; "required": false; }; "saveDisabled": { "alias": "saveDisabled"; "required": false; }; "saveTooltip": { "alias": "saveTooltip"; "required": false; }; "actionButtonText": { "alias": "actionButtonText"; "required": false; }; "moreActionsText": { "alias": "moreActionsText"; "required": false; }; "showHeaderToggle": { "alias": "showHeaderToggle"; "required": false; }; "showHeaderButton": { "alias": "showHeaderButton"; "required": false; }; "strictReadonlyUi": { "alias": "strictReadonlyUi"; "required": false; }; "multiActions": { "alias": "multiActions"; "required": false; }; }, { "formViewChange": "formViewChange"; "actionRequested": "actionRequested"; "multiActionRequested": "multiActionRequested"; }, never, never, false, never>;
2298
2374
  }
2299
2375
 
2300
2376
  declare class FormFieldContainerComponent {
@@ -2615,6 +2691,8 @@ declare class FilterSelectComponent implements ControlValueAccessor, OnDestroy {
2615
2691
  matSelect?: MatSelect;
2616
2692
  optionTemplate?: FilterSelectOptionTemplateDirective;
2617
2693
  triggerTemplate?: FilterSelectTriggerTemplateDirective;
2694
+ /** Combined with ControlValueAccessor disabled state (e.g. disable mat-select when parent form is read-only). */
2695
+ disableControl: boolean;
2618
2696
  value: any;
2619
2697
  disabled: boolean;
2620
2698
  filterText: string;
@@ -2646,9 +2724,10 @@ declare class FilterSelectComponent implements ControlValueAccessor, OnDestroy {
2646
2724
  get isValueEmpty(): boolean;
2647
2725
  getOptionLabel(option: any): any;
2648
2726
  getOptionValue(option: any): any;
2727
+ get selectDisabled(): boolean;
2649
2728
  trackByOption: (_: number, option: any) => any;
2650
2729
  static ɵfac: i0.ɵɵFactoryDeclaration<FilterSelectComponent, never>;
2651
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterSelectComponent, "lib-filter-select", never, { "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "options": { "alias": "options"; "required": false; }; "optionLabel": { "alias": "optionLabel"; "required": false; }; "optionValue": { "alias": "optionValue"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "localFilter": { "alias": "localFilter"; "required": false; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; }; "showClear": { "alias": "showClear"; "required": false; }; }, { "selectionChange": "selectionChange"; "filterChange": "filterChange"; }, ["optionTemplate", "triggerTemplate"], never, false, never>;
2730
+ static ɵcmp: i0.ɵɵComponentDeclaration<FilterSelectComponent, "lib-filter-select", never, { "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "options": { "alias": "options"; "required": false; }; "optionLabel": { "alias": "optionLabel"; "required": false; }; "optionValue": { "alias": "optionValue"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "localFilter": { "alias": "localFilter"; "required": false; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; }; "showClear": { "alias": "showClear"; "required": false; }; "disableControl": { "alias": "disableControl"; "required": false; }; }, { "selectionChange": "selectionChange"; "filterChange": "filterChange"; }, ["optionTemplate", "triggerTemplate"], never, false, never>;
2652
2731
  }
2653
2732
 
2654
2733
  declare class OverridesComponent implements OnInit {
@@ -3129,6 +3208,8 @@ declare class NetworkVisualizerComponent extends VisualizerServiceClass implemen
3129
3208
 
3130
3209
  declare class CustomTagsComponent implements OnInit, OnChanges {
3131
3210
  tags: any;
3211
+ /** View-only: no add/remove/edit; show name/value as text (e.g. global admin_readonly). */
3212
+ readOnly: boolean;
3132
3213
  tagsChange: EventEmitter<any>;
3133
3214
  tagsArray: any;
3134
3215
  newTagName: string;
@@ -3159,7 +3240,7 @@ declare class CustomTagsComponent implements OnInit, OnChanges {
3159
3240
  tagValueChanged(tag: any, event?: any): void;
3160
3241
  validate(event?: any): void;
3161
3242
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomTagsComponent, never>;
3162
- static ɵcmp: i0.ɵɵComponentDeclaration<CustomTagsComponent, "lib-custom-tags", never, { "tags": { "alias": "tags"; "required": false; }; }, { "tagsChange": "tagsChange"; }, never, never, false, never>;
3243
+ static ɵcmp: i0.ɵɵComponentDeclaration<CustomTagsComponent, "lib-custom-tags", never, { "tags": { "alias": "tags"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; }, { "tagsChange": "tagsChange"; }, never, never, false, never>;
3163
3244
  }
3164
3245
 
3165
3246
  declare class ServicePolicy {
@@ -7701,6 +7782,6 @@ declare const ZAC_VERSION: {
7701
7782
  version: string;
7702
7783
  };
7703
7784
 
7704
- export { APISessionFormComponent, APISessionsPageComponent, ApiSessionsPageService, AttributesComponent, AuthPoliciesPageComponent, AuthPoliciesPageService, AuthPolicyFormComponent, AuthPolicyFormService, AuthService, BooleanToggleInputComponent, CallbackComponent, CardListComponent, CertificateAuthoritiesPageComponent, CertificateAuthoritiesPageService, CertificateAuthorityFormComponent, CertificateAuthorityFormService, CheckboxListInputComponent, ChipsInputComponent, ConfigEditorComponent, ConfigTypeFormComponent, ConfigTypesPageComponent, ConfigurationFormComponent, ConfigurationService, ConfigurationsPageComponent, CsvDownloadService, DEACTIVATE_GUARD, DEFAULT_APP_CONFIG, DataTableFilterService, DeactivateGuardService, EDGE_ROUTER_EXTENSION_SERVICE, EDGE_ROUTER_POLICY_EXTENSION_SERVICE, EdgeRouter, EdgeRouterFormComponent, EdgeRouterFormService, EdgeRouterPoliciesPageComponent, EdgeRouterPoliciesPageService, EdgeRouterPolicyFormComponent, EdgeRouterPolicyFormService, EdgeRoutersPageComponent, EdgeRoutersPageService, Entity, ExtendableComponent, ExtensionsNoopService, FilterSelectComponent, FilterSelectOptionTemplateDirective, FilterSelectTriggerTemplateDirective, FormFieldContainerComponent, FormFieldToggleComponent, FormHeaderComponent, GeolocateComponent, GrowlerComponent, GrowlerModel, GrowlerModule, GrowlerService, HAControllerService, HaStatusIndicatorComponent, HeaderBarComponent, 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, NoopLoginService, NoopTabInterceptorService, NumberInputComponent, ObjectComponent, OpenZitiConsoleLibModule, PasswordInputComponent, PostureCheckFormComponent, PostureChecksPageComponent, PostureChecksPageService, PreviewListComponent, ProfileComponent, ProgressMeterComponent, ProgressMeterStep, ProgressWizardComponent, ProgressWizardStep, ProjectableForm, ProtocolAddressPortInputComponent, QuickAddComponent, 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, SettingsComponent, SettingsService, SettingsServiceClass, SideModalComponent, SideNavbarComponent, SideNavigatorComponent, SimpleServiceComponent, StringInputComponent, TabNameService, TagSelectorComponent, TerminatorFormComponent, TerminatorFormService, TerminatorsPageComponent, TerminatorsPageService, TextListInputComponent, TransitRouterFormComponent, TransitRouterFormService, TransitRoutersPageComponent, TransitRoutersPageService, ValidationService, VerifyCertificateComponent, VisualizerServiceClass, ZAC_LOGIN_SERVICE, ZAC_VERSION, ZITI_DATA_SERVICE, ZITI_DOMAIN_CONTROLLER, ZITI_NAVIGATOR, ZITI_TAB_OVERRIDES, ZITI_URLS, ZacRoutingModule, ZitiControllerDataService, ZitiDataService, playerFactory };
7785
+ export { APISessionFormComponent, APISessionsPageComponent, ApiSessionsPageService, AttributesComponent, AuthPoliciesPageComponent, AuthPoliciesPageService, AuthPolicyFormComponent, AuthPolicyFormService, AuthService, BooleanToggleInputComponent, CallbackComponent, CardListComponent, CertificateAuthoritiesPageComponent, CertificateAuthoritiesPageService, CertificateAuthorityFormComponent, CertificateAuthorityFormService, CheckboxListInputComponent, ChipsInputComponent, ConfigEditorComponent, ConfigTypeFormComponent, ConfigTypesPageComponent, ConfigurationFormComponent, ConfigurationService, ConfigurationsPageComponent, CsvDownloadService, DEACTIVATE_GUARD, DEFAULT_APP_CONFIG, DataTableFilterService, DeactivateGuardService, EDGE_ROUTER_EXTENSION_SERVICE, EDGE_ROUTER_POLICY_EXTENSION_SERVICE, EdgeRouter, EdgeRouterFormComponent, EdgeRouterFormService, EdgeRouterPoliciesPageComponent, EdgeRouterPoliciesPageService, EdgeRouterPolicyFormComponent, EdgeRouterPolicyFormService, EdgeRoutersPageComponent, EdgeRoutersPageService, Entity, ExtendableComponent, ExtensionsNoopService, FilterSelectComponent, FilterSelectOptionTemplateDirective, FilterSelectTriggerTemplateDirective, FormFieldContainerComponent, FormFieldToggleComponent, FormHeaderComponent, GeolocateComponent, GrowlerComponent, GrowlerModel, GrowlerModule, GrowlerService, HAControllerService, HaStatusIndicatorComponent, HeaderBarComponent, 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, ManagementPermissionsService, NetworkVisualizerComponent, NodeDataService, NoopLoginService, NoopTabInterceptorService, NumberInputComponent, ObjectComponent, OpenZitiConsoleLibModule, PasswordInputComponent, PostureCheckFormComponent, PostureChecksPageComponent, PostureChecksPageService, PreviewListComponent, ProfileComponent, ProgressMeterComponent, ProgressMeterStep, ProgressWizardComponent, ProgressWizardStep, ProjectableForm, ProtocolAddressPortInputComponent, QuickAddComponent, ResetEnrollmentService, SAVE_DENIED_BY_PERMISSION_TOOLTIP, 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, SettingsComponent, SettingsService, SettingsServiceClass, SideModalComponent, SideNavbarComponent, SideNavigatorComponent, SimpleServiceComponent, StringInputComponent, TabNameService, TagSelectorComponent, TerminatorFormComponent, TerminatorFormService, TerminatorsPageComponent, TerminatorsPageService, TextListInputComponent, TransitRouterFormComponent, TransitRouterFormService, TransitRoutersPageComponent, TransitRoutersPageService, ValidationService, VerifyCertificateComponent, VisualizerServiceClass, ZAC_LOGIN_SERVICE, ZAC_VERSION, ZITI_DATA_SERVICE, ZITI_DOMAIN_CONTROLLER, ZITI_NAVIGATOR, ZITI_TAB_OVERRIDES, ZITI_URLS, ZacRoutingModule, ZitiControllerDataService, ZitiDataService, playerFactory };
7705
7786
  export type { CanComponentDeactivate, ExtensionEvent, ExtensionEventType, ExtensionService, FilterObj, HAClusterStatus, HAController, TabInterceptorService, ZitiDomainControllerService, ZitiSessionData };
7706
7787
  //# sourceMappingURL=index.d.ts.map