@acorex/modules 19.2.17-next.0 → 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 (143) 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/document-explorer.component.d.ts +7 -0
  15. package/document-management/lib/features/drive/drive.component.d.ts +4 -0
  16. package/document-management/lib/features/drive-choose/drive-choose.component.d.ts +200 -0
  17. package/document-management/lib/features/shared/components/file-viewer-popup/file-viewer-popup.component.d.ts +9 -0
  18. package/document-management/lib/features/shared/components/file-viewer-popup/index.d.ts +1 -0
  19. package/document-management/lib/features/shared/components/index.d.ts +2 -0
  20. package/document-management/lib/features/shared/components/tree-folder-popup/index.d.ts +1 -0
  21. package/document-management/lib/features/shared/components/tree-folder-popup/tree-folder-popup.component.d.ts +20 -0
  22. package/document-management/lib/features/shared/document-manager.service.d.ts +41 -49
  23. package/document-management/lib/features/shared/document-manager.types.d.ts +2 -0
  24. package/document-management/lib/features/widgets/document-attachment/document-attachment-widget-edit.component.d.ts +113 -1
  25. package/fesm2022/{acorex-modules-application-management-module-designer.component-DPJ4qpK3.mjs → acorex-modules-application-management-module-designer.component-BSGSZi9T.mjs} +2 -2
  26. package/fesm2022/{acorex-modules-application-management-module-designer.component-DPJ4qpK3.mjs.map → acorex-modules-application-management-module-designer.component-BSGSZi9T.mjs.map} +1 -1
  27. package/fesm2022/acorex-modules-application-management.mjs +3 -3
  28. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-DTje3YIv.mjs → acorex-modules-auth-acorex-modules-auth-Xcs9ViQv.mjs} +13 -13
  29. package/fesm2022/acorex-modules-auth-acorex-modules-auth-Xcs9ViQv.mjs.map +1 -0
  30. package/fesm2022/{acorex-modules-auth-app-chooser.component-CZxX5-T_.mjs → acorex-modules-auth-app-chooser.component-0L9y_yn_.mjs} +3 -3
  31. package/fesm2022/{acorex-modules-auth-app-chooser.component-CZxX5-T_.mjs.map → acorex-modules-auth-app-chooser.component-0L9y_yn_.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-auth-login.module-B9P2XpfQ.mjs → acorex-modules-auth-login.module-CfO1IwH9.mjs} +4 -4
  33. package/fesm2022/{acorex-modules-auth-login.module-B9P2XpfQ.mjs.map → acorex-modules-auth-login.module-CfO1IwH9.mjs.map} +1 -1
  34. package/fesm2022/acorex-modules-auth-master.layout-hLuHDgvl.mjs +23 -0
  35. package/fesm2022/acorex-modules-auth-master.layout-hLuHDgvl.mjs.map +1 -0
  36. package/fesm2022/acorex-modules-auth-password.component-BztZ3DJd.mjs +132 -0
  37. package/fesm2022/acorex-modules-auth-password.component-BztZ3DJd.mjs.map +1 -0
  38. package/fesm2022/{acorex-modules-auth-password.component-C7Yp-ioT.mjs → acorex-modules-auth-password.component-CTVBARbz.mjs} +2 -2
  39. package/fesm2022/{acorex-modules-auth-password.component-C7Yp-ioT.mjs.map → acorex-modules-auth-password.component-CTVBARbz.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-auth-routes-Bu-xB4O6.mjs → acorex-modules-auth-routes-CJz0CRlp.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-auth-routes-Bu-xB4O6.mjs.map → acorex-modules-auth-routes-CJz0CRlp.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-CKsbiOUX.mjs → acorex-modules-auth-tenant-chooser.component-kVFAR9t1.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-CKsbiOUX.mjs.map → acorex-modules-auth-tenant-chooser.component-kVFAR9t1.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-auth-two-factor-code.component-DrV3UBuT.mjs → acorex-modules-auth-two-factor-code.component-_VYT-h-9.mjs} +2 -2
  45. 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
  46. package/fesm2022/{acorex-modules-auth-two-factor.module-YRh6_YcG.mjs → acorex-modules-auth-two-factor.module-BQfrnrd0.mjs} +3 -3
  47. package/fesm2022/{acorex-modules-auth-two-factor.module-YRh6_YcG.mjs.map → acorex-modules-auth-two-factor.module-BQfrnrd0.mjs.map} +1 -1
  48. package/fesm2022/acorex-modules-auth.mjs +1 -1
  49. package/fesm2022/acorex-modules-common-index-BAt02rnb.mjs +472 -0
  50. package/fesm2022/acorex-modules-common-index-BAt02rnb.mjs.map +1 -0
  51. package/fesm2022/acorex-modules-common.mjs +5 -505
  52. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  53. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-C9ZCejjs.mjs → acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs} +415 -60
  54. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-BmLGtKDq.mjs.map +1 -0
  55. package/fesm2022/{acorex-modules-document-management-create-folder-dialog.component-BnRaCq_Q.mjs → acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs} +4 -5
  56. package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-DqoWmtm7.mjs.map +1 -0
  57. package/fesm2022/acorex-modules-document-management-drive-choose.component-CkS8s7zm.mjs +152 -0
  58. package/fesm2022/acorex-modules-document-management-drive-choose.component-CkS8s7zm.mjs.map +1 -0
  59. package/fesm2022/acorex-modules-document-management-drive.component-B6az6-_w.mjs +164 -0
  60. package/fesm2022/acorex-modules-document-management-drive.component-B6az6-_w.mjs.map +1 -0
  61. package/fesm2022/acorex-modules-document-management-file-viewer-popup.component-CaSagveT.mjs +24 -0
  62. package/fesm2022/acorex-modules-document-management-file-viewer-popup.component-CaSagveT.mjs.map +1 -0
  63. package/fesm2022/acorex-modules-document-management-index-9l8D5iEE.mjs +69 -0
  64. package/fesm2022/acorex-modules-document-management-index-9l8D5iEE.mjs.map +1 -0
  65. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-EBf1XqU8.mjs → acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs} +4 -4
  66. package/fesm2022/{acorex-modules-document-management-rename-node-dialog.component-EBf1XqU8.mjs.map → acorex-modules-document-management-rename-node-dialog.component-BoODbM0H.mjs.map} +1 -1
  67. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  68. 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
  69. 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
  70. package/fesm2022/{acorex-modules-form-template-management-category.entity-BZXqnhwK.mjs → acorex-modules-form-template-management-category.entity-BjmyIav9.mjs} +3 -3
  71. package/fesm2022/{acorex-modules-form-template-management-category.entity-BZXqnhwK.mjs.map → acorex-modules-form-template-management-category.entity-BjmyIav9.mjs.map} +1 -1
  72. package/fesm2022/{acorex-modules-form-template-management-setting.provider-o2_TSVfK.mjs → acorex-modules-form-template-management-setting.provider-hkwaOGfL.mjs} +2 -2
  73. 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
  74. package/fesm2022/{acorex-modules-form-template-management-template-picker.component-BxOdV3y2.mjs → acorex-modules-form-template-management-template-picker.component-gdMTnjl-.mjs} +2 -2
  75. 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
  76. 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
  77. 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
  78. package/fesm2022/{acorex-modules-form-template-management-template.entity-JvWcqjzi.mjs → acorex-modules-form-template-management-template.entity-_yMAqh35.mjs} +3 -3
  79. package/fesm2022/{acorex-modules-form-template-management-template.entity-JvWcqjzi.mjs.map → acorex-modules-form-template-management-template.entity-_yMAqh35.mjs.map} +1 -1
  80. package/fesm2022/{acorex-modules-form-template-management-viewer-popup.component-Bllb70Ih.mjs → acorex-modules-form-template-management-viewer-popup.component-CbcSFEis.mjs} +3 -3
  81. 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
  82. package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
  83. package/fesm2022/acorex-modules-notification-management.mjs +2 -2
  84. package/fesm2022/{acorex-modules-organization-management-add-item.component-Y-i6xDkl.mjs → acorex-modules-organization-management-add-item.component-Bsae9u-e.mjs} +2 -2
  85. 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
  86. package/fesm2022/{acorex-modules-organization-management-branch.entity-DhObzxhh.mjs → acorex-modules-organization-management-branch.entity-e5pFx82N.mjs} +2 -2
  87. package/fesm2022/{acorex-modules-organization-management-branch.entity-DhObzxhh.mjs.map → acorex-modules-organization-management-branch.entity-e5pFx82N.mjs.map} +1 -1
  88. package/fesm2022/{acorex-modules-organization-management-chart.entity-Bk4WgsYr.mjs → acorex-modules-organization-management-chart.entity-DnmNyyD2.mjs} +2 -2
  89. package/fesm2022/{acorex-modules-organization-management-chart.entity-Bk4WgsYr.mjs.map → acorex-modules-organization-management-chart.entity-DnmNyyD2.mjs.map} +1 -1
  90. package/fesm2022/{acorex-modules-organization-management-company.entity-d7GaCVei.mjs → acorex-modules-organization-management-company.entity-BRkEcDNt.mjs} +2 -2
  91. package/fesm2022/{acorex-modules-organization-management-company.entity-d7GaCVei.mjs.map → acorex-modules-organization-management-company.entity-BRkEcDNt.mjs.map} +1 -1
  92. package/fesm2022/{acorex-modules-organization-management-department.entity-BxyeK3lU.mjs → acorex-modules-organization-management-department.entity-ChJXNpXn.mjs} +2 -2
  93. package/fesm2022/{acorex-modules-organization-management-department.entity-BxyeK3lU.mjs.map → acorex-modules-organization-management-department.entity-ChJXNpXn.mjs.map} +1 -1
  94. package/fesm2022/{acorex-modules-organization-management-division.entity-Dh54R4es.mjs → acorex-modules-organization-management-division.entity-qyDyhl-q.mjs} +2 -2
  95. package/fesm2022/{acorex-modules-organization-management-division.entity-Dh54R4es.mjs.map → acorex-modules-organization-management-division.entity-qyDyhl-q.mjs.map} +1 -1
  96. package/fesm2022/{acorex-modules-organization-management-employee.entity-DcJCJN3R.mjs → acorex-modules-organization-management-employee.entity-Cp5TejzT.mjs} +2 -2
  97. package/fesm2022/{acorex-modules-organization-management-employee.entity-DcJCJN3R.mjs.map → acorex-modules-organization-management-employee.entity-Cp5TejzT.mjs.map} +1 -1
  98. package/fesm2022/{acorex-modules-organization-management-employment-type.entity-aNkt-l_e.mjs → acorex-modules-organization-management-employment-type.entity-Ul10Mdwm.mjs} +2 -2
  99. 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
  100. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-aMPR3Oyw.mjs +92 -0
  101. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-aMPR3Oyw.mjs.map +1 -0
  102. package/fesm2022/{acorex-modules-organization-management-org-chart.page-DXyAFXwE.mjs → acorex-modules-organization-management-org-chart.page-CAgSSVON.mjs} +15 -15
  103. package/fesm2022/acorex-modules-organization-management-org-chart.page-CAgSSVON.mjs.map +1 -0
  104. package/fesm2022/{acorex-modules-organization-management-position.entity-D17Yembh.mjs → acorex-modules-organization-management-position.entity-BpQbwW-x.mjs} +2 -2
  105. package/fesm2022/{acorex-modules-organization-management-position.entity-D17Yembh.mjs.map → acorex-modules-organization-management-position.entity-BpQbwW-x.mjs.map} +1 -1
  106. package/fesm2022/{acorex-modules-organization-management-role.entity-Cmbyle8P.mjs → acorex-modules-organization-management-role.entity-B9N4qA_E.mjs} +2 -2
  107. package/fesm2022/{acorex-modules-organization-management-role.entity-Cmbyle8P.mjs.map → acorex-modules-organization-management-role.entity-B9N4qA_E.mjs.map} +1 -1
  108. package/fesm2022/{acorex-modules-organization-management-team.entity-DcurAtLd.mjs → acorex-modules-organization-management-team.entity-7q6Eg74A.mjs} +2 -2
  109. package/fesm2022/{acorex-modules-organization-management-team.entity-DcurAtLd.mjs.map → acorex-modules-organization-management-team.entity-7q6Eg74A.mjs.map} +1 -1
  110. package/fesm2022/acorex-modules-organization-management.mjs +15 -13
  111. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  112. package/fesm2022/{acorex-modules-platform-management-list-version.component-CoZBz85x.mjs → acorex-modules-platform-management-list-version.component-DI1wKhRv.mjs} +2 -2
  113. package/fesm2022/{acorex-modules-platform-management-list-version.component-CoZBz85x.mjs.map → acorex-modules-platform-management-list-version.component-DI1wKhRv.mjs.map} +1 -1
  114. package/fesm2022/acorex-modules-platform-management.mjs +10 -8
  115. package/fesm2022/acorex-modules-platform-management.mjs.map +1 -1
  116. package/fesm2022/acorex-modules-scheduler-job-management.mjs +1 -1
  117. package/fesm2022/acorex-modules-security-management.mjs +1 -1
  118. package/fesm2022/acorex-modules-text-template-management.mjs +1 -1
  119. package/organization-management/lib/features/organization-chart/org-chart-configuration.page.d.ts +4 -0
  120. package/organization-management/lib/features/organization-chart/org-chart.page.d.ts +4 -0
  121. package/package.json +1 -1
  122. package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.entity.d.ts +0 -3
  123. package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.service.d.ts +0 -10
  124. package/common/lib/entities/dashboard-widget-data/dashboard-widget-data.types.d.ts +0 -9
  125. package/common/lib/entities/dashboard-widget-data/index.d.ts +0 -3
  126. package/common/lib/features/home/dashboard-home.d.ts +0 -5
  127. package/fesm2022/acorex-modules-auth-acorex-modules-auth-DTje3YIv.mjs.map +0 -1
  128. package/fesm2022/acorex-modules-auth-master.layout-BYC0FYq1.mjs +0 -23
  129. package/fesm2022/acorex-modules-auth-master.layout-BYC0FYq1.mjs.map +0 -1
  130. package/fesm2022/acorex-modules-auth-password.component-DzrYH4yM.mjs +0 -127
  131. package/fesm2022/acorex-modules-auth-password.component-DzrYH4yM.mjs.map +0 -1
  132. package/fesm2022/acorex-modules-common-index-zaFxpV8u.mjs +0 -14
  133. package/fesm2022/acorex-modules-common-index-zaFxpV8u.mjs.map +0 -1
  134. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-C9ZCejjs.mjs.map +0 -1
  135. package/fesm2022/acorex-modules-document-management-create-folder-dialog.component-BnRaCq_Q.mjs.map +0 -1
  136. package/fesm2022/acorex-modules-document-management-drive.component-Sz198sA6.mjs +0 -165
  137. package/fesm2022/acorex-modules-document-management-drive.component-Sz198sA6.mjs.map +0 -1
  138. package/fesm2022/acorex-modules-document-management-index--I8MGeDs.mjs +0 -2
  139. package/fesm2022/acorex-modules-document-management-index--I8MGeDs.mjs.map +0 -1
  140. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DO8wSZqZ.mjs +0 -92
  141. package/fesm2022/acorex-modules-organization-management-org-chart-configuration.page-DO8wSZqZ.mjs.map +0 -1
  142. package/fesm2022/acorex-modules-organization-management-org-chart.page-DXyAFXwE.mjs.map +0 -1
  143. /package/common/lib/features/{home → dashboard-home}/index.d.ts +0 -0
@@ -0,0 +1,472 @@
1
+ import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
2
+ import * as i2 from '@acorex/components/button';
3
+ import { AXButtonModule } from '@acorex/components/button';
4
+ import * as i5 from '@acorex/components/decorators';
5
+ import { AXDecoratorModule } from '@acorex/components/decorators';
6
+ import * as i3 from '@acorex/components/dropdown';
7
+ import { AXDropdownModule } from '@acorex/components/dropdown';
8
+ import * as i4$1 from '@acorex/components/dropdown-button';
9
+ import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
10
+ import * as i3$2 from '@acorex/components/grid-layout-builder';
11
+ import { AXGridLayoutBuilderModule } from '@acorex/components/grid-layout-builder';
12
+ import { AXTranslationService, AXTranslatorDirective } from '@acorex/core/translation';
13
+ import * as i1$1 from '@acorex/platform/layout/builder';
14
+ import { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';
15
+ import { AXPDesignerService } from '@acorex/platform/layout/designer';
16
+ import { AXPSimplePageLayout } from '@acorex/platform/themes/default';
17
+ import { AXPLayoutThemeService, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent } from '@acorex/platform/themes/shared';
18
+ import { AsyncPipe } from '@angular/common';
19
+ import * as i0 from '@angular/core';
20
+ import { output, ChangeDetectionStrategy, Component, model, afterNextRender, inject, Injectable, computed, signal } from '@angular/core';
21
+ import { ActivatedRoute } from '@angular/router';
22
+ import { RootConfig } from './acorex-modules-common.mjs';
23
+ import { AXDialogService } from '@acorex/components/dialog';
24
+ import { AXPDataGenerator } from '@acorex/platform/core';
25
+ import { signalStore, withState, withComputed, withMethods, patchState } from '@ngrx/signals';
26
+ import { AXPopupService } from '@acorex/components/popup';
27
+ import * as i4 from '@acorex/components/label';
28
+ import { AXLabelModule } from '@acorex/components/label';
29
+ import { AXBasePageComponent } from '@acorex/components/page';
30
+ import * as i3$1 from '@acorex/components/text-box';
31
+ import { AXTextBoxModule } from '@acorex/components/text-box';
32
+ import * as i1 from '@angular/forms';
33
+ import { FormsModule } from '@angular/forms';
34
+
35
+ class AXPDashboardWidgetWrapperComponent {
36
+ constructor() {
37
+ this.onDelete = output();
38
+ }
39
+ handleOnItemClick(event) {
40
+ console.log(event);
41
+ switch (event.item.data) {
42
+ case 'delete':
43
+ this.onDelete.emit();
44
+ break;
45
+ default:
46
+ break;
47
+ }
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardWidgetWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXPDashboardWidgetWrapperComponent, isStandalone: true, selector: "axm-dashboard-widget-wrapper", outputs: { onDelete: "onDelete" }, ngImport: i0, template: "<section class=\"ax-relative ax-size-full ax-flex ax-justify-center ax-items-center ax-group\">\n <div class=\"ax-p-1 ax-absolute ax-top-0 ax-left-0 ax-z-[9999] ax-invisible group-hover:ax-visible\">\n <ax-button color=\"secondary\" class=\"ax-sm\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-h\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ng-container>\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n <ax-button-item [data]=\"'delete'\" text=\"Delete\" color=\"danger\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n <ng-content></ng-content>\n</section>\n", styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.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.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.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: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardWidgetWrapperComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ selector: 'axm-dashboard-widget-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule, AXDropdownModule], standalone: true, template: "<section class=\"ax-relative ax-size-full ax-flex ax-justify-center ax-items-center ax-group\">\n <div class=\"ax-p-1 ax-absolute ax-top-0 ax-left-0 ax-z-[9999] ax-invisible group-hover:ax-visible\">\n <ax-button color=\"secondary\" class=\"ax-sm\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-h\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ng-container>\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n <ax-button-item [data]=\"'delete'\" text=\"Delete\" color=\"danger\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n <ng-content></ng-content>\n</section>\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
55
+ }] });
56
+
57
+ class AXCAddDashboardPopup extends AXBasePageComponent {
58
+ constructor() {
59
+ super(...arguments);
60
+ this.title = model();
61
+ this.description = model();
62
+ this.#init = afterNextRender(() => {
63
+ this.title.set(this.data.title || '');
64
+ this.description.set(this.data.description || '');
65
+ });
66
+ }
67
+ #init;
68
+ async handleClose(isCanceled = false) {
69
+ this.close({
70
+ title: this.title(),
71
+ description: this.description(),
72
+ isCanceled,
73
+ });
74
+ }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXCAddDashboardPopup, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
76
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: AXCAddDashboardPopup, isStandalone: true, selector: "ng-component", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { title: "titleChange", description: "descriptionChange" }, usesInheritance: true, ngImport: i0, template: `
77
+ <div class="ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center">
78
+ <ax-label>Title</ax-label>
79
+ <ax-text-box [(ngModel)]="title" name="title"></ax-text-box>
80
+
81
+ <ax-label>Description</ax-label>
82
+ <ax-text-box [(ngModel)]="description" name="description"></ax-text-box>
83
+ </div>
84
+
85
+ <ax-footer>
86
+ <ax-prefix></ax-prefix>
87
+ <ax-suffix>
88
+ <ax-button text="Cancel" look="solid" (onClick)="handleClose(true)"></ax-button>
89
+ <ax-button text="Save" look="solid" color="primary" (onClick)="handleClose()">
90
+ <ax-icon class="fa-solid fa-save"></ax-icon>
91
+ </ax-button>
92
+ </ax-suffix>
93
+ </ax-footer>
94
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.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: AXTextBoxModule }, { kind: "component", type: i3$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i4.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.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" }] }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXCAddDashboardPopup, decorators: [{
97
+ type: Component,
98
+ args: [{
99
+ template: `
100
+ <div class="ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center">
101
+ <ax-label>Title</ax-label>
102
+ <ax-text-box [(ngModel)]="title" name="title"></ax-text-box>
103
+
104
+ <ax-label>Description</ax-label>
105
+ <ax-text-box [(ngModel)]="description" name="description"></ax-text-box>
106
+ </div>
107
+
108
+ <ax-footer>
109
+ <ax-prefix></ax-prefix>
110
+ <ax-suffix>
111
+ <ax-button text="Cancel" look="solid" (onClick)="handleClose(true)"></ax-button>
112
+ <ax-button text="Save" look="solid" color="primary" (onClick)="handleClose()">
113
+ <ax-icon class="fa-solid fa-save"></ax-icon>
114
+ </ax-button>
115
+ </ax-suffix>
116
+ </ax-footer>
117
+ `,
118
+ imports: [FormsModule, AXButtonModule, AXTextBoxModule, AXLabelModule, AXButtonModule, AXDecoratorModule],
119
+ }]
120
+ }] });
121
+
122
+ class AXPDashboardPopupService {
123
+ constructor() {
124
+ this.popupService = inject(AXPopupService);
125
+ }
126
+ async generateDashboardLayout(data) {
127
+ const result = await this.popupService.open(AXCAddDashboardPopup, {
128
+ header: true,
129
+ size: 'fit',
130
+ draggable: true,
131
+ hasBackdrop: true,
132
+ title: 'Dashboard Layout Details',
133
+ data: { data },
134
+ });
135
+ const { isCanceled, ...rest } = result.data;
136
+ if (isCanceled) {
137
+ throw new Error('Process is Canceled by User!');
138
+ }
139
+ else {
140
+ return rest;
141
+ }
142
+ }
143
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardPopupService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
144
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardPopupService, providedIn: 'root' }); }
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardPopupService, decorators: [{
147
+ type: Injectable,
148
+ args: [{ providedIn: 'root' }]
149
+ }] });
150
+
151
+ // Initial state
152
+ const initialDashboards = [
153
+ {
154
+ id: 'widget1',
155
+ title: 'Home',
156
+ widget: [
157
+ {
158
+ config: {
159
+ id: '1',
160
+ height: 5,
161
+ width: 6,
162
+ },
163
+ node: {
164
+ name: 'bar-chart',
165
+ path: 'bar-chart',
166
+ type: 'bar-chart',
167
+ defaultValue: {
168
+ data: [
169
+ { label: 'Category A', value: 30, color: 'green' },
170
+ { label: 'Category B', value: 80 },
171
+ { label: 'Category C', value: 45 },
172
+ ],
173
+ options: { width: 600, height: 400, color: ['red', 'yellow', 'blue'] },
174
+ },
175
+ },
176
+ },
177
+ {
178
+ config: {
179
+ id: '5',
180
+ height: 5,
181
+ width: 6,
182
+ },
183
+ node: {
184
+ name: 'map',
185
+ path: 'map',
186
+ type: 'map',
187
+ options: {
188
+ hasDraw: true,
189
+ zoomLevel: 5,
190
+ latitude: 32,
191
+ longitude: 53,
192
+ fitToDraw: true,
193
+ limitDraw: [
194
+ {
195
+ points: [
196
+ {
197
+ latitude: 33.8339199536547,
198
+ longitude: 51.16056693933671,
199
+ },
200
+ {
201
+ latitude: 32.37996146435729,
202
+ longitude: 50.017223524232904,
203
+ },
204
+ {
205
+ latitude: 31.034108344903512,
206
+ longitude: 51.402428046377885,
207
+ },
208
+ {
209
+ latitude: 31.690781806136822,
210
+ longitude: 53.24936740923793,
211
+ },
212
+ {
213
+ latitude: 33.211116472416855,
214
+ longitude: 53.18340528913575,
215
+ },
216
+ ],
217
+ color: 'blue',
218
+ },
219
+ ],
220
+ },
221
+ },
222
+ },
223
+ ],
224
+ },
225
+ {
226
+ id: 'widget2',
227
+ title: 'Work',
228
+ widget: [
229
+ {
230
+ config: {
231
+ id: '2',
232
+ height: 5,
233
+ width: 6,
234
+ },
235
+ node: {
236
+ name: 'sticky-note',
237
+ path: 'sticky-note',
238
+ type: 'sticky-note',
239
+ defaultValue: `test`,
240
+ },
241
+ },
242
+ {
243
+ config: { id: '3', height: 5, width: 6 },
244
+ node: {
245
+ name: 'donut-chart',
246
+ path: 'donut-chart',
247
+ type: 'donut-chart',
248
+ defaultValue: {
249
+ data: [
250
+ { id: 'a', name: 'Apples', value: 40, color: '#E57373' },
251
+ { id: 'b', name: 'Bananas', value: 30, color: '#FFF176' },
252
+ { id: 'c', name: 'ta', value: 20, color: '#F06292' },
253
+ { id: 'd', name: 'Dates', value: 10, color: '#9575CD' },
254
+ ],
255
+ options: { width: 250, height: 250 },
256
+ },
257
+ },
258
+ },
259
+ ],
260
+ },
261
+ ];
262
+ // Create the SignalStore
263
+ const AXCDashboardStore = signalStore({},
264
+ // Define the state
265
+ withState({
266
+ dashboards: initialDashboards,
267
+ currentDashboardId: initialDashboards[0].id,
268
+ dashboardsOption: { float: true, cellHeight: 100, gap: 20, minRow: 7, column: 12 },
269
+ }),
270
+ // Define computed properties
271
+ withComputed((state) => ({
272
+ currentDashboard: computed(() => {
273
+ return state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId()) || null;
274
+ }),
275
+ })),
276
+ // Define methods
277
+ withMethods((state, dashboardPopup = inject(AXPDashboardPopupService), dialogService = inject(AXDialogService), translationService = inject(AXTranslationService), designerService = inject(AXPDesignerService)) => ({
278
+ // Set current dashboard
279
+ setCurrentDashboard(dashboardId) {
280
+ patchState(state, { currentDashboardId: dashboardId });
281
+ },
282
+ // Add a new dashboard
283
+ async addDashboard() {
284
+ try {
285
+ const newDashboard = await dashboardPopup.generateDashboardLayout({});
286
+ newDashboard.id = AXPDataGenerator.uuid();
287
+ newDashboard.widget = [];
288
+ // newDashboard.widget = [
289
+ // {
290
+ // config: {
291
+ // h: 1,
292
+ // w: 1,
293
+ // id: AXPDataGenerator.uuid(),
294
+ // },
295
+ // },
296
+ // ];
297
+ const updatedDashboards = [...state.dashboards(), newDashboard];
298
+ patchState(state, {
299
+ dashboards: updatedDashboards,
300
+ currentDashboardId: newDashboard.id,
301
+ });
302
+ }
303
+ catch (error) {
304
+ console.error('Error adding dashboard:', error);
305
+ }
306
+ },
307
+ // Add a widget to the current dashboard
308
+ async addWidget() {
309
+ if (!state.currentDashboardId()) {
310
+ console.warn('No current dashboard selected');
311
+ return;
312
+ }
313
+ try {
314
+ // Step 1: Show the picker and get the selected widgets
315
+ const widgets = await designerService.showPicker({
316
+ name: 'page-layout',
317
+ type: 'page-layout',
318
+ children: [],
319
+ });
320
+ // Step 2: Convert the selected widgets into AXPDashboardWidgetData format
321
+ const convertedWidgets = widgets.map((widget) => ({
322
+ config: { height: 2, width: 2, id: AXPDataGenerator.uuid() },
323
+ node: widget,
324
+ }));
325
+ // Step 3: Update the dashboards
326
+ const updatedDashboards = state.dashboards().map((dashboard) => {
327
+ if (dashboard.id === state.currentDashboardId()) {
328
+ return {
329
+ ...dashboard,
330
+ widget: [...dashboard.widget, ...convertedWidgets],
331
+ };
332
+ }
333
+ return dashboard;
334
+ });
335
+ patchState(state, { dashboards: updatedDashboards });
336
+ }
337
+ catch (error) {
338
+ console.error('Error adding widget:', error);
339
+ }
340
+ },
341
+ // Remove a dashboard
342
+ async removeDashboard(id) {
343
+ if (!id) {
344
+ console.warn('No dashboard ID provided for removal');
345
+ return;
346
+ }
347
+ try {
348
+ const dialogResult = await dialogService.confirm(await translationService.translateAsync('workflow.warning'), await translationService.translateAsync('workflow.confirm-delete'), 'danger', 'horizontal');
349
+ if (dialogResult.result) {
350
+ // Remove the dashboard
351
+ const updatedDashboards = state.dashboards().filter((dashboard) => dashboard.id !== id);
352
+ // Update state
353
+ patchState(state, {
354
+ dashboards: updatedDashboards,
355
+ currentDashboardId: id === state.currentDashboardId()
356
+ ? updatedDashboards.length > 0
357
+ ? updatedDashboards[0].id
358
+ : null
359
+ : state.currentDashboardId(),
360
+ });
361
+ }
362
+ }
363
+ catch (error) {
364
+ console.error('Error removing dashboard:', error);
365
+ }
366
+ },
367
+ // Remove a widget from a dashboard
368
+ removeWidget(dashboardId, widgetId) {
369
+ const updatedDashboards = state.dashboards().map((dashboard) => {
370
+ if (dashboard.id === dashboardId) {
371
+ return {
372
+ ...dashboard,
373
+ widget: dashboard.widget.filter((widget) => widget.config.id !== widgetId),
374
+ };
375
+ }
376
+ return dashboard;
377
+ });
378
+ patchState(state, { dashboards: updatedDashboards });
379
+ },
380
+ // Handle configuration changes
381
+ handleConfigChange(dashboard) {
382
+ const updatedDashboards = state.dashboards().map((d) => (d.id === dashboard.id ? dashboard : d));
383
+ patchState(state, {
384
+ dashboards: updatedDashboards,
385
+ currentDashboardId: dashboard.id,
386
+ });
387
+ },
388
+ // Handle grid layout changes
389
+ onGridChange(event) {
390
+ if (!state.currentDashboard()) {
391
+ console.warn('No current dashboard for grid change');
392
+ return;
393
+ }
394
+ // Extract nodes from the event and remove the `element` property
395
+ const nodes = event.nodes.map(({ element, ...rest }) => rest);
396
+ // Update the current dashboard
397
+ const currentDashboard = state.currentDashboard();
398
+ const updatedWidgets = currentDashboard.widget.map((widget) => {
399
+ const updatedNode = nodes.find((node) => node.id === widget.config.id);
400
+ if (updatedNode) {
401
+ return {
402
+ ...widget,
403
+ config: updatedNode,
404
+ };
405
+ }
406
+ return widget;
407
+ });
408
+ const updatedDashboard = {
409
+ ...currentDashboard,
410
+ widget: updatedWidgets,
411
+ };
412
+ // Update the dashboards
413
+ const updatedDashboards = state
414
+ .dashboards()
415
+ .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));
416
+ patchState(state, { dashboards: updatedDashboards });
417
+ },
418
+ })));
419
+
420
+ class AXPDashboardHomeComponent {
421
+ constructor() {
422
+ this.activatedRoute = inject(ActivatedRoute);
423
+ this.layout = inject(AXPLayoutThemeService);
424
+ this.store = inject(AXCDashboardStore);
425
+ this.rootConfig = RootConfig;
426
+ this.isEdited = signal(false);
427
+ this.context = signal({});
428
+ }
429
+ toggleEdit() {
430
+ //(window as any).d = this.activatedRoute;
431
+ this.isEdited.update((i) => !i);
432
+ }
433
+ getGridBackground() {
434
+ if (!this.isEdited()) {
435
+ return null;
436
+ }
437
+ const gap = this.store.dashboardsOption().gap ?? 0; // Get the gap value, default to 0 if not provided
438
+ const columnWidth = `calc((100% - ${gap}px) / ${this.store.dashboardsOption().column ?? 12})`;
439
+ const cellHeight = this.store.dashboardsOption().cellHeight;
440
+ // Adjust the vertical lines to start at the gap value and end before the gap
441
+ const verticalLines = `linear-gradient(to right, #0000001c 1px, transparent 1px) ${gap}px 0 / ${columnWidth} 100%`;
442
+ // Adjust the horizontal lines to start at the gap value and end before the gap
443
+ const horizontalLines = `linear-gradient(to bottom, #0000001c 1px, transparent 1px) 0 ${gap}px / 100% ${cellHeight}px`;
444
+ return `${verticalLines}, ${horizontalLines}`;
445
+ }
446
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardHomeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
447
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPDashboardHomeComponent, isStandalone: true, selector: "ng-component", providers: [AXPDesignerService, AXCDashboardStore], ngImport: i0, template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{ store.currentDashboard()?.title }} </axp-layout-title>\n\n <axp-layout-description> {{ store.currentDashboard()?.description }} </axp-layout-description>\n 1\n <axp-layout-breadcrumbs>\n <!-- <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward ax-text-xs\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item [routerLink]=\"b.url\" class=\"!ax-text-xs\"> {{ b.title}} </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs> -->\n </axp-layout-breadcrumbs>\n\n <axp-layout-actions>\n <axp-layout-actions-primary>\n <ax-button [text]=\"t('create-new', { 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)=\"store.addDashboard()\"\n [text]=\" (t('dashboard.dashboard', { 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)=\"store.addWidget()\"\n [text]=\" (t('dashboard.widget', { 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\n <ax-dropdown-button [text]=\"store.currentDashboard()?.title\" [color]=\"'primary'\">\n <ax-button-item-list>\n @for (dashboard of store.dashboards(); track dashboard.id) {\n <ax-button-item\n [text]=\"dashboard.title\"\n [selected]=\"dashboard.id === store.currentDashboard()?.id\"\n (onClick)=\"store.handleConfigChange(dashboard)\"\n >\n </ax-button-item>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-screen ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Dashboards Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any dashboards yet. Create one to get started!\n </p>\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-button>\n </axp-layout-actions-primary>\n <axp-layout-actions-secondary>\n <ax-button-item\n [disabled]=\"store.dashboards().length<=1\"\n [text]=\"(t('dashboard.delete-current-dashboard', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"store.removeDashboard(store.currentDashboard()?.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n </axp-layout-header>\n\n <axp-layout-content class=\"ax-relative\">\n <ax-grid-layout-container\n [style.background]=\"getGridBackground()\"\n #grid\n [options]=\"store.dashboardsOption()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for(widget of store.currentDashboard()?.widget ; track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.config\">\n <!-- <div class=\"ax-absolute ax-top-0 ax-size-3 ax-handler ax-bg-blue-500 ax-z-[999]\"></div> -->\n <axm-dashboard-widget-wrapper (onDelete)=\"store.removeWidget(store.currentDashboard()?.id!,widget.config.id!)\">\n @if(widget.node){\n <axp-widgets-container [context]=\"context()\">\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'edit'\"> </ng-container>\n </axp-widgets-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Widget Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any Widget yet. Create one to get started!\n </p>\n </div>\n }\n </ax-grid-layout-container>\n <div class=\"ax-p-4 ax-absolute ax-bottom-0 ax-right-0\">\n <ax-button\n [color]=\"'primary'\"\n class=\"ax-xl ax-rounded-full\"\n [disabled]=\"!store.currentDashboard()?.widget?.length\"\n (onClick)=\"toggleEdit()\"\n >\n <ax-prefix> <ax-icon class=\"fa-solid fa-pen\"> </ax-icon></ax-prefix>\n </ax-button>\n </div>\n </axp-layout-content>\n</axp-layout-simple-page>\n", styles: ["::ng-deep .placeholder-content{position:absolute}\n"], dependencies: [{ kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i1$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.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.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXGridLayoutBuilderModule }, { kind: "component", type: i3$2.AXGridLayoutContainerComponent, selector: "ax-grid-layout-container", inputs: ["options", "isEmpty"], outputs: ["onAdded", "onRemoved", "onWidgetChange", "onChange", "isLayoutRendered", "isEmptyChange"] }, { kind: "component", type: i3$2.AXGridLayoutWidgetComponent, selector: "ax-grid-layout-widget", inputs: ["options"] }, { kind: "component", type: AXPSimplePageLayout, selector: "axp-layout-simple-page" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title, axp-layout-nav-button, axp-layout-description, axp-layout-title-bar, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutHeaderComponent, selector: "axp-layout-header" }, { kind: "component", type: AXPThemeLayoutActionsComponent, selector: "axp-layout-actions" }, { kind: "component", type: AXPThemeLayoutPagePrimaryActionsComponent, selector: "axp-layout-actions-primary" }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: i4$1.AXDropdownButtonComponent, selector: "ax-dropdown-button", inputs: ["disabled", "size", "color", "look", "text", "type", "mode"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "lookChange", "colorChange", "disabledChange"] }, { kind: "component", type: AXPDashboardWidgetWrapperComponent, selector: "axm-dashboard-widget-wrapper", outputs: ["onDelete"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i5.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.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: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: AXTranslatorDirective, selector: "[translate]" }, { kind: "component", type: AXPThemeLayoutPageSecondaryActionsComponent, selector: "axp-layout-actions-secondary" }, { kind: "ngmodule", type: AXBreadcrumbsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
448
+ }
449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDashboardHomeComponent, decorators: [{
450
+ type: Component,
451
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, providers: [AXPDesignerService, AXCDashboardStore], imports: [
452
+ AXPLayoutBuilderModule,
453
+ AXButtonModule,
454
+ AXGridLayoutBuilderModule,
455
+ AXPSimplePageLayout,
456
+ AXPThemeLayoutBlockComponent,
457
+ AXPThemeLayoutHeaderComponent,
458
+ AXPThemeLayoutActionsComponent,
459
+ AXPThemeLayoutPagePrimaryActionsComponent,
460
+ AXDropdownButtonModule,
461
+ AXPDashboardWidgetWrapperComponent,
462
+ AXDecoratorModule,
463
+ AXDropdownModule,
464
+ AsyncPipe,
465
+ AXTranslatorDirective,
466
+ AXPThemeLayoutPageSecondaryActionsComponent,
467
+ AXBreadcrumbsModule,
468
+ ], standalone: true, template: "<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{ store.currentDashboard()?.title }} </axp-layout-title>\n\n <axp-layout-description> {{ store.currentDashboard()?.description }} </axp-layout-description>\n 1\n <axp-layout-breadcrumbs>\n <!-- <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward ax-text-xs\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item [routerLink]=\"b.url\" class=\"!ax-text-xs\"> {{ b.title}} </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs> -->\n </axp-layout-breadcrumbs>\n\n <axp-layout-actions>\n <axp-layout-actions-primary>\n <ax-button [text]=\"t('create-new', { 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)=\"store.addDashboard()\"\n [text]=\" (t('dashboard.dashboard', { 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)=\"store.addWidget()\"\n [text]=\" (t('dashboard.widget', { 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\n <ax-dropdown-button [text]=\"store.currentDashboard()?.title\" [color]=\"'primary'\">\n <ax-button-item-list>\n @for (dashboard of store.dashboards(); track dashboard.id) {\n <ax-button-item\n [text]=\"dashboard.title\"\n [selected]=\"dashboard.id === store.currentDashboard()?.id\"\n (onClick)=\"store.handleConfigChange(dashboard)\"\n >\n </ax-button-item>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-screen ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Dashboards Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any dashboards yet. Create one to get started!\n </p>\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-button>\n </axp-layout-actions-primary>\n <axp-layout-actions-secondary>\n <ax-button-item\n [disabled]=\"store.dashboards().length<=1\"\n [text]=\"(t('dashboard.delete-current-dashboard', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"store.removeDashboard(store.currentDashboard()?.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n </axp-layout-header>\n\n <axp-layout-content class=\"ax-relative\">\n <ax-grid-layout-container\n [style.background]=\"getGridBackground()\"\n #grid\n [options]=\"store.dashboardsOption()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for(widget of store.currentDashboard()?.widget ; track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.config\">\n <!-- <div class=\"ax-absolute ax-top-0 ax-size-3 ax-handler ax-bg-blue-500 ax-z-[999]\"></div> -->\n <axm-dashboard-widget-wrapper (onDelete)=\"store.removeWidget(store.currentDashboard()?.id!,widget.config.id!)\">\n @if(widget.node){\n <axp-widgets-container [context]=\"context()\">\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'edit'\"> </ng-container>\n </axp-widgets-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Widget Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any Widget yet. Create one to get started!\n </p>\n </div>\n }\n </ax-grid-layout-container>\n <div class=\"ax-p-4 ax-absolute ax-bottom-0 ax-right-0\">\n <ax-button\n [color]=\"'primary'\"\n class=\"ax-xl ax-rounded-full\"\n [disabled]=\"!store.currentDashboard()?.widget?.length\"\n (onClick)=\"toggleEdit()\"\n >\n <ax-prefix> <ax-icon class=\"fa-solid fa-pen\"> </ax-icon></ax-prefix>\n </ax-button>\n </div>\n </axp-layout-content>\n</axp-layout-simple-page>\n", styles: ["::ng-deep .placeholder-content{position:absolute}\n"] }]
469
+ }] });
470
+
471
+ export { AXPDashboardHomeComponent };
472
+ //# sourceMappingURL=acorex-modules-common-index-BAt02rnb.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-modules-common-index-BAt02rnb.mjs","sources":["../../../../libs/modules/common/src/lib/features/widget-wrapper/dashboard-widget-wrapper.ts","../../../../libs/modules/common/src/lib/features/widget-wrapper/dashboard-widget-wrapper.html","../../../../libs/modules/common/src/lib/features/dashboard-popups/add-dashboard-popup.ts","../../../../libs/modules/common/src/lib/features/dashboard-popups/dashboard-popup.service.ts","../../../../libs/modules/common/src/lib/features/dashboard-home/dashboard-home.store.ts","../../../../libs/modules/common/src/lib/features/dashboard-home/dashboard-home.ts","../../../../libs/modules/common/src/lib/features/dashboard-home/dashboard-home.html"],"sourcesContent":["import { AXButtonItemComponent, AXButtonModule } from '@acorex/components/button';\nimport { AXItemClickEvent } from '@acorex/components/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { ChangeDetectionStrategy, Component, output } from '@angular/core';\n\n@Component({\n selector: 'axm-dashboard-widget-wrapper',\n templateUrl: './dashboard-widget-wrapper.html',\n styleUrls: ['./dashboard-widget-wrapper.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule, AXDropdownModule],\n standalone: true,\n})\nexport class AXPDashboardWidgetWrapperComponent {\n onDelete = output<void>();\n handleOnItemClick(event: AXItemClickEvent<AXButtonItemComponent>) {\n console.log(event);\n switch (event.item.data) {\n case 'delete':\n this.onDelete.emit();\n break;\n\n default:\n break;\n }\n }\n}\n","<section class=\"ax-relative ax-size-full ax-flex ax-justify-center ax-items-center ax-group\">\n <div class=\"ax-p-1 ax-absolute ax-top-0 ax-left-0 ax-z-[9999] ax-invisible group-hover:ax-visible\">\n <ax-button color=\"secondary\" class=\"ax-sm\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-h\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ng-container>\n <ax-button-item-list (onItemClick)=\"handleOnItemClick($event)\">\n <ax-button-item [data]=\"'delete'\" text=\"Delete\" color=\"danger\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ng-container>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n <ng-content></ng-content>\n</section>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { Component, afterNextRender, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXPDashboardLayout } from '../dashboard-home/dashboard.type';\n\n@Component({\n template: `\n <div class=\"ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center\">\n <ax-label>Title</ax-label>\n <ax-text-box [(ngModel)]=\"title\" name=\"title\"></ax-text-box>\n\n <ax-label>Description</ax-label>\n <ax-text-box [(ngModel)]=\"description\" name=\"description\"></ax-text-box>\n </div>\n\n <ax-footer>\n <ax-prefix></ax-prefix>\n <ax-suffix>\n <ax-button text=\"Cancel\" look=\"solid\" (onClick)=\"handleClose(true)\"></ax-button>\n <ax-button text=\"Save\" look=\"solid\" color=\"primary\" (onClick)=\"handleClose()\">\n <ax-icon class=\"fa-solid fa-save\"></ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n imports: [FormsModule, AXButtonModule, AXTextBoxModule, AXLabelModule, AXButtonModule, AXDecoratorModule],\n})\nexport class AXCAddDashboardPopup extends AXBasePageComponent {\n private data: Partial<AXPDashboardLayout>;\n\n protected title = model<string>();\n protected description = model<string>();\n\n #init = afterNextRender(() => {\n this.title.set(this.data.title || '');\n this.description.set(this.data.description || '');\n });\n\n protected async handleClose(isCanceled = false) {\n this.close({\n title: this.title(),\n description: this.description(),\n isCanceled,\n });\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { inject, Injectable } from '@angular/core';\nimport { AXPDashboardLayout } from '../dashboard-home/dashboard.type';\nimport { AXCAddDashboardPopup } from './add-dashboard-popup';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPDashboardPopupService {\n popupService = inject(AXPopupService);\n async generateDashboardLayout(data: Partial<AXPDashboardLayout>): Promise<AXPDashboardLayout> {\n const result = await this.popupService.open(AXCAddDashboardPopup, {\n header: true,\n size: 'fit',\n draggable: true,\n hasBackdrop: true,\n title: 'Dashboard Layout Details',\n data: { data },\n });\n const { isCanceled, ...rest } = result.data;\n if (isCanceled) {\n throw new Error('Process is Canceled by User!');\n } else {\n return rest;\n }\n }\n}\n","import { AXDialogService } from '@acorex/components/dialog';\nimport { AXGridLayoutEvent, AXGridLayoutOptions } from '@acorex/components/grid-layout-builder';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport { AXPDesignerService } from '@acorex/platform/layout/designer';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXPDashboardPopupService } from '../dashboard-popups/dashboard-popup.service';\nimport { AXPDashboardLayout, AXPDashboardWidgetData } from './dashboard.type';\n\n// Initial state\nconst initialDashboards: AXPDashboardLayout[] = [\n {\n id: 'widget1',\n title: 'Home',\n widget: [\n {\n config: {\n id: '1',\n height: 5,\n width: 6,\n },\n node: {\n name: 'bar-chart',\n path: 'bar-chart',\n type: 'bar-chart',\n defaultValue: {\n data: [\n { label: 'Category A', value: 30, color: 'green' },\n { label: 'Category B', value: 80 },\n { label: 'Category C', value: 45 },\n ],\n options: { width: 600, height: 400, color: ['red', 'yellow', 'blue'] },\n },\n },\n },\n {\n config: {\n id: '5',\n height: 5,\n width: 6,\n },\n node: {\n name: 'map',\n path: 'map',\n type: 'map',\n options: {\n hasDraw: true,\n zoomLevel: 5,\n latitude: 32,\n longitude: 53,\n fitToDraw: true,\n limitDraw: [\n {\n points: [\n {\n latitude: 33.8339199536547,\n longitude: 51.16056693933671,\n },\n {\n latitude: 32.37996146435729,\n longitude: 50.017223524232904,\n },\n {\n latitude: 31.034108344903512,\n longitude: 51.402428046377885,\n },\n {\n latitude: 31.690781806136822,\n longitude: 53.24936740923793,\n },\n {\n latitude: 33.211116472416855,\n longitude: 53.18340528913575,\n },\n ],\n color: 'blue',\n },\n ],\n },\n },\n },\n ],\n },\n {\n id: 'widget2',\n title: 'Work',\n widget: [\n {\n config: {\n id: '2',\n height: 5,\n width: 6,\n },\n node: {\n name: 'sticky-note',\n path: 'sticky-note',\n type: 'sticky-note',\n defaultValue: `test`,\n },\n },\n {\n config: { id: '3', height: 5, width: 6 },\n node: {\n name: 'donut-chart',\n path: 'donut-chart',\n type: 'donut-chart',\n defaultValue: {\n data: [\n { id: 'a', name: 'Apples', value: 40, color: '#E57373' },\n { id: 'b', name: 'Bananas', value: 30, color: '#FFF176' },\n { id: 'c', name: 'ta', value: 20, color: '#F06292' },\n { id: 'd', name: 'Dates', value: 10, color: '#9575CD' },\n ],\n options: { width: 250, height: 250 },\n },\n },\n },\n ],\n },\n];\n\n// Define the state interface\ninterface DashboardState {\n dashboards: AXPDashboardLayout[];\n currentDashboardId: string | null;\n dashboardsOption: AXGridLayoutOptions;\n}\n\n// Create the SignalStore\nexport const AXCDashboardStore = signalStore(\n {},\n\n // Define the state\n withState<DashboardState>({\n dashboards: initialDashboards,\n currentDashboardId: initialDashboards[0].id,\n dashboardsOption: { float: true, cellHeight: 100, gap: 20, minRow: 7, column: 12 },\n }),\n\n // Define computed properties\n withComputed((state) => ({\n currentDashboard: computed(() => {\n return state.dashboards().find((dashboard) => dashboard.id === state.currentDashboardId()) || null;\n }),\n })),\n\n // Define methods\n withMethods(\n (\n state,\n dashboardPopup = inject(AXPDashboardPopupService),\n dialogService = inject(AXDialogService),\n translationService = inject(AXTranslationService),\n designerService = inject(AXPDesignerService)\n ) => ({\n // Set current dashboard\n setCurrentDashboard(dashboardId: string): void {\n patchState(state, { currentDashboardId: dashboardId });\n },\n\n // Add a new dashboard\n async addDashboard(): Promise<void> {\n try {\n const newDashboard = await dashboardPopup.generateDashboardLayout({});\n newDashboard.id = AXPDataGenerator.uuid();\n newDashboard.widget = [];\n // newDashboard.widget = [\n // {\n // config: {\n // h: 1,\n // w: 1,\n // id: AXPDataGenerator.uuid(),\n // },\n // },\n // ];\n\n const updatedDashboards = [...state.dashboards(), newDashboard];\n\n patchState(state, {\n dashboards: updatedDashboards,\n currentDashboardId: newDashboard.id,\n });\n } catch (error) {\n console.error('Error adding dashboard:', error);\n }\n },\n\n // Add a widget to the current dashboard\n async addWidget(): Promise<void> {\n if (!state.currentDashboardId()) {\n console.warn('No current dashboard selected');\n return;\n }\n\n try {\n // Step 1: Show the picker and get the selected widgets\n const widgets = await designerService.showPicker({\n name: 'page-layout',\n type: 'page-layout',\n children: [],\n });\n\n // Step 2: Convert the selected widgets into AXPDashboardWidgetData format\n const convertedWidgets: AXPDashboardWidgetData[] = widgets.map((widget) => ({\n config: { height: 2, width: 2, id: AXPDataGenerator.uuid() },\n node: widget,\n }));\n\n // Step 3: Update the dashboards\n const updatedDashboards = state.dashboards().map((dashboard) => {\n if (dashboard.id === state.currentDashboardId()) {\n return {\n ...dashboard,\n widget: [...dashboard.widget, ...convertedWidgets],\n };\n }\n return dashboard;\n });\n\n patchState(state, { dashboards: updatedDashboards });\n } catch (error) {\n console.error('Error adding widget:', error);\n }\n },\n\n // Remove a dashboard\n async removeDashboard(id: string): Promise<void> {\n if (!id) {\n console.warn('No dashboard ID provided for removal');\n return;\n }\n\n try {\n const dialogResult = await dialogService.confirm(\n await translationService.translateAsync('workflow.warning'),\n await translationService.translateAsync('workflow.confirm-delete'),\n 'danger',\n 'horizontal'\n );\n\n if (dialogResult.result) {\n // Remove the dashboard\n const updatedDashboards = state.dashboards().filter((dashboard) => dashboard.id !== id);\n\n // Update state\n patchState(state, {\n dashboards: updatedDashboards,\n currentDashboardId:\n id === state.currentDashboardId()\n ? updatedDashboards.length > 0\n ? updatedDashboards[0].id\n : null\n : state.currentDashboardId(),\n });\n }\n } catch (error) {\n console.error('Error removing dashboard:', error);\n }\n },\n\n // Remove a widget from a dashboard\n removeWidget(dashboardId: string, widgetId: string): void {\n const updatedDashboards = state.dashboards().map((dashboard) => {\n if (dashboard.id === dashboardId) {\n return {\n ...dashboard,\n widget: dashboard.widget.filter((widget) => widget.config.id !== widgetId),\n };\n }\n return dashboard;\n });\n\n patchState(state, { dashboards: updatedDashboards });\n },\n\n // Handle configuration changes\n handleConfigChange(dashboard: AXPDashboardLayout): void {\n const updatedDashboards = state.dashboards().map((d) => (d.id === dashboard.id ? dashboard : d));\n\n patchState(state, {\n dashboards: updatedDashboards,\n currentDashboardId: dashboard.id,\n });\n },\n\n // Handle grid layout changes\n onGridChange(event: AXGridLayoutEvent): void {\n if (!state.currentDashboard()) {\n console.warn('No current dashboard for grid change');\n return;\n }\n\n // Extract nodes from the event and remove the `element` property\n const nodes = event.nodes.map(({ element, ...rest }) => rest);\n\n // Update the current dashboard\n const currentDashboard = state.currentDashboard()!;\n const updatedWidgets = currentDashboard.widget.map((widget) => {\n const updatedNode = nodes.find((node) => node.id === widget.config.id);\n if (updatedNode) {\n return {\n ...widget,\n config: updatedNode,\n };\n }\n return widget;\n });\n\n const updatedDashboard = {\n ...currentDashboard,\n widget: updatedWidgets,\n };\n\n // Update the dashboards\n const updatedDashboards = state\n .dashboards()\n .map((dashboard) => (dashboard.id === updatedDashboard.id ? updatedDashboard : dashboard));\n\n patchState(state, { dashboards: updatedDashboards });\n },\n })\n )\n);\n","import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXGridLayoutBuilderModule } from '@acorex/components/grid-layout-builder';\nimport { AXTranslatorDirective } from '@acorex/core/translation';\nimport { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';\nimport { AXPDesignerService } from '@acorex/platform/layout/designer';\nimport { AXPSimplePageLayout } from '@acorex/platform/themes/default';\nimport {\n AXPLayoutThemeService,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutPagePrimaryActionsComponent,\n AXPThemeLayoutPageSecondaryActionsComponent,\n} from '@acorex/platform/themes/shared';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { RootConfig } from '../../const';\nimport { AXPDashboardWidgetWrapperComponent } from '../widget-wrapper/dashboard-widget-wrapper';\nimport { AXCDashboardStore } from './dashboard-home.store';\n\n@Component({\n templateUrl: './dashboard-home.html',\n styleUrls: ['./dashboard-home.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [AXPDesignerService, AXCDashboardStore],\n imports: [\n AXPLayoutBuilderModule,\n AXButtonModule,\n AXGridLayoutBuilderModule,\n AXPSimplePageLayout,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutActionsComponent,\n AXPThemeLayoutPagePrimaryActionsComponent,\n AXDropdownButtonModule,\n AXPDashboardWidgetWrapperComponent,\n AXDecoratorModule,\n AXDropdownModule,\n AsyncPipe,\n AXTranslatorDirective,\n AXPThemeLayoutPageSecondaryActionsComponent,\n AXBreadcrumbsModule,\n ],\n standalone: true,\n})\nexport class AXPDashboardHomeComponent {\n protected readonly activatedRoute = inject(ActivatedRoute);\n protected readonly layout = inject(AXPLayoutThemeService);\n protected readonly store = inject(AXCDashboardStore);\n protected readonly rootConfig = RootConfig;\n\n isEdited = signal(false);\n toggleEdit() {\n //(window as any).d = this.activatedRoute;\n this.isEdited.update((i) => !i);\n }\n\n getGridBackground(): string | null {\n if (!this.isEdited()) {\n return null;\n }\n \n const gap = this.store.dashboardsOption().gap ?? 0; // Get the gap value, default to 0 if not provided\n const columnWidth = `calc((100% - ${gap}px) / ${this.store.dashboardsOption().column ?? 12})`;\n const cellHeight = this.store.dashboardsOption().cellHeight;\n \n // Adjust the vertical lines to start at the gap value and end before the gap\n const verticalLines = `linear-gradient(to right, #0000001c 1px, transparent 1px) ${gap}px 0 / ${columnWidth} 100%`;\n \n // Adjust the horizontal lines to start at the gap value and end before the gap\n const horizontalLines = `linear-gradient(to bottom, #0000001c 1px, transparent 1px) 0 ${gap}px / 100% ${cellHeight}px`;\n \n return `${verticalLines}, ${horizontalLines}`;\n }\n\n protected context = signal({});\n}\n","<axp-layout-simple-page *translate=\"let t\">\n <axp-layout-header>\n <axp-layout-title> {{ store.currentDashboard()?.title }} </axp-layout-title>\n\n <axp-layout-description> {{ store.currentDashboard()?.description }} </axp-layout-description>\n 1\n <axp-layout-breadcrumbs>\n <!-- <ax-breadcrumbs [class.ax-hidden]=\"layout.isSmall()\">\n <ng-template #divider>\n <i class=\"fa-regular fa-slash-forward ax-text-xs\"></i>\n </ng-template>\n @for(b of vm.beardcrumbs();track $index;let last=$last) {\n <ax-breadcrumbs-item [routerLink]=\"b.url\" class=\"!ax-text-xs\"> {{ b.title}} </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs> -->\n </axp-layout-breadcrumbs>\n\n <axp-layout-actions>\n <axp-layout-actions-primary>\n <ax-button [text]=\"t('create-new', { 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)=\"store.addDashboard()\"\n [text]=\" (t('dashboard.dashboard', { 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)=\"store.addWidget()\"\n [text]=\" (t('dashboard.widget', { 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\n <ax-dropdown-button [text]=\"store.currentDashboard()?.title\" [color]=\"'primary'\">\n <ax-button-item-list>\n @for (dashboard of store.dashboards(); track dashboard.id) {\n <ax-button-item\n [text]=\"dashboard.title\"\n [selected]=\"dashboard.id === store.currentDashboard()?.id\"\n (onClick)=\"store.handleConfigChange(dashboard)\"\n >\n </ax-button-item>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-screen ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Dashboards Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any dashboards yet. Create one to get started!\n </p>\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-button>\n </axp-layout-actions-primary>\n <axp-layout-actions-secondary>\n <ax-button-item\n [disabled]=\"store.dashboards().length<=1\"\n [text]=\"(t('dashboard.delete-current-dashboard', { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"store.removeDashboard(store.currentDashboard()?.id!)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </axp-layout-actions-secondary>\n </axp-layout-actions>\n </axp-layout-header>\n\n <axp-layout-content class=\"ax-relative\">\n <ax-grid-layout-container\n [style.background]=\"getGridBackground()\"\n #grid\n [options]=\"store.dashboardsOption()\"\n (onChange)=\"store.onGridChange($event)\"\n >\n @for(widget of store.currentDashboard()?.widget ; track widget.config.id) {\n <ax-grid-layout-widget [options]=\"widget.config\">\n <!-- <div class=\"ax-absolute ax-top-0 ax-size-3 ax-handler ax-bg-blue-500 ax-z-[999]\"></div> -->\n <axm-dashboard-widget-wrapper (onDelete)=\"store.removeWidget(store.currentDashboard()?.id!,widget.config.id!)\">\n @if(widget.node){\n <axp-widgets-container [context]=\"context()\">\n <ng-container axp-widget-renderer [node]=\"widget.node\" [mode]=\"'edit'\"> </ng-container>\n </axp-widgets-container>\n }\n </axm-dashboard-widget-wrapper>\n </ax-grid-layout-widget>\n } @empty {\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-h-full ax-bg-gray-50 ax-p-4\">\n <!-- Icon -->\n <svg\n class=\"ax-w-16 ax-h-16 ax-text-gray-400 ax-mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n ></path>\n </svg>\n\n <!-- Message -->\n <h2 class=\"ax-text-xl ax-font-semibold ax-text-gray-700 ax-mb-2\">No Widget Found</h2>\n <p class=\"ax-text-gray-500 ax-text-center ax-mb-6\">\n It looks like you don't have any Widget yet. Create one to get started!\n </p>\n </div>\n }\n </ax-grid-layout-container>\n <div class=\"ax-p-4 ax-absolute ax-bottom-0 ax-right-0\">\n <ax-button\n [color]=\"'primary'\"\n class=\"ax-xl ax-rounded-full\"\n [disabled]=\"!store.currentDashboard()?.widget?.length\"\n (onClick)=\"toggleEdit()\"\n >\n <ax-prefix> <ax-icon class=\"fa-solid fa-pen\"> </ax-icon></ax-prefix>\n </ax-button>\n </div>\n </axp-layout-content>\n</axp-layout-simple-page>\n"],"names":["i1","i3","i4"],"mappings":"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"}