@acorex-platform/module-platform-dev-tools-client 0.0.33 → 0.0.38
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-platform-dev-tools-client-contracts.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-dev-tools-client-menu.provider-RHLrPSuX.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-platform-dev-tools-client.mjs +3 -3
- package/fesm2022/acorex-platform-module-platform-dev-tools-client.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-platform-dev-tools-client-contracts.mjs","sources":["../../../../libs/modules/platform-dev-tools/contracts/src/menu.keys.ts","../../../../libs/modules/platform-dev-tools/contracts/src/permission.keys.ts","../../../../libs/modules/platform-dev-tools/contracts/src/settings.keys.ts","../../../../libs/modules/platform-dev-tools/contracts/src/root-config.ts","../../../../libs/modules/platform-dev-tools/contracts/src/index.ts","../../../../libs/modules/platform-dev-tools/contracts/src/acorex-platform-module-platform-dev-tools-client-contracts.ts"],"sourcesContent":["//#region ---- Menu Keys ----\n\nexport const AXPPlatformDevToolsMenuKeys = {\n Root: 'platform-dev-tools.root',\n PlatformExplorer: 'platform-dev-tools.platform-explorer',\n} as const;\n\n//#endregion\n","/**\n * Applications & Platform capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPApplicationsPlatformPermissionKeys = {\n Access: 'ApplicationsPlatform:Permission:Access',\n MaintainApplications: 'ApplicationsPlatform:Permission:MaintainApplications',\n MaintainTenants: 'ApplicationsPlatform:Permission:MaintainTenants',\n MaintainPlatformShell: 'ApplicationsPlatform:Permission:MaintainPlatformShell',\n MaintainLandingPages: 'ApplicationsPlatform:Permission:MaintainLandingPages',\n MaintainIdentifiers: 'ApplicationsPlatform:Permission:MaintainIdentifiers',\n MaintainTenantSettings: 'ApplicationsPlatform:Permission:MaintainTenantSettings',\n MaintainPlatformSettings: 'ApplicationsPlatform:Permission:MaintainPlatformSettings',\n MaintainLocales: 'ApplicationsPlatform:Permission:MaintainLocales',\n UseDevTools: 'ApplicationsPlatform:Permission:UseDevTools',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPApplicationsPlatformPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMPermissionsKeys = {\n PlatformDevTools: {\n PlatformExplorer: {\n View: AXPApplicationsPlatformPermissionKeys.UseDevTools,\n },\n AllowDebug: AXPApplicationsPlatformPermissionKeys.UseDevTools,\n },\n} as const;\n","//#region ---- Developer Settings ----\n\n/** Setting keys for the Platform Dev Tools module. */\nexport enum AXPPlatformDevToolsSettings {\n /** When enabled, exposes additional diagnostic behavior for developers (debug mode). */\n DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n}\n\nexport const AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP = 'platform-dev-tools';\nexport const AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION = 'communication-debug-redirect';\n\n//#endregion\n","//#region ---- Config ----\n\nconst config = {\n i18n: 'platform-dev-tools',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'dev',\n module: 'platform-dev-tools',\n name: 'PlatformDevTools',\n title: '@platform-dev-tools:module.title',\n icon: 'fa-light fa-wrench',\n },\n};\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './settings.keys';\n\nexport * from './root-config';\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AAEO,MAAM,2BAA2B,GAAG;AACzC,IAAA,IAAI,EAAE,yBAAyB;AAC/B,IAAA,gBAAgB,EAAE,sCAAsC;;AAG1D;;ACPA;;;AAGG;AACI,MAAM,qCAAqC,GAAG;AACnD,IAAA,MAAM,EAAE,wCAAwC;AAChD,IAAA,oBAAoB,EAAE,sDAAsD;AAC5E,IAAA,eAAe,EAAE,iDAAiD;AAClE,IAAA,qBAAqB,EAAE,uDAAuD;AAC9E,IAAA,oBAAoB,EAAE,sDAAsD;AAC5E,IAAA,mBAAmB,EAAE,qDAAqD;AAC1E,IAAA,sBAAsB,EAAE,wDAAwD;AAChF,IAAA,wBAAwB,EAAE,0DAA0D;AACpF,IAAA,eAAe,EAAE,iDAAiD;AAClE,IAAA,WAAW,EAAE,6CAA6C;;AAG5D;;;AAGG;AACI,MAAM,kBAAkB,GAAG;AAChC,IAAA,gBAAgB,EAAE;AAChB,QAAA,gBAAgB,EAAE;YAChB,IAAI,EAAE,qCAAqC,CAAC,WAAW;AACxD,SAAA;QACD,UAAU,EAAE,qCAAqC,CAAC,WAAW;AAC9D,KAAA;;;AC3BH;AAEA;IACY;AAAZ,CAAA,UAAY,2BAA2B,EAAA;;AAErC,IAAA,2BAAA,CAAA,WAAA,CAAA,GAAA,8CAA0D;AAC5D,CAAC,EAHW,2BAA2B,KAA3B,2BAA2B,GAAA,EAAA,CAAA,CAAA;AAKhC,MAAM,qCAAqC,GAAG;AAC9C,MAAM,2DAA2D,GAAG;AAE3E;;ACXA;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,oBAAoB;CAC3B;AAEM,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,MAAM,EAAE,oBAAoB;AAC5B,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,KAAK,EAAE,kCAAkC;AACzC,QAAA,IAAI,EAAE,oBAAoB;AAC3B,KAAA;;AAGH;;ACjBA;AAQA;;ACRA;;AAEG
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-platform-dev-tools-client-contracts.mjs","sources":["../../../../libs/modules/platform-dev-tools/contracts/src/menu.keys.ts","../../../../libs/modules/platform-dev-tools/contracts/src/permission.keys.ts","../../../../libs/modules/platform-dev-tools/contracts/src/settings.keys.ts","../../../../libs/modules/platform-dev-tools/contracts/src/root-config.ts","../../../../libs/modules/platform-dev-tools/contracts/src/index.ts","../../../../libs/modules/platform-dev-tools/contracts/src/acorex-platform-module-platform-dev-tools-client-contracts.ts"],"sourcesContent":["//#region ---- Menu Keys ----\n\nexport const AXPPlatformDevToolsMenuKeys = {\n Root: 'platform-dev-tools.root',\n PlatformExplorer: 'platform-dev-tools.platform-explorer',\n} as const;\n\n//#endregion\n","/**\n * Applications & Platform capabilities used by this module.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPApplicationsPlatformPermissionKeys = {\n Access: 'ApplicationsPlatform:Permission:Access',\n MaintainApplications: 'ApplicationsPlatform:Permission:MaintainApplications',\n MaintainTenants: 'ApplicationsPlatform:Permission:MaintainTenants',\n MaintainPlatformShell: 'ApplicationsPlatform:Permission:MaintainPlatformShell',\n MaintainLandingPages: 'ApplicationsPlatform:Permission:MaintainLandingPages',\n MaintainIdentifiers: 'ApplicationsPlatform:Permission:MaintainIdentifiers',\n MaintainTenantSettings: 'ApplicationsPlatform:Permission:MaintainTenantSettings',\n MaintainPlatformSettings: 'ApplicationsPlatform:Permission:MaintainPlatformSettings',\n MaintainLocales: 'ApplicationsPlatform:Permission:MaintainLocales',\n UseDevTools: 'ApplicationsPlatform:Permission:UseDevTools',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPApplicationsPlatformPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXMPermissionsKeys = {\n PlatformDevTools: {\n PlatformExplorer: {\n View: AXPApplicationsPlatformPermissionKeys.UseDevTools,\n },\n AllowDebug: AXPApplicationsPlatformPermissionKeys.UseDevTools,\n },\n} as const;\n","//#region ---- Developer Settings ----\n\n/** Setting keys for the Platform Dev Tools module. */\nexport enum AXPPlatformDevToolsSettings {\n /** When enabled, exposes additional diagnostic behavior for developers (debug mode). */\n DebugMode = 'PlatformDevTools:Setting:Developer.DebugMode',\n}\n\nexport const AXP_PLATFORM_DEV_TOOLS_SETTINGS_GROUP = 'platform-dev-tools';\nexport const AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION = 'communication-debug-redirect';\n\n//#endregion\n","//#region ---- Config ----\n\nconst config = {\n i18n: 'platform-dev-tools',\n};\n\nexport const RootConfig = {\n config,\n module: {\n route: 'dev',\n module: 'platform-dev-tools',\n name: 'PlatformDevTools',\n title: '@platform-dev-tools:module.title',\n icon: 'fa-light fa-wrench',\n },\n};\n\n//#endregion\n","//#region ---- Contracts barrel ----\n\nexport * from './menu.keys';\nexport * from './permission.keys';\nexport * from './settings.keys';\n\nexport * from './root-config';\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA;AAEO,MAAM,2BAA2B,GAAG;AACzC,IAAA,IAAI,EAAE,yBAAyB;AAC/B,IAAA,gBAAgB,EAAE,sCAAsC;;AAG1D;;ACPA;;;AAGG;AACI,MAAM,qCAAqC,GAAG;AACnD,IAAA,MAAM,EAAE,wCAAwC;AAChD,IAAA,oBAAoB,EAAE,sDAAsD;AAC5E,IAAA,eAAe,EAAE,iDAAiD;AAClE,IAAA,qBAAqB,EAAE,uDAAuD;AAC9E,IAAA,oBAAoB,EAAE,sDAAsD;AAC5E,IAAA,mBAAmB,EAAE,qDAAqD;AAC1E,IAAA,sBAAsB,EAAE,wDAAwD;AAChF,IAAA,wBAAwB,EAAE,0DAA0D;AACpF,IAAA,eAAe,EAAE,iDAAiD;AAClE,IAAA,WAAW,EAAE,6CAA6C;;AAG5D;;;AAGG;AACI,MAAM,kBAAkB,GAAG;AAChC,IAAA,gBAAgB,EAAE;AAChB,QAAA,gBAAgB,EAAE;YAChB,IAAI,EAAE,qCAAqC,CAAC,WAAW;AACxD,SAAA;QACD,UAAU,EAAE,qCAAqC,CAAC,WAAW;AAC9D,KAAA;;;AC3BH;AAEA;IACY;AAAZ,CAAA,UAAY,2BAA2B,EAAA;;AAErC,IAAA,2BAAA,CAAA,WAAA,CAAA,GAAA,8CAA0D;AAC5D,CAAC,EAHW,2BAA2B,KAA3B,2BAA2B,GAAA,EAAA,CAAA,CAAA;AAKhC,MAAM,qCAAqC,GAAG;AAC9C,MAAM,2DAA2D,GAAG;AAE3E;;ACXA;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,oBAAoB;CAC3B;AAEM,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;AACN,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,MAAM,EAAE,oBAAoB;AAC5B,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,KAAK,EAAE,kCAAkC;AACzC,QAAA,IAAI,EAAE,oBAAoB;AAC3B,KAAA;;AAGH;;ACjBA;AAQA;;ACRA;;AAEG;;"}
|
package/fesm2022/acorex-platform-module-platform-dev-tools-client-menu.provider-RHLrPSuX.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-platform-dev-tools-client-menu.provider-RHLrPSuX.mjs","sources":["../../../../libs/modules/platform-dev-tools/client/src/lib/menu.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-platform-dev-tools-client/contracts';\nimport { AXPPlatformDevToolsMenuKeys } from '@acorex-platform/module-platform-dev-tools-client/contracts';\nimport { AXPApplicationsPlatformPermissionKeys } from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\n/**\n * Adds \"Dev Tools\" > \"Platform Explorer\" under Administration.\n * Only register this module in development so the menu does not appear in production.\n */\nexport class AXMPlatformDevToolsMenuProvider implements AXPMenuProvider {\n async provide(context: AXPMenuProviderContext): Promise<void> {\n context.find(AXPCommonMenuKeys.Platform).addItems([\n {\n text: '',\n type: 'break',\n priority: 998,\n },\n {\n name: AXPPlatformDevToolsMenuKeys.PlatformExplorer,\n text: '@platform-dev-tools:module.menus.platform-explorer.title',\n path: 'demo/dev/platform-explorer',\n icon: 'fa-light fa-sitemap',\n priority: 1000,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.UseDevTools],\n },\n },\n ]);\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;AAAA;AAQA;AAEA;AAEA;;;AAGG;MACU,+BAA+B,CAAA;IAC1C,MAAM,OAAO,CAAC,OAA+B,EAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAChD,YAAA;AACE,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,QAAQ,EAAE,GAAG;AACd,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,2BAA2B,CAAC,gBAAgB;AAClD,gBAAA,IAAI,EAAE,0DAA0D;AAChE,gBAAA,IAAI,EAAE,4BAA4B;AAClC,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,oBAAA,WAAW,EAAE,CAAC,qCAAqC,CAAC,WAAW,CAAC;AACjE,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;AAED
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-platform-dev-tools-client-menu.provider-RHLrPSuX.mjs","sources":["../../../../libs/modules/platform-dev-tools/client/src/lib/menu.provider.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-platform-dev-tools-client/contracts';\nimport { AXPPlatformDevToolsMenuKeys } from '@acorex-platform/module-platform-dev-tools-client/contracts';\nimport { AXPApplicationsPlatformPermissionKeys } from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\n/**\n * Adds \"Dev Tools\" > \"Platform Explorer\" under Administration.\n * Only register this module in development so the menu does not appear in production.\n */\nexport class AXMPlatformDevToolsMenuProvider implements AXPMenuProvider {\n async provide(context: AXPMenuProviderContext): Promise<void> {\n context.find(AXPCommonMenuKeys.Platform).addItems([\n {\n text: '',\n type: 'break',\n priority: 998,\n },\n {\n name: AXPPlatformDevToolsMenuKeys.PlatformExplorer,\n text: '@platform-dev-tools:module.menus.platform-explorer.title',\n path: 'demo/dev/platform-explorer',\n icon: 'fa-light fa-sitemap',\n priority: 1000,\n policy: {\n features: [RootConfig.module.name],\n permissions: [AXPApplicationsPlatformPermissionKeys.UseDevTools],\n },\n },\n ]);\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;AAAA;AAQA;AAEA;AAEA;;;AAGG;MACU,+BAA+B,CAAA;IAC1C,MAAM,OAAO,CAAC,OAA+B,EAAA;QAC3C,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;AAChD,YAAA;AACE,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,QAAQ,EAAE,GAAG;AACd,aAAA;AACD,YAAA;gBACE,IAAI,EAAE,2BAA2B,CAAC,gBAAgB;AAClD,gBAAA,IAAI,EAAE,0DAA0D;AAChE,gBAAA,IAAI,EAAE,4BAA4B;AAClC,gBAAA,IAAI,EAAE,qBAAqB;AAC3B,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,oBAAA,WAAW,EAAE,CAAC,qCAAqC,CAAC,WAAW,CAAC;AACjE,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACD;AAED;;"}
|
|
@@ -523,7 +523,7 @@ class AXPlatformExplorerPermissionsListDetailComponent {
|
|
|
523
523
|
<ng-template #descTpl let-item>
|
|
524
524
|
@if (item.data?.description) { {{ item.data.description | translate | async }} } @else { – }
|
|
525
525
|
</ng-template>
|
|
526
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$1.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$1.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "hasTitle", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
526
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$1.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$1.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "hasTitle", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "translate", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
527
527
|
}
|
|
528
528
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPlatformExplorerPermissionsListDetailComponent, decorators: [{
|
|
529
529
|
type: Component,
|
|
@@ -601,7 +601,7 @@ class AXPlatformExplorerFeaturesListDetailComponent {
|
|
|
601
601
|
<ng-template #titleTpl let-item>{{ $safeNavigationMigration(item.data?.title) | translate | async }}</ng-template>
|
|
602
602
|
<ng-template #typeTpl let-item>{{ item.data?.type ?? '–' }}</ng-template>
|
|
603
603
|
<ng-template #descTpl let-item>@if (item.data?.description) { {{ item.data.description | translate | async }} } @else { – }</ng-template>
|
|
604
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$1.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$1.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "hasTitle", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
604
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$1.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$1.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "hasTitle", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "translate", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
605
605
|
}
|
|
606
606
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPlatformExplorerFeaturesListDetailComponent, decorators: [{
|
|
607
607
|
type: Component,
|
|
@@ -838,7 +838,7 @@ class AXPlatformExplorerPageComponent extends AXPPageLayoutBaseComponent {
|
|
|
838
838
|
provide: AXPPageLayoutBase,
|
|
839
839
|
useExisting: AXPlatformExplorerPageComponent,
|
|
840
840
|
},
|
|
841
|
-
], viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout>\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ '@platform-dev-tools:module.menus.platform-explorer.title' | translate | async\n }}</axp-layout-title>\n </axp-layout-header>\n <axp-layout-content class=\"axp-platform-explorer__tree-wrap\">\n @if (loading()) {\n <p class=\"axp-platform-explorer__loading\">Loading...</p>\n } @else if (moduleNodes().length === 0) {\n <p class=\"axp-platform-explorer__empty\">{{ '@platform-dev-tools:module.messages.no-modules' | translate | async }}\n </p>\n } @else {\n <ax-tree-view #tree [datasource]=\"datasource\" [selectMode]=\"'single'\" [showIcons]=\"false\"\n [showChildrenBadge]=\"true\" [dragBehavior]=\"'none'\" look=\"default\" [nodeTemplate]=\"nodeTemplate\"\n (onNodeClick)=\"onNodeClick($event)\" (onNodeToggle)=\"onNodeToggle($event)\" />\n }\n </axp-layout-content>\n </axp-layout-start-side>\n\n <axp-page-content class=\"min-h-0 pt-0\">\n @if (selectedNode()) {\n <axp-platform-explorer-detail [node]=\"selectedNode()!\" />\n } @else {\n <p class=\"axp-platform-explorer__hint\">{{ '@platform-dev-tools:module.messages.select-node' | translate | async }}\n </p>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Node template: icon per kind (with color) + label (translated) + badge -->\n<ng-template #nodeTemplate let-node=\"node\">\n @let data = node['data'];\n @let treeNode = $safeNavigationMigration(data?.treeNode);\n @let kind = $safeNavigationMigration(treeNode?.kind);\n @let count = node['childrenCount'] ?? treeNode?.itemCount;\n <span class=\"axp-platform-explorer__node\">\n @switch (kind) {\n @case ('module') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--module fa-light fa-cube\"\n aria-hidden=\"true\"></i>\n }\n @case ('entities') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--entities fa-light fa-table-list\"\n aria-hidden=\"true\"></i>\n }\n @case ('entity') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--entity fa-light fa-table\"\n aria-hidden=\"true\"></i>\n }\n @case ('permissions') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--permissions fa-light fa-shield-halved\"\n aria-hidden=\"true\"></i>\n }\n @case ('features') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--features fa-light fa-sliders\"\n aria-hidden=\"true\"></i>\n }\n @default {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--default fa-light fa-circle-dot\"\n aria-hidden=\"true\"></i>\n }\n }\n <span class=\"axp-platform-explorer__node-label\">{{ node['title'] | translate | async }}</span>\n @if (count != null && count > 0) {\n <span class=\"axp-platform-explorer__node-badge\">{{ count }}</span>\n }\n </span>\n</ng-template>", styles: ["@layer properties;.axp-platform-explorer .axp-platform-explorer__tree-wrap{display:flex;min-height:0px;min-width:calc(var(--spacing, .25rem) * 64);flex-direction:column;overflow-x:auto;overflow-y:auto;padding:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);max-height:calc(100vh - 180px)}.axp-platform-explorer .axp-platform-explorer__loading,.axp-platform-explorer .axp-platform-explorer__empty{margin:0;padding:calc(var(--spacing, .25rem) * 4);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-platform-explorer .axp-platform-explorer__hint{padding:calc(var(--spacing, .25rem) * 6);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-platform-explorer .axp-platform-explorer__node{display:flex;width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 2)}.axp-platform-explorer .axp-platform-explorer__node-icon{width:1em;flex-shrink:0}.axp-platform-explorer .axp-platform-explorer__node-icon--module{color:rgba(var(--ax-sys-color-primary-surface))}.axp-platform-explorer .axp-platform-explorer__node-icon--entities{color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-platform-explorer .axp-platform-explorer__node-icon--entity{color:rgba(var(--ax-sys-color-accent1-surface))}.axp-platform-explorer .axp-platform-explorer__node-icon--permissions{color:rgba(var(--ax-sys-color-success-surface))}.axp-platform-explorer .axp-platform-explorer__node-icon--features{color:rgba(var(--ax-sys-color-warning-surface))}.axp-platform-explorer .axp-platform-explorer__node-icon--default{color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-platform-explorer .axp-platform-explorer__node-label{min-width:0px;flex:1;white-space:nowrap}.axp-platform-explorer .axp-platform-explorer__node-badge{margin-left:auto;min-width:calc(var(--spacing, .25rem) * 5);flex-shrink:0;border-radius:calc(infinity * 1px);padding-inline:calc(var(--spacing, .25rem) * 1.5);text-align:center;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);background-color:rgba(var(--ax-sys-color-primary-lightest-surface));color:rgba(var(--ax-sys-color-primary-surface))}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "alternate", "nodeTemplate", "idField", "titleField", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }, { kind: "component", type: AXPlatformExplorerDetailComponent, selector: "axp-platform-explorer-detail", inputs: ["node"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
841
|
+
], viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout>\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ '@platform-dev-tools:module.menus.platform-explorer.title' | translate | async\n }}</axp-layout-title>\n </axp-layout-header>\n <axp-layout-content class=\"axp-platform-explorer__tree-wrap\">\n @if (loading()) {\n <p class=\"axp-platform-explorer__loading\">Loading...</p>\n } @else if (moduleNodes().length === 0) {\n <p class=\"axp-platform-explorer__empty\">{{ '@platform-dev-tools:module.messages.no-modules' | translate | async }}\n </p>\n } @else {\n <ax-tree-view #tree [datasource]=\"datasource\" [selectMode]=\"'single'\" [showIcons]=\"false\"\n [showChildrenBadge]=\"true\" [dragBehavior]=\"'none'\" look=\"default\" [nodeTemplate]=\"nodeTemplate\"\n (onNodeClick)=\"onNodeClick($event)\" (onNodeToggle)=\"onNodeToggle($event)\" />\n }\n </axp-layout-content>\n </axp-layout-start-side>\n\n <axp-page-content class=\"min-h-0 pt-0\">\n @if (selectedNode()) {\n <axp-platform-explorer-detail [node]=\"selectedNode()!\" />\n } @else {\n <p class=\"axp-platform-explorer__hint\">{{ '@platform-dev-tools:module.messages.select-node' | translate | async }}\n </p>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Node template: icon per kind (with color) + label (translated) + badge -->\n<ng-template #nodeTemplate let-node=\"node\">\n @let data = node['data'];\n @let treeNode = $safeNavigationMigration(data?.treeNode);\n @let kind = $safeNavigationMigration(treeNode?.kind);\n @let count = node['childrenCount'] ?? treeNode?.itemCount;\n <span class=\"axp-platform-explorer__node\">\n @switch (kind) {\n @case ('module') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--module fa-light fa-cube\"\n aria-hidden=\"true\"></i>\n }\n @case ('entities') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--entities fa-light fa-table-list\"\n aria-hidden=\"true\"></i>\n }\n @case ('entity') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--entity fa-light fa-table\"\n aria-hidden=\"true\"></i>\n }\n @case ('permissions') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--permissions fa-light fa-shield-halved\"\n aria-hidden=\"true\"></i>\n }\n @case ('features') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--features fa-light fa-sliders\"\n aria-hidden=\"true\"></i>\n }\n @default {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--default fa-light fa-circle-dot\"\n aria-hidden=\"true\"></i>\n }\n }\n <span class=\"axp-platform-explorer__node-label\">{{ node['title'] | translate | async }}</span>\n @if (count != null && count > 0) {\n <span class=\"axp-platform-explorer__node-badge\">{{ count }}</span>\n }\n </span>\n</ng-template>", styles: ["@layer properties;.axp-platform-explorer .axp-platform-explorer__tree-wrap{display:flex;min-height:0px;min-width:calc(var(--spacing, .25rem) * 64);flex-direction:column;overflow-x:auto;overflow-y:auto;padding:calc(var(--spacing, .25rem) * 2);padding-inline:calc(var(--spacing, .25rem) * 4);max-height:calc(100vh - 180px)}.axp-platform-explorer .axp-platform-explorer__loading,.axp-platform-explorer .axp-platform-explorer__empty{margin:0;padding:calc(var(--spacing, .25rem) * 4);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-platform-explorer .axp-platform-explorer__hint{padding:calc(var(--spacing, .25rem) * 6);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-platform-explorer .axp-platform-explorer__node{display:flex;width:100%;align-items:center;gap:calc(var(--spacing, .25rem) * 2)}.axp-platform-explorer .axp-platform-explorer__node-icon{width:1em;flex-shrink:0}.axp-platform-explorer .axp-platform-explorer__node-icon--module{color:rgba(var(--ax-sys-color-primary-surface))}.axp-platform-explorer .axp-platform-explorer__node-icon--entities{color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-platform-explorer .axp-platform-explorer__node-icon--entity{color:rgba(var(--ax-sys-color-accent1-surface))}.axp-platform-explorer .axp-platform-explorer__node-icon--permissions{color:rgba(var(--ax-sys-color-success-surface))}.axp-platform-explorer .axp-platform-explorer__node-icon--features{color:rgba(var(--ax-sys-color-warning-surface))}.axp-platform-explorer .axp-platform-explorer__node-icon--default{color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-platform-explorer .axp-platform-explorer__node-label{min-width:0px;flex:1;white-space:nowrap}.axp-platform-explorer .axp-platform-explorer__node-badge{margin-left:auto;min-width:calc(var(--spacing, .25rem) * 5);flex-shrink:0;border-radius:calc(infinity * 1px);padding-inline:calc(var(--spacing, .25rem) * 1.5);text-align:center;font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-leading: calc(var(--spacing, .25rem) * 5);line-height:calc(var(--spacing, .25rem) * 5);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);background-color:rgba(var(--ax-sys-color-primary-lightest-surface));color:rgba(var(--ax-sys-color-primary-surface))}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "alternate", "nodeTemplate", "idField", "titleField", "highlightText", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }, { kind: "component", type: AXPlatformExplorerDetailComponent, selector: "axp-platform-explorer-detail", inputs: ["node"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
842
842
|
}
|
|
843
843
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPlatformExplorerPageComponent, decorators: [{
|
|
844
844
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-platform-dev-tools-client.mjs","sources":["../../../../libs/modules/platform-dev-tools/client/src/lib/manifest.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/settings.provider.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-tree.model.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-data.service.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/detail/platform-explorer-module-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/detail/platform-explorer-entity-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/detail/platform-explorer-permissions-list-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/detail/platform-explorer-features-list-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-page.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-page.component.html","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-tree-node.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/platform-dev-tools.module.ts","../../../../libs/modules/platform-dev-tools/client/src/acorex-platform-module-platform-dev-tools-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Platform Dev Tools Module Manifest.\n * Development-only module for exploring platform structure (modules, entities, permissions, features).\n */\nexport const PlatformDevToolsManifest: 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 type: 'platform',\n domain: 'platform',\n description: '@platform-dev-tools:module.description',\n required: false,\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys\n} from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers UseDevTools under Applications & Platform.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPApplicationsPlatformPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:applications-platform.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ApplicationsPlatform.Root, `${G}.applications-platform.title`, `${G}.applications-platform.description`, { order: 110 });\n\n context\n .addGroup(\n groups.ApplicationsPlatform.DevTools,\n `${G}.applications-platform-dev-tools.title`,\n `${G}.applications-platform-dev-tools.description`,\n { parent: groups.ApplicationsPlatform.Root, order: 40 },\n )\n .addPermission(keys.UseDevTools, `${P}.use-dev-tools.title`, `${P}.use-dev-tools.description`, {\n modules: ['PlatformDevTools'],\n requiredFeatures: ['PlatformDevTools'],\n })\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXPPlatformDevToolsSettings,\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n} from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\n//#endregion\n\n//#region ---- Setting Provider ----\n\n/**\n * Defines settings for Platform Dev Tools (developer-oriented options).\n */\nexport class AXPPlatformDevToolsSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'platform-dev-tools',\n '@platform-dev-tools:settings.group.nav-title',\n '@platform-dev-tools:settings.group.description',\n 'fa-light fa-wrench',\n '@platform-dev-tools:settings.group.title',\n 999,\n )\n .addSection(\n 'developer',\n '@platform-dev-tools:settings.developer.title',\n '@platform-dev-tools:settings.developer.description',\n )\n .addSetting({\n key: AXPPlatformDevToolsSettings.DebugMode,\n title: '@platform-dev-tools:settings.developer.items.debug-mode.title',\n description: '@platform-dev-tools:settings.developer.items.debug-mode.description',\n scope: 'P',\n overridableAt: [],\n // Platform-only developer switch (same pattern as System Insight / Auth).\n isInherited: false,\n defaultValue: false,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n })\n .endSection()\n .addSection(\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n '@platform-dev-tools:settings.communication-debug-redirect.title',\n '@platform-dev-tools:settings.communication-debug-redirect.description',\n )\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Tree node types ----\n\nexport type PlatformExplorerNodeKind =\n | 'module'\n | 'entities'\n | 'entity'\n | 'permissions'\n | 'permission'\n | 'features'\n | 'feature';\n\nexport interface PlatformExplorerTreeNode {\n id: string;\n kind: PlatformExplorerNodeKind;\n label: string;\n moduleName?: string;\n /** i18n key for the module title (used for page title and breadcrumbs) */\n moduleTitle?: string;\n children?: PlatformExplorerTreeNode[];\n /** Optional payload for detail view */\n payload?: unknown;\n /** Item count for badge (e.g. entities count, permissions count, features count) */\n itemCount?: number;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPEntityResolver } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPModuleManifestRegistry } from '@acorex-platform/framework-client/core';\nimport { AXPPermissionDefinitionService } from '@acorex-platform/framework-client/auth';\nimport { inject, Injectable } from '@angular/core';\nimport {\n PlatformExplorerTreeNode,\n} from './platform-explorer-tree.model';\nimport type { AXPFeatureDefinition } from '@acorex-platform/framework-client/core';\nimport type { AXPPermissionDefinition, AXPPermissionGroupDefinition } from '@acorex-platform/framework-client/auth';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable()\nexport class PlatformExplorerDataService {\n private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n private readonly entityResolver = inject(AXPEntityResolver);\n private readonly permissionService = inject(AXPPermissionDefinitionService);\n\n /**\n * Build only root-level module nodes (no children). Children are loaded on expand via getModuleChildren.\n * Includes all modules; use buildModulesOnlyFiltered() to exclude modules with no entities/permissions/features.\n */\n async buildModulesOnly(): Promise<PlatformExplorerTreeNode[]> {\n await this.manifestRegistry.initialize();\n const modules = this.manifestRegistry.getAll();\n const tree: PlatformExplorerTreeNode[] = modules.map((mod) => ({\n id: `module-${mod.name}`,\n kind: 'module' as const,\n label: mod.title,\n moduleName: mod.name,\n moduleTitle: mod.title,\n payload: mod,\n children: [],\n }));\n tree.sort((a, b) => {\n const nameA = (a.payload as { name?: string })?.name ?? a.moduleName ?? '';\n const nameB = (b.payload as { name?: string })?.name ?? b.moduleName ?? '';\n return nameA.localeCompare(nameB, undefined, { sensitivity: 'base' });\n });\n return tree;\n }\n\n /**\n * Build root-level module nodes, excluding modules that have no entities, permissions, or features.\n * Each module node gets itemCount = number of non-empty subcategories (for badge).\n */\n async buildModulesOnlyFiltered(): Promise<PlatformExplorerTreeNode[]> {\n const all = await this.buildModulesOnly();\n const filtered: PlatformExplorerTreeNode[] = [];\n for (const modNode of all) {\n const children = await this.getModuleChildren(modNode.id);\n if (children.length > 0) {\n filtered.push({\n ...modNode,\n itemCount: children.length,\n });\n }\n }\n return filtered;\n }\n\n /**\n * Load entities, permissions, and features for a module (called when module node is expanded or clicked).\n * Only includes subcategories that have at least one item. Returns empty array if module has no items.\n */\n async getModuleChildren(moduleId: string): Promise<PlatformExplorerTreeNode[]> {\n const moduleName = moduleId.startsWith('module-') ? moduleId.slice(7) : moduleId;\n const mod = this.manifestRegistry.get(moduleName);\n if (!mod) return [];\n const moduleTitle = mod.title;\n const [allEntries, permissions, features] = await Promise.all([\n this.entityResolver.listAll(),\n this.getPermissionsForModule(moduleName),\n Promise.resolve(this.getFeaturesForModule(moduleName)),\n ]);\n const moduleEntities = allEntries.filter((e) => e.module === moduleName);\n const permissionsCount = permissions.length;\n const featuresCount = features.length;\n const nodes: PlatformExplorerTreeNode[] = [];\n if (moduleEntities.length > 0) {\n nodes.push({\n id: `module-${moduleName}-entities`,\n kind: 'entities',\n label: '@platform-dev-tools:module.terms.entities',\n moduleName,\n moduleTitle,\n itemCount: moduleEntities.length,\n children: moduleEntities.map((e) => ({\n id: `entity-${moduleName}-${e.name}`,\n kind: 'entity' as const,\n label: e.name,\n moduleName,\n moduleTitle,\n payload: e,\n })),\n });\n }\n if (permissionsCount > 0) {\n nodes.push({\n id: `module-${moduleName}-permissions`,\n kind: 'permissions',\n label: '@platform-dev-tools:module.terms.permissions',\n moduleName,\n moduleTitle,\n itemCount: permissionsCount,\n });\n }\n if (featuresCount > 0) {\n nodes.push({\n id: `module-${moduleName}-features`,\n kind: 'features',\n label: '@platform-dev-tools:module.terms.features',\n moduleName,\n moduleTitle,\n itemCount: featuresCount,\n });\n }\n return nodes;\n }\n\n /**\n * Get all permissions for a module (for display in module detail).\n */\n async getPermissionsForModule(moduleName: string): Promise<AXPPermissionDefinition[]> {\n const groups = await this.permissionService.getGroups();\n return this.collectPermissionsForModule(groups, moduleName);\n }\n\n /**\n * Get all features for a module (for display in module detail).\n */\n getFeaturesForModule(moduleName: string): AXPFeatureDefinition[] {\n return this.manifestRegistry.getModuleFeatures(moduleName);\n }\n\n private collectPermissionsForModule(\n groups: AXPPermissionGroupDefinition[],\n moduleName: string\n ): AXPPermissionDefinition[] {\n const prefix = `${moduleName}:`;\n const out: AXPPermissionDefinition[] = [];\n const collect = (items: AXPPermissionDefinition[]) => {\n for (const p of items) {\n if (p.name.startsWith(prefix)) out.push(p);\n if (p.children?.length) collect(p.children);\n }\n };\n for (const g of groups) {\n if (g.name === moduleName) collect(g.permissions);\n }\n return out;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPModuleManifest } from '@acorex-platform/framework-client/core';\n\n//#endregion\n\n@Component({\n selector: 'axp-platform-explorer-module-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n template: `\n @if (payload()) {\n <section class=\"axp-module-detail\">\n <h3 class=\"axp-module-detail__section-title\">\n {{ '@platform-dev-tools:module.terms.module-info' | translate | async }}\n </h3>\n <dl class=\"axp-detail-dl\">\n <dt>\n {{ '@platform-dev-tools:module.terms.name' | translate | async }}\n </dt>\n <dd>{{ payload()!.name }}</dd>\n\n <dt>\n {{ '@platform-dev-tools:module.terms.version' | translate | async }}\n </dt>\n <dd>{{ payload()!.version }}</dd>\n\n <dt>\n {{ '@platform-dev-tools:module.terms.title' | translate | async }}\n </dt>\n <dd>{{ payload()!.title }}</dd>\n\n @if (payload()!.description) {\n <dt>\n {{ '@platform-dev-tools:module.terms.description' | translate | async }}\n </dt>\n <dd>{{ payload()!.description }}</dd>\n }\n\n @if (payload()!.i18n) {\n <dt>i18n</dt>\n <dd>{{ payload()!.i18n }}</dd>\n }\n\n @if (payload()!.required !== undefined) {\n <dt>\n {{ '@platform-dev-tools:module.terms.required' | translate | async }}\n </dt>\n <dd>{{ payload()!.required }}</dd>\n }\n </dl>\n </section>\n }\n `,\n styles: [\n `@reference '@acorex/styles/themes/default.css';\n\n .axp-module-detail { margin-bottom: 24px; }\n .axp-module-detail__section-title { margin: 0 0 12px 0; font-size: 15px; font-weight: 600; }\n .axp-detail-dl { display: grid; grid-template-columns: auto 1fr; gap: 4px 16px; margin: 0; }\n .axp-detail-dl dt { font-weight: 600; color: var(--ax-neutral-text-secondary, #666); }\n .axp-detail-dl dd { margin: 0; }\n `,\n ],\n})\nexport class AXPlatformExplorerModuleDetailComponent {\n payload = input<AXPModuleManifest | undefined>();\n}\n","//#region ---- Imports ----\n\nimport type { AXPEntity } from '@acorex-platform/framework-shared/entity';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal, ViewEncapsulation } from '@angular/core';\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPEntityResolver } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXPEntityListEntry } from '@acorex-platform/framework-client/layout/entity';\n\n//#endregion\n\nfunction isListEntry(p: AXPEntity | AXPEntityListEntry): p is AXPEntityListEntry {\n return p != null && 'fullName' in p && !('properties' in p);\n}\n\n@Component({\n selector: 'axp-platform-explorer-entity-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n host: { class: 'flex flex-col flex-1 min-h-0' },\n template: `\n <div class=\"flex flex-col flex-1 min-h-0 pt-0 overflow-auto\">\n @if (entity(); as e) {\n <dl class=\"grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 mb-3 m-0\">\n <dt class=\"font-semibold text-muted\">{{ '@platform-dev-tools:module.terms.module' | translate | async }}</dt><dd class=\"m-0\">{{ e.module }}</dd>\n <dt class=\"font-semibold text-muted\">{{ '@platform-dev-tools:module.terms.name' | translate | async }}</dt><dd class=\"m-0\">{{ e.name }}</dd>\n @if (e.title) {\n <dt class=\"font-semibold text-muted\">{{ '@platform-dev-tools:module.terms.title' | translate | async }}</dt><dd class=\"m-0\">{{ e.title | translate | async}}</dd>\n }\n @if (e.formats.plural) {\n <dt class=\"font-semibold text-muted\">{{ '@platform-dev-tools:module.terms.plural' | translate | async }}</dt><dd class=\"m-0\">{{ e.formats.plural | translate | async}}</dd>\n }\n </dl>\n @if (e.properties && e.properties.length > 0) {\n <p class=\"mb-2 mt-3 font-bold\">{{ '@platform-dev-tools:module.terms.properties' | translate | async }} ({{ e.properties.length }})</p>\n <div class=\"flex-1 min-h-0 overflow-auto border border-lightest rounded-md\">\n <table class=\"w-full border-collapse text-[13px]\">\n <thead>\n <tr>\n <th class=\"text-start p-2 px-3 bg-lighter font-semibold border-b border-lightest\">{{ '@platform-dev-tools:module.terms.name' | translate | async }}</th>\n <th class=\"text-start p-2 px-3 bg-lighter font-semibold border-b border-lightest\">{{ '@platform-dev-tools:module.terms.title' | translate | async }}</th>\n <th class=\"text-start p-2 px-3 bg-lighter font-semibold border-b border-lightest\">{{ '@platform-dev-tools:module.terms.type' | translate | async }}</th>\n <th class=\"text-start p-2 px-3 bg-lighter font-semibold border-b border-lightest\">{{ '@platform-dev-tools:module.terms.description' | translate | async }}</th>\n </tr>\n </thead>\n <tbody class=\"axp-entity-detail-tbody\">\n @for (p of e.properties; track p.name) {\n <tr>\n <td class=\"p-2 px-3 border-b border-lightest\"><code class=\"text-xs bg-lighter px-1.5 py-0.5 rounded\">{{ p.name }}</code></td>\n <td class=\"p-2 px-3 border-b border-lightest\">{{ p.title | translate | async }}</td>\n <td class=\"p-2 px-3 border-b border-lightest\">{{ p.schema.dataType }}</td>\n <td class=\"p-2 px-3 border-b border-lightest\">@if (p.description) { {{ p.description | translate | async }} } @else { – }</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n } @else if (loading()) {\n <p class=\"m-0 text-muted\">{{ '@platform-dev-tools:module.terms.loading-entity' | translate | async }}</p>\n }\n </div>\n `,\n styles: [\n `@reference '@acorex/styles/themes/default.css';\n\n .axp-entity-detail-tbody tr:last-child td { border-bottom: none; }\n `,\n ],\n})\nexport class AXPlatformExplorerEntityDetailComponent {\n payload = input<AXPEntity | AXPEntityListEntry | undefined>();\n\n protected readonly entity = signal<AXPEntity | null>(null);\n protected readonly loading = signal(false);\n\n private readonly entityResolver = inject(AXPEntityResolver);\n\n constructor() {\n effect(() => {\n const p = this.payload();\n if (!p) {\n this.entity.set(null);\n this.loading.set(false);\n return;\n }\n if (isListEntry(p)) {\n this.loading.set(true);\n this.entity.set(null);\n this.entityResolver.get(p.module, p.name).then((e) => {\n if (this.payload() === p) {\n this.entity.set(e ?? null);\n }\n this.loading.set(false);\n });\n } else {\n this.entity.set(p);\n this.loading.set(false);\n }\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { AXDataSource, AXDataSourceQuery } from '@acorex/cdk/common';\nimport { AXDataTableModule } from '@acorex/components/data-table';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPPermissionDefinition } from '@acorex-platform/framework-client/auth';\nimport { PlatformExplorerDataService } from '../platform-explorer-data.service';\n\n//#endregion\n\n@Component({\n selector: 'axp-platform-explorer-permissions-list-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXDataTableModule, AXTranslationModule],\n host: { class: 'flex flex-col flex-1 min-h-0' },\n template: `\n <div class=\"flex flex-1 min-h-0 pt-0 overflow-auto\">\n <ax-data-table\n class=\"flex-1 border border-lightest rounded-md overflow-hidden\"\n [paging]=\"true\"\n [allowReordering]=\"true\"\n [dataSource]=\"dataSource\"\n >\n <ax-text-column [dataField]=\"'name'\" [caption]=\"'@platform-dev-tools:module.terms.name' | translate | async\" [width]=\"'420px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column [dataField]=\"'title'\" [caption]=\"'@platform-dev-tools:module.terms.title' | translate | async\" [cellTemplate]=\"titleTpl\" [width]=\"'260px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column [dataField]=\"'description'\" [caption]=\"'@platform-dev-tools:module.terms.description' | translate | async\" [cellTemplate]=\"descTpl\" [width]=\"'380px'\" [allowResizing]=\"true\"></ax-text-column>\n </ax-data-table>\n </div>\n <ng-template #titleTpl let-item>\n {{ $safeNavigationMigration(item.data?.title) | translate | async }}</ng-template>\n <ng-template #descTpl let-item>\n @if (item.data?.description) { {{ item.data.description | translate | async }} } @else { – }\n </ng-template>\n `,\n})\nexport class AXPlatformExplorerPermissionsListDetailComponent {\n moduleName = input.required<string>();\n private readonly dataService = inject(PlatformExplorerDataService);\n\n readonly dataSource = new AXDataSource<AXPPermissionDefinition>({\n key: 'name',\n pageSize: 20,\n load: async (e: AXDataSourceQuery) => {\n const name = this.moduleName();\n if (!name) return { items: [], total: 0 };\n const list = await this.dataService.getPermissionsForModule(name);\n const skip = e?.skip ?? 0;\n const take = e?.take ?? 20;\n const items = list.slice(skip, skip + take);\n return { items, total: list.length };\n },\n });\n\n constructor() {\n effect(() => {\n this.moduleName();\n this.dataSource.refresh();\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { AXDataSource, AXDataSourceQuery } from '@acorex/cdk/common';\nimport { AXDataTableModule } from '@acorex/components/data-table';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPFeatureDefinition } from '@acorex-platform/framework-client/core';\nimport { PlatformExplorerDataService } from '../platform-explorer-data.service';\n\n//#endregion\n\n@Component({\n selector: 'axp-platform-explorer-features-list-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXDataTableModule, AXTranslationModule],\n host: { class: 'flex flex-col flex-1 min-h-0' },\n template: `\n <div class=\"flex flex-1 min-h-0 pt-0 overflow-auto\">\n <ax-data-table\n class=\"flex-1 border border-lightest rounded-md overflow-hidden\"\n [paging]=\"true\"\n [allowReordering]=\"true\"\n [dataSource]=\"dataSource\"\n >\n <ax-text-column dataField=\"key\" [caption]=\"'@platform-dev-tools:module.terms.key' | translate | async\" [width]=\"'240px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column dataField=\"title\" [caption]=\"'@platform-dev-tools:module.terms.title' | translate | async\" [cellTemplate]=\"titleTpl\" [width]=\"'280px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column dataField=\"type\" caption=\"Type\" [width]=\"'100px'\" [cellTemplate]=\"typeTpl\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column dataField=\"description\" [caption]=\"'@platform-dev-tools:module.terms.description' | translate | async\" [cellTemplate]=\"descTpl\" [width]=\"'340px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column dataField=\"defaultValue\" [caption]=\"'@platform-dev-tools:module.terms.default-value' | translate | async\" [width]=\"'140px'\" [allowResizing]=\"true\"></ax-text-column>\n </ax-data-table>\n </div>\n <ng-template #titleTpl let-item>{{ $safeNavigationMigration(item.data?.title) | translate | async }}</ng-template>\n <ng-template #typeTpl let-item>{{ item.data?.type ?? '–' }}</ng-template>\n <ng-template #descTpl let-item>@if (item.data?.description) { {{ item.data.description | translate | async }} } @else { – }</ng-template>\n `,\n})\nexport class AXPlatformExplorerFeaturesListDetailComponent {\n moduleName = input.required<string>();\n private readonly dataService = inject(PlatformExplorerDataService);\n\n readonly dataSource = new AXDataSource<AXPFeatureDefinition>({\n key: 'name',\n pageSize: 20,\n load: (e: AXDataSourceQuery) => {\n const name = this.moduleName();\n if (!name) return Promise.resolve({ items: [], total: 0 });\n const list = this.dataService.getFeaturesForModule(name);\n const skip = e?.skip ?? 0;\n const take = e?.take ?? 20;\n const items = list.slice(skip, skip + take);\n return Promise.resolve({ items, total: list.length });\n },\n });\n\n constructor() {\n effect(() => {\n this.moduleName();\n this.dataSource.refresh();\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { PlatformExplorerTreeNode } from './platform-explorer-tree.model';\nimport { AXPlatformExplorerModuleDetailComponent } from './detail/platform-explorer-module-detail.component';\nimport { AXPlatformExplorerEntityDetailComponent } from './detail/platform-explorer-entity-detail.component';\nimport { AXPlatformExplorerPermissionsListDetailComponent } from './detail/platform-explorer-permissions-list-detail.component';\nimport { AXPlatformExplorerFeaturesListDetailComponent } from './detail/platform-explorer-features-list-detail.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-platform-explorer-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col flex-1 min-h-0' },\n imports: [\n AXTranslationModule,\n AXPlatformExplorerModuleDetailComponent,\n AXPlatformExplorerEntityDetailComponent,\n AXPlatformExplorerPermissionsListDetailComponent,\n AXPlatformExplorerFeaturesListDetailComponent\n],\n template: `\n <div class=\"flex flex-col flex-1 min-h-0\">\n @switch (node().kind) {\n @case ('module') {\n <axp-platform-explorer-module-detail [payload]=\"$any(node().payload)\" />\n }\n @case ('entity') {\n <axp-platform-explorer-entity-detail [payload]=\"$any(node().payload)\" />\n }\n @case ('permissions') {\n <axp-platform-explorer-permissions-list-detail [moduleName]=\"node().moduleName!\" />\n }\n @case ('features') {\n <axp-platform-explorer-features-list-detail [moduleName]=\"node().moduleName!\" />\n }\n @default {\n <p class=\"axp-detail__hint\">{{ node().children?.length ?? 0 }} items.</p>\n }\n }\n </div>\n `,\n styles: [\n `@reference '@acorex/styles/themes/default.css';\n\n .axp-detail__hint { margin: 0; color: var(--ax-neutral-text-secondary, #666); }\n `,\n ],\n})\nexport class AXPlatformExplorerDetailComponent {\n node = input.required<PlatformExplorerTreeNode>();\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n AXTreeViewComponent,\n AXTreeViewNode,\n AXTreeViewNodeSelectEvent,\n AXTreeViewNodeToggleEvent,\n} from '@acorex/components/tree-view';\nimport { AXPBreadcrumbItem } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n} from '@acorex-platform/framework-client/layout/views';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { PlatformExplorerDataService } from './platform-explorer-data.service';\nimport { PlatformExplorerTreeNode } from './platform-explorer-tree.model';\nimport { AXPlatformExplorerDetailComponent } from './platform-explorer-detail.component';\n\n//#endregion\n\n//#region ---- Convert tree to AXTreeViewNode ----\n\nfunction toTreeViewNodes(\n nodes: PlatformExplorerTreeNode[],\n markModuleExpandable = false\n): AXTreeViewNode[] {\n return nodes.map((n) => {\n const children = n.children ?? [];\n const hasChildren = children.length > 0;\n const axNode: AXTreeViewNode = {\n id: n.id,\n title: n.label,\n children: hasChildren ? toTreeViewNodes(children, false) : undefined,\n data: { treeNode: n },\n };\n if (markModuleExpandable && n.kind === 'module' && !hasChildren) {\n (axNode as Record<string, unknown>)['childrenCount'] = 3;\n }\n return axNode;\n });\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-platform-explorer-page',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutBlockComponent,\n AXTreeViewComponent,\n AXPlatformExplorerDetailComponent,\n ],\n providers: [\n PlatformExplorerDataService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPlatformExplorerPageComponent,\n },\n ],\n templateUrl: './platform-explorer-page.component.html',\n styleUrl: './platform-explorer-page.component.css',\n})\nexport class AXPlatformExplorerPageComponent extends AXPPageLayoutBaseComponent {\n protected readonly dataService = inject(PlatformExplorerDataService);\n\n readonly loading = signal(true);\n readonly selectedNode = signal<PlatformExplorerTreeNode | null>(null);\n protected readonly moduleNodes = signal<PlatformExplorerTreeNode[]>([]);\n protected readonly tree = viewChild<AXTreeViewComponent>('tree');\n\n constructor() {\n super();\n this.initializeModules();\n }\n\n /** Datasource for tree: root = modules only; children loaded when module is expanded. */\n protected datasource = async (parentId?: string): Promise<AXTreeViewNode[]> => {\n if (!parentId) {\n const nodes = this.moduleNodes();\n return toTreeViewNodes(nodes, true);\n }\n const children = await this.dataService.getModuleChildren(parentId);\n return toTreeViewNodes(children, false);\n };\n\n private async initializeModules(): Promise<void> {\n this.loading.set(true);\n try {\n const nodes = await this.dataService.buildModulesOnlyFiltered();\n this.moduleNodes.set(nodes);\n } finally {\n this.loading.set(false);\n }\n }\n\n override async getPageTitle(): Promise<string> {\n const node = this.selectedNode();\n if (!node) {\n return this.translateService.translateAsync('@platform-dev-tools:module.title');\n }\n const moduleTitleKey = node.moduleTitle ?? node.label;\n const moduleTitle = await this.translateService.translateAsync(moduleTitleKey);\n const contextParts: string[] = [];\n switch (node.kind) {\n case 'module':\n return moduleTitle;\n case 'entities':\n contextParts.push(await this.translateService.translateAsync('@platform-dev-tools:module.terms.entities'));\n break;\n case 'entity':\n contextParts.push(await this.translateService.translateAsync('@platform-dev-tools:module.terms.entities'));\n contextParts.push(node.label);\n break;\n case 'permissions':\n contextParts.push(await this.translateService.translateAsync('@platform-dev-tools:module.terms.permissions'));\n break;\n case 'features':\n contextParts.push(await this.translateService.translateAsync('@platform-dev-tools:module.terms.features'));\n break;\n default:\n return moduleTitle;\n }\n return [moduleTitle, ...contextParts].join(' - ');\n }\n\n override getPageDescription(): string | null | Promise<string | null> {\n const node = this.selectedNode();\n if (!node) return null;\n const key = this.descriptionKeyForKind(node.kind);\n return key ? this.translateService.translateAsync(key) : null;\n }\n\n override getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n const node = this.selectedNode();\n const items: AXPBreadcrumbItem[] = [\n { title: '@platform-dev-tools:module.menus.platform-explorer.title' },\n ];\n if (node?.moduleTitle) {\n items.push({ title: node.moduleTitle });\n }\n return items;\n }\n\n private descriptionKeyForKind(kind: PlatformExplorerTreeNode['kind']): string | null {\n switch (kind) {\n case 'module':\n return '@platform-dev-tools:module.descriptions.module';\n case 'entities':\n return '@platform-dev-tools:module.descriptions.entities';\n case 'entity':\n return '@platform-dev-tools:module.descriptions.entity';\n case 'permissions':\n return '@platform-dev-tools:module.descriptions.permissions';\n case 'features':\n return '@platform-dev-tools:module.descriptions.features';\n default:\n return null;\n }\n }\n\n protected onNodeClick(event: AXTreeViewNodeSelectEvent): void {\n const node = event.node;\n const data = node?.['data'] as { treeNode?: PlatformExplorerTreeNode } | undefined;\n const treeNode = data?.treeNode;\n if (treeNode) {\n this.selectedNode.set(treeNode);\n this.recompute();\n // When a module node is clicked, expand it so the tree loads its children (entities, permissions, features)\n if (treeNode.kind === 'module') {\n const treeRef = this.tree();\n if (treeRef && typeof (treeRef as unknown as { expandNode?: (id: string) => void }).expandNode === 'function') {\n (treeRef as unknown as { expandNode: (id: string) => void }).expandNode(treeNode.id);\n }\n }\n }\n }\n\n protected onNodeToggle(_event: AXTreeViewNodeToggleEvent): void {\n // Tree loads children via datasource(parentId) when a node is expanded; no extra work needed.\n }\n}\n\n//#endregion\n","<axp-page-layout>\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ '@platform-dev-tools:module.menus.platform-explorer.title' | translate | async\n }}</axp-layout-title>\n </axp-layout-header>\n <axp-layout-content class=\"axp-platform-explorer__tree-wrap\">\n @if (loading()) {\n <p class=\"axp-platform-explorer__loading\">Loading...</p>\n } @else if (moduleNodes().length === 0) {\n <p class=\"axp-platform-explorer__empty\">{{ '@platform-dev-tools:module.messages.no-modules' | translate | async }}\n </p>\n } @else {\n <ax-tree-view #tree [datasource]=\"datasource\" [selectMode]=\"'single'\" [showIcons]=\"false\"\n [showChildrenBadge]=\"true\" [dragBehavior]=\"'none'\" look=\"default\" [nodeTemplate]=\"nodeTemplate\"\n (onNodeClick)=\"onNodeClick($event)\" (onNodeToggle)=\"onNodeToggle($event)\" />\n }\n </axp-layout-content>\n </axp-layout-start-side>\n\n <axp-page-content class=\"min-h-0 pt-0\">\n @if (selectedNode()) {\n <axp-platform-explorer-detail [node]=\"selectedNode()!\" />\n } @else {\n <p class=\"axp-platform-explorer__hint\">{{ '@platform-dev-tools:module.messages.select-node' | translate | async }}\n </p>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Node template: icon per kind (with color) + label (translated) + badge -->\n<ng-template #nodeTemplate let-node=\"node\">\n @let data = node['data'];\n @let treeNode = $safeNavigationMigration(data?.treeNode);\n @let kind = $safeNavigationMigration(treeNode?.kind);\n @let count = node['childrenCount'] ?? treeNode?.itemCount;\n <span class=\"axp-platform-explorer__node\">\n @switch (kind) {\n @case ('module') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--module fa-light fa-cube\"\n aria-hidden=\"true\"></i>\n }\n @case ('entities') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--entities fa-light fa-table-list\"\n aria-hidden=\"true\"></i>\n }\n @case ('entity') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--entity fa-light fa-table\"\n aria-hidden=\"true\"></i>\n }\n @case ('permissions') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--permissions fa-light fa-shield-halved\"\n aria-hidden=\"true\"></i>\n }\n @case ('features') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--features fa-light fa-sliders\"\n aria-hidden=\"true\"></i>\n }\n @default {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--default fa-light fa-circle-dot\"\n aria-hidden=\"true\"></i>\n }\n }\n <span class=\"axp-platform-explorer__node-label\">{{ node['title'] | translate | async }}</span>\n @if (count != null && count > 0) {\n <span class=\"axp-platform-explorer__node-badge\">{{ count }}</span>\n }\n </span>\n</ng-template>","//#region ---- Imports ----\n\nimport {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { PlatformExplorerTreeNode } from './platform-explorer-tree.model';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-platform-explorer-tree-node',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPlatformExplorerTreeNodeComponent],\n template: `\n <div class=\"axp-tree-node\" [class.axp-tree-node--selected]=\"isSelected()\">\n <button\n type=\"button\"\n class=\"axp-tree-node__toggler\"\n [class.axp-tree-node__toggler--open]=\"expanded()\"\n [attr.aria-expanded]=\"expanded()\"\n (click)=\"toggle()\"\n >\n @if (hasChildren()) {\n <span class=\"axp-tree-node__icon\" aria-hidden=\"true\">{{ expanded() ? '▼' : '▶' }}</span>\n } @else {\n <span class=\"axp-tree-node__icon axp-tree-node__icon--empty\"></span>\n }\n </button>\n <button\n type=\"button\"\n class=\"axp-tree-node__label\"\n (click)=\"select()\"\n >\n {{ node().label }}\n @if (childrenLength() > 0) {\n <span class=\"axp-tree-node__badge\">({{ childrenLength() }})</span>\n }\n </button>\n </div>\n @if (hasChildren() && expanded()) {\n <div class=\"axp-tree-node__children\">\n @for (child of node().children ?? []; track child.id) {\n <axp-platform-explorer-tree-node\n [node]=\"child\"\n [selectedId]=\"selectedId()\"\n (nodeSelect)=\"nodeSelect.emit($event)\"\n />\n }\n </div>\n }\n `,\n styles: [\n `@reference '@acorex/styles/themes/default.css';\n\n :host {\n display: block;\n }\n .axp-tree-node {\n display: flex;\n align-items: center;\n min-height: 28px;\n }\n .axp-tree-node--selected .axp-tree-node__label {\n font-weight: 600;\n background: var(--ax-neutral-surface-hover, rgba(0, 0, 0, 0.04));\n }\n .axp-tree-node__toggler {\n width: 24px;\n height: 28px;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n color: var(--ax-neutral-text-secondary, #666);\n flex-shrink: 0;\n }\n .axp-tree-node__toggler--open .axp-tree-node__icon {\n transform: rotate(0);\n }\n .axp-tree-node__icon {\n font-size: 10px;\n display: inline-block;\n }\n .axp-tree-node__icon--empty {\n width: 10px;\n }\n .axp-tree-node__label {\n flex: 1;\n text-align: start;\n padding: 4px 8px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n border-radius: 4px;\n }\n .axp-tree-node__label:hover {\n background: var(--ax-neutral-surface-hover, rgba(0, 0, 0, 0.04));\n }\n .axp-tree-node__badge {\n margin-inline-start: 4px;\n font-size: 11px;\n color: var(--ax-neutral-text-secondary, #666);\n font-weight: normal;\n }\n .axp-tree-node__children {\n padding-inline-start: 16px;\n }\n `,\n ],\n})\nexport class AXPlatformExplorerTreeNodeComponent {\n node = input.required<PlatformExplorerTreeNode>();\n selectedId = input<string | null>(null);\n nodeSelect = output<PlatformExplorerTreeNode>();\n\n readonly expanded = signal(true);\n\n childrenLength(): number {\n return this.node().children?.length ?? 0;\n }\n\n hasChildren(): boolean {\n const children = this.node().children;\n return !!children && children.length > 0;\n }\n\n isSelected(): boolean {\n return this.selectedId() === this.node().id;\n }\n\n toggle(): void {\n if (this.hasChildren()) {\n this.expanded.update((v) => !v);\n }\n }\n\n select(): void {\n this.nodeSelect.emit(this.node());\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';\nimport { AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\nimport { PlatformDevToolsManifest } from './manifest';\nimport { AXMPlatformDevToolsMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXPPlatformDevToolsSettingProvider } from './settings.provider';\nimport { AXPlatformExplorerPageComponent } from './features/platform-explorer';\n\n//#endregion\n\n//#region ---- Routes ----\n\nfunction routesFactory(): Routes {\n return [\n {\n path: ':app/dev/platform-explorer',\n canActivate: [AXPAuthGuard],\n data: { rootLayout: true },\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () => AXPlatformExplorerPageComponent,\n data: { reuse: true },\n },\n ],\n },\n ];\n}\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: PlatformDevToolsManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n provideLazyProvider(AXP_MENU_PROVIDER, () =>\n import('./menu.provider').then(m => m.AXMPlatformDevToolsMenuProvider),\n ),\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXPPlatformDevToolsSettingProvider,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n ],\n})\nexport class AXMPlatformDevToolsModule { }\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-platform-dev-tools-client.mjs","sources":["../../../../libs/modules/platform-dev-tools/client/src/lib/manifest.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/settings.provider.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-tree.model.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-data.service.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/detail/platform-explorer-module-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/detail/platform-explorer-entity-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/detail/platform-explorer-permissions-list-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/detail/platform-explorer-features-list-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-detail.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-page.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-page.component.html","../../../../libs/modules/platform-dev-tools/client/src/lib/features/platform-explorer/platform-explorer-tree-node.component.ts","../../../../libs/modules/platform-dev-tools/client/src/lib/platform-dev-tools.module.ts","../../../../libs/modules/platform-dev-tools/client/src/acorex-platform-module-platform-dev-tools-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Platform Dev Tools Module Manifest.\n * Development-only module for exploring platform structure (modules, entities, permissions, features).\n */\nexport const PlatformDevToolsManifest: 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 type: 'platform',\n domain: 'platform',\n description: '@platform-dev-tools:module.description',\n required: false,\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPApplicationsPlatformPermissionKeys\n} from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers UseDevTools under Applications & Platform.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPApplicationsPlatformPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:applications-platform.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ApplicationsPlatform.Root, `${G}.applications-platform.title`, `${G}.applications-platform.description`, { order: 110 });\n\n context\n .addGroup(\n groups.ApplicationsPlatform.DevTools,\n `${G}.applications-platform-dev-tools.title`,\n `${G}.applications-platform-dev-tools.description`,\n { parent: groups.ApplicationsPlatform.Root, order: 40 },\n )\n .addPermission(keys.UseDevTools, `${P}.use-dev-tools.title`, `${P}.use-dev-tools.description`, {\n modules: ['PlatformDevTools'],\n requiredFeatures: ['PlatformDevTools'],\n })\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport {\n AXPPlatformDevToolsSettings,\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n} from '@acorex-platform/module-platform-dev-tools-client/contracts';\n\n//#endregion\n\n//#region ---- Setting Provider ----\n\n/**\n * Defines settings for Platform Dev Tools (developer-oriented options).\n */\nexport class AXPPlatformDevToolsSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'platform-dev-tools',\n '@platform-dev-tools:settings.group.nav-title',\n '@platform-dev-tools:settings.group.description',\n 'fa-light fa-wrench',\n '@platform-dev-tools:settings.group.title',\n 999,\n )\n .addSection(\n 'developer',\n '@platform-dev-tools:settings.developer.title',\n '@platform-dev-tools:settings.developer.description',\n )\n .addSetting({\n key: AXPPlatformDevToolsSettings.DebugMode,\n title: '@platform-dev-tools:settings.developer.items.debug-mode.title',\n description: '@platform-dev-tools:settings.developer.items.debug-mode.description',\n scope: 'P',\n overridableAt: [],\n // Platform-only developer switch (same pattern as System Insight / Auth).\n isInherited: false,\n defaultValue: false,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n },\n })\n .endSection()\n .addSection(\n AXP_PLATFORM_DEV_TOOLS_COMMUNICATION_DEBUG_REDIRECT_SECTION,\n '@platform-dev-tools:settings.communication-debug-redirect.title',\n '@platform-dev-tools:settings.communication-debug-redirect.description',\n )\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ---- Tree node types ----\n\nexport type PlatformExplorerNodeKind =\n | 'module'\n | 'entities'\n | 'entity'\n | 'permissions'\n | 'permission'\n | 'features'\n | 'feature';\n\nexport interface PlatformExplorerTreeNode {\n id: string;\n kind: PlatformExplorerNodeKind;\n label: string;\n moduleName?: string;\n /** i18n key for the module title (used for page title and breadcrumbs) */\n moduleTitle?: string;\n children?: PlatformExplorerTreeNode[];\n /** Optional payload for detail view */\n payload?: unknown;\n /** Item count for badge (e.g. entities count, permissions count, features count) */\n itemCount?: number;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPEntityResolver } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPModuleManifestRegistry } from '@acorex-platform/framework-client/core';\nimport { AXPPermissionDefinitionService } from '@acorex-platform/framework-client/auth';\nimport { inject, Injectable } from '@angular/core';\nimport {\n PlatformExplorerTreeNode,\n} from './platform-explorer-tree.model';\nimport type { AXPFeatureDefinition } from '@acorex-platform/framework-client/core';\nimport type { AXPPermissionDefinition, AXPPermissionGroupDefinition } from '@acorex-platform/framework-client/auth';\n\n//#endregion\n\n//#region ---- Service ----\n\n@Injectable()\nexport class PlatformExplorerDataService {\n private readonly manifestRegistry = inject(AXPModuleManifestRegistry);\n private readonly entityResolver = inject(AXPEntityResolver);\n private readonly permissionService = inject(AXPPermissionDefinitionService);\n\n /**\n * Build only root-level module nodes (no children). Children are loaded on expand via getModuleChildren.\n * Includes all modules; use buildModulesOnlyFiltered() to exclude modules with no entities/permissions/features.\n */\n async buildModulesOnly(): Promise<PlatformExplorerTreeNode[]> {\n await this.manifestRegistry.initialize();\n const modules = this.manifestRegistry.getAll();\n const tree: PlatformExplorerTreeNode[] = modules.map((mod) => ({\n id: `module-${mod.name}`,\n kind: 'module' as const,\n label: mod.title,\n moduleName: mod.name,\n moduleTitle: mod.title,\n payload: mod,\n children: [],\n }));\n tree.sort((a, b) => {\n const nameA = (a.payload as { name?: string })?.name ?? a.moduleName ?? '';\n const nameB = (b.payload as { name?: string })?.name ?? b.moduleName ?? '';\n return nameA.localeCompare(nameB, undefined, { sensitivity: 'base' });\n });\n return tree;\n }\n\n /**\n * Build root-level module nodes, excluding modules that have no entities, permissions, or features.\n * Each module node gets itemCount = number of non-empty subcategories (for badge).\n */\n async buildModulesOnlyFiltered(): Promise<PlatformExplorerTreeNode[]> {\n const all = await this.buildModulesOnly();\n const filtered: PlatformExplorerTreeNode[] = [];\n for (const modNode of all) {\n const children = await this.getModuleChildren(modNode.id);\n if (children.length > 0) {\n filtered.push({\n ...modNode,\n itemCount: children.length,\n });\n }\n }\n return filtered;\n }\n\n /**\n * Load entities, permissions, and features for a module (called when module node is expanded or clicked).\n * Only includes subcategories that have at least one item. Returns empty array if module has no items.\n */\n async getModuleChildren(moduleId: string): Promise<PlatformExplorerTreeNode[]> {\n const moduleName = moduleId.startsWith('module-') ? moduleId.slice(7) : moduleId;\n const mod = this.manifestRegistry.get(moduleName);\n if (!mod) return [];\n const moduleTitle = mod.title;\n const [allEntries, permissions, features] = await Promise.all([\n this.entityResolver.listAll(),\n this.getPermissionsForModule(moduleName),\n Promise.resolve(this.getFeaturesForModule(moduleName)),\n ]);\n const moduleEntities = allEntries.filter((e) => e.module === moduleName);\n const permissionsCount = permissions.length;\n const featuresCount = features.length;\n const nodes: PlatformExplorerTreeNode[] = [];\n if (moduleEntities.length > 0) {\n nodes.push({\n id: `module-${moduleName}-entities`,\n kind: 'entities',\n label: '@platform-dev-tools:module.terms.entities',\n moduleName,\n moduleTitle,\n itemCount: moduleEntities.length,\n children: moduleEntities.map((e) => ({\n id: `entity-${moduleName}-${e.name}`,\n kind: 'entity' as const,\n label: e.name,\n moduleName,\n moduleTitle,\n payload: e,\n })),\n });\n }\n if (permissionsCount > 0) {\n nodes.push({\n id: `module-${moduleName}-permissions`,\n kind: 'permissions',\n label: '@platform-dev-tools:module.terms.permissions',\n moduleName,\n moduleTitle,\n itemCount: permissionsCount,\n });\n }\n if (featuresCount > 0) {\n nodes.push({\n id: `module-${moduleName}-features`,\n kind: 'features',\n label: '@platform-dev-tools:module.terms.features',\n moduleName,\n moduleTitle,\n itemCount: featuresCount,\n });\n }\n return nodes;\n }\n\n /**\n * Get all permissions for a module (for display in module detail).\n */\n async getPermissionsForModule(moduleName: string): Promise<AXPPermissionDefinition[]> {\n const groups = await this.permissionService.getGroups();\n return this.collectPermissionsForModule(groups, moduleName);\n }\n\n /**\n * Get all features for a module (for display in module detail).\n */\n getFeaturesForModule(moduleName: string): AXPFeatureDefinition[] {\n return this.manifestRegistry.getModuleFeatures(moduleName);\n }\n\n private collectPermissionsForModule(\n groups: AXPPermissionGroupDefinition[],\n moduleName: string\n ): AXPPermissionDefinition[] {\n const prefix = `${moduleName}:`;\n const out: AXPPermissionDefinition[] = [];\n const collect = (items: AXPPermissionDefinition[]) => {\n for (const p of items) {\n if (p.name.startsWith(prefix)) out.push(p);\n if (p.children?.length) collect(p.children);\n }\n };\n for (const g of groups) {\n if (g.name === moduleName) collect(g.permissions);\n }\n return out;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPModuleManifest } from '@acorex-platform/framework-client/core';\n\n//#endregion\n\n@Component({\n selector: 'axp-platform-explorer-module-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n template: `\n @if (payload()) {\n <section class=\"axp-module-detail\">\n <h3 class=\"axp-module-detail__section-title\">\n {{ '@platform-dev-tools:module.terms.module-info' | translate | async }}\n </h3>\n <dl class=\"axp-detail-dl\">\n <dt>\n {{ '@platform-dev-tools:module.terms.name' | translate | async }}\n </dt>\n <dd>{{ payload()!.name }}</dd>\n\n <dt>\n {{ '@platform-dev-tools:module.terms.version' | translate | async }}\n </dt>\n <dd>{{ payload()!.version }}</dd>\n\n <dt>\n {{ '@platform-dev-tools:module.terms.title' | translate | async }}\n </dt>\n <dd>{{ payload()!.title }}</dd>\n\n @if (payload()!.description) {\n <dt>\n {{ '@platform-dev-tools:module.terms.description' | translate | async }}\n </dt>\n <dd>{{ payload()!.description }}</dd>\n }\n\n @if (payload()!.i18n) {\n <dt>i18n</dt>\n <dd>{{ payload()!.i18n }}</dd>\n }\n\n @if (payload()!.required !== undefined) {\n <dt>\n {{ '@platform-dev-tools:module.terms.required' | translate | async }}\n </dt>\n <dd>{{ payload()!.required }}</dd>\n }\n </dl>\n </section>\n }\n `,\n styles: [\n `@reference '@acorex/styles/themes/default.css';\n\n .axp-module-detail { margin-bottom: 24px; }\n .axp-module-detail__section-title { margin: 0 0 12px 0; font-size: 15px; font-weight: 600; }\n .axp-detail-dl { display: grid; grid-template-columns: auto 1fr; gap: 4px 16px; margin: 0; }\n .axp-detail-dl dt { font-weight: 600; color: var(--ax-neutral-text-secondary, #666); }\n .axp-detail-dl dd { margin: 0; }\n `,\n ],\n})\nexport class AXPlatformExplorerModuleDetailComponent {\n payload = input<AXPModuleManifest | undefined>();\n}\n","//#region ---- Imports ----\n\nimport type { AXPEntity } from '@acorex-platform/framework-shared/entity';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, signal, ViewEncapsulation } from '@angular/core';\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPEntityResolver } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXPEntityListEntry } from '@acorex-platform/framework-client/layout/entity';\n\n//#endregion\n\nfunction isListEntry(p: AXPEntity | AXPEntityListEntry): p is AXPEntityListEntry {\n return p != null && 'fullName' in p && !('properties' in p);\n}\n\n@Component({\n selector: 'axp-platform-explorer-entity-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXTranslationModule],\n host: { class: 'flex flex-col flex-1 min-h-0' },\n template: `\n <div class=\"flex flex-col flex-1 min-h-0 pt-0 overflow-auto\">\n @if (entity(); as e) {\n <dl class=\"grid grid-cols-[auto_1fr] gap-x-4 gap-y-1 mb-3 m-0\">\n <dt class=\"font-semibold text-muted\">{{ '@platform-dev-tools:module.terms.module' | translate | async }}</dt><dd class=\"m-0\">{{ e.module }}</dd>\n <dt class=\"font-semibold text-muted\">{{ '@platform-dev-tools:module.terms.name' | translate | async }}</dt><dd class=\"m-0\">{{ e.name }}</dd>\n @if (e.title) {\n <dt class=\"font-semibold text-muted\">{{ '@platform-dev-tools:module.terms.title' | translate | async }}</dt><dd class=\"m-0\">{{ e.title | translate | async}}</dd>\n }\n @if (e.formats.plural) {\n <dt class=\"font-semibold text-muted\">{{ '@platform-dev-tools:module.terms.plural' | translate | async }}</dt><dd class=\"m-0\">{{ e.formats.plural | translate | async}}</dd>\n }\n </dl>\n @if (e.properties && e.properties.length > 0) {\n <p class=\"mb-2 mt-3 font-bold\">{{ '@platform-dev-tools:module.terms.properties' | translate | async }} ({{ e.properties.length }})</p>\n <div class=\"flex-1 min-h-0 overflow-auto border border-lightest rounded-md\">\n <table class=\"w-full border-collapse text-[13px]\">\n <thead>\n <tr>\n <th class=\"text-start p-2 px-3 bg-lighter font-semibold border-b border-lightest\">{{ '@platform-dev-tools:module.terms.name' | translate | async }}</th>\n <th class=\"text-start p-2 px-3 bg-lighter font-semibold border-b border-lightest\">{{ '@platform-dev-tools:module.terms.title' | translate | async }}</th>\n <th class=\"text-start p-2 px-3 bg-lighter font-semibold border-b border-lightest\">{{ '@platform-dev-tools:module.terms.type' | translate | async }}</th>\n <th class=\"text-start p-2 px-3 bg-lighter font-semibold border-b border-lightest\">{{ '@platform-dev-tools:module.terms.description' | translate | async }}</th>\n </tr>\n </thead>\n <tbody class=\"axp-entity-detail-tbody\">\n @for (p of e.properties; track p.name) {\n <tr>\n <td class=\"p-2 px-3 border-b border-lightest\"><code class=\"text-xs bg-lighter px-1.5 py-0.5 rounded\">{{ p.name }}</code></td>\n <td class=\"p-2 px-3 border-b border-lightest\">{{ p.title | translate | async }}</td>\n <td class=\"p-2 px-3 border-b border-lightest\">{{ p.schema.dataType }}</td>\n <td class=\"p-2 px-3 border-b border-lightest\">@if (p.description) { {{ p.description | translate | async }} } @else { – }</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n } @else if (loading()) {\n <p class=\"m-0 text-muted\">{{ '@platform-dev-tools:module.terms.loading-entity' | translate | async }}</p>\n }\n </div>\n `,\n styles: [\n `@reference '@acorex/styles/themes/default.css';\n\n .axp-entity-detail-tbody tr:last-child td { border-bottom: none; }\n `,\n ],\n})\nexport class AXPlatformExplorerEntityDetailComponent {\n payload = input<AXPEntity | AXPEntityListEntry | undefined>();\n\n protected readonly entity = signal<AXPEntity | null>(null);\n protected readonly loading = signal(false);\n\n private readonly entityResolver = inject(AXPEntityResolver);\n\n constructor() {\n effect(() => {\n const p = this.payload();\n if (!p) {\n this.entity.set(null);\n this.loading.set(false);\n return;\n }\n if (isListEntry(p)) {\n this.loading.set(true);\n this.entity.set(null);\n this.entityResolver.get(p.module, p.name).then((e) => {\n if (this.payload() === p) {\n this.entity.set(e ?? null);\n }\n this.loading.set(false);\n });\n } else {\n this.entity.set(p);\n this.loading.set(false);\n }\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { AXDataSource, AXDataSourceQuery } from '@acorex/cdk/common';\nimport { AXDataTableModule } from '@acorex/components/data-table';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPPermissionDefinition } from '@acorex-platform/framework-client/auth';\nimport { PlatformExplorerDataService } from '../platform-explorer-data.service';\n\n//#endregion\n\n@Component({\n selector: 'axp-platform-explorer-permissions-list-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXDataTableModule, AXTranslationModule],\n host: { class: 'flex flex-col flex-1 min-h-0' },\n template: `\n <div class=\"flex flex-1 min-h-0 pt-0 overflow-auto\">\n <ax-data-table\n class=\"flex-1 border border-lightest rounded-md overflow-hidden\"\n [paging]=\"true\"\n [allowReordering]=\"true\"\n [dataSource]=\"dataSource\"\n >\n <ax-text-column [dataField]=\"'name'\" [caption]=\"'@platform-dev-tools:module.terms.name' | translate | async\" [width]=\"'420px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column [dataField]=\"'title'\" [caption]=\"'@platform-dev-tools:module.terms.title' | translate | async\" [cellTemplate]=\"titleTpl\" [width]=\"'260px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column [dataField]=\"'description'\" [caption]=\"'@platform-dev-tools:module.terms.description' | translate | async\" [cellTemplate]=\"descTpl\" [width]=\"'380px'\" [allowResizing]=\"true\"></ax-text-column>\n </ax-data-table>\n </div>\n <ng-template #titleTpl let-item>\n {{ $safeNavigationMigration(item.data?.title) | translate | async }}</ng-template>\n <ng-template #descTpl let-item>\n @if (item.data?.description) { {{ item.data.description | translate | async }} } @else { – }\n </ng-template>\n `,\n})\nexport class AXPlatformExplorerPermissionsListDetailComponent {\n moduleName = input.required<string>();\n private readonly dataService = inject(PlatformExplorerDataService);\n\n readonly dataSource = new AXDataSource<AXPPermissionDefinition>({\n key: 'name',\n pageSize: 20,\n load: async (e: AXDataSourceQuery) => {\n const name = this.moduleName();\n if (!name) return { items: [], total: 0 };\n const list = await this.dataService.getPermissionsForModule(name);\n const skip = e?.skip ?? 0;\n const take = e?.take ?? 20;\n const items = list.slice(skip, skip + take);\n return { items, total: list.length };\n },\n });\n\n constructor() {\n effect(() => {\n this.moduleName();\n this.dataSource.refresh();\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { AXDataSource, AXDataSourceQuery } from '@acorex/cdk/common';\nimport { AXDataTableModule } from '@acorex/components/data-table';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport type { AXPFeatureDefinition } from '@acorex-platform/framework-client/core';\nimport { PlatformExplorerDataService } from '../platform-explorer-data.service';\n\n//#endregion\n\n@Component({\n selector: 'axp-platform-explorer-features-list-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXDataTableModule, AXTranslationModule],\n host: { class: 'flex flex-col flex-1 min-h-0' },\n template: `\n <div class=\"flex flex-1 min-h-0 pt-0 overflow-auto\">\n <ax-data-table\n class=\"flex-1 border border-lightest rounded-md overflow-hidden\"\n [paging]=\"true\"\n [allowReordering]=\"true\"\n [dataSource]=\"dataSource\"\n >\n <ax-text-column dataField=\"key\" [caption]=\"'@platform-dev-tools:module.terms.key' | translate | async\" [width]=\"'240px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column dataField=\"title\" [caption]=\"'@platform-dev-tools:module.terms.title' | translate | async\" [cellTemplate]=\"titleTpl\" [width]=\"'280px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column dataField=\"type\" caption=\"Type\" [width]=\"'100px'\" [cellTemplate]=\"typeTpl\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column dataField=\"description\" [caption]=\"'@platform-dev-tools:module.terms.description' | translate | async\" [cellTemplate]=\"descTpl\" [width]=\"'340px'\" [allowResizing]=\"true\"></ax-text-column>\n <ax-text-column dataField=\"defaultValue\" [caption]=\"'@platform-dev-tools:module.terms.default-value' | translate | async\" [width]=\"'140px'\" [allowResizing]=\"true\"></ax-text-column>\n </ax-data-table>\n </div>\n <ng-template #titleTpl let-item>{{ $safeNavigationMigration(item.data?.title) | translate | async }}</ng-template>\n <ng-template #typeTpl let-item>{{ item.data?.type ?? '–' }}</ng-template>\n <ng-template #descTpl let-item>@if (item.data?.description) { {{ item.data.description | translate | async }} } @else { – }</ng-template>\n `,\n})\nexport class AXPlatformExplorerFeaturesListDetailComponent {\n moduleName = input.required<string>();\n private readonly dataService = inject(PlatformExplorerDataService);\n\n readonly dataSource = new AXDataSource<AXPFeatureDefinition>({\n key: 'name',\n pageSize: 20,\n load: (e: AXDataSourceQuery) => {\n const name = this.moduleName();\n if (!name) return Promise.resolve({ items: [], total: 0 });\n const list = this.dataService.getFeaturesForModule(name);\n const skip = e?.skip ?? 0;\n const take = e?.take ?? 20;\n const items = list.slice(skip, skip + take);\n return Promise.resolve({ items, total: list.length });\n },\n });\n\n constructor() {\n effect(() => {\n this.moduleName();\n this.dataSource.refresh();\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { PlatformExplorerTreeNode } from './platform-explorer-tree.model';\nimport { AXPlatformExplorerModuleDetailComponent } from './detail/platform-explorer-module-detail.component';\nimport { AXPlatformExplorerEntityDetailComponent } from './detail/platform-explorer-entity-detail.component';\nimport { AXPlatformExplorerPermissionsListDetailComponent } from './detail/platform-explorer-permissions-list-detail.component';\nimport { AXPlatformExplorerFeaturesListDetailComponent } from './detail/platform-explorer-features-list-detail.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-platform-explorer-detail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'flex flex-col flex-1 min-h-0' },\n imports: [\n AXTranslationModule,\n AXPlatformExplorerModuleDetailComponent,\n AXPlatformExplorerEntityDetailComponent,\n AXPlatformExplorerPermissionsListDetailComponent,\n AXPlatformExplorerFeaturesListDetailComponent\n],\n template: `\n <div class=\"flex flex-col flex-1 min-h-0\">\n @switch (node().kind) {\n @case ('module') {\n <axp-platform-explorer-module-detail [payload]=\"$any(node().payload)\" />\n }\n @case ('entity') {\n <axp-platform-explorer-entity-detail [payload]=\"$any(node().payload)\" />\n }\n @case ('permissions') {\n <axp-platform-explorer-permissions-list-detail [moduleName]=\"node().moduleName!\" />\n }\n @case ('features') {\n <axp-platform-explorer-features-list-detail [moduleName]=\"node().moduleName!\" />\n }\n @default {\n <p class=\"axp-detail__hint\">{{ node().children?.length ?? 0 }} items.</p>\n }\n }\n </div>\n `,\n styles: [\n `@reference '@acorex/styles/themes/default.css';\n\n .axp-detail__hint { margin: 0; color: var(--ax-neutral-text-secondary, #666); }\n `,\n ],\n})\nexport class AXPlatformExplorerDetailComponent {\n node = input.required<PlatformExplorerTreeNode>();\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n AXTreeViewComponent,\n AXTreeViewNode,\n AXTreeViewNodeSelectEvent,\n AXTreeViewNodeToggleEvent,\n} from '@acorex/components/tree-view';\nimport { AXPBreadcrumbItem } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n AXPPageLayoutComponent,\n} from '@acorex-platform/framework-client/layout/views';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutStartSideComponent,\n} from '@acorex-platform/framework-client/layout/components';\nimport { PlatformExplorerDataService } from './platform-explorer-data.service';\nimport { PlatformExplorerTreeNode } from './platform-explorer-tree.model';\nimport { AXPlatformExplorerDetailComponent } from './platform-explorer-detail.component';\n\n//#endregion\n\n//#region ---- Convert tree to AXTreeViewNode ----\n\nfunction toTreeViewNodes(\n nodes: PlatformExplorerTreeNode[],\n markModuleExpandable = false\n): AXTreeViewNode[] {\n return nodes.map((n) => {\n const children = n.children ?? [];\n const hasChildren = children.length > 0;\n const axNode: AXTreeViewNode = {\n id: n.id,\n title: n.label,\n children: hasChildren ? toTreeViewNodes(children, false) : undefined,\n data: { treeNode: n },\n };\n if (markModuleExpandable && n.kind === 'module' && !hasChildren) {\n (axNode as Record<string, unknown>)['childrenCount'] = 3;\n }\n return axNode;\n });\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-platform-explorer-page',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutBlockComponent,\n AXTreeViewComponent,\n AXPlatformExplorerDetailComponent,\n ],\n providers: [\n PlatformExplorerDataService,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPlatformExplorerPageComponent,\n },\n ],\n templateUrl: './platform-explorer-page.component.html',\n styleUrl: './platform-explorer-page.component.css',\n})\nexport class AXPlatformExplorerPageComponent extends AXPPageLayoutBaseComponent {\n protected readonly dataService = inject(PlatformExplorerDataService);\n\n readonly loading = signal(true);\n readonly selectedNode = signal<PlatformExplorerTreeNode | null>(null);\n protected readonly moduleNodes = signal<PlatformExplorerTreeNode[]>([]);\n protected readonly tree = viewChild<AXTreeViewComponent>('tree');\n\n constructor() {\n super();\n this.initializeModules();\n }\n\n /** Datasource for tree: root = modules only; children loaded when module is expanded. */\n protected datasource = async (parentId?: string): Promise<AXTreeViewNode[]> => {\n if (!parentId) {\n const nodes = this.moduleNodes();\n return toTreeViewNodes(nodes, true);\n }\n const children = await this.dataService.getModuleChildren(parentId);\n return toTreeViewNodes(children, false);\n };\n\n private async initializeModules(): Promise<void> {\n this.loading.set(true);\n try {\n const nodes = await this.dataService.buildModulesOnlyFiltered();\n this.moduleNodes.set(nodes);\n } finally {\n this.loading.set(false);\n }\n }\n\n override async getPageTitle(): Promise<string> {\n const node = this.selectedNode();\n if (!node) {\n return this.translateService.translateAsync('@platform-dev-tools:module.title');\n }\n const moduleTitleKey = node.moduleTitle ?? node.label;\n const moduleTitle = await this.translateService.translateAsync(moduleTitleKey);\n const contextParts: string[] = [];\n switch (node.kind) {\n case 'module':\n return moduleTitle;\n case 'entities':\n contextParts.push(await this.translateService.translateAsync('@platform-dev-tools:module.terms.entities'));\n break;\n case 'entity':\n contextParts.push(await this.translateService.translateAsync('@platform-dev-tools:module.terms.entities'));\n contextParts.push(node.label);\n break;\n case 'permissions':\n contextParts.push(await this.translateService.translateAsync('@platform-dev-tools:module.terms.permissions'));\n break;\n case 'features':\n contextParts.push(await this.translateService.translateAsync('@platform-dev-tools:module.terms.features'));\n break;\n default:\n return moduleTitle;\n }\n return [moduleTitle, ...contextParts].join(' - ');\n }\n\n override getPageDescription(): string | null | Promise<string | null> {\n const node = this.selectedNode();\n if (!node) return null;\n const key = this.descriptionKeyForKind(node.kind);\n return key ? this.translateService.translateAsync(key) : null;\n }\n\n override getPageBreadcrumbs(): AXPBreadcrumbItem[] | Promise<AXPBreadcrumbItem[]> {\n const node = this.selectedNode();\n const items: AXPBreadcrumbItem[] = [\n { title: '@platform-dev-tools:module.menus.platform-explorer.title' },\n ];\n if (node?.moduleTitle) {\n items.push({ title: node.moduleTitle });\n }\n return items;\n }\n\n private descriptionKeyForKind(kind: PlatformExplorerTreeNode['kind']): string | null {\n switch (kind) {\n case 'module':\n return '@platform-dev-tools:module.descriptions.module';\n case 'entities':\n return '@platform-dev-tools:module.descriptions.entities';\n case 'entity':\n return '@platform-dev-tools:module.descriptions.entity';\n case 'permissions':\n return '@platform-dev-tools:module.descriptions.permissions';\n case 'features':\n return '@platform-dev-tools:module.descriptions.features';\n default:\n return null;\n }\n }\n\n protected onNodeClick(event: AXTreeViewNodeSelectEvent): void {\n const node = event.node;\n const data = node?.['data'] as { treeNode?: PlatformExplorerTreeNode } | undefined;\n const treeNode = data?.treeNode;\n if (treeNode) {\n this.selectedNode.set(treeNode);\n this.recompute();\n // When a module node is clicked, expand it so the tree loads its children (entities, permissions, features)\n if (treeNode.kind === 'module') {\n const treeRef = this.tree();\n if (treeRef && typeof (treeRef as unknown as { expandNode?: (id: string) => void }).expandNode === 'function') {\n (treeRef as unknown as { expandNode: (id: string) => void }).expandNode(treeNode.id);\n }\n }\n }\n }\n\n protected onNodeToggle(_event: AXTreeViewNodeToggleEvent): void {\n // Tree loads children via datasource(parentId) when a node is expanded; no extra work needed.\n }\n}\n\n//#endregion\n","<axp-page-layout>\n <axp-layout-start-side>\n <axp-layout-header>\n <axp-layout-title>{{ '@platform-dev-tools:module.menus.platform-explorer.title' | translate | async\n }}</axp-layout-title>\n </axp-layout-header>\n <axp-layout-content class=\"axp-platform-explorer__tree-wrap\">\n @if (loading()) {\n <p class=\"axp-platform-explorer__loading\">Loading...</p>\n } @else if (moduleNodes().length === 0) {\n <p class=\"axp-platform-explorer__empty\">{{ '@platform-dev-tools:module.messages.no-modules' | translate | async }}\n </p>\n } @else {\n <ax-tree-view #tree [datasource]=\"datasource\" [selectMode]=\"'single'\" [showIcons]=\"false\"\n [showChildrenBadge]=\"true\" [dragBehavior]=\"'none'\" look=\"default\" [nodeTemplate]=\"nodeTemplate\"\n (onNodeClick)=\"onNodeClick($event)\" (onNodeToggle)=\"onNodeToggle($event)\" />\n }\n </axp-layout-content>\n </axp-layout-start-side>\n\n <axp-page-content class=\"min-h-0 pt-0\">\n @if (selectedNode()) {\n <axp-platform-explorer-detail [node]=\"selectedNode()!\" />\n } @else {\n <p class=\"axp-platform-explorer__hint\">{{ '@platform-dev-tools:module.messages.select-node' | translate | async }}\n </p>\n }\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Node template: icon per kind (with color) + label (translated) + badge -->\n<ng-template #nodeTemplate let-node=\"node\">\n @let data = node['data'];\n @let treeNode = $safeNavigationMigration(data?.treeNode);\n @let kind = $safeNavigationMigration(treeNode?.kind);\n @let count = node['childrenCount'] ?? treeNode?.itemCount;\n <span class=\"axp-platform-explorer__node\">\n @switch (kind) {\n @case ('module') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--module fa-light fa-cube\"\n aria-hidden=\"true\"></i>\n }\n @case ('entities') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--entities fa-light fa-table-list\"\n aria-hidden=\"true\"></i>\n }\n @case ('entity') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--entity fa-light fa-table\"\n aria-hidden=\"true\"></i>\n }\n @case ('permissions') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--permissions fa-light fa-shield-halved\"\n aria-hidden=\"true\"></i>\n }\n @case ('features') {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--features fa-light fa-sliders\"\n aria-hidden=\"true\"></i>\n }\n @default {\n <i class=\"axp-platform-explorer__node-icon axp-platform-explorer__node-icon--default fa-light fa-circle-dot\"\n aria-hidden=\"true\"></i>\n }\n }\n <span class=\"axp-platform-explorer__node-label\">{{ node['title'] | translate | async }}</span>\n @if (count != null && count > 0) {\n <span class=\"axp-platform-explorer__node-badge\">{{ count }}</span>\n }\n </span>\n</ng-template>","//#region ---- Imports ----\n\nimport {\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { PlatformExplorerTreeNode } from './platform-explorer-tree.model';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-platform-explorer-tree-node',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPlatformExplorerTreeNodeComponent],\n template: `\n <div class=\"axp-tree-node\" [class.axp-tree-node--selected]=\"isSelected()\">\n <button\n type=\"button\"\n class=\"axp-tree-node__toggler\"\n [class.axp-tree-node__toggler--open]=\"expanded()\"\n [attr.aria-expanded]=\"expanded()\"\n (click)=\"toggle()\"\n >\n @if (hasChildren()) {\n <span class=\"axp-tree-node__icon\" aria-hidden=\"true\">{{ expanded() ? '▼' : '▶' }}</span>\n } @else {\n <span class=\"axp-tree-node__icon axp-tree-node__icon--empty\"></span>\n }\n </button>\n <button\n type=\"button\"\n class=\"axp-tree-node__label\"\n (click)=\"select()\"\n >\n {{ node().label }}\n @if (childrenLength() > 0) {\n <span class=\"axp-tree-node__badge\">({{ childrenLength() }})</span>\n }\n </button>\n </div>\n @if (hasChildren() && expanded()) {\n <div class=\"axp-tree-node__children\">\n @for (child of node().children ?? []; track child.id) {\n <axp-platform-explorer-tree-node\n [node]=\"child\"\n [selectedId]=\"selectedId()\"\n (nodeSelect)=\"nodeSelect.emit($event)\"\n />\n }\n </div>\n }\n `,\n styles: [\n `@reference '@acorex/styles/themes/default.css';\n\n :host {\n display: block;\n }\n .axp-tree-node {\n display: flex;\n align-items: center;\n min-height: 28px;\n }\n .axp-tree-node--selected .axp-tree-node__label {\n font-weight: 600;\n background: var(--ax-neutral-surface-hover, rgba(0, 0, 0, 0.04));\n }\n .axp-tree-node__toggler {\n width: 24px;\n height: 28px;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n color: var(--ax-neutral-text-secondary, #666);\n flex-shrink: 0;\n }\n .axp-tree-node__toggler--open .axp-tree-node__icon {\n transform: rotate(0);\n }\n .axp-tree-node__icon {\n font-size: 10px;\n display: inline-block;\n }\n .axp-tree-node__icon--empty {\n width: 10px;\n }\n .axp-tree-node__label {\n flex: 1;\n text-align: start;\n padding: 4px 8px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n border-radius: 4px;\n }\n .axp-tree-node__label:hover {\n background: var(--ax-neutral-surface-hover, rgba(0, 0, 0, 0.04));\n }\n .axp-tree-node__badge {\n margin-inline-start: 4px;\n font-size: 11px;\n color: var(--ax-neutral-text-secondary, #666);\n font-weight: normal;\n }\n .axp-tree-node__children {\n padding-inline-start: 16px;\n }\n `,\n ],\n})\nexport class AXPlatformExplorerTreeNodeComponent {\n node = input.required<PlatformExplorerTreeNode>();\n selectedId = input<string | null>(null);\n nodeSelect = output<PlatformExplorerTreeNode>();\n\n readonly expanded = signal(true);\n\n childrenLength(): number {\n return this.node().children?.length ?? 0;\n }\n\n hasChildren(): boolean {\n const children = this.node().children;\n return !!children && children.length > 0;\n }\n\n isSelected(): boolean {\n return this.selectedId() === this.node().id;\n }\n\n toggle(): void {\n if (this.hasChildren()) {\n this.expanded.update((v) => !v);\n }\n }\n\n select(): void {\n this.nodeSelect.emit(this.node());\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXP_MODULE_MANIFEST_PROVIDER, provideLazyProvider } from '@acorex-platform/framework-client/core';\nimport { AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXPRootLayoutComponent } from '@acorex-platform/framework-client/themes/default';\nimport { NgModule } from '@angular/core';\nimport { ROUTES, Routes } from '@angular/router';\nimport { PlatformDevToolsManifest } from './manifest';\nimport { AXMPlatformDevToolsMenuProvider } from './menu.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXPPlatformDevToolsSettingProvider } from './settings.provider';\nimport { AXPlatformExplorerPageComponent } from './features/platform-explorer';\n\n//#endregion\n\n//#region ---- Routes ----\n\nfunction routesFactory(): Routes {\n return [\n {\n path: ':app/dev/platform-explorer',\n canActivate: [AXPAuthGuard],\n data: { rootLayout: true },\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () => AXPlatformExplorerPageComponent,\n data: { reuse: true },\n },\n ],\n },\n ];\n}\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: PlatformDevToolsManifest,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n provideLazyProvider(AXP_MENU_PROVIDER, () =>\n import('./menu.provider').then(m => m.AXMPlatformDevToolsMenuProvider),\n ),\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXPPlatformDevToolsSettingProvider,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n ],\n})\nexport class AXMPlatformDevToolsModule { }\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}
|