@acorex-platform/module-document-management-client 2.0.0-next.15 → 2.0.0-next.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/fesm2022/{acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-C_TdVup5.mjs → acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-ouqn86NW.mjs} +27 -27
  2. package/fesm2022/{acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-C_TdVup5.mjs.map → acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-ouqn86NW.mjs.map} +1 -1
  3. package/fesm2022/{acorex-platform-module-document-management-client-attachment-view-skeleton.component-B-MJAd6K.mjs → acorex-platform-module-document-management-client-attachment-view-skeleton.component-BJiGxy0q.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-document-management-client-attachment-view-skeleton.component-B-MJAd6K.mjs.map → acorex-platform-module-document-management-client-attachment-view-skeleton.component-BJiGxy0q.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-document-management-client-attachment-widget.component-BcxGDjeF.mjs → acorex-platform-module-document-management-client-attachment-widget.component-B0apv8oL.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-document-management-client-attachment-widget.component-BcxGDjeF.mjs.map → acorex-platform-module-document-management-client-attachment-widget.component-B0apv8oL.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-document-management-client-details-view.component-TKzt2KvO.mjs → acorex-platform-module-document-management-client-details-view.component-e0-r7tOA.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-document-management-client-details-view.component-TKzt2KvO.mjs.map → acorex-platform-module-document-management-client-details-view.component-e0-r7tOA.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-module-document-management-client-distribute-document.command-DoQC3ylx.mjs → acorex-platform-module-document-management-client-distribute-document.command-ClaZpJxL.mjs} +49 -6
  10. package/fesm2022/acorex-platform-module-document-management-client-distribute-document.command-ClaZpJxL.mjs.map +1 -0
  11. package/fesm2022/{acorex-platform-module-document-management-client-distribute-document.command.util-HCkpx2Hk.mjs → acorex-platform-module-document-management-client-distribute-document.command.util-BH09ggCd.mjs} +34 -8
  12. package/fesm2022/acorex-platform-module-document-management-client-distribute-document.command.util-BH09ggCd.mjs.map +1 -0
  13. package/fesm2022/{acorex-platform-module-document-management-client-drive-choose.component-B4BDB97X.mjs → acorex-platform-module-document-management-client-drive-choose.component-ByQZpkzB.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-module-document-management-client-drive-choose.component-B4BDB97X.mjs.map → acorex-platform-module-document-management-client-drive-choose.component-ByQZpkzB.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view-skeleton.component-q5QaDA3U.mjs → acorex-platform-module-document-management-client-large-icons-view-skeleton.component-BfUGecdc.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view-skeleton.component-q5QaDA3U.mjs.map → acorex-platform-module-document-management-client-large-icons-view-skeleton.component-BfUGecdc.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view.component-DWuhN497.mjs → acorex-platform-module-document-management-client-large-icons-view.component-BAR0i7Fe.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-module-document-management-client-large-icons-view.component-DWuhN497.mjs.map → acorex-platform-module-document-management-client-large-icons-view.component-BAR0i7Fe.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-document-management-client-large-tiles-view.component-ClRmDSXY.mjs → acorex-platform-module-document-management-client-large-tiles-view.component-D-lTrz1r.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-document-management-client-large-tiles-view.component-ClRmDSXY.mjs.map → acorex-platform-module-document-management-client-large-tiles-view.component-D-lTrz1r.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-document-management-client-list-view-skeleton.component-uO3rSIL6.mjs → acorex-platform-module-document-management-client-list-view-skeleton.component-DuwOFiOX.mjs} +2 -2
  22. package/fesm2022/{acorex-platform-module-document-management-client-list-view-skeleton.component-uO3rSIL6.mjs.map → acorex-platform-module-document-management-client-list-view-skeleton.component-DuwOFiOX.mjs.map} +1 -1
  23. package/fesm2022/{acorex-platform-module-document-management-client-list-view.component-DOqc7vC9.mjs → acorex-platform-module-document-management-client-list-view.component-0Rp9eJI4.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-module-document-management-client-list-view.component-DOqc7vC9.mjs.map → acorex-platform-module-document-management-client-list-view.component-0Rp9eJI4.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-module-document-management-client-open-document.command-B87Xj3s6.mjs → acorex-platform-module-document-management-client-open-document.command-C1p9kzNu.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-module-document-management-client-open-document.command-B87Xj3s6.mjs.map → acorex-platform-module-document-management-client-open-document.command-C1p9kzNu.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-module-document-management-client-request-document-review.command-MLT9W3J0.mjs → acorex-platform-module-document-management-client-request-document-review.command-CkbGudeb.mjs} +12 -5
  28. package/fesm2022/acorex-platform-module-document-management-client-request-document-review.command-CkbGudeb.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-module-document-management-client-sign-distributed-document.command-BqLS0leG.mjs → acorex-platform-module-document-management-client-sign-distributed-document.command-vGwi8Ssi.mjs} +2 -2
  30. package/fesm2022/{acorex-platform-module-document-management-client-sign-distributed-document.command-BqLS0leG.mjs.map → acorex-platform-module-document-management-client-sign-distributed-document.command-vGwi8Ssi.mjs.map} +1 -1
  31. package/fesm2022/{acorex-platform-module-document-management-client-sign-document-review.command-Ccl9iY7j.mjs → acorex-platform-module-document-management-client-sign-document-review.command-C1cy6Ivm.mjs} +2 -2
  32. package/fesm2022/{acorex-platform-module-document-management-client-sign-document-review.command-Ccl9iY7j.mjs.map → acorex-platform-module-document-management-client-sign-document-review.command-C1cy6Ivm.mjs.map} +1 -1
  33. package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view-skeleton.component-DCjsVs5n.mjs → acorex-platform-module-document-management-client-small-icons-view-skeleton.component-C8FPhbsI.mjs} +2 -2
  34. package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view-skeleton.component-DCjsVs5n.mjs.map → acorex-platform-module-document-management-client-small-icons-view-skeleton.component-C8FPhbsI.mjs.map} +1 -1
  35. package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view.component-DbO9rbel.mjs → acorex-platform-module-document-management-client-small-icons-view.component-Di6dWcxr.mjs} +2 -2
  36. package/fesm2022/{acorex-platform-module-document-management-client-small-icons-view.component-DbO9rbel.mjs.map → acorex-platform-module-document-management-client-small-icons-view.component-Di6dWcxr.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view-skeleton.component-CO9d4ytu.mjs → acorex-platform-module-document-management-client-small-tiles-view-skeleton.component-DuonROkJ.mjs} +2 -2
  38. package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view-skeleton.component-CO9d4ytu.mjs.map → acorex-platform-module-document-management-client-small-tiles-view-skeleton.component-DuonROkJ.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view.component-Ci2m67vw.mjs → acorex-platform-module-document-management-client-small-tiles-view.component-BqToMMgD.mjs} +2 -2
  40. package/fesm2022/{acorex-platform-module-document-management-client-small-tiles-view.component-Ci2m67vw.mjs.map → acorex-platform-module-document-management-client-small-tiles-view.component-BqToMMgD.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-module-document-management-client-upload-document.command-BsziEhNt.mjs → acorex-platform-module-document-management-client-upload-document.command-tfOxVVer.mjs} +2 -2
  42. package/fesm2022/{acorex-platform-module-document-management-client-upload-document.command-BsziEhNt.mjs.map → acorex-platform-module-document-management-client-upload-document.command-tfOxVVer.mjs.map} +1 -1
  43. package/fesm2022/acorex-platform-module-document-management-client.mjs +1 -1
  44. package/package.json +2 -2
  45. package/fesm2022/acorex-platform-module-document-management-client-distribute-document.command-DoQC3ylx.mjs.map +0 -1
  46. package/fesm2022/acorex-platform-module-document-management-client-distribute-document.command.util-HCkpx2Hk.mjs.map +0 -1
  47. package/fesm2022/acorex-platform-module-document-management-client-request-document-review.command-MLT9W3J0.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-C_TdVup5.mjs","sources":["../../../../libs/modules/document-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/document-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-management.service.ts","../../../../libs/modules/document-management/client/src/lib/badge.provider.ts","../../../../libs/modules/document-management/client/src/lib/menu.provider.ts","../../../../libs/modules/document-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/document-management/client/src/lib/settings.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/providers/document-management-file-type.catalog.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/providers/document-management-file-type.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-column.component.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-designer.component.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-edit.component.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-view.component.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-widget.config.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/file-type.module.ts","../../../../libs/modules/document-management/client/src/lib/features/drive/widgets/file-type-filter/document-file-type-filter-widget.config.ts","../../../../libs/modules/document-management/client/src/lib/features/drive/widgets/file-type-filter/document-file-type-filter-widget-edit.component.ts","../../../../libs/modules/document-management/client/src/lib/widget-definition.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-expiration-status.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-expiration.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-file.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/folder-color.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/folder-metadata.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-type-accept.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/services/document-user-fields.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/services/document-dialog.service.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/services/document-attachments.service.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/services/folder-metadata-dialog.service.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-manager.service.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-management-api.service.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/providers/file-uploader/drive-file-uploader.utils.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/providers/file-chooser/drive-file-chooser.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/providers/file-uploader/drive-file-uploader.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/slots/file-uploader-widget-extension/upload-from-drive.hook.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/drive-choose.module.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-file-uploader.widget.plugin.ts","../../../../libs/modules/document-management/client/src/lib/features/document-plugin/document.plugin.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-review.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-distribution.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-version.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/homogeneous-folder-grid.util.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/document-explorer.viewmodel.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/large-tiles/large-tiles-view-skeleton.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/large-tiles/large-tiles-view-skeleton.component.html","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/document-explorer.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/document-explorer.component.html","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/detail-panel/detail-panel.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/detail-panel/detail-panel.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/components/document-expiration-badge/document-expiration-badge.component.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/components/document-expiration-badge/document-expiration-badge.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/components/document-version-badge/document-version-badge.component.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/components/document-version-badge/document-version-badge.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/components/folder-expiration-badges/folder-expiration-badges.component.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/components/folder-expiration-badges/folder-expiration-badges.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/components/folder-path-breadcrumbs/folder-path-breadcrumbs.component.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/components/folder-path-breadcrumbs/folder-path-breadcrumbs.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/document-attachment-dialog.hooks.ts","../../../../libs/modules/document-management/client/src/lib/features/document-plugin/document-drive-page/document-drive-page.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-plugin/document-drive-page/document-drive-page.component.html","../../../../libs/modules/document-management/client/src/lib/features/document-plugin/document-drive-page/document-drive-page-component.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/attachments-upload.middleware.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-file-info-upload.middleware.ts","../../../../libs/modules/document-management/client/src/lib/document-management.module.ts","../../../../libs/modules/document-management/client/src/lib/features/drive/drive.component.ts","../../../../libs/modules/document-management/client/src/lib/features/drive/drive.component.html","../../../../libs/modules/document-management/client/src/acorex-platform-module-document-management-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { Injectable } from '@angular/core';\nimport { AXPDocumentManagementFeatureKeys } from '@acorex-platform/module-document-management-client/contracts';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Document Management Feature Definition Provider.\n * Provides feature definitions for the Document Management module.\n */\n@Injectable()\nexport class AXPDocumentManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Max Size Storage feature\n context.addFeature(AXPDocumentManagementFeatureKeys.MaxSizeStorage, {\n title: '@document-management:features.max-size-storage.title',\n description: '@document-management:features.max-size-storage.description',\n defaultValue: 1073741824, // 1GB in bytes (default)\n type: 'number',\n interface: {\n type: 'number-editor',\n options: {\n min: 1048576, // 1MB minimum\n max: 1099511627776, // 1TB maximum\n step: 1048576, // 1MB step\n },\n },\n });\n //\n }\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 AXPContentDocumentsPermissionKeys\n} from '@acorex-platform/module-document-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Permission Definition Provider -----\n\n/**\n * Registers document capabilities into the shared Content & Documents group.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPContentDocumentsPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:content-documents.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ContentDocuments.Root, `${G}.content-documents.title`, `${G}.content-documents.description`, { order: 90 });\n\n context\n .addGroup(\n groups.ContentDocuments.Documents,\n `${G}.content-documents-documents.title`,\n `${G}.content-documents-documents.description`,\n { parent: groups.ContentDocuments.Root, order: 10 },\n )\n .addPermission(keys.Access, `${P}.access.title`, `${P}.access.description`)\n .endPermission()\n .addPermission(\n keys.MaintainDocuments,\n `${P}.maintain-documents.title`,\n `${P}.maintain-documents.description`,\n )\n .endPermission()\n .addPermission(\n keys.DistributeDocuments,\n `${P}.distribute-documents.title`,\n `${P}.distribute-documents.description`,\n )\n .endPermission()\n .addPermission(\n keys.ManageDocumentReview,\n `${P}.manage-document-review.title`,\n `${P}.manage-document-review.description`,\n )\n .endPermission()\n .addPermission(keys.Setup, `${P}.setup.title`, `${P}.setup.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPFilterQuery, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { Injectable } from '@angular/core';\nimport {\n AXMDocumentDto,\n AXMDocumentDocDto,\n AXMDocumentManagementFolderEntityModel,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXMMetadataFieldInfo } from './document-manager.types';\n\n/** Breadcrumb segment returned by the combined drive contents endpoint. */\nexport type AXMDriveFolderPathSegment = Pick<\n AXMDocumentManagementFolderEntityModel,\n 'id' | 'title' | 'parentId' | 'color'\n>;\n\n/**\n * Combined response for one drive navigation: folder with one level of children + shortcuts,\n * breadcrumb path from the scope root and the resolved scope root id.\n */\nexport interface AXMDriveContentsDto {\n folder: AXMDocumentManagementFolderEntityModel;\n path: AXMDriveFolderPathSegment[];\n scopeRootId: string;\n}\n\n@Injectable()\nexport abstract class AXPDocumentManagementService {\n /**\n * Gets the root folder for the given scope.\n * Backend resolves tenant/user from request context (security: client sends only scope).\n */\n abstract getRoot(scope: AXPPlatformScope): Promise<AXMDocumentManagementFolderEntityModel>;\n\n /**\n * Single round-trip for one drive navigation: resolves the folder (or scope root when\n * `folderId` is omitted), one level of children, shortcuts and the breadcrumb path.\n */\n abstract getDriveContents(scope: AXPPlatformScope, folderId?: string): Promise<AXMDriveContentsDto>;\n\n /**\n * Gets (or creates) the folder bound to the given entity record.\n * Used by the document/EDMS plugin when viewing an entity single: loads the folder for that record.\n * @param refType Entity type (e.g. \"content-management.promotion\")\n * @param refId Entity record id\n * @returns The folder for this entity record\n */\n abstract getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<AXMDocumentManagementFolderEntityModel>;\n\n // Document methods\n abstract getDocumentPath(\n documentId: string,\n stopFolderId?: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n /**\n * Searches files under a folder tree.\n * `options.metadataFilters` may include the reserved `__quickSearch__` marker; the server routes\n * that to entity full-text search and applies other clauses against `metaDataForm`.\n * Optional `documentTypeIds` narrows by document type. `searchTerm` (or quick-search) matches\n * document name/title/description via full-text.\n */\n abstract searchFiles(\n searchTerm: string,\n rootFolderId: string,\n options?: { metadataFilters?: AXPFilterQuery[]; documentTypeIds?: string[] },\n ): Promise<AXMDocumentDto[]>;\n\n abstract findManyDocuments(ids: string[]): Promise<AXMDocumentDto[]>;\n\n /**\n * Lists files in a folder tree for Document Review or Document Distribution View.\n * Authorized for the assigned task user, ManageDocumentReview, or DistributeDocuments.\n */\n abstract listFolderReviewDocuments(folderId: string, taskId?: string): Promise<AXMDocumentDto[]>;\n\n /**\n * Returns how many documents are already past their expiration date (tenant-scoped).\n * Used by the Company Documents menu badge.\n */\n abstract getExpiredDocumentCount(): Promise<number>;\n\n // Folder methods\n abstract getFolderPath(folderId: string, stopFolderId?: string): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n abstract searchFolders(searchTerm: string, rootFolderId: string): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n // DocumentType methods\n abstract getDocumentTypeByName(name: string): Promise<AXMDocumentDocDto>;\n\n /**\n * Collects unique metadata field definitions across document types.\n * When `documentTypeIds` is omitted, the backend aggregates all types.\n * When `documentTypeIds` is an empty array, an empty list is returned (no types selected).\n * Otherwise only fields from the given document types are included (deduplicated by name).\n */\n abstract getUniqueMetadataDefinitions(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]>;\n}\n","//#region ----- Imports -----\n\nimport { AXPEntityBroadcastService } from '@acorex-platform/framework-client/core';\nimport { AXPTaskBadgeProvider } from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPCommandEventsService,\n type AXPCommandExecutionEvent,\n} from '@acorex-platform/framework-client/runtime';\nimport { DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { AXPDocumentManagementService } from './features/shared/document-management.service';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Menu `badgeKey` for Company Documents (tenant drive). */\nexport const AXM_COMPANY_DOCUMENTS_EXPIRED_BADGE_KEY = 'document-management-expired-badge';\n\nconst DOCUMENT_MANAGEMENT_COMMAND_PREFIX = 'DocumentManagement.';\nconst DOCUMENT_ENTITY = 'DocumentManagement.Document';\n\n//#endregion\n\n//#region ----- Task badge provider -----\n\n/**\n * Shows expired document count on the Company Documents menu item.\n *\n * Refreshes after:\n * - document-management commands (`DocumentManagement.*`)\n * - entity CRUD for Document (`Entity:Insert:Default` etc. — drive upload path)\n * - realtime `entity.mutation` → layout refresh broadcast for Document\n */\n@Injectable()\nexport class AXMDocumentExpiredBadgeProvider extends AXPTaskBadgeProvider {\n //#region ----- Services & Dependencies -----\n\n private readonly documentManagement = inject(AXPDocumentManagementService);\n private readonly commandEvents = inject(AXPCommandEventsService);\n private readonly entityBroadcast = inject(AXPEntityBroadcastService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- Signals & Properties -----\n\n readonly key = AXM_COMPANY_DOCUMENTS_EXPIRED_BADGE_KEY;\n readonly count = signal(0);\n\n //#endregion\n\n constructor() {\n super();\n\n void this.refresh();\n\n const unsubscribeCommands = this.commandEvents.listen((event) => {\n if (this.isRelevantDocumentCommandEvent(event)) {\n void this.handleCommandEvent(event);\n }\n });\n\n const layoutSub = this.entityBroadcast.listenLayoutRefresh().subscribe(({ data }) => {\n if (data?.name === DOCUMENT_ENTITY) {\n void this.refresh();\n }\n });\n\n this.destroyRef.onDestroy(() => {\n unsubscribeCommands();\n layoutSub.unsubscribe();\n });\n }\n\n //#region ----- Badge actions -----\n\n async refresh(): Promise<void> {\n try {\n const expiredCount = await this.documentManagement.getExpiredDocumentCount();\n this.count.set(expiredCount);\n } catch {\n this.count.set(0);\n }\n }\n\n private isRelevantDocumentCommandEvent(event: AXPCommandExecutionEvent): boolean {\n if (event.key.startsWith(DOCUMENT_MANAGEMENT_COMMAND_PREFIX)) {\n return true;\n }\n\n const input = event.input as Record<string, unknown> | undefined;\n const entity = input?.['entity'];\n if (entity === DOCUMENT_ENTITY) {\n return true;\n }\n\n const entityInfo = input?.['entityInfo'] as Record<string, unknown> | undefined;\n return (\n entityInfo?.['source'] === DOCUMENT_ENTITY ||\n (entityInfo?.['module'] === 'DocumentManagement' && entityInfo?.['name'] === 'Document')\n );\n }\n\n private async handleCommandEvent(event?: AXPCommandExecutionEvent): Promise<void> {\n if (!event || event.stage !== 'after' || !event.success) {\n return;\n }\n await this.refresh();\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPDocumentManagementMenuKeys } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPContentDocumentsPermissionKeys } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXM_COMPANY_DOCUMENTS_EXPIRED_BADGE_KEY } from './badge.provider';\n\n@Injectable()\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name;\n const scope = RootConfig.config.i18n;\n\n // My Drive: root level, after Task Board (priority 0)\n context.addItems([\n {\n name: AXPDocumentManagementMenuKeys.UserDrive,\n priority: 1,\n text: `@${scope}:menus.my-drive.title`,\n icon: 'fa-light fa-folder-open',\n path: `${appName}/drive/user`,\n data: { scope: 'user' },\n policy: {\n features: [module.name],\n },\n },\n ]);\n\n // Organization drive (tenant scope): shared folders for the current application session.\n context.addItems([\n {\n name: AXPDocumentManagementMenuKeys.TenantDrive,\n priority: 8120,\n text: `@${scope}:menus.tenant-documents.title`,\n icon: RootConfig.entities.document.icon,\n path: `${appName}/drive/tenant`,\n data: { scope: 'tenant' },\n badgeKey: AXM_COMPANY_DOCUMENTS_EXPIRED_BADGE_KEY,\n policy: {\n features: [module.name],\n permissions: [AXPContentDocumentsPermissionKeys.MaintainDocuments],\n },\n },\n ]);\n\n // Documents group under Configuration/Data and Content\n context.find(AXPCommonMenuKeys.DataAndContent).addItems([\n {\n name: AXPDocumentManagementMenuKeys.DocumentTypes,\n text: RootConfig.entities.documentType.title,\n path: this.entityService.createPath(module.name, RootConfig.entities.documentType.name),\n icon: RootConfig.entities.documentType.icon,\n priority: 1,\n policy: {\n features: [module.name],\n permissions: [AXPContentDocumentsPermissionKeys.Setup],\n },\n },\n ]);\n }\n}\n","import { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\n\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-document-type',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.documentType.name}`,\n entityInfo: { name: RootConfig.entities.documentType.name, module: RootConfig.module.name, title: RootConfig.entities.documentType.title },\n titleKey: '@document-management:permissions.document-type.create.title',\n descriptionKey: '@document-management:permissions.document-type.create.description',\n icon: RootConfig.entities.documentType.icon,\n }),\n ];\n}\n","//#region ---- Imports ----\n\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { Injectable } from '@angular/core';\nimport {\n AXPDocumentManagementSettings,\n RootConfig,\n type AXPDocumentFileDoubleClickAction,\n} from '@acorex-platform/module-document-management-client/contracts';\n\n//#endregion\n\n//#region ---- Module Constants ----\n\nconst I18N = '@document-management:settings';\n\nconst VIEW_MODE_OPTIONS = [\n { value: 'large-icons', text: `${I18N}.items.view-mode.options.large-icons` },\n { value: 'small-icons', text: `${I18N}.items.view-mode.options.small-icons` },\n { value: 'large-tiles', text: `${I18N}.items.view-mode.options.large-tiles` },\n { value: 'small-tiles', text: `${I18N}.items.view-mode.options.small-tiles` },\n { value: 'list', text: `${I18N}.items.view-mode.options.list` },\n { value: 'details', text: `${I18N}.items.view-mode.options.details` },\n] as const;\n\nconst SORT_FIELD_OPTIONS = [\n { value: 'name', text: `${I18N}.items.sort-field.options.name` },\n { value: 'modified', text: `${I18N}.items.sort-field.options.modified` },\n { value: 'size', text: `${I18N}.items.sort-field.options.size` },\n] as const;\n\nconst SORT_DIRECTION_OPTIONS = [\n { value: 'asc', text: `${I18N}.items.sort-direction.options.asc` },\n { value: 'desc', text: `${I18N}.items.sort-direction.options.desc` },\n] as const;\n\nconst FILE_DOUBLE_CLICK_OPTIONS: ReadonlyArray<{\n value: AXPDocumentFileDoubleClickAction;\n text: string;\n}> = [\n { value: 'gallery', text: `${I18N}.items.file-double-click-action.options.gallery` },\n { value: 'download', text: `${I18N}.items.file-double-click-action.options.download` },\n { value: 'view-or-download', text: `${I18N}.items.file-double-click-action.options.view-or-download` },\n];\n\n//#endregion\n\n/**\n * Registers document-management settings, including explorer layout prefs\n * (view mode, sort order) persisted from the drive toolbar.\n */\n@Injectable()\nexport class AXPDocumentManagementSettingProvider implements AXPSettingDefinitionProvider {\n //#region ---- AXPSettingDefinitionProvider ----\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'document-management',\n `${I18N}.group.title`,\n `${I18N}.group.description`,\n RootConfig.module.icon,\n undefined,\n 70,\n )\n .addSection(\n 'explorer-layout',\n `${I18N}.sections.explorer-layout.title`,\n `${I18N}.sections.explorer-layout.description`,\n )\n .addSetting({\n key: AXPDocumentManagementSettings.ViewMode,\n title: `${I18N}.items.view-mode.title`,\n description: `${I18N}.items.view-mode.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'large-icons',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: [...VIEW_MODE_OPTIONS],\n },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.SortField,\n title: `${I18N}.items.sort-field.title`,\n description: `${I18N}.items.sort-field.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'name',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: [...SORT_FIELD_OPTIONS],\n },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.SortDirection,\n title: `${I18N}.items.sort-direction.title`,\n description: `${I18N}.items.sort-direction.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'asc',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: [...SORT_DIRECTION_OPTIONS],\n },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.GroupByType,\n title: `${I18N}.items.group-by-type.title`,\n description: `${I18N}.items.group-by-type.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: true,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n options: { label: null },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.DetailPanelOpen,\n title: `${I18N}.items.detail-panel-open.title`,\n description: `${I18N}.items.detail-panel-open.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: false,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n options: { label: null },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.FileDoubleClickAction,\n title: `${I18N}.items.file-double-click-action.title`,\n description: `${I18N}.items.file-double-click-action.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'gallery',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: [...FILE_DOUBLE_CLICK_OPTIONS],\n },\n },\n })\n .endSection()\n .endGroup();\n }\n\n //#endregion\n}\n","import {\n AX_AUDIO_FILE_TYPE,\n AX_DOCUMENT_FILE_TYPE,\n AX_FILE_FILE_TYPE,\n AX_IMAGE_FILE_TYPE,\n AX_VIDEO_FILE_TYPE,\n AX_FILE_TYPE_METADATA_PURPOSE,\n type AXFileType,\n} from '@acorex/core/file';\n\nimport type { AXPFileExtension, AXPFileType } from '@acorex-platform/framework-client/common';\n\n//#region ---- Icons (seed / explorer style) ----\n\n/** Parent type icons — aligned with `document-type.mock.ts` `TYPE` constants. */\nexport const DM_FILE_TYPE_ICONS = {\n document: 'fa-solid fa-file-pdf text-red-600',\n image: 'fa-solid fa-image text-purple-500',\n file: 'fa-solid fa-file',\n video: 'fa-solid fa-file-video text-red-500',\n audio: 'fa-solid fa-file-audio text-green-500',\n} as const;\n\n/** Per-extension icons for the `document` logical type (office / text). */\nexport const DM_DOCUMENT_EXTENSION_ICONS = {\n pdf: 'fa-solid fa-file-pdf text-red-600',\n doc: 'fa-solid fa-file-word text-blue-700',\n docx: 'fa-solid fa-file-word text-blue-700',\n xls: 'fa-solid fa-file-excel text-green-700',\n xlsx: 'fa-solid fa-file-excel text-green-700',\n ppt: 'fa-solid fa-file-powerpoint text-orange-700',\n pptx: 'fa-solid fa-file-powerpoint text-orange-700',\n txt: 'fa-solid fa-file-lines text-blue-600',\n rtf: 'fa-solid fa-file-lines text-blue-600',\n} as const;\n\n/** Per-extension icons for video files. */\nexport const DM_VIDEO_EXTENSION_ICONS = {\n mp4: 'fa-solid fa-file-video text-blue-500',\n webm: 'fa-solid fa-file-video text-blue-500',\n mov: 'fa-solid fa-file-video text-blue-500',\n m4v: 'fa-solid fa-file-video text-blue-500',\n avi: 'fa-solid fa-file-video text-blue-500',\n mkv: 'fa-solid fa-file-video text-blue-500',\n wmv: 'fa-solid fa-file-video text-blue-500',\n} as const;\n\n/** Per-extension icons for audio files. */\nexport const DM_AUDIO_EXTENSION_ICONS = {\n mp3: 'fa-solid fa-file-audio text-amber-500',\n wav: 'fa-solid fa-file-audio text-amber-500',\n ogg: 'fa-solid fa-file-audio text-amber-500',\n oga: 'fa-solid fa-file-audio text-amber-500',\n m4a: 'fa-solid fa-file-audio text-amber-500',\n flac: 'fa-solid fa-file-audio text-amber-500',\n aac: 'fa-solid fa-file-audio text-amber-500',\n wma: 'fa-solid fa-file-audio text-amber-500',\n weba: 'fa-solid fa-file-audio text-amber-500',\n} as const;\n\n/** Per-extension icons for the generic `file` logical type (archives & misc). */\nexport const DM_FILE_EXTENSION_ICONS = {\n zip: 'fa-solid fa-file-zipper text-orange-500',\n rar: 'fa-solid fa-file-zipper text-orange-500',\n '7z': 'fa-solid fa-file-zipper text-orange-500',\n tar: 'fa-solid fa-file-zipper text-orange-500',\n gz: 'fa-solid fa-file-zipper text-orange-500',\n json: 'fa-solid fa-file-code text-green-500',\n xml: 'fa-solid fa-file-code text-green-500',\n csv: 'fa-solid fa-file-csv text-green-600',\n} as const;\n\n//#endregion\n\n//#region ---- Catalog builder ----\n\nfunction ext(\n name: string,\n title: string,\n icon: string,\n): AXPFileExtension {\n return { name, title, icon };\n}\n\nfunction mapToAxp(type: AXFileType, icon: string, extensions: AXPFileExtension[]): AXPFileType {\n return {\n name: type.name,\n title: type.title ?? type.name,\n icon,\n metadata: type.metadata ?? { [AX_FILE_TYPE_METADATA_PURPOSE]: ['system', 'document'] },\n extensions,\n };\n}\n\n/** Full `document` type: office / PDF extensions with DM icon shapes. */\nfunction buildDocumentType(): AXPFileType {\n return mapToAxp(AX_DOCUMENT_FILE_TYPE, DM_FILE_TYPE_ICONS.document, [\n ext('pdf', 'PDF', DM_DOCUMENT_EXTENSION_ICONS.pdf),\n ext('doc', 'Word', DM_DOCUMENT_EXTENSION_ICONS.doc),\n ext('docx', 'Word', DM_DOCUMENT_EXTENSION_ICONS.docx),\n ext('xls', 'Excel', DM_DOCUMENT_EXTENSION_ICONS.xls),\n ext('xlsx', 'Excel', DM_DOCUMENT_EXTENSION_ICONS.xlsx),\n ext('ppt', 'PowerPoint', DM_DOCUMENT_EXTENSION_ICONS.ppt),\n ext('pptx', 'PowerPoint', DM_DOCUMENT_EXTENSION_ICONS.pptx),\n ext('txt', 'Text', DM_DOCUMENT_EXTENSION_ICONS.txt),\n ext('rtf', 'Rich Text', DM_DOCUMENT_EXTENSION_ICONS.rtf),\n ]);\n}\n\n/** Generic `file` type: archives and misc — not office documents. */\nfunction buildFileType(): AXPFileType {\n return mapToAxp(AX_FILE_FILE_TYPE, DM_FILE_TYPE_ICONS.file, [\n ext('zip', 'ZIP', DM_FILE_EXTENSION_ICONS.zip),\n ext('rar', 'RAR', DM_FILE_EXTENSION_ICONS.rar),\n ext('7z', '7-Zip', DM_FILE_EXTENSION_ICONS['7z']),\n ext('tar', 'TAR', DM_FILE_EXTENSION_ICONS.tar),\n ext('gz', 'GZIP', DM_FILE_EXTENSION_ICONS.gz),\n ext('json', 'JSON', DM_FILE_EXTENSION_ICONS.json),\n ext('xml', 'XML', DM_FILE_EXTENSION_ICONS.xml),\n ext('csv', 'CSV', DM_FILE_EXTENSION_ICONS.csv),\n ]);\n}\n\nfunction buildImageType(): AXPFileType {\n const icon = DM_FILE_TYPE_ICONS.image;\n return mapToAxp(AX_IMAGE_FILE_TYPE, icon, [\n ext('jpg', 'JPEG', icon),\n ext('jpeg', 'JPEG', icon),\n ext('png', 'PNG', icon),\n ext('gif', 'GIF', icon),\n ext('webp', 'WebP', icon),\n ext('svg', 'SVG', icon),\n ]);\n}\n\nfunction buildVideoType(): AXPFileType {\n const fallback = DM_FILE_TYPE_ICONS.video;\n return mapToAxp(AX_VIDEO_FILE_TYPE, fallback, [\n ext('mp4', 'MP4', DM_VIDEO_EXTENSION_ICONS.mp4),\n ext('webm', 'WebM', DM_VIDEO_EXTENSION_ICONS.webm),\n ext('mov', 'MOV', DM_VIDEO_EXTENSION_ICONS.mov),\n ext('m4v', 'M4V', DM_VIDEO_EXTENSION_ICONS.m4v),\n ext('avi', 'AVI', DM_VIDEO_EXTENSION_ICONS.avi),\n ext('mkv', 'MKV', DM_VIDEO_EXTENSION_ICONS.mkv),\n ext('wmv', 'WMV', DM_VIDEO_EXTENSION_ICONS.wmv),\n ]);\n}\n\nfunction buildAudioType(): AXPFileType {\n const fallback = DM_FILE_TYPE_ICONS.audio;\n return mapToAxp(AX_AUDIO_FILE_TYPE, fallback, [\n ext('mp3', 'MP3', DM_AUDIO_EXTENSION_ICONS.mp3),\n ext('wav', 'WAV', DM_AUDIO_EXTENSION_ICONS.wav),\n ext('ogg', 'OGG', DM_AUDIO_EXTENSION_ICONS.ogg),\n ext('oga', 'OGA', DM_AUDIO_EXTENSION_ICONS.oga),\n ext('m4a', 'M4A', DM_AUDIO_EXTENSION_ICONS.m4a),\n ext('flac', 'FLAC', DM_AUDIO_EXTENSION_ICONS.flac),\n ext('aac', 'AAC', DM_AUDIO_EXTENSION_ICONS.aac),\n ext('wma', 'WMA', DM_AUDIO_EXTENSION_ICONS.wma),\n ext('weba', 'WebA', DM_AUDIO_EXTENSION_ICONS.weba),\n ]);\n}\n\n/**\n * Document-management file-type catalog: ACoreX built-in types reshaped with DM icons.\n * Consumed via {@link AXPFileTypeProviderService} only (no registry bridge).\n */\nexport function buildDocumentManagementFileTypeCatalog(): AXPFileType[] {\n return [\n buildDocumentType(),\n buildImageType(),\n buildAudioType(),\n buildVideoType(),\n buildFileType(),\n ];\n}\n\n//#endregion\n","import { Injectable } from '@angular/core';\n\nimport { AXPFileType, AXPFileTypeInfoProvider } from '@acorex-platform/framework-client/common';\n\nimport { buildDocumentManagementFileTypeCatalog } from './document-management-file-type.catalog';\n\n//#region ---- Document management file-type provider ----\n\n/**\n * Single catalog provider for document management.\n * Register on {@link AXP_FILE_TYPE_INFO_PROVIDER}; consumers use {@link AXPFileTypeProviderService}.\n */\n@Injectable()\nexport class AXMDocumentManagementFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return buildDocumentManagementFileTypeCatalog();\n }\n}\n\n//#endregion\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetColumnComponent extends AXPValueWidgetComponent<any> { }\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetDesignerComponent extends AXPValueWidgetComponent<any> { }\n","\nimport { AXPContextChangeEvent, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXLookupComponent, type AXLookupSelectionChangedEvent } from '@acorex/components/lookup';\nimport { AXPFileType, AXPFileTypeProviderService } from '@acorex-platform/framework-client/common';\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport get from 'lodash-es/get';\nimport isEmpty from 'lodash-es/isEmpty';\nimport isString from 'lodash-es/isString';\nimport set from 'lodash-es/set';\nimport { AXAccordionModule } from '@acorex/components/accordion';\n\n@Component({\n template: ` <div>\n <ax-lookup\n #dd\n mode=\"multi-select\"\n [dataSource]=\"dataSource\"\n valueField=\"name\"\n textField=\"title\"\n [searchable]=\"true\"\n [ngModel]=\"$safeNavigationMigration(getValue()?.selectedItems)\"\n (onValueChanged)=\"handleValueChange($event)\"\n (onSelectionChanged)=\"handleSelectionChanged($event)\"\n >\n <ax-search-box\n [autoSearch]=\"false\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearchQueryChange($event)\"\n (onValueChanged)=\"handleSearchValueChange($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </ax-lookup>\n <div class=\"py-3\"></div>\n <axp-widgets-container (onContextChanged)=\"handleOnContextChange($event)\" [context]=\"context()\">\n @if (selectedItemsNotEmpty().length > 0) {\n <ax-accordion-group>\n @for (item of selectedItemsNotEmpty(); track item.name) {\n <!-- File Types -->\n <ax-accordion-item [caption]=\"item.title\">\n <div class=\"flex flex-col gap-5\">\n @if (item.meta && item.meta.length > 0) {\n <div class=\"flex flex-col gap-2\">\n <ax-text [textContent]=\"'Global Meta Data'\" class=\"font-bold text-sm\"></ax-text>\n @for (metaFile of item.meta; track metaFile.name) {\n <!-- File Meta Data -->\n <ax-form-field>\n <ax-label [required]=\"filedIsRequired(metaFile)\">{{ metaFile.title }}</ax-label>\n <ng-container axp-widget-renderer [node]=\"getNode(metaFile)\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </div>\n }\n @if (item.extensions && item.extensions.length > 0) {\n <div class=\"flex flex-col gap-3\">\n @for (ext of item.extensions; track ext.name) {\n <!-- Extensions -->\n @if (ext.meta && ext.meta.length > 0) {\n <ax-text [textContent]=\"ext.title\" class=\"font-bold text-sm\"></ax-text>\n <div class=\"flex flex-col gap-2\">\n @for (extMeta of ext.meta; track $index) {\n <!-- Extension Meta Data -->\n <ax-form-field>\n <ax-label [required]=\"filedIsRequired(extMeta)\">{{ extMeta.title }}</ax-label>\n <ng-container\n axp-widget-renderer\n [node]=\"getNode(extMeta)\"\n [mode]=\"'edit'\"\n ></ng-container>\n </ax-form-field>\n }\n </div>\n }\n <!-- End Extension Meta Data -->\n }\n </div>\n <!-- End Extensions -->\n }\n </div>\n </ax-accordion-item>\n }\n <!-- End File Types -->\n </ax-accordion-group>\n }\n </axp-widgets-container>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXLookupComponent,\n FormsModule,\n AXFormModule,\n AXLabelModule,\n AXDecoratorModule,\n AXSearchBoxModule,\n AXPWidgetCoreModule,\n AXAccordionModule,\n ],\n inputs: [],\n})\nexport class AXMFileTypeExtensionWidgetEditComponent extends AXPValueWidgetComponent<any> {\n protected fileTypeService = inject(AXPFileTypeProviderService);\n protected searchValue = signal<string | undefined>(undefined);\n protected dataSource = new AXDataSource<unknown>({\n load: async (_) => {\n try {\n const res = await this.fileTypeService.items();\n const items = res.map((item) => ({\n name: item.name,\n title: item.title,\n icon: item.icon,\n }));\n\n const query = this.normalizeSearchQuery(this.searchValue());\n const filtered = query\n ? items.filter(\n (item) =>\n item.title.toLowerCase().includes(query) ||\n item.name.toLowerCase().includes(query),\n )\n : items;\n\n return {\n items: filtered,\n total: filtered.length,\n };\n } catch (e) {\n console.log(e);\n }\n return {\n items: [],\n total: 0,\n };\n },\n pageSize: 100,\n });\n\n public selectedItems = signal<AXPFileType[]>(this.getValue()?.selectedItems ?? []);\n public selectedItemsNotEmpty = signal<AXPFileType[]>(\n this.selectedItems().filter((item) => this.hasFields(item)),\n );\n public context = signal<any>(this.getValue()?.context ?? {});\n\n override ngOnInit() {\n super.ngOnInit();\n this.selectedItems.set(this.getValue()?.selectedItems ?? []);\n this.selectedItemsNotEmpty.set(this.selectedItems().filter((item) => this.hasFields(item)));\n this.context.set(this.getValue()?.context ?? {});\n }\n\n protected override outputs(): string[] {\n return ['selectedItems', 'context'];\n }\n\n protected handleOnContextChange(e: AXPContextChangeEvent) {\n this.context.set(e.data);\n this.setValue({ ...this.getValue(), context: e.data });\n }\n\n protected handleSearchQueryChange(value: unknown): void {\n this.applySearchQuery(value);\n }\n\n protected handleSearchValueChange(e: AXValueChangedEvent): void {\n this.applySearchQuery(e.value);\n }\n\n private applySearchQuery(value: unknown): void {\n const next = isString(value) && !isEmpty(value.trim()) ? value : undefined;\n if (this.searchValue() === next) {\n return;\n }\n\n this.searchValue.set(next);\n void this.dataSource.refresh();\n }\n\n private normalizeSearchQuery(value: unknown): string | undefined {\n if (!isString(value) || isEmpty(value.trim())) {\n return undefined;\n }\n return value.trim().toLowerCase();\n }\n\n protected async handleSelectionChanged(e: AXLookupSelectionChangedEvent) {\n const selectItems = (e.items ?? []) as Array<{\n name: string;\n title: string;\n icon?: string;\n }>;\n await this.applySelectedItems(selectItems);\n }\n\n protected async handleValueChange(_e: AXValueChangedEvent) {\n // Selection side-effects are handled in handleSelectionChanged.\n }\n\n private async applySelectedItems(\n selectItems: Array<{\n name: string;\n title: string;\n icon?: string;\n }>,\n ): Promise<void> {\n this.setValue({ ...this.getValue(), selectedItems: selectItems });\n\n const types: AXPFileType[] = [];\n for (const item of selectItems) {\n const fileType = await this.fileTypeService.get(item.name);\n if (fileType) {\n types.push(fileType);\n }\n }\n\n this.selectedItems.set(types);\n this.selectedItemsNotEmpty.set(types.filter((item) => this.hasFields(item)));\n }\n\n protected getNode(meta: any): AXPWidgetNode {\n return get(meta, '__node__');\n }\n\n protected filedIsRequired(meta: any): boolean {\n const node = get(meta, '__node__');\n if (node && node.options && node.options.validations) {\n return node.options.validations.some((validation: any) => validation.rule === 'required');\n }\n return false;\n }\n\n protected hasMetaInExtensions(extensions: any[]): boolean {\n return extensions.some((ext) => ext.meta && ext.meta.length > 0);\n }\n\n protected hasFields(item: AXPFileType): boolean {\n // Check if item has global meta fields\n if (item.meta && item.meta.length > 0) {\n return true;\n }\n\n // Check if any extension has meta fields\n if (item.extensions && item.extensions.length > 0) {\n return this.hasMetaInExtensions(item.extensions);\n }\n return false;\n }\n}\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetViewComponent extends AXPValueWidgetComponent<any> { }\n","import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_WIDGETS_ADVANCE_CATEGORY } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\n\nexport const AXmFileTypeExtensionWidget: AXPWidgetConfig = {\n name: 'file-type-extension',\n title: '@document-management:widgets.file-type-extension.title',\n description: 'Uploads and manages files',\n icon: 'fa-light fa-files',\n categories: AXP_WIDGETS_ADVANCE_CATEGORY,\n type: 'editor',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],\n components: {\n view: {\n component: () =>\n import('./file-type-extension-view.component').then((c) => c.AXMFileTypeExtensionWidgetViewComponent),\n },\n edit: {\n component: () =>\n import('./file-type-extension-edit.component').then((c) => c.AXMFileTypeExtensionWidgetEditComponent),\n },\n // filter: {\n // component: () => import('./file-type-extension-filter.component').then((c) => c.AXPFileBoxWidgetFilterComponent),\n // },\n column: {\n component: () =>\n import('./file-type-extension-column.component').then((c) => c.AXMFileTypeExtensionWidgetColumnComponent),\n },\n // print: {\n // component: () => import('./file-type-extension-print.component').then((c) => c.AXPFileBoxWidgetPrintComponent),\n // },\n designer: {\n component: () =>\n import('./file-type-extension-edit.component').then((c) => c.AXMFileTypeExtensionWidgetEditComponent),\n },\n },\n};\n\ndeclare module '@acorex-platform/framework-shared/widget-core' {\n interface AXPWidgetTypesMap {\n fileTypeExtension: 'file-type-extension';\n }\n}\n","import { AXFileModule } from '@acorex/core/file';\nimport { AXP_FILE_TYPE_INFO_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXMDocumentManagementFileTypeProvider } from './providers/document-management-file-type.provider';\n\n//#region ---- Document management file-type module ----\n\n/**\n * Registers the document-management file-type catalog on {@link AXP_FILE_TYPE_INFO_PROVIDER}.\n * {@link AXFileModule.forRoot()} keeps {@link AXFileService} / validation rules for uploads.\n */\n@NgModule({\n imports: [AXFileModule.forRoot()],\n providers: [\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMDocumentManagementFileTypeProvider,\n multi: true,\n },\n ],\n exports: [AXFileModule],\n})\nexport class AXMFileTypeModule {}\n\n//#endregion\n","\nimport { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_NAME_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\n\nexport const AXP_DOCUMENT_FILE_TYPE_FILTER_DEFAULT_OPERATOR = 'equal' as const;\n\nexport const AXmDocumentFileTypeFilterWidget: AXPWidgetConfig = {\n name: 'document-file-type-filter',\n title: '@document-management:widgets.file-type-filter.title',\n type: 'filter',\n defaultFilterOperator: AXP_DOCUMENT_FILE_TYPE_FILTER_DEFAULT_OPERATOR,\n icon: 'fa-light fa-file',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],\n components: {\n edit: {\n component: () =>\n import('./document-file-type-filter-widget-edit.component').then(\n (c) => c.AXmDocumentFileTypeFilterWidgetEditComponent,\n ),\n },\n },\n};\n\ndeclare module '@acorex-platform/framework-shared/widget-core' {\n interface AXPWidgetTypesMap {\n documentFileTypeFilter: 'document-file-type-filter';\n }\n}\n","import { AXPFileTypeProviderService } from '@acorex-platform/framework-client/common';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXDataSource, AXItemSelectedEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLookupComponent, type AXLookupItem } from '@acorex/components/lookup';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXP_DOCUMENT_FILE_TYPE_FILTER_DEFAULT_OPERATOR } from './document-file-type-filter-widget.config';\n\n//#region ----- Types -----\n\ninterface FileTypeFilterItem {\n name: string;\n title: string;\n icon?: string;\n}\n\ninterface FileTypeFilterValue {\n value?: string | null;\n operation?: { type: string };\n displayText?: string;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n template: `\n <div class=\"flex items-center w-full\">\n <ax-lookup\n #lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n textField=\"title\"\n valueField=\"name\"\n [searchable]=\"false\"\n [placeholder]=\"('@general:actions.select.title' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [ngModel]=\"value()\"\n (onItemSelected)=\"handleItemSelected($event)\"\n (onValueChanged)=\"handleValueChange($event)\"\n [itemTemplate]=\"itemTemplate\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-lookup>\n <ng-template #itemTemplate let-item>\n <div class=\"flex items-center gap-2 w-full ps-2\">\n <!-- ----- File type icon when the item defines one ----- -->\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span class=\"truncate\">{{ item.title }}</span>\n </div>\n </ng-template>\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, AXDecoratorModule, AXLookupComponent, AXTranslationModule],\n})\nexport class AXmDocumentFileTypeFilterWidgetEditComponent extends AXPValueWidgetComponent<FileTypeFilterValue> {\n //#region ----- Services & Dependencies -----\n\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- View Children -----\n\n protected lookup = viewChild<AXLookupComponent>('lookup');\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected value = computed(() => this.getValue()?.value);\n\n //#endregion\n\n //#region ----- Data Source -----\n\n private loadedItems: FileTypeFilterItem[] = [];\n\n protected readonly dataSource = new AXDataSource<FileTypeFilterItem>({\n load: async () => {\n const items = await this.loadItems();\n this.loadedItems = items;\n return { items, total: items.length };\n },\n byKey: async (id: unknown) => {\n const key = String(id ?? '');\n const cached = this.loadedItems.find((item) => item.name === key);\n if (cached) {\n return cached;\n }\n const items = await this.loadItems();\n this.loadedItems = items;\n return items.find((item) => item.name === key) ?? { name: key, title: key, icon: 'fa-light fa-file' };\n },\n pageSize: 100,\n key: 'name',\n });\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n /**\n * Lookup may skip `onValueChanged` on the first pick (`#lastValue === undefined`).\n * `onItemSelected` always fires from `handleSinglePick`.\n */\n protected handleItemSelected(e: AXItemSelectedEvent<AXLookupItem>) {\n const item = e.item;\n if (item == null) {\n return;\n }\n const text = item['title'] ?? item['text'];\n this.commitSelection(item['name'] ?? item['value'], typeof text === 'string' ? text : undefined);\n }\n\n protected handleValueChange(e: AXValueChangedEvent) {\n this.commitSelection(e.value);\n }\n\n focus(): void {\n this.lookup()?.focus();\n }\n\n //#endregion\n\n //#region ----- Value Pipeline -----\n\n private async loadItems(): Promise<FileTypeFilterItem[]> {\n const allTitle = await this.translateService.translateAsync('@document-management:drive.filters.file-types.all');\n const types = await this.fileTypeService.items();\n return [\n { name: 'all', title: allTitle, icon: 'fa-light fa-folder-closed' },\n ...types.map((type) => ({ name: type.name, title: type.title, icon: type.icon || 'fa-light fa-file' })),\n ];\n }\n\n private commitSelection(value: unknown, displayText?: string): void {\n const resolved = this.resolveFileTypeValue(value);\n const text =\n displayText ??\n (typeof resolved === 'string' ? this.loadedItems.find((item) => item.name === resolved)?.title : undefined);\n\n this.setValue({\n operation: { type: AXP_DOCUMENT_FILE_TYPE_FILTER_DEFAULT_OPERATOR },\n value: resolved,\n ...(text ? { displayText: text } : {}),\n });\n }\n\n private resolveFileTypeValue(value: unknown): string | null {\n if (value == null || value === '') {\n return null;\n }\n if (typeof value === 'object' && 'name' in (value as Record<string, unknown>)) {\n const name = (value as { name: unknown }).name;\n return name == null || name === '' ? null : String(name);\n }\n return String(value);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXmFileTypeExtensionWidget } from './features/file-type';\nimport { AXmDocumentFileTypeFilterWidget } from './features/drive/widgets/file-type-filter';\n//#endregion\n\n//#region ---- Document Management Widgets Provider ----\n\nconst DOCUMENT_WIDGETS = [AXmFileTypeExtensionWidget, AXmDocumentFileTypeFilterWidget];\n\n@Injectable()\nexport class AXMDocumentManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return DOCUMENT_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPStatusDefinition,\n AXPStatusProvider,\n AXPStatusTransition,\n AXPSystemStatusType,\n systemStatusToDefinition,\n} from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const AXM_DOCUMENT_EXPIRATION_STATUS_DEFINITION_KEY =\n 'document-management.status.document-expiration';\n\nexport const AXM_DOCUMENT_EXPIRATION_STATUS = {\n near: 'near',\n expired: AXPSystemStatusType.Expired,\n} as const;\n\n//#endregion\n\n//#region ----- Status provider -----\n\n/**\n * Near / expired chips for document expiration reports (read-only; no transitions).\n */\nexport class AXMDocumentExpirationStatusProvider extends AXPStatusProvider {\n readonly key = AXM_DOCUMENT_EXPIRATION_STATUS_DEFINITION_KEY;\n\n readonly defaultStatus = AXM_DOCUMENT_EXPIRATION_STATUS.near;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXM_DOCUMENT_EXPIRATION_STATUS.near,\n title: '@document-management:terms.document.expiration-badge.expiring-soon',\n icon: 'fa-light fa-hourglass-half',\n color: 'warning',\n order: 1,\n isInitial: true,\n isFinal: false,\n generateView: false,\n },\n systemStatusToDefinition(AXPSystemStatusType.Expired, {\n title: '@document-management:terms.document.expiration-badge.expired',\n generateView: false,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [];\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXM_DOCUMENT_EXPIRATION_NEAR_DAYS,\n getDocumentExpirationRemainingDays,\n toDocumentExpirationDate,\n} from '@acorex-platform/module-document-management-client/contracts';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type AXMDocumentExpirationBadgeStatus = 'expired' | 'expiring-soon';\n\nexport type AXMDocumentExpirationBadge = {\n status: AXMDocumentExpirationBadgeStatus;\n /** ax-badge color token */\n color: 'danger' | 'warning';\n textKey: string;\n tooltipKey: string;\n date: Date;\n};\n\nexport type AXMFolderExpirationCountBadge = {\n status: AXMDocumentExpirationBadgeStatus;\n color: 'danger' | 'warning';\n tooltipKey: string;\n count: number;\n};\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport { AXM_DOCUMENT_EXPIRATION_NEAR_DAYS, toDocumentExpirationDate };\n\nconst I18N_PREFIX = '@document-management:terms.document.expiration-badge';\nconst FOLDER_I18N_PREFIX = '@document-management:terms.document.folder-expiration-badge';\n\n//#endregion\n\n//#region ----- Public API -----\n\n/**\n * Badge from document `expirationDate` only (platform field when enableExpiration is on).\n */\nexport function resolveDocumentExpirationBadge(\n source: { expirationDate?: Date | string | number | null },\n options?: { nearDays?: number; now?: Date },\n): AXMDocumentExpirationBadge | null {\n const date = toDocumentExpirationDate(source.expirationDate);\n if (!date) {\n return null;\n }\n\n const now = options?.now ?? new Date();\n const nearDays = options?.nearDays ?? AXM_DOCUMENT_EXPIRATION_NEAR_DAYS;\n const remainingDays = getDocumentExpirationRemainingDays(date, now);\n\n if (remainingDays < 0) {\n return {\n status: 'expired',\n color: 'danger',\n textKey: `${I18N_PREFIX}.expired`,\n tooltipKey: `${I18N_PREFIX}.expired-tooltip`,\n date,\n };\n }\n\n if (remainingDays <= nearDays) {\n return {\n status: 'expiring-soon',\n color: 'warning',\n textKey: `${I18N_PREFIX}.expiring-soon`,\n tooltipKey: `${I18N_PREFIX}.expiring-soon-tooltip`,\n date,\n };\n }\n\n return null;\n}\n\n/**\n * Folder badges from denormalized subtree `expiredItemsCount` / `nearExpiryItemsCount`\n * (direct documents in the folder + nested folder aggregates).\n */\nexport function resolveFolderExpirationCountBadges(source: {\n expiredItemsCount?: number | null;\n nearExpiryItemsCount?: number | null;\n}): AXMFolderExpirationCountBadge[] {\n const badges: AXMFolderExpirationCountBadge[] = [];\n const expired = Number(source.expiredItemsCount ?? 0);\n const near = Number(source.nearExpiryItemsCount ?? 0);\n\n if (expired > 0) {\n badges.push({\n status: 'expired',\n color: 'danger',\n count: expired,\n tooltipKey: `${FOLDER_I18N_PREFIX}.expired-tooltip`,\n });\n }\n if (near > 0) {\n badges.push({\n status: 'expiring-soon',\n color: 'warning',\n count: near,\n tooltipKey: `${FOLDER_I18N_PREFIX}.expiring-soon-tooltip`,\n });\n }\n return badges;\n}\n\n//#endregion\n","import { AXPFileListItem } from '@acorex-platform/framework-shared/core';\n\nimport { unset } from 'lodash';\nimport { AXMDocumentDto } from '@acorex-platform/module-document-management-client/contracts';\n\n/** Storage id from a document `fileInfo` object or `file:` reference. */\nexport function resolveDocumentStorageFileId(fileInfo: unknown): string | undefined {\n if (!fileInfo) {\n return undefined;\n }\n if (typeof fileInfo === 'string') {\n return fileInfo.startsWith('file:') ? fileInfo.slice(5) : fileInfo;\n }\n const item = fileInfo as AXPFileListItem;\n if (item.source?.kind === 'fileId' && typeof item.source.value === 'string') {\n const storedId = item.source.value.replace(/^file:/, '').trim();\n return storedId || undefined;\n }\n // Blob, URL, and reference items are not file-storage records. Seeded documents use\n // `source.kind === 'url'` with a mock row `id` — that id must not be sent to storage.\n if (\n item.source?.kind === 'blob' ||\n item.source?.kind === 'url' ||\n item.source?.kind === 'preview' ||\n item.source?.kind === 'reference' ||\n item.source?.kind === 'none'\n ) {\n return undefined;\n }\n if (typeof item.id === 'string' && item.id.trim() !== '') {\n return item.id.replace(/^file:/, '');\n }\n return undefined;\n}\n\n/**\n * Resolves demo / seeded asset URLs to the current app origin.\n * Handles relative `/assets/...` paths and legacy absolute URLs baked in at seed time (e.g. localhost:4200).\n */\nexport function resolveClientAssetUrl(url: string): string {\n const trimmed = url?.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n if (trimmed.startsWith('/assets/')) {\n if (typeof globalThis !== 'undefined' && 'location' in globalThis) {\n const origin = (globalThis as { location?: { origin?: string } }).location?.origin;\n if (origin) {\n return `${origin}${trimmed}`;\n }\n }\n return trimmed;\n }\n\n try {\n const base =\n typeof globalThis !== 'undefined' && 'location' in globalThis\n ? (globalThis as { location: { origin: string } }).location.origin\n : undefined;\n const parsed = new URL(trimmed, base ?? 'http://localhost');\n if (!parsed.pathname.startsWith('/assets/')) {\n return trimmed;\n }\n if (base && parsed.origin !== base) {\n return `${base}${parsed.pathname}${parsed.search}${parsed.hash}`;\n }\n } catch {\n return trimmed;\n }\n\n return trimmed;\n}\n\nexport function documentDtoToFileItem(doc: AXMDocumentDto): AXPFileListItem {\n const fileInfo = doc.fileInfo;\n unset(doc, 'fileInfo');\n return { ...fileInfo, meta: doc };\n}\n\nexport function fileItemToDocumentDto(item: AXPFileListItem): AXMDocumentDto {\n const meta = item.meta;\n unset(item, 'meta');\n return { ...meta, fileInfo: item } as AXMDocumentDto;\n}\n","//#region ----- Constants -----\n\n/**\n * Default folder icon color (Tailwind `yellow-400`).\n * Used when color is missing, empty, or the legacy seed value `#FFFFFF`.\n */\nexport const AXM_DEFAULT_FOLDER_COLOR = '#FACC15';\n\n//#endregion\n\n//#region ----- Helpers -----\n\n/**\n * Resolves the folder accent color for UI / create-update defaults.\n * Legacy `#FFF` / `#FFFFFF` values map to the standard yellow folder color.\n */\nexport function resolveFolderColor(color?: unknown): string {\n const trimmed = typeof color === 'string' ? color.trim() : '';\n if (!trimmed) {\n return AXM_DEFAULT_FOLDER_COLOR;\n }\n const normalized = trimmed.toUpperCase();\n if (normalized === '#FFF' || normalized === '#FFFFFF') {\n return AXM_DEFAULT_FOLDER_COLOR;\n }\n return trimmed;\n}\n\n/**\n * Converts a hex color (`#RGB` / `#RRGGBB`) to `r, g, b` channels for CSS\n * `rgb(var(--token))` / `rgba(var(--token))` consumers (e.g. side detail panel).\n */\nexport function folderColorToRgbChannels(color?: unknown): string {\n const hex = resolveFolderColor(color).replace('#', '');\n const full = hex.length === 3 ? hex.split('').map((c) => c + c).join('') : hex;\n if (full.length !== 6 || Number.isNaN(Number.parseInt(full, 16))) {\n return '250, 204, 21';\n }\n const r = Number.parseInt(full.slice(0, 2), 16);\n const g = Number.parseInt(full.slice(2, 4), 16);\n const b = Number.parseInt(full.slice(4, 6), 16);\n return `${r}, ${g}, ${b}`;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n filterMetaDataListByAppliesTo,\n hasMetaDataListFields,\n mergeMetaDataLists,\n type AXMMetaDataBuilderValue,\n} from '@acorex-platform/module-data-management-client/contracts';\nimport { documentReviewReadonlyFieldNames } from '@acorex-platform/module-document-management-client/contracts';\n\nexport { mergeMetaDataLists };\n\n//#endregion\n\n//#region ----- Schema helpers -----\n\nexport function toEditableMetaDataList(\n list: AXMMetaDataBuilderValue | null | undefined,\n readonlyFieldNames: readonly string[] = [],\n): AXMMetaDataBuilderValue {\n const readonly = new Set(readonlyFieldNames);\n return {\n groups: (list?.groups ?? []).map((group) => ({\n ...group,\n fields: (group.fields ?? []).map((field) => ({\n ...field,\n mode: readonly.has(String(field.name ?? '')) ? 'view' : 'edit',\n })),\n })),\n };\n}\n\nexport function reviewReadonlyFieldNames(canManageReview: boolean): readonly string[] {\n return documentReviewReadonlyFieldNames(canManageReview);\n}\n\nexport function toViewMetaDataList(\n list: AXMMetaDataBuilderValue | null | undefined,\n): AXMMetaDataBuilderValue {\n return {\n groups: (list?.groups ?? []).map((group) => ({\n ...group,\n fields: (group.fields ?? []).map((field) => ({\n ...field,\n mode: 'view',\n })),\n })),\n };\n}\n\nexport function collectFolderScopedMetaDataList(\n documentTypes: Array<{ metaDataList?: AXMMetaDataBuilderValue | null } | null | undefined>,\n): AXMMetaDataBuilderValue {\n return mergeMetaDataLists(\n documentTypes.map((documentType) => filterMetaDataListByAppliesTo(documentType?.metaDataList, 'folder')),\n );\n}\n\nexport function collectDocumentScopedMetaDataList(\n list: AXMMetaDataBuilderValue | null | undefined,\n): AXMMetaDataBuilderValue {\n return filterMetaDataListByAppliesTo(list, 'document');\n}\n\nexport function documentTypeHasFolderMetadata(\n documentTypes: Array<{ metaDataList?: AXMMetaDataBuilderValue | null } | null | undefined>,\n): boolean {\n return hasMetaDataListFields(collectFolderScopedMetaDataList(documentTypes));\n}\n\nexport function pickMetaDataFormValues(\n form: Record<string, unknown> | null | undefined,\n schema: AXMMetaDataBuilderValue | null | undefined,\n): Record<string, unknown> {\n const names = new Set(\n (schema?.groups ?? []).flatMap((group) =>\n (group.fields ?? []).map((field) => String(field?.name ?? '').trim()).filter(Boolean),\n ),\n );\n const source = form ?? {};\n const picked: Record<string, unknown> = {};\n for (const name of names) {\n if (name in source) {\n picked[name] = source[name];\n }\n }\n return picked;\n}\n\n//#endregion\n","import type { AXFileService } from '@acorex/core/file';\nimport { resolveFileChooserExtension } from '@acorex-platform/framework-client/layout/components';\nimport { extractDocumentTypeFileKindNames } from '@acorex-platform/module-document-management-client/contracts';\n\n//#region ---- Document type accept helpers ----\n\n/**\n * Extracts logical file type names from a document type's `type` field.\n * Supports name arrays, select option rows, and legacy `{ selectedItems, context }`.\n */\nexport function buildFileTypeNamesFromDocumentType(documentType: unknown): string[] {\n return extractDocumentTypeFileKindNames(documentType);\n}\n\n/**\n * Legacy extension-based accept string (fallback when file type catalog is unavailable).\n */\nexport function buildAcceptFromDocumentTypeExtensions(documentType: unknown): string {\n const extensions = Array.from(\n new Set(\n buildFileTypeNamesFromDocumentType(documentType)\n .map((name) => {\n const ext = resolveFileChooserExtension(name);\n return ext ? `.${ext}` : '';\n })\n .filter(Boolean),\n ),\n );\n return extensions.join(',');\n}\n\n/**\n * Builds HTML accept and logical file types from a document type using the ACoreX file catalog.\n */\nexport async function buildFileChooserOptionsFromDocumentType(\n documentType: unknown,\n fileService: AXFileService,\n): Promise<{ accept: string; fileType: string[] }> {\n const fileType = buildFileTypeNamesFromDocumentType(documentType);\n if (fileType.length) {\n const accept = await fileService.getAcceptAttribute(fileType);\n return { accept, fileType };\n }\n return { accept: buildAcceptFromDocumentTypeExtensions(documentType), fileType: [] };\n}\n\n/** @deprecated Use {@link buildFileChooserOptionsFromDocumentType} for catalog-backed accept. */\nexport function buildAcceptFromDocumentType(documentType: unknown): string {\n return buildAcceptFromDocumentTypeExtensions(documentType);\n}\n\n//#endregion\n","//#region ----- Document user-field helpers -----\n\nexport function attachedFileDefaultTitle(file: { title?: unknown; name?: unknown } | undefined): string {\n const title = typeof file?.title === 'string' ? file.title.trim() : '';\n if (title) {\n return title;\n }\n const name = typeof file?.name === 'string' ? file.name.trim() : '';\n if (!name) {\n return '';\n }\n const lastDot = name.lastIndexOf('.');\n return lastDot > 0 ? name.slice(0, lastDot) : name;\n}\n\nexport function asOptionalTrimmedString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\n/** Builds a stored file name from a document title, keeping the original extension. */\nexport function fileNameFromTitle(title: string, originalFileName?: string): string {\n const trimmed = title.trim();\n if (!trimmed) {\n return originalFileName?.trim() || '';\n }\n const lastDot = originalFileName?.lastIndexOf('.') ?? -1;\n const extension =\n originalFileName && lastDot > 0 ? originalFileName.slice(lastDot) : '';\n if (!extension) {\n return trimmed;\n }\n if (trimmed.toLowerCase().endsWith(extension.toLowerCase())) {\n return trimmed;\n }\n return `${trimmed}${extension}`;\n}\n\n/** Copies document title onto the related file name, keeping the original extension. */\nexport function fileInfoWithTitle<T extends { name?: string; title?: unknown }>(\n file: T | undefined,\n title: string,\n): { name: string; file?: T } {\n const name = fileNameFromTitle(title, file?.name);\n if (!file) {\n return { name };\n }\n return { name, file: { ...file, name, title } };\n}\n\n//#endregion\n","import { Injectable, inject } from '@angular/core';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPLayoutBuilderService, IWidgetBuilder } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPContextData } from '@acorex-platform/framework-shared/core';\nimport {\n AXPFileStorageService,\n extractRequestErrorInfo,\n platformErrorI18nKey,\n} from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPContentDocumentsPermissionKeys,\n RootConfig,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXMDocumentDto, AXMDocumentVersionDto } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXP_VERSIONING_ERROR_I18N } from '@acorex-platform/module-common-client/contracts';\nimport { buildFileChooserOptionsFromDocumentType } from '../document-type-accept.util';\nimport { resolveDocumentStorageFileId } from '../document-file.util';\nimport { asOptionalTrimmedString, attachedFileDefaultTitle, fileInfoWithTitle } from './document-user-fields.util';\nimport {\n collectDocumentScopedMetaDataList,\n reviewReadonlyFieldNames,\n toEditableMetaDataList,\n} from '../folder-metadata.util';\n\n//#region ----- Helpers -----\n\nfunction isTruthyFlag(value: unknown): boolean {\n return value === true || value === 'true' || value === 1 || value === '1';\n}\n\nfunction initialDocumentLifecycleStatus(documentType: { requiresReview?: unknown } | undefined): {\n statusId: 'draft' | 'approved';\n status: { id: 'draft' | 'approved'; title: string };\n} {\n if (isTruthyFlag(documentType?.requiresReview)) {\n return {\n statusId: 'draft',\n status: { id: 'draft', title: '@general:statuses.draft.title' },\n };\n }\n return {\n statusId: 'approved',\n status: { id: 'approved', title: '@general:statuses.approved.title' },\n };\n}\n\nfunction folderParentId(parentId: unknown): string | undefined {\n if (typeof parentId !== 'string') {\n return undefined;\n }\n const trimmed = parentId.trim();\n return trimmed && trimmed !== 'virtual' ? trimmed : undefined;\n}\n\n//#endregion\n\n//#region ---- Document dialog service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDocumentDialogService {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly translateService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly entityService = inject(AXPEntityService);\n private readonly fileService = inject(AXFileService);\n private readonly fileStorageService = inject(AXPFileStorageService);\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n private readonly documentVersionData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentVersion.name)\n .data<string, AXMDocumentVersionDto, AXMDocumentVersionDto>();\n private readonly documentTypeService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentType.name).data<any, any>();\n\n //#endregion\n\n //#region ---- Public API ----\n\n async openAttachmentDialog(\n title: string,\n data: any,\n ): Promise<{ data?: { cancel?: boolean; isReviewSent?: boolean; fileIds?: string[] } }> {\n const {\n documentType,\n files,\n parentId,\n metaData,\n documentId,\n versionDraftId,\n showMeta = true,\n existingTitle,\n existingDescription,\n existingExpirationDate,\n replaceFile = false,\n skipMetadataAiFill = false,\n } = data ?? {};\n\n const { accept } = await buildFileChooserOptionsFromDocumentType(documentType, this.fileService);\n\n const fileList: any[] = Array.isArray(files) ? files : [];\n\n const enableExpiration = !!(documentType as { enableExpiration?: boolean })?.enableExpiration;\n\n const reviewReadonly = this.reviewReadonlyNames();\n const editableMetaDataList = toEditableMetaDataList(\n collectDocumentScopedMetaDataList(documentType?.metaDataList),\n reviewReadonly,\n );\n\n const hasMetaFields = (editableMetaDataList.groups ?? []).some((g) => (g.fields?.length ?? 0) > 0);\n\n const initialContext: Record<string, unknown> = {};\n fileList.forEach((item, index) => {\n const fileMeta = showMeta ? metaData : undefined;\n initialContext[`file-${index}`] = {\n title: asOptionalTrimmedString(existingTitle) ?? attachedFileDefaultTitle(item),\n description: asOptionalTrimmedString(existingDescription) ?? '',\n ...(showMeta ? { metaDataForm: fileMeta } : {}),\n ...(enableExpiration\n ? {\n expirationDate:\n existingExpirationDate ??\n (fileMeta as { expirationDate?: unknown } | undefined)?.expirationDate,\n }\n : {}),\n };\n });\n if (fileList.length === 0) {\n initialContext['file-0'] = {\n title: asOptionalTrimmedString(existingTitle) ?? '',\n description: asOptionalTrimmedString(existingDescription) ?? '',\n ...(showMeta ? { metaDataForm: metaData } : {}),\n };\n }\n initialContext['files'] = fileList.map((item) => ({ file: [item] }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ data?: { cancel?: boolean; isReviewSent?: boolean; fileIds?: string[] } }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setOptions({\n metadata: {\n showMeta: !!showMeta,\n hasMetaFields,\n parentId: parentId ?? '',\n documentType,\n skipMetadataAiFill: skipMetadataAiFill === true,\n },\n })\n .setContext(initialContext)\n .content((flex) => {\n flex.setDirection('column');\n\n for (let index = 0; index < fileList.length; index++) {\n const item = fileList[index];\n flex.formField('@general:terms.common.title', (field) => {\n field.path(`file-${index}.title`);\n field.textBox({ validations: [{ rule: 'required' }] });\n });\n flex.formField('@general:terms.common.description', (field) => {\n field.path(`file-${index}.description`);\n field.textBox({});\n });\n if (enableExpiration) {\n flex.formField('@document-management:terms.document.expire-date', (field) => {\n field.path(`file-${index}.expirationDate`);\n field.dateTimeBox({});\n });\n }\n if (showMeta && hasMetaFields) {\n flex.customWidget('meta-data-form-editor', (widget: IWidgetBuilder) => {\n widget.path(`file-${index}.metaDataForm`);\n widget.options({ ...editableMetaDataList, readonlyFieldNames: reviewReadonly });\n });\n }\n flex.formField('@document-management:terms.common.file', (field) => {\n field.path(`files[${index}].file`);\n field.customWidget('attachments', {\n defaultValue: [item],\n fileEditable: false,\n readonly: true,\n accept,\n });\n });\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.submit.title');\n })\n .setCloseButton(true)\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return { data: { cancel: true } };\n }\n const ctx = dialogRef.context() as AXPContextData & { files: any[] };\n if (documentId) {\n dialogRef.setLoading(true);\n try {\n const userFields = this.readUserDocumentFields(ctx, 0, {\n showMeta,\n enableExpiration,\n });\n const sourceFile = fileList[0];\n const synced = fileInfoWithTitle(sourceFile, userFields.title);\n if (replaceFile) {\n await this.syncStoredFileName(sourceFile, synced.name);\n }\n\n const identity: Partial<AXMDocumentDto & AXMDocumentVersionDto> = {\n title: userFields.title,\n name: synced.name,\n };\n const content: Partial<AXMDocumentDto & AXMDocumentVersionDto> = {\n description: userFields.description,\n ...(userFields.metaDataForm ? { metaDataForm: userFields.metaDataForm } : {}),\n ...(enableExpiration\n ? {\n expirationDate: (userFields.expirationDate ??\n null) as AXMDocumentDto['expirationDate'],\n }\n : {}),\n ...(replaceFile && synced.file\n ? { fileInfo: synced.file, name: synced.name }\n : {}),\n };\n\n if (versionDraftId) {\n await this.documentVersionData.update(String(versionDraftId), {\n ...identity,\n ...content,\n });\n await this.documentData.update(documentId, identity);\n } else {\n await this.documentData.update(documentId, { ...identity, ...content });\n }\n return {\n data: {\n cancel: false,\n fileIds: [documentId],\n },\n };\n } catch (error) {\n await this.notifyAttachFailed(error);\n throw error;\n } finally {\n dialogRef.setLoading(false);\n }\n }\n dialogRef.setLoading(true);\n try {\n const promises = (ctx?.['files'] as any[]).map<Promise<string>>(async (_item: any, index: number) => {\n const f = fileList[index];\n const userFields = this.readUserDocumentFields(ctx, index, {\n showMeta,\n enableExpiration,\n });\n const synced = fileInfoWithTitle(f, userFields.title);\n await this.syncStoredFileName(f, synced.name);\n const newId = await this.documentData.create({\n fileInfo: synced.file ?? f,\n name: synced.name,\n title: userFields.title,\n description: userFields.description,\n documentType,\n parentId: folderParentId(parentId) ?? parentId,\n ...initialDocumentLifecycleStatus(documentType),\n versioningEnabled: isTruthyFlag(documentType?.enableVersioning),\n distributionEnabled: isTruthyFlag(documentType?.enableDistributionCapability),\n ...(userFields.metaDataForm ? { metaDataForm: userFields.metaDataForm } : {}),\n ...(enableExpiration && userFields.expirationDate != null\n ? { expirationDate: userFields.expirationDate }\n : {}),\n });\n return newId;\n });\n const fileIds = await Promise.all(promises);\n return {\n data: {\n cancel: false,\n fileIds,\n },\n };\n } catch (error) {\n await this.notifyAttachFailed(error);\n throw error;\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n return result;\n }\n\n async openAttachmentDialogWithoutSave(\n title: string,\n data: any,\n ): Promise<{ data?: { cancel?: boolean; files?: any[] } }> {\n const { documentType, files, parentId, metaData, showMeta = true } = data ?? {};\n\n const { accept } = await buildFileChooserOptionsFromDocumentType(documentType, this.fileService);\n\n const fileList: any[] = Array.isArray(files) ? files : [];\n\n const enableExpiration = !!(documentType as { enableExpiration?: boolean })?.enableExpiration;\n\n /** Get metaDataForm from a file item (widget may store under meta or metaDataForm). */\n const getFileMeta = (item: any) =>\n item?.metaDataForm ?? (item?.meta && typeof item.meta === 'object' && !Array.isArray(item.meta) ? item.meta : undefined);\n\n const reviewReadonly = this.reviewReadonlyNames();\n const editableMetaDataList = toEditableMetaDataList(\n collectDocumentScopedMetaDataList(documentType?.metaDataList),\n reviewReadonly,\n );\n const hasMetaFields = (editableMetaDataList.groups ?? []).some((g) => (g.fields?.length ?? 0) > 0);\n\n const initialContext: Record<string, unknown> = {};\n fileList.forEach((item, index) => {\n const fileMeta = getFileMeta(item) ?? metaData;\n initialContext[`file-${index}`] = {\n title: attachedFileDefaultTitle(item),\n description: asOptionalTrimmedString(item?.description) ?? '',\n ...(showMeta ? { metaDataForm: fileMeta } : {}),\n ...(enableExpiration\n ? { expirationDate: (fileMeta as { expirationDate?: unknown } | undefined)?.expirationDate }\n : {}),\n };\n });\n if (fileList.length === 0) {\n initialContext['file-0'] = {\n title: '',\n description: '',\n ...(showMeta ? { metaDataForm: metaData } : {}),\n };\n }\n initialContext['files'] = fileList.map((item) => ({ file: [item] }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ data?: { cancel?: boolean; files?: any[] } }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setOptions({\n metadata: {\n showMeta: !!showMeta,\n hasMetaFields,\n parentId: parentId ?? '',\n documentType,\n },\n })\n .setContext(initialContext)\n .content((flex) => {\n flex.setDirection('column');\n\n for (let index = 0; index < fileList.length; index++) {\n const item = fileList[index];\n flex.formField('@general:terms.common.title', (field) => {\n field.path(`file-${index}.title`);\n field.textBox({ validations: [{ rule: 'required' }] });\n });\n flex.formField('@general:terms.common.description', (field) => {\n field.path(`file-${index}.description`);\n field.textBox({});\n });\n if (enableExpiration) {\n flex.formField('@document-management:terms.document.expire-date', (field) => {\n field.path(`file-${index}.expirationDate`);\n field.dateTimeBox({});\n });\n }\n if (showMeta && hasMetaFields) {\n flex.customWidget('meta-data-form-editor', (widget: IWidgetBuilder) => {\n widget.path(`file-${index}.metaDataForm`);\n widget.options({ ...editableMetaDataList, readonlyFieldNames: reviewReadonly });\n });\n }\n flex.formField('@document-management:terms.common.file', (field) => {\n field.path(`files[${index}].file`);\n field.customWidget('attachments', {\n defaultValue: [item],\n fileEditable: false,\n readonly: true,\n accept,\n });\n });\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.submit.title');\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return {\n data: {\n cancel: true,\n },\n };\n }\n const ctx = dialogRef.context() as AXPContextData & { files: any[] };\n const outFiles = (ctx?.['files'] as any[]).map((item: any, index: number) => {\n const userFields = this.readUserDocumentFields(ctx, index, {\n showMeta,\n enableExpiration,\n });\n const sourceFile = Array.isArray(item?.file) ? item.file[0] : fileList[index];\n const synced = fileInfoWithTitle(sourceFile, userFields.title);\n return {\n ...item,\n name: synced.name,\n title: userFields.title,\n description: userFields.description,\n ...(synced.file ? { file: [synced.file] } : {}),\n ...(showMeta ? { metaDataForm: userFields.metaDataForm } : {}),\n ...(enableExpiration ? { expirationDate: userFields.expirationDate } : {}),\n };\n });\n return { data: { cancel: false, files: outFiles } };\n });\n })\n .show();\n return result;\n }\n\n async chooseDocumentType(): Promise<{ cancelled: boolean; documentTypeId?: string }> {\n const res = await this.documentTypeService.query({ skip: 0, take: 100 });\n const items = (res?.items ?? []).map((x: any) => ({\n value: x.id,\n text: this.translateService.resolve(x.title ?? x.name ?? x.id),\n }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ cancelled: boolean; documentTypeId?: string }>((dialog) => {\n dialog\n .setTitle('@document-management:dialogs.choose-document-type.title')\n .setContext({ documentTypeId: undefined })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@document-management:dialogs.choose-document-type.label', (field) => {\n field.path('documentTypeId');\n field.selectionList({ valueField: 'value', textField: 'text', dataSource: items });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.submit.title');\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return { cancelled: true };\n }\n const ctx = dialogRef.context() as any;\n return { cancelled: false, documentTypeId: ctx?.documentTypeId };\n });\n })\n .show();\n\n return result;\n }\n\n //#endregion\n\n //#region ---- Private helpers ----\n\n private async syncStoredFileName(file: unknown, nextName: string): Promise<void> {\n const storageId = resolveDocumentStorageFileId(file);\n const currentName =\n file && typeof file === 'object' && typeof (file as { name?: unknown }).name === 'string'\n ? (file as { name: string }).name.trim()\n : '';\n if (!storageId || !nextName || nextName === currentName) {\n return;\n }\n try {\n await this.fileStorageService.update({\n fileId: storageId,\n name: nextName,\n metadata: {},\n });\n } catch {\n // Blob uploads persist the title-based name on save; do not fail attach if rename misses.\n }\n }\n\n private readUserDocumentFields(\n context: Record<string, unknown>,\n fileIndex: number,\n options: { showMeta: boolean; enableExpiration: boolean },\n ): {\n title: string;\n description?: string;\n metaDataForm?: Record<string, unknown>;\n expirationDate?: Date | string | null;\n } {\n const bag = (context[`file-${fileIndex}`] ?? {}) as Record<string, unknown>;\n const title = asOptionalTrimmedString(bag['title']) ?? '';\n const description = asOptionalTrimmedString(bag['description']);\n const meta = options.showMeta ? (bag['metaDataForm'] as Record<string, unknown> | undefined) : undefined;\n const expirationDate = options.enableExpiration\n ? ((bag['expirationDate'] as Date | string | null | undefined) ?? null)\n : undefined;\n return { title, description, metaDataForm: meta, expirationDate };\n }\n\n private reviewReadonlyNames(): readonly string[] {\n return reviewReadonlyFieldNames(\n this.sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview),\n );\n }\n\n private async notifyAttachFailed(error: unknown): Promise<void> {\n const info = extractRequestErrorInfo(error);\n const contentKey =\n (info?.code ? AXP_VERSIONING_ERROR_I18N[info.code] : undefined) ??\n platformErrorI18nKey(info?.code) ??\n '@document-management:dialogs.attach-file.messages.upload-failed';\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n const content = await this.translateService.translateAsync(contentKey);\n this.toastService.show({ color: 'danger', title, content });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPDataGenerator, AXPFileListItem, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPFileChooserContext, AXPFileChooserService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport {\n AXMDocumentDocDto,\n AXMDocumentDto,\n AXMDocumentManagementDocumentTypeEntityModel,\n AXMDocumentVersionDto,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPVersioningField, AXPVersioningStatus } from '@acorex-platform/module-common-client/contracts';\nimport { buildFileChooserOptionsFromDocumentType } from '../document-type-accept.util';\nimport { AXMDocumentDialogService } from './document-dialog.service';\n\ninterface AttachmentOptions {\n multiple?: boolean;\n folderId?: string;\n entityId?: string;\n entityRecordId?: string;\n scope?: AXPPlatformScope;\n}\n\ninterface UpdateAttachmentOptions {\n entityId?: string;\n entityRecordId?: string;\n folderId?: string;\n scope?: AXPPlatformScope;\n}\n\ninterface PopupResult {\n data?: {\n cancel?: boolean;\n fileIds?: string[];\n };\n}\n\nfunction cloneDocumentFileInfo<T>(fileInfo: T): T {\n if (!fileInfo || typeof fileInfo !== 'object') {\n return fileInfo;\n }\n return { ...(fileInfo as Record<string, unknown>) } as T;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentAttachmentsService {\n private readonly fileChooserService = inject(AXPFileChooserService);\n private readonly fileService = inject(AXFileService);\n private readonly entityService = inject(AXPEntityService);\n private readonly documentTypeService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentType.name).data<any, any>();\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n private readonly documentDialog = inject(AXMDocumentDialogService);\n private readonly translateService = inject(AXTranslationService);\n private readonly documentVersionData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentVersion.name)\n .data<string, AXMDocumentVersionDto, AXMDocumentVersionDto>();\n\n async attachFile(\n fileType: string | AXMDocumentDocDto,\n options?: AttachmentOptions,\n ): Promise<boolean> {\n // Validate input data\n this.validateAttachmentOptions(options);\n\n const fileTypeEntity = await this.resolveFileType(fileType);\n const files = await this.chooseFileListItems(fileTypeEntity, options);\n\n if (files.length === 0) {\n return false;\n }\n\n const popupData = {\n documentType: fileTypeEntity,\n files,\n parentId: options?.folderId ?? '',\n };\n\n const title = await this.translateService.translateAsync('@document-management:dialogs.attach-file.title', {\n params: { title: this.translateService.resolve(fileTypeEntity.title) },\n });\n const result = await this.documentDialog.openAttachmentDialog(\n title,\n popupData,\n );\n\n return this.handlePopupResult(result);\n }\n\n async updateAttachedFile(fileId: string, options?: UpdateAttachmentOptions): Promise<boolean> {\n const file = await this.documentData.byKey(fileId);\n if (!file) {\n throw new Error('File not found');\n }\n\n const documentTypeEntity = await this.resolveFileType(file.documentType);\n\n const popupData = {\n documentType: documentTypeEntity,\n files: [cloneDocumentFileInfo(file.fileInfo)],\n parentId: options?.folderId ?? '',\n metaData: file.metaDataForm,\n documentId: fileId,\n existingTitle: file.title,\n existingDescription: file.description,\n existingExpirationDate: file.expirationDate,\n };\n\n const editTitle = await this.translateService.translateAsync(\n '@document-management:dialogs.attach-file.edit-title',\n { params: { title: file.title || file.name } },\n );\n const result = await this.documentDialog.openAttachmentDialog(editTitle, {\n ...popupData,\n skipMetadataAiFill: true,\n });\n\n return this.handlePopupResult(result);\n }\n\n /**\n * When versioning is on, writes the new file onto the open draft (creates one if needed).\n * When versioning is off, overwrites the host in place (Published v1 is synced by middleware).\n */\n async uploadNewVersion(fileId: string, options?: { scope?: AXPPlatformScope }): Promise<boolean> {\n const document = await this.documentData.byKey(fileId);\n if (!document) {\n throw new Error('File not found');\n }\n\n const documentTypeEntity = await this.resolveFileType(document.documentType);\n\n const fileItems = await this.chooseFileListItems(documentTypeEntity, {\n multiple: false,\n scope: options?.scope,\n });\n if (fileItems.length === 0) {\n return false;\n }\n\n const dialogTitle = await this.translateService.translateAsync(\n '@document-management:dialogs.manage-version.upload-new-version',\n );\n const popupData = {\n documentType: documentTypeEntity,\n files: fileItems,\n parentId: document.parentId,\n metaData: document.metaDataForm,\n documentId: fileId,\n existingTitle: document.title,\n existingDescription: document.description,\n existingExpirationDate: document.expirationDate,\n replaceFile: true,\n };\n\n if (document.versioningEnabled) {\n let draft = await this.findOpenVersionDraft(fileId);\n if (!draft) {\n const createdId = await this.documentVersionData.create({\n sourceId: fileId,\n });\n draft = { id: String(createdId) };\n }\n const result = await this.documentDialog.openAttachmentDialog(dialogTitle, {\n ...popupData,\n versionDraftId: draft.id,\n });\n return this.handlePopupResult(result);\n }\n\n const result = await this.documentDialog.openAttachmentDialog(dialogTitle, popupData);\n return this.handlePopupResult(result);\n }\n\n async findOpenVersionDraft(documentId: string): Promise<{ id: string } | null> {\n const result = await this.documentVersionData.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [\n { field: AXPVersioningField.SourceId, operator: { type: 'equal' }, value: documentId },\n {\n field: AXPVersioningField.VersioningStatus,\n operator: { type: 'equal' },\n value: AXPVersioningStatus.Draft,\n },\n ],\n },\n });\n const row = result?.items?.[0];\n return row?.id ? { id: String(row.id) } : null;\n }\n\n private validateAttachmentOptions(options?: AttachmentOptions): void {\n if (!((options?.entityId && options?.entityRecordId) || options?.folderId)) {\n throw new Error('You must provide either both entityId and entityRecordId, or folderId.');\n }\n }\n\n private async resolveFileType(\n fileType: string | AXMDocumentDocDto,\n ): Promise<AXMDocumentManagementDocumentTypeEntityModel> {\n const id = typeof fileType === 'string' ? fileType : fileType.id;\n const entity = await this.documentTypeService.byKey(id);\n if (!entity) {\n throw new Error(`Document type not found: ${id}`);\n }\n return entity;\n }\n\n private async chooseFileListItems(\n fileTypeEntity: AXMDocumentManagementDocumentTypeEntityModel,\n options?: Pick<AttachmentOptions, 'multiple' | 'scope'>,\n ): Promise<AXPFileListItem[]> {\n const { accept, fileType } = await buildFileChooserOptionsFromDocumentType(fileTypeEntity, this.fileService);\n const context: AXPFileChooserContext = {\n options: {\n multiple: options?.multiple ?? false,\n accept: accept || undefined,\n fileType: fileType.length ? fileType : undefined,\n scope: options?.scope ?? AXPPlatformScope.Tenant,\n browseMode: 'file',\n destination: 'drive',\n },\n items: [],\n };\n\n const chosen = await this.fileChooserService.promptChoose(context);\n if (!chosen?.length) {\n return [];\n }\n\n return chosen.map((item) => {\n const blob =\n item.source?.kind === 'blob' && item.source.value instanceof Blob ? item.source.value : undefined;\n return {\n ...item,\n id: item.id ?? AXPDataGenerator.uuid(),\n size: item.size ?? blob?.size ?? 0,\n status: item.status ?? 'attached',\n };\n });\n }\n\n private async handlePopupResult(result: PopupResult): Promise<boolean> {\n if (result?.data?.cancel) {\n return false;\n }\n\n return true;\n }\n}\n","//#region ----- Imports -----\n\nimport { type IWidgetBuilder } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXPContentDocumentsPermissionKeys,\n RootConfig,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\n\nimport { reviewReadonlyFieldNames } from '../folder-metadata.util';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype FolderMetadataFlex = {\n customWidget: (type: string, delegate: (widget: IWidgetBuilder) => void) => unknown;\n};\n\ntype DocumentTypeCatalogRow = Record<string, unknown> & {\n metaDataList?: AXMMetaDataBuilderValue | null;\n};\n\n//#endregion\n\n//#region ----- Service -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMFolderMetadataDialogService {\n //#region ----- Services & Dependencies -----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly documentTypeData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentType.name)\n .data<string, { id: string; name?: string; metaDataList?: AXMMetaDataBuilderValue }>();\n\n //#endregion\n\n //#region ----- Public API -----\n\n /**\n * Fills `metaDataList` on picker rows when the list query omitted it.\n */\n async hydrateDocumentTypeCatalog<T extends DocumentTypeCatalogRow>(items: T[]): Promise<T[]> {\n const hydrated: T[] = [];\n for (const item of items) {\n if (item?.['metaDataList'] != null) {\n hydrated.push(item);\n continue;\n }\n const id = item['id'] ?? item['documentTypeId'];\n if (id == null || !String(id).trim()) {\n hydrated.push(item);\n continue;\n }\n try {\n const loaded = await this.documentTypeData.byKey(String(id));\n if (loaded?.metaDataList != null) {\n hydrated.push({ ...item, metaDataList: loaded.metaDataList });\n continue;\n }\n } catch {\n // Keep the slim picker row when the type cannot be loaded.\n }\n hydrated.push(item);\n }\n return hydrated;\n }\n\n /** Adds the reactive folder-scoped metadata form to a create/update folder dialog. */\n addFolderMetadataForm(flex: FolderMetadataFlex, catalog: readonly unknown[]): void {\n flex.customWidget('meta-data-form-editor', (widget: IWidgetBuilder) => {\n widget.path('metaDataForm');\n widget.options({\n sourcePath: 'documentTypes',\n appliesTo: 'folder',\n hideEmpty: true,\n sourceCatalog: catalog,\n readonlyFieldNames: [\n ...reviewReadonlyFieldNames(\n this.sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview),\n ),\n ],\n });\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_QUERY_QUICK_SEARCH_FIELD,\n AXPFileListItem,\n type AXPFileStorageInfo,\n AXPFilterQuery,\n AXPMultiLanguageString,\n AXPPlatformScope,\n AXPQueryRequest,\n runtimeCommandPayloadData,\n} from '@acorex-platform/framework-shared/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupService } from '@acorex/components/popup';\n\nimport {\n AXPFileStorageService,\n AXPFileTypeProviderService,\n createFileTypeOpenContext,\n FILE_VIEWER_PREVIEW_EXTENSIONS,\n isFileNameShownInViewer,\n normalizeDocumentToFileListItem,\n resolveExplorerFileDisplayName,\n tryOpenFileByCatalogType,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPDialogOpener,\n AXPLayoutBuilderService,\n resolveLayoutBuilderDialogResult,\n} from '@acorex-platform/framework-client/layout/builder';\nimport { AXPFileViewerFallbackContentComponent, AXPFileViewerService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPCommonCommandKeys } from '@acorex-platform/module-common-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { inject, Injectable, Injector, PLATFORM_ID } from '@angular/core';\n\nimport { AXFileService } from '@acorex/core/file';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXMDocumentDto,\n AXMDocumentInheritanceType,\n AXMDocumentManagementFolderCreateDto,\n AXMDocumentManagementFolderEntityModel,\n AXMDocumentShortcutEntityModel,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { castArray, isArray } from 'lodash';\nimport { toDocumentExpirationDate } from './document-expiration.util';\nimport { resolveClientAssetUrl, resolveDocumentStorageFileId } from './document-file.util';\nimport { AXMDriveContentsDto, AXPDocumentManagementService } from './document-management.service';\nimport { AXMDocumentExplorerBrowseMode, AXMDocumentExplorerNode, AXMMetadataFieldInfo, AXMNodeType, CreateFileDto, UpdateFileDto, UpdateFolderDto } from './document-manager.types';\nimport { AXM_DEFAULT_FOLDER_COLOR, resolveFolderColor } from './folder-color.util';\nimport { collectFolderScopedMetaDataList, pickMetaDataFormValues } from './folder-metadata.util';\nimport { DocumentAttachmentsService } from './services/document-attachments.service';\nimport { fileNameFromTitle } from './services/document-user-fields.util';\nimport { AXMFolderMetadataDialogService } from './services/folder-metadata-dialog.service';\n//#endregion\n\n//#region ---- Folder Dialog Types ----\n\n/**\n * A document type row as consumed by the folder dialogs' select box. Backend fields are kept\n * untouched; `pickerKey` and `displayTitle` are added for the select and stripped before saving.\n */\ntype AXMFolderDialogDocumentType = Record<string, unknown> & {\n pickerKey: string;\n displayTitle: string;\n};\n\ntype AXMFolderDialogForm = {\n title: string;\n description?: string;\n inherit: AXMDocumentInheritanceType;\n documentTypes: NonNullable<AXMDocumentManagementFolderEntityModel['documentTypes']>;\n color: string;\n metaDataForm?: Record<string, unknown>;\n};\n\n//#endregion\n\n//#region ---- Contract (Abstract Service) ----\n\n/**\n * Contract for document drive service. Inject this token; implementation is provided by the module.\n */\n@Injectable()\nexport abstract class AXMDocumentManagerService {\n // Scope management\n abstract scope(scope: AXPPlatformScope): ScopedDriveService;\n\n // Root and folder operations\n abstract getRoot(scope: AXPPlatformScope): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n /** Root folder id resolved for the scope (used to detect out-of-scope folders). */\n scopeRootId?: string;\n }>;\n /**\n * Gets (or creates) the folder for the given entity record and returns it as explorer root.\n * Used by the document plugin when viewing an entity single.\n */\n abstract getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n abstract getFolder(\n scope: AXPPlatformScope,\n folderId: string,\n options?: {\n /** When opening a direct child, extend this path instead of calling the path API. */\n parentPath?: AXMDocumentExplorerNode[];\n parentFolderId?: string;\n },\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n /** Root folder id resolved for the scope (used to detect out-of-scope folders). */\n scopeRootId?: string;\n }>;\n abstract createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode>;\n abstract updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode>;\n abstract deleteFolder(folderId: string): Promise<void>;\n abstract getAvailableSpace(): Promise<number>;\n\n // File operations\n abstract createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode>;\n abstract updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode>;\n abstract deleteFile(fileId: string): Promise<void>;\n\n // Node operations\n abstract deleteNodes(nodeIds: AXMDocumentExplorerNode[]): Promise<void>;\n abstract copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode>;\n\n /** Creates a shortcut to a document or folder in the given folder. */\n abstract createShortcut(targetId: string, targetType: 'file' | 'folder', folderId: string, options?: { nameOverride?: string }): Promise<AXMDocumentExplorerNode>;\n /** Deletes a shortcut by its node id (shortcut entity id). */\n abstract deleteShortcut(shortcutId: string): Promise<void>;\n\n /**\n * Opens the drive folder picker and creates a shortcut to the given node in the selected folder.\n * Returns true if a shortcut was created, false if cancelled.\n */\n abstract createShortcutWithPicker(node: AXMDocumentExplorerNode, scope: AXPPlatformScope): Promise<boolean>;\n\n // Dialog operations\n abstract showCreateFolderDialog(parentId?: string, options?: { allowedDocumentTypeNames?: string[] }): Promise<AXMDocumentExplorerNode | null>;\n /**\n * Whether users may create a subfolder inside this folder.\n * Typed children of type-container folders (e.g. Company Document / Other Manuals / …) return false.\n */\n abstract folderAllowsCreateFolder(\n folder:\n | Pick<AXMDocumentExplorerNode, 'parentId' | 'allowChildFolders' | 'childFolderDocumentTypes'>\n | null\n | undefined,\n ): Promise<boolean>;\n abstract getDocumentTypesByNames(names: string[]): Promise<AXMNodeType[]>;\n abstract showDeleteNodesDialog(nodeIds: AXMDocumentExplorerNode[]): Promise<boolean>;\n abstract showRenamePopup(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined>;\n\n // Search operations\n abstract searchFolders(searchTerm: string, scope: AXPPlatformScope, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]>;\n abstract searchFiles(searchTerm: string, scope: AXPPlatformScope, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]>;\n abstract searchNodes(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: {\n folderId?: string;\n metadataFilters?: AXPFilterQuery[];\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]>;\n\n /** Collects unique metadata fields; pass ids to limit to those document types. */\n abstract getUniqueMetadataFields(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]>;\n\n // File browsing and actions\n abstract showChooseFileDialog(root: string): Promise<AXMDocumentExplorerNode[]>;\n abstract moveTo(options: { node: AXMDocumentExplorerNode; scope?: AXPPlatformScope; browseMode?: AXMDocumentExplorerBrowseMode; multiple?: boolean }): Promise<boolean>;\n abstract copyTo(options: { node: AXMDocumentExplorerNode; scope?: AXPPlatformScope; browseMode?: AXMDocumentExplorerBrowseMode; multiple?: boolean }): Promise<boolean>;\n abstract showFileViewerPopup(\n node: AXMDocumentExplorerNode,\n options?: {\n folderFiles?: AXMDocumentExplorerNode[];\n /** @deprecated Use {@link folderFiles}. */\n folderVirtualFiles?: AXMDocumentExplorerNode[];\n startIndex?: number;\n /** @deprecated Use {@link startIndex}. */\n index?: number;\n },\n ): Promise<void>;\n abstract openFile(node: AXMDocumentExplorerNode): Promise<void>;\n\n /** Returns file nodes from a folder listing. */\n abstract getGallerySupportedFiles(nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[];\n\n // Data retrieval\n abstract getAllFolders(): Promise<AXMDocumentExplorerNode[]>;\n abstract getAllFiles(request?: AXPQueryRequest): Promise<AXMDocumentExplorerNode[]>;\n abstract getAllNodes(): Promise<AXMDocumentExplorerNode[]>;\n abstract downloadFile(node: AXMDocumentExplorerNode): Promise<void>;\n\n // Sharing and collaboration\n abstract showShareDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showShareWithEmailDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showLinkDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showLockDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showUnlockDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showFolderEditDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract updateFileName(node: AXMDocumentExplorerNode, name: string): Promise<AXMDocumentExplorerNode>;\n\n // Upload and versioning\n abstract uploadFileByType(folderId: string, docTypeId: string, options?: { scope?: AXPPlatformScope }): Promise<boolean>;\n abstract updateUploadFileByType(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract uploadNewVersion(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract findOpenVersionDraft(documentId: string): Promise<{ id: string } | null>;\n abstract showVersionHistory(node: AXMDocumentExplorerNode): Promise<void>;\n /** New Version: pick a file, edit copied fields, then optional Publish Version. */\n abstract runNewVersionFlow(node: AXMDocumentExplorerNode): Promise<void>;\n /** Upload New File, then optional Publish Version. */\n abstract runUploadNewVersionFlow(node: AXMDocumentExplorerNode): Promise<void>;\n}\n\n//#endregion\n\n//#region ---- Service Implementation ----\n\n/**\n * Default implementation of document drive service.\n */\n@Injectable()\nexport class AXMDocumentManagerServiceImpl extends AXMDocumentManagerService {\n //#region ---- Services & Dependencies ----\n\n protected sessionService = inject(AXPSessionService);\n protected entityService = inject(AXPEntityService);\n protected folderData = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.folder.name).data<string, AXMDocumentManagementFolderEntityModel, AXMDocumentManagementFolderEntityModel>();\n protected documentData = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.document.name).data<string, AXMDocumentDto, AXMDocumentDto>();\n protected shortcutData = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentShortcut.name).data<string, AXMDocumentShortcutEntityModel, AXMDocumentShortcutEntityModel>();\n protected documentTypeService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentType.name).data<any, any>();\n protected documentManagementService = inject(AXPDocumentManagementService);\n protected popupService = inject(AXPopupService);\n protected dialogOpener = inject(AXPDialogOpener);\n protected dialogService = inject(AXDialogService);\n protected fileService = inject(AXPFileStorageService);\n protected fileManagerService = inject(AXFileService);\n protected fileTypeProviderService = inject(AXPFileTypeProviderService);\n protected injector = inject(Injector);\n protected platformId = inject(PLATFORM_ID);\n protected commandService = inject(AXPCommandService);\n protected translate = inject(AXTranslationService);\n protected layoutBuilder = inject(AXPLayoutBuilderService);\n protected fileViewerService = inject(AXPFileViewerService);\n\n protected attachmentsService = inject(DocumentAttachmentsService);\n private readonly folderMetadataDialog = inject(AXMFolderMetadataDialogService);\n\n protected hooks = inject(AXPHookService, { optional: true });\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private scopedDriveCache: Map<AXPPlatformScope, ScopedDriveService> = new Map();\n private buildPathCache: Map<string, Promise<AXMDocumentExplorerNode[]>> = new Map();\n private rootFolderIdByScope: Map<AXPPlatformScope, string> = new Map();\n\n //#endregion\n\n //#region ---- Backend response helpers ----\n\n /**\n * Some command APIs return `{ result: T }` instead of `T`. Prefer the inner value when that shape is used.\n */\n private unwrapBackendPayload<T>(value: unknown): T {\n if (value !== null && typeof value === 'object' && 'result' in (value as object)) {\n return (value as { result: T }).result;\n }\n return value as T;\n }\n\n /**\n * Resolves the entity id from a create response (plain id string or entity object with `id`).\n */\n private resolveCreatedEntityId(created: unknown): string {\n if (typeof created === 'string' && created.trim() !== '') {\n return created;\n }\n if (created && typeof created === 'object' && 'id' in (created as object)) {\n const id = (created as { id: unknown }).id;\n if (typeof id === 'string' && id.trim() !== '') {\n return id;\n }\n }\n throw new Error('Failed to resolve created entity id');\n }\n\n //#endregion\n\n //#region ---- Scope Management Methods ----\n\n /**\n * Creates a scoped drive service for the specified platform scope.\n * Backend resolves tenant/user from request context (client sends only scope).\n */\n scope(scope: AXPPlatformScope): ScopedDriveService {\n if (!this.scopedDriveCache.has(scope)) {\n this.scopedDriveCache.set(scope, new ScopedDriveService(this, scope));\n }\n return this.scopedDriveCache.get(scope)!;\n }\n\n //#endregion\n\n //#region ---- Mapping Methods ----\n\n /**\n * Maps folder entity to document explorer node\n */\n private mapFolderDtoToFolderNode = (folder: AXMDocumentManagementFolderEntityModel): AXMDocumentExplorerNode => {\n return {\n id: folder.id!,\n name: this.translate.resolve(folder.title),\n type: 'folder',\n parentId: folder.parentId || null,\n modifiedAt: (folder as any)?.updated?.at,\n createdAt: (folder as any)?.created?.at,\n description: folder.description != null ? this.translate.resolve(folder.description) : undefined,\n childrenCount: folder.childrenCount,\n itemsCount: folder.itemsCount,\n expiredItemsCount: folder.expiredItemsCount,\n nearExpiryItemsCount: folder.nearExpiryItemsCount,\n size: folder.size,\n color: folder.color,\n documentTypes: folder.documentTypes || [],\n childFolderDocumentTypes: folder.childFolderDocumentTypes || [],\n allowChildFolders: folder.allowChildFolders,\n storageType: 'physical',\n inherit: folder.inherit,\n isSystem: Boolean(folder.stateInfo?.isSystem),\n metaDataForm: folder.metaDataForm as Record<string, unknown> | undefined,\n children: [...(folder.folders?.map(this.mapFolderDtoToFolderNode) || []), ...(folder.documents?.map(this.mapFileToNode) || []), ...(folder.shortcuts?.map(this.mapShortcutToNode) || [])],\n };\n };\n\n /**\n * Maps file entity to document explorer node\n */\n private mapFileToNode(file: AXMDocumentDto): AXMDocumentExplorerNode {\n const rawFileInfo = file.fileInfo;\n const fileListItem = rawFileInfo != null && typeof rawFileInfo === 'object' ? (rawFileInfo as AXPFileListItem) : undefined;\n const storedFileRef = typeof rawFileInfo === 'string' ? rawFileInfo : undefined;\n const node: AXMDocumentExplorerNode = {\n id: file.id!,\n name: file.name,\n title: file.title,\n description: file.description,\n type: 'file',\n parentId: file.parentId,\n modifiedAt: (file as any)?.updated?.at,\n createdAt: (file as any)?.created?.at,\n size: fileListItem?.size ?? 0,\n fileId: fileListItem ?? storedFileRef,\n storageType: 'physical',\n metaDataForm: file.metaDataForm ?? undefined,\n documentTypes: file.documentType ? [file.documentType] : [],\n expirationDate: toDocumentExpirationDate(file.expirationDate),\n version: file.version,\n versionId: file.versionId,\n versioningEnabled:\n file.versioningEnabled === true ||\n (file as { versioningEnabled?: unknown }).versioningEnabled === 'true',\n versioningStatus:\n typeof (file as { versioningStatus?: unknown }).versioningStatus === 'string'\n ? String((file as { versioningStatus?: string }).versioningStatus)\n : undefined,\n distributionEnabled:\n file.distributionEnabled === true ||\n (file as { distributionEnabled?: unknown }).distributionEnabled === 'true' ||\n file.documentType?.enableDistributionCapability === true,\n };\n return node;\n }\n\n /**\n * Maps shortcut entity to document explorer node.\n * Uses minimal data from shortcut itself; target-specific details are resolved by operations when needed.\n */\n private mapShortcutToNode = (shortcut: AXMDocumentShortcutEntityModel): AXMDocumentExplorerNode => {\n const isFolderShortcut = typeof shortcut.targetFolderId === 'string' && !!shortcut.targetFolderId;\n return {\n id: shortcut.id!,\n name: shortcut.name ?? '',\n description: shortcut.description,\n type: isFolderShortcut ? 'folder' : 'file',\n parentId: shortcut.folderId,\n storageType: 'shortcut',\n size: 0,\n documentTypes: [],\n isShortcut: true,\n targetDocumentId: shortcut.targetDocumentId,\n targetFolderId: shortcut.targetFolderId,\n children: [],\n };\n };\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Builds navigation path for a node\n */\n private async buildPath(node: AXMDocumentExplorerNode, stopFolderId?: string): Promise<AXMDocumentExplorerNode[]> {\n const cacheKey = `${node.id}_${stopFolderId || ''}`;\n\n if (!this.buildPathCache.has(cacheKey)) {\n const pathPromise = (async () => {\n // For shortcut nodes, resolve path from the target document/folder\n if (node.storageType === 'shortcut') {\n if (node.type === 'file' && node.targetDocumentId) {\n return (await this.documentManagementService.getDocumentPath(node.targetDocumentId, stopFolderId)).map(this.mapFolderDtoToFolderNode);\n }\n if (node.type === 'folder' && node.targetFolderId) {\n return (await this.documentManagementService.getFolderPath(node.targetFolderId, stopFolderId)).map(this.mapFolderDtoToFolderNode);\n }\n }\n\n if (node.type === 'file') {\n return (await this.documentManagementService.getDocumentPath(node.id, stopFolderId)).map(this.mapFolderDtoToFolderNode);\n }\n\n return (await this.documentManagementService.getFolderPath(node.id, stopFolderId)).map(this.mapFolderDtoToFolderNode);\n })();\n\n this.buildPathCache.set(cacheKey, pathPromise);\n return pathPromise;\n }\n\n return this.buildPathCache.get(cacheKey)!;\n }\n\n /**\n * Creates a copy name by adding \" copy\" before the extension\n */\n private createCopyName(originalName: string): string {\n const lastDotIndex = originalName.lastIndexOf('.');\n\n if (lastDotIndex === -1) {\n // No extension\n return `${originalName} copy`;\n }\n\n const nameWithoutExt = originalName.substring(0, lastDotIndex);\n const extension = originalName.substring(lastDotIndex);\n\n return `${nameWithoutExt} copy${extension}`;\n }\n\n /**\n * Prepares file for copy operation by downloading from storage and converting to blob source.\n * Accepts document fileId (AXPFileListItem or legacy string) and returns AXPFileListItem with blob source.\n */\n private async prepareFileForCopy(fileId: AXPFileListItem | string, fileName?: string): Promise<AXPFileListItem | undefined> {\n try {\n // Extract fileId string from the source\n let fileIdString: string | undefined;\n let existingFileItem: AXPFileListItem | undefined;\n\n if (typeof fileId === 'string') {\n fileIdString = fileId;\n } else if (fileId && typeof fileId === 'object') {\n existingFileItem = fileId as AXPFileListItem;\n if (fileId.source?.kind === 'fileId' && typeof fileId.source.value === 'string') {\n fileIdString = fileId.source.value;\n } else if (fileId.id && typeof fileId.id === 'string') {\n fileIdString = fileId.id;\n }\n }\n\n if (existingFileItem?.source?.kind === 'blob' && existingFileItem.source.value instanceof Blob) {\n return {\n ...existingFileItem,\n name: fileName ?? existingFileItem.name,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: existingFileItem.source.value,\n },\n };\n }\n\n if (existingFileItem?.source?.kind === 'url' && typeof existingFileItem.source.value === 'string') {\n const url = resolveClientAssetUrl(existingFileItem.source.value);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch file from URL: ${response.status}`);\n }\n const blob = await response.blob();\n return {\n ...existingFileItem,\n name: fileName ?? existingFileItem.name,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n }\n\n if (!fileIdString) {\n console.warn('Could not extract fileId from:', fileId);\n return undefined;\n }\n\n // Get file info from file storage service using source.value\n const fileInfo: AXPFileStorageInfo = await this.fileService.getInfo(fileIdString);\n\n if (!fileInfo) {\n throw new Error(`File not found in storage: ${fileIdString}`);\n }\n\n // Get binary data\n const binary = fileInfo.binary;\n if (!binary) {\n throw new Error(`File binary data not available for: ${fileIdString}`);\n }\n\n // Create blob from binary (in case it's not already a Blob)\n const blob = binary instanceof Blob ? binary : new Blob([binary as BlobPart], { type: fileInfo.mimeType });\n\n // If we have an existing file item, clone it and update source and status\n if (existingFileItem) {\n return {\n ...existingFileItem,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n }\n\n // Otherwise create a new AXPFileListItem\n return {\n id: fileInfo.fileId,\n name: fileName ?? fileInfo.name ?? 'unknown',\n size: fileInfo.size,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n } catch (error) {\n console.error('Error preparing file for copy:', error);\n throw error;\n }\n }\n\n //#endregion\n\n //#region ---- Root and Folder Operations ----\n\n /**\n * Collects every folder id in the tree rooted at `folder` (including that folder).\n */\n /**\n * Loads shortcuts for all folders in the tree using chunked `folderId IN (…)` queries instead of one query per folder.\n */\n private async loadShortcutsForFolderIdChunks(folderIds: string[]): Promise<AXMDocumentShortcutEntityModel[]> {\n if (folderIds.length === 0) {\n return [];\n }\n const CHUNK = 80;\n const PAGE = 500;\n const out: AXMDocumentShortcutEntityModel[] = [];\n\n for (let c = 0; c < folderIds.length; c += CHUNK) {\n const chunk = folderIds.slice(c, c + CHUNK);\n let skip = 0;\n for (;;) {\n const res = await this.shortcutData.query({\n skip,\n take: PAGE,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'folderId', operator: { type: 'in' }, value: chunk }],\n },\n });\n const items = res.items ?? [];\n out.push(...items);\n if (items.length < PAGE) {\n break;\n }\n skip += PAGE;\n }\n }\n return out;\n }\n\n /**\n * Loads shortcuts for the current folder only (shortcuts belong to the open folder listing).\n */\n private async enrichFolderTreeWithShortcuts(folder: AXMDocumentManagementFolderEntityModel): Promise<void> {\n const folderId = folder.id;\n if (!folderId) {\n return;\n }\n\n const shortcuts = await this.loadShortcutsForFolderIdChunks([folderId]);\n (folder as AXMDocumentManagementFolderEntityModel & { shortcuts?: AXMDocumentShortcutEntityModel[] }).shortcuts = shortcuts.filter((s) => s.folderId === folderId);\n }\n\n /**\n * Maps the combined drive contents response (folder + children + shortcuts + path) to explorer\n * nodes. The server path always ends with the requested folder; the mapped path reuses the fully\n * hydrated result node as its last entry.\n */\n private mapDriveContents(scope: AXPPlatformScope, contents: AXMDriveContentsDto): { path: AXMDocumentExplorerNode[]; result: AXMDocumentExplorerNode; scopeRootId?: string } {\n if (contents.scopeRootId) {\n this.rootFolderIdByScope.set(scope, contents.scopeRootId);\n }\n const result = this.mapFolderDtoToFolderNode(contents.folder);\n const segments = contents.path ?? [];\n const path = segments.length ? [...segments.slice(0, -1).map((segment) => this.mapFolderDtoToFolderNode(segment as AXMDocumentManagementFolderEntityModel)), result] : [result];\n return { path, result, scopeRootId: contents.scopeRootId };\n }\n\n /**\n * Gets the root folder for the given scope in a single request (children, shortcuts and\n * path are included in the combined drive contents response).\n */\n async getRoot(scope: AXPPlatformScope): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n scopeRootId?: string;\n }> {\n const contents = await this.documentManagementService.getDriveContents(scope);\n return this.mapDriveContents(scope, contents);\n }\n\n /**\n * Gets (or creates) the folder bound to the entity record and returns it as explorer root.\n */\n async getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n const folder = await this.documentManagementService.getRootByEntityRef(refType, refId);\n await this.enrichFolderTreeWithShortcuts(folder);\n const result = this.mapFolderDtoToFolderNode(folder);\n return { path: [result], result };\n }\n\n /**\n * Returns document types whose name is in the given list.\n */\n async getDocumentTypesByNames(names: string[]): Promise<AXMNodeType[]> {\n if (names.length === 0) return [];\n const res = await this.documentTypeService.query({ skip: 0, take: 1000 });\n const items = (res as { items?: AXMNodeType[] })?.items ?? [];\n const set = new Set(names);\n return items.filter((it) => it?.name && set.has(it.name));\n }\n\n /**\n * Gets a specific folder by ID in a single request. The backend resolves shortcut ids to their\n * target folder and returns children, shortcuts and the breadcrumb path together.\n */\n async getFolder(\n scope: AXPPlatformScope,\n folderId: string,\n options?: { parentPath?: AXMDocumentExplorerNode[]; parentFolderId?: string },\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n scopeRootId?: string;\n }> {\n if (!folderId) {\n throw new Error('Folder ID is required');\n }\n\n void options; // Path comes from the combined response; the parent-path shortcut is obsolete.\n const contents = await this.documentManagementService.getDriveContents(scope, folderId);\n return this.mapDriveContents(scope, contents);\n }\n\n /**\n * Creates a new folder\n */\n async createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode> {\n const now = new Date();\n const currentUser = this.sessionService.user;\n const userId = currentUser?.id?.toString() ?? 'system';\n const userRef = { id: userId, type: 'user' } as any;\n\n const folderToCreate: Omit<AXMDocumentManagementFolderEntityModel, 'id'> = {\n ...data,\n title: data.title,\n childrenCount: 0,\n itemsCount: 0,\n expiredItemsCount: 0,\n nearExpiryItemsCount: 0,\n created: { at: now, user: userRef },\n updated: { at: now, user: userRef },\n isSystem: false,\n isHidden: false,\n isDeleted: false,\n size: data.size ?? 0,\n } as any;\n\n const created = this.unwrapBackendPayload<unknown>(await this.folderData.create(folderToCreate as any));\n const createdId = this.resolveCreatedEntityId(created);\n const folder = this.unwrapBackendPayload<AXMDocumentManagementFolderEntityModel | null | undefined>(await this.folderData.byKey(createdId));\n if (!folder) {\n throw new Error('Failed to load created folder');\n }\n return this.mapFolderDtoToFolderNode(folder);\n }\n\n /**\n * Updates an existing folder\n */\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n const currentUser = this.sessionService.user;\n const userId = currentUser?.id?.toString() ?? 'system';\n const userRef = { id: userId, type: 'user' } as any;\n const updateData = {\n ...data,\n updated: { at: new Date(), user: userRef },\n } as any;\n const updatedFolder = await this.folderData.update(folderId, updateData);\n return this.mapFolderDtoToFolderNode(updatedFolder);\n }\n\n /**\n * Deletes a folder. Cascades to delete any shortcuts that point to this folder.\n */\n async deleteFolder(folderId: string): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 1000,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'targetFolderId', operator: { type: 'equal' }, value: folderId }],\n },\n });\n for (const s of shortcutRes.items ?? []) {\n if (s.id) await this.shortcutData.delete(s.id);\n }\n await this.folderData.delete(folderId);\n }\n\n /**\n * Gets available storage space\n */\n async getAvailableSpace(): Promise<number> {\n // For now, return a fixed value of 100GB (56 * 1024 * 1024 * 1024 bytes)\n // This should be replaced with actual storage quota logic when implemented\n return 56 * 1024 * 1024 * 1024;\n }\n\n //#endregion\n\n //#region ---- File Operations ----\n\n /**\n * Creates a new file\n */\n async createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode> {\n const createdId = await this.documentData.create(data as any);\n const file = await this.documentData.byKey(createdId);\n if (!file) {\n throw new Error('Failed to load created document');\n }\n return this.mapFileToNode(file);\n }\n\n /**\n * Updates an existing file\n */\n async updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode> {\n const updatedFile = await this.documentData.update(fileId, data);\n return this.mapFileToNode(updatedFile);\n }\n\n /**\n * Deletes a file. Cascades to delete any shortcuts that point to this document.\n */\n async deleteFile(fileId: string): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 1000,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'targetDocumentId', operator: { type: 'equal' }, value: fileId }],\n },\n });\n for (const s of shortcutRes.items ?? []) {\n if (s.id) await this.shortcutData.delete(s.id);\n }\n await this.documentData.delete(fileId);\n }\n\n /**\n * Opens a drive file: runs the catalog file type's `open` handler when registered; otherwise downloads.\n */\n async openFile(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type !== 'file') {\n return;\n }\n\n const targetNode = await this.resolveFileNode(node);\n if (!targetNode) {\n console.error('Shortcut target document not found.', node);\n return;\n }\n\n const displayName = resolveExplorerFileDisplayName(targetNode.name, targetNode.fileId);\n const catalog = await this.fileTypeProviderService.items();\n const payload = (await this.resolveFileListItem(targetNode)) ?? targetNode;\n const opened = await tryOpenFileByCatalogType({\n fileName: displayName,\n catalog,\n fileService: this.fileManagerService,\n openContext: createFileTypeOpenContext(this.injector, this.platformId),\n payload,\n });\n\n if (!opened) {\n await this.downloadFile(node);\n }\n }\n\n /**\n * Downloads a file using the same logic as file-uploader component.\n * For shortcut nodes, downloads the target document.\n */\n async downloadFile(node: AXMDocumentExplorerNode): Promise<void> {\n const targetNode = await this.resolveFileNode(node);\n if (!targetNode) {\n console.error('Shortcut target document not found.', node);\n return;\n }\n\n const file = await this.resolveFileListItem(targetNode);\n if (!file) {\n console.error('File could not be resolved for download.', targetNode);\n return;\n }\n\n const triggerDownload = (blob: Blob, fileName: string) => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n if (!file.source) {\n console.error('File source is undefined, cannot download.', file);\n return;\n }\n\n switch (file.source.kind) {\n case 'blob':\n if (file.source.value instanceof Blob) {\n triggerDownload(file.source.value, file.name ?? targetNode.name ?? 'download');\n } else {\n console.error('Source kind is blob, but value is not a Blob.', file);\n }\n break;\n case 'fileId':\n if (typeof file.source.value === 'string') {\n try {\n const fileId = file.source.value.replace(/^file:/, '');\n const fileInfo = await this.fileService.getInfo(fileId);\n const blob =\n fileInfo?.binary instanceof Blob\n ? fileInfo.binary\n : await this.fileService.download(fileId);\n triggerDownload(blob, file.name ?? targetNode.name ?? fileInfo?.name ?? 'download');\n } catch (error) {\n console.error('Error downloading file by fileId:', file.source.value, error);\n }\n } else {\n console.error('Source kind is fileId, but value is not a string ID.', file);\n }\n break;\n case 'url':\n if (typeof file.source.value === 'string') {\n const link = document.createElement('a');\n link.href = resolveClientAssetUrl(file.source.value);\n link.download = file.name ?? targetNode.name ?? 'download';\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('Source kind is url, but value is not a string URL.', file);\n }\n break;\n case 'reference':\n console.error('Download not supported for source kind: reference', file);\n break;\n case 'preview':\n case 'none':\n default:\n console.error(`Download not supported for source kind: ${file.source.kind}`, file);\n break;\n }\n\n if (this.hooks) {\n try {\n await this.hooks.runAsync<any>('file-uploader.fileItem.after-download', {\n host: undefined,\n file,\n plugins: [],\n excludePlugins: [],\n });\n } catch {\n // Ignore hook errors\n }\n }\n }\n\n private async resolveFileNode(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | null> {\n if (node.storageType === 'shortcut' && node.targetDocumentId) {\n const doc = await this.documentData.byKey(node.targetDocumentId);\n return doc ? this.mapFileToNode(doc) : null;\n }\n return node;\n }\n\n private resolveStorageFileId(fileInfo: unknown): string | undefined {\n return resolveDocumentStorageFileId(fileInfo);\n }\n\n private async resolveFileListItem(node: AXMDocumentExplorerNode): Promise<AXPFileListItem | null> {\n const raw = node.fileId;\n const storageId = this.resolveStorageFileId(raw);\n const displayName = node.name;\n\n if (raw && typeof raw === 'object' && raw.source?.kind === 'blob' && raw.source.value instanceof Blob) {\n return { ...raw, name: raw.name ?? displayName };\n }\n\n if (raw && typeof raw === 'object' && raw.source?.kind === 'url' && typeof raw.source.value === 'string') {\n const item = raw as AXPFileListItem;\n const url = raw.source.value;\n return {\n ...item,\n name: item.name ?? displayName,\n source: { kind: 'url', value: resolveClientAssetUrl(url) },\n };\n }\n\n if (storageId) {\n try {\n const info = await this.fileService.getInfo(storageId);\n return {\n id: info.fileId,\n name: info.name ?? (typeof raw === 'object' && raw ? raw.name : undefined) ?? displayName,\n size: info.size ?? (typeof raw === 'object' && raw ? raw.size : undefined) ?? node.size,\n status: 'uploaded',\n source: info.url ? { kind: 'url', value: resolveClientAssetUrl(info.url) } : { kind: 'fileId', value: info.fileId },\n };\n } catch (error) {\n console.error('Failed to resolve file from storage:', storageId, error);\n }\n }\n\n if (raw && typeof raw === 'object') {\n const item = raw as AXPFileListItem;\n if (item.source) {\n return { ...item, name: item.name ?? displayName };\n }\n }\n\n return null;\n }\n\n //#endregion\n\n //#region ---- Node Operations ----\n\n /**\n * Deletes multiple nodes (files, folders, and shortcuts).\n */\n async deleteNodes(nodes: AXMDocumentExplorerNode[]): Promise<void> {\n for (const node of nodes) {\n if (node.storageType === 'shortcut' || node.isShortcut) {\n await this.deleteShortcut(node.id);\n } else if (node.type === 'folder') {\n await this.deleteFolder(node.id);\n } else {\n await this.deleteFile(node.id);\n }\n }\n }\n\n /**\n * Creates a shortcut to a document or folder in the given folder.\n */\n async createShortcut(targetId: string, targetType: 'file' | 'folder', folderId: string, options?: { nameOverride?: string }): Promise<AXMDocumentExplorerNode> {\n let name: unknown = options?.nameOverride;\n if (name == null || name === '') {\n if (targetType === 'file') {\n const doc = await this.documentData.byKey(targetId);\n name = doc?.name ?? doc?.title ?? 'Document';\n } else {\n const folder = await this.folderData.byKey(targetId);\n const rawTitle = folder?.title;\n name = rawTitle != null && rawTitle !== '' ? this.translate.resolve(rawTitle) : 'Folder';\n }\n }\n const displayName =\n typeof name === 'string' && name.trim()\n ? name.trim()\n : this.translate.resolve(name as never)?.trim() || (targetType === 'file' ? 'Document' : 'Folder');\n const payload: Record<string, unknown> = {\n folderId,\n name: displayName,\n };\n if (targetType === 'file') {\n payload['targetDocumentId'] = targetId;\n } else {\n payload['targetFolderId'] = targetId;\n }\n const created = this.unwrapBackendPayload<unknown>(await this.shortcutData.create(payload as any));\n const createdId = this.resolveCreatedEntityId(created);\n try {\n const shortcut = this.unwrapBackendPayload<AXMDocumentShortcutEntityModel | null | undefined>(\n await this.shortcutData.byKey(createdId),\n );\n if (shortcut) {\n return this.mapShortcutToNode(shortcut);\n }\n } catch {\n // Insert succeeded; a follow-up getOne can be null (folder-id probe middleware).\n }\n return this.mapShortcutToNode({\n id: createdId,\n folderId,\n name: displayName,\n ...(targetType === 'file' ? { targetDocumentId: targetId } : { targetFolderId: targetId }),\n });\n }\n\n /**\n * Deletes a shortcut by its entity id.\n */\n async deleteShortcut(shortcutId: string): Promise<void> {\n await this.shortcutData.delete(shortcutId);\n }\n\n /**\n * Opens the drive folder picker and creates a shortcut to the given node in the selected folder.\n */\n async createShortcutWithPicker(node: AXMDocumentExplorerNode, scope: AXPPlatformScope): Promise<boolean> {\n const picker = await this.openDriveFolderPicker({\n titleKey: '@document-management:actions.choose-folder-for-shortcut',\n scope,\n browseMode: 'folder',\n });\n const folder = picker.items[0];\n if (!picker.result || !folder?.id) return false;\n const targetType = node.type === 'file' ? 'file' : 'folder';\n const targetId = node.storageType === 'shortcut' && node.type === 'file' ? node.targetDocumentId! : node.storageType === 'shortcut' && node.type === 'folder' ? node.targetFolderId! : node.id;\n await this.createShortcut(targetId, targetType, folder.id);\n return true;\n }\n\n /**\n * Creates a copy of a node (file or folder)\n */\n async copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n if (!node) {\n throw new Error('Node to copy cannot be null or undefined');\n }\n\n // Create a name with \" copy\" before the extension\n const newName = this.createCopyName(node.name);\n\n if (node.type === 'file') {\n // Get the original file to copy all its data\n const originalFile = await this.documentData.byKey(node.id);\n if (!originalFile) {\n throw new Error(`File with ID ${node.id} not found`);\n }\n\n // Create a document model from the original with the new name\n // Extract needed properties without id\n const { id, ...fileDataWithoutId } = originalFile;\n\n // Prepare file for copy by downloading from storage and converting to blob source\n const fileListItem = await this.prepareFileForCopy(originalFile.fileInfo, newName);\n if (!fileListItem) {\n throw new Error('Could not prepare file for copy');\n }\n\n const fileData: CreateFileDto = {\n ...fileDataWithoutId,\n name: newName,\n title: newName,\n fileInfo: fileListItem,\n };\n\n // Create the new file\n return await this.createFile(fileData);\n } else if (node.type === 'folder') {\n // Get the original folder to copy all its data\n const originalFolder = await this.folderData.byKey(node.id);\n if (!originalFolder) {\n throw new Error(`Folder with ID ${node.id} not found`);\n }\n\n // Create a folder model from the original with the new name\n const { id, description: descMl, ...folderRest } = originalFolder;\n const folderData: AXMDocumentManagementFolderCreateDto = {\n ...(folderRest as Omit<AXMDocumentManagementFolderEntityModel, 'id' | 'description'>),\n title: newName,\n description: descMl != null ? this.translate.resolve(descMl) : undefined,\n };\n\n // Create the new folder\n return await this.createFolder(folderData);\n } else {\n throw new Error(`Unsupported node type: ${node.type}`);\n }\n }\n\n /**\n * Opens the drive picker popup with consistent layout (large dialog, optional embedded header).\n */\n private async openDriveFolderPicker(options: {\n titleKey: string;\n scope: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n selectionMode?: 'single' | 'multiple';\n hideHeader?: boolean;\n }): Promise<{ result: boolean; items: AXMDocumentExplorerNode[] }> {\n let title = '';\n const popup = await this.dialogOpener.openPopup({\n load: () => import('../drive-choose/drive-choose.component').then((module) => module.AXMDocumentDriveChooseComponent),\n data: {\n titleKey: options.titleKey,\n scope: options.scope,\n selectionMode: options.selectionMode ?? 'single',\n browseMode: options.browseMode ?? 'folder',\n },\n prepare: async () => {\n title = await this.translate.translateAsync(options.titleKey);\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n size: 'lg',\n data: {\n scope: options.scope,\n selectionMode: options.selectionMode ?? 'single',\n browseMode: options.browseMode ?? 'folder',\n hideHeader: options.hideHeader ?? true,\n },\n }),\n });\n\n return {\n result: Boolean(popup?.data?.result),\n items: popup?.data?.result ? ((popup.data?.items ?? []) as AXMDocumentExplorerNode[]) : [],\n };\n }\n\n /**\n * Moves a node to another location\n */\n async moveTo(options: { node: AXMDocumentExplorerNode; scope: AXPPlatformScope; browseMode?: AXMDocumentExplorerBrowseMode; multiple?: boolean }): Promise<boolean> {\n const picker = await this.openDriveFolderPicker({\n titleKey: '@document-management:actions.move-to-destination',\n scope: options.scope,\n browseMode: options.browseMode ?? 'folder',\n selectionMode: options.multiple ? 'multiple' : 'single',\n });\n\n const selectedFolders = picker.items;\n if (picker.result && selectedFolders.length > 0) {\n const selectedFolder = selectedFolders[0];\n if (selectedFolder) {\n if (options.node.type === 'folder') {\n await this.updateFolder(options.node.id, { parentId: selectedFolder.id });\n } else {\n await this.updateFile(options.node.id, { parentId: selectedFolder.id });\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Copies a node to another location\n */\n async copyTo(options: { node: AXMDocumentExplorerNode; scope: AXPPlatformScope; browseMode?: AXMDocumentExplorerBrowseMode; multiple?: boolean }): Promise<boolean> {\n const picker = await this.openDriveFolderPicker({\n titleKey: '@document-management:actions.copy-to-destination',\n scope: options.scope,\n browseMode: options.browseMode ?? 'folder',\n selectionMode: options.multiple ? 'multiple' : 'single',\n });\n\n const selectedFolders = picker.items;\n if (picker.result && selectedFolders.length > 0) {\n const selectedFolder = selectedFolders[0];\n if (selectedFolder) {\n if (options.node.type === 'folder') {\n await this.createFolder({\n title: options.node.name,\n parentId: selectedFolder.id,\n color: resolveFolderColor(options.node.color),\n size: options.node.size,\n inherit: options.node.inherit ?? 'None',\n });\n } else {\n // Get the original file to copy its data\n const originalFile = await this.documentData.byKey(options.node.id);\n if (!originalFile) {\n throw new Error(`File with ID ${options.node.id} not found`);\n }\n\n // Prepare file for copy by downloading from storage and converting to blob source\n const fileListItem = await this.prepareFileForCopy(originalFile.fileInfo, originalFile.name);\n if (!fileListItem) {\n throw new Error('Could not prepare file for copy');\n }\n\n await this.createFile({\n title: originalFile.title || originalFile.name,\n name: originalFile.name,\n parentId: selectedFolder.id,\n fileInfo: fileListItem,\n documentType: options.node.documentTypes[0],\n statusId: originalFile.statusId ?? 'approved',\n status: originalFile.status ?? {\n id: originalFile.statusId ?? 'approved',\n title: '@general:statuses.approved.title',\n },\n versioningEnabled: originalFile.versioningEnabled === true,\n distributionEnabled: originalFile.distributionEnabled === true,\n });\n }\n return true;\n }\n }\n return false;\n }\n\n //#endregion\n\n //#region ---- Search Operations ----\n\n /**\n * Searches for folders by term within a scope.\n * Root is resolved from current session when folderId is not provided.\n */\n async searchFolders(searchTerm: string, scope: AXPPlatformScope, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n const { result: rootNode } = options?.folderId ? await this.getFolder(scope, options.folderId) : await this.getRoot(scope);\n\n const folders = await this.documentManagementService.searchFolders(searchTerm, rootNode.id);\n\n return unwrapQueryList(folders).map((folder) => this.mapFolderDtoToFolderNode(folder));\n }\n\n /**\n * Searches for files by term within a scope.\n * Root is resolved from current session when folderId is not provided.\n */\n async searchFiles(searchTerm: string, scope: AXPPlatformScope, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n const { result: rootNode } = options?.folderId ? await this.getFolder(scope, options.folderId) : await this.getRoot(scope);\n\n const files = await this.documentManagementService.searchFiles(searchTerm, rootNode.id);\n\n return unwrapQueryList(files).map((file) => this.mapFileToNode(file));\n }\n\n /**\n * Searches for both files and folders by term within a scope.\n * Supports optional metadata filters to narrow down results by metadata field values.\n * Reserved `__quickSearch__` in metadataFilters is treated as the text term (folders + files).\n */\n async searchNodes(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: {\n folderId?: string;\n metadataFilters?: AXPFilterQuery[];\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]> {\n const { quickSearch, metadataFilters } = this.splitQuickSearchMetadataFilters(options?.metadataFilters);\n const term = (searchTerm?.trim() || quickSearch || '').trim();\n const hasSearchTerm = term.length > 0;\n const hasMetadataFilters = metadataFilters.length > 0;\n const hasDocTypeFilter = Boolean(options?.documentTypeIds && options.documentTypeIds.length > 0);\n\n if (!hasSearchTerm && !hasMetadataFilters && !hasDocTypeFilter) {\n return [];\n }\n\n const { result: rootNode } = options?.folderId\n ? await this.getFolder(scope, options.folderId)\n : await this.getRoot(scope);\n const treeRootId = options?.folderId ?? rootNode.id;\n\n const filePromise = this.documentManagementService\n .searchFiles(term, treeRootId!, {\n // Pass original filters so the server can extract `__quickSearch__` for full-text.\n ...(options?.metadataFilters?.length ? { metadataFilters: options.metadataFilters } : {}),\n ...(hasDocTypeFilter ? { documentTypeIds: options!.documentTypeIds! } : {}),\n })\n .then((dtos) => unwrapQueryList(dtos).map((file) => this.mapFileToNode(file)));\n\n const folderPromise = hasSearchTerm\n ? this.documentManagementService\n .searchFolders(term, treeRootId!)\n .then((folders) => unwrapQueryList(folders).map((folder) => this.mapFolderDtoToFolderNode(folder)))\n : Promise.resolve([] as AXMDocumentExplorerNode[]);\n\n const [folders, files] = await Promise.all([folderPromise, filePromise]);\n return [...folders, ...files];\n }\n\n /** Pulls reserved `__quickSearch__` out of drive metadata filters into a plain search term. */\n private splitQuickSearchMetadataFilters(\n filters: AXPFilterQuery[] | undefined,\n ): { quickSearch?: string; metadataFilters: AXPFilterQuery[] } {\n if (filters == null || filters.length === 0) {\n return { metadataFilters: [] };\n }\n\n let quickSearch: string | undefined;\n const metadataFilters: AXPFilterQuery[] = [];\n\n for (const filter of filters) {\n if (filter.field === AXP_QUERY_QUICK_SEARCH_FIELD) {\n const value = filter.value == null ? '' : String(filter.value).trim();\n if (value && !quickSearch) {\n quickSearch = value;\n }\n continue;\n }\n metadataFilters.push(filter);\n }\n\n return { quickSearch, metadataFilters };\n }\n\n /**\n * Returns unique metadata field definitions for the given document types (or all types when `documentTypeIds` is omitted).\n */\n async getUniqueMetadataFields(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]> {\n return this.documentManagementService.getUniqueMetadataDefinitions(documentTypeIds);\n }\n\n //#endregion\n\n //#region ---- Data Retrieval Operations ----\n\n /**\n * Gets all folders\n */\n async getAllFolders(): Promise<AXMDocumentExplorerNode[]> {\n //TODO filter by scope\n return (await this.folderData.query()).items.map(this.mapFolderDtoToFolderNode);\n }\n\n /**\n * Gets all files with optional query\n */\n async getAllFiles(request?: AXPQueryRequest): Promise<AXMDocumentExplorerNode[]> {\n //TODO filter by scope\n return (await this.documentData.query(request)).items.map(this.mapFileToNode);\n }\n\n /**\n * Gets all nodes (files and folders)\n */\n async getAllNodes(): Promise<AXMDocumentExplorerNode[]> {\n return [...(await this.getAllFolders()), ...(await this.getAllFiles())];\n }\n\n //#endregion\n\n //#region ---- File Upload Operations ----\n\n /**\n * Uploads file by document type to a specific folder\n */\n async uploadFileByType(folderId: string, docTypeId: string, options?: { scope?: AXPPlatformScope }): Promise<boolean> {\n const result = await this.attachmentsService.attachFile(docTypeId, {\n multiple: true,\n folderId: folderId,\n scope: options?.scope ?? AXPPlatformScope.Tenant,\n });\n return result;\n }\n\n /**\n * Uploads file by document type to a specific folder\n */\n async updateUploadFileByType(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.attachmentsService.updateAttachedFile(node.id, {\n folderId: node.parentId ?? '',\n });\n return result;\n }\n\n /**\n * Manage versions: Upload a new version for a specific document\n */\n async uploadNewVersion(node: AXMDocumentExplorerNode): Promise<boolean> {\n return await this.attachmentsService.uploadNewVersion(node.id);\n }\n\n async runNewVersionFlow(node: AXMDocumentExplorerNode): Promise<void> {\n await this.runUploadNewVersionFlow(node);\n }\n\n async runUploadNewVersionFlow(node: AXMDocumentExplorerNode): Promise<void> {\n const uploaded = await this.uploadNewVersion(node);\n if (!uploaded) {\n return;\n }\n\n await this.continueToPublishVersion(node);\n }\n\n async findOpenVersionDraft(documentId: string): Promise<{ id: string } | null> {\n return this.attachmentsService.findOpenVersionDraft(documentId);\n }\n\n /**\n * Opens companion version history for a versioned document.\n * For shortcut nodes, shows history of the target document.\n */\n async showVersionHistory(node: AXMDocumentExplorerNode): Promise<void> {\n await this.commandService.execute(AXPCommonCommandKeys.Versioning.ShowHistory, {\n ...this.documentVersioningInput(node),\n });\n }\n\n private async continueToPublishVersion(node: AXMDocumentExplorerNode): Promise<void> {\n if (!node.versioningEnabled) {\n return;\n }\n\n const publishNext = await this.confirmVersioningContinue(\n '@document-management:dialogs.manage-version.continue-publish.title',\n '@document-management:dialogs.manage-version.continue-publish.message',\n );\n if (!publishNext) {\n return;\n }\n\n await this.commandService.execute(AXPCommonCommandKeys.Versioning.Publish, {\n ...this.documentVersioningInput(node),\n skipConfirm: true,\n });\n }\n\n private async confirmVersioningContinue(titleKey: string, messageKey: string): Promise<boolean> {\n const dialogResult = await this.dialogService.confirm(\n await this.translate.translateAsync(titleKey),\n await this.translate.translateAsync(messageKey),\n 'primary',\n 'horizontal',\n false,\n 'cancel',\n );\n return dialogResult.result === true;\n }\n\n private documentVersioningInput(node: AXMDocumentExplorerNode): { refId: string; refType: string } {\n return {\n refId: node.id,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n };\n }\n\n //#region ---- Dialog Operations ----\n\n /**\n * Shows share dialog for a node\n */\n async showShareDialog(node: AXMDocumentExplorerNode): Promise<void> {\n let title = '';\n const popup = await this.dialogOpener.openPopup({\n load: () => import('./components/share-dialog/share-dialog.component').then((module) => module.AXMShareDialogComponent),\n data: { nodeId: node.id, dialog: 'share' },\n prepare: async () => {\n title = await this.translate.translateAsync('@document-management:dialogs.share-dialog.title');\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n data: {\n node,\n },\n }),\n });\n\n if (popup?.data?.result) {\n // Handle the share action with popup.data.data\n }\n }\n\n /**\n * Shows share via email dialog for a node\n */\n async showShareWithEmailDialog(node: AXMDocumentExplorerNode): Promise<void> {\n let title = '';\n const popup = await this.dialogOpener.openPopup({\n load: () =>\n import('./components/share-email-dialog/share-email-dialog.component').then(\n (module) => module.AXMShareEmailDialogComponent,\n ),\n data: { nodeId: node.id, dialog: 'share-email' },\n prepare: async () => {\n title = await this.translate.translateAsync('@document-management:dialogs.share-email-dialog.title');\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n data: {\n node,\n },\n }),\n });\n\n if (popup?.data?.result) {\n // Handle the share via email action with popup.data.data\n }\n }\n\n /**\n * Shows link dialog for a node\n */\n async showLinkDialog(node: AXMDocumentExplorerNode): Promise<void> {\n let title = '';\n const popup = await this.dialogOpener.openPopup({\n load: () => import('./components/link-dialog/link-dialog.component').then((module) => module.AXMLinkDialogComponent),\n data: { nodeId: node.id, dialog: 'link' },\n prepare: async () => {\n title = await this.translate.translateAsync('@document-management:dialogs.share-link-dialog.title');\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n data: {\n node,\n },\n }),\n });\n\n if (popup?.data?.result) {\n // Handle the link generation with popup.data.data\n }\n }\n\n private async folderInheritSelectionOptions(): Promise<Array<{ value: string; text: string }>> {\n const t = this.translate;\n return [\n { value: 'None', text: (await t.translateAsync('@document-management:terms.inherit.options.none')) ?? '' },\n { value: 'Inherited', text: (await t.translateAsync('@document-management:terms.inherit.options.inherited')) ?? '' },\n { value: 'Extends', text: (await t.translateAsync('@document-management:terms.inherit.options.extends')) ?? '' },\n ];\n }\n\n /**\n * Shows lock dialog for a document\n */\n async showLockDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.commandService.execute<\n { refId: string; refType: string },\n { locked?: boolean }\n >(AXPCommonCommandKeys.Lock.Lock, {\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n\n return runtimeCommandPayloadData(result)?.locked === true;\n }\n\n /**\n * Shows unlock dialog for a document\n */\n async showUnlockDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.commandService.execute<\n { refId: string; refType: string },\n { unlocked?: boolean }\n >(AXPCommonCommandKeys.Lock.Unlock, {\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n\n return runtimeCommandPayloadData(result)?.unlocked === true;\n }\n\n /**\n * Builds the picker rows for the folder dialogs. Rows keep every backend field and add two\n * UI-only ones that are stripped again before saving:\n * - `pickerKey`: the select `valueField`. `name` alone is not reliable because backends may only\n * project `id` on a folder's assigned document types.\n * - `displayTitle`: the resolved select `textField` label.\n */\n private mapDocumentTypesForPicker(items: readonly unknown[]): AXMFolderDialogDocumentType[] {\n return castArray(items ?? []).map((it) => this.toDocumentTypePickerRow(it));\n }\n\n private async hydrateDocumentTypesForPicker(items: readonly unknown[]): Promise<AXMFolderDialogDocumentType[]> {\n return this.folderMetadataDialog.hydrateDocumentTypeCatalog(this.mapDocumentTypesForPicker(items));\n }\n\n private documentTypeNamesOf(types: readonly unknown[] | null | undefined): string[] {\n if (!Array.isArray(types)) {\n return [];\n }\n return types\n .map((entry) => {\n const row = entry != null && typeof entry === 'object' ? (entry as Record<string, unknown>) : {};\n return typeof row['name'] === 'string' ? row['name'] : '';\n })\n .filter((name) => name !== '');\n }\n\n private isTypeContainerFolder(\n folder: { childFolderDocumentTypes?: unknown[] } | null | undefined,\n ): boolean {\n return (folder?.childFolderDocumentTypes?.length ?? 0) > 0;\n }\n\n async folderAllowsCreateFolder(\n folder:\n | Pick<AXMDocumentExplorerNode, 'parentId' | 'allowChildFolders' | 'childFolderDocumentTypes'>\n | null\n | undefined,\n ): Promise<boolean> {\n if (!folder) {\n return false;\n }\n if (folder.allowChildFolders === false) {\n return false;\n }\n if (this.isTypeContainerFolder(folder)) {\n return true;\n }\n if (!folder.parentId) {\n return true;\n }\n const parent = await this.loadFolderById(folder.parentId);\n return !this.isTypeContainerFolder(parent);\n }\n\n private async loadFolderById(\n folderId?: string | null,\n ): Promise<AXMDocumentManagementFolderEntityModel | null> {\n if (!folderId) {\n return null;\n }\n try {\n return (await this.folderData.byKey(folderId)) ?? null;\n } catch {\n return null;\n }\n }\n\n /** Folder dialogs need a dense array; AXDataSource cache slots are undefined and break `pickerKey`. */\n private async loadDocumentTypesForFolderDialog(allowedNames?: string[]): Promise<AXMFolderDialogDocumentType[]> {\n if (isArray(allowedNames) && allowedNames.length === 0) {\n return [];\n }\n const res = await this.documentTypeService.query({\n skip: 0,\n take: 1000,\n ...(isArray(allowedNames)\n ? {\n filter: {\n field: 'name',\n operator: { type: 'in' },\n value: allowedNames,\n },\n }\n : {}),\n });\n return this.hydrateDocumentTypesForPicker(res?.items ?? []);\n }\n\n private buildFolderDialogForm(\n form: Record<string, unknown>,\n catalog: AXMFolderDialogDocumentType[],\n options?: { requireDocumentTypes?: boolean },\n ): AXMFolderDialogForm | null {\n const selected = Array.isArray(form['documentTypes']) ? form['documentTypes'] : [];\n if ((options?.requireDocumentTypes ?? true) && selected.length === 0) {\n return null;\n }\n const documentTypes = selected.map((value: unknown) =>\n this.resolveSelectedDocumentType(value, catalog),\n ) as AXMFolderDialogForm['documentTypes'];\n const metaDataForm = form['metaDataForm'];\n return {\n title: String(form['title'] ?? form['name'] ?? ''),\n description: form['description'] as string | undefined,\n inherit: form['inherit'] as AXMDocumentInheritanceType,\n documentTypes,\n color: resolveFolderColor(form['color']),\n metaDataForm: pickMetaDataFormValues(\n metaDataForm != null && typeof metaDataForm === 'object' && !Array.isArray(metaDataForm)\n ? (metaDataForm as Record<string, unknown>)\n : {},\n collectFolderScopedMetaDataList(documentTypes),\n ),\n };\n }\n\n private toDocumentTypePickerRow(item: unknown): AXMFolderDialogDocumentType {\n const row = (item != null && typeof item === 'object' ? item : { name: item, id: item }) as Record<string, unknown>;\n return {\n ...row,\n pickerKey: this.resolveDocumentTypeKey(row),\n displayTitle: this.resolveDocumentTypeLabel(row),\n };\n }\n\n /** Stable identity of a document type, preferring the programmatic name over the backend id. */\n private resolveDocumentTypeKey(item: Record<string, unknown>): string {\n const name = item['name'];\n if (typeof name === 'string' && name !== '') {\n return name;\n }\n const id = item['id'] ?? item['documentTypeId'];\n return id == null ? '' : String(id);\n }\n\n /** Falls through title -> name -> id so a chip never renders blank when a title resolves empty. */\n private resolveDocumentTypeLabel(item: Record<string, unknown>): string {\n for (const candidate of [item['title'], item['name'], item['id']]) {\n if (candidate == null || candidate === '') {\n continue;\n }\n const resolved =\n typeof candidate === 'object'\n ? this.translate.resolve(candidate as AXPMultiLanguageString)\n : this.translate.resolve(String(candidate));\n if (resolved != null && resolved !== '') {\n return resolved;\n }\n }\n return '';\n }\n\n /**\n * Resolves a folder's assigned document types against the picker catalog.\n *\n * Assignments are matched on key, then loosely on id, because a folder response and the document\n * type list are different backend projections (ids may be numeric in one and strings in the\n * other, and a folder's entry may carry no programmatic name at all). Assignments missing from\n * the catalog are appended to the data source so the select still shows them as selected instead\n * of silently dropping them.\n *\n * With no assignment the catalog entry named `any` is preselected when present (edit fallback).\n */\n private resolveFolderDialogDocumentTypes(\n catalog: AXMFolderDialogDocumentType[],\n assigned: readonly unknown[] | null | undefined,\n ): { selected: AXMFolderDialogDocumentType[]; dataSource: AXMFolderDialogDocumentType[] } {\n if (!isArray(assigned) || assigned.length === 0) {\n const anyType = catalog.find((it) => it['name'] === 'any');\n return { selected: anyType ? [anyType] : [], dataSource: catalog };\n }\n\n const dataSource = [...catalog];\n const selected = assigned.map((entry) => {\n const row = this.toDocumentTypePickerRow(entry);\n const id = row['id'] ?? row['documentTypeId'];\n const match = dataSource.find(\n (it) =>\n (row.pickerKey !== '' && it?.pickerKey === row.pickerKey) ||\n (id != null && it?.['id'] != null && String(it['id']) === String(id)),\n );\n if (match) {\n return match;\n }\n dataSource.push(row);\n return row;\n });\n\n return { selected, dataSource };\n }\n\n /** Removes the picker-only fields so only backend-owned properties are persisted. */\n private toDocumentTypePayload(value: unknown): AXMNodeType {\n if (value == null || typeof value !== 'object') {\n return value as AXMNodeType;\n }\n const row = { ...(value as Record<string, unknown>) };\n delete row['pickerKey'];\n delete row['displayTitle'];\n return row as unknown as AXMNodeType;\n }\n\n /** Maps a select value (row object, or `pickerKey` when the app stores primitives) to its row. */\n private resolveSelectedDocumentType(\n value: unknown,\n dataSource: AXMFolderDialogDocumentType[],\n ): AXMNodeType {\n if (value != null && typeof value === 'object') {\n return this.toDocumentTypePayload(value);\n }\n const match = dataSource.find((it) => it?.pickerKey === String(value));\n return this.toDocumentTypePayload(match ?? { name: value, title: value, id: value });\n }\n\n /**\n * Loads persisted folder metadata for edit dialogs.\n * Explorer child nodes from a parent's embedded `folders[]` are often shallow and omit\n * `inherit` / `documentTypes`; `byKey` returns the full stored row.\n */\n private async resolveFolderNodeForEdit(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n try {\n const folder = await this.folderData.byKey(node.id);\n if (folder) {\n return this.mapFolderDtoToFolderNode(folder);\n }\n } catch {\n // Fall back to the explorer node when storage is unavailable.\n }\n return node;\n }\n\n /** Coerces backend/explorer inherit values to a supported selection-list option. */\n private normalizeFolderInherit(\n inherit: AXMDocumentExplorerNode['inherit'] | string | null | undefined,\n ): AXMDocumentInheritanceType {\n if (inherit === 'None' || inherit === 'Inherited' || inherit === 'Extends') {\n return inherit;\n }\n return 'None';\n }\n\n /**\n * Shows folder edit dialog\n */\n async showFolderEditDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const source = await this.resolveFolderNodeForEdit(node);\n const isContainer = this.isTypeContainerFolder(source);\n const parent = isContainer ? null : await this.loadFolderById(source.parentId);\n const lockedStubs = parent?.childFolderDocumentTypes;\n const typesLocked = Array.isArray(lockedStubs) && lockedStubs.length > 0;\n const lockTypes = typesLocked || isContainer;\n\n const assignedTypes = typesLocked ? lockedStubs : source.documentTypes;\n const catalog = typesLocked\n ? await this.loadDocumentTypesForFolderDialog(this.documentTypeNamesOf(lockedStubs))\n : await this.hydrateDocumentTypesForPicker(\n ((await this.documentTypeService.query({ skip: 0, take: 1000 })) as { items?: unknown[] } | null)\n ?.items ?? [],\n );\n const resolvedTypes = this.resolveFolderDialogDocumentTypes(\n catalog,\n isContainer ? [] : assignedTypes,\n );\n const items = await this.folderMetadataDialog.hydrateDocumentTypeCatalog(resolvedTypes.dataSource);\n const initialDocumentTypes = resolvedTypes.selected.map(\n (row) => items.find((item) => item.pickerKey === row.pickerKey) ?? row,\n );\n const inheritOptions = await this.folderInheritSelectionOptions();\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMFolderDialogForm | null>((dialog) => {\n dialog\n .setTitle('@document-management:actions.update-folder')\n .setSize('lg')\n .setContext({\n name: source.name,\n description: source.description ?? '',\n inherit: lockTypes ? 'None' : this.normalizeFolderInherit(source.inherit),\n documentTypes: isContainer ? [] : initialDocumentTypes,\n color: resolveFolderColor(source.color),\n metaDataForm: source.metaDataForm ?? {},\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.name', (field) => {\n field.path('name');\n field.textBox({ validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({});\n })\n .formField('@document-management:terms.common.inherited', (field) => {\n field.path('inherit');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: inheritOptions,\n });\n if (lockTypes) {\n field.visible(false);\n }\n })\n .formField('@document-management:entities.document-types.title-plural', (field) => {\n field.path('documentTypes');\n field.selectBox({\n valueField: 'pickerKey',\n textField: 'displayTitle',\n dataSource: items,\n multiple: true,\n allowSearch: true,\n validations: isContainer ? [] : [{ rule: 'required' }],\n });\n if (isContainer) {\n field.visible(false);\n } else if (typesLocked) {\n field.readonly(true);\n }\n })\n .formField('@general:terms.common.color', (field) => {\n field.path('color');\n field.colorBox({});\n });\n if (!isContainer) {\n this.folderMetadataDialog.addFolderMetadataForm(flex, items);\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return null;\n }\n return this.buildFolderDialogForm(context as Record<string, unknown>, items, {\n requireDocumentTypes: !isContainer,\n });\n });\n })\n .show();\n\n const form = resolveLayoutBuilderDialogResult<AXMFolderDialogForm>(result);\n if (!form) {\n return false;\n }\n await this.updateFolder(node.id, {\n title: form.title,\n description: form.description,\n inherit: lockTypes ? 'None' : form.inherit,\n documentTypes: isContainer ? [] : form.documentTypes,\n color: form.color,\n metaDataForm: form.metaDataForm ?? {},\n });\n return true;\n }\n\n /**\n * Shows create folder dialog.\n * @param parentId Parent folder id\n * @param options.allowedDocumentTypeNames When set, only these document type names can be selected\n */\n async showCreateFolderDialog(parentId?: string, options?: { allowedDocumentTypeNames?: string[] }): Promise<AXMDocumentExplorerNode | null> {\n const parent = await this.loadFolderById(parentId);\n if (parent?.allowChildFolders === false) {\n return null;\n }\n const lockedStubs = parent?.childFolderDocumentTypes;\n const typesLocked = Array.isArray(lockedStubs) && lockedStubs.length > 0;\n if (!typesLocked && parent?.parentId) {\n const grandparent = await this.loadFolderById(parent.parentId);\n if (this.isTypeContainerFolder(grandparent)) {\n return null;\n }\n }\n const allowedNames = typesLocked\n ? this.documentTypeNamesOf(lockedStubs)\n : options?.allowedDocumentTypeNames;\n const catalog = await this.loadDocumentTypesForFolderDialog(allowedNames);\n const { selected: defaultDocumentTypes } = this.resolveFolderDialogDocumentTypes(\n catalog,\n typesLocked ? lockedStubs : null,\n );\n const inheritOptions = await this.folderInheritSelectionOptions();\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMFolderDialogForm | null>((dialog) => {\n dialog\n .setTitle('@document-management:actions.create-folder')\n .setSize('lg')\n .setContext({\n title: '',\n description: '',\n inherit: 'None',\n documentTypes: defaultDocumentTypes,\n color: AXM_DEFAULT_FOLDER_COLOR,\n metaDataForm: {},\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.title', (field) => {\n field.path('title');\n field.textBox({ validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({});\n })\n .formField('@document-management:terms.common.inherited', (field) => {\n field.path('inherit');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: inheritOptions,\n });\n if (typesLocked) {\n field.visible(false);\n }\n })\n .formField('@document-management:entities.document-types.title-plural', (field) => {\n field.path('documentTypes');\n field.selectBox({\n valueField: 'pickerKey',\n textField: 'displayTitle',\n dataSource: catalog,\n multiple: true,\n allowSearch: true,\n validations: [{ rule: 'required' }],\n });\n if (typesLocked) {\n field.readonly(true);\n }\n })\n .formField('@general:terms.common.color', (field) => {\n field.path('color');\n field.colorBox({});\n });\n this.folderMetadataDialog.addFolderMetadataForm(flex, catalog);\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return null;\n }\n return this.buildFolderDialogForm(context as Record<string, unknown>, catalog);\n });\n })\n .show();\n\n const form = resolveLayoutBuilderDialogResult<AXMFolderDialogForm>(result);\n if (!form) {\n return null;\n }\n try {\n return await this.createFolder({\n title: form.title,\n color: form.color,\n parentId,\n description: form.description,\n documentTypes: form.documentTypes,\n size: 0,\n inherit: typesLocked ? 'None' : form.inherit,\n metaDataForm: form.metaDataForm ?? {},\n });\n } catch (err) {\n console.error('[showCreateFolderDialog] createFolder failed', err);\n throw err;\n }\n }\n\n /**\n * Shows rename popup for a node using dynamic form builder\n */\n async showRenamePopup(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined> {\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDocumentExplorerNode | undefined>((dialog) => {\n dialog\n .setTitle('@document-management:actions.rename')\n .setContext({ name: node.type === 'file' ? (node.title || node.name) : node.name })\n .content((flex) => {\n flex.setDirection('column').formField(\n node.type === 'file'\n ? '@general:terms.common.title'\n : '@document-management:dialogs.rename.name',\n (field) => {\n field.path('name');\n field.textBox({\n placeholder: '@document-management:dialogs.rename.name-placeholder',\n validations: [{ rule: 'required' }],\n });\n });\n })\n .setActions((actions) => {\n actions.cancel().submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return undefined;\n }\n const formData = context as { name?: string };\n if (!formData?.name) {\n return undefined;\n }\n dialogRef.setLoading(true);\n try {\n if (node.type === 'folder') {\n return await this.updateFolder(node.id, { title: formData.name });\n }\n return await this.renameFileTitle(node, formData.name);\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n\n return result;\n }\n\n /**\n * Shows delete nodes confirmation dialog\n */\n async showDeleteNodesDialog(nodeIds: AXMDocumentExplorerNode[]): Promise<boolean> {\n const folderNodes = nodeIds.filter((n) => n.type === 'folder' && n.storageType !== 'shortcut');\n const fileNodes = nodeIds.filter((n) => n.type === 'file' && n.storageType !== 'shortcut');\n const shortcutNodes = nodeIds.filter((n) => n.storageType === 'shortcut' || n.isShortcut);\n const hasFolders = folderNodes.length > 0;\n const hasFiles = fileNodes.length > 0;\n const hasShortcuts = shortcutNodes.length > 0;\n\n const baseOptions = { process: { showResult: true } };\n\n let result: Awaited<ReturnType<AXPCommandService['execute']>>;\n if (hasShortcuts && (hasFolders || hasFiles)) {\n result = await this.commandService.execute('Entity:Remove', {\n entities: nodeIds.map((node) => ({\n source: `${RootConfig.module.name}.${node.storageType === 'shortcut' || node.isShortcut ? RootConfig.entities.documentShortcut.name : node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n ids: [node.id],\n })),\n options: baseOptions,\n \n });\n } else if (hasFolders && hasFiles) {\n result = await this.commandService.execute('Entity:Remove', {\n entities: nodeIds.map((node) => ({\n source: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n ids: [node.id],\n })),\n options: baseOptions,\n \n });\n } else if (hasShortcuts) {\n result = await this.commandService.execute('Entity:Remove', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.documentShortcut.name}`,\n data: shortcutNodes.length === 1 ? shortcutNodes[0] : shortcutNodes,\n options: baseOptions,\n \n });\n } else if (hasFolders) {\n result = await this.commandService.execute('Entity:Remove', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.folder.name}`,\n data: folderNodes.length === 1 ? folderNodes[0] : folderNodes,\n options: baseOptions,\n \n });\n } else if (hasFiles) {\n result = await this.commandService.execute('Entity:Remove', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n data: fileNodes.length === 1 ? fileNodes[0] : fileNodes,\n options: baseOptions,\n \n });\n } else {\n return false;\n }\n return result?.success ?? false;\n }\n\n /**\n * Shows choose file dialog\n */\n async showChooseFileDialog(scope: AXPPlatformScope): Promise<AXMDocumentExplorerNode[]> {\n const picker = await this.openDriveFolderPicker({\n titleKey: '@document-management:actions.choose-from-drive',\n scope,\n browseMode: 'file',\n hideHeader: false,\n });\n if (picker.result) {\n return castArray(picker.items);\n }\n return [];\n }\n\n /** File extensions supported by the file viewer (images, PDF, video, audio). */\n static readonly FILE_VIEWER_PREVIEW_EXTENSIONS = FILE_VIEWER_PREVIEW_EXTENSIONS;\n\n /**\n * Returns file nodes from a folder listing.\n */\n getGallerySupportedFiles(nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n return nodes.filter((item) => item.type === 'file' && !!item.name);\n }\n\n /**\n * Opens a fullscreen file viewer for all files in the node's folder.\n */\n async showFileViewerPopup(\n node: AXMDocumentExplorerNode,\n options?: {\n folderFiles?: AXMDocumentExplorerNode[];\n folderVirtualFiles?: AXMDocumentExplorerNode[];\n startIndex?: number;\n index?: number;\n },\n ): Promise<void> {\n const folderFiles =\n options?.folderFiles ??\n options?.folderVirtualFiles ??\n (await this.resolveFolderFileNodes(node));\n\n const catalog = await this.fileTypeProviderService.items();\n const fileNodes = folderFiles.filter((item) => {\n if (item.type !== 'file' || !item.name) {\n return false;\n }\n const displayName = resolveExplorerFileDisplayName(item.name, item.fileId);\n return isFileNameShownInViewer(displayName, catalog);\n });\n if (fileNodes.length === 0) {\n return;\n }\n\n const fileListItems: AXPFileListItem[] = fileNodes.map((doc) =>\n normalizeDocumentToFileListItem({\n id: doc.id,\n name: doc.name,\n fileInfo: doc.fileId,\n fileId: doc.fileId,\n size: doc.size,\n }),\n );\n\n const resolvedStartIndex =\n options?.startIndex ??\n options?.index ??\n Math.max(0, fileNodes.findIndex((doc) => doc.id === node.id));\n\n await this.fileViewerService.openFiles(fileListItems, {\n startIndex: resolvedStartIndex < 0 ? 0 : resolvedStartIndex,\n thumbnail: true,\n download: true,\n fallbackContent: AXPFileViewerFallbackContentComponent,\n });\n }\n\n private async resolveFolderFileNodes(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode[]> {\n if (!node.parentId || node.parentId === 'virtual') {\n return [];\n }\n\n const parentFolder = await this.folderData.byKey(node.parentId);\n return (parentFolder?.documents ?? []).map((doc) => this.mapFileToNode(doc));\n }\n\n /**\n * Updates a file name\n */\n async updateFileName(node: AXMDocumentExplorerNode, name: string): Promise<AXMDocumentExplorerNode> {\n return this.renameFileTitle(node, name);\n }\n\n /**\n * Renames document title and keeps the stored file name in sync (same title + original extension).\n */\n private async renameFileTitle(node: AXMDocumentExplorerNode, title: string): Promise<AXMDocumentExplorerNode> {\n const nextTitle = title.trim();\n const nextFileName = fileNameFromTitle(nextTitle, node.name);\n if (node.storageType !== 'physical') {\n node.title = nextTitle;\n node.name = nextFileName;\n return node;\n }\n\n const storageId = this.resolveStorageFileId(node.fileId);\n if (storageId) {\n await this.fileService.update({\n fileId: storageId,\n name: nextFileName,\n metadata: {},\n });\n }\n\n const nextFileInfo =\n node.fileId && typeof node.fileId === 'object'\n ? { ...node.fileId, name: nextFileName }\n : undefined;\n\n return this.mapFileToNode(\n await this.documentData.update(node.id, {\n title: nextTitle,\n name: nextFileName,\n ...(nextFileInfo ? { fileInfo: nextFileInfo } : {}),\n }),\n );\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ---- Scoped Drive Service ----\n\n/**\n * Scoped drive service for specific platform scopes.\n * Backend resolves tenant/user from request context (client sends only scope).\n */\nexport class ScopedDriveService {\n //#region ---- Constructor ----\n\n constructor(\n private parent: AXMDocumentManagerService,\n private scope: AXPPlatformScope,\n ) {}\n\n //#endregion\n\n //#region ---- Scoped Operations ----\n\n /**\n * Gets root folder for this scope (tenant/user from session).\n */\n async getRoot(): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getRoot(this.scope);\n }\n\n /**\n * Gets folder for this scope.\n */\n async getFolder(\n folderId: string,\n options?: { parentPath?: AXMDocumentExplorerNode[]; parentFolderId?: string },\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getFolder(this.scope, folderId, options);\n }\n\n /**\n * Creates folder in this scope. Backend sets tenant/user from request context.\n */\n async createFolder(data: Omit<AXMDocumentManagementFolderCreateDto, 'tenantId' | 'userId'>): Promise<AXMDocumentExplorerNode> {\n return this.parent.createFolder(data as AXMDocumentManagementFolderCreateDto);\n }\n\n /**\n * Updates folder in this scope\n */\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n return this.parent.updateFolder(folderId, data);\n }\n\n /**\n * Deletes folder in this scope\n */\n async deleteFolder(folderId: string): Promise<void> {\n return this.parent.deleteFolder(folderId);\n }\n\n /**\n * Gets available space for this scope\n */\n async getAvailableSpace(): Promise<number> {\n return this.parent.getAvailableSpace();\n }\n\n /**\n * Searches folders in this scope\n */\n async searchFolders(searchTerm: string, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchFolders(searchTerm, this.scope, options);\n }\n\n /**\n * Searches files in this scope\n */\n async searchFiles(searchTerm: string, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchFiles(searchTerm, this.scope, options);\n }\n\n /**\n * Searches nodes in this scope\n */\n async searchNodes(\n searchTerm: string,\n options?: {\n folderId?: string;\n metadataFilters?: AXPFilterQuery[];\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchNodes(searchTerm, this.scope, options);\n }\n\n /**\n * Creates a copy of a node in this scope\n */\n async copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n return this.parent.copy(node);\n }\n\n //#endregion\n}\n\n/**\n * Runtime query unwrap may return a bare array or a paged `{ items }` envelope.\n * Normalize to an array for callers that map over search/list results.\n */\nfunction unwrapQueryList<T>(value: T[] | { items?: T[] } | null | undefined): T[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (value && Array.isArray(value.items)) {\n return value.items;\n }\n return [];\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXPFilterQuery,\n AXPPlatformScope,\n runtimeQueryCollectionData,\n runtimeQueryPayloadData,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXMDocumentDto,\n AXMDocumentDocDto,\n AXMDocumentManagementFolderEntityModel,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXMDocumentManagementQueryKeys } from '@acorex-platform/module-document-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMDriveContentsDto, AXPDocumentManagementService } from './document-management.service';\nimport { AXMMetadataFieldInfo } from './document-manager.types';\n\n//#endregion\n\n//#region ----- Document management API service -----\n\n/**\n * Default runtime-backed document management service.\n * Other apps can override {@link AXPDocumentManagementService} with a custom implementation.\n */\n@Injectable()\nexport class AXMDocumentManagementApiService extends AXPDocumentManagementService {\n //#region ----- Services & Dependencies -----\n\n private readonly queryService = inject(AXPQueryService);\n\n //#endregion\n\n //#region ----- Drive -----\n\n getRoot(scope: AXPPlatformScope): Promise<AXMDocumentManagementFolderEntityModel> {\n return this.fetchRequired(AXMDocumentManagementQueryKeys.Drive.GetRoot, { scope });\n }\n\n getDriveContents(scope: AXPPlatformScope, folderId?: string): Promise<AXMDriveContentsDto> {\n return this.fetchRequired(AXMDocumentManagementQueryKeys.Drive.GetContents, { scope, folderId });\n }\n\n getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<AXMDocumentManagementFolderEntityModel> {\n return this.fetchRequired(AXMDocumentManagementQueryKeys.Drive.GetRootByEntityRef, { refType, refId });\n }\n\n //#endregion\n\n //#region ----- Document -----\n\n getDocumentPath(\n documentId: string,\n stopFolderId?: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Document.GetPath, { documentId, stopFolderId });\n }\n\n searchFiles(\n searchTerm: string,\n rootFolderId: string,\n options?: { metadataFilters?: AXPFilterQuery[]; documentTypeIds?: string[] },\n ): Promise<AXMDocumentDto[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Document.Search, {\n searchTerm,\n rootFolderId,\n options,\n });\n }\n\n listFolderReviewDocuments(folderId: string, taskId?: string): Promise<AXMDocumentDto[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.DocumentReview.ListFolderDocuments, {\n folderId,\n taskId,\n });\n }\n\n findManyDocuments(ids: string[]): Promise<AXMDocumentDto[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Document.FindMany, { ids });\n }\n\n async getExpiredDocumentCount(): Promise<number> {\n const data = await this.fetchRequired<Record<string, never>, { count: number }>(\n AXMDocumentManagementQueryKeys.Document.GetExpiredCount,\n {},\n );\n return data.count ?? 0;\n }\n\n //#endregion\n\n //#region ----- Folder -----\n\n getFolderPath(\n folderId: string,\n stopFolderId?: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Folder.GetPath, { folderId, stopFolderId });\n }\n\n searchFolders(\n searchTerm: string,\n rootFolderId: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Folder.Search, { searchTerm, rootFolderId });\n }\n\n //#endregion\n\n //#region ----- Document type & metadata -----\n\n getDocumentTypeByName(name: string): Promise<AXMDocumentDocDto> {\n return this.fetchRequired(AXMDocumentManagementQueryKeys.DocumentType.GetByName, { name });\n }\n\n getUniqueMetadataDefinitions(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Metadata.GetUniqueDefinitions, {\n documentTypeIds,\n });\n }\n\n //#endregion\n\n //#region ----- Query helpers -----\n\n private async fetchRequired<TInput, TResult>(key: string, input: TInput): Promise<TResult> {\n const result = await this.queryService.fetch<TInput, TResult>(key, input);\n const data = runtimeQueryPayloadData(result);\n if (data == null) {\n throw new Error(`Document management query returned no data: ${key}`);\n }\n return data;\n }\n\n private async fetchArray<TInput, TItem>(key: string, input: TInput): Promise<TItem[]> {\n const result = await this.queryService.fetch<TInput, TItem>(key, input);\n return runtimeQueryCollectionData(result)?.items ?? [];\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex-platform/framework-shared/core';\n\nimport { resolveClientAssetUrl } from '../../../shared/document-file.util';\nimport { AXMDocumentExplorerNode } from '../../../shared/document-manager.types';\n\n//#region ---- Drive upload attachment type ----\n\nexport type AXMDriveUploadAttachmentType = 'clone' | 'by-reference';\n\n//#endregion\n\n//#region ---- Clone blob resolution ----\n\n/**\n * Build a Blob for \"clone\" attachment from drive file metadata (storage fileId, url, or existing blob).\n */\nexport async function resolveDriveCloneBlob(\n fileInfo: AXPFileListItem | undefined,\n fileStorageService: AXPFileStorageService,\n): Promise<{ blob: Blob; name?: string; size?: number; mimeType?: string } | null> {\n if (!fileInfo) {\n return null;\n }\n if (fileInfo.source?.kind === 'blob' && fileInfo.source.value instanceof Blob) {\n const blob = fileInfo.source.value;\n return { blob, name: fileInfo.name, size: fileInfo.size ?? blob.size, mimeType: blob.type };\n }\n const storageKeyFromSource =\n fileInfo.source?.kind === 'fileId' && typeof fileInfo.source.value === 'string'\n ? fileInfo.source.value\n : undefined;\n if (storageKeyFromSource) {\n try {\n const storageInfo = await fileStorageService.getInfo(storageKeyFromSource);\n const bin = storageInfo.binary as unknown as BlobPart;\n return {\n blob: new Blob([bin], { type: storageInfo.mimeType }),\n name: storageInfo.name ?? fileInfo.name,\n size: storageInfo.size,\n mimeType: storageInfo.mimeType,\n };\n } catch {\n /* try fallbacks */\n }\n }\n if (typeof fileInfo.id === 'string' && fileInfo.source?.kind !== 'url') {\n try {\n const storageInfo = await fileStorageService.getInfo(fileInfo.id);\n const bin = storageInfo.binary as unknown as BlobPart;\n return {\n blob: new Blob([bin], { type: storageInfo.mimeType }),\n name: storageInfo.name ?? fileInfo.name,\n size: storageInfo.size,\n mimeType: storageInfo.mimeType,\n };\n } catch {\n /* fall through */\n }\n }\n if (fileInfo.source?.kind === 'url' && typeof fileInfo.source.value === 'string') {\n try {\n const res = await fetch(resolveClientAssetUrl(fileInfo.source.value), { credentials: 'include' });\n if (!res.ok) {\n return null;\n }\n const blob = await res.blob();\n return {\n blob,\n name: fileInfo.name,\n size: blob.size || fileInfo.size,\n mimeType: blob.type || 'application/octet-stream',\n };\n } catch {\n return null;\n }\n }\n return null;\n}\n\n/** Chooser validation keeps blob items only when `source.value` is the same `File` instance it checks. */\nfunction toCloneFile(blob: Blob, name: string, mimeType?: string): File {\n if (blob instanceof File && blob.name === name) {\n return blob;\n }\n return new File([blob], name, { type: mimeType || blob.type || 'application/octet-stream' });\n}\n\n//#endregion\n\n//#region ---- Upload options dialog ----\n\n/**\n * Prompts the user to choose between cloning the file or attaching by document reference.\n */\nexport async function promptDriveUploadAttachmentType(\n translationService: AXTranslationService,\n dialogService: AXDialogService,\n): Promise<AXMDriveUploadAttachmentType> {\n const dialogTitle = await translationService.translateAsync('@document-management:actions.upload-options.title');\n const dialogMessage = await translationService.translateAsync(\n '@document-management:actions.upload-options.confirm-message',\n );\n\n const dialogResult = await dialogService.confirm(\n dialogTitle,\n dialogMessage,\n 'primary',\n 'horizontal',\n false,\n 'cancel',\n );\n\n // OK / primary -> clone copy; Cancel / secondary -> link by document reference\n return dialogResult.result ? 'clone' : 'by-reference';\n}\n\n/**\n * Resolves clone vs reference from caller options, otherwise asks the user.\n * `attachmentType` wins; `skipUploadOptions` attaches by reference without a dialog.\n */\nexport async function resolveDriveUploadAttachmentType(\n options: Record<string, unknown> | undefined,\n translationService: AXTranslationService,\n dialogService: AXDialogService,\n): Promise<AXMDriveUploadAttachmentType> {\n const attachmentTypeFromOptions = options?.['attachmentType'] as AXMDriveUploadAttachmentType | undefined;\n if (attachmentTypeFromOptions === 'clone' || attachmentTypeFromOptions === 'by-reference') {\n return attachmentTypeFromOptions;\n }\n\n if (Boolean(options?.['skipUploadOptions'])) {\n return 'by-reference';\n }\n\n return promptDriveUploadAttachmentType(translationService, dialogService);\n}\n\n//#endregion\n\n//#region ---- Node to file list mapping ----\n\nfunction nodeFileIdToListItem(\n raw: string | AXPFileListItem | undefined,\n node: AXMDocumentExplorerNode,\n): AXPFileListItem | undefined {\n if (!raw) {\n return undefined;\n }\n if (typeof raw === 'string') {\n const fileId = raw.startsWith('file:') ? raw.slice(5) : raw;\n return {\n id: fileId,\n name: node.name,\n size: node.size,\n status: 'attached',\n source: { kind: 'fileId', value: fileId },\n };\n }\n return raw;\n}\n\n/**\n * Maps drive explorer nodes to file list items for the chosen attachment type.\n */\nexport async function mapDriveNodesToFileListItems(\n nodes: AXMDocumentExplorerNode[],\n attachmentType: AXMDriveUploadAttachmentType,\n fileStorageService: AXPFileStorageService,\n): Promise<AXPFileListItem[]> {\n const items: AXPFileListItem[] = [];\n\n for (const node of nodes) {\n if (node.type === 'folder') {\n continue;\n }\n\n const raw = node.fileId;\n const displayName =\n (typeof raw === 'object' && raw?.name ? raw.name : node.name ?? '').trim() || 'file';\n const displaySize = (typeof raw === 'object' && raw?.size != null ? raw.size : node.size) ?? 0;\n\n if (attachmentType === 'by-reference') {\n items.push({\n id: node.id,\n name: displayName,\n size: displaySize,\n status: 'attached',\n source: {\n kind: 'reference',\n value: {\n id: node.id,\n type: 'document',\n },\n },\n });\n continue;\n }\n\n const resolved = await resolveDriveCloneBlob(nodeFileIdToListItem(raw, node), fileStorageService);\n if (!resolved) {\n continue;\n }\n\n const name = resolved.name ?? displayName;\n items.push({\n id: AXPDataGenerator.uuid(),\n name,\n size: resolved.size ?? resolved.blob.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: toCloneFile(resolved.blob, name, resolved.mimeType),\n },\n });\n }\n\n return items;\n}\n\n/**\n * Maps chosen file list items (from the drive chooser) for the selected attachment type.\n */\nexport async function mapChosenDriveItemsToFileListItems(\n chosen: AXPFileListItem[],\n attachmentType: AXMDriveUploadAttachmentType,\n fileStorageService: AXPFileStorageService,\n): Promise<AXPFileListItem[]> {\n const items: AXPFileListItem[] = [];\n\n for (const item of chosen) {\n if (attachmentType === 'by-reference') {\n if (item.source?.kind === 'reference') {\n items.push({ ...item, status: 'attached' });\n continue;\n }\n if (item.id) {\n items.push({\n ...item,\n status: 'attached',\n source: {\n kind: 'reference',\n value: {\n id: item.id,\n type: 'document',\n },\n },\n });\n }\n continue;\n }\n\n const resolved = await resolveDriveCloneBlob(item, fileStorageService);\n if (!resolved) {\n continue;\n }\n\n const name = resolved.name ?? item.name ?? 'file';\n items.push({\n id: AXPDataGenerator.uuid(),\n name,\n size: resolved.size ?? resolved.blob.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: toCloneFile(resolved.blob, name, resolved.mimeType),\n },\n });\n }\n\n return items;\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileListItem, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXPFileChooserProvider } from '@acorex-platform/framework-client/layout/components';\nimport { castArray, defaultTo, isEmpty } from 'lodash';\n\nimport { AXMDocumentExplorerBrowseMode, AXMDocumentExplorerNode } from '../../../shared/document-manager.types';\nimport {\n mapDriveNodesToFileListItems,\n resolveDriveUploadAttachmentType,\n} from '../file-uploader/drive-file-uploader.utils';\n\n//#region ---- Drive file chooser provider ----\n\nfunction mapDriveNodeToFileListItem(node: AXMDocumentExplorerNode): AXPFileListItem {\n const raw = node.fileId;\n const name =\n (typeof raw === 'object' && raw?.name ? raw.name : node.name ?? '').trim() || 'file';\n const size = (typeof raw === 'object' && raw?.size != null ? raw.size : node.size) ?? 0;\n\n if (typeof raw === 'object' && raw?.source) {\n return {\n id: raw.id ?? node.id,\n name,\n size,\n status: 'attached',\n source: raw.source,\n };\n }\n\n if (typeof raw === 'string') {\n const fileId = raw.startsWith('file:') ? raw.slice(5) : raw;\n return {\n id: node.id,\n name,\n size,\n status: 'attached',\n source: { kind: 'fileId', value: fileId },\n };\n }\n\n return {\n id: node.id,\n name,\n size,\n status: 'attached',\n source: {\n kind: 'reference',\n value: {\n id: node.id,\n type: 'document',\n },\n },\n };\n}\n\nexport const AXM_DRIVE_FILE_CHOOSER_PROVIDER: AXPFileChooserProvider = {\n key: 'drive',\n title: '@layout:components.file-chooser.providers.drive',\n icon: 'fa-light fa-hard-drive',\n order: 2,\n choose: async (context) => {\n const popupService = inject(AXPopupService);\n const dialogOpener = inject(AXPDialogOpener);\n const translate = inject(AXTranslationService);\n const dialogService = inject(AXDialogService);\n const fileStorageService = inject(AXPFileStorageService);\n\n const scope = defaultTo(context.options['scope'] as AXPPlatformScope | undefined, AXPPlatformScope.Tenant);\n const multiple = Boolean(context.options['multiple']);\n const browseMode = defaultTo(\n context.options['browseMode'] as AXMDocumentExplorerBrowseMode | undefined,\n 'file',\n );\n const accept = context.options['accept'] as string | undefined;\n\n let title = '';\n const popup = await dialogOpener.openPopup({\n load: () => import('../../drive-choose.component').then((module) => module.AXMDocumentDriveChooseComponent),\n data: { scope, multiple, browseMode, accept: accept ?? '' },\n prepare: async () => {\n title = await translate.translateAsync('@document-management:actions.choose-from-drive');\n },\n show: (component) =>\n popupService.open(component, {\n title,\n size: 'lg',\n data: {\n scope,\n selectionMode: multiple ? 'multiple' : 'single',\n browseMode,\n hideHeader: true,\n accept,\n },\n }),\n });\n\n const picked = popup?.data;\n if (!picked?.result) {\n return undefined;\n }\n\n const selected = castArray(picked.items ?? []) as AXMDocumentExplorerNode[];\n if (isEmpty(selected)) {\n return undefined;\n }\n\n const nodes = browseMode === 'file' ? selected.filter((node) => node.type === 'file') : selected;\n if (isEmpty(nodes)) {\n return undefined;\n }\n\n const next =\n browseMode === 'file'\n ? await mapDriveNodesToFileListItems(\n nodes,\n await resolveDriveUploadAttachmentType(context.options, translate, dialogService),\n fileStorageService,\n )\n : nodes.map(mapDriveNodeToFileListItem);\n if (isEmpty(next)) {\n return undefined;\n }\n\n if (!multiple) {\n return next.slice(0, 1);\n }\n\n return [...context.items, ...next];\n },\n};\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AXPFileUploaderProvider } from '@acorex-platform/framework-client/layout/components';\nimport { defaultTo, isEmpty } from 'lodash';\n\nimport { mapChosenDriveItemsToFileListItems, resolveDriveUploadAttachmentType } from './drive-file-uploader.utils';\n\n//#region ---- Drive file uploader provider ----\n\nexport const AXM_DRIVE_FILE_UPLOADER_PROVIDER: AXPFileUploaderProvider = {\n key: 'drive',\n title: '@layout:components.file-uploader.providers.drive',\n icon: 'fa-light fa-hard-drive',\n order: 2,\n upload: async (context) => {\n const fileStorageService = inject(AXPFileStorageService);\n const translationService = inject(AXTranslationService);\n const dialogService = inject(AXDialogService);\n\n if (isEmpty(context.chosen)) {\n return undefined;\n }\n\n const attachmentType = await resolveDriveUploadAttachmentType(\n context.options,\n translationService,\n dialogService,\n );\n\n const uploaded = await mapChosenDriveItemsToFileListItems(\n context.chosen,\n attachmentType,\n fileStorageService,\n );\n\n if (isEmpty(uploaded)) {\n return undefined;\n }\n\n const multiple = defaultTo(context.options['multiple'] as boolean | undefined, true);\n if (!multiple) {\n return uploaded.slice(0, 1);\n }\n\n return [...context.items, ...uploaded];\n },\n};\n\n//#endregion\n","import { inject } from '@angular/core';\nimport {\n AXPFileActionProvider,\n AXCFileUploaderActionsPayload,\n AXCFileUploaderCapabilities,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPDataGenerator,\n AXPPlatformScope,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPFileChooserService } from '@acorex-platform/framework-client/layout/components';\n\nexport const UploadFromDriveActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 2,\n execute: (\n payload: AXCFileUploaderActionsPayload,\n ): AXCFileUploaderActionsPayload => {\n const chooserService = inject(AXPFileChooserService);\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-document-from-drive',\n global: true,\n textKey: '@document-management:actions.choose-from-drive',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n const chosen = await chooserService.choose('drive', {\n options: {\n multiple: payload.options?.multiple ?? true,\n scope: AXPPlatformScope.Tenant,\n browseMode: 'file',\n accept: payload.options?.accept,\n },\n items: [],\n });\n\n if (!chosen?.length) {\n return;\n }\n\n capabilities.addFiles(\n chosen.map((item) => ({\n ...item,\n id: item.id ?? AXPDataGenerator.uuid(),\n })),\n );\n },\n },\n ];\n\n return payload;\n },\n};\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXP_FILE_ACTION_PROVIDER, UploadFromComputerActionProvider } from '@acorex-platform/framework-client/common';\nimport {\n AXP_FILE_CHOOSER_PROVIDERS,\n AXP_FILE_UPLOADER_PROVIDERS,\n} from '@acorex-platform/framework-client/layout/components';\n\nimport { AXM_DRIVE_FILE_CHOOSER_PROVIDER } from './providers/file-chooser';\nimport { AXM_DRIVE_FILE_UPLOADER_PROVIDER } from './providers/file-uploader';\nimport { UploadFromDriveActionProvider } from './slots/file-uploader-widget-extension';\n\n@NgModule({\n imports: [],\n providers: [\n { provide: AXP_FILE_ACTION_PROVIDER, useValue: UploadFromComputerActionProvider, multi: true },\n { provide: AXP_FILE_ACTION_PROVIDER, useValue: UploadFromDriveActionProvider, multi: true },\n { provide: AXP_FILE_CHOOSER_PROVIDERS, useValue: AXM_DRIVE_FILE_CHOOSER_PROVIDER, multi: true },\n { provide: AXP_FILE_UPLOADER_PROVIDERS, useValue: AXM_DRIVE_FILE_UPLOADER_PROVIDER, multi: true },\n ],\n})\nexport class AXMDriveChooseModule {}\n","import {\n AXP_FILE_ACTION_PROVIDER,\n AXPFileActionProvider,\n AXPFileStorageService,\n AXCFileUploaderActionsPayload,\n AXCFileUploaderCapabilities,\n} from '@acorex-platform/framework-client/common';\nimport {AXPDataGenerator} from '@acorex-platform/framework-client/core';\nimport {AXPEntityReference, AXPFileListItem, AXPPlatformScope} from '@acorex-platform/framework-shared/core';\nimport { AXPFileChooserService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport { AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition } from '@acorex-platform/framework-client/layout/builder';\nimport { inject, Injector } from '@angular/core';\nimport { set } from 'lodash';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-client/contracts';\nimport {\n AXMDocumentDocDto,\n AXMDocumentDto,\n AXPContentDocumentsPermissionKeys,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPDocumentManagementService } from './document-management.service';\nimport { AXMDocumentDialogService } from './services/document-dialog.service';\nimport { buildFileChooserOptionsFromDocumentType } from './document-type-accept.util';\nimport { resolveClientAssetUrl, resolveDocumentStorageFileId } from './document-file.util';\nimport {\n collectDocumentScopedMetaDataList,\n reviewReadonlyFieldNames,\n toEditableMetaDataList,\n} from './folder-metadata.util';\n\n/** Document fields without fileInfo (meta on AXPFileListItem). */\ntype AXMDocumentMeta = Omit<AXMDocumentDto, 'fileInfo'>;\n\n/**\n * Document File Uploader Widget Plugin\n *\n * Provides hook providers for the File Uploader widget to integrate Document Management behaviors.\n * Keys implemented here:\n * - file-uploader.configure → override accept based on docTypeId\n * - file-uploader.actions → one \"Upload\" button per document type (replaces generic Upload from Device)\n * - file-uploader.beforeFilesAdded → open metadata dialog for selected type\n * - file-uploader.fileItem.actions → add per-file actions (e.g., Edit Metadata)\n *\n * Conventions:\n * - plugin name: 'document'\n * - options: { docTypeName: string } or { docTypeNames: string[] } for multiple types\n */\n\nexport type DocumentPluginOptions = { docTypeName?: string; docTypeNames?: string[] };\n\ntype BasePayload = {\n plugins: { name: string; options?: unknown }[];\n excludePlugins: string[];\n pluginOptions?: Record<string, unknown>;\n capabilities: any;\n};\n\n//#region ---- Plugin Guard Utilities ----\n\n/**\n * Check if the 'document' plugin is active (enabled and not excluded) in the payload.\n */\nfunction isDocumentPluginActive(payload: BasePayload): boolean {\n const isEnabled = Array.isArray(payload.plugins) && payload.plugins.some((p) => p.name === 'document');\n const isExcluded = Array.isArray(payload.excludePlugins) && payload.excludePlugins.includes('document');\n return isEnabled && !isExcluded;\n}\n\n/**\n * Extract document plugin options from payload.\n * Returns undefined if plugin is not active or options are missing.\n */\nfunction getDocumentPluginOptions(payload: BasePayload): DocumentPluginOptions | undefined {\n if (!isDocumentPluginActive(payload)) {\n return undefined;\n }\n return (payload.plugins.find((p) => p.name === 'document')?.options ?? {}) as DocumentPluginOptions;\n}\n\n/** Resolve list of document type names from plugin options (single or multiple). */\nfunction getDocTypeNames(opts: DocumentPluginOptions | undefined): string[] {\n if (!opts) return [];\n if (Array.isArray(opts.docTypeNames) && opts.docTypeNames.length > 0) return opts.docTypeNames;\n if (typeof opts.docTypeName === 'string' && opts.docTypeName.trim()) return [opts.docTypeName.trim()];\n return [];\n}\n\n//#endregion\n\n// ---------------- Configure: set accept based on docTypeId / docTypeNames ----------------\nexport const DocumentFileUploaderConfigureProvider: AXPHookProvider<any, any> = {\n key: 'file-uploader.configure',\n priority: 0,\n async execute(payload: BasePayload & { overrides: Record<string, unknown> }) {\n const opts = getDocumentPluginOptions(payload);\n const names = getDocTypeNames(opts);\n if (!names.length) return payload;\n\n const documentManagementService = inject(AXPDocumentManagementService);\n const fileService = inject(AXFileService);\n const allAccept: string[] = [];\n const allFileTypes: string[] = [];\n for (const name of names) {\n const docType = await documentManagementService.getDocumentTypeByName(name);\n const { accept, fileType } = await buildFileChooserOptionsFromDocumentType(docType, fileService);\n if (accept) {\n allAccept.push(...accept.split(',').filter(Boolean));\n }\n allFileTypes.push(...fileType);\n }\n const extensions = Array.from(new Set(allAccept));\n const fileType = Array.from(new Set(allFileTypes));\n\n payload.overrides = payload.overrides || {};\n payload.overrides['accept'] = extensions.join(',');\n if (fileType.length) {\n payload.overrides['fileType'] = fileType;\n }\n return payload;\n },\n};\n\n// ---------------- Actions: one \"Upload\" button per document type (replaces generic Upload from Device) ----------------\nexport const DocumentFileUploaderActionsByTypeProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 5,\n execute: async (payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> => {\n const opts = getDocumentPluginOptions({\n plugins: payload.plugins,\n excludePlugins: payload.excludePlugins ?? [],\n capabilities: payload.capabilities,\n } as BasePayload);\n const docTypeNames = getDocTypeNames(opts);\n if (docTypeNames.length === 0) return payload;\n\n const documentManagementService = inject(AXPDocumentManagementService);\n const documentDialogService = inject(AXMDocumentDialogService);\n const chooserService = inject(AXPFileChooserService);\n const fileService = inject(AXFileService);\n const docTypes = await Promise.all(\n docTypeNames.map((name) => documentManagementService.getDocumentTypeByName(name)),\n );\n\n const byTypeActions = await Promise.all(\n docTypes\n .filter((dt) => dt != null)\n .map(async (docType) => {\n const { accept, fileType } = await buildFileChooserOptionsFromDocumentType(docType, fileService);\n const typeName = (docType as any)?.name as string;\n const title = (docType as any)?.title ?? typeName;\n return {\n plugin: 'document',\n global: false,\n text: title,\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n const chosen = await chooserService.promptChoose({\n options: {\n multiple: payload.options?.multiple ?? true,\n accept: accept || undefined,\n fileType: fileType.length ? fileType : undefined,\n scope: AXPPlatformScope.Tenant,\n browseMode: 'file',\n },\n items: [],\n });\n if (!chosen?.length) return;\n const documentType: AXMDocumentDocDto = {\n id: (docType as { id?: string })?.id ?? '',\n name: typeName,\n title: (docType as { title?: AXMDocumentDocDto['title'] })?.title ?? typeName,\n };\n const fileItems = chosen.map(\n (item) =>\n ({\n ...item,\n id: item.id ?? AXPDataGenerator.uuid(),\n status: item.status ?? 'attached',\n meta: { documentType, ...(item.meta as object) } as Partial<AXMDocumentMeta>,\n }) as AXPFileListItem,\n );\n const result = await documentDialogService.openAttachmentDialogWithoutSave(title, {\n documentType: docType,\n files: fileItems,\n });\n if (result.data?.cancel) {\n return;\n }\n if (result.data?.files) {\n result.data.files.forEach(\n (\n f: {\n metaDataForm?: Record<string, unknown>;\n title?: string;\n description?: string;\n expirationDate?: unknown;\n name?: string;\n },\n i: number,\n ) => {\n if (!fileItems[i]) {\n return;\n }\n const meta: Partial<AXMDocumentMeta> = {\n ...(fileItems[i].meta as Partial<AXMDocumentMeta>),\n documentType,\n metaDataForm: f?.metaDataForm,\n };\n set(fileItems[i], 'meta', meta);\n set(fileItems[i], 'metaDataForm', f?.metaDataForm);\n set(fileItems[i], 'title', f?.title);\n set(fileItems[i], 'description', f?.description);\n if (f?.name) {\n set(fileItems[i], 'name', f.name);\n }\n if (f?.expirationDate !== undefined) {\n set(fileItems[i], 'expirationDate', f.expirationDate);\n }\n },\n );\n }\n capabilities.addFiles(fileItems);\n },\n };\n }),\n );\n\n payload.actions = payload.actions.filter((a) => a.plugin !== 'upload-from-computer');\n payload.actions = [...byTypeActions, ...payload.actions];\n return payload;\n },\n};\n\n// --------------- Before Files Added: no-op (dialog moved into uploader) ---------------\n// When the uploader option \"showEditDialogAfterSelect\" is true, the uploader shows the edit dialog (with EditDialog hooks) per file before adding.\n// When false, files are added directly and the user opens the same edit dialog via the Edit button. The document metadata form is injected via EditDialogAfterFormProvider (below the main form). This provider no longer opens a separate dialog.\nexport const DocumentFileUploaderBeforeFilesAddedProvider: AXPHookProvider<any, any> = {\n key: 'file-uploader.beforeFilesAdded',\n priority: 0,\n async execute(payload: BasePayload & { newFiles: AXPFileListItem[] }) {\n return payload;\n },\n};\n\n// --------------- Edit Dialog: inject metadata group after 'form' ---------------\nexport const DocumentFileUploaderEditDialogAfterFormProvider: AXPHookProvider<any, any> = {\n key: 'file-uploader.edit-dialog.groups.after-form',\n priority: 0,\n async execute(payload: BasePayload & { file: AXPFileListItem; groups: AXPDynamicFormGroupDefinition[] }) {\n const fileMeta = payload.file.meta as Partial<AXMDocumentMeta> | undefined;\n const metaObj = (fileMeta?.metaDataForm ?? (payload.file as { metaDataForm?: unknown }).metaDataForm) as\n | Record<string, { name: string; title: string; value: unknown }>\n | undefined;\n\n const opts = getDocumentPluginOptions(payload);\n const docTypeName = fileMeta?.documentType?.name ?? opts?.docTypeName;\n const injector = inject(Injector);\n const documentManagementService = injector.get(AXPDocumentManagementService);\n const docType = docTypeName\n ? await documentManagementService.getDocumentTypeByName(docTypeName)\n : undefined;\n\n if (!docType && (!metaObj || Object.keys(metaObj).length === 0)) return payload;\n\n const sessionService = injector.get(AXPSessionService);\n const reviewReadonly = [\n ...reviewReadonlyFieldNames(sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview)),\n ];\n const metaDataList = toEditableMetaDataList(\n collectDocumentScopedMetaDataList((docType as { metaDataList?: AXMMetaDataBuilderValue })?.metaDataList),\n reviewReadonly,\n );\n const hasDefinitions = Array.isArray(metaDataList.groups) && metaDataList.groups.length > 0;\n\n const fields: AXPDynamicFormFieldDefinition[] = [\n {\n path: 'metaDataForm',\n title: '@document-management:terms.common.meta-data',\n widget: {\n name: 'metaDataForm',\n type: 'meta-data-form-editor',\n options: { ...metaDataList, readonlyFieldNames: reviewReadonly },\n defaultValue: metaObj,\n } as any,\n },\n ];\n\n const group: AXPDynamicFormGroupDefinition = {\n name: 'metadata',\n title: (docType as any)?.title ?? '@document-management:terms.common.meta-data',\n parameters: fields,\n };\n\n if (hasDefinitions) {\n payload.groups = [...(payload.groups ?? []), group];\n }\n return payload;\n },\n};\n\n// --------------- Download Reference: handle reference-based file downloads ---------------\nexport const DocumentFileUploaderDownloadReferenceProvider: AXPHookProvider<any, any> = {\n key: 'file-uploader.fileItem.download-reference',\n priority: 0,\n async execute(\n payload: BasePayload & {\n file: AXPFileListItem;\n reference: AXPEntityReference;\n fileInfo?: { url?: string; binary?: Blob; name?: string };\n },\n ) {\n // Only handle if reference type is 'document'\n if (payload.reference.type !== 'document') {\n return payload;\n }\n\n const entityService = inject(AXPEntityService);\n const fileStorageService = inject(AXPFileStorageService);\n const documentData = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n\n try {\n // Get document by id\n const document = await documentData.byKey(payload.reference.id);\n\n if (!document) {\n console.error('Document not found for reference:', payload.reference);\n return payload;\n }\n\n const displayName = document.name ?? document.title;\n const linkedFile = document.fileInfo;\n if (linkedFile && typeof linkedFile === 'object') {\n const source = linkedFile.source;\n if (source?.kind === 'url' && typeof source.value === 'string') {\n payload.fileInfo = {\n url: resolveClientAssetUrl(source.value),\n name: linkedFile.name ?? displayName,\n };\n return payload;\n }\n if (source?.kind === 'blob' && source.value instanceof Blob) {\n payload.fileInfo = {\n binary: source.value,\n name: linkedFile.name ?? displayName,\n };\n return payload;\n }\n }\n\n const fileId = resolveDocumentStorageFileId(linkedFile);\n if (!fileId) {\n console.error('Document does not have a downloadable file:', document);\n return payload;\n }\n\n const fileInfo = await fileStorageService.getInfo(fileId);\n\n if (fileInfo) {\n payload.fileInfo = {\n url: fileInfo.url ? resolveClientAssetUrl(fileInfo.url) : undefined,\n binary: (fileInfo as { binary?: Blob }).binary,\n name: fileInfo.name ?? displayName,\n };\n } else {\n console.error('Could not retrieve file info from fileId:', fileId);\n }\n } catch (error) {\n console.error('Error processing reference download:', payload.reference, error);\n }\n\n return payload;\n },\n};\n\n// Convenience export to register all providers at once in a module\nexport const DocumentFileUploaderWidgetPluginProviders = [\n DocumentFileUploaderConfigureProvider,\n DocumentFileUploaderBeforeFilesAddedProvider,\n DocumentFileUploaderEditDialogAfterFormProvider,\n DocumentFileUploaderDownloadReferenceProvider,\n];\n","import { AXPExpression } from '@acorex-platform/framework-shared/core';\nimport {\n AXPEntityActionPlugin,\n ensureListActions,\n resolveEntityPluginDetailPageOrder,\n} from '@acorex-platform/framework-client/layout/entity';\n\n/** Component key for the entity Documents (EDMS) page. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const DOCUMENT_DRIVE_PAGE_COMPONENT_KEY = 'entity-document-drive-page';\n\nexport type DocumentPluginOptions = {\n /** Page title. Default: @document-management:terms.common.documents */\n title?: string;\n /** Page icon. Default: fa-light fa-folder-open */\n icon?: string;\n /**\n * Restrict document types for this entity: only these types can be selected when creating a folder\n * or uploading. User cannot see or select other document types.\n */\n documentTypeNames?: string[] | AXPExpression;\n /** Visibility condition for the Documents page (boolean or expression string). */\n hidden?: boolean | string;\n};\n\n/**\n * Document (EDMS) plugin. Adds a \"Documents\" page to the entity that loads the folder\n * bound to the current record via refType/refId (getRootByEntityRef). Uses the same\n * drive UI (explorer, toolbar, detail panel) scoped to that folder.\n */\nexport const documentPlugin: AXPEntityActionPlugin = {\n name: 'documents',\n order: 51,\n apply: (ctx, options?: DocumentPluginOptions) => {\n const opts = options ?? {};\n const title = (opts.title?.trim().length ?? 0) > 0 ? opts.title! : '@document-management:terms.common.documents';\n const refType = `${ctx.entity.module}.${ctx.entity.name}`;\n\n ctx.entity.pages ??= [];\n const pageExists = ctx.entity.pages.some(\n (p: { componentKey?: string }) => p.componentKey === DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n );\n const pageOrder = resolveEntityPluginDetailPageOrder(\n { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n 'documents',\n {\n componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n skipPage: pageExists\n ? { componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY }\n : undefined,\n },\n );\n const pageEntry: {\n componentKey: string;\n title: string;\n icon: string;\n layout: { order: number };\n refType: string;\n hidden?: boolean | string;\n allowedDocumentTypeNames?: string[];\n options?: Record<string, any>;\n } = {\n componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n title,\n icon: opts.icon ?? 'fa-light fa-files',\n layout: { order: pageOrder },\n refType,\n options: {\n documentTypeNames: opts.documentTypeNames,\n },\n };\n if (Array.isArray(opts.documentTypeNames) && opts.documentTypeNames.length > 0) {\n pageEntry.allowedDocumentTypeNames = opts.documentTypeNames;\n }\n if (opts.hidden !== undefined) {\n pageEntry.hidden = opts.hidden;\n }\n if (!pageExists) {\n (ctx.entity.pages as (typeof pageEntry)[]).push(pageEntry);\n } else {\n const pages = ctx.entity.pages as typeof pageEntry[];\n const index = pages.findIndex((p) => p.componentKey === DOCUMENT_DRIVE_PAGE_COMPONENT_KEY);\n if (index >= 0) {\n pages[index] = { ...pages[index], ...pageEntry };\n }\n }\n\n ensureListActions(ctx);\n },\n};\n","import { documentTypeHasReviewMetadataForAppliesTo } from '@acorex-platform/module-document-management-client/contracts';\nimport type {\n AXMMetaDataBuilderValue,\n AXMMetaDataFieldAppliesTo,\n} from '@acorex-platform/module-data-management-client/contracts';\n\nimport type { AXMDocumentExplorerNode } from './document-manager.types';\n\n//#region ----- Types -----\n\ntype ReviewTypeRow = {\n requiresReview?: unknown;\n metaDataList?: AXMMetaDataBuilderValue | null | unknown;\n};\n\ntype DocumentReviewTypeLoader = {\n byNames: (names: string[]) => Promise<ReviewTypeRow[]>;\n byKey?: (id: string) => Promise<ReviewTypeRow | null | undefined>;\n};\n\n//#endregion\n\n//#region ----- Explorer review eligibility -----\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction rememberId(target: string[], value: unknown): void {\n const id = typeof value === 'string' ? value.trim() : '';\n if (id && !target.includes(id)) {\n target.push(id);\n }\n}\n\nfunction rememberType(\n ids: string[],\n names: string[],\n type: unknown,\n): void {\n const row = asRecord(type);\n if (!row) {\n return;\n }\n rememberId(ids, row['id']);\n const name = typeof row['name'] === 'string' ? row['name'].trim() : '';\n if (name && !names.includes(name)) {\n names.push(name);\n }\n}\n\nexport function collectDocumentTypeKeys(...sources: unknown[]): { ids: string[]; names: string[] } {\n const ids: string[] = [];\n const names: string[] = [];\n for (const source of sources) {\n const row = asRecord(source);\n if (!row) {\n continue;\n }\n rememberType(ids, names, row['documentType']);\n const types = row['documentTypes'];\n if (Array.isArray(types)) {\n for (const type of types) {\n rememberType(ids, names, type);\n }\n }\n }\n return { ids, names };\n}\n\nexport function isReviewEnabledDocumentType(\n type: ReviewTypeRow | null | undefined,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): boolean {\n if (!type) {\n return false;\n }\n return documentTypeHasReviewMetadataForAppliesTo(\n type.metaDataList as AXMMetaDataBuilderValue | null | undefined,\n appliesTo,\n );\n}\n\nfunction sourceHasReviewEnabledType(\n source: unknown,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): boolean {\n const row = asRecord(source);\n if (!row) {\n return false;\n }\n if (isReviewEnabledDocumentType(row as ReviewTypeRow, appliesTo)) {\n return true;\n }\n if (isReviewEnabledDocumentType(asRecord(row['documentType']) as ReviewTypeRow | null, appliesTo)) {\n return true;\n }\n const types = row['documentTypes'];\n return (\n Array.isArray(types) &&\n types.some((type) => isReviewEnabledDocumentType(asRecord(type) as ReviewTypeRow | null, appliesTo))\n );\n}\n\nexport async function sourcesAllowDocumentReview(\n sources: unknown[],\n load: DocumentReviewTypeLoader,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): Promise<boolean> {\n if (sources.some((source) => sourceHasReviewEnabledType(source, appliesTo))) {\n return true;\n }\n const keys = collectDocumentTypeKeys(...sources);\n if (load.byKey) {\n for (const id of keys.ids) {\n try {\n const type = await load.byKey(id);\n if (isReviewEnabledDocumentType(type, appliesTo)) {\n return true;\n }\n } catch {\n // Keep checking remaining types when one lookup misses.\n }\n }\n }\n if (keys.names.length) {\n const types = await load.byNames(keys.names);\n if (types.some((type) => isReviewEnabledDocumentType(type, appliesTo))) {\n return true;\n }\n }\n return false;\n}\n\nexport async function explorerNodeAllowsDocumentReview(\n node: AXMDocumentExplorerNode | null | undefined,\n load: DocumentReviewTypeLoader,\n): Promise<boolean> {\n if (!node || node.storageType === 'shortcut' || node.isShortcut) {\n return false;\n }\n const appliesTo: AXMMetaDataFieldAppliesTo = node.type === 'folder' ? 'folder' : 'document';\n return sourcesAllowDocumentReview([node], load, appliesTo);\n}\n\n//#endregion\n","import { documentTypeAllowsDistributionForAppliesTo } from '@acorex-platform/module-document-management-client/contracts';\nimport type {\n AXMMetaDataBuilderValue,\n AXMMetaDataFieldAppliesTo,\n} from '@acorex-platform/module-data-management-client/contracts';\n\nimport { collectDocumentTypeKeys } from './document-review.util';\nimport type { AXMDocumentExplorerNode } from './document-manager.types';\n\n//#region ----- Types -----\n\ntype DistributionTypeRow = {\n enableDistributionCapability?: unknown;\n metaDataList?: AXMMetaDataBuilderValue | null | unknown;\n};\n\ntype DocumentDistributionTypeLoader = {\n byNames: (names: string[]) => Promise<DistributionTypeRow[]>;\n byKey?: (id: string) => Promise<DistributionTypeRow | null | undefined>;\n};\n\n//#endregion\n\n//#region ----- Explorer distribution eligibility -----\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction isDistributionEnabledDocumentType(\n type: DistributionTypeRow | null | undefined,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): boolean {\n if (!type || type.metaDataList == null) {\n return false;\n }\n return documentTypeAllowsDistributionForAppliesTo(\n {\n enableDistributionCapability: type.enableDistributionCapability,\n metaDataList: type.metaDataList as AXMMetaDataBuilderValue | null | undefined,\n },\n appliesTo,\n );\n}\n\nfunction sourceAllowsDistribution(source: unknown, appliesTo: AXMMetaDataFieldAppliesTo): boolean {\n const row = asRecord(source);\n if (!row) {\n return false;\n }\n if (isDistributionEnabledDocumentType(row as DistributionTypeRow, appliesTo)) {\n return true;\n }\n if (\n isDistributionEnabledDocumentType(\n asRecord(row['documentType']) as DistributionTypeRow | null,\n appliesTo,\n )\n ) {\n return true;\n }\n const types = row['documentTypes'];\n return (\n Array.isArray(types) &&\n types.some((type) =>\n isDistributionEnabledDocumentType(asRecord(type) as DistributionTypeRow | null, appliesTo),\n )\n );\n}\n\nexport async function sourcesAllowDocumentDistribution(\n sources: unknown[],\n load: DocumentDistributionTypeLoader,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): Promise<boolean> {\n if (sources.some((source) => sourceAllowsDistribution(source, appliesTo))) {\n return true;\n }\n const keys = collectDocumentTypeKeys(...sources);\n if (load.byKey) {\n for (const id of keys.ids) {\n try {\n const type = await load.byKey(id);\n if (isDistributionEnabledDocumentType(type, appliesTo)) {\n return true;\n }\n } catch {\n // Keep checking remaining types when one lookup misses.\n }\n }\n }\n if (keys.names.length) {\n const types = await load.byNames(keys.names);\n if (types.some((type) => isDistributionEnabledDocumentType(type, appliesTo))) {\n return true;\n }\n }\n return false;\n}\n\nexport async function explorerNodeAllowsDocumentDistribution(\n node: AXMDocumentExplorerNode | null | undefined,\n load: DocumentDistributionTypeLoader,\n): Promise<boolean> {\n if (!node || node.storageType === 'shortcut' || node.isShortcut) {\n return false;\n }\n const appliesTo: AXMMetaDataFieldAppliesTo = node.type === 'folder' ? 'folder' : 'document';\n return sourcesAllowDocumentDistribution([node], load, appliesTo);\n}\n\n//#endregion\n","//#region ----- Types -----\n\nexport type AXMDocumentVersionSource = {\n type?: string;\n storageType?: string;\n isShortcut?: boolean;\n versioningEnabled?: boolean;\n version?: number | string | null;\n};\n\n//#endregion\n\n//#region ----- Public API -----\n\n/**\n * Published host version for explorer display. Only when versioning is on.\n * Missing/invalid numbers fall back to 1 (middleware stamps v1 on create).\n */\nexport function resolveDocumentVersionNumber(source: AXMDocumentVersionSource): number | null {\n if (source.type !== 'file' || source.storageType === 'shortcut' || source.isShortcut) {\n return null;\n }\n if (source.versioningEnabled !== true) {\n return null;\n }\n const n = Number(source.version);\n if (Number.isFinite(n) && n > 0) {\n return n;\n }\n return 1;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-client/contracts';\nimport type { AXMDocumentExplorerNode } from './document-manager.types';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type HomogeneousGridKind = 'folder' | 'document';\n\nexport type HomogeneousGridMatch = {\n kind: HomogeneousGridKind;\n typeKeys: string[];\n};\n\nexport type HomogeneousGridLookup = {\n entity: string;\n valueField: string;\n textField: string;\n};\n\nexport type HomogeneousGridColumn = {\n name: string;\n title: string;\n kind: 'attribute' | 'metadata';\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string' | 'lookup';\n lookup?: HomogeneousGridLookup;\n};\n\n//#endregion\n\n//#region ----- Detect -----\n\nfunction documentTypeKey(type: unknown): string {\n if (type == null) {\n return '';\n }\n if (typeof type !== 'object') {\n return String(type);\n }\n const row = type as Record<string, unknown>;\n const name = row['name'];\n if (typeof name === 'string' && name.trim()) {\n return name.trim();\n }\n const id = row['id'] ?? row['documentTypeId'];\n return id == null ? '' : String(id);\n}\n\nfunction documentTypeSignature(node: AXMDocumentExplorerNode): string {\n return (node.documentTypes ?? [])\n .map((type) => documentTypeKey(type))\n .filter(Boolean)\n .sort()\n .join('|');\n}\n\nexport function resolveHomogeneousExplorerGrid(\n folders: readonly AXMDocumentExplorerNode[],\n files: readonly AXMDocumentExplorerNode[],\n): HomogeneousGridMatch | null {\n const hasFolders = folders.length > 0;\n const hasFiles = files.length > 0;\n if (hasFolders === hasFiles) {\n return null;\n }\n const nodes = hasFolders ? folders : files;\n const signatures = nodes.map((node) => documentTypeSignature(node));\n if (signatures.some((signature) => !signature)) {\n return null;\n }\n if (new Set(signatures).size !== 1) {\n return null;\n }\n return {\n kind: hasFolders ? 'folder' : 'document',\n typeKeys: signatures[0].split('|'),\n };\n}\n\nexport function collectDocumentTypeIds(nodes: readonly AXMDocumentExplorerNode[]): string[] {\n const ids = new Set<string>();\n for (const node of nodes) {\n for (const type of node.documentTypes ?? []) {\n const id = type?.id;\n if (id == null) {\n continue;\n }\n const key = String(id).trim();\n if (key) {\n ids.add(key);\n }\n }\n }\n return [...ids];\n}\n\nexport function collectDocumentTypeNames(nodes: readonly AXMDocumentExplorerNode[]): string[] {\n const names = new Set<string>();\n for (const node of nodes) {\n for (const type of node.documentTypes ?? []) {\n const name = type?.name;\n if (typeof name === 'string' && name.trim()) {\n names.add(name.trim());\n }\n }\n }\n return [...names];\n}\n\n//#endregion\n\n//#region ----- Columns -----\n\nfunction asInterfaceObject(\n interfaceValue: unknown,\n): { type?: unknown; name?: unknown; options?: Record<string, unknown> } | null {\n if (interfaceValue == null) {\n return null;\n }\n if (typeof interfaceValue === 'string') {\n try {\n const parsed = JSON.parse(interfaceValue) as {\n type?: unknown;\n name?: unknown;\n options?: Record<string, unknown>;\n };\n return parsed && typeof parsed === 'object' ? parsed : null;\n } catch {\n return { type: interfaceValue };\n }\n }\n if (typeof interfaceValue === 'object') {\n return interfaceValue as { type?: unknown; name?: unknown; options?: Record<string, unknown> };\n }\n return null;\n}\n\nfunction parseInterfaceType(interfaceValue: unknown): string {\n const iface = asInterfaceObject(interfaceValue);\n if (!iface) {\n return '';\n }\n return String(iface.type ?? iface.name ?? '');\n}\n\nfunction lookupFromInterface(interfaceValue: unknown): HomogeneousGridLookup | undefined {\n const iface = asInterfaceObject(interfaceValue);\n if (!iface) {\n return undefined;\n }\n const type = String(iface.type ?? iface.name ?? '').toLowerCase();\n if (!type.includes('lookup')) {\n return undefined;\n }\n const options = iface.options ?? {};\n const entity = typeof options['entity'] === 'string' ? options['entity'].trim() : '';\n if (!entity) {\n return undefined;\n }\n const valueField =\n typeof options['valueField'] === 'string' && options['valueField'].trim()\n ? options['valueField'].trim()\n : 'id';\n const textField =\n typeof options['textField'] === 'string' && options['textField'].trim()\n ? options['textField'].trim()\n : 'displayName';\n return { entity, valueField, textField };\n}\n\nfunction formatFromInterface(interfaceValue: unknown): HomogeneousGridColumn['format'] {\n if (lookupFromInterface(interfaceValue)) {\n return 'lookup';\n }\n const type = parseInterfaceType(interfaceValue).toLowerCase();\n if (type.includes('date-time') || type.includes('datetime')) {\n return 'datetime';\n }\n if (type.includes('date')) {\n return 'date';\n }\n if (type.includes('number') || type.includes('numeric') || type.includes('integer')) {\n return 'number';\n }\n return 'string';\n}\n\nexport function flattenMetaDataColumns(\n list: AXMMetaDataBuilderValue | null | undefined,\n resolveTitle: (title: unknown) => string,\n): HomogeneousGridColumn[] {\n const columns: HomogeneousGridColumn[] = [];\n const seen = new Set<string>();\n for (const group of list?.groups ?? []) {\n for (const field of group.fields ?? []) {\n const name = String(field?.name ?? '').trim();\n if (!name || seen.has(name)) {\n continue;\n }\n seen.add(name);\n columns.push({\n name,\n title: resolveTitle(field.title) || name,\n kind: 'metadata',\n format: formatFromInterface(field.interface),\n lookup: lookupFromInterface(field.interface),\n });\n }\n }\n return columns;\n}\n\nexport function readNodeMetaDataValue(node: AXMDocumentExplorerNode, fieldName: string): unknown {\n return readMetaDataFormValue(node.metaDataForm, fieldName);\n}\n\nexport function collectLookupKeys(value: unknown, valueField = 'id'): string[] {\n if (value == null || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.flatMap((item) => collectLookupKeys(item, valueField));\n }\n if (typeof value === 'object') {\n const row = value as Record<string, unknown>;\n const id = row[valueField] ?? row['id'];\n return typeof id === 'string' && id.trim() ? [id.trim()] : [];\n }\n if (typeof value === 'string' && value.trim()) {\n return [value.trim()];\n }\n return [];\n}\n\nfunction readMetaDataFormValue(form: unknown, fieldName: string): unknown {\n if (form == null || typeof form !== 'object' || Array.isArray(form)) {\n return undefined;\n }\n const row = form as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(row, fieldName)) {\n return row[fieldName];\n }\n for (const nested of Object.values(row)) {\n const found = readMetaDataFormValue(nested, fieldName);\n if (found !== undefined) {\n return found;\n }\n }\n return undefined;\n}\n\n//#endregion\n","import { AXMenuItem } from '@acorex/components/menu';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXFileService } from '@acorex/core/file';\nimport {\n AXPFileType,\n AXPFileTypeProviderService,\n AXPLockService,\n AXPSettingsService,\n extractFileExtension,\n hasFileTypeOpenHandler,\n isFileNameShownInViewer,\n isFileViewerPreviewExtension,\n resolveExplorerFileDisplayName,\n resolveFileTypeDisplay,\n} from '@acorex-platform/framework-client/common';\nimport {\n fileNameMatchesAccept,\n isUnrestrictedFileAccept,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPActionMenuItem, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\n\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport {\n AXPDocumentManagementSettings,\n resolveDocumentFileDoubleClickAction,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPCommonCommandKeys, isMaintainVersioningPermissionGranted } from '@acorex-platform/module-common-client/contracts';\nimport {\n AXMDocumentManagementCommandKeys,\n AXPContentDocumentsPermissionKeys,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport { explorerNodeAllowsDocumentDistribution } from '../shared/document-distribution.util';\nimport { explorerNodeAllowsDocumentReview } from '../shared/document-review.util';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMDocumentSelectionMode,\n AXPDocumentExplorerViewMode,\n} from '../shared/document-manager.types';\nimport { resolveFolderColor } from '../shared/folder-color.util';\nimport { resolveDocumentVersionNumber } from '../shared/document-version.util';\nimport {\n resolveHomogeneousExplorerGrid,\n type HomogeneousGridMatch,\n} from '../shared/homogeneous-folder-grid.util';\n\nfunction withMenuItemCheck(item: AXMenuItem, isSelected: boolean): AXMenuItem {\n return isSelected ? { ...item, suffix: { text: '✓' } } : item;\n}\n\nfunction nodeModifiedTime(node: AXMDocumentExplorerNode): number {\n const raw = node.modifiedAt;\n if (raw == null) {\n return 0;\n }\n const time = raw instanceof Date ? raw.getTime() : new Date(raw).getTime();\n return Number.isNaN(time) ? 0 : time;\n}\n\n/**\n * User/tenant drive roots are system (cannot be deleted or moved) but users may create\n * children under those roots. Other system folders (Users, Entity, type folders) stay closed.\n * Typed children of Company Document type-containers cannot contain further folders.\n */\nfunction resolveExplorerParent(\n folder: AXMDocumentExplorerNode | null | undefined,\n path: AXMDocumentExplorerNode[],\n): AXMDocumentExplorerNode | null {\n if (!folder) {\n return null;\n }\n const index = path.findIndex((node) => node.id === folder.id);\n return index > 0 ? path[index - 1] : null;\n}\n\nfunction canCreateFolderUnder(\n folder: AXMDocumentExplorerNode | null | undefined,\n scopeRootId: string | null,\n parentFolder?: AXMDocumentExplorerNode | null,\n): boolean {\n if (!folder) {\n return false;\n }\n if (folder.allowChildFolders === false) {\n return false;\n }\n if ((parentFolder?.childFolderDocumentTypes?.length ?? 0) > 0) {\n return false;\n }\n if (!folder.isSystem) {\n return true;\n }\n return Boolean(scopeRootId && folder.id === scopeRootId);\n}\n\n/** Explorer toolbar layout prefs are per-user UI state (IndexedDB user scope). */\nconst DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE = AXPPlatformScope.User;\n\nexport const AXPDocumentExplorerViewModel = signalStore(\n { providedIn: 'root' },\n\n withState(() => ({\n // View State\n viewMode: 'large-icons' as AXPDocumentExplorerViewMode,\n preferredViewMode: 'large-icons' as AXPDocumentExplorerViewMode,\n viewModeLocked: false,\n homogeneousGrid: null as HomogeneousGridMatch | null,\n isLoading: false,\n scope: AXPPlatformScope.User,\n\n // Navigation State\n currentPath: [] as AXMDocumentExplorerNode[],\n currentNode: null as AXMDocumentExplorerNode | null,\n loadingFolderId: null as string | null,\n navigatingFolderId: null as string | null,\n backHistory: [] as { folderId: string; path: AXMDocumentExplorerNode[] }[],\n /** Root folder id resolved by the backend for the current scope (out-of-scope detection). */\n scopeRootId: null as string | null,\n\n // Selection State\n selectionMode: 'none' as AXMDocumentSelectionMode,\n selectedNodes: [] as AXMDocumentExplorerNode[],\n\n // Browse State\n browseMode: 'file' as AXMDocumentExplorerBrowseMode,\n\n // Sort State\n sortField: 'name',\n sortDirection: 'asc',\n\n // Content State\n folders: [] as AXMDocumentExplorerNode[],\n files: [] as AXMDocumentExplorerNode[],\n itemsCount: 0,\n availableSpace: 0,\n\n // Drive State\n currentDrive: null as AXPPlatformScope | null,\n\n // File Type State\n fileTypes: [] as AXPFileType[],\n /** Current file type filter key: 'all' or a file type name from fileTypes. */\n fileTypeFilter: 'all' as string,\n /** Optional HTML accept string (same as device file input) to hide non-matching files. */\n acceptFilter: '' as string,\n // Detail Panel State\n detailPanel: false,\n /** When true, folders and files render in separate labeled sections. */\n groupByType: true,\n /** When set, only these document type names can be selected (create folder) or shown (add item menu). */\n allowedDocumentTypeNames: null as string[] | null,\n })),\n\n withComputed((store) => ({\n isRoot: computed(() => {\n const path = store.currentPath();\n return path.length === 1;\n }),\n\n isVirtual: computed(() => {\n const node = store.currentNode();\n return node?.storageType === 'virtual';\n }),\n\n currentFolder: computed(() => store.currentNode()),\n\n currentFolderContents: computed(() => ({\n folders: store.folders(),\n files: store.files(),\n })),\n\n /** Folders to display: always all folders when filtering by type. */\n filteredFolders: computed(() => store.folders()),\n\n /** Files to display: all files when filter is 'all', otherwise only files whose extension matches the selected type. */\n filteredFiles: computed(() => {\n const filter = store.fileTypeFilter();\n const accept = store.acceptFilter();\n let files = store.files();\n if (filter !== 'all') {\n const type = store.fileTypes().find((t) => t.name === filter);\n if (type?.extensions?.length) {\n const extSet = new Set(type.extensions.map((e) => e.name.toLowerCase()));\n files = files.filter((f) => {\n const displayName = resolveExplorerFileDisplayName(f.name, f.fileId);\n const ext = displayName.split('.').pop()?.toLowerCase() ?? '';\n return extSet.has(ext);\n });\n }\n }\n if (!isUnrestrictedFileAccept(accept)) {\n files = files.filter((f) =>\n fileNameMatchesAccept(resolveExplorerFileDisplayName(f.name, f.fileId), accept),\n );\n }\n return files;\n }),\n\n isLargeTilesView: computed(() => store.viewMode() === 'large-tiles'),\n isSmallTilesView: computed(() => store.viewMode() === 'small-tiles'),\n isListView: computed(() => store.viewMode() === 'list'),\n isDetailsView: computed(() => store.viewMode() === 'details'),\n isLargeIconsView: computed(() => store.viewMode() === 'large-icons'),\n isSmallIconsView: computed(() => store.viewMode() === 'small-icons'),\n canUseHomogeneousGrid: computed(() => store.homogeneousGrid() != null),\n\n isBackAvailable: computed(() => store.backHistory().length > 0),\n isUpAvailable: computed(() => {\n const node = store.currentNode();\n return node?.parentId != null;\n }),\n\n selectedCount: computed(() => store.selectedNodes().length),\n hasSelectedItems: computed(() => store.selectedNodes().length > 0),\n hasMultipleSelectedItems: computed(() => store.selectedNodes().length > 1),\n showSelectionDeleteActions: computed(\n () => store.selectedNodes().length > 1 || (store.viewMode() === 'details' && store.selectedNodes().length > 0),\n ),\n isMultiSelect: computed(() => store.selectionMode() === 'multiple'),\n selectedNode: computed<AXMDocumentExplorerNode | null>(() => store.selectedNodes()[0] ?? null),\n\n isDetailPanelOpen: computed(() => store.detailPanel()),\n // groupByType: computed(() => store.groupByType()),\n })),\n\n withMethods(\n (\n store,\n fileTypeService = inject(AXPFileTypeProviderService),\n fileService = inject(AXFileService),\n driveService = inject(AXMDocumentManagerService),\n commandService = inject(AXPCommandService),\n entityService = inject(AXPEntityService),\n settingsService = inject(AXPSettingsService),\n translateService = inject(AXTranslationService),\n lockService = inject(AXPLockService),\n sessionService = inject(AXPSessionService),\n ) => {\n const documentTypeData = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentType.name)\n .data<string, { id: string; metaDataList?: unknown }>();\n /** In-flight folder load; duplicate requests for the same folder reuse the same promise. */\n let inflightLoad: { folderId: string; promise: Promise<void> } | null = null;\n\n /** Image, PDF, video, and audio can render in the file viewer. Other types cannot. */\n const canPreviewFileInViewer = (node: AXMDocumentExplorerNode): boolean => {\n const displayName = resolveExplorerFileDisplayName(node.name, node.fileId);\n return isFileViewerPreviewExtension(extractFileExtension(displayName));\n };\n\n const applyExplorerNode = (node: {\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n scopeRootId?: string;\n }) => {\n const sortField = store.sortField();\n const sortDirection = store.sortDirection();\n const directionMultiplier = sortDirection === 'asc' ? 1 : -1;\n\n switch (sortField) {\n case 'name':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * a.name.localeCompare(b.name),\n );\n break;\n case 'modified':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * (nodeModifiedTime(a) - nodeModifiedTime(b)),\n );\n break;\n case 'size':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * ((a.size ?? 0) - (b.size ?? 0)),\n );\n break;\n default:\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * a.name.localeCompare(b.name),\n );\n break;\n }\n\n const folders = node.result.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'folder') || [];\n const files =\n node.result.children?.filter(\n (item: AXMDocumentExplorerNode) => store.browseMode() == 'file' && item.type === 'file',\n ) || [];\n\n patchState(store, {\n currentNode: node.result,\n currentPath: node.path,\n folders,\n files,\n itemsCount: node.result.children?.length || 0,\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null,\n scopeRootId: node.scopeRootId ?? store.scopeRootId(),\n ...resolveHomogeneousGridViewState(folders, files),\n });\n };\n\n const resolveHomogeneousGridViewState = (\n folders: AXMDocumentExplorerNode[],\n files: AXMDocumentExplorerNode[],\n ): { homogeneousGrid: HomogeneousGridMatch | null; viewMode: AXPDocumentExplorerViewMode } => {\n const homogeneousGrid = resolveHomogeneousExplorerGrid(folders, files);\n const viewMode = store.viewModeLocked() ? store.viewMode() : store.preferredViewMode();\n return { homogeneousGrid, viewMode };\n };\n\n return {\n setAllowedDocumentTypeNames(names: string[] | null): void {\n patchState(store, { allowedDocumentTypeNames: names });\n },\n\n async initialize(options?: {\n scope?: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n filter?: any;\n }) {\n // Apply route scope synchronously before any await so nested UI (e.g. query-filters effect) cannot\n // navigate while the store still holds the default User scope.\n const scope = options?.scope ?? AXPPlatformScope.User;\n const browseMode = options?.browseMode ?? 'file';\n const scopeChanged = store.scope() !== scope;\n // When switching My Drive ↔ Tenant Documents the same drive component/VM is reused;\n // clear folder state so the previous scope's contents are not shown until reload finishes.\n patchState(store, {\n scope,\n browseMode,\n ...(scopeChanged\n ? {\n currentNode: null,\n currentPath: [],\n folders: [],\n files: [],\n itemsCount: 0,\n backHistory: [],\n navigatingFolderId: null,\n loadingFolderId: null,\n scopeRootId: null,\n selectedNodes: [],\n isLoading: true,\n }\n : {}),\n });\n\n const fileTypes = await fileTypeService.items();\n patchState(store, { fileTypes });\n const layoutSettings = settingsService.scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE);\n const viewMode = await layoutSettings.get(AXPDocumentManagementSettings.ViewMode);\n const sortField = await layoutSettings.get(AXPDocumentManagementSettings.SortField);\n const sortDirection = await layoutSettings.get(AXPDocumentManagementSettings.SortDirection);\n const groupByType = await layoutSettings.get(AXPDocumentManagementSettings.GroupByType);\n const detailPanel = await layoutSettings.get(AXPDocumentManagementSettings.DetailPanelOpen);\n const savedViewMode = viewMode || 'large-icons';\n patchState(store, {\n viewMode: savedViewMode,\n preferredViewMode: savedViewMode,\n sortField: sortField ?? 'name',\n sortDirection: sortDirection ?? 'asc',\n groupByType: groupByType ?? true,\n detailPanel: detailPanel ?? false,\n });\n },\n\n async applyLoadedFolder(node: {\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n scopeRootId?: string;\n }) {\n patchState(store, { loadingFolderId: node.result.id, isLoading: true });\n applyExplorerNode(node);\n patchState(store, { availableSpace: await driveService.getAvailableSpace() });\n this.deselectAll();\n },\n\n _load: (folderId: string): Promise<void> => {\n // Same folder already loading (e.g. router paramMap + navigate effect firing together):\n // reuse the in-flight request instead of issuing a duplicate one.\n if (inflightLoad?.folderId === folderId) {\n return inflightLoad.promise;\n }\n\n patchState(store, { loadingFolderId: folderId, isLoading: true });\n\n const promise = (async () => {\n try {\n const node = await driveService.getFolder(store.scope(), folderId);\n applyExplorerNode(node);\n patchState(store, { availableSpace: await driveService.getAvailableSpace() });\n } catch (error) {\n patchState(store, {\n loadingFolderId: null,\n isLoading: false,\n });\n throw error;\n } finally {\n inflightLoad = null;\n }\n })();\n\n inflightLoad = { folderId, promise };\n return promise;\n },\n\n navigateToFolder(folderId: string) {\n const currentNode = store.currentNode();\n if (currentNode) {\n patchState(store, {\n backHistory: [...store.backHistory(), { folderId: currentNode.id, path: store.currentPath() }],\n });\n }\n patchState(store, { navigatingFolderId: folderId });\n },\n\n async loadFolderContents(folderId: string) {\n await this._load(folderId);\n this.deselectAll();\n },\n\n async virtualFolder(\n files: AXMDocumentExplorerNode[] = [],\n options?: {\n name?: string;\n parentId?: string;\n },\n ) {\n const id = 'virtual';\n patchState(store, {\n loadingFolderId: id,\n isLoading: true,\n });\n\n const node: AXMDocumentExplorerNode = {\n id: id,\n name: options?.name || 'virtual',\n type: 'folder',\n children: files,\n parentId: options?.parentId || null,\n size: 0,\n // TODO\n documentTypes: [],\n storageType: 'virtual',\n };\n const folders = files.filter((item) => item.type === 'folder');\n const virtualFiles = files.filter((item) => item.type === 'file');\n patchState(store, {\n currentNode: node,\n currentPath: [node],\n folders,\n files: virtualFiles,\n itemsCount: files.length,\n availableSpace: await driveService.getAvailableSpace(),\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null,\n ...resolveHomogeneousGridViewState(folders, virtualFiles),\n });\n },\n\n setViewModeLocked(locked: boolean) {\n patchState(store, { viewModeLocked: locked });\n },\n\n setViewMode(mode: AXPDocumentExplorerViewMode | string) {\n const nextMode = mode as AXPDocumentExplorerViewMode;\n const locked = store.viewModeLocked();\n patchState(store, {\n viewMode: nextMode,\n ...(!locked ? { preferredViewMode: nextMode } : {}),\n });\n if (locked) {\n return;\n }\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.ViewMode, nextMode);\n },\n isViewMode(mode: AXPDocumentExplorerViewMode | string) {\n return store.viewMode() === mode;\n },\n\n setSortField(field: string) {\n patchState(store, { sortField: field });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.SortField, field);\n this.refresh();\n },\n\n setSortDirection(direction: string) {\n patchState(store, { sortDirection: direction });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.SortDirection, direction);\n this.refresh();\n },\n setSelectionMode(mode: AXMDocumentSelectionMode | string) {\n patchState(store, { selectionMode: mode as AXMDocumentSelectionMode });\n },\n\n setDrive(scope: AXPPlatformScope) {\n patchState(store, { currentDrive: scope });\n },\n\n /** Sets the file type filter: 'all' or a file type name. Only files with matching extension are shown. */\n setFileTypeFilter(key: string) {\n patchState(store, { fileTypeFilter: key ?? 'all' });\n },\n\n /** Restricts visible files to the same accept list as the device file picker. */\n setAcceptFilter(accept?: string) {\n patchState(store, { acceptFilter: (accept ?? '').trim() });\n },\n\n /** Toggles the explorer loading state (e.g. while a drive search/filter request is in flight). */\n setLoading(isLoading: boolean) {\n patchState(store, {\n isLoading,\n loadingFolderId: isLoading ? 'search' : null,\n });\n },\n\n isLoadingFolder(folderId: string): boolean {\n return store.loadingFolderId() === folderId;\n },\n\n getFileInfo(fileName: string): { icon: string; type: string } {\n const display = resolveFileTypeDisplay(fileName, store.fileTypes());\n return {\n icon: display.icon,\n type: display.typeName,\n };\n },\n\n getFileInfoForNode(node: AXMDocumentExplorerNode): { icon: string; type: string } {\n const displayName = resolveExplorerFileDisplayName(node.name, node.fileId);\n return this.getFileInfo(displayName);\n },\n\n /**\n * Returns display info for any node (file or folder), including shortcut indicator.\n * Use in views to show the correct icon and a Windows-style shortcut arrow when applicable.\n */\n getNodeDisplayInfo(node: AXMDocumentExplorerNode): { icon: string; type: string; isShortcut: boolean } {\n const isShortcut = node.storageType === 'shortcut' || node.isShortcut === true;\n if (node.type === 'file') {\n const info = this.getFileInfoForNode(node);\n return { icon: info.icon, type: info.type, isShortcut };\n }\n return {\n icon: 'fa-light fa-folder',\n type: 'Folder',\n isShortcut,\n };\n },\n\n /** Folder icon accent color from the item (falls back to standard yellow). */\n getFolderColor(node: AXMDocumentExplorerNode): string {\n return resolveFolderColor(node.color);\n },\n\n getNodeInfo(node: AXMDocumentExplorerNode): {\n name: string;\n icon: string;\n type: string;\n sections: {\n title: string;\n details: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[];\n }[];\n } {\n const detailI18n = {\n sections: { details: '@document-management:explorer.detail-panel.sections.details' },\n metadata: '@document-management:terms.common.meta-data',\n description: '@document-management:explorer.detail-panel.fields.description',\n size: '@document-management:terms.common.size',\n expireDate: '@document-management:terms.document.expire-date',\n createdAt: '@document-management:terms.timestamps.created-at',\n modifiedAt: '@document-management:terms.timestamps.modified-at',\n version: '@document-management:terms.common.version',\n items: '@document-management:explorer.grid.columns.items',\n shortcut: '@document-management:explorer.detail-panel.fields.shortcut',\n linksToDocument: '@document-management:explorer.detail-panel.fields.links-to-document',\n linksToFolder: '@document-management:explorer.detail-panel.fields.links-to-folder',\n folderType: '@document-management:explorer.detail-panel.folder-type',\n } as const;\n\n // If no node, return a default object\n if (!node) {\n return {\n name: '---',\n icon: 'fa-light fa-folder',\n type: detailI18n.folderType,\n sections: [\n {\n title: detailI18n.sections.details,\n details: [],\n },\n ],\n };\n }\n\n // If the node is a file, return the file info\n if (node.type === 'file') {\n const displayName = resolveExplorerFileDisplayName(node.name, node.fileId);\n const display = resolveFileTypeDisplay(displayName, store.fileTypes());\n const versionNumber = resolveDocumentVersionNumber(node);\n const details: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[] = [\n {\n title: detailI18n.description,\n content: node.description,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: detailI18n.size,\n content: node.size || 0,\n format: 'filesize',\n icon: 'fa-solid fa-file-lines',\n },\n ...(node.expirationDate\n ? [\n {\n title: detailI18n.expireDate,\n content: node.expirationDate,\n format: 'date' as const,\n icon: 'fa-solid fa-calendar-days',\n },\n ]\n : []),\n {\n title: detailI18n.createdAt,\n content: node.createdAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n {\n title: detailI18n.modifiedAt,\n content: node.modifiedAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n ...(versionNumber != null\n ? [\n {\n title: detailI18n.version,\n content: versionNumber,\n format: 'number' as const,\n icon: 'fa-solid fa-code-branch',\n },\n ]\n : []),\n ];\n if (node.storageType === 'shortcut' || node.isShortcut) {\n details.unshift({\n title: detailI18n.shortcut,\n content: node.targetDocumentId ? detailI18n.linksToDocument : detailI18n.linksToFolder,\n icon: 'fa-light fa-up-right-from-square',\n });\n }\n return {\n name: node.name,\n icon: display.icon,\n type: display.typeName,\n sections:\n node.metaDataForm && typeof node.metaDataForm === 'object'\n ? [\n {\n title: detailI18n.sections.details,\n details,\n },\n {\n title: detailI18n.metadata,\n details: [],\n },\n ]\n : [\n {\n title: detailI18n.sections.details,\n details,\n },\n ],\n };\n }\n // If the node is a folder, return the folder info\n else {\n const folderDetails: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[] = [\n {\n title: detailI18n.description,\n content: node.description,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: detailI18n.items,\n content: node.children?.length ?? 0,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: detailI18n.size,\n content: node.size || 0,\n format: 'filesize',\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: detailI18n.createdAt,\n content: node.createdAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n {\n title: detailI18n.modifiedAt,\n content: node.modifiedAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n ];\n if (node.storageType === 'shortcut' || node.isShortcut) {\n folderDetails.unshift({\n title: detailI18n.shortcut,\n content: detailI18n.linksToFolder,\n icon: 'fa-light fa-up-right-from-square',\n });\n }\n return {\n name: node.name,\n icon: 'fa-light fa-folder',\n type: detailI18n.folderType,\n sections:\n node.metaDataForm && typeof node.metaDataForm === 'object'\n ? [\n {\n title: detailI18n.sections.details,\n details: folderDetails,\n },\n {\n title: detailI18n.metadata,\n details: [],\n },\n ]\n : [\n {\n title: detailI18n.sections.details,\n details: folderDetails,\n },\n ],\n };\n }\n },\n\n sortItems(items: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n const field = store.sortField();\n const direction = store.sortDirection();\n\n return [...items].sort((a, b) => {\n let comparison = 0;\n\n switch (field) {\n case 'name':\n comparison = a.name.localeCompare(b.name);\n break;\n case 'modified':\n comparison = nodeModifiedTime(a) - nodeModifiedTime(b);\n break;\n case 'size':\n comparison = (a.size || 0) - (b.size || 0);\n break;\n }\n\n return direction === 'asc' ? comparison : -comparison;\n });\n },\n\n async refresh() {\n if (!store.isVirtual()) {\n const currentFolder = store.currentNode();\n if (currentFolder) {\n await this._load(currentFolder.id);\n }\n } else {\n patchState(store, { loadingFolderId: 'fake' });\n patchState(store, { loadingFolderId: null });\n }\n },\n\n /**\n * Requests navigation to the parent folder. The host component reacts to\n * `navigatingFolderId` (router navigation or direct load) — no direct load here,\n * otherwise the folder would be fetched twice.\n */\n navigateToUp() {\n const currentNode = store.currentNode();\n const parentId = currentNode?.parentId;\n if (parentId && currentNode) {\n patchState(store, {\n backHistory: [...store.backHistory(), { folderId: currentNode.id, path: store.currentPath() }],\n navigatingFolderId: parentId,\n });\n }\n },\n\n navigateBack() {\n const history = store.backHistory();\n if (history.length === 0) {\n return;\n }\n const lastEntry = history[history.length - 1];\n patchState(store, {\n backHistory: history.slice(0, history.length - 1),\n navigatingFolderId: lastEntry.folderId,\n });\n },\n\n async openFileViewerWithFolderId(): Promise<void> {\n const folderFiles = this.getCurrentFolderFiles();\n if (folderFiles.length > 0) {\n await driveService.showFileViewerPopup(folderFiles[0], { folderFiles });\n }\n },\n\n /**\n * File nodes in the current folder that are eligible for the file viewer.\n * Excludes folders and catalog types with `showInViewer: false` (default is shown).\n */\n getCurrentFolderFiles(): AXMDocumentExplorerNode[] {\n const files =\n store.currentFolder()?.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'file') ??\n store.files() ??\n [];\n const catalog = store.fileTypes();\n return files.filter((item) => {\n const displayName = resolveExplorerFileDisplayName(item.name, item.fileId);\n return isFileNameShownInViewer(displayName, catalog);\n });\n },\n\n //TODO: Delete only one node at a time\n async deleteNodes(nodes: AXMDocumentExplorerNode[] = store.selectedNodes()) {\n const deletable = nodes.filter((node) => !node.isSystem);\n if (deletable.length === 0) {\n return;\n }\n if (store.isVirtual()) {\n patchState(store, {\n files: store.currentFolderContents().files.filter((file) => !deletable.some((node) => node.name === file.name)),\n });\n this.deselectAll();\n } else {\n const result = await driveService.showDeleteNodesDialog(deletable);\n if (result) {\n this.deselectAll();\n await this.refresh();\n }\n }\n },\n\n toggleSelect(node: AXMDocumentExplorerNode) {\n if (\n store.browseMode() === 'file' &&\n store.selectionMode() === 'multiple' &&\n node.type === 'folder'\n ) {\n this.navigateToFolder(node.id);\n return;\n }\n\n if (store.selectionMode() === 'multiple') {\n patchState(store, {\n selectedNodes: store.selectedNodes().includes(node)\n ? store.selectedNodes().filter((n) => n.id !== node.id)\n : [...store.selectedNodes(), node],\n });\n } else {\n patchState(store, { selectedNodes: [node] });\n }\n },\n\n /**\n * Selects the right-clicked item before opening the context menu.\n * Keeps the current selection when the item is already selected (multi-select).\n */\n selectOnContextMenu(node: AXMDocumentExplorerNode) {\n if (!this.isItemSelected(node)) {\n patchState(store, { selectedNodes: [node] });\n }\n },\n\n isItemSelected(node: AXMDocumentExplorerNode): boolean {\n return store.selectedNodes().some((selectedNode) => selectedNode.id === node.id);\n },\n\n selectAll() {\n patchState(store, {\n selectedNodes: [...store.filteredFolders(), ...store.filteredFiles()],\n });\n },\n\n setSelectedNodes(nodes: AXMDocumentExplorerNode[]) {\n patchState(store, { selectedNodes: [...nodes] });\n },\n\n deselectAll() {\n patchState(store, { selectedNodes: [] });\n },\n\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.DetailPanelOpen, true);\n },\n\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.DetailPanelOpen, false);\n },\n\n toggleDetailPanel() {\n const next = !store.detailPanel();\n patchState(store, { detailPanel: next });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.DetailPanelOpen, next);\n },\n\n toggleGroupByType() {\n const next = !store.groupByType();\n patchState(store, { groupByType: next });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.GroupByType, next);\n },\n\n setGroupByType(enabled: boolean) {\n patchState(store, { groupByType: enabled });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.GroupByType, enabled);\n },\n\n //#region Menu Items\n\n async getFolderAddMenuItems({ canAddFolder = true }: { canAddFolder?: boolean } = {}): Promise<\n AXPActionMenuItem[]\n > {\n // Upload types come only from the current folder's assigned documentTypes.\n // Do not fall back to plugin allowedDocumentTypeNames — the entity root has no types;\n // type-specific subfolders carry their own.\n const current = store.currentFolder();\n const folderTypes = current?.documentTypes ?? [];\n const isTypeContainer = (current?.childFolderDocumentTypes?.length ?? 0) > 0;\n const allowedNames = store.allowedDocumentTypeNames();\n const typesToShow = isTypeContainer\n ? []\n : allowedNames != null\n ? allowedNames.length > 0\n ? folderTypes.filter((t) => t?.name && allowedNames.includes(t.name))\n : []\n : folderTypes;\n\n const allowCreateFolder =\n canAddFolder &&\n canCreateFolderUnder(\n current,\n store.scopeRootId(),\n resolveExplorerParent(current, store.currentPath()),\n ) &&\n (await driveService.folderAllowsCreateFolder(current));\n\n return [\n ...(allowCreateFolder\n ? [\n {\n title: await translateService.translateAsync('@document-management:actions.create-folder'),\n icon: 'fa-light fa-folder-plus',\n break: true,\n command: {\n name: 'new-folder',\n options: {\n folderId: store.currentFolder()?.id,\n },\n },\n },\n ]\n : []),\n ...typesToShow.map((type) => ({\n title: translateService.resolve(type.title),\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n command: {\n name: `upload.${type.name}`,\n options: {\n folderId: store.currentFolder()?.id,\n documentType: type,\n },\n },\n })),\n ] as AXPActionMenuItem[];\n },\n\n async getFolderActionMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n name: 'refresh',\n title: await translateService.translateAsync('@document-management:actions.refresh'),\n icon: 'fa-light fa-rotate-right',\n // break: true,\n },\n ];\n },\n\n async getExplorerLayoutMenuItems(): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n\n const sortItems: AXMenuItem[] = [\n withMenuItemCheck(\n {\n name: 'sort.name',\n text: await trans('actions.sort-by-name'),\n icon: 'fa-light fa-font',\n },\n store.sortField() === 'name',\n ),\n withMenuItemCheck(\n {\n name: 'sort.modified',\n text: await trans('actions.sort-by-date'),\n icon: 'fa-light fa-calendar',\n },\n store.sortField() === 'modified',\n ),\n withMenuItemCheck(\n {\n name: 'sort.size',\n text: await trans('actions.sort-by-size'),\n icon: 'fa-light fa-weight-hanging',\n break: true,\n },\n store.sortField() === 'size',\n ),\n withMenuItemCheck(\n {\n name: 'sort.asc',\n text: await trans('actions.sort-ascending'),\n icon: 'fa-light fa-arrow-up-wide-short',\n },\n store.sortDirection() === 'asc',\n ),\n withMenuItemCheck(\n {\n name: 'sort.desc',\n text: await trans('actions.sort-descending'),\n icon: 'fa-light fa-arrow-down-wide-short',\n },\n store.sortDirection() === 'desc',\n ),\n ];\n\n const viewModeItems: AXMenuItem[] = [\n withMenuItemCheck(\n {\n name: 'view.large-icons',\n text: await trans('view-modes.large-icons'),\n icon: 'fa-light fa-grid',\n },\n store.viewMode() === 'large-icons',\n ),\n withMenuItemCheck(\n {\n name: 'view.small-icons',\n text: await trans('view-modes.small-icons'),\n icon: 'fa-light fa-grid',\n break: true,\n },\n store.viewMode() === 'small-icons',\n ),\n withMenuItemCheck(\n {\n name: 'view.large-tiles',\n text: await trans('view-modes.large-tiles'),\n icon: 'fa-light fa-grid-2',\n },\n store.viewMode() === 'large-tiles',\n ),\n withMenuItemCheck(\n {\n name: 'view.small-tiles',\n text: await trans('view-modes.small-tiles'),\n icon: 'fa-light fa-grid-2',\n break: true,\n },\n store.viewMode() === 'small-tiles',\n ),\n withMenuItemCheck(\n {\n name: 'view.list',\n text: await trans('view-modes.list'),\n icon: 'fa-light fa-list',\n },\n store.viewMode() === 'list',\n ),\n withMenuItemCheck(\n {\n name: 'view.details',\n text: await trans('view-modes.details'),\n icon: 'fa-light fa-table',\n break: true,\n },\n store.viewMode() === 'details',\n ),\n ];\n\n const groupByItems: AXMenuItem[] = [\n withMenuItemCheck(\n {\n name: 'group-by.type',\n text: await trans('menus.layout.group-by-type'),\n icon: 'fa-light fa-layer-group',\n },\n store.groupByType(),\n ),\n {\n name: 'group-by.date',\n text: await trans('menus.layout.group-by-date'),\n icon: 'fa-light fa-calendar',\n disabled: true,\n },\n ];\n\n return [\n {\n name: 'sort-menu',\n text: await trans('menus.layout.sort'),\n icon: 'fa-light fa-arrow-down-wide-short',\n items: sortItems,\n },\n {\n name: 'view-menu',\n text: await trans('menus.layout.views'),\n icon: 'fa-light fa-grid-2',\n items: viewModeItems,\n },\n {\n name: 'group-by-menu',\n text: await trans('menus.layout.group-by'),\n icon: 'fa-light fa-layer-group',\n items: groupByItems,\n break: true,\n },\n withMenuItemCheck(\n {\n name: 'toggle-detail-panel',\n text: await trans('menus.layout.show-details-panel'),\n icon: 'fa-light fa-square-info',\n },\n store.detailPanel(),\n ),\n ...(await this.getOpenFileViewerLayoutMenuItem()),\n ];\n },\n\n async getOpenFileViewerLayoutMenuItem(): Promise<AXMenuItem[]> {\n const folderFiles = this.getCurrentFolderFiles();\n if (folderFiles.length === 0) {\n return [];\n }\n\n return [\n {\n name: 'open-file-viewer',\n text: await translateService.translateAsync('@document-management:actions.open-file-viewer'),\n icon: 'fa-light fa-file-lines',\n data: { folderId: store.currentFolder()?.id },\n },\n ];\n },\n\n async getRootContextMenuItems({ canAddFolder = true }: { canAddFolder?: boolean } = {}): Promise<AXMenuItem[]> {\n const items: AXMenuItem[] = [];\n\n const addItem = await this.buildAddItemContextMenuEntry({ canAddFolder });\n if (addItem) {\n items.push(addItem);\n }\n\n const layoutItems = await this.getExplorerLayoutMenuItems();\n const actionItems = (await this.getFolderActionMenuItems()).map((item) => ({\n name: item.name,\n text: item.title,\n icon: item.icon,\n })) as AXMenuItem[];\n\n items.push(...layoutItems, ...actionItems);\n if (items.length > 0) {\n items[items.length - 1].break = false;\n }\n return items;\n },\n\n async buildAddItemContextMenuEntry({\n canAddFolder = true,\n }: { canAddFolder?: boolean } = {}): Promise<AXMenuItem | null> {\n const addMenuItems = await this.getFolderAddMenuItems({ canAddFolder });\n if (addMenuItems.length === 0) {\n return null;\n }\n\n const childItems = addMenuItems.map((item, index, array) => ({\n name: item.command?.name ?? item.name,\n text: item.title,\n icon: item.icon,\n data: item.command?.options,\n break: index < array.length - 1 && item.command?.name === 'new-folder',\n })) as AXMenuItem[];\n\n return {\n name: 'add-item',\n text: await translateService.translateAsync('@document-management:actions.add-item'),\n icon: 'fa-light fa-plus',\n break: true,\n items: childItems,\n };\n },\n\n //#endregion\n\n //#region Context Menu Items\n\n async getContextMenuItems(): Promise<AXPActionMenuItem[]> {\n const addItemItems = await this.getFolderAddMenuItems();\n if (addItemItems.length === 0) {\n return [...(await this.getFolderActionMenuItems())];\n }\n\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: await translateService.translateAsync('@document-management:actions.add-item'),\n icon: 'fa-light fa-plus',\n items: addItemItems,\n },\n ...(await this.getFolderActionMenuItems()),\n ];\n },\n\n //#endregion\n\n //#region ---- Menu Items ----\n\n async buildFileVersioningContextMenu(\n node: AXMDocumentExplorerNode,\n trans: (key: string) => Promise<string>,\n ): Promise<AXMenuItem | null> {\n if (!node.versioningEnabled || node.type !== 'file' || node.storageType === 'shortcut') {\n return null;\n }\n\n const canMaintainVersioning = isMaintainVersioningPermissionGranted(\n (key) => sessionService.authorize(key),\n `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n );\n if (!canMaintainVersioning) {\n return null;\n }\n\n const draft = await driveService.findOpenVersionDraft(node.id);\n const versionItems: AXMenuItem[] = [];\n if (!draft) {\n versionItems.push({\n name: 'create-version-draft',\n text: await trans('menus.context.new-version'),\n icon: 'fa-light fa-code-branch',\n data: node,\n });\n } else {\n versionItems.push(\n {\n name: 'upload-new-version',\n text: await trans('menus.context.upload-new-version'),\n icon: 'fa-light fa-file-circle-plus',\n data: node,\n },\n {\n name: 'publish-version',\n text: await trans('menus.context.publish-version'),\n icon: 'fa-light fa-cloud-arrow-up',\n data: node,\n },\n {\n name: 'delete-version-draft',\n text: await trans('menus.context.delete-draft'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n );\n }\n\n const lastItem = versionItems[versionItems.length - 1];\n if (lastItem) {\n lastItem.break = true;\n }\n versionItems.push({\n name: 'show-version-history',\n text: await trans('menus.context.show-version-history'),\n icon: 'fa-light fa-clock-rotate-left',\n data: node,\n });\n\n return {\n name: 'manage-versions',\n text: await trans('menus.context.manage-versions'),\n icon: 'fa-light fa-code-branch',\n items: versionItems,\n break: true,\n };\n },\n\n /**\n * Returns menu items for file context menu\n */\n async getFileContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n const isLocked = async () => await this.isLocked(node);\n // const isNodeLocked = false;\n\n const displayName = resolveExplorerFileDisplayName(node.name, node.fileId);\n const catalog = await fileTypeService.items();\n const canOpen = await hasFileTypeOpenHandler({\n fileName: displayName,\n catalog,\n fileService,\n payload: node,\n });\n const canShowInViewer = isFileNameShownInViewer(displayName, catalog);\n\n const versionMenu = await this.buildFileVersioningContextMenu(node, trans);\n const distributionLoader = {\n byNames: (names: string[]) => driveService.getDocumentTypesByNames(names),\n byKey: (id: string) => documentTypeData.byKey(id),\n };\n const canDistribute =\n sessionService.authorize(AXPContentDocumentsPermissionKeys.DistributeDocuments) &&\n (await explorerNodeAllowsDocumentDistribution(node, distributionLoader));\n const canRequestReview =\n sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview) &&\n (await explorerNodeAllowsDocumentReview(node, {\n byNames: (names) => driveService.getDocumentTypesByNames(names),\n byKey: (id) => documentTypeData.byKey(id),\n }));\n\n const actionItems: AXMenuItem[] = [];\n if (canDistribute) {\n actionItems.push({\n name: 'distribute',\n text: await trans('menus.context.distribute'),\n icon: 'fa-light fa-paper-plane',\n data: node,\n });\n }\n if (canRequestReview) {\n actionItems.push({\n name: 'request-review',\n text: await trans('menus.context.request-review'),\n icon: 'fa-light fa-file-check',\n data: node,\n });\n }\n\n const menuItems: AXMenuItem[] = [\n ...(canOpen\n ? [\n {\n name: 'open-file',\n text: await trans('menus.context.open'),\n icon: this.getFileInfoForNode(node).icon,\n data: node,\n },\n ]\n : []),\n ...(canShowInViewer\n ? [\n {\n name: 'open-file-viewer',\n text: await trans('actions.open-file-viewer'),\n icon: 'fa-light fa-file-lines',\n data: node,\n },\n ]\n : []),\n ...(versionMenu ? [versionMenu] : []),\n ...(actionItems.length\n ? [\n {\n name: 'actions',\n text: await trans('menus.context.actions'),\n icon: 'fa-light fa-bolt',\n items: actionItems,\n },\n ]\n : []),\n {\n name: 'download',\n text: await trans('menus.context.download'),\n icon: 'fa-light fa-download',\n data: node,\n },\n ...(node.storageType !== 'shortcut' && !node.isShortcut\n ? [\n {\n name: 'create-shortcut',\n text: await trans('menus.context.create-shortcut'),\n icon: 'fa-light fa-up-right-from-square',\n data: node,\n },\n ]\n : []),\n {\n name: 'share',\n text: await trans('menus.context.share.share'),\n icon: 'fa-light fa-share-nodes',\n items: [\n {\n name: 'share',\n text: await trans('menus.context.share.share'),\n icon: 'fa-light fa-users',\n data: node,\n },\n {\n name: 'share-with-email',\n text: await trans('menus.context.share.email'),\n icon: 'fa-light fa-envelope',\n data: node,\n },\n {\n name: 'link',\n text: await trans('menus.context.share.link'),\n icon: 'fa-light fa-link',\n data: node,\n },\n ],\n break: true,\n },\n ];\n\n // Information submenu items\n const infoSubItems: AXMenuItem[] = [\n {\n name: 'properties',\n text: await trans('menus.context.properties'),\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n ];\n\n // Add rename only if not locked\n // if (!isNodeLocked) {\n // infoSubItems.unshift({\n // name: 'rename',\n // text: await trans('menu.rename'),\n // icon: 'fa-light fa-pencil',\n // data: node,\n // });\n // }\n\n //Add lock or unlock based on current state\n // if (isNodeLocked) {\n infoSubItems.push({\n name: 'unlock',\n text: await trans('menus.context.unlock'),\n icon: 'fa-light fa-unlock',\n data: node,\n });\n // } else {\n infoSubItems.push({\n name: 'lock',\n text: await trans('menus.context.lock'),\n icon: 'fa-light fa-lock',\n data: node,\n });\n // }\n\n menuItems.push({\n name: 'file-info',\n text: await trans('menus.context.information'),\n icon: 'fa-light fa-circle-info',\n items: infoSubItems,\n break: true,\n });\n\n // Add copy/move/delete operations only if not locked\n menuItems.push(\n {\n name: 'copy',\n text: await trans('menus.context.make-copy'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: await trans('menus.context.copy-to'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'move-to',\n text: await trans('menus.context.move-to'),\n icon: 'fa-light fa-arrow-right-arrow-left',\n break: true,\n data: node,\n },\n {\n name: 'delete',\n text: await trans('menus.context.delete'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n );\n\n return menuItems;\n },\n\n /**\n * Returns menu items for folder context menu\n */\n async getFolderContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n // const isNodeLocked = await this.isLocked(node);\n const isNodeLocked = false;\n\n const items: AXMenuItem[] = [\n {\n name: 'open-folder',\n text: await trans('menus.context.open'),\n icon: 'fa-light fa-folder-open',\n data: node,\n },\n ];\n\n const distributionLoader = {\n byNames: (names: string[]) => driveService.getDocumentTypesByNames(names),\n byKey: (id: string) => documentTypeData.byKey(id),\n };\n const canDistribute =\n sessionService.authorize(AXPContentDocumentsPermissionKeys.DistributeDocuments) &&\n (await explorerNodeAllowsDocumentDistribution(node, distributionLoader));\n const canRequestReview =\n sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview) &&\n (await explorerNodeAllowsDocumentReview(node, {\n byNames: (names) => driveService.getDocumentTypesByNames(names),\n byKey: (id) => documentTypeData.byKey(id),\n }));\n const actionItems: AXMenuItem[] = [];\n if (canDistribute) {\n actionItems.push({\n name: 'distribute',\n text: await trans('menus.context.distribute'),\n icon: 'fa-light fa-paper-plane',\n data: node,\n });\n }\n if (canRequestReview) {\n actionItems.push({\n name: 'request-review',\n text: await trans('menus.context.request-review'),\n icon: 'fa-light fa-file-check',\n data: node,\n });\n }\n if (actionItems.length) {\n items.push({\n name: 'actions',\n text: await trans('menus.context.actions'),\n icon: 'fa-light fa-bolt',\n items: actionItems,\n });\n }\n\n // Add upload menu only if not locked\n if (!isNodeLocked && node?.documentTypes?.length && !node.childFolderDocumentTypes?.length) {\n items.push({\n text: await trans('menus.context.upload'),\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n items: node.documentTypes.map((type, index, array) => ({\n name: `upload.${type.name}`,\n text: translateService.resolve(type.title),\n icon: 'fa-light fa-file-arrow-up',\n break: index !== array.length - 1,\n data: {\n node,\n documentType: type,\n },\n })),\n });\n }\n\n // Information submenu items\n const infoSubItems: AXMenuItem[] = [\n {\n name: 'properties',\n text: await trans('menus.context.properties'),\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n ];\n\n // Add rename only if not locked\n if (!isNodeLocked) {\n infoSubItems.unshift({\n name: 'rename',\n text: await trans('menus.context.rename'),\n icon: 'fa-light fa-pencil',\n data: node,\n });\n }\n\n // Add lock or unlock based on current state\n if (isNodeLocked) {\n infoSubItems.push({\n name: 'unlock',\n text: await trans('menus.context.unlock'),\n icon: 'fa-light fa-unlock',\n data: node,\n });\n } else {\n infoSubItems.push({\n name: 'lock',\n text: await trans('menus.context.lock'),\n icon: 'fa-light fa-lock',\n data: node,\n });\n }\n\n items.push({\n name: 'folder-info',\n text: await trans('menus.context.information'),\n icon: 'fa-light fa-circle-info',\n items: infoSubItems,\n break: true,\n });\n\n // Add copy/move/delete operations only if not locked\n if (!isNodeLocked) {\n const isSystemFolder = Boolean(node.isSystem);\n items.push(\n {\n name: 'copy',\n text: await trans('menus.context.make-copy'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: await trans('menus.context.copy-to'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n ...(isSystemFolder\n ? []\n : [\n {\n name: 'move-to',\n text: await trans('menus.context.move-to'),\n icon: 'fa-light fa-arrow-right-arrow-left',\n data: node,\n },\n ]),\n ...(node.storageType !== 'shortcut' && !node.isShortcut\n ? [\n {\n name: 'create-shortcut',\n text: await trans('menus.context.create-shortcut'),\n icon: 'fa-light fa-up-right-from-square',\n data: node,\n },\n ]\n : []),\n ...(isSystemFolder\n ? []\n : [\n {\n name: 'delete',\n text: await trans('menus.context.delete'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n ]),\n );\n }\n\n return items;\n },\n\n /**\n * Returns context menu items based on node type\n */\n async getNodeContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n if (node.type === 'file') {\n return await this.getFileContextMenuItems(node);\n } else {\n return await this.getFolderContextMenuItems(node);\n }\n },\n\n //#endregion\n\n //#region ---- Menu Actions ----\n\n /**\n * Opens a drive file via DocumentManagement.Document:Open\n * (catalog open handler when available; otherwise download).\n */\n async openFile(node: AXMDocumentExplorerNode): Promise<void> {\n await commandService.execute('DocumentManagement.Document:Open', {\n data: node,\n documentId: node.id,\n });\n },\n\n /**\n * Handles all menu item clicks\n */\n async handleMenuItemClick(name: string, data: any): Promise<void> {\n const node = data as AXMDocumentExplorerNode;\n switch (name) {\n case 'open-folder':\n this.navigateToFolder(node.id);\n break;\n case 'open-file':\n await this.openFile(node);\n break;\n case 'open-file-viewer':\n if (data?.folderId != null) {\n await this.openFileViewerWithFolderId();\n } else {\n await this.openFileViewer(node);\n }\n break;\n case 'download':\n this.downloadFile(node);\n break;\n case 'new-folder':\n await this.createFolder(node);\n break;\n case 'paste':\n //TODO: Handle paste operation\n break;\n case 'move-to':\n await this.moveTo(node);\n break;\n case 'copy-to':\n await this.copyTo(node);\n break;\n case 'create-shortcut':\n await this.createShortcut(node);\n break;\n case 'rename':\n await this.renameNode(node);\n break;\n case 'properties':\n await this.showFolderProperty(node);\n break;\n case 'delete':\n await this.deleteNodes([node]);\n break;\n case 'refresh':\n await this.refresh();\n break;\n case 'toggle-group-by-type':\n case 'group-by.type':\n this.toggleGroupByType();\n break;\n case 'toggle-detail-panel':\n this.toggleDetailPanel();\n break;\n case 'sort.name':\n this.setSortField('name');\n break;\n case 'sort.modified':\n this.setSortField('modified');\n break;\n case 'sort.size':\n this.setSortField('size');\n break;\n case 'sort.asc':\n this.setSortDirection('asc');\n break;\n case 'sort.desc':\n this.setSortDirection('desc');\n break;\n case 'view.large-icons':\n case 'view.small-icons':\n case 'view.large-tiles':\n case 'view.small-tiles':\n case 'view.list':\n case 'view.details':\n this.setViewMode(name.replace('view.', ''));\n break;\n case 'upload-new-version':\n await driveService.runUploadNewVersionFlow(node);\n await this.refresh();\n break;\n case 'create-version-draft':\n await driveService.runNewVersionFlow(node);\n await this.refresh();\n break;\n case 'publish-version':\n await commandService.execute(AXPCommonCommandKeys.Versioning.Publish, {\n refId: node.id,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n });\n await this.refresh();\n break;\n case 'delete-version-draft':\n await commandService.execute(AXPCommonCommandKeys.Versioning.DeleteDraft, {\n refId: node.id,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n });\n await this.refresh();\n break;\n case 'distribute':\n await commandService.execute(AXMDocumentManagementCommandKeys.DocumentDistribute, {\n data: node,\n documentId: node.type === 'file' ? node.id : undefined,\n folderId: node.type === 'folder' ? node.id : undefined,\n });\n break;\n case 'request-review':\n await commandService.execute(AXMDocumentManagementCommandKeys.DocumentReviewRequest, {\n data: node,\n documentId: node.type === 'file' ? node.id : undefined,\n folderId: node.type === 'folder' ? node.id : undefined,\n });\n break;\n case 'show-version-history':\n await driveService.showVersionHistory(node);\n break;\n case 'copy':\n await this.makeCopy(node);\n break;\n /*\n case 'share':\n await this.share(node);\n break;\n case 'share-with-email':\n await this.shareWithEmail(node);\n break;\n case 'link':\n await this.link(node);\n break;\n */\n case 'lock':\n await this.lock(node);\n break;\n case 'unlock':\n await this.unlock(node);\n break;\n default:\n if (name?.startsWith('upload.')) {\n await this.uploadFileByType(data.node?.id ?? store.currentNode()?.id, data.documentType.id);\n }\n break;\n }\n },\n\n /**\n * Downloads the specified file\n */\n downloadFile(node: AXMDocumentExplorerNode): void {\n driveService.downloadFile(node);\n },\n\n /**\n * File double-click in every explorer view.\n * Default opens the file viewer. The user setting can always download,\n * or open the viewer only when the file can be previewed.\n */\n async openFileOnDoubleClick(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type !== 'file') {\n return;\n }\n const saved = await settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .get(AXPDocumentManagementSettings.FileDoubleClickAction);\n const action = resolveDocumentFileDoubleClickAction(saved);\n if (action === 'download' || (action === 'view-or-download' && !canPreviewFileInViewer(node))) {\n this.downloadFile(node);\n return;\n }\n await this.openFileViewer(node);\n },\n\n /**\n * Opens the file viewer for the current folder, starting at the selected file.\n */\n async openFileViewer(node: AXMDocumentExplorerNode): Promise<void> {\n const folderFiles = this.getCurrentFolderFiles();\n if (folderFiles.length === 0) {\n return;\n }\n\n await driveService.showFileViewerPopup(node, { folderFiles });\n },\n\n /**\n * Shows properties for a folder\n */\n async showFolderProperty(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type == 'folder') {\n if (await driveService.showFolderEditDialog(node)) {\n await this.refresh();\n }\n } else {\n if (await driveService.updateUploadFileByType(node)) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Creates a new folder\n */\n async createFolder(node?: AXMDocumentExplorerNode): Promise<void> {\n const parent = node ?? store.currentFolder() ?? store.currentNode();\n if (\n !canCreateFolderUnder(\n parent,\n store.scopeRootId(),\n resolveExplorerParent(parent, store.currentPath()),\n ) ||\n !(await driveService.folderAllowsCreateFolder(parent))\n ) {\n return;\n }\n const parentId = parent?.id ?? store.currentNode()?.id;\n if (parentId) {\n const allowedNames = store.allowedDocumentTypeNames();\n\n const result = await driveService.showCreateFolderDialog(parentId, {\n allowedDocumentTypeNames: allowedNames ?? undefined,\n });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Renames a node\n */\n async renameNode(node?: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined> {\n if (node) {\n const result = await driveService.showRenamePopup(node);\n if (result) {\n if (node.storageType == 'virtual') {\n const files = store.files();\n const updatedFiles = files.map((file) => {\n if (file.id === result.id) {\n return result;\n }\n return file;\n });\n this.virtualFolder(updatedFiles);\n }\n await this.refresh();\n }\n return result;\n }\n return;\n },\n\n /**\n * Makes a copy of a node\n */\n async makeCopy(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n try {\n await driveService.copy(node);\n await this.refresh();\n } catch (error) {\n console.error('Error copying node:', error);\n }\n }\n },\n\n /**\n * Checks if a node is locked\n */\n async isLocked(node: AXMDocumentExplorerNode): Promise<boolean> {\n try {\n return lockService.check({\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n } catch (error) {\n console.error('Error checking lock status:', error);\n return false;\n }\n },\n\n /**\n * Locks a node\n */\n async lock(node: AXMDocumentExplorerNode): Promise<void> {\n const locked = await driveService.showLockDialog(node);\n if (locked) {\n await this.refresh();\n }\n },\n\n /**\n * Unlocks a node\n */\n async unlock(node: AXMDocumentExplorerNode): Promise<void> {\n const unlocked = await driveService.showUnlockDialog(node);\n if (unlocked) {\n await this.refresh();\n }\n },\n\n /**\n * Moves a node to a different location\n */\n async moveTo(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node?.isSystem) {\n return;\n }\n if (node) {\n const result = await driveService.moveTo({ browseMode: 'folder', node: node, scope: store.scope() });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Copies a node to a different location\n */\n async copyTo(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const result = await driveService.copyTo({ browseMode: 'folder', node: node, scope: store.scope() });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Creates a shortcut to the node in a folder chosen by the user.\n */\n async createShortcut(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const created = await driveService.createShortcutWithPicker(node, store.scope());\n if (created) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Uploads a file by type\n */\n async uploadFileByType(folderId: string, documentTypeId: string): Promise<void> {\n const success = await driveService.uploadFileByType(folderId, documentTypeId, {\n scope: store.scope(),\n });\n if (success) {\n await this.refresh();\n }\n },\n\n //#endregion\n };\n },\n ),\n);\n","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { AXPDocumentExplorerViewModel } from '../../document-explorer.viewmodel';\n\n@Component({\n selector: 'axm-document-explorer-large-tiles-view-skeleton',\n templateUrl: './large-tiles-view-skeleton.component.html',\n styleUrl: './large-tiles-view-skeleton.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXSkeletonModule, AXTranslationModule],\n})\nexport class AXMDocumentExplorerLargeTilesViewSkeletonComponent {\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n\n protected readonly folderPlaceholders = [0, 1, 2];\n protected readonly filePlaceholders = [0, 1];\n protected readonly flatPlaceholders = [0, 1, 2, 3, 4];\n}\n","@if (vm.groupByType()) {\n <div class=\"__section\">\n <div class=\"__header\">\n <h3 class=\"__title\">{{ '@document-management:terms.common.folders' | translate | async }}</h3>\n </div>\n <div class=\"__content\">\n @for (item of folderPlaceholders; track item) {\n <div class=\"__item\">\n <ax-skeleton [animated]=\"true\" class=\"__icon\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__name\"></ax-skeleton>\n <div class=\"__info\">\n <ax-skeleton [animated]=\"true\" class=\"__meta\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__meta --short\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"__section\">\n <div class=\"__header\">\n <h3 class=\"__title\">{{ '@document-management:terms.common.files' | translate | async }}</h3>\n </div>\n <div class=\"__content\">\n @for (item of filePlaceholders; track item) {\n <div class=\"__item\">\n <ax-skeleton [animated]=\"true\" class=\"__icon\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__name\"></ax-skeleton>\n <div class=\"__info\">\n <ax-skeleton [animated]=\"true\" class=\"__meta\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__meta --short\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <div class=\"__section\">\n <div class=\"__content\">\n @for (item of flatPlaceholders; track item) {\n <div class=\"__item\">\n <ax-skeleton [animated]=\"true\" class=\"__icon\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__name\"></ax-skeleton>\n <div class=\"__info\">\n <ax-skeleton [animated]=\"true\" class=\"__meta\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__meta --short\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXMFileTypeModule } from '../file-type/file-type.module';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, input, signal, Type, viewChild, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { get } from 'lodash';\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMDocumentSelectionMode,\n AXPDocumentExplorerViewMode,\n} from '../shared/document-manager.types';\nimport { AXPDocumentExplorerViewModel } from './document-explorer.viewmodel';\nimport { AXMDocumentExplorerLargeTilesViewSkeletonComponent } from './views/large-tiles/large-tiles-view-skeleton.component';\n@Component({\n selector: 'axm-document-explorer',\n templateUrl: './document-explorer.component.html',\n styleUrls: ['./document-explorer.component.css'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'flex min-h-0 min-w-0 flex-1 flex-col',\n '(click)': 'handleExplorerClick($event)',\n '(contextmenu)': 'handleExplorerContextMenu($event)',\n },\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n CommonModule,\n RouterModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXFormatModule,\n AXDateTimeModule,\n AXMenuModule,\n AXMFileTypeModule,\n AXPStateMessageComponent,\n AXMDocumentExplorerLargeTilesViewSkeletonComponent,\n ],\n})\nexport class AXMDocumentExplorerComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected contextMenu = viewChild<AXContextMenuComponent>('itemsContextMenu');\n protected rootContextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n protected driveService = inject(AXMDocumentManagerService);\n protected translateService = inject(AXTranslationService);\n protected readonly layout = inject(AXPLayoutThemeService);\n\n browseMode = input<AXMDocumentExplorerBrowseMode>('file');\n viewMode = input<AXPDocumentExplorerViewMode>();\n selectionMode = input<AXMDocumentSelectionMode>('none');\n showContextMenu = input<boolean>(true);\n\n protected view = signal<Type<any> | null>(null);\n protected skeletonView = signal<Type<any> | null>(null);\n\n protected showSkeleton = computed(() => this.vm.isLoading() || this.vm.currentNode() == null);\n\n protected showEmptyState = computed(\n () =>\n !this.showSkeleton() &&\n this.vm.filteredFolders().length === 0 &&\n this.vm.filteredFiles().length === 0,\n );\n\n /** Drops stale async open results when the user right-clicks again before items resolve. */\n private contextMenuOpenToken = 0;\n\n private viewMap = {\n list: async () => (await import('./views/list/list-view.component')).AXMDocumentExplorerListViewComponent,\n 'small-tiles': async () =>\n (await import('./views/small-tiles/small-tiles-view.component')).AXMDocumentExplorerSmallTilesViewComponent,\n 'large-tiles': async () =>\n (await import('./views/large-tiles/large-tiles-view.component')).AXMDocumentExplorerLargeTilesViewComponent,\n details: async () =>\n (await import('./views/details/details-view.component')).AXMDocumentExplorerDetailsViewComponent,\n 'large-icons': async () =>\n (await import('./views/large-icons/large-icons-view.component')).AXMDocumentExplorerLargeIconsViewComponent,\n 'small-icons': async () =>\n (await import('./views/small-icons/small-icons-view.component')).AXMDocumentExplorerSmallIconsViewComponent,\n 'attachment': async () =>\n (await import('./views/attachement-widget/attachment-widget.component')).AXMDocumentExplorerAttachmentComponent,\n };\n\n private skeletonViewMap = {\n list: async () =>\n (await import('./views/list/list-view-skeleton.component')).AXMDocumentExplorerListViewSkeletonComponent,\n 'small-tiles': async () =>\n (await import('./views/small-tiles/small-tiles-view-skeleton.component'))\n .AXMDocumentExplorerSmallTilesViewSkeletonComponent,\n 'large-tiles': async () =>\n (await import('./views/large-tiles/large-tiles-view-skeleton.component'))\n .AXMDocumentExplorerLargeTilesViewSkeletonComponent,\n details: async () =>\n (await import('./views/details/details-view-skeleton.component')).AXMDocumentExplorerDetailsViewSkeletonComponent,\n 'large-icons': async () =>\n (await import('./views/large-icons/large-icons-view-skeleton.component'))\n .AXMDocumentExplorerLargeIconsViewSkeletonComponent,\n 'small-icons': async () =>\n (await import('./views/small-icons/small-icons-view-skeleton.component'))\n .AXMDocumentExplorerSmallIconsViewSkeletonComponent,\n attachment: async () =>\n (await import('./views/attachement-widget/attachment-view-skeleton.component'))\n .AXMDocumentExplorerAttachmentViewSkeletonComponent,\n };\n\n #effect2 = effect(() => {\n if (this.viewMode()) {\n this.vm.setViewModeLocked(true);\n this.vm.setViewMode(this.viewMode()!);\n }\n if (this.selectionMode()) {\n this.vm.setSelectionMode(this.selectionMode()!);\n }\n });\n\n #effect3 = effect(async () => {\n const mode = this.vm.viewMode() as string;\n const viewLoader = get(this.viewMap, mode) ?? this.viewMap['large-tiles'];\n const skeletonLoader = get(this.skeletonViewMap, mode) ?? this.skeletonViewMap['large-tiles'];\n const [comp, skeletonComp] = await Promise.all([viewLoader(), skeletonLoader()]);\n this.view.set(comp);\n this.skeletonView.set(skeletonComp);\n });\n\n //#region Menu and Context Menu\n\n protected handleExplorerClick(event: MouseEvent) {\n const target = event.target as HTMLElement | null;\n if (target?.closest('.__explorer-item, .details-view')) {\n return;\n }\n\n if (this.vm.hasSelectedItems()) {\n this.vm.deselectAll();\n }\n }\n\n /**\n * Builds menu items first, then calls `showAt` with a prefilled event.\n * `AXContextMenuComponent` applies `items` synchronously after `onOpening`, so async\n * `(onOpening)` handlers leave the menu empty.\n */\n protected async handleExplorerContextMenu(event: MouseEvent) {\n if (!this.showContextMenu()) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const openToken = ++this.contextMenuOpenToken;\n const point = { x: event.clientX, y: event.clientY };\n const target = event.target as HTMLElement | null;\n const itemEl = this.resolveExplorerItemElement(target);\n\n if (itemEl) {\n const node = this.resolveExplorerNode(itemEl);\n if (!node) {\n return;\n }\n\n this.vm.selectOnContextMenu(node);\n const items = await this.vm.getNodeContextMenuItems(node);\n if (openToken !== this.contextMenuOpenToken) {\n return;\n }\n\n const menu = this.contextMenu();\n if (!menu) {\n return;\n }\n\n await menu.showAt(point, itemEl, {\n sender: menu,\n canceled: false,\n targetElement: itemEl,\n items,\n } as AXContextMenuOpeningEvent);\n return;\n }\n\n if (this.vm.hasSelectedItems()) {\n this.vm.deselectAll();\n }\n\n const items = await this.vm.getRootContextMenuItems();\n if (openToken !== this.contextMenuOpenToken) {\n return;\n }\n\n const menu = this.rootContextMenu();\n if (!menu) {\n return;\n }\n\n const rootEl = (target?.closest('.view-container') as HTMLElement | null) ?? target ?? undefined;\n await menu.showAt(point, rootEl, {\n sender: menu,\n canceled: false,\n targetElement: rootEl as HTMLElement,\n items,\n } as AXContextMenuOpeningEvent);\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n await this.vm.handleMenuItemClick(e.item.name, e.item.data);\n }\n }\n\n private resolveExplorerItemElement(target: HTMLElement | null): HTMLElement | null {\n const itemEl = target?.closest('.__explorer-item') as HTMLElement | null;\n if (itemEl) {\n return itemEl;\n }\n const tableRow = target?.closest('tr') as HTMLElement | null;\n if (!tableRow) {\n return null;\n }\n const fromRow = tableRow.querySelector('.__explorer-item') as HTMLElement | null;\n if (fromRow) {\n return fromRow;\n }\n const rowId = tableRow.getAttribute('data-id') ?? tableRow.getAttribute('id');\n if (!rowId) {\n return null;\n }\n return this.vm.filteredFolders().concat(this.vm.filteredFiles()).find((node) => node.id === rowId)\n ? tableRow\n : null;\n }\n\n private resolveExplorerNode(itemEl: HTMLElement): AXMDocumentExplorerNode | undefined {\n const fromElement = (get(itemEl, '__data__') ?? get(itemEl.closest?.('.__explorer-item'), '__data__')) as\n | AXMDocumentExplorerNode\n | undefined;\n if (fromElement) {\n return fromElement;\n }\n const rowId = itemEl.getAttribute('data-id') ?? itemEl.getAttribute('id');\n if (!rowId) {\n return undefined;\n }\n return this.vm.filteredFolders().concat(this.vm.filteredFiles()).find((node) => node.id === rowId);\n }\n\n //#endregion\n}\n","<div class=\"view-container\">\n @if (showSkeleton()) {\n @if (skeletonView(); as skeleton) {\n <ng-container [ngComponentOutlet]=\"skeleton\"></ng-container>\n } @else {\n <axm-document-explorer-large-tiles-view-skeleton></axm-document-explorer-large-tiles-view-skeleton>\n }\n } @else if (showEmptyState()) {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@document-management:empty-states.no-items.title'\"\n [description]=\"'@document-management:empty-states.no-items.description'\"\n >\n </axp-state-message>\n } @else {\n <ng-container [ngComponentOutlet]=\"view()\"></ng-container>\n }\n</div>\n\n<!-- Context Menu: opened via host contextmenu after items are resolved (not via [target]/onOpening). -->\n@if (showContextMenu()) {\n <ax-context-menu\n #itemsContextMenu\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n <ax-context-menu\n #rootContextMenu\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n}\n","import { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-client/contracts';\nimport { AXPLayoutSideDetailPanelComponent, AXPLayoutSideDetailPanelSectionDirective, type AXPLayoutSideDetailPanelHeader, type AXPLayoutSideDetailPanelSection } from '@acorex-platform/framework-client/layout/components';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDocumentExplorerViewModel } from '../../document-explorer.viewmodel';\nimport { AXMDocumentExplorerNode } from '../../../shared/document-manager.types';\nimport { folderColorToRgbChannels } from '../../../shared/folder-color.util';\nimport {\n collectDocumentScopedMetaDataList,\n collectFolderScopedMetaDataList,\n toViewMetaDataList,\n} from '../../../shared/folder-metadata.util';\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Document explorer side panel; maps view-model state into {@link AXPLayoutSideDetailPanelComponent}.\n */\n@Component({\n selector: 'axm-document-explorer-detail-panel',\n templateUrl: './detail-panel.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n ],\n})\nexport class AXMDocumentExplorerDetailPanelComponent {\n private readonly entityService = inject(AXPEntityService);\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n private readonly documentTypeService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentType.name).data<any, any>();\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Metadata widget state ----\n\n protected readonly metadataSchema = signal<AXMMetaDataBuilderValue | null>(null);\n protected readonly metadataContext = signal<{ metaDataForm: Record<string, unknown> }>({ metaDataForm: {} });\n protected readonly metadataWidgetNode = signal<{ type: string; path: string; options: { groups: unknown[] } } | null>(\n null,\n );\n\n //#endregion\n\n //#region ---- i18n ----\n\n protected readonly multiSelectLabel = signal<string | null>(null);\n\n private static readonly METADATA_SECTION_KEY = '@document-management:terms.common.meta-data';\n\n protected readonly panelSections = signal<AXPLayoutSideDetailPanelSection[]>([]);\n\n //#endregion\n\n //#region ---- Panel model ----\n\n protected readonly panelHeader = computed((): AXPLayoutSideDetailPanelHeader | null => {\n if (this.vm.hasMultipleSelectedItems()) {\n return null;\n }\n const node = (this.vm.selectedNode() ?? this.vm.currentFolder()) as AXMDocumentExplorerNode | null | undefined;\n if (node == null) {\n return null;\n }\n const nodeInfo = this.vm.getNodeInfo(node);\n const isShortcut = node.storageType === 'shortcut' || node.isShortcut === true;\n const isFolder = node.type === 'folder';\n return {\n primaryTitle: nodeInfo.name,\n icon: {\n iconClass: `fa-fw fa-lg ${nodeInfo.icon}`,\n shortcut: isShortcut,\n ...(isFolder\n ? {\n surfaceVars: {\n '--node-bg-color': folderColorToRgbChannels(node.color),\n },\n }\n : {}),\n },\n };\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n void this.loadMultiSelectLabel();\n });\n\n effect(() => {\n this.vm.hasMultipleSelectedItems();\n this.vm.selectedNode();\n this.vm.currentFolder();\n void this.rebuildPanelSections();\n });\n\n effect(() => {\n const node = this.vm.selectedNode() as AXMDocumentExplorerNode | null | undefined;\n if (!node || !node.documentTypes?.length) {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n return;\n }\n const typeIds = node.documentTypes\n .map((documentType) => documentType?.id)\n .filter((id): id is string => typeof id === 'string' && id.length > 0);\n if (typeIds.length === 0) {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n return;\n }\n const appliesTo = node.type === 'folder' ? 'folder' : 'document';\n Promise.all(typeIds.map((id) => this.documentTypeService.byKey(id)))\n .then((types: Array<{ metaDataList?: AXMMetaDataBuilderValue }>) => {\n const metaDataList =\n appliesTo === 'folder'\n ? collectFolderScopedMetaDataList(types)\n : collectDocumentScopedMetaDataList(types[0]?.metaDataList);\n const viewList = toViewMetaDataList(metaDataList);\n this.metadataSchema.set(viewList);\n this.metadataContext.set({ metaDataForm: (node.metaDataForm ?? {}) as Record<string, unknown> });\n this.metadataWidgetNode.set(\n (viewList.groups ?? []).length\n ? {\n type: 'meta-data-form-editor',\n path: 'metaDataForm',\n options: { groups: viewList.groups },\n }\n : null,\n );\n })\n .catch(() => {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n });\n });\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onPanelClose(): void {\n this.vm.closeDetailPanel();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async loadMultiSelectLabel(): Promise<void> {\n if (!this.vm.hasMultipleSelectedItems()) {\n this.multiSelectLabel.set(null);\n return;\n }\n const itemsSelected =\n (await this.translationService.translateAsync('@general:terms.interface.items-selected')) ?? 'items selected';\n this.multiSelectLabel.set(`${this.vm.selectedCount()} ${itemsSelected}`);\n }\n\n private async rebuildPanelSections(): Promise<void> {\n if (this.vm.hasMultipleSelectedItems()) {\n this.panelSections.set([]);\n return;\n }\n const node = (this.vm.selectedNode() ?? this.vm.currentFolder()) as AXMDocumentExplorerNode | null | undefined;\n if (node == null) {\n this.panelSections.set([]);\n return;\n }\n const nodeInfo = this.vm.getNodeInfo(node);\n const t = this.translationService;\n const sections: AXPLayoutSideDetailPanelSection[] = [];\n for (const section of nodeInfo.sections) {\n const title = (await t.translateAsync(section.title)) ?? section.title;\n const isMetadata = section.title === AXMDocumentExplorerDetailPanelComponent.METADATA_SECTION_KEY;\n if (isMetadata) {\n sections.push({ title, projectionKey: 'metadata' });\n continue;\n }\n const rows = await Promise.all(\n section.details.map(async (detail) => {\n const content =\n typeof detail.content === 'string' && detail.content.startsWith('@document-management:')\n ? ((await t.translateAsync(detail.content)) ?? detail.content)\n : detail.content;\n return {\n label: (await t.translateAsync(detail.title)) ?? detail.title,\n value: content,\n format: detail.format,\n };\n }),\n );\n sections.push({ title, rows });\n }\n this.panelSections.set(sections);\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (vm.hasMultipleSelectedItems() && multiSelectLabel(); as multiLabel) {\n <axp-layout-side-detail-panel [multiSelectLabel]=\"multiLabel\" (panelClose)=\"onPanelClose()\" />\n} @else {\n <axp-layout-side-detail-panel\n [header]=\"panelHeader()\"\n [sections]=\"panelSections()\"\n (panelClose)=\"onPanelClose()\"\n >\n @if (metadataWidgetNode(); as widgetNode) {\n <ng-template axpLayoutSideDetailPanelSection=\"metadata\">\n <axp-widgets-container [context]=\"metadataContext()\">\n <ng-container axp-widget-renderer [node]=\"widgetNode\" [mode]=\"'view'\"></ng-container>\n </axp-widgets-container>\n </ng-template>\n }\n </axp-layout-side-detail-panel>\n}\n","//#region ----- Imports -----\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n resolveDocumentExpirationBadge,\n type AXMDocumentExpirationBadge,\n} from '../../document-expiration.util';\nimport { AXMDocumentExplorerNode } from '../../document-manager.types';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-document-expiration-badge',\n templateUrl: './document-expiration-badge.component.html',\n styleUrl: './document-expiration-badge.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-document-expiration-badge',\n },\n imports: [AXBadgeModule, AXTooltipModule, AXTranslationModule, AsyncPipe],\n})\nexport class AXMDocumentExpirationBadgeComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Inputs -----\n\n readonly node = input.required<AXMDocumentExplorerNode>();\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly badge = computed((): AXMDocumentExpirationBadge | null => {\n const node = this.node();\n if (!node || node.type !== 'file') {\n return null;\n }\n return resolveDocumentExpirationBadge(node);\n });\n\n protected readonly tooltipText = signal('');\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n effect(() => {\n const badge = this.badge();\n if (!badge) {\n this.tooltipText.set('');\n return;\n }\n void this.resolveTooltip(badge);\n });\n }\n\n //#endregion\n\n //#region ----- Private Helpers -----\n\n private async resolveTooltip(badge: AXMDocumentExpirationBadge): Promise<void> {\n const dateFormat = await this.settingsService.get(AXPRegionalSetting.ShortDate);\n const formattedDate = this.formatService.format(badge.date, 'date', { format: dateFormat });\n const text = await this.translationService.translateAsync(badge.tooltipKey, {\n params: { date: formattedDate },\n });\n if (this.badge()?.status === badge.status) {\n this.tooltipText.set(text);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (badge(); as b) {\n <!-- ----- Expiration status badge (expired = danger, near = warning) ----- -->\n <span\n class=\"axm-document-expiration-badge__host inline-flex shrink-0 cursor-help\"\n [axTooltip]=\"tooltipText()\"\n axTooltipPlacement=\"top\"\n [attr.aria-label]=\"tooltipText()\"\n >\n <ax-badge size=\"sm\" look=\"twotone\" [color]=\"b.color\" [text]=\"(b.textKey | translate | async) ?? ''\"></ax-badge>\n </span>\n}\n","//#region ----- Imports -----\n\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { AXPVersioningStatus } from '@acorex-platform/module-common-client/contracts';\nimport { resolveDocumentVersionNumber } from '../../document-version.util';\nimport { AXMDocumentExplorerNode } from '../../document-manager.types';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst VERSION_BADGE_I18N = '@document-management:terms.document.version-badge';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-document-version-badge',\n templateUrl: './document-version-badge.component.html',\n styleUrl: './document-version-badge.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-document-version-badge',\n '[hidden]': 'versionNumber() == null',\n },\n imports: [AXTooltipModule, AXTranslationModule, AsyncPipe],\n})\nexport class AXMDocumentVersionBadgeComponent {\n //#region ----- Inputs -----\n\n readonly node = input.required<AXMDocumentExplorerNode>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly versionNumber = computed(() => resolveDocumentVersionNumber(this.node()));\n protected readonly isDraft = computed(\n () => this.node().versioningStatus === AXPVersioningStatus.Draft,\n );\n\n protected readonly textKey = `${VERSION_BADGE_I18N}.text`;\n protected readonly tooltipKey = `${VERSION_BADGE_I18N}.tooltip`;\n\n //#endregion\n}\n\n//#endregion\n","@if (versionNumber(); as version) {\n <!-- ----- Version number when versioning is enabled ----- -->\n <span\n class=\"axm-document-version-badge__chip\"\n [class.axm-document-version-badge__chip--draft]=\"isDraft()\"\n [axTooltip]=\"(tooltipKey | translate: { params: { version } } | async) ?? ''\"\n axTooltipPlacement=\"top\"\n [attr.aria-label]=\"(tooltipKey | translate: { params: { version } } | async) ?? ''\"\n >\n <i class=\"fa-light fa-code-branch\" aria-hidden=\"true\"></i>\n <span class=\"axm-document-version-badge__text\">{{\n (textKey | translate: { params: { version } } | async) ?? ''\n }}</span>\n </span>\n}\n","//#region ----- Imports -----\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n resolveFolderExpirationCountBadges,\n type AXMFolderExpirationCountBadge,\n} from '../../document-expiration.util';\nimport { AXMDocumentExplorerNode } from '../../document-manager.types';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-folder-expiration-badges',\n templateUrl: './folder-expiration-badges.component.html',\n styleUrl: './folder-expiration-badges.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-folder-expiration-badges',\n },\n imports: [AXBadgeModule, AXTooltipModule],\n})\nexport class AXMFolderExpirationBadgesComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Inputs -----\n\n readonly node = input.required<AXMDocumentExplorerNode>();\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly badges = computed((): AXMFolderExpirationCountBadge[] => {\n const node = this.node();\n if (!node || node.type !== 'folder') {\n return [];\n }\n return resolveFolderExpirationCountBadges(node);\n });\n\n protected readonly tooltipByStatus = signal<Record<string, string>>({});\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n effect(() => {\n const badges = this.badges();\n if (badges.length === 0) {\n this.tooltipByStatus.set({});\n return;\n }\n void this.resolveTooltips(badges);\n });\n }\n\n //#endregion\n\n //#region ----- Template Helpers -----\n\n protected tooltipFor(status: string): string {\n return this.tooltipByStatus()[status] ?? '';\n }\n\n //#endregion\n\n //#region ----- Private Helpers -----\n\n private async resolveTooltips(badges: AXMFolderExpirationCountBadge[]): Promise<void> {\n const entries = await Promise.all(\n badges.map(async (badge) => {\n const text = await this.translationService.translateAsync(badge.tooltipKey, {\n params: { count: badge.count },\n });\n return [badge.status, text] as const;\n }),\n );\n if (this.badges().length === badges.length) {\n this.tooltipByStatus.set(Object.fromEntries(entries));\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (badges().length > 0) {\n <!-- ----- Folder expiration counts only (color = status; tooltip has full label) ----- -->\n <span class=\"axm-folder-expiration-badges__host inline-flex shrink-0 items-center gap-1\">\n @for (badge of badges(); track badge.status) {\n <span\n class=\"inline-flex cursor-help\"\n [axTooltip]=\"tooltipFor(badge.status)\"\n axTooltipPlacement=\"top\"\n [attr.aria-label]=\"tooltipFor(badge.status)\"\n >\n <ax-badge size=\"sm\" look=\"twotone\" [color]=\"badge.color\" [text]=\"'' + badge.count\"></ax-badge>\n </span>\n }\n </span>\n}\n","import { AXButtonModule } from \"@acorex/components/button\";\nimport { AXDecoratorModule } from \"@acorex/components/decorators\";\nimport { AXPDocumentExplorerViewModel } from \"../../../document-explorer\";\nimport { AXMDocumentExplorerNode } from \"../../document-manager.types\";\nimport { Component, inject, ChangeDetectionStrategy } from \"@angular/core\";\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\n\n\n@Component({\n selector: 'axm-folder-path-breadcrumbs',\n templateUrl: './folder-path-breadcrumbs.component.html',\n styleUrls: ['./folder-path-breadcrumbs.component.css'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n AXButtonModule,\n AXDecoratorModule,\n ],\n})\nexport class AXMFolderPathBreadcrumbsComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected layout = inject(AXPLayoutThemeService);\n}\n","<!-- Breadcrumbs Section -->\n<div class=\"__breadcrumb ax-sm\">\n <!-- Desktop Breadcrumb -->\n @for (\n item of vm.currentPath();\n track item.id;\n let i = $index;\n let last = $last\n ) {\n <!-- Navigation Button -->\n <ax-button\n look=\"blank\"\n (onClick)=\"vm.navigateToFolder(item.id)\"\n [text]=\"item.name\"\n [disabled]=\"last\"\n >\n @if (i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n } @else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if (!last) {\n <i class=\"far fa-chevron-right rtl:rotate-180 fa-fw fa-xs me-2\"></i>\n }\n <!-- End Navigation Button -->\n }\n</div>\n","//#region ---- Imports ----\n\nimport type { AXPDialogRef } from '@acorex-platform/framework-client/layout/builder';\n\n//#endregion\n\n//#region ---- Dialog surfaces ----\n\n/** `dialogSurface` for attachment dialog with save (layout builder options). */\nexport const AXM_DOCUMENT_DIALOG_SURFACE_ATTACHMENT = 'document-management.attachment-dialog';\n\n/** `dialogSurface` for attachment dialog without save. */\nexport const AXM_DOCUMENT_DIALOG_SURFACE_ATTACHMENT_NO_SAVE = 'document-management.attachment-dialog-no-save';\n\n//#endregion\n\n//#region ---- On-action hook (extensions handle custom commands, e.g. AI metadata fill) ----\n\n/**\n * Runs when the user triggers a footer/dialog action, before the default attachment-dialog handler.\n * Extensions may set {@link AXMDocumentAttachmentDialogOnActionPayload.result} to short-circuit (e.g. keep dialog open after patching context).\n */\nexport const AXM_DOCUMENT_ATTACHMENT_DIALOG_ON_ACTION_HOOK_KEY = 'document-management.attachment-dialog.on-action';\n\nexport interface AXMDocumentAttachmentDialogOnActionPayload {\n action: string;\n dialogRef: AXPDialogRef;\n /** Same shape as `dialogIntegrationPayload` passed when opening the dialog. */\n integration: Record<string, unknown>;\n /** When set by a listener, the dialog service returns this to the renderer. */\n result?: { keepDialogOpen?: boolean };\n}\n\n//#endregion\n","import { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPExecuteCommand, AXPPlatformScope, getSmart } from '@acorex-platform/framework-shared/core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, OnInit, signal, untracked, ViewEncapsulation } from '@angular/core';\n\nimport { AXPFileTypeProviderService } from '@acorex-platform/framework-client/common';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPDeviceService, AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { isArray, isString } from 'lodash';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../../document-explorer';\nimport { AXMDocumentExplorerDetailPanelComponent } from '../../document-explorer/views/detail-panel/detail-panel.component';\nimport { AXMDocumentManagerService } from '../../shared';\nimport { AXMDocumentSelectionMode } from '../../shared/document-manager.types';\n\n//#region ---- Document Drive Page Component ----\n\n/**\n * Entity page component that shows the EDMS drive UI scoped to the current record's folder.\n * Uses getRootByEntityRef(refType, refId) to load the folder; navigation stays in-page (no router).\n */\n@Component({\n selector: 'axm-document-drive-page',\n templateUrl: './document-drive-page.component.html',\n styleUrls: ['./document-drive-page.component.css'],\n standalone: true,\n imports: [\n CommonModule,\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXMDocumentExplorerComponent,\n AXMDocumentExplorerDetailPanelComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDocumentExplorerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDocumentDrivePageComponent,\n },\n ],\n})\nexport class AXMDocumentDrivePageComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---- Inputs ----\n\n /** Default `{}`: avoid NG0950 before page-component-renderer calls setInput. */\n rootContext = input<Record<string, unknown>>({});\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n private readonly route = inject(ActivatedRoute);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n /** Resolved restriction list; null = not configured (allow all). */\n private readonly resolvedAllowedDocumentTypeNames = signal<string[] | null>(null);\n\n //#endregion\n\n //#region ---- View State ----\n\n protected readonly filterItems = signal<Array<{ key: string; textKey: string; icon: string }>>([]);\n protected selectedFilter = signal<string>('all');\n protected searchQuery: string | null = null;\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n protected readonly viewsItems = computed(() => [\n { key: 'large-icons', icon: 'fa-light fa-grid' },\n { key: 'small-icons', icon: 'fa-light fa-grid', break: true },\n { key: 'large-tiles', icon: 'fa-grid-2' },\n { key: 'small-tiles', icon: 'fa-grid-2', break: true },\n { key: 'list', icon: 'fa-list' },\n { key: 'details', icon: 'fa-light fa-table', break: true },\n ]);\n protected readonly selectedViewMode = computed(() => this.viewsItems().find((item) => item.key === this.vm.viewMode()) ?? this.viewsItems()[0]);\n protected readonly selectionMode = signal<AXMDocumentSelectionMode>('single');\n\n /** Folder id that was loaded as this page's root (entity ref root). We must not go back above it. */\n private readonly pageRootFolderId = signal<string | null>(null);\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** True when we can show/use back: we're not on the page root and VM allows going up. */\n protected readonly canGoBackInPage = computed(() => {\n const rootId = this.pageRootFolderId();\n if (rootId == null) return false;\n const currentId = this.vm.currentNode()?.id;\n return this.vm.isUpAvailable() && currentId != null && currentId !== rootId;\n });\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) ?? items[0];\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /** In embedded mode: when VM requests folder navigation, load that folder (no router). */\n #navigateEffect = effect(() => {\n const folderId = this.vm.navigatingFolderId();\n if (folderId) {\n this.vm.loadFolderContents(folderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layoutService.setNavigationLoading(isLoading);\n });\n });\n\n #pageMetadataEffect = effect(() => {\n this.vm.isLoading();\n this.vm.currentNode();\n this.vm.selectedCount();\n this.vm.viewMode();\n untracked(() => {\n this.recompute();\n });\n });\n\n /** Re-apply document type restrictions when record context or plugin options change. */\n #allowedDocumentTypesEffect = effect(() => {\n this.rootContext();\n this.options();\n this.pageConfig();\n untracked(() => {\n void this.applyAllowedDocumentTypeNames();\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.loadFilterItems();\n\n const { refType, refId } = this.resolveEntityRef();\n if (!refType || !refId) {\n return;\n }\n\n await this.vm.initialize({ browseMode: 'file', scope: AXPPlatformScope.Tenant });\n await this.applyAllowedDocumentTypeNames();\n // Entity root comes back hydrated (children included) — apply it directly, no second fetch.\n const root = await this.driveService.getRootByEntityRef(refType, refId);\n this.pageRootFolderId.set(root.result.id);\n await this.vm.applyLoadedFolder(root);\n await this.applyAllowedDocumentTypeNames();\n this.recompute();\n }\n\n /**\n * Resolves allowed document type names from static plugin config or an expression evaluated against rootContext.\n * Returns null when not configured (no restriction).\n */\n private async resolveAllowedDocumentTypeNames(): Promise<string[] | null> {\n const config = this.pageConfig();\n const configNames = config && (config as { allowedDocumentTypeNames?: unknown }).allowedDocumentTypeNames;\n if (isArray(configNames)) {\n return configNames.filter((name): name is string => isString(name) && name.trim().length > 0);\n }\n\n const raw = this.options()?.['documentTypeNames'];\n if (raw == null) {\n return null;\n }\n if (isArray(raw)) {\n return raw.filter((name): name is string => isString(name) && name.trim().length > 0);\n }\n if (isString(raw) && raw.trim()) {\n const scope = {\n context: {\n eval: (path: string) => getSmart(this.rootContext(), path),\n },\n };\n const evaluated = await this.expressionEvaluator.evaluate(raw.trim(), scope);\n if (isArray(evaluated)) {\n return evaluated.filter((name): name is string => isString(name) && name.trim().length > 0);\n }\n return [];\n }\n return null;\n }\n\n private async applyAllowedDocumentTypeNames(): Promise<void> {\n const names = await this.resolveAllowedDocumentTypeNames();\n if (names === null) {\n return;\n }\n this.resolvedAllowedDocumentTypeNames.set(names);\n this.vm.setAllowedDocumentTypeNames(names);\n }\n\n private getAllowedDocumentTypeNames(): string[] | undefined {\n const names = this.resolvedAllowedDocumentTypeNames();\n return names === null ? undefined : names;\n }\n\n /**\n * Resolves refType and refId for getRootByEntityRef from pageConfig, rootContext, or route.\n * Order: pageConfig.refType → rootContext (moduleName + entityName) → route params.\n * refId: pageConfig.refId → rootContext.id → rootContext.recordId.\n */\n private resolveEntityRef(): { refType: string | null; refId: string | null } {\n const config = this.pageConfig();\n const context = this.rootContext() ?? {};\n const ctx = context as Record<string, unknown>;\n const page = (config ?? {}) as { refType?: unknown; refId?: unknown };\n\n let refType: string | null = typeof page.refType === 'string' ? page.refType : null;\n if (!refType) {\n const moduleName = typeof ctx['moduleName'] === 'string' ? ctx['moduleName'] : null;\n const entityName = typeof ctx['entityName'] === 'string' ? ctx['entityName'] : null;\n if (moduleName && entityName) {\n refType = `${moduleName}.${entityName}`;\n }\n }\n if (!refType) {\n const module = this.route.snapshot.parent?.paramMap.get('module');\n const entity = this.route.snapshot.paramMap.get('entity');\n if (module && entity) {\n refType = `${module}.${entity}`;\n }\n }\n\n const refIdFromPage = typeof page.refId === 'string' ? page.refId : null;\n const refId =\n refIdFromPage ??\n (typeof ctx['id'] === 'string' ? ctx['id'] : null) ??\n (typeof ctx['recordId'] === 'string' ? ctx['recordId'] : null) ??\n null;\n\n return { refType, refId };\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleSearchChange(event: AXValueChangedEvent): void {\n this.searchQuery = event.value ?? null;\n if (this.searchQuery && this.searchQuery.length > 0) {\n this.performSearch(this.searchQuery);\n }\n }\n\n private async performSearch(searchValue: string): Promise<void> {\n const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {\n folderId: this.vm.currentNode()?.id,\n });\n this.vm.virtualFolder(result, {\n name: 'Search Result',\n parentId: this.vm.currentNode()?.id,\n });\n }\n\n protected handleNavigateToFolder(folderId: string): void {\n this.vm.navigateToFolder(folderId);\n }\n\n /** Navigate back one folder; only when not already on page root. */\n protected handleBack(): void {\n if (this.canGoBackInPage()) {\n this.vm.navigateToUp();\n }\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadFilterItems(): Promise<void> {\n const types = await this.fileTypeService.items();\n const items = [\n { key: 'all', textKey: 'file-types.all', icon: 'fa-light fa-folder-closed' },\n ...types.map((type) => ({\n key: type.name,\n textKey: `file-types.${type.name}`,\n icon: type.icon ?? 'fa-light fa-file',\n })),\n ];\n this.filterItems.set(items);\n }\n\n //#endregion\n\n //#region ---- Filter Helpers ----\n\n protected setFilter(key: string): void {\n this.selectedFilter.set(key);\n }\n\n protected getFilterIcon(): string {\n if (this.selectedFilter() === 'all') return 'fa-light fa-folder-closed';\n const item = this.filterItems().find((i) => i.key === this.selectedFilter());\n return item?.icon ?? 'fa-light fa-file';\n }\n\n protected getFilterText(): string {\n if (this.selectedFilter() === 'all') return 'file-types.all';\n const item = this.filterItems().find((i) => i.key === this.selectedFilter());\n return item?.textKey ?? 'file-types.all';\n }\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.showSelectionDeleteActions()) {\n return [\n {\n name: 'deleteItems',\n title: '@general:actions.delete-items.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n const addItemItems = await this.vm.getFolderAddMenuItems();\n if (addItemItems.length > 0) {\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: '@document-management:actions.add-item',\n icon: 'fa-light fa-plus',\n color: 'primary',\n items: addItemItems,\n },\n ];\n }\n return [];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.showSelectionDeleteActions()) {\n return [\n {\n name: 'delete',\n title: '@general:actions.delete.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n return await this.vm.getFolderActionMenuItems();\n }\n\n override async getPageTitle(): Promise<string> {\n if (this.isDriveContentLoading()) {\n return '@general:state-message.loading.title';\n }\n return this.vm.currentFolder()?.name ?? '';\n }\n\n override async getPageDescription(): Promise<string> {\n const count = this.isDriveContentLoading() ? 0 : this.vm.itemsCount();\n const size = this.isDriveContentLoading() ? 0 : this.vm.availableSpace();\n const formattedSize = this.formatService.format(size, 'filesize');\n return this.translateService.translateAsync('@document-management:terms.common.documents-description', {\n params: { count, size: formattedSize },\n });\n }\n\n private isDriveContentLoading(): boolean {\n return this.vm.isLoading() || this.vm.currentNode() == null;\n }\n\n override getBackButton(): AXPBackButton | null {\n if (!this.canGoBackInPage() || this.vm.currentPath().length < 2) return null;\n return {\n title: this.vm.currentPath()[this.vm.currentPath().length - 2]!.name,\n };\n }\n\n override onBackButtonClick(): void | Promise<void> {\n if (this.canGoBackInPage()) {\n this.vm.navigateToUp();\n }\n }\n\n /** Return empty so the page does not show a second breadcrumb bar; main breadcrumb stays at top. */\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n const folderId = command.options?.['folderId'] as string;\n switch (command.name) {\n case 'deleteItems':\n await this.vm.deleteNodes(this.vm.selectedNodes());\n break;\n case 'navigate-to-folder':\n if (folderId) this.vm.navigateToFolder(folderId);\n break;\n case 'new-folder':\n if (folderId) {\n const allowedNames = this.getAllowedDocumentTypeNames();\n await this.driveService.showCreateFolderDialog(folderId, {\n allowedDocumentTypeNames: allowedNames,\n });\n this.vm.refresh();\n }\n break;\n case 'open-file-viewer':\n if (folderId) {\n await this.vm.openFileViewerWithFolderId();\n }\n break;\n default:\n if (typeof command.name === 'string' && command.name.startsWith('upload.')) {\n await this.driveService.uploadFileByType(folderId, command.options?.['documentType']?.id, {\n scope: this.vm.scope(),\n });\n this.vm.refresh();\n }\n break;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"flex min-h-0 min-w-0 flex-col gap-2\">\n <!-- Back (left) + View Mode & Detail Panel Toggle (right) -->\n <div class=\"flex justify-between items-center\">\n <div class=\"flex gap-2 items-center\">\n @if (canGoBackInPage()) {\n <ax-button (onClick)=\"handleBack()\" [title]=\"'@general:actions.back.title' | translate | async\">\n <ax-icon icon=\"fa-light fa-arrow-left\"></ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"flex gap-2 items-center\">\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <ax-button-item\n [text]=\"('@document-management:view-modes.' + item.key | translate | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if (deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </div>\n </div>\n <div class=\"flex min-h-0 min-w-0 flex-1 flex-row gap-4 overflow-hidden\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"sticky top-0 z-50 h-full w-80 shrink-0\"></axm-document-explorer-detail-panel>\n }\n </div>\n</div>\n\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\nimport { DOCUMENT_DRIVE_PAGE_COMPONENT_KEY } from '../document.plugin';\n\n//#region ---- Document Drive Page Component Provider ----\n\n@Injectable()\nexport class AXMDocumentDrivePageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./document-drive-page.component').then((m) => m.AXMDocumentDrivePageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport {\n AXP_PLATFORM_ERROR_CODES,\n type AXPFileStorageInfo,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXPFileStorageService,\n extractRequestErrorInfo,\n platformErrorI18nKey,\n} from '@acorex-platform/framework-client/common';\nimport { AXPDebugService } from '@acorex-platform/framework-client/core';\nimport {\n AXPEntityStorageMiddleware,\n AXPEntityDefinitionRegistryService,\n AXPMiddlewareAbortError,\n} from '@acorex-platform/framework-client/layout/entity';\n\nconst ATTACHMENTS_UPLOAD_TRACE_NS = 'attachments-upload';\n\nconst FILE_PREFIX = 'file:';\nconst DOCUMENT_PREFIX = 'document:';\nconst REFERENCE_PREFIX = 'reference:';\n\nfunction isStorageRef(value: unknown): value is string {\n return (\n typeof value === 'string' &&\n (value.startsWith(FILE_PREFIX) || value.startsWith(DOCUMENT_PREFIX) || value.startsWith(REFERENCE_PREFIX))\n );\n}\n\n/** Persisted token for an attachment that is already stored (file, document link, or other reference). */\nfunction persistedAttachmentToken(item: unknown): string | undefined {\n if (isStorageRef(item)) {\n return item;\n }\n if (!item || typeof item !== 'object') {\n return undefined;\n }\n const source = (item as { source?: { kind?: string; value?: unknown } }).source;\n if (source?.kind === 'fileId' && typeof source.value === 'string') {\n const id = source.value.replace(/^file:/, '').trim();\n return id ? `${FILE_PREFIX}${id}` : undefined;\n }\n if (source?.kind === 'reference' && source.value && typeof source.value === 'object') {\n const reference = source.value as { id?: string; type?: string };\n const id = typeof reference.id === 'string' ? reference.id.trim() : '';\n const type = typeof reference.type === 'string' ? reference.type.trim() : '';\n if (!id || !type) {\n return undefined;\n }\n if (type === 'document') {\n return `${DOCUMENT_PREFIX}${id}`;\n }\n return `${REFERENCE_PREFIX}${type}:${id}`;\n }\n return undefined;\n}\n\nfunction getDocumentMetaDataForm(\n item: { meta?: { metaDataForm?: Record<string, unknown> }; metaDataForm?: Record<string, unknown> } | undefined,\n): Record<string, unknown> | undefined {\n if (item?.meta?.metaDataForm != null) return item.meta.metaDataForm;\n if (item?.metaDataForm != null) return item.metaDataForm;\n if (item?.meta != null && typeof item.meta === 'object' && !Array.isArray(item.meta)) {\n const m = item.meta as Record<string, unknown>;\n return (m['metaDataForm'] as Record<string, unknown> | undefined) ?? m;\n }\n return undefined;\n}\n\n/** Resolve list of attachment field names from entity extensions.attachments. */\nfunction getAttachmentFields(attachCfg: any): string[] {\n if (!attachCfg || typeof attachCfg !== 'object') return [];\n if (typeof (attachCfg as { field?: string }).field === 'string') return [(attachCfg as { field: string }).field];\n return Object.keys(attachCfg).filter((k) => k && typeof k === 'string');\n}\n\n/** Fallback: get attachment field names from properties with file-uploader interface (when extensions.attachments is missing e.g. cached def). */\nfunction getAttachmentFieldsFromProperties(def: any): string[] {\n const props = def?.properties as Array<{ name: string; schema?: { interface?: { type?: string } } }> | undefined;\n if (!Array.isArray(props)) return [];\n return props\n .filter((p) => p?.schema?.interface?.type === 'attachments' && p?.name)\n .map((p) => p.name);\n}\n\n/**\n * Handles file list fields configured via entity.extensions.attachments.\n * Preserves metaDataForm from widget; uploads pending blobs after persistence and writes final references.\n * Runs before file-cast (order 25) so blobs are uploaded before file-cast sees the data.\n */\n// Run before file-cast (order 25) so blobs are uploaded and refs written before file-cast sees the data\nexport const attachmentsUploadMiddleware: AXPEntityStorageMiddleware = {\n target: { ops: ['create', 'update'], order: 22 },\n execute: async (ctx, next) => {\n const registry = inject(AXPEntityDefinitionRegistryService);\n const storage = inject(AXPFileStorageService);\n const debug = inject(AXPDebugService);\n const [moduleName, entityNameOnly] = ctx.entityName.split('.');\n const def = await registry.resolve(moduleName, entityNameOnly).catch(() => null as any);\n const attachCfg = (def as any)?.extensions?.attachments;\n let fields = getAttachmentFields(attachCfg);\n if (!fields.length && def) fields = getAttachmentFieldsFromProperties(def);\n if (!fields.length) {\n await next();\n return;\n }\n\n const pendingByField = (ctx.locals as any).attach_pending ?? {};\n (ctx.locals as any).attach_pending = pendingByField;\n\n if (ctx.data && typeof ctx.data === 'object') {\n for (const field of fields) {\n const list: any[] = Array.isArray((ctx.data as any)[field]) ? (ctx.data as any)[field] : [];\n pendingByField[field] = [] as Array<{ fileItem: any; blob: File }>;\n const normalized: any[] = [];\n\n for (const item of list) {\n const metaDataForm = getDocumentMetaDataForm(item);\n\n if (item?.status === 'deleted' && item?.source?.kind === 'reference') {\n continue;\n }\n\n const referenceToken = persistedAttachmentToken(item);\n if (item?.source?.kind === 'reference' && referenceToken) {\n // Rename/title edits must reach file-cast so the drive document is updated.\n // A bare document token drops the new name and the next load shows the old one.\n if (item.status === 'editing') {\n normalized.push({\n id: item.id,\n name: item.name,\n title: item.title,\n description: item.description,\n size: item.size,\n status: item.status,\n source: { kind: 'reference', value: item.source.value },\n });\n } else {\n normalized.push(referenceToken);\n }\n } else if (item?.source?.kind === 'blob' && item.source.value instanceof Blob) {\n const blob = item.source.value as File;\n const name = item.name || `file-${Date.now()}`;\n pendingByField[field].push({ fileItem: { ...item, name, metaDataForm }, blob });\n const entry: any = {\n tempId: item.id,\n name,\n size: item.size ?? (blob as File).size,\n status: 'pending_upload',\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n } else if (item?.source?.kind === 'fileId' && item.id && typeof item.source.value === 'string') {\n const entry: any = {\n id: item.id,\n name: item.name,\n size: item.size,\n status: item.status || 'uploaded',\n source: { kind: 'fileId', value: item.source.value },\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n } else if (item?.id && item?.name) {\n const entry: any = {\n id: item.id,\n name: item.name,\n size: item.size,\n status: item.status || 'uploaded',\n source: item.source ? { kind: item.source.kind, value: item.source.value } : undefined,\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n }\n }\n\n const dataForBackend = normalized.filter((x: any) => x.status !== 'pending_upload');\n (ctx.data as any)[field] = dataForBackend;\n }\n }\n\n await next();\n\n const refId = ctx.op === 'create' ? String(ctx.result) : String(ctx.id);\n const refType = ctx.entityName;\n\n for (const field of fields) {\n const pending: Array<{ fileItem: any; blob: File }> = pendingByField[field] ?? [];\n if (!pending.length) continue;\n if (!storage) continue;\n\n const stored: unknown[] = Array.isArray((ctx.data as any)[field]) ? (ctx.data as any)[field] : [];\n const finalRefs: string[] = stored\n .filter((entry) => (entry as { status?: string })?.status !== 'deleted')\n .map((entry) => persistedAttachmentToken(entry))\n .filter((token): token is string => Boolean(token));\n\n for (const { fileItem, blob } of pending) {\n const metaDataForm = fileItem.metaDataForm ?? getDocumentMetaDataForm(fileItem);\n try {\n const info: AXPFileStorageInfo = await storage.save({\n file: blob,\n refId,\n refType,\n category: '',\n name: fileItem.name,\n });\n await storage.commit(info.fileId);\n finalRefs.push(`${FILE_PREFIX}${info.fileId}`);\n } catch (err: unknown) {\n const info = extractRequestErrorInfo(err);\n debug.warn(ATTACHMENTS_UPLOAD_TRACE_NS, 'patch', 'Pending attachment upload failed', () => ({\n entityName: ctx.entityName,\n field,\n name: fileItem.name,\n code: info?.code,\n error: info?.message ?? (err instanceof Error ? err.message : String(err)),\n note: 'Blob upload or commit failed for pending attachment',\n }));\n const code = info?.code ?? AXP_PLATFORM_ERROR_CODES.FILE_UPLOAD_FAILED;\n throw new AXPMiddlewareAbortError(\n platformErrorI18nKey(code) ?? '@general:widgets.file-uploader.messages.upload-failed',\n {\n code,\n status: info?.status ?? 500,\n details: {\n entityName: ctx.entityName,\n field,\n name: fileItem.name,\n cause: info?.message ?? (err instanceof Error ? err.message : String(err)),\n },\n },\n );\n }\n }\n\n const entityId = ctx.op === 'create' ? ctx.result : ctx.id;\n if (entityId != null) {\n const payload = { [field]: finalRefs } as Record<string, string[]>;\n try {\n await ctx.backend.updateOne(ctx.entityName, entityId, payload);\n } catch (err: unknown) {\n const info = extractRequestErrorInfo(err);\n debug.warn(ATTACHMENTS_UPLOAD_TRACE_NS, 'patch', 'Attachment refs patch failed', () => ({\n entityName: ctx.entityName,\n entityId,\n field,\n code: info?.code,\n error: info?.message ?? (err instanceof Error ? err.message : String(err)),\n note: 'Backend updateOne failed after uploading attachment refs',\n }));\n const code = info?.code ?? AXP_PLATFORM_ERROR_CODES.FILE_UPLOAD_FAILED;\n throw new AXPMiddlewareAbortError(\n platformErrorI18nKey(code) ?? '@general:widgets.file-uploader.messages.upload-failed',\n {\n code,\n status: info?.status ?? 500,\n details: {\n entityName: ctx.entityName,\n entityId,\n field,\n cause: info?.message ?? (err instanceof Error ? err.message : String(err)),\n },\n },\n );\n }\n }\n if (typeof ctx.result === 'object' && ctx.result !== null) {\n ctx.result = { ...(ctx.result as Record<string, unknown>), [field]: finalRefs };\n }\n }\n },\n};\n\n","import { inject } from '@angular/core';\nimport {\n AXP_PLATFORM_ERROR_CODES,\n type AXPFileListItem,\n type AXPFileStorageInfo,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXPFileStorageService,\n extractRequestErrorInfo,\n platformErrorI18nKey,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPEntityStorageMiddleware,\n AXPMiddlewareAbortError,\n} from '@acorex-platform/framework-client/layout/entity';\n\n//#region ---- Document fileInfo upload middleware ----\n\nfunction isBlobFileInfo(fileInfo: unknown): fileInfo is AXPFileListItem {\n if (!fileInfo || typeof fileInfo !== 'object') {\n return false;\n }\n const item = fileInfo as AXPFileListItem;\n return item.source?.kind === 'blob' && item.source.value instanceof Blob;\n}\n\nasync function uploadBlobFileInfo(\n fileInfo: AXPFileListItem,\n refId: string | undefined,\n refType: string,\n storage: AXPFileStorageService,\n): Promise<AXPFileListItem> {\n const blob = fileInfo.source!.value as File;\n const info: AXPFileStorageInfo = await storage.save({\n file: blob,\n name: fileInfo.name ?? blob.name,\n refId: refId ?? 'pending',\n refType,\n category: 'document',\n });\n await storage.commit(info.fileId);\n return {\n id: info.fileId,\n name: info.name ?? fileInfo.name ?? blob.name,\n size: info.size ?? fileInfo.size ?? blob.size,\n status: 'uploaded',\n source: { kind: 'fileId', value: info.fileId },\n title: fileInfo.title,\n description: fileInfo.description,\n };\n}\n\n/**\n * Uploads blob `fileInfo` on Document create/update before the API call.\n * Blobs do not survive JSON serialization; server file-cast only handles Blob on the server.\n * Runs before attachments upload (22) and server file-cast (25).\n */\nexport const documentFileInfoUploadMiddleware: AXPEntityStorageMiddleware = {\n target: {\n entity: /^DocumentManagement\\.Document(Version)?$/,\n ops: ['create', 'update'],\n order: 20,\n },\n execute: async (ctx, next) => {\n const data = ctx.data as Record<string, unknown> | undefined;\n const rawFileInfo = data?.['fileInfo'];\n if (!rawFileInfo || typeof rawFileInfo === 'string') {\n await next();\n return;\n }\n\n const fileInfo = rawFileInfo as AXPFileListItem;\n if (!isBlobFileInfo(fileInfo)) {\n await next();\n return;\n }\n\n const storage = inject(AXPFileStorageService);\n const refId = ctx.op === 'update' && ctx.id != null ? String(ctx.id) : undefined;\n try {\n data!['fileInfo'] = await uploadBlobFileInfo(fileInfo, refId, ctx.entityName, storage);\n } catch (error) {\n const info = extractRequestErrorInfo(error);\n const code = info?.code ?? AXP_PLATFORM_ERROR_CODES.FILE_UPLOAD_FAILED;\n throw new AXPMiddlewareAbortError(\n platformErrorI18nKey(code) ?? '@general:widgets.file-uploader.messages.upload-failed',\n {\n code,\n status: info?.status ?? 500,\n details: {\n entityName: ctx.entityName,\n name: fileInfo.name,\n cause: info?.message ?? (error instanceof Error ? error.message : String(error)),\n },\n },\n );\n }\n\n await next();\n },\n};\n\n//#endregion\n","import { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\r\nimport { AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';\r\nimport { AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';\r\nimport { AXP_FILE_ACTION_PROVIDER, AXP_MENU_PROVIDER, AXP_PROTECTED_ROUTE_GUARDS, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex-platform/framework-client/common';\r\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\r\nimport { inject, NgModule } from '@angular/core';\r\nimport { AXPDocumentManagementFeatureDefinitionProvider } from './feature-definition.provider';\r\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\r\nimport { AXMMenuProvider } from './menu.provider';\r\nimport { AXMDocumentExpiredBadgeProvider } from './badge.provider';\r\n\r\nimport { AXMSearchCommandProvider } from './search-command.provider';\r\nimport { AXPDocumentManagementSettingProvider } from './settings.provider';\r\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\r\nimport { AXMDocumentManagementWidgetsProvider } from './widget-definition.provider';\r\nimport { ROUTES, Routes } from '@angular/router';\r\n// Entity Modules\r\n\r\nimport { AXMDocumentExpirationStatusProvider } from './features/shared/document-expiration-status.provider';\r\nimport { AXMDocumentManagerService, AXMDocumentManagerServiceImpl } from './features/shared/document-manager.service';\r\nimport { AXMDocumentManagementApiService } from './features/shared/document-management-api.service';\r\nimport { AXPDocumentManagementService } from './features/shared/document-management.service';\r\nimport { provideFileViewer, AXP_TASK_BADGE_PROVIDERS } from '@acorex-platform/framework-client/layout/components';\r\nimport { AXMDriveChooseModule } from './features/drive-choose/drive-choose.module';\r\nimport { AXMFileTypeModule } from './features/file-type/file-type.module';\r\nimport { AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';\r\nimport { DocumentFileUploaderActionsByTypeProvider, DocumentFileUploaderWidgetPluginProviders } from './features/shared/document-file-uploader.widget.plugin';\r\nfunction routesFacory() {\r\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\r\n const routes: Routes = [\r\n {\r\n path: ':app/drive/:scope',\r\n loadComponent: () => {\r\n return config.viewers.root();\r\n },\r\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\r\n data: { tab: true, rootLayout: true },\r\n children: [\r\n {\r\n path: '',\r\n loadComponent: () => import('./features/drive/drive.component').then((c) => c.AXMDocumentDriveComponent),\r\n },\r\n {\r\n path: ':id',\r\n loadComponent: () => import('./features/drive/drive.component').then((c) => c.AXMDocumentDriveComponent),\r\n },\r\n ],\r\n },\r\n ];\r\n return routes;\r\n}\r\n\r\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\r\nimport { documentPlugin } from './features/document-plugin';\r\nimport { AXMDocumentDrivePageComponentProvider } from './features/document-plugin/document-drive-page';\r\nimport { attachmentsUploadMiddleware } from './features/shared/attachments-upload.middleware';\r\nimport { documentFileInfoUploadMiddleware } from './features/shared/document-file-info-upload.middleware';\r\n\r\n@NgModule({\r\n imports: [\r\n AXMDriveChooseModule,\r\n AXMFileTypeModule,\r\n // Entity Modules\r\n AXPWidgetCoreModule,\r\n ],\r\n exports: [],\r\n\r\n providers: [\r\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDocumentManagementWidgetsProvider, multi: true },\r\n { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: documentPlugin },\r\n { provide: AXP_PAGE_COMPONENT_PROVIDER, multi: true, useClass: AXMDocumentDrivePageComponentProvider },\r\n { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: documentFileInfoUploadMiddleware },\r\n { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: attachmentsUploadMiddleware },\r\n {\r\n provide: AXP_STATUS_PROVIDERS,\r\n useClass: AXMDocumentExpirationStatusProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_TASK_BADGE_PROVIDERS,\r\n useClass: AXMDocumentExpiredBadgeProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: ROUTES,\r\n multi: true,\r\n useFactory: routesFacory,\r\n },\r\n ...DocumentFileUploaderWidgetPluginProviders.map((p) => ({\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: p,\r\n multi: true,\r\n })),\r\n {\r\n provide: AXP_FILE_ACTION_PROVIDER,\r\n useValue: DocumentFileUploaderActionsByTypeProvider,\r\n multi: true,\r\n },\r\n // Provider references (now using tokens)\r\n {\r\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\r\n useClass: AXPDocumentManagementFeatureDefinitionProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\r\n useClass: AXMPermissionDefinitionProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_MENU_PROVIDER,\r\n useClass: AXMMenuProvider,\r\n multi: true,\r\n },\r\n \r\n {\r\n provide: AXP_SEARCH_PROVIDER,\r\n useClass: AXMSearchCommandProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_SETTING_DEFINITION_PROVIDER,\r\n useClass: AXPDocumentManagementSettingProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXMDocumentManagerService,\r\n useClass: AXMDocumentManagerServiceImpl,\r\n },\r\n {\r\n provide: AXPDocumentManagementService,\r\n useClass: AXMDocumentManagementApiService,\r\n },\r\n ...provideFileViewer(),\r\n provideCommandSetups([\r\n {\r\n key: 'DocumentManagement.Document:Upload',\r\n command: () =>\r\n import('./features/commands/upload-document.command').then((c) => c.AXMUploadDocumentCommand),\r\n },\r\n {\r\n key: 'DocumentManagement.Document:Open',\r\n command: () =>\r\n import('./features/commands/open-document.command').then((c) => c.AXMOpenDocumentCommand),\r\n },\r\n {\r\n key: 'DocumentManagement.Document:Distribute',\r\n command: () =>\r\n import('./features/commands/distribute-document.command').then((c) => c.AXMDistributeDocumentCommand),\r\n },\r\n {\r\n key: 'DocumentManagement.DocumentDistribution:SignOff',\r\n command: () =>\r\n import('./features/commands/sign-distributed-document.command').then(\r\n (c) => c.AXMSignDistributedDocumentCommand,\r\n ),\r\n },\r\n {\r\n key: 'DocumentManagement.Document:RequestReview',\r\n command: () =>\r\n import('./features/commands/request-document-review.command').then(\r\n (c) => c.AXMRequestDocumentReviewCommand,\r\n ),\r\n },\r\n {\r\n key: 'DocumentManagement.DocumentReview:SignOff',\r\n command: () =>\r\n import('./features/commands/sign-document-review.command').then((c) => c.AXMSignDocumentReviewCommand),\r\n },\r\n ]),\r\n ],\r\n})\r\nexport class AXMDocumentManagementModule { }\r\n","\nimport { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPExecuteCommand, AXPFilterDefinition, AXPFilterQuery, AXPPlatformScope, collectQueryFilterLeaves, isQueryFilterAllNode, resolvePlatformScopeKey, resolvePlatformScopeName } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileTypeProviderService } from '@acorex-platform/framework-client/common';\nimport { AXPQueryFiltersComponent, AXPThemeLayoutBlockComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n HostListener,\n inject,\n OnDestroy,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { ActivatedRoute, ParamMap, RouterModule } from '@angular/router';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { combineLatest, Observable } from 'rxjs';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../document-explorer';\nimport { AXMDocumentExplorerDetailPanelComponent } from '../document-explorer/views/detail-panel/detail-panel.component';\nimport { AXMDocumentManagerService } from '../shared';\nimport { AXMDocumentSelectionMode } from '../shared/document-manager.types';\n\n/**\n * Walks `ActivatedRoute` ancestors until a `scope` param is found (`:app/drive/:scope` may not be the direct parent).\n */\nfunction readDriveScopeSegmentFromRoute(route: ActivatedRoute): string | undefined {\n let current: ActivatedRoute | null = route;\n while (current) {\n const raw = current.snapshot.paramMap.get('scope');\n if (raw != null && String(raw).trim() !== '') {\n return String(raw).trim().toLowerCase();\n }\n current = current.parent;\n }\n return undefined;\n}\n\n/** Finds the route that owns `:scope` so we can react when My Drive ↔ Tenant Documents switches. */\nfunction findDriveScopeRoute(route: ActivatedRoute): ActivatedRoute | null {\n let current: ActivatedRoute | null = route;\n while (current) {\n const raw = current.snapshot.paramMap.get('scope');\n if (raw != null && String(raw).trim() !== '') {\n return current;\n }\n current = current.parent;\n }\n return null;\n}\n\n@Component({\n selector: 'axp-document-drive',\n templateUrl: './drive.component.html',\n styleUrls: ['./drive.component.css'],\n standalone: true,\n imports: [\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n //\n AXMDocumentExplorerComponent,\n AXMDocumentExplorerDetailPanelComponent,\n AXPQueryFiltersComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDocumentExplorerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDocumentDriveComponent,\n },\n ],\n})\nexport class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {\n private readonly entityService = inject(AXPEntityService);\n //#region ---------------- Services & Dependencies ----------------\n\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n private readonly documentTypeService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentType.name)\n .data<any, any>();\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n protected readonly activatedRoute = inject(ActivatedRoute);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---------------- View Properties ----------------\n\n private previousFolderId: string | null = null;\n\n /** When true, in-flight async work must not call `router.navigate` or sync layout loading. */\n private driveViewDestroyed = false;\n\n /** Bumps on each `loadDrive` so overlapping navigations (user ↔ tenant) discard stale results. */\n private loadDriveGeneration = 0;\n\n /** Filter definitions: document type (cascade parent) + metadata + search + file type. */\n protected advancedFilterDefinitions = signal<AXPFilterDefinition[]>([]);\n\n /** Active metadata filters from the query filter panel (same shape as {@link AXPFilterQuery}). */\n private activeMetadataFilters = signal<AXPFilterQuery[]>([]);\n\n /** Options for the document type filter (drive search). */\n private documentTypeFilterOptions = signal<Array<{ id: string; title: string }>>([]);\n\n /**\n * Initial filters for axp-query-filters (URL search on first load, or preserved filters after cascade refresh).\n */\n protected panelInitialFilters = signal<AXPFilterQuery[]>([]);\n\n /** Bumps when the filter panel is recreated after document type changes (clears stale metadata chips). */\n protected queryFiltersKey = signal(0);\n\n /** Last document type ids used to load metadata field definitions (cascade detection). */\n private lastAppliedDocumentTypeIds = signal<string[]>([]);\n\n /** Normalized document type ids from the panel; used for search API. */\n private activeDocumentTypeFilterIds = signal<string[]>([]);\n\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n\n protected readonly viewsItems = computed(() => [\n { key: 'large-icons', icon: 'fa-light fa-grid' },\n { key: 'small-icons', icon: 'fa-light fa-grid', break: true },\n { key: 'large-tiles', icon: 'fa-grid-2' },\n { key: 'small-tiles', icon: 'fa-grid-2', break: true },\n { key: 'list', icon: 'fa-list' },\n { key: 'details', icon: 'fa-light fa-table', break: true },\n ]);\n\n protected readonly selectedViewMode = computed(\n () => this.viewsItems().find((item) => item.key === this.vm.viewMode()) || this.viewsItems()[0],\n );\n protected readonly selectionMode = signal<AXMDocumentSelectionMode>('single');\n protected documentExplorer = viewChild(AXMDocumentExplorerComponent);\n\n //#endregion\n\n //#region ---------------- Computed Properties ----------------\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) || items[0];\n });\n\n //#endregion\n\n //#region ---------------- Effects ----------------\n\n #navigateEffect = effect(() => {\n const navigatingFolderId = this.vm.navigatingFolderId();\n if (navigatingFolderId) {\n this.handleNavigateToFolder(navigatingFolderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layoutService.setNavigationLoading(isLoading);\n });\n });\n\n #pageMetadataEffect = effect(() => {\n this.vm.isLoading();\n this.vm.currentNode();\n this.vm.selectedCount();\n this.vm.viewMode();\n untracked(() => {\n this.recompute();\n });\n });\n\n //#endregion\n\n //#region ---------------- Lifecycle Hooks ----------------\n\n ngOnDestroy(): void {\n this.driveViewDestroyed = true;\n // Balance `setNavigationLoading(true)` from `#loadingEffect` when the view is torn down while still loading.\n if (this.vm.isLoading()) {\n this.layoutService.setNavigationLoading(false);\n }\n }\n\n override async ngOnInit() {\n super.ngOnInit();\n // Resolve scope from the route before loading filter definitions (see `initialize` early `patchState`\n // in the explorer view model so `scope` is correct before any async gap while filters mount).\n const snapshot = this.activatedRoute.snapshot;\n const searchParam = snapshot.queryParams['search'];\n this.panelInitialFilters.set(\n searchParam && typeof searchParam === 'string' && searchParam.trim()\n ? [{ field: 'all', value: searchParam.trim(), operator: { type: 'contains' } }]\n : [],\n );\n\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n const routerScope = resolvePlatformScopeKey(scopeSegment ?? 'user');\n await this.vm.initialize({ browseMode: 'file', scope: routerScope as AXPPlatformScope });\n this.vm.setFileTypeFilter('all');\n\n // Filter definitions feed the filter panel only — never block the first folder load on them.\n void this.setupAdvancedFilters();\n\n const searchQuery = snapshot.queryParams['search'];\n const folderId = snapshot.paramMap.get('id');\n\n if (searchQuery) {\n if (folderId) {\n this.previousFolderId = folderId;\n await this.vm.loadFolderContents(folderId);\n await this.correctDriveUrlIfOutOfScope(folderId);\n }\n await this.performSearch(searchQuery);\n } else {\n // Folder id lives on this route; scope lives on `:app/drive/:scope` (parent).\n // Child `paramMap` alone does not fire when switching `/drive/user` ↔ `/drive/tenant`.\n const routeParamMaps: Observable<ParamMap>[] = [this.activatedRoute.paramMap];\n const scopeRoute = findDriveScopeRoute(this.activatedRoute);\n if (scopeRoute && scopeRoute !== this.activatedRoute) {\n routeParamMaps.unshift(scopeRoute.paramMap);\n }\n combineLatest(routeParamMaps)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n void this.loadDrive();\n });\n }\n\n this.activatedRoute.queryParams.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(async (params) => {\n if (!params['search'] && this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n const targetFolderId =\n this.previousFolderId ??\n (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);\n\n if (targetFolderId) {\n await this.vm.loadFolderContents(targetFolderId);\n this.previousFolderId = null;\n } else {\n this.vm.navigateToUp();\n }\n }\n });\n }\n\n //#endregion\n\n //#region ---------------- Event Handlers ----------------\n\n private async performSearch(searchValue: string) {\n this.vm.setLoading(true);\n try {\n if (!this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n this.previousFolderId = currentNode?.id ?? null;\n }\n\n const metadataFilters = this.activeMetadataFilters();\n const hasMetadataFilters = metadataFilters.length > 0;\n const documentTypeIds = this.activeDocumentTypeFilterIds();\n const hasDocTypeFilter = documentTypeIds.length > 0;\n\n const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {\n folderId: this.vm.isVirtual() ? (this.previousFolderId ?? undefined) : (this.vm.currentNode()?.id ?? undefined),\n ...(hasMetadataFilters ? { metadataFilters } : {}),\n ...(hasDocTypeFilter ? { documentTypeIds } : {}),\n });\n\n const currentNode = this.vm.currentNode();\n const folderIdForParent = this.vm.isVirtual()\n ? (currentNode?.parentId ?? this.previousFolderId ?? undefined)\n : (currentNode?.id ?? this.previousFolderId ?? undefined);\n\n await this.vm.virtualFolder(result, {\n name: 'Search Result',\n parentId: folderIdForParent,\n });\n } finally {\n this.vm.setLoading(false);\n }\n }\n\n /** Handles filter changes from the query filter panel (search, file type, document type, metadata). */\n protected async handleAdvancedFiltersChanged(incoming: AXPFilterQuery[]): Promise<void> {\n const filters = collectQueryFilterLeaves(incoming);\n const docTypeFilter = filters.find((f) => f.field === 'documentTypeId');\n const documentTypeIds = this.normalizeDocumentTypeIds(docTypeFilter?.value);\n this.activeDocumentTypeFilterIds.set(documentTypeIds);\n\n if (!this.docTypeIdsEqual(documentTypeIds, this.lastAppliedDocumentTypeIds())) {\n this.lastAppliedDocumentTypeIds.set(documentTypeIds);\n await this.loadAdvancedFilterDefinitions(documentTypeIds);\n const preserved = filters.filter(\n (f) =>\n isQueryFilterAllNode(f) ||\n f.field === 'title' ||\n f.field === 'fileType' ||\n f.field === 'documentTypeId',\n );\n this.panelInitialFilters.set(preserved);\n this.queryFiltersKey.update((k) => k + 1);\n return;\n }\n\n const allFilter = filters.find((f) => isQueryFilterAllNode(f));\n const titleFilter = filters.find((f) => f.field === 'title');\n const fromAll = allFilter?.value != null ? String(allFilter.value).trim() : '';\n const fromTitle = titleFilter?.value != null ? String(titleFilter.value).trim() : '';\n const searchValue = fromAll || fromTitle;\n\n const fileTypeFilter = filters.find((f) => f.field === 'fileType');\n const fileTypeValue = fileTypeFilter?.value != null ? String(fileTypeFilter.value) : 'all';\n this.vm.setFileTypeFilter(fileTypeValue);\n\n const metaFilters: AXPFilterQuery[] = [];\n for (const filter of filters) {\n if (\n !filter.field ||\n isQueryFilterAllNode(filter) ||\n filter.field === 'title' ||\n filter.field === 'fileType' ||\n filter.field === 'documentTypeId'\n ) {\n continue;\n }\n const opType = filter.operator?.type as string | undefined;\n const isValuelessOperator = opType === 'isEmpty' || opType === 'isNotEmpty' || opType === 'isNull';\n if (!isValuelessOperator && (filter.value == null || filter.value === '')) {\n continue;\n }\n metaFilters.push({\n field: filter.field,\n value: filter.value,\n operator: filter.operator,\n logic: filter.logic,\n });\n }\n this.activeMetadataFilters.set(metaFilters);\n\n // Pristine panel (initial emission or filters fully cleared while browsing a real folder):\n // nothing to search and no URL to sync. Prevents a navigation loop during the first load,\n // where navigating here could strip the folder id from the URL and retrigger loads.\n const snapSearchRaw = this.activatedRoute.snapshot.queryParams['search'];\n const activeUrlSearch =\n snapSearchRaw != null && String(snapSearchRaw).trim() !== '' ? String(snapSearchRaw).trim() : '';\n const hasActiveFilters = searchValue.length > 0 || metaFilters.length > 0 || documentTypeIds.length > 0;\n if (!hasActiveFilters && !this.vm.isVirtual() && !activeUrlSearch) {\n return;\n }\n\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n const baseUrl = folderId\n ? `${app}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`\n : `${app}/drive/${resolvePlatformScopeName(this.vm.scope())}`;\n\n const normalizePath = (url: string): string => url.split('?')[0].replace(/^\\/+/, '');\n const currentPath = normalizePath(this.router.url);\n const targetPath = normalizePath(baseUrl);\n const snapSearch = this.activatedRoute.snapshot.queryParams['search'];\n const currentSearch = snapSearch != null && String(snapSearch).trim() !== '' ? String(snapSearch).trim() : '';\n if (currentPath !== targetPath || currentSearch !== searchValue) {\n await this.router.navigate([baseUrl], {\n queryParams: { search: searchValue || null },\n queryParamsHandling: 'merge',\n });\n }\n\n const hasDocTypeFilter = documentTypeIds.length > 0;\n if (searchValue.length > 0 || metaFilters.length > 0 || hasDocTypeFilter) {\n await this.performSearch(searchValue);\n } else if (this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n const targetFolderId =\n this.previousFolderId ??\n (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);\n\n if (targetFolderId) {\n await this.vm.loadFolderContents(targetFolderId);\n this.previousFolderId = null;\n } else {\n this.vm.navigateToUp();\n }\n }\n }\n\n @HostListener('document:keydown.control', ['$event'])\n handleCtrlKey(e: Event) {\n this.selectionMode.set('multiple');\n }\n\n @HostListener('document:keyup.control', ['$event'])\n handleCtrlKeyUp(e: Event) {\n this.selectionMode.set('single');\n }\n\n protected handleNavigateToFolder(folderId: string) {\n if (this.driveViewDestroyed) {\n return;\n }\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n const scopeSegment = resolvePlatformScopeName(this.vm.scope());\n const scopeRootId = this.vm.scopeRootId();\n const queryParams = this.activatedRoute.snapshot.queryParams;\n const targetPath =\n scopeRootId && folderId === scopeRootId\n ? `${app}/drive/${scopeSegment}`\n : `${app}/drive/${scopeSegment}/${folderId}`;\n this.router.navigate([targetPath], {\n queryParams: queryParams, // Preserve query params (e.g., search)\n queryParamsHandling: 'merge',\n });\n }\n\n //#endregion\n\n //#region ---------------- Data Loading Methods ----------------\n\n /**\n * When the URL is `/drive/user` but the loaded folder is outside the user scope root\n * (breadcrumb root differs from the backend scope root), align the URL and view model to\n * `/drive/tenant` (organization drive within the current application).\n */\n private async correctDriveUrlIfOutOfScope(folderId: string): Promise<void> {\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n if (scopeSegment !== 'user') {\n return;\n }\n\n const scopeRootId = this.vm.scopeRootId();\n const pathRootId = this.vm.currentPath()[0]?.id;\n if (!scopeRootId || !pathRootId || pathRootId === scopeRootId) {\n return;\n }\n\n await this.vm.initialize({ browseMode: 'file', scope: AXPPlatformScope.Tenant });\n await this.vm.loadFolderContents(folderId);\n\n if (this.driveViewDestroyed) {\n return;\n }\n const queryParams = this.activatedRoute.snapshot.queryParams;\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n await this.router.navigate([`${app}/drive/${resolvePlatformScopeName(AXPPlatformScope.Tenant)}/${folderId}`], {\n replaceUrl: true,\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n\n /**\n * Keeps the explorer VM scope aligned with `:scope` in the URL.\n * Returns true when scope changed (caller must reload; skip same-folder short-circuit).\n */\n private async syncScopeFromRoute(): Promise<boolean> {\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n const routerScope = resolvePlatformScopeKey(scopeSegment ?? 'user') as AXPPlatformScope;\n if (this.vm.scope() === routerScope) {\n return false;\n }\n this.previousFolderId = null;\n await this.vm.initialize({ browseMode: 'file', scope: routerScope });\n return true;\n }\n\n private async loadDrive() {\n const generation = ++this.loadDriveGeneration;\n const scopeChanged = await this.syncScopeFromRoute();\n if (this.driveViewDestroyed || generation !== this.loadDriveGeneration) {\n return;\n }\n\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n\n if (folderId) {\n if (!scopeChanged && this.vm.currentNode()?.id === folderId && !this.vm.isLoading()) {\n this.recompute();\n return;\n }\n await this.vm.loadFolderContents(folderId);\n if (this.driveViewDestroyed || generation !== this.loadDriveGeneration) {\n return;\n }\n await this.correctDriveUrlIfOutOfScope(folderId);\n } else {\n // Scope root URL has no folder id (`/drive/user` or `/drive/tenant`). Backend resolves the\n // application-scoped root from session (tenant + application + scope) — apply it directly\n // instead of redirecting to `/:id`, which remounts the drive view and triggers a second API call.\n const root = await this.driveService.getRoot(this.vm.scope());\n if (this.driveViewDestroyed || generation !== this.loadDriveGeneration) {\n return;\n }\n if (root.result) {\n await this.vm.applyLoadedFolder(root);\n }\n }\n if (this.driveViewDestroyed || generation !== this.loadDriveGeneration) {\n return;\n }\n this.recompute();\n }\n\n /**\n * Loads document type filter options and initial filter definitions in the background\n * (does not block the first folder load).\n */\n private async setupAdvancedFilters(): Promise<void> {\n const docTypes = await this.documentTypeService.query({ skip: 0, take: 1000 });\n if (this.driveViewDestroyed) {\n return;\n }\n this.documentTypeFilterOptions.set(\n (docTypes.items ?? []).map((it) => ({\n id: it.id,\n title: this.translateService.resolve(it.title ?? it.name ?? it.id),\n })),\n );\n await this.loadAdvancedFilterDefinitions([]);\n }\n\n /**\n * Loads filter definitions. Metadata fields load only when `documentTypeIds` is non-empty (cascade).\n */\n private async loadAdvancedFilterDefinitions(documentTypeIds: string[]): Promise<void> {\n const definitions: AXPFilterDefinition[] = [];\n\n definitions.push({\n field: 'all',\n title: '@document-management:drive.filters.search.title',\n icon: 'fa-light fa-magnifying-glass',\n widget: { type: 'string-filter' },\n filterType: { inline: true, advance: false },\n });\n\n const docOpts = this.documentTypeFilterOptions();\n if (docOpts.length > 0) {\n definitions.push({\n field: 'documentTypeId',\n operator: { type: 'equal' },\n title: '@document-management:drive.filters.document-type.title',\n icon: 'fa-light fa-file-lines',\n widget: {\n type: 'select-filter',\n options: {\n dataSource: docOpts,\n valueField: 'id',\n textField: 'title',\n },\n },\n filterType: { advance: true, inline: false },\n });\n }\n\n definitions.push({\n field: 'title',\n operator: { type: 'contains' },\n title: '@document-management:drive.filters.title.title',\n icon: 'fa-light fa-font',\n widget: { type: 'string-filter' },\n filterType: { advance: true, inline: false },\n });\n\n const types = await this.fileTypeService.items();\n const allTitle = await this.translateService.translateAsync('@document-management:drive.filters.file-types.all');\n const fileTypeDataSource = [\n { name: 'all', title: allTitle },\n ...types.map((t) => ({ name: t.name, title: t.title })),\n ];\n definitions.push({\n operator: { type: 'equal' },\n field: 'fileType',\n title: '@document-management:drive.filters.file-type.title',\n icon: 'fa-light fa-file',\n widget: {\n type: 'document-file-type-filter',\n options: {\n dataSource: fileTypeDataSource,\n valueField: 'name',\n textField: 'title',\n },\n },\n filterType: { advance: true, inline: false },\n });\n\n const metadataFields =\n documentTypeIds.length > 0 ? await this.driveService.getUniqueMetadataFields(documentTypeIds) : [];\n\n for (const field of metadataFields) {\n const multiple = field.widgetOptions?.['multiple'] === true;\n definitions.push({\n field: field.widgetPath?.trim() || field.name,\n operator: { type: this.getDefaultOperatorForEditor(field.widgetType, multiple) as 'contains' | 'equal' | 'in' },\n title: field.title,\n icon: this.getMetadataFieldIcon(field.widgetType),\n widget: {\n type: this.mapEditorToFilterWidget(field.widgetType),\n options: field.widgetOptions ?? {},\n },\n filterType: {\n advance: true,\n inline: false,\n },\n });\n }\n\n this.advancedFilterDefinitions.set(definitions);\n }\n\n //#region ---------------- Filter helpers ----------------\n\n /**\n * Unwraps filter widget values (e.g. select `{ value, text }`) for document type id extraction.\n */\n private unwrapFilterValue(value: unknown): unknown {\n let v = value;\n while (v != null && typeof v === 'object' && !Array.isArray(v) && 'value' in v) {\n v = (v as Record<string, unknown>)['value'];\n }\n return v;\n }\n\n private normalizeDocumentTypeIds(value: unknown): string[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v.map((x) => String(x)).filter((id) => id.length > 0);\n }\n return [String(v)];\n }\n\n private docTypeIdsEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) {\n return false;\n }\n const sa = [...a].sort();\n const sb = [...b].sort();\n return sa.every((id, i) => id === sb[i]);\n }\n\n //#endregion\n\n /** Maps metadata editor widget type to filter widget type. */\n private mapEditorToFilterWidget(editorType: string): string {\n switch (editorType) {\n case 'number-editor':\n return 'number-filter';\n case 'select-editor':\n case 'selection-list-editor':\n return 'select-filter';\n case 'date-time-editor':\n return 'date-filter';\n case 'text-editor':\n case 'large-text-editor':\n default:\n return 'string-filter';\n }\n }\n\n /** Returns default operator type name for a given editor widget type. */\n private getDefaultOperatorForEditor(editorType: string, multiple = false): string {\n switch (editorType) {\n case 'number-editor':\n return 'equal';\n case 'select-editor':\n case 'selection-list-editor':\n return multiple ? 'in' : 'equal';\n case 'date-time-editor':\n return 'equal';\n case 'text-editor':\n case 'large-text-editor':\n default:\n return 'contains';\n }\n }\n\n /** Returns an icon class based on the editor widget type. */\n private getMetadataFieldIcon(widgetType: string): string {\n switch (widgetType) {\n case 'number-editor':\n return 'fa-hashtag';\n case 'select-editor':\n case 'selection-list-editor':\n return 'fa-list';\n case 'date-time-editor':\n return 'fa-calendar';\n default:\n return 'fa-font';\n }\n }\n\n //#endregion\n\n //#region ---------------- Page Configuration Overrides ----------------\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.showSelectionDeleteActions()) {\n return [\n {\n name: 'deleteItems',\n title: '@general:actions.delete-items.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n const addItemItems = await this.vm.getFolderAddMenuItems();\n if (addItemItems.length === 0) {\n return [];\n }\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: '@document-management:actions.add-item',\n icon: 'fa-light fa-plus',\n color: 'primary',\n items: addItemItems,\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.showSelectionDeleteActions()) {\n return [\n {\n name: 'delete',\n title: '@general:actions.delete.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n return this.vm.getFolderActionMenuItems();\n }\n\n override async getPageTitle(): Promise<string> {\n if (this.isDriveContentLoading()) {\n return '@general:state-message.loading.title';\n }\n if (this.vm.isRoot()) {\n return `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.title`;\n }\n return this.vm.currentFolder()?.name || '';\n }\n\n override async getPageDescription(): Promise<string> {\n const count = this.isDriveContentLoading() ? 0 : this.vm.itemsCount();\n const size = this.isDriveContentLoading() ? 0 : this.vm.availableSpace();\n const formattedSize = await this.formatService.format(size, 'filesize');\n return this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.description`,\n {\n params: {\n count,\n size: formattedSize,\n },\n },\n );\n }\n\n private isDriveContentLoading(): boolean {\n return this.vm.isLoading() || this.vm.currentNode() == null;\n }\n\n override getBackButton(): AXPBackButton | null {\n if (this.vm.isUpAvailable() && this.vm.currentPath().length > 1) {\n return {\n title: this.vm.currentPath()[this.vm.currentPath().length - 2].name,\n };\n }\n return null;\n }\n\n override onBackButtonClick(): void | Promise<void> {\n if (this.vm.isUpAvailable()) {\n this.vm.navigateToUp();\n }\n }\n\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const path = this.vm.currentPath();\n if (!path || path.length === 0) {\n return [\n {\n title: await this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.title`,\n ),\n },\n ];\n }\n\n const breadcrumbs: AXPBreadcrumbItem[] = [];\n for (let i = 0; i < path.length; i++) {\n const node = path[i]!;\n const isLast = i === path.length - 1;\n breadcrumbs.push({\n name: node.id,\n title: node.name,\n command: isLast\n ? undefined\n : {\n name: 'navigate-to-folder',\n options: { folderId: node.id },\n },\n });\n }\n return breadcrumbs;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n const folderId = command.options?.['folderId'] as string;\n switch (command.name) {\n case 'deleteItems':\n await this.vm.deleteNodes(this.vm.selectedNodes());\n break;\n case 'navigate-to-folder':\n if (folderId) {\n this.vm.navigateToFolder(folderId);\n }\n break;\n case 'new-folder':\n if (folderId) {\n await this.driveService.showCreateFolderDialog(folderId);\n this.vm.refresh();\n }\n break;\n case 'open-file-viewer':\n if (folderId) {\n await this.vm.openFileViewerWithFolderId();\n }\n break;\n default:\n if (command.name.startsWith('upload.')) {\n const success = await this.driveService.uploadFileByType(\n folderId,\n command.options?.['documentType']?.id,\n { scope: this.vm.scope() },\n );\n if (success) {\n this.vm.refresh();\n }\n }\n break;\n }\n }\n\n //#endregion\n}\n","<!-- Main Layout -->\n<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <!-- Left Side Toolbar -->\n <div class=\"w-full flex items-center\">\n <axp-layout-prefix class=\"w-full\">\n @if (vm.hasMultipleSelectedItems() && !vm.isDetailsView()) {\n <div class=\"flex gap-3 items-center h-10\">\n <span class=\"text-xl font-bold\">\n {{ vm.selectedCount() }} {{ '@general:terms.interface.items-selected' | translate | async }}\n </span>\n <span (click)=\"vm.deselectAll()\" class=\"text-sm text-secondary underline cursor-pointer\">{{\n '@general:actions.unselect.title' | translate | async\n }}</span>\n </div>\n } @else {\n @for (_k of [queryFiltersKey()]; track _k) {\n <axp-query-filters\n [filtersDefinitions]=\"advancedFilterDefinitions()\"\n [initialFilters]=\"panelInitialFilters()\"\n (onFiltersChanged)=\"handleAdvancedFiltersChanged($event)\"\n [quickSearch]=\"true\"\n ></axp-query-filters>\n }\n }\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n\n <axp-layout-suffix class=\"flex gap-2\">\n <!-- Sort Dropdown -->\n <ax-button>\n <ax-icon\n [icon]=\"'fa-light fa-arrow-' + (vm.sortDirection() === 'asc' ? 'up' : 'down') + '-wide-short'\"\n ></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <!-- Sort By Options -->\n @for (item of sortItems(); track item.key) {\n <ax-button-item\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setSortField(item.key)\"\n [selected]=\"vm.sortField() === item.key\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-divider></ax-divider>\n <!-- Sort Direction Options -->\n <ax-button-item\n [text]=\"(t('actions.sort-ascending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'asc'\"\n (onClick)=\"vm.setSortDirection('asc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-up-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.sort-descending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'desc'\"\n (onClick)=\"vm.setSortDirection('desc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-down-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- View Mode Toggle -->\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <!-- view mode items -->\n <ax-button-item\n [text]=\"(t('view-modes.' + item.key, { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n <!-- end of view mode items -->\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n @if (deviceService.isLarge()) {\n <!-- Detail Panel Toggle -->\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </axp-layout-suffix>\n </div>\n </axp-page-toolbar>\n\n <!-- Content Section -->\n <axp-page-content class=\"flex min-w-0 flex-col overflow-x-hidden overflow-y-auto\">\n <div class=\"flex min-h-0 min-w-0 flex-1 flex-row gap-4 overflow-hidden\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"sticky top-0 z-50 h-full w-80 shrink-0\"></axm-document-explorer-detail-panel>\n }\n </div>\n </axp-page-content>\n\n <!-- Footer Section removed: breadcrumbs are now provided via page-level breadcrumbs -->\n</axp-page-layout>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i2","i3","AXPDialogOpener","isEmpty","AXPDataGenerator","asRecord","get","i1","isString","i5"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-document-management-client-acorex-platform-module-document-management-client-ouqn86NW.mjs","sources":["../../../../libs/modules/document-management/client/src/lib/feature-definition.provider.ts","../../../../libs/modules/document-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-management.service.ts","../../../../libs/modules/document-management/client/src/lib/badge.provider.ts","../../../../libs/modules/document-management/client/src/lib/menu.provider.ts","../../../../libs/modules/document-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/document-management/client/src/lib/settings.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/providers/document-management-file-type.catalog.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/providers/document-management-file-type.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-column.component.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-designer.component.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-edit.component.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-view.component.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-widget.config.ts","../../../../libs/modules/document-management/client/src/lib/features/file-type/file-type.module.ts","../../../../libs/modules/document-management/client/src/lib/features/drive/widgets/file-type-filter/document-file-type-filter-widget.config.ts","../../../../libs/modules/document-management/client/src/lib/features/drive/widgets/file-type-filter/document-file-type-filter-widget-edit.component.ts","../../../../libs/modules/document-management/client/src/lib/widget-definition.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-expiration-status.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-expiration.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-file.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/folder-color.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/folder-metadata.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-type-accept.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/services/document-user-fields.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/services/document-dialog.service.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/services/document-attachments.service.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/services/folder-metadata-dialog.service.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-manager.service.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-management-api.service.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/providers/file-uploader/drive-file-uploader.utils.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/providers/file-chooser/drive-file-chooser.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/providers/file-uploader/drive-file-uploader.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/slots/file-uploader-widget-extension/upload-from-drive.hook.ts","../../../../libs/modules/document-management/client/src/lib/features/drive-choose/drive-choose.module.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-file-uploader.widget.plugin.ts","../../../../libs/modules/document-management/client/src/lib/features/document-plugin/document.plugin.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-review.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-distribution.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-version.util.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/homogeneous-folder-grid.util.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/document-explorer.viewmodel.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/large-tiles/large-tiles-view-skeleton.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/large-tiles/large-tiles-view-skeleton.component.html","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/document-explorer.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/document-explorer.component.html","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/detail-panel/detail-panel.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-explorer/views/detail-panel/detail-panel.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/components/document-expiration-badge/document-expiration-badge.component.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/components/document-expiration-badge/document-expiration-badge.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/components/document-version-badge/document-version-badge.component.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/components/document-version-badge/document-version-badge.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/components/folder-expiration-badges/folder-expiration-badges.component.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/components/folder-expiration-badges/folder-expiration-badges.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/components/folder-path-breadcrumbs/folder-path-breadcrumbs.component.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/components/folder-path-breadcrumbs/folder-path-breadcrumbs.component.html","../../../../libs/modules/document-management/client/src/lib/features/shared/document-attachment-dialog.hooks.ts","../../../../libs/modules/document-management/client/src/lib/features/document-plugin/document-drive-page/document-drive-page.component.ts","../../../../libs/modules/document-management/client/src/lib/features/document-plugin/document-drive-page/document-drive-page.component.html","../../../../libs/modules/document-management/client/src/lib/features/document-plugin/document-drive-page/document-drive-page-component.provider.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/attachments-upload.middleware.ts","../../../../libs/modules/document-management/client/src/lib/features/shared/document-file-info-upload.middleware.ts","../../../../libs/modules/document-management/client/src/lib/document-management.module.ts","../../../../libs/modules/document-management/client/src/lib/features/drive/drive.component.ts","../../../../libs/modules/document-management/client/src/lib/features/drive/drive.component.html","../../../../libs/modules/document-management/client/src/acorex-platform-module-document-management-client.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex-platform/framework-client/core';\nimport { Injectable } from '@angular/core';\nimport { AXPDocumentManagementFeatureKeys } from '@acorex-platform/module-document-management-client/contracts';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Document Management Feature Definition Provider.\n * Provides feature definitions for the Document Management module.\n */\n@Injectable()\nexport class AXPDocumentManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Max Size Storage feature\n context.addFeature(AXPDocumentManagementFeatureKeys.MaxSizeStorage, {\n title: '@document-management:features.max-size-storage.title',\n description: '@document-management:features.max-size-storage.description',\n defaultValue: 1073741824, // 1GB in bytes (default)\n type: 'number',\n interface: {\n type: 'number-editor',\n options: {\n min: 1048576, // 1MB minimum\n max: 1099511627776, // 1TB maximum\n step: 1048576, // 1MB step\n },\n },\n });\n //\n }\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 AXPContentDocumentsPermissionKeys\n} from '@acorex-platform/module-document-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ----- Permission Definition Provider -----\n\n/**\n * Registers document capabilities into the shared Content & Documents group.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPContentDocumentsPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:content-documents.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ContentDocuments.Root, `${G}.content-documents.title`, `${G}.content-documents.description`, { order: 90 });\n\n context\n .addGroup(\n groups.ContentDocuments.Documents,\n `${G}.content-documents-documents.title`,\n `${G}.content-documents-documents.description`,\n { parent: groups.ContentDocuments.Root, order: 10 },\n )\n .addPermission(keys.Access, `${P}.access.title`, `${P}.access.description`)\n .endPermission()\n .addPermission(\n keys.MaintainDocuments,\n `${P}.maintain-documents.title`,\n `${P}.maintain-documents.description`,\n )\n .endPermission()\n .addPermission(\n keys.DistributeDocuments,\n `${P}.distribute-documents.title`,\n `${P}.distribute-documents.description`,\n )\n .endPermission()\n .addPermission(\n keys.ManageDocumentReview,\n `${P}.manage-document-review.title`,\n `${P}.manage-document-review.description`,\n )\n .endPermission()\n .addPermission(keys.Setup, `${P}.setup.title`, `${P}.setup.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","import { AXPFilterQuery, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { Injectable } from '@angular/core';\nimport {\n AXMDocumentDto,\n AXMDocumentDocDto,\n AXMDocumentManagementFolderEntityModel,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXMMetadataFieldInfo } from './document-manager.types';\n\n/** Breadcrumb segment returned by the combined drive contents endpoint. */\nexport type AXMDriveFolderPathSegment = Pick<\n AXMDocumentManagementFolderEntityModel,\n 'id' | 'title' | 'parentId' | 'color'\n>;\n\n/**\n * Combined response for one drive navigation: folder with one level of children + shortcuts,\n * breadcrumb path from the scope root and the resolved scope root id.\n */\nexport interface AXMDriveContentsDto {\n folder: AXMDocumentManagementFolderEntityModel;\n path: AXMDriveFolderPathSegment[];\n scopeRootId: string;\n}\n\n@Injectable()\nexport abstract class AXPDocumentManagementService {\n /**\n * Gets the root folder for the given scope.\n * Backend resolves tenant/user from request context (security: client sends only scope).\n */\n abstract getRoot(scope: AXPPlatformScope): Promise<AXMDocumentManagementFolderEntityModel>;\n\n /**\n * Single round-trip for one drive navigation: resolves the folder (or scope root when\n * `folderId` is omitted), one level of children, shortcuts and the breadcrumb path.\n */\n abstract getDriveContents(scope: AXPPlatformScope, folderId?: string): Promise<AXMDriveContentsDto>;\n\n /**\n * Gets (or creates) the folder bound to the given entity record.\n * Used by the document/EDMS plugin when viewing an entity single: loads the folder for that record.\n * @param refType Entity type (e.g. \"content-management.promotion\")\n * @param refId Entity record id\n * @returns The folder for this entity record\n */\n abstract getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<AXMDocumentManagementFolderEntityModel>;\n\n // Document methods\n abstract getDocumentPath(\n documentId: string,\n stopFolderId?: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n /**\n * Searches files under a folder tree.\n * `options.metadataFilters` may include the reserved `__quickSearch__` marker; the server routes\n * that to entity full-text search and applies other clauses against `metaDataForm`.\n * Optional `documentTypeIds` narrows by document type. `searchTerm` (or quick-search) matches\n * document name/title/description via full-text.\n */\n abstract searchFiles(\n searchTerm: string,\n rootFolderId: string,\n options?: { metadataFilters?: AXPFilterQuery[]; documentTypeIds?: string[] },\n ): Promise<AXMDocumentDto[]>;\n\n abstract findManyDocuments(ids: string[]): Promise<AXMDocumentDto[]>;\n\n /**\n * Lists files in a folder tree for Document Review or Document Distribution View.\n * Authorized for the assigned task user, ManageDocumentReview, or DistributeDocuments.\n */\n abstract listFolderReviewDocuments(folderId: string, taskId?: string): Promise<AXMDocumentDto[]>;\n\n /**\n * Returns how many documents are already past their expiration date (tenant-scoped).\n * Used by the Company Documents menu badge.\n */\n abstract getExpiredDocumentCount(): Promise<number>;\n\n // Folder methods\n abstract getFolderPath(folderId: string, stopFolderId?: string): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n abstract searchFolders(searchTerm: string, rootFolderId: string): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n // DocumentType methods\n abstract getDocumentTypeByName(name: string): Promise<AXMDocumentDocDto>;\n\n /**\n * Collects unique metadata field definitions across document types.\n * When `documentTypeIds` is omitted, the backend aggregates all types.\n * When `documentTypeIds` is an empty array, an empty list is returned (no types selected).\n * Otherwise only fields from the given document types are included (deduplicated by name).\n */\n abstract getUniqueMetadataDefinitions(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]>;\n}\n","//#region ----- Imports -----\n\nimport { AXPEntityBroadcastService } from '@acorex-platform/framework-client/core';\nimport { AXPTaskBadgeProvider } from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPCommandEventsService,\n type AXPCommandExecutionEvent,\n} from '@acorex-platform/framework-client/runtime';\nimport { DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { AXPDocumentManagementService } from './features/shared/document-management.service';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Menu `badgeKey` for Company Documents (tenant drive). */\nexport const AXM_COMPANY_DOCUMENTS_EXPIRED_BADGE_KEY = 'document-management-expired-badge';\n\nconst DOCUMENT_MANAGEMENT_COMMAND_PREFIX = 'DocumentManagement.';\nconst DOCUMENT_ENTITY = 'DocumentManagement.Document';\n\n//#endregion\n\n//#region ----- Task badge provider -----\n\n/**\n * Shows expired document count on the Company Documents menu item.\n *\n * Refreshes after:\n * - document-management commands (`DocumentManagement.*`)\n * - entity CRUD for Document (`Entity:Insert:Default` etc. — drive upload path)\n * - realtime `entity.mutation` → layout refresh broadcast for Document\n */\n@Injectable()\nexport class AXMDocumentExpiredBadgeProvider extends AXPTaskBadgeProvider {\n //#region ----- Services & Dependencies -----\n\n private readonly documentManagement = inject(AXPDocumentManagementService);\n private readonly commandEvents = inject(AXPCommandEventsService);\n private readonly entityBroadcast = inject(AXPEntityBroadcastService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- Signals & Properties -----\n\n readonly key = AXM_COMPANY_DOCUMENTS_EXPIRED_BADGE_KEY;\n readonly count = signal(0);\n\n //#endregion\n\n constructor() {\n super();\n\n void this.refresh();\n\n const unsubscribeCommands = this.commandEvents.listen((event) => {\n if (this.isRelevantDocumentCommandEvent(event)) {\n void this.handleCommandEvent(event);\n }\n });\n\n const layoutSub = this.entityBroadcast.listenLayoutRefresh().subscribe(({ data }) => {\n if (data?.name === DOCUMENT_ENTITY) {\n void this.refresh();\n }\n });\n\n this.destroyRef.onDestroy(() => {\n unsubscribeCommands();\n layoutSub.unsubscribe();\n });\n }\n\n //#region ----- Badge actions -----\n\n async refresh(): Promise<void> {\n try {\n const expiredCount = await this.documentManagement.getExpiredDocumentCount();\n this.count.set(expiredCount);\n } catch {\n this.count.set(0);\n }\n }\n\n private isRelevantDocumentCommandEvent(event: AXPCommandExecutionEvent): boolean {\n if (event.key.startsWith(DOCUMENT_MANAGEMENT_COMMAND_PREFIX)) {\n return true;\n }\n\n const input = event.input as Record<string, unknown> | undefined;\n const entity = input?.['entity'];\n if (entity === DOCUMENT_ENTITY) {\n return true;\n }\n\n const entityInfo = input?.['entityInfo'] as Record<string, unknown> | undefined;\n return (\n entityInfo?.['source'] === DOCUMENT_ENTITY ||\n (entityInfo?.['module'] === 'DocumentManagement' && entityInfo?.['name'] === 'Document')\n );\n }\n\n private async handleCommandEvent(event?: AXPCommandExecutionEvent): Promise<void> {\n if (!event || event.stage !== 'after' || !event.success) {\n return;\n }\n await this.refresh();\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPCommonMenuKeys } from '@acorex-platform/module-common-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPDocumentManagementMenuKeys } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPContentDocumentsPermissionKeys } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXM_COMPANY_DOCUMENTS_EXPIRED_BADGE_KEY } from './badge.provider';\n\n@Injectable()\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name;\n const scope = RootConfig.config.i18n;\n\n // My Drive: root level, after Task Board (priority 0)\n context.addItems([\n {\n name: AXPDocumentManagementMenuKeys.UserDrive,\n priority: 1,\n text: `@${scope}:menus.my-drive.title`,\n icon: 'fa-light fa-folder-open',\n path: `${appName}/drive/user`,\n data: { scope: 'user' },\n policy: {\n features: [module.name],\n },\n },\n ]);\n\n // Organization drive (tenant scope): shared folders for the current application session.\n context.addItems([\n {\n name: AXPDocumentManagementMenuKeys.TenantDrive,\n priority: 8120,\n text: `@${scope}:menus.tenant-documents.title`,\n icon: RootConfig.entities.document.icon,\n path: `${appName}/drive/tenant`,\n data: { scope: 'tenant' },\n badgeKey: AXM_COMPANY_DOCUMENTS_EXPIRED_BADGE_KEY,\n policy: {\n features: [module.name],\n permissions: [AXPContentDocumentsPermissionKeys.MaintainDocuments],\n },\n },\n ]);\n\n // Documents group under Configuration/Data and Content\n context.find(AXPCommonMenuKeys.DataAndContent).addItems([\n {\n name: AXPDocumentManagementMenuKeys.DocumentTypes,\n text: RootConfig.entities.documentType.title,\n path: this.entityService.createPath(module.name, RootConfig.entities.documentType.name),\n icon: RootConfig.entities.documentType.icon,\n priority: 1,\n policy: {\n features: [module.name],\n permissions: [AXPContentDocumentsPermissionKeys.Setup],\n },\n },\n ]);\n }\n}\n","import { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\n\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-document-type',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.documentType.name}`,\n entityInfo: { name: RootConfig.entities.documentType.name, module: RootConfig.module.name, title: RootConfig.entities.documentType.title },\n titleKey: '@document-management:permissions.document-type.create.title',\n descriptionKey: '@document-management:permissions.document-type.create.description',\n icon: RootConfig.entities.documentType.icon,\n }),\n ];\n}\n","//#region ---- Imports ----\n\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { Injectable } from '@angular/core';\nimport {\n AXPDocumentManagementSettings,\n RootConfig,\n type AXPDocumentFileDoubleClickAction,\n} from '@acorex-platform/module-document-management-client/contracts';\n\n//#endregion\n\n//#region ---- Module Constants ----\n\nconst I18N = '@document-management:settings';\n\nconst VIEW_MODE_OPTIONS = [\n { value: 'large-icons', text: `${I18N}.items.view-mode.options.large-icons` },\n { value: 'small-icons', text: `${I18N}.items.view-mode.options.small-icons` },\n { value: 'large-tiles', text: `${I18N}.items.view-mode.options.large-tiles` },\n { value: 'small-tiles', text: `${I18N}.items.view-mode.options.small-tiles` },\n { value: 'list', text: `${I18N}.items.view-mode.options.list` },\n { value: 'details', text: `${I18N}.items.view-mode.options.details` },\n] as const;\n\nconst SORT_FIELD_OPTIONS = [\n { value: 'name', text: `${I18N}.items.sort-field.options.name` },\n { value: 'modified', text: `${I18N}.items.sort-field.options.modified` },\n { value: 'size', text: `${I18N}.items.sort-field.options.size` },\n] as const;\n\nconst SORT_DIRECTION_OPTIONS = [\n { value: 'asc', text: `${I18N}.items.sort-direction.options.asc` },\n { value: 'desc', text: `${I18N}.items.sort-direction.options.desc` },\n] as const;\n\nconst FILE_DOUBLE_CLICK_OPTIONS: ReadonlyArray<{\n value: AXPDocumentFileDoubleClickAction;\n text: string;\n}> = [\n { value: 'gallery', text: `${I18N}.items.file-double-click-action.options.gallery` },\n { value: 'download', text: `${I18N}.items.file-double-click-action.options.download` },\n { value: 'view-or-download', text: `${I18N}.items.file-double-click-action.options.view-or-download` },\n];\n\n//#endregion\n\n/**\n * Registers document-management settings, including explorer layout prefs\n * (view mode, sort order) persisted from the drive toolbar.\n */\n@Injectable()\nexport class AXPDocumentManagementSettingProvider implements AXPSettingDefinitionProvider {\n //#region ---- AXPSettingDefinitionProvider ----\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'document-management',\n `${I18N}.group.title`,\n `${I18N}.group.description`,\n RootConfig.module.icon,\n undefined,\n 70,\n )\n .addSection(\n 'explorer-layout',\n `${I18N}.sections.explorer-layout.title`,\n `${I18N}.sections.explorer-layout.description`,\n )\n .addSetting({\n key: AXPDocumentManagementSettings.ViewMode,\n title: `${I18N}.items.view-mode.title`,\n description: `${I18N}.items.view-mode.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'large-icons',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: [...VIEW_MODE_OPTIONS],\n },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.SortField,\n title: `${I18N}.items.sort-field.title`,\n description: `${I18N}.items.sort-field.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'name',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: [...SORT_FIELD_OPTIONS],\n },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.SortDirection,\n title: `${I18N}.items.sort-direction.title`,\n description: `${I18N}.items.sort-direction.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'asc',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: [...SORT_DIRECTION_OPTIONS],\n },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.GroupByType,\n title: `${I18N}.items.group-by-type.title`,\n description: `${I18N}.items.group-by-type.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: true,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n options: { label: null },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.DetailPanelOpen,\n title: `${I18N}.items.detail-panel-open.title`,\n description: `${I18N}.items.detail-panel-open.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: false,\n widget: {\n type: AXPWidgetsList.Editors.ToggleSwitch,\n options: { label: null },\n },\n })\n .addSetting({\n key: AXPDocumentManagementSettings.FileDoubleClickAction,\n title: `${I18N}.items.file-double-click-action.title`,\n description: `${I18N}.items.file-double-click-action.description`,\n scope: 'U',\n overridableAt: [],\n isInherited: false,\n defaultValue: 'gallery',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'value',\n textField: 'text',\n dataSource: [...FILE_DOUBLE_CLICK_OPTIONS],\n },\n },\n })\n .endSection()\n .endGroup();\n }\n\n //#endregion\n}\n","import {\n AX_AUDIO_FILE_TYPE,\n AX_DOCUMENT_FILE_TYPE,\n AX_FILE_FILE_TYPE,\n AX_IMAGE_FILE_TYPE,\n AX_VIDEO_FILE_TYPE,\n AX_FILE_TYPE_METADATA_PURPOSE,\n type AXFileType,\n} from '@acorex/core/file';\n\nimport type { AXPFileExtension, AXPFileType } from '@acorex-platform/framework-client/common';\n\n//#region ---- Icons (seed / explorer style) ----\n\n/** Parent type icons — aligned with `document-type.mock.ts` `TYPE` constants. */\nexport const DM_FILE_TYPE_ICONS = {\n document: 'fa-solid fa-file-pdf text-red-600',\n image: 'fa-solid fa-image text-purple-500',\n file: 'fa-solid fa-file',\n video: 'fa-solid fa-file-video text-red-500',\n audio: 'fa-solid fa-file-audio text-green-500',\n} as const;\n\n/** Per-extension icons for the `document` logical type (office / text). */\nexport const DM_DOCUMENT_EXTENSION_ICONS = {\n pdf: 'fa-solid fa-file-pdf text-red-600',\n doc: 'fa-solid fa-file-word text-blue-700',\n docx: 'fa-solid fa-file-word text-blue-700',\n xls: 'fa-solid fa-file-excel text-green-700',\n xlsx: 'fa-solid fa-file-excel text-green-700',\n ppt: 'fa-solid fa-file-powerpoint text-orange-700',\n pptx: 'fa-solid fa-file-powerpoint text-orange-700',\n txt: 'fa-solid fa-file-lines text-blue-600',\n rtf: 'fa-solid fa-file-lines text-blue-600',\n} as const;\n\n/** Per-extension icons for video files. */\nexport const DM_VIDEO_EXTENSION_ICONS = {\n mp4: 'fa-solid fa-file-video text-blue-500',\n webm: 'fa-solid fa-file-video text-blue-500',\n mov: 'fa-solid fa-file-video text-blue-500',\n m4v: 'fa-solid fa-file-video text-blue-500',\n avi: 'fa-solid fa-file-video text-blue-500',\n mkv: 'fa-solid fa-file-video text-blue-500',\n wmv: 'fa-solid fa-file-video text-blue-500',\n} as const;\n\n/** Per-extension icons for audio files. */\nexport const DM_AUDIO_EXTENSION_ICONS = {\n mp3: 'fa-solid fa-file-audio text-amber-500',\n wav: 'fa-solid fa-file-audio text-amber-500',\n ogg: 'fa-solid fa-file-audio text-amber-500',\n oga: 'fa-solid fa-file-audio text-amber-500',\n m4a: 'fa-solid fa-file-audio text-amber-500',\n flac: 'fa-solid fa-file-audio text-amber-500',\n aac: 'fa-solid fa-file-audio text-amber-500',\n wma: 'fa-solid fa-file-audio text-amber-500',\n weba: 'fa-solid fa-file-audio text-amber-500',\n} as const;\n\n/** Per-extension icons for the generic `file` logical type (archives & misc). */\nexport const DM_FILE_EXTENSION_ICONS = {\n zip: 'fa-solid fa-file-zipper text-orange-500',\n rar: 'fa-solid fa-file-zipper text-orange-500',\n '7z': 'fa-solid fa-file-zipper text-orange-500',\n tar: 'fa-solid fa-file-zipper text-orange-500',\n gz: 'fa-solid fa-file-zipper text-orange-500',\n json: 'fa-solid fa-file-code text-green-500',\n xml: 'fa-solid fa-file-code text-green-500',\n csv: 'fa-solid fa-file-csv text-green-600',\n} as const;\n\n//#endregion\n\n//#region ---- Catalog builder ----\n\nfunction ext(\n name: string,\n title: string,\n icon: string,\n): AXPFileExtension {\n return { name, title, icon };\n}\n\nfunction mapToAxp(type: AXFileType, icon: string, extensions: AXPFileExtension[]): AXPFileType {\n return {\n name: type.name,\n title: type.title ?? type.name,\n icon,\n metadata: type.metadata ?? { [AX_FILE_TYPE_METADATA_PURPOSE]: ['system', 'document'] },\n extensions,\n };\n}\n\n/** Full `document` type: office / PDF extensions with DM icon shapes. */\nfunction buildDocumentType(): AXPFileType {\n return mapToAxp(AX_DOCUMENT_FILE_TYPE, DM_FILE_TYPE_ICONS.document, [\n ext('pdf', 'PDF', DM_DOCUMENT_EXTENSION_ICONS.pdf),\n ext('doc', 'Word', DM_DOCUMENT_EXTENSION_ICONS.doc),\n ext('docx', 'Word', DM_DOCUMENT_EXTENSION_ICONS.docx),\n ext('xls', 'Excel', DM_DOCUMENT_EXTENSION_ICONS.xls),\n ext('xlsx', 'Excel', DM_DOCUMENT_EXTENSION_ICONS.xlsx),\n ext('ppt', 'PowerPoint', DM_DOCUMENT_EXTENSION_ICONS.ppt),\n ext('pptx', 'PowerPoint', DM_DOCUMENT_EXTENSION_ICONS.pptx),\n ext('txt', 'Text', DM_DOCUMENT_EXTENSION_ICONS.txt),\n ext('rtf', 'Rich Text', DM_DOCUMENT_EXTENSION_ICONS.rtf),\n ]);\n}\n\n/** Generic `file` type: archives and misc — not office documents. */\nfunction buildFileType(): AXPFileType {\n return mapToAxp(AX_FILE_FILE_TYPE, DM_FILE_TYPE_ICONS.file, [\n ext('zip', 'ZIP', DM_FILE_EXTENSION_ICONS.zip),\n ext('rar', 'RAR', DM_FILE_EXTENSION_ICONS.rar),\n ext('7z', '7-Zip', DM_FILE_EXTENSION_ICONS['7z']),\n ext('tar', 'TAR', DM_FILE_EXTENSION_ICONS.tar),\n ext('gz', 'GZIP', DM_FILE_EXTENSION_ICONS.gz),\n ext('json', 'JSON', DM_FILE_EXTENSION_ICONS.json),\n ext('xml', 'XML', DM_FILE_EXTENSION_ICONS.xml),\n ext('csv', 'CSV', DM_FILE_EXTENSION_ICONS.csv),\n ]);\n}\n\nfunction buildImageType(): AXPFileType {\n const icon = DM_FILE_TYPE_ICONS.image;\n return mapToAxp(AX_IMAGE_FILE_TYPE, icon, [\n ext('jpg', 'JPEG', icon),\n ext('jpeg', 'JPEG', icon),\n ext('png', 'PNG', icon),\n ext('gif', 'GIF', icon),\n ext('webp', 'WebP', icon),\n ext('svg', 'SVG', icon),\n ]);\n}\n\nfunction buildVideoType(): AXPFileType {\n const fallback = DM_FILE_TYPE_ICONS.video;\n return mapToAxp(AX_VIDEO_FILE_TYPE, fallback, [\n ext('mp4', 'MP4', DM_VIDEO_EXTENSION_ICONS.mp4),\n ext('webm', 'WebM', DM_VIDEO_EXTENSION_ICONS.webm),\n ext('mov', 'MOV', DM_VIDEO_EXTENSION_ICONS.mov),\n ext('m4v', 'M4V', DM_VIDEO_EXTENSION_ICONS.m4v),\n ext('avi', 'AVI', DM_VIDEO_EXTENSION_ICONS.avi),\n ext('mkv', 'MKV', DM_VIDEO_EXTENSION_ICONS.mkv),\n ext('wmv', 'WMV', DM_VIDEO_EXTENSION_ICONS.wmv),\n ]);\n}\n\nfunction buildAudioType(): AXPFileType {\n const fallback = DM_FILE_TYPE_ICONS.audio;\n return mapToAxp(AX_AUDIO_FILE_TYPE, fallback, [\n ext('mp3', 'MP3', DM_AUDIO_EXTENSION_ICONS.mp3),\n ext('wav', 'WAV', DM_AUDIO_EXTENSION_ICONS.wav),\n ext('ogg', 'OGG', DM_AUDIO_EXTENSION_ICONS.ogg),\n ext('oga', 'OGA', DM_AUDIO_EXTENSION_ICONS.oga),\n ext('m4a', 'M4A', DM_AUDIO_EXTENSION_ICONS.m4a),\n ext('flac', 'FLAC', DM_AUDIO_EXTENSION_ICONS.flac),\n ext('aac', 'AAC', DM_AUDIO_EXTENSION_ICONS.aac),\n ext('wma', 'WMA', DM_AUDIO_EXTENSION_ICONS.wma),\n ext('weba', 'WebA', DM_AUDIO_EXTENSION_ICONS.weba),\n ]);\n}\n\n/**\n * Document-management file-type catalog: ACoreX built-in types reshaped with DM icons.\n * Consumed via {@link AXPFileTypeProviderService} only (no registry bridge).\n */\nexport function buildDocumentManagementFileTypeCatalog(): AXPFileType[] {\n return [\n buildDocumentType(),\n buildImageType(),\n buildAudioType(),\n buildVideoType(),\n buildFileType(),\n ];\n}\n\n//#endregion\n","import { Injectable } from '@angular/core';\n\nimport { AXPFileType, AXPFileTypeInfoProvider } from '@acorex-platform/framework-client/common';\n\nimport { buildDocumentManagementFileTypeCatalog } from './document-management-file-type.catalog';\n\n//#region ---- Document management file-type provider ----\n\n/**\n * Single catalog provider for document management.\n * Register on {@link AXP_FILE_TYPE_INFO_PROVIDER}; consumers use {@link AXPFileTypeProviderService}.\n */\n@Injectable()\nexport class AXMDocumentManagementFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return buildDocumentManagementFileTypeCatalog();\n }\n}\n\n//#endregion\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetColumnComponent extends AXPValueWidgetComponent<any> { }\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetDesignerComponent extends AXPValueWidgetComponent<any> { }\n","\nimport { AXPContextChangeEvent, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXLookupComponent, type AXLookupSelectionChangedEvent } from '@acorex/components/lookup';\nimport { AXPFileType, AXPFileTypeProviderService } from '@acorex-platform/framework-client/common';\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport get from 'lodash-es/get';\nimport isEmpty from 'lodash-es/isEmpty';\nimport isString from 'lodash-es/isString';\nimport set from 'lodash-es/set';\nimport { AXAccordionModule } from '@acorex/components/accordion';\n\n@Component({\n template: ` <div>\n <ax-lookup\n #dd\n mode=\"multi-select\"\n [dataSource]=\"dataSource\"\n valueField=\"name\"\n textField=\"title\"\n [searchable]=\"true\"\n [ngModel]=\"$safeNavigationMigration(getValue()?.selectedItems)\"\n (onValueChanged)=\"handleValueChange($event)\"\n (onSelectionChanged)=\"handleSelectionChanged($event)\"\n >\n <ax-search-box\n [autoSearch]=\"false\"\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"handleSearchQueryChange($event)\"\n (onValueChanged)=\"handleSearchValueChange($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </ax-lookup>\n <div class=\"py-3\"></div>\n <axp-widgets-container (onContextChanged)=\"handleOnContextChange($event)\" [context]=\"context()\">\n @if (selectedItemsNotEmpty().length > 0) {\n <ax-accordion-group>\n @for (item of selectedItemsNotEmpty(); track item.name) {\n <!-- File Types -->\n <ax-accordion-item [caption]=\"item.title\">\n <div class=\"flex flex-col gap-5\">\n @if (item.meta && item.meta.length > 0) {\n <div class=\"flex flex-col gap-2\">\n <ax-text [textContent]=\"'Global Meta Data'\" class=\"font-bold text-sm\"></ax-text>\n @for (metaFile of item.meta; track metaFile.name) {\n <!-- File Meta Data -->\n <ax-form-field>\n <ax-label [required]=\"filedIsRequired(metaFile)\">{{ metaFile.title }}</ax-label>\n <ng-container axp-widget-renderer [node]=\"getNode(metaFile)\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </div>\n }\n @if (item.extensions && item.extensions.length > 0) {\n <div class=\"flex flex-col gap-3\">\n @for (ext of item.extensions; track ext.name) {\n <!-- Extensions -->\n @if (ext.meta && ext.meta.length > 0) {\n <ax-text [textContent]=\"ext.title\" class=\"font-bold text-sm\"></ax-text>\n <div class=\"flex flex-col gap-2\">\n @for (extMeta of ext.meta; track $index) {\n <!-- Extension Meta Data -->\n <ax-form-field>\n <ax-label [required]=\"filedIsRequired(extMeta)\">{{ extMeta.title }}</ax-label>\n <ng-container\n axp-widget-renderer\n [node]=\"getNode(extMeta)\"\n [mode]=\"'edit'\"\n ></ng-container>\n </ax-form-field>\n }\n </div>\n }\n <!-- End Extension Meta Data -->\n }\n </div>\n <!-- End Extensions -->\n }\n </div>\n </ax-accordion-item>\n }\n <!-- End File Types -->\n </ax-accordion-group>\n }\n </axp-widgets-container>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXLookupComponent,\n FormsModule,\n AXFormModule,\n AXLabelModule,\n AXDecoratorModule,\n AXSearchBoxModule,\n AXPWidgetCoreModule,\n AXAccordionModule,\n ],\n inputs: [],\n})\nexport class AXMFileTypeExtensionWidgetEditComponent extends AXPValueWidgetComponent<any> {\n protected fileTypeService = inject(AXPFileTypeProviderService);\n protected searchValue = signal<string | undefined>(undefined);\n protected dataSource = new AXDataSource<unknown>({\n load: async (_) => {\n try {\n const res = await this.fileTypeService.items();\n const items = res.map((item) => ({\n name: item.name,\n title: item.title,\n icon: item.icon,\n }));\n\n const query = this.normalizeSearchQuery(this.searchValue());\n const filtered = query\n ? items.filter(\n (item) =>\n item.title.toLowerCase().includes(query) ||\n item.name.toLowerCase().includes(query),\n )\n : items;\n\n return {\n items: filtered,\n total: filtered.length,\n };\n } catch (e) {\n console.log(e);\n }\n return {\n items: [],\n total: 0,\n };\n },\n pageSize: 100,\n });\n\n public selectedItems = signal<AXPFileType[]>(this.getValue()?.selectedItems ?? []);\n public selectedItemsNotEmpty = signal<AXPFileType[]>(\n this.selectedItems().filter((item) => this.hasFields(item)),\n );\n public context = signal<any>(this.getValue()?.context ?? {});\n\n override ngOnInit() {\n super.ngOnInit();\n this.selectedItems.set(this.getValue()?.selectedItems ?? []);\n this.selectedItemsNotEmpty.set(this.selectedItems().filter((item) => this.hasFields(item)));\n this.context.set(this.getValue()?.context ?? {});\n }\n\n protected override outputs(): string[] {\n return ['selectedItems', 'context'];\n }\n\n protected handleOnContextChange(e: AXPContextChangeEvent) {\n this.context.set(e.data);\n this.setValue({ ...this.getValue(), context: e.data });\n }\n\n protected handleSearchQueryChange(value: unknown): void {\n this.applySearchQuery(value);\n }\n\n protected handleSearchValueChange(e: AXValueChangedEvent): void {\n this.applySearchQuery(e.value);\n }\n\n private applySearchQuery(value: unknown): void {\n const next = isString(value) && !isEmpty(value.trim()) ? value : undefined;\n if (this.searchValue() === next) {\n return;\n }\n\n this.searchValue.set(next);\n void this.dataSource.refresh();\n }\n\n private normalizeSearchQuery(value: unknown): string | undefined {\n if (!isString(value) || isEmpty(value.trim())) {\n return undefined;\n }\n return value.trim().toLowerCase();\n }\n\n protected async handleSelectionChanged(e: AXLookupSelectionChangedEvent) {\n const selectItems = (e.items ?? []) as Array<{\n name: string;\n title: string;\n icon?: string;\n }>;\n await this.applySelectedItems(selectItems);\n }\n\n protected async handleValueChange(_e: AXValueChangedEvent) {\n // Selection side-effects are handled in handleSelectionChanged.\n }\n\n private async applySelectedItems(\n selectItems: Array<{\n name: string;\n title: string;\n icon?: string;\n }>,\n ): Promise<void> {\n this.setValue({ ...this.getValue(), selectedItems: selectItems });\n\n const types: AXPFileType[] = [];\n for (const item of selectItems) {\n const fileType = await this.fileTypeService.get(item.name);\n if (fileType) {\n types.push(fileType);\n }\n }\n\n this.selectedItems.set(types);\n this.selectedItemsNotEmpty.set(types.filter((item) => this.hasFields(item)));\n }\n\n protected getNode(meta: any): AXPWidgetNode {\n return get(meta, '__node__');\n }\n\n protected filedIsRequired(meta: any): boolean {\n const node = get(meta, '__node__');\n if (node && node.options && node.options.validations) {\n return node.options.validations.some((validation: any) => validation.rule === 'required');\n }\n return false;\n }\n\n protected hasMetaInExtensions(extensions: any[]): boolean {\n return extensions.some((ext) => ext.meta && ext.meta.length > 0);\n }\n\n protected hasFields(item: AXPFileType): boolean {\n // Check if item has global meta fields\n if (item.meta && item.meta.length > 0) {\n return true;\n }\n\n // Check if any extension has meta fields\n if (item.extensions && item.extensions.length > 0) {\n return this.hasMetaInExtensions(item.extensions);\n }\n return false;\n }\n}\n","import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetViewComponent extends AXPValueWidgetComponent<any> { }\n","import { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_WIDGETS_ADVANCE_CATEGORY } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\n\nexport const AXmFileTypeExtensionWidget: AXPWidgetConfig = {\n name: 'file-type-extension',\n title: '@document-management:widgets.file-type-extension.title',\n description: 'Uploads and manages files',\n icon: 'fa-light fa-files',\n categories: AXP_WIDGETS_ADVANCE_CATEGORY,\n type: 'editor',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],\n components: {\n view: {\n component: () =>\n import('./file-type-extension-view.component').then((c) => c.AXMFileTypeExtensionWidgetViewComponent),\n },\n edit: {\n component: () =>\n import('./file-type-extension-edit.component').then((c) => c.AXMFileTypeExtensionWidgetEditComponent),\n },\n // filter: {\n // component: () => import('./file-type-extension-filter.component').then((c) => c.AXPFileBoxWidgetFilterComponent),\n // },\n column: {\n component: () =>\n import('./file-type-extension-column.component').then((c) => c.AXMFileTypeExtensionWidgetColumnComponent),\n },\n // print: {\n // component: () => import('./file-type-extension-print.component').then((c) => c.AXPFileBoxWidgetPrintComponent),\n // },\n designer: {\n component: () =>\n import('./file-type-extension-edit.component').then((c) => c.AXMFileTypeExtensionWidgetEditComponent),\n },\n },\n};\n\ndeclare module '@acorex-platform/framework-shared/widget-core' {\n interface AXPWidgetTypesMap {\n fileTypeExtension: 'file-type-extension';\n }\n}\n","import { AXFileModule } from '@acorex/core/file';\nimport { AXP_FILE_TYPE_INFO_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXMDocumentManagementFileTypeProvider } from './providers/document-management-file-type.provider';\n\n//#region ---- Document management file-type module ----\n\n/**\n * Registers the document-management file-type catalog on {@link AXP_FILE_TYPE_INFO_PROVIDER}.\n * {@link AXFileModule.forRoot()} keeps {@link AXFileService} / validation rules for uploads.\n */\n@NgModule({\n imports: [AXFileModule.forRoot()],\n providers: [\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMDocumentManagementFileTypeProvider,\n multi: true,\n },\n ],\n exports: [AXFileModule],\n})\nexport class AXMFileTypeModule {}\n\n//#endregion\n","\nimport { AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_NAME_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\n\nexport const AXP_DOCUMENT_FILE_TYPE_FILTER_DEFAULT_OPERATOR = 'equal' as const;\n\nexport const AXmDocumentFileTypeFilterWidget: AXPWidgetConfig = {\n name: 'document-file-type-filter',\n title: '@document-management:widgets.file-type-filter.title',\n type: 'filter',\n defaultFilterOperator: AXP_DOCUMENT_FILE_TYPE_FILTER_DEFAULT_OPERATOR,\n icon: 'fa-light fa-file',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],\n components: {\n edit: {\n component: () =>\n import('./document-file-type-filter-widget-edit.component').then(\n (c) => c.AXmDocumentFileTypeFilterWidgetEditComponent,\n ),\n },\n },\n};\n\ndeclare module '@acorex-platform/framework-shared/widget-core' {\n interface AXPWidgetTypesMap {\n documentFileTypeFilter: 'document-file-type-filter';\n }\n}\n","import { AXPFileTypeProviderService } from '@acorex-platform/framework-client/common';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXDataSource, AXItemSelectedEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLookupComponent, type AXLookupItem } from '@acorex/components/lookup';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXP_DOCUMENT_FILE_TYPE_FILTER_DEFAULT_OPERATOR } from './document-file-type-filter-widget.config';\n\n//#region ----- Types -----\n\ninterface FileTypeFilterItem {\n name: string;\n title: string;\n icon?: string;\n}\n\ninterface FileTypeFilterValue {\n value?: string | null;\n operation?: { type: string };\n displayText?: string;\n}\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n template: `\n <div class=\"flex items-center w-full\">\n <ax-lookup\n #lookup\n class=\"w-full\"\n mode=\"drop-down-list\"\n textField=\"title\"\n valueField=\"name\"\n [searchable]=\"false\"\n [placeholder]=\"('@general:actions.select.title' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [ngModel]=\"value()\"\n (onItemSelected)=\"handleItemSelected($event)\"\n (onValueChanged)=\"handleValueChange($event)\"\n [itemTemplate]=\"itemTemplate\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-lookup>\n <ng-template #itemTemplate let-item>\n <div class=\"flex items-center gap-2 w-full ps-2\">\n <!-- ----- File type icon when the item defines one ----- -->\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span class=\"truncate\">{{ item.title }}</span>\n </div>\n </ng-template>\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, AXDecoratorModule, AXLookupComponent, AXTranslationModule],\n})\nexport class AXmDocumentFileTypeFilterWidgetEditComponent extends AXPValueWidgetComponent<FileTypeFilterValue> {\n //#region ----- Services & Dependencies -----\n\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- View Children -----\n\n protected lookup = viewChild<AXLookupComponent>('lookup');\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected value = computed(() => this.getValue()?.value);\n\n //#endregion\n\n //#region ----- Data Source -----\n\n private loadedItems: FileTypeFilterItem[] = [];\n\n protected readonly dataSource = new AXDataSource<FileTypeFilterItem>({\n load: async () => {\n const items = await this.loadItems();\n this.loadedItems = items;\n return { items, total: items.length };\n },\n byKey: async (id: unknown) => {\n const key = String(id ?? '');\n const cached = this.loadedItems.find((item) => item.name === key);\n if (cached) {\n return cached;\n }\n const items = await this.loadItems();\n this.loadedItems = items;\n return items.find((item) => item.name === key) ?? { name: key, title: key, icon: 'fa-light fa-file' };\n },\n pageSize: 100,\n key: 'name',\n });\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n /**\n * Lookup may skip `onValueChanged` on the first pick (`#lastValue === undefined`).\n * `onItemSelected` always fires from `handleSinglePick`.\n */\n protected handleItemSelected(e: AXItemSelectedEvent<AXLookupItem>) {\n const item = e.item;\n if (item == null) {\n return;\n }\n const text = item['title'] ?? item['text'];\n this.commitSelection(item['name'] ?? item['value'], typeof text === 'string' ? text : undefined);\n }\n\n protected handleValueChange(e: AXValueChangedEvent) {\n this.commitSelection(e.value);\n }\n\n focus(): void {\n this.lookup()?.focus();\n }\n\n //#endregion\n\n //#region ----- Value Pipeline -----\n\n private async loadItems(): Promise<FileTypeFilterItem[]> {\n const allTitle = await this.translateService.translateAsync('@document-management:drive.filters.file-types.all');\n const types = await this.fileTypeService.items();\n return [\n { name: 'all', title: allTitle, icon: 'fa-light fa-folder-closed' },\n ...types.map((type) => ({ name: type.name, title: type.title, icon: type.icon || 'fa-light fa-file' })),\n ];\n }\n\n private commitSelection(value: unknown, displayText?: string): void {\n const resolved = this.resolveFileTypeValue(value);\n const text =\n displayText ??\n (typeof resolved === 'string' ? this.loadedItems.find((item) => item.name === resolved)?.title : undefined);\n\n this.setValue({\n operation: { type: AXP_DOCUMENT_FILE_TYPE_FILTER_DEFAULT_OPERATOR },\n value: resolved,\n ...(text ? { displayText: text } : {}),\n });\n }\n\n private resolveFileTypeValue(value: unknown): string | null {\n if (value == null || value === '') {\n return null;\n }\n if (typeof value === 'object' && 'name' in (value as Record<string, unknown>)) {\n const name = (value as { name: unknown }).name;\n return name == null || name === '' ? null : String(name);\n }\n return String(value);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXmFileTypeExtensionWidget } from './features/file-type';\nimport { AXmDocumentFileTypeFilterWidget } from './features/drive/widgets/file-type-filter';\n//#endregion\n\n//#region ---- Document Management Widgets Provider ----\n\nconst DOCUMENT_WIDGETS = [AXmFileTypeExtensionWidget, AXmDocumentFileTypeFilterWidget];\n\n@Injectable()\nexport class AXMDocumentManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return DOCUMENT_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXPStatusDefinition,\n AXPStatusProvider,\n AXPStatusTransition,\n AXPSystemStatusType,\n systemStatusToDefinition,\n} from '@acorex-platform/framework-shared/core';\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport const AXM_DOCUMENT_EXPIRATION_STATUS_DEFINITION_KEY =\n 'document-management.status.document-expiration';\n\nexport const AXM_DOCUMENT_EXPIRATION_STATUS = {\n near: 'near',\n expired: AXPSystemStatusType.Expired,\n} as const;\n\n//#endregion\n\n//#region ----- Status provider -----\n\n/**\n * Near / expired chips for document expiration reports (read-only; no transitions).\n */\nexport class AXMDocumentExpirationStatusProvider extends AXPStatusProvider {\n readonly key = AXM_DOCUMENT_EXPIRATION_STATUS_DEFINITION_KEY;\n\n readonly defaultStatus = AXM_DOCUMENT_EXPIRATION_STATUS.near;\n\n readonly statuses: AXPStatusDefinition[] = [\n {\n name: AXM_DOCUMENT_EXPIRATION_STATUS.near,\n title: '@document-management:terms.document.expiration-badge.expiring-soon',\n icon: 'fa-light fa-hourglass-half',\n color: 'warning',\n order: 1,\n isInitial: true,\n isFinal: false,\n generateView: false,\n },\n systemStatusToDefinition(AXPSystemStatusType.Expired, {\n title: '@document-management:terms.document.expiration-badge.expired',\n generateView: false,\n }),\n ];\n\n readonly transitions: AXPStatusTransition[] = [];\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n AXM_DOCUMENT_EXPIRATION_NEAR_DAYS,\n getDocumentExpirationRemainingDays,\n toDocumentExpirationDate,\n} from '@acorex-platform/module-document-management-client/contracts';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type AXMDocumentExpirationBadgeStatus = 'expired' | 'expiring-soon';\n\nexport type AXMDocumentExpirationBadge = {\n status: AXMDocumentExpirationBadgeStatus;\n /** ax-badge color token */\n color: 'danger' | 'warning';\n textKey: string;\n tooltipKey: string;\n date: Date;\n};\n\nexport type AXMFolderExpirationCountBadge = {\n status: AXMDocumentExpirationBadgeStatus;\n color: 'danger' | 'warning';\n tooltipKey: string;\n count: number;\n};\n\n//#endregion\n\n//#region ----- Constants -----\n\nexport { AXM_DOCUMENT_EXPIRATION_NEAR_DAYS, toDocumentExpirationDate };\n\nconst I18N_PREFIX = '@document-management:terms.document.expiration-badge';\nconst FOLDER_I18N_PREFIX = '@document-management:terms.document.folder-expiration-badge';\n\n//#endregion\n\n//#region ----- Public API -----\n\n/**\n * Badge from document `expirationDate` only (platform field when enableExpiration is on).\n */\nexport function resolveDocumentExpirationBadge(\n source: { expirationDate?: Date | string | number | null },\n options?: { nearDays?: number; now?: Date },\n): AXMDocumentExpirationBadge | null {\n const date = toDocumentExpirationDate(source.expirationDate);\n if (!date) {\n return null;\n }\n\n const now = options?.now ?? new Date();\n const nearDays = options?.nearDays ?? AXM_DOCUMENT_EXPIRATION_NEAR_DAYS;\n const remainingDays = getDocumentExpirationRemainingDays(date, now);\n\n if (remainingDays < 0) {\n return {\n status: 'expired',\n color: 'danger',\n textKey: `${I18N_PREFIX}.expired`,\n tooltipKey: `${I18N_PREFIX}.expired-tooltip`,\n date,\n };\n }\n\n if (remainingDays <= nearDays) {\n return {\n status: 'expiring-soon',\n color: 'warning',\n textKey: `${I18N_PREFIX}.expiring-soon`,\n tooltipKey: `${I18N_PREFIX}.expiring-soon-tooltip`,\n date,\n };\n }\n\n return null;\n}\n\n/**\n * Folder badges from denormalized subtree `expiredItemsCount` / `nearExpiryItemsCount`\n * (direct documents in the folder + nested folder aggregates).\n */\nexport function resolveFolderExpirationCountBadges(source: {\n expiredItemsCount?: number | null;\n nearExpiryItemsCount?: number | null;\n}): AXMFolderExpirationCountBadge[] {\n const badges: AXMFolderExpirationCountBadge[] = [];\n const expired = Number(source.expiredItemsCount ?? 0);\n const near = Number(source.nearExpiryItemsCount ?? 0);\n\n if (expired > 0) {\n badges.push({\n status: 'expired',\n color: 'danger',\n count: expired,\n tooltipKey: `${FOLDER_I18N_PREFIX}.expired-tooltip`,\n });\n }\n if (near > 0) {\n badges.push({\n status: 'expiring-soon',\n color: 'warning',\n count: near,\n tooltipKey: `${FOLDER_I18N_PREFIX}.expiring-soon-tooltip`,\n });\n }\n return badges;\n}\n\n//#endregion\n","import { AXPFileListItem } from '@acorex-platform/framework-shared/core';\n\nimport { unset } from 'lodash';\nimport { AXMDocumentDto } from '@acorex-platform/module-document-management-client/contracts';\n\n/** Storage id from a document `fileInfo` object or `file:` reference. */\nexport function resolveDocumentStorageFileId(fileInfo: unknown): string | undefined {\n if (!fileInfo) {\n return undefined;\n }\n if (typeof fileInfo === 'string') {\n return fileInfo.startsWith('file:') ? fileInfo.slice(5) : fileInfo;\n }\n const item = fileInfo as AXPFileListItem;\n if (item.source?.kind === 'fileId' && typeof item.source.value === 'string') {\n const storedId = item.source.value.replace(/^file:/, '').trim();\n return storedId || undefined;\n }\n // Blob, URL, and reference items are not file-storage records. Seeded documents use\n // `source.kind === 'url'` with a mock row `id` — that id must not be sent to storage.\n if (\n item.source?.kind === 'blob' ||\n item.source?.kind === 'url' ||\n item.source?.kind === 'preview' ||\n item.source?.kind === 'reference' ||\n item.source?.kind === 'none'\n ) {\n return undefined;\n }\n if (typeof item.id === 'string' && item.id.trim() !== '') {\n return item.id.replace(/^file:/, '');\n }\n return undefined;\n}\n\n/**\n * Resolves demo / seeded asset URLs to the current app origin.\n * Handles relative `/assets/...` paths and legacy absolute URLs baked in at seed time (e.g. localhost:4200).\n */\nexport function resolveClientAssetUrl(url: string): string {\n const trimmed = url?.trim();\n if (!trimmed) {\n return trimmed;\n }\n\n if (trimmed.startsWith('/assets/')) {\n if (typeof globalThis !== 'undefined' && 'location' in globalThis) {\n const origin = (globalThis as { location?: { origin?: string } }).location?.origin;\n if (origin) {\n return `${origin}${trimmed}`;\n }\n }\n return trimmed;\n }\n\n try {\n const base =\n typeof globalThis !== 'undefined' && 'location' in globalThis\n ? (globalThis as { location: { origin: string } }).location.origin\n : undefined;\n const parsed = new URL(trimmed, base ?? 'http://localhost');\n if (!parsed.pathname.startsWith('/assets/')) {\n return trimmed;\n }\n if (base && parsed.origin !== base) {\n return `${base}${parsed.pathname}${parsed.search}${parsed.hash}`;\n }\n } catch {\n return trimmed;\n }\n\n return trimmed;\n}\n\nexport function documentDtoToFileItem(doc: AXMDocumentDto): AXPFileListItem {\n const fileInfo = doc.fileInfo;\n unset(doc, 'fileInfo');\n return { ...fileInfo, meta: doc };\n}\n\nexport function fileItemToDocumentDto(item: AXPFileListItem): AXMDocumentDto {\n const meta = item.meta;\n unset(item, 'meta');\n return { ...meta, fileInfo: item } as AXMDocumentDto;\n}\n","//#region ----- Constants -----\n\n/**\n * Default folder icon color (Tailwind `yellow-400`).\n * Used when color is missing, empty, or the legacy seed value `#FFFFFF`.\n */\nexport const AXM_DEFAULT_FOLDER_COLOR = '#FACC15';\n\n//#endregion\n\n//#region ----- Helpers -----\n\n/**\n * Resolves the folder accent color for UI / create-update defaults.\n * Legacy `#FFF` / `#FFFFFF` values map to the standard yellow folder color.\n */\nexport function resolveFolderColor(color?: unknown): string {\n const trimmed = typeof color === 'string' ? color.trim() : '';\n if (!trimmed) {\n return AXM_DEFAULT_FOLDER_COLOR;\n }\n const normalized = trimmed.toUpperCase();\n if (normalized === '#FFF' || normalized === '#FFFFFF') {\n return AXM_DEFAULT_FOLDER_COLOR;\n }\n return trimmed;\n}\n\n/**\n * Converts a hex color (`#RGB` / `#RRGGBB`) to `r, g, b` channels for CSS\n * `rgb(var(--token))` / `rgba(var(--token))` consumers (e.g. side detail panel).\n */\nexport function folderColorToRgbChannels(color?: unknown): string {\n const hex = resolveFolderColor(color).replace('#', '');\n const full = hex.length === 3 ? hex.split('').map((c) => c + c).join('') : hex;\n if (full.length !== 6 || Number.isNaN(Number.parseInt(full, 16))) {\n return '250, 204, 21';\n }\n const r = Number.parseInt(full.slice(0, 2), 16);\n const g = Number.parseInt(full.slice(2, 4), 16);\n const b = Number.parseInt(full.slice(4, 6), 16);\n return `${r}, ${g}, ${b}`;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport {\n filterMetaDataListByAppliesTo,\n hasMetaDataListFields,\n mergeMetaDataLists,\n type AXMMetaDataBuilderValue,\n} from '@acorex-platform/module-data-management-client/contracts';\nimport { documentReviewReadonlyFieldNames } from '@acorex-platform/module-document-management-client/contracts';\n\nexport { mergeMetaDataLists };\n\n//#endregion\n\n//#region ----- Schema helpers -----\n\nexport function toEditableMetaDataList(\n list: AXMMetaDataBuilderValue | null | undefined,\n readonlyFieldNames: readonly string[] = [],\n): AXMMetaDataBuilderValue {\n const readonly = new Set(readonlyFieldNames);\n return {\n groups: (list?.groups ?? []).map((group) => ({\n ...group,\n fields: (group.fields ?? []).map((field) => ({\n ...field,\n mode: readonly.has(String(field.name ?? '')) ? 'view' : 'edit',\n })),\n })),\n };\n}\n\nexport function reviewReadonlyFieldNames(canManageReview: boolean): readonly string[] {\n return documentReviewReadonlyFieldNames(canManageReview);\n}\n\nexport function toViewMetaDataList(\n list: AXMMetaDataBuilderValue | null | undefined,\n): AXMMetaDataBuilderValue {\n return {\n groups: (list?.groups ?? []).map((group) => ({\n ...group,\n fields: (group.fields ?? []).map((field) => ({\n ...field,\n mode: 'view',\n })),\n })),\n };\n}\n\nexport function collectFolderScopedMetaDataList(\n documentTypes: Array<{ metaDataList?: AXMMetaDataBuilderValue | null } | null | undefined>,\n): AXMMetaDataBuilderValue {\n return mergeMetaDataLists(\n documentTypes.map((documentType) => filterMetaDataListByAppliesTo(documentType?.metaDataList, 'folder')),\n );\n}\n\nexport function collectDocumentScopedMetaDataList(\n list: AXMMetaDataBuilderValue | null | undefined,\n): AXMMetaDataBuilderValue {\n return filterMetaDataListByAppliesTo(list, 'document');\n}\n\nexport function documentTypeHasFolderMetadata(\n documentTypes: Array<{ metaDataList?: AXMMetaDataBuilderValue | null } | null | undefined>,\n): boolean {\n return hasMetaDataListFields(collectFolderScopedMetaDataList(documentTypes));\n}\n\nexport function pickMetaDataFormValues(\n form: Record<string, unknown> | null | undefined,\n schema: AXMMetaDataBuilderValue | null | undefined,\n): Record<string, unknown> {\n const names = new Set(\n (schema?.groups ?? []).flatMap((group) =>\n (group.fields ?? []).map((field) => String(field?.name ?? '').trim()).filter(Boolean),\n ),\n );\n const source = form ?? {};\n const picked: Record<string, unknown> = {};\n for (const name of names) {\n if (name in source) {\n picked[name] = source[name];\n }\n }\n return picked;\n}\n\n//#endregion\n","import type { AXFileService } from '@acorex/core/file';\nimport { resolveFileChooserExtension } from '@acorex-platform/framework-client/layout/components';\nimport { extractDocumentTypeFileKindNames } from '@acorex-platform/module-document-management-client/contracts';\n\n//#region ---- Document type accept helpers ----\n\n/**\n * Extracts logical file type names from a document type's `type` field.\n * Supports name arrays, select option rows, and legacy `{ selectedItems, context }`.\n */\nexport function buildFileTypeNamesFromDocumentType(documentType: unknown): string[] {\n return extractDocumentTypeFileKindNames(documentType);\n}\n\n/**\n * Legacy extension-based accept string (fallback when file type catalog is unavailable).\n */\nexport function buildAcceptFromDocumentTypeExtensions(documentType: unknown): string {\n const extensions = Array.from(\n new Set(\n buildFileTypeNamesFromDocumentType(documentType)\n .map((name) => {\n const ext = resolveFileChooserExtension(name);\n return ext ? `.${ext}` : '';\n })\n .filter(Boolean),\n ),\n );\n return extensions.join(',');\n}\n\n/**\n * Builds HTML accept and logical file types from a document type using the ACoreX file catalog.\n */\nexport async function buildFileChooserOptionsFromDocumentType(\n documentType: unknown,\n fileService: AXFileService,\n): Promise<{ accept: string; fileType: string[] }> {\n const fileType = buildFileTypeNamesFromDocumentType(documentType);\n if (fileType.length) {\n const accept = await fileService.getAcceptAttribute(fileType);\n return { accept, fileType };\n }\n return { accept: buildAcceptFromDocumentTypeExtensions(documentType), fileType: [] };\n}\n\n/** @deprecated Use {@link buildFileChooserOptionsFromDocumentType} for catalog-backed accept. */\nexport function buildAcceptFromDocumentType(documentType: unknown): string {\n return buildAcceptFromDocumentTypeExtensions(documentType);\n}\n\n//#endregion\n","//#region ----- Document user-field helpers -----\n\nexport function attachedFileDefaultTitle(file: { title?: unknown; name?: unknown } | undefined): string {\n const title = typeof file?.title === 'string' ? file.title.trim() : '';\n if (title) {\n return title;\n }\n const name = typeof file?.name === 'string' ? file.name.trim() : '';\n if (!name) {\n return '';\n }\n const lastDot = name.lastIndexOf('.');\n return lastDot > 0 ? name.slice(0, lastDot) : name;\n}\n\nexport function asOptionalTrimmedString(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\n/** Builds a stored file name from a document title, keeping the original extension. */\nexport function fileNameFromTitle(title: string, originalFileName?: string): string {\n const trimmed = title.trim();\n if (!trimmed) {\n return originalFileName?.trim() || '';\n }\n const lastDot = originalFileName?.lastIndexOf('.') ?? -1;\n const extension =\n originalFileName && lastDot > 0 ? originalFileName.slice(lastDot) : '';\n if (!extension) {\n return trimmed;\n }\n if (trimmed.toLowerCase().endsWith(extension.toLowerCase())) {\n return trimmed;\n }\n return `${trimmed}${extension}`;\n}\n\n/** Copies document title onto the related file name, keeping the original extension. */\nexport function fileInfoWithTitle<T extends { name?: string; title?: unknown }>(\n file: T | undefined,\n title: string,\n): { name: string; file?: T } {\n const name = fileNameFromTitle(title, file?.name);\n if (!file) {\n return { name };\n }\n return { name, file: { ...file, name, title } };\n}\n\n//#endregion\n","import { Injectable, inject } from '@angular/core';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPLayoutBuilderService, IWidgetBuilder } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPContextData } from '@acorex-platform/framework-shared/core';\nimport {\n AXPFileStorageService,\n extractRequestErrorInfo,\n platformErrorI18nKey,\n} from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPContentDocumentsPermissionKeys,\n RootConfig,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXMDocumentDto, AXMDocumentVersionDto } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXP_VERSIONING_ERROR_I18N } from '@acorex-platform/module-common-client/contracts';\nimport { buildFileChooserOptionsFromDocumentType } from '../document-type-accept.util';\nimport { resolveDocumentStorageFileId } from '../document-file.util';\nimport { asOptionalTrimmedString, attachedFileDefaultTitle, fileInfoWithTitle } from './document-user-fields.util';\nimport {\n collectDocumentScopedMetaDataList,\n reviewReadonlyFieldNames,\n toEditableMetaDataList,\n} from '../folder-metadata.util';\n\n//#region ----- Helpers -----\n\nfunction isTruthyFlag(value: unknown): boolean {\n return value === true || value === 'true' || value === 1 || value === '1';\n}\n\nfunction initialDocumentLifecycleStatus(documentType: { requiresReview?: unknown } | undefined): {\n statusId: 'draft' | 'approved';\n status: { id: 'draft' | 'approved'; title: string };\n} {\n if (isTruthyFlag(documentType?.requiresReview)) {\n return {\n statusId: 'draft',\n status: { id: 'draft', title: '@general:statuses.draft.title' },\n };\n }\n return {\n statusId: 'approved',\n status: { id: 'approved', title: '@general:statuses.approved.title' },\n };\n}\n\nfunction folderParentId(parentId: unknown): string | undefined {\n if (typeof parentId !== 'string') {\n return undefined;\n }\n const trimmed = parentId.trim();\n return trimmed && trimmed !== 'virtual' ? trimmed : undefined;\n}\n\n//#endregion\n\n//#region ---- Document dialog service ----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDocumentDialogService {\n //#region ---- Services & Dependencies ----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly translateService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n private readonly entityService = inject(AXPEntityService);\n private readonly fileService = inject(AXFileService);\n private readonly fileStorageService = inject(AXPFileStorageService);\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n private readonly documentVersionData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentVersion.name)\n .data<string, AXMDocumentVersionDto, AXMDocumentVersionDto>();\n private readonly documentTypeService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentType.name).data<any, any>();\n\n //#endregion\n\n //#region ---- Public API ----\n\n async openAttachmentDialog(\n title: string,\n data: any,\n ): Promise<{ data?: { cancel?: boolean; isReviewSent?: boolean; fileIds?: string[] } }> {\n const {\n documentType,\n files,\n parentId,\n metaData,\n documentId,\n versionDraftId,\n showMeta = true,\n existingTitle,\n existingDescription,\n existingExpirationDate,\n replaceFile = false,\n skipMetadataAiFill = false,\n } = data ?? {};\n\n const { accept } = await buildFileChooserOptionsFromDocumentType(documentType, this.fileService);\n\n const fileList: any[] = Array.isArray(files) ? files : [];\n\n const enableExpiration = !!(documentType as { enableExpiration?: boolean })?.enableExpiration;\n\n const reviewReadonly = this.reviewReadonlyNames();\n const editableMetaDataList = toEditableMetaDataList(\n collectDocumentScopedMetaDataList(documentType?.metaDataList),\n reviewReadonly,\n );\n\n const hasMetaFields = (editableMetaDataList.groups ?? []).some((g) => (g.fields?.length ?? 0) > 0);\n\n const initialContext: Record<string, unknown> = {};\n fileList.forEach((item, index) => {\n const fileMeta = showMeta ? metaData : undefined;\n initialContext[`file-${index}`] = {\n title: asOptionalTrimmedString(existingTitle) ?? attachedFileDefaultTitle(item),\n description: asOptionalTrimmedString(existingDescription) ?? '',\n ...(showMeta ? { metaDataForm: fileMeta } : {}),\n ...(enableExpiration\n ? {\n expirationDate:\n existingExpirationDate ??\n (fileMeta as { expirationDate?: unknown } | undefined)?.expirationDate,\n }\n : {}),\n };\n });\n if (fileList.length === 0) {\n initialContext['file-0'] = {\n title: asOptionalTrimmedString(existingTitle) ?? '',\n description: asOptionalTrimmedString(existingDescription) ?? '',\n ...(showMeta ? { metaDataForm: metaData } : {}),\n };\n }\n initialContext['files'] = fileList.map((item) => ({ file: [item] }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ data?: { cancel?: boolean; isReviewSent?: boolean; fileIds?: string[] } }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setOptions({\n metadata: {\n showMeta: !!showMeta,\n hasMetaFields,\n parentId: parentId ?? '',\n documentType,\n skipMetadataAiFill: skipMetadataAiFill === true,\n },\n })\n .setContext(initialContext)\n .content((flex) => {\n flex.setDirection('column');\n\n for (let index = 0; index < fileList.length; index++) {\n const item = fileList[index];\n flex.formField('@general:terms.common.title', (field) => {\n field.path(`file-${index}.title`);\n field.textBox({ validations: [{ rule: 'required' }] });\n });\n flex.formField('@general:terms.common.description', (field) => {\n field.path(`file-${index}.description`);\n field.textBox({});\n });\n if (enableExpiration) {\n flex.formField('@document-management:terms.document.expire-date', (field) => {\n field.path(`file-${index}.expirationDate`);\n field.dateTimeBox({});\n });\n }\n if (showMeta && hasMetaFields) {\n flex.customWidget('meta-data-form-editor', (widget: IWidgetBuilder) => {\n widget.path(`file-${index}.metaDataForm`);\n widget.options({ ...editableMetaDataList, readonlyFieldNames: reviewReadonly });\n });\n }\n flex.formField('@document-management:terms.common.file', (field) => {\n field.path(`files[${index}].file`);\n field.customWidget('attachments', {\n defaultValue: [item],\n fileEditable: false,\n readonly: true,\n accept,\n });\n });\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.submit.title');\n })\n .setCloseButton(true)\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return { data: { cancel: true } };\n }\n const ctx = dialogRef.context() as AXPContextData & { files: any[] };\n if (documentId) {\n dialogRef.setLoading(true);\n try {\n const userFields = this.readUserDocumentFields(ctx, 0, {\n showMeta,\n enableExpiration,\n });\n const sourceFile = fileList[0];\n const synced = fileInfoWithTitle(sourceFile, userFields.title);\n if (replaceFile) {\n await this.syncStoredFileName(sourceFile, synced.name);\n }\n\n const identity: Partial<AXMDocumentDto & AXMDocumentVersionDto> = {\n title: userFields.title,\n name: synced.name,\n };\n const content: Partial<AXMDocumentDto & AXMDocumentVersionDto> = {\n description: userFields.description,\n ...(userFields.metaDataForm ? { metaDataForm: userFields.metaDataForm } : {}),\n ...(enableExpiration\n ? {\n expirationDate: (userFields.expirationDate ??\n null) as AXMDocumentDto['expirationDate'],\n }\n : {}),\n ...(replaceFile && synced.file\n ? { fileInfo: synced.file, name: synced.name }\n : {}),\n };\n\n if (versionDraftId) {\n await this.documentVersionData.update(String(versionDraftId), {\n ...identity,\n ...content,\n });\n await this.documentData.update(documentId, identity);\n } else {\n await this.documentData.update(documentId, { ...identity, ...content });\n }\n return {\n data: {\n cancel: false,\n fileIds: [documentId],\n },\n };\n } catch (error) {\n await this.notifyAttachFailed(error);\n throw error;\n } finally {\n dialogRef.setLoading(false);\n }\n }\n dialogRef.setLoading(true);\n try {\n const promises = (ctx?.['files'] as any[]).map<Promise<string>>(async (_item: any, index: number) => {\n const f = fileList[index];\n const userFields = this.readUserDocumentFields(ctx, index, {\n showMeta,\n enableExpiration,\n });\n const synced = fileInfoWithTitle(f, userFields.title);\n await this.syncStoredFileName(f, synced.name);\n const newId = await this.documentData.create({\n fileInfo: synced.file ?? f,\n name: synced.name,\n title: userFields.title,\n description: userFields.description,\n documentType,\n parentId: folderParentId(parentId) ?? parentId,\n ...initialDocumentLifecycleStatus(documentType),\n versioningEnabled: isTruthyFlag(documentType?.enableVersioning),\n distributionEnabled: isTruthyFlag(documentType?.enableDistributionCapability),\n ...(userFields.metaDataForm ? { metaDataForm: userFields.metaDataForm } : {}),\n ...(enableExpiration && userFields.expirationDate != null\n ? { expirationDate: userFields.expirationDate }\n : {}),\n });\n return newId;\n });\n const fileIds = await Promise.all(promises);\n return {\n data: {\n cancel: false,\n fileIds,\n },\n };\n } catch (error) {\n await this.notifyAttachFailed(error);\n throw error;\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n return result;\n }\n\n async openAttachmentDialogWithoutSave(\n title: string,\n data: any,\n ): Promise<{ data?: { cancel?: boolean; files?: any[] } }> {\n const { documentType, files, parentId, metaData, showMeta = true } = data ?? {};\n\n const { accept } = await buildFileChooserOptionsFromDocumentType(documentType, this.fileService);\n\n const fileList: any[] = Array.isArray(files) ? files : [];\n\n const enableExpiration = !!(documentType as { enableExpiration?: boolean })?.enableExpiration;\n\n /** Get metaDataForm from a file item (widget may store under meta or metaDataForm). */\n const getFileMeta = (item: any) =>\n item?.metaDataForm ?? (item?.meta && typeof item.meta === 'object' && !Array.isArray(item.meta) ? item.meta : undefined);\n\n const reviewReadonly = this.reviewReadonlyNames();\n const editableMetaDataList = toEditableMetaDataList(\n collectDocumentScopedMetaDataList(documentType?.metaDataList),\n reviewReadonly,\n );\n const hasMetaFields = (editableMetaDataList.groups ?? []).some((g) => (g.fields?.length ?? 0) > 0);\n\n const initialContext: Record<string, unknown> = {};\n fileList.forEach((item, index) => {\n const fileMeta = getFileMeta(item) ?? metaData;\n initialContext[`file-${index}`] = {\n title: attachedFileDefaultTitle(item),\n description: asOptionalTrimmedString(item?.description) ?? '',\n ...(showMeta ? { metaDataForm: fileMeta } : {}),\n ...(enableExpiration\n ? { expirationDate: (fileMeta as { expirationDate?: unknown } | undefined)?.expirationDate }\n : {}),\n };\n });\n if (fileList.length === 0) {\n initialContext['file-0'] = {\n title: '',\n description: '',\n ...(showMeta ? { metaDataForm: metaData } : {}),\n };\n }\n initialContext['files'] = fileList.map((item) => ({ file: [item] }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ data?: { cancel?: boolean; files?: any[] } }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setOptions({\n metadata: {\n showMeta: !!showMeta,\n hasMetaFields,\n parentId: parentId ?? '',\n documentType,\n },\n })\n .setContext(initialContext)\n .content((flex) => {\n flex.setDirection('column');\n\n for (let index = 0; index < fileList.length; index++) {\n const item = fileList[index];\n flex.formField('@general:terms.common.title', (field) => {\n field.path(`file-${index}.title`);\n field.textBox({ validations: [{ rule: 'required' }] });\n });\n flex.formField('@general:terms.common.description', (field) => {\n field.path(`file-${index}.description`);\n field.textBox({});\n });\n if (enableExpiration) {\n flex.formField('@document-management:terms.document.expire-date', (field) => {\n field.path(`file-${index}.expirationDate`);\n field.dateTimeBox({});\n });\n }\n if (showMeta && hasMetaFields) {\n flex.customWidget('meta-data-form-editor', (widget: IWidgetBuilder) => {\n widget.path(`file-${index}.metaDataForm`);\n widget.options({ ...editableMetaDataList, readonlyFieldNames: reviewReadonly });\n });\n }\n flex.formField('@document-management:terms.common.file', (field) => {\n field.path(`files[${index}].file`);\n field.customWidget('attachments', {\n defaultValue: [item],\n fileEditable: false,\n readonly: true,\n accept,\n });\n });\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.submit.title');\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return {\n data: {\n cancel: true,\n },\n };\n }\n const ctx = dialogRef.context() as AXPContextData & { files: any[] };\n const outFiles = (ctx?.['files'] as any[]).map((item: any, index: number) => {\n const userFields = this.readUserDocumentFields(ctx, index, {\n showMeta,\n enableExpiration,\n });\n const sourceFile = Array.isArray(item?.file) ? item.file[0] : fileList[index];\n const synced = fileInfoWithTitle(sourceFile, userFields.title);\n return {\n ...item,\n name: synced.name,\n title: userFields.title,\n description: userFields.description,\n ...(synced.file ? { file: [synced.file] } : {}),\n ...(showMeta ? { metaDataForm: userFields.metaDataForm } : {}),\n ...(enableExpiration ? { expirationDate: userFields.expirationDate } : {}),\n };\n });\n return { data: { cancel: false, files: outFiles } };\n });\n })\n .show();\n return result;\n }\n\n async chooseDocumentType(): Promise<{ cancelled: boolean; documentTypeId?: string }> {\n const res = await this.documentTypeService.query({ skip: 0, take: 100 });\n const items = (res?.items ?? []).map((x: any) => ({\n value: x.id,\n text: this.translateService.resolve(x.title ?? x.name ?? x.id),\n }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ cancelled: boolean; documentTypeId?: string }>((dialog) => {\n dialog\n .setTitle('@document-management:dialogs.choose-document-type.title')\n .setContext({ documentTypeId: undefined })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@document-management:dialogs.choose-document-type.label', (field) => {\n field.path('documentTypeId');\n field.selectionList({ valueField: 'value', textField: 'text', dataSource: items });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.submit.title');\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return { cancelled: true };\n }\n const ctx = dialogRef.context() as any;\n return { cancelled: false, documentTypeId: ctx?.documentTypeId };\n });\n })\n .show();\n\n return result;\n }\n\n //#endregion\n\n //#region ---- Private helpers ----\n\n private async syncStoredFileName(file: unknown, nextName: string): Promise<void> {\n const storageId = resolveDocumentStorageFileId(file);\n const currentName =\n file && typeof file === 'object' && typeof (file as { name?: unknown }).name === 'string'\n ? (file as { name: string }).name.trim()\n : '';\n if (!storageId || !nextName || nextName === currentName) {\n return;\n }\n try {\n await this.fileStorageService.update({\n fileId: storageId,\n name: nextName,\n metadata: {},\n });\n } catch {\n // Blob uploads persist the title-based name on save; do not fail attach if rename misses.\n }\n }\n\n private readUserDocumentFields(\n context: Record<string, unknown>,\n fileIndex: number,\n options: { showMeta: boolean; enableExpiration: boolean },\n ): {\n title: string;\n description?: string;\n metaDataForm?: Record<string, unknown>;\n expirationDate?: Date | string | null;\n } {\n const bag = (context[`file-${fileIndex}`] ?? {}) as Record<string, unknown>;\n const title = asOptionalTrimmedString(bag['title']) ?? '';\n const description = asOptionalTrimmedString(bag['description']);\n const meta = options.showMeta ? (bag['metaDataForm'] as Record<string, unknown> | undefined) : undefined;\n const expirationDate = options.enableExpiration\n ? ((bag['expirationDate'] as Date | string | null | undefined) ?? null)\n : undefined;\n return { title, description, metaDataForm: meta, expirationDate };\n }\n\n private reviewReadonlyNames(): readonly string[] {\n return reviewReadonlyFieldNames(\n this.sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview),\n );\n }\n\n private async notifyAttachFailed(error: unknown): Promise<void> {\n const info = extractRequestErrorInfo(error);\n const contentKey =\n (info?.code ? AXP_VERSIONING_ERROR_I18N[info.code] : undefined) ??\n platformErrorI18nKey(info?.code) ??\n '@document-management:dialogs.attach-file.messages.upload-failed';\n const title = await this.translateService.translateAsync('@general:messages.generic.error.title');\n const content = await this.translateService.translateAsync(contentKey);\n this.toastService.show({ color: 'danger', title, content });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPDataGenerator, AXPFileListItem, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPFileChooserContext, AXPFileChooserService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport {\n AXMDocumentDocDto,\n AXMDocumentDto,\n AXMDocumentManagementDocumentTypeEntityModel,\n AXMDocumentVersionDto,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPVersioningField, AXPVersioningStatus } from '@acorex-platform/module-common-client/contracts';\nimport { buildFileChooserOptionsFromDocumentType } from '../document-type-accept.util';\nimport { AXMDocumentDialogService } from './document-dialog.service';\n\ninterface AttachmentOptions {\n multiple?: boolean;\n folderId?: string;\n entityId?: string;\n entityRecordId?: string;\n scope?: AXPPlatformScope;\n}\n\ninterface UpdateAttachmentOptions {\n entityId?: string;\n entityRecordId?: string;\n folderId?: string;\n scope?: AXPPlatformScope;\n}\n\ninterface PopupResult {\n data?: {\n cancel?: boolean;\n fileIds?: string[];\n };\n}\n\nfunction cloneDocumentFileInfo<T>(fileInfo: T): T {\n if (!fileInfo || typeof fileInfo !== 'object') {\n return fileInfo;\n }\n return { ...(fileInfo as Record<string, unknown>) } as T;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentAttachmentsService {\n private readonly fileChooserService = inject(AXPFileChooserService);\n private readonly fileService = inject(AXFileService);\n private readonly entityService = inject(AXPEntityService);\n private readonly documentTypeService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentType.name).data<any, any>();\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n private readonly documentDialog = inject(AXMDocumentDialogService);\n private readonly translateService = inject(AXTranslationService);\n private readonly documentVersionData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentVersion.name)\n .data<string, AXMDocumentVersionDto, AXMDocumentVersionDto>();\n\n async attachFile(\n fileType: string | AXMDocumentDocDto,\n options?: AttachmentOptions,\n ): Promise<boolean> {\n // Validate input data\n this.validateAttachmentOptions(options);\n\n const fileTypeEntity = await this.resolveFileType(fileType);\n const files = await this.chooseFileListItems(fileTypeEntity, options);\n\n if (files.length === 0) {\n return false;\n }\n\n const popupData = {\n documentType: fileTypeEntity,\n files,\n parentId: options?.folderId ?? '',\n };\n\n const title = await this.translateService.translateAsync('@document-management:dialogs.attach-file.title', {\n params: { title: this.translateService.resolve(fileTypeEntity.title) },\n });\n const result = await this.documentDialog.openAttachmentDialog(\n title,\n popupData,\n );\n\n return this.handlePopupResult(result);\n }\n\n async updateAttachedFile(fileId: string, options?: UpdateAttachmentOptions): Promise<boolean> {\n const file = await this.documentData.byKey(fileId);\n if (!file) {\n throw new Error('File not found');\n }\n\n const documentTypeEntity = await this.resolveFileType(file.documentType);\n\n const popupData = {\n documentType: documentTypeEntity,\n files: [cloneDocumentFileInfo(file.fileInfo)],\n parentId: options?.folderId ?? '',\n metaData: file.metaDataForm,\n documentId: fileId,\n existingTitle: file.title,\n existingDescription: file.description,\n existingExpirationDate: file.expirationDate,\n };\n\n const editTitle = await this.translateService.translateAsync(\n '@document-management:dialogs.attach-file.edit-title',\n { params: { title: file.title || file.name } },\n );\n const result = await this.documentDialog.openAttachmentDialog(editTitle, {\n ...popupData,\n skipMetadataAiFill: true,\n });\n\n return this.handlePopupResult(result);\n }\n\n /**\n * When versioning is on, writes the new file onto the open draft (creates one if needed).\n * When versioning is off, overwrites the host in place (Published v1 is synced by middleware).\n */\n async uploadNewVersion(fileId: string, options?: { scope?: AXPPlatformScope }): Promise<boolean> {\n const document = await this.documentData.byKey(fileId);\n if (!document) {\n throw new Error('File not found');\n }\n\n const documentTypeEntity = await this.resolveFileType(document.documentType);\n\n const fileItems = await this.chooseFileListItems(documentTypeEntity, {\n multiple: false,\n scope: options?.scope,\n });\n if (fileItems.length === 0) {\n return false;\n }\n\n const dialogTitle = await this.translateService.translateAsync(\n '@document-management:dialogs.manage-version.upload-new-version',\n );\n const popupData = {\n documentType: documentTypeEntity,\n files: fileItems,\n parentId: document.parentId,\n metaData: document.metaDataForm,\n documentId: fileId,\n existingTitle: document.title,\n existingDescription: document.description,\n existingExpirationDate: document.expirationDate,\n replaceFile: true,\n };\n\n if (document.versioningEnabled) {\n let draft = await this.findOpenVersionDraft(fileId);\n if (!draft) {\n const createdId = await this.documentVersionData.create({\n sourceId: fileId,\n });\n draft = { id: String(createdId) };\n }\n const result = await this.documentDialog.openAttachmentDialog(dialogTitle, {\n ...popupData,\n versionDraftId: draft.id,\n });\n return this.handlePopupResult(result);\n }\n\n const result = await this.documentDialog.openAttachmentDialog(dialogTitle, popupData);\n return this.handlePopupResult(result);\n }\n\n async findOpenVersionDraft(documentId: string): Promise<{ id: string } | null> {\n const result = await this.documentVersionData.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [\n { field: AXPVersioningField.SourceId, operator: { type: 'equal' }, value: documentId },\n {\n field: AXPVersioningField.VersioningStatus,\n operator: { type: 'equal' },\n value: AXPVersioningStatus.Draft,\n },\n ],\n },\n });\n const row = result?.items?.[0];\n return row?.id ? { id: String(row.id) } : null;\n }\n\n private validateAttachmentOptions(options?: AttachmentOptions): void {\n if (!((options?.entityId && options?.entityRecordId) || options?.folderId)) {\n throw new Error('You must provide either both entityId and entityRecordId, or folderId.');\n }\n }\n\n private async resolveFileType(\n fileType: string | AXMDocumentDocDto,\n ): Promise<AXMDocumentManagementDocumentTypeEntityModel> {\n const id = typeof fileType === 'string' ? fileType : fileType.id;\n const entity = await this.documentTypeService.byKey(id);\n if (!entity) {\n throw new Error(`Document type not found: ${id}`);\n }\n return entity;\n }\n\n private async chooseFileListItems(\n fileTypeEntity: AXMDocumentManagementDocumentTypeEntityModel,\n options?: Pick<AttachmentOptions, 'multiple' | 'scope'>,\n ): Promise<AXPFileListItem[]> {\n const { accept, fileType } = await buildFileChooserOptionsFromDocumentType(fileTypeEntity, this.fileService);\n const context: AXPFileChooserContext = {\n options: {\n multiple: options?.multiple ?? false,\n accept: accept || undefined,\n fileType: fileType.length ? fileType : undefined,\n scope: options?.scope ?? AXPPlatformScope.Tenant,\n browseMode: 'file',\n destination: 'drive',\n },\n items: [],\n };\n\n const chosen = await this.fileChooserService.promptChoose(context);\n if (!chosen?.length) {\n return [];\n }\n\n return chosen.map((item) => {\n const blob =\n item.source?.kind === 'blob' && item.source.value instanceof Blob ? item.source.value : undefined;\n return {\n ...item,\n id: item.id ?? AXPDataGenerator.uuid(),\n size: item.size ?? blob?.size ?? 0,\n status: item.status ?? 'attached',\n };\n });\n }\n\n private async handlePopupResult(result: PopupResult): Promise<boolean> {\n if (result?.data?.cancel) {\n return false;\n }\n\n return true;\n }\n}\n","//#region ----- Imports -----\n\nimport { type IWidgetBuilder } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXPContentDocumentsPermissionKeys,\n RootConfig,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\n\nimport { reviewReadonlyFieldNames } from '../folder-metadata.util';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype FolderMetadataFlex = {\n customWidget: (type: string, delegate: (widget: IWidgetBuilder) => void) => unknown;\n};\n\ntype DocumentTypeCatalogRow = Record<string, unknown> & {\n metaDataList?: AXMMetaDataBuilderValue | null;\n};\n\n//#endregion\n\n//#region ----- Service -----\n\n@Injectable({ providedIn: 'root' })\nexport class AXMFolderMetadataDialogService {\n //#region ----- Services & Dependencies -----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly documentTypeData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentType.name)\n .data<string, { id: string; name?: string; metaDataList?: AXMMetaDataBuilderValue }>();\n\n //#endregion\n\n //#region ----- Public API -----\n\n /**\n * Fills `metaDataList` on picker rows when the list query omitted it.\n */\n async hydrateDocumentTypeCatalog<T extends DocumentTypeCatalogRow>(items: T[]): Promise<T[]> {\n const hydrated: T[] = [];\n for (const item of items) {\n if (item?.['metaDataList'] != null) {\n hydrated.push(item);\n continue;\n }\n const id = item['id'] ?? item['documentTypeId'];\n if (id == null || !String(id).trim()) {\n hydrated.push(item);\n continue;\n }\n try {\n const loaded = await this.documentTypeData.byKey(String(id));\n if (loaded?.metaDataList != null) {\n hydrated.push({ ...item, metaDataList: loaded.metaDataList });\n continue;\n }\n } catch {\n // Keep the slim picker row when the type cannot be loaded.\n }\n hydrated.push(item);\n }\n return hydrated;\n }\n\n /** Adds the reactive folder-scoped metadata form to a create/update folder dialog. */\n addFolderMetadataForm(flex: FolderMetadataFlex, catalog: readonly unknown[]): void {\n flex.customWidget('meta-data-form-editor', (widget: IWidgetBuilder) => {\n widget.path('metaDataForm');\n widget.options({\n sourcePath: 'documentTypes',\n appliesTo: 'folder',\n hideEmpty: true,\n sourceCatalog: catalog,\n readonlyFieldNames: [\n ...reviewReadonlyFieldNames(\n this.sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview),\n ),\n ],\n });\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport {\n AXP_QUERY_QUICK_SEARCH_FIELD,\n AXPFileListItem,\n type AXPFileStorageInfo,\n AXPFilterQuery,\n AXPMultiLanguageString,\n AXPPlatformScope,\n AXPQueryRequest,\n runtimeCommandPayloadData,\n} from '@acorex-platform/framework-shared/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupService } from '@acorex/components/popup';\n\nimport {\n AXPFileStorageService,\n AXPFileTypeProviderService,\n createFileTypeOpenContext,\n FILE_VIEWER_PREVIEW_EXTENSIONS,\n isFileNameShownInViewer,\n normalizeDocumentToFileListItem,\n resolveExplorerFileDisplayName,\n tryOpenFileByCatalogType,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPDialogOpener,\n AXPLayoutBuilderService,\n resolveLayoutBuilderDialogResult,\n} from '@acorex-platform/framework-client/layout/builder';\nimport { AXPFileViewerFallbackContentComponent, AXPFileViewerService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPCommonCommandKeys } from '@acorex-platform/module-common-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { inject, Injectable, Injector, PLATFORM_ID } from '@angular/core';\n\nimport { AXFileService } from '@acorex/core/file';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { AXPHookService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXMDocumentDto,\n AXMDocumentInheritanceType,\n AXMDocumentManagementFolderCreateDto,\n AXMDocumentManagementFolderEntityModel,\n AXMDocumentShortcutEntityModel,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { castArray, isArray } from 'lodash';\nimport { toDocumentExpirationDate } from './document-expiration.util';\nimport { resolveClientAssetUrl, resolveDocumentStorageFileId } from './document-file.util';\nimport { AXMDriveContentsDto, AXPDocumentManagementService } from './document-management.service';\nimport { AXMDocumentExplorerBrowseMode, AXMDocumentExplorerNode, AXMMetadataFieldInfo, AXMNodeType, CreateFileDto, UpdateFileDto, UpdateFolderDto } from './document-manager.types';\nimport { AXM_DEFAULT_FOLDER_COLOR, resolveFolderColor } from './folder-color.util';\nimport { collectFolderScopedMetaDataList, pickMetaDataFormValues } from './folder-metadata.util';\nimport { DocumentAttachmentsService } from './services/document-attachments.service';\nimport { fileNameFromTitle } from './services/document-user-fields.util';\nimport { AXMFolderMetadataDialogService } from './services/folder-metadata-dialog.service';\n//#endregion\n\n//#region ---- Folder Dialog Types ----\n\n/**\n * A document type row as consumed by the folder dialogs' select box. Backend fields are kept\n * untouched; `pickerKey` and `displayTitle` are added for the select and stripped before saving.\n */\ntype AXMFolderDialogDocumentType = Record<string, unknown> & {\n pickerKey: string;\n displayTitle: string;\n};\n\ntype AXMFolderDialogForm = {\n title: string;\n description?: string;\n inherit: AXMDocumentInheritanceType;\n documentTypes: NonNullable<AXMDocumentManagementFolderEntityModel['documentTypes']>;\n color: string;\n metaDataForm?: Record<string, unknown>;\n};\n\n//#endregion\n\n//#region ---- Contract (Abstract Service) ----\n\n/**\n * Contract for document drive service. Inject this token; implementation is provided by the module.\n */\n@Injectable()\nexport abstract class AXMDocumentManagerService {\n // Scope management\n abstract scope(scope: AXPPlatformScope): ScopedDriveService;\n\n // Root and folder operations\n abstract getRoot(scope: AXPPlatformScope): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n /** Root folder id resolved for the scope (used to detect out-of-scope folders). */\n scopeRootId?: string;\n }>;\n /**\n * Gets (or creates) the folder for the given entity record and returns it as explorer root.\n * Used by the document plugin when viewing an entity single.\n */\n abstract getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n abstract getFolder(\n scope: AXPPlatformScope,\n folderId: string,\n options?: {\n /** When opening a direct child, extend this path instead of calling the path API. */\n parentPath?: AXMDocumentExplorerNode[];\n parentFolderId?: string;\n },\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n /** Root folder id resolved for the scope (used to detect out-of-scope folders). */\n scopeRootId?: string;\n }>;\n abstract createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode>;\n abstract updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode>;\n abstract deleteFolder(folderId: string): Promise<void>;\n abstract getAvailableSpace(): Promise<number>;\n\n // File operations\n abstract createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode>;\n abstract updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode>;\n abstract deleteFile(fileId: string): Promise<void>;\n\n // Node operations\n abstract deleteNodes(nodeIds: AXMDocumentExplorerNode[]): Promise<void>;\n abstract copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode>;\n\n /** Creates a shortcut to a document or folder in the given folder. */\n abstract createShortcut(targetId: string, targetType: 'file' | 'folder', folderId: string, options?: { nameOverride?: string }): Promise<AXMDocumentExplorerNode>;\n /** Deletes a shortcut by its node id (shortcut entity id). */\n abstract deleteShortcut(shortcutId: string): Promise<void>;\n\n /**\n * Opens the drive folder picker and creates a shortcut to the given node in the selected folder.\n * Returns true if a shortcut was created, false if cancelled.\n */\n abstract createShortcutWithPicker(node: AXMDocumentExplorerNode, scope: AXPPlatformScope): Promise<boolean>;\n\n // Dialog operations\n abstract showCreateFolderDialog(parentId?: string, options?: { allowedDocumentTypeNames?: string[] }): Promise<AXMDocumentExplorerNode | null>;\n /**\n * Whether users may create a subfolder inside this folder.\n * Typed children of type-container folders (e.g. Company Document / Other Manuals / …) return false.\n */\n abstract folderAllowsCreateFolder(\n folder:\n | Pick<AXMDocumentExplorerNode, 'parentId' | 'allowChildFolders' | 'childFolderDocumentTypes'>\n | null\n | undefined,\n ): Promise<boolean>;\n abstract getDocumentTypesByNames(names: string[]): Promise<AXMNodeType[]>;\n abstract showDeleteNodesDialog(nodeIds: AXMDocumentExplorerNode[]): Promise<boolean>;\n abstract showRenamePopup(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined>;\n\n // Search operations\n abstract searchFolders(searchTerm: string, scope: AXPPlatformScope, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]>;\n abstract searchFiles(searchTerm: string, scope: AXPPlatformScope, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]>;\n abstract searchNodes(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: {\n folderId?: string;\n metadataFilters?: AXPFilterQuery[];\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]>;\n\n /** Collects unique metadata fields; pass ids to limit to those document types. */\n abstract getUniqueMetadataFields(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]>;\n\n // File browsing and actions\n abstract showChooseFileDialog(root: string): Promise<AXMDocumentExplorerNode[]>;\n abstract moveTo(options: { node: AXMDocumentExplorerNode; scope?: AXPPlatformScope; browseMode?: AXMDocumentExplorerBrowseMode; multiple?: boolean }): Promise<boolean>;\n abstract copyTo(options: { node: AXMDocumentExplorerNode; scope?: AXPPlatformScope; browseMode?: AXMDocumentExplorerBrowseMode; multiple?: boolean }): Promise<boolean>;\n abstract showFileViewerPopup(\n node: AXMDocumentExplorerNode,\n options?: {\n folderFiles?: AXMDocumentExplorerNode[];\n /** @deprecated Use {@link folderFiles}. */\n folderVirtualFiles?: AXMDocumentExplorerNode[];\n startIndex?: number;\n /** @deprecated Use {@link startIndex}. */\n index?: number;\n },\n ): Promise<void>;\n abstract openFile(node: AXMDocumentExplorerNode): Promise<void>;\n\n /** Returns file nodes from a folder listing. */\n abstract getGallerySupportedFiles(nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[];\n\n // Data retrieval\n abstract getAllFolders(): Promise<AXMDocumentExplorerNode[]>;\n abstract getAllFiles(request?: AXPQueryRequest): Promise<AXMDocumentExplorerNode[]>;\n abstract getAllNodes(): Promise<AXMDocumentExplorerNode[]>;\n abstract downloadFile(node: AXMDocumentExplorerNode): Promise<void>;\n\n // Sharing and collaboration\n abstract showShareDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showShareWithEmailDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showLinkDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showLockDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showUnlockDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showFolderEditDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract updateFileName(node: AXMDocumentExplorerNode, name: string): Promise<AXMDocumentExplorerNode>;\n\n // Upload and versioning\n abstract uploadFileByType(folderId: string, docTypeId: string, options?: { scope?: AXPPlatformScope }): Promise<boolean>;\n abstract updateUploadFileByType(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract uploadNewVersion(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract findOpenVersionDraft(documentId: string): Promise<{ id: string } | null>;\n abstract showVersionHistory(node: AXMDocumentExplorerNode): Promise<void>;\n /** New Version: pick a file, edit copied fields, then optional Publish Version. */\n abstract runNewVersionFlow(node: AXMDocumentExplorerNode): Promise<void>;\n /** Upload New File, then optional Publish Version. */\n abstract runUploadNewVersionFlow(node: AXMDocumentExplorerNode): Promise<void>;\n}\n\n//#endregion\n\n//#region ---- Service Implementation ----\n\n/**\n * Default implementation of document drive service.\n */\n@Injectable()\nexport class AXMDocumentManagerServiceImpl extends AXMDocumentManagerService {\n //#region ---- Services & Dependencies ----\n\n protected sessionService = inject(AXPSessionService);\n protected entityService = inject(AXPEntityService);\n protected folderData = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.folder.name).data<string, AXMDocumentManagementFolderEntityModel, AXMDocumentManagementFolderEntityModel>();\n protected documentData = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.document.name).data<string, AXMDocumentDto, AXMDocumentDto>();\n protected shortcutData = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentShortcut.name).data<string, AXMDocumentShortcutEntityModel, AXMDocumentShortcutEntityModel>();\n protected documentTypeService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentType.name).data<any, any>();\n protected documentManagementService = inject(AXPDocumentManagementService);\n protected popupService = inject(AXPopupService);\n protected dialogOpener = inject(AXPDialogOpener);\n protected dialogService = inject(AXDialogService);\n protected fileService = inject(AXPFileStorageService);\n protected fileManagerService = inject(AXFileService);\n protected fileTypeProviderService = inject(AXPFileTypeProviderService);\n protected injector = inject(Injector);\n protected platformId = inject(PLATFORM_ID);\n protected commandService = inject(AXPCommandService);\n protected translate = inject(AXTranslationService);\n protected layoutBuilder = inject(AXPLayoutBuilderService);\n protected fileViewerService = inject(AXPFileViewerService);\n\n protected attachmentsService = inject(DocumentAttachmentsService);\n private readonly folderMetadataDialog = inject(AXMFolderMetadataDialogService);\n\n protected hooks = inject(AXPHookService, { optional: true });\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private scopedDriveCache: Map<AXPPlatformScope, ScopedDriveService> = new Map();\n private buildPathCache: Map<string, Promise<AXMDocumentExplorerNode[]>> = new Map();\n private rootFolderIdByScope: Map<AXPPlatformScope, string> = new Map();\n\n //#endregion\n\n //#region ---- Backend response helpers ----\n\n /**\n * Some command APIs return `{ result: T }` instead of `T`. Prefer the inner value when that shape is used.\n */\n private unwrapBackendPayload<T>(value: unknown): T {\n if (value !== null && typeof value === 'object' && 'result' in (value as object)) {\n return (value as { result: T }).result;\n }\n return value as T;\n }\n\n /**\n * Resolves the entity id from a create response (plain id string or entity object with `id`).\n */\n private resolveCreatedEntityId(created: unknown): string {\n if (typeof created === 'string' && created.trim() !== '') {\n return created;\n }\n if (created && typeof created === 'object' && 'id' in (created as object)) {\n const id = (created as { id: unknown }).id;\n if (typeof id === 'string' && id.trim() !== '') {\n return id;\n }\n }\n throw new Error('Failed to resolve created entity id');\n }\n\n //#endregion\n\n //#region ---- Scope Management Methods ----\n\n /**\n * Creates a scoped drive service for the specified platform scope.\n * Backend resolves tenant/user from request context (client sends only scope).\n */\n scope(scope: AXPPlatformScope): ScopedDriveService {\n if (!this.scopedDriveCache.has(scope)) {\n this.scopedDriveCache.set(scope, new ScopedDriveService(this, scope));\n }\n return this.scopedDriveCache.get(scope)!;\n }\n\n //#endregion\n\n //#region ---- Mapping Methods ----\n\n /**\n * Maps folder entity to document explorer node\n */\n private mapFolderDtoToFolderNode = (folder: AXMDocumentManagementFolderEntityModel): AXMDocumentExplorerNode => {\n return {\n id: folder.id!,\n name: this.translate.resolve(folder.title),\n type: 'folder',\n parentId: folder.parentId || null,\n modifiedAt: (folder as any)?.updated?.at,\n createdAt: (folder as any)?.created?.at,\n description: folder.description != null ? this.translate.resolve(folder.description) : undefined,\n childrenCount: folder.childrenCount,\n itemsCount: folder.itemsCount,\n expiredItemsCount: folder.expiredItemsCount,\n nearExpiryItemsCount: folder.nearExpiryItemsCount,\n size: folder.size,\n color: folder.color,\n documentTypes: folder.documentTypes || [],\n childFolderDocumentTypes: folder.childFolderDocumentTypes || [],\n allowChildFolders: folder.allowChildFolders,\n storageType: 'physical',\n inherit: folder.inherit,\n isSystem: Boolean(folder.stateInfo?.isSystem),\n metaDataForm: folder.metaDataForm as Record<string, unknown> | undefined,\n children: [...(folder.folders?.map(this.mapFolderDtoToFolderNode) || []), ...(folder.documents?.map(this.mapFileToNode) || []), ...(folder.shortcuts?.map(this.mapShortcutToNode) || [])],\n };\n };\n\n /**\n * Maps file entity to document explorer node\n */\n private mapFileToNode(file: AXMDocumentDto): AXMDocumentExplorerNode {\n const rawFileInfo = file.fileInfo;\n const fileListItem = rawFileInfo != null && typeof rawFileInfo === 'object' ? (rawFileInfo as AXPFileListItem) : undefined;\n const storedFileRef = typeof rawFileInfo === 'string' ? rawFileInfo : undefined;\n const node: AXMDocumentExplorerNode = {\n id: file.id!,\n name: file.name,\n title: file.title,\n description: file.description,\n type: 'file',\n parentId: file.parentId,\n modifiedAt: (file as any)?.updated?.at,\n createdAt: (file as any)?.created?.at,\n size: fileListItem?.size ?? 0,\n fileId: fileListItem ?? storedFileRef,\n storageType: 'physical',\n metaDataForm: file.metaDataForm ?? undefined,\n documentTypes: file.documentType ? [file.documentType] : [],\n expirationDate: toDocumentExpirationDate(file.expirationDate),\n version: file.version,\n versionId: file.versionId,\n versioningEnabled:\n file.versioningEnabled === true ||\n (file as { versioningEnabled?: unknown }).versioningEnabled === 'true',\n versioningStatus:\n typeof (file as { versioningStatus?: unknown }).versioningStatus === 'string'\n ? String((file as { versioningStatus?: string }).versioningStatus)\n : undefined,\n distributionEnabled:\n file.distributionEnabled === true ||\n (file as { distributionEnabled?: unknown }).distributionEnabled === 'true' ||\n file.documentType?.enableDistributionCapability === true,\n };\n return node;\n }\n\n /**\n * Maps shortcut entity to document explorer node.\n * Uses minimal data from shortcut itself; target-specific details are resolved by operations when needed.\n */\n private mapShortcutToNode = (shortcut: AXMDocumentShortcutEntityModel): AXMDocumentExplorerNode => {\n const isFolderShortcut = typeof shortcut.targetFolderId === 'string' && !!shortcut.targetFolderId;\n return {\n id: shortcut.id!,\n name: shortcut.name ?? '',\n description: shortcut.description,\n type: isFolderShortcut ? 'folder' : 'file',\n parentId: shortcut.folderId,\n storageType: 'shortcut',\n size: 0,\n documentTypes: [],\n isShortcut: true,\n targetDocumentId: shortcut.targetDocumentId,\n targetFolderId: shortcut.targetFolderId,\n children: [],\n };\n };\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Builds navigation path for a node\n */\n private async buildPath(node: AXMDocumentExplorerNode, stopFolderId?: string): Promise<AXMDocumentExplorerNode[]> {\n const cacheKey = `${node.id}_${stopFolderId || ''}`;\n\n if (!this.buildPathCache.has(cacheKey)) {\n const pathPromise = (async () => {\n // For shortcut nodes, resolve path from the target document/folder\n if (node.storageType === 'shortcut') {\n if (node.type === 'file' && node.targetDocumentId) {\n return (await this.documentManagementService.getDocumentPath(node.targetDocumentId, stopFolderId)).map(this.mapFolderDtoToFolderNode);\n }\n if (node.type === 'folder' && node.targetFolderId) {\n return (await this.documentManagementService.getFolderPath(node.targetFolderId, stopFolderId)).map(this.mapFolderDtoToFolderNode);\n }\n }\n\n if (node.type === 'file') {\n return (await this.documentManagementService.getDocumentPath(node.id, stopFolderId)).map(this.mapFolderDtoToFolderNode);\n }\n\n return (await this.documentManagementService.getFolderPath(node.id, stopFolderId)).map(this.mapFolderDtoToFolderNode);\n })();\n\n this.buildPathCache.set(cacheKey, pathPromise);\n return pathPromise;\n }\n\n return this.buildPathCache.get(cacheKey)!;\n }\n\n /**\n * Creates a copy name by adding \" copy\" before the extension\n */\n private createCopyName(originalName: string): string {\n const lastDotIndex = originalName.lastIndexOf('.');\n\n if (lastDotIndex === -1) {\n // No extension\n return `${originalName} copy`;\n }\n\n const nameWithoutExt = originalName.substring(0, lastDotIndex);\n const extension = originalName.substring(lastDotIndex);\n\n return `${nameWithoutExt} copy${extension}`;\n }\n\n /**\n * Prepares file for copy operation by downloading from storage and converting to blob source.\n * Accepts document fileId (AXPFileListItem or legacy string) and returns AXPFileListItem with blob source.\n */\n private async prepareFileForCopy(fileId: AXPFileListItem | string, fileName?: string): Promise<AXPFileListItem | undefined> {\n try {\n // Extract fileId string from the source\n let fileIdString: string | undefined;\n let existingFileItem: AXPFileListItem | undefined;\n\n if (typeof fileId === 'string') {\n fileIdString = fileId;\n } else if (fileId && typeof fileId === 'object') {\n existingFileItem = fileId as AXPFileListItem;\n if (fileId.source?.kind === 'fileId' && typeof fileId.source.value === 'string') {\n fileIdString = fileId.source.value;\n } else if (fileId.id && typeof fileId.id === 'string') {\n fileIdString = fileId.id;\n }\n }\n\n if (existingFileItem?.source?.kind === 'blob' && existingFileItem.source.value instanceof Blob) {\n return {\n ...existingFileItem,\n name: fileName ?? existingFileItem.name,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: existingFileItem.source.value,\n },\n };\n }\n\n if (existingFileItem?.source?.kind === 'url' && typeof existingFileItem.source.value === 'string') {\n const url = resolveClientAssetUrl(existingFileItem.source.value);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch file from URL: ${response.status}`);\n }\n const blob = await response.blob();\n return {\n ...existingFileItem,\n name: fileName ?? existingFileItem.name,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n }\n\n if (!fileIdString) {\n console.warn('Could not extract fileId from:', fileId);\n return undefined;\n }\n\n // Get file info from file storage service using source.value\n const fileInfo: AXPFileStorageInfo = await this.fileService.getInfo(fileIdString);\n\n if (!fileInfo) {\n throw new Error(`File not found in storage: ${fileIdString}`);\n }\n\n // Get binary data\n const binary = fileInfo.binary;\n if (!binary) {\n throw new Error(`File binary data not available for: ${fileIdString}`);\n }\n\n // Create blob from binary (in case it's not already a Blob)\n const blob = binary instanceof Blob ? binary : new Blob([binary as BlobPart], { type: fileInfo.mimeType });\n\n // If we have an existing file item, clone it and update source and status\n if (existingFileItem) {\n return {\n ...existingFileItem,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n }\n\n // Otherwise create a new AXPFileListItem\n return {\n id: fileInfo.fileId,\n name: fileName ?? fileInfo.name ?? 'unknown',\n size: fileInfo.size,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n } catch (error) {\n console.error('Error preparing file for copy:', error);\n throw error;\n }\n }\n\n //#endregion\n\n //#region ---- Root and Folder Operations ----\n\n /**\n * Collects every folder id in the tree rooted at `folder` (including that folder).\n */\n /**\n * Loads shortcuts for all folders in the tree using chunked `folderId IN (…)` queries instead of one query per folder.\n */\n private async loadShortcutsForFolderIdChunks(folderIds: string[]): Promise<AXMDocumentShortcutEntityModel[]> {\n if (folderIds.length === 0) {\n return [];\n }\n const CHUNK = 80;\n const PAGE = 500;\n const out: AXMDocumentShortcutEntityModel[] = [];\n\n for (let c = 0; c < folderIds.length; c += CHUNK) {\n const chunk = folderIds.slice(c, c + CHUNK);\n let skip = 0;\n for (;;) {\n const res = await this.shortcutData.query({\n skip,\n take: PAGE,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'folderId', operator: { type: 'in' }, value: chunk }],\n },\n });\n const items = res.items ?? [];\n out.push(...items);\n if (items.length < PAGE) {\n break;\n }\n skip += PAGE;\n }\n }\n return out;\n }\n\n /**\n * Loads shortcuts for the current folder only (shortcuts belong to the open folder listing).\n */\n private async enrichFolderTreeWithShortcuts(folder: AXMDocumentManagementFolderEntityModel): Promise<void> {\n const folderId = folder.id;\n if (!folderId) {\n return;\n }\n\n const shortcuts = await this.loadShortcutsForFolderIdChunks([folderId]);\n (folder as AXMDocumentManagementFolderEntityModel & { shortcuts?: AXMDocumentShortcutEntityModel[] }).shortcuts = shortcuts.filter((s) => s.folderId === folderId);\n }\n\n /**\n * Maps the combined drive contents response (folder + children + shortcuts + path) to explorer\n * nodes. The server path always ends with the requested folder; the mapped path reuses the fully\n * hydrated result node as its last entry.\n */\n private mapDriveContents(scope: AXPPlatformScope, contents: AXMDriveContentsDto): { path: AXMDocumentExplorerNode[]; result: AXMDocumentExplorerNode; scopeRootId?: string } {\n if (contents.scopeRootId) {\n this.rootFolderIdByScope.set(scope, contents.scopeRootId);\n }\n const result = this.mapFolderDtoToFolderNode(contents.folder);\n const segments = contents.path ?? [];\n const path = segments.length ? [...segments.slice(0, -1).map((segment) => this.mapFolderDtoToFolderNode(segment as AXMDocumentManagementFolderEntityModel)), result] : [result];\n return { path, result, scopeRootId: contents.scopeRootId };\n }\n\n /**\n * Gets the root folder for the given scope in a single request (children, shortcuts and\n * path are included in the combined drive contents response).\n */\n async getRoot(scope: AXPPlatformScope): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n scopeRootId?: string;\n }> {\n const contents = await this.documentManagementService.getDriveContents(scope);\n return this.mapDriveContents(scope, contents);\n }\n\n /**\n * Gets (or creates) the folder bound to the entity record and returns it as explorer root.\n */\n async getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n const folder = await this.documentManagementService.getRootByEntityRef(refType, refId);\n await this.enrichFolderTreeWithShortcuts(folder);\n const result = this.mapFolderDtoToFolderNode(folder);\n return { path: [result], result };\n }\n\n /**\n * Returns document types whose name is in the given list.\n */\n async getDocumentTypesByNames(names: string[]): Promise<AXMNodeType[]> {\n if (names.length === 0) return [];\n const res = await this.documentTypeService.query({ skip: 0, take: 1000 });\n const items = (res as { items?: AXMNodeType[] })?.items ?? [];\n const set = new Set(names);\n return items.filter((it) => it?.name && set.has(it.name));\n }\n\n /**\n * Gets a specific folder by ID in a single request. The backend resolves shortcut ids to their\n * target folder and returns children, shortcuts and the breadcrumb path together.\n */\n async getFolder(\n scope: AXPPlatformScope,\n folderId: string,\n options?: { parentPath?: AXMDocumentExplorerNode[]; parentFolderId?: string },\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n scopeRootId?: string;\n }> {\n if (!folderId) {\n throw new Error('Folder ID is required');\n }\n\n void options; // Path comes from the combined response; the parent-path shortcut is obsolete.\n const contents = await this.documentManagementService.getDriveContents(scope, folderId);\n return this.mapDriveContents(scope, contents);\n }\n\n /**\n * Creates a new folder\n */\n async createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode> {\n const now = new Date();\n const currentUser = this.sessionService.user;\n const userId = currentUser?.id?.toString() ?? 'system';\n const userRef = { id: userId, type: 'user' } as any;\n\n const folderToCreate: Omit<AXMDocumentManagementFolderEntityModel, 'id'> = {\n ...data,\n title: data.title,\n childrenCount: 0,\n itemsCount: 0,\n expiredItemsCount: 0,\n nearExpiryItemsCount: 0,\n created: { at: now, user: userRef },\n updated: { at: now, user: userRef },\n isSystem: false,\n isHidden: false,\n isDeleted: false,\n size: data.size ?? 0,\n } as any;\n\n const created = this.unwrapBackendPayload<unknown>(await this.folderData.create(folderToCreate as any));\n const createdId = this.resolveCreatedEntityId(created);\n const folder = this.unwrapBackendPayload<AXMDocumentManagementFolderEntityModel | null | undefined>(await this.folderData.byKey(createdId));\n if (!folder) {\n throw new Error('Failed to load created folder');\n }\n return this.mapFolderDtoToFolderNode(folder);\n }\n\n /**\n * Updates an existing folder\n */\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n const currentUser = this.sessionService.user;\n const userId = currentUser?.id?.toString() ?? 'system';\n const userRef = { id: userId, type: 'user' } as any;\n const updateData = {\n ...data,\n updated: { at: new Date(), user: userRef },\n } as any;\n const updatedFolder = await this.folderData.update(folderId, updateData);\n return this.mapFolderDtoToFolderNode(updatedFolder);\n }\n\n /**\n * Deletes a folder. Cascades to delete any shortcuts that point to this folder.\n */\n async deleteFolder(folderId: string): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 1000,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'targetFolderId', operator: { type: 'equal' }, value: folderId }],\n },\n });\n for (const s of shortcutRes.items ?? []) {\n if (s.id) await this.shortcutData.delete(s.id);\n }\n await this.folderData.delete(folderId);\n }\n\n /**\n * Gets available storage space\n */\n async getAvailableSpace(): Promise<number> {\n // For now, return a fixed value of 100GB (56 * 1024 * 1024 * 1024 bytes)\n // This should be replaced with actual storage quota logic when implemented\n return 56 * 1024 * 1024 * 1024;\n }\n\n //#endregion\n\n //#region ---- File Operations ----\n\n /**\n * Creates a new file\n */\n async createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode> {\n const createdId = await this.documentData.create(data as any);\n const file = await this.documentData.byKey(createdId);\n if (!file) {\n throw new Error('Failed to load created document');\n }\n return this.mapFileToNode(file);\n }\n\n /**\n * Updates an existing file\n */\n async updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode> {\n const updatedFile = await this.documentData.update(fileId, data);\n return this.mapFileToNode(updatedFile);\n }\n\n /**\n * Deletes a file. Cascades to delete any shortcuts that point to this document.\n */\n async deleteFile(fileId: string): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 1000,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'targetDocumentId', operator: { type: 'equal' }, value: fileId }],\n },\n });\n for (const s of shortcutRes.items ?? []) {\n if (s.id) await this.shortcutData.delete(s.id);\n }\n await this.documentData.delete(fileId);\n }\n\n /**\n * Opens a drive file: runs the catalog file type's `open` handler when registered; otherwise downloads.\n */\n async openFile(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type !== 'file') {\n return;\n }\n\n const targetNode = await this.resolveFileNode(node);\n if (!targetNode) {\n console.error('Shortcut target document not found.', node);\n return;\n }\n\n const displayName = resolveExplorerFileDisplayName(targetNode.name, targetNode.fileId);\n const catalog = await this.fileTypeProviderService.items();\n const payload = (await this.resolveFileListItem(targetNode)) ?? targetNode;\n const opened = await tryOpenFileByCatalogType({\n fileName: displayName,\n catalog,\n fileService: this.fileManagerService,\n openContext: createFileTypeOpenContext(this.injector, this.platformId),\n payload,\n });\n\n if (!opened) {\n await this.downloadFile(node);\n }\n }\n\n /**\n * Downloads a file using the same logic as file-uploader component.\n * For shortcut nodes, downloads the target document.\n */\n async downloadFile(node: AXMDocumentExplorerNode): Promise<void> {\n const targetNode = await this.resolveFileNode(node);\n if (!targetNode) {\n console.error('Shortcut target document not found.', node);\n return;\n }\n\n const file = await this.resolveFileListItem(targetNode);\n if (!file) {\n console.error('File could not be resolved for download.', targetNode);\n return;\n }\n\n const triggerDownload = (blob: Blob, fileName: string) => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n if (!file.source) {\n console.error('File source is undefined, cannot download.', file);\n return;\n }\n\n switch (file.source.kind) {\n case 'blob':\n if (file.source.value instanceof Blob) {\n triggerDownload(file.source.value, file.name ?? targetNode.name ?? 'download');\n } else {\n console.error('Source kind is blob, but value is not a Blob.', file);\n }\n break;\n case 'fileId':\n if (typeof file.source.value === 'string') {\n try {\n const fileId = file.source.value.replace(/^file:/, '');\n const fileInfo = await this.fileService.getInfo(fileId);\n const blob =\n fileInfo?.binary instanceof Blob\n ? fileInfo.binary\n : await this.fileService.download(fileId);\n triggerDownload(blob, file.name ?? targetNode.name ?? fileInfo?.name ?? 'download');\n } catch (error) {\n console.error('Error downloading file by fileId:', file.source.value, error);\n }\n } else {\n console.error('Source kind is fileId, but value is not a string ID.', file);\n }\n break;\n case 'url':\n if (typeof file.source.value === 'string') {\n const link = document.createElement('a');\n link.href = resolveClientAssetUrl(file.source.value);\n link.download = file.name ?? targetNode.name ?? 'download';\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('Source kind is url, but value is not a string URL.', file);\n }\n break;\n case 'reference':\n console.error('Download not supported for source kind: reference', file);\n break;\n case 'preview':\n case 'none':\n default:\n console.error(`Download not supported for source kind: ${file.source.kind}`, file);\n break;\n }\n\n if (this.hooks) {\n try {\n await this.hooks.runAsync<any>('file-uploader.fileItem.after-download', {\n host: undefined,\n file,\n plugins: [],\n excludePlugins: [],\n });\n } catch {\n // Ignore hook errors\n }\n }\n }\n\n private async resolveFileNode(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | null> {\n if (node.storageType === 'shortcut' && node.targetDocumentId) {\n const doc = await this.documentData.byKey(node.targetDocumentId);\n return doc ? this.mapFileToNode(doc) : null;\n }\n return node;\n }\n\n private resolveStorageFileId(fileInfo: unknown): string | undefined {\n return resolveDocumentStorageFileId(fileInfo);\n }\n\n private async resolveFileListItem(node: AXMDocumentExplorerNode): Promise<AXPFileListItem | null> {\n const raw = node.fileId;\n const storageId = this.resolveStorageFileId(raw);\n const displayName = node.name;\n\n if (raw && typeof raw === 'object' && raw.source?.kind === 'blob' && raw.source.value instanceof Blob) {\n return { ...raw, name: raw.name ?? displayName };\n }\n\n if (raw && typeof raw === 'object' && raw.source?.kind === 'url' && typeof raw.source.value === 'string') {\n const item = raw as AXPFileListItem;\n const url = raw.source.value;\n return {\n ...item,\n name: item.name ?? displayName,\n source: { kind: 'url', value: resolveClientAssetUrl(url) },\n };\n }\n\n if (storageId) {\n try {\n const info = await this.fileService.getInfo(storageId);\n return {\n id: info.fileId,\n name: info.name ?? (typeof raw === 'object' && raw ? raw.name : undefined) ?? displayName,\n size: info.size ?? (typeof raw === 'object' && raw ? raw.size : undefined) ?? node.size,\n status: 'uploaded',\n source: info.url ? { kind: 'url', value: resolveClientAssetUrl(info.url) } : { kind: 'fileId', value: info.fileId },\n };\n } catch (error) {\n console.error('Failed to resolve file from storage:', storageId, error);\n }\n }\n\n if (raw && typeof raw === 'object') {\n const item = raw as AXPFileListItem;\n if (item.source) {\n return { ...item, name: item.name ?? displayName };\n }\n }\n\n return null;\n }\n\n //#endregion\n\n //#region ---- Node Operations ----\n\n /**\n * Deletes multiple nodes (files, folders, and shortcuts).\n */\n async deleteNodes(nodes: AXMDocumentExplorerNode[]): Promise<void> {\n for (const node of nodes) {\n if (node.storageType === 'shortcut' || node.isShortcut) {\n await this.deleteShortcut(node.id);\n } else if (node.type === 'folder') {\n await this.deleteFolder(node.id);\n } else {\n await this.deleteFile(node.id);\n }\n }\n }\n\n /**\n * Creates a shortcut to a document or folder in the given folder.\n */\n async createShortcut(targetId: string, targetType: 'file' | 'folder', folderId: string, options?: { nameOverride?: string }): Promise<AXMDocumentExplorerNode> {\n let name: unknown = options?.nameOverride;\n if (name == null || name === '') {\n if (targetType === 'file') {\n const doc = await this.documentData.byKey(targetId);\n name = doc?.name ?? doc?.title ?? 'Document';\n } else {\n const folder = await this.folderData.byKey(targetId);\n const rawTitle = folder?.title;\n name = rawTitle != null && rawTitle !== '' ? this.translate.resolve(rawTitle) : 'Folder';\n }\n }\n const displayName =\n typeof name === 'string' && name.trim()\n ? name.trim()\n : this.translate.resolve(name as never)?.trim() || (targetType === 'file' ? 'Document' : 'Folder');\n const payload: Record<string, unknown> = {\n folderId,\n name: displayName,\n };\n if (targetType === 'file') {\n payload['targetDocumentId'] = targetId;\n } else {\n payload['targetFolderId'] = targetId;\n }\n const created = this.unwrapBackendPayload<unknown>(await this.shortcutData.create(payload as any));\n const createdId = this.resolveCreatedEntityId(created);\n try {\n const shortcut = this.unwrapBackendPayload<AXMDocumentShortcutEntityModel | null | undefined>(\n await this.shortcutData.byKey(createdId),\n );\n if (shortcut) {\n return this.mapShortcutToNode(shortcut);\n }\n } catch {\n // Insert succeeded; a follow-up getOne can be null (folder-id probe middleware).\n }\n return this.mapShortcutToNode({\n id: createdId,\n folderId,\n name: displayName,\n ...(targetType === 'file' ? { targetDocumentId: targetId } : { targetFolderId: targetId }),\n });\n }\n\n /**\n * Deletes a shortcut by its entity id.\n */\n async deleteShortcut(shortcutId: string): Promise<void> {\n await this.shortcutData.delete(shortcutId);\n }\n\n /**\n * Opens the drive folder picker and creates a shortcut to the given node in the selected folder.\n */\n async createShortcutWithPicker(node: AXMDocumentExplorerNode, scope: AXPPlatformScope): Promise<boolean> {\n const picker = await this.openDriveFolderPicker({\n titleKey: '@document-management:actions.choose-folder-for-shortcut',\n scope,\n browseMode: 'folder',\n });\n const folder = picker.items[0];\n if (!picker.result || !folder?.id) return false;\n const targetType = node.type === 'file' ? 'file' : 'folder';\n const targetId = node.storageType === 'shortcut' && node.type === 'file' ? node.targetDocumentId! : node.storageType === 'shortcut' && node.type === 'folder' ? node.targetFolderId! : node.id;\n await this.createShortcut(targetId, targetType, folder.id);\n return true;\n }\n\n /**\n * Creates a copy of a node (file or folder)\n */\n async copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n if (!node) {\n throw new Error('Node to copy cannot be null or undefined');\n }\n\n // Create a name with \" copy\" before the extension\n const newName = this.createCopyName(node.name);\n\n if (node.type === 'file') {\n // Get the original file to copy all its data\n const originalFile = await this.documentData.byKey(node.id);\n if (!originalFile) {\n throw new Error(`File with ID ${node.id} not found`);\n }\n\n // Create a document model from the original with the new name\n // Extract needed properties without id\n const { id, ...fileDataWithoutId } = originalFile;\n\n // Prepare file for copy by downloading from storage and converting to blob source\n const fileListItem = await this.prepareFileForCopy(originalFile.fileInfo, newName);\n if (!fileListItem) {\n throw new Error('Could not prepare file for copy');\n }\n\n const fileData: CreateFileDto = {\n ...fileDataWithoutId,\n name: newName,\n title: newName,\n fileInfo: fileListItem,\n };\n\n // Create the new file\n return await this.createFile(fileData);\n } else if (node.type === 'folder') {\n // Get the original folder to copy all its data\n const originalFolder = await this.folderData.byKey(node.id);\n if (!originalFolder) {\n throw new Error(`Folder with ID ${node.id} not found`);\n }\n\n // Create a folder model from the original with the new name\n const { id, description: descMl, ...folderRest } = originalFolder;\n const folderData: AXMDocumentManagementFolderCreateDto = {\n ...(folderRest as Omit<AXMDocumentManagementFolderEntityModel, 'id' | 'description'>),\n title: newName,\n description: descMl != null ? this.translate.resolve(descMl) : undefined,\n };\n\n // Create the new folder\n return await this.createFolder(folderData);\n } else {\n throw new Error(`Unsupported node type: ${node.type}`);\n }\n }\n\n /**\n * Opens the drive picker popup with consistent layout (large dialog, optional embedded header).\n */\n private async openDriveFolderPicker(options: {\n titleKey: string;\n scope: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n selectionMode?: 'single' | 'multiple';\n hideHeader?: boolean;\n }): Promise<{ result: boolean; items: AXMDocumentExplorerNode[] }> {\n let title = '';\n const popup = await this.dialogOpener.openPopup({\n load: () => import('../drive-choose/drive-choose.component').then((module) => module.AXMDocumentDriveChooseComponent),\n data: {\n titleKey: options.titleKey,\n scope: options.scope,\n selectionMode: options.selectionMode ?? 'single',\n browseMode: options.browseMode ?? 'folder',\n },\n prepare: async () => {\n title = await this.translate.translateAsync(options.titleKey);\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n size: 'lg',\n data: {\n scope: options.scope,\n selectionMode: options.selectionMode ?? 'single',\n browseMode: options.browseMode ?? 'folder',\n hideHeader: options.hideHeader ?? true,\n },\n }),\n });\n\n return {\n result: Boolean(popup?.data?.result),\n items: popup?.data?.result ? ((popup.data?.items ?? []) as AXMDocumentExplorerNode[]) : [],\n };\n }\n\n /**\n * Moves a node to another location\n */\n async moveTo(options: { node: AXMDocumentExplorerNode; scope: AXPPlatformScope; browseMode?: AXMDocumentExplorerBrowseMode; multiple?: boolean }): Promise<boolean> {\n const picker = await this.openDriveFolderPicker({\n titleKey: '@document-management:actions.move-to-destination',\n scope: options.scope,\n browseMode: options.browseMode ?? 'folder',\n selectionMode: options.multiple ? 'multiple' : 'single',\n });\n\n const selectedFolders = picker.items;\n if (picker.result && selectedFolders.length > 0) {\n const selectedFolder = selectedFolders[0];\n if (selectedFolder) {\n if (options.node.type === 'folder') {\n await this.updateFolder(options.node.id, { parentId: selectedFolder.id });\n } else {\n await this.updateFile(options.node.id, { parentId: selectedFolder.id });\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Copies a node to another location\n */\n async copyTo(options: { node: AXMDocumentExplorerNode; scope: AXPPlatformScope; browseMode?: AXMDocumentExplorerBrowseMode; multiple?: boolean }): Promise<boolean> {\n const picker = await this.openDriveFolderPicker({\n titleKey: '@document-management:actions.copy-to-destination',\n scope: options.scope,\n browseMode: options.browseMode ?? 'folder',\n selectionMode: options.multiple ? 'multiple' : 'single',\n });\n\n const selectedFolders = picker.items;\n if (picker.result && selectedFolders.length > 0) {\n const selectedFolder = selectedFolders[0];\n if (selectedFolder) {\n if (options.node.type === 'folder') {\n await this.createFolder({\n title: options.node.name,\n parentId: selectedFolder.id,\n color: resolveFolderColor(options.node.color),\n size: options.node.size,\n inherit: options.node.inherit ?? 'None',\n });\n } else {\n // Get the original file to copy its data\n const originalFile = await this.documentData.byKey(options.node.id);\n if (!originalFile) {\n throw new Error(`File with ID ${options.node.id} not found`);\n }\n\n // Prepare file for copy by downloading from storage and converting to blob source\n const fileListItem = await this.prepareFileForCopy(originalFile.fileInfo, originalFile.name);\n if (!fileListItem) {\n throw new Error('Could not prepare file for copy');\n }\n\n await this.createFile({\n title: originalFile.title || originalFile.name,\n name: originalFile.name,\n parentId: selectedFolder.id,\n fileInfo: fileListItem,\n documentType: options.node.documentTypes[0],\n statusId: originalFile.statusId ?? 'approved',\n status: originalFile.status ?? {\n id: originalFile.statusId ?? 'approved',\n title: '@general:statuses.approved.title',\n },\n versioningEnabled: originalFile.versioningEnabled === true,\n distributionEnabled: originalFile.distributionEnabled === true,\n });\n }\n return true;\n }\n }\n return false;\n }\n\n //#endregion\n\n //#region ---- Search Operations ----\n\n /**\n * Searches for folders by term within a scope.\n * Root is resolved from current session when folderId is not provided.\n */\n async searchFolders(searchTerm: string, scope: AXPPlatformScope, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n const { result: rootNode } = options?.folderId ? await this.getFolder(scope, options.folderId) : await this.getRoot(scope);\n\n const folders = await this.documentManagementService.searchFolders(searchTerm, rootNode.id);\n\n return unwrapQueryList(folders).map((folder) => this.mapFolderDtoToFolderNode(folder));\n }\n\n /**\n * Searches for files by term within a scope.\n * Root is resolved from current session when folderId is not provided.\n */\n async searchFiles(searchTerm: string, scope: AXPPlatformScope, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n const { result: rootNode } = options?.folderId ? await this.getFolder(scope, options.folderId) : await this.getRoot(scope);\n\n const files = await this.documentManagementService.searchFiles(searchTerm, rootNode.id);\n\n return unwrapQueryList(files).map((file) => this.mapFileToNode(file));\n }\n\n /**\n * Searches for both files and folders by term within a scope.\n * Supports optional metadata filters to narrow down results by metadata field values.\n * Reserved `__quickSearch__` in metadataFilters is treated as the text term (folders + files).\n */\n async searchNodes(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: {\n folderId?: string;\n metadataFilters?: AXPFilterQuery[];\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]> {\n const { quickSearch, metadataFilters } = this.splitQuickSearchMetadataFilters(options?.metadataFilters);\n const term = (searchTerm?.trim() || quickSearch || '').trim();\n const hasSearchTerm = term.length > 0;\n const hasMetadataFilters = metadataFilters.length > 0;\n const hasDocTypeFilter = Boolean(options?.documentTypeIds && options.documentTypeIds.length > 0);\n\n if (!hasSearchTerm && !hasMetadataFilters && !hasDocTypeFilter) {\n return [];\n }\n\n const { result: rootNode } = options?.folderId\n ? await this.getFolder(scope, options.folderId)\n : await this.getRoot(scope);\n const treeRootId = options?.folderId ?? rootNode.id;\n\n const filePromise = this.documentManagementService\n .searchFiles(term, treeRootId!, {\n // Pass original filters so the server can extract `__quickSearch__` for full-text.\n ...(options?.metadataFilters?.length ? { metadataFilters: options.metadataFilters } : {}),\n ...(hasDocTypeFilter ? { documentTypeIds: options!.documentTypeIds! } : {}),\n })\n .then((dtos) => unwrapQueryList(dtos).map((file) => this.mapFileToNode(file)));\n\n const folderPromise = hasSearchTerm\n ? this.documentManagementService\n .searchFolders(term, treeRootId!)\n .then((folders) => unwrapQueryList(folders).map((folder) => this.mapFolderDtoToFolderNode(folder)))\n : Promise.resolve([] as AXMDocumentExplorerNode[]);\n\n const [folders, files] = await Promise.all([folderPromise, filePromise]);\n return [...folders, ...files];\n }\n\n /** Pulls reserved `__quickSearch__` out of drive metadata filters into a plain search term. */\n private splitQuickSearchMetadataFilters(\n filters: AXPFilterQuery[] | undefined,\n ): { quickSearch?: string; metadataFilters: AXPFilterQuery[] } {\n if (filters == null || filters.length === 0) {\n return { metadataFilters: [] };\n }\n\n let quickSearch: string | undefined;\n const metadataFilters: AXPFilterQuery[] = [];\n\n for (const filter of filters) {\n if (filter.field === AXP_QUERY_QUICK_SEARCH_FIELD) {\n const value = filter.value == null ? '' : String(filter.value).trim();\n if (value && !quickSearch) {\n quickSearch = value;\n }\n continue;\n }\n metadataFilters.push(filter);\n }\n\n return { quickSearch, metadataFilters };\n }\n\n /**\n * Returns unique metadata field definitions for the given document types (or all types when `documentTypeIds` is omitted).\n */\n async getUniqueMetadataFields(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]> {\n return this.documentManagementService.getUniqueMetadataDefinitions(documentTypeIds);\n }\n\n //#endregion\n\n //#region ---- Data Retrieval Operations ----\n\n /**\n * Gets all folders\n */\n async getAllFolders(): Promise<AXMDocumentExplorerNode[]> {\n //TODO filter by scope\n return (await this.folderData.query()).items.map(this.mapFolderDtoToFolderNode);\n }\n\n /**\n * Gets all files with optional query\n */\n async getAllFiles(request?: AXPQueryRequest): Promise<AXMDocumentExplorerNode[]> {\n //TODO filter by scope\n return (await this.documentData.query(request)).items.map(this.mapFileToNode);\n }\n\n /**\n * Gets all nodes (files and folders)\n */\n async getAllNodes(): Promise<AXMDocumentExplorerNode[]> {\n return [...(await this.getAllFolders()), ...(await this.getAllFiles())];\n }\n\n //#endregion\n\n //#region ---- File Upload Operations ----\n\n /**\n * Uploads file by document type to a specific folder\n */\n async uploadFileByType(folderId: string, docTypeId: string, options?: { scope?: AXPPlatformScope }): Promise<boolean> {\n const result = await this.attachmentsService.attachFile(docTypeId, {\n multiple: true,\n folderId: folderId,\n scope: options?.scope ?? AXPPlatformScope.Tenant,\n });\n return result;\n }\n\n /**\n * Uploads file by document type to a specific folder\n */\n async updateUploadFileByType(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.attachmentsService.updateAttachedFile(node.id, {\n folderId: node.parentId ?? '',\n });\n return result;\n }\n\n /**\n * Manage versions: Upload a new version for a specific document\n */\n async uploadNewVersion(node: AXMDocumentExplorerNode): Promise<boolean> {\n return await this.attachmentsService.uploadNewVersion(node.id);\n }\n\n async runNewVersionFlow(node: AXMDocumentExplorerNode): Promise<void> {\n await this.runUploadNewVersionFlow(node);\n }\n\n async runUploadNewVersionFlow(node: AXMDocumentExplorerNode): Promise<void> {\n const uploaded = await this.uploadNewVersion(node);\n if (!uploaded) {\n return;\n }\n\n await this.continueToPublishVersion(node);\n }\n\n async findOpenVersionDraft(documentId: string): Promise<{ id: string } | null> {\n return this.attachmentsService.findOpenVersionDraft(documentId);\n }\n\n /**\n * Opens companion version history for a versioned document.\n * For shortcut nodes, shows history of the target document.\n */\n async showVersionHistory(node: AXMDocumentExplorerNode): Promise<void> {\n await this.commandService.execute(AXPCommonCommandKeys.Versioning.ShowHistory, {\n ...this.documentVersioningInput(node),\n });\n }\n\n private async continueToPublishVersion(node: AXMDocumentExplorerNode): Promise<void> {\n if (!node.versioningEnabled) {\n return;\n }\n\n const publishNext = await this.confirmVersioningContinue(\n '@document-management:dialogs.manage-version.continue-publish.title',\n '@document-management:dialogs.manage-version.continue-publish.message',\n );\n if (!publishNext) {\n return;\n }\n\n await this.commandService.execute(AXPCommonCommandKeys.Versioning.Publish, {\n ...this.documentVersioningInput(node),\n skipConfirm: true,\n });\n }\n\n private async confirmVersioningContinue(titleKey: string, messageKey: string): Promise<boolean> {\n const dialogResult = await this.dialogService.confirm(\n await this.translate.translateAsync(titleKey),\n await this.translate.translateAsync(messageKey),\n 'primary',\n 'horizontal',\n false,\n 'cancel',\n );\n return dialogResult.result === true;\n }\n\n private documentVersioningInput(node: AXMDocumentExplorerNode): { refId: string; refType: string } {\n return {\n refId: node.id,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n };\n }\n\n //#region ---- Dialog Operations ----\n\n /**\n * Shows share dialog for a node\n */\n async showShareDialog(node: AXMDocumentExplorerNode): Promise<void> {\n let title = '';\n const popup = await this.dialogOpener.openPopup({\n load: () => import('./components/share-dialog/share-dialog.component').then((module) => module.AXMShareDialogComponent),\n data: { nodeId: node.id, dialog: 'share' },\n prepare: async () => {\n title = await this.translate.translateAsync('@document-management:dialogs.share-dialog.title');\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n data: {\n node,\n },\n }),\n });\n\n if (popup?.data?.result) {\n // Handle the share action with popup.data.data\n }\n }\n\n /**\n * Shows share via email dialog for a node\n */\n async showShareWithEmailDialog(node: AXMDocumentExplorerNode): Promise<void> {\n let title = '';\n const popup = await this.dialogOpener.openPopup({\n load: () =>\n import('./components/share-email-dialog/share-email-dialog.component').then(\n (module) => module.AXMShareEmailDialogComponent,\n ),\n data: { nodeId: node.id, dialog: 'share-email' },\n prepare: async () => {\n title = await this.translate.translateAsync('@document-management:dialogs.share-email-dialog.title');\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n data: {\n node,\n },\n }),\n });\n\n if (popup?.data?.result) {\n // Handle the share via email action with popup.data.data\n }\n }\n\n /**\n * Shows link dialog for a node\n */\n async showLinkDialog(node: AXMDocumentExplorerNode): Promise<void> {\n let title = '';\n const popup = await this.dialogOpener.openPopup({\n load: () => import('./components/link-dialog/link-dialog.component').then((module) => module.AXMLinkDialogComponent),\n data: { nodeId: node.id, dialog: 'link' },\n prepare: async () => {\n title = await this.translate.translateAsync('@document-management:dialogs.share-link-dialog.title');\n },\n show: (component) =>\n this.popupService.open(component, {\n title,\n data: {\n node,\n },\n }),\n });\n\n if (popup?.data?.result) {\n // Handle the link generation with popup.data.data\n }\n }\n\n private async folderInheritSelectionOptions(): Promise<Array<{ value: string; text: string }>> {\n const t = this.translate;\n return [\n { value: 'None', text: (await t.translateAsync('@document-management:terms.inherit.options.none')) ?? '' },\n { value: 'Inherited', text: (await t.translateAsync('@document-management:terms.inherit.options.inherited')) ?? '' },\n { value: 'Extends', text: (await t.translateAsync('@document-management:terms.inherit.options.extends')) ?? '' },\n ];\n }\n\n /**\n * Shows lock dialog for a document\n */\n async showLockDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.commandService.execute<\n { refId: string; refType: string },\n { locked?: boolean }\n >(AXPCommonCommandKeys.Lock.Lock, {\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n\n return runtimeCommandPayloadData(result)?.locked === true;\n }\n\n /**\n * Shows unlock dialog for a document\n */\n async showUnlockDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.commandService.execute<\n { refId: string; refType: string },\n { unlocked?: boolean }\n >(AXPCommonCommandKeys.Lock.Unlock, {\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n\n return runtimeCommandPayloadData(result)?.unlocked === true;\n }\n\n /**\n * Builds the picker rows for the folder dialogs. Rows keep every backend field and add two\n * UI-only ones that are stripped again before saving:\n * - `pickerKey`: the select `valueField`. `name` alone is not reliable because backends may only\n * project `id` on a folder's assigned document types.\n * - `displayTitle`: the resolved select `textField` label.\n */\n private mapDocumentTypesForPicker(items: readonly unknown[]): AXMFolderDialogDocumentType[] {\n return castArray(items ?? []).map((it) => this.toDocumentTypePickerRow(it));\n }\n\n private async hydrateDocumentTypesForPicker(items: readonly unknown[]): Promise<AXMFolderDialogDocumentType[]> {\n return this.folderMetadataDialog.hydrateDocumentTypeCatalog(this.mapDocumentTypesForPicker(items));\n }\n\n private documentTypeNamesOf(types: readonly unknown[] | null | undefined): string[] {\n if (!Array.isArray(types)) {\n return [];\n }\n return types\n .map((entry) => {\n const row = entry != null && typeof entry === 'object' ? (entry as Record<string, unknown>) : {};\n return typeof row['name'] === 'string' ? row['name'] : '';\n })\n .filter((name) => name !== '');\n }\n\n private isTypeContainerFolder(\n folder: { childFolderDocumentTypes?: unknown[] } | null | undefined,\n ): boolean {\n return (folder?.childFolderDocumentTypes?.length ?? 0) > 0;\n }\n\n async folderAllowsCreateFolder(\n folder:\n | Pick<AXMDocumentExplorerNode, 'parentId' | 'allowChildFolders' | 'childFolderDocumentTypes'>\n | null\n | undefined,\n ): Promise<boolean> {\n if (!folder) {\n return false;\n }\n if (folder.allowChildFolders === false) {\n return false;\n }\n if (this.isTypeContainerFolder(folder)) {\n return true;\n }\n if (!folder.parentId) {\n return true;\n }\n const parent = await this.loadFolderById(folder.parentId);\n return !this.isTypeContainerFolder(parent);\n }\n\n private async loadFolderById(\n folderId?: string | null,\n ): Promise<AXMDocumentManagementFolderEntityModel | null> {\n if (!folderId) {\n return null;\n }\n try {\n return (await this.folderData.byKey(folderId)) ?? null;\n } catch {\n return null;\n }\n }\n\n /** Folder dialogs need a dense array; AXDataSource cache slots are undefined and break `pickerKey`. */\n private async loadDocumentTypesForFolderDialog(allowedNames?: string[]): Promise<AXMFolderDialogDocumentType[]> {\n if (isArray(allowedNames) && allowedNames.length === 0) {\n return [];\n }\n const res = await this.documentTypeService.query({\n skip: 0,\n take: 1000,\n ...(isArray(allowedNames)\n ? {\n filter: {\n field: 'name',\n operator: { type: 'in' },\n value: allowedNames,\n },\n }\n : {}),\n });\n return this.hydrateDocumentTypesForPicker(res?.items ?? []);\n }\n\n private buildFolderDialogForm(\n form: Record<string, unknown>,\n catalog: AXMFolderDialogDocumentType[],\n options?: { requireDocumentTypes?: boolean },\n ): AXMFolderDialogForm | null {\n const selected = Array.isArray(form['documentTypes']) ? form['documentTypes'] : [];\n if ((options?.requireDocumentTypes ?? true) && selected.length === 0) {\n return null;\n }\n const documentTypes = selected.map((value: unknown) =>\n this.resolveSelectedDocumentType(value, catalog),\n ) as AXMFolderDialogForm['documentTypes'];\n const metaDataForm = form['metaDataForm'];\n return {\n title: String(form['title'] ?? form['name'] ?? ''),\n description: form['description'] as string | undefined,\n inherit: form['inherit'] as AXMDocumentInheritanceType,\n documentTypes,\n color: resolveFolderColor(form['color']),\n metaDataForm: pickMetaDataFormValues(\n metaDataForm != null && typeof metaDataForm === 'object' && !Array.isArray(metaDataForm)\n ? (metaDataForm as Record<string, unknown>)\n : {},\n collectFolderScopedMetaDataList(documentTypes),\n ),\n };\n }\n\n private toDocumentTypePickerRow(item: unknown): AXMFolderDialogDocumentType {\n const row = (item != null && typeof item === 'object' ? item : { name: item, id: item }) as Record<string, unknown>;\n return {\n ...row,\n pickerKey: this.resolveDocumentTypeKey(row),\n displayTitle: this.resolveDocumentTypeLabel(row),\n };\n }\n\n /** Stable identity of a document type, preferring the programmatic name over the backend id. */\n private resolveDocumentTypeKey(item: Record<string, unknown>): string {\n const name = item['name'];\n if (typeof name === 'string' && name !== '') {\n return name;\n }\n const id = item['id'] ?? item['documentTypeId'];\n return id == null ? '' : String(id);\n }\n\n /** Falls through title -> name -> id so a chip never renders blank when a title resolves empty. */\n private resolveDocumentTypeLabel(item: Record<string, unknown>): string {\n for (const candidate of [item['title'], item['name'], item['id']]) {\n if (candidate == null || candidate === '') {\n continue;\n }\n const resolved =\n typeof candidate === 'object'\n ? this.translate.resolve(candidate as AXPMultiLanguageString)\n : this.translate.resolve(String(candidate));\n if (resolved != null && resolved !== '') {\n return resolved;\n }\n }\n return '';\n }\n\n /**\n * Resolves a folder's assigned document types against the picker catalog.\n *\n * Assignments are matched on key, then loosely on id, because a folder response and the document\n * type list are different backend projections (ids may be numeric in one and strings in the\n * other, and a folder's entry may carry no programmatic name at all). Assignments missing from\n * the catalog are appended to the data source so the select still shows them as selected instead\n * of silently dropping them.\n *\n * With no assignment the catalog entry named `any` is preselected when present (edit fallback).\n */\n private resolveFolderDialogDocumentTypes(\n catalog: AXMFolderDialogDocumentType[],\n assigned: readonly unknown[] | null | undefined,\n ): { selected: AXMFolderDialogDocumentType[]; dataSource: AXMFolderDialogDocumentType[] } {\n if (!isArray(assigned) || assigned.length === 0) {\n const anyType = catalog.find((it) => it['name'] === 'any');\n return { selected: anyType ? [anyType] : [], dataSource: catalog };\n }\n\n const dataSource = [...catalog];\n const selected = assigned.map((entry) => {\n const row = this.toDocumentTypePickerRow(entry);\n const id = row['id'] ?? row['documentTypeId'];\n const match = dataSource.find(\n (it) =>\n (row.pickerKey !== '' && it?.pickerKey === row.pickerKey) ||\n (id != null && it?.['id'] != null && String(it['id']) === String(id)),\n );\n if (match) {\n return match;\n }\n dataSource.push(row);\n return row;\n });\n\n return { selected, dataSource };\n }\n\n /** Removes the picker-only fields so only backend-owned properties are persisted. */\n private toDocumentTypePayload(value: unknown): AXMNodeType {\n if (value == null || typeof value !== 'object') {\n return value as AXMNodeType;\n }\n const row = { ...(value as Record<string, unknown>) };\n delete row['pickerKey'];\n delete row['displayTitle'];\n return row as unknown as AXMNodeType;\n }\n\n /** Maps a select value (row object, or `pickerKey` when the app stores primitives) to its row. */\n private resolveSelectedDocumentType(\n value: unknown,\n dataSource: AXMFolderDialogDocumentType[],\n ): AXMNodeType {\n if (value != null && typeof value === 'object') {\n return this.toDocumentTypePayload(value);\n }\n const match = dataSource.find((it) => it?.pickerKey === String(value));\n return this.toDocumentTypePayload(match ?? { name: value, title: value, id: value });\n }\n\n /**\n * Loads persisted folder metadata for edit dialogs.\n * Explorer child nodes from a parent's embedded `folders[]` are often shallow and omit\n * `inherit` / `documentTypes`; `byKey` returns the full stored row.\n */\n private async resolveFolderNodeForEdit(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n try {\n const folder = await this.folderData.byKey(node.id);\n if (folder) {\n return this.mapFolderDtoToFolderNode(folder);\n }\n } catch {\n // Fall back to the explorer node when storage is unavailable.\n }\n return node;\n }\n\n /** Coerces backend/explorer inherit values to a supported selection-list option. */\n private normalizeFolderInherit(\n inherit: AXMDocumentExplorerNode['inherit'] | string | null | undefined,\n ): AXMDocumentInheritanceType {\n if (inherit === 'None' || inherit === 'Inherited' || inherit === 'Extends') {\n return inherit;\n }\n return 'None';\n }\n\n /**\n * Shows folder edit dialog\n */\n async showFolderEditDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const source = await this.resolveFolderNodeForEdit(node);\n const isContainer = this.isTypeContainerFolder(source);\n const parent = isContainer ? null : await this.loadFolderById(source.parentId);\n const lockedStubs = parent?.childFolderDocumentTypes;\n const typesLocked = Array.isArray(lockedStubs) && lockedStubs.length > 0;\n const lockTypes = typesLocked || isContainer;\n\n const assignedTypes = typesLocked ? lockedStubs : source.documentTypes;\n const catalog = typesLocked\n ? await this.loadDocumentTypesForFolderDialog(this.documentTypeNamesOf(lockedStubs))\n : await this.hydrateDocumentTypesForPicker(\n ((await this.documentTypeService.query({ skip: 0, take: 1000 })) as { items?: unknown[] } | null)\n ?.items ?? [],\n );\n const resolvedTypes = this.resolveFolderDialogDocumentTypes(\n catalog,\n isContainer ? [] : assignedTypes,\n );\n const items = await this.folderMetadataDialog.hydrateDocumentTypeCatalog(resolvedTypes.dataSource);\n const initialDocumentTypes = resolvedTypes.selected.map(\n (row) => items.find((item) => item.pickerKey === row.pickerKey) ?? row,\n );\n const inheritOptions = await this.folderInheritSelectionOptions();\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMFolderDialogForm | null>((dialog) => {\n dialog\n .setTitle('@document-management:actions.update-folder')\n .setSize('lg')\n .setContext({\n name: source.name,\n description: source.description ?? '',\n inherit: lockTypes ? 'None' : this.normalizeFolderInherit(source.inherit),\n documentTypes: isContainer ? [] : initialDocumentTypes,\n color: resolveFolderColor(source.color),\n metaDataForm: source.metaDataForm ?? {},\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.name', (field) => {\n field.path('name');\n field.textBox({ validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({});\n })\n .formField('@document-management:terms.common.inherited', (field) => {\n field.path('inherit');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: inheritOptions,\n });\n if (lockTypes) {\n field.visible(false);\n }\n })\n .formField('@document-management:entities.document-types.title-plural', (field) => {\n field.path('documentTypes');\n field.selectBox({\n valueField: 'pickerKey',\n textField: 'displayTitle',\n dataSource: items,\n multiple: true,\n allowSearch: true,\n validations: isContainer ? [] : [{ rule: 'required' }],\n });\n if (isContainer) {\n field.visible(false);\n } else if (typesLocked) {\n field.readonly(true);\n }\n })\n .formField('@general:terms.common.color', (field) => {\n field.path('color');\n field.colorBox({});\n });\n if (!isContainer) {\n this.folderMetadataDialog.addFolderMetadataForm(flex, items);\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return null;\n }\n return this.buildFolderDialogForm(context as Record<string, unknown>, items, {\n requireDocumentTypes: !isContainer,\n });\n });\n })\n .show();\n\n const form = resolveLayoutBuilderDialogResult<AXMFolderDialogForm>(result);\n if (!form) {\n return false;\n }\n await this.updateFolder(node.id, {\n title: form.title,\n description: form.description,\n inherit: lockTypes ? 'None' : form.inherit,\n documentTypes: isContainer ? [] : form.documentTypes,\n color: form.color,\n metaDataForm: form.metaDataForm ?? {},\n });\n return true;\n }\n\n /**\n * Shows create folder dialog.\n * @param parentId Parent folder id\n * @param options.allowedDocumentTypeNames When set, only these document type names can be selected\n */\n async showCreateFolderDialog(parentId?: string, options?: { allowedDocumentTypeNames?: string[] }): Promise<AXMDocumentExplorerNode | null> {\n const parent = await this.loadFolderById(parentId);\n if (parent?.allowChildFolders === false) {\n return null;\n }\n const lockedStubs = parent?.childFolderDocumentTypes;\n const typesLocked = Array.isArray(lockedStubs) && lockedStubs.length > 0;\n if (!typesLocked && parent?.parentId) {\n const grandparent = await this.loadFolderById(parent.parentId);\n if (this.isTypeContainerFolder(grandparent)) {\n return null;\n }\n }\n const allowedNames = typesLocked\n ? this.documentTypeNamesOf(lockedStubs)\n : options?.allowedDocumentTypeNames;\n const catalog = await this.loadDocumentTypesForFolderDialog(allowedNames);\n const { selected: defaultDocumentTypes } = this.resolveFolderDialogDocumentTypes(\n catalog,\n typesLocked ? lockedStubs : null,\n );\n const inheritOptions = await this.folderInheritSelectionOptions();\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMFolderDialogForm | null>((dialog) => {\n dialog\n .setTitle('@document-management:actions.create-folder')\n .setSize('lg')\n .setContext({\n title: '',\n description: '',\n inherit: 'None',\n documentTypes: defaultDocumentTypes,\n color: AXM_DEFAULT_FOLDER_COLOR,\n metaDataForm: {},\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.title', (field) => {\n field.path('title');\n field.textBox({ validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({});\n })\n .formField('@document-management:terms.common.inherited', (field) => {\n field.path('inherit');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: inheritOptions,\n });\n if (typesLocked) {\n field.visible(false);\n }\n })\n .formField('@document-management:entities.document-types.title-plural', (field) => {\n field.path('documentTypes');\n field.selectBox({\n valueField: 'pickerKey',\n textField: 'displayTitle',\n dataSource: catalog,\n multiple: true,\n allowSearch: true,\n validations: [{ rule: 'required' }],\n });\n if (typesLocked) {\n field.readonly(true);\n }\n })\n .formField('@general:terms.common.color', (field) => {\n field.path('color');\n field.colorBox({});\n });\n this.folderMetadataDialog.addFolderMetadataForm(flex, catalog);\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return null;\n }\n return this.buildFolderDialogForm(context as Record<string, unknown>, catalog);\n });\n })\n .show();\n\n const form = resolveLayoutBuilderDialogResult<AXMFolderDialogForm>(result);\n if (!form) {\n return null;\n }\n try {\n return await this.createFolder({\n title: form.title,\n color: form.color,\n parentId,\n description: form.description,\n documentTypes: form.documentTypes,\n size: 0,\n inherit: typesLocked ? 'None' : form.inherit,\n metaDataForm: form.metaDataForm ?? {},\n });\n } catch (err) {\n console.error('[showCreateFolderDialog] createFolder failed', err);\n throw err;\n }\n }\n\n /**\n * Shows rename popup for a node using dynamic form builder\n */\n async showRenamePopup(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined> {\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDocumentExplorerNode | undefined>((dialog) => {\n dialog\n .setTitle('@document-management:actions.rename')\n .setContext({ name: node.type === 'file' ? (node.title || node.name) : node.name })\n .content((flex) => {\n flex.setDirection('column').formField(\n node.type === 'file'\n ? '@general:terms.common.title'\n : '@document-management:dialogs.rename.name',\n (field) => {\n field.path('name');\n field.textBox({\n placeholder: '@document-management:dialogs.rename.name-placeholder',\n validations: [{ rule: 'required' }],\n });\n });\n })\n .setActions((actions) => {\n actions.cancel().submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return undefined;\n }\n const formData = context as { name?: string };\n if (!formData?.name) {\n return undefined;\n }\n dialogRef.setLoading(true);\n try {\n if (node.type === 'folder') {\n return await this.updateFolder(node.id, { title: formData.name });\n }\n return await this.renameFileTitle(node, formData.name);\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n\n return result;\n }\n\n /**\n * Shows delete nodes confirmation dialog\n */\n async showDeleteNodesDialog(nodeIds: AXMDocumentExplorerNode[]): Promise<boolean> {\n const folderNodes = nodeIds.filter((n) => n.type === 'folder' && n.storageType !== 'shortcut');\n const fileNodes = nodeIds.filter((n) => n.type === 'file' && n.storageType !== 'shortcut');\n const shortcutNodes = nodeIds.filter((n) => n.storageType === 'shortcut' || n.isShortcut);\n const hasFolders = folderNodes.length > 0;\n const hasFiles = fileNodes.length > 0;\n const hasShortcuts = shortcutNodes.length > 0;\n\n const baseOptions = { process: { showResult: true } };\n\n let result: Awaited<ReturnType<AXPCommandService['execute']>>;\n if (hasShortcuts && (hasFolders || hasFiles)) {\n result = await this.commandService.execute('Entity:Remove', {\n entities: nodeIds.map((node) => ({\n source: `${RootConfig.module.name}.${node.storageType === 'shortcut' || node.isShortcut ? RootConfig.entities.documentShortcut.name : node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n ids: [node.id],\n })),\n options: baseOptions,\n \n });\n } else if (hasFolders && hasFiles) {\n result = await this.commandService.execute('Entity:Remove', {\n entities: nodeIds.map((node) => ({\n source: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n ids: [node.id],\n })),\n options: baseOptions,\n \n });\n } else if (hasShortcuts) {\n result = await this.commandService.execute('Entity:Remove', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.documentShortcut.name}`,\n data: shortcutNodes.length === 1 ? shortcutNodes[0] : shortcutNodes,\n options: baseOptions,\n \n });\n } else if (hasFolders) {\n result = await this.commandService.execute('Entity:Remove', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.folder.name}`,\n data: folderNodes.length === 1 ? folderNodes[0] : folderNodes,\n options: baseOptions,\n \n });\n } else if (hasFiles) {\n result = await this.commandService.execute('Entity:Remove', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n data: fileNodes.length === 1 ? fileNodes[0] : fileNodes,\n options: baseOptions,\n \n });\n } else {\n return false;\n }\n return result?.success ?? false;\n }\n\n /**\n * Shows choose file dialog\n */\n async showChooseFileDialog(scope: AXPPlatformScope): Promise<AXMDocumentExplorerNode[]> {\n const picker = await this.openDriveFolderPicker({\n titleKey: '@document-management:actions.choose-from-drive',\n scope,\n browseMode: 'file',\n hideHeader: false,\n });\n if (picker.result) {\n return castArray(picker.items);\n }\n return [];\n }\n\n /** File extensions supported by the file viewer (images, PDF, video, audio). */\n static readonly FILE_VIEWER_PREVIEW_EXTENSIONS = FILE_VIEWER_PREVIEW_EXTENSIONS;\n\n /**\n * Returns file nodes from a folder listing.\n */\n getGallerySupportedFiles(nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n return nodes.filter((item) => item.type === 'file' && !!item.name);\n }\n\n /**\n * Opens a fullscreen file viewer for all files in the node's folder.\n */\n async showFileViewerPopup(\n node: AXMDocumentExplorerNode,\n options?: {\n folderFiles?: AXMDocumentExplorerNode[];\n folderVirtualFiles?: AXMDocumentExplorerNode[];\n startIndex?: number;\n index?: number;\n },\n ): Promise<void> {\n const folderFiles =\n options?.folderFiles ??\n options?.folderVirtualFiles ??\n (await this.resolveFolderFileNodes(node));\n\n const catalog = await this.fileTypeProviderService.items();\n const fileNodes = folderFiles.filter((item) => {\n if (item.type !== 'file' || !item.name) {\n return false;\n }\n const displayName = resolveExplorerFileDisplayName(item.name, item.fileId);\n return isFileNameShownInViewer(displayName, catalog);\n });\n if (fileNodes.length === 0) {\n return;\n }\n\n const fileListItems: AXPFileListItem[] = fileNodes.map((doc) =>\n normalizeDocumentToFileListItem({\n id: doc.id,\n name: doc.name,\n fileInfo: doc.fileId,\n fileId: doc.fileId,\n size: doc.size,\n }),\n );\n\n const resolvedStartIndex =\n options?.startIndex ??\n options?.index ??\n Math.max(0, fileNodes.findIndex((doc) => doc.id === node.id));\n\n await this.fileViewerService.openFiles(fileListItems, {\n startIndex: resolvedStartIndex < 0 ? 0 : resolvedStartIndex,\n thumbnail: true,\n download: true,\n fallbackContent: AXPFileViewerFallbackContentComponent,\n });\n }\n\n private async resolveFolderFileNodes(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode[]> {\n if (!node.parentId || node.parentId === 'virtual') {\n return [];\n }\n\n const parentFolder = await this.folderData.byKey(node.parentId);\n return (parentFolder?.documents ?? []).map((doc) => this.mapFileToNode(doc));\n }\n\n /**\n * Updates a file name\n */\n async updateFileName(node: AXMDocumentExplorerNode, name: string): Promise<AXMDocumentExplorerNode> {\n return this.renameFileTitle(node, name);\n }\n\n /**\n * Renames document title and keeps the stored file name in sync (same title + original extension).\n */\n private async renameFileTitle(node: AXMDocumentExplorerNode, title: string): Promise<AXMDocumentExplorerNode> {\n const nextTitle = title.trim();\n const nextFileName = fileNameFromTitle(nextTitle, node.name);\n if (node.storageType !== 'physical') {\n node.title = nextTitle;\n node.name = nextFileName;\n return node;\n }\n\n const storageId = this.resolveStorageFileId(node.fileId);\n if (storageId) {\n await this.fileService.update({\n fileId: storageId,\n name: nextFileName,\n metadata: {},\n });\n }\n\n const nextFileInfo =\n node.fileId && typeof node.fileId === 'object'\n ? { ...node.fileId, name: nextFileName }\n : undefined;\n\n return this.mapFileToNode(\n await this.documentData.update(node.id, {\n title: nextTitle,\n name: nextFileName,\n ...(nextFileInfo ? { fileInfo: nextFileInfo } : {}),\n }),\n );\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ---- Scoped Drive Service ----\n\n/**\n * Scoped drive service for specific platform scopes.\n * Backend resolves tenant/user from request context (client sends only scope).\n */\nexport class ScopedDriveService {\n //#region ---- Constructor ----\n\n constructor(\n private parent: AXMDocumentManagerService,\n private scope: AXPPlatformScope,\n ) {}\n\n //#endregion\n\n //#region ---- Scoped Operations ----\n\n /**\n * Gets root folder for this scope (tenant/user from session).\n */\n async getRoot(): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getRoot(this.scope);\n }\n\n /**\n * Gets folder for this scope.\n */\n async getFolder(\n folderId: string,\n options?: { parentPath?: AXMDocumentExplorerNode[]; parentFolderId?: string },\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getFolder(this.scope, folderId, options);\n }\n\n /**\n * Creates folder in this scope. Backend sets tenant/user from request context.\n */\n async createFolder(data: Omit<AXMDocumentManagementFolderCreateDto, 'tenantId' | 'userId'>): Promise<AXMDocumentExplorerNode> {\n return this.parent.createFolder(data as AXMDocumentManagementFolderCreateDto);\n }\n\n /**\n * Updates folder in this scope\n */\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n return this.parent.updateFolder(folderId, data);\n }\n\n /**\n * Deletes folder in this scope\n */\n async deleteFolder(folderId: string): Promise<void> {\n return this.parent.deleteFolder(folderId);\n }\n\n /**\n * Gets available space for this scope\n */\n async getAvailableSpace(): Promise<number> {\n return this.parent.getAvailableSpace();\n }\n\n /**\n * Searches folders in this scope\n */\n async searchFolders(searchTerm: string, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchFolders(searchTerm, this.scope, options);\n }\n\n /**\n * Searches files in this scope\n */\n async searchFiles(searchTerm: string, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchFiles(searchTerm, this.scope, options);\n }\n\n /**\n * Searches nodes in this scope\n */\n async searchNodes(\n searchTerm: string,\n options?: {\n folderId?: string;\n metadataFilters?: AXPFilterQuery[];\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchNodes(searchTerm, this.scope, options);\n }\n\n /**\n * Creates a copy of a node in this scope\n */\n async copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n return this.parent.copy(node);\n }\n\n //#endregion\n}\n\n/**\n * Runtime query unwrap may return a bare array or a paged `{ items }` envelope.\n * Normalize to an array for callers that map over search/list results.\n */\nfunction unwrapQueryList<T>(value: T[] | { items?: T[] } | null | undefined): T[] {\n if (Array.isArray(value)) {\n return value;\n }\n if (value && Array.isArray(value.items)) {\n return value.items;\n }\n return [];\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXPFilterQuery,\n AXPPlatformScope,\n runtimeQueryCollectionData,\n runtimeQueryPayloadData,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXMDocumentDto,\n AXMDocumentDocDto,\n AXMDocumentManagementFolderEntityModel,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXMDocumentManagementQueryKeys } from '@acorex-platform/module-document-management-client/contracts';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMDriveContentsDto, AXPDocumentManagementService } from './document-management.service';\nimport { AXMMetadataFieldInfo } from './document-manager.types';\n\n//#endregion\n\n//#region ----- Document management API service -----\n\n/**\n * Default runtime-backed document management service.\n * Other apps can override {@link AXPDocumentManagementService} with a custom implementation.\n */\n@Injectable()\nexport class AXMDocumentManagementApiService extends AXPDocumentManagementService {\n //#region ----- Services & Dependencies -----\n\n private readonly queryService = inject(AXPQueryService);\n\n //#endregion\n\n //#region ----- Drive -----\n\n getRoot(scope: AXPPlatformScope): Promise<AXMDocumentManagementFolderEntityModel> {\n return this.fetchRequired(AXMDocumentManagementQueryKeys.Drive.GetRoot, { scope });\n }\n\n getDriveContents(scope: AXPPlatformScope, folderId?: string): Promise<AXMDriveContentsDto> {\n return this.fetchRequired(AXMDocumentManagementQueryKeys.Drive.GetContents, { scope, folderId });\n }\n\n getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<AXMDocumentManagementFolderEntityModel> {\n return this.fetchRequired(AXMDocumentManagementQueryKeys.Drive.GetRootByEntityRef, { refType, refId });\n }\n\n //#endregion\n\n //#region ----- Document -----\n\n getDocumentPath(\n documentId: string,\n stopFolderId?: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Document.GetPath, { documentId, stopFolderId });\n }\n\n searchFiles(\n searchTerm: string,\n rootFolderId: string,\n options?: { metadataFilters?: AXPFilterQuery[]; documentTypeIds?: string[] },\n ): Promise<AXMDocumentDto[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Document.Search, {\n searchTerm,\n rootFolderId,\n options,\n });\n }\n\n listFolderReviewDocuments(folderId: string, taskId?: string): Promise<AXMDocumentDto[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.DocumentReview.ListFolderDocuments, {\n folderId,\n taskId,\n });\n }\n\n findManyDocuments(ids: string[]): Promise<AXMDocumentDto[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Document.FindMany, { ids });\n }\n\n async getExpiredDocumentCount(): Promise<number> {\n const data = await this.fetchRequired<Record<string, never>, { count: number }>(\n AXMDocumentManagementQueryKeys.Document.GetExpiredCount,\n {},\n );\n return data.count ?? 0;\n }\n\n //#endregion\n\n //#region ----- Folder -----\n\n getFolderPath(\n folderId: string,\n stopFolderId?: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Folder.GetPath, { folderId, stopFolderId });\n }\n\n searchFolders(\n searchTerm: string,\n rootFolderId: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Folder.Search, { searchTerm, rootFolderId });\n }\n\n //#endregion\n\n //#region ----- Document type & metadata -----\n\n getDocumentTypeByName(name: string): Promise<AXMDocumentDocDto> {\n return this.fetchRequired(AXMDocumentManagementQueryKeys.DocumentType.GetByName, { name });\n }\n\n getUniqueMetadataDefinitions(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]> {\n return this.fetchArray(AXMDocumentManagementQueryKeys.Metadata.GetUniqueDefinitions, {\n documentTypeIds,\n });\n }\n\n //#endregion\n\n //#region ----- Query helpers -----\n\n private async fetchRequired<TInput, TResult>(key: string, input: TInput): Promise<TResult> {\n const result = await this.queryService.fetch<TInput, TResult>(key, input);\n const data = runtimeQueryPayloadData(result);\n if (data == null) {\n throw new Error(`Document management query returned no data: ${key}`);\n }\n return data;\n }\n\n private async fetchArray<TInput, TItem>(key: string, input: TInput): Promise<TItem[]> {\n const result = await this.queryService.fetch<TInput, TItem>(key, input);\n return runtimeQueryCollectionData(result)?.items ?? [];\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AXPDataGenerator, AXPFileListItem } from '@acorex-platform/framework-shared/core';\n\nimport { resolveClientAssetUrl } from '../../../shared/document-file.util';\nimport { AXMDocumentExplorerNode } from '../../../shared/document-manager.types';\n\n//#region ---- Drive upload attachment type ----\n\nexport type AXMDriveUploadAttachmentType = 'clone' | 'by-reference';\n\n//#endregion\n\n//#region ---- Clone blob resolution ----\n\n/**\n * Build a Blob for \"clone\" attachment from drive file metadata (storage fileId, url, or existing blob).\n */\nexport async function resolveDriveCloneBlob(\n fileInfo: AXPFileListItem | undefined,\n fileStorageService: AXPFileStorageService,\n): Promise<{ blob: Blob; name?: string; size?: number; mimeType?: string } | null> {\n if (!fileInfo) {\n return null;\n }\n if (fileInfo.source?.kind === 'blob' && fileInfo.source.value instanceof Blob) {\n const blob = fileInfo.source.value;\n return { blob, name: fileInfo.name, size: fileInfo.size ?? blob.size, mimeType: blob.type };\n }\n const storageKeyFromSource =\n fileInfo.source?.kind === 'fileId' && typeof fileInfo.source.value === 'string'\n ? fileInfo.source.value\n : undefined;\n if (storageKeyFromSource) {\n try {\n const storageInfo = await fileStorageService.getInfo(storageKeyFromSource);\n const bin = storageInfo.binary as unknown as BlobPart;\n return {\n blob: new Blob([bin], { type: storageInfo.mimeType }),\n name: storageInfo.name ?? fileInfo.name,\n size: storageInfo.size,\n mimeType: storageInfo.mimeType,\n };\n } catch {\n /* try fallbacks */\n }\n }\n if (typeof fileInfo.id === 'string' && fileInfo.source?.kind !== 'url') {\n try {\n const storageInfo = await fileStorageService.getInfo(fileInfo.id);\n const bin = storageInfo.binary as unknown as BlobPart;\n return {\n blob: new Blob([bin], { type: storageInfo.mimeType }),\n name: storageInfo.name ?? fileInfo.name,\n size: storageInfo.size,\n mimeType: storageInfo.mimeType,\n };\n } catch {\n /* fall through */\n }\n }\n if (fileInfo.source?.kind === 'url' && typeof fileInfo.source.value === 'string') {\n try {\n const res = await fetch(resolveClientAssetUrl(fileInfo.source.value), { credentials: 'include' });\n if (!res.ok) {\n return null;\n }\n const blob = await res.blob();\n return {\n blob,\n name: fileInfo.name,\n size: blob.size || fileInfo.size,\n mimeType: blob.type || 'application/octet-stream',\n };\n } catch {\n return null;\n }\n }\n return null;\n}\n\n/** Chooser validation keeps blob items only when `source.value` is the same `File` instance it checks. */\nfunction toCloneFile(blob: Blob, name: string, mimeType?: string): File {\n if (blob instanceof File && blob.name === name) {\n return blob;\n }\n return new File([blob], name, { type: mimeType || blob.type || 'application/octet-stream' });\n}\n\n//#endregion\n\n//#region ---- Upload options dialog ----\n\n/**\n * Prompts the user to choose between cloning the file or attaching by document reference.\n */\nexport async function promptDriveUploadAttachmentType(\n translationService: AXTranslationService,\n dialogService: AXDialogService,\n): Promise<AXMDriveUploadAttachmentType> {\n const dialogTitle = await translationService.translateAsync('@document-management:actions.upload-options.title');\n const dialogMessage = await translationService.translateAsync(\n '@document-management:actions.upload-options.confirm-message',\n );\n\n const dialogResult = await dialogService.confirm(\n dialogTitle,\n dialogMessage,\n 'primary',\n 'horizontal',\n false,\n 'cancel',\n );\n\n // OK / primary -> clone copy; Cancel / secondary -> link by document reference\n return dialogResult.result ? 'clone' : 'by-reference';\n}\n\n/**\n * Resolves clone vs reference from caller options, otherwise asks the user.\n * `attachmentType` wins; `skipUploadOptions` attaches by reference without a dialog.\n */\nexport async function resolveDriveUploadAttachmentType(\n options: Record<string, unknown> | undefined,\n translationService: AXTranslationService,\n dialogService: AXDialogService,\n): Promise<AXMDriveUploadAttachmentType> {\n const attachmentTypeFromOptions = options?.['attachmentType'] as AXMDriveUploadAttachmentType | undefined;\n if (attachmentTypeFromOptions === 'clone' || attachmentTypeFromOptions === 'by-reference') {\n return attachmentTypeFromOptions;\n }\n\n if (Boolean(options?.['skipUploadOptions'])) {\n return 'by-reference';\n }\n\n return promptDriveUploadAttachmentType(translationService, dialogService);\n}\n\n//#endregion\n\n//#region ---- Node to file list mapping ----\n\nfunction nodeFileIdToListItem(\n raw: string | AXPFileListItem | undefined,\n node: AXMDocumentExplorerNode,\n): AXPFileListItem | undefined {\n if (!raw) {\n return undefined;\n }\n if (typeof raw === 'string') {\n const fileId = raw.startsWith('file:') ? raw.slice(5) : raw;\n return {\n id: fileId,\n name: node.name,\n size: node.size,\n status: 'attached',\n source: { kind: 'fileId', value: fileId },\n };\n }\n return raw;\n}\n\n/**\n * Maps drive explorer nodes to file list items for the chosen attachment type.\n */\nexport async function mapDriveNodesToFileListItems(\n nodes: AXMDocumentExplorerNode[],\n attachmentType: AXMDriveUploadAttachmentType,\n fileStorageService: AXPFileStorageService,\n): Promise<AXPFileListItem[]> {\n const items: AXPFileListItem[] = [];\n\n for (const node of nodes) {\n if (node.type === 'folder') {\n continue;\n }\n\n const raw = node.fileId;\n const displayName =\n (typeof raw === 'object' && raw?.name ? raw.name : node.name ?? '').trim() || 'file';\n const displaySize = (typeof raw === 'object' && raw?.size != null ? raw.size : node.size) ?? 0;\n\n if (attachmentType === 'by-reference') {\n items.push({\n id: node.id,\n name: displayName,\n size: displaySize,\n status: 'attached',\n source: {\n kind: 'reference',\n value: {\n id: node.id,\n type: 'document',\n },\n },\n });\n continue;\n }\n\n const resolved = await resolveDriveCloneBlob(nodeFileIdToListItem(raw, node), fileStorageService);\n if (!resolved) {\n continue;\n }\n\n const name = resolved.name ?? displayName;\n items.push({\n id: AXPDataGenerator.uuid(),\n name,\n size: resolved.size ?? resolved.blob.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: toCloneFile(resolved.blob, name, resolved.mimeType),\n },\n });\n }\n\n return items;\n}\n\n/**\n * Maps chosen file list items (from the drive chooser) for the selected attachment type.\n */\nexport async function mapChosenDriveItemsToFileListItems(\n chosen: AXPFileListItem[],\n attachmentType: AXMDriveUploadAttachmentType,\n fileStorageService: AXPFileStorageService,\n): Promise<AXPFileListItem[]> {\n const items: AXPFileListItem[] = [];\n\n for (const item of chosen) {\n if (attachmentType === 'by-reference') {\n if (item.source?.kind === 'reference') {\n items.push({ ...item, status: 'attached' });\n continue;\n }\n if (item.id) {\n items.push({\n ...item,\n status: 'attached',\n source: {\n kind: 'reference',\n value: {\n id: item.id,\n type: 'document',\n },\n },\n });\n }\n continue;\n }\n\n const resolved = await resolveDriveCloneBlob(item, fileStorageService);\n if (!resolved) {\n continue;\n }\n\n const name = resolved.name ?? item.name ?? 'file';\n items.push({\n id: AXPDataGenerator.uuid(),\n name,\n size: resolved.size ?? resolved.blob.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: toCloneFile(resolved.blob, name, resolved.mimeType),\n },\n });\n }\n\n return items;\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AXPDialogOpener } from '@acorex-platform/framework-client/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileListItem, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXPFileChooserProvider } from '@acorex-platform/framework-client/layout/components';\nimport { castArray, defaultTo, isEmpty } from 'lodash';\n\nimport { AXMDocumentExplorerBrowseMode, AXMDocumentExplorerNode } from '../../../shared/document-manager.types';\nimport {\n mapDriveNodesToFileListItems,\n resolveDriveUploadAttachmentType,\n} from '../file-uploader/drive-file-uploader.utils';\n\n//#region ---- Drive file chooser provider ----\n\nfunction mapDriveNodeToFileListItem(node: AXMDocumentExplorerNode): AXPFileListItem {\n const raw = node.fileId;\n const name =\n (typeof raw === 'object' && raw?.name ? raw.name : node.name ?? '').trim() || 'file';\n const size = (typeof raw === 'object' && raw?.size != null ? raw.size : node.size) ?? 0;\n\n if (typeof raw === 'object' && raw?.source) {\n return {\n id: raw.id ?? node.id,\n name,\n size,\n status: 'attached',\n source: raw.source,\n };\n }\n\n if (typeof raw === 'string') {\n const fileId = raw.startsWith('file:') ? raw.slice(5) : raw;\n return {\n id: node.id,\n name,\n size,\n status: 'attached',\n source: { kind: 'fileId', value: fileId },\n };\n }\n\n return {\n id: node.id,\n name,\n size,\n status: 'attached',\n source: {\n kind: 'reference',\n value: {\n id: node.id,\n type: 'document',\n },\n },\n };\n}\n\nexport const AXM_DRIVE_FILE_CHOOSER_PROVIDER: AXPFileChooserProvider = {\n key: 'drive',\n title: '@layout:components.file-chooser.providers.drive',\n icon: 'fa-light fa-hard-drive',\n order: 2,\n choose: async (context) => {\n const popupService = inject(AXPopupService);\n const dialogOpener = inject(AXPDialogOpener);\n const translate = inject(AXTranslationService);\n const dialogService = inject(AXDialogService);\n const fileStorageService = inject(AXPFileStorageService);\n\n const scope = defaultTo(context.options['scope'] as AXPPlatformScope | undefined, AXPPlatformScope.Tenant);\n const multiple = Boolean(context.options['multiple']);\n const browseMode = defaultTo(\n context.options['browseMode'] as AXMDocumentExplorerBrowseMode | undefined,\n 'file',\n );\n const accept = context.options['accept'] as string | undefined;\n\n let title = '';\n const popup = await dialogOpener.openPopup({\n load: () => import('../../drive-choose.component').then((module) => module.AXMDocumentDriveChooseComponent),\n data: { scope, multiple, browseMode, accept: accept ?? '' },\n prepare: async () => {\n title = await translate.translateAsync('@document-management:actions.choose-from-drive');\n },\n show: (component) =>\n popupService.open(component, {\n title,\n size: 'lg',\n data: {\n scope,\n selectionMode: multiple ? 'multiple' : 'single',\n browseMode,\n hideHeader: true,\n accept,\n },\n }),\n });\n\n const picked = popup?.data;\n if (!picked?.result) {\n return undefined;\n }\n\n const selected = castArray(picked.items ?? []) as AXMDocumentExplorerNode[];\n if (isEmpty(selected)) {\n return undefined;\n }\n\n const nodes = browseMode === 'file' ? selected.filter((node) => node.type === 'file') : selected;\n if (isEmpty(nodes)) {\n return undefined;\n }\n\n const next =\n browseMode === 'file'\n ? await mapDriveNodesToFileListItems(\n nodes,\n await resolveDriveUploadAttachmentType(context.options, translate, dialogService),\n fileStorageService,\n )\n : nodes.map(mapDriveNodeToFileListItem);\n if (isEmpty(next)) {\n return undefined;\n }\n\n if (!multiple) {\n return next.slice(0, 1);\n }\n\n return [...context.items, ...next];\n },\n};\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex-platform/framework-client/common';\nimport { AXPFileUploaderProvider } from '@acorex-platform/framework-client/layout/components';\nimport { defaultTo, isEmpty } from 'lodash';\n\nimport { mapChosenDriveItemsToFileListItems, resolveDriveUploadAttachmentType } from './drive-file-uploader.utils';\n\n//#region ---- Drive file uploader provider ----\n\nexport const AXM_DRIVE_FILE_UPLOADER_PROVIDER: AXPFileUploaderProvider = {\n key: 'drive',\n title: '@layout:components.file-uploader.providers.drive',\n icon: 'fa-light fa-hard-drive',\n order: 2,\n upload: async (context) => {\n const fileStorageService = inject(AXPFileStorageService);\n const translationService = inject(AXTranslationService);\n const dialogService = inject(AXDialogService);\n\n if (isEmpty(context.chosen)) {\n return undefined;\n }\n\n const attachmentType = await resolveDriveUploadAttachmentType(\n context.options,\n translationService,\n dialogService,\n );\n\n const uploaded = await mapChosenDriveItemsToFileListItems(\n context.chosen,\n attachmentType,\n fileStorageService,\n );\n\n if (isEmpty(uploaded)) {\n return undefined;\n }\n\n const multiple = defaultTo(context.options['multiple'] as boolean | undefined, true);\n if (!multiple) {\n return uploaded.slice(0, 1);\n }\n\n return [...context.items, ...uploaded];\n },\n};\n\n//#endregion\n","import { inject } from '@angular/core';\nimport {\n AXPFileActionProvider,\n AXCFileUploaderActionsPayload,\n AXCFileUploaderCapabilities,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPDataGenerator,\n AXPPlatformScope,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPFileChooserService } from '@acorex-platform/framework-client/layout/components';\n\nexport const UploadFromDriveActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 2,\n execute: (\n payload: AXCFileUploaderActionsPayload,\n ): AXCFileUploaderActionsPayload => {\n const chooserService = inject(AXPFileChooserService);\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-document-from-drive',\n global: true,\n textKey: '@document-management:actions.choose-from-drive',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n const chosen = await chooserService.choose('drive', {\n options: {\n multiple: payload.options?.multiple ?? true,\n scope: AXPPlatformScope.Tenant,\n browseMode: 'file',\n accept: payload.options?.accept,\n },\n items: [],\n });\n\n if (!chosen?.length) {\n return;\n }\n\n capabilities.addFiles(\n chosen.map((item) => ({\n ...item,\n id: item.id ?? AXPDataGenerator.uuid(),\n })),\n );\n },\n },\n ];\n\n return payload;\n },\n};\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXP_FILE_ACTION_PROVIDER, UploadFromComputerActionProvider } from '@acorex-platform/framework-client/common';\nimport {\n AXP_FILE_CHOOSER_PROVIDERS,\n AXP_FILE_UPLOADER_PROVIDERS,\n} from '@acorex-platform/framework-client/layout/components';\n\nimport { AXM_DRIVE_FILE_CHOOSER_PROVIDER } from './providers/file-chooser';\nimport { AXM_DRIVE_FILE_UPLOADER_PROVIDER } from './providers/file-uploader';\nimport { UploadFromDriveActionProvider } from './slots/file-uploader-widget-extension';\n\n@NgModule({\n imports: [],\n providers: [\n { provide: AXP_FILE_ACTION_PROVIDER, useValue: UploadFromComputerActionProvider, multi: true },\n { provide: AXP_FILE_ACTION_PROVIDER, useValue: UploadFromDriveActionProvider, multi: true },\n { provide: AXP_FILE_CHOOSER_PROVIDERS, useValue: AXM_DRIVE_FILE_CHOOSER_PROVIDER, multi: true },\n { provide: AXP_FILE_UPLOADER_PROVIDERS, useValue: AXM_DRIVE_FILE_UPLOADER_PROVIDER, multi: true },\n ],\n})\nexport class AXMDriveChooseModule {}\n","import {\n AXP_FILE_ACTION_PROVIDER,\n AXPFileActionProvider,\n AXPFileStorageService,\n AXCFileUploaderActionsPayload,\n AXCFileUploaderCapabilities,\n} from '@acorex-platform/framework-client/common';\nimport {AXPDataGenerator} from '@acorex-platform/framework-client/core';\nimport {AXPEntityReference, AXPFileListItem, AXPPlatformScope} from '@acorex-platform/framework-shared/core';\nimport { AXPFileChooserService } from '@acorex-platform/framework-client/layout/components';\nimport { AXPHookProvider } from '@acorex-platform/framework-client/core';\nimport { AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition } from '@acorex-platform/framework-client/layout/builder';\nimport { inject, Injector } from '@angular/core';\nimport { set } from 'lodash';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-client/contracts';\nimport {\n AXMDocumentDocDto,\n AXMDocumentDto,\n AXPContentDocumentsPermissionKeys,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPDocumentManagementService } from './document-management.service';\nimport { AXMDocumentDialogService } from './services/document-dialog.service';\nimport { buildFileChooserOptionsFromDocumentType } from './document-type-accept.util';\nimport { resolveClientAssetUrl, resolveDocumentStorageFileId } from './document-file.util';\nimport {\n collectDocumentScopedMetaDataList,\n reviewReadonlyFieldNames,\n toEditableMetaDataList,\n} from './folder-metadata.util';\n\n/** Document fields without fileInfo (meta on AXPFileListItem). */\ntype AXMDocumentMeta = Omit<AXMDocumentDto, 'fileInfo'>;\n\n/**\n * Document File Uploader Widget Plugin\n *\n * Provides hook providers for the File Uploader widget to integrate Document Management behaviors.\n * Keys implemented here:\n * - file-uploader.configure → override accept based on docTypeId\n * - file-uploader.actions → one \"Upload\" button per document type (replaces generic Upload from Device)\n * - file-uploader.beforeFilesAdded → open metadata dialog for selected type\n * - file-uploader.fileItem.actions → add per-file actions (e.g., Edit Metadata)\n *\n * Conventions:\n * - plugin name: 'document'\n * - options: { docTypeName: string } or { docTypeNames: string[] } for multiple types\n */\n\nexport type DocumentPluginOptions = { docTypeName?: string; docTypeNames?: string[] };\n\ntype BasePayload = {\n plugins: { name: string; options?: unknown }[];\n excludePlugins: string[];\n pluginOptions?: Record<string, unknown>;\n capabilities: any;\n};\n\n//#region ---- Plugin Guard Utilities ----\n\n/**\n * Check if the 'document' plugin is active (enabled and not excluded) in the payload.\n */\nfunction isDocumentPluginActive(payload: BasePayload): boolean {\n const isEnabled = Array.isArray(payload.plugins) && payload.plugins.some((p) => p.name === 'document');\n const isExcluded = Array.isArray(payload.excludePlugins) && payload.excludePlugins.includes('document');\n return isEnabled && !isExcluded;\n}\n\n/**\n * Extract document plugin options from payload.\n * Returns undefined if plugin is not active or options are missing.\n */\nfunction getDocumentPluginOptions(payload: BasePayload): DocumentPluginOptions | undefined {\n if (!isDocumentPluginActive(payload)) {\n return undefined;\n }\n return (payload.plugins.find((p) => p.name === 'document')?.options ?? {}) as DocumentPluginOptions;\n}\n\n/** Resolve list of document type names from plugin options (single or multiple). */\nfunction getDocTypeNames(opts: DocumentPluginOptions | undefined): string[] {\n if (!opts) return [];\n if (Array.isArray(opts.docTypeNames) && opts.docTypeNames.length > 0) return opts.docTypeNames;\n if (typeof opts.docTypeName === 'string' && opts.docTypeName.trim()) return [opts.docTypeName.trim()];\n return [];\n}\n\n//#endregion\n\n// ---------------- Configure: set accept based on docTypeId / docTypeNames ----------------\nexport const DocumentFileUploaderConfigureProvider: AXPHookProvider<any, any> = {\n key: 'file-uploader.configure',\n priority: 0,\n async execute(payload: BasePayload & { overrides: Record<string, unknown> }) {\n const opts = getDocumentPluginOptions(payload);\n const names = getDocTypeNames(opts);\n if (!names.length) return payload;\n\n const documentManagementService = inject(AXPDocumentManagementService);\n const fileService = inject(AXFileService);\n const allAccept: string[] = [];\n const allFileTypes: string[] = [];\n for (const name of names) {\n const docType = await documentManagementService.getDocumentTypeByName(name);\n const { accept, fileType } = await buildFileChooserOptionsFromDocumentType(docType, fileService);\n if (accept) {\n allAccept.push(...accept.split(',').filter(Boolean));\n }\n allFileTypes.push(...fileType);\n }\n const extensions = Array.from(new Set(allAccept));\n const fileType = Array.from(new Set(allFileTypes));\n\n payload.overrides = payload.overrides || {};\n payload.overrides['accept'] = extensions.join(',');\n if (fileType.length) {\n payload.overrides['fileType'] = fileType;\n }\n return payload;\n },\n};\n\n// ---------------- Actions: one \"Upload\" button per document type (replaces generic Upload from Device) ----------------\nexport const DocumentFileUploaderActionsByTypeProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 5,\n execute: async (payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> => {\n const opts = getDocumentPluginOptions({\n plugins: payload.plugins,\n excludePlugins: payload.excludePlugins ?? [],\n capabilities: payload.capabilities,\n } as BasePayload);\n const docTypeNames = getDocTypeNames(opts);\n if (docTypeNames.length === 0) return payload;\n\n const documentManagementService = inject(AXPDocumentManagementService);\n const documentDialogService = inject(AXMDocumentDialogService);\n const chooserService = inject(AXPFileChooserService);\n const fileService = inject(AXFileService);\n const docTypes = await Promise.all(\n docTypeNames.map((name) => documentManagementService.getDocumentTypeByName(name)),\n );\n\n const byTypeActions = await Promise.all(\n docTypes\n .filter((dt) => dt != null)\n .map(async (docType) => {\n const { accept, fileType } = await buildFileChooserOptionsFromDocumentType(docType, fileService);\n const typeName = (docType as any)?.name as string;\n const title = (docType as any)?.title ?? typeName;\n return {\n plugin: 'document',\n global: false,\n text: title,\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n const chosen = await chooserService.promptChoose({\n options: {\n multiple: payload.options?.multiple ?? true,\n accept: accept || undefined,\n fileType: fileType.length ? fileType : undefined,\n scope: AXPPlatformScope.Tenant,\n browseMode: 'file',\n },\n items: [],\n });\n if (!chosen?.length) return;\n const documentType: AXMDocumentDocDto = {\n id: (docType as { id?: string })?.id ?? '',\n name: typeName,\n title: (docType as { title?: AXMDocumentDocDto['title'] })?.title ?? typeName,\n };\n const fileItems = chosen.map(\n (item) =>\n ({\n ...item,\n id: item.id ?? AXPDataGenerator.uuid(),\n status: item.status ?? 'attached',\n meta: { documentType, ...(item.meta as object) } as Partial<AXMDocumentMeta>,\n }) as AXPFileListItem,\n );\n const result = await documentDialogService.openAttachmentDialogWithoutSave(title, {\n documentType: docType,\n files: fileItems,\n });\n if (result.data?.cancel) {\n return;\n }\n if (result.data?.files) {\n result.data.files.forEach(\n (\n f: {\n metaDataForm?: Record<string, unknown>;\n title?: string;\n description?: string;\n expirationDate?: unknown;\n name?: string;\n },\n i: number,\n ) => {\n if (!fileItems[i]) {\n return;\n }\n const meta: Partial<AXMDocumentMeta> = {\n ...(fileItems[i].meta as Partial<AXMDocumentMeta>),\n documentType,\n metaDataForm: f?.metaDataForm,\n };\n set(fileItems[i], 'meta', meta);\n set(fileItems[i], 'metaDataForm', f?.metaDataForm);\n set(fileItems[i], 'title', f?.title);\n set(fileItems[i], 'description', f?.description);\n if (f?.name) {\n set(fileItems[i], 'name', f.name);\n }\n if (f?.expirationDate !== undefined) {\n set(fileItems[i], 'expirationDate', f.expirationDate);\n }\n },\n );\n }\n capabilities.addFiles(fileItems);\n },\n };\n }),\n );\n\n payload.actions = payload.actions.filter((a) => a.plugin !== 'upload-from-computer');\n payload.actions = [...byTypeActions, ...payload.actions];\n return payload;\n },\n};\n\n// --------------- Before Files Added: no-op (dialog moved into uploader) ---------------\n// When the uploader option \"showEditDialogAfterSelect\" is true, the uploader shows the edit dialog (with EditDialog hooks) per file before adding.\n// When false, files are added directly and the user opens the same edit dialog via the Edit button. The document metadata form is injected via EditDialogAfterFormProvider (below the main form). This provider no longer opens a separate dialog.\nexport const DocumentFileUploaderBeforeFilesAddedProvider: AXPHookProvider<any, any> = {\n key: 'file-uploader.beforeFilesAdded',\n priority: 0,\n async execute(payload: BasePayload & { newFiles: AXPFileListItem[] }) {\n return payload;\n },\n};\n\n// --------------- Edit Dialog: inject metadata group after 'form' ---------------\nexport const DocumentFileUploaderEditDialogAfterFormProvider: AXPHookProvider<any, any> = {\n key: 'file-uploader.edit-dialog.groups.after-form',\n priority: 0,\n async execute(payload: BasePayload & { file: AXPFileListItem; groups: AXPDynamicFormGroupDefinition[] }) {\n const fileMeta = payload.file.meta as Partial<AXMDocumentMeta> | undefined;\n const metaObj = (fileMeta?.metaDataForm ?? (payload.file as { metaDataForm?: unknown }).metaDataForm) as\n | Record<string, { name: string; title: string; value: unknown }>\n | undefined;\n\n const opts = getDocumentPluginOptions(payload);\n const docTypeName = fileMeta?.documentType?.name ?? opts?.docTypeName;\n const injector = inject(Injector);\n const documentManagementService = injector.get(AXPDocumentManagementService);\n const docType = docTypeName\n ? await documentManagementService.getDocumentTypeByName(docTypeName)\n : undefined;\n\n if (!docType && (!metaObj || Object.keys(metaObj).length === 0)) return payload;\n\n const sessionService = injector.get(AXPSessionService);\n const reviewReadonly = [\n ...reviewReadonlyFieldNames(sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview)),\n ];\n const metaDataList = toEditableMetaDataList(\n collectDocumentScopedMetaDataList((docType as { metaDataList?: AXMMetaDataBuilderValue })?.metaDataList),\n reviewReadonly,\n );\n const hasDefinitions = Array.isArray(metaDataList.groups) && metaDataList.groups.length > 0;\n\n const fields: AXPDynamicFormFieldDefinition[] = [\n {\n path: 'metaDataForm',\n title: '@document-management:terms.common.meta-data',\n widget: {\n name: 'metaDataForm',\n type: 'meta-data-form-editor',\n options: { ...metaDataList, readonlyFieldNames: reviewReadonly },\n defaultValue: metaObj,\n } as any,\n },\n ];\n\n const group: AXPDynamicFormGroupDefinition = {\n name: 'metadata',\n title: (docType as any)?.title ?? '@document-management:terms.common.meta-data',\n parameters: fields,\n };\n\n if (hasDefinitions) {\n payload.groups = [...(payload.groups ?? []), group];\n }\n return payload;\n },\n};\n\n// --------------- Download Reference: handle reference-based file downloads ---------------\nexport const DocumentFileUploaderDownloadReferenceProvider: AXPHookProvider<any, any> = {\n key: 'file-uploader.fileItem.download-reference',\n priority: 0,\n async execute(\n payload: BasePayload & {\n file: AXPFileListItem;\n reference: AXPEntityReference;\n fileInfo?: { url?: string; binary?: Blob; name?: string };\n },\n ) {\n // Only handle if reference type is 'document'\n if (payload.reference.type !== 'document') {\n return payload;\n }\n\n const entityService = inject(AXPEntityService);\n const fileStorageService = inject(AXPFileStorageService);\n const documentData = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n\n try {\n // Get document by id\n const document = await documentData.byKey(payload.reference.id);\n\n if (!document) {\n console.error('Document not found for reference:', payload.reference);\n return payload;\n }\n\n const displayName = document.name ?? document.title;\n const linkedFile = document.fileInfo;\n if (linkedFile && typeof linkedFile === 'object') {\n const source = linkedFile.source;\n if (source?.kind === 'url' && typeof source.value === 'string') {\n payload.fileInfo = {\n url: resolveClientAssetUrl(source.value),\n name: linkedFile.name ?? displayName,\n };\n return payload;\n }\n if (source?.kind === 'blob' && source.value instanceof Blob) {\n payload.fileInfo = {\n binary: source.value,\n name: linkedFile.name ?? displayName,\n };\n return payload;\n }\n }\n\n const fileId = resolveDocumentStorageFileId(linkedFile);\n if (!fileId) {\n console.error('Document does not have a downloadable file:', document);\n return payload;\n }\n\n const fileInfo = await fileStorageService.getInfo(fileId);\n\n if (fileInfo) {\n payload.fileInfo = {\n url: fileInfo.url ? resolveClientAssetUrl(fileInfo.url) : undefined,\n binary: (fileInfo as { binary?: Blob }).binary,\n name: fileInfo.name ?? displayName,\n };\n } else {\n console.error('Could not retrieve file info from fileId:', fileId);\n }\n } catch (error) {\n console.error('Error processing reference download:', payload.reference, error);\n }\n\n return payload;\n },\n};\n\n// Convenience export to register all providers at once in a module\nexport const DocumentFileUploaderWidgetPluginProviders = [\n DocumentFileUploaderConfigureProvider,\n DocumentFileUploaderBeforeFilesAddedProvider,\n DocumentFileUploaderEditDialogAfterFormProvider,\n DocumentFileUploaderDownloadReferenceProvider,\n];\n","import { AXPExpression } from '@acorex-platform/framework-shared/core';\nimport {\n AXPEntityActionPlugin,\n ensureListActions,\n resolveEntityPluginDetailPageOrder,\n} from '@acorex-platform/framework-client/layout/entity';\n\n/** Component key for the entity Documents (EDMS) page. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const DOCUMENT_DRIVE_PAGE_COMPONENT_KEY = 'entity-document-drive-page';\n\nexport type DocumentPluginOptions = {\n /** Page title. Default: @document-management:terms.common.documents */\n title?: string;\n /** Page icon. Default: fa-light fa-folder-open */\n icon?: string;\n /**\n * Restrict document types for this entity: only these types can be selected when creating a folder\n * or uploading. User cannot see or select other document types.\n */\n documentTypeNames?: string[] | AXPExpression;\n /** Visibility condition for the Documents page (boolean or expression string). */\n hidden?: boolean | string;\n};\n\n/**\n * Document (EDMS) plugin. Adds a \"Documents\" page to the entity that loads the folder\n * bound to the current record via refType/refId (getRootByEntityRef). Uses the same\n * drive UI (explorer, toolbar, detail panel) scoped to that folder.\n */\nexport const documentPlugin: AXPEntityActionPlugin = {\n name: 'documents',\n order: 51,\n apply: (ctx, options?: DocumentPluginOptions) => {\n const opts = options ?? {};\n const title = (opts.title?.trim().length ?? 0) > 0 ? opts.title! : '@document-management:terms.common.documents';\n const refType = `${ctx.entity.module}.${ctx.entity.name}`;\n\n ctx.entity.pages ??= [];\n const pageExists = ctx.entity.pages.some(\n (p: { componentKey?: string }) => p.componentKey === DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n );\n const pageOrder = resolveEntityPluginDetailPageOrder(\n { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n 'documents',\n {\n componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n skipPage: pageExists\n ? { componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY }\n : undefined,\n },\n );\n const pageEntry: {\n componentKey: string;\n title: string;\n icon: string;\n layout: { order: number };\n refType: string;\n hidden?: boolean | string;\n allowedDocumentTypeNames?: string[];\n options?: Record<string, any>;\n } = {\n componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n title,\n icon: opts.icon ?? 'fa-light fa-files',\n layout: { order: pageOrder },\n refType,\n options: {\n documentTypeNames: opts.documentTypeNames,\n },\n };\n if (Array.isArray(opts.documentTypeNames) && opts.documentTypeNames.length > 0) {\n pageEntry.allowedDocumentTypeNames = opts.documentTypeNames;\n }\n if (opts.hidden !== undefined) {\n pageEntry.hidden = opts.hidden;\n }\n if (!pageExists) {\n (ctx.entity.pages as (typeof pageEntry)[]).push(pageEntry);\n } else {\n const pages = ctx.entity.pages as typeof pageEntry[];\n const index = pages.findIndex((p) => p.componentKey === DOCUMENT_DRIVE_PAGE_COMPONENT_KEY);\n if (index >= 0) {\n pages[index] = { ...pages[index], ...pageEntry };\n }\n }\n\n ensureListActions(ctx);\n },\n};\n","import { documentTypeHasReviewMetadataForAppliesTo } from '@acorex-platform/module-document-management-client/contracts';\nimport type {\n AXMMetaDataBuilderValue,\n AXMMetaDataFieldAppliesTo,\n} from '@acorex-platform/module-data-management-client/contracts';\n\nimport type { AXMDocumentExplorerNode } from './document-manager.types';\n\n//#region ----- Types -----\n\ntype ReviewTypeRow = {\n requiresReview?: unknown;\n metaDataList?: AXMMetaDataBuilderValue | null | unknown;\n};\n\ntype DocumentReviewTypeLoader = {\n byNames: (names: string[]) => Promise<ReviewTypeRow[]>;\n byKey?: (id: string) => Promise<ReviewTypeRow | null | undefined>;\n};\n\n//#endregion\n\n//#region ----- Explorer review eligibility -----\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction rememberId(target: string[], value: unknown): void {\n const id = typeof value === 'string' ? value.trim() : '';\n if (id && !target.includes(id)) {\n target.push(id);\n }\n}\n\nfunction rememberType(\n ids: string[],\n names: string[],\n type: unknown,\n): void {\n const row = asRecord(type);\n if (!row) {\n return;\n }\n rememberId(ids, row['id']);\n const name = typeof row['name'] === 'string' ? row['name'].trim() : '';\n if (name && !names.includes(name)) {\n names.push(name);\n }\n}\n\nexport function collectDocumentTypeKeys(...sources: unknown[]): { ids: string[]; names: string[] } {\n const ids: string[] = [];\n const names: string[] = [];\n for (const source of sources) {\n const row = asRecord(source);\n if (!row) {\n continue;\n }\n rememberType(ids, names, row['documentType']);\n const types = row['documentTypes'];\n if (Array.isArray(types)) {\n for (const type of types) {\n rememberType(ids, names, type);\n }\n }\n }\n return { ids, names };\n}\n\nexport function isReviewEnabledDocumentType(\n type: ReviewTypeRow | null | undefined,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): boolean {\n if (!type) {\n return false;\n }\n return documentTypeHasReviewMetadataForAppliesTo(\n type.metaDataList as AXMMetaDataBuilderValue | null | undefined,\n appliesTo,\n );\n}\n\nfunction sourceHasReviewEnabledType(\n source: unknown,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): boolean {\n const row = asRecord(source);\n if (!row) {\n return false;\n }\n if (isReviewEnabledDocumentType(row as ReviewTypeRow, appliesTo)) {\n return true;\n }\n if (isReviewEnabledDocumentType(asRecord(row['documentType']) as ReviewTypeRow | null, appliesTo)) {\n return true;\n }\n const types = row['documentTypes'];\n return (\n Array.isArray(types) &&\n types.some((type) => isReviewEnabledDocumentType(asRecord(type) as ReviewTypeRow | null, appliesTo))\n );\n}\n\nexport async function sourcesAllowDocumentReview(\n sources: unknown[],\n load: DocumentReviewTypeLoader,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): Promise<boolean> {\n if (sources.some((source) => sourceHasReviewEnabledType(source, appliesTo))) {\n return true;\n }\n const keys = collectDocumentTypeKeys(...sources);\n if (load.byKey) {\n for (const id of keys.ids) {\n try {\n const type = await load.byKey(id);\n if (isReviewEnabledDocumentType(type, appliesTo)) {\n return true;\n }\n } catch {\n // Keep checking remaining types when one lookup misses.\n }\n }\n }\n if (keys.names.length) {\n const types = await load.byNames(keys.names);\n if (types.some((type) => isReviewEnabledDocumentType(type, appliesTo))) {\n return true;\n }\n }\n return false;\n}\n\nexport async function explorerNodeAllowsDocumentReview(\n node: AXMDocumentExplorerNode | null | undefined,\n load: DocumentReviewTypeLoader,\n): Promise<boolean> {\n if (!node || node.storageType === 'shortcut' || node.isShortcut) {\n return false;\n }\n const appliesTo: AXMMetaDataFieldAppliesTo = node.type === 'folder' ? 'folder' : 'document';\n return sourcesAllowDocumentReview([node], load, appliesTo);\n}\n\n//#endregion\n","import { documentTypeAllowsDistributionForAppliesTo } from '@acorex-platform/module-document-management-client/contracts';\nimport type {\n AXMMetaDataBuilderValue,\n AXMMetaDataFieldAppliesTo,\n} from '@acorex-platform/module-data-management-client/contracts';\n\nimport { collectDocumentTypeKeys } from './document-review.util';\nimport type { AXMDocumentExplorerNode } from './document-manager.types';\n\n//#region ----- Types -----\n\ntype DistributionTypeRow = {\n enableDistributionCapability?: unknown;\n metaDataList?: AXMMetaDataBuilderValue | null | unknown;\n};\n\ntype DocumentDistributionTypeLoader = {\n byNames: (names: string[]) => Promise<DistributionTypeRow[]>;\n byKey?: (id: string) => Promise<DistributionTypeRow | null | undefined>;\n};\n\n//#endregion\n\n//#region ----- Explorer distribution eligibility -----\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction isDistributionEnabledDocumentType(\n type: DistributionTypeRow | null | undefined,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): boolean {\n if (!type || type.metaDataList == null) {\n return false;\n }\n return documentTypeAllowsDistributionForAppliesTo(\n {\n enableDistributionCapability: type.enableDistributionCapability,\n metaDataList: type.metaDataList as AXMMetaDataBuilderValue | null | undefined,\n },\n appliesTo,\n );\n}\n\nfunction sourceAllowsDistribution(source: unknown, appliesTo: AXMMetaDataFieldAppliesTo): boolean {\n const row = asRecord(source);\n if (!row) {\n return false;\n }\n if (isDistributionEnabledDocumentType(row as DistributionTypeRow, appliesTo)) {\n return true;\n }\n if (\n isDistributionEnabledDocumentType(\n asRecord(row['documentType']) as DistributionTypeRow | null,\n appliesTo,\n )\n ) {\n return true;\n }\n const types = row['documentTypes'];\n return (\n Array.isArray(types) &&\n types.some((type) =>\n isDistributionEnabledDocumentType(asRecord(type) as DistributionTypeRow | null, appliesTo),\n )\n );\n}\n\nexport async function sourcesAllowDocumentDistribution(\n sources: unknown[],\n load: DocumentDistributionTypeLoader,\n appliesTo: AXMMetaDataFieldAppliesTo,\n): Promise<boolean> {\n if (sources.some((source) => sourceAllowsDistribution(source, appliesTo))) {\n return true;\n }\n const keys = collectDocumentTypeKeys(...sources);\n if (load.byKey) {\n for (const id of keys.ids) {\n try {\n const type = await load.byKey(id);\n if (isDistributionEnabledDocumentType(type, appliesTo)) {\n return true;\n }\n } catch {\n // Keep checking remaining types when one lookup misses.\n }\n }\n }\n if (keys.names.length) {\n const types = await load.byNames(keys.names);\n if (types.some((type) => isDistributionEnabledDocumentType(type, appliesTo))) {\n return true;\n }\n }\n return false;\n}\n\nexport async function explorerNodeAllowsDocumentDistribution(\n node: AXMDocumentExplorerNode | null | undefined,\n load: DocumentDistributionTypeLoader,\n): Promise<boolean> {\n if (!node || node.storageType === 'shortcut' || node.isShortcut) {\n return false;\n }\n const appliesTo: AXMMetaDataFieldAppliesTo = node.type === 'folder' ? 'folder' : 'document';\n return sourcesAllowDocumentDistribution([node], load, appliesTo);\n}\n\n//#endregion\n","//#region ----- Types -----\n\nexport type AXMDocumentVersionSource = {\n type?: string;\n storageType?: string;\n isShortcut?: boolean;\n versioningEnabled?: boolean;\n version?: number | string | null;\n};\n\n//#endregion\n\n//#region ----- Public API -----\n\n/**\n * Published host version for explorer display. Only when versioning is on.\n * Missing/invalid numbers fall back to 1 (middleware stamps v1 on create).\n */\nexport function resolveDocumentVersionNumber(source: AXMDocumentVersionSource): number | null {\n if (source.type !== 'file' || source.storageType === 'shortcut' || source.isShortcut) {\n return null;\n }\n if (source.versioningEnabled !== true) {\n return null;\n }\n const n = Number(source.version);\n if (Number.isFinite(n) && n > 0) {\n return n;\n }\n return 1;\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-client/contracts';\nimport type { AXMDocumentExplorerNode } from './document-manager.types';\n\n//#endregion\n\n//#region ----- Types -----\n\nexport type HomogeneousGridKind = 'folder' | 'document';\n\nexport type HomogeneousGridMatch = {\n kind: HomogeneousGridKind;\n typeKeys: string[];\n};\n\nexport type HomogeneousGridLookup = {\n entity: string;\n valueField: string;\n textField: string;\n};\n\nexport type HomogeneousGridColumn = {\n name: string;\n title: string;\n kind: 'attribute' | 'metadata';\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string' | 'lookup';\n lookup?: HomogeneousGridLookup;\n};\n\n//#endregion\n\n//#region ----- Detect -----\n\nfunction documentTypeKey(type: unknown): string {\n if (type == null) {\n return '';\n }\n if (typeof type !== 'object') {\n return String(type);\n }\n const row = type as Record<string, unknown>;\n const name = row['name'];\n if (typeof name === 'string' && name.trim()) {\n return name.trim();\n }\n const id = row['id'] ?? row['documentTypeId'];\n return id == null ? '' : String(id);\n}\n\nfunction documentTypeSignature(node: AXMDocumentExplorerNode): string {\n return (node.documentTypes ?? [])\n .map((type) => documentTypeKey(type))\n .filter(Boolean)\n .sort()\n .join('|');\n}\n\nexport function resolveHomogeneousExplorerGrid(\n folders: readonly AXMDocumentExplorerNode[],\n files: readonly AXMDocumentExplorerNode[],\n): HomogeneousGridMatch | null {\n const hasFolders = folders.length > 0;\n const hasFiles = files.length > 0;\n if (hasFolders === hasFiles) {\n return null;\n }\n const nodes = hasFolders ? folders : files;\n const signatures = nodes.map((node) => documentTypeSignature(node));\n if (signatures.some((signature) => !signature)) {\n return null;\n }\n if (new Set(signatures).size !== 1) {\n return null;\n }\n return {\n kind: hasFolders ? 'folder' : 'document',\n typeKeys: signatures[0].split('|'),\n };\n}\n\nexport function collectDocumentTypeIds(nodes: readonly AXMDocumentExplorerNode[]): string[] {\n const ids = new Set<string>();\n for (const node of nodes) {\n for (const type of node.documentTypes ?? []) {\n const id = type?.id;\n if (id == null) {\n continue;\n }\n const key = String(id).trim();\n if (key) {\n ids.add(key);\n }\n }\n }\n return [...ids];\n}\n\nexport function collectDocumentTypeNames(nodes: readonly AXMDocumentExplorerNode[]): string[] {\n const names = new Set<string>();\n for (const node of nodes) {\n for (const type of node.documentTypes ?? []) {\n const name = type?.name;\n if (typeof name === 'string' && name.trim()) {\n names.add(name.trim());\n }\n }\n }\n return [...names];\n}\n\n//#endregion\n\n//#region ----- Columns -----\n\nfunction asInterfaceObject(\n interfaceValue: unknown,\n): { type?: unknown; name?: unknown; options?: Record<string, unknown> } | null {\n if (interfaceValue == null) {\n return null;\n }\n if (typeof interfaceValue === 'string') {\n try {\n const parsed = JSON.parse(interfaceValue) as {\n type?: unknown;\n name?: unknown;\n options?: Record<string, unknown>;\n };\n return parsed && typeof parsed === 'object' ? parsed : null;\n } catch {\n return { type: interfaceValue };\n }\n }\n if (typeof interfaceValue === 'object') {\n return interfaceValue as { type?: unknown; name?: unknown; options?: Record<string, unknown> };\n }\n return null;\n}\n\nfunction parseInterfaceType(interfaceValue: unknown): string {\n const iface = asInterfaceObject(interfaceValue);\n if (!iface) {\n return '';\n }\n return String(iface.type ?? iface.name ?? '');\n}\n\nfunction lookupFromInterface(interfaceValue: unknown): HomogeneousGridLookup | undefined {\n const iface = asInterfaceObject(interfaceValue);\n if (!iface) {\n return undefined;\n }\n const type = String(iface.type ?? iface.name ?? '').toLowerCase();\n if (!type.includes('lookup')) {\n return undefined;\n }\n const options = iface.options ?? {};\n const entity = typeof options['entity'] === 'string' ? options['entity'].trim() : '';\n if (!entity) {\n return undefined;\n }\n const valueField =\n typeof options['valueField'] === 'string' && options['valueField'].trim()\n ? options['valueField'].trim()\n : 'id';\n const textField =\n typeof options['textField'] === 'string' && options['textField'].trim()\n ? options['textField'].trim()\n : 'displayName';\n return { entity, valueField, textField };\n}\n\nfunction formatFromInterface(interfaceValue: unknown): HomogeneousGridColumn['format'] {\n if (lookupFromInterface(interfaceValue)) {\n return 'lookup';\n }\n const type = parseInterfaceType(interfaceValue).toLowerCase();\n if (type.includes('date-time') || type.includes('datetime')) {\n return 'datetime';\n }\n if (type.includes('date')) {\n return 'date';\n }\n if (type.includes('number') || type.includes('numeric') || type.includes('integer')) {\n return 'number';\n }\n return 'string';\n}\n\nexport function flattenMetaDataColumns(\n list: AXMMetaDataBuilderValue | null | undefined,\n resolveTitle: (title: unknown) => string,\n): HomogeneousGridColumn[] {\n const columns: HomogeneousGridColumn[] = [];\n const seen = new Set<string>();\n for (const group of list?.groups ?? []) {\n for (const field of group.fields ?? []) {\n const name = String(field?.name ?? '').trim();\n if (!name || seen.has(name)) {\n continue;\n }\n seen.add(name);\n columns.push({\n name,\n title: resolveTitle(field.title) || name,\n kind: 'metadata',\n format: formatFromInterface(field.interface),\n lookup: lookupFromInterface(field.interface),\n });\n }\n }\n return columns;\n}\n\nexport function readNodeMetaDataValue(node: AXMDocumentExplorerNode, fieldName: string): unknown {\n return readMetaDataFormValue(node.metaDataForm, fieldName);\n}\n\nexport function collectLookupKeys(value: unknown, valueField = 'id'): string[] {\n if (value == null || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.flatMap((item) => collectLookupKeys(item, valueField));\n }\n if (typeof value === 'object') {\n const row = value as Record<string, unknown>;\n const id = row[valueField] ?? row['id'];\n return typeof id === 'string' && id.trim() ? [id.trim()] : [];\n }\n if (typeof value === 'string' && value.trim()) {\n return [value.trim()];\n }\n return [];\n}\n\nfunction readMetaDataFormValue(form: unknown, fieldName: string): unknown {\n if (form == null || typeof form !== 'object' || Array.isArray(form)) {\n return undefined;\n }\n const row = form as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(row, fieldName)) {\n return row[fieldName];\n }\n for (const nested of Object.values(row)) {\n const found = readMetaDataFormValue(nested, fieldName);\n if (found !== undefined) {\n return found;\n }\n }\n return undefined;\n}\n\n//#endregion\n","import { AXMenuItem } from '@acorex/components/menu';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXFileService } from '@acorex/core/file';\nimport {\n AXPFileType,\n AXPFileTypeProviderService,\n AXPLockService,\n AXPSettingsService,\n extractFileExtension,\n hasFileTypeOpenHandler,\n isFileNameShownInViewer,\n isFileViewerPreviewExtension,\n resolveExplorerFileDisplayName,\n resolveFileTypeDisplay,\n} from '@acorex-platform/framework-client/common';\nimport {\n fileNameMatchesAccept,\n isUnrestrictedFileAccept,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPActionMenuItem, AXPPlatformScope } from '@acorex-platform/framework-shared/core';\n\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport {\n AXPDocumentManagementSettings,\n resolveDocumentFileDoubleClickAction,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPCommonCommandKeys, isMaintainVersioningPermissionGranted } from '@acorex-platform/module-common-client/contracts';\nimport {\n AXMDocumentManagementCommandKeys,\n AXPContentDocumentsPermissionKeys,\n} from '@acorex-platform/module-document-management-client/contracts';\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport { explorerNodeAllowsDocumentDistribution } from '../shared/document-distribution.util';\nimport { explorerNodeAllowsDocumentReview } from '../shared/document-review.util';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMDocumentSelectionMode,\n AXPDocumentExplorerViewMode,\n} from '../shared/document-manager.types';\nimport { resolveFolderColor } from '../shared/folder-color.util';\nimport { resolveDocumentVersionNumber } from '../shared/document-version.util';\nimport {\n resolveHomogeneousExplorerGrid,\n type HomogeneousGridMatch,\n} from '../shared/homogeneous-folder-grid.util';\n\nfunction withMenuItemCheck(item: AXMenuItem, isSelected: boolean): AXMenuItem {\n return isSelected ? { ...item, suffix: { text: '✓' } } : item;\n}\n\nfunction nodeModifiedTime(node: AXMDocumentExplorerNode): number {\n const raw = node.modifiedAt;\n if (raw == null) {\n return 0;\n }\n const time = raw instanceof Date ? raw.getTime() : new Date(raw).getTime();\n return Number.isNaN(time) ? 0 : time;\n}\n\n/**\n * User/tenant drive roots are system (cannot be deleted or moved) but users may create\n * children under those roots. Other system folders (Users, Entity, type folders) stay closed.\n * Typed children of Company Document type-containers cannot contain further folders.\n */\nfunction resolveExplorerParent(\n folder: AXMDocumentExplorerNode | null | undefined,\n path: AXMDocumentExplorerNode[],\n): AXMDocumentExplorerNode | null {\n if (!folder) {\n return null;\n }\n const index = path.findIndex((node) => node.id === folder.id);\n return index > 0 ? path[index - 1] : null;\n}\n\nfunction canCreateFolderUnder(\n folder: AXMDocumentExplorerNode | null | undefined,\n scopeRootId: string | null,\n parentFolder?: AXMDocumentExplorerNode | null,\n): boolean {\n if (!folder) {\n return false;\n }\n if (folder.allowChildFolders === false) {\n return false;\n }\n if ((parentFolder?.childFolderDocumentTypes?.length ?? 0) > 0) {\n return false;\n }\n if (!folder.isSystem) {\n return true;\n }\n return Boolean(scopeRootId && folder.id === scopeRootId);\n}\n\n/** Explorer toolbar layout prefs are per-user UI state (IndexedDB user scope). */\nconst DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE = AXPPlatformScope.User;\n\nexport const AXPDocumentExplorerViewModel = signalStore(\n { providedIn: 'root' },\n\n withState(() => ({\n // View State\n viewMode: 'large-icons' as AXPDocumentExplorerViewMode,\n preferredViewMode: 'large-icons' as AXPDocumentExplorerViewMode,\n viewModeLocked: false,\n homogeneousGrid: null as HomogeneousGridMatch | null,\n isLoading: false,\n scope: AXPPlatformScope.User,\n\n // Navigation State\n currentPath: [] as AXMDocumentExplorerNode[],\n currentNode: null as AXMDocumentExplorerNode | null,\n loadingFolderId: null as string | null,\n navigatingFolderId: null as string | null,\n backHistory: [] as { folderId: string; path: AXMDocumentExplorerNode[] }[],\n /** Root folder id resolved by the backend for the current scope (out-of-scope detection). */\n scopeRootId: null as string | null,\n\n // Selection State\n selectionMode: 'none' as AXMDocumentSelectionMode,\n selectedNodes: [] as AXMDocumentExplorerNode[],\n\n // Browse State\n browseMode: 'file' as AXMDocumentExplorerBrowseMode,\n\n // Sort State\n sortField: 'name',\n sortDirection: 'asc',\n\n // Content State\n folders: [] as AXMDocumentExplorerNode[],\n files: [] as AXMDocumentExplorerNode[],\n itemsCount: 0,\n availableSpace: 0,\n\n // Drive State\n currentDrive: null as AXPPlatformScope | null,\n\n // File Type State\n fileTypes: [] as AXPFileType[],\n /** Current file type filter key: 'all' or a file type name from fileTypes. */\n fileTypeFilter: 'all' as string,\n /** Optional HTML accept string (same as device file input) to hide non-matching files. */\n acceptFilter: '' as string,\n // Detail Panel State\n detailPanel: false,\n /** When true, folders and files render in separate labeled sections. */\n groupByType: true,\n /** When set, only these document type names can be selected (create folder) or shown (add item menu). */\n allowedDocumentTypeNames: null as string[] | null,\n })),\n\n withComputed((store) => ({\n isRoot: computed(() => {\n const path = store.currentPath();\n return path.length === 1;\n }),\n\n isVirtual: computed(() => {\n const node = store.currentNode();\n return node?.storageType === 'virtual';\n }),\n\n currentFolder: computed(() => store.currentNode()),\n\n currentFolderContents: computed(() => ({\n folders: store.folders(),\n files: store.files(),\n })),\n\n /** Folders to display: always all folders when filtering by type. */\n filteredFolders: computed(() => store.folders()),\n\n /** Files to display: all files when filter is 'all', otherwise only files whose extension matches the selected type. */\n filteredFiles: computed(() => {\n const filter = store.fileTypeFilter();\n const accept = store.acceptFilter();\n let files = store.files();\n if (filter !== 'all') {\n const type = store.fileTypes().find((t) => t.name === filter);\n if (type?.extensions?.length) {\n const extSet = new Set(type.extensions.map((e) => e.name.toLowerCase()));\n files = files.filter((f) => {\n const displayName = resolveExplorerFileDisplayName(f.name, f.fileId);\n const ext = displayName.split('.').pop()?.toLowerCase() ?? '';\n return extSet.has(ext);\n });\n }\n }\n if (!isUnrestrictedFileAccept(accept)) {\n files = files.filter((f) =>\n fileNameMatchesAccept(resolveExplorerFileDisplayName(f.name, f.fileId), accept),\n );\n }\n return files;\n }),\n\n isLargeTilesView: computed(() => store.viewMode() === 'large-tiles'),\n isSmallTilesView: computed(() => store.viewMode() === 'small-tiles'),\n isListView: computed(() => store.viewMode() === 'list'),\n isDetailsView: computed(() => store.viewMode() === 'details'),\n isLargeIconsView: computed(() => store.viewMode() === 'large-icons'),\n isSmallIconsView: computed(() => store.viewMode() === 'small-icons'),\n canUseHomogeneousGrid: computed(() => store.homogeneousGrid() != null),\n\n isBackAvailable: computed(() => store.backHistory().length > 0),\n isUpAvailable: computed(() => {\n const node = store.currentNode();\n return node?.parentId != null;\n }),\n\n selectedCount: computed(() => store.selectedNodes().length),\n hasSelectedItems: computed(() => store.selectedNodes().length > 0),\n hasMultipleSelectedItems: computed(() => store.selectedNodes().length > 1),\n showSelectionDeleteActions: computed(\n () => store.selectedNodes().length > 1 || (store.viewMode() === 'details' && store.selectedNodes().length > 0),\n ),\n isMultiSelect: computed(() => store.selectionMode() === 'multiple'),\n selectedNode: computed<AXMDocumentExplorerNode | null>(() => store.selectedNodes()[0] ?? null),\n\n isDetailPanelOpen: computed(() => store.detailPanel()),\n // groupByType: computed(() => store.groupByType()),\n })),\n\n withMethods(\n (\n store,\n fileTypeService = inject(AXPFileTypeProviderService),\n fileService = inject(AXFileService),\n driveService = inject(AXMDocumentManagerService),\n commandService = inject(AXPCommandService),\n entityService = inject(AXPEntityService),\n settingsService = inject(AXPSettingsService),\n translateService = inject(AXTranslationService),\n lockService = inject(AXPLockService),\n sessionService = inject(AXPSessionService),\n ) => {\n const documentTypeData = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentType.name)\n .data<string, { id: string; metaDataList?: unknown }>();\n /** In-flight folder load; duplicate requests for the same folder reuse the same promise. */\n let inflightLoad: { folderId: string; promise: Promise<void> } | null = null;\n\n /** Image, PDF, video, and audio can render in the file viewer. Other types cannot. */\n const canPreviewFileInViewer = (node: AXMDocumentExplorerNode): boolean => {\n const displayName = resolveExplorerFileDisplayName(node.name, node.fileId);\n return isFileViewerPreviewExtension(extractFileExtension(displayName));\n };\n\n const applyExplorerNode = (node: {\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n scopeRootId?: string;\n }) => {\n const sortField = store.sortField();\n const sortDirection = store.sortDirection();\n const directionMultiplier = sortDirection === 'asc' ? 1 : -1;\n\n switch (sortField) {\n case 'name':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * a.name.localeCompare(b.name),\n );\n break;\n case 'modified':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * (nodeModifiedTime(a) - nodeModifiedTime(b)),\n );\n break;\n case 'size':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * ((a.size ?? 0) - (b.size ?? 0)),\n );\n break;\n default:\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * a.name.localeCompare(b.name),\n );\n break;\n }\n\n const folders = node.result.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'folder') || [];\n const files =\n node.result.children?.filter(\n (item: AXMDocumentExplorerNode) => store.browseMode() == 'file' && item.type === 'file',\n ) || [];\n\n patchState(store, {\n currentNode: node.result,\n currentPath: node.path,\n folders,\n files,\n itemsCount: node.result.children?.length || 0,\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null,\n scopeRootId: node.scopeRootId ?? store.scopeRootId(),\n ...resolveHomogeneousGridViewState(folders, files),\n });\n };\n\n const resolveHomogeneousGridViewState = (\n folders: AXMDocumentExplorerNode[],\n files: AXMDocumentExplorerNode[],\n ): { homogeneousGrid: HomogeneousGridMatch | null; viewMode: AXPDocumentExplorerViewMode } => {\n const homogeneousGrid = resolveHomogeneousExplorerGrid(folders, files);\n const viewMode = store.viewModeLocked() ? store.viewMode() : store.preferredViewMode();\n return { homogeneousGrid, viewMode };\n };\n\n return {\n setAllowedDocumentTypeNames(names: string[] | null): void {\n patchState(store, { allowedDocumentTypeNames: names });\n },\n\n async initialize(options?: {\n scope?: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n filter?: any;\n }) {\n // Apply route scope synchronously before any await so nested UI (e.g. query-filters effect) cannot\n // navigate while the store still holds the default User scope.\n const scope = options?.scope ?? AXPPlatformScope.User;\n const browseMode = options?.browseMode ?? 'file';\n const scopeChanged = store.scope() !== scope;\n // When switching My Drive ↔ Tenant Documents the same drive component/VM is reused;\n // clear folder state so the previous scope's contents are not shown until reload finishes.\n patchState(store, {\n scope,\n browseMode,\n ...(scopeChanged\n ? {\n currentNode: null,\n currentPath: [],\n folders: [],\n files: [],\n itemsCount: 0,\n backHistory: [],\n navigatingFolderId: null,\n loadingFolderId: null,\n scopeRootId: null,\n selectedNodes: [],\n isLoading: true,\n }\n : {}),\n });\n\n const fileTypes = await fileTypeService.items();\n patchState(store, { fileTypes });\n const layoutSettings = settingsService.scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE);\n const viewMode = await layoutSettings.get(AXPDocumentManagementSettings.ViewMode);\n const sortField = await layoutSettings.get(AXPDocumentManagementSettings.SortField);\n const sortDirection = await layoutSettings.get(AXPDocumentManagementSettings.SortDirection);\n const groupByType = await layoutSettings.get(AXPDocumentManagementSettings.GroupByType);\n const detailPanel = await layoutSettings.get(AXPDocumentManagementSettings.DetailPanelOpen);\n const savedViewMode = viewMode || 'large-icons';\n patchState(store, {\n viewMode: savedViewMode,\n preferredViewMode: savedViewMode,\n sortField: sortField ?? 'name',\n sortDirection: sortDirection ?? 'asc',\n groupByType: groupByType ?? true,\n detailPanel: detailPanel ?? false,\n });\n },\n\n async applyLoadedFolder(node: {\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n scopeRootId?: string;\n }) {\n patchState(store, { loadingFolderId: node.result.id, isLoading: true });\n applyExplorerNode(node);\n patchState(store, { availableSpace: await driveService.getAvailableSpace() });\n this.deselectAll();\n },\n\n _load: (folderId: string): Promise<void> => {\n // Same folder already loading (e.g. router paramMap + navigate effect firing together):\n // reuse the in-flight request instead of issuing a duplicate one.\n if (inflightLoad?.folderId === folderId) {\n return inflightLoad.promise;\n }\n\n patchState(store, { loadingFolderId: folderId, isLoading: true });\n\n const promise = (async () => {\n try {\n const node = await driveService.getFolder(store.scope(), folderId);\n applyExplorerNode(node);\n patchState(store, { availableSpace: await driveService.getAvailableSpace() });\n } catch (error) {\n patchState(store, {\n loadingFolderId: null,\n isLoading: false,\n });\n throw error;\n } finally {\n inflightLoad = null;\n }\n })();\n\n inflightLoad = { folderId, promise };\n return promise;\n },\n\n navigateToFolder(folderId: string) {\n const currentNode = store.currentNode();\n if (currentNode) {\n patchState(store, {\n backHistory: [...store.backHistory(), { folderId: currentNode.id, path: store.currentPath() }],\n });\n }\n patchState(store, { navigatingFolderId: folderId });\n },\n\n async loadFolderContents(folderId: string) {\n await this._load(folderId);\n this.deselectAll();\n },\n\n async virtualFolder(\n files: AXMDocumentExplorerNode[] = [],\n options?: {\n name?: string;\n parentId?: string;\n },\n ) {\n const id = 'virtual';\n patchState(store, {\n loadingFolderId: id,\n isLoading: true,\n });\n\n const node: AXMDocumentExplorerNode = {\n id: id,\n name: options?.name || 'virtual',\n type: 'folder',\n children: files,\n parentId: options?.parentId || null,\n size: 0,\n // TODO\n documentTypes: [],\n storageType: 'virtual',\n };\n const folders = files.filter((item) => item.type === 'folder');\n const virtualFiles = files.filter((item) => item.type === 'file');\n patchState(store, {\n currentNode: node,\n currentPath: [node],\n folders,\n files: virtualFiles,\n itemsCount: files.length,\n availableSpace: await driveService.getAvailableSpace(),\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null,\n ...resolveHomogeneousGridViewState(folders, virtualFiles),\n });\n },\n\n setViewModeLocked(locked: boolean) {\n patchState(store, { viewModeLocked: locked });\n },\n\n setViewMode(mode: AXPDocumentExplorerViewMode | string) {\n const nextMode = mode as AXPDocumentExplorerViewMode;\n const locked = store.viewModeLocked();\n patchState(store, {\n viewMode: nextMode,\n ...(!locked ? { preferredViewMode: nextMode } : {}),\n });\n if (locked) {\n return;\n }\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.ViewMode, nextMode);\n },\n isViewMode(mode: AXPDocumentExplorerViewMode | string) {\n return store.viewMode() === mode;\n },\n\n setSortField(field: string) {\n patchState(store, { sortField: field });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.SortField, field);\n this.refresh();\n },\n\n setSortDirection(direction: string) {\n patchState(store, { sortDirection: direction });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.SortDirection, direction);\n this.refresh();\n },\n setSelectionMode(mode: AXMDocumentSelectionMode | string) {\n patchState(store, { selectionMode: mode as AXMDocumentSelectionMode });\n },\n\n setDrive(scope: AXPPlatformScope) {\n patchState(store, { currentDrive: scope });\n },\n\n /** Sets the file type filter: 'all' or a file type name. Only files with matching extension are shown. */\n setFileTypeFilter(key: string) {\n patchState(store, { fileTypeFilter: key ?? 'all' });\n },\n\n /** Restricts visible files to the same accept list as the device file picker. */\n setAcceptFilter(accept?: string) {\n patchState(store, { acceptFilter: (accept ?? '').trim() });\n },\n\n /** Toggles the explorer loading state (e.g. while a drive search/filter request is in flight). */\n setLoading(isLoading: boolean) {\n patchState(store, {\n isLoading,\n loadingFolderId: isLoading ? 'search' : null,\n });\n },\n\n isLoadingFolder(folderId: string): boolean {\n return store.loadingFolderId() === folderId;\n },\n\n getFileInfo(fileName: string): { icon: string; type: string } {\n const display = resolveFileTypeDisplay(fileName, store.fileTypes());\n return {\n icon: display.icon,\n type: display.typeName,\n };\n },\n\n getFileInfoForNode(node: AXMDocumentExplorerNode): { icon: string; type: string } {\n const displayName = resolveExplorerFileDisplayName(node.name, node.fileId);\n return this.getFileInfo(displayName);\n },\n\n /**\n * Returns display info for any node (file or folder), including shortcut indicator.\n * Use in views to show the correct icon and a Windows-style shortcut arrow when applicable.\n */\n getNodeDisplayInfo(node: AXMDocumentExplorerNode): { icon: string; type: string; isShortcut: boolean } {\n const isShortcut = node.storageType === 'shortcut' || node.isShortcut === true;\n if (node.type === 'file') {\n const info = this.getFileInfoForNode(node);\n return { icon: info.icon, type: info.type, isShortcut };\n }\n return {\n icon: 'fa-light fa-folder',\n type: 'Folder',\n isShortcut,\n };\n },\n\n /** Folder icon accent color from the item (falls back to standard yellow). */\n getFolderColor(node: AXMDocumentExplorerNode): string {\n return resolveFolderColor(node.color);\n },\n\n getNodeInfo(node: AXMDocumentExplorerNode): {\n name: string;\n icon: string;\n type: string;\n sections: {\n title: string;\n details: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[];\n }[];\n } {\n const detailI18n = {\n sections: { details: '@document-management:explorer.detail-panel.sections.details' },\n metadata: '@document-management:terms.common.meta-data',\n description: '@document-management:explorer.detail-panel.fields.description',\n size: '@document-management:terms.common.size',\n expireDate: '@document-management:terms.document.expire-date',\n createdAt: '@document-management:terms.timestamps.created-at',\n modifiedAt: '@document-management:terms.timestamps.modified-at',\n version: '@document-management:terms.common.version',\n items: '@document-management:explorer.grid.columns.items',\n shortcut: '@document-management:explorer.detail-panel.fields.shortcut',\n linksToDocument: '@document-management:explorer.detail-panel.fields.links-to-document',\n linksToFolder: '@document-management:explorer.detail-panel.fields.links-to-folder',\n folderType: '@document-management:explorer.detail-panel.folder-type',\n } as const;\n\n // If no node, return a default object\n if (!node) {\n return {\n name: '---',\n icon: 'fa-light fa-folder',\n type: detailI18n.folderType,\n sections: [\n {\n title: detailI18n.sections.details,\n details: [],\n },\n ],\n };\n }\n\n // If the node is a file, return the file info\n if (node.type === 'file') {\n const displayName = resolveExplorerFileDisplayName(node.name, node.fileId);\n const display = resolveFileTypeDisplay(displayName, store.fileTypes());\n const versionNumber = resolveDocumentVersionNumber(node);\n const details: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[] = [\n {\n title: detailI18n.description,\n content: node.description,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: detailI18n.size,\n content: node.size || 0,\n format: 'filesize',\n icon: 'fa-solid fa-file-lines',\n },\n ...(node.expirationDate\n ? [\n {\n title: detailI18n.expireDate,\n content: node.expirationDate,\n format: 'date' as const,\n icon: 'fa-solid fa-calendar-days',\n },\n ]\n : []),\n {\n title: detailI18n.createdAt,\n content: node.createdAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n {\n title: detailI18n.modifiedAt,\n content: node.modifiedAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n ...(versionNumber != null\n ? [\n {\n title: detailI18n.version,\n content: versionNumber,\n format: 'number' as const,\n icon: 'fa-solid fa-code-branch',\n },\n ]\n : []),\n ];\n if (node.storageType === 'shortcut' || node.isShortcut) {\n details.unshift({\n title: detailI18n.shortcut,\n content: node.targetDocumentId ? detailI18n.linksToDocument : detailI18n.linksToFolder,\n icon: 'fa-light fa-up-right-from-square',\n });\n }\n return {\n name: node.name,\n icon: display.icon,\n type: display.typeName,\n sections:\n node.metaDataForm && typeof node.metaDataForm === 'object'\n ? [\n {\n title: detailI18n.sections.details,\n details,\n },\n {\n title: detailI18n.metadata,\n details: [],\n },\n ]\n : [\n {\n title: detailI18n.sections.details,\n details,\n },\n ],\n };\n }\n // If the node is a folder, return the folder info\n else {\n const folderDetails: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[] = [\n {\n title: detailI18n.description,\n content: node.description,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: detailI18n.items,\n content: node.children?.length ?? 0,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: detailI18n.size,\n content: node.size || 0,\n format: 'filesize',\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: detailI18n.createdAt,\n content: node.createdAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n {\n title: detailI18n.modifiedAt,\n content: node.modifiedAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n ];\n if (node.storageType === 'shortcut' || node.isShortcut) {\n folderDetails.unshift({\n title: detailI18n.shortcut,\n content: detailI18n.linksToFolder,\n icon: 'fa-light fa-up-right-from-square',\n });\n }\n return {\n name: node.name,\n icon: 'fa-light fa-folder',\n type: detailI18n.folderType,\n sections:\n node.metaDataForm && typeof node.metaDataForm === 'object'\n ? [\n {\n title: detailI18n.sections.details,\n details: folderDetails,\n },\n {\n title: detailI18n.metadata,\n details: [],\n },\n ]\n : [\n {\n title: detailI18n.sections.details,\n details: folderDetails,\n },\n ],\n };\n }\n },\n\n sortItems(items: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n const field = store.sortField();\n const direction = store.sortDirection();\n\n return [...items].sort((a, b) => {\n let comparison = 0;\n\n switch (field) {\n case 'name':\n comparison = a.name.localeCompare(b.name);\n break;\n case 'modified':\n comparison = nodeModifiedTime(a) - nodeModifiedTime(b);\n break;\n case 'size':\n comparison = (a.size || 0) - (b.size || 0);\n break;\n }\n\n return direction === 'asc' ? comparison : -comparison;\n });\n },\n\n async refresh() {\n if (!store.isVirtual()) {\n const currentFolder = store.currentNode();\n if (currentFolder) {\n await this._load(currentFolder.id);\n }\n } else {\n patchState(store, { loadingFolderId: 'fake' });\n patchState(store, { loadingFolderId: null });\n }\n },\n\n /**\n * Requests navigation to the parent folder. The host component reacts to\n * `navigatingFolderId` (router navigation or direct load) — no direct load here,\n * otherwise the folder would be fetched twice.\n */\n navigateToUp() {\n const currentNode = store.currentNode();\n const parentId = currentNode?.parentId;\n if (parentId && currentNode) {\n patchState(store, {\n backHistory: [...store.backHistory(), { folderId: currentNode.id, path: store.currentPath() }],\n navigatingFolderId: parentId,\n });\n }\n },\n\n navigateBack() {\n const history = store.backHistory();\n if (history.length === 0) {\n return;\n }\n const lastEntry = history[history.length - 1];\n patchState(store, {\n backHistory: history.slice(0, history.length - 1),\n navigatingFolderId: lastEntry.folderId,\n });\n },\n\n async openFileViewerWithFolderId(): Promise<void> {\n const folderFiles = this.getCurrentFolderFiles();\n if (folderFiles.length > 0) {\n await driveService.showFileViewerPopup(folderFiles[0], { folderFiles });\n }\n },\n\n /**\n * File nodes in the current folder that are eligible for the file viewer.\n * Excludes folders and catalog types with `showInViewer: false` (default is shown).\n */\n getCurrentFolderFiles(): AXMDocumentExplorerNode[] {\n const files =\n store.currentFolder()?.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'file') ??\n store.files() ??\n [];\n const catalog = store.fileTypes();\n return files.filter((item) => {\n const displayName = resolveExplorerFileDisplayName(item.name, item.fileId);\n return isFileNameShownInViewer(displayName, catalog);\n });\n },\n\n //TODO: Delete only one node at a time\n async deleteNodes(nodes: AXMDocumentExplorerNode[] = store.selectedNodes()) {\n const deletable = nodes.filter((node) => !node.isSystem);\n if (deletable.length === 0) {\n return;\n }\n if (store.isVirtual()) {\n patchState(store, {\n files: store.currentFolderContents().files.filter((file) => !deletable.some((node) => node.name === file.name)),\n });\n this.deselectAll();\n } else {\n const result = await driveService.showDeleteNodesDialog(deletable);\n if (result) {\n this.deselectAll();\n await this.refresh();\n }\n }\n },\n\n toggleSelect(node: AXMDocumentExplorerNode) {\n if (\n store.browseMode() === 'file' &&\n store.selectionMode() === 'multiple' &&\n node.type === 'folder'\n ) {\n this.navigateToFolder(node.id);\n return;\n }\n\n if (store.selectionMode() === 'multiple') {\n patchState(store, {\n selectedNodes: store.selectedNodes().includes(node)\n ? store.selectedNodes().filter((n) => n.id !== node.id)\n : [...store.selectedNodes(), node],\n });\n } else {\n patchState(store, { selectedNodes: [node] });\n }\n },\n\n /**\n * Selects the right-clicked item before opening the context menu.\n * Keeps the current selection when the item is already selected (multi-select).\n */\n selectOnContextMenu(node: AXMDocumentExplorerNode) {\n if (!this.isItemSelected(node)) {\n patchState(store, { selectedNodes: [node] });\n }\n },\n\n isItemSelected(node: AXMDocumentExplorerNode): boolean {\n return store.selectedNodes().some((selectedNode) => selectedNode.id === node.id);\n },\n\n selectAll() {\n patchState(store, {\n selectedNodes: [...store.filteredFolders(), ...store.filteredFiles()],\n });\n },\n\n setSelectedNodes(nodes: AXMDocumentExplorerNode[]) {\n patchState(store, { selectedNodes: [...nodes] });\n },\n\n deselectAll() {\n patchState(store, { selectedNodes: [] });\n },\n\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.DetailPanelOpen, true);\n },\n\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.DetailPanelOpen, false);\n },\n\n toggleDetailPanel() {\n const next = !store.detailPanel();\n patchState(store, { detailPanel: next });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.DetailPanelOpen, next);\n },\n\n toggleGroupByType() {\n const next = !store.groupByType();\n patchState(store, { groupByType: next });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.GroupByType, next);\n },\n\n setGroupByType(enabled: boolean) {\n patchState(store, { groupByType: enabled });\n void settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .set(AXPDocumentManagementSettings.GroupByType, enabled);\n },\n\n //#region Menu Items\n\n async getFolderAddMenuItems({ canAddFolder = true }: { canAddFolder?: boolean } = {}): Promise<\n AXPActionMenuItem[]\n > {\n // Upload types come only from the current folder's assigned documentTypes.\n // Do not fall back to plugin allowedDocumentTypeNames — the entity root has no types;\n // type-specific subfolders carry their own.\n const current = store.currentFolder();\n const folderTypes = current?.documentTypes ?? [];\n const isTypeContainer = (current?.childFolderDocumentTypes?.length ?? 0) > 0;\n const allowedNames = store.allowedDocumentTypeNames();\n const typesToShow = isTypeContainer\n ? []\n : allowedNames != null\n ? allowedNames.length > 0\n ? folderTypes.filter((t) => t?.name && allowedNames.includes(t.name))\n : []\n : folderTypes;\n\n const allowCreateFolder =\n canAddFolder &&\n canCreateFolderUnder(\n current,\n store.scopeRootId(),\n resolveExplorerParent(current, store.currentPath()),\n ) &&\n (await driveService.folderAllowsCreateFolder(current));\n\n return [\n ...(allowCreateFolder\n ? [\n {\n title: await translateService.translateAsync('@document-management:actions.create-folder'),\n icon: 'fa-light fa-folder-plus',\n break: true,\n command: {\n name: 'new-folder',\n options: {\n folderId: store.currentFolder()?.id,\n },\n },\n },\n ]\n : []),\n ...typesToShow.map((type) => ({\n title: translateService.resolve(type.title),\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n command: {\n name: `upload.${type.name}`,\n options: {\n folderId: store.currentFolder()?.id,\n documentType: type,\n },\n },\n })),\n ] as AXPActionMenuItem[];\n },\n\n async getFolderActionMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n name: 'refresh',\n title: await translateService.translateAsync('@document-management:actions.refresh'),\n icon: 'fa-light fa-rotate-right',\n // break: true,\n },\n ];\n },\n\n async getExplorerLayoutMenuItems(): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n\n const sortItems: AXMenuItem[] = [\n withMenuItemCheck(\n {\n name: 'sort.name',\n text: await trans('actions.sort-by-name'),\n icon: 'fa-light fa-font',\n },\n store.sortField() === 'name',\n ),\n withMenuItemCheck(\n {\n name: 'sort.modified',\n text: await trans('actions.sort-by-date'),\n icon: 'fa-light fa-calendar',\n },\n store.sortField() === 'modified',\n ),\n withMenuItemCheck(\n {\n name: 'sort.size',\n text: await trans('actions.sort-by-size'),\n icon: 'fa-light fa-weight-hanging',\n break: true,\n },\n store.sortField() === 'size',\n ),\n withMenuItemCheck(\n {\n name: 'sort.asc',\n text: await trans('actions.sort-ascending'),\n icon: 'fa-light fa-arrow-up-wide-short',\n },\n store.sortDirection() === 'asc',\n ),\n withMenuItemCheck(\n {\n name: 'sort.desc',\n text: await trans('actions.sort-descending'),\n icon: 'fa-light fa-arrow-down-wide-short',\n },\n store.sortDirection() === 'desc',\n ),\n ];\n\n const viewModeItems: AXMenuItem[] = [\n withMenuItemCheck(\n {\n name: 'view.large-icons',\n text: await trans('view-modes.large-icons'),\n icon: 'fa-light fa-grid',\n },\n store.viewMode() === 'large-icons',\n ),\n withMenuItemCheck(\n {\n name: 'view.small-icons',\n text: await trans('view-modes.small-icons'),\n icon: 'fa-light fa-grid',\n break: true,\n },\n store.viewMode() === 'small-icons',\n ),\n withMenuItemCheck(\n {\n name: 'view.large-tiles',\n text: await trans('view-modes.large-tiles'),\n icon: 'fa-light fa-grid-2',\n },\n store.viewMode() === 'large-tiles',\n ),\n withMenuItemCheck(\n {\n name: 'view.small-tiles',\n text: await trans('view-modes.small-tiles'),\n icon: 'fa-light fa-grid-2',\n break: true,\n },\n store.viewMode() === 'small-tiles',\n ),\n withMenuItemCheck(\n {\n name: 'view.list',\n text: await trans('view-modes.list'),\n icon: 'fa-light fa-list',\n },\n store.viewMode() === 'list',\n ),\n withMenuItemCheck(\n {\n name: 'view.details',\n text: await trans('view-modes.details'),\n icon: 'fa-light fa-table',\n break: true,\n },\n store.viewMode() === 'details',\n ),\n ];\n\n const groupByItems: AXMenuItem[] = [\n withMenuItemCheck(\n {\n name: 'group-by.type',\n text: await trans('menus.layout.group-by-type'),\n icon: 'fa-light fa-layer-group',\n },\n store.groupByType(),\n ),\n {\n name: 'group-by.date',\n text: await trans('menus.layout.group-by-date'),\n icon: 'fa-light fa-calendar',\n disabled: true,\n },\n ];\n\n return [\n {\n name: 'sort-menu',\n text: await trans('menus.layout.sort'),\n icon: 'fa-light fa-arrow-down-wide-short',\n items: sortItems,\n },\n {\n name: 'view-menu',\n text: await trans('menus.layout.views'),\n icon: 'fa-light fa-grid-2',\n items: viewModeItems,\n },\n {\n name: 'group-by-menu',\n text: await trans('menus.layout.group-by'),\n icon: 'fa-light fa-layer-group',\n items: groupByItems,\n break: true,\n },\n withMenuItemCheck(\n {\n name: 'toggle-detail-panel',\n text: await trans('menus.layout.show-details-panel'),\n icon: 'fa-light fa-square-info',\n },\n store.detailPanel(),\n ),\n ...(await this.getOpenFileViewerLayoutMenuItem()),\n ];\n },\n\n async getOpenFileViewerLayoutMenuItem(): Promise<AXMenuItem[]> {\n const folderFiles = this.getCurrentFolderFiles();\n if (folderFiles.length === 0) {\n return [];\n }\n\n return [\n {\n name: 'open-file-viewer',\n text: await translateService.translateAsync('@document-management:actions.open-file-viewer'),\n icon: 'fa-light fa-file-lines',\n data: { folderId: store.currentFolder()?.id },\n },\n ];\n },\n\n async getRootContextMenuItems({ canAddFolder = true }: { canAddFolder?: boolean } = {}): Promise<AXMenuItem[]> {\n const items: AXMenuItem[] = [];\n\n const addItem = await this.buildAddItemContextMenuEntry({ canAddFolder });\n if (addItem) {\n items.push(addItem);\n }\n\n const layoutItems = await this.getExplorerLayoutMenuItems();\n const actionItems = (await this.getFolderActionMenuItems()).map((item) => ({\n name: item.name,\n text: item.title,\n icon: item.icon,\n })) as AXMenuItem[];\n\n items.push(...layoutItems, ...actionItems);\n if (items.length > 0) {\n items[items.length - 1].break = false;\n }\n return items;\n },\n\n async buildAddItemContextMenuEntry({\n canAddFolder = true,\n }: { canAddFolder?: boolean } = {}): Promise<AXMenuItem | null> {\n const addMenuItems = await this.getFolderAddMenuItems({ canAddFolder });\n if (addMenuItems.length === 0) {\n return null;\n }\n\n const childItems = addMenuItems.map((item, index, array) => ({\n name: item.command?.name ?? item.name,\n text: item.title,\n icon: item.icon,\n data: item.command?.options,\n break: index < array.length - 1 && item.command?.name === 'new-folder',\n })) as AXMenuItem[];\n\n return {\n name: 'add-item',\n text: await translateService.translateAsync('@document-management:actions.add-item'),\n icon: 'fa-light fa-plus',\n break: true,\n items: childItems,\n };\n },\n\n //#endregion\n\n //#region Context Menu Items\n\n async getContextMenuItems(): Promise<AXPActionMenuItem[]> {\n const addItemItems = await this.getFolderAddMenuItems();\n if (addItemItems.length === 0) {\n return [...(await this.getFolderActionMenuItems())];\n }\n\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: await translateService.translateAsync('@document-management:actions.add-item'),\n icon: 'fa-light fa-plus',\n items: addItemItems,\n },\n ...(await this.getFolderActionMenuItems()),\n ];\n },\n\n //#endregion\n\n //#region ---- Menu Items ----\n\n async buildFileVersioningContextMenu(\n node: AXMDocumentExplorerNode,\n trans: (key: string) => Promise<string>,\n ): Promise<AXMenuItem | null> {\n if (!node.versioningEnabled || node.type !== 'file' || node.storageType === 'shortcut') {\n return null;\n }\n\n const canMaintainVersioning = isMaintainVersioningPermissionGranted(\n (key) => sessionService.authorize(key),\n `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n );\n if (!canMaintainVersioning) {\n return null;\n }\n\n const draft = await driveService.findOpenVersionDraft(node.id);\n const versionItems: AXMenuItem[] = [];\n if (!draft) {\n versionItems.push({\n name: 'create-version-draft',\n text: await trans('menus.context.new-version'),\n icon: 'fa-light fa-code-branch',\n data: node,\n });\n } else {\n versionItems.push(\n {\n name: 'upload-new-version',\n text: await trans('menus.context.upload-new-version'),\n icon: 'fa-light fa-file-circle-plus',\n data: node,\n },\n {\n name: 'publish-version',\n text: await trans('menus.context.publish-version'),\n icon: 'fa-light fa-cloud-arrow-up',\n data: node,\n },\n {\n name: 'delete-version-draft',\n text: await trans('menus.context.delete-draft'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n );\n }\n\n const lastItem = versionItems[versionItems.length - 1];\n if (lastItem) {\n lastItem.break = true;\n }\n versionItems.push({\n name: 'show-version-history',\n text: await trans('menus.context.show-version-history'),\n icon: 'fa-light fa-clock-rotate-left',\n data: node,\n });\n\n return {\n name: 'manage-versions',\n text: await trans('menus.context.manage-versions'),\n icon: 'fa-light fa-code-branch',\n items: versionItems,\n break: true,\n };\n },\n\n /**\n * Returns menu items for file context menu\n */\n async getFileContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n const isLocked = async () => await this.isLocked(node);\n // const isNodeLocked = false;\n\n const displayName = resolveExplorerFileDisplayName(node.name, node.fileId);\n const catalog = await fileTypeService.items();\n const canOpen = await hasFileTypeOpenHandler({\n fileName: displayName,\n catalog,\n fileService,\n payload: node,\n });\n const canShowInViewer = isFileNameShownInViewer(displayName, catalog);\n\n const versionMenu = await this.buildFileVersioningContextMenu(node, trans);\n const distributionLoader = {\n byNames: (names: string[]) => driveService.getDocumentTypesByNames(names),\n byKey: (id: string) => documentTypeData.byKey(id),\n };\n const canDistribute =\n sessionService.authorize(AXPContentDocumentsPermissionKeys.DistributeDocuments) &&\n (await explorerNodeAllowsDocumentDistribution(node, distributionLoader));\n const canRequestReview =\n sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview) &&\n (await explorerNodeAllowsDocumentReview(node, {\n byNames: (names) => driveService.getDocumentTypesByNames(names),\n byKey: (id) => documentTypeData.byKey(id),\n }));\n\n const actionItems: AXMenuItem[] = [];\n if (canDistribute) {\n actionItems.push({\n name: 'distribute',\n text: await trans('menus.context.distribute'),\n icon: 'fa-light fa-paper-plane',\n data: node,\n });\n }\n if (canRequestReview) {\n actionItems.push({\n name: 'request-review',\n text: await trans('menus.context.request-review'),\n icon: 'fa-light fa-file-check',\n data: node,\n });\n }\n\n const menuItems: AXMenuItem[] = [\n ...(canOpen\n ? [\n {\n name: 'open-file',\n text: await trans('menus.context.open'),\n icon: this.getFileInfoForNode(node).icon,\n data: node,\n },\n ]\n : []),\n ...(canShowInViewer\n ? [\n {\n name: 'open-file-viewer',\n text: await trans('actions.open-file-viewer'),\n icon: 'fa-light fa-file-lines',\n data: node,\n },\n ]\n : []),\n ...(versionMenu ? [versionMenu] : []),\n ...(actionItems.length\n ? [\n {\n name: 'actions',\n text: await trans('menus.context.actions'),\n icon: 'fa-light fa-bolt',\n items: actionItems,\n },\n ]\n : []),\n {\n name: 'download',\n text: await trans('menus.context.download'),\n icon: 'fa-light fa-download',\n data: node,\n },\n ...(node.storageType !== 'shortcut' && !node.isShortcut\n ? [\n {\n name: 'create-shortcut',\n text: await trans('menus.context.create-shortcut'),\n icon: 'fa-light fa-up-right-from-square',\n data: node,\n },\n ]\n : []),\n {\n name: 'share',\n text: await trans('menus.context.share.share'),\n icon: 'fa-light fa-share-nodes',\n items: [\n {\n name: 'share',\n text: await trans('menus.context.share.share'),\n icon: 'fa-light fa-users',\n data: node,\n },\n {\n name: 'share-with-email',\n text: await trans('menus.context.share.email'),\n icon: 'fa-light fa-envelope',\n data: node,\n },\n {\n name: 'link',\n text: await trans('menus.context.share.link'),\n icon: 'fa-light fa-link',\n data: node,\n },\n ],\n break: true,\n },\n ];\n\n // Information submenu items\n const infoSubItems: AXMenuItem[] = [\n {\n name: 'properties',\n text: await trans('menus.context.properties'),\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n ];\n\n // Add rename only if not locked\n // if (!isNodeLocked) {\n // infoSubItems.unshift({\n // name: 'rename',\n // text: await trans('menu.rename'),\n // icon: 'fa-light fa-pencil',\n // data: node,\n // });\n // }\n\n //Add lock or unlock based on current state\n // if (isNodeLocked) {\n infoSubItems.push({\n name: 'unlock',\n text: await trans('menus.context.unlock'),\n icon: 'fa-light fa-unlock',\n data: node,\n });\n // } else {\n infoSubItems.push({\n name: 'lock',\n text: await trans('menus.context.lock'),\n icon: 'fa-light fa-lock',\n data: node,\n });\n // }\n\n menuItems.push({\n name: 'file-info',\n text: await trans('menus.context.information'),\n icon: 'fa-light fa-circle-info',\n items: infoSubItems,\n break: true,\n });\n\n // Add copy/move/delete operations only if not locked\n menuItems.push(\n {\n name: 'copy',\n text: await trans('menus.context.make-copy'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: await trans('menus.context.copy-to'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'move-to',\n text: await trans('menus.context.move-to'),\n icon: 'fa-light fa-arrow-right-arrow-left',\n break: true,\n data: node,\n },\n {\n name: 'delete',\n text: await trans('menus.context.delete'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n );\n\n return menuItems;\n },\n\n /**\n * Returns menu items for folder context menu\n */\n async getFolderContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n // const isNodeLocked = await this.isLocked(node);\n const isNodeLocked = false;\n\n const items: AXMenuItem[] = [\n {\n name: 'open-folder',\n text: await trans('menus.context.open'),\n icon: 'fa-light fa-folder-open',\n data: node,\n },\n ];\n\n const distributionLoader = {\n byNames: (names: string[]) => driveService.getDocumentTypesByNames(names),\n byKey: (id: string) => documentTypeData.byKey(id),\n };\n const canDistribute =\n sessionService.authorize(AXPContentDocumentsPermissionKeys.DistributeDocuments) &&\n (await explorerNodeAllowsDocumentDistribution(node, distributionLoader));\n const canRequestReview =\n sessionService.authorize(AXPContentDocumentsPermissionKeys.ManageDocumentReview) &&\n (await explorerNodeAllowsDocumentReview(node, {\n byNames: (names) => driveService.getDocumentTypesByNames(names),\n byKey: (id) => documentTypeData.byKey(id),\n }));\n const actionItems: AXMenuItem[] = [];\n if (canDistribute) {\n actionItems.push({\n name: 'distribute',\n text: await trans('menus.context.distribute'),\n icon: 'fa-light fa-paper-plane',\n data: node,\n });\n }\n if (canRequestReview) {\n actionItems.push({\n name: 'request-review',\n text: await trans('menus.context.request-review'),\n icon: 'fa-light fa-file-check',\n data: node,\n });\n }\n if (actionItems.length) {\n items.push({\n name: 'actions',\n text: await trans('menus.context.actions'),\n icon: 'fa-light fa-bolt',\n items: actionItems,\n });\n }\n\n // Add upload menu only if not locked\n if (!isNodeLocked && node?.documentTypes?.length && !node.childFolderDocumentTypes?.length) {\n items.push({\n text: await trans('menus.context.upload'),\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n items: node.documentTypes.map((type, index, array) => ({\n name: `upload.${type.name}`,\n text: translateService.resolve(type.title),\n icon: 'fa-light fa-file-arrow-up',\n break: index !== array.length - 1,\n data: {\n node,\n documentType: type,\n },\n })),\n });\n }\n\n // Information submenu items\n const infoSubItems: AXMenuItem[] = [\n {\n name: 'properties',\n text: await trans('menus.context.properties'),\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n ];\n\n // Add rename only if not locked\n if (!isNodeLocked) {\n infoSubItems.unshift({\n name: 'rename',\n text: await trans('menus.context.rename'),\n icon: 'fa-light fa-pencil',\n data: node,\n });\n }\n\n // Add lock or unlock based on current state\n if (isNodeLocked) {\n infoSubItems.push({\n name: 'unlock',\n text: await trans('menus.context.unlock'),\n icon: 'fa-light fa-unlock',\n data: node,\n });\n } else {\n infoSubItems.push({\n name: 'lock',\n text: await trans('menus.context.lock'),\n icon: 'fa-light fa-lock',\n data: node,\n });\n }\n\n items.push({\n name: 'folder-info',\n text: await trans('menus.context.information'),\n icon: 'fa-light fa-circle-info',\n items: infoSubItems,\n break: true,\n });\n\n // Add copy/move/delete operations only if not locked\n if (!isNodeLocked) {\n const isSystemFolder = Boolean(node.isSystem);\n items.push(\n {\n name: 'copy',\n text: await trans('menus.context.make-copy'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: await trans('menus.context.copy-to'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n ...(isSystemFolder\n ? []\n : [\n {\n name: 'move-to',\n text: await trans('menus.context.move-to'),\n icon: 'fa-light fa-arrow-right-arrow-left',\n data: node,\n },\n ]),\n ...(node.storageType !== 'shortcut' && !node.isShortcut\n ? [\n {\n name: 'create-shortcut',\n text: await trans('menus.context.create-shortcut'),\n icon: 'fa-light fa-up-right-from-square',\n data: node,\n },\n ]\n : []),\n ...(isSystemFolder\n ? []\n : [\n {\n name: 'delete',\n text: await trans('menus.context.delete'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n ]),\n );\n }\n\n return items;\n },\n\n /**\n * Returns context menu items based on node type\n */\n async getNodeContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n if (node.type === 'file') {\n return await this.getFileContextMenuItems(node);\n } else {\n return await this.getFolderContextMenuItems(node);\n }\n },\n\n //#endregion\n\n //#region ---- Menu Actions ----\n\n /**\n * Opens a drive file via DocumentManagement.Document:Open\n * (catalog open handler when available; otherwise download).\n */\n async openFile(node: AXMDocumentExplorerNode): Promise<void> {\n await commandService.execute('DocumentManagement.Document:Open', {\n data: node,\n documentId: node.id,\n });\n },\n\n /**\n * Handles all menu item clicks\n */\n async handleMenuItemClick(name: string, data: any): Promise<void> {\n const node = data as AXMDocumentExplorerNode;\n switch (name) {\n case 'open-folder':\n this.navigateToFolder(node.id);\n break;\n case 'open-file':\n await this.openFile(node);\n break;\n case 'open-file-viewer':\n if (data?.folderId != null) {\n await this.openFileViewerWithFolderId();\n } else {\n await this.openFileViewer(node);\n }\n break;\n case 'download':\n this.downloadFile(node);\n break;\n case 'new-folder':\n await this.createFolder(node);\n break;\n case 'paste':\n //TODO: Handle paste operation\n break;\n case 'move-to':\n await this.moveTo(node);\n break;\n case 'copy-to':\n await this.copyTo(node);\n break;\n case 'create-shortcut':\n await this.createShortcut(node);\n break;\n case 'rename':\n await this.renameNode(node);\n break;\n case 'properties':\n await this.showFolderProperty(node);\n break;\n case 'delete':\n await this.deleteNodes([node]);\n break;\n case 'refresh':\n await this.refresh();\n break;\n case 'toggle-group-by-type':\n case 'group-by.type':\n this.toggleGroupByType();\n break;\n case 'toggle-detail-panel':\n this.toggleDetailPanel();\n break;\n case 'sort.name':\n this.setSortField('name');\n break;\n case 'sort.modified':\n this.setSortField('modified');\n break;\n case 'sort.size':\n this.setSortField('size');\n break;\n case 'sort.asc':\n this.setSortDirection('asc');\n break;\n case 'sort.desc':\n this.setSortDirection('desc');\n break;\n case 'view.large-icons':\n case 'view.small-icons':\n case 'view.large-tiles':\n case 'view.small-tiles':\n case 'view.list':\n case 'view.details':\n this.setViewMode(name.replace('view.', ''));\n break;\n case 'upload-new-version':\n await driveService.runUploadNewVersionFlow(node);\n await this.refresh();\n break;\n case 'create-version-draft':\n await driveService.runNewVersionFlow(node);\n await this.refresh();\n break;\n case 'publish-version':\n await commandService.execute(AXPCommonCommandKeys.Versioning.Publish, {\n refId: node.id,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n });\n await this.refresh();\n break;\n case 'delete-version-draft':\n await commandService.execute(AXPCommonCommandKeys.Versioning.DeleteDraft, {\n refId: node.id,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n });\n await this.refresh();\n break;\n case 'distribute':\n await commandService.execute(AXMDocumentManagementCommandKeys.DocumentDistribute, {\n data: node,\n documentId: node.type === 'file' ? node.id : undefined,\n folderId: node.type === 'folder' ? node.id : undefined,\n });\n break;\n case 'request-review':\n await commandService.execute(AXMDocumentManagementCommandKeys.DocumentReviewRequest, {\n data: node,\n documentId: node.type === 'file' ? node.id : undefined,\n folderId: node.type === 'folder' ? node.id : undefined,\n });\n break;\n case 'show-version-history':\n await driveService.showVersionHistory(node);\n break;\n case 'copy':\n await this.makeCopy(node);\n break;\n /*\n case 'share':\n await this.share(node);\n break;\n case 'share-with-email':\n await this.shareWithEmail(node);\n break;\n case 'link':\n await this.link(node);\n break;\n */\n case 'lock':\n await this.lock(node);\n break;\n case 'unlock':\n await this.unlock(node);\n break;\n default:\n if (name?.startsWith('upload.')) {\n await this.uploadFileByType(data.node?.id ?? store.currentNode()?.id, data.documentType.id);\n }\n break;\n }\n },\n\n /**\n * Downloads the specified file\n */\n downloadFile(node: AXMDocumentExplorerNode): void {\n driveService.downloadFile(node);\n },\n\n /**\n * File double-click in every explorer view.\n * Default opens the file viewer. The user setting can always download,\n * or open the viewer only when the file can be previewed.\n */\n async openFileOnDoubleClick(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type !== 'file') {\n return;\n }\n const saved = await settingsService\n .scope(DOCUMENT_EXPLORER_LAYOUT_SETTINGS_SCOPE)\n .get(AXPDocumentManagementSettings.FileDoubleClickAction);\n const action = resolveDocumentFileDoubleClickAction(saved);\n if (action === 'download' || (action === 'view-or-download' && !canPreviewFileInViewer(node))) {\n this.downloadFile(node);\n return;\n }\n await this.openFileViewer(node);\n },\n\n /**\n * Opens the file viewer for the current folder, starting at the selected file.\n */\n async openFileViewer(node: AXMDocumentExplorerNode): Promise<void> {\n const folderFiles = this.getCurrentFolderFiles();\n if (folderFiles.length === 0) {\n return;\n }\n\n await driveService.showFileViewerPopup(node, { folderFiles });\n },\n\n /**\n * Shows properties for a folder\n */\n async showFolderProperty(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type == 'folder') {\n if (await driveService.showFolderEditDialog(node)) {\n await this.refresh();\n }\n } else {\n if (await driveService.updateUploadFileByType(node)) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Creates a new folder\n */\n async createFolder(node?: AXMDocumentExplorerNode): Promise<void> {\n const parent = node ?? store.currentFolder() ?? store.currentNode();\n if (\n !canCreateFolderUnder(\n parent,\n store.scopeRootId(),\n resolveExplorerParent(parent, store.currentPath()),\n ) ||\n !(await driveService.folderAllowsCreateFolder(parent))\n ) {\n return;\n }\n const parentId = parent?.id ?? store.currentNode()?.id;\n if (parentId) {\n const allowedNames = store.allowedDocumentTypeNames();\n\n const result = await driveService.showCreateFolderDialog(parentId, {\n allowedDocumentTypeNames: allowedNames ?? undefined,\n });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Renames a node\n */\n async renameNode(node?: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined> {\n if (node) {\n const result = await driveService.showRenamePopup(node);\n if (result) {\n if (node.storageType == 'virtual') {\n const files = store.files();\n const updatedFiles = files.map((file) => {\n if (file.id === result.id) {\n return result;\n }\n return file;\n });\n this.virtualFolder(updatedFiles);\n }\n await this.refresh();\n }\n return result;\n }\n return;\n },\n\n /**\n * Makes a copy of a node\n */\n async makeCopy(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n try {\n await driveService.copy(node);\n await this.refresh();\n } catch (error) {\n console.error('Error copying node:', error);\n }\n }\n },\n\n /**\n * Checks if a node is locked\n */\n async isLocked(node: AXMDocumentExplorerNode): Promise<boolean> {\n try {\n return lockService.check({\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n } catch (error) {\n console.error('Error checking lock status:', error);\n return false;\n }\n },\n\n /**\n * Locks a node\n */\n async lock(node: AXMDocumentExplorerNode): Promise<void> {\n const locked = await driveService.showLockDialog(node);\n if (locked) {\n await this.refresh();\n }\n },\n\n /**\n * Unlocks a node\n */\n async unlock(node: AXMDocumentExplorerNode): Promise<void> {\n const unlocked = await driveService.showUnlockDialog(node);\n if (unlocked) {\n await this.refresh();\n }\n },\n\n /**\n * Moves a node to a different location\n */\n async moveTo(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node?.isSystem) {\n return;\n }\n if (node) {\n const result = await driveService.moveTo({ browseMode: 'folder', node: node, scope: store.scope() });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Copies a node to a different location\n */\n async copyTo(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const result = await driveService.copyTo({ browseMode: 'folder', node: node, scope: store.scope() });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Creates a shortcut to the node in a folder chosen by the user.\n */\n async createShortcut(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const created = await driveService.createShortcutWithPicker(node, store.scope());\n if (created) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Uploads a file by type\n */\n async uploadFileByType(folderId: string, documentTypeId: string): Promise<void> {\n const success = await driveService.uploadFileByType(folderId, documentTypeId, {\n scope: store.scope(),\n });\n if (success) {\n await this.refresh();\n }\n },\n\n //#endregion\n };\n },\n ),\n);\n","import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { AXPDocumentExplorerViewModel } from '../../document-explorer.viewmodel';\n\n@Component({\n selector: 'axm-document-explorer-large-tiles-view-skeleton',\n templateUrl: './large-tiles-view-skeleton.component.html',\n styleUrl: './large-tiles-view-skeleton.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXSkeletonModule, AXTranslationModule],\n})\nexport class AXMDocumentExplorerLargeTilesViewSkeletonComponent {\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n\n protected readonly folderPlaceholders = [0, 1, 2];\n protected readonly filePlaceholders = [0, 1];\n protected readonly flatPlaceholders = [0, 1, 2, 3, 4];\n}\n","@if (vm.groupByType()) {\n <div class=\"__section\">\n <div class=\"__header\">\n <h3 class=\"__title\">{{ '@document-management:terms.common.folders' | translate | async }}</h3>\n </div>\n <div class=\"__content\">\n @for (item of folderPlaceholders; track item) {\n <div class=\"__item\">\n <ax-skeleton [animated]=\"true\" class=\"__icon\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__name\"></ax-skeleton>\n <div class=\"__info\">\n <ax-skeleton [animated]=\"true\" class=\"__meta\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__meta --short\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"__section\">\n <div class=\"__header\">\n <h3 class=\"__title\">{{ '@document-management:terms.common.files' | translate | async }}</h3>\n </div>\n <div class=\"__content\">\n @for (item of filePlaceholders; track item) {\n <div class=\"__item\">\n <ax-skeleton [animated]=\"true\" class=\"__icon\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__name\"></ax-skeleton>\n <div class=\"__info\">\n <ax-skeleton [animated]=\"true\" class=\"__meta\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__meta --short\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n} @else {\n <div class=\"__section\">\n <div class=\"__content\">\n @for (item of flatPlaceholders; track item) {\n <div class=\"__item\">\n <ax-skeleton [animated]=\"true\" class=\"__icon\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__name\"></ax-skeleton>\n <div class=\"__info\">\n <ax-skeleton [animated]=\"true\" class=\"__meta\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__meta --short\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </div>\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXMFileTypeModule } from '../file-type/file-type.module';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, effect, inject, input, signal, Type, viewChild, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { get } from 'lodash';\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMDocumentSelectionMode,\n AXPDocumentExplorerViewMode,\n} from '../shared/document-manager.types';\nimport { AXPDocumentExplorerViewModel } from './document-explorer.viewmodel';\nimport { AXMDocumentExplorerLargeTilesViewSkeletonComponent } from './views/large-tiles/large-tiles-view-skeleton.component';\n@Component({\n selector: 'axm-document-explorer',\n templateUrl: './document-explorer.component.html',\n styleUrls: ['./document-explorer.component.css'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'flex min-h-0 min-w-0 flex-1 flex-col',\n '(click)': 'handleExplorerClick($event)',\n '(contextmenu)': 'handleExplorerContextMenu($event)',\n },\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n CommonModule,\n RouterModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXFormatModule,\n AXDateTimeModule,\n AXMenuModule,\n AXMFileTypeModule,\n AXPStateMessageComponent,\n AXMDocumentExplorerLargeTilesViewSkeletonComponent,\n ],\n})\nexport class AXMDocumentExplorerComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected contextMenu = viewChild<AXContextMenuComponent>('itemsContextMenu');\n protected rootContextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n protected driveService = inject(AXMDocumentManagerService);\n protected translateService = inject(AXTranslationService);\n protected readonly layout = inject(AXPLayoutThemeService);\n\n browseMode = input<AXMDocumentExplorerBrowseMode>('file');\n viewMode = input<AXPDocumentExplorerViewMode>();\n selectionMode = input<AXMDocumentSelectionMode>('none');\n showContextMenu = input<boolean>(true);\n\n protected view = signal<Type<any> | null>(null);\n protected skeletonView = signal<Type<any> | null>(null);\n\n protected showSkeleton = computed(() => this.vm.isLoading() || this.vm.currentNode() == null);\n\n protected showEmptyState = computed(\n () =>\n !this.showSkeleton() &&\n this.vm.filteredFolders().length === 0 &&\n this.vm.filteredFiles().length === 0,\n );\n\n /** Drops stale async open results when the user right-clicks again before items resolve. */\n private contextMenuOpenToken = 0;\n\n private viewMap = {\n list: async () => (await import('./views/list/list-view.component')).AXMDocumentExplorerListViewComponent,\n 'small-tiles': async () =>\n (await import('./views/small-tiles/small-tiles-view.component')).AXMDocumentExplorerSmallTilesViewComponent,\n 'large-tiles': async () =>\n (await import('./views/large-tiles/large-tiles-view.component')).AXMDocumentExplorerLargeTilesViewComponent,\n details: async () =>\n (await import('./views/details/details-view.component')).AXMDocumentExplorerDetailsViewComponent,\n 'large-icons': async () =>\n (await import('./views/large-icons/large-icons-view.component')).AXMDocumentExplorerLargeIconsViewComponent,\n 'small-icons': async () =>\n (await import('./views/small-icons/small-icons-view.component')).AXMDocumentExplorerSmallIconsViewComponent,\n 'attachment': async () =>\n (await import('./views/attachement-widget/attachment-widget.component')).AXMDocumentExplorerAttachmentComponent,\n };\n\n private skeletonViewMap = {\n list: async () =>\n (await import('./views/list/list-view-skeleton.component')).AXMDocumentExplorerListViewSkeletonComponent,\n 'small-tiles': async () =>\n (await import('./views/small-tiles/small-tiles-view-skeleton.component'))\n .AXMDocumentExplorerSmallTilesViewSkeletonComponent,\n 'large-tiles': async () =>\n (await import('./views/large-tiles/large-tiles-view-skeleton.component'))\n .AXMDocumentExplorerLargeTilesViewSkeletonComponent,\n details: async () =>\n (await import('./views/details/details-view-skeleton.component')).AXMDocumentExplorerDetailsViewSkeletonComponent,\n 'large-icons': async () =>\n (await import('./views/large-icons/large-icons-view-skeleton.component'))\n .AXMDocumentExplorerLargeIconsViewSkeletonComponent,\n 'small-icons': async () =>\n (await import('./views/small-icons/small-icons-view-skeleton.component'))\n .AXMDocumentExplorerSmallIconsViewSkeletonComponent,\n attachment: async () =>\n (await import('./views/attachement-widget/attachment-view-skeleton.component'))\n .AXMDocumentExplorerAttachmentViewSkeletonComponent,\n };\n\n #effect2 = effect(() => {\n if (this.viewMode()) {\n this.vm.setViewModeLocked(true);\n this.vm.setViewMode(this.viewMode()!);\n }\n if (this.selectionMode()) {\n this.vm.setSelectionMode(this.selectionMode()!);\n }\n });\n\n #effect3 = effect(async () => {\n const mode = this.vm.viewMode() as string;\n const viewLoader = get(this.viewMap, mode) ?? this.viewMap['large-tiles'];\n const skeletonLoader = get(this.skeletonViewMap, mode) ?? this.skeletonViewMap['large-tiles'];\n const [comp, skeletonComp] = await Promise.all([viewLoader(), skeletonLoader()]);\n this.view.set(comp);\n this.skeletonView.set(skeletonComp);\n });\n\n //#region Menu and Context Menu\n\n protected handleExplorerClick(event: MouseEvent) {\n const target = event.target as HTMLElement | null;\n if (target?.closest('.__explorer-item, .details-view')) {\n return;\n }\n\n if (this.vm.hasSelectedItems()) {\n this.vm.deselectAll();\n }\n }\n\n /**\n * Builds menu items first, then calls `showAt` with a prefilled event.\n * `AXContextMenuComponent` applies `items` synchronously after `onOpening`, so async\n * `(onOpening)` handlers leave the menu empty.\n */\n protected async handleExplorerContextMenu(event: MouseEvent) {\n if (!this.showContextMenu()) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const openToken = ++this.contextMenuOpenToken;\n const point = { x: event.clientX, y: event.clientY };\n const target = event.target as HTMLElement | null;\n const itemEl = this.resolveExplorerItemElement(target);\n\n if (itemEl) {\n const node = this.resolveExplorerNode(itemEl);\n if (!node) {\n return;\n }\n\n this.vm.selectOnContextMenu(node);\n const items = await this.vm.getNodeContextMenuItems(node);\n if (openToken !== this.contextMenuOpenToken) {\n return;\n }\n\n const menu = this.contextMenu();\n if (!menu) {\n return;\n }\n\n await menu.showAt(point, itemEl, {\n sender: menu,\n canceled: false,\n targetElement: itemEl,\n items,\n } as AXContextMenuOpeningEvent);\n return;\n }\n\n if (this.vm.hasSelectedItems()) {\n this.vm.deselectAll();\n }\n\n const items = await this.vm.getRootContextMenuItems();\n if (openToken !== this.contextMenuOpenToken) {\n return;\n }\n\n const menu = this.rootContextMenu();\n if (!menu) {\n return;\n }\n\n const rootEl = (target?.closest('.view-container') as HTMLElement | null) ?? target ?? undefined;\n await menu.showAt(point, rootEl, {\n sender: menu,\n canceled: false,\n targetElement: rootEl as HTMLElement,\n items,\n } as AXContextMenuOpeningEvent);\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n await this.vm.handleMenuItemClick(e.item.name, e.item.data);\n }\n }\n\n private resolveExplorerItemElement(target: HTMLElement | null): HTMLElement | null {\n const itemEl = target?.closest('.__explorer-item') as HTMLElement | null;\n if (itemEl) {\n return itemEl;\n }\n const tableRow = target?.closest('tr') as HTMLElement | null;\n if (!tableRow) {\n return null;\n }\n const fromRow = tableRow.querySelector('.__explorer-item') as HTMLElement | null;\n if (fromRow) {\n return fromRow;\n }\n const rowId = tableRow.getAttribute('data-id') ?? tableRow.getAttribute('id');\n if (!rowId) {\n return null;\n }\n return this.vm.filteredFolders().concat(this.vm.filteredFiles()).find((node) => node.id === rowId)\n ? tableRow\n : null;\n }\n\n private resolveExplorerNode(itemEl: HTMLElement): AXMDocumentExplorerNode | undefined {\n const fromElement = (get(itemEl, '__data__') ?? get(itemEl.closest?.('.__explorer-item'), '__data__')) as\n | AXMDocumentExplorerNode\n | undefined;\n if (fromElement) {\n return fromElement;\n }\n const rowId = itemEl.getAttribute('data-id') ?? itemEl.getAttribute('id');\n if (!rowId) {\n return undefined;\n }\n return this.vm.filteredFolders().concat(this.vm.filteredFiles()).find((node) => node.id === rowId);\n }\n\n //#endregion\n}\n","<div class=\"view-container\">\n @if (showSkeleton()) {\n @if (skeletonView(); as skeleton) {\n <ng-container [ngComponentOutlet]=\"skeleton\"></ng-container>\n } @else {\n <axm-document-explorer-large-tiles-view-skeleton></axm-document-explorer-large-tiles-view-skeleton>\n }\n } @else if (showEmptyState()) {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@document-management:empty-states.no-items.title'\"\n [description]=\"'@document-management:empty-states.no-items.description'\"\n >\n </axp-state-message>\n } @else {\n <ng-container [ngComponentOutlet]=\"view()\"></ng-container>\n }\n</div>\n\n<!-- Context Menu: opened via host contextmenu after items are resolved (not via [target]/onOpening). -->\n@if (showContextMenu()) {\n <ax-context-menu\n #itemsContextMenu\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n <ax-context-menu\n #rootContextMenu\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n >\n </ax-context-menu>\n}\n","import { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\n//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport type { AXMMetaDataBuilderValue } from '@acorex-platform/module-data-management-client/contracts';\nimport { AXPLayoutSideDetailPanelComponent, AXPLayoutSideDetailPanelSectionDirective, type AXPLayoutSideDetailPanelHeader, type AXPLayoutSideDetailPanelSection } from '@acorex-platform/framework-client/layout/components';\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDocumentExplorerViewModel } from '../../document-explorer.viewmodel';\nimport { AXMDocumentExplorerNode } from '../../../shared/document-manager.types';\nimport { folderColorToRgbChannels } from '../../../shared/folder-color.util';\nimport {\n collectDocumentScopedMetaDataList,\n collectFolderScopedMetaDataList,\n toViewMetaDataList,\n} from '../../../shared/folder-metadata.util';\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Document explorer side panel; maps view-model state into {@link AXPLayoutSideDetailPanelComponent}.\n */\n@Component({\n selector: 'axm-document-explorer-detail-panel',\n templateUrl: './detail-panel.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n ],\n})\nexport class AXMDocumentExplorerDetailPanelComponent {\n private readonly entityService = inject(AXPEntityService);\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n private readonly documentTypeService = this.entityService.withEntity(RootConfig.module.name, RootConfig.entities.documentType.name).data<any, any>();\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Metadata widget state ----\n\n protected readonly metadataSchema = signal<AXMMetaDataBuilderValue | null>(null);\n protected readonly metadataContext = signal<{ metaDataForm: Record<string, unknown> }>({ metaDataForm: {} });\n protected readonly metadataWidgetNode = signal<{ type: string; path: string; options: { groups: unknown[] } } | null>(\n null,\n );\n\n //#endregion\n\n //#region ---- i18n ----\n\n protected readonly multiSelectLabel = signal<string | null>(null);\n\n private static readonly METADATA_SECTION_KEY = '@document-management:terms.common.meta-data';\n\n protected readonly panelSections = signal<AXPLayoutSideDetailPanelSection[]>([]);\n\n //#endregion\n\n //#region ---- Panel model ----\n\n protected readonly panelHeader = computed((): AXPLayoutSideDetailPanelHeader | null => {\n if (this.vm.hasMultipleSelectedItems()) {\n return null;\n }\n const node = (this.vm.selectedNode() ?? this.vm.currentFolder()) as AXMDocumentExplorerNode | null | undefined;\n if (node == null) {\n return null;\n }\n const nodeInfo = this.vm.getNodeInfo(node);\n const isShortcut = node.storageType === 'shortcut' || node.isShortcut === true;\n const isFolder = node.type === 'folder';\n return {\n primaryTitle: nodeInfo.name,\n icon: {\n iconClass: `fa-fw fa-lg ${nodeInfo.icon}`,\n shortcut: isShortcut,\n ...(isFolder\n ? {\n surfaceVars: {\n '--node-bg-color': folderColorToRgbChannels(node.color),\n },\n }\n : {}),\n },\n };\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n void this.loadMultiSelectLabel();\n });\n\n effect(() => {\n this.vm.hasMultipleSelectedItems();\n this.vm.selectedNode();\n this.vm.currentFolder();\n void this.rebuildPanelSections();\n });\n\n effect(() => {\n const node = this.vm.selectedNode() as AXMDocumentExplorerNode | null | undefined;\n if (!node || !node.documentTypes?.length) {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n return;\n }\n const typeIds = node.documentTypes\n .map((documentType) => documentType?.id)\n .filter((id): id is string => typeof id === 'string' && id.length > 0);\n if (typeIds.length === 0) {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n return;\n }\n const appliesTo = node.type === 'folder' ? 'folder' : 'document';\n Promise.all(typeIds.map((id) => this.documentTypeService.byKey(id)))\n .then((types: Array<{ metaDataList?: AXMMetaDataBuilderValue }>) => {\n const metaDataList =\n appliesTo === 'folder'\n ? collectFolderScopedMetaDataList(types)\n : collectDocumentScopedMetaDataList(types[0]?.metaDataList);\n const viewList = toViewMetaDataList(metaDataList);\n this.metadataSchema.set(viewList);\n this.metadataContext.set({ metaDataForm: (node.metaDataForm ?? {}) as Record<string, unknown> });\n this.metadataWidgetNode.set(\n (viewList.groups ?? []).length\n ? {\n type: 'meta-data-form-editor',\n path: 'metaDataForm',\n options: { groups: viewList.groups },\n }\n : null,\n );\n })\n .catch(() => {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n });\n });\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected onPanelClose(): void {\n this.vm.closeDetailPanel();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async loadMultiSelectLabel(): Promise<void> {\n if (!this.vm.hasMultipleSelectedItems()) {\n this.multiSelectLabel.set(null);\n return;\n }\n const itemsSelected =\n (await this.translationService.translateAsync('@general:terms.interface.items-selected')) ?? 'items selected';\n this.multiSelectLabel.set(`${this.vm.selectedCount()} ${itemsSelected}`);\n }\n\n private async rebuildPanelSections(): Promise<void> {\n if (this.vm.hasMultipleSelectedItems()) {\n this.panelSections.set([]);\n return;\n }\n const node = (this.vm.selectedNode() ?? this.vm.currentFolder()) as AXMDocumentExplorerNode | null | undefined;\n if (node == null) {\n this.panelSections.set([]);\n return;\n }\n const nodeInfo = this.vm.getNodeInfo(node);\n const t = this.translationService;\n const sections: AXPLayoutSideDetailPanelSection[] = [];\n for (const section of nodeInfo.sections) {\n const title = (await t.translateAsync(section.title)) ?? section.title;\n const isMetadata = section.title === AXMDocumentExplorerDetailPanelComponent.METADATA_SECTION_KEY;\n if (isMetadata) {\n sections.push({ title, projectionKey: 'metadata' });\n continue;\n }\n const rows = await Promise.all(\n section.details.map(async (detail) => {\n const content =\n typeof detail.content === 'string' && detail.content.startsWith('@document-management:')\n ? ((await t.translateAsync(detail.content)) ?? detail.content)\n : detail.content;\n return {\n label: (await t.translateAsync(detail.title)) ?? detail.title,\n value: content,\n format: detail.format,\n };\n }),\n );\n sections.push({ title, rows });\n }\n this.panelSections.set(sections);\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (vm.hasMultipleSelectedItems() && multiSelectLabel(); as multiLabel) {\n <axp-layout-side-detail-panel [multiSelectLabel]=\"multiLabel\" (panelClose)=\"onPanelClose()\" />\n} @else {\n <axp-layout-side-detail-panel\n [header]=\"panelHeader()\"\n [sections]=\"panelSections()\"\n (panelClose)=\"onPanelClose()\"\n >\n @if (metadataWidgetNode(); as widgetNode) {\n <ng-template axpLayoutSideDetailPanelSection=\"metadata\">\n <axp-widgets-container [context]=\"metadataContext()\">\n <ng-container axp-widget-renderer [node]=\"widgetNode\" [mode]=\"'view'\"></ng-container>\n </axp-widgets-container>\n </ng-template>\n }\n </axp-layout-side-detail-panel>\n}\n","//#region ----- Imports -----\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n resolveDocumentExpirationBadge,\n type AXMDocumentExpirationBadge,\n} from '../../document-expiration.util';\nimport { AXMDocumentExplorerNode } from '../../document-manager.types';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-document-expiration-badge',\n templateUrl: './document-expiration-badge.component.html',\n styleUrl: './document-expiration-badge.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-document-expiration-badge',\n },\n imports: [AXBadgeModule, AXTooltipModule, AXTranslationModule, AsyncPipe],\n})\nexport class AXMDocumentExpirationBadgeComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Inputs -----\n\n readonly node = input.required<AXMDocumentExplorerNode>();\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly badge = computed((): AXMDocumentExpirationBadge | null => {\n const node = this.node();\n if (!node || node.type !== 'file') {\n return null;\n }\n return resolveDocumentExpirationBadge(node);\n });\n\n protected readonly tooltipText = signal('');\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n effect(() => {\n const badge = this.badge();\n if (!badge) {\n this.tooltipText.set('');\n return;\n }\n void this.resolveTooltip(badge);\n });\n }\n\n //#endregion\n\n //#region ----- Private Helpers -----\n\n private async resolveTooltip(badge: AXMDocumentExpirationBadge): Promise<void> {\n const dateFormat = await this.settingsService.get(AXPRegionalSetting.ShortDate);\n const formattedDate = this.formatService.format(badge.date, 'date', { format: dateFormat });\n const text = await this.translationService.translateAsync(badge.tooltipKey, {\n params: { date: formattedDate },\n });\n if (this.badge()?.status === badge.status) {\n this.tooltipText.set(text);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (badge(); as b) {\n <!-- ----- Expiration status badge (expired = danger, near = warning) ----- -->\n <span\n class=\"axm-document-expiration-badge__host inline-flex shrink-0 cursor-help\"\n [axTooltip]=\"tooltipText()\"\n axTooltipPlacement=\"top\"\n [attr.aria-label]=\"tooltipText()\"\n >\n <ax-badge size=\"sm\" look=\"twotone\" [color]=\"b.color\" [text]=\"(b.textKey | translate | async) ?? ''\"></ax-badge>\n </span>\n}\n","//#region ----- Imports -----\n\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { AXPVersioningStatus } from '@acorex-platform/module-common-client/contracts';\nimport { resolveDocumentVersionNumber } from '../../document-version.util';\nimport { AXMDocumentExplorerNode } from '../../document-manager.types';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst VERSION_BADGE_I18N = '@document-management:terms.document.version-badge';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-document-version-badge',\n templateUrl: './document-version-badge.component.html',\n styleUrl: './document-version-badge.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-document-version-badge',\n '[hidden]': 'versionNumber() == null',\n },\n imports: [AXTooltipModule, AXTranslationModule, AsyncPipe],\n})\nexport class AXMDocumentVersionBadgeComponent {\n //#region ----- Inputs -----\n\n readonly node = input.required<AXMDocumentExplorerNode>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly versionNumber = computed(() => resolveDocumentVersionNumber(this.node()));\n protected readonly isDraft = computed(\n () => this.node().versioningStatus === AXPVersioningStatus.Draft,\n );\n\n protected readonly textKey = `${VERSION_BADGE_I18N}.text`;\n protected readonly tooltipKey = `${VERSION_BADGE_I18N}.tooltip`;\n\n //#endregion\n}\n\n//#endregion\n","@if (versionNumber(); as version) {\n <!-- ----- Version number when versioning is enabled ----- -->\n <span\n class=\"axm-document-version-badge__chip\"\n [class.axm-document-version-badge__chip--draft]=\"isDraft()\"\n [axTooltip]=\"(tooltipKey | translate: { params: { version } } | async) ?? ''\"\n axTooltipPlacement=\"top\"\n [attr.aria-label]=\"(tooltipKey | translate: { params: { version } } | async) ?? ''\"\n >\n <i class=\"fa-light fa-code-branch\" aria-hidden=\"true\"></i>\n <span class=\"axm-document-version-badge__text\">{{\n (textKey | translate: { params: { version } } | async) ?? ''\n }}</span>\n </span>\n}\n","//#region ----- Imports -----\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n resolveFolderExpirationCountBadges,\n type AXMFolderExpirationCountBadge,\n} from '../../document-expiration.util';\nimport { AXMDocumentExplorerNode } from '../../document-manager.types';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-folder-expiration-badges',\n templateUrl: './folder-expiration-badges.component.html',\n styleUrl: './folder-expiration-badges.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-folder-expiration-badges',\n },\n imports: [AXBadgeModule, AXTooltipModule],\n})\nexport class AXMFolderExpirationBadgesComponent {\n //#region ----- Services & Dependencies -----\n\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ----- Inputs -----\n\n readonly node = input.required<AXMDocumentExplorerNode>();\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly badges = computed((): AXMFolderExpirationCountBadge[] => {\n const node = this.node();\n if (!node || node.type !== 'folder') {\n return [];\n }\n return resolveFolderExpirationCountBadges(node);\n });\n\n protected readonly tooltipByStatus = signal<Record<string, string>>({});\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n effect(() => {\n const badges = this.badges();\n if (badges.length === 0) {\n this.tooltipByStatus.set({});\n return;\n }\n void this.resolveTooltips(badges);\n });\n }\n\n //#endregion\n\n //#region ----- Template Helpers -----\n\n protected tooltipFor(status: string): string {\n return this.tooltipByStatus()[status] ?? '';\n }\n\n //#endregion\n\n //#region ----- Private Helpers -----\n\n private async resolveTooltips(badges: AXMFolderExpirationCountBadge[]): Promise<void> {\n const entries = await Promise.all(\n badges.map(async (badge) => {\n const text = await this.translationService.translateAsync(badge.tooltipKey, {\n params: { count: badge.count },\n });\n return [badge.status, text] as const;\n }),\n );\n if (this.badges().length === badges.length) {\n this.tooltipByStatus.set(Object.fromEntries(entries));\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (badges().length > 0) {\n <!-- ----- Folder expiration counts only (color = status; tooltip has full label) ----- -->\n <span class=\"axm-folder-expiration-badges__host inline-flex shrink-0 items-center gap-1\">\n @for (badge of badges(); track badge.status) {\n <span\n class=\"inline-flex cursor-help\"\n [axTooltip]=\"tooltipFor(badge.status)\"\n axTooltipPlacement=\"top\"\n [attr.aria-label]=\"tooltipFor(badge.status)\"\n >\n <ax-badge size=\"sm\" look=\"twotone\" [color]=\"badge.color\" [text]=\"'' + badge.count\"></ax-badge>\n </span>\n }\n </span>\n}\n","import { AXButtonModule } from \"@acorex/components/button\";\nimport { AXDecoratorModule } from \"@acorex/components/decorators\";\nimport { AXPDocumentExplorerViewModel } from \"../../../document-explorer\";\nimport { AXMDocumentExplorerNode } from \"../../document-manager.types\";\nimport { Component, inject, ChangeDetectionStrategy } from \"@angular/core\";\nimport { AXPLayoutThemeService } from '@acorex-platform/framework-client/themes/shared';\n\n\n@Component({\n selector: 'axm-folder-path-breadcrumbs',\n templateUrl: './folder-path-breadcrumbs.component.html',\n styleUrls: ['./folder-path-breadcrumbs.component.css'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [\n AXButtonModule,\n AXDecoratorModule,\n ],\n})\nexport class AXMFolderPathBreadcrumbsComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected layout = inject(AXPLayoutThemeService);\n}\n","<!-- Breadcrumbs Section -->\n<div class=\"__breadcrumb ax-sm\">\n <!-- Desktop Breadcrumb -->\n @for (\n item of vm.currentPath();\n track item.id;\n let i = $index;\n let last = $last\n ) {\n <!-- Navigation Button -->\n <ax-button\n look=\"blank\"\n (onClick)=\"vm.navigateToFolder(item.id)\"\n [text]=\"item.name\"\n [disabled]=\"last\"\n >\n @if (i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n } @else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if (!last) {\n <i class=\"far fa-chevron-right rtl:rotate-180 fa-fw fa-xs me-2\"></i>\n }\n <!-- End Navigation Button -->\n }\n</div>\n","//#region ---- Imports ----\n\nimport type { AXPDialogRef } from '@acorex-platform/framework-client/layout/builder';\n\n//#endregion\n\n//#region ---- Dialog surfaces ----\n\n/** `dialogSurface` for attachment dialog with save (layout builder options). */\nexport const AXM_DOCUMENT_DIALOG_SURFACE_ATTACHMENT = 'document-management.attachment-dialog';\n\n/** `dialogSurface` for attachment dialog without save. */\nexport const AXM_DOCUMENT_DIALOG_SURFACE_ATTACHMENT_NO_SAVE = 'document-management.attachment-dialog-no-save';\n\n//#endregion\n\n//#region ---- On-action hook (extensions handle custom commands, e.g. AI metadata fill) ----\n\n/**\n * Runs when the user triggers a footer/dialog action, before the default attachment-dialog handler.\n * Extensions may set {@link AXMDocumentAttachmentDialogOnActionPayload.result} to short-circuit (e.g. keep dialog open after patching context).\n */\nexport const AXM_DOCUMENT_ATTACHMENT_DIALOG_ON_ACTION_HOOK_KEY = 'document-management.attachment-dialog.on-action';\n\nexport interface AXMDocumentAttachmentDialogOnActionPayload {\n action: string;\n dialogRef: AXPDialogRef;\n /** Same shape as `dialogIntegrationPayload` passed when opening the dialog. */\n integration: Record<string, unknown>;\n /** When set by a listener, the dialog service returns this to the renderer. */\n result?: { keepDialogOpen?: boolean };\n}\n\n//#endregion\n","import { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPExecuteCommand, AXPPlatformScope, getSmart } from '@acorex-platform/framework-shared/core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, OnInit, signal, untracked, ViewEncapsulation } from '@angular/core';\n\nimport { AXPFileTypeProviderService } from '@acorex-platform/framework-client/common';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex-platform/framework-client/layout/views';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPDeviceService, AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { isArray, isString } from 'lodash';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../../document-explorer';\nimport { AXMDocumentExplorerDetailPanelComponent } from '../../document-explorer/views/detail-panel/detail-panel.component';\nimport { AXMDocumentManagerService } from '../../shared';\nimport { AXMDocumentSelectionMode } from '../../shared/document-manager.types';\n\n//#region ---- Document Drive Page Component ----\n\n/**\n * Entity page component that shows the EDMS drive UI scoped to the current record's folder.\n * Uses getRootByEntityRef(refType, refId) to load the folder; navigation stays in-page (no router).\n */\n@Component({\n selector: 'axm-document-drive-page',\n templateUrl: './document-drive-page.component.html',\n styleUrls: ['./document-drive-page.component.css'],\n standalone: true,\n imports: [\n CommonModule,\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXMDocumentExplorerComponent,\n AXMDocumentExplorerDetailPanelComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDocumentExplorerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDocumentDrivePageComponent,\n },\n ],\n})\nexport class AXMDocumentDrivePageComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---- Inputs ----\n\n /** Default `{}`: avoid NG0950 before page-component-renderer calls setInput. */\n rootContext = input<Record<string, unknown>>({});\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n private readonly route = inject(ActivatedRoute);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n /** Resolved restriction list; null = not configured (allow all). */\n private readonly resolvedAllowedDocumentTypeNames = signal<string[] | null>(null);\n\n //#endregion\n\n //#region ---- View State ----\n\n protected readonly filterItems = signal<Array<{ key: string; textKey: string; icon: string }>>([]);\n protected selectedFilter = signal<string>('all');\n protected searchQuery: string | null = null;\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n protected readonly viewsItems = computed(() => [\n { key: 'large-icons', icon: 'fa-light fa-grid' },\n { key: 'small-icons', icon: 'fa-light fa-grid', break: true },\n { key: 'large-tiles', icon: 'fa-grid-2' },\n { key: 'small-tiles', icon: 'fa-grid-2', break: true },\n { key: 'list', icon: 'fa-list' },\n { key: 'details', icon: 'fa-light fa-table', break: true },\n ]);\n protected readonly selectedViewMode = computed(() => this.viewsItems().find((item) => item.key === this.vm.viewMode()) ?? this.viewsItems()[0]);\n protected readonly selectionMode = signal<AXMDocumentSelectionMode>('single');\n\n /** Folder id that was loaded as this page's root (entity ref root). We must not go back above it. */\n private readonly pageRootFolderId = signal<string | null>(null);\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** True when we can show/use back: we're not on the page root and VM allows going up. */\n protected readonly canGoBackInPage = computed(() => {\n const rootId = this.pageRootFolderId();\n if (rootId == null) return false;\n const currentId = this.vm.currentNode()?.id;\n return this.vm.isUpAvailable() && currentId != null && currentId !== rootId;\n });\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) ?? items[0];\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /** In embedded mode: when VM requests folder navigation, load that folder (no router). */\n #navigateEffect = effect(() => {\n const folderId = this.vm.navigatingFolderId();\n if (folderId) {\n this.vm.loadFolderContents(folderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layoutService.setNavigationLoading(isLoading);\n });\n });\n\n #pageMetadataEffect = effect(() => {\n this.vm.isLoading();\n this.vm.currentNode();\n this.vm.selectedCount();\n this.vm.viewMode();\n untracked(() => {\n this.recompute();\n });\n });\n\n /** Re-apply document type restrictions when record context or plugin options change. */\n #allowedDocumentTypesEffect = effect(() => {\n this.rootContext();\n this.options();\n this.pageConfig();\n untracked(() => {\n void this.applyAllowedDocumentTypeNames();\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.loadFilterItems();\n\n const { refType, refId } = this.resolveEntityRef();\n if (!refType || !refId) {\n return;\n }\n\n await this.vm.initialize({ browseMode: 'file', scope: AXPPlatformScope.Tenant });\n await this.applyAllowedDocumentTypeNames();\n // Entity root comes back hydrated (children included) — apply it directly, no second fetch.\n const root = await this.driveService.getRootByEntityRef(refType, refId);\n this.pageRootFolderId.set(root.result.id);\n await this.vm.applyLoadedFolder(root);\n await this.applyAllowedDocumentTypeNames();\n this.recompute();\n }\n\n /**\n * Resolves allowed document type names from static plugin config or an expression evaluated against rootContext.\n * Returns null when not configured (no restriction).\n */\n private async resolveAllowedDocumentTypeNames(): Promise<string[] | null> {\n const config = this.pageConfig();\n const configNames = config && (config as { allowedDocumentTypeNames?: unknown }).allowedDocumentTypeNames;\n if (isArray(configNames)) {\n return configNames.filter((name): name is string => isString(name) && name.trim().length > 0);\n }\n\n const raw = this.options()?.['documentTypeNames'];\n if (raw == null) {\n return null;\n }\n if (isArray(raw)) {\n return raw.filter((name): name is string => isString(name) && name.trim().length > 0);\n }\n if (isString(raw) && raw.trim()) {\n const scope = {\n context: {\n eval: (path: string) => getSmart(this.rootContext(), path),\n },\n };\n const evaluated = await this.expressionEvaluator.evaluate(raw.trim(), scope);\n if (isArray(evaluated)) {\n return evaluated.filter((name): name is string => isString(name) && name.trim().length > 0);\n }\n return [];\n }\n return null;\n }\n\n private async applyAllowedDocumentTypeNames(): Promise<void> {\n const names = await this.resolveAllowedDocumentTypeNames();\n if (names === null) {\n return;\n }\n this.resolvedAllowedDocumentTypeNames.set(names);\n this.vm.setAllowedDocumentTypeNames(names);\n }\n\n private getAllowedDocumentTypeNames(): string[] | undefined {\n const names = this.resolvedAllowedDocumentTypeNames();\n return names === null ? undefined : names;\n }\n\n /**\n * Resolves refType and refId for getRootByEntityRef from pageConfig, rootContext, or route.\n * Order: pageConfig.refType → rootContext (moduleName + entityName) → route params.\n * refId: pageConfig.refId → rootContext.id → rootContext.recordId.\n */\n private resolveEntityRef(): { refType: string | null; refId: string | null } {\n const config = this.pageConfig();\n const context = this.rootContext() ?? {};\n const ctx = context as Record<string, unknown>;\n const page = (config ?? {}) as { refType?: unknown; refId?: unknown };\n\n let refType: string | null = typeof page.refType === 'string' ? page.refType : null;\n if (!refType) {\n const moduleName = typeof ctx['moduleName'] === 'string' ? ctx['moduleName'] : null;\n const entityName = typeof ctx['entityName'] === 'string' ? ctx['entityName'] : null;\n if (moduleName && entityName) {\n refType = `${moduleName}.${entityName}`;\n }\n }\n if (!refType) {\n const module = this.route.snapshot.parent?.paramMap.get('module');\n const entity = this.route.snapshot.paramMap.get('entity');\n if (module && entity) {\n refType = `${module}.${entity}`;\n }\n }\n\n const refIdFromPage = typeof page.refId === 'string' ? page.refId : null;\n const refId =\n refIdFromPage ??\n (typeof ctx['id'] === 'string' ? ctx['id'] : null) ??\n (typeof ctx['recordId'] === 'string' ? ctx['recordId'] : null) ??\n null;\n\n return { refType, refId };\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleSearchChange(event: AXValueChangedEvent): void {\n this.searchQuery = event.value ?? null;\n if (this.searchQuery && this.searchQuery.length > 0) {\n this.performSearch(this.searchQuery);\n }\n }\n\n private async performSearch(searchValue: string): Promise<void> {\n const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {\n folderId: this.vm.currentNode()?.id,\n });\n this.vm.virtualFolder(result, {\n name: 'Search Result',\n parentId: this.vm.currentNode()?.id,\n });\n }\n\n protected handleNavigateToFolder(folderId: string): void {\n this.vm.navigateToFolder(folderId);\n }\n\n /** Navigate back one folder; only when not already on page root. */\n protected handleBack(): void {\n if (this.canGoBackInPage()) {\n this.vm.navigateToUp();\n }\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadFilterItems(): Promise<void> {\n const types = await this.fileTypeService.items();\n const items = [\n { key: 'all', textKey: 'file-types.all', icon: 'fa-light fa-folder-closed' },\n ...types.map((type) => ({\n key: type.name,\n textKey: `file-types.${type.name}`,\n icon: type.icon ?? 'fa-light fa-file',\n })),\n ];\n this.filterItems.set(items);\n }\n\n //#endregion\n\n //#region ---- Filter Helpers ----\n\n protected setFilter(key: string): void {\n this.selectedFilter.set(key);\n }\n\n protected getFilterIcon(): string {\n if (this.selectedFilter() === 'all') return 'fa-light fa-folder-closed';\n const item = this.filterItems().find((i) => i.key === this.selectedFilter());\n return item?.icon ?? 'fa-light fa-file';\n }\n\n protected getFilterText(): string {\n if (this.selectedFilter() === 'all') return 'file-types.all';\n const item = this.filterItems().find((i) => i.key === this.selectedFilter());\n return item?.textKey ?? 'file-types.all';\n }\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.showSelectionDeleteActions()) {\n return [\n {\n name: 'deleteItems',\n title: '@general:actions.delete-items.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n const addItemItems = await this.vm.getFolderAddMenuItems();\n if (addItemItems.length > 0) {\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: '@document-management:actions.add-item',\n icon: 'fa-light fa-plus',\n color: 'primary',\n items: addItemItems,\n },\n ];\n }\n return [];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.showSelectionDeleteActions()) {\n return [\n {\n name: 'delete',\n title: '@general:actions.delete.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n return await this.vm.getFolderActionMenuItems();\n }\n\n override async getPageTitle(): Promise<string> {\n if (this.isDriveContentLoading()) {\n return '@general:state-message.loading.title';\n }\n return this.vm.currentFolder()?.name ?? '';\n }\n\n override async getPageDescription(): Promise<string> {\n const count = this.isDriveContentLoading() ? 0 : this.vm.itemsCount();\n const size = this.isDriveContentLoading() ? 0 : this.vm.availableSpace();\n const formattedSize = this.formatService.format(size, 'filesize');\n return this.translateService.translateAsync('@document-management:terms.common.documents-description', {\n params: { count, size: formattedSize },\n });\n }\n\n private isDriveContentLoading(): boolean {\n return this.vm.isLoading() || this.vm.currentNode() == null;\n }\n\n override getBackButton(): AXPBackButton | null {\n if (!this.canGoBackInPage() || this.vm.currentPath().length < 2) return null;\n return {\n title: this.vm.currentPath()[this.vm.currentPath().length - 2]!.name,\n };\n }\n\n override onBackButtonClick(): void | Promise<void> {\n if (this.canGoBackInPage()) {\n this.vm.navigateToUp();\n }\n }\n\n /** Return empty so the page does not show a second breadcrumb bar; main breadcrumb stays at top. */\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n const folderId = command.options?.['folderId'] as string;\n switch (command.name) {\n case 'deleteItems':\n await this.vm.deleteNodes(this.vm.selectedNodes());\n break;\n case 'navigate-to-folder':\n if (folderId) this.vm.navigateToFolder(folderId);\n break;\n case 'new-folder':\n if (folderId) {\n const allowedNames = this.getAllowedDocumentTypeNames();\n await this.driveService.showCreateFolderDialog(folderId, {\n allowedDocumentTypeNames: allowedNames,\n });\n this.vm.refresh();\n }\n break;\n case 'open-file-viewer':\n if (folderId) {\n await this.vm.openFileViewerWithFolderId();\n }\n break;\n default:\n if (typeof command.name === 'string' && command.name.startsWith('upload.')) {\n await this.driveService.uploadFileByType(folderId, command.options?.['documentType']?.id, {\n scope: this.vm.scope(),\n });\n this.vm.refresh();\n }\n break;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"flex min-h-0 min-w-0 flex-col gap-2\">\n <!-- Back (left) + View Mode & Detail Panel Toggle (right) -->\n <div class=\"flex justify-between items-center\">\n <div class=\"flex gap-2 items-center\">\n @if (canGoBackInPage()) {\n <ax-button (onClick)=\"handleBack()\" [title]=\"'@general:actions.back.title' | translate | async\">\n <ax-icon icon=\"fa-light fa-arrow-left\"></ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"flex gap-2 items-center\">\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <ax-button-item\n [text]=\"('@document-management:view-modes.' + item.key | translate | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if (deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </div>\n </div>\n <div class=\"flex min-h-0 min-w-0 flex-1 flex-row gap-4 overflow-hidden\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"sticky top-0 z-50 h-full w-80 shrink-0\"></axm-document-explorer-detail-panel>\n }\n </div>\n</div>\n\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex-platform/framework-client/layout/components';\nimport { Injectable } from '@angular/core';\nimport { DOCUMENT_DRIVE_PAGE_COMPONENT_KEY } from '../document.plugin';\n\n//#region ---- Document Drive Page Component Provider ----\n\n@Injectable()\nexport class AXMDocumentDrivePageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./document-drive-page.component').then((m) => m.AXMDocumentDrivePageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport {\n AXP_PLATFORM_ERROR_CODES,\n type AXPFileStorageInfo,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXPFileStorageService,\n extractRequestErrorInfo,\n platformErrorI18nKey,\n} from '@acorex-platform/framework-client/common';\nimport { AXPDebugService } from '@acorex-platform/framework-client/core';\nimport {\n AXPEntityStorageMiddleware,\n AXPEntityDefinitionRegistryService,\n AXPMiddlewareAbortError,\n} from '@acorex-platform/framework-client/layout/entity';\n\nconst ATTACHMENTS_UPLOAD_TRACE_NS = 'attachments-upload';\n\nconst FILE_PREFIX = 'file:';\nconst DOCUMENT_PREFIX = 'document:';\nconst REFERENCE_PREFIX = 'reference:';\n\nfunction isStorageRef(value: unknown): value is string {\n return (\n typeof value === 'string' &&\n (value.startsWith(FILE_PREFIX) || value.startsWith(DOCUMENT_PREFIX) || value.startsWith(REFERENCE_PREFIX))\n );\n}\n\n/** Persisted token for an attachment that is already stored (file, document link, or other reference). */\nfunction persistedAttachmentToken(item: unknown): string | undefined {\n if (isStorageRef(item)) {\n return item;\n }\n if (!item || typeof item !== 'object') {\n return undefined;\n }\n const source = (item as { source?: { kind?: string; value?: unknown } }).source;\n if (source?.kind === 'fileId' && typeof source.value === 'string') {\n const id = source.value.replace(/^file:/, '').trim();\n return id ? `${FILE_PREFIX}${id}` : undefined;\n }\n if (source?.kind === 'reference' && source.value && typeof source.value === 'object') {\n const reference = source.value as { id?: string; type?: string };\n const id = typeof reference.id === 'string' ? reference.id.trim() : '';\n const type = typeof reference.type === 'string' ? reference.type.trim() : '';\n if (!id || !type) {\n return undefined;\n }\n if (type === 'document') {\n return `${DOCUMENT_PREFIX}${id}`;\n }\n return `${REFERENCE_PREFIX}${type}:${id}`;\n }\n return undefined;\n}\n\nfunction getDocumentMetaDataForm(\n item: { meta?: { metaDataForm?: Record<string, unknown> }; metaDataForm?: Record<string, unknown> } | undefined,\n): Record<string, unknown> | undefined {\n if (item?.meta?.metaDataForm != null) return item.meta.metaDataForm;\n if (item?.metaDataForm != null) return item.metaDataForm;\n if (item?.meta != null && typeof item.meta === 'object' && !Array.isArray(item.meta)) {\n const m = item.meta as Record<string, unknown>;\n return (m['metaDataForm'] as Record<string, unknown> | undefined) ?? m;\n }\n return undefined;\n}\n\n/** Resolve list of attachment field names from entity extensions.attachments. */\nfunction getAttachmentFields(attachCfg: any): string[] {\n if (!attachCfg || typeof attachCfg !== 'object') return [];\n if (typeof (attachCfg as { field?: string }).field === 'string') return [(attachCfg as { field: string }).field];\n return Object.keys(attachCfg).filter((k) => k && typeof k === 'string');\n}\n\n/** Fallback: get attachment field names from properties with file-uploader interface (when extensions.attachments is missing e.g. cached def). */\nfunction getAttachmentFieldsFromProperties(def: any): string[] {\n const props = def?.properties as Array<{ name: string; schema?: { interface?: { type?: string } } }> | undefined;\n if (!Array.isArray(props)) return [];\n return props\n .filter((p) => p?.schema?.interface?.type === 'attachments' && p?.name)\n .map((p) => p.name);\n}\n\n/**\n * Handles file list fields configured via entity.extensions.attachments.\n * Preserves metaDataForm from widget; uploads pending blobs after persistence and writes final references.\n * Runs before file-cast (order 25) so blobs are uploaded before file-cast sees the data.\n */\n// Run before file-cast (order 25) so blobs are uploaded and refs written before file-cast sees the data\nexport const attachmentsUploadMiddleware: AXPEntityStorageMiddleware = {\n target: { ops: ['create', 'update'], order: 22 },\n execute: async (ctx, next) => {\n const registry = inject(AXPEntityDefinitionRegistryService);\n const storage = inject(AXPFileStorageService);\n const debug = inject(AXPDebugService);\n const [moduleName, entityNameOnly] = ctx.entityName.split('.');\n const def = await registry.resolve(moduleName, entityNameOnly).catch(() => null as any);\n const attachCfg = (def as any)?.extensions?.attachments;\n let fields = getAttachmentFields(attachCfg);\n if (!fields.length && def) fields = getAttachmentFieldsFromProperties(def);\n if (!fields.length) {\n await next();\n return;\n }\n\n const pendingByField = (ctx.locals as any).attach_pending ?? {};\n (ctx.locals as any).attach_pending = pendingByField;\n\n if (ctx.data && typeof ctx.data === 'object') {\n for (const field of fields) {\n const list: any[] = Array.isArray((ctx.data as any)[field]) ? (ctx.data as any)[field] : [];\n pendingByField[field] = [] as Array<{ fileItem: any; blob: File }>;\n const normalized: any[] = [];\n\n for (const item of list) {\n const metaDataForm = getDocumentMetaDataForm(item);\n\n if (item?.status === 'deleted' && item?.source?.kind === 'reference') {\n continue;\n }\n\n const referenceToken = persistedAttachmentToken(item);\n if (item?.source?.kind === 'reference' && referenceToken) {\n // Rename/title edits must reach file-cast so the drive document is updated.\n // A bare document token drops the new name and the next load shows the old one.\n if (item.status === 'editing') {\n normalized.push({\n id: item.id,\n name: item.name,\n title: item.title,\n description: item.description,\n size: item.size,\n status: item.status,\n source: { kind: 'reference', value: item.source.value },\n });\n } else {\n normalized.push(referenceToken);\n }\n } else if (item?.source?.kind === 'blob' && item.source.value instanceof Blob) {\n const blob = item.source.value as File;\n const name = item.name || `file-${Date.now()}`;\n pendingByField[field].push({ fileItem: { ...item, name, metaDataForm }, blob });\n const entry: any = {\n tempId: item.id,\n name,\n size: item.size ?? (blob as File).size,\n status: 'pending_upload',\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n } else if (item?.source?.kind === 'fileId' && item.id && typeof item.source.value === 'string') {\n const entry: any = {\n id: item.id,\n name: item.name,\n size: item.size,\n status: item.status || 'uploaded',\n source: { kind: 'fileId', value: item.source.value },\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n } else if (item?.id && item?.name) {\n const entry: any = {\n id: item.id,\n name: item.name,\n size: item.size,\n status: item.status || 'uploaded',\n source: item.source ? { kind: item.source.kind, value: item.source.value } : undefined,\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n }\n }\n\n const dataForBackend = normalized.filter((x: any) => x.status !== 'pending_upload');\n (ctx.data as any)[field] = dataForBackend;\n }\n }\n\n await next();\n\n const refId = ctx.op === 'create' ? String(ctx.result) : String(ctx.id);\n const refType = ctx.entityName;\n\n for (const field of fields) {\n const pending: Array<{ fileItem: any; blob: File }> = pendingByField[field] ?? [];\n if (!pending.length) continue;\n if (!storage) continue;\n\n const stored: unknown[] = Array.isArray((ctx.data as any)[field]) ? (ctx.data as any)[field] : [];\n const finalRefs: string[] = stored\n .filter((entry) => (entry as { status?: string })?.status !== 'deleted')\n .map((entry) => persistedAttachmentToken(entry))\n .filter((token): token is string => Boolean(token));\n\n for (const { fileItem, blob } of pending) {\n const metaDataForm = fileItem.metaDataForm ?? getDocumentMetaDataForm(fileItem);\n try {\n const info: AXPFileStorageInfo = await storage.save({\n file: blob,\n refId,\n refType,\n category: '',\n name: fileItem.name,\n });\n await storage.commit(info.fileId);\n finalRefs.push(`${FILE_PREFIX}${info.fileId}`);\n } catch (err: unknown) {\n const info = extractRequestErrorInfo(err);\n debug.warn(ATTACHMENTS_UPLOAD_TRACE_NS, 'patch', 'Pending attachment upload failed', () => ({\n entityName: ctx.entityName,\n field,\n name: fileItem.name,\n code: info?.code,\n error: info?.message ?? (err instanceof Error ? err.message : String(err)),\n note: 'Blob upload or commit failed for pending attachment',\n }));\n const code = info?.code ?? AXP_PLATFORM_ERROR_CODES.FILE_UPLOAD_FAILED;\n throw new AXPMiddlewareAbortError(\n platformErrorI18nKey(code) ?? '@general:widgets.file-uploader.messages.upload-failed',\n {\n code,\n status: info?.status ?? 500,\n details: {\n entityName: ctx.entityName,\n field,\n name: fileItem.name,\n cause: info?.message ?? (err instanceof Error ? err.message : String(err)),\n },\n },\n );\n }\n }\n\n const entityId = ctx.op === 'create' ? ctx.result : ctx.id;\n if (entityId != null) {\n const payload = { [field]: finalRefs } as Record<string, string[]>;\n try {\n await ctx.backend.updateOne(ctx.entityName, entityId, payload);\n } catch (err: unknown) {\n const info = extractRequestErrorInfo(err);\n debug.warn(ATTACHMENTS_UPLOAD_TRACE_NS, 'patch', 'Attachment refs patch failed', () => ({\n entityName: ctx.entityName,\n entityId,\n field,\n code: info?.code,\n error: info?.message ?? (err instanceof Error ? err.message : String(err)),\n note: 'Backend updateOne failed after uploading attachment refs',\n }));\n const code = info?.code ?? AXP_PLATFORM_ERROR_CODES.FILE_UPLOAD_FAILED;\n throw new AXPMiddlewareAbortError(\n platformErrorI18nKey(code) ?? '@general:widgets.file-uploader.messages.upload-failed',\n {\n code,\n status: info?.status ?? 500,\n details: {\n entityName: ctx.entityName,\n entityId,\n field,\n cause: info?.message ?? (err instanceof Error ? err.message : String(err)),\n },\n },\n );\n }\n }\n if (typeof ctx.result === 'object' && ctx.result !== null) {\n ctx.result = { ...(ctx.result as Record<string, unknown>), [field]: finalRefs };\n }\n }\n },\n};\n\n","import { inject } from '@angular/core';\nimport {\n AXP_PLATFORM_ERROR_CODES,\n type AXPFileListItem,\n type AXPFileStorageInfo,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXPFileStorageService,\n extractRequestErrorInfo,\n platformErrorI18nKey,\n} from '@acorex-platform/framework-client/common';\nimport {\n AXPEntityStorageMiddleware,\n AXPMiddlewareAbortError,\n} from '@acorex-platform/framework-client/layout/entity';\n\n//#region ---- Document fileInfo upload middleware ----\n\nfunction isBlobFileInfo(fileInfo: unknown): fileInfo is AXPFileListItem {\n if (!fileInfo || typeof fileInfo !== 'object') {\n return false;\n }\n const item = fileInfo as AXPFileListItem;\n return item.source?.kind === 'blob' && item.source.value instanceof Blob;\n}\n\nasync function uploadBlobFileInfo(\n fileInfo: AXPFileListItem,\n refId: string | undefined,\n refType: string,\n storage: AXPFileStorageService,\n): Promise<AXPFileListItem> {\n const blob = fileInfo.source!.value as File;\n const info: AXPFileStorageInfo = await storage.save({\n file: blob,\n name: fileInfo.name ?? blob.name,\n refId: refId ?? 'pending',\n refType,\n category: 'document',\n });\n await storage.commit(info.fileId);\n return {\n id: info.fileId,\n name: info.name ?? fileInfo.name ?? blob.name,\n size: info.size ?? fileInfo.size ?? blob.size,\n status: 'uploaded',\n source: { kind: 'fileId', value: info.fileId },\n title: fileInfo.title,\n description: fileInfo.description,\n };\n}\n\n/**\n * Uploads blob `fileInfo` on Document create/update before the API call.\n * Blobs do not survive JSON serialization; server file-cast only handles Blob on the server.\n * Runs before attachments upload (22) and server file-cast (25).\n */\nexport const documentFileInfoUploadMiddleware: AXPEntityStorageMiddleware = {\n target: {\n entity: /^DocumentManagement\\.Document(Version)?$/,\n ops: ['create', 'update'],\n order: 20,\n },\n execute: async (ctx, next) => {\n const data = ctx.data as Record<string, unknown> | undefined;\n const rawFileInfo = data?.['fileInfo'];\n if (!rawFileInfo || typeof rawFileInfo === 'string') {\n await next();\n return;\n }\n\n const fileInfo = rawFileInfo as AXPFileListItem;\n if (!isBlobFileInfo(fileInfo)) {\n await next();\n return;\n }\n\n const storage = inject(AXPFileStorageService);\n const refId = ctx.op === 'update' && ctx.id != null ? String(ctx.id) : undefined;\n try {\n data!['fileInfo'] = await uploadBlobFileInfo(fileInfo, refId, ctx.entityName, storage);\n } catch (error) {\n const info = extractRequestErrorInfo(error);\n const code = info?.code ?? AXP_PLATFORM_ERROR_CODES.FILE_UPLOAD_FAILED;\n throw new AXPMiddlewareAbortError(\n platformErrorI18nKey(code) ?? '@general:widgets.file-uploader.messages.upload-failed',\n {\n code,\n status: info?.status ?? 500,\n details: {\n entityName: ctx.entityName,\n name: fileInfo.name,\n cause: info?.message ?? (error instanceof Error ? error.message : String(error)),\n },\n },\n );\n }\n\n await next();\n },\n};\n\n//#endregion\n","import { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex-platform/framework-client/layout/components';\r\nimport { AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_STORAGE_MIDDLEWARE } from '@acorex-platform/framework-client/layout/entity';\r\nimport { AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';\r\nimport { AXP_FILE_ACTION_PROVIDER, AXP_MENU_PROVIDER, AXP_PROTECTED_ROUTE_GUARDS, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex-platform/framework-client/common';\r\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\r\nimport { inject, NgModule } from '@angular/core';\r\nimport { AXPDocumentManagementFeatureDefinitionProvider } from './feature-definition.provider';\r\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\r\nimport { AXMMenuProvider } from './menu.provider';\r\nimport { AXMDocumentExpiredBadgeProvider } from './badge.provider';\r\n\r\nimport { AXMSearchCommandProvider } from './search-command.provider';\r\nimport { AXPDocumentManagementSettingProvider } from './settings.provider';\r\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\r\nimport { AXMDocumentManagementWidgetsProvider } from './widget-definition.provider';\r\nimport { ROUTES, Routes } from '@angular/router';\r\n// Entity Modules\r\n\r\nimport { AXMDocumentExpirationStatusProvider } from './features/shared/document-expiration-status.provider';\r\nimport { AXMDocumentManagerService, AXMDocumentManagerServiceImpl } from './features/shared/document-manager.service';\r\nimport { AXMDocumentManagementApiService } from './features/shared/document-management-api.service';\r\nimport { AXPDocumentManagementService } from './features/shared/document-management.service';\r\nimport { provideFileViewer, AXP_TASK_BADGE_PROVIDERS } from '@acorex-platform/framework-client/layout/components';\r\nimport { AXMDriveChooseModule } from './features/drive-choose/drive-choose.module';\r\nimport { AXMFileTypeModule } from './features/file-type/file-type.module';\r\nimport { AXP_HOOK_PROVIDER } from '@acorex-platform/framework-client/core';\r\nimport { DocumentFileUploaderActionsByTypeProvider, DocumentFileUploaderWidgetPluginProviders } from './features/shared/document-file-uploader.widget.plugin';\r\nfunction routesFacory() {\r\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\r\n const routes: Routes = [\r\n {\r\n path: ':app/drive/:scope',\r\n loadComponent: () => {\r\n return config.viewers.root();\r\n },\r\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\r\n data: { tab: true, rootLayout: true },\r\n children: [\r\n {\r\n path: '',\r\n loadComponent: () => import('./features/drive/drive.component').then((c) => c.AXMDocumentDriveComponent),\r\n },\r\n {\r\n path: ':id',\r\n loadComponent: () => import('./features/drive/drive.component').then((c) => c.AXMDocumentDriveComponent),\r\n },\r\n ],\r\n },\r\n ];\r\n return routes;\r\n}\r\n\r\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\r\nimport { documentPlugin } from './features/document-plugin';\r\nimport { AXMDocumentDrivePageComponentProvider } from './features/document-plugin/document-drive-page';\r\nimport { attachmentsUploadMiddleware } from './features/shared/attachments-upload.middleware';\r\nimport { documentFileInfoUploadMiddleware } from './features/shared/document-file-info-upload.middleware';\r\n\r\n@NgModule({\r\n imports: [\r\n AXMDriveChooseModule,\r\n AXMFileTypeModule,\r\n // Entity Modules\r\n AXPWidgetCoreModule,\r\n ],\r\n exports: [],\r\n\r\n providers: [\r\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDocumentManagementWidgetsProvider, multi: true },\r\n { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: documentPlugin },\r\n { provide: AXP_PAGE_COMPONENT_PROVIDER, multi: true, useClass: AXMDocumentDrivePageComponentProvider },\r\n { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: documentFileInfoUploadMiddleware },\r\n { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: attachmentsUploadMiddleware },\r\n {\r\n provide: AXP_STATUS_PROVIDERS,\r\n useClass: AXMDocumentExpirationStatusProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_TASK_BADGE_PROVIDERS,\r\n useClass: AXMDocumentExpiredBadgeProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: ROUTES,\r\n multi: true,\r\n useFactory: routesFacory,\r\n },\r\n ...DocumentFileUploaderWidgetPluginProviders.map((p) => ({\r\n provide: AXP_HOOK_PROVIDER,\r\n useValue: p,\r\n multi: true,\r\n })),\r\n {\r\n provide: AXP_FILE_ACTION_PROVIDER,\r\n useValue: DocumentFileUploaderActionsByTypeProvider,\r\n multi: true,\r\n },\r\n // Provider references (now using tokens)\r\n {\r\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\r\n useClass: AXPDocumentManagementFeatureDefinitionProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\r\n useClass: AXMPermissionDefinitionProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_MENU_PROVIDER,\r\n useClass: AXMMenuProvider,\r\n multi: true,\r\n },\r\n \r\n {\r\n provide: AXP_SEARCH_PROVIDER,\r\n useClass: AXMSearchCommandProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXP_SETTING_DEFINITION_PROVIDER,\r\n useClass: AXPDocumentManagementSettingProvider,\r\n multi: true,\r\n },\r\n {\r\n provide: AXMDocumentManagerService,\r\n useClass: AXMDocumentManagerServiceImpl,\r\n },\r\n {\r\n provide: AXPDocumentManagementService,\r\n useClass: AXMDocumentManagementApiService,\r\n },\r\n ...provideFileViewer(),\r\n provideCommandSetups([\r\n {\r\n key: 'DocumentManagement.Document:Upload',\r\n command: () =>\r\n import('./features/commands/upload-document.command').then((c) => c.AXMUploadDocumentCommand),\r\n },\r\n {\r\n key: 'DocumentManagement.Document:Open',\r\n command: () =>\r\n import('./features/commands/open-document.command').then((c) => c.AXMOpenDocumentCommand),\r\n },\r\n {\r\n key: 'DocumentManagement.Document:Distribute',\r\n command: () =>\r\n import('./features/commands/distribute-document.command').then((c) => c.AXMDistributeDocumentCommand),\r\n },\r\n {\r\n key: 'DocumentManagement.DocumentDistribution:SignOff',\r\n command: () =>\r\n import('./features/commands/sign-distributed-document.command').then(\r\n (c) => c.AXMSignDistributedDocumentCommand,\r\n ),\r\n },\r\n {\r\n key: 'DocumentManagement.Document:RequestReview',\r\n command: () =>\r\n import('./features/commands/request-document-review.command').then(\r\n (c) => c.AXMRequestDocumentReviewCommand,\r\n ),\r\n },\r\n {\r\n key: 'DocumentManagement.DocumentReview:SignOff',\r\n command: () =>\r\n import('./features/commands/sign-document-review.command').then((c) => c.AXMSignDocumentReviewCommand),\r\n },\r\n ]),\r\n ],\r\n})\r\nexport class AXMDocumentManagementModule { }\r\n","\nimport { AXPActionMenuItem, AXPBackButton, AXPBreadcrumbItem, AXPExecuteCommand, AXPFilterDefinition, AXPFilterQuery, AXPPlatformScope, collectQueryFilterLeaves, isQueryFilterAllNode, resolvePlatformScopeKey, resolvePlatformScopeName } from '@acorex-platform/framework-shared/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileTypeProviderService } from '@acorex-platform/framework-client/common';\nimport { AXPQueryFiltersComponent, AXPThemeLayoutBlockComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex-platform/framework-client/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n HostListener,\n inject,\n OnDestroy,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { AXPDeviceService } from '@acorex-platform/framework-client/core';\nimport { ActivatedRoute, ParamMap, RouterModule } from '@angular/router';\nimport { RootConfig } from '@acorex-platform/module-document-management-client/contracts';\nimport { combineLatest, Observable } from 'rxjs';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../document-explorer';\nimport { AXMDocumentExplorerDetailPanelComponent } from '../document-explorer/views/detail-panel/detail-panel.component';\nimport { AXMDocumentManagerService } from '../shared';\nimport { AXMDocumentSelectionMode } from '../shared/document-manager.types';\n\n/**\n * Walks `ActivatedRoute` ancestors until a `scope` param is found (`:app/drive/:scope` may not be the direct parent).\n */\nfunction readDriveScopeSegmentFromRoute(route: ActivatedRoute): string | undefined {\n let current: ActivatedRoute | null = route;\n while (current) {\n const raw = current.snapshot.paramMap.get('scope');\n if (raw != null && String(raw).trim() !== '') {\n return String(raw).trim().toLowerCase();\n }\n current = current.parent;\n }\n return undefined;\n}\n\n/** Finds the route that owns `:scope` so we can react when My Drive ↔ Tenant Documents switches. */\nfunction findDriveScopeRoute(route: ActivatedRoute): ActivatedRoute | null {\n let current: ActivatedRoute | null = route;\n while (current) {\n const raw = current.snapshot.paramMap.get('scope');\n if (raw != null && String(raw).trim() !== '') {\n return current;\n }\n current = current.parent;\n }\n return null;\n}\n\n@Component({\n selector: 'axp-document-drive',\n templateUrl: './drive.component.html',\n styleUrls: ['./drive.component.css'],\n standalone: true,\n imports: [\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n //\n AXMDocumentExplorerComponent,\n AXMDocumentExplorerDetailPanelComponent,\n AXPQueryFiltersComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDocumentExplorerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDocumentDriveComponent,\n },\n ],\n})\nexport class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {\n private readonly entityService = inject(AXPEntityService);\n //#region ---------------- Services & Dependencies ----------------\n\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n private readonly documentTypeService = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentType.name)\n .data<any, any>();\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n protected readonly activatedRoute = inject(ActivatedRoute);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---------------- View Properties ----------------\n\n private previousFolderId: string | null = null;\n\n /** When true, in-flight async work must not call `router.navigate` or sync layout loading. */\n private driveViewDestroyed = false;\n\n /** Bumps on each `loadDrive` so overlapping navigations (user ↔ tenant) discard stale results. */\n private loadDriveGeneration = 0;\n\n /** Filter definitions: document type (cascade parent) + metadata + search + file type. */\n protected advancedFilterDefinitions = signal<AXPFilterDefinition[]>([]);\n\n /** Active metadata filters from the query filter panel (same shape as {@link AXPFilterQuery}). */\n private activeMetadataFilters = signal<AXPFilterQuery[]>([]);\n\n /** Options for the document type filter (drive search). */\n private documentTypeFilterOptions = signal<Array<{ id: string; title: string }>>([]);\n\n /**\n * Initial filters for axp-query-filters (URL search on first load, or preserved filters after cascade refresh).\n */\n protected panelInitialFilters = signal<AXPFilterQuery[]>([]);\n\n /** Bumps when the filter panel is recreated after document type changes (clears stale metadata chips). */\n protected queryFiltersKey = signal(0);\n\n /** Last document type ids used to load metadata field definitions (cascade detection). */\n private lastAppliedDocumentTypeIds = signal<string[]>([]);\n\n /** Normalized document type ids from the panel; used for search API. */\n private activeDocumentTypeFilterIds = signal<string[]>([]);\n\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n\n protected readonly viewsItems = computed(() => [\n { key: 'large-icons', icon: 'fa-light fa-grid' },\n { key: 'small-icons', icon: 'fa-light fa-grid', break: true },\n { key: 'large-tiles', icon: 'fa-grid-2' },\n { key: 'small-tiles', icon: 'fa-grid-2', break: true },\n { key: 'list', icon: 'fa-list' },\n { key: 'details', icon: 'fa-light fa-table', break: true },\n ]);\n\n protected readonly selectedViewMode = computed(\n () => this.viewsItems().find((item) => item.key === this.vm.viewMode()) || this.viewsItems()[0],\n );\n protected readonly selectionMode = signal<AXMDocumentSelectionMode>('single');\n protected documentExplorer = viewChild(AXMDocumentExplorerComponent);\n\n //#endregion\n\n //#region ---------------- Computed Properties ----------------\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) || items[0];\n });\n\n //#endregion\n\n //#region ---------------- Effects ----------------\n\n #navigateEffect = effect(() => {\n const navigatingFolderId = this.vm.navigatingFolderId();\n if (navigatingFolderId) {\n this.handleNavigateToFolder(navigatingFolderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layoutService.setNavigationLoading(isLoading);\n });\n });\n\n #pageMetadataEffect = effect(() => {\n this.vm.isLoading();\n this.vm.currentNode();\n this.vm.selectedCount();\n this.vm.viewMode();\n untracked(() => {\n this.recompute();\n });\n });\n\n //#endregion\n\n //#region ---------------- Lifecycle Hooks ----------------\n\n ngOnDestroy(): void {\n this.driveViewDestroyed = true;\n // Balance `setNavigationLoading(true)` from `#loadingEffect` when the view is torn down while still loading.\n if (this.vm.isLoading()) {\n this.layoutService.setNavigationLoading(false);\n }\n }\n\n override async ngOnInit() {\n super.ngOnInit();\n // Resolve scope from the route before loading filter definitions (see `initialize` early `patchState`\n // in the explorer view model so `scope` is correct before any async gap while filters mount).\n const snapshot = this.activatedRoute.snapshot;\n const searchParam = snapshot.queryParams['search'];\n this.panelInitialFilters.set(\n searchParam && typeof searchParam === 'string' && searchParam.trim()\n ? [{ field: 'all', value: searchParam.trim(), operator: { type: 'contains' } }]\n : [],\n );\n\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n const routerScope = resolvePlatformScopeKey(scopeSegment ?? 'user');\n await this.vm.initialize({ browseMode: 'file', scope: routerScope as AXPPlatformScope });\n this.vm.setFileTypeFilter('all');\n\n // Filter definitions feed the filter panel only — never block the first folder load on them.\n void this.setupAdvancedFilters();\n\n const searchQuery = snapshot.queryParams['search'];\n const folderId = snapshot.paramMap.get('id');\n\n if (searchQuery) {\n if (folderId) {\n this.previousFolderId = folderId;\n await this.vm.loadFolderContents(folderId);\n await this.correctDriveUrlIfOutOfScope(folderId);\n }\n await this.performSearch(searchQuery);\n } else {\n // Folder id lives on this route; scope lives on `:app/drive/:scope` (parent).\n // Child `paramMap` alone does not fire when switching `/drive/user` ↔ `/drive/tenant`.\n const routeParamMaps: Observable<ParamMap>[] = [this.activatedRoute.paramMap];\n const scopeRoute = findDriveScopeRoute(this.activatedRoute);\n if (scopeRoute && scopeRoute !== this.activatedRoute) {\n routeParamMaps.unshift(scopeRoute.paramMap);\n }\n combineLatest(routeParamMaps)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n void this.loadDrive();\n });\n }\n\n this.activatedRoute.queryParams.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(async (params) => {\n if (!params['search'] && this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n const targetFolderId =\n this.previousFolderId ??\n (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);\n\n if (targetFolderId) {\n await this.vm.loadFolderContents(targetFolderId);\n this.previousFolderId = null;\n } else {\n this.vm.navigateToUp();\n }\n }\n });\n }\n\n //#endregion\n\n //#region ---------------- Event Handlers ----------------\n\n private async performSearch(searchValue: string) {\n this.vm.setLoading(true);\n try {\n if (!this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n this.previousFolderId = currentNode?.id ?? null;\n }\n\n const metadataFilters = this.activeMetadataFilters();\n const hasMetadataFilters = metadataFilters.length > 0;\n const documentTypeIds = this.activeDocumentTypeFilterIds();\n const hasDocTypeFilter = documentTypeIds.length > 0;\n\n const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {\n folderId: this.vm.isVirtual() ? (this.previousFolderId ?? undefined) : (this.vm.currentNode()?.id ?? undefined),\n ...(hasMetadataFilters ? { metadataFilters } : {}),\n ...(hasDocTypeFilter ? { documentTypeIds } : {}),\n });\n\n const currentNode = this.vm.currentNode();\n const folderIdForParent = this.vm.isVirtual()\n ? (currentNode?.parentId ?? this.previousFolderId ?? undefined)\n : (currentNode?.id ?? this.previousFolderId ?? undefined);\n\n await this.vm.virtualFolder(result, {\n name: 'Search Result',\n parentId: folderIdForParent,\n });\n } finally {\n this.vm.setLoading(false);\n }\n }\n\n /** Handles filter changes from the query filter panel (search, file type, document type, metadata). */\n protected async handleAdvancedFiltersChanged(incoming: AXPFilterQuery[]): Promise<void> {\n const filters = collectQueryFilterLeaves(incoming);\n const docTypeFilter = filters.find((f) => f.field === 'documentTypeId');\n const documentTypeIds = this.normalizeDocumentTypeIds(docTypeFilter?.value);\n this.activeDocumentTypeFilterIds.set(documentTypeIds);\n\n if (!this.docTypeIdsEqual(documentTypeIds, this.lastAppliedDocumentTypeIds())) {\n this.lastAppliedDocumentTypeIds.set(documentTypeIds);\n await this.loadAdvancedFilterDefinitions(documentTypeIds);\n const preserved = filters.filter(\n (f) =>\n isQueryFilterAllNode(f) ||\n f.field === 'title' ||\n f.field === 'fileType' ||\n f.field === 'documentTypeId',\n );\n this.panelInitialFilters.set(preserved);\n this.queryFiltersKey.update((k) => k + 1);\n return;\n }\n\n const allFilter = filters.find((f) => isQueryFilterAllNode(f));\n const titleFilter = filters.find((f) => f.field === 'title');\n const fromAll = allFilter?.value != null ? String(allFilter.value).trim() : '';\n const fromTitle = titleFilter?.value != null ? String(titleFilter.value).trim() : '';\n const searchValue = fromAll || fromTitle;\n\n const fileTypeFilter = filters.find((f) => f.field === 'fileType');\n const fileTypeValue = fileTypeFilter?.value != null ? String(fileTypeFilter.value) : 'all';\n this.vm.setFileTypeFilter(fileTypeValue);\n\n const metaFilters: AXPFilterQuery[] = [];\n for (const filter of filters) {\n if (\n !filter.field ||\n isQueryFilterAllNode(filter) ||\n filter.field === 'title' ||\n filter.field === 'fileType' ||\n filter.field === 'documentTypeId'\n ) {\n continue;\n }\n const opType = filter.operator?.type as string | undefined;\n const isValuelessOperator = opType === 'isEmpty' || opType === 'isNotEmpty' || opType === 'isNull';\n if (!isValuelessOperator && (filter.value == null || filter.value === '')) {\n continue;\n }\n metaFilters.push({\n field: filter.field,\n value: filter.value,\n operator: filter.operator,\n logic: filter.logic,\n });\n }\n this.activeMetadataFilters.set(metaFilters);\n\n // Pristine panel (initial emission or filters fully cleared while browsing a real folder):\n // nothing to search and no URL to sync. Prevents a navigation loop during the first load,\n // where navigating here could strip the folder id from the URL and retrigger loads.\n const snapSearchRaw = this.activatedRoute.snapshot.queryParams['search'];\n const activeUrlSearch =\n snapSearchRaw != null && String(snapSearchRaw).trim() !== '' ? String(snapSearchRaw).trim() : '';\n const hasActiveFilters = searchValue.length > 0 || metaFilters.length > 0 || documentTypeIds.length > 0;\n if (!hasActiveFilters && !this.vm.isVirtual() && !activeUrlSearch) {\n return;\n }\n\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n const baseUrl = folderId\n ? `${app}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`\n : `${app}/drive/${resolvePlatformScopeName(this.vm.scope())}`;\n\n const normalizePath = (url: string): string => url.split('?')[0].replace(/^\\/+/, '');\n const currentPath = normalizePath(this.router.url);\n const targetPath = normalizePath(baseUrl);\n const snapSearch = this.activatedRoute.snapshot.queryParams['search'];\n const currentSearch = snapSearch != null && String(snapSearch).trim() !== '' ? String(snapSearch).trim() : '';\n if (currentPath !== targetPath || currentSearch !== searchValue) {\n await this.router.navigate([baseUrl], {\n queryParams: { search: searchValue || null },\n queryParamsHandling: 'merge',\n });\n }\n\n const hasDocTypeFilter = documentTypeIds.length > 0;\n if (searchValue.length > 0 || metaFilters.length > 0 || hasDocTypeFilter) {\n await this.performSearch(searchValue);\n } else if (this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n const targetFolderId =\n this.previousFolderId ??\n (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);\n\n if (targetFolderId) {\n await this.vm.loadFolderContents(targetFolderId);\n this.previousFolderId = null;\n } else {\n this.vm.navigateToUp();\n }\n }\n }\n\n @HostListener('document:keydown.control', ['$event'])\n handleCtrlKey(e: Event) {\n this.selectionMode.set('multiple');\n }\n\n @HostListener('document:keyup.control', ['$event'])\n handleCtrlKeyUp(e: Event) {\n this.selectionMode.set('single');\n }\n\n protected handleNavigateToFolder(folderId: string) {\n if (this.driveViewDestroyed) {\n return;\n }\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n const scopeSegment = resolvePlatformScopeName(this.vm.scope());\n const scopeRootId = this.vm.scopeRootId();\n const queryParams = this.activatedRoute.snapshot.queryParams;\n const targetPath =\n scopeRootId && folderId === scopeRootId\n ? `${app}/drive/${scopeSegment}`\n : `${app}/drive/${scopeSegment}/${folderId}`;\n this.router.navigate([targetPath], {\n queryParams: queryParams, // Preserve query params (e.g., search)\n queryParamsHandling: 'merge',\n });\n }\n\n //#endregion\n\n //#region ---------------- Data Loading Methods ----------------\n\n /**\n * When the URL is `/drive/user` but the loaded folder is outside the user scope root\n * (breadcrumb root differs from the backend scope root), align the URL and view model to\n * `/drive/tenant` (organization drive within the current application).\n */\n private async correctDriveUrlIfOutOfScope(folderId: string): Promise<void> {\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n if (scopeSegment !== 'user') {\n return;\n }\n\n const scopeRootId = this.vm.scopeRootId();\n const pathRootId = this.vm.currentPath()[0]?.id;\n if (!scopeRootId || !pathRootId || pathRootId === scopeRootId) {\n return;\n }\n\n await this.vm.initialize({ browseMode: 'file', scope: AXPPlatformScope.Tenant });\n await this.vm.loadFolderContents(folderId);\n\n if (this.driveViewDestroyed) {\n return;\n }\n const queryParams = this.activatedRoute.snapshot.queryParams;\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n await this.router.navigate([`${app}/drive/${resolvePlatformScopeName(AXPPlatformScope.Tenant)}/${folderId}`], {\n replaceUrl: true,\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n\n /**\n * Keeps the explorer VM scope aligned with `:scope` in the URL.\n * Returns true when scope changed (caller must reload; skip same-folder short-circuit).\n */\n private async syncScopeFromRoute(): Promise<boolean> {\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n const routerScope = resolvePlatformScopeKey(scopeSegment ?? 'user') as AXPPlatformScope;\n if (this.vm.scope() === routerScope) {\n return false;\n }\n this.previousFolderId = null;\n await this.vm.initialize({ browseMode: 'file', scope: routerScope });\n return true;\n }\n\n private async loadDrive() {\n const generation = ++this.loadDriveGeneration;\n const scopeChanged = await this.syncScopeFromRoute();\n if (this.driveViewDestroyed || generation !== this.loadDriveGeneration) {\n return;\n }\n\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n\n if (folderId) {\n if (!scopeChanged && this.vm.currentNode()?.id === folderId && !this.vm.isLoading()) {\n this.recompute();\n return;\n }\n await this.vm.loadFolderContents(folderId);\n if (this.driveViewDestroyed || generation !== this.loadDriveGeneration) {\n return;\n }\n await this.correctDriveUrlIfOutOfScope(folderId);\n } else {\n // Scope root URL has no folder id (`/drive/user` or `/drive/tenant`). Backend resolves the\n // application-scoped root from session (tenant + application + scope) — apply it directly\n // instead of redirecting to `/:id`, which remounts the drive view and triggers a second API call.\n const root = await this.driveService.getRoot(this.vm.scope());\n if (this.driveViewDestroyed || generation !== this.loadDriveGeneration) {\n return;\n }\n if (root.result) {\n await this.vm.applyLoadedFolder(root);\n }\n }\n if (this.driveViewDestroyed || generation !== this.loadDriveGeneration) {\n return;\n }\n this.recompute();\n }\n\n /**\n * Loads document type filter options and initial filter definitions in the background\n * (does not block the first folder load).\n */\n private async setupAdvancedFilters(): Promise<void> {\n const docTypes = await this.documentTypeService.query({ skip: 0, take: 1000 });\n if (this.driveViewDestroyed) {\n return;\n }\n this.documentTypeFilterOptions.set(\n (docTypes.items ?? []).map((it) => ({\n id: it.id,\n title: this.translateService.resolve(it.title ?? it.name ?? it.id),\n })),\n );\n await this.loadAdvancedFilterDefinitions([]);\n }\n\n /**\n * Loads filter definitions. Metadata fields load only when `documentTypeIds` is non-empty (cascade).\n */\n private async loadAdvancedFilterDefinitions(documentTypeIds: string[]): Promise<void> {\n const definitions: AXPFilterDefinition[] = [];\n\n definitions.push({\n field: 'all',\n title: '@document-management:drive.filters.search.title',\n icon: 'fa-light fa-magnifying-glass',\n widget: { type: 'string-filter' },\n filterType: { inline: true, advance: false },\n });\n\n const docOpts = this.documentTypeFilterOptions();\n if (docOpts.length > 0) {\n definitions.push({\n field: 'documentTypeId',\n operator: { type: 'equal' },\n title: '@document-management:drive.filters.document-type.title',\n icon: 'fa-light fa-file-lines',\n widget: {\n type: 'select-filter',\n options: {\n dataSource: docOpts,\n valueField: 'id',\n textField: 'title',\n },\n },\n filterType: { advance: true, inline: false },\n });\n }\n\n definitions.push({\n field: 'title',\n operator: { type: 'contains' },\n title: '@document-management:drive.filters.title.title',\n icon: 'fa-light fa-font',\n widget: { type: 'string-filter' },\n filterType: { advance: true, inline: false },\n });\n\n const types = await this.fileTypeService.items();\n const allTitle = await this.translateService.translateAsync('@document-management:drive.filters.file-types.all');\n const fileTypeDataSource = [\n { name: 'all', title: allTitle },\n ...types.map((t) => ({ name: t.name, title: t.title })),\n ];\n definitions.push({\n operator: { type: 'equal' },\n field: 'fileType',\n title: '@document-management:drive.filters.file-type.title',\n icon: 'fa-light fa-file',\n widget: {\n type: 'document-file-type-filter',\n options: {\n dataSource: fileTypeDataSource,\n valueField: 'name',\n textField: 'title',\n },\n },\n filterType: { advance: true, inline: false },\n });\n\n const metadataFields =\n documentTypeIds.length > 0 ? await this.driveService.getUniqueMetadataFields(documentTypeIds) : [];\n\n for (const field of metadataFields) {\n const multiple = field.widgetOptions?.['multiple'] === true;\n definitions.push({\n field: field.widgetPath?.trim() || field.name,\n operator: { type: this.getDefaultOperatorForEditor(field.widgetType, multiple) as 'contains' | 'equal' | 'in' },\n title: field.title,\n icon: this.getMetadataFieldIcon(field.widgetType),\n widget: {\n type: this.mapEditorToFilterWidget(field.widgetType),\n options: field.widgetOptions ?? {},\n },\n filterType: {\n advance: true,\n inline: false,\n },\n });\n }\n\n this.advancedFilterDefinitions.set(definitions);\n }\n\n //#region ---------------- Filter helpers ----------------\n\n /**\n * Unwraps filter widget values (e.g. select `{ value, text }`) for document type id extraction.\n */\n private unwrapFilterValue(value: unknown): unknown {\n let v = value;\n while (v != null && typeof v === 'object' && !Array.isArray(v) && 'value' in v) {\n v = (v as Record<string, unknown>)['value'];\n }\n return v;\n }\n\n private normalizeDocumentTypeIds(value: unknown): string[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v.map((x) => String(x)).filter((id) => id.length > 0);\n }\n return [String(v)];\n }\n\n private docTypeIdsEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) {\n return false;\n }\n const sa = [...a].sort();\n const sb = [...b].sort();\n return sa.every((id, i) => id === sb[i]);\n }\n\n //#endregion\n\n /** Maps metadata editor widget type to filter widget type. */\n private mapEditorToFilterWidget(editorType: string): string {\n switch (editorType) {\n case 'number-editor':\n return 'number-filter';\n case 'select-editor':\n case 'selection-list-editor':\n return 'select-filter';\n case 'date-time-editor':\n return 'date-filter';\n case 'text-editor':\n case 'large-text-editor':\n default:\n return 'string-filter';\n }\n }\n\n /** Returns default operator type name for a given editor widget type. */\n private getDefaultOperatorForEditor(editorType: string, multiple = false): string {\n switch (editorType) {\n case 'number-editor':\n return 'equal';\n case 'select-editor':\n case 'selection-list-editor':\n return multiple ? 'in' : 'equal';\n case 'date-time-editor':\n return 'equal';\n case 'text-editor':\n case 'large-text-editor':\n default:\n return 'contains';\n }\n }\n\n /** Returns an icon class based on the editor widget type. */\n private getMetadataFieldIcon(widgetType: string): string {\n switch (widgetType) {\n case 'number-editor':\n return 'fa-hashtag';\n case 'select-editor':\n case 'selection-list-editor':\n return 'fa-list';\n case 'date-time-editor':\n return 'fa-calendar';\n default:\n return 'fa-font';\n }\n }\n\n //#endregion\n\n //#region ---------------- Page Configuration Overrides ----------------\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.showSelectionDeleteActions()) {\n return [\n {\n name: 'deleteItems',\n title: '@general:actions.delete-items.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n const addItemItems = await this.vm.getFolderAddMenuItems();\n if (addItemItems.length === 0) {\n return [];\n }\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: '@document-management:actions.add-item',\n icon: 'fa-light fa-plus',\n color: 'primary',\n items: addItemItems,\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.showSelectionDeleteActions()) {\n return [\n {\n name: 'delete',\n title: '@general:actions.delete.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n return this.vm.getFolderActionMenuItems();\n }\n\n override async getPageTitle(): Promise<string> {\n if (this.isDriveContentLoading()) {\n return '@general:state-message.loading.title';\n }\n if (this.vm.isRoot()) {\n return `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.title`;\n }\n return this.vm.currentFolder()?.name || '';\n }\n\n override async getPageDescription(): Promise<string> {\n const count = this.isDriveContentLoading() ? 0 : this.vm.itemsCount();\n const size = this.isDriveContentLoading() ? 0 : this.vm.availableSpace();\n const formattedSize = await this.formatService.format(size, 'filesize');\n return this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.description`,\n {\n params: {\n count,\n size: formattedSize,\n },\n },\n );\n }\n\n private isDriveContentLoading(): boolean {\n return this.vm.isLoading() || this.vm.currentNode() == null;\n }\n\n override getBackButton(): AXPBackButton | null {\n if (this.vm.isUpAvailable() && this.vm.currentPath().length > 1) {\n return {\n title: this.vm.currentPath()[this.vm.currentPath().length - 2].name,\n };\n }\n return null;\n }\n\n override onBackButtonClick(): void | Promise<void> {\n if (this.vm.isUpAvailable()) {\n this.vm.navigateToUp();\n }\n }\n\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const path = this.vm.currentPath();\n if (!path || path.length === 0) {\n return [\n {\n title: await this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.title`,\n ),\n },\n ];\n }\n\n const breadcrumbs: AXPBreadcrumbItem[] = [];\n for (let i = 0; i < path.length; i++) {\n const node = path[i]!;\n const isLast = i === path.length - 1;\n breadcrumbs.push({\n name: node.id,\n title: node.name,\n command: isLast\n ? undefined\n : {\n name: 'navigate-to-folder',\n options: { folderId: node.id },\n },\n });\n }\n return breadcrumbs;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n const folderId = command.options?.['folderId'] as string;\n switch (command.name) {\n case 'deleteItems':\n await this.vm.deleteNodes(this.vm.selectedNodes());\n break;\n case 'navigate-to-folder':\n if (folderId) {\n this.vm.navigateToFolder(folderId);\n }\n break;\n case 'new-folder':\n if (folderId) {\n await this.driveService.showCreateFolderDialog(folderId);\n this.vm.refresh();\n }\n break;\n case 'open-file-viewer':\n if (folderId) {\n await this.vm.openFileViewerWithFolderId();\n }\n break;\n default:\n if (command.name.startsWith('upload.')) {\n const success = await this.driveService.uploadFileByType(\n folderId,\n command.options?.['documentType']?.id,\n { scope: this.vm.scope() },\n );\n if (success) {\n this.vm.refresh();\n }\n }\n break;\n }\n }\n\n //#endregion\n}\n","<!-- Main Layout -->\n<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <!-- Left Side Toolbar -->\n <div class=\"w-full flex items-center\">\n <axp-layout-prefix class=\"w-full\">\n @if (vm.hasMultipleSelectedItems() && !vm.isDetailsView()) {\n <div class=\"flex gap-3 items-center h-10\">\n <span class=\"text-xl font-bold\">\n {{ vm.selectedCount() }} {{ '@general:terms.interface.items-selected' | translate | async }}\n </span>\n <span (click)=\"vm.deselectAll()\" class=\"text-sm text-secondary underline cursor-pointer\">{{\n '@general:actions.unselect.title' | translate | async\n }}</span>\n </div>\n } @else {\n @for (_k of [queryFiltersKey()]; track _k) {\n <axp-query-filters\n [filtersDefinitions]=\"advancedFilterDefinitions()\"\n [initialFilters]=\"panelInitialFilters()\"\n (onFiltersChanged)=\"handleAdvancedFiltersChanged($event)\"\n [quickSearch]=\"true\"\n ></axp-query-filters>\n }\n }\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n\n <axp-layout-suffix class=\"flex gap-2\">\n <!-- Sort Dropdown -->\n <ax-button>\n <ax-icon\n [icon]=\"'fa-light fa-arrow-' + (vm.sortDirection() === 'asc' ? 'up' : 'down') + '-wide-short'\"\n ></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <!-- Sort By Options -->\n @for (item of sortItems(); track item.key) {\n <ax-button-item\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setSortField(item.key)\"\n [selected]=\"vm.sortField() === item.key\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-divider></ax-divider>\n <!-- Sort Direction Options -->\n <ax-button-item\n [text]=\"(t('actions.sort-ascending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'asc'\"\n (onClick)=\"vm.setSortDirection('asc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-up-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.sort-descending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'desc'\"\n (onClick)=\"vm.setSortDirection('desc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-down-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- View Mode Toggle -->\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <!-- view mode items -->\n <ax-button-item\n [text]=\"(t('view-modes.' + item.key, { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n <!-- end of view mode items -->\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n @if (deviceService.isLarge()) {\n <!-- Detail Panel Toggle -->\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </axp-layout-suffix>\n </div>\n </axp-page-toolbar>\n\n <!-- Content Section -->\n <axp-page-content class=\"flex min-w-0 flex-col overflow-x-hidden overflow-y-auto\">\n <div class=\"flex min-h-0 min-w-0 flex-1 flex-row gap-4 overflow-hidden\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"sticky top-0 z-50 h-full w-80 shrink-0\"></axm-document-explorer-detail-panel>\n }\n </div>\n </axp-page-content>\n\n <!-- Footer Section removed: breadcrumbs are now provided via page-level breadcrumbs -->\n</axp-page-layout>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i2","i3","AXPDialogOpener","isEmpty","AXPDataGenerator","asRecord","get","i1","isString","i5"],"mappings":"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"}