@acorex/modules 19.2.16 → 19.2.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 (142) hide show
  1. package/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.d.ts +4 -0
  2. package/auth/lib/pages/login/password/password.component.d.ts +1 -0
  3. package/common/lib/entities/dashboard/dashboard.types.d.ts +2 -2
  4. package/common/lib/entities/index.d.ts +0 -1
  5. package/common/lib/features/dashboard-home/dashboard-home.d.ts +113 -0
  6. package/common/lib/features/dashboard-home/dashboard-home.store.d.ts +19 -0
  7. package/common/lib/features/dashboard-home/dashboard.type.d.ts +12 -0
  8. package/common/lib/features/dashboard-popups/add-dashboard-popup.d.ts +11 -0
  9. package/common/lib/features/dashboard-popups/dashboard-popup.service.d.ts +9 -0
  10. package/common/lib/features/widget-wrapper/dashboard-widget-wrapper.d.ts +9 -0
  11. package/document-management/lib/document-management.module.d.ts +2 -1
  12. package/document-management/lib/entities/document/document.types.d.ts +4 -0
  13. package/document-management/lib/entities/folder/folder.types.d.ts +1 -0
  14. package/document-management/lib/features/document-explorer/components/rename-node-dialog/rename-node-dialog.component.d.ts +1 -1
  15. package/document-management/lib/features/document-explorer/document-explorer.component.d.ts +15 -7
  16. package/document-management/lib/features/document-explorer/document-explorer.viewmodel.d.ts +2 -2
  17. package/document-management/lib/features/drive/drive.component.d.ts +4 -0
  18. package/document-management/lib/features/drive-choose/drive-choose.component.d.ts +200 -0
  19. package/document-management/lib/features/shared/components/file-viewer-popup/file-viewer-popup.component.d.ts +9 -0
  20. package/document-management/lib/features/shared/components/file-viewer-popup/index.d.ts +1 -0
  21. package/document-management/lib/features/shared/components/index.d.ts +2 -0
  22. package/document-management/lib/features/shared/components/tree-folder-popup/index.d.ts +1 -0
  23. package/document-management/lib/features/shared/components/tree-folder-popup/tree-folder-popup.component.d.ts +20 -0
  24. package/document-management/lib/features/shared/document-manager.service.d.ts +41 -49
  25. package/document-management/lib/features/shared/document-manager.types.d.ts +3 -1
  26. package/document-management/lib/features/widgets/document-attachment/document-attachment-widget-edit.component.d.ts +113 -1
  27. package/fesm2022/{acorex-modules-application-management-module-designer.component-DPJ4qpK3.mjs → acorex-modules-application-management-module-designer.component-BSGSZi9T.mjs} +2 -2
  28. package/fesm2022/{acorex-modules-application-management-module-designer.component-DPJ4qpK3.mjs.map → acorex-modules-application-management-module-designer.component-BSGSZi9T.mjs.map} +1 -1
  29. package/fesm2022/acorex-modules-application-management.mjs +3 -3
  30. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-DTje3YIv.mjs → acorex-modules-auth-acorex-modules-auth-Xcs9ViQv.mjs} +13 -13
  31. package/fesm2022/acorex-modules-auth-acorex-modules-auth-Xcs9ViQv.mjs.map +1 -0
  32. package/fesm2022/{acorex-modules-auth-app-chooser.component-CZxX5-T_.mjs → acorex-modules-auth-app-chooser.component-0L9y_yn_.mjs} +3 -3
  33. package/fesm2022/{acorex-modules-auth-app-chooser.component-CZxX5-T_.mjs.map → acorex-modules-auth-app-chooser.component-0L9y_yn_.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-auth-login.module-B9P2XpfQ.mjs → acorex-modules-auth-login.module-CfO1IwH9.mjs} +4 -4
  35. package/fesm2022/{acorex-modules-auth-login.module-B9P2XpfQ.mjs.map → acorex-modules-auth-login.module-CfO1IwH9.mjs.map} +1 -1
  36. package/fesm2022/acorex-modules-auth-master.layout-hLuHDgvl.mjs +23 -0
  37. package/fesm2022/acorex-modules-auth-master.layout-hLuHDgvl.mjs.map +1 -0
  38. package/fesm2022/acorex-modules-auth-password.component-BztZ3DJd.mjs +132 -0
  39. package/fesm2022/acorex-modules-auth-password.component-BztZ3DJd.mjs.map +1 -0
  40. package/fesm2022/{acorex-modules-auth-password.component-C7Yp-ioT.mjs → acorex-modules-auth-password.component-CTVBARbz.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-auth-password.component-C7Yp-ioT.mjs.map → acorex-modules-auth-password.component-CTVBARbz.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-auth-routes-Bu-xB4O6.mjs → acorex-modules-auth-routes-CJz0CRlp.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-auth-routes-Bu-xB4O6.mjs.map → acorex-modules-auth-routes-CJz0CRlp.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-CKsbiOUX.mjs → acorex-modules-auth-tenant-chooser.component-kVFAR9t1.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-CKsbiOUX.mjs.map → acorex-modules-auth-tenant-chooser.component-kVFAR9t1.mjs.map} +1 -1
  46. package/fesm2022/{acorex-modules-auth-two-factor-code.component-DrV3UBuT.mjs → acorex-modules-auth-two-factor-code.component-_VYT-h-9.mjs} +2 -2
  47. package/fesm2022/{acorex-modules-auth-two-factor-code.component-DrV3UBuT.mjs.map → acorex-modules-auth-two-factor-code.component-_VYT-h-9.mjs.map} +1 -1
  48. package/fesm2022/{acorex-modules-auth-two-factor.module-YRh6_YcG.mjs → acorex-modules-auth-two-factor.module-BQfrnrd0.mjs} +3 -3
  49. package/fesm2022/{acorex-modules-auth-two-factor.module-YRh6_YcG.mjs.map → acorex-modules-auth-two-factor.module-BQfrnrd0.mjs.map} +1 -1
  50. package/fesm2022/acorex-modules-auth.mjs +1 -1
  51. package/fesm2022/acorex-modules-common-index-BAt02rnb.mjs +472 -0
  52. package/fesm2022/acorex-modules-common-index-BAt02rnb.mjs.map +1 -0
  53. package/fesm2022/acorex-modules-common.mjs +5 -505
  54. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  55. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-DagdBc6i.mjs → acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs} +562 -357
  56. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs.map +1 -0
  57. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-fNeqoZfY.mjs → acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs} +2 -2
  58. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-fNeqoZfY.mjs.map → acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs.map} +1 -1
  59. package/fesm2022/acorex-modules-document-management-drive-choose.component-CkS8s7zm.mjs +152 -0
  60. package/fesm2022/acorex-modules-document-management-drive-choose.component-CkS8s7zm.mjs.map +1 -0
  61. package/fesm2022/acorex-modules-document-management-drive.component-B6az6-_w.mjs +164 -0
  62. package/fesm2022/acorex-modules-document-management-drive.component-B6az6-_w.mjs.map +1 -0
  63. package/fesm2022/acorex-modules-document-management-file-viewer-popup.component-CaSagveT.mjs +24 -0
  64. package/fesm2022/acorex-modules-document-management-file-viewer-popup.component-CaSagveT.mjs.map +1 -0
  65. package/fesm2022/acorex-modules-document-management-index-9l8D5iEE.mjs +69 -0
  66. package/fesm2022/acorex-modules-document-management-index-9l8D5iEE.mjs.map +1 -0
  67. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-C-eCtqLa.mjs → acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs} +4 -4
  68. package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs.map +1 -0
  69. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  70. package/fesm2022/{acorex-modules-form-template-management-acorex-modules-form-template-management-szDh56Bk.mjs → acorex-modules-form-template-management-acorex-modules-form-template-management-Qnh16t3Q.mjs} +10 -10
  71. package/fesm2022/{acorex-modules-form-template-management-acorex-modules-form-template-management-szDh56Bk.mjs.map → acorex-modules-form-template-management-acorex-modules-form-template-management-Qnh16t3Q.mjs.map} +1 -1
  72. package/fesm2022/{acorex-modules-form-template-management-category.entity-BZXqnhwK.mjs → acorex-modules-form-template-management-category.entity-BjmyIav9.mjs} +3 -3
  73. package/fesm2022/{acorex-modules-form-template-management-category.entity-BZXqnhwK.mjs.map → acorex-modules-form-template-management-category.entity-BjmyIav9.mjs.map} +1 -1
  74. package/fesm2022/{acorex-modules-form-template-management-setting.provider-o2_TSVfK.mjs → acorex-modules-form-template-management-setting.provider-hkwaOGfL.mjs} +2 -2
  75. package/fesm2022/{acorex-modules-form-template-management-setting.provider-o2_TSVfK.mjs.map → acorex-modules-form-template-management-setting.provider-hkwaOGfL.mjs.map} +1 -1
  76. package/fesm2022/{acorex-modules-form-template-management-template-picker.component-BxOdV3y2.mjs → acorex-modules-form-template-management-template-picker.component-gdMTnjl-.mjs} +2 -2
  77. package/fesm2022/{acorex-modules-form-template-management-template-picker.component-BxOdV3y2.mjs.map → acorex-modules-form-template-management-template-picker.component-gdMTnjl-.mjs.map} +1 -1
  78. package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component--MGoF75g.mjs → acorex-modules-form-template-management-template-widget-edit.component-CSShokqz.mjs} +3 -3
  79. package/fesm2022/{acorex-modules-form-template-management-template-widget-edit.component--MGoF75g.mjs.map → acorex-modules-form-template-management-template-widget-edit.component-CSShokqz.mjs.map} +1 -1
  80. package/fesm2022/{acorex-modules-form-template-management-template.entity-JvWcqjzi.mjs → acorex-modules-form-template-management-template.entity-_yMAqh35.mjs} +3 -3
  81. package/fesm2022/{acorex-modules-form-template-management-template.entity-JvWcqjzi.mjs.map → acorex-modules-form-template-management-template.entity-_yMAqh35.mjs.map} +1 -1
  82. package/fesm2022/{acorex-modules-form-template-management-viewer-popup.component-Bllb70Ih.mjs → acorex-modules-form-template-management-viewer-popup.component-CbcSFEis.mjs} +3 -3
  83. package/fesm2022/{acorex-modules-form-template-management-viewer-popup.component-Bllb70Ih.mjs.map → acorex-modules-form-template-management-viewer-popup.component-CbcSFEis.mjs.map} +1 -1
  84. package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
  85. package/fesm2022/acorex-modules-notification-management.mjs +2 -2
  86. package/fesm2022/{acorex-modules-organization-management-add-item.component-Y-i6xDkl.mjs → acorex-modules-organization-management-add-item.component-Bsae9u-e.mjs} +2 -2
  87. package/fesm2022/{acorex-modules-organization-management-add-item.component-Y-i6xDkl.mjs.map → acorex-modules-organization-management-add-item.component-Bsae9u-e.mjs.map} +1 -1
  88. package/fesm2022/{acorex-modules-organization-management-branch.entity-DhObzxhh.mjs → acorex-modules-organization-management-branch.entity-e5pFx82N.mjs} +2 -2
  89. package/fesm2022/{acorex-modules-organization-management-branch.entity-DhObzxhh.mjs.map → acorex-modules-organization-management-branch.entity-e5pFx82N.mjs.map} +1 -1
  90. package/fesm2022/{acorex-modules-organization-management-chart.entity-Bk4WgsYr.mjs → acorex-modules-organization-management-chart.entity-DnmNyyD2.mjs} +2 -2
  91. package/fesm2022/{acorex-modules-organization-management-chart.entity-Bk4WgsYr.mjs.map → acorex-modules-organization-management-chart.entity-DnmNyyD2.mjs.map} +1 -1
  92. package/fesm2022/{acorex-modules-organization-management-company.entity-d7GaCVei.mjs → acorex-modules-organization-management-company.entity-BRkEcDNt.mjs} +2 -2
  93. package/fesm2022/{acorex-modules-organization-management-company.entity-d7GaCVei.mjs.map → acorex-modules-organization-management-company.entity-BRkEcDNt.mjs.map} +1 -1
  94. package/fesm2022/{acorex-modules-organization-management-department.entity-BxyeK3lU.mjs → acorex-modules-organization-management-department.entity-ChJXNpXn.mjs} +2 -2
  95. package/fesm2022/{acorex-modules-organization-management-department.entity-BxyeK3lU.mjs.map → acorex-modules-organization-management-department.entity-ChJXNpXn.mjs.map} +1 -1
  96. package/fesm2022/{acorex-modules-organization-management-division.entity-Dh54R4es.mjs → acorex-modules-organization-management-division.entity-qyDyhl-q.mjs} +2 -2
  97. package/fesm2022/{acorex-modules-organization-management-division.entity-Dh54R4es.mjs.map → acorex-modules-organization-management-division.entity-qyDyhl-q.mjs.map} +1 -1
  98. package/fesm2022/{acorex-modules-organization-management-employee.entity-DcJCJN3R.mjs → acorex-modules-organization-management-employee.entity-Cp5TejzT.mjs} +2 -2
  99. package/fesm2022/{acorex-modules-organization-management-employee.entity-DcJCJN3R.mjs.map → acorex-modules-organization-management-employee.entity-Cp5TejzT.mjs.map} +1 -1
  100. package/fesm2022/{acorex-modules-organization-management-employment-type.entity-aNkt-l_e.mjs → acorex-modules-organization-management-employment-type.entity-Ul10Mdwm.mjs} +2 -2
  101. package/fesm2022/{acorex-modules-organization-management-employment-type.entity-aNkt-l_e.mjs.map → acorex-modules-organization-management-employment-type.entity-Ul10Mdwm.mjs.map} +1 -1
  102. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-aMPR3Oyw.mjs +92 -0
  103. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-aMPR3Oyw.mjs.map +1 -0
  104. package/fesm2022/{acorex-modules-organization-management-org-chart.page-DXyAFXwE.mjs → acorex-modules-organization-management-org-chart.page-CAgSSVON.mjs} +15 -15
  105. package/fesm2022/acorex-modules-organization-management-org-chart.page-CAgSSVON.mjs.map +1 -0
  106. package/fesm2022/{acorex-modules-organization-management-position.entity-D17Yembh.mjs → acorex-modules-organization-management-position.entity-BpQbwW-x.mjs} +2 -2
  107. package/fesm2022/{acorex-modules-organization-management-position.entity-D17Yembh.mjs.map → acorex-modules-organization-management-position.entity-BpQbwW-x.mjs.map} +1 -1
  108. package/fesm2022/{acorex-modules-organization-management-role.entity-Cmbyle8P.mjs → acorex-modules-organization-management-role.entity-B9N4qA_E.mjs} +2 -2
  109. package/fesm2022/{acorex-modules-organization-management-role.entity-Cmbyle8P.mjs.map → acorex-modules-organization-management-role.entity-B9N4qA_E.mjs.map} +1 -1
  110. package/fesm2022/{acorex-modules-organization-management-team.entity-DcurAtLd.mjs → acorex-modules-organization-management-team.entity-7q6Eg74A.mjs} +2 -2
  111. package/fesm2022/{acorex-modules-organization-management-team.entity-DcurAtLd.mjs.map → acorex-modules-organization-management-team.entity-7q6Eg74A.mjs.map} +1 -1
  112. package/fesm2022/acorex-modules-organization-management.mjs +15 -13
  113. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  114. package/fesm2022/{acorex-modules-platform-management-list-version.component-CoZBz85x.mjs → acorex-modules-platform-management-list-version.component-DI1wKhRv.mjs} +2 -2
  115. package/fesm2022/{acorex-modules-platform-management-list-version.component-CoZBz85x.mjs.map → acorex-modules-platform-management-list-version.component-DI1wKhRv.mjs.map} +1 -1
  116. package/fesm2022/acorex-modules-platform-management.mjs +10 -8
  117. package/fesm2022/acorex-modules-platform-management.mjs.map +1 -1
  118. package/fesm2022/acorex-modules-scheduler-job-management.mjs +1 -1
  119. package/fesm2022/acorex-modules-security-management.mjs +1 -1
  120. package/fesm2022/acorex-modules-text-template-management.mjs +1 -1
  121. package/organization-management/lib/features/organization-chart/org-chart-configuration.page.d.ts +4 -0
  122. package/organization-management/lib/features/organization-chart/org-chart.page.d.ts +4 -0
  123. package/package.json +1 -1
  124. package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.entity.d.ts +0 -3
  125. package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.service.d.ts +0 -10
  126. package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.types.d.ts +0 -9
  127. package/common/lib/entities/dashboard-widget-data/index.d.ts +0 -3
  128. package/common/lib/features/home/dashboard-home.d.ts +0 -5
  129. package/document-management/lib/features/drive/index.d.ts +0 -3
  130. package/fesm2022/acorex-modules-auth-acorex-modules-auth-DTje3YIv.mjs.map +0 -1
  131. package/fesm2022/acorex-modules-auth-master.layout-BYC0FYq1.mjs +0 -23
  132. package/fesm2022/acorex-modules-auth-master.layout-BYC0FYq1.mjs.map +0 -1
  133. package/fesm2022/acorex-modules-auth-password.component-DzrYH4yM.mjs +0 -127
  134. package/fesm2022/acorex-modules-auth-password.component-DzrYH4yM.mjs.map +0 -1
  135. package/fesm2022/acorex-modules-common-index-zaFxpV8u.mjs +0 -14
  136. package/fesm2022/acorex-modules-common-index-zaFxpV8u.mjs.map +0 -1
  137. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-DagdBc6i.mjs.map +0 -1
  138. package/fesm2022/acorex-modules-document-management-rename-node-dialog.component-C-eCtqLa.mjs.map +0 -1
  139. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DO8wSZqZ.mjs +0 -92
  140. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DO8wSZqZ.mjs.map +0 -1
  141. package/fesm2022/acorex-modules-organization-management-org-chart.page-DXyAFXwE.mjs.map +0 -1
  142. /package/common/lib/features/{home → dashboard-home}/index.d.ts +0 -0
@@ -1,12 +1,12 @@
1
1
  import { AXPSessionService, AXPAuthGuard, AXP_PERMISSION_PROVIDER } from '@acorex/platform/auth';
2
- import { AXPSearchCommandProvider, AXPEntityQueryType, AXPEntityCommandScope, createAllQueryView, AXPFileTypeProviderService, AXP_FILE_TYPE_INFO_PROVIDER, AXPSettingScope, AXPSettingService, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';
2
+ import { AXPSearchCommandProvider, createAllQueryView, AXPEntityCommandScope, AXPEntityQueryType, AXPFileTypeProviderService, AXP_FILE_TYPE_INFO_PROVIDER, AXPFileStorageService, AXPSettingScope, AXPSettingService, AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex/platform/common';
3
3
  import { AXPEntityService, AXMEntityCrudServiceImpl, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
4
4
  import * as i0 from '@angular/core';
5
- import { inject, Injector, Injectable, NgModule, Component, ChangeDetectionStrategy, signal, computed, viewChild, effect, untracked, ViewEncapsulation } from '@angular/core';
5
+ import { inject, Injector, Injectable, NgModule, ChangeDetectionStrategy, Component, signal, computed, viewChild, effect } from '@angular/core';
6
6
  import { firstValueFrom, Subject } from 'rxjs';
7
7
  import * as i6 from '@acorex/platform/layout/builder';
8
8
  import { AXPWidgetsCatalog, AXPWidgetComponent, AXPLayoutBuilderModule, AXP_WIDGETS_ADVANCE_GROUP, AXP_WIDGETS_EDITOR_GROUP } from '@acorex/platform/layout/builder';
9
- import { Router, ActivatedRoute, RouterModule, ROUTES } from '@angular/router';
9
+ import { RouterModule, ROUTES } from '@angular/router';
10
10
  import { AXDataSource } from '@acorex/components/common';
11
11
  import { AXMMetaDataDefinitionService } from '@acorex/modules/platform-management';
12
12
  import * as i1$1 from '@angular/common';
@@ -26,33 +26,27 @@ import { FormsModule } from '@angular/forms';
26
26
  import get from 'lodash-es/get';
27
27
  import set from 'lodash-es/set';
28
28
  import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY } from '@acorex/platform/widgets';
29
+ import * as i2$1 from '@acorex/components/button';
30
+ import { AXButtonComponent, AXButtonModule } from '@acorex/components/button';
31
+ import { AXButtonGroupModule } from '@acorex/components/button-group';
32
+ import * as i3$1 from '@acorex/components/dropdown';
33
+ import { AXDropdownModule } from '@acorex/components/dropdown';
34
+ import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
35
+ import * as i4$1 from '@acorex/core/translation';
36
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
29
37
  import { AXLoadingModule } from '@acorex/components/loading';
30
- import * as i4$1 from '@acorex/components/menu';
38
+ import * as i4 from '@acorex/components/menu';
31
39
  import { AXMenuModule } from '@acorex/components/menu';
32
40
  import { AXDateTimeModule } from '@acorex/core/date-time';
33
- import * as i8 from '@acorex/core/format';
41
+ import * as i3 from '@acorex/core/format';
34
42
  import { AXFormatModule } from '@acorex/core/format';
35
- import * as i4 from '@acorex/core/translation';
36
- import { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';
37
- import { AXPDataGenerator, AXPElementDataDirective } from '@acorex/platform/core';
43
+ import { AXPElementDataDirective } from '@acorex/platform/core';
38
44
  import { get as get$1 } from 'lodash-es';
39
- import { AXBadgeModule } from '@acorex/components/badge';
40
- import * as i6$1 from '@acorex/components/breadcrumbs';
41
- import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
42
- import * as i2$1 from '@acorex/components/button';
43
- import { AXButtonModule } from '@acorex/components/button';
44
- import { AXButtonGroupModule } from '@acorex/components/button-group';
45
- import * as i3 from '@acorex/components/dropdown';
46
- import { AXDropdownModule } from '@acorex/components/dropdown';
47
- import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
48
- import { AXPSimplePageLayout } from '@acorex/platform/themes/default';
49
- import * as i7$2 from '@acorex/components/search-box';
50
- import { AXSearchBoxModule } from '@acorex/components/search-box';
51
- import { AXFileModule } from '@acorex/core/file';
52
- import { AXPLayoutThemeService, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderTemplateComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutToolbarComponent, AXPThemeLayoutFooterComponent } from '@acorex/platform/themes/shared';
53
- import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
54
45
  import { AXDialogService } from '@acorex/components/dialog';
55
46
  import { AXPopupService } from '@acorex/components/popup';
47
+ import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
48
+ import * as i3$2 from '@acorex/components/media-viewer';
49
+ import { AXMediaViewerModule } from '@acorex/components/media-viewer';
56
50
 
57
51
  const config = {
58
52
  i18n: 'document-management',
@@ -829,7 +823,7 @@ async function documentTypeFactory(injector) {
829
823
  schema: {
830
824
  dataType: 'object',
831
825
  interface: {
832
- type: AXPWidgetsCatalog.fileTypeExtension,
826
+ type: AXPWidgetsCatalog.documentAttachment,
833
827
  options: {},
834
828
  },
835
829
  },
@@ -3011,154 +3005,6 @@ var documentAttachmentWidgetColumn_component = /*#__PURE__*/Object.freeze({
3011
3005
  AXMDocumentAttachmentWidgetColumnComponent: AXMDocumentAttachmentWidgetColumnComponent
3012
3006
  });
3013
3007
 
3014
- var AXPDocumentExplorerSettings;
3015
- (function (AXPDocumentExplorerSettings) {
3016
- AXPDocumentExplorerSettings["ViewMode"] = "document-explorer:layout:view-mode";
3017
- AXPDocumentExplorerSettings["SortField"] = "document-explorer:layout:sort-field";
3018
- AXPDocumentExplorerSettings["SortDirection"] = "document-explorer:layout:sort-direction";
3019
- })(AXPDocumentExplorerSettings || (AXPDocumentExplorerSettings = {}));
3020
-
3021
- const AXPDocumentExplorerViewModel = signalStore({ providedIn: 'root' }, withState(() => ({
3022
- // View State
3023
- viewMode: 'grid',
3024
- isLoading: false,
3025
- // Navigation State
3026
- currentPath: [],
3027
- currentNode: null,
3028
- loadingFolderId: null,
3029
- navigatingFolderId: null,
3030
- // Sort State
3031
- sortField: 'name',
3032
- sortDirection: 'asc',
3033
- // Content State
3034
- folders: [],
3035
- files: [],
3036
- itemsCount: 0,
3037
- availableSpace: 0,
3038
- // Drive State
3039
- currentDrive: null,
3040
- // File Type State
3041
- fileTypes: [],
3042
- })), withComputed((store) => ({
3043
- isRoot: computed(() => {
3044
- const node = store.currentNode();
3045
- return node?.id === 'root' || !node?.parentId;
3046
- }),
3047
- breadcrumb: computed(() => store.currentPath()),
3048
- currentFolder: computed(() => store.currentNode()),
3049
- currentFolderContents: computed(() => ({
3050
- folders: store.folders(),
3051
- files: store.files(),
3052
- })),
3053
- parentFolder: computed(() => {
3054
- const currentNode = store.currentNode();
3055
- return currentNode?.parentId ? store.folders().find(folder => folder.id === currentNode.parentId) : null;
3056
- }),
3057
- isGridView: computed(() => store.viewMode() === 'grid'),
3058
- isListView: computed(() => store.viewMode() === 'list'),
3059
- })), withMethods((store, fileTypeService = inject(AXPFileTypeProviderService), driveService = inject(AXMDocumentManagerService), settingService = inject(AXPSettingService)) => ({
3060
- async initialize(path = 'root') {
3061
- // Load file types
3062
- const fileTypes = await fileTypeService.items();
3063
- patchState(store, { fileTypes });
3064
- // Load initial settings
3065
- const viewMode = await settingService.get(AXPDocumentExplorerSettings.ViewMode);
3066
- const sortField = await settingService.get(AXPDocumentExplorerSettings.SortField);
3067
- const sortDirection = await settingService.get(AXPDocumentExplorerSettings.SortDirection);
3068
- patchState(store, {
3069
- viewMode: viewMode || 'grid',
3070
- sortField: sortField || 'name',
3071
- sortDirection: sortDirection || 'asc'
3072
- });
3073
- },
3074
- _load: async (folderId) => {
3075
- patchState(store, { loadingFolderId: folderId, isLoading: true });
3076
- await new Promise(resolve => setTimeout(resolve, 100));
3077
- try {
3078
- const node = await driveService.getFolder(folderId);
3079
- patchState(store, {
3080
- currentNode: node.result,
3081
- currentPath: node.path,
3082
- folders: node.result.children?.filter((item) => item.type === 'folder') || [],
3083
- files: node.result.children?.filter((item) => item.type === 'file') || [],
3084
- itemsCount: node.result.children?.length || 0,
3085
- availableSpace: await driveService.getAvailableSpace(),
3086
- loadingFolderId: null,
3087
- isLoading: false,
3088
- navigatingFolderId: null
3089
- });
3090
- }
3091
- catch (error) {
3092
- patchState(store, {
3093
- loadingFolderId: null,
3094
- isLoading: false
3095
- });
3096
- throw error;
3097
- }
3098
- },
3099
- navigateToFolder(folderId) {
3100
- patchState(store, { navigatingFolderId: folderId });
3101
- },
3102
- async loadFolderContents(folderId) {
3103
- await this._load(folderId);
3104
- },
3105
- setViewMode(mode) {
3106
- patchState(store, { viewMode: mode });
3107
- settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.ViewMode, mode);
3108
- },
3109
- setSortField(field) {
3110
- patchState(store, { sortField: field });
3111
- settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortField, field);
3112
- },
3113
- setSortDirection(direction) {
3114
- patchState(store, { sortDirection: direction });
3115
- settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortDirection, direction);
3116
- },
3117
- setDrive(scope) {
3118
- patchState(store, { currentDrive: scope });
3119
- },
3120
- isLoadingFolder(folderId) {
3121
- return store.loadingFolderId() === folderId;
3122
- },
3123
- getFileInfo(fileName) {
3124
- const fileTypes = store.fileTypes();
3125
- const extension = fileName.split('.').pop()?.toLowerCase() || '';
3126
- const extensions = fileTypes.flatMap(type => type.extensions);
3127
- const fileType = extensions.find(e => e.name === extension);
3128
- return {
3129
- icon: fileType?.icon || 'fa-light fa-file',
3130
- type: fileType?.name || 'Unknown'
3131
- };
3132
- },
3133
- sortItems(items) {
3134
- const field = store.sortField();
3135
- const direction = store.sortDirection();
3136
- return [...items].sort((a, b) => {
3137
- let comparison = 0;
3138
- switch (field) {
3139
- case 'name':
3140
- comparison = a.name.localeCompare(b.name);
3141
- break;
3142
- case 'modified':
3143
- const aDate = a.lastModified ? new Date(a.lastModified) : new Date(0);
3144
- const bDate = b.lastModified ? new Date(b.lastModified) : new Date(0);
3145
- comparison = aDate.getTime() - bDate.getTime();
3146
- break;
3147
- case 'size':
3148
- comparison = (a.size || 0) - (b.size || 0);
3149
- break;
3150
- }
3151
- return direction === 'asc' ? comparison : -comparison;
3152
- });
3153
- },
3154
- async refresh() {
3155
- const currentFolder = store.currentNode();
3156
- if (currentFolder) {
3157
- await this._load(currentFolder.id);
3158
- }
3159
- }
3160
- })));
3161
-
3162
3008
  var AXMDriveScope;
3163
3009
  (function (AXMDriveScope) {
3164
3010
  AXMDriveScope["Platform"] = "P";
@@ -3176,6 +3022,7 @@ class AXMDocumentManagerService {
3176
3022
  this.documentService = inject(AXMDocumentService);
3177
3023
  this.popupService = inject(AXPopupService);
3178
3024
  this.dialogService = inject(AXDialogService);
3025
+ this.fileService = inject(AXPFileStorageService);
3179
3026
  this.scopedDriveCache = new Map();
3180
3027
  }
3181
3028
  scope(scope, options) {
@@ -3186,7 +3033,6 @@ class AXMDocumentManagerService {
3186
3033
  return this.scopedDriveCache.get(cacheKey);
3187
3034
  }
3188
3035
  getScopeCacheKey(scope, options) {
3189
- // در آینده می‌توان این را برای کش کردن بر اساس ترکیب scope و options گسترش داد
3190
3036
  return scope;
3191
3037
  }
3192
3038
  /**
@@ -3276,6 +3122,7 @@ class AXMDocumentManagerService {
3276
3122
  type: 'folder',
3277
3123
  parentId: folder.parentId || null,
3278
3124
  lastModified: folder.updatedAt,
3125
+ childrenCount: folder.nodeCount,
3279
3126
  children: [
3280
3127
  ...(folder.folders?.map((child) => ({
3281
3128
  id: child.id,
@@ -3283,15 +3130,15 @@ class AXMDocumentManagerService {
3283
3130
  type: 'folder',
3284
3131
  parentId: child.parentId || null,
3285
3132
  lastModified: child.updatedAt,
3286
- size: AXPDataGenerator.number(50, 9000000),
3133
+ childrenCount: child.nodeCount,
3287
3134
  })) || []),
3288
3135
  ...(folder.documents?.map((doc) => ({
3289
3136
  id: doc.id,
3290
3137
  name: doc.name,
3291
3138
  type: 'file',
3292
3139
  parentId: doc.parentId,
3293
- lastModified: AXPDataGenerator.date(),
3294
- size: AXPDataGenerator.number(50, 9000000),
3140
+ lastModified: doc.meta?.['uploadedAt'],
3141
+ size: doc.meta?.['size'],
3295
3142
  })) || []),
3296
3143
  ],
3297
3144
  };
@@ -3414,6 +3261,8 @@ class AXMDocumentManagerService {
3414
3261
  type: 'file',
3415
3262
  parentId: file.parentId,
3416
3263
  lastModified: new Date(),
3264
+ size: file.meta?.['size'],
3265
+ fileId: file.fileId,
3417
3266
  };
3418
3267
  }
3419
3268
  async createFile(data) {
@@ -3447,7 +3296,8 @@ class AXMDocumentManagerService {
3447
3296
  }
3448
3297
  }
3449
3298
  async showCreateFolderDialog(parentId) {
3450
- const comp = (await import('./acorex-modules-document-management-create-folder-dialog.component-fNeqoZfY.mjs')).AXMCreateFolderDialog;
3299
+ const comp = (await import('./acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs'))
3300
+ .AXMCreateFolderDialog;
3451
3301
  const popup = await this.popupService.open(comp, {
3452
3302
  title: 't("actions.create-folder")',
3453
3303
  data: {
@@ -3456,8 +3306,139 @@ class AXMDocumentManagerService {
3456
3306
  });
3457
3307
  return popup.data?.folder;
3458
3308
  }
3309
+ //Todo beacuse id is String here return type is string and need dynamic type and wrong process
3310
+ async showTreeFolderPopup() {
3311
+ const comp = (await import('./acorex-modules-document-management-index-9l8D5iEE.mjs')).AXMTreeFolderPopupComponent;
3312
+ const popup = await this.popupService.open(comp, {
3313
+ title: 't("actions.create-folder")',
3314
+ data: {
3315
+ // parentId,
3316
+ },
3317
+ });
3318
+ return popup.data?.selectedNodeId;
3319
+ }
3320
+ async showFileViewerPopup(node) {
3321
+ const parentFolder = await this.folderService.getOne(node.parentId);
3322
+ const parentFolderName = parentFolder.name;
3323
+ const nodes = await Promise.all(parentFolder.documents?.map(async (doc) => {
3324
+ const fileInfo = await this.fileService.getInfo(doc.fileId);
3325
+ // Convert mimeType to supported type
3326
+ let fileType = 'image';
3327
+ if (fileInfo.mimeType.startsWith('image/')) {
3328
+ fileType = 'image';
3329
+ }
3330
+ else if (fileInfo.mimeType.startsWith('audio/')) {
3331
+ fileType = 'audio';
3332
+ }
3333
+ else if (fileInfo.mimeType.startsWith('video/')) {
3334
+ fileType = 'video';
3335
+ }
3336
+ else if (fileInfo.mimeType === 'application/pdf') {
3337
+ fileType = 'pdf';
3338
+ }
3339
+ return {
3340
+ id: doc.id || '',
3341
+ name: doc.name,
3342
+ type: fileType,
3343
+ url: fileInfo.url || '',
3344
+ size: String(fileInfo.size),
3345
+ thumbnail: fileInfo.url || '',
3346
+ };
3347
+ }) || []);
3348
+ console.log(nodes);
3349
+ const comp = (await import('./acorex-modules-document-management-file-viewer-popup.component-CaSagveT.mjs'))
3350
+ .AXMFileViewerPopupComponent;
3351
+ await this.popupService.open(comp, {
3352
+ title: `t("gallery" , ${RootConfig.module.name})` + ' - ' + parentFolderName,
3353
+ data: {
3354
+ nodes,
3355
+ },
3356
+ });
3357
+ }
3358
+ async openFile(node) {
3359
+ const file = await this.documentService.getOne(node.id);
3360
+ if (file && file.fileId) {
3361
+ const fileInfo = await this.fileService.getInfo(file.fileId);
3362
+ if (fileInfo.url) {
3363
+ try {
3364
+ // Check if the URL looks like base64 - only attempt decoding if it matches base64 pattern
3365
+ const isBase64 = /^[A-Za-z0-9+/]*={0,2}$/.test(fileInfo.url);
3366
+ let url = fileInfo.url;
3367
+ if (isBase64) {
3368
+ try {
3369
+ url = atob(fileInfo.url);
3370
+ console.log('Successfully decoded base64 URL:', url);
3371
+ }
3372
+ catch (e) {
3373
+ console.warn('Failed to decode as base64, using original URL:', e);
3374
+ }
3375
+ }
3376
+ // Make sure URL has a protocol, add https if missing
3377
+ let finalUrl = url.startsWith('http') ? url : `https://${url}`;
3378
+ console.log('Attempting to open URL:', finalUrl);
3379
+ // Try to open in a new window with a friendly message to copy URL if it fails
3380
+ this.showUrlDialog(finalUrl, file.name);
3381
+ }
3382
+ catch (error) {
3383
+ console.error('Error processing URL:', error);
3384
+ this.showUrlDialog(fileInfo.url, file.name, true);
3385
+ }
3386
+ }
3387
+ else {
3388
+ console.warn('No URL found for file:', file);
3389
+ this.dialogService.alert('No URL Available', 'No URL found for this file.', 'warning');
3390
+ }
3391
+ }
3392
+ else {
3393
+ console.warn('File not found or has no fileId:', node.id);
3394
+ this.dialogService.alert('File Not Found', 'File information could not be retrieved.', 'warning');
3395
+ }
3396
+ }
3397
+ /**
3398
+ * Shows a dialog with URL options including a copy button
3399
+ */
3400
+ async showUrlDialog(url, fileName, isError = false) {
3401
+ const title = `Open "${fileName}"`;
3402
+ const message = isError
3403
+ ? 'There was an issue processing the URL. You can try opening it manually:\n' + url
3404
+ : 'Click the button below to open the URL, or copy it to open manually:\n' + url;
3405
+ const result = await this.dialogService.confirm(title, message, 'primary');
3406
+ if (result) {
3407
+ try {
3408
+ window.open(url, '_blank', 'noopener,noreferrer');
3409
+ }
3410
+ catch (e) {
3411
+ console.error('Error opening URL from dialog:', e);
3412
+ this.dialogService.alert('Error', 'Could not open URL in browser', 'danger');
3413
+ }
3414
+ }
3415
+ else {
3416
+ // If user cancels, offer to copy the URL
3417
+ const copyResult = await this.dialogService.confirm('Copy URL', 'Would you like to copy the URL to clipboard?', 'primary');
3418
+ if (copyResult) {
3419
+ try {
3420
+ navigator.clipboard.writeText(url);
3421
+ this.dialogService.alert('Success', 'URL copied to clipboard', 'success');
3422
+ }
3423
+ catch (e) {
3424
+ console.error('Error copying URL to clipboard:', e);
3425
+ // Fallback for clipboard API not available
3426
+ const textArea = document.createElement('textarea');
3427
+ textArea.value = url;
3428
+ document.body.appendChild(textArea);
3429
+ textArea.focus();
3430
+ textArea.select();
3431
+ document.execCommand('copy');
3432
+ document.body.removeChild(textArea);
3433
+ this.dialogService.alert('Success', 'URL copied to clipboard', 'success');
3434
+ }
3435
+ }
3436
+ }
3437
+ return result;
3438
+ }
3459
3439
  async rename(node) {
3460
- const comp = (await import('./acorex-modules-document-management-rename-node-dialog.component-C-eCtqLa.mjs')).AXMRenameNodeDialog;
3440
+ const comp = (await import('./acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs'))
3441
+ .AXMRenameNodeDialog;
3461
3442
  const popup = await this.popupService.open(comp, {
3462
3443
  title: 't("actions.rename")',
3463
3444
  data: {
@@ -3501,34 +3482,16 @@ class AXMDocumentManagerService {
3501
3482
  ],
3502
3483
  });
3503
3484
  }
3504
- /**
3505
- * جستجوی فولدرها با نام مشخص شده در اسکوپ
3506
- * @param searchTerm عبارت جستجو
3507
- * @param scope اسکوپ جستجو
3508
- * @param options گزینه‌های اضافی مانند tenantId و userId
3509
- */
3510
3485
  async searchFolders(searchTerm, scope, options) {
3511
3486
  const { result: rootNode } = await this.getRoot(scope, options);
3512
3487
  const folders = await this.folderService.searchFolders(searchTerm, rootNode.id);
3513
3488
  return folders.map((folder) => this.mapFolderDtoToFolderNode(folder));
3514
3489
  }
3515
- /**
3516
- * جستجوی فایل‌ها با نام مشخص شده در اسکوپ
3517
- * @param searchTerm عبارت جستجو
3518
- * @param scope اسکوپ جستجو
3519
- * @param options گزینه‌های اضافی مانند tenantId و userId
3520
- */
3521
3490
  async searchFiles(searchTerm, scope, options) {
3522
3491
  const { result: rootNode } = await this.getRoot(scope, options);
3523
3492
  const files = await this.documentService.searchFiles(searchTerm, rootNode.id);
3524
3493
  return files.map((file) => this.mapFileToNode(file));
3525
3494
  }
3526
- /**
3527
- * جستجوی تمام نودها (فولدرها و فایل‌ها) با نام مشخص شده در اسکوپ
3528
- * @param searchTerm عبارت جستجو
3529
- * @param scope اسکوپ جستجو
3530
- * @param options گزینه‌های اضافی مانند tenantId و userId
3531
- */
3532
3495
  async searchNodes(searchTerm, scope, options) {
3533
3496
  const [folders, files] = await Promise.all([
3534
3497
  this.searchFolders(searchTerm, scope, options),
@@ -3536,6 +3499,99 @@ class AXMDocumentManagerService {
3536
3499
  ]);
3537
3500
  return [...folders, ...files];
3538
3501
  }
3502
+ async getAllFolders() {
3503
+ //TODO filter by scope
3504
+ return (await this.folderService.query()).items.map(this.mapFolderDtoToFolderNode);
3505
+ }
3506
+ async getAllFiles() {
3507
+ //TODO filter by scope
3508
+ return (await this.documentService.query()).items.map(this.mapFileToNode);
3509
+ }
3510
+ async getAllNodes() {
3511
+ return [...(await this.getAllFolders()), ...(await this.getAllFiles())];
3512
+ }
3513
+ async showChooseFileDialog() {
3514
+ const comp = (await import('./acorex-modules-document-management-drive-choose.component-CkS8s7zm.mjs')).AXMDocumentDriveChooseComponent;
3515
+ await this.popupService.open(comp);
3516
+ }
3517
+ async downloadFile(node) {
3518
+ const file = await this.documentService.getOne(node.id);
3519
+ if (file && file.fileId) {
3520
+ const fileInfo = await this.fileService.getInfo(file.fileId);
3521
+ const link = document.createElement('a');
3522
+ link.href = fileInfo.url ?? '';
3523
+ link.download = file.name; // Set the desired file name
3524
+ document.body.appendChild(link);
3525
+ link.click();
3526
+ document.body.removeChild(link);
3527
+ }
3528
+ else {
3529
+ console.log('id is null');
3530
+ }
3531
+ }
3532
+ /**
3533
+ * Creates a copy of a node (file or folder)
3534
+ * @param node The node to copy
3535
+ * @returns The newly created copied node
3536
+ */
3537
+ async copy(node) {
3538
+ if (!node) {
3539
+ throw new Error('Node to copy cannot be null or undefined');
3540
+ }
3541
+ // Create a name with " copy" before the extension
3542
+ const newName = this.createCopyName(node.name);
3543
+ if (node.type === 'file') {
3544
+ // Get the original file to copy all its data
3545
+ const originalFile = await this.documentService.getOne(node.id);
3546
+ if (!originalFile) {
3547
+ throw new Error(`File with ID ${node.id} not found`);
3548
+ }
3549
+ // Create a document model from the original with the new name
3550
+ // Extract needed properties without id
3551
+ const { id, ...fileDataWithoutId } = originalFile;
3552
+ const fileData = {
3553
+ ...fileDataWithoutId,
3554
+ name: newName,
3555
+ title: newName,
3556
+ };
3557
+ // Create the new file
3558
+ return await this.createFile(fileData);
3559
+ }
3560
+ else if (node.type === 'folder') {
3561
+ // Get the original folder to copy all its data
3562
+ const originalFolder = await this.folderService.getOne(node.id);
3563
+ if (!originalFolder) {
3564
+ throw new Error(`Folder with ID ${node.id} not found`);
3565
+ }
3566
+ // Create a folder model from the original with the new name
3567
+ // Extract needed properties without id
3568
+ const { id, ...folderDataWithoutId } = originalFolder;
3569
+ const folderData = {
3570
+ ...folderDataWithoutId,
3571
+ name: newName,
3572
+ };
3573
+ // Create the new folder
3574
+ return await this.createFolder(folderData);
3575
+ }
3576
+ else {
3577
+ throw new Error(`Unsupported node type: ${node.type}`);
3578
+ }
3579
+ }
3580
+ /**
3581
+ * Creates a copy name by adding " copy" before the extension
3582
+ * @param originalName The original filename
3583
+ * @returns The new filename with " copy" added before the extension
3584
+ */
3585
+ createCopyName(originalName) {
3586
+ const lastDotIndex = originalName.lastIndexOf('.');
3587
+ if (lastDotIndex === -1) {
3588
+ // No extension
3589
+ return `${originalName} copy`;
3590
+ }
3591
+ const nameWithoutExt = originalName.substring(0, lastDotIndex);
3592
+ const extension = originalName.substring(lastDotIndex);
3593
+ return `${nameWithoutExt} copy${extension}`;
3594
+ }
3539
3595
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3540
3596
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentManagerService, providedIn: 'root' }); }
3541
3597
  }
@@ -3589,166 +3645,176 @@ class ScopedDriveService {
3589
3645
  async getAvailableSpace() {
3590
3646
  return this.parent.getAvailableSpace();
3591
3647
  }
3592
- /**
3593
- * جستجوی فولدرها با نام مشخص شده در اسکوپ فعلی
3594
- * @param searchTerm عبارت جستجو
3595
- */
3596
3648
  async searchFolders(searchTerm) {
3597
3649
  this.validateScopeOptions();
3598
3650
  return this.parent.searchFolders(searchTerm, this.scope, this.options);
3599
3651
  }
3600
- /**
3601
- * جستجوی فایل‌ها با نام مشخص شده در اسکوپ فعلی
3602
- * @param searchTerm عبارت جستجو
3603
- */
3604
3652
  async searchFiles(searchTerm) {
3605
3653
  this.validateScopeOptions();
3606
3654
  return this.parent.searchFiles(searchTerm, this.scope, this.options);
3607
3655
  }
3608
- /**
3609
- * جستجوی تمام نودها (فولدرها و فایل‌ها) با نام مشخص شده در اسکوپ فعلی
3610
- * @param searchTerm عبارت جستجو
3611
- */
3612
3656
  async searchNodes(searchTerm) {
3613
3657
  this.validateScopeOptions();
3614
3658
  return this.parent.searchNodes(searchTerm, this.scope, this.options);
3615
3659
  }
3660
+ /**
3661
+ * Creates a copy of a node (file or folder)
3662
+ * @param node The node to copy
3663
+ * @returns The newly created copied node
3664
+ */
3665
+ async copy(node) {
3666
+ this.validateScopeOptions();
3667
+ return this.parent.copy(node);
3668
+ }
3616
3669
  }
3617
3670
 
3618
- class AXMDocumentDriveComponent {
3619
- constructor() {
3620
- this.layout = inject(AXPLayoutThemeService);
3621
- this.rootConfig = RootConfig;
3622
- this.fileTypeService = inject(AXPFileTypeProviderService);
3623
- this.driveService = inject(AXMDocumentManagerService);
3624
- this.vm = inject(AXPDocumentExplorerViewModel);
3625
- this.router = inject(Router);
3626
- this.activatedRoute = inject(ActivatedRoute);
3627
- this.sessionService = inject(AXPSessionService);
3628
- this.filterItems = signal([]);
3629
- this.selectedFilter = signal('all');
3630
- this.sortItems = signal([
3631
- { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },
3632
- { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },
3633
- { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },
3634
- ]);
3635
- this.documentExplorer = viewChild(AXMDocumentExplorerComponent);
3636
- this.selectedSort = computed(() => {
3637
- const items = this.sortItems();
3638
- return items.find((item) => item.key === this.vm.sortField()) || items[0];
3639
- });
3640
- this.#navigateEffect = effect(() => {
3641
- const navigatingFolderId = this.vm.navigatingFolderId();
3642
- if (navigatingFolderId) {
3643
- this.handleNavigateToFolder(navigatingFolderId);
3644
- }
3671
+ var AXPDocumentExplorerSettings;
3672
+ (function (AXPDocumentExplorerSettings) {
3673
+ AXPDocumentExplorerSettings["ViewMode"] = "document-explorer:layout:view-mode";
3674
+ AXPDocumentExplorerSettings["SortField"] = "document-explorer:layout:sort-field";
3675
+ AXPDocumentExplorerSettings["SortDirection"] = "document-explorer:layout:sort-direction";
3676
+ })(AXPDocumentExplorerSettings || (AXPDocumentExplorerSettings = {}));
3677
+
3678
+ const AXPDocumentExplorerViewModel = signalStore({ providedIn: 'root' }, withState(() => ({
3679
+ // View State
3680
+ viewMode: 'grid',
3681
+ isLoading: false,
3682
+ // Navigation State
3683
+ currentPath: [],
3684
+ currentNode: null,
3685
+ loadingFolderId: null,
3686
+ navigatingFolderId: null,
3687
+ // Sort State
3688
+ sortField: 'name',
3689
+ sortDirection: 'asc',
3690
+ // Content State
3691
+ folders: [],
3692
+ files: [],
3693
+ itemsCount: 0,
3694
+ availableSpace: 0,
3695
+ // Drive State
3696
+ currentDrive: null,
3697
+ // File Type State
3698
+ fileTypes: [],
3699
+ })), withComputed((store) => ({
3700
+ isRoot: computed(() => {
3701
+ const node = store.currentNode();
3702
+ return node?.id === 'root' || !node?.parentId;
3703
+ }),
3704
+ breadcrumb: computed(() => store.currentPath()),
3705
+ currentFolder: computed(() => store.currentNode()),
3706
+ currentFolderContents: computed(() => ({
3707
+ folders: store.folders(),
3708
+ files: store.files(),
3709
+ })),
3710
+ parentFolder: computed(() => {
3711
+ const currentNode = store.currentNode();
3712
+ return currentNode?.parentId ? store.folders().find((folder) => folder.id === currentNode.parentId) : null;
3713
+ }),
3714
+ isGridView: computed(() => store.viewMode() === 'grid'),
3715
+ isListView: computed(() => store.viewMode() === 'list'),
3716
+ })), withMethods((store, fileTypeService = inject(AXPFileTypeProviderService), driveService = inject(AXMDocumentManagerService), settingService = inject(AXPSettingService)) => ({
3717
+ async initialize(path = 'root') {
3718
+ // Load file types
3719
+ const fileTypes = await fileTypeService.items();
3720
+ patchState(store, { fileTypes });
3721
+ // Load initial settings
3722
+ const viewMode = await settingService.get(AXPDocumentExplorerSettings.ViewMode);
3723
+ const sortField = await settingService.get(AXPDocumentExplorerSettings.SortField);
3724
+ const sortDirection = await settingService.get(AXPDocumentExplorerSettings.SortDirection);
3725
+ patchState(store, {
3726
+ viewMode: viewMode || 'grid',
3727
+ sortField: sortField || 'name',
3728
+ sortDirection: sortDirection || 'asc',
3645
3729
  });
3646
- this.#loadingEffect = effect(() => {
3647
- const isLoading = this.vm.isLoading();
3648
- untracked(() => {
3649
- this.layout.setNavigationLoading(isLoading);
3730
+ },
3731
+ _load: async (folderId) => {
3732
+ patchState(store, { loadingFolderId: folderId, isLoading: true });
3733
+ await new Promise((resolve) => setTimeout(resolve, 100));
3734
+ try {
3735
+ const node = await driveService.getFolder(folderId);
3736
+ patchState(store, {
3737
+ currentNode: node.result,
3738
+ currentPath: node.path,
3739
+ folders: node.result.children?.filter((item) => item.type === 'folder') || [],
3740
+ files: node.result.children?.filter((item) => item.type === 'file') || [],
3741
+ itemsCount: node.result.children?.length || 0,
3742
+ availableSpace: await driveService.getAvailableSpace(),
3743
+ loadingFolderId: null,
3744
+ isLoading: false,
3745
+ navigatingFolderId: null,
3650
3746
  });
3651
- });
3652
- }
3653
- #navigateEffect;
3654
- #loadingEffect;
3655
- async handleSearchChange(event) {
3656
- console.log(event);
3657
- const result = await this.driveService.searchNodes(event.value, AXMDriveScope.Platform);
3658
- console.log(result);
3659
- }
3660
- async ngOnInit() {
3661
- await this.loadFilterItems();
3662
- await this.vm.initialize();
3663
- // Subscribe to route changes
3664
- this.activatedRoute.paramMap.subscribe(async (params) => {
3665
- this.loadDrive();
3666
- });
3667
- }
3668
- async loadDrive() {
3669
- const folderId = this.activatedRoute.snapshot.paramMap.get('id');
3670
- if (folderId) {
3671
- await this.vm.loadFolderContents(folderId);
3672
- }
3673
- else {
3674
- const root = await this.driveService.getRoot(AXMDriveScope.Platform);
3675
- if (root.result) {
3676
- await this.router.navigate([`${this.sessionService.application?.name}/drive/my/${root.result.id}`], {
3677
- replaceUrl: true,
3678
- });
3679
- }
3680
3747
  }
3681
- }
3682
- async loadFilterItems() {
3683
- const types = await this.fileTypeService.items();
3684
- const items = [
3685
- { key: 'all', textKey: 'file-types.all', icon: 'fa-light fa-folder-closed' },
3686
- ...types.map((type) => ({
3687
- key: type.name,
3688
- textKey: `file-types.${type.name}`,
3689
- icon: type.icon || 'fa-light fa-file',
3690
- })),
3691
- ];
3692
- this.filterItems.set(items);
3693
- }
3694
- setFilter(key) {
3695
- this.selectedFilter.set(key);
3696
- }
3697
- getFilterIcon() {
3698
- if (this.selectedFilter() === 'all') {
3699
- return 'fa-light fa-folder-closed';
3748
+ catch (error) {
3749
+ patchState(store, {
3750
+ loadingFolderId: null,
3751
+ isLoading: false,
3752
+ });
3753
+ throw error;
3700
3754
  }
3701
- const item = this.filterItems().find((item) => item.key === this.selectedFilter());
3702
- return item?.icon || 'fa-light fa-file';
3703
- }
3704
- getFilterText() {
3705
- if (this.selectedFilter() === 'all') {
3706
- return 'file-types.all';
3755
+ },
3756
+ navigateToFolder(folderId) {
3757
+ patchState(store, { navigatingFolderId: folderId });
3758
+ },
3759
+ async loadFolderContents(folderId) {
3760
+ await this._load(folderId);
3761
+ },
3762
+ setViewMode(mode) {
3763
+ patchState(store, { viewMode: mode });
3764
+ settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.ViewMode, mode);
3765
+ },
3766
+ setSortField(field) {
3767
+ patchState(store, { sortField: field });
3768
+ settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortField, field);
3769
+ },
3770
+ setSortDirection(direction) {
3771
+ patchState(store, { sortDirection: direction });
3772
+ settingService.scope(AXPSettingScope.User).set(AXPDocumentExplorerSettings.SortDirection, direction);
3773
+ },
3774
+ setDrive(scope) {
3775
+ patchState(store, { currentDrive: scope });
3776
+ },
3777
+ isLoadingFolder(folderId) {
3778
+ return store.loadingFolderId() === folderId;
3779
+ },
3780
+ getFileInfo(fileName) {
3781
+ const fileTypes = store.fileTypes();
3782
+ const extension = fileName.split('.').pop()?.toLowerCase() || '';
3783
+ const extensions = fileTypes.flatMap((type) => type.extensions);
3784
+ const fileType = extensions.find((e) => e.name === extension);
3785
+ return {
3786
+ icon: fileType?.icon || 'fa-light fa-file',
3787
+ type: fileType?.name || 'Unknown',
3788
+ };
3789
+ },
3790
+ sortItems(items) {
3791
+ const field = store.sortField();
3792
+ const direction = store.sortDirection();
3793
+ return [...items].sort((a, b) => {
3794
+ let comparison = 0;
3795
+ switch (field) {
3796
+ case 'name':
3797
+ comparison = a.name.localeCompare(b.name);
3798
+ break;
3799
+ case 'modified':
3800
+ const aDate = a.lastModified ? new Date(a.lastModified) : new Date(0);
3801
+ const bDate = b.lastModified ? new Date(b.lastModified) : new Date(0);
3802
+ comparison = aDate.getTime() - bDate.getTime();
3803
+ break;
3804
+ case 'size':
3805
+ comparison = (a.size || 0) - (b.size || 0);
3806
+ break;
3807
+ }
3808
+ return direction === 'asc' ? comparison : -comparison;
3809
+ });
3810
+ },
3811
+ async refresh() {
3812
+ const currentFolder = store.currentNode();
3813
+ if (currentFolder) {
3814
+ await this._load(currentFolder.id);
3707
3815
  }
3708
- const item = this.filterItems().find((item) => item.key === this.selectedFilter());
3709
- return item?.textKey || 'file-types.all';
3710
- }
3711
- handleNavigateToFolder(folderId) {
3712
- this.router.navigate([`${this.sessionService.application?.name}/drive/my/${folderId}`]);
3713
- }
3714
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentDriveComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3715
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMDocumentDriveComponent, isStandalone: true, selector: "axp-document-drive", providers: [AXPDocumentExplorerViewModel], viewQueries: [{ propertyName: "documentExplorer", first: true, predicate: AXMDocumentExplorerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Main Layout -->\n<axp-layout-simple-page *translate=\"let t\">\n <!-- Header Section -->\n <axp-layout-header>\n <!-- Title Section -->\n <axp-layout-title>\n @if(vm.isRoot()) {\n {{ t('my-drive.title', { scope: rootConfig.config.i18n }) | async }}\n }@else {\n {{ vm.currentFolder()?.name }}\n }\n </axp-layout-title>\n\n <!-- Description Section -->\n <axp-layout-description>\n {{\n t('my-drive.description', {\n scope: rootConfig.config.i18n,\n params: {\n count: vm.itemsCount(),\n size: vm.availableSpace() | format : 'filesize' | async\n }\n }) | async\n }}\n </axp-layout-description>\n\n <!-- Actions Section -->\n <axp-layout-actions>\n <!-- Primary Actions -->\n <axp-layout-actions-primary>\n <!-- Upload Dropdown -->\n <ax-button [text]=\"t('actions.add-item', { scope: rootConfig.config.i18n }) | async\" [color]=\"'primary'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"documentExplorer()?.createFolder()\"\n [text]=\"(t('actions.create-folder', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-folder-plus\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item\n (onClick)=\"documentExplorer()?.uploadFile()\"\n [text]=\"(t('actions.upload-file', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-file-arrow-up\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-actions-primary>\n\n <!-- Secondary Actions -->\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('actions.fa-share', { scope: rootConfig.config.i18n }) | async)!\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-share-nodes\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n\n <!-- Breadcrumbs Section -->\n <axp-layout-breadcrumbs>\n <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n <ax-breadcrumbs-item> {{ t('home') | async }} </ax-breadcrumbs-item>\n <ax-breadcrumbs-item> {{ t('profile.title', { scope: 'auth' }) | async }} </ax-breadcrumbs-item>\n </ax-breadcrumbs>\n </axp-layout-breadcrumbs>\n\n <!-- Toolbar Section -->\n <axp-layout-toolbar>\n <!-- Left Side Toolbar -->\n <axp-layout-prefix>\n <!-- Filter Dropdown -->\n <ax-button [text]=\"t(getFilterText(), { scope: rootConfig.config.i18n }) | async\">\n <ax-prefix>\n <ax-icon [icon]=\"getFilterIcon()\"></ax-icon>\n </ax-prefix>\n\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n @for(item of filterItems(); track item.key) {\n <ax-button-item\n (onClick)=\"setFilter(item.key)\"\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- Search Box -->\n <ax-search-box\n (onValueChanged)=\"handleSearchChange($event)\"\n class=\"ax-w-72\"\n [placeholder]=\"t('actions.search', { scope: rootConfig.config.i18n }) | async\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n <axp-layout-suffix>\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 @if(vm.isGridView()) {\n <ax-icon icon=\"fa-light fa-grid-2\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-list\"></ax-icon>\n }\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"(t('actions.grid-view', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isGridView()\"\n (onClick)=\"vm.setViewMode('grid')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-grid-2\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.list-view', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setViewMode('list')\"\n [selected]=\"vm.isListView()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-list\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-layout-toolbar>\n </axp-layout-header>\n\n <!-- Content Section -->\n <axp-layout-content class=\"ax-overflow-hidden ax-flex ax-flex-col ax-flex-1\">\n <axm-document-explorer></axm-document-explorer>\n </axp-layout-content>\n\n <!-- Footer Section -->\n <axp-layout-footer>\n <axp-layout-prefix>\n <div class=\"breadcrumb ax-xs\">\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"handleNavigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\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=\"fa-regular fa-chevron-right fa-fw fa-xs\"></i>\n } }\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix> </axp-layout-suffix>\n </axp-layout-footer>\n</axp-layout-simple-page>\n", styles: [".breadcrumb{display:flex;flex-direction:row;align-items:center;gap:.25rem}.breadcrumb .ax-state-disabled button,.breadcrumb .ax-state-loading button{cursor:default!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXMenuModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i2$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i5$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i6$1.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i6$1.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7$2.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "pipe", type: i8.AXFormatPipe, name: "format" }, { kind: "ngmodule", type: AXFileModule }, { kind: "component", type: AXPSimplePageLayout, selector: "axp-layout-simple-page" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-layout-content, axp-layout-header-container, axp-layout-side-container, axp-layout-sections, axp-layout-section-container, axp-layout-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title, axp-layout-nav-button, axp-layout-description, axp-layout-title-bar, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutHeaderTemplateComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutActionsComponent, selector: "axp-layout-actions" }, { kind: "component", type: AXPThemeLayoutPagePrimaryActionsComponent, selector: "axp-layout-actions-primary" }, { kind: "component", type: AXPThemeLayoutPageSecondaryActionsComponent, selector: "axp-layout-actions-secondary" }, { kind: "component", type: AXPThemeLayoutToolbarComponent, selector: "axp-layout-toolbar" }, { kind: "component", type: AXPThemeLayoutFooterComponent, selector: "axp-layout-footer" }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "component", type: AXMDocumentExplorerComponent, selector: "axm-document-explorer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
3716
- }
3717
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentDriveComponent, decorators: [{
3718
- type: Component,
3719
- args: [{ selector: 'axp-document-drive', standalone: true, imports: [
3720
- CommonModule,
3721
- RouterModule,
3722
- AXMenuModule,
3723
- AXButtonModule,
3724
- AXButtonGroupModule,
3725
- AXDropdownButtonModule,
3726
- AXDropdownModule,
3727
- AXTranslationModule,
3728
- AXDecoratorModule,
3729
- AXLoadingModule,
3730
- AXBreadcrumbsModule,
3731
- AXBadgeModule,
3732
- AXSearchBoxModule,
3733
- AXFormatModule,
3734
- AXFileModule,
3735
- AXPSimplePageLayout,
3736
- AXPThemeLayoutBlockComponent,
3737
- AXPThemeLayoutHeaderTemplateComponent,
3738
- AXPThemeLayoutActionsComponent,
3739
- AXPThemeLayoutPagePrimaryActionsComponent,
3740
- AXPThemeLayoutPageSecondaryActionsComponent,
3741
- AXPThemeLayoutToolbarComponent,
3742
- AXPThemeLayoutFooterComponent,
3743
- AXDateTimeModule,
3744
- AXMDocumentExplorerComponent,
3745
- ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [AXPDocumentExplorerViewModel], template: "<!-- Main Layout -->\n<axp-layout-simple-page *translate=\"let t\">\n <!-- Header Section -->\n <axp-layout-header>\n <!-- Title Section -->\n <axp-layout-title>\n @if(vm.isRoot()) {\n {{ t('my-drive.title', { scope: rootConfig.config.i18n }) | async }}\n }@else {\n {{ vm.currentFolder()?.name }}\n }\n </axp-layout-title>\n\n <!-- Description Section -->\n <axp-layout-description>\n {{\n t('my-drive.description', {\n scope: rootConfig.config.i18n,\n params: {\n count: vm.itemsCount(),\n size: vm.availableSpace() | format : 'filesize' | async\n }\n }) | async\n }}\n </axp-layout-description>\n\n <!-- Actions Section -->\n <axp-layout-actions>\n <!-- Primary Actions -->\n <axp-layout-actions-primary>\n <!-- Upload Dropdown -->\n <ax-button [text]=\"t('actions.add-item', { scope: rootConfig.config.i18n }) | async\" [color]=\"'primary'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"documentExplorer()?.createFolder()\"\n [text]=\"(t('actions.create-folder', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-folder-plus\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-divider></ax-divider>\n <ax-button-item\n (onClick)=\"documentExplorer()?.uploadFile()\"\n [text]=\"(t('actions.upload-file', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-file-arrow-up\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-actions-primary>\n\n <!-- Secondary Actions -->\n <axp-layout-actions-secondary>\n <ax-button-item [text]=\"(t('actions.fa-share', { scope: rootConfig.config.i18n }) | async)!\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-share-nodes\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n\n <!-- Breadcrumbs Section -->\n <axp-layout-breadcrumbs>\n <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward\"></i>\n </ng-template>\n <ax-breadcrumbs-item> {{ t('home') | async }} </ax-breadcrumbs-item>\n <ax-breadcrumbs-item> {{ t('profile.title', { scope: 'auth' }) | async }} </ax-breadcrumbs-item>\n </ax-breadcrumbs>\n </axp-layout-breadcrumbs>\n\n <!-- Toolbar Section -->\n <axp-layout-toolbar>\n <!-- Left Side Toolbar -->\n <axp-layout-prefix>\n <!-- Filter Dropdown -->\n <ax-button [text]=\"t(getFilterText(), { scope: rootConfig.config.i18n }) | async\">\n <ax-prefix>\n <ax-icon [icon]=\"getFilterIcon()\"></ax-icon>\n </ax-prefix>\n\n <ax-dropdown-panel>\n <ax-button-item-list class=\"ax-p-2\">\n @for(item of filterItems(); track item.key) {\n <ax-button-item\n (onClick)=\"setFilter(item.key)\"\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- Search Box -->\n <ax-search-box\n (onValueChanged)=\"handleSearchChange($event)\"\n class=\"ax-w-72\"\n [placeholder]=\"t('actions.search', { scope: rootConfig.config.i18n }) | async\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n <axp-layout-suffix>\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 @if(vm.isGridView()) {\n <ax-icon icon=\"fa-light fa-grid-2\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-list\"></ax-icon>\n }\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n [text]=\"(t('actions.grid-view', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isGridView()\"\n (onClick)=\"vm.setViewMode('grid')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-grid-2\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.list-view', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setViewMode('list')\"\n [selected]=\"vm.isListView()\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-list\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </axp-layout-suffix>\n </axp-layout-toolbar>\n </axp-layout-header>\n\n <!-- Content Section -->\n <axp-layout-content class=\"ax-overflow-hidden ax-flex ax-flex-col ax-flex-1\">\n <axm-document-explorer></axm-document-explorer>\n </axp-layout-content>\n\n <!-- Footer Section -->\n <axp-layout-footer>\n <axp-layout-prefix>\n <div class=\"breadcrumb ax-xs\">\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"handleNavigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\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=\"fa-regular fa-chevron-right fa-fw fa-xs\"></i>\n } }\n </div>\n </axp-layout-prefix>\n\n <axp-layout-suffix> </axp-layout-suffix>\n </axp-layout-footer>\n</axp-layout-simple-page>\n", styles: [".breadcrumb{display:flex;flex-direction:row;align-items:center;gap:.25rem}.breadcrumb .ax-state-disabled button,.breadcrumb .ax-state-loading button{cursor:default!important}\n"] }]
3746
- }] });
3747
-
3748
- var drive_component = /*#__PURE__*/Object.freeze({
3749
- __proto__: null,
3750
- AXMDocumentDriveComponent: AXMDocumentDriveComponent
3751
- });
3816
+ },
3817
+ })));
3752
3818
 
3753
3819
  class AXMDocumentExplorerComponent {
3754
3820
  constructor() {
@@ -3770,6 +3836,7 @@ class AXMDocumentExplorerComponent {
3770
3836
  #effect;
3771
3837
  handleNavigateToFolder(folderId) {
3772
3838
  this.vm.navigateToFolder(folderId);
3839
+ console.log(this.vm.currentFolder());
3773
3840
  }
3774
3841
  // Context Menu Handlers
3775
3842
  async handleContextMenuOnOpening(e) {
@@ -3838,6 +3905,20 @@ class AXMDocumentExplorerComponent {
3838
3905
  ],
3839
3906
  break: true,
3840
3907
  };
3908
+ const openWith = {
3909
+ name: 'open-with',
3910
+ text: 'Open with',
3911
+ icon: 'fa-light fa-circle-info',
3912
+ items: [
3913
+ {
3914
+ name: 'open-gallery',
3915
+ text: 'Gallery',
3916
+ icon: 'fa-light fa-images',
3917
+ data: node,
3918
+ },
3919
+ ],
3920
+ break: true,
3921
+ };
3841
3922
  e.items = [
3842
3923
  ...open,
3843
3924
  {
@@ -3891,6 +3972,9 @@ class AXMDocumentExplorerComponent {
3891
3972
  data: node,
3892
3973
  },
3893
3974
  ];
3975
+ if (node.type == 'file') {
3976
+ e.items.splice(e.items.length - 1, 0, openWith);
3977
+ }
3894
3978
  }
3895
3979
  handleContextMenuRootOnOpening(e) {
3896
3980
  //TODO: check async translate method in acorex
@@ -3927,6 +4011,15 @@ class AXMDocumentExplorerComponent {
3927
4011
  case 'open-folder':
3928
4012
  this.handleNavigateToFolder(node.id);
3929
4013
  break;
4014
+ case 'open-file':
4015
+ this.openFile(node);
4016
+ break;
4017
+ case 'open-gallery':
4018
+ this.openGallery(node);
4019
+ break;
4020
+ case 'download':
4021
+ this.handleDownloadFile(node);
4022
+ break;
3930
4023
  case 'new-folder':
3931
4024
  await this.createFolder(node);
3932
4025
  // Handle new folder creation
@@ -3937,6 +4030,12 @@ class AXMDocumentExplorerComponent {
3937
4030
  case 'paste':
3938
4031
  // Handle paste operation
3939
4032
  break;
4033
+ case 'move-to':
4034
+ this.moveNode(node);
4035
+ break;
4036
+ case 'copy-to':
4037
+ this.copyNodeToNewPath(node);
4038
+ break;
3940
4039
  case 'rename':
3941
4040
  this.renameNode(node);
3942
4041
  break;
@@ -3946,12 +4045,24 @@ class AXMDocumentExplorerComponent {
3946
4045
  case 'refresh':
3947
4046
  this.vm.refresh();
3948
4047
  break;
4048
+ case 'copy':
4049
+ this.makeCopy(node);
4050
+ break;
3949
4051
  }
3950
4052
  }
4053
+ async openGallery(node) {
4054
+ await this.driveService.showFileViewerPopup(node);
4055
+ }
4056
+ async openFile(node) {
4057
+ await this.driveService.openFile(node);
4058
+ }
4059
+ handleDownloadFile(node) {
4060
+ this.driveService.downloadFile(node);
4061
+ }
3951
4062
  async createFolder(node) {
3952
- const folderId = node?.id ?? this.vm.currentFolder()?.id;
3953
- if (folderId) {
3954
- const result = await this.driveService.showCreateFolderDialog(this.vm.currentFolder()?.id);
4063
+ const parentId = node?.id ?? this.vm.currentFolder()?.id;
4064
+ if (parentId) {
4065
+ const result = await this.driveService.showCreateFolderDialog(parentId);
3955
4066
  if (result) {
3956
4067
  await this.vm.refresh();
3957
4068
  }
@@ -3980,8 +4091,61 @@ class AXMDocumentExplorerComponent {
3980
4091
  // }
3981
4092
  }
3982
4093
  }
4094
+ async chooseFile() {
4095
+ await this.driveService.showChooseFileDialog();
4096
+ await this.vm.refresh();
4097
+ }
4098
+ async makeCopy(node) {
4099
+ if (node) {
4100
+ try {
4101
+ const copiedNode = await this.driveService.copy(node);
4102
+ await this.vm.refresh();
4103
+ }
4104
+ catch (error) {
4105
+ console.error('Error copying node:', error);
4106
+ }
4107
+ }
4108
+ }
4109
+ async moveNode(node) {
4110
+ if (node) {
4111
+ const result = await this.driveService.showTreeFolderPopup();
4112
+ if (result) {
4113
+ if (node.type === 'folder') {
4114
+ await this.driveService.updateFolder(node.id, { parentId: result });
4115
+ }
4116
+ else {
4117
+ await this.driveService.updateFile(node.id, { parentId: result });
4118
+ }
4119
+ await this.vm.refresh();
4120
+ }
4121
+ }
4122
+ }
4123
+ async copyNodeToNewPath(node) {
4124
+ if (node) {
4125
+ const result = await this.driveService.showTreeFolderPopup();
4126
+ if (result) {
4127
+ if (node.type === 'folder') {
4128
+ await this.driveService.createFolder({
4129
+ name: node.name,
4130
+ parentId: result,
4131
+ color: '#ffffff',
4132
+ });
4133
+ }
4134
+ else {
4135
+ await this.driveService.createFile({
4136
+ title: node.name,
4137
+ name: node.name,
4138
+ parentId: result,
4139
+ //TODO upload file to file storage
4140
+ fileId: '',
4141
+ });
4142
+ }
4143
+ await this.vm.refresh();
4144
+ }
4145
+ }
4146
+ }
3983
4147
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentExplorerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3984
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMDocumentExplorerComponent, isStandalone: true, selector: "axm-document-explorer", viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["itemsContextMenu"], descendants: true, isSignal: true }, { propertyName: "rootContextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Content -->\n<div class=\"content\">\n <!-- Empty State -->\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-py-16 ax-h-full\">\n <ax-icon icon=\"fa-light fa-folder-open\" class=\"ax-text-6xl ax-mb-4\"></ax-icon>\n <h3 class=\"ax-text-xl ax-font-medium ax-mb-2\">No Items Found</h3>\n <p class=\"\">This folder is empty. Add some files or folders to get started.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (vm.isGridView()) {\n <!-- Folders Section -->\n @if (vm.folders().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Folders</h3>\n <div class=\"items-grid\">\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"gridFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n }\n </div>\n </div>\n }\n\n <!-- Files Section -->\n @if (vm.files().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Files</h3>\n <div class=\"items-grid\">\n @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"gridFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </div>\n </div>\n }\n <!-- Grid View End -->\n }\n\n <!-- List View -->\n @if (vm.isListView()) {\n <div class=\"list-view\">\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"name-column\">Name</th>\n <th class=\"type-column\">Type</th>\n <th class=\"size-column\">Size</th>\n <th class=\"date-column\">Last Modified</th>\n </tr>\n </thead>\n <tbody>\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"listFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n } @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"listFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </tbody>\n </table>\n </div>\n } }\n</div>\n\n<!-- Grid View Templates -->\n<ng-template #gridFolderTemplate let-folder>\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"folder\"\n (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <ax-icon icon=\"fa-solid fa-folder-closed \"></ax-icon>\n }\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ folder.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">15 items</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{ folder.lastModified | format : 'datetime' : { format: 'datetime' } |\n async }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #gridFileTemplate let-file>\n @let fileInfo = vm.getFileInfo(file.name);\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"file\"\n (dblclick)=\"handleNavigateToFolder(file.id)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ file.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.size | format : 'filesize' | async }}</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.lastModified | format : 'datetime' : { format: 'datetime' } |\n async }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- List View Templates -->\n<ng-template #listFolderTemplate let-folder>\n <tr class=\"folder-row\" (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"folder\">\n <div class=\"item-name\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n <span>{{ folder.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"folder\">Folder</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"folder\">{{ folder.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"folder\">\n {{ folder.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #listFileTemplate let-file>\n <tr class=\"file-row\">\n @let fileInfo = vm.getFileInfo(file.name);\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"file\">\n <div class=\"item-name hover:ax-underline\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n <span>{{ file.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"file\">{{ fileInfo.type }}</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"file\">{{ file.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"file\">\n {{ file.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #folderLoading>\n <i class=\"fa-light fa-spinner fa-spin-pulse ax-text-2xl\"></i>\n</ng-template>\n\n<!-- Context Menu-->\n<ax-context-menu #itemsContextMenu [target]=\"'.axp-explorer-item'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuOnOpening($event)\">\n</ax-context-menu>\n\n<ax-context-menu #rootContextMenu [target]=\"'axm-document-explorer'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuRootOnOpening($event)\">\n</ax-context-menu>", styles: [":host{display:flex;height:100%;flex:1 1 0%;flex-direction:column;gap:1rem}:host .content{flex:1 1 0%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;overflow-y:auto}:host .content .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}:host .content .loading-state i{font-size:1.5rem;line-height:2rem}:host .content .section{margin-bottom:2rem}:host .content .section:last-child{margin-bottom:0}:host .content .section .section-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:500}:host .content .section .items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}:host .content .list-view .items-table{width:100%;border-collapse:collapse}:host .content .list-view .items-table th{border-bottom-width:1px;padding:.75rem;text-align:start;font-weight:500;background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host .content .list-view .items-table th.name-column{width:50%}:host .content .list-view .items-table th.type-column{width:20%}:host .content .list-view .items-table th.size-column{width:15%}:host .content .list-view .items-table th.date-column{width:15%}:host .content .list-view .items-table td{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:.75rem}:host .content .list-view .items-table td.name-column .item-name{display:flex;align-items:center;gap:.5rem}:host .content .list-view .items-table td.name-column .item-name i{font-size:1.25rem;line-height:1.75rem}:host .content .list-view .items-table tr{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:host .content .list-view .items-table tr:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1))}:host .content .list-view .items-table tr.folder-row td .item-name i{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "pipe", type: i8.AXFormatPipe, name: "format" }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i4$1.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "directive", type: AXPElementDataDirective, selector: "[axp-data]", inputs: ["axp-data", "axp-data-path"] }] }); }
4148
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXMDocumentExplorerComponent, isStandalone: true, selector: "axm-document-explorer", viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["itemsContextMenu"], descendants: true, isSignal: true }, { propertyName: "rootContextMenu", first: true, predicate: ["rootContextMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Content -->\n<div class=\"content\">\n <!-- Empty State -->\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-py-16 ax-h-full\">\n <ax-icon icon=\"fa-light fa-folder-open\" class=\"ax-text-6xl ax-mb-4\"></ax-icon>\n <h3 class=\"ax-text-xl ax-font-medium ax-mb-2\">No Items Found</h3>\n <p class=\"\">This folder is empty. Add some files or folders to get started.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (vm.isGridView()) {\n <!-- Folders Section -->\n @if (vm.folders().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Folders</h3>\n <div class=\"items-grid\">\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"gridFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n }\n </div>\n </div>\n }\n\n <!-- Files Section -->\n @if (vm.files().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Files</h3>\n <div class=\"items-grid\">\n @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"gridFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </div>\n </div>\n }\n <!-- Grid View End -->\n }\n\n <!-- List View -->\n @if (vm.isListView()) {\n <div class=\"list-view\">\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"name-column\">Name</th>\n <th class=\"type-column\">Type</th>\n <th class=\"size-column\">Size</th>\n <th class=\"date-column\">Last Modified</th>\n </tr>\n </thead>\n <tbody>\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"listFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n } @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"listFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </tbody>\n </table>\n </div>\n } }\n</div>\n\n<!-- Grid View Templates -->\n<ng-template #gridFolderTemplate let-folder>\n <div\n class=\"ax-group ax-cursor-pointer axp-explorer-item\"\n [axp-data]=\"folder\"\n (dblclick)=\"handleNavigateToFolder(folder.id)\"\n >\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <ax-icon icon=\"fa-solid fa-folder-closed \"></ax-icon>\n }\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ folder.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ folder.childrenCount }} items</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{\n folder.lastModified | format : 'datetime' : { format: 'datetime' } | async\n }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #gridFileTemplate let-file>\n @let fileInfo = vm.getFileInfo(file.name);\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"file\" (dblclick)=\"openFile(file)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ file.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.size | format : 'filesize' | async }}</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{\n file.lastModified | format : 'datetime' : { format: 'datetime' } | async\n }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- List View Templates -->\n<ng-template #listFolderTemplate let-folder>\n <tr class=\"folder-row\" (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"folder\">\n <div class=\"item-name\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n <span>{{ folder.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"folder\">Folder</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"folder\">{{ folder.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"folder\">\n {{ folder.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #listFileTemplate let-file>\n <tr class=\"file-row\">\n @let fileInfo = vm.getFileInfo(file.name);\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"file\">\n <div class=\"item-name hover:ax-underline\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n <span>{{ file.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"file\">{{ fileInfo.type }}</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"file\">{{ file.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"file\">\n {{ file.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #folderLoading>\n <i class=\"fa-light fa-spinner fa-spin-pulse ax-text-2xl\"></i>\n</ng-template>\n\n<!-- Context Menu-->\n<ax-context-menu\n #itemsContextMenu\n [target]=\"'.axp-explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n>\n</ax-context-menu>\n\n<ax-context-menu\n #rootContextMenu\n [target]=\"'axm-document-explorer'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n>\n</ax-context-menu>\n", styles: [":host{display:flex;height:100%;flex:1 1 0%;flex-direction:column;gap:1rem}:host .content{flex:1 1 0%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;overflow-y:auto}:host .content .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}:host .content .loading-state i{font-size:1.5rem;line-height:2rem}:host .content .section{margin-bottom:2rem}:host .content .section:last-child{margin-bottom:0}:host .content .section .section-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:500}:host .content .section .items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}:host .content .list-view .items-table{width:100%;border-collapse:collapse}:host .content .list-view .items-table th{border-bottom-width:1px;padding:.75rem;text-align:start;font-weight:500;background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host .content .list-view .items-table th.name-column{width:50%}:host .content .list-view .items-table th.type-column{width:20%}:host .content .list-view .items-table th.size-column{width:15%}:host .content .list-view .items-table th.date-column{width:15%}:host .content .list-view .items-table td{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:.75rem}:host .content .list-view .items-table td.name-column .item-name{display:flex;align-items:center;gap:.5rem}:host .content .list-view .items-table td.name-column .item-name i{font-size:1.25rem;line-height:1.75rem}:host .content .list-view .items-table tr{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:host .content .list-view .items-table tr:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1))}:host .content .list-view .items-table tr.folder-row td .item-name i{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.animation-duration-2s{--fa-animation-duration: 2s}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXFormatModule }, { kind: "pipe", type: i3.AXFormatPipe, name: "format" }, { kind: "ngmodule", type: AXDateTimeModule }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i4.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }, { kind: "directive", type: AXPElementDataDirective, selector: "[axp-data]", inputs: ["axp-data", "axp-data-path"] }] }); }
3985
4149
  }
3986
4150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentExplorerComponent, decorators: [{
3987
4151
  type: Component,
@@ -3994,22 +4158,59 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
3994
4158
  AXDateTimeModule,
3995
4159
  AXMenuModule,
3996
4160
  AXPElementDataDirective,
3997
- ], template: "<!-- Content -->\n<div class=\"content\">\n <!-- Empty State -->\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-py-16 ax-h-full\">\n <ax-icon icon=\"fa-light fa-folder-open\" class=\"ax-text-6xl ax-mb-4\"></ax-icon>\n <h3 class=\"ax-text-xl ax-font-medium ax-mb-2\">No Items Found</h3>\n <p class=\"\">This folder is empty. Add some files or folders to get started.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (vm.isGridView()) {\n <!-- Folders Section -->\n @if (vm.folders().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Folders</h3>\n <div class=\"items-grid\">\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"gridFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n }\n </div>\n </div>\n }\n\n <!-- Files Section -->\n @if (vm.files().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Files</h3>\n <div class=\"items-grid\">\n @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"gridFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </div>\n </div>\n }\n <!-- Grid View End -->\n }\n\n <!-- List View -->\n @if (vm.isListView()) {\n <div class=\"list-view\">\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"name-column\">Name</th>\n <th class=\"type-column\">Type</th>\n <th class=\"size-column\">Size</th>\n <th class=\"date-column\">Last Modified</th>\n </tr>\n </thead>\n <tbody>\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"listFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n } @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"listFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </tbody>\n </table>\n </div>\n } }\n</div>\n\n<!-- Grid View Templates -->\n<ng-template #gridFolderTemplate let-folder>\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"folder\"\n (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <ax-icon icon=\"fa-solid fa-folder-closed \"></ax-icon>\n }\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ folder.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">15 items</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{ folder.lastModified | format : 'datetime' : { format: 'datetime' } |\n async }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #gridFileTemplate let-file>\n @let fileInfo = vm.getFileInfo(file.name);\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"file\"\n (dblclick)=\"handleNavigateToFolder(file.id)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ file.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.size | format : 'filesize' | async }}</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.lastModified | format : 'datetime' : { format: 'datetime' } |\n async }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- List View Templates -->\n<ng-template #listFolderTemplate let-folder>\n <tr class=\"folder-row\" (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"folder\">\n <div class=\"item-name\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n <span>{{ folder.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"folder\">Folder</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"folder\">{{ folder.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"folder\">\n {{ folder.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #listFileTemplate let-file>\n <tr class=\"file-row\">\n @let fileInfo = vm.getFileInfo(file.name);\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"file\">\n <div class=\"item-name hover:ax-underline\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n <span>{{ file.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"file\">{{ fileInfo.type }}</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"file\">{{ file.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"file\">\n {{ file.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #folderLoading>\n <i class=\"fa-light fa-spinner fa-spin-pulse ax-text-2xl\"></i>\n</ng-template>\n\n<!-- Context Menu-->\n<ax-context-menu #itemsContextMenu [target]=\"'.axp-explorer-item'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuOnOpening($event)\">\n</ax-context-menu>\n\n<ax-context-menu #rootContextMenu [target]=\"'axm-document-explorer'\" [orientation]=\"'vertical'\" [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\" (onOpening)=\"handleContextMenuRootOnOpening($event)\">\n</ax-context-menu>", styles: [":host{display:flex;height:100%;flex:1 1 0%;flex-direction:column;gap:1rem}:host .content{flex:1 1 0%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;overflow-y:auto}:host .content .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}:host .content .loading-state i{font-size:1.5rem;line-height:2rem}:host .content .section{margin-bottom:2rem}:host .content .section:last-child{margin-bottom:0}:host .content .section .section-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:500}:host .content .section .items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}:host .content .list-view .items-table{width:100%;border-collapse:collapse}:host .content .list-view .items-table th{border-bottom-width:1px;padding:.75rem;text-align:start;font-weight:500;background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host .content .list-view .items-table th.name-column{width:50%}:host .content .list-view .items-table th.type-column{width:20%}:host .content .list-view .items-table th.size-column{width:15%}:host .content .list-view .items-table th.date-column{width:15%}:host .content .list-view .items-table td{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:.75rem}:host .content .list-view .items-table td.name-column .item-name{display:flex;align-items:center;gap:.5rem}:host .content .list-view .items-table td.name-column .item-name i{font-size:1.25rem;line-height:1.75rem}:host .content .list-view .items-table tr{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:host .content .list-view .items-table tr:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1))}:host .content .list-view .items-table tr.folder-row td .item-name i{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}\n"] }]
4161
+ ], template: "<!-- Content -->\n<div class=\"content\">\n <!-- Empty State -->\n @if (vm.folders().length === 0 && vm.files().length === 0) {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-py-16 ax-h-full\">\n <ax-icon icon=\"fa-light fa-folder-open\" class=\"ax-text-6xl ax-mb-4\"></ax-icon>\n <h3 class=\"ax-text-xl ax-font-medium ax-mb-2\">No Items Found</h3>\n <p class=\"\">This folder is empty. Add some files or folders to get started.</p>\n </div>\n } @else {\n <!-- Grid View -->\n @if (vm.isGridView()) {\n <!-- Folders Section -->\n @if (vm.folders().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Folders</h3>\n <div class=\"items-grid\">\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"gridFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n }\n </div>\n </div>\n }\n\n <!-- Files Section -->\n @if (vm.files().length > 0) {\n <div class=\"section\">\n <h3 class=\"section-title\">Files</h3>\n <div class=\"items-grid\">\n @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"gridFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </div>\n </div>\n }\n <!-- Grid View End -->\n }\n\n <!-- List View -->\n @if (vm.isListView()) {\n <div class=\"list-view\">\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"name-column\">Name</th>\n <th class=\"type-column\">Type</th>\n <th class=\"size-column\">Size</th>\n <th class=\"date-column\">Last Modified</th>\n </tr>\n </thead>\n <tbody>\n @for (folder of vm.folders(); track folder.id) {\n <ng-container [ngTemplateOutlet]=\"listFolderTemplate\" [ngTemplateOutletContext]=\"{ $implicit: folder }\">\n </ng-container>\n } @for (file of vm.files(); track file.id) {\n <ng-container [ngTemplateOutlet]=\"listFileTemplate\" [ngTemplateOutletContext]=\"{ $implicit: file }\">\n </ng-container>\n }\n </tbody>\n </table>\n </div>\n } }\n</div>\n\n<!-- Grid View Templates -->\n<ng-template #gridFolderTemplate let-folder>\n <div\n class=\"ax-group ax-cursor-pointer axp-explorer-item\"\n [axp-data]=\"folder\"\n (dblclick)=\"handleNavigateToFolder(folder.id)\"\n >\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <ax-icon icon=\"fa-solid fa-folder-closed \"></ax-icon>\n }\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ folder.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ folder.childrenCount }} items</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{\n folder.lastModified | format : 'datetime' : { format: 'datetime' } | async\n }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<ng-template #gridFileTemplate let-file>\n @let fileInfo = vm.getFileInfo(file.name);\n <div class=\"ax-group ax-cursor-pointer axp-explorer-item\" [axp-data]=\"file\" (dblclick)=\"openFile(file)\">\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-p-4 ax-rounded-lg ax-border ax-lighter-surface\">\n <div class=\"ax-text-yellow-400 fa-3x ax-mb-2\" style=\"--fa-animation-duration: 2s\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n </div>\n <div class=\"ax-flex ax-justify-between ax-font-semibold ax-w-full\">\n <span class=\"ax-text-sm ax-truncate ax-text-start\">{{ file.name }}</span>\n </div>\n <div class=\"ax-flex ax-justify-between ax-w-full ax-font-semibold ax-opacity-65\">\n <span class=\"ax-text-xs ax-text-neutral\">{{ file.size | format : 'filesize' | async }}</span>\n <span class=\"ax-text-xs ax-text-neutral\">{{\n file.lastModified | format : 'datetime' : { format: 'datetime' } | async\n }}</span>\n </div>\n </div>\n </div>\n</ng-template>\n\n<!-- List View Templates -->\n<ng-template #listFolderTemplate let-folder>\n <tr class=\"folder-row\" (dblclick)=\"handleNavigateToFolder(folder.id)\">\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"folder\">\n <div class=\"item-name\">\n @if (vm.isLoadingFolder(folder.id)) {\n <ng-container [ngTemplateOutlet]=\"folderLoading\"> </ng-container>\n } @else {\n <i class=\"fas fa-folder-closed\"></i>\n }\n <span>{{ folder.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"folder\">Folder</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"folder\">{{ folder.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"folder\">\n {{ folder.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #listFileTemplate let-file>\n <tr class=\"file-row\">\n @let fileInfo = vm.getFileInfo(file.name);\n <td class=\"name-column axp-explorer-item\" [axp-data]=\"file\">\n <div class=\"item-name hover:ax-underline\">\n <i class=\"fa-fw {{ fileInfo.icon }} fa-solid\"></i>\n <span>{{ file.name }}</span>\n </div>\n </td>\n <td class=\"type-column axp-explorer-item\" [axp-data]=\"file\">{{ fileInfo.type }}</td>\n <td class=\"size-column axp-explorer-item\" [axp-data]=\"file\">{{ file.size | format : 'filesize' | async }}</td>\n <td class=\"date-column axp-explorer-item\" [axp-data]=\"file\">\n {{ file.lastModified | format : 'datetime' : { format: 'datetime' } | async }}\n </td>\n </tr>\n</ng-template>\n\n<ng-template #folderLoading>\n <i class=\"fa-light fa-spinner fa-spin-pulse ax-text-2xl\"></i>\n</ng-template>\n\n<!-- Context Menu-->\n<ax-context-menu\n #itemsContextMenu\n [target]=\"'.axp-explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n>\n</ax-context-menu>\n\n<ax-context-menu\n #rootContextMenu\n [target]=\"'axm-document-explorer'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n>\n</ax-context-menu>\n", styles: [":host{display:flex;height:100%;flex:1 1 0%;flex-direction:column;gap:1rem}:host .content{flex:1 1 0%;-webkit-user-select:none;-moz-user-select:-moz-none;user-select:none;overflow-y:auto}:host .content .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:2rem}:host .content .loading-state i{font-size:1.5rem;line-height:2rem}:host .content .section{margin-bottom:2rem}:host .content .section:last-child{margin-bottom:0}:host .content .section .section-title{margin-bottom:1rem;font-size:1.125rem;line-height:1.75rem;font-weight:500}:host .content .section .items-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:1rem}:host .content .list-view .items-table{width:100%;border-collapse:collapse}:host .content .list-view .items-table th{border-bottom-width:1px;padding:.75rem;text-align:start;font-weight:500;background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host .content .list-view .items-table th.name-column{width:50%}:host .content .list-view .items-table th.type-column{width:20%}:host .content .list-view .items-table th.size-column{width:15%}:host .content .list-view .items-table th.date-column{width:15%}:host .content .list-view .items-table td{border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:.75rem}:host .content .list-view .items-table td.name-column .item-name{display:flex;align-items:center;gap:.5rem}:host .content .list-view .items-table td.name-column .item-name i{font-size:1.25rem;line-height:1.75rem}:host .content .list-view .items-table tr{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:host .content .list-view .items-table tr:hover{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1))}:host .content .list-view .items-table tr.folder-row td .item-name i{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.animation-duration-2s{--fa-animation-duration: 2s}\n"] }]
3998
4162
  }] });
3999
4163
 
4000
4164
  class AXMDocumentAttachmentWidgetEditComponent extends AXPWidgetComponent {
4165
+ constructor() {
4166
+ super(...arguments);
4167
+ this.driveService = inject(AXMDocumentManagerService);
4168
+ this.vm = inject(AXPDocumentExplorerViewModel);
4169
+ this.rootConfig = RootConfig;
4170
+ this.documentExplorer = viewChild(AXMDocumentExplorerComponent);
4171
+ this.#navigateEffect = effect(() => {
4172
+ const navigatingFolderId = this.vm.navigatingFolderId();
4173
+ if (navigatingFolderId) {
4174
+ this.loadDrive(navigatingFolderId);
4175
+ }
4176
+ });
4177
+ }
4178
+ #navigateEffect;
4179
+ ngOnInit() {
4180
+ super.ngOnInit();
4181
+ this.vm.initialize();
4182
+ this.loadDrive();
4183
+ }
4184
+ async loadDrive(folderId) {
4185
+ if (folderId) {
4186
+ await this.vm.loadFolderContents(folderId);
4187
+ }
4188
+ else {
4189
+ const root = await this.driveService.getRoot(AXMDriveScope.Platform);
4190
+ if (root.result) {
4191
+ await this.vm.loadFolderContents(root.result.id);
4192
+ }
4193
+ }
4194
+ }
4195
+ handleNavigateToFolder(folderId) {
4196
+ this.vm.navigateToFolder(folderId);
4197
+ }
4001
4198
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentAttachmentWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
4002
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXMDocumentAttachmentWidgetEditComponent, isStandalone: true, selector: "axm-document-attachment-widget", usesInheritance: true, ngImport: i0, template: `<axm-document-explorer></axm-document-explorer>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXMDocumentExplorerComponent, selector: "axm-document-explorer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.3", type: AXMDocumentAttachmentWidgetEditComponent, isStandalone: true, selector: "axm-document-attachment-edit-widget", providers: [AXPDocumentExplorerViewModel], viewQueries: [{ propertyName: "documentExplorer", first: true, predicate: AXMDocumentExplorerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-gap-3\" *translate=\"let t\">\n <!-- Header Section -->\n <div class=\"ax-flex ax-flex-row ax-justify-between\">\n <ax-button\n (onClick)=\"handleNavigateToFolder(vm.currentFolder()?.parentId!)\"\n [ngClass]=\"{ 'ax-invisible': !vm.currentFolder()?.parentId }\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <!-- Primary Actions -->\n <ax-button [text]=\"t('actions.add-item', { scope: rootConfig.config.i18n }) | async\" [color]=\"'primary'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <!-- Upload Dropdown -->\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"documentExplorer()?.chooseFile()\"\n [text]=\"(t('drive-types.platform-drive', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-file-arrow-up\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n <axm-document-explorer></axm-document-explorer>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "component", type: AXMDocumentExplorerComponent, selector: "axm-document-explorer" }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i3$1.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4$1.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXButtonGroupModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4003
4200
  }
4004
4201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentAttachmentWidgetEditComponent, decorators: [{
4005
4202
  type: Component,
4006
- args: [{
4007
- selector: 'axm-document-attachment-widget',
4008
- template: `<axm-document-explorer></axm-document-explorer>`,
4009
- changeDetection: ChangeDetectionStrategy.OnPush,
4010
- imports: [CommonModule, AXMDocumentExplorerComponent],
4011
- inputs: [],
4012
- }]
4203
+ args: [{ selector: 'axm-document-attachment-edit-widget', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
4204
+ CommonModule,
4205
+ AXMDocumentExplorerComponent,
4206
+ AXButtonComponent,
4207
+ AXDropdownButtonModule,
4208
+ AXDropdownModule,
4209
+ AXDecoratorModule,
4210
+ AXTranslationModule,
4211
+ AXButtonModule,
4212
+ AXButtonGroupModule,
4213
+ ], inputs: [], providers: [AXPDocumentExplorerViewModel], template: "<div class=\"ax-flex ax-flex-col ax-gap-3\" *translate=\"let t\">\n <!-- Header Section -->\n <div class=\"ax-flex ax-flex-row ax-justify-between\">\n <ax-button\n (onClick)=\"handleNavigateToFolder(vm.currentFolder()?.parentId!)\"\n [ngClass]=\"{ 'ax-invisible': !vm.currentFolder()?.parentId }\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <!-- Primary Actions -->\n <ax-button [text]=\"t('actions.add-item', { scope: rootConfig.config.i18n }) | async\" [color]=\"'primary'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <!-- Upload Dropdown -->\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"documentExplorer()?.chooseFile()\"\n [text]=\"(t('drive-types.platform-drive', { scope: rootConfig.config.i18n }) | async)!\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-file-arrow-up\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n <axm-document-explorer></axm-document-explorer>\n</div>\n" }]
4013
4214
  }] });
4014
4215
 
4015
4216
  var documentAttachmentWidgetEdit_component = /*#__PURE__*/Object.freeze({
@@ -4111,17 +4312,19 @@ function routesFacory() {
4111
4312
  const routes = [
4112
4313
  {
4113
4314
  path: ':app/drive/:scope',
4114
- component: config.viewers.root(),
4315
+ loadComponent: () => {
4316
+ return config.viewers.root();
4317
+ },
4115
4318
  canActivate: [AXPAuthGuard],
4116
4319
  data: { reuse: true },
4117
4320
  children: [
4118
4321
  {
4119
4322
  path: '',
4120
- loadComponent: () => Promise.resolve().then(function () { return drive_component; }).then((c) => c.AXMDocumentDriveComponent),
4323
+ loadComponent: () => import('./acorex-modules-document-management-drive.component-B6az6-_w.mjs').then((c) => c.AXMDocumentDriveComponent),
4121
4324
  },
4122
4325
  {
4123
4326
  path: ':id',
4124
- loadComponent: () => Promise.resolve().then(function () { return drive_component; }).then((c) => c.AXMDocumentDriveComponent),
4327
+ loadComponent: () => import('./acorex-modules-document-management-drive.component-B6az6-_w.mjs').then((c) => c.AXMDocumentDriveComponent),
4125
4328
  },
4126
4329
  ],
4127
4330
  },
@@ -4134,7 +4337,7 @@ class AXMDocumentManagementModule {
4134
4337
  AXMDocumentManagementDocumentTypeMetaValueEntityModule,
4135
4338
  AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule,
4136
4339
  AXMDocumentManagementDocumentTypeEntityModule,
4137
- AXMDocumentManagementDocumentEntityModule, i6.AXPLayoutBuilderModule, AXMFileTypeModule] }); }
4340
+ AXMDocumentManagementDocumentEntityModule, i6.AXPLayoutBuilderModule, AXMFileTypeModule, i3$2.AXMediaViewerModule] }); }
4138
4341
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentManagementModule, providers: [
4139
4342
  {
4140
4343
  provide: AXMFolderService,
@@ -4178,7 +4381,8 @@ class AXMDocumentManagementModule {
4178
4381
  AXPLayoutBuilderModule.forChild({
4179
4382
  widgets: [AXmFileTypeExtensionWidget, AXMDocumentAttachmentWidget],
4180
4383
  }),
4181
- AXMFileTypeModule] }); }
4384
+ AXMFileTypeModule,
4385
+ AXMediaViewerModule.forRoot()] }); }
4182
4386
  }
4183
4387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMDocumentManagementModule, decorators: [{
4184
4388
  type: NgModule,
@@ -4193,6 +4397,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
4193
4397
  widgets: [AXmFileTypeExtensionWidget, AXMDocumentAttachmentWidget],
4194
4398
  }),
4195
4399
  AXMFileTypeModule,
4400
+ AXMediaViewerModule.forRoot(),
4196
4401
  ],
4197
4402
  exports: [],
4198
4403
  providers: [
@@ -4238,5 +4443,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
4238
4443
  * Generated bundle index. Do not edit.
4239
4444
  */
4240
4445
 
4241
- export { AXMDocumentManagerService as A, AXMSearchCommandProvider as B, AXMSettingProvider as C, RootConfig as R, AXMDocumentManagementModule as a, AXMDocumentManagementDocumentEntityModule as b, AXMDocumentService as c, documentFactory as d, AXMDocumentServiceImpl as e, documentTypeFactory as f, AXMDocumentManagementDocumentTypeEntityModule as g, AXMDocumentManagementDocumentTypeEntityService as h, AXMDocumentManagementDocumentTypeEntityServiceImpl as i, documentTypeMetaDefinitionfactory as j, AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule as k, AXMDocumentManagementDocumentTypeMetaDefinitionEntityService as l, AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl as m, documentTypeMetaValueFactory as n, AXMDocumentManagementDocumentTypeMetaValueEntityModule as o, AXMDocumentManagementDocumentTypeMetaValueEntityService as p, AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl as q, documentTypeStatusDefinitionFactory as r, AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule as s, AXMDocumentManagementDocumentTypeStatusDefinitionEntityService as t, AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl as u, folderFactory as v, AXMFolderService as w, AXMFolderServiceImpl as x, AXMEntityProvider as y, AXMMenuProvider as z };
4242
- //# sourceMappingURL=acorex-modules-document-management-acorex-modules-document-management-DagdBc6i.mjs.map
4446
+ export { AXMDocumentManagerService as A, AXMFolderServiceImpl as B, AXMEntityProvider as C, AXMMenuProvider as D, AXMSearchCommandProvider as E, AXMSettingProvider as F, RootConfig as R, AXPDocumentExplorerViewModel as a, AXMDocumentExplorerComponent as b, AXMDriveScope as c, AXMDocumentManagementModule as d, documentFactory as e, AXMDocumentManagementDocumentEntityModule as f, AXMDocumentService as g, AXMDocumentServiceImpl as h, documentTypeFactory as i, AXMDocumentManagementDocumentTypeEntityModule as j, AXMDocumentManagementDocumentTypeEntityService as k, AXMDocumentManagementDocumentTypeEntityServiceImpl as l, documentTypeMetaDefinitionfactory as m, AXMDocumentManagementDocumentTypeMetaDefinitionEntityModule as n, AXMDocumentManagementDocumentTypeMetaDefinitionEntityService as o, AXMDocumentManagementDocumentTypeMetaDefinitionEntityServiceImpl as p, documentTypeMetaValueFactory as q, AXMDocumentManagementDocumentTypeMetaValueEntityModule as r, AXMDocumentManagementDocumentTypeMetaValueEntityService as s, AXMDocumentManagementDocumentTypeMetaValueEntityServiceImpl as t, documentTypeStatusDefinitionFactory as u, AXMDocumentManagementDocumentTypeStatusDefinitionEntityModule as v, AXMDocumentManagementDocumentTypeStatusDefinitionEntityService as w, AXMDocumentManagementDocumentTypeStatusDefinitionEntityServiceImpl as x, folderFactory as y, AXMFolderService as z };
4447
+ //# sourceMappingURL=acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs.map