@acorex-platform/module-security-management-client 0.0.15 → 0.0.18

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.
@@ -904,6 +904,10 @@ class AXMSecurityManagementModule {
904
904
  key: 'Session:Terminate',
905
905
  command: () => import('./acorex-platform-module-security-management-client-terminate-session.command-CKq-4Z4O.mjs').then((c) => c.AXPTerminateSessionCommand),
906
906
  },
907
+ {
908
+ key: 'SecurityManagement:User:SendPasswordResetEmail',
909
+ command: () => import('./acorex-platform-module-security-management-client-send-password-reset-email.command-DzfUvFk2.mjs').then((c) => c.AXPSendPasswordResetEmailCommand),
910
+ },
907
911
  ]),
908
912
  ], imports: [AXMPermissionsModule] }); }
909
913
  }
@@ -984,6 +988,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
984
988
  key: 'Session:Terminate',
985
989
  command: () => import('./acorex-platform-module-security-management-client-terminate-session.command-CKq-4Z4O.mjs').then((c) => c.AXPTerminateSessionCommand),
986
990
  },
991
+ {
992
+ key: 'SecurityManagement:User:SendPasswordResetEmail',
993
+ command: () => import('./acorex-platform-module-security-management-client-send-password-reset-email.command-DzfUvFk2.mjs').then((c) => c.AXPSendPasswordResetEmailCommand),
994
+ },
987
995
  ]),
988
996
  ],
989
997
  }]
@@ -1355,7 +1363,7 @@ class AXPPermissionsEditorComponent extends AXBasePageComponent {
1355
1363
  this.close(permissions);
1356
1364
  }
1357
1365
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPPermissionsEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1358
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPPermissionsEditorComponent, isStandalone: true, selector: "axm-permissions-editor", inputs: { initialPermissions: { classPropertyName: "initialPermissions", publicName: "initialPermissions", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { permissionsChanged: "permissionsChanged", permissionsSelected: "permissionsSelected" }, host: { properties: { "attr.aria-busy": "isEditorLoading() ? \"true\" : null" }, classAttribute: "axm-permissions-editor flex h-full max-h-[75vh] min-h-0 flex-col overflow-hidden" }, usesInheritance: true, ngImport: i0, template: "@if (isEditorLoading()) {\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n <div class=\"__groups p-4 w-2/5\" aria-hidden=\"true\">\n <div class=\"flex flex-col gap-3 h-full\">\n @for (widthClass of groupSkeletonPlaceholders(); track $index) {\n <div class=\"flex items-center py-2\">\n <div class=\"h-5 rounded-md overflow-hidden\" [class]=\"widthClass\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div\n class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\"\n aria-hidden=\"true\"\n >\n <div class=\"__header p-4 border-b border-lightest\">\n <div class=\"h-6 w-48 rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__content flex flex-col gap-1 p-4\">\n @for (group of permissionGroupSkeletonPlaceholders(); track $index) {\n <div class=\"__skeleton-permission-group\">\n <div class=\"flex items-center gap-2 py-1\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-40 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__children p-2 mt-1 ms-1\">\n @for (\n childIndex of childSkeletonPlaceholders(group.childCount);\n track childIndex\n ) {\n <div class=\"flex items-center gap-2 py-1 ps-2\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-32 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__search px-4 pt-4 pb-3 border-b border-border-lightest\">\n <ax-search-box\n [axAutoFocus]\n [ngModel]=\"searchQuery()\"\n (onValueChanged)=\"handleSearchChanged($event)\"\n [placeholder]=\"\n '@security-management:permissions-feature.components.permissions-editor.search.placeholder'\n | translate\n | async\n \"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n @if (isSearchActive()) {\n <div\n class=\"__permissions __permissions--search flex min-h-0 flex-1 flex-col overflow-hidden\"\n >\n @if (hasSearchResults()) {\n <div class=\"__search-results flex flex-col\">\n @for (result of searchResultsGrouped(); track result.group.name) {\n <section class=\"__search-group\">\n <div\n class=\"__header shrink-0 p-4 border-b border-border-lightest\"\n >\n <span class=\"h6\">{{\n result.group.title | translate | async\n }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: result.items }\n \"\n ></ng-container>\n </ul>\n </div>\n </section>\n }\n </div>\n } @else {\n <div class=\"__empty flex flex-1 items-center justify-center p-8\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.title'\n \"\n [description]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.description'\n \"\n >\n </axp-state-message>\n </div>\n }\n </div>\n } @else {\n <div class=\"__groups w-2/5 p-4\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"h-full\">\n @for (group of groupsWithBadge(); track $index) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [text]=\"(group.title | translate | async)!\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n @if (badgeToNumber(group.badge) > 0) {\n <ax-suffix>\n <ax-badge color=\"primary\" [text]=\"group.badge\"></ax-badge>\n </ax-suffix>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n\n <div class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\">\n <div class=\"__header shrink-0 p-4 border-b border-border-lightest\">\n <span>{{ selectedGroup()?.title! | translate | async }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"recursiveList; context: { $implicit: items() }\"\n ></ng-container>\n </ul>\n </div>\n </div>\n }\n </div>\n}\n\n@if (isShowActions()) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancelClick()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.select.title' | translate | async\"\n (onClick)=\"handleSelectClick()\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-check\"></i>\n </ax-prefix>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n}\n\n<ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"__item py-1 ps-2\">\n <ax-check-box\n [ngModel]=\"item.isSelected\"\n [readonly]=\"isReadOnlyMode()\"\n (onValueChanged)=\"onPermissionToggle(item, $event)\"\n >\n <ax-label>\n {{ item.title | translate | async }}\n @if (item.description) {\n <i\n class=\"ps-2 text-xs fa-light fa-circle-info\"\n [title]=\"(item.description | translate | async) ?? ''\"\n ></i>\n }\n </ax-label>\n </ax-check-box>\n\n @if (item.children && item.children.length > 0) {\n <ul class=\"__children p-2 mt-1 ms-1\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: item.children }\n \"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n", styles: ["@layer properties;.axm-permissions-editor{display:flex;height:100%;max-height:75vh;min-height:0;flex-direction:column;overflow:hidden}.axm-permissions-editor .__search{flex-shrink:0}.axm-permissions-editor .__body{display:flex;min-height:0;flex:1;overflow:hidden}.axm-permissions-editor .__groups{min-height:0;overflow-y:auto}.axm-permissions-editor .__groups .__tabs{height:100%}.axm-permissions-editor .__permissions{display:flex;min-height:0;flex-direction:column;overflow:hidden}.axm-permissions-editor .__permissions .__header{flex-shrink:0}.axm-permissions-editor .__permissions .__header .__title{font-size:1rem;font-weight:500;line-height:1rem}.axm-permissions-editor .__permissions .__content{min-height:0;flex:1;overflow-y:auto}.axm-permissions-editor .__permissions .__content .__list{width:100%}.axm-permissions-editor .__permissions .__content .__list .__item .__children{margin-left:calc(var(--spacing, .25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:1px;--tw-border-style: dashed;border-style:dashed;border-color:rgba(var(--ax-sys-color-lighter-surface))}.axm-permissions-editor .__permissions .__permissions--search{width:100%}.axm-permissions-editor .__permissions .__permissions--search .__search-results{min-height:0;width:100%;flex:1;overflow-y:auto}.axm-permissions-editor .__permissions .__permissions--search .__search-group:not(:last-child){border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type:
1366
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPPermissionsEditorComponent, isStandalone: true, selector: "axm-permissions-editor", inputs: { initialPermissions: { classPropertyName: "initialPermissions", publicName: "initialPermissions", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { permissionsChanged: "permissionsChanged", permissionsSelected: "permissionsSelected" }, host: { properties: { "attr.aria-busy": "isEditorLoading() ? \"true\" : null" }, classAttribute: "axm-permissions-editor flex h-full max-h-[75vh] min-h-0 flex-col overflow-hidden" }, usesInheritance: true, ngImport: i0, template: "@if (isEditorLoading()) {\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n <div class=\"__groups p-4 w-2/5\" aria-hidden=\"true\">\n <div class=\"flex flex-col gap-3 h-full\">\n @for (widthClass of groupSkeletonPlaceholders(); track $index) {\n <div class=\"flex items-center py-2\">\n <div class=\"h-5 rounded-md overflow-hidden\" [class]=\"widthClass\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div\n class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\"\n aria-hidden=\"true\"\n >\n <div class=\"__header p-4 border-b border-lightest\">\n <div class=\"h-6 w-48 rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__content flex flex-col gap-1 p-4\">\n @for (group of permissionGroupSkeletonPlaceholders(); track $index) {\n <div class=\"__skeleton-permission-group\">\n <div class=\"flex items-center gap-2 py-1\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-40 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__children p-2 mt-1 ms-1\">\n @for (\n childIndex of childSkeletonPlaceholders(group.childCount);\n track childIndex\n ) {\n <div class=\"flex items-center gap-2 py-1 ps-2\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-32 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__search px-4 pt-4 pb-3 border-b border-border-lightest\">\n <ax-search-box\n [axAutoFocus]\n [ngModel]=\"searchQuery()\"\n (onValueChanged)=\"handleSearchChanged($event)\"\n [placeholder]=\"\n '@security-management:permissions-feature.components.permissions-editor.search.placeholder'\n | translate\n | async\n \"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n @if (isSearchActive()) {\n <div\n class=\"__permissions __permissions--search flex min-h-0 flex-1 flex-col overflow-hidden\"\n >\n @if (hasSearchResults()) {\n <div class=\"__search-results flex flex-col\">\n @for (result of searchResultsGrouped(); track result.group.name) {\n <section class=\"__search-group\">\n <div\n class=\"__header shrink-0 p-4 border-b border-border-lightest\"\n >\n <span class=\"h6\">{{\n result.group.title | translate | async\n }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: result.items }\n \"\n ></ng-container>\n </ul>\n </div>\n </section>\n }\n </div>\n } @else {\n <div class=\"__empty flex flex-1 items-center justify-center p-8\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.title'\n \"\n [description]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.description'\n \"\n >\n </axp-state-message>\n </div>\n }\n </div>\n } @else {\n <div class=\"__groups w-2/5 p-4\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"h-full\">\n @for (group of groupsWithBadge(); track $index) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [text]=\"(group.title | translate | async)!\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n @if (badgeToNumber(group.badge) > 0) {\n <ax-suffix>\n <ax-badge color=\"primary\" [text]=\"group.badge\"></ax-badge>\n </ax-suffix>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n\n <div class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\">\n <div class=\"__header shrink-0 p-4 border-b border-border-lightest\">\n <span>{{ selectedGroup()?.title! | translate | async }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"recursiveList; context: { $implicit: items() }\"\n ></ng-container>\n </ul>\n </div>\n </div>\n }\n </div>\n}\n\n@if (isShowActions()) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancelClick()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.select.title' | translate | async\"\n (onClick)=\"handleSelectClick()\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-check\"></i>\n </ax-prefix>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n}\n\n<ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"__item py-1 ps-2\">\n <ax-check-box\n [ngModel]=\"item.isSelected\"\n [readonly]=\"isReadOnlyMode()\"\n (onValueChanged)=\"onPermissionToggle(item, $event)\"\n >\n <ax-label>\n {{ item.title | translate | async }}\n @if (item.description) {\n <i\n class=\"ps-2 text-xs fa-light fa-circle-info\"\n [title]=\"(item.description | translate | async) ?? ''\"\n ></i>\n }\n </ax-label>\n </ax-check-box>\n\n @if (item.children && item.children.length > 0) {\n <ul class=\"__children p-2 mt-1 ms-1\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: item.children }\n \"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n", styles: ["@layer properties;.axm-permissions-editor{display:flex;height:100%;max-height:75vh;min-height:0;flex-direction:column;overflow:hidden}.axm-permissions-editor .__search{flex-shrink:0}.axm-permissions-editor .__body{display:flex;min-height:0;flex:1;overflow:hidden}.axm-permissions-editor .__groups{min-height:0;overflow-y:auto}.axm-permissions-editor .__groups .__tabs{height:100%}.axm-permissions-editor .__permissions{display:flex;min-height:0;flex-direction:column;overflow:hidden}.axm-permissions-editor .__permissions .__header{flex-shrink:0}.axm-permissions-editor .__permissions .__header .__title{font-size:1rem;font-weight:500;line-height:1rem}.axm-permissions-editor .__permissions .__content{min-height:0;flex:1;overflow-y:auto}.axm-permissions-editor .__permissions .__content .__list{width:100%}.axm-permissions-editor .__permissions .__content .__list .__item .__children{margin-left:calc(var(--spacing, .25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:1px;--tw-border-style: dashed;border-style:dashed;border-color:rgba(var(--ax-sys-color-border-lighter-surface))}.axm-permissions-editor .__permissions .__permissions--search{width:100%}.axm-permissions-editor .__permissions .__permissions--search .__search-results{min-height:0;width:100%;flex:1;overflow-y:auto}.axm-permissions-editor .__permissions .__permissions--search .__search-group:not(:last-child){border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type:
1359
1367
  // Angular
1360
1368
  CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i3.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type:
1361
1369
  // ACoreX
@@ -1386,7 +1394,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1386
1394
  ], encapsulation: ViewEncapsulation.None, host: {
1387
1395
  class: 'axm-permissions-editor flex h-full max-h-[75vh] min-h-0 flex-col overflow-hidden',
1388
1396
  '[attr.aria-busy]': 'isEditorLoading() ? "true" : null',
1389
- }, template: "@if (isEditorLoading()) {\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n <div class=\"__groups p-4 w-2/5\" aria-hidden=\"true\">\n <div class=\"flex flex-col gap-3 h-full\">\n @for (widthClass of groupSkeletonPlaceholders(); track $index) {\n <div class=\"flex items-center py-2\">\n <div class=\"h-5 rounded-md overflow-hidden\" [class]=\"widthClass\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div\n class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\"\n aria-hidden=\"true\"\n >\n <div class=\"__header p-4 border-b border-lightest\">\n <div class=\"h-6 w-48 rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__content flex flex-col gap-1 p-4\">\n @for (group of permissionGroupSkeletonPlaceholders(); track $index) {\n <div class=\"__skeleton-permission-group\">\n <div class=\"flex items-center gap-2 py-1\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-40 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__children p-2 mt-1 ms-1\">\n @for (\n childIndex of childSkeletonPlaceholders(group.childCount);\n track childIndex\n ) {\n <div class=\"flex items-center gap-2 py-1 ps-2\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-32 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__search px-4 pt-4 pb-3 border-b border-border-lightest\">\n <ax-search-box\n [axAutoFocus]\n [ngModel]=\"searchQuery()\"\n (onValueChanged)=\"handleSearchChanged($event)\"\n [placeholder]=\"\n '@security-management:permissions-feature.components.permissions-editor.search.placeholder'\n | translate\n | async\n \"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n @if (isSearchActive()) {\n <div\n class=\"__permissions __permissions--search flex min-h-0 flex-1 flex-col overflow-hidden\"\n >\n @if (hasSearchResults()) {\n <div class=\"__search-results flex flex-col\">\n @for (result of searchResultsGrouped(); track result.group.name) {\n <section class=\"__search-group\">\n <div\n class=\"__header shrink-0 p-4 border-b border-border-lightest\"\n >\n <span class=\"h6\">{{\n result.group.title | translate | async\n }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: result.items }\n \"\n ></ng-container>\n </ul>\n </div>\n </section>\n }\n </div>\n } @else {\n <div class=\"__empty flex flex-1 items-center justify-center p-8\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.title'\n \"\n [description]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.description'\n \"\n >\n </axp-state-message>\n </div>\n }\n </div>\n } @else {\n <div class=\"__groups w-2/5 p-4\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"h-full\">\n @for (group of groupsWithBadge(); track $index) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [text]=\"(group.title | translate | async)!\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n @if (badgeToNumber(group.badge) > 0) {\n <ax-suffix>\n <ax-badge color=\"primary\" [text]=\"group.badge\"></ax-badge>\n </ax-suffix>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n\n <div class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\">\n <div class=\"__header shrink-0 p-4 border-b border-border-lightest\">\n <span>{{ selectedGroup()?.title! | translate | async }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"recursiveList; context: { $implicit: items() }\"\n ></ng-container>\n </ul>\n </div>\n </div>\n }\n </div>\n}\n\n@if (isShowActions()) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancelClick()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.select.title' | translate | async\"\n (onClick)=\"handleSelectClick()\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-check\"></i>\n </ax-prefix>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n}\n\n<ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"__item py-1 ps-2\">\n <ax-check-box\n [ngModel]=\"item.isSelected\"\n [readonly]=\"isReadOnlyMode()\"\n (onValueChanged)=\"onPermissionToggle(item, $event)\"\n >\n <ax-label>\n {{ item.title | translate | async }}\n @if (item.description) {\n <i\n class=\"ps-2 text-xs fa-light fa-circle-info\"\n [title]=\"(item.description | translate | async) ?? ''\"\n ></i>\n }\n </ax-label>\n </ax-check-box>\n\n @if (item.children && item.children.length > 0) {\n <ul class=\"__children p-2 mt-1 ms-1\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: item.children }\n \"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n", styles: ["@layer properties;.axm-permissions-editor{display:flex;height:100%;max-height:75vh;min-height:0;flex-direction:column;overflow:hidden}.axm-permissions-editor .__search{flex-shrink:0}.axm-permissions-editor .__body{display:flex;min-height:0;flex:1;overflow:hidden}.axm-permissions-editor .__groups{min-height:0;overflow-y:auto}.axm-permissions-editor .__groups .__tabs{height:100%}.axm-permissions-editor .__permissions{display:flex;min-height:0;flex-direction:column;overflow:hidden}.axm-permissions-editor .__permissions .__header{flex-shrink:0}.axm-permissions-editor .__permissions .__header .__title{font-size:1rem;font-weight:500;line-height:1rem}.axm-permissions-editor .__permissions .__content{min-height:0;flex:1;overflow-y:auto}.axm-permissions-editor .__permissions .__content .__list{width:100%}.axm-permissions-editor .__permissions .__content .__list .__item .__children{margin-left:calc(var(--spacing, .25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:1px;--tw-border-style: dashed;border-style:dashed;border-color:rgba(var(--ax-sys-color-lighter-surface))}.axm-permissions-editor .__permissions .__permissions--search{width:100%}.axm-permissions-editor .__permissions .__permissions--search .__search-results{min-height:0;width:100%;flex:1;overflow-y:auto}.axm-permissions-editor .__permissions .__permissions--search .__search-group:not(:last-child){border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
1397
+ }, template: "@if (isEditorLoading()) {\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n <div class=\"__groups p-4 w-2/5\" aria-hidden=\"true\">\n <div class=\"flex flex-col gap-3 h-full\">\n @for (widthClass of groupSkeletonPlaceholders(); track $index) {\n <div class=\"flex items-center py-2\">\n <div class=\"h-5 rounded-md overflow-hidden\" [class]=\"widthClass\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div\n class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\"\n aria-hidden=\"true\"\n >\n <div class=\"__header p-4 border-b border-lightest\">\n <div class=\"h-6 w-48 rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__content flex flex-col gap-1 p-4\">\n @for (group of permissionGroupSkeletonPlaceholders(); track $index) {\n <div class=\"__skeleton-permission-group\">\n <div class=\"flex items-center gap-2 py-1\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-40 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n\n <div class=\"__children p-2 mt-1 ms-1\">\n @for (\n childIndex of childSkeletonPlaceholders(group.childCount);\n track childIndex\n ) {\n <div class=\"flex items-center gap-2 py-1 ps-2\">\n <div class=\"h-4 w-4 shrink-0 rounded-sm overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-4 w-32 max-w-full rounded-md overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n <div class=\"h-3 w-3 shrink-0 rounded-full overflow-hidden\">\n <ax-skeleton\n [animated]=\"true\"\n style=\"display: block; width: 100%; height: 100%\"\n ></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__search px-4 pt-4 pb-3 border-b border-border-lightest\">\n <ax-search-box\n [axAutoFocus]\n [ngModel]=\"searchQuery()\"\n (onValueChanged)=\"handleSearchChanged($event)\"\n [placeholder]=\"\n '@security-management:permissions-feature.components.permissions-editor.search.placeholder'\n | translate\n | async\n \"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n\n <div class=\"__body flex min-h-0 flex-1 overflow-hidden\">\n @if (isSearchActive()) {\n <div\n class=\"__permissions __permissions--search flex min-h-0 flex-1 flex-col overflow-hidden\"\n >\n @if (hasSearchResults()) {\n <div class=\"__search-results flex flex-col\">\n @for (result of searchResultsGrouped(); track result.group.name) {\n <section class=\"__search-group\">\n <div\n class=\"__header shrink-0 p-4 border-b border-border-lightest\"\n >\n <span class=\"h6\">{{\n result.group.title | translate | async\n }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: result.items }\n \"\n ></ng-container>\n </ul>\n </div>\n </section>\n }\n </div>\n } @else {\n <div class=\"__empty flex flex-1 items-center justify-center p-8\">\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.title'\n \"\n [description]=\"\n '@security-management:permissions-feature.components.permissions-editor.empty-states.no-results.description'\n \"\n >\n </axp-state-message>\n </div>\n }\n </div>\n } @else {\n <div class=\"__groups w-2/5 p-4\">\n <ax-tabs location=\"start\" look=\"with-line-color\" class=\"h-full\">\n @for (group of groupsWithBadge(); track $index) {\n <ax-tab-item\n [active]=\"group.name === selectedGroup()?.name\"\n [text]=\"(group.title | translate | async)!\"\n (onClick)=\"handleMenuItemClick(group)\"\n >\n @if (badgeToNumber(group.badge) > 0) {\n <ax-suffix>\n <ax-badge color=\"primary\" [text]=\"group.badge\"></ax-badge>\n </ax-suffix>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n\n <div class=\"__permissions flex w-3/5 flex-col overflow-hidden border-s\">\n <div class=\"__header shrink-0 p-4 border-b border-border-lightest\">\n <span>{{ selectedGroup()?.title! | translate | async }}</span>\n </div>\n\n <div class=\"__content flex p-4\">\n <ul class=\"__list\">\n <ng-container\n *ngTemplateOutlet=\"recursiveList; context: { $implicit: items() }\"\n ></ng-container>\n </ul>\n </div>\n </div>\n }\n </div>\n}\n\n@if (isShowActions()) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"'@general:actions.cancel.title' | translate | async\"\n (onClick)=\"handleCancelClick()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@general:actions.select.title' | translate | async\"\n (onClick)=\"handleSelectClick()\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-check\"></i>\n </ax-prefix>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n}\n\n<ng-template #recursiveList let-items>\n @for (item of items; track $index) {\n <li class=\"__item py-1 ps-2\">\n <ax-check-box\n [ngModel]=\"item.isSelected\"\n [readonly]=\"isReadOnlyMode()\"\n (onValueChanged)=\"onPermissionToggle(item, $event)\"\n >\n <ax-label>\n {{ item.title | translate | async }}\n @if (item.description) {\n <i\n class=\"ps-2 text-xs fa-light fa-circle-info\"\n [title]=\"(item.description | translate | async) ?? ''\"\n ></i>\n }\n </ax-label>\n </ax-check-box>\n\n @if (item.children && item.children.length > 0) {\n <ul class=\"__children p-2 mt-1 ms-1\">\n <ng-container\n *ngTemplateOutlet=\"\n recursiveList;\n context: { $implicit: item.children }\n \"\n ></ng-container>\n </ul>\n }\n </li>\n }\n</ng-template>\n", styles: ["@layer properties;.axm-permissions-editor{display:flex;height:100%;max-height:75vh;min-height:0;flex-direction:column;overflow:hidden}.axm-permissions-editor .__search{flex-shrink:0}.axm-permissions-editor .__body{display:flex;min-height:0;flex:1;overflow:hidden}.axm-permissions-editor .__groups{min-height:0;overflow-y:auto}.axm-permissions-editor .__groups .__tabs{height:100%}.axm-permissions-editor .__permissions{display:flex;min-height:0;flex-direction:column;overflow:hidden}.axm-permissions-editor .__permissions .__header{flex-shrink:0}.axm-permissions-editor .__permissions .__header .__title{font-size:1rem;font-weight:500;line-height:1rem}.axm-permissions-editor .__permissions .__content{min-height:0;flex:1;overflow-y:auto}.axm-permissions-editor .__permissions .__content .__list{width:100%}.axm-permissions-editor .__permissions .__content .__list .__item .__children{margin-left:calc(var(--spacing, .25rem) * 2);border-left-style:var(--tw-border-style);border-left-width:1px;--tw-border-style: dashed;border-style:dashed;border-color:rgba(var(--ax-sys-color-border-lighter-surface))}.axm-permissions-editor .__permissions .__permissions--search{width:100%}.axm-permissions-editor .__permissions .__permissions--search .__search-results{min-height:0;width:100%;flex:1;overflow-y:auto}.axm-permissions-editor .__permissions .__permissions--search .__search-group:not(:last-child){border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-lightest-surface))}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid}}}\n/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */\n"] }]
1390
1398
  }], ctorParameters: () => [], propDecorators: { initialPermissions: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialPermissions", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], showActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showActions", required: false }] }], permissionsChanged: [{ type: i0.Output, args: ["permissionsChanged"] }], permissionsSelected: [{ type: i0.Output, args: ["permissionsSelected"] }] } });
1391
1399
 
1392
1400
  var permissionsEditor_component = /*#__PURE__*/Object.freeze({