@acorex-platform/module-security-management-client 0.0.18 → 0.0.24
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/fesm2022/acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-jSDkyMMZ.mjs +2088 -0
- package/fesm2022/acorex-platform-module-security-management-client-acorex-platform-module-security-management-client-jSDkyMMZ.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-security-management-client-contracts.mjs +108 -1576
- package/fesm2022/acorex-platform-module-security-management-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-security-management-client-index-DOHWBEzM.mjs +462 -0
- package/fesm2022/acorex-platform-module-security-management-client-index-DOHWBEzM.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-security-management-client-send-password-reset-email.command-DzfUvFk2.mjs → acorex-platform-module-security-management-client-send-password-reset-email.command-CoQgWdya.mjs} +9 -9
- package/fesm2022/acorex-platform-module-security-management-client-send-password-reset-email.command-CoQgWdya.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-security-management-client-terminate-session.command-CKq-4Z4O.mjs → acorex-platform-module-security-management-client-terminate-session.command-dsU7scOK.mjs} +19 -12
- package/fesm2022/acorex-platform-module-security-management-client-terminate-session.command-dsU7scOK.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-security-management-client.mjs +1 -1712
- package/fesm2022/acorex-platform-module-security-management-client.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-module-security-management-client-contracts.d.ts +163 -34
- package/types/acorex-platform-module-security-management-client.d.ts +139 -35
- package/fesm2022/acorex-platform-module-security-management-client-send-password-reset-email.command-DzfUvFk2.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-security-management-client-terminate-session.command-CKq-4Z4O.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-security-management-client.mjs","sources":["../../../../libs/modules/security-management/client/src/lib/features/device-sessions/services/device-sessions.service.ts","../../../../libs/modules/security-management/client/src/lib/manifest.ts","../../../../libs/modules/security-management/client/src/lib/entity.provider.ts","../../../../libs/modules/security-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget.config.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/widget-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions.module.ts","../../../../libs/modules/security-management/client/src/lib/features/security-evaluator-scope.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/datasources/users.datasource.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-access-state.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-effective-state.provider.ts","../../../../libs/modules/security-management/client/src/lib/features/shared/user-status.provider.ts","../../../../libs/modules/security-management/client/src/lib/menu.provider.ts","../../../../libs/modules/security-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/security-management/client/src/lib/context-definition.provider.ts","../../../../libs/modules/security-management/client/src/lib/security-management.module.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-editor/permissions-editor.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-editor/permissions-editor.component.html","../../../../libs/modules/security-management/client/src/lib/features/permissions/commands/assign-permissions.command.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-view.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-edit.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/permissions-widget/permissions-widget-column.component.ts","../../../../libs/modules/security-management/client/src/lib/features/permissions/index.ts","../../../../libs/modules/security-management/client/src/acorex-platform-module-security-management-client.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n//#region ---- Device Sessions Service ----\n\n/**\n * Terminates device sessions for the current or specified session.\n * Implementations are provided by connectivity layers (e.g. mock or API).\n */\n@Injectable()\nexport abstract class AXMDeviceSessionsService {\n abstract terminate(id: string): Promise<boolean>;\n\n abstract terminateAllCurrentUserSessions(): Promise<boolean>;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Security Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const SecurityManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n required: true,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","\r\nimport { AXPEntity } from '@acorex-platform/framework-shared/entity';\nimport {\r\n AXPEntityDefinitionLoader,\r\n AXPEntityDefinitionPreloader,\r\n AXPEntityPreloadEntity,\r\n} from '@acorex-platform/framework-client/layout/entity';\r\nimport { Injectable } from '@angular/core';\r\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\r\n\r\n@Injectable()\r\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {\r\n public preload(): AXPEntityPreloadEntity[] {\r\n const { entities, module } = RootConfig;\r\n return [entities.users.name, entities.roles.name, entities.deviceSessions.name].map((entity) => ({\r\n module: module.name,\r\n entity,\r\n }));\r\n }\r async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\r\n const { entities, module } = RootConfig;\r\n if (moduleName == module.name) {\r\n switch (entityName) {\r\n case RootConfig.entities.users.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).usersFactory();\r\n case RootConfig.entities.roles.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).rolesFactory();\r\n case RootConfig.entities.profile.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).profileFactory();\r\n case RootConfig.entities.deviceSessions.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).deviceSessionsFactory();\r\n case RootConfig.entities.policy.name:\r\n return (await import('@acorex-platform/module-security-management-client/contracts')).policyFactory();\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async list(): Promise<{ name: string; module: string }[]> {\r\n const m = RootConfig.module.name;\r\n return Promise.resolve(\r\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\r\n );\r\n }\r\n}\r\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { AXPSecurityManagementFeatureKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Security Management Module Feature Definition Provider.\n * Provides feature definitions for the Security Management module.\n */\nexport class AXMSecurityManagementFeatureDefinitionProvider\n implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n const i18n = RootConfig.config.i18n;\n\n // Manage Roles feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageRoles, {\n title: `@${i18n}:features.manage-roles.title`,\n description: `@${i18n}:features.manage-roles.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Manage Users feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageUsers, {\n title: `@${i18n}:features.manage-users.title`,\n description: `@${i18n}:features.manage-users.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Max Total Users feature (widget configuration)\n context.addFeature(AXPSecurityManagementFeatureKeys.MaxTotalUsers, {\n title: `@${i18n}:features.max-total-users.title`,\n description: `@${i18n}:features.max-total-users.description`,\n defaultValue: 100,\n type: 'number',\n interface: {\n type: AXPWidgetsList.Editors.NumberBox,\n options: {\n placeholder: `@${i18n}:features.max-total-users.title`,\n min: 1,\n max: 10000,\n step: 1,\n },\n },\n });\n\n // Manage Sessions feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManageSessions, {\n title: `@${i18n}:features.manage-sessions.title`,\n description: `@${i18n}:features.manage-sessions.description`,\n defaultValue: true,\n type: 'boolean',\n });\n\n // Manage Policies feature\n context.addFeature(AXPSecurityManagementFeatureKeys.ManagePolicies, {\n title: `@${i18n}:features.manage-policies.title`,\n description: `@${i18n}:features.manage-policies.description`,\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","\nimport { AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_NAME_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\n\nexport const AXPPermissionsWidget: AXPWidgetConfig = {\n name: \"permissions-editor\",\n title: \"Permissions Editor\",\n description: 'Widget for managing permissions with full editor interface',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: \"fa-light fa-user-shield\",\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n AXP_DISABLED_PROPERTY,\n ],\n components: {\n view: {\n component: () => import('./permissions-widget-view.component').then((c) => c.AXPPermissionsWidgetViewComponent),\n },\n edit: {\n component: () => import('./permissions-widget-edit.component').then((c) => c.AXPPermissionsWidgetEditComponent),\n },\n column: {\n component: () => import('./permissions-widget-column.component').then((c) => c.AXPPermissionsWidgetColumnComponent),\n },\n }\n}","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPPermissionsWidget } from './permissions-widget/permissions-widget.config';\n\n//#endregion\n\n//#region ---- Permissions Widgets Provider ----\n\nconst WIDGETS = [AXPPermissionsWidget];\n\n@Injectable()\nexport class AXPPermissionsWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return WIDGETS;\n }\n}\n\n//#endregion\n","import { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { AXPPermissionsWidgetsProvider } from './widget-definition.provider';\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n ],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPPermissionsWidgetsProvider, multi: true },\n provideCommandSetups([\n {\n key: 'assign-permissions',\n command: () =>\n import('./commands/assign-permissions.command').then((c) => c.AXMAssignPermissionsCommand),\n },\n ]),\n ],\n})\nexport class AXMPermissionsModule { }\n","import { AXPSessionService } from \"@acorex-platform/framework-client/auth\";\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex-platform/framework-shared/core\";\nimport { inject } from \"@angular/core\";\n\nexport class AXMSecurityManagementEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n protected sessionService = inject(AXPSessionService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope('session', {\n currentUser: () => {\n return this.sessionService.user;\n },\n user: () => {\n return this.sessionService.user;\n },\n currentApplication: () => {\n return this.sessionService.application;\n },\n currentTenant: () => {\n return this.sessionService.tenant;\n },\n currentPermissions: () => {\n return this.sessionService.permissions;\n },\n })\n }\n}","import { AXPFilterDefinition, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXDataSource } from '@acorex/cdk/common';\n\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex-platform/framework-client/core';\n\nimport { inject } from '@angular/core';\nimport { AXMSecurityManagementDataSourceKeys } from '@acorex-platform/module-security-management-client/contracts';\nexport class AXMUsersDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n private readonly entityService = inject(AXPEntityService);\n protected userService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.users.name).data<any, any>();\n\n items(): Promise<AXPDataSourceDefinition[]> {\n return Promise.resolve([\n {\n name: AXMSecurityManagementDataSourceKeys.Users,\n title: 'Users',\n source: () => {\n return new AXDataSource({\n key: 'id',\n load: async (_) => {\n try {\n const res = await this.userService.query();\n return {\n items: res.items.map((item) => ({\n ...item,\n displayName: item.displayName,\n })),\n total: res.total,\n };\n } catch (e) {\n console.log(e);\n throw e;\n }\n },\n byKey: async (key: unknown) => {\n return await this.userService.byKey(key as string);\n },\n pageSize: 100,\n });\n },\n columns: [\n {\n name: 'id',\n title: 'ID',\n datatype: 'uuid',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'displayName',\n title: `Display Name`,\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n {\n name: 'username',\n title: `Username`,\n datatype: 'string',\n type: AXPWidgetsCatalog.text,\n },\n ],\n filters: [\n {\n field: 'username',\n title: 'Username',\n operator: {\n type: 'equal',\n },\n widget: {\n type: AXPWidgetsCatalog.text,\n },\n filterType: {\n advance: true,\n inline: true,\n },\n } as AXPFilterDefinition,\n ],\n textField: {\n name: 'displayName',\n title: 'Display Name',\n },\n valueField: {\n name: 'id',\n title: 'ID',\n },\n },\n ]);\n }\n} ","//#region ---- Imports ----\n\nimport { AXPStatusDefinition, AXPStatusProvider, AXPStatusTransition } from '@acorex-platform/framework-shared/core';\nimport { AXM_USER_ACCESS_STATE_DEFINITION_KEY, AXMUserAccessState } from '@acorex-platform/module-security-management-client/contracts';\n//#endregion\n\n//#region ---- User access state provider ----\n\n/**\n * Sign-in readiness from the authentication subsystem (distinct from account lifecycle / `accountState`).\n * Transitions listed here are the only paths offered in the status UI and validated when executing a status change command.\n */\nexport class AXMUserAccessStateProvider extends AXPStatusProvider {\n readonly key = AXM_USER_ACCESS_STATE_DEFINITION_KEY;\n\n readonly defaultStatus = AXMUserAccessState.Allowed;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.states.allowed',\n description: '@security-management:users.entities.user.access.descriptions.allowed',\n icon: 'fa-light fa-circle-check',\n color: 'success',\n order: 1,\n isInitial: true,\n isFinal: false,\n },\n {\n name: AXMUserAccessState.Blocked,\n title: '@security-management:users.entities.user.access.states.blocked',\n description: '@security-management:users.entities.user.access.descriptions.blocked',\n icon: 'fa-light fa-ban',\n color: 'danger',\n order: 2,\n isInitial: false,\n isFinal: false,\n },\n {\n name: AXMUserAccessState.Expired,\n title: '@security-management:users.entities.user.access.states.expired',\n description: '@security-management:users.entities.user.access.descriptions.expired',\n icon: 'fa-light fa-clock',\n color: 'danger',\n order: 3,\n isInitial: false,\n isFinal: true,\n generateView: false,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXMUserAccessState.Allowed,\n to: AXMUserAccessState.Blocked,\n title: '@security-management:users.entities.user.access.transitions.block-sign-in',\n },\n {\n from: AXMUserAccessState.Allowed,\n to: AXMUserAccessState.Expired,\n title: '@security-management:users.entities.user.access.transitions.require-credential-renewal',\n },\n {\n from: AXMUserAccessState.Blocked,\n to: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.transitions.unblock-sign-in',\n },\n {\n from: AXMUserAccessState.Expired,\n to: AXMUserAccessState.Allowed,\n title: '@security-management:users.entities.user.access.transitions.restore-after-credential-renewal',\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusDefinition, AXPStatusProvider, AXPStatusTransition } from '@acorex-platform/framework-shared/core';\nimport { AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY, AXMUserEffectiveState } from '@acorex-platform/module-security-management-client/contracts';\n//#endregion\n\n//#region ---- User effective state provider ----\n\n/**\n * Unified operational state for lists, filters, and page chrome (derived from lifecycle + sign-in gate).\n */\nexport class AXMUserEffectiveStateProvider extends AXPStatusProvider {\n readonly key = AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY;\n\n readonly defaultStatus = AXMUserEffectiveState.Active;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXMUserEffectiveState.Pending,\n title: '@security-management:users.entities.user.effective.states.pending',\n description: '@security-management:users.entities.user.effective.descriptions.pending',\n icon: 'fa-light fa-hourglass-half',\n color: 'warning',\n order: 1,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Active,\n title: '@security-management:users.entities.user.effective.states.active',\n description: '@security-management:users.entities.user.effective.descriptions.active',\n icon: 'fa-light fa-circle-check',\n color: 'success',\n order: 2,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.SignInBlocked,\n title: '@security-management:users.entities.user.effective.states.sign-in-blocked',\n description: '@security-management:users.entities.user.effective.descriptions.sign-in-blocked',\n icon: 'fa-light fa-shield-halved',\n color: 'danger',\n order: 3,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.CredentialExpired,\n title: '@security-management:users.entities.user.effective.states.credential-expired',\n description: '@security-management:users.entities.user.effective.descriptions.credential-expired',\n icon: 'fa-light fa-key',\n color: 'danger',\n order: 4,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Suspended,\n title: '@security-management:users.entities.user.effective.states.suspended',\n description: '@security-management:users.entities.user.effective.descriptions.suspended',\n icon: 'fa-light fa-pause-circle',\n color: 'warning',\n order: 5,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Inactive,\n title: '@security-management:users.entities.user.effective.states.inactive',\n description: '@security-management:users.entities.user.effective.descriptions.inactive',\n icon: 'fa-light fa-user-slash',\n color: 'danger',\n order: 6,\n generateView: true,\n },\n {\n name: AXMUserEffectiveState.Archived,\n title: '@security-management:users.entities.user.effective.states.archived',\n description: '@security-management:users.entities.user.effective.descriptions.archived',\n icon: 'fa-light fa-box-archive',\n color: 'danger',\n order: 7,\n generateView: true,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPStatusDefinition, AXPStatusProvider, AXPStatusTransition, AXPSystemStatusType } from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ---- User account status provider ----\n\n/**\n * Account-level state for SecurityManagement.User (lifecycle / admin).\n * Sign-in lockout is expressed as `accessState === blocked`, not as `accountState`.\n */\nexport class AXMUserStatusProvider extends AXPStatusProvider {\n readonly key = 'security-management.account-state.user';\n\n readonly defaultStatus = AXPSystemStatusType.Active;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXPSystemStatusType.Pending,\n title: '@security-management:users.entities.user.states.pending',\n description: '@security-management:users.entities.user.account.descriptions.pending',\n icon: 'fa-light fa-envelope-open-text',\n color: 'warning',\n order: 1,\n isInitial: true,\n isFinal: false,\n generateView: true,\n },\n {\n name: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.states.active',\n description: '@security-management:users.entities.user.account.descriptions.active',\n icon: 'fa-light fa-user-check',\n color: 'success',\n order: 1,\n isInitial: false,\n isFinal: false,\n generateView: true,\n },\n {\n name: AXPSystemStatusType.Suspended,\n title: '@security-management:users.entities.user.states.suspended',\n description: '@security-management:users.entities.user.account.descriptions.suspended',\n icon: 'fa-light fa-pause-circle',\n color: 'warning',\n order: 5,\n isInitial: false,\n isFinal: false,\n generateView: true,\n },\n {\n name: AXPSystemStatusType.Inactive,\n title: '@security-management:users.entities.user.states.inactive',\n description: '@security-management:users.entities.user.account.descriptions.inactive',\n icon: 'fa-light fa-user-slash',\n color: 'danger',\n order: 2,\n isInitial: false,\n isFinal: false,\n generateView: true,\n },\n {\n name: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.states.archived',\n description: '@security-management:users.entities.user.account.descriptions.archived',\n icon: 'fa-light fa-box-archive',\n color: 'danger',\n order: 5,\n isInitial: false,\n isFinal: true,\n generateView: true,\n },\n ];\n\n readonly transitions: AXPStatusTransition[] = [\n {\n from: AXPSystemStatusType.Pending,\n to: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.transitions.activate',\n },\n {\n from: AXPSystemStatusType.Pending,\n to: AXPSystemStatusType.Inactive,\n title: '@security-management:users.entities.user.transitions.cancel-invitation',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Suspended,\n title: '@security-management:users.entities.user.transitions.suspend',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.transitions.restore',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Inactive,\n title: '@security-management:users.entities.user.transitions.disable',\n },\n {\n from: AXPSystemStatusType.Inactive,\n to: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.transitions.enable',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Inactive,\n title: '@security-management:users.entities.user.transitions.disable',\n },\n {\n from: AXPSystemStatusType.Active,\n to: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Suspended,\n to: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Inactive,\n to: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Pending,\n to: AXPSystemStatusType.Archived,\n title: '@security-management:users.entities.user.transitions.archive',\n },\n {\n from: AXPSystemStatusType.Archived,\n to: AXPSystemStatusType.Active,\n title: '@security-management:users.entities.user.transitions.restore-archived',\n },\n ];\n}\n\n//#endregion\n","import { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSecurityManagementMenuKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPSecurityManagementPermissionKeys } from '@acorex-platform/module-security-management-client/contracts';\n\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const moduleName = RootConfig.module.name;\n\n // Check if Security submenu exists under Administration, create it if not\n const securityMenu = context.find(AXPSecurityManagementMenuKeys.Root);\n if (!securityMenu.exists) {\n // Add Security submenu to Administration group\n context.find(AXPCommonMenuKeys.Administration).addItems([\n {\n priority: 1,\n text: '@security-management:module.menus.root.title',\n icon: RootConfig.module.icon,\n name: AXPSecurityManagementMenuKeys.Root,\n type: 'menu',\n children: [],\n policy: {\n features: [RootConfig.module.name],\n },\n },\n ]);\n }\n\n // Add menu items under Security submenu\n context.find(AXPSecurityManagementMenuKeys.Root).addItems([\n {\n priority: 9003,\n text: RootConfig.entities.users.titlePlural,\n icon: RootConfig.entities.users.icon,\n name: AXPSecurityManagementMenuKeys.Users,\n path: this.entityService.createPath(moduleName, RootConfig.entities.users.name),\n policy: {\n features: [moduleName],\n permissions: [AXPSecurityManagementPermissionKeys.User.View],\n },\n },\n {\n priority: 9004,\n text: RootConfig.entities.roles.titlePlural,\n path: this.entityService.createPath(moduleName, RootConfig.entities.roles.name),\n icon: RootConfig.entities.roles.icon,\n name: AXPSecurityManagementMenuKeys.Roles,\n policy: {\n features: [moduleName],\n permissions: [AXPSecurityManagementPermissionKeys.Role.View],\n },\n },\n {\n priority: 9005,\n text: RootConfig.entities.deviceSessions.titlePlural,\n path: this.entityService.createPath(moduleName, RootConfig.entities.deviceSessions.name),\n icon: RootConfig.entities.deviceSessions.icon,\n name: AXPSecurityManagementMenuKeys.DeviceSessions,\n policy: {\n features: [moduleName],\n permissions: [AXPSecurityManagementPermissionKeys.DeviceSession.View],\n },\n },\n // {\n // priority: 9006,\n // text: RootConfig.entities.policy.titlePlural,\n // path: this.entityService.createPath(moduleName, RootConfig.entities.policy.name),\n // icon: RootConfig.entities.policy.icon,\n // name: AXPSecurityManagementMenuKeys.Policy,\n // policy: {\n // permissions: [AXPSecurityManagementPermissionKeys.Policy.View],\n // },\n // },\n ]);\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex-platform/framework-client/auth';\nimport { Injectable } from '@angular/core';\nimport { AXPSecurityManagementPermissionKeys } from '@acorex-platform/module-security-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n\n //#region ---- Define Method ----\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPSecurityManagementPermissionKeys;\n\n // I18n path constants\n const MODULE_PERMISSIONS = '@security-management:module.permissions';\n const USERS_PERMISSIONS = '@security-management:users.permissions';\n const ROLES_PERMISSIONS = '@security-management:roles.permissions';\n const SESSIONS_PERMISSIONS = '@security-management:sessions.permissions';\n const POLICIES_PERMISSIONS = '@security-management:policies.permissions';\n\n context\n .addGroup(\n RootConfig.module.name,\n `${MODULE_PERMISSIONS}.title`,\n `${MODULE_PERMISSIONS}.description`\n )\n //\n .addPermission(\n keys.User.Management,\n `${USERS_PERMISSIONS}.manage.title`,\n `${USERS_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.User.View,\n `${USERS_PERMISSIONS}.view.title`,\n `${USERS_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.User.Create,\n `${USERS_PERMISSIONS}.create.title`,\n `${USERS_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.User.Edit,\n `${USERS_PERMISSIONS}.edit.title`,\n `${USERS_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.User.Delete,\n `${USERS_PERMISSIONS}.delete.title`,\n `${USERS_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.Role.Management,\n `${ROLES_PERMISSIONS}.manage.title`,\n `${ROLES_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.Role.View,\n `${ROLES_PERMISSIONS}.view.title`,\n `${ROLES_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.Role.Create,\n `${ROLES_PERMISSIONS}.create.title`,\n `${ROLES_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Role.Edit,\n `${ROLES_PERMISSIONS}.edit.title`,\n `${ROLES_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Role.Delete,\n `${ROLES_PERMISSIONS}.delete.title`,\n `${ROLES_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.DeviceSession.Management,\n `${SESSIONS_PERMISSIONS}.manage.title`,\n `${SESSIONS_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.DeviceSession.View,\n `${SESSIONS_PERMISSIONS}.view.title`,\n `${SESSIONS_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.DeviceSession.Terminate,\n `${SESSIONS_PERMISSIONS}.terminate.title`,\n `${SESSIONS_PERMISSIONS}.terminate.description`\n )\n .endPermission()\n //\n .addPermission(\n keys.Policy.Management,\n `${POLICIES_PERMISSIONS}.manage.title`,\n `${POLICIES_PERMISSIONS}.manage.description`\n )\n .addChild(\n keys.Policy.View,\n `${POLICIES_PERMISSIONS}.view.title`,\n `${POLICIES_PERMISSIONS}.view.description`\n )\n .addChild(\n keys.Policy.Create,\n `${POLICIES_PERMISSIONS}.create.title`,\n `${POLICIES_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Policy.Edit,\n `${POLICIES_PERMISSIONS}.edit.title`,\n `${POLICIES_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Policy.Delete,\n `${POLICIES_PERMISSIONS}.delete.title`,\n `${POLICIES_PERMISSIONS}.delete.description`\n )\n .endPermission()\n //\n .endGroup();\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n// TODO: Refactor to generic provider (do it later)\n//\n// Move this logic to a generic AXPEntityCreateSearchCommandProvider in libs/platform/layout/entity.\n// The generic provider should:\n// - Inject AXPEntityDefinitionRegistryService and AXPSessionService\n// - Override search(text) to build commands dynamically from registry\n// - Filter entities: only aggregate roots (commands?.create exists AND !parentKey)\n// - Filter by permission: sessionService.authorize() for both Create and Management\n// Permission convention: `${module}:Permission:${entity.name}.Create` or `.Management`\n// - Use createEntityCommandOptions() with Entity:Create command (same pattern as below)\n// - Register in entity module as AXP_SEARCH_PROVIDER\n// - Remove this and other module-specific search command providers that only add entity-create commands\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-security-user',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.users.name}`,\n entityInfo: { name: RootConfig.entities.users.name, module: RootConfig.module.name, title: RootConfig.entities.users.title },\n titleKey: '@security-management:users.permissions.create.title',\n descriptionKey: '@security-management:users.permissions.create.description',\n icon: RootConfig.entities.users.icon,\n }),\n createEntitySearchCommand({\n id: 'create-security-role',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n entityInfo: { name: RootConfig.entities.roles.name, module: RootConfig.module.name, title: RootConfig.entities.roles.title },\n titleKey: '@security-management:roles.permissions.create.title',\n descriptionKey: '@security-management:roles.permissions.create.description',\n icon: RootConfig.entities.roles.icon,\n }),\n ];\n}\n","import { Injectable } from '@angular/core';\nimport type { AXPContextDefinition, AXPContextDefinitionProvider } from '@acorex-platform/framework-client/core';\n\n//#region ---- User context definitions ----\n\n@Injectable()\nexport class AXMSecurityManagementContextDefinitionProvider implements AXPContextDefinitionProvider {\n async items(): Promise<AXPContextDefinition[]> {\n return [\n {\n name: 'userId',\n title: 'User ID',\n description:\n 'Identifier of the signed-in user from the current session. Used to scope AI actions and audit to the active account.',\n ai: {\n promptLabel: 'User id',\n usageHint: 'Treat as the active user unless the request explicitly refers to another person.',\n valueKind: 'string',\n order: 10,\n },\n },\n {\n name: 'userDisplayName',\n title: 'User display name',\n description:\n 'Human-readable name of the signed-in user (name or title from session). Used for personalized responses.',\n ai: {\n promptLabel: 'User display name',\n usageHint: 'Use for polite address; do not invent a different name.',\n valueKind: 'string',\n order: 11,\n },\n },\n ];\n }\n}\n\n//#endregion\n","import { AXP_CONTEXT_DEFINITION_PROVIDER, AXP_DATASOURCE_DEFINITION_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex-platform/framework-client/layout/entity';\nimport { NgModule } from '@angular/core';\nimport { SecurityManagementManifest } from './manifest';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex-platform/framework-client/common';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\n\nimport { AXMEntityProvider } from './entity.provider';\nimport { AXMSecurityManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMPermissionsModule } from './features/permissions/permissions.module';\nimport { AXMSecurityManagementEvaluatorScopeProvider } from './features/security-evaluator-scope.provider';\nimport { AXMUsersDataSourceDefinition } from './features/shared/datasources/users.datasource';\nimport { AXMUserAccessStateProvider } from './features/shared/user-access-state.provider';\nimport { AXMUserEffectiveStateProvider } from './features/shared/user-effective-state.provider';\nimport { AXMUserStatusProvider } from './features/shared/user-status.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\nimport { AXMSecurityManagementContextDefinitionProvider } from './context-definition.provider';\n@NgModule({\n imports: [\n AXMPermissionsModule,\n ],\n exports: [],\n declarations: [],\n providers: [\n // Module-specific providers (not part of manifest system)\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMSecurityManagementEvaluatorScopeProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: SecurityManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXMSecurityManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserStatusProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserAccessStateProvider,\n multi: true,\n },\n {\n provide: AXP_STATUS_PROVIDERS,\n useClass: AXMUserEffectiveStateProvider,\n multi: true,\n },\n {\n provide: AXP_DATASOURCE_DEFINITION_PROVIDER,\n useClass: AXMUsersDataSourceDefinition,\n multi: true,\n },\n {\n provide: AXP_CONTEXT_DEFINITION_PROVIDER,\n useClass: AXMSecurityManagementContextDefinitionProvider,\n multi: true,\n },\n provideCommandSetups([\n {\n key: 'Session:Terminate',\n command: () => import('./commands/terminate-session.command').then((c) => c.AXPTerminateSessionCommand),\n },\n {\n key: 'SecurityManagement:User:SendPasswordResetEmail',\n command: () =>\n import('./commands/send-password-reset-email.command').then((c) => c.AXPSendPasswordResetEmailCommand),\n },\n ]),\n ],\n})\nexport class AXMSecurityManagementModule {}\n","// #region ---------------- Imports ----------------\nimport {\n Component,\n ViewEncapsulation,\n computed,\n inject,\n signal,\n input,\n output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport {\n AXPPermissionDefinition,\n AXPPermissionDefinitionService,\n AXPPermissionGroupDefinition,\n AXPSessionService,\n} from '@acorex-platform/framework-client/auth';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport {\n AXTranslationModule,\n AXTranslationService,\n} from '@acorex/core/translation';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { FormsModule } from '@angular/forms';\nimport { AXCommonModule, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { setupPopupFooterKeyboardShortcuts } from '@acorex-platform/framework-client/core';\nimport { isEmpty, trim } from 'lodash-es';\n// #endregion\n\n// #region ---------------- Types ----------------\n\ninterface MappedPermission extends Omit<AXPPermissionDefinition, 'children'> {\n isSelected: boolean;\n children: MappedPermission[] | null;\n}\n\ninterface PermissionSearchGroupResult {\n group: AXPPermissionGroupDefinition & { badge: string };\n items: MappedPermission[];\n}\n\n// #endregion\n\n@Component({\n selector: 'axm-permissions-editor',\n templateUrl: './permissions-editor.component.html',\n styleUrl: './permissions-editor.component.css',\n imports: [\n // Angular\n CommonModule,\n FormsModule,\n AXCommonModule,\n // ACoreX\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXTabsModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXBadgeModule,\n AXCheckBoxModule,\n AXTooltipModule,\n AXSkeletonModule,\n AXSearchBoxModule,\n AXPStateMessageComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n host: {\n class:\n 'axm-permissions-editor flex h-full max-h-[75vh] min-h-0 flex-col overflow-hidden',\n '[attr.aria-busy]': 'isEditorLoading() ? \"true\" : null',\n },\n})\nexport class AXPPermissionsEditorComponent extends AXBasePageComponent {\n // #region ---------------- Class Properties ----------------\n /** Service for fetching permission groups and definitions */\n private permissionService = inject(AXPPermissionDefinitionService);\n\n /** Session service for checking module access */\n private sessionService = inject(AXPSessionService);\n\n /** Translation service for resolving permission labels during search */\n private translationService = inject(AXTranslationService);\n\n /** Currently selected permission group */\n protected selectedGroup = signal<AXPPermissionGroupDefinition | null>(null);\n\n /** Current search query */\n protected searchQuery = signal('');\n\n /** All available permission groups */\n protected groups = signal<AXPPermissionGroupDefinition[]>([]);\n\n /** Initial permissions to be selected - exposed as signal input */\n initialPermissions = input<string[]>([]);\n\n /** Whether the editor is in read-only mode */\n readOnly = input<boolean>(false);\n\n /** Whether popup footer actions (Cancel / Select) are shown */\n showActions = input<boolean>(false);\n\n /** List of selected permission names */\n protected selectedPermissions = signal<string[]>([]);\n\n /** Event emitted when permissions selection changes */\n permissionsChanged = output<string[]>();\n\n /** Event emitted when permissions are applied/selected */\n permissionsSelected = output<string[]>();\n\n /** Whether permission groups are being loaded */\n protected isEditorLoading = signal(true);\n // #endregion\n\n // #region ---------------- Constructor ----------------\n\n constructor() {\n super();\n setupPopupFooterKeyboardShortcuts(\n () => {\n if (!this.isShowActions()) {\n return [];\n }\n\n return [\n {\n title: '@general:actions.cancel.title',\n command: 'cancel',\n handler: () => this.handleCancelClick(),\n },\n {\n title: '@general:actions.select.title',\n command: 'select',\n handler: () => this.handleSelectClick(),\n },\n ];\n },\n { id: 'permissions-editor-popup', when: () => this.isShowActions() },\n );\n }\n\n // #endregion\n\n // #region ---------------- Computed Properties ----------------\n\n /**\n * Reads a signal input or a plain value assigned by AXPopupService data binding.\n */\n private readBoundValue<T>(value: unknown, fallback: T): T {\n if (typeof value === 'function') {\n return (value as () => T)();\n }\n\n return (value ?? fallback) as T;\n }\n\n /** Whether popup footer actions are visible (supports popup data and input binding). */\n protected isShowActions(): boolean {\n return this.readBoundValue(this.showActions, false);\n }\n\n /** Whether the editor is read-only (supports popup data and input binding). */\n protected isReadOnlyMode(): boolean {\n return this.readBoundValue(this.readOnly, false);\n }\n\n /** Initial permission selection (supports popup data and input binding). */\n protected getInitialPermissions(): string[] {\n return this.readBoundValue(this.initialPermissions, []);\n }\n\n /**\n * Recursively maps permissions to include selection state and children.\n */\n private mapPermissions(items: AXPPermissionDefinition[]): MappedPermission[] {\n return (items || []).map((item) => {\n const children = item.children;\n return {\n ...item,\n isSelected: this.isSelected(item.name),\n children: children?.length ? this.mapPermissions(children) : null,\n };\n });\n }\n\n /**\n * Computed: Returns mapped permissions for the selected group.\n */\n protected items = computed(() => {\n const permissions = this.selectedGroup()?.permissions || [];\n return this.mapPermissions(permissions);\n });\n\n /**\n * Computed: Returns groups with badge counts, sorted by title.\n */\n protected groupsWithBadge = computed(() => {\n const groups = this.groups();\n const result = groups.map((group) => {\n return {\n ...group,\n badge: this.getBadge(group) || '',\n };\n });\n return result.sort((a, b) => a.title.localeCompare(b.title));\n });\n\n /** Sidebar group placeholders for the loading skeleton */\n protected readonly groupSkeletonPlaceholders = computed(() => [\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n 'w-3/5',\n 'w-4/5',\n ]);\n\n /** Permission group placeholders (parent + child rows) for the loading skeleton */\n protected readonly permissionGroupSkeletonPlaceholders = computed(() => [\n { childCount: 4 },\n { childCount: 4 },\n { childCount: 2 },\n { childCount: 4 },\n ]);\n\n /** Child row placeholders for a permission group skeleton */\n protected readonly childSkeletonPlaceholders = (count: number) =>\n Array.from({ length: count }, (_, index) => index);\n\n /** Whether the user is actively searching permissions */\n protected isSearchActive = computed(() => !isEmpty(trim(this.searchQuery())));\n\n /** Grouped search results across all permission groups */\n protected searchResultsGrouped = computed(\n (): PermissionSearchGroupResult[] => {\n const normalizedQuery = trim(this.searchQuery()).toLowerCase();\n if (!normalizedQuery) {\n return [];\n }\n\n return this.groupsWithBadge()\n .map((group) => ({\n group,\n items: this.mapPermissions(\n this.getFilteredGroupPermissions(group, normalizedQuery),\n ),\n }))\n .filter((result) => !isEmpty(result.items));\n },\n );\n\n /** Whether the active search returned any permission groups */\n protected hasSearchResults = computed(\n () => !isEmpty(this.searchResultsGrouped()),\n );\n // #endregion\n\n // #region ---------------- Utility Methods ----------------\n /**\n * Extracts module name from a permission group name.\n * Handles multiple formats:\n * - Permission key format: 'SecurityManagement:Permission:SecurityManagement.Management' -> 'SecurityManagement'\n * - PascalCase: 'TenantManagement' -> 'TenantManagement'\n * - kebab-case: 'tenant-management' -> 'TenantManagement' (converts to PascalCase)\n */\n private extractModuleNameFromGroupName(groupName: string): string {\n // If it contains ':', extract the first part (permission key format)\n if (groupName.includes(':')) {\n const parts = groupName.split(':');\n return parts[0];\n }\n\n // If it's kebab-case, convert to PascalCase\n if (groupName.includes('-')) {\n return groupName\n .split('-')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n }\n\n // Otherwise, assume it's already PascalCase\n return groupName;\n }\n\n /**\n * Filters permission groups to only include those from enabled modules.\n */\n private filterGroupsByEnabledModules(\n groups: AXPPermissionGroupDefinition[],\n ): AXPPermissionGroupDefinition[] {\n return groups.filter((group) => {\n const moduleName = this.extractModuleNameFromGroupName(group.name);\n return this.sessionService.isModuleEnabled(moduleName);\n });\n }\n\n /**\n * Recursively collects all permission names (parents and children) from an array.\n */\n private collectAllPermissionNames(\n permissions: AXPPermissionDefinition[],\n ): string[] {\n let names: string[] = [];\n for (const item of permissions) {\n names.push(item.name);\n if (item.children?.length) {\n names = names.concat(this.collectAllPermissionNames(item.children));\n }\n }\n return names;\n }\n\n /**\n * Returns the badge count for a group (all selected permissions, including parents).\n */\n private getBadge(group: AXPPermissionGroupDefinition): string {\n const allNames = this.collectAllPermissionNames(group.permissions || []);\n const selectedPermissions = this.selectedPermissions();\n const count = allNames.filter((name) =>\n selectedPermissions.includes(name),\n ).length;\n return count.toString();\n }\n\n /**\n * Checks if a permission is selected.\n */\n private isSelected(name: string): boolean {\n return this.selectedPermissions().includes(name);\n }\n\n /**\n * Checks if a permission is selected.\n */\n protected badgeToNumber(value: unknown): number {\n return Number(value);\n }\n\n /**\n * Returns true when searchable text contains the query.\n */\n private matchesSearchText(\n text: string | undefined,\n normalizedQuery: string,\n ): boolean {\n if (!text) {\n return false;\n }\n\n const translated = this.translationService.translateSync(text) || text;\n return (\n translated.toLowerCase().includes(normalizedQuery) ||\n text.toLowerCase().includes(normalizedQuery)\n );\n }\n\n /**\n * Returns true when a permission title or description matches the query.\n */\n private matchesPermission(\n permission: AXPPermissionDefinition,\n normalizedQuery: string,\n ): boolean {\n return (\n this.matchesSearchText(permission.title, normalizedQuery) ||\n this.matchesSearchText(permission.description, normalizedQuery)\n );\n }\n\n /**\n * Returns true when a permission group title or description matches the query.\n */\n private matchesGroup(\n group: AXPPermissionGroupDefinition,\n normalizedQuery: string,\n ): boolean {\n return (\n this.matchesSearchText(group.title, normalizedQuery) ||\n this.matchesSearchText(group.description, normalizedQuery)\n );\n }\n\n /**\n * Filters permissions while keeping ancestor nodes for matching descendants.\n */\n private filterPermissions(\n items: AXPPermissionDefinition[],\n normalizedQuery: string,\n ): AXPPermissionDefinition[] {\n const result: AXPPermissionDefinition[] = [];\n\n for (const item of items) {\n const filteredChildren = this.filterPermissions(\n item.children ?? [],\n normalizedQuery,\n );\n const selfMatches = this.matchesPermission(item, normalizedQuery);\n\n if (selfMatches || !isEmpty(filteredChildren)) {\n result.push({\n ...item,\n children: filteredChildren,\n });\n }\n }\n\n return result;\n }\n\n /**\n * Returns filtered permissions for a group, or all permissions when the group itself matches.\n */\n private getFilteredGroupPermissions(\n group: AXPPermissionGroupDefinition,\n normalizedQuery: string,\n ): AXPPermissionDefinition[] {\n const permissions = group.permissions ?? [];\n\n if (this.matchesGroup(group, normalizedQuery)) {\n return permissions;\n }\n\n return this.filterPermissions(permissions, normalizedQuery);\n }\n\n /**\n * Recursively collects all descendant permission names for a single item (including itself).\n */\n private collectPermissionNames(item: MappedPermission): string[] {\n let names = [item.name];\n if (item.children) {\n for (const child of item.children) {\n names = names.concat(this.collectPermissionNames(child));\n }\n }\n return names;\n }\n\n /**\n * Gets the current selected permissions.\n */\n public getSelectedPermissions(): string[] {\n return this.selectedPermissions();\n }\n\n /**\n * Sets the selected permissions.\n */\n public setSelectedPermissions(permissions: string[]): void {\n this.selectedPermissions.set(permissions || []);\n this.permissionsChanged.emit(this.selectedPermissions());\n }\n\n /**\n * Applies/selects the current permissions.\n */\n public selectPermissions(): void {\n this.permissionsSelected.emit(this.selectedPermissions());\n }\n // #endregion\n\n // #region ---------------- Lifecycle Methods ----------------\n /**\n * Initializes the component and loads permission groups.\n * Filters groups to only show permissions from modules enabled for the current tenant.\n */\n override async ngOnInit() {\n super.ngOnInit();\n try {\n const allGroups = await this.permissionService.getGroups();\n const filteredGroups = this.filterGroupsByEnabledModules(allGroups);\n this.groups.set(filteredGroups);\n\n // Select first group if available\n if (filteredGroups.length > 0) {\n this.selectedGroup.set(filteredGroups[0]);\n }\n\n this.selectedPermissions.set(this.getInitialPermissions());\n } finally {\n this.isEditorLoading.set(false);\n }\n }\n // #endregion\n\n // #region ---------------- UI Handlers ----------------\n /**\n * Handles group tab/menu item click.\n */\n protected handleMenuItemClick(item: AXPPermissionGroupDefinition) {\n this.selectedGroup.set(item);\n }\n\n /**\n * Updates the search query when the search box value changes.\n */\n protected handleSearchChanged(\n event: AXValueChangedEvent<string | null>,\n ): void {\n this.searchQuery.set(event.value ?? '');\n }\n\n /**\n * Handles permission checkbox toggle (checks/unchecks all children recursively).\n */\n protected onPermissionToggle(\n item: MappedPermission,\n e: AXValueChangedEvent,\n ): void {\n // Don't allow changes in read-only mode\n if (this.isReadOnlyMode()) {\n return;\n }\n\n const names = this.collectPermissionNames(item);\n if (e.value) {\n // Add all names (parent + children), avoiding duplicates\n const set = new Set([...this.selectedPermissions(), ...names]);\n this.selectedPermissions.set(Array.from(set));\n } else {\n // Remove all names (parent + children)\n this.selectedPermissions.set(\n this.selectedPermissions().filter((name) => !names.includes(name)),\n );\n }\n this.permissionsChanged.emit(this.selectedPermissions());\n }\n\n /**\n * Closes the popup without applying permission changes.\n */\n protected handleCancelClick(): void {\n this.close();\n }\n\n /**\n * Applies the current selection and closes the popup.\n */\n protected handleSelectClick(): void {\n const permissions = this.getSelectedPermissions();\n this.permissionsSelected.emit(permissions);\n this.close(permissions);\n }\n // #endregion\n}\n","@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","//#region ---- Imports ----\n\nimport { AXPCommand } from '@acorex-platform/framework-shared/runtime';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPCommonSettings, AXPRefreshEvent, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPExecuteCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityDefinitionRegistryService, AXPEntityModifyEvent } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPWorkflowEventService } from '@acorex-platform/framework-client/workflow';\n\nimport { Injectable, inject } from '@angular/core';\nimport { isArray, isEmpty, isString } from 'lodash-es';\n\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface AXMAssignPermissionsCommandInput {\n __context__?: {\n data?: Record<string, unknown>;\n entity?: string;\n entityInfo?: {\n name?: string;\n module?: string;\n title?: string;\n parentKey?: string;\n source?: string;\n };\n options?: unknown;\n };\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable()\nexport class AXMAssignPermissionsCommand implements AXPCommand<AXMAssignPermissionsCommandInput, string[] | null> {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityRegistry = inject(AXPEntityDefinitionRegistryService);\n private readonly toastService = inject(AXToastService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly workflowEventService = inject(AXPWorkflowEventService);\n\n //#endregion\n\n //#region ---- Execute ----\n\n async execute(input: AXMAssignPermissionsCommandInput): Promise<AXPExecuteCommandResult<string[] | null>> {\n try {\n const role = input.__context__?.data;\n if (!role || !isString(role['id']) || isEmpty(role['id'])) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n const component = await import('../permissions-editor/permissions-editor.component').then(\n (m) => m.AXPPermissionsEditorComponent,\n );\n\n const editorTitle = await this.translationService.translateAsync(\n '@security-management:permissions-feature.terms.permissions-editor',\n );\n const roleTitle = this.resolveRoleTitle(role['title']);\n const initialPermissions = isArray(role['permissions']) ? (role['permissions'] as string[]) : [];\n\n const popupResult = await this.popupService.open(component, {\n title: roleTitle ? `${editorTitle} - ${roleTitle}` : editorTitle,\n size: 'md',\n data: {\n initialPermissions,\n showActions: true,\n },\n });\n\n const permissions = popupResult?.data;\n if (!isArray(permissions)) {\n return { success: true, data: null, metadata: { refresh: false } };\n }\n\n const entityKey = `${RootConfig.module.name}.${RootConfig.entities.roles.name}`;\n const [moduleName, entityName] = entityKey.split('.');\n const entityRef = await this.entityRegistry.resolve(moduleName, entityName);\n const updatePayload = {\n ...role,\n permissions,\n };\n\n const updated = await (entityRef.commands?.update?.execute as (data: Record<string, unknown>) => Promise<Record<string, unknown>>)(\n updatePayload,\n );\n\n await this.showSuccessToast();\n this.workflowEventService.dispatch(AXPEntityModifyEvent({ entity: entityKey, values: updated }));\n this.workflowEventService.dispatch(AXPRefreshEvent({ entity: entityKey }));\n\n return {\n success: true,\n data: permissions,\n };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to assign permissions.';\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private resolveRoleTitle(title: unknown): string {\n if (!title) {\n return '';\n }\n\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n if (isString(title)) {\n return resolveMultiLanguageString(title, locale).trim();\n }\n\n return resolveMultiLanguageString(String(title), locale).trim();\n }\n\n private async showSuccessToast(): Promise<void> {\n const enableOperationToasts = await this.settingsService.get<boolean>(AXPCommonSettings.EnableOperationToasts);\n if (!enableOperationToasts) {\n return;\n }\n\n this.toastService.show({\n color: 'success',\n title: await this.translationService.translateAsync('@general:workflow.entity-modified-title'),\n content: await this.translationService.translateAsync('@general:workflow.entity-modified-body'),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, computed, inject, signal, effect } from '@angular/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPPermissionDefinitionService, AXPPermissionGroupDefinition, AXPPermissionDefinition } from '@acorex-platform/framework-client/auth';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\ninterface PermissionPath {\n group: AXPPermissionGroupDefinition;\n path: AXPPermissionDefinition[];\n displayPath: string;\n}\n\n@Component({\n selector: 'axm-permissions-widget-view',\n template: `\n <!-- <axm-permissions-editor\n [initialPermissions]=\"getValue() || []\"\n [readOnly]=\"true\">\n </axm-permissions-editor> -->\n <div class=\"flex flex-col gap-2\">\n @for (group of groups(); track group.name) {\n @if (selectedPermissionsByGroup()[group.name]?.length) {\n <div>\n <div class=\"text-xs font-semibold mb-2 text-muted\">{{ group.title }}</div>\n <div class=\"flex gap-1 flex-wrap\">\n @for (permPath of selectedPermissionsByGroup()[group.name]; track permPath.path[permPath.path.length - 1].name) {\n <ax-badge [text]=\"permPath.displayPath\" color=\"primary\" size=\"sm\"></ax-badge>\n }\n </div>\n </div>\n }\n }\n @if (isEmpty()) {\n <axp-state-message\n icon=\"fa-light fa-shield-check\"\n [title]=\"'@security-management:permissions-feature.components.permissions-editor.empty-states.no-permissions.title'\"\n [description]=\"'@security-management:permissions-feature.components.permissions-editor.empty-states.no-permissions.description'\">\n </axp-state-message>\n }\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXTranslationModule, AXPStateMessageComponent]\n})\nexport class AXPPermissionsWidgetViewComponent extends AXPValueWidgetComponent<string[]> {\n private permissionService = inject(AXPPermissionDefinitionService);\n private readonly commandService = inject(AXPCommandService);\n protected groups = signal<AXPPermissionGroupDefinition[]>([]);\n\n private loadGroupsEffect = effect(async () => {\n // Load groups when component initializes\n if (this.groups().length === 0) {\n const groupsData = await this.permissionService.getGroups();\n this.groups.set(groupsData);\n }\n });\n\n protected selectedPermissionsByGroup = computed(() => {\n const selected = new Set(this.getValue() ?? []);\n const result: Record<string, PermissionPath[]> = {};\n\n for (const group of this.groups()) {\n const permPaths: PermissionPath[] = [];\n\n const findPermissionPaths = (items: AXPPermissionDefinition[], path: AXPPermissionDefinition[] = []) => {\n for (const item of items) {\n const currentPath = [...path, item];\n\n if (selected.has(item.name)) {\n const displayPath = currentPath.map(p => p.title).join(' > ');\n permPaths.push({\n group,\n path: currentPath,\n displayPath\n });\n }\n\n if (item.children?.length) {\n findPermissionPaths(item.children, currentPath);\n }\n }\n };\n\n findPermissionPaths(group.permissions);\n result[group.name] = permPaths;\n }\n\n return result;\n });\n\n protected isEmpty = computed(() => {\n return Object.values(this.selectedPermissionsByGroup()).every(arr => !arr.length);\n });\n\n protected async openPermissionsEditor() {\n await this.commandService.execute('assign-permissions', {\n __context__: {\n data: this.contextService.data(),\n entity: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n },\n });\n }\n\n}\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AXPPermissionsEditorComponent } from '../permissions-editor/permissions-editor.component';\n\n@Component({\n selector: 'axm-permissions-widget-edit',\n template: `\n <axm-permissions-editor\n [initialPermissions]=\"getValue() || []\"\n [readOnly]=\"false\"\n (permissionsChanged)=\"onPermissionsChanged($event)\">\n </axm-permissions-editor>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXPPermissionsEditorComponent\n]\n})\nexport class AXPPermissionsWidgetEditComponent extends AXPValueWidgetComponent<string[]> {\n\n // #region ---------------- UI Handlers ----------------\n /**\n * Handles permissions changes from the editor.\n */\n protected onPermissionsChanged(permissions: string[]): void {\n this.setValue(permissions);\n }\n // #endregion\n\n}","import { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { castArray } from 'lodash-es';\nimport { RootConfig } from '@acorex-platform/module-security-management-client/contracts';\n\n@Component({\n selector: 'axm-permissions-widget-column',\n template: `\n <span class=\"cursor-pointer text-primary underline\" (click)=\"openPermissionsEditor()\">{{count()}} {{'@security-management:permissions-feature.terms.permissions' | translate | async}}</span>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n inputs: ['rawValue', 'rowData']\n})\nexport class AXPPermissionsWidgetColumnComponent extends AXPColumnWidgetComponent<any> {\n\n protected count = computed(() => castArray(this.rawValue).length);\n private readonly commandService = inject(AXPCommandService);\n\n async openPermissionsEditor() {\n await this.commandService.execute('assign-permissions', {\n __context__: {\n data: this.rowData,\n entity: `${RootConfig.module.name}.${RootConfig.entities.roles.name}`,\n },\n });\n }\n}\n","// Permission Editor Components\nexport { AXPPermissionsEditorComponent } from './permissions-editor/permissions-editor.component';\nexport { AXMAssignPermissionsCommand } from './commands/assign-permissions.command';\nexport { AXMPermissionsModule } from './permissions.module';\n\n// Widgets\nexport * from './permissions-widget/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AAEA;;;AAGG;MAEmB,wBAAwB,CAAA;8GAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAxB,wBAAwB,EAAA,CAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAD7C;;;ACRD;AAKA;AAEA;AAEA;;;AAGG;AACI,MAAM,0BAA0B,GAAsB;AAC3D,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AAC9B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,QAAQ,EAAE,IAAI;;CAGf;AAED;;MCba,iBAAiB,CAAA;IACrB,OAAO,GAAA;AACZ,QAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU;QACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;YAC/F,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,MAAM;AACP,SAAA,CAAC,CAAC;IACL;AACA,IAAA,MAAM,GAAG,CAAC,UAAkB,EAAE,UAAkB,EAAA;AAC9C,QAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU;AACvC,QAAA,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,EAAE;YAC7B,QAAQ,UAAU;AAChB,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;oBACjC,OAAO,CAAC,MAAM,OAAO,8DAA8D,CAAC,EAAE,YAAY,EAAE;AACtG,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;oBACjC,OAAO,CAAC,MAAM,OAAO,8DAA8D,CAAC,EAAE,YAAY,EAAE;AACtG,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI;oBACnC,OAAO,CAAC,MAAM,OAAO,8DAA8D,CAAC,EAAE,cAAc,EAAE;AACxG,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI;oBAC1C,OAAO,CAAC,MAAM,OAAO,8DAA8D,CAAC,EAAE,qBAAqB,EAAE;AAC/G,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;oBAClC,OAAO,CAAC,MAAM,OAAO,8DAA8D,CAAC,EAAE,aAAa,EAAE;;QAE3G;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;AAChC,QAAA,OAAO,OAAO,CAAC,OAAO,CACpB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAC7E;IACH;8GAhCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACVD;AAUA;AAEA;AAEA;;;AAGG;MACU,8CAA8C,CAAA;IAEzD,MAAM,OAAO,CAAC,OAA4C,EAAA;AACxD,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;;AAGnC,QAAA,OAAO,CAAC,UAAU,CAAC,gCAAgC,CAAC,WAAW,EAAE;YAC/D,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,4BAAA,CAA8B;YAC7C,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,kCAAA,CAAoC;AACzD,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC;;AAGF,QAAA,OAAO,CAAC,UAAU,CAAC,gCAAgC,CAAC,WAAW,EAAE;YAC/D,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,4BAAA,CAA8B;YAC7C,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,kCAAA,CAAoC;AACzD,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC;;AAGF,QAAA,OAAO,CAAC,UAAU,CAAC,gCAAgC,CAAC,aAAa,EAAE;YACjE,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,+BAAA,CAAiC;YAChD,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,qCAAA,CAAuC;AAC5D,YAAA,YAAY,EAAE,GAAG;AACjB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;AACtC,gBAAA,OAAO,EAAE;oBACP,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,+BAAA,CAAiC;AACtD,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,GAAG,EAAE,KAAK;AACV,oBAAA,IAAI,EAAE,CAAC;AACR,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;;AAGF,QAAA,OAAO,CAAC,UAAU,CAAC,gCAAgC,CAAC,cAAc,EAAE;YAClE,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,+BAAA,CAAiC;YAChD,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,qCAAA,CAAuC;AAC5D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC;;AAGF,QAAA,OAAO,CAAC,UAAU,CAAC,gCAAgC,CAAC,cAAc,EAAE;YAClE,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,+BAAA,CAAiC;YAChD,WAAW,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,qCAAA,CAAuC;AAC5D,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,CAAC;IACJ;AACD;AAED;;ACtEO,MAAM,oBAAoB,GAAoB;AACnD,IAAA,IAAI,EAAE,oBAAoB;AAC1B,IAAA,KAAK,EAAE,oBAAoB;AAC3B,IAAA,WAAW,EAAE,4DAA4D;AACzE,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,MAAM,EAAE,CAAC,kBAAkB,CAAC,YAAY,CAAC;AACzC,IAAA,IAAI,EAAE,yBAAyB;AAC/B,IAAA,UAAU,EAAE;QACV,iBAAiB;QACjB,sBAAsB;QACtB,qBAAqB;AACtB,KAAA;AACD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE;AACJ,YAAA,SAAS,EAAE,MAAM,+EAA6C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iCAAiC,CAAC;AAChH,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,SAAS,EAAE,MAAM,+EAA6C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iCAAiC,CAAC;AAChH,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,MAAM,iFAA+C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,mCAAmC,CAAC;AACpH,SAAA;AACF;;;ACrBH;AAEA;AAEA,MAAM,OAAO,GAAG,CAAC,oBAAoB,CAAC;MAGzB,6BAA6B,CAAA;IACxC,UAAU,GAAA;AACR,QAAA,OAAO,OAAO;IAChB;8GAHW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA7B,6BAA6B,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;;MCQY,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,YAbzB,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAad,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,SAAA,EAXlB;YACP,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,6BAA6B,EAAE,KAAK,EAAE,IAAI,EAAE;AACjG,YAAA,oBAAoB,CAAC;AACjB,gBAAA;AACI,oBAAA,GAAG,EAAE,oBAAoB;AACzB,oBAAA,OAAO,EAAE,MACL,yEAA+C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,2BAA2B,CAAC;AACjG,iBAAA;aACJ,CAAC;AACL,SAAA,EAAA,OAAA,EAAA,CAXG,mBAAmB,CAAA,EAAA,CAAA,CAAA;;2FAad,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAfhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE;wBACL,mBAAmB;AACtB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACP,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,6BAA6B,EAAE,KAAK,EAAE,IAAI,EAAE;AACjG,wBAAA,oBAAoB,CAAC;AACjB,4BAAA;AACI,gCAAA,GAAG,EAAE,oBAAoB;AACzB,gCAAA,OAAO,EAAE,MACL,yEAA+C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,2BAA2B,CAAC;AACjG,6BAAA;yBACJ,CAAC;AACL,qBAAA;AACJ,iBAAA;;;MCfY,2CAA2C,CAAA;AAAxD,IAAA,WAAA,GAAA;AAEc,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAqBxD;IAnBI,MAAM,OAAO,CAAC,OAAmD,EAAA;AAC7D,QAAA,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE;YACxB,WAAW,EAAE,MAAK;AACd,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI;YACnC,CAAC;YACD,IAAI,EAAE,MAAK;AACP,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI;YACnC,CAAC;YACD,kBAAkB,EAAE,MAAK;AACrB,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW;YAC1C,CAAC;YACD,aAAa,EAAE,MAAK;AAChB,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM;YACrC,CAAC;YACD,kBAAkB,EAAE,MAAK;AACrB,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW;YAC1C,CAAC;AACJ,SAAA,CAAC;IACN;AACH;;MClBY,4BAA4B,CAAA;AAAzC,IAAA,WAAA,GAAA;AACmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAC/C,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAY;IA8EhI;IA5EE,KAAK,GAAA;QACH,OAAO,OAAO,CAAC,OAAO,CAAC;AACrB,YAAA;gBACE,IAAI,EAAE,mCAAmC,CAAC,KAAK;AAC/C,gBAAA,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,MAAK;oBACX,OAAO,IAAI,YAAY,CAAC;AACtB,wBAAA,GAAG,EAAE,IAAI;AACT,wBAAA,IAAI,EAAE,OAAO,CAAC,KAAI;AAChB,4BAAA,IAAI;gCACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;gCAC1C,OAAO;AACL,oCAAA,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC9B,wCAAA,GAAG,IAAI;wCACP,WAAW,EAAE,IAAI,CAAC,WAAW;AAC9B,qCAAA,CAAC,CAAC;oCACH,KAAK,EAAE,GAAG,CAAC,KAAK;iCACjB;4BACH;4BAAE,OAAO,CAAC,EAAE;AACV,gCAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACd,gCAAA,MAAM,CAAC;4BACT;wBACF,CAAC;AACD,wBAAA,KAAK,EAAE,OAAO,GAAY,KAAI;4BAC5B,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAa,CAAC;wBACpD,CAAC;AACD,wBAAA,QAAQ,EAAE,GAAG;AACd,qBAAA,CAAC;gBACJ,CAAC;AACD,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,QAAQ,EAAE,MAAM;wBAChB,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC7B,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,KAAK,EAAE,CAAA,YAAA,CAAc;AACrB,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC7B,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,KAAK,EAAE,CAAA,QAAA,CAAU;AACjB,wBAAA,QAAQ,EAAE,QAAQ;wBAClB,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC7B,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,QAAQ,EAAE;AACR,4BAAA,IAAI,EAAE,OAAO;AACd,yBAAA;AACD,wBAAA,MAAM,EAAE;4BACN,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC7B,yBAAA;AACD,wBAAA,UAAU,EAAE;AACV,4BAAA,OAAO,EAAE,IAAI;AACb,4BAAA,MAAM,EAAE,IAAI;AACb,yBAAA;AACqB,qBAAA;AACzB,iBAAA;AACD,gBAAA,SAAS,EAAE;AACT,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,KAAK,EAAE,cAAc;AACtB,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,IAAI,EAAE,IAAI;AACV,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;;ACzFD;AAIA;AAEA;AAEA;;;AAGG;AACG,MAAO,0BAA2B,SAAQ,iBAAiB,CAAA;AAAjE,IAAA,WAAA,GAAA;;QACW,IAAA,CAAA,GAAG,GAAG,oCAAoC;AAE1C,QAAA,IAAA,CAAA,aAAa,GAAG,kBAAkB,CAAC,OAAO;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAA0B;AACzC,YAAA;gBACE,IAAI,EAAE,kBAAkB,CAAC,OAAO;AAChC,gBAAA,KAAK,EAAE,gEAAgE;AACvE,gBAAA,WAAW,EAAE,sEAAsE;AACnF,gBAAA,IAAI,EAAE,0BAA0B;AAChC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,KAAK;AACf,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,kBAAkB,CAAC,OAAO;AAChC,gBAAA,KAAK,EAAE,gEAAgE;AACvE,gBAAA,WAAW,EAAE,sEAAsE;AACnF,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,OAAO,EAAE,KAAK;AACf,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,kBAAkB,CAAC,OAAO;AAChC,gBAAA,KAAK,EAAE,gEAAgE;AACvE,gBAAA,WAAW,EAAE,sEAAsE;AACnF,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,YAAY,EAAE,KAAK;AACpB,aAAA;SACF;AAEQ,QAAA,IAAA,CAAA,WAAW,GAA0B;AAC5C,YAAA;gBACE,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,EAAE,EAAE,kBAAkB,CAAC,OAAO;AAC9B,gBAAA,KAAK,EAAE,2EAA2E;AACnF,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,EAAE,EAAE,kBAAkB,CAAC,OAAO;AAC9B,gBAAA,KAAK,EAAE,wFAAwF;AAChG,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,EAAE,EAAE,kBAAkB,CAAC,OAAO;AAC9B,gBAAA,KAAK,EAAE,6EAA6E;AACrF,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,kBAAkB,CAAC,OAAO;gBAChC,EAAE,EAAE,kBAAkB,CAAC,OAAO;AAC9B,gBAAA,KAAK,EAAE,8FAA8F;AACtG,aAAA;SACF;IACH;AAAC;AAED;;AC3EA;AAIA;AAEA;AAEA;;AAEG;AACG,MAAO,6BAA8B,SAAQ,iBAAiB,CAAA;AAApE,IAAA,WAAA,GAAA;;QACW,IAAA,CAAA,GAAG,GAAG,uCAAuC;AAE7C,QAAA,IAAA,CAAA,aAAa,GAAG,qBAAqB,CAAC,MAAM;AAE5C,QAAA,IAAA,CAAA,QAAQ,GAA0B;AACzC,YAAA;gBACE,IAAI,EAAE,qBAAqB,CAAC,OAAO;AACnC,gBAAA,KAAK,EAAE,mEAAmE;AAC1E,gBAAA,WAAW,EAAE,yEAAyE;AACtF,gBAAA,IAAI,EAAE,4BAA4B;AAClC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,qBAAqB,CAAC,MAAM;AAClC,gBAAA,KAAK,EAAE,kEAAkE;AACzE,gBAAA,WAAW,EAAE,wEAAwE;AACrF,gBAAA,IAAI,EAAE,0BAA0B;AAChC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,qBAAqB,CAAC,aAAa;AACzC,gBAAA,KAAK,EAAE,2EAA2E;AAClF,gBAAA,WAAW,EAAE,iFAAiF;AAC9F,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,qBAAqB,CAAC,iBAAiB;AAC7C,gBAAA,KAAK,EAAE,8EAA8E;AACrF,gBAAA,WAAW,EAAE,oFAAoF;AACjG,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,qBAAqB,CAAC,SAAS;AACrC,gBAAA,KAAK,EAAE,qEAAqE;AAC5E,gBAAA,WAAW,EAAE,2EAA2E;AACxF,gBAAA,IAAI,EAAE,0BAA0B;AAChC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,qBAAqB,CAAC,QAAQ;AACpC,gBAAA,KAAK,EAAE,oEAAoE;AAC3E,gBAAA,WAAW,EAAE,0EAA0E;AACvF,gBAAA,IAAI,EAAE,wBAAwB;AAC9B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,qBAAqB,CAAC,QAAQ;AACpC,gBAAA,KAAK,EAAE,oEAAoE;AAC3E,gBAAA,WAAW,EAAE,0EAA0E;AACvF,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;SACF;QAEQ,IAAA,CAAA,WAAW,GAA0B,EAAE;IAClD;AAAC;AAED;;ACrFA;AAIA;AAEA;AAEA;;;AAGG;AACG,MAAO,qBAAsB,SAAQ,iBAAiB,CAAA;AAA5D,IAAA,WAAA,GAAA;;QACW,IAAA,CAAA,GAAG,GAAG,wCAAwC;AAE9C,QAAA,IAAA,CAAA,aAAa,GAAG,mBAAmB,CAAC,MAAM;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAA0B;AACzC,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,OAAO;AACjC,gBAAA,KAAK,EAAE,yDAAyD;AAChE,gBAAA,WAAW,EAAE,uEAAuE;AACpF,gBAAA,IAAI,EAAE,gCAAgC;AACtC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,MAAM;AAChC,gBAAA,KAAK,EAAE,wDAAwD;AAC/D,gBAAA,WAAW,EAAE,sEAAsE;AACnF,gBAAA,IAAI,EAAE,wBAAwB;AAC9B,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,SAAS;AACnC,gBAAA,KAAK,EAAE,2DAA2D;AAClE,gBAAA,WAAW,EAAE,yEAAyE;AACtF,gBAAA,IAAI,EAAE,0BAA0B;AAChC,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ;AAClC,gBAAA,KAAK,EAAE,0DAA0D;AACjE,gBAAA,WAAW,EAAE,wEAAwE;AACrF,gBAAA,IAAI,EAAE,wBAAwB;AAC9B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ;AAClC,gBAAA,KAAK,EAAE,0DAA0D;AACjE,gBAAA,WAAW,EAAE,wEAAwE;AACrF,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,YAAY,EAAE,IAAI;AACnB,aAAA;SACF;AAEQ,QAAA,IAAA,CAAA,WAAW,GAA0B;AAC5C,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,OAAO;gBACjC,EAAE,EAAE,mBAAmB,CAAC,MAAM;AAC9B,gBAAA,KAAK,EAAE,+DAA+D;AACvE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,OAAO;gBACjC,EAAE,EAAE,mBAAmB,CAAC,QAAQ;AAChC,gBAAA,KAAK,EAAE,wEAAwE;AAChF,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,MAAM;gBAChC,EAAE,EAAE,mBAAmB,CAAC,SAAS;AACjC,gBAAA,KAAK,EAAE,8DAA8D;AACtE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,SAAS;gBACnC,EAAE,EAAE,mBAAmB,CAAC,MAAM;AAC9B,gBAAA,KAAK,EAAE,8DAA8D;AACtE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,MAAM;gBAChC,EAAE,EAAE,mBAAmB,CAAC,QAAQ;AAChC,gBAAA,KAAK,EAAE,8DAA8D;AACtE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ;gBAClC,EAAE,EAAE,mBAAmB,CAAC,MAAM;AAC9B,gBAAA,KAAK,EAAE,6DAA6D;AACrE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,SAAS;gBACnC,EAAE,EAAE,mBAAmB,CAAC,QAAQ;AAChC,gBAAA,KAAK,EAAE,8DAA8D;AACtE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,MAAM;gBAChC,EAAE,EAAE,mBAAmB,CAAC,QAAQ;AAChC,gBAAA,KAAK,EAAE,8DAA8D;AACtE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,SAAS;gBACnC,EAAE,EAAE,mBAAmB,CAAC,QAAQ;AAChC,gBAAA,KAAK,EAAE,8DAA8D;AACtE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ;gBAClC,EAAE,EAAE,mBAAmB,CAAC,QAAQ;AAChC,gBAAA,KAAK,EAAE,8DAA8D;AACtE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,OAAO;gBACjC,EAAE,EAAE,mBAAmB,CAAC,QAAQ;AAChC,gBAAA,KAAK,EAAE,8DAA8D;AACtE,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ;gBAClC,EAAE,EAAE,mBAAmB,CAAC,MAAM;AAC9B,gBAAA,KAAK,EAAE,uEAAuE;AAC/E,aAAA;SACF;IACH;AAAC;AAED;;MCnIa,eAAe,CAAA;AAA5B,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAuElD;IArEE,MAAM,OAAO,CAAC,OAA+B,EAAA;AAC3C,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;;QAGzC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC;AACrE,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;;YAExB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;AACtD,gBAAA;AACE,oBAAA,QAAQ,EAAE,CAAC;AACX,oBAAA,IAAI,EAAE,8CAA8C;AACpD,oBAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;oBAC5B,IAAI,EAAE,6BAA6B,CAAC,IAAI;AACxC,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,MAAM,EAAE;AACN,wBAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AACnC,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC;QACJ;;QAGA,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;AACxD,YAAA;AACE,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW;AAC3C,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;gBACpC,IAAI,EAAE,6BAA6B,CAAC,KAAK;AACzC,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/E,gBAAA,MAAM,EAAE;oBACN,QAAQ,EAAE,CAAC,UAAU,CAAC;AACtB,oBAAA,WAAW,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7D,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW;AAC3C,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAC/E,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;gBACpC,IAAI,EAAE,6BAA6B,CAAC,KAAK;AACzC,gBAAA,MAAM,EAAE;oBACN,QAAQ,EAAE,CAAC,UAAU,CAAC;AACtB,oBAAA,WAAW,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7D,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW;AACpD,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC;AACxF,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI;gBAC7C,IAAI,EAAE,6BAA6B,CAAC,cAAc;AAClD,gBAAA,MAAM,EAAE;oBACN,QAAQ,EAAE,CAAC,UAAU,CAAC;AACtB,oBAAA,WAAW,EAAE,CAAC,mCAAmC,CAAC,aAAa,CAAC,IAAI,CAAC;AACtE,iBAAA;AACF,aAAA;;;;;;;;;;;AAWF,SAAA,CAAC;IACJ;AACD;;ACzED;AAEA;MAGa,+BAA+B,CAAA;;IAI1C,MAAM,MAAM,CAAC,OAA+C,EAAA;QAC1D,MAAM,IAAI,GAAG,mCAAmC;;QAGhD,MAAM,kBAAkB,GAAG,yCAAyC;QACpE,MAAM,iBAAiB,GAAG,wCAAwC;QAClE,MAAM,iBAAiB,GAAG,wCAAwC;QAClE,MAAM,oBAAoB,GAAG,2CAA2C;QACxE,MAAM,oBAAoB,GAAG,2CAA2C;QAExE;AACG,aAAA,QAAQ,CACP,UAAU,CAAC,MAAM,CAAC,IAAI,EACtB,CAAA,EAAG,kBAAkB,CAAA,MAAA,CAAQ,EAC7B,CAAA,EAAG,kBAAkB,cAAc;;AAGpC,aAAA,aAAa,CACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB,CAAA,EAAG,iBAAiB,CAAA,aAAA,CAAe,EACnC,CAAA,EAAG,iBAAiB,qBAAqB;AAE1C,aAAA,QAAQ,CACP,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,CAAA,EAAG,iBAAiB,CAAA,WAAA,CAAa,EACjC,CAAA,EAAG,iBAAiB,mBAAmB;AAExC,aAAA,QAAQ,CACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,CAAA,EAAG,iBAAiB,CAAA,aAAA,CAAe,EACnC,CAAA,EAAG,iBAAiB,qBAAqB;AAE1C,aAAA,QAAQ,CACP,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,CAAA,EAAG,iBAAiB,CAAA,WAAA,CAAa,EACjC,CAAA,EAAG,iBAAiB,mBAAmB;AAExC,aAAA,QAAQ,CACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,CAAA,EAAG,iBAAiB,CAAA,aAAA,CAAe,EACnC,CAAA,EAAG,iBAAiB,qBAAqB;AAE1C,aAAA,aAAa;;AAEb,aAAA,aAAa,CACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EACpB,CAAA,EAAG,iBAAiB,CAAA,aAAA,CAAe,EACnC,CAAA,EAAG,iBAAiB,qBAAqB;AAE1C,aAAA,QAAQ,CACP,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,CAAA,EAAG,iBAAiB,CAAA,WAAA,CAAa,EACjC,CAAA,EAAG,iBAAiB,mBAAmB;AAExC,aAAA,QAAQ,CACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,CAAA,EAAG,iBAAiB,CAAA,aAAA,CAAe,EACnC,CAAA,EAAG,iBAAiB,qBAAqB;AAE1C,aAAA,QAAQ,CACP,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,CAAA,EAAG,iBAAiB,CAAA,WAAA,CAAa,EACjC,CAAA,EAAG,iBAAiB,mBAAmB;AAExC,aAAA,QAAQ,CACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAChB,CAAA,EAAG,iBAAiB,CAAA,aAAA,CAAe,EACnC,CAAA,EAAG,iBAAiB,qBAAqB;AAE1C,aAAA,aAAa;;AAEb,aAAA,aAAa,CACZ,IAAI,CAAC,aAAa,CAAC,UAAU,EAC7B,CAAA,EAAG,oBAAoB,CAAA,aAAA,CAAe,EACtC,CAAA,EAAG,oBAAoB,qBAAqB;AAE7C,aAAA,QAAQ,CACP,IAAI,CAAC,aAAa,CAAC,IAAI,EACvB,CAAA,EAAG,oBAAoB,CAAA,WAAA,CAAa,EACpC,CAAA,EAAG,oBAAoB,mBAAmB;AAE3C,aAAA,QAAQ,CACP,IAAI,CAAC,aAAa,CAAC,SAAS,EAC5B,CAAA,EAAG,oBAAoB,CAAA,gBAAA,CAAkB,EACzC,CAAA,EAAG,oBAAoB,wBAAwB;AAEhD,aAAA,aAAa;;AAEb,aAAA,aAAa,CACZ,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,CAAA,EAAG,oBAAoB,CAAA,aAAA,CAAe,EACtC,CAAA,EAAG,oBAAoB,qBAAqB;AAE7C,aAAA,QAAQ,CACP,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,CAAA,EAAG,oBAAoB,CAAA,WAAA,CAAa,EACpC,CAAA,EAAG,oBAAoB,mBAAmB;AAE3C,aAAA,QAAQ,CACP,IAAI,CAAC,MAAM,CAAC,MAAM,EAClB,CAAA,EAAG,oBAAoB,CAAA,aAAA,CAAe,EACtC,CAAA,EAAG,oBAAoB,qBAAqB;AAE7C,aAAA,QAAQ,CACP,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,CAAA,EAAG,oBAAoB,CAAA,WAAA,CAAa,EACpC,CAAA,EAAG,oBAAoB,mBAAmB;AAE3C,aAAA,QAAQ,CACP,IAAI,CAAC,MAAM,CAAC,MAAM,EAClB,CAAA,EAAG,oBAAoB,CAAA,aAAA,CAAe,EACtC,CAAA,EAAG,oBAAoB,qBAAqB;AAE7C,aAAA,aAAa;;AAEb,aAAA,QAAQ,EAAE;IACf;8GAxHW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA/B,+BAA+B,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C;;;ACRD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACM,MAAO,wBAAyB,SAAQ,wBAAwB,CAAA;AAAtE,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,QAAQ,GAAG;AACT,YAAA,yBAAyB,CAAC;AACxB,gBAAA,EAAE,EAAE,sBAAsB;AAC1B,gBAAA,SAAS,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAA,CAAE;AACxE,gBAAA,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;AAC5H,gBAAA,QAAQ,EAAE,qDAAqD;AAC/D,gBAAA,cAAc,EAAE,2DAA2D;AAC3E,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;aACrC,CAAC;AACF,YAAA,yBAAyB,CAAC;AACxB,gBAAA,EAAE,EAAE,sBAAsB;AAC1B,gBAAA,SAAS,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAA,CAAE;AACxE,gBAAA,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;AAC5H,gBAAA,QAAQ,EAAE,qDAAqD;AAC/D,gBAAA,cAAc,EAAE,2DAA2D;AAC3E,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI;aACrC,CAAC;SACH;IACH;AAAC;;AC/BD;MAGa,8CAA8C,CAAA;AACzD,IAAA,MAAM,KAAK,GAAA;QACT,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,WAAW,EACT,sHAAsH;AACxH,gBAAA,EAAE,EAAE;AACF,oBAAA,WAAW,EAAE,SAAS;AACtB,oBAAA,SAAS,EAAE,kFAAkF;AAC7F,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,iBAAiB;AACvB,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,WAAW,EACT,0GAA0G;AAC5G,gBAAA,EAAE,EAAE;AACF,oBAAA,WAAW,EAAE,mBAAmB;AAChC,oBAAA,SAAS,EAAE,yDAAyD;AACpE,oBAAA,SAAS,EAAE,QAAQ;AACnB,oBAAA,KAAK,EAAE,EAAE;AACV,iBAAA;AACF,aAAA;SACF;IACH;8GA5BW,8CAA8C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA9C,8CAA8C,EAAA,CAAA,CAAA;;2FAA9C,8CAA8C,EAAA,UAAA,EAAA,CAAA;kBAD1D;;;MCkGY,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAjFpC,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAiFX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,SAAA,EA7E3B;;AAET,YAAA;AACE,gBAAA,OAAO,EAAE,uCAAuC;AAChD,gBAAA,QAAQ,EAAE,2CAA2C;AACrD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,QAAQ,EAAE,0BAA0B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,QAAQ,EAAE,+BAA+B;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,eAAe;AACzB,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,QAAQ,EAAE,wBAAwB;AAClC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,8CAA8C;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,QAAQ,EAAE,qBAAqB;AAC/B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,QAAQ,EAAE,0BAA0B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,oBAAoB;AAC7B,gBAAA,QAAQ,EAAE,6BAA6B;AACvC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,QAAQ,EAAE,4BAA4B;AACtC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,8CAA8C;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA,oBAAoB,CAAC;AACnB,gBAAA;AACE,oBAAA,GAAG,EAAE,mBAAmB;AACxB,oBAAA,OAAO,EAAE,MAAM,OAAO,4FAAsC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,0BAA0B,CAAC;AACxG,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,gDAAgD;AACrD,oBAAA,OAAO,EAAE,MACP,OAAO,oGAA8C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gCAAgC,CAAC;AACzG,iBAAA;aACF,CAAC;AACH,SAAA,EAAA,OAAA,EAAA,CA/EC,oBAAoB,CAAA,EAAA,CAAA,CAAA;;2FAiFX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAnFvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,oBAAoB;AACrB,qBAAA;AACD,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,SAAS,EAAE;;AAET,wBAAA;AACE,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,QAAQ,EAAE,2CAA2C;AACrD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,0BAA0B;AACpC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,QAAQ,EAAE,+BAA+B;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,eAAe;AACzB,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,iBAAiB;AAC3B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,QAAQ,EAAE,wBAAwB;AAClC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,QAAQ,EAAE,8CAA8C;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,QAAQ,EAAE,qBAAqB;AAC/B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,QAAQ,EAAE,0BAA0B;AACpC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,QAAQ,EAAE,6BAA6B;AACvC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,QAAQ,EAAE,4BAA4B;AACtC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,QAAQ,EAAE,8CAA8C;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA,oBAAoB,CAAC;AACnB,4BAAA;AACE,gCAAA,GAAG,EAAE,mBAAmB;AACxB,gCAAA,OAAO,EAAE,MAAM,OAAO,4FAAsC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,0BAA0B,CAAC;AACxG,6BAAA;AACD,4BAAA;AACE,gCAAA,GAAG,EAAE,gDAAgD;AACrD,gCAAA,OAAO,EAAE,MACP,OAAO,oGAA8C,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,gCAAgC,CAAC;AACzG,6BAAA;yBACF,CAAC;AACH,qBAAA;AACF,iBAAA;;;ACtGD;AAqDA;AAkCM,MAAO,6BAA8B,SAAQ,mBAAmB,CAAA;;;AA4CpE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;;AA1CD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,8BAA8B,CAAC;;AAG1D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG1C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;;AAG/C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAsC,IAAI,oFAAC;;AAGjE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,EAAE,kFAAC;;AAGxB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAiC,EAAE,6EAAC;;AAG7D,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAW,EAAE,yFAAC;;AAGxC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;;AAGhC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK,kFAAC;;AAGzB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAW,EAAE,0FAAC;;QAGpD,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAY;;QAGvC,IAAA,CAAA,mBAAmB,GAAG,MAAM,EAAY;;AAG9B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,IAAI,sFAAC;AA0ExC;;AAEG;AACO,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;YAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,WAAW,IAAI,EAAE;AAC3D,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AACzC,QAAA,CAAC,4EAAC;AAEF;;AAEG;AACO,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACxC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;gBAClC,OAAO;AACL,oBAAA,GAAG,KAAK;oBACR,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;iBAClC;AACH,YAAA,CAAC,CAAC;YACF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9D,QAAA,CAAC,sFAAC;;AAGiB,QAAA,IAAA,CAAA,yBAAyB,GAAG,QAAQ,CAAC,MAAM;YAC5D,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;AACR,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,2BAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAGiB,QAAA,IAAA,CAAA,mCAAmC,GAAG,QAAQ,CAAC,MAAM;YACtE,EAAE,UAAU,EAAE,CAAC,EAAE;YACjB,EAAE,UAAU,EAAE,CAAC,EAAE;YACjB,EAAE,UAAU,EAAE,CAAC,EAAE;YACjB,EAAE,UAAU,EAAE,CAAC,EAAE;AAClB,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qCAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;QAGiB,IAAA,CAAA,yBAAyB,GAAG,CAAC,KAAa,KAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC;;AAG1C,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,qFAAC;;AAGnE,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CACvC,MAAoC;AAClC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE;YAC9D,IAAI,CAAC,eAAe,EAAE;AACpB,gBAAA,OAAO,EAAE;YACX;YAEA,OAAO,IAAI,CAAC,eAAe;AACxB,iBAAA,GAAG,CAAC,CAAC,KAAK,MAAM;gBACf,KAAK;AACL,gBAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CACxB,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,eAAe,CAAC,CACzD;AACF,aAAA,CAAC;AACD,iBAAA,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAA,CAAC,2FACF;;AAGS,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,uFAC5C;QAzIC,iCAAiC,CAC/B,MAAK;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;AACzB,gBAAA,OAAO,EAAE;YACX;YAEA,OAAO;AACL,gBAAA;AACE,oBAAA,KAAK,EAAE,+BAA+B;AACtC,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE;AACxC,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,+BAA+B;AACtC,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE;AACxC,iBAAA;aACF;AACH,QAAA,CAAC,EACD,EAAE,EAAE,EAAE,0BAA0B,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,CACrE;IACH;;;AAMA;;AAEG;IACK,cAAc,CAAI,KAAc,EAAE,QAAW,EAAA;AACnD,QAAA,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC/B,OAAQ,KAAiB,EAAE;QAC7B;AAEA,QAAA,QAAQ,KAAK,IAAI,QAAQ;IAC3B;;IAGU,aAAa,GAAA;QACrB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;IACrD;;IAGU,cAAc,GAAA;QACtB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC;IAClD;;IAGU,qBAAqB,GAAA;QAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;IACzD;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,KAAgC,EAAA;QACrD,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,KAAI;AAChC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC9B,OAAO;AACL,gBAAA,GAAG,IAAI;gBACP,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,gBAAA,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI;aAClE;AACH,QAAA,CAAC,CAAC;IACJ;;;AA4EA;;;;;;AAMG;AACK,IAAA,8BAA8B,CAAC,SAAiB,EAAA;;AAEtD,QAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AAClC,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC;QACjB;;AAGA,QAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,OAAO;iBACJ,KAAK,CAAC,GAAG;iBACT,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC1D,IAAI,CAAC,EAAE,CAAC;QACb;;AAGA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACK,IAAA,4BAA4B,CAClC,MAAsC,EAAA;AAEtC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,IAAI,CAAC;YAClE,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC;AACxD,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACK,IAAA,yBAAyB,CAC/B,WAAsC,EAAA;QAEtC,IAAI,KAAK,GAAa,EAAE;AACxB,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AAC9B,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACzB,gBAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrE;QACF;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;AACK,IAAA,QAAQ,CAAC,KAAmC,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;AACxE,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KACjC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CACnC,CAAC,MAAM;AACR,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;IACzB;AAEA;;AAEG;AACK,IAAA,UAAU,CAAC,IAAY,EAAA;QAC7B,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClD;AAEA;;AAEG;AACO,IAAA,aAAa,CAAC,KAAc,EAAA;AACpC,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEA;;AAEG;IACK,iBAAiB,CACvB,IAAwB,EACxB,eAAuB,EAAA;QAEvB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI;QACtE,QACE,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YAClD,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IAEhD;AAEA;;AAEG;IACK,iBAAiB,CACvB,UAAmC,EACnC,eAAuB,EAAA;QAEvB,QACE,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC;YACzD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,WAAW,EAAE,eAAe,CAAC;IAEnE;AAEA;;AAEG;IACK,YAAY,CAClB,KAAmC,EACnC,eAAuB,EAAA;QAEvB,QACE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC;YACpD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,WAAW,EAAE,eAAe,CAAC;IAE9D;AAEA;;AAEG;IACK,iBAAiB,CACvB,KAAgC,EAChC,eAAuB,EAAA;QAEvB,MAAM,MAAM,GAA8B,EAAE;AAE5C,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAC7C,IAAI,CAAC,QAAQ,IAAI,EAAE,EACnB,eAAe,CAChB;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC;YAEjE,IAAI,WAAW,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;gBAC7C,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,GAAG,IAAI;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC3B,iBAAA,CAAC;YACJ;QACF;AAEA,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACK,2BAA2B,CACjC,KAAmC,EACnC,eAAuB,EAAA;AAEvB,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE;QAE3C,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE;AAC7C,YAAA,OAAO,WAAW;QACpB;QAEA,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,CAAC;IAC7D;AAEA;;AAEG;AACK,IAAA,sBAAsB,CAAC,IAAsB,EAAA;AACnD,QAAA,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,gBAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAC1D;QACF;AACA,QAAA,OAAO,KAAK;IACd;AAEA;;AAEG;IACI,sBAAsB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;IACnC;AAEA;;AAEG;AACI,IAAA,sBAAsB,CAAC,WAAqB,EAAA;QACjD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC1D;AAEA;;AAEG;IACI,iBAAiB,GAAA;QACtB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC3D;;;AAIA;;;AAGG;AACM,IAAA,MAAM,QAAQ,GAAA;QACrB,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;YAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC;AACnE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;;AAG/B,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAC3C;YAEA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC5D;gBAAU;AACR,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;QACjC;IACF;;;AAIA;;AAEG;AACO,IAAA,mBAAmB,CAAC,IAAkC,EAAA;AAC9D,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9B;AAEA;;AAEG;AACO,IAAA,mBAAmB,CAC3B,KAAyC,EAAA;QAEzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IACzC;AAEA;;AAEG;IACO,kBAAkB,CAC1B,IAAsB,EACtB,CAAsB,EAAA;;AAGtB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACzB;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;AAC/C,QAAA,IAAI,CAAC,CAAC,KAAK,EAAE;;AAEX,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C;aAAO;;YAEL,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC1B,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACnE;QACH;QACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC1D;AAEA;;AAEG;IACO,iBAAiB,GAAA;QACzB,IAAI,CAAC,KAAK,EAAE;IACd;AAEA;;AAEG;IACO,iBAAiB,GAAA;AACzB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE;AACjD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IACzB;8GAvdW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,yzBCvF1C,0yQA6OA,EAAA,MAAA,EAAA,CAAA,s1DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;gBDhLI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;gBAEd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,cAAc,6XACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,KAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,+BAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEb,eAAe,8BACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,GAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FASf,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAhCzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAAA,OAAA,EAGzB;;wBAEP,YAAY;wBACZ,WAAW;wBACX,cAAc;;wBAEd,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,gBAAgB;wBAChB,YAAY;wBACZ,iBAAiB;wBACjB,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,eAAe;wBACf,gBAAgB;wBAChB,iBAAiB;wBACjB,wBAAwB;qBACzB,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EACH,kFAAkF;AACpF,wBAAA,kBAAkB,EAAE,mCAAmC;AACxD,qBAAA,EAAA,QAAA,EAAA,0yQAAA,EAAA,MAAA,EAAA,CAAA,s1DAAA,CAAA,EAAA;;;;;;;;AElDH;AAEA;MAGa,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;;AAImB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAC3D,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC5C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAsGxE,IAAA;;;IAhGC,MAAM,OAAO,CAAC,KAAuC,EAAA;AACnD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI;YACpC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBACzD,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,uCAAuC,CAAC;AAC5F,qBAAA;iBACF;YACH;AAEA,YAAA,MAAM,SAAS,GAAG,MAAM,2EAA4D,CAAC,IAAI,CACvF,CAAC,CAAC,KAAK,CAAC,CAAC,6BAA6B,CACvC;YAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAC9D,mEAAmE,CACpE;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAI,IAAI,CAAC,aAAa,CAAc,GAAG,EAAE;YAEhG,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE;AAC1D,gBAAA,KAAK,EAAE,SAAS,GAAG,CAAA,EAAG,WAAW,CAAA,GAAA,EAAM,SAAS,CAAA,CAAE,GAAG,WAAW;AAChE,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,IAAI,EAAE;oBACJ,kBAAkB;AAClB,oBAAA,WAAW,EAAE,IAAI;AAClB,iBAAA;AACF,aAAA,CAAC;AAEF,YAAA,MAAM,WAAW,GAAG,WAAW,EAAE,IAAI;AACrC,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACzB,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YACpE;AAEA,YAAA,MAAM,SAAS,GAAG,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE;AAC/E,YAAA,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;AACrD,YAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;AAC3E,YAAA,MAAM,aAAa,GAAG;AACpB,gBAAA,GAAG,IAAI;gBACP,WAAW;aACZ;AAED,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAA+E,EAChI,aAAa,CACd;AAED,YAAA,MAAM,IAAI,CAAC,gBAAgB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAChG,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAE1E,OAAO;AACL,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,IAAI,EAAE,WAAW;aAClB;QACH;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,+BAA+B;YACxF,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;aAC3B;QACH;IACF;;;AAMQ,IAAA,gBAAgB,CAAC,KAAc,EAAA;QACrC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,IAAI,IAAI,OAAO;AACnE,QAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;YACnB,OAAO,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;QACzD;AAEA,QAAA,OAAO,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;IACjE;AAEQ,IAAA,MAAM,gBAAgB,GAAA;AAC5B,QAAA,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAU,iBAAiB,CAAC,qBAAqB,CAAC;QAC9G,IAAI,CAAC,qBAAqB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,YAAA,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,yCAAyC,CAAC;YAC9F,OAAO,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,wCAAwC,CAAC;AAChG,SAAA,CAAC;IACJ;8GA3GW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;;;;;;ACUK,MAAO,iCAAkC,SAAQ,uBAAiC,CAAA;AAjCxF,IAAA,WAAA,GAAA;;AAkCU,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,8BAA8B,CAAC;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACjD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAiC,EAAE,6EAAC;AAErD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,YAAW;;YAE3C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC9B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;AAC3D,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;YAC7B;AACF,QAAA,CAAC,uFAAC;AAEQ,QAAA,IAAA,CAAA,0BAA0B,GAAG,QAAQ,CAAC,MAAK;AACnD,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAqC,EAAE;YAEnD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjC,MAAM,SAAS,GAAqB,EAAE;gBAEtC,MAAM,mBAAmB,GAAG,CAAC,KAAgC,EAAE,IAAA,GAAkC,EAAE,KAAI;AACrG,oBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;wBACxB,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC;wBAEnC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC3B,4BAAA,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;4BAC7D,SAAS,CAAC,IAAI,CAAC;gCACb,KAAK;AACL,gCAAA,IAAI,EAAE,WAAW;gCACjB;AACD,6BAAA,CAAC;wBACJ;AAEA,wBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE;AACzB,4BAAA,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;wBACjD;oBACF;AACF,gBAAA,CAAC;AAED,gBAAA,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC;AACtC,gBAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS;YAChC;AAEA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC,iGAAC;AAEQ,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAK;YAChC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACnF,QAAA,CAAC,8EAAC;AAWH,IAAA;AATW,IAAA,MAAM,qBAAqB,GAAA;AACnC,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAoB,EAAE;AACtD,YAAA,WAAW,EAAE;AACX,gBAAA,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAChC,gBAAA,MAAM,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAA,CAAE;AACtE,aAAA;AACF,SAAA,CAAC;IACJ;8GAzDW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/BlC;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BP,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGO,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAE3D,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAjC7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BP,IAAA,CAAA;AACH,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,mBAAmB,EAAE,wBAAwB;AACvE,iBAAA;;;;;;;;AC5BK,MAAO,iCAAkC,SAAQ,uBAAiC,CAAA;;AAGtF;;AAEG;AACO,IAAA,oBAAoB,CAAC,WAAqB,EAAA;AAClD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC5B;8GARW,iCAAiC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAblC;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAIC,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGpB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAf7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE;wBACP;AACH;AACA,iBAAA;;;;;;;;ACDK,MAAO,mCAAoC,SAAQ,wBAA6B,CAAA;AAVtF,IAAA,WAAA,GAAA;;AAYY,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,4EAAC;AAChD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAU5D,IAAA;AARC,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAoB,EAAE;AACtD,YAAA,WAAW,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,OAAO;AAClB,gBAAA,MAAM,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAA,CAAE;AACtE,aAAA;AACF,SAAA,CAAC;IACJ;8GAZW,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARpC;;GAET,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,GAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGhC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAV/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,+BAA+B;AACzC,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,MAAM,EAAE,CAAC,UAAU,EAAE,SAAS;AAC/B,iBAAA;;;;;;;;ACjBD;;ACAA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-security-management-client.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { AXPContextDefinition, AXPExpression } from '@acorex-platform/framework-shared/core';
|
|
2
|
+
import { AXPEntityModel } from '@acorex-platform/framework-shared/entity';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
declare const AXMSecurityManagementDataSourceKeys: {
|
|
6
|
-
readonly Users: "users";
|
|
7
|
-
};
|
|
4
|
+
declare const AXM_SECURITY_CONTEXT_DEFINITIONS: AXPContextDefinition[];
|
|
8
5
|
|
|
9
6
|
/**
|
|
10
7
|
* Security Management Module Feature Keys.
|
|
@@ -16,6 +13,8 @@ declare const AXPSecurityManagementFeatureKeys: {
|
|
|
16
13
|
readonly MaxTotalUsers: "SecurityManagement:Feature:MaxTotalUsers";
|
|
17
14
|
readonly ManageSessions: "SecurityManagement:Feature:ManageSessions";
|
|
18
15
|
readonly ManagePolicies: "SecurityManagement:Feature:ManagePolicies";
|
|
16
|
+
/** Platform Console only — Identity Provider management menu + CRUD. */
|
|
17
|
+
readonly ManageIdentityProviders: "SecurityManagement:Feature:ManageIdentityProviders";
|
|
19
18
|
};
|
|
20
19
|
|
|
21
20
|
declare const AXPSecurityManagementMenuKeys: {
|
|
@@ -24,38 +23,74 @@ declare const AXPSecurityManagementMenuKeys: {
|
|
|
24
23
|
readonly Roles: "SecurityManagement:Menu:Roles";
|
|
25
24
|
readonly DeviceSessions: "SecurityManagement:Menu:DeviceSessions";
|
|
26
25
|
readonly Policy: "SecurityManagement:Menu:Policy";
|
|
26
|
+
readonly IdentityProviders: "SecurityManagement:Menu:IdentityProviders";
|
|
27
27
|
readonly MyProfile: "SecurityManagement:Menu:MyProfile";
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Administration capabilities used by this module.
|
|
32
|
+
* Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).
|
|
33
|
+
*/
|
|
34
|
+
declare const AXPAdministrationPermissionKeys: {
|
|
35
|
+
readonly Access: "Administration:Permission:Access";
|
|
36
|
+
/** Create and maintain users, roles, role assignments, and related security-access reports. */
|
|
37
|
+
readonly MaintainUsersAndRoles: "Administration:Permission:MaintainUsersAndRoles";
|
|
38
|
+
readonly ManageSessions: "Administration:Permission:ManageSessions";
|
|
39
|
+
readonly MaintainPolicies: "Administration:Permission:MaintainPolicies";
|
|
40
|
+
readonly ViewIntegrations: "Administration:Permission:ViewIntegrations";
|
|
41
|
+
readonly MaintainConnections: "Administration:Permission:MaintainConnections";
|
|
42
|
+
readonly ManageIntegrationActions: "Administration:Permission:ManageIntegrationActions";
|
|
43
|
+
readonly MaintainWorkflows: "Administration:Permission:MaintainWorkflows";
|
|
44
|
+
readonly ManageWorkflowActions: "Administration:Permission:ManageWorkflowActions";
|
|
45
|
+
readonly ViewRules: "Administration:Permission:ViewRules";
|
|
46
|
+
readonly MaintainRules: "Administration:Permission:MaintainRules";
|
|
47
|
+
readonly ManageRuleActions: "Administration:Permission:ManageRuleActions";
|
|
48
|
+
readonly MaintainAi: "Administration:Permission:MaintainAi";
|
|
49
|
+
readonly UseAiAssist: "Administration:Permission:UseAiAssist";
|
|
50
|
+
readonly MaintainDashboards: "Administration:Permission:MaintainDashboards";
|
|
51
|
+
readonly ViewJobs: "Administration:Permission:ViewJobs";
|
|
52
|
+
readonly ManageJobActions: "Administration:Permission:ManageJobActions";
|
|
53
|
+
readonly ViewObservability: "Administration:Permission:ViewObservability";
|
|
54
|
+
readonly MaintainObservability: "Administration:Permission:MaintainObservability";
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* @deprecated Prefer {@link AXPAdministrationPermissionKeys}.
|
|
58
|
+
* Legacy nested shape kept so existing imports compile during migration.
|
|
59
|
+
*/
|
|
30
60
|
declare const AXPSecurityManagementPermissionKeys: {
|
|
31
61
|
readonly User: {
|
|
32
|
-
readonly Management: "
|
|
33
|
-
readonly View: "
|
|
34
|
-
readonly Edit: "
|
|
35
|
-
readonly Delete: "
|
|
36
|
-
readonly Create: "
|
|
62
|
+
readonly Management: "Administration:Permission:MaintainUsersAndRoles";
|
|
63
|
+
readonly View: "Administration:Permission:MaintainUsersAndRoles";
|
|
64
|
+
readonly Edit: "Administration:Permission:MaintainUsersAndRoles";
|
|
65
|
+
readonly Delete: "Administration:Permission:MaintainUsersAndRoles";
|
|
66
|
+
readonly Create: "Administration:Permission:MaintainUsersAndRoles";
|
|
37
67
|
};
|
|
38
68
|
readonly Role: {
|
|
39
|
-
readonly Management: "
|
|
40
|
-
readonly View: "
|
|
41
|
-
readonly Edit: "
|
|
42
|
-
readonly Delete: "
|
|
43
|
-
readonly Create: "
|
|
69
|
+
readonly Management: "Administration:Permission:MaintainUsersAndRoles";
|
|
70
|
+
readonly View: "Administration:Permission:MaintainUsersAndRoles";
|
|
71
|
+
readonly Edit: "Administration:Permission:MaintainUsersAndRoles";
|
|
72
|
+
readonly Delete: "Administration:Permission:MaintainUsersAndRoles";
|
|
73
|
+
readonly Create: "Administration:Permission:MaintainUsersAndRoles";
|
|
44
74
|
};
|
|
45
75
|
readonly DeviceSession: {
|
|
46
|
-
readonly Management: "
|
|
47
|
-
readonly View: "
|
|
48
|
-
readonly Terminate: "
|
|
76
|
+
readonly Management: "Administration:Permission:ManageSessions";
|
|
77
|
+
readonly View: "Administration:Permission:ManageSessions";
|
|
78
|
+
readonly Terminate: "Administration:Permission:ManageSessions";
|
|
49
79
|
};
|
|
50
80
|
readonly Policy: {
|
|
51
|
-
readonly Management: "
|
|
52
|
-
readonly View: "
|
|
53
|
-
readonly Edit: "
|
|
54
|
-
readonly Delete: "
|
|
55
|
-
readonly Create: "
|
|
81
|
+
readonly Management: "Administration:Permission:MaintainPolicies";
|
|
82
|
+
readonly View: "Administration:Permission:MaintainPolicies";
|
|
83
|
+
readonly Edit: "Administration:Permission:MaintainPolicies";
|
|
84
|
+
readonly Delete: "Administration:Permission:MaintainPolicies";
|
|
85
|
+
readonly Create: "Administration:Permission:MaintainPolicies";
|
|
56
86
|
};
|
|
57
87
|
};
|
|
58
88
|
|
|
89
|
+
/** Component key for the Role permissions page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */
|
|
90
|
+
declare const ROLE_PERMISSIONS_PAGE_COMPONENT_KEY = "role-permissions-page";
|
|
91
|
+
|
|
92
|
+
declare const USER_ROLES_PAGE_COMPONENT_KEY = "user-roles-page";
|
|
93
|
+
|
|
59
94
|
declare const RootConfig: {
|
|
60
95
|
readonly config: {
|
|
61
96
|
i18n: string;
|
|
@@ -92,12 +127,39 @@ declare const RootConfig: {
|
|
|
92
127
|
readonly titlePlural: `@${string}:roles.entities.role.plural`;
|
|
93
128
|
readonly icon: "fa-light fa-user-tag";
|
|
94
129
|
};
|
|
130
|
+
readonly rolePermission: {
|
|
131
|
+
readonly name: "RolePermission";
|
|
132
|
+
readonly title: `@${string}:role-permissions.entities.role-permission.title`;
|
|
133
|
+
readonly titlePlural: `@${string}:role-permissions.entities.role-permission.plural`;
|
|
134
|
+
readonly icon: "fa-light fa-key";
|
|
135
|
+
};
|
|
136
|
+
readonly userRole: {
|
|
137
|
+
readonly name: "UserRole";
|
|
138
|
+
readonly title: `@${string}:user-roles.entities.user-role.title`;
|
|
139
|
+
readonly titlePlural: `@${string}:user-roles.entities.user-role.plural`;
|
|
140
|
+
readonly icon: "fa-light fa-user-tag";
|
|
141
|
+
};
|
|
95
142
|
readonly profile: {
|
|
96
143
|
readonly name: "Profile";
|
|
97
144
|
readonly title: `@${string}:profile.entities.profile.title`;
|
|
98
145
|
readonly titlePlural: `@${string}:profile.entities.profile.plural`;
|
|
99
146
|
readonly icon: "fa-light fa-user";
|
|
100
147
|
};
|
|
148
|
+
readonly identityProvider: {
|
|
149
|
+
readonly name: "IdentityProvider";
|
|
150
|
+
readonly title: `@${string}:identity-providers.entities.identity-provider.title`;
|
|
151
|
+
readonly titlePlural: `@${string}:identity-providers.entities.identity-provider.plural`;
|
|
152
|
+
readonly icon: "fa-light fa-id-badge";
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
readonly queries: {
|
|
156
|
+
readonly reports: {
|
|
157
|
+
readonly getUserEffectiveRolesHistory: "SecurityManagement:Reports:GetUserEffectiveRolesHistory";
|
|
158
|
+
readonly getUserEffectivePermissionsHistory: "SecurityManagement:Reports:GetUserEffectivePermissionsHistory";
|
|
159
|
+
readonly getRoleHoldersHistory: "SecurityManagement:Reports:GetRoleHoldersHistory";
|
|
160
|
+
readonly getPermissionHoldersHistory: "SecurityManagement:Reports:GetPermissionHoldersHistory";
|
|
161
|
+
readonly getUserPasswordChangeHistory: "SecurityManagement:Reports:GetUserPasswordChangeHistory";
|
|
162
|
+
};
|
|
101
163
|
};
|
|
102
164
|
};
|
|
103
165
|
|
|
@@ -152,6 +214,14 @@ interface AXMUserPasswordResetInfo {
|
|
|
152
214
|
declare const AXMSecurityManagementServerCommands: {
|
|
153
215
|
readonly SendPasswordResetEmail: "SecurityManagement:Server:SendPasswordResetEmail";
|
|
154
216
|
readonly CompletePasswordReset: "SecurityManagement:Server:CompletePasswordReset";
|
|
217
|
+
readonly ChangeOwnPassword: "SecurityManagement:Server:ChangeOwnPassword";
|
|
218
|
+
};
|
|
219
|
+
/** Stable codes for self-service password change (client maps to i18n). */
|
|
220
|
+
declare const AXM_CHANGE_OWN_PASSWORD_ERROR_CODES: {
|
|
221
|
+
readonly NotSignedIn: "CHANGE_OWN_PASSWORD_NOT_SIGNED_IN";
|
|
222
|
+
readonly IncorrectCurrent: "CHANGE_OWN_PASSWORD_INCORRECT_CURRENT";
|
|
223
|
+
readonly SameAsCurrent: "CHANGE_OWN_PASSWORD_SAME_AS_CURRENT";
|
|
224
|
+
readonly InvalidInput: "CHANGE_OWN_PASSWORD_INVALID_INPUT";
|
|
155
225
|
};
|
|
156
226
|
/** Client/UI action key (confirm dialog → server send). */
|
|
157
227
|
declare const AXM_USER_SEND_PASSWORD_RESET_COMMAND = "SecurityManagement:User:SendPasswordResetEmail";
|
|
@@ -167,8 +237,13 @@ interface AXMCompletePasswordResetInput {
|
|
|
167
237
|
token: string;
|
|
168
238
|
newPassword: string;
|
|
169
239
|
}
|
|
170
|
-
|
|
171
|
-
|
|
240
|
+
interface AXMChangeOwnPasswordInput {
|
|
241
|
+
currentPassword: string;
|
|
242
|
+
newPassword: string;
|
|
243
|
+
}
|
|
244
|
+
interface AXMChangeOwnPasswordResult {
|
|
245
|
+
passwordChangedAt: string;
|
|
246
|
+
}
|
|
172
247
|
|
|
173
248
|
declare enum AXMSessionStatusTypes {
|
|
174
249
|
revoked = "revoked",
|
|
@@ -202,9 +277,37 @@ interface AXMSecurityManagementDeviceSessionsEntityModel extends AXPEntityModel<
|
|
|
202
277
|
browser: string;
|
|
203
278
|
location: string;
|
|
204
279
|
lastLoginDate: Date;
|
|
280
|
+
/** When the session was revoked / logged out (null while still active). */
|
|
281
|
+
loggedOutAt?: Date | string | null;
|
|
205
282
|
}
|
|
206
283
|
|
|
207
|
-
|
|
284
|
+
/**
|
|
285
|
+
* Platform login IdP row (SecurityManagement.IdentityProvider).
|
|
286
|
+
* Active/inactive uses the disable plugin field `isDisabled`.
|
|
287
|
+
* Broker routing uses `key` as OAuth `acr_values`.
|
|
288
|
+
*/
|
|
289
|
+
interface AXMIdentityProviderEntityModel {
|
|
290
|
+
id: string;
|
|
291
|
+
/** Stable key used by ListProviders and `/connect` (`google`, `okta-hr`, …). */
|
|
292
|
+
key: string;
|
|
293
|
+
title: string;
|
|
294
|
+
icon?: string | null;
|
|
295
|
+
/** External IdP authorize URL (e.g. Google accounts endpoint). */
|
|
296
|
+
authorizationUrl?: string | null;
|
|
297
|
+
/** External IdP token URL. */
|
|
298
|
+
tokenUrl?: string | null;
|
|
299
|
+
/** Optional userinfo URL when id_token is absent. */
|
|
300
|
+
userInfoUrl?: string | null;
|
|
301
|
+
/** Space-separated scopes requested from the external IdP. */
|
|
302
|
+
scopes?: string | null;
|
|
303
|
+
issuerUrl?: string | null;
|
|
304
|
+
clientId?: string | null;
|
|
305
|
+
/** Platform broker client secret (admin / seed). */
|
|
306
|
+
clientSecret?: string | null;
|
|
307
|
+
/** From disable plugin — `true` means not offered on login. */
|
|
308
|
+
isDisabled?: boolean;
|
|
309
|
+
priority: number;
|
|
310
|
+
}
|
|
208
311
|
|
|
209
312
|
interface AXMSecurityManagementPolicyEntityModel extends AXPEntityModel<string> {
|
|
210
313
|
name: string;
|
|
@@ -228,23 +331,42 @@ interface AXMPolicyEffectRule {
|
|
|
228
331
|
target: string;
|
|
229
332
|
}
|
|
230
333
|
|
|
231
|
-
declare function profileFactory(): Promise<AXPEntity | null>;
|
|
232
|
-
|
|
233
334
|
interface AXMSecurityManagementProfileEntityModel extends AXPEntityModel<string> {
|
|
234
335
|
name: string;
|
|
235
336
|
title: string;
|
|
236
337
|
}
|
|
237
338
|
|
|
238
|
-
|
|
339
|
+
/**
|
|
340
|
+
* Scoped permission grants for a Role.
|
|
341
|
+
* Role rows are identity-only; all capability keys live here.
|
|
342
|
+
*/
|
|
343
|
+
interface AXMSecurityManagementRolePermissionEntityModel extends AXPEntityModel<string> {
|
|
344
|
+
/** Target {@link SecurityManagement.Role} id. */
|
|
345
|
+
roleId: string;
|
|
346
|
+
/** Capability keys granted for this scope. */
|
|
347
|
+
permissions: string[];
|
|
348
|
+
}
|
|
239
349
|
|
|
350
|
+
/**
|
|
351
|
+
* Role identity only. Capability grants live on
|
|
352
|
+
* {@link AXMSecurityManagementRolePermissionEntityModel}.
|
|
353
|
+
*/
|
|
240
354
|
interface AXMSecurityManagementRolesEntityModel extends AXPEntityModel<string> {
|
|
241
355
|
name: string;
|
|
242
356
|
title: string;
|
|
243
357
|
description?: string;
|
|
244
|
-
permissions?: string[];
|
|
245
358
|
}
|
|
246
359
|
|
|
247
|
-
|
|
360
|
+
/**
|
|
361
|
+
* Scoped role assignments for a User.
|
|
362
|
+
* User rows are identity-only for roles; all role memberships live here.
|
|
363
|
+
*/
|
|
364
|
+
interface AXMSecurityManagementUserRoleEntityModel extends AXPEntityModel<string> {
|
|
365
|
+
/** Target {@link SecurityManagement.User} id. */
|
|
366
|
+
userId: string;
|
|
367
|
+
/** Role ids granted for this scope. */
|
|
368
|
+
roleIds: string[];
|
|
369
|
+
}
|
|
248
370
|
|
|
249
371
|
interface AXMSecurityManagementUsersEntityModel extends AXPEntityModel<string> {
|
|
250
372
|
id: string;
|
|
@@ -256,6 +378,13 @@ interface AXMSecurityManagementUsersEntityModel extends AXPEntityModel<string> {
|
|
|
256
378
|
/** Profile photo file storage id or external URL. */
|
|
257
379
|
avatar?: string | null;
|
|
258
380
|
pinCode?: string;
|
|
381
|
+
/** ISO timestamp of last successful security PIN change. */
|
|
382
|
+
pinChangedAt?: string | null;
|
|
383
|
+
/**
|
|
384
|
+
* Directory-owning tenant for soft profile admin (display name, avatar, email).
|
|
385
|
+
* Initialized from the creating/inviting tenant; not the same as membership scope.
|
|
386
|
+
*/
|
|
387
|
+
homeTenantId?: string;
|
|
259
388
|
/** Account lifecycle: `security-management.account-state.user`. */
|
|
260
389
|
accountState?: string;
|
|
261
390
|
/** Derived operational state: `security-management.effective-state.user` (persisted snapshot in demo/mock). */
|
|
@@ -270,5 +399,5 @@ interface AXMSecurityManagementUsersEntityModel extends AXPEntityModel<string> {
|
|
|
270
399
|
passwordReset?: AXMUserPasswordResetInfo | null;
|
|
271
400
|
}
|
|
272
401
|
|
|
273
|
-
export {
|
|
274
|
-
export type { AXMCompletePasswordResetInput, AXMPolicyEffect, AXMPolicyEffectRule, AXMPolicyScope, AXMSecurityManagementDeviceSessionsEntityModel, AXMSecurityManagementPolicyEntityModel, AXMSecurityManagementProfileEntityModel, AXMSecurityManagementRolesEntityModel, AXMSecurityManagementUsersEntityModel, AXMSendPasswordResetEmailInput, AXMUserPasswordResetInfo };
|
|
402
|
+
export { AXMSecurityManagementServerCommands, AXMSessionStatusTypes, AXMUserAccessState, AXMUserEffectiveState, AXM_CHANGE_OWN_PASSWORD_ERROR_CODES, AXM_SECURITY_CONTEXT_DEFINITIONS, AXM_USER_ACCESS_STATE_DEFINITION_KEY, AXM_USER_EFFECTIVE_STATE_DEFINITION_KEY, AXM_USER_SEND_PASSWORD_RESET_COMMAND, AXPAdministrationPermissionKeys, AXPSecurityManagementFeatureKeys, AXPSecurityManagementMenuKeys, AXPSecurityManagementPermissionKeys, ROLE_PERMISSIONS_PAGE_COMPONENT_KEY, RootConfig, USER_ROLES_PAGE_COMPONENT_KEY, resolveAXMUserEffectiveState };
|
|
403
|
+
export type { AXMChangeOwnPasswordInput, AXMChangeOwnPasswordResult, AXMCompletePasswordResetInput, AXMIdentityProviderEntityModel, AXMPolicyEffect, AXMPolicyEffectRule, AXMPolicyScope, AXMSecurityManagementDeviceSessionsEntityModel, AXMSecurityManagementPolicyEntityModel, AXMSecurityManagementProfileEntityModel, AXMSecurityManagementRolePermissionEntityModel, AXMSecurityManagementRolesEntityModel, AXMSecurityManagementUserRoleEntityModel, AXMSecurityManagementUsersEntityModel, AXMSendPasswordResetEmailInput, AXMUserPasswordResetInfo };
|