@acorex/modules 21.0.0-next.73 → 21.0.0-next.74

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 (86) hide show
  1. package/fesm2022/acorex-modules-ai-management.mjs +48 -15
  2. package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-FKvCLWhj.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-yboYQ8I-.mjs} +24 -24
  4. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-FKvCLWhj.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-yboYQ8I-.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B59NvUDv.mjs → acorex-modules-assessment-management-assessment-case.entity-BBWeshSs.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B59NvUDv.mjs.map → acorex-modules-assessment-management-assessment-case.entity-BBWeshSs.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-DY3kcvHv.mjs → acorex-modules-assessment-management-assessment-session-answers-view.util-UCYBAHLk.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-DY3kcvHv.mjs.map → acorex-modules-assessment-management-assessment-session-answers-view.util-UCYBAHLk.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-NZgnUnIg.mjs → acorex-modules-assessment-management-assessment-session.entity-Bp_dS1Js.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-NZgnUnIg.mjs.map → acorex-modules-assessment-management-assessment-session.entity-Bp_dS1Js.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-DTpp9nGB.mjs → acorex-modules-assessment-management-fill-assessment-session.command-VivCLw2H.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-DTpp9nGB.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-VivCLw2H.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DLN9rq0h.mjs → acorex-modules-assessment-management-preview-question.command-CKF4BjCx.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DLN9rq0h.mjs.map → acorex-modules-assessment-management-preview-question.command-CKF4BjCx.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-D5RxnsfD.mjs → acorex-modules-assessment-management-preview-questionnaire.command-B_2o4jC2.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-D5RxnsfD.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-B_2o4jC2.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-j6Pzk1UT.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-s8KcR3D0.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-j6Pzk1UT.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-s8KcR3D0.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-C8jxKIKe.mjs → acorex-modules-assessment-management-question-bank-item.entity-Sj-5woTX.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-C8jxKIKe.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-Sj-5woTX.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DYtzVNK8.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-ClvQ18w6.mjs} +5 -375
  22. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-ClvQ18w6.mjs.map +1 -0
  23. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-Ca-oiaZ5.mjs → acorex-modules-assessment-management-questionnaire.entity-BbyNZvoc.mjs} +2 -2
  24. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-Ca-oiaZ5.mjs.map → acorex-modules-assessment-management-questionnaire.entity-BbyNZvoc.mjs.map} +1 -1
  25. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-CXSelp7y.mjs → acorex-modules-assessment-management-review-assessment-session.command-B2QViI9d.mjs} +3 -3
  26. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-CXSelp7y.mjs.map → acorex-modules-assessment-management-review-assessment-session.command-B2QViI9d.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-BQDyUTwa.mjs → acorex-modules-assessment-management-view-session-answers.command-CWdBtkn1.mjs} +3 -3
  28. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-BQDyUTwa.mjs.map → acorex-modules-assessment-management-view-session-answers.command-CWdBtkn1.mjs.map} +1 -1
  29. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  30. package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-CVyrVwfU.mjs → acorex-modules-content-management-acorex-modules-content-management-B5zqb3b_.mjs} +5 -5
  31. package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-CVyrVwfU.mjs.map → acorex-modules-content-management-acorex-modules-content-management-B5zqb3b_.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-BnnCEroN.mjs → acorex-modules-content-management-permission-definition.provider-DxI6NmP4.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-BnnCEroN.mjs.map → acorex-modules-content-management-permission-definition.provider-DxI6NmP4.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-B3Scw9SG.mjs → acorex-modules-content-management-template-content-editor-widget-edit.component-ChmkpMy9.mjs} +3 -3
  35. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-B3Scw9SG.mjs.map → acorex-modules-content-management-template-content-editor-widget-edit.component-ChmkpMy9.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-D7EBdcU9.mjs → acorex-modules-content-management-template-content-editor-widget-view.component-LyoQmopL.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-D7EBdcU9.mjs.map → acorex-modules-content-management-template-content-editor-widget-view.component-LyoQmopL.mjs.map} +1 -1
  38. package/fesm2022/acorex-modules-content-management.mjs +1 -1
  39. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-p9c5_MMk.mjs → acorex-modules-conversation-acorex-modules-conversation-lPw23AJc.mjs} +10 -9
  40. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-lPw23AJc.mjs.map +1 -0
  41. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQiGLMAZ.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-D0SGSQC8.mjs} +2 -2
  42. package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQiGLMAZ.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-D0SGSQC8.mjs.map} +1 -1
  43. package/fesm2022/{acorex-modules-conversation-comments-page.component-rY_6dZ3X.mjs → acorex-modules-conversation-comments-page.component-Bqeplzuy.mjs} +2 -2
  44. package/fesm2022/{acorex-modules-conversation-comments-page.component-rY_6dZ3X.mjs.map → acorex-modules-conversation-comments-page.component-Bqeplzuy.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-Bi1MZ0AE.mjs → acorex-modules-conversation-send-assist-chat-message.command-CFwkUHCc.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-Bi1MZ0AE.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-CFwkUHCc.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-1Mro9mxs.mjs → acorex-modules-conversation-start-assist-chat.command-aEOnD6ax.mjs} +2 -2
  48. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-1Mro9mxs.mjs.map → acorex-modules-conversation-start-assist-chat.command-aEOnD6ax.mjs.map} +1 -1
  49. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  50. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLOyCwM3.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-D2TrYnCW.mjs} +4 -4
  51. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-DLOyCwM3.mjs.map → acorex-modules-dashboard-management-acorex-modules-dashboard-management-D2TrYnCW.mjs.map} +1 -1
  52. package/fesm2022/{acorex-modules-dashboard-management-index-DlrkqIge.mjs → acorex-modules-dashboard-management-index-DAQNEq43.mjs} +2 -2
  53. package/fesm2022/{acorex-modules-dashboard-management-index-DlrkqIge.mjs.map → acorex-modules-dashboard-management-index-DAQNEq43.mjs.map} +1 -1
  54. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  55. package/fesm2022/acorex-modules-data-management.mjs +2 -1
  56. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  57. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  58. package/fesm2022/acorex-modules-help-desk-acorex-modules-help-desk-B8de7ifz.mjs.map +1 -1
  59. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-SYgMvrE2.mjs → acorex-modules-platform-management-acorex-modules-platform-management-ilmoyxAw.mjs} +95 -4442
  60. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-ilmoyxAw.mjs.map +1 -0
  61. package/fesm2022/{acorex-modules-platform-management-menu-list.component-CKiFNjU0.mjs → acorex-modules-platform-management-menu-list.component-MJCUVTho.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-platform-management-menu-list.component-CKiFNjU0.mjs.map → acorex-modules-platform-management-menu-list.component-MJCUVTho.mjs.map} +1 -1
  63. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  64. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-Dfx7mO_y.mjs → acorex-modules-task-management-acorex-modules-task-management-Bv7Ye6d1.mjs} +2 -2
  65. package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management-Dfx7mO_y.mjs.map → acorex-modules-task-management-acorex-modules-task-management-Bv7Ye6d1.mjs.map} +1 -1
  66. package/fesm2022/{acorex-modules-task-management-task-board.page-eXpBudGO.mjs → acorex-modules-task-management-task-board.page-CfgeDnBx.mjs} +3 -3
  67. package/fesm2022/{acorex-modules-task-management-task-board.page-eXpBudGO.mjs.map → acorex-modules-task-management-task-board.page-CfgeDnBx.mjs.map} +1 -1
  68. package/fesm2022/acorex-modules-task-management.mjs +1 -1
  69. package/fesm2022/acorex-modules-workflow-management-acorex-modules-workflow-management-LJ8Bb-CT.mjs.map +1 -1
  70. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BW6kK9Av.mjs.map +1 -1
  71. package/fesm2022/acorex-modules-workflow-management-index--D61tV-f.mjs.map +1 -1
  72. package/fesm2022/acorex-modules-workflow-management-index-DXIQw3Ao.mjs.map +1 -1
  73. package/fesm2022/acorex-modules-workflow-management-save-workflow-definition-activities.command-huamhFhc.mjs.map +1 -1
  74. package/fesm2022/acorex-modules-workflow-management-workflow-activity-instance-rows.utils-L8W4ogSI.mjs.map +1 -1
  75. package/fesm2022/acorex-modules-workflow-management-workflow-run-history-popup.component-FLqOdI2t.mjs.map +1 -1
  76. package/fesm2022/acorex-modules-workflow-management-workflow-run-history-visual-tab.component-3gnqTYdJ.mjs.map +1 -1
  77. package/package.json +2 -2
  78. package/types/acorex-modules-ai-management.d.ts +2 -2
  79. package/types/acorex-modules-content-management.d.ts +2 -1
  80. package/types/acorex-modules-data-management.d.ts +2 -1
  81. package/types/acorex-modules-notification-management.d.ts +2 -1
  82. package/types/acorex-modules-platform-management.d.ts +3 -137
  83. package/types/acorex-modules-workflow-management.d.ts +2 -1
  84. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-DYtzVNK8.mjs.map +0 -1
  85. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-p9c5_MMk.mjs.map +0 -1
  86. package/fesm2022/acorex-modules-platform-management-acorex-modules-platform-management-SYgMvrE2.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-task-management-task-board.page-eXpBudGO.mjs","sources":["../../../../libs/modules/task-management/src/lib/features/task-board/task-board-content-skeleton/task-board-content-skeleton.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-content-skeleton/task-board-content-skeleton.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-view-category.utils.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-filter.utils.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.viewmodel.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-scheduler-layout.utils.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.page.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.page.html"],"sourcesContent":["import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\n@Component({\n selector: 'axm-task-board-content-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXSkeletonModule],\n templateUrl: './task-board-content-skeleton.component.html',\n styleUrl: './task-board-content-skeleton.component.scss',\n host: {\n class: 'axm-task-board-content-skeleton',\n 'aria-busy': 'true',\n 'aria-live': 'polite',\n },\n})\nexport class AXMTaskBoardContentSkeletonComponent {\n //#region ---- Constants ----\n\n private static readonly DAY_HEADER_COUNT = 7;\n\n private static readonly GRID_ROW_COUNT = 6;\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** Weekday header placeholders (Sun–Sat). */\n protected readonly dayHeaderPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.DAY_HEADER_COUNT }, (_, index) => index),\n );\n\n /** Calendar-style grid row placeholders. */\n protected readonly gridRowPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.GRID_ROW_COUNT }, (_, index) => index),\n );\n\n /** Column placeholders per grid row. */\n protected readonly gridColumnPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.DAY_HEADER_COUNT }, (_, index) => index),\n );\n\n //#endregion\n}\n","<!-- Weekday header row -->\n<div class=\"axm-task-board-content-skeleton__header\">\n @for (index of dayHeaderPlaceholders(); track index) {\n <ax-skeleton [animated]=\"true\" class=\"axm-task-board-content-skeleton__day-header\"></ax-skeleton>\n }\n</div>\n\n<!-- Generic board grid (calendar / kanban / table placeholder) -->\n<div class=\"axm-task-board-content-skeleton__grid\">\n @for (row of gridRowPlaceholders(); track row) {\n <div class=\"axm-task-board-content-skeleton__row\">\n @for (col of gridColumnPlaceholders(); track col) {\n <div class=\"axm-task-board-content-skeleton__cell\">\n <ax-skeleton [animated]=\"true\" class=\"axm-task-board-content-skeleton__cell-date\"></ax-skeleton>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport type { AXCalendarService } from '@acorex/core/date-time';\nimport type { AXPDateTimeFilterValue } from '@acorex/platform/common';\nimport { applyDateFilterPreset } from '@acorex/platform/common';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport type { AXPTaskBoardViewMode } from './task-board.viewmodel';\n\n//#endregion\n\n//#region ---- Layout Types ----\n\nexport type AXPTaskBoardCalendarLayout = 'daily' | 'weekly' | 'monthly' | 'agenda';\nexport type AXPTaskBoardTimelineLayout = 'daily' | 'weekly' | 'monthly' | 'yearly';\nexport type AXPTaskBoardTableLayout = 'simple' | 'grouped';\nexport type AXPTaskBoardViewLayout = AXPTaskBoardCalendarLayout | AXPTaskBoardTimelineLayout | AXPTaskBoardTableLayout;\n\nexport const AXM_TASK_BOARD_VIEW_CATEGORIES: readonly AXPTaskBoardViewCategory[] = [\n 'calendar',\n 'timeline',\n 'table',\n 'kanban',\n];\n\nexport const AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY: Record<AXPTaskBoardViewCategory, AXPTaskBoardViewLayout | null> = {\n calendar: 'monthly',\n timeline: 'daily',\n table: 'simple',\n kanban: null,\n};\n\n//#endregion\n\n//#region ---- Category ↔ Leaf Mode ----\n\nconst CALENDAR_LAYOUT_TO_MODE: Record<AXPTaskBoardCalendarLayout, AXPTaskBoardViewMode> = {\n daily: 'day',\n weekly: 'week',\n monthly: 'month',\n agenda: 'agenda',\n};\n\nconst TIMELINE_LAYOUT_TO_MODE: Record<AXPTaskBoardTimelineLayout, AXPTaskBoardViewMode> = {\n daily: 'timeline-day',\n weekly: 'timeline-weekly',\n monthly: 'timeline-month',\n yearly: 'timeline-year',\n};\n\nconst TABLE_LAYOUT_TO_MODE: Record<AXPTaskBoardTableLayout, AXPTaskBoardViewMode> = {\n simple: 'grid',\n grouped: 'status-grouped-grid',\n};\n\nexport function resolveTaskBoardViewCategory(viewMode: AXPTaskBoardViewMode): AXPTaskBoardViewCategory {\n if (viewMode === 'kanban') {\n return 'kanban';\n }\n if (viewMode === 'grid' || viewMode === 'status-grouped-grid') {\n return 'table';\n }\n if (viewMode.startsWith('timeline-')) {\n return 'timeline';\n }\n return 'calendar';\n}\n\nexport function resolveTaskBoardViewLayout(viewMode: AXPTaskBoardViewMode): AXPTaskBoardViewLayout | null {\n if (viewMode === 'kanban') {\n return null;\n }\n const calendarEntry = Object.entries(CALENDAR_LAYOUT_TO_MODE).find(([, mode]) => mode === viewMode);\n if (calendarEntry) {\n return calendarEntry[0] as AXPTaskBoardCalendarLayout;\n }\n const timelineEntry = Object.entries(TIMELINE_LAYOUT_TO_MODE).find(([, mode]) => mode === viewMode);\n if (timelineEntry) {\n return timelineEntry[0] as AXPTaskBoardTimelineLayout;\n }\n const tableEntry = Object.entries(TABLE_LAYOUT_TO_MODE).find(([, mode]) => mode === viewMode);\n if (tableEntry) {\n return tableEntry[0] as AXPTaskBoardTableLayout;\n }\n return AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.calendar;\n}\n\nexport function resolveTaskBoardLeafViewMode(\n category: AXPTaskBoardViewCategory,\n layout: AXPTaskBoardViewLayout | null | undefined,\n): AXPTaskBoardViewMode {\n switch (category) {\n case 'calendar':\n return CALENDAR_LAYOUT_TO_MODE[(layout as AXPTaskBoardCalendarLayout) ?? 'monthly'] ?? 'month';\n case 'timeline':\n return TIMELINE_LAYOUT_TO_MODE[(layout as AXPTaskBoardTimelineLayout) ?? 'daily'] ?? 'timeline-day';\n case 'table':\n return TABLE_LAYOUT_TO_MODE[(layout as AXPTaskBoardTableLayout) ?? 'simple'] ?? 'grid';\n case 'kanban':\n return 'kanban';\n default:\n return 'month';\n }\n}\n\nexport function isTaskBoardRangeFilterCategory(category: AXPTaskBoardViewCategory): boolean {\n return category === 'table' || category === 'kanban';\n}\n\nexport function usesTaskBoardToolbarNavigator(_viewMode: AXPTaskBoardViewMode): boolean {\n return true;\n}\n\nexport function getTaskBoardLayoutOptions(\n category: AXPTaskBoardViewCategory,\n): { key: AXPTaskBoardViewLayout; text: string; icon: string }[] {\n switch (category) {\n case 'calendar':\n return [\n { key: 'daily', text: 'daily', icon: 'fa-light fa-calendar-day' },\n { key: 'weekly', text: 'weekly', icon: 'fa-light fa-calendar-week' },\n { key: 'monthly', text: 'monthly', icon: 'fa-light fa-calendar-alt' },\n { key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },\n ];\n case 'timeline':\n return [\n { key: 'daily', text: 'daily', icon: 'fa-light fa-calendar-day' },\n { key: 'weekly', text: 'weekly', icon: 'fa-light fa-calendar-week' },\n { key: 'monthly', text: 'monthly', icon: 'fa-light fa-calendar-alt' },\n { key: 'yearly', text: 'yearly', icon: 'fa-light fa-calendar-range' },\n ];\n case 'table':\n return [\n { key: 'simple', text: 'grid', icon: 'fa-light fa-table' },\n { key: 'grouped', text: 'status-grouped-grid', icon: 'fa-light fa-table' },\n ];\n default:\n return [];\n }\n}\n\n//#endregion\n\n//#region ---- Date Range ----\n\nexport interface AXMTaskBoardDateRange {\n from: Date;\n end: Date;\n}\n\nexport function deriveTaskBoardDateRangeFromNavigator(\n calendarService: AXCalendarService,\n viewMode: AXPTaskBoardViewMode,\n currentDate: Date,\n daysCount: number,\n): AXMTaskBoardDateRange {\n const cal = calendarService.create(currentDate);\n\n switch (viewMode) {\n case 'month':\n case 'timeline-month':\n return {\n from: cal.startOf('month').date,\n end: cal.endOf('month').date,\n };\n case 'week':\n return {\n from: cal.startOf('week').date,\n end: cal.add('day', 6).date,\n };\n case 'timeline-weekly':\n return {\n from: cal.date,\n end: cal.add('day', Math.max(1, daysCount) - 1).date,\n };\n case 'timeline-year':\n return {\n from: cal.startOf('year').date,\n end: cal.endOf('year').date,\n };\n case 'agenda':\n case 'grid':\n case 'status-grouped-grid':\n case 'kanban':\n return {\n from: cal.date,\n end: cal.add('day', Math.max(1, daysCount) - 1).date,\n };\n case 'day':\n case 'timeline-day':\n default:\n return {\n from: cal.startOf('day').date,\n end: cal.endOf('day').date,\n };\n }\n}\n\nexport function createTodayTaskBoardDateFilterValue(calendarService: AXCalendarService): AXPDateTimeFilterValue {\n return applyDateFilterPreset('today', calendarService) ?? {\n operation: { type: 'between' },\n value: {\n from: calendarService.create(new Date()).startOf('day').date.toISOString(),\n to: calendarService.create(new Date()).endOf('day').date.toISOString(),\n },\n };\n}\n\nexport function parseTaskBoardDateFilterValue(value: unknown): AXMTaskBoardDateRange | null {\n if (value == null) {\n return null;\n }\n const raw = value as AXPDateTimeFilterValue;\n const payload = raw.value;\n if (payload == null) {\n return null;\n }\n if (typeof payload === 'string') {\n const date = new Date(payload);\n return Number.isNaN(date.getTime()) ? null : { from: date, end: date };\n }\n const from = payload.from ? new Date(payload.from) : null;\n const end = payload.to ? new Date(payload.to) : from;\n if (!from || !end || Number.isNaN(from.getTime()) || Number.isNaN(end.getTime())) {\n return null;\n }\n return { from, end };\n}\n\nexport function toTaskBoardDateFilterValue(range: AXMTaskBoardDateRange): AXPDateTimeFilterValue {\n return {\n operation: { type: 'between' },\n value: {\n from: range.from.toISOString(),\n to: range.end.toISOString(),\n },\n };\n}\n\nexport async function formatTaskBoardDateRangeDisplayText(\n range: AXMTaskBoardDateRange,\n calendarService: AXCalendarService,\n format: string,\n): Promise<string> {\n const from = calendarService.create(range.from).format(format);\n const end = calendarService.create(range.end).format(format);\n if (from === end) {\n return from;\n }\n return `${from} – ${end}`;\n}\n\nexport function applyTaskBoardDateRangeToViewModel(\n range: AXMTaskBoardDateRange,\n setCurrentDate: (date: Date) => void,\n setDaysCount: (days: number) => void,\n): void {\n setCurrentDate(range.from);\n const start = new Date(range.from.getFullYear(), range.from.getMonth(), range.from.getDate());\n const end = new Date(range.end.getFullYear(), range.end.getMonth(), range.end.getDate());\n const days = Math.round((end.getTime() - start.getTime()) / (1000 * 3600 * 24)) + 1;\n setDaysCount(Math.max(1, days));\n}\n\n//#endregion\n\n//#region ---- Settings Visibility ----\n\nexport function normalizeVisibleTaskBoardCategories(flags: {\n calendar?: boolean;\n timeline?: boolean;\n table?: boolean;\n kanban?: boolean;\n}): AXPTaskBoardViewCategory[] {\n const categories: AXPTaskBoardViewCategory[] = [];\n if (flags.calendar !== false) {\n categories.push('calendar');\n }\n if (flags.timeline !== false) {\n categories.push('timeline');\n }\n if (flags.table !== false) {\n categories.push('table');\n }\n if (flags.kanban !== false) {\n categories.push('kanban');\n }\n return categories.length > 0 ? categories : [...AXM_TASK_BOARD_VIEW_CATEGORIES];\n}\n\nexport function resolveTaskBoardCategoryLayoutFromQuery(\n category: AXPTaskBoardViewCategory,\n layout: string | null,\n): AXPTaskBoardViewLayout | null {\n if (category === 'kanban') {\n return null;\n }\n const options = getTaskBoardLayoutOptions(category);\n const match = options.find((option) => option.key === layout);\n return (match?.key ?? AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY[category]) as AXPTaskBoardViewLayout;\n}\n\n//#endregion\n","import { AXPDueStatusFilterKey } from './due-status';\nimport { normalizePriorityFilterKeys, type AXPPriorityFilterKey } from './task-board-priority.utils';\n\nexport interface AXPTaskBoardTaskTypeOption {\n name: string;\n title: string;\n}\n\n/**\n * Keeps task-type filter values on stable provider {@link AXPTaskBoardTaskTypeOption.name} keys.\n * Display titles are locale-dependent and must never be used for filtering.\n */\nexport function normalizeTaskTypeFilterNames(\n values: string[] | undefined,\n taskTypes: AXPTaskBoardTaskTypeOption[],\n): string[] {\n if (!values?.length) {\n return [];\n }\n\n if (taskTypes.length === 0) {\n return [...new Set(values.map((value) => value.trim()).filter(Boolean))];\n }\n\n const names = new Set(taskTypes.map((type) => type.name));\n\n const normalized = values.flatMap((value) => {\n const trimmed = value.trim();\n if (!trimmed) {\n return [];\n }\n\n if (names.has(trimmed)) {\n return [trimmed];\n }\n\n const matchedByTitle = taskTypes.find((type) => type.title.trim() === trimmed);\n if (matchedByTitle) {\n return [matchedByTitle.name];\n }\n\n return [];\n });\n\n return [...new Set(normalized)];\n}\n\nconst DUE_STATUS_FILTER_NAMES = new Set<AXPDueStatusFilterKey>([\n 'completed',\n 'no-due-date',\n 'overdue',\n 'due-today',\n 'due-tomorrow',\n 'due-this-week',\n 'upcoming',\n]);\n\n/** Maps due-status filter chips back to stable keys (never localized labels). */\nexport function normalizeDueStatusFilterKeys(values: unknown[] | undefined): AXPDueStatusFilterKey[] {\n if (!values?.length) {\n return [];\n }\n\n const titleToName: Record<string, AXPDueStatusFilterKey> = {\n completed: 'completed',\n 'no due date': 'no-due-date',\n overdue: 'overdue',\n 'due today': 'due-today',\n 'due tomorrow': 'due-tomorrow',\n 'due this week': 'due-this-week',\n upcoming: 'upcoming',\n };\n\n const normalized = values.flatMap((value) => {\n const trimmed = String(value ?? '').trim();\n if (!trimmed) {\n return [];\n }\n\n if (DUE_STATUS_FILTER_NAMES.has(trimmed as AXPDueStatusFilterKey)) {\n return [trimmed as AXPDueStatusFilterKey];\n }\n\n const fromTitle = titleToName[trimmed.toLowerCase()];\n return fromTitle ? [fromTitle] : [];\n });\n\n return [...new Set(normalized)];\n}\n\n/** Re-exports priority normalization for filter panels that may receive display labels. */\nexport function normalizeTaskBoardPriorityFilterKeys(values: unknown[] | undefined): AXPPriorityFilterKey[] {\n return normalizePriorityFilterKeys(values);\n}\n\nexport { normalizeRegionalCalendarEventIds } from '@acorex/modules/calendar-management';\n","import { AXSchedulerView } from '@acorex/components/scheduler';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPRegionalSetting, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXMTaskBoardSettings } from './settings.keys';\nimport { canViewAllTaskAssignees, hasTaskBoardSavedAssigneePreference, normalizeTaskBoardAssigneeIds, resolveTaskBoardSavedAssigneeIds } from './task-board-assignee-access';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport {\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY,\n normalizeVisibleTaskBoardCategories,\n resolveTaskBoardLeafViewMode,\n resolveTaskBoardViewCategory,\n resolveTaskBoardViewLayout,\n type AXPTaskBoardCalendarLayout,\n type AXPTaskBoardTableLayout,\n type AXPTaskBoardTimelineLayout,\n type AXPTaskBoardViewLayout,\n} from './task-board-view-category.utils';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPTask, AXPTaskBoardColorBy, AXPWorkflowTaskProvider } from './task-board.types';\nimport { AXPPriorityFilterKey } from './task-board-priority.utils';\nimport { AXPDueStatusFilterKey } from './due-status';\nimport {\n normalizeDueStatusFilterKeys,\n normalizeRegionalCalendarEventIds,\n normalizeTaskBoardPriorityFilterKeys,\n normalizeTaskTypeFilterNames,\n} from './task-board-filter.utils';\n\ntype AXPTaskPriority = NonNullable<AXPTask['priority']>;\nexport type { AXPPriorityFilterKey };\nexport type AXPTaskBoardViewMode = AXSchedulerView | 'kanban' | 'grid' | 'status-grouped-grid';\n\ntype AXPTaskBoardState = {\n daysCount: number;\n currentDate: Date;\n isLoading: boolean;\n detailPanel: boolean;\n rangeStartDate: Date | null;\n selectedTask: AXPTask | null;\n selectedTaskTypeNames: string[];\n taskTypes: AXPWorkflowTaskProvider[];\n currentViewMode: AXPTaskBoardViewMode;\n /** View families the user may select (from settings). */\n visibleViewCategories: AXPTaskBoardViewCategory[];\n calendarLayout: AXPTaskBoardCalendarLayout;\n timelineLayout: AXPTaskBoardTimelineLayout;\n tableLayout: AXPTaskBoardTableLayout;\n selectedPriorities: AXPPriorityFilterKey[];\n selectedDueStatusKeys: AXPDueStatusFilterKey[];\n colorBy: AXPTaskBoardColorBy;\n selectedAssigneeIds: (string | number)[];\n /** False until the user (or persisted settings) sets assignee ids explicitly. */\n assigneeFilterHasSavedPreference: boolean;\n selectedReporterIds: (string | number)[];\n selectedCalendarEventTypeIds: string[];\n};\n\nexport const AXMTaskBoardViewModel = signalStore(\n { providedIn: 'root' },\n withState<AXPTaskBoardState>(() => ({\n daysCount: 7,\n taskTypes: [],\n isLoading: true,\n detailPanel: false,\n selectedTask: null,\n rangeStartDate: null,\n currentDate: new Date(),\n currentViewMode: 'month',\n visibleViewCategories: ['calendar', 'timeline', 'table', 'kanban'],\n calendarLayout: 'monthly',\n timelineLayout: 'daily',\n tableLayout: 'simple',\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n assigneeFilterHasSavedPreference: false,\n selectedPriorities: [],\n selectedDueStatusKeys: [],\n colorBy: 'dueDate',\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n })),\n\n withComputed((store) => ({\n currentViewCategory: computed(() => resolveTaskBoardViewCategory(store.currentViewMode())),\n selectedTaskTypes: computed(() => {\n const names = store.selectedTaskTypeNames();\n if (!names || names.length === 0) {\n return [];\n }\n return store.taskTypes().filter((tt) => names.includes(tt.name));\n }),\n isTaskSelected: computed(() => store.selectedTask() !== null),\n isDetailPanelOpen: computed(() => store.detailPanel()),\n effectiveColorBy: computed((): AXPTaskBoardColorBy => store.colorBy()),\n endDate: computed(() => {\n const currentDate = store.currentDate();\n const daysCount = store.daysCount();\n // Calculate end of the last day in the range (23:59:59.999)\n const endDate = new Date(currentDate);\n endDate.setDate(endDate.getDate() + daysCount - 1);\n endDate.setHours(23, 59, 59, 999);\n return endDate;\n }),\n activeFilterCount: computed(() => {\n let count = 0;\n if (\n store.currentViewMode() !== 'kanban' &&\n store.currentViewMode() !== 'status-grouped-grid' &&\n store.selectedTaskTypeNames().length > 0\n ) {\n count++;\n }\n if (store.selectedAssigneeIds().length > 0) {\n count++;\n }\n if (store.selectedReporterIds().length > 0) {\n count++;\n }\n if (store.selectedPriorities().length > 0) {\n count++;\n }\n if (store.selectedDueStatusKeys().length > 0) {\n count++;\n }\n return count;\n }),\n })),\n\n withMethods(\n (\n store,\n settingsService = inject(AXPSettingsService),\n taskBoardService = inject(AXPTaskBoardService),\n sessionService = inject(AXPSessionService),\n ) => {\n const userScopedSettings = () => settingsService.scope(AXPPlatformScope.User);\n let settingsSyncInitialized = false;\n\n const syncSettingsFromChangeEvent = (keys: string[], values: Record<string, unknown>) => {\n const patch: Partial<AXPTaskBoardState> = {};\n\n if (keys.includes(AXMTaskBoardSettings.ColorBy)) {\n patch.colorBy = (values[AXMTaskBoardSettings.ColorBy] as AXPTaskBoardColorBy | undefined) ?? 'dueDate';\n }\n\n if (keys.includes(AXPRegionalSetting.CalendarEvents)) {\n patch.selectedCalendarEventTypeIds = normalizeRegionalCalendarEventIds(\n values[AXPRegionalSetting.CalendarEvents],\n );\n }\n\n if (Object.keys(patch).length > 0) {\n patchState(store, patch);\n }\n };\n\n return {\n async reloadTaskTypes() {\n const taskTypes = await taskBoardService.getTaskTypes();\n patchState(store, { taskTypes });\n },\n\n async initialize() {\n patchState(store, { isLoading: true });\n try {\n const taskTypes = await taskBoardService.getTaskTypes();\n patchState(store, { taskTypes });\n\n const [\n savedDaysCount,\n savedDateString,\n savedDetailPanel,\n savedViewMode,\n savedVisibleCalendar,\n savedVisibleTimeline,\n savedVisibleTable,\n savedVisibleKanban,\n savedCalendarLayout,\n savedTimelineLayout,\n savedTableLayout,\n savedTaskTypeNames,\n savedAssigneeIds,\n savedReporterIds,\n savedPriorities,\n savedDueStatusKeys,\n savedColorBy,\n savedCalendarEventIds,\n ] = await Promise.all([\n userScopedSettings().get<number | undefined>(AXMTaskBoardSettings.DaysCount),\n userScopedSettings().get<string | undefined>(AXMTaskBoardSettings.CurrentDate),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.DetailPanel),\n userScopedSettings().get<AXPTaskBoardViewMode | undefined>(AXMTaskBoardSettings.ViewMode),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.VisibleCalendar),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.VisibleTimeline),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.VisibleTable),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.VisibleKanban),\n userScopedSettings().get<AXPTaskBoardCalendarLayout | undefined>(AXMTaskBoardSettings.CalendarLayout),\n userScopedSettings().get<AXPTaskBoardTimelineLayout | undefined>(AXMTaskBoardSettings.TimelineLayout),\n userScopedSettings().get<AXPTaskBoardTableLayout | undefined>(AXMTaskBoardSettings.TableLayout),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.SelectedTaskTypeNames),\n userScopedSettings().get<(string | number)[] | undefined>(AXMTaskBoardSettings.SelectedAssigneeIds),\n userScopedSettings().get<(string | number)[] | undefined>(AXMTaskBoardSettings.SelectedReporterIds),\n userScopedSettings().get<AXPPriorityFilterKey[] | undefined>(AXMTaskBoardSettings.SelectedPriorities),\n userScopedSettings().get<AXPDueStatusFilterKey[] | undefined>(AXMTaskBoardSettings.SelectedDueStatusKeys),\n userScopedSettings().get<AXPTaskBoardColorBy | undefined>(AXMTaskBoardSettings.ColorBy),\n settingsService.get<string[] | undefined>(AXPRegionalSetting.CalendarEvents),\n ]);\n\n const visibleViewCategories = normalizeVisibleTaskBoardCategories({\n calendar: savedVisibleCalendar,\n timeline: savedVisibleTimeline,\n table: savedVisibleTable,\n kanban: savedVisibleKanban,\n });\n\n // Ensure currentDate is always a valid Date\n let currentDate: Date;\n if (savedDateString) {\n const parsedDate = new Date(savedDateString);\n currentDate = isNaN(parsedDate.getTime()) ? new Date() : parsedDate;\n } else {\n currentDate = new Date();\n }\n\n const canViewAll = canViewAllTaskAssignees(sessionService);\n const assigneeFilterHasSavedPreference = hasTaskBoardSavedAssigneePreference(savedAssigneeIds);\n const resolvedSavedAssigneeIds = resolveTaskBoardSavedAssigneeIds(sessionService, savedAssigneeIds);\n const defaultAssigneeIds = canViewAll\n ? resolvedSavedAssigneeIds\n : normalizeTaskBoardAssigneeIds(sessionService, resolvedSavedAssigneeIds);\n\n const calendarLayout = savedCalendarLayout ?? 'monthly';\n const timelineLayout = savedTimelineLayout ?? 'daily';\n const tableLayout = savedTableLayout ?? 'simple';\n\n let effectiveViewMode: AXPTaskBoardViewMode = savedViewMode || 'month';\n const effectiveCategory = resolveTaskBoardViewCategory(effectiveViewMode);\n if (!visibleViewCategories.includes(effectiveCategory)) {\n const fallbackCategory = visibleViewCategories[0] ?? 'calendar';\n effectiveViewMode = resolveTaskBoardLeafViewMode(\n fallbackCategory,\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY[fallbackCategory],\n );\n }\n\n if (savedViewMode != null && effectiveViewMode !== savedViewMode) {\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, effectiveViewMode)\n .catch((error) => console.error('Error aligning task board view mode with visible views:', error));\n }\n\n let selectedTaskTypeNames = normalizeTaskTypeFilterNames(savedTaskTypeNames ?? [], taskTypes);\n if (\n selectedTaskTypeNames.length === 0 &&\n taskTypes.length > 0 &&\n (effectiveViewMode === 'kanban' || effectiveViewMode === 'status-grouped-grid')\n ) {\n selectedTaskTypeNames = [taskTypes[0].name];\n }\n\n patchState(store, {\n daysCount: savedDaysCount || 7,\n detailPanel: savedDetailPanel || false,\n currentViewMode: effectiveViewMode,\n visibleViewCategories,\n calendarLayout,\n timelineLayout,\n tableLayout,\n currentDate,\n selectedTaskTypeNames,\n selectedAssigneeIds: defaultAssigneeIds,\n assigneeFilterHasSavedPreference,\n selectedReporterIds: savedReporterIds || [],\n selectedPriorities: normalizeTaskBoardPriorityFilterKeys(savedPriorities),\n selectedDueStatusKeys: normalizeDueStatusFilterKeys(savedDueStatusKeys),\n colorBy: savedColorBy || 'dueDate',\n selectedCalendarEventTypeIds: normalizeRegionalCalendarEventIds(savedCalendarEventIds),\n isLoading: false,\n });\n\n if (!settingsSyncInitialized) {\n settingsSyncInitialized = true;\n settingsService.onChanged.subscribe((event) => {\n if (event.scope !== AXPPlatformScope.User) {\n return;\n }\n syncSettingsFromChangeEvent(event.keys, event.values);\n });\n }\n } catch (error) {\n console.error('Error initializing TaskBoard ViewModel:', error);\n patchState(store, {\n detailPanel: false,\n currentViewMode: 'month',\n visibleViewCategories: ['calendar', 'timeline', 'table', 'kanban'],\n calendarLayout: 'monthly',\n timelineLayout: 'daily',\n tableLayout: 'simple',\n currentDate: new Date(),\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n assigneeFilterHasSavedPreference: false,\n selectedPriorities: [],\n selectedDueStatusKeys: [],\n colorBy: 'dueDate',\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n taskTypes: store.taskTypes(),\n isLoading: false,\n });\n }\n },\n\n setViewMode(mode: AXPTaskBoardViewMode) {\n let category = resolveTaskBoardViewCategory(mode);\n const allowed = store.visibleViewCategories();\n if (!allowed.includes(category)) {\n const fallbackCategory = allowed[0] ?? category;\n mode = resolveTaskBoardLeafViewMode(\n fallbackCategory,\n this.getLayoutForCategory(fallbackCategory),\n );\n category = fallbackCategory;\n }\n\n const layout = resolveTaskBoardViewLayout(mode);\n if (layout) {\n this.patchLayoutForCategory(category, layout);\n }\n\n this.applyLeafViewMode(mode);\n },\n\n setViewCategory(category: AXPTaskBoardViewCategory) {\n const allowed = store.visibleViewCategories();\n const effectiveCategory = allowed.includes(category) ? category : (allowed[0] ?? category);\n const layout = this.getLayoutForCategory(effectiveCategory);\n this.applyLeafViewMode(resolveTaskBoardLeafViewMode(effectiveCategory, layout));\n },\n\n setViewLayout(category: AXPTaskBoardViewCategory, layout: AXPTaskBoardViewLayout) {\n this.patchLayoutForCategory(category, layout);\n if (resolveTaskBoardViewCategory(store.currentViewMode()) === category) {\n this.applyLeafViewMode(resolveTaskBoardLeafViewMode(category, layout));\n } else {\n this.persistLayout(category, layout);\n }\n },\n\n getLayoutForCategory(category: AXPTaskBoardViewCategory): AXPTaskBoardViewLayout | null {\n switch (category) {\n case 'calendar':\n return store.calendarLayout();\n case 'timeline':\n return store.timelineLayout();\n case 'table':\n return store.tableLayout();\n default:\n return null;\n }\n },\n\n patchLayoutForCategory(category: AXPTaskBoardViewCategory, layout: AXPTaskBoardViewLayout) {\n switch (category) {\n case 'calendar':\n patchState(store, { calendarLayout: layout as AXPTaskBoardCalendarLayout });\n break;\n case 'timeline':\n patchState(store, { timelineLayout: layout as AXPTaskBoardTimelineLayout });\n break;\n case 'table':\n patchState(store, { tableLayout: layout as AXPTaskBoardTableLayout });\n break;\n }\n this.persistLayout(category, layout);\n },\n\n persistLayout(category: AXPTaskBoardViewCategory, layout: AXPTaskBoardViewLayout) {\n const key =\n category === 'calendar'\n ? AXMTaskBoardSettings.CalendarLayout\n : category === 'timeline'\n ? AXMTaskBoardSettings.TimelineLayout\n : AXMTaskBoardSettings.TableLayout;\n userScopedSettings()\n .set(key, layout)\n .catch((error) => console.error('Error saving task board view layout:', error));\n },\n\n applyLeafViewMode(mode: AXPTaskBoardViewMode) {\n if (\n (mode === 'kanban' || mode === 'status-grouped-grid') &&\n store.selectedTaskTypeNames().length === 0\n ) {\n const firstTaskType = store.taskTypes()[0];\n if (firstTaskType) {\n this.setSelectedTaskTypeNames([firstTaskType.name]);\n }\n }\n if (\n (mode === 'kanban' || mode === 'status-grouped-grid') &&\n store.selectedTaskTypeNames().length > 1\n ) {\n this.setSelectedTaskTypeNames([store.selectedTaskTypeNames()[0]]);\n }\n patchState(store, { currentViewMode: mode });\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, mode)\n .catch((error) => console.error('Error saving task board view mode:', error));\n },\n\n setCurrentDate(date: Date) {\n patchState(store, { currentDate: new Date(date) });\n userScopedSettings()\n .set(AXMTaskBoardSettings.CurrentDate, date.toISOString())\n .catch((error) => console.error('Error saving current date:', error));\n },\n\n setSelectedTaskTypeNames(taskTypeNames: string[], isQueryParam: boolean = false) {\n patchState(store, { selectedTaskTypeNames: taskTypeNames });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedTaskTypeNames, taskTypeNames)\n .catch((error) => console.error('Error saving selected task type filter:', error));\n },\n\n setSelectedAssigneeIds(\n assigneeIds: (string | number)[],\n isQueryParam: boolean = false,\n persistPreference: boolean = !isQueryParam,\n ) {\n const normalizedAssigneeIds = normalizeTaskBoardAssigneeIds(sessionService, assigneeIds);\n patchState(store, {\n selectedAssigneeIds: normalizedAssigneeIds,\n ...(persistPreference ? { assigneeFilterHasSavedPreference: true } : {}),\n });\n if (isQueryParam || !persistPreference) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedAssigneeIds, normalizedAssigneeIds)\n .catch((error) => console.error('Error saving selected assignee filter:', error));\n },\n\n setSelectedReporterIds(reporterIds: (string | number)[], isQueryParam: boolean = false) {\n patchState(store, { selectedReporterIds: reporterIds });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedReporterIds, reporterIds)\n .catch((error) => console.error('Error saving selected reporter filter:', error));\n },\n\n setSelectedPriorities(priorities: AXPPriorityFilterKey[], isQueryParam: boolean = false) {\n patchState(store, { selectedPriorities: priorities });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedPriorities, priorities)\n .catch((error) => console.error('Error saving selected priority filter:', error));\n },\n\n setSelectedDueStatusKeys(dueStatusKeys: AXPDueStatusFilterKey[], isQueryParam: boolean = false) {\n patchState(store, { selectedDueStatusKeys: dueStatusKeys });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedDueStatusKeys, dueStatusKeys)\n .catch((error) => console.error('Error saving selected due status filter:', error));\n },\n\n setColorBy(colorBy: AXPTaskBoardColorBy) {\n patchState(store, { colorBy });\n userScopedSettings()\n .set(AXMTaskBoardSettings.ColorBy, colorBy)\n .catch((error) => console.error('Error saving task board color by:', error));\n },\n\n setSelectedCalendarEventTypeIds(eventTypeIds: string[]) {\n patchState(store, { selectedCalendarEventTypeIds: eventTypeIds });\n userScopedSettings()\n .set(AXPRegionalSetting.CalendarEvents, eventTypeIds)\n .catch((error) => console.error('Error saving selected calendar events:', error));\n },\n\n /**\n * Sets the currently selected task. Pass `null` to clear the selection.\n * @param task The task to select, or null.\n */\n selectTask(task: AXPTask | null) {\n patchState(store, { selectedTask: task });\n },\n\n /**\n * A convenience method to clear the currently selected task.\n */\n clearSelectedTask() {\n patchState(store, { selectedTask: null });\n },\n\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, true)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, false)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n toggleDetailPanel() {\n const detailPanel = !store.detailPanel();\n patchState(store, { detailPanel: detailPanel });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, detailPanel)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n async getStatusName(key: any, provider: string): Promise<string | null> {\n return taskBoardService.getStatusName(key, provider);\n },\n\n /**\n * Sets the start date for a new range selection.\n * Pass `null` to clear the selection.\n * @param date The start date of the range.\n */\n setRangeStartDate(date: Date | null) {\n patchState(store, { rangeStartDate: date });\n },\n\n setDaysCount(days: number) {\n const count = Math.max(1, days);\n patchState(store, { daysCount: count });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DaysCount, count)\n .catch((error) => console.error('Error saving days count:', error));\n },\n };\n },\n ),\n);\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { RootConfig } from '../../../const';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXPExtraField } from '../task-board.types';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-detail-panel',\n templateUrl: './task-board-detail-panel.component.html',\n styleUrls: ['./task-board-detail-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXTranslatorPipe,\n AXButtonComponent,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXDecoratorIconComponent,\n ],\n})\nexport class AXMTaskBoardDetailPanel {\n protected readonly rootConfig = RootConfig;\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n\n protected statusName = signal<string>('');\n protected extraFields = signal<AXPExtraField[]>([]);\n\n #selectedTaskChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const key = selectedTask?.status.id;\n const provider = selectedTask?.provider;\n if (!provider) return;\n const name = await this.vm.getStatusName(key, provider);\n if (name) this.statusName.set(name);\n });\n\n #selectedTaskTypeChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const selectedTaskType = this.taskBoardService.getProvider(selectedTask?.provider);\n const extraFields = await selectedTaskType?.getExtraFields();\n if (!extraFields) {\n this.extraFields.set([]);\n return;\n }\n this.extraFields.set(extraFields);\n });\n\n protected capitalizeFirstLetter(text: string) {\n return String(text).charAt(0).toUpperCase() + String(text).slice(1);\n }\n}\n","@if (vm.isTaskSelected()) {\n @let nodeInfo = vm.selectedTask();\n <div class=\"__header\">\n <div class=\"__title\">\n <span>{{ nodeInfo?.title }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content\">\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.title' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n @if (nodeInfo?.description) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.description' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.description }}</div>\n </div>\n }\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.start-date' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n {{\n nodeInfo?.startDate\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.end-date' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{\n nodeInfo?.endDate\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.reporter' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{ nodeInfo?.reporter?.fullName }}\n </div>\n </div>\n @if (nodeInfo?.assignee) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.assignee' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.assignee?.fullName }}</div>\n </div>\n }\n @if (statusName()) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.status' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ statusName() }}</div>\n </div>\n }\n @if (nodeInfo?.priority) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.priority' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ capitalizeFirstLetter(nodeInfo?.priority ?? '') }}</div>\n </div>\n }\n @if (extraFields() && extraFields().length) {\n <div class=\"__row\">\n <axp-widgets-container [context]=\"nodeInfo\">\n @for (extraField of extraFields(); track extraField) {\n <div class=\"__title\">\n <span>\n {{ extraField.title | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n <ng-container axp-widget-renderer [node]=\"extraField.widget\" [mode]=\"'view'\"> </ng-container>\n </div>\n }\n </axp-widgets-container>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__header\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.title' | translate | async }}\n </span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content ax-flex ax-items-center ax-justify-center\">\n <axp-state-message\n icon=\"fa-light fa-clipboard-list-check\"\n [title]=\"'@task-management:task-board.detail-panel.no-task-selected.title'\"\n [description]=\"'@task-management:task-board.detail-panel.no-task-selected.description'\"\n >\n </axp-state-message>\n </div>\n}\n","import { AXPRegionalSetting } from '@acorex/platform/common';\n\nexport const TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS = [\n AXPRegionalSetting.LocaleProfile,\n AXPRegionalSetting.Calendar,\n AXPRegionalSetting.FirstDayOfWeek,\n AXPRegionalSetting.WeekendDays,\n] as const;\n\nexport function buildTaskBoardRegionalProfileKey(parts: {\n profileCode: string;\n calendarSystem: string;\n weekStartsOn: number;\n weekendDays: readonly number[];\n}): string {\n return [parts.profileCode, parts.calendarSystem, parts.weekStartsOn, parts.weekendDays.join('-')].join('|');\n}\n","import {\n AXSchedulerAppointment,\n AXSchedulerAppointmentDataSource,\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerDateRange,\n AXSchedulerService,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n AXSchedulerView,\n} from '@acorex/components/scheduler';\nimport { AXCalendarService, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport {\n afterNextRender,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { RootConfig } from '../../../../const';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPResource, AXPTask, AXPTaskAction } from '../../task-board.types';\nimport { AXMTaskBoardViewModel, AXPTaskBoardViewMode } from '../../task-board.viewmodel';\nimport {\n buildTaskBoardRegionalProfileKey,\n TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS,\n} from './task-board-scheduler-layout.utils';\n\n@Component({\n selector: 'axm-task-board-calendar-view',\n templateUrl: './task-board-calendar-view.component.html',\n styleUrls: ['./task-board-calendar-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSchedulerComponent],\n})\nexport class AXMTaskBoardCalendarViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n protected readonly schedulerService = inject(AXSchedulerService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly localeService = inject(AXLocaleService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n schedulerComponent = viewChild(AXSchedulerComponent);\n\n resources = input<AXPResource[]>([]);\n refreshNonce = input<number>(0);\n startingDate = input<Date>(new Date());\n selectedView = input<AXPTaskBoardViewMode>('month');\n dataSource = input.required<AXSchedulerAppointmentDataSource>();\n\n private readonly activeCalendar = toSignal(this.calendarService.calendarChanges$, {\n initialValue: this.calendarService.getActiveCalendar(),\n });\n\n /** Gates ax-scheduler in the template so we can destroy and recreate it cleanly on regional changes. */\n protected readonly schedulerMounted = signal(true);\n\n private readonly regionalSettingsRevision = signal(0);\n private previousRegionalProfileKey: string | null = null;\n\n /** Active calendar system (e.g. solar-hijri for fa-IR). Required for correct week/today rendering. */\n protected schedulerCalendar = computed(\n () => this.activeCalendar()?.name() ?? this.localeService.activeProfile().calendar.system,\n );\n\n /** Detects locale profile and week-layout changes that require a fresh ax-scheduler instance. */\n private readonly regionalProfileKey = computed(() => {\n this.regionalSettingsRevision();\n this.activeCalendar()?.weekdays;\n\n const profile = this.localeService.activeProfile();\n return buildTaskBoardRegionalProfileKey({\n profileCode: profile.localeInfo?.code ?? '',\n calendarSystem: this.schedulerCalendar(),\n weekStartsOn: profile.calendar.week?.startsOn ?? 0,\n weekendDays: profile.calendar.week?.weekends ?? [],\n });\n });\n\n /** Align week/month views to regional week boundaries before passing to ax-scheduler. */\n protected schedulerStartingDate = computed(() => {\n const date = this.startingDate();\n const calendar = this.schedulerCalendar();\n const axDate = this.calendarService.create(date, calendar);\n\n switch (this.currentSchedulerView()) {\n case 'week':\n return axDate.startOf('week').date;\n case 'month':\n case 'timeline-month':\n return axDate.startOf('month').date;\n default:\n return axDate.startOf('day').date;\n }\n });\n\n protected currentSchedulerView = computed<AXSchedulerView>(() =>\n this.selectedView() === 'kanban' || this.selectedView() === 'grid'\n ? 'month'\n : (this.selectedView() as AXSchedulerView),\n );\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n onMonthSlotDblClicked = output<Date>();\n onActionClick = output<AXPTaskAction>();\n component = output<AXSchedulerComponent>();\n onTaskRightClick = output<AXPTaskAction>();\n onRangeChanged = output<AXSchedulerDateRange>();\n\n constructor() {\n this.settingService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event.keys.some((key) => (TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS as readonly string[]).includes(key))) {\n this.regionalSettingsRevision.update((value) => value + 1);\n }\n });\n }\n\n private readonly regionalRemountEffect = effect(() => {\n const profileKey = this.regionalProfileKey();\n\n untracked(() => {\n if (this.previousRegionalProfileKey === null) {\n this.previousRegionalProfileKey = profileKey;\n return;\n }\n\n if (profileKey === this.previousRegionalProfileKey) {\n return;\n }\n\n this.previousRegionalProfileKey = profileKey;\n this.remountScheduler();\n });\n });\n\n /** Re-binds parent scheduler ref whenever ax-scheduler remounts after a regional layout change. */\n private readonly schedulerInstanceEffect = effect(() => {\n if (!this.schedulerMounted()) {\n return;\n }\n\n const scheduler = this.schedulerComponent();\n if (!scheduler) {\n return;\n }\n\n afterNextRender(\n () => {\n const currentScheduler = this.schedulerComponent();\n if (!currentScheduler || !this.schedulerMounted()) {\n return;\n }\n\n this.component.emit(currentScheduler);\n this.syncSchedulerCurrentDateFromToolbar({ force: true });\n void currentScheduler.refresh();\n },\n { injector: this.injector },\n );\n });\n\n private readonly refreshNonceEffect = effect(() => {\n this.refreshNonce();\n if (!this.schedulerMounted()) {\n return;\n }\n void this.schedulerComponent()?.refresh();\n });\n\n private readonly schedulerStateSyncEffect = effect(() => {\n if (!this.schedulerMounted()) {\n return;\n }\n\n this.startingDate();\n this.schedulerStartingDate();\n this.schedulerCalendar();\n this.localeService.activeProfile().localeInfo?.code;\n this.currentSchedulerView();\n this.vm.daysCount();\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.selectedDueStatusKeys();\n this.refreshNonce();\n\n queueMicrotask(() => {\n this.syncSchedulerCurrentDateFromToolbar();\n void this.schedulerComponent()?.refresh();\n });\n });\n\n protected holidays = (range: AXSchedulerDateRange): Promise<AXHolidayDate[]> => {\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n return this.taskBoardService.getEvents(range, selectedEventTypeIds);\n };\n\n /**\n * ax-scheduler only consumes `[startingDate]` on first mount; afterward its internal\n * `currentDate` must be updated explicitly when the external toolbar navigator changes.\n */\n private syncSchedulerCurrentDateFromToolbar(options?: { force?: boolean }): void {\n const scheduler = this.schedulerComponent();\n if (!scheduler) {\n return;\n }\n\n const view = this.currentSchedulerView();\n let targetDate = this.calendarService.create(this.schedulerStartingDate(), this.schedulerCalendar());\n\n if (view === 'week' || view === 'timeline-weekly') {\n targetDate = this.schedulerService.alignToWeekStart(targetDate, {});\n }\n\n if (!options?.force && targetDate.equal(scheduler.currentDate())) {\n return;\n }\n\n scheduler.currentDate.set(targetDate);\n }\n\n private remountScheduler(): void {\n this.schedulerMounted.set(false);\n\n afterNextRender(\n () => {\n this.schedulerMounted.set(true);\n },\n { injector: this.injector },\n );\n }\n\n async ngAfterViewInit(): Promise<void> {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n protected onTaskDrop(event: AXSchedulerSlotDropEvent): void {\n if (event.slot.view === 'agenda' && event.isSameSlotDrop) {\n return;\n }\n\n const dropResult = this.schedulerService.calculateAppointmentDropResult(event);\n if (dropResult.isSameSlotDrop) {\n return;\n }\n\n const originalTask = event.appointment as AXPTask;\n this.schedulerService.applyDropResult(\n originalTask as unknown as AXSchedulerAppointment,\n dropResult,\n );\n\n this.taskBoardService\n .updateTaskDateRange(originalTask, {\n from: dropResult.startDate,\n end: dropResult.endDate,\n })\n .then((persistedTask) => {\n this.onTaskChanged.emit(persistedTask);\n void this.schedulerComponent()?.refresh();\n })\n .catch((error) => {\n console.error('[TaskBoardCalendar] Failed to update task date range:', error);\n void this.schedulerComponent()?.refresh();\n });\n }\n\n protected onTaskRightClickHandler(event: AXSchedulerAppointmentMouseEvent): void {\n this.onTaskRightClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected onSlotDblClicked(event: AXSchedulerSlotMouseEvent): void {\n if (event.sender.selectedView() === 'month') {\n this.onMonthSlotDblClicked.emit(event.slot.startDate.date);\n }\n }\n\n protected async handleRangeChanged(event: AXSchedulerDateRange): Promise<void> {\n this.onRangeChanged.emit(event);\n }\n\n protected handleActionClick(event: AXSchedulerAppointmentMouseEvent): void {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected async onTaskClickHandler(event: AXSchedulerAppointmentMouseEvent): Promise<void> {\n const task = event.appointment as AXPTask;\n const anchor = this.resolveAppointmentAnchor(event);\n\n if (anchor) {\n await this.taskPopoverOverlay.open({\n task,\n anchor,\n offsetX: 12,\n offsetY: 12,\n adaptivityEnabled: true,\n });\n }\n\n this.onTaskClick.emit(task);\n }\n\n private async refreshPopoverData(): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(active.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTask = result.items.find((t) => t.id === active.id);\n if (updatedTask) {\n await this.taskPopoverOverlay.refreshTask({ ...updatedTask, provider: active.provider });\n }\n void this.schedulerComponent()?.refresh();\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n\n protected async openTaskDetails(): Promise<void> {\n const task = this.taskPopoverOverlay.getActiveTask();\n if (!task) {\n return;\n }\n\n try {\n await this.commandService.execute('Entity:OpenDetails', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n data: { id: task.id },\n });\n this.taskPopoverOverlay.close();\n } catch (error) {\n console.error('Failed to open task details:', error);\n }\n }\n\n private resolveAppointmentAnchor(event: AXSchedulerAppointmentMouseEvent): HTMLElement | undefined {\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isAppointment =\n element.classList?.contains('dx-scheduler-appointment') ||\n element.classList?.contains('ax-scheduler-appointment') ||\n element.hasAttribute('data-appointment-id');\n\n if (isAppointment) {\n targetElement = element;\n break;\n }\n\n const parent = element.parentElement;\n if (parent) {\n const isParentAppointment =\n parent.classList?.contains('dx-scheduler-appointment') ||\n parent.classList?.contains('ax-scheduler-appointment');\n\n if (isParentAppointment) {\n targetElement = parent;\n break;\n }\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n return targetElement;\n }\n}\n","@if (schedulerMounted()) {\n <ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [calendar]=\"schedulerCalendar()\"\n [startingDate]=\"schedulerStartingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n [showCurrentTimeIndicator]=\"true\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n ></ax-scheduler>\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH,\n TASK_BOARD_GRID_ROW_ACTION_ITEMS,\n} from '../../task-board-grid-row-actions';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskFilter } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-grid-view',\n templateUrl: './task-board-grid-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n\n private fetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected grid = viewChild<AXDataTableComponent>('grid');\n\n protected readonly taskRowCommandWidth = TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH;\n protected readonly taskRowCommandItems = TASK_BOARD_GRID_ROW_ACTION_ITEMS;\n\n protected gridRemountKeys = computed(() => [this.refreshNonce()]);\n\n protected tasksDataSource = computed(() => {\n const parentDataSource = this.dataSource();\n void this.refreshNonce();\n\n return new AXDataSource<any>({\n load: async (e) => {\n const result = await parentDataSource({ skip: e.skip, take: e.take });\n this.fetchedTasks.set(result.items);\n const mappedItems = result.items.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n statusTitle: task.status.title,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n type: this.taskBoardService.getProvider(task.provider)?.title,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n _originalTask: task,\n }));\n return { items: mappedItems, total: result.total };\n },\n pageSize: 10,\n key: 'id',\n byKey: async (key: unknown) => {\n return this.fetchedTasks().find((task) => task.id === key);\n },\n });\n });\n\n constructor() {\n this.taskBoardService.close$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n #gridManualFetchEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n\n const grid = this.grid();\n if (!grid) {\n return;\n }\n\n queueMicrotask(() => {\n untracked(() => {\n grid.refresh({ reset: true });\n });\n });\n });\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.columns.set([]);\n return;\n }\n\n taskType.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n });\n\n protected handleRowClick(event: AXDataTableRowClick): void {\n if (event.data) {\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const originalTask = mappedItem._originalTask || this.fetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n }\n\n protected handleTaskCommandClick(event: AXRowCommandItemClickEvent): void {\n if (event.name !== 'view') {\n return;\n }\n\n event.nativeEvent?.stopPropagation();\n\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const task = mappedItem._originalTask ?? this.fetchedTasks().find((t) => t.id === mappedItem.id);\n if (!task) {\n return;\n }\n\n const anchor = this.taskPopoverOverlay.resolveAnchorFromCommandClick(event);\n if (!anchor) {\n return;\n }\n\n setTimeout(() => {\n void this.taskPopoverOverlay.open({\n task,\n anchor,\n placement: 'bottom-start',\n adaptivityEnabled: false,\n autoFlip: true,\n });\n }, 0);\n }\n}\n","@for (remountKey of gridRemountKeys(); track remountKey) {\n <ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n (onRowClick)=\"handleRowClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n [allowResizing]=\"true\"\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"statusTitle\"\n [caption]=\"('@task-management:task-board.grid-headers.status' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"type\"\n [caption]=\"('@task-management:task-board.grid-headers.type' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n\n @if (columns().length) {\n <ng-container>\n @for (column of columns(); track column) {\n <axp-widget-column-renderer\n [node]=\"column.widget\"\n [caption]=\"(column.title | translate | async)!\"\n ></axp-widget-column-renderer>\n }\n </ng-container>\n }\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"taskRowCommandWidth\"\n [items]=\"taskRowCommandItems\"\n (onItemClick)=\"handleTaskCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n}\n","import {\n AXKanbanBeforeDropEvent,\n AXKanbanComponent,\n AXKanbanItem,\n AXKanbanMouseEvent,\n AXKanbanSortEvent,\n AXKanbanStatus,\n} from '@acorex/components/kanban';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPTask, AXPTaskAction, AXPTaskActionMenuItem } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'axm-task-board-kanban-view',\n templateUrl: './task-board-kanban-view.component.html',\n styleUrls: ['./task-board-kanban-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXKanbanComponent],\n})\nexport class AXMTaskBoardKanbanViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n\n kanbanComponent = viewChild(AXKanbanComponent);\n\n tasks = model.required<AXPTask[]>();\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n component = output<AXKanbanComponent>();\n onActionClick = output<AXPTaskAction>();\n\n statuses = signal<AXKanbanStatus[]>([]);\n\n stableTasks = computed(() => this.tasks(), { equal: isEqual });\n protected kanbanTasks = computed<AXKanbanItem[]>(() => {\n return this.stableTasks().map((task) => ({\n id: task.id,\n title: task.title,\n index: task.index,\n cssClass: task.cssClass,\n statusKey: task.status.id,\n description: task.description,\n }));\n });\n\n ngAfterViewInit(): void {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n\n if (this.kanbanComponent()) {\n this.component.emit(this.kanbanComponent()!);\n }\n }\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.statuses.set([]);\n return;\n }\n taskType.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n //#region ---- Drag & Drop Handling ----\n\n /**\n * Handles the onBeforeDrop event from the kanban component.\n * Uses event.wait() to register async operations that the kanban will await.\n * If action is cancelled/failed, we set event.canceled = true to prevent the drop.\n */\n protected onBeforeDrop(event: AXKanbanBeforeDropEvent): void {\n // If no status change, allow the drop (just reordering)\n if (event.previousStatusKey === event.currentStatusKey) {\n return;\n }\n\n // Find the task being moved\n const task = this.stableTasks().find((t) => t.id === event.item?.id);\n if (!task || !task.provider) {\n // Allow drop if task not found or no provider\n return;\n }\n\n // Get the provider\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n return;\n }\n\n // Register the async operation using event.wait()\n // The kanban component will await this promise before proceeding\n event.wait(this.executeDropAction(event, task, provider));\n }\n\n /**\n * Executes the action for a drop operation.\n * Sets event.canceled = true if action fails or is cancelled.\n * IMPORTANT: Do NOT update the task status in dataSource here - let the kanban handle the move.\n * The kanban will update the status in onSortChanged, and we'll sync with backend there.\n */\n private async executeDropAction(\n event: AXKanbanBeforeDropEvent,\n task: AXPTask,\n provider: ReturnType<typeof this.taskBoardService.getProvider>,\n ): Promise<void> {\n if (!provider) {\n return;\n }\n\n try {\n // Get available actions for the task\n const actions = await provider.getActions(task);\n if (!actions || actions.length === 0) {\n // No actions available, allow the drop\n return;\n }\n\n // Find action that matches the new status\n const matchingAction = this.findActionForStatus(actions, event.currentStatusKey);\n if (!matchingAction || !matchingAction.command) {\n // No matching action found, allow the drop\n return;\n }\n\n // Execute the action and check result\n const result = await this.taskBoardService.executeCommand(matchingAction.command, task.provider!);\n\n // Check if action was successful (not cancelled or failed)\n if (result?.success === false || result === null) {\n // Action was cancelled or failed - prevent the drop\n event.canceled = true;\n return;\n }\n\n // Action succeeded - allow the drop to proceed\n // The kanban will handle the visual move, and onSortChanged will sync with backend\n } catch (error) {\n console.error('[KanbanDrop] Failed to execute action during drop:', error);\n // On error, prevent the drop to be safe\n event.canceled = true;\n }\n }\n\n /**\n * Finds an action that corresponds to the target status.\n * Matches actions by name patterns (e.g., \"approve\" action for \"approved\" status).\n */\n private findActionForStatus(\n actions: AXPTaskActionMenuItem[],\n targetStatus: string | number,\n ): AXPTaskActionMenuItem | null {\n const targetStatusStr = String(targetStatus).toLowerCase();\n\n // Common status-to-action mappings\n const statusActionMap: Record<string, string[]> = {\n approved: ['approve'],\n rejected: ['reject'],\n cancelled: ['cancel'],\n completed: ['complete', 'finish'],\n done: ['complete', 'finish'],\n inprogress: ['start', 'begin'],\n 'in-progress': ['start', 'begin'],\n blocked: ['block'],\n unblocked: ['unblock'],\n };\n\n // Check direct mappings first\n const possibleActionNames = statusActionMap[targetStatusStr] || [];\n for (const actionName of possibleActionNames) {\n const action = actions.find((a) => a.name?.toLowerCase().includes(actionName));\n if (action) {\n return action;\n }\n }\n\n // Try to find action by name containing status keywords\n const statusKeywords = targetStatusStr.split(/[-_\\s]+/);\n for (const keyword of statusKeywords) {\n if (keyword.length < 3) continue; // Skip very short keywords\n\n const action = actions.find((a) => {\n const actionName = a.name?.toLowerCase() || '';\n return actionName.includes(keyword) || keyword.includes(actionName);\n });\n\n if (action) {\n return action;\n }\n }\n\n // Try exact match with action name\n const exactMatch = actions.find((a) => a.name?.toLowerCase() === targetStatusStr);\n if (exactMatch) {\n return exactMatch;\n }\n\n // Try partial match (status contains action name or vice versa)\n for (const action of actions) {\n const actionName = action.name?.toLowerCase() || '';\n if (targetStatusStr.includes(actionName) || actionName.includes(targetStatusStr)) {\n return action;\n }\n }\n\n return null;\n }\n\n //#endregion\n\n protected onSortChanged(event: AXKanbanSortEvent) {\n const tasks = this.tasks().map((item) => {\n const task: AXKanbanItem | undefined = event.allItems.find((t) => t.id === item.id);\n if (!task) {\n return item;\n }\n\n const status = this.statuses().find((s) => String(s.key) === String(task.statusKey));\n if (!status) {\n return { ...item, index: task.index ?? item.index };\n }\n\n return {\n ...item,\n index: task.index ?? item.index,\n status: { id: status.key, title: status.title },\n };\n });\n\n this.taskBoardService\n .updateTasks(tasks)\n .then((updatedTasks) => {\n this.tasks.set(updatedTasks);\n })\n .catch((error) => {\n console.error('[KanbanSort] Failed to update tasks:', error);\n const provider = tasks[0]?.provider;\n if (provider) {\n this.taskBoardService.requestRefresh(provider);\n }\n });\n }\n\n protected async handleItemClick(event: AXKanbanMouseEvent): Promise<void> {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (!task) return;\n\n // Find the kanban item container element\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n\n // Traverse up to find the kanban item container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isKanbanItem =\n element.classList?.contains('dx-kanban-item') ||\n element.classList?.contains('ax-kanban-item') ||\n element.hasAttribute('data-item-id');\n\n if (isKanbanItem) {\n targetElement = element;\n break;\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n if (targetElement) {\n await this.taskPopoverOverlay.open({\n task,\n anchor: targetElement,\n offsetX: 12,\n offsetY: 12,\n adaptivityEnabled: true,\n });\n }\n\n this.onTaskClick.emit(task);\n }\n\n protected handleActionClick(event: AXKanbanMouseEvent) {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (task) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: task });\n }\n }\n\n private async refreshPopoverData(): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(active.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: active.provider }));\n const updatedMap = new Map(updatedTasks.map((t) => [t.id, t]));\n\n const currentTasks = this.tasks();\n const mergedTasks = currentTasks.map((t) => updatedMap.get(t.id) ?? t);\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id));\n this.tasks.set([...mergedTasks, ...newTasks]);\n\n const updatedSelectedTask = updatedMap.get(active.id);\n if (updatedSelectedTask) {\n await this.taskPopoverOverlay.refreshTask({ ...updatedSelectedTask, provider: active.provider });\n }\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n}\n","<ax-kanban\n [statuses]=\"statuses()\"\n [dataSource]=\"kanbanTasks()\"\n (onItemClick)=\"handleItemClick($event)\"\n (onBeforeDrop)=\"onBeforeDrop($event)\"\n (onSortChanged)=\"onSortChanged($event)\"\n></ax-kanban>\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXKanbanStatus } from '@acorex/components/kanban';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH,\n TASK_BOARD_GRID_ROW_ACTION_ITEMS,\n} from '../../task-board-grid-row-actions';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskFilter, AXPWorkflowTaskProvider } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\ninterface StatusTaskGroup {\n statusInfo: AXKanbanStatus;\n tasks: AXDataSource<any>;\n}\n\nfunction statusGroupTrackKey(nonce: number, group: StatusTaskGroup): string {\n return `${nonce}:${String(group.statusInfo.key)}`;\n}\n\nfunction taskMatchesStatus(task: AXPTask, status: AXKanbanStatus): boolean {\n return String(task.status.id) === String(status.key);\n}\n\n@Component({\n selector: 'axm-task-board-status-grouped-grid-view',\n templateUrl: './task-board-status-grouped-grid-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardStatusGroupedGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n\n provider = input<AXPWorkflowTaskProvider>();\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n\n groupedTasks = signal<StatusTaskGroup[]>([]);\n private allFetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected statuses = signal<AXKanbanStatus[]>([]);\n protected grids = viewChildren<AXDataTableComponent>('grid');\n\n protected readonly taskRowCommandWidth = TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH;\n protected readonly taskRowCommandItems = TASK_BOARD_GRID_ROW_ACTION_ITEMS;\n\n protected trackStatusGroup = (_index: number, group: StatusTaskGroup) =>\n statusGroupTrackKey(this.refreshNonce(), group);\n\n protected groupedViewRemountKeys = computed(() => [this.refreshNonce()]);\n\n constructor() {\n afterNextRender(() => {\n untracked(() => {\n setTimeout(() => {\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 200);\n });\n });\n\n this.taskBoardService.close$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n #dataChanged = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n const allStatuses = this.statuses();\n\n const parentDataSource = this.dataSource();\n if (!parentDataSource || allStatuses.length === 0) {\n this.groupedTasks.set([]);\n this.allFetchedTasks.set([]);\n return;\n }\n\n void parentDataSource().then((result) => {\n this.allFetchedTasks.set(result.items);\n const allTasks = result.items;\n\n const statusGroups = allStatuses.map((status) => {\n const tasksForStatus = allTasks.filter((task) => taskMatchesStatus(task, status));\n return {\n statusInfo: status,\n tasks: this.createTaskDataSourceForGroup(tasksForStatus),\n };\n });\n\n this.groupedTasks.set(statusGroups);\n untracked(() => {\n setTimeout(() => {\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 0);\n });\n });\n });\n\n #providerChanged = effect(async () => {\n const provider = this.vm.selectedTaskTypes()[0];\n provider?.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n provider?.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n #gridsChanged = effect(() => {\n const groups = this.groupedTasks();\n untracked(() => {\n setTimeout(() => {\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 100);\n });\n });\n\n private createTaskDataSourceForGroup(tasks: AXPTask[]): AXDataSource<any> {\n return new AXDataSource<any>({\n load: async (e) => {\n const items = tasks.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n _originalTask: task,\n }));\n return {\n items: items.slice(e.skip, e.skip + e.take),\n total: items.length,\n };\n },\n pageSize: 5,\n key: 'id',\n byKey: async (key: unknown) => {\n return tasks.find((task) => task.id === key);\n },\n });\n }\n\n protected handleRowClick(event: AXDataTableRowClick): void {\n if (!event.data) {\n return;\n }\n const mappedItem = event.data as { id?: string | number; _originalTask?: AXPTask };\n const originalTask = mappedItem._originalTask ?? this.allFetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n\n protected handleTaskCommandClick(event: AXRowCommandItemClickEvent): void {\n if (event.name !== 'view') {\n return;\n }\n\n event.nativeEvent?.stopPropagation();\n\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const task = mappedItem._originalTask ?? this.allFetchedTasks().find((t) => t.id === mappedItem.id);\n if (!task) {\n return;\n }\n\n const anchor = this.taskPopoverOverlay.resolveAnchorFromCommandClick(event);\n if (!anchor) {\n return;\n }\n\n setTimeout(() => {\n void this.taskPopoverOverlay.open({\n task,\n anchor,\n placement: 'bottom-start',\n adaptivityEnabled: false,\n autoFlip: true,\n });\n }, 0);\n }\n}\n","@for (remountKey of groupedViewRemountKeys(); track remountKey) {\n @for (group of groupedTasks(); track trackStatusGroup($index, group)) {\n <h1 class=\"ax-text-xl ax-font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"ax-h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n (onRowClick)=\"handleRowClick($event)\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"taskRowCommandWidth\"\n [items]=\"taskRowCommandItems\"\n (onItemClick)=\"handleTaskCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n }\n}\n","import { AXStyleColorType, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCalendarComponent, AXCalendarSlotClick } from '@acorex/components/calendar';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXSchedulerAppointment, AXSchedulerAppointmentDataSource, AXSchedulerComponent } from '@acorex/components/scheduler';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport {\n AXPActionMenuItem,\n AXPBreadcrumbItem,\n AXPDataSourceDefinitionProviderService,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPFilterDefinition,\n AXPFilterQuery,\n AXPKeyboardShortcutPriority,\n AXPKeyboardShortcutRegistry,\n getActionButton,\n} from '@acorex/platform/core';\nimport {\n AXPSettingsService,\n type AXPDateTimeFilterValue,\n} from '@acorex/platform/common';\nimport {\n AXPQueryFiltersComponent,\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n AXPThemeLayoutBlockComponent,\n type AXPLayoutSideDetailPanelHeader,\n type AXPLayoutSideDetailPanelSection,\n} from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n HostListener,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Params, Router, RouterModule } from '@angular/router';\nimport { isEqual, sortBy } from 'lodash-es';\nimport { filter } from 'rxjs';\nimport { AXMSecurityManagementDataSourceKeys } from '@acorex/modules/security-management';\nimport { AXMTaskManagementDataSourceKeys } from '../../contracts/datasource.keys';\nimport { RootConfig } from '../../const';\nimport {\n canViewAllTaskAssignees,\n normalizeTaskBoardAssigneeIds,\n resolveTaskBoardSavedAssigneeIds,\n} from './task-board-assignee-access';\nimport { AXMTaskBoardContentSkeletonComponent } from './task-board-content-skeleton/task-board-content-skeleton.component';\nimport { AXMTaskBoardDetailPanel } from './task-board-detail-panel/task-board-detail-panel.component';\nimport { filterTasksOverlappingRange } from './task-board-range.utils';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { enrichTaskBoardTasks, resolveTaskBoardSchedulerLabels } from './task-board-task-enrichment.utils';\nimport {\n normalizeDueStatusFilterKeys,\n normalizeTaskBoardPriorityFilterKeys,\n normalizeTaskTypeFilterNames,\n} from './task-board-filter.utils';\nimport { AXPDueStatusFilterKey, AXPDueStatusProviderService } from './due-status';\nimport { AXPResource, AXPTask, AXPTaskAction, AXPTaskBoardColorBy, AXPTaskFilter } from './task-board.types';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport {\n applyTaskBoardDateRangeToViewModel,\n deriveTaskBoardDateRangeFromNavigator,\n getTaskBoardLayoutOptions,\n isTaskBoardRangeFilterCategory,\n resolveTaskBoardCategoryLayoutFromQuery,\n usesTaskBoardToolbarNavigator,\n type AXPTaskBoardViewLayout,\n} from './task-board-view-category.utils';\nimport { AXMTaskBoardViewModel, AXPPriorityFilterKey, AXPTaskBoardViewMode } from './task-board.viewmodel';\nimport { AXMTaskBoardCalendarViewComponent } from './views/task-board-calendar-view/task-board-calendar-view.component';\nimport { AXMTaskBoardGridViewComponent } from './views/task-board-grid-view/task-board-grid-view.component';\nimport { AXMTaskBoardKanbanViewComponent } from './views/task-board-kanban-view/task-board-kanban-view.component';\nimport { AXMTaskBoardStatusGroupedGridViewComponent } from './views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component';\n\nexport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\n\n@Component({\n templateUrl: './task-board.page.html',\n styleUrls: ['./task-board.page.scss'],\n imports: [\n FormsModule,\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXPQueryFiltersComponent,\n AXMTaskBoardContentSkeletonComponent,\n AXMTaskBoardCalendarViewComponent,\n AXMTaskBoardKanbanViewComponent,\n AXMTaskBoardGridViewComponent,\n AXMTaskBoardStatusGroupedGridViewComponent,\n AXMTaskBoardDetailPanel,\n AXPopoverModule,\n AXCalendarComponent,\n AXSelectionListModule,\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTaskBoardPage,\n },\n ],\n})\nexport class AXMTaskBoardPage extends AXPPageLayoutBaseComponent implements OnInit {\n private readonly router = inject(Router);\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n protected readonly vm = inject(AXMTaskBoardViewModel);\n private readonly unsubscribe = inject(AXUnsubscriber);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly localeService = inject(AXLocaleService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly destroyRef = inject(DestroyRef);\n private readonly dueStatusProviderService = inject(AXPDueStatusProviderService);\n private readonly dataSourceDefinitionService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n\n private readonly sessionUser = toSignal(this.sessionService.user$, { initialValue: null });\n private readonly sessionPermissions = toSignal(this.sessionService.permissions$, { initialValue: [] as string[] });\n\n private readonly activeCalendar = toSignal(this.calendarService.calendarChanges$, {\n initialValue: this.calendarService.getActiveCalendar(),\n });\n\n private readonly profileChanged = toSignal(this.localeService.profileChanged$, {\n initialValue: this.localeService.activeProfile(),\n });\n\n private navigatorTimeTextVersion = 0;\n\n private static readonly PRIORITY_OPTIONS: { title: string; name: AXPPriorityFilterKey }[] = [\n { title: 'Urgent', name: 'urgent' },\n { title: 'High', name: 'high' },\n { title: 'Normal', name: 'normal' },\n { title: 'Low', name: 'low' },\n { title: 'No Priority', name: 'no_priority' },\n ];\n\n private static readonly DUE_STATUS_OPTIONS: { title: string; name: AXPDueStatusFilterKey }[] = [\n { title: 'Completed', name: 'completed' },\n { title: 'No due date', name: 'no-due-date' },\n { title: 'Overdue', name: 'overdue' },\n { title: 'Due today', name: 'due-today' },\n { title: 'Due tomorrow', name: 'due-tomorrow' },\n { title: 'Due this week', name: 'due-this-week' },\n { title: 'Upcoming', name: 'upcoming' },\n ];\n\n protected readonly colorByItems: { key: AXPTaskBoardColorBy; titleKey: string }[] = [\n { key: 'dueDate', titleKey: '@task-management:task-board.color-by.due-date' },\n { key: 'priority', titleKey: '@task-management:task-board.color-by.priority' },\n { key: 'status', titleKey: '@task-management:task-board.color-by.status' },\n ];\n\n protected popover = viewChild<AXPopoverComponent>('popover');\n protected calendar = viewChild<AXCalendarComponent>('calendar');\n\n protected isReady = signal(false);\n protected isSettingsPanelOpen = signal(false);\n protected readonly settingsPanelCopy = signal({\n title: '',\n colorBy: '',\n calendars: '',\n });\n protected filtersReady = signal(false);\n protected calendarEventTypes = signal<Array<{ id: string; title: string; color?: string; icon?: string }>>([]);\n protected resources = signal<AXPResource[]>([]);\n protected isQueryParam = signal<boolean>(false);\n protected refreshNonce = signal(0);\n protected navigatorTimeText = signal('');\n protected panelInitialFilters = signal<AXPFilterQuery[]>([]);\n private currentTask = signal<AXPTask | null>(null);\n protected schedulerComponent = signal<AXSchedulerComponent | null>(null);\n private kanbanLoadVersion = 0;\n private filtersPanelInitialized = false;\n private lastLocaleProfileCode: string | null = null;\n\n /** Ctrl enables range selection in kanban/table navigator popover calendars. */\n protected readonly navigatorRangeSelectActive = signal(false);\n\n /** True after a plain (non-Ctrl) single-day click in the navigator calendar. */\n private navigatorPlainSingleDaySelected = false;\n\n private readonly modifierRangeBasedViews: AXPTaskBoardViewMode[] = ['grid', 'kanban', 'status-grouped-grid'];\n\n private readonly alwaysRangeBasedViews: AXPTaskBoardViewMode[] = ['agenda', 'timeline-weekly'];\n\n private dayDataCache = signal<Map<string, number>>(new Map());\n\n protected readonly showToolbarNavigator = computed(() =>\n usesTaskBoardToolbarNavigator(this.vm.currentViewMode()),\n );\n\n protected readonly showViewLayoutSwitcher = computed(\n () => getTaskBoardLayoutOptions(this.vm.currentViewCategory()).length > 0,\n );\n\n protected readonly viewLayoutItems = computed(() => getTaskBoardLayoutOptions(this.vm.currentViewCategory()));\n\n protected readonly selectedViewLayout = computed(() => this.vm.getLayoutForCategory(this.vm.currentViewCategory()));\n\n protected readonly selectedViewLayoutTitleKey = computed(() => {\n const selectedLayout = this.selectedViewLayout();\n const item = this.viewLayoutItems().find((option) => option.key === selectedLayout);\n return item ? this.viewLayoutTranslationKey(item.text) : '';\n });\n\n protected readonly selectedViewLayoutIcon = computed(() => {\n const selectedLayout = this.selectedViewLayout();\n const item = this.viewLayoutItems().find((option) => option.key === selectedLayout);\n return item?.icon ?? 'fa-light fa-sliders';\n });\n\n protected readonly effectiveColorBy = computed(() => this.vm.effectiveColorBy());\n\n protected readonly settingsPanelHeader = computed(\n (): AXPLayoutSideDetailPanelHeader => ({\n primaryTitle: this.settingsPanelCopy().title,\n icon: {\n iconClass: 'fa-fw fa-lg fa-light fa-gear',\n },\n }),\n );\n\n protected readonly settingsPanelSections = computed((): AXPLayoutSideDetailPanelSection[] => {\n const copy = this.settingsPanelCopy();\n const sections: AXPLayoutSideDetailPanelSection[] = [\n { title: copy.colorBy, projectionKey: 'colorBy' },\n ];\n\n if (this.showCalendarEventButton()) {\n sections.push({ title: copy.calendars, projectionKey: 'calendars' });\n }\n\n return sections;\n });\n\n private readonly settingsPanelI18nEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n void this.loadSettingsPanelCopy();\n });\n\n /** Resolves navigator date label asynchronously so month names react to locale/profile changes. */\n private readonly navigatorTimeTextEffect = effect(() => {\n this.profileChanged();\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.calendarType();\n this.refreshNonce();\n\n const version = ++this.navigatorTimeTextVersion;\n\n untracked(() => {\n void this.resolveNavigatorTimeText().then((text) => {\n if (version === this.navigatorTimeTextVersion) {\n this.navigatorTimeText.set(text);\n }\n });\n });\n });\n\n /** Re-render navigator calendar when regional week layout changes. */\n private readonly navigatorCalendarLayoutEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n this.calendarService.getActiveCalendar()?.weekdays;\n this.calendarType();\n\n untracked(() => {\n queueMicrotask(() => {\n this.calendar()?.render();\n });\n });\n });\n\n private readonly canFilterByAllAssignees = computed(() => {\n this.sessionUser();\n this.sessionPermissions();\n return canViewAllTaskAssignees(this.sessionService);\n });\n\n protected readonly calendarEventTypeItems = computed(() =>\n this.calendarEventTypes().map((eventType) => ({\n id: eventType.id,\n text: eventType.title,\n icon: eventType.icon,\n })),\n );\n\n protected readonly showCalendarEventButton = computed(\n () => !this.isNonCalendarView() && this.calendarEventTypeItems().length > 0,\n );\n\n protected readonly selectedCalendarEventTypeCount = computed(\n () => this.vm.selectedCalendarEventTypeIds().length,\n );\n\n protected readonly filterDefinitions = computed<AXPFilterDefinition[]>(() => {\n const canFilterByAll = this.canFilterByAllAssignees();\n const assigneeScopeKey = `${this.sessionUser()?.id ?? ''}:${canFilterByAll}`;\n const isMultiTaskType = this.isMultiSelectTaskTypeEnabled();\n\n return [\n {\n field: 'type',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.task-type',\n icon: 'fa-light fa-list',\n widget: {\n type: 'select-filter',\n options: {\n dataSource: AXMTaskManagementDataSourceKeys.TaskTypes,\n valueField: 'name',\n textField: 'title',\n multiple: isMultiTaskType,\n allowClear: isMultiTaskType,\n },\n },\n filterType: { advance: true, inline: false },\n },\n {\n field: 'assignee',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.assignee',\n icon: 'fa-light fa-user',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'id',\n textField: 'displayName',\n allowSearch: canFilterByAll,\n allowClear: canFilterByAll,\n readonly: !canFilterByAll,\n dataSource: AXMTaskManagementDataSourceKeys.TaskBoardAssignees,\n assigneeScopeKey,\n },\n },\n filterType: { advance: true, inline: false },\n },\n {\n field: 'reporter',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.reporter',\n icon: 'fa-light fa-user-pen',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'id',\n textField: 'displayName',\n allowSearch: true,\n dataSource: AXMSecurityManagementDataSourceKeys.Users,\n },\n },\n filterType: { advance: true, inline: false },\n },\n {\n field: 'priority',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.priority',\n icon: 'fa-light fa-flag',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'name',\n textField: 'title',\n dataSource: AXMTaskBoardPage.PRIORITY_OPTIONS,\n },\n },\n filterType: { advance: true, inline: false },\n },\n {\n field: 'dueStatus',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.due-status',\n icon: 'fa-light fa-calendar-clock',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'name',\n textField: 'title',\n dataSource: AXMTaskBoardPage.DUE_STATUS_OPTIONS,\n },\n },\n filterType: { advance: true, inline: false },\n },\n ];\n });\n\n /** Re-scope assignee filter when user or permissions change. */\n private readonly assigneeScopeEffect = effect(() => {\n this.sessionUser();\n this.sessionPermissions();\n\n if (this.vm.isLoading()) {\n return;\n }\n\n const resolvedAssigneeIds = this.vm.assigneeFilterHasSavedPreference()\n ? this.vm.selectedAssigneeIds()\n : resolveTaskBoardSavedAssigneeIds(this.sessionService, null);\n const scopedIds = normalizeTaskBoardAssigneeIds(this.sessionService, resolvedAssigneeIds);\n const assigneeIdsChanged = !isEqual(sortBy(this.vm.selectedAssigneeIds()), sortBy(scopedIds));\n if (assigneeIdsChanged) {\n this.vm.setSelectedAssigneeIds(scopedIds, this.isQueryParam(), false);\n }\n\n if (this.filtersPanelInitialized && assigneeIdsChanged) {\n untracked(() => void this.syncPanelInitialFilters());\n }\n });\n\n protected calendarType = computed(\n () => this.activeCalendar()?.name() ?? this.localeService.activeProfile().calendar.system,\n );\n\n protected todayButtonTextKey = computed(() => {\n switch (this.vm.currentViewMode()) {\n case 'week':\n return '@task-management:task-board.navigator.current-week';\n case 'month':\n case 'timeline-month':\n return '@task-management:task-board.navigator.current-month';\n case 'timeline-year':\n return '@task-management:task-board.navigator.current-year';\n default:\n return '@task-management:task-board.navigator.today';\n }\n });\n protected calendarDepth = computed(() => {\n if (\n this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid'\n ) {\n return 'day';\n }\n return this.schedulerComponent()?.calendarDepth() || 'day';\n });\n\n protected currentDateForCalendar = computed(() => {\n const pendingRangeStart = this.vm.rangeStartDate();\n if (pendingRangeStart && this.isModifierRangeNavigatorView()) {\n return pendingRangeStart;\n }\n const date = this.vm.currentDate();\n return date || new Date();\n });\n protected filter = computed<AXPTaskFilter>(() => {\n const taskTypeNames = this.vm.selectedTaskTypeNames();\n const assigneeIds = this.vm.selectedAssigneeIds();\n const reporterIds = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n const dueStatusKeys = this.vm.selectedDueStatusKeys();\n\n const currentDate = this.vm.currentDate() || new Date();\n let from: AXDateTime = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n let end: AXDateTime;\n\n const currentView = this.vm.currentViewMode();\n\n if (\n currentView === 'grid' ||\n currentView === 'kanban' ||\n currentView === 'agenda' ||\n currentView === 'timeline-weekly' ||\n currentView === 'status-grouped-grid'\n ) {\n end = from.add('day', this.vm.daysCount() - 1);\n } else if (currentView === 'month' || currentView === 'timeline-month') {\n from = from.startOf('month');\n end = from.endOf('month');\n } else {\n end = from.endOf('day');\n }\n\n return {\n // Empty filter means \"all items\" for task type/provider.\n ...(taskTypeNames.length > 0 && { types: taskTypeNames }),\n ...(assigneeIds.length > 0 && { assigneeIds }),\n ...(reporterIds.length > 0 && { reporterIds }),\n ...(priorities.length > 0 && { priorities }),\n ...(dueStatusKeys.length > 0 && { dueStatusKeys }),\n range: { from: from.date, end: end.date },\n };\n });\n\n private enrichTasks(tasks: AXPTask[]): AXPTask[] {\n return enrichTaskBoardTasks(tasks, this.vm.effectiveColorBy(), this.dueStatusProviderService);\n }\n\n private async enrichTasksForViews(tasks: AXPTask[]): Promise<AXPTask[]> {\n const labeled = await resolveTaskBoardSchedulerLabels(\n tasks,\n this.translateService,\n this.formatService,\n this.settingsService,\n );\n return this.enrichTasks(labeled);\n }\n\n private contextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n\n override async ngOnInit() {\n await super.ngOnInit();\n\n this.taskBoardService.refresh$.subscribe(async () => {\n await this.reloadTaskBoardData();\n });\n\n this.taskBoardService.clearProviderCache();\n await this.vm.initialize();\n\n const calendars = await this.loadCalendarFilterOptions();\n\n await this.loadFromRoute();\n\n if (this.activatedRoute.snapshot.queryParamMap.has('calendarEvent')) {\n void this.router.navigate([], {\n queryParams: { calendarEvent: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n if (this.vm.selectedCalendarEventTypeIds().length === 0 && calendars.length > 0) {\n this.vm.setSelectedCalendarEventTypeIds(calendars.map((calendar) => calendar.id));\n }\n\n this.filtersReady.set(true);\n this.isReady.set(true);\n this.registerKeyboardShortcuts();\n await this.reloadTaskBoardData();\n await this.updateDayDataCache();\n\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n void this.loadFromRoute();\n });\n\n this.taskBoardService.openTask$.subscribe(async ({ task, provider, instanceId, activityId }) => {\n await this.taskResolveHandler();\n let match = task;\n if (!match && instanceId && activityId) {\n match = this.resolvedTasks().find((t) => {\n const data = t.data as { instanceId?: string; activityId?: string } | undefined;\n return data?.instanceId === instanceId && data?.activityId === activityId;\n });\n }\n if (!match) {\n return;\n }\n this.vm.selectTask({\n ...match,\n provider: match.provider ?? provider,\n });\n });\n }\n override async getPageTitle(): Promise<string> {\n const category = this.vm.currentViewCategory();\n const layout = this.vm.getLayoutForCategory(category);\n return await this.translateService.translateAsync(this.viewPageTitleTranslationKey(category, layout));\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] {\n const currentCategory = this.vm.currentViewCategory();\n return this.vm.visibleViewCategories().map((category) => ({\n title: this.viewCategoryTranslationKey(category),\n icon: currentCategory === category ? 'fa-check' : '',\n command: {\n name: 'task-board-category',\n metadata: { category, isSelected: currentCategory === category, hideSelectionCheckSuffix: true },\n },\n }));\n }\n\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [\n {\n title: await this.translateService.translateAsync('@task-management:task-board.page-title'),\n },\n ];\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n // {\n // ...getActionButton('refresh'),\n // command: { name: 'refresh' },\n // },\n ];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (command.name === 'task-board-category') {\n const category = command.metadata?.['category'] as AXPTaskBoardViewCategory | undefined;\n if (category) {\n this.applyViewCategory(category);\n }\n return;\n }\n // if (command.name === 'refresh') {\n // this.taskBoardService.requestRefresh();\n // }\n }\n\n protected schedulerDataSource: AXSchedulerAppointmentDataSource = (schedulerFilter) => {\n const pageFilter = this.filter();\n const visibleRange = schedulerFilter?.range ?? pageFilter.range;\n const finalFilter: AXPTaskFilter = {\n ...pageFilter,\n ...schedulerFilter,\n range: visibleRange,\n };\n\n return this.taskBoardService.getTasks(finalFilter).then(async (result) => {\n const items = await this.enrichTasksForViews(filterTasksOverlappingRange(result.items, visibleRange));\n this.validateSelectedTask(items);\n return items as AXSchedulerAppointment[];\n });\n };\n\n protected gridDataSource = (filter?: AXPTaskFilter): Promise<{ items: AXPTask[]; total: number }> => {\n const finalFilter: AXPTaskFilter = { ...this.filter(), ...filter };\n\n return this.taskBoardService.getTasks(finalFilter).then(async (result) => {\n const items = await this.enrichTasksForViews(result.items);\n this.validateSelectedTask(items);\n return { items, total: result.total };\n });\n };\n\n resolvedTasks = signal<AXPTask[]>([]);\n\n /** Loads kanban tasks when filters or date range change; ignores stale async results. */\n private readonly kanbanDataEffect = effect(() => {\n if (this.vm.currentViewMode() !== 'kanban') {\n return;\n }\n\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.selectedDueStatusKeys();\n this.vm.effectiveColorBy();\n this.vm.currentDate();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.refreshNonce();\n\n const filter = this.filter();\n const version = ++this.kanbanLoadVersion;\n\n void this.taskBoardService.getTasks(filter).then(async (result) => {\n if (version !== this.kanbanLoadVersion) {\n return;\n }\n this.validateSelectedTask(result.items);\n this.resolvedTasks.set(await this.enrichTasksForViews(result.items));\n });\n });\n\n /** Keeps scheduler in sync when toolbar date/view changes outside the scheduler UI. */\n private readonly schedulerNavigationEffect = effect(() => {\n const viewMode = this.vm.currentViewMode();\n const calendarViews: AXPTaskBoardViewMode[] = [\n 'day',\n 'week',\n 'month',\n 'agenda',\n 'timeline-day',\n 'timeline-weekly',\n 'timeline-month',\n 'timeline-year',\n ];\n if (!calendarViews.includes(viewMode)) {\n return;\n }\n\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.daysCount();\n this.refreshNonce();\n\n queueMicrotask(() => {\n this.schedulerComponent()?.refresh();\n });\n });\n\n private async taskResolveHandler(filter: AXPTaskFilter = this.filter()) {\n const result = await this.taskBoardService.getTasks(filter);\n const items = await this.enrichTasksForViews(result.items);\n this.validateSelectedTask(items);\n this.resolvedTasks.set(items);\n }\n\n private async reloadTaskBoardData(): Promise<void> {\n this.taskBoardService.clearProviderCache();\n await this.vm.reloadTaskTypes();\n if (this.filtersPanelInitialized) {\n await this.syncPanelInitialFilters();\n }\n await this.taskResolveHandler();\n await this.getResources();\n this.refreshNonce.update((value) => value + 1);\n this.schedulerComponent()?.refresh();\n }\n\n schedulerComponentChanged(component: AXSchedulerComponent) {\n this.schedulerComponent.set(component);\n queueMicrotask(() => {\n component.refresh();\n });\n }\n\n protected async handleContextMenuOnOpening(event: AXContextMenuOpeningEvent) {\n const currentTask = this.currentTask();\n if (!currentTask) return;\n const providerName = currentTask.provider;\n if (!providerName) return;\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) return;\n const actions = await provider.getActions(currentTask);\n for (const item of actions) {\n const t = item.title;\n const text =\n typeof t === 'string'\n ? t.startsWith('@')\n ? await this.translateService.translateAsync(t)\n : t\n : this.translateService.resolve(t);\n event.items.push({\n text,\n icon: item.icon,\n color: item.color as AXStyleColorType,\n break: item.break,\n data: {\n command: item.command,\n },\n });\n }\n }\n\n protected handleContextMenu(event: AXPTaskAction) {\n this.currentTask.set(event.task);\n const x = event.nativeEvent.clientX;\n const y = event.nativeEvent.clientY;\n const element = event.nativeEvent.target as HTMLElement;\n this.contextMenu()?.showAt({ x, y }, element);\n }\n\n protected handleMonthSlotDblClicked(date: Date) {\n this.vm.setCurrentDate(date);\n this.vm.setViewLayout('calendar', 'daily');\n }\n\n private viewCategoryTranslationKey(category: AXPTaskBoardViewCategory): string {\n return `@task-management:task-board.${category}`;\n }\n\n private viewPageTitleTranslationKey(\n category: AXPTaskBoardViewCategory,\n layout: ReturnType<typeof this.vm.getLayoutForCategory>,\n ): string {\n if (category === 'kanban') {\n return '@task-management:task-board.view-page-title.kanban';\n }\n if (layout) {\n return `@task-management:task-board.view-page-title.${category}.${layout}`;\n }\n return this.viewCategoryTranslationKey(category);\n }\n\n protected viewLayoutTranslationKey(layoutText: string): string {\n return `@task-management:task-board.view.${layoutText}`;\n }\n\n protected isViewLayoutSelected(layout: AXPTaskBoardViewLayout): boolean {\n return this.selectedViewLayout() === layout;\n }\n\n protected handleViewLayoutChange(layout: AXPTaskBoardViewLayout): void {\n this.vm.setViewLayout(this.vm.currentViewCategory(), layout);\n void this.navigateViewState();\n this.recompute();\n }\n\n private applyViewCategory(category: AXPTaskBoardViewCategory): void {\n const previousCategory = this.vm.currentViewCategory();\n const previousMode = this.vm.currentViewMode();\n\n if (isTaskBoardRangeFilterCategory(category) && !isTaskBoardRangeFilterCategory(previousCategory)) {\n this.applySmartDateRangeFromNavigator(previousMode);\n }\n\n this.vm.setViewCategory(category);\n void this.navigateViewState();\n this.popover()?.close();\n this.recompute();\n }\n\n private applySmartDateRangeFromNavigator(sourceViewMode: AXPTaskBoardViewMode): void {\n const range = deriveTaskBoardDateRangeFromNavigator(\n this.calendarService,\n sourceViewMode,\n this.vm.currentDate(),\n this.vm.daysCount(),\n );\n applyTaskBoardDateRangeToViewModel(\n range,\n (date) => this.vm.setCurrentDate(date),\n (days) => this.vm.setDaysCount(days),\n );\n }\n\n private navigateViewState(): void {\n void this.router.navigate([], {\n queryParams: this.buildFilterQueryParams(),\n queryParamsHandling: 'merge',\n });\n }\n\n protected toggleSettingsPanel(): void {\n this.isSettingsPanelOpen.update((open) => !open);\n }\n\n protected closeSettingsPanel(): void {\n this.isSettingsPanelOpen.set(false);\n }\n\n private async loadSettingsPanelCopy(): Promise<void> {\n const [title, colorBy, calendars] = await Promise.all([\n this.translationService.translateAsync('@task-management:task-board.settings.title'),\n this.translationService.translateAsync('@task-management:task-board.settings.color-by'),\n this.translationService.translateAsync('@task-management:task-board.filter.calendars'),\n ]);\n\n this.settingsPanelCopy.set({\n title: title ?? '',\n colorBy: colorBy ?? '',\n calendars: calendars ?? '',\n });\n }\n\n protected handleCalendarEventTypesSelectionChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const next = Array.isArray(event.value)\n ? event.value.map(String)\n : event.value != null\n ? [String(event.value)]\n : [];\n\n this.vm.setSelectedCalendarEventTypeIds(next);\n this.schedulerComponent()?.refresh();\n }\n\n protected handleFiltersChanged(filters: AXPFilterQuery[]): void {\n if (!this.filtersPanelInitialized) {\n return;\n }\n\n // User-driven filter changes should persist and override URL-seeded state.\n this.isQueryParam.set(false);\n\n const typeFilter = filters.find((f) => f.field === 'type');\n const assigneeFilter = filters.find((f) => f.field === 'assignee');\n const reporterFilter = filters.find((f) => f.field === 'reporter');\n const priorityFilter = filters.find((f) => f.field === 'priority');\n const dueStatusFilter = filters.find((f) => f.field === 'dueStatus');\n\n this.syncTaskTypesToViewModel(typeFilter?.value);\n this.syncAssigneesToViewModel(assigneeFilter?.value);\n this.syncReportersToViewModel(reporterFilter?.value);\n this.syncPrioritiesToViewModel(priorityFilter?.value);\n this.syncDueStatusesToViewModel(dueStatusFilter?.value);\n\n void this.navigateViewState();\n }\n\n private async syncPanelInitialFilters(): Promise<void> {\n this.panelInitialFilters.set(await this.buildInitialFiltersFromViewModel());\n }\n\n private async buildInitialFiltersFromViewModel(): Promise<AXPFilterQuery[]> {\n const filters: AXPFilterQuery[] = [];\n const types = this.vm.selectedTaskTypeNames();\n const assignees = this.vm.selectedAssigneeIds();\n const reporters = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n const dueStatusKeys = this.vm.selectedDueStatusKeys();\n\n if (types.length > 0) {\n const typeValue = this.isMultiSelectTaskTypeEnabled() ? types : types[0];\n filters.push({\n field: 'type',\n operator: { type: 'equal' },\n value: typeValue,\n displayText: await this.resolveSelectFilterDisplayText('task-types', 'name', 'title', typeValue),\n });\n }\n if (assignees.length > 0) {\n filters.push({\n field: 'assignee',\n operator: { type: 'equal' },\n value: assignees,\n displayText: await this.resolveSelectFilterDisplayText(\n 'task-board-assignees',\n 'id',\n 'displayName',\n assignees,\n ),\n });\n }\n if (reporters.length > 0) {\n filters.push({\n field: 'reporter',\n operator: { type: 'equal' },\n value: reporters,\n displayText: await this.resolveSelectFilterDisplayText('users', 'id', 'displayName', reporters),\n });\n }\n if (priorities.length > 0) {\n filters.push({\n field: 'priority',\n operator: { type: 'equal' },\n value: priorities,\n displayText: this.resolvePriorityDisplayText(priorities),\n });\n }\n if (dueStatusKeys.length > 0) {\n filters.push({\n field: 'dueStatus',\n operator: { type: 'equal' },\n value: dueStatusKeys,\n displayText: this.resolveDueStatusDisplayText(dueStatusKeys),\n });\n }\n\n return filters;\n }\n\n private resolveDueStatusDisplayText(values: AXPDueStatusFilterKey[]): string {\n return values\n .map((name) => AXMTaskBoardPage.DUE_STATUS_OPTIONS.find((option) => option.name === name)?.title ?? name)\n .join(', ');\n }\n\n private resolvePriorityDisplayText(values: AXPPriorityFilterKey[]): string {\n return values\n .map((name) => AXMTaskBoardPage.PRIORITY_OPTIONS.find((option) => option.name === name)?.title ?? name)\n .join(', ');\n }\n\n private async resolveSelectFilterDisplayText(\n dataSourceName: string,\n valueField: string,\n textField: string,\n values: unknown,\n ): Promise<string> {\n const ids = Array.isArray(values) ? values : values != null && values !== '' ? [values] : [];\n if (ids.length === 0) {\n return '';\n }\n\n const definition = await this.dataSourceDefinitionService.get(dataSourceName);\n const dsResult = definition?.source();\n const dataSource = dsResult instanceof Promise ? await dsResult : dsResult;\n\n if (!dataSource?.config?.byKey) {\n return ids.map((id) => String(this.unwrapFilterValue(id))).join(', ');\n }\n\n const labels = await Promise.all(\n ids.map(async (id) => {\n const rawId = this.unwrapFilterValue(id);\n const item = await dataSource.config.byKey!(rawId);\n if (item && typeof item === 'object') {\n const label = (item as Record<string, unknown>)[textField];\n if (label != null && label !== '') {\n return String(label);\n }\n }\n return String(rawId);\n }),\n );\n\n return labels.join(', ');\n }\n\n private buildFilterQueryParams(): Params {\n const types = this.vm.selectedTaskTypeNames();\n const assignees = this.vm.selectedAssigneeIds();\n const reporters = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n const dueStatusKeys = this.vm.selectedDueStatusKeys();\n const category = this.vm.currentViewCategory();\n const layout = this.vm.getLayoutForCategory(category);\n\n return {\n view: category,\n layout: layout ?? null,\n type: types.length > 0 ? types : null,\n assignee: assignees.length > 0 ? assignees.map(String) : null,\n reporter: reporters.length > 0 ? reporters.map(String) : null,\n priority: priorities.length > 0 ? priorities : null,\n dueStatus: dueStatusKeys.length > 0 ? dueStatusKeys : null,\n calendarEvent: null,\n };\n }\n\n private unwrapFilterValue(value: unknown): unknown {\n let v = value;\n while (v != null && typeof v === 'object' && !Array.isArray(v) && 'value' in v) {\n v = (v as Record<string, unknown>)['value'];\n }\n return v;\n }\n\n private normalizeStringArrayFilterValue(value: unknown): string[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v\n .filter((item) => item != null)\n .map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n if (typeof item === 'object' && item != null && 'name' in item) {\n return String((item as { name: string }).name);\n }\n return String(item);\n });\n }\n if (typeof v === 'object' && v != null && 'name' in v) {\n return [String((v as { name: string }).name)];\n }\n return [String(v)];\n }\n\n private normalizeIdArrayFilterValue(value: unknown): (string | number)[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v\n .filter((item) => item != null)\n .map((item) => {\n if (typeof item === 'string' || typeof item === 'number') {\n return item;\n }\n if (typeof item === 'object' && item != null && 'id' in item) {\n return (item as { id: string | number }).id;\n }\n return String(item);\n });\n }\n if (typeof v === 'object' && v != null && 'id' in v) {\n return [(v as { id: string | number }).id];\n }\n if (typeof v === 'string' || typeof v === 'number') {\n return [v];\n }\n return [String(v)];\n }\n\n private syncTaskTypesToViewModel(value: unknown): void {\n const raw = this.normalizeStringArrayFilterValue(value);\n const newNames = normalizeTaskTypeFilterNames(raw, this.vm.taskTypes());\n const currentNames = this.vm.selectedTaskTypeNames();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedTaskTypeNames(newNames, this.isQueryParam());\n }\n }\n\n private syncAssigneesToViewModel(value: unknown): void {\n const newIds = this.normalizeIdArrayFilterValue(value);\n const currentIds = this.vm.selectedAssigneeIds();\n if (!isEqual(sortBy(currentIds.map(String)), sortBy(newIds.map(String)))) {\n // Always persist an explicit UI change (including clearing to \"all assignees\").\n this.vm.setSelectedAssigneeIds(newIds, false, true);\n }\n }\n\n private syncReportersToViewModel(value: unknown): void {\n const newIds = this.normalizeIdArrayFilterValue(value);\n const currentIds = this.vm.selectedReporterIds();\n if (!isEqual(sortBy(currentIds.map(String)), sortBy(newIds.map(String)))) {\n this.vm.setSelectedReporterIds(newIds, this.isQueryParam());\n }\n }\n\n private syncPrioritiesToViewModel(value: unknown): void {\n const raw = this.normalizeStringArrayFilterValue(value);\n const newNames = normalizeTaskBoardPriorityFilterKeys(raw);\n const currentNames = this.vm.selectedPriorities();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedPriorities(newNames, this.isQueryParam());\n }\n }\n\n private syncDueStatusesToViewModel(value: unknown): void {\n const raw = this.normalizeStringArrayFilterValue(value);\n const newKeys = normalizeDueStatusFilterKeys(raw);\n const currentKeys = this.vm.selectedDueStatusKeys();\n if (!isEqual(sortBy(currentKeys), sortBy(newKeys))) {\n this.vm.setSelectedDueStatusKeys(newKeys, this.isQueryParam());\n }\n }\n\n protected handleColorBySelectionChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n this.handleColorByChange(event.value as AXPTaskBoardColorBy);\n }\n\n protected handleColorByChange(key: AXPTaskBoardColorBy): void {\n this.vm.setColorBy(key);\n void this.taskResolveHandler();\n this.schedulerComponent()?.refresh();\n this.refreshNonce.update((value) => value + 1);\n }\n\n private isMultiSelectTaskTypeEnabled(): boolean {\n const viewMode = this.vm.currentViewMode();\n return viewMode !== 'kanban' && viewMode !== 'status-grouped-grid';\n }\n\n /** Re-normalizes filter keys when locale/profile changes (titles must not drive filtering). */\n private readonly localeFilterRefreshEffect = effect(() => {\n const profileCode = this.localeService.activeProfile().localeInfo?.code ?? '';\n if (!profileCode || this.vm.isLoading() || !this.filtersPanelInitialized) {\n return;\n }\n\n const previousCode = this.lastLocaleProfileCode;\n this.lastLocaleProfileCode = profileCode;\n if (previousCode == null || previousCode === profileCode) {\n return;\n }\n\n untracked(() => {\n const taskTypes = this.vm.taskTypes();\n const normalizedTypes = normalizeTaskTypeFilterNames(this.vm.selectedTaskTypeNames(), taskTypes);\n if (!isEqual(sortBy(normalizedTypes), sortBy(this.vm.selectedTaskTypeNames()))) {\n this.vm.setSelectedTaskTypeNames(normalizedTypes);\n }\n\n void this.vm.reloadTaskTypes().then(() => {\n this.taskBoardService.clearProviderCache();\n void this.syncPanelInitialFilters();\n this.refreshNonce.update((value) => value + 1);\n this.schedulerComponent()?.refresh();\n });\n });\n });\n\n private readonly refreshEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.selectedDueStatusKeys();\n this.vm.effectiveColorBy();\n this.vm.currentDate();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.refreshNonce();\n\n void this.getResources();\n this.schedulerComponent()?.refresh();\n });\n\n private readonly calendarEventTypeRefreshEffect = effect(() => {\n this.vm.selectedCalendarEventTypeIds();\n this.localeService.activeProfile().localeInfo?.code;\n this.schedulerComponent()?.refresh();\n });\n\n private readonly calendarLocalizationEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n void this.loadCalendarFilterOptions();\n });\n\n private readonly dayDataCacheEffect = effect(async () => {\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.selectedTaskTypeNames();\n this.localeService.activeProfile().localeInfo?.code;\n await this.updateDayDataCache();\n });\n\n private async loadCalendarFilterOptions(): Promise<Array<{ id: string; title: string }>> {\n const calendars = await this.taskBoardService.getCalendarEventTypes();\n this.calendarEventTypes.set(\n calendars.map((calendar) => ({\n id: calendar.id,\n title: calendar.title,\n })),\n );\n return calendars;\n }\n\n private async updateDayDataCache(): Promise<void> {\n const currentDate = this.vm.currentDate();\n const depth = this.calendarDepth();\n\n // Determine the date range based on the popover calendar depth\n let rangeStart: Date;\n let rangeEnd: Date;\n if (depth === 'month') {\n // When depth is 'month', the sidebar shows a full year of months -- fetch data for the entire year\n rangeStart = this.calendarService.create(currentDate).startOf('year').date;\n rangeEnd = this.calendarService.create(currentDate).endOf('year').date;\n } else {\n // When depth is 'day', the sidebar shows a single month -- fetch data for that month\n rangeStart = this.calendarService.create(currentDate).startOf('month').date;\n rangeEnd = this.calendarService.create(currentDate).endOf('month').date;\n }\n\n const tasks = await this.taskBoardService.getTasks({\n ...this.filter(),\n range: { from: rangeStart, end: rangeEnd },\n });\n\n const dayCountMap = new Map<string, number>();\n\n tasks.items.forEach((task) => {\n const taskStart = new Date(task.startDate);\n const taskEnd = new Date(task.endDate);\n const startDay = this.calendarService.create(taskStart).startOf('day');\n const endDay = this.calendarService.create(taskEnd).startOf('day');\n\n let currentDay = startDay;\n while (currentDay.compare(endDay, 'day') <= 0) {\n const dayKey = currentDay.format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n currentDay = currentDay.add('day', 1);\n }\n });\n\n this.dayDataCache.set(dayCountMap);\n this.calendar()?.render();\n }\n\n private async resolveNavigatorTimeText(): Promise<string> {\n const formatted = this.formatNavigatorDateText();\n return this.resolveFormattedDateTimeLabels(formatted);\n }\n\n /** Resolves leftover `dateTime.*` tokens via translateAsync (translateSync may run before acorex scope loads). */\n private async resolveFormattedDateTimeLabels(formatted: string): Promise<string> {\n const keyPattern = /(?:@acorex:)?dateTime\\.[A-Za-z0-9._-]+/g;\n const matches = [...new Set(formatted.match(keyPattern) ?? [])];\n\n if (matches.length === 0) {\n return formatted;\n }\n\n let result = formatted;\n for (const match of matches) {\n const key = match.startsWith('@') ? match : `@acorex:${match}`;\n const translated = await this.translateService.translateAsync(key);\n result = result.replaceAll(match, translated);\n }\n\n return result;\n }\n\n /**\n * Builds toolbar navigator date text with calendar-aware AXDateTime tokens.\n * Month/weekday tokens may remain as i18n keys until {@link resolveFormattedDateTimeLabels} runs.\n */\n private formatNavigatorDateText(): string {\n const currentDate = this.vm.currentDate();\n if (!currentDate) {\n return '';\n }\n\n const calendarSystem = this.calendarType();\n const formatOptions = { locale: calendarSystem };\n const axDate = this.calendarService.create(currentDate, calendarSystem);\n const viewMode = this.vm.currentViewMode();\n\n if (\n viewMode === 'grid' ||\n viewMode === 'kanban' ||\n viewMode === 'status-grouped-grid'\n ) {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n if (this.vm.daysCount() <= 1) {\n return startText;\n }\n const endText = axDate.add('day', this.vm.daysCount() - 1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n\n switch (viewMode) {\n case 'day':\n case 'timeline-day':\n return axDate.format('DD MMMM yyyy', formatOptions);\n case 'week': {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n const endText = axDate.add('week', 1).add('day', -1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n case 'agenda':\n case 'timeline-weekly': {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n const endText = axDate.add('day', this.vm.daysCount() - 1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n case 'month':\n case 'timeline-month':\n return axDate.format('MMMM yyyy', formatOptions);\n case 'timeline-year':\n return axDate.format('yyyy', formatOptions);\n default:\n return '';\n }\n }\n\n /** Normalizes ax-calendar slot labels (e.g. `dateTime.months.*`) for the translate pipe. */\n protected toAcorexTranslationKey(text: string | number | null | undefined): string {\n if (text == null || text === '') {\n return '';\n }\n\n const value = String(text);\n if (value.startsWith('@')) {\n return value;\n }\n if (value.startsWith('dateTime.')) {\n return `@acorex:${value}`;\n }\n\n return value;\n }\n\n protected isDateTimeTranslationKey(text: string | number | null | undefined): boolean {\n if (text == null) {\n return false;\n }\n\n const value = String(text);\n return value.startsWith('@') || value.startsWith('dateTime.');\n }\n\n protected getDayDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n // Get the native Date object from AXDateTime\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n // Create a new AXDateTime from the date object for consistent formatting\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const dayKey = axDate.format('YYYY-MM-DD');\n return this.dayDataCache().get(dayKey) || 0;\n } catch (error) {\n console.warn('Error getting day data count:', error);\n return 0;\n }\n }\n\n /**\n * Aggregates the day-level data counts for an entire month.\n * Used by the monthCellTemplate to show badges when the sidebar calendar depth is 'month'.\n */\n protected getMonthDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const monthStart = axDate.startOf('month');\n const monthEnd = axDate.endOf('month');\n\n let total = 0;\n let current = monthStart;\n while (current.compare(monthEnd, 'day') <= 0) {\n const dayKey = current.format('YYYY-MM-DD');\n total += this.dayDataCache().get(dayKey) || 0;\n current = current.add('day', 1);\n }\n return total;\n } catch (error) {\n console.warn('Error getting month data count:', error);\n return 0;\n }\n }\n\n protected async handleContextMenuItemClick(event: AXContextMenuItemsClickEvent) {\n const command = event.item.data?.command;\n const provider = this.currentTask()?.provider ?? '';\n try {\n if (command) {\n await this.taskBoardService.executeCommand(command, provider);\n }\n } catch (error) {\n console.error('[TaskBoard] Context menu command failed:', error);\n } finally {\n if (command) {\n this.taskBoardService.requestRefresh(provider || undefined);\n }\n }\n }\n\n @HostListener('document:keydown.control')\n protected handleNavigatorRangeModifierDown(): void {\n this.navigatorRangeSelectActive.set(true);\n }\n\n @HostListener('document:keyup.control')\n protected handleNavigatorRangeModifierUp(): void {\n this.navigatorRangeSelectActive.set(false);\n }\n\n /**\n * Registers page keyboard shortcuts with the platform shortcut registry.\n */\n private registerKeyboardShortcuts(): void {\n this.registerTaskBoardNavigatorShortcuts();\n this.registerTaskBoardPanelShortcuts();\n this.registerTaskBoardViewCategoryShortcuts();\n this.registerTaskBoardViewLayoutShortcuts();\n }\n\n private registerTaskBoardNavigatorShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-navigator',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@general:keyboard-shortcuts.groups.navigation',\n when: () => this.isReady() && this.showToolbarNavigator(),\n shortcuts: [\n {\n keys: ['arrowleft'],\n title: '@task-management:task-board.navigator.previous-period',\n allowInEditableFields: true,\n handler: () => this.changeDate(false),\n },\n {\n keys: ['arrowright'],\n title: '@task-management:task-board.navigator.next-period',\n allowInEditableFields: true,\n handler: () => this.changeDate(true),\n },\n {\n keys: ['alt+t'],\n title: '@task-management:task-board.shortcuts.go-to-today',\n allowInEditableFields: true,\n handler: () => this.handleTodayClick(),\n },\n ],\n });\n }\n\n private registerTaskBoardPanelShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-panels-settings',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.panels',\n when: () => this.isReady(),\n shortcuts: [\n {\n keys: ['ctrl+,'],\n title: '@task-management:task-board.shortcuts.toggle-settings',\n allowInEditableFields: true,\n handler: () => this.toggleSettingsPanel(),\n },\n ],\n });\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-panels-dismiss',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.panels',\n when: () => this.isReady() && this.hasKeyboardDismissTarget(),\n shortcuts: [\n {\n keys: ['escape'],\n title: '@task-management:task-board.shortcuts.dismiss-overlays',\n handler: () => this.handleKeyboardDismiss(),\n },\n ],\n });\n }\n\n private registerTaskBoardViewCategoryShortcuts(): void {\n const categories: AXPTaskBoardViewCategory[] = ['calendar', 'timeline', 'table', 'kanban'];\n const titleKeys: Record<AXPTaskBoardViewCategory, string> = {\n calendar: '@task-management:task-board.shortcuts.switch-to-calendar',\n timeline: '@task-management:task-board.shortcuts.switch-to-timeline',\n table: '@task-management:task-board.shortcuts.switch-to-table',\n kanban: '@task-management:task-board.shortcuts.switch-to-kanban',\n };\n\n for (let index = 0; index < categories.length; index++) {\n for (const category of categories) {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: `task-board-view-category-${category}-slot-${index + 1}`,\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.views',\n when: () => this.isReady() && this.getVisibleViewCategoryByShortcutIndex(index) === category,\n shortcuts: [\n {\n keys: [`alt+${index + 1}`],\n title: titleKeys[category],\n handler: () => this.switchToViewCategory(category),\n },\n ],\n });\n }\n }\n }\n\n private registerTaskBoardViewLayoutShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-view-layout',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.views',\n when: () => this.isReady() && this.canCycleViewLayout(),\n shortcuts: [\n {\n keys: ['['],\n title: '@task-management:task-board.shortcuts.previous-layout',\n handler: () => this.cycleViewLayout(false),\n },\n {\n keys: [']'],\n title: '@task-management:task-board.shortcuts.next-layout',\n handler: () => this.cycleViewLayout(true),\n },\n ],\n });\n }\n\n private getVisibleViewCategoryByShortcutIndex(index: number): AXPTaskBoardViewCategory | null {\n return this.vm.visibleViewCategories()[index] ?? null;\n }\n\n private switchToViewCategory(category: AXPTaskBoardViewCategory): void {\n if (!this.vm.visibleViewCategories().includes(category)) {\n return;\n }\n\n if (this.vm.currentViewCategory() !== category) {\n this.applyViewCategory(category);\n }\n }\n\n private canCycleViewLayout(): boolean {\n return this.showViewLayoutSwitcher() && this.viewLayoutItems().length > 1;\n }\n\n private cycleViewLayout(forward: boolean): void {\n const items = this.viewLayoutItems();\n if (items.length <= 1) {\n return;\n }\n\n const currentLayout = this.selectedViewLayout();\n const currentIndex = items.findIndex((item) => item.key === currentLayout);\n const safeIndex = currentIndex >= 0 ? currentIndex : 0;\n const offset = forward ? 1 : -1;\n const nextIndex = (safeIndex + offset + items.length) % items.length;\n\n this.handleViewLayoutChange(items[nextIndex].key);\n }\n\n private hasKeyboardDismissTarget(): boolean {\n return (\n this.isSettingsPanelOpen() ||\n this.popover()?.isOpen === true ||\n this.vm.isDetailPanelOpen() ||\n this.vm.isTaskSelected()\n );\n }\n\n private handleKeyboardDismiss(): void {\n if (this.isSettingsPanelOpen()) {\n this.closeSettingsPanel();\n return;\n }\n\n if (this.popover()?.isOpen) {\n this.popover()?.close();\n return;\n }\n\n if (this.vm.isDetailPanelOpen()) {\n this.vm.closeDetailPanel();\n return;\n }\n\n if (this.vm.isTaskSelected()) {\n this.vm.clearSelectedTask();\n }\n }\n\n private isModifierRangeNavigatorView(): boolean {\n return this.modifierRangeBasedViews.includes(this.vm.currentViewMode());\n }\n\n private usesNavigatorRangeSelection(view: AXPTaskBoardViewMode): boolean {\n if (this.alwaysRangeBasedViews.includes(view)) {\n return true;\n }\n if (this.modifierRangeBasedViews.includes(view)) {\n return this.vm.rangeStartDate() != null || this.vm.daysCount() > 1;\n }\n return false;\n }\n\n private isNavigatorRangeModifierActive(event?: AXCalendarSlotClick): boolean {\n const nativeEvent = event?.nativeEvent;\n if (nativeEvent instanceof MouseEvent) {\n return nativeEvent.ctrlKey || nativeEvent.metaKey;\n }\n return this.navigatorRangeSelectActive();\n }\n\n private normalizeNavigatorDay(date: Date): Date {\n const calendarSystem = this.localeService.activeProfile().calendar.system;\n return this.calendarService.create(date, calendarSystem).startOf('day').date;\n }\n\n private applyNavigatorDateRange(start: Date, end: Date): void {\n const startTime = start.getTime();\n const endTime = end.getTime();\n const newStartDate = new Date(Math.min(startTime, endTime));\n const newEndDate = new Date(Math.max(startTime, endTime));\n const differenceInDays = this.calculateDifferenceInDays(newStartDate, newEndDate);\n\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n this.vm.setCurrentDate(newStartDate);\n this.vm.setDaysCount(differenceInDays);\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n private handleNavigatorRangeSlotClick(clickedDate: Date): void {\n const clickedDay = this.normalizeNavigatorDay(clickedDate);\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (selectionStartDate) {\n this.applyNavigatorDateRange(selectionStartDate, clickedDay);\n return;\n }\n\n if (this.navigatorPlainSingleDaySelected && this.vm.daysCount() === 1) {\n const selectedDay = this.normalizeNavigatorDay(this.vm.currentDate());\n this.applyNavigatorDateRange(selectedDay, clickedDay);\n return;\n }\n\n this.vm.setRangeStartDate(clickedDay);\n this.navigatorPlainSingleDaySelected = false;\n this.calendar()?.render();\n }\n\n private handleNavigatorSingleDaySlotClick(clickedDate: Date): void {\n const dateToSet = this.normalizeNavigatorDay(clickedDate);\n\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = true;\n this.vm.setCurrentDate(dateToSet);\n this.vm.setDaysCount(1);\n this.popover()?.close();\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n changeDate(forward: boolean) {\n this.navigatorPlainSingleDaySelected = false;\n const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'timeline-day':\n this.vm.setCurrentDate(date.add('day', forward ? 1 : -1).date);\n break;\n\n case 'week':\n this.vm.setCurrentDate(date.add('week', forward ? 1 : -1).date);\n break;\n\n case 'grid':\n case 'agenda':\n case 'kanban':\n case 'timeline-weekly':\n case 'status-grouped-grid':\n this.vm.setCurrentDate(date.add('day', forward ? this.vm.daysCount() : -this.vm.daysCount()).date);\n break;\n\n case 'month':\n case 'timeline-month':\n this.vm.setCurrentDate(date.add('month', forward ? 1 : -1).date);\n break;\n\n case 'timeline-year':\n this.vm.setCurrentDate(date.add('year', forward ? 1 : -1).date);\n break;\n }\n this.popover()?.close();\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n protected handleCalendarSlotClick(event: AXCalendarSlotClick) {\n if (event.component.activeView !== event.component.depth) return;\n\n const clickedDate: Date = event.item;\n const currentView = this.vm.currentViewMode();\n\n if (this.modifierRangeBasedViews.includes(currentView)) {\n if (this.isNavigatorRangeModifierActive(event)) {\n this.handleNavigatorRangeSlotClick(clickedDate);\n } else {\n this.handleNavigatorSingleDaySlotClick(clickedDate);\n }\n return;\n }\n\n if (this.alwaysRangeBasedViews.includes(currentView)) {\n this.handleNavigatorRangeSlotClick(clickedDate);\n return;\n }\n\n const calendarSystem = this.localeService.activeProfile().calendar.system;\n let dateToSet = this.calendarService.create(clickedDate, calendarSystem).startOf('day').date;\n\n if (currentView === 'week') {\n const weekDate = this.calendarService.create(dateToSet, calendarSystem);\n dateToSet = weekDate.startOf('week').date;\n }\n\n this.vm.setCurrentDate(dateToSet);\n this.popover()?.close();\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n getCellClass = (date: AXDateTime): string | null => {\n const currentView = this.vm.currentViewMode();\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (!this.usesNavigatorRangeSelection(currentView)) {\n const currentDay = this.calendarService.create(this.vm.currentDate());\n if (date.equal(currentDay, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n if (this.modifierRangeBasedViews.includes(currentView) || this.alwaysRangeBasedViews.includes(currentView)) {\n if (selectionStartDate) {\n const axSelectionStartDate = this.calendarService.create(selectionStartDate);\n if (date.equal(axSelectionStartDate, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n const fromRange = this.calendarService.create(this.vm.currentDate());\n const endRange = fromRange.add('day', this.vm.daysCount() - 1);\n\n const isStart = date.equal(fromRange, 'day');\n const isEnd = date.equal(endRange, 'day');\n\n if (isStart && isEnd) return 'ax-range-start ax-range-end';\n if (isStart) return 'ax-range-start';\n if (isEnd) return 'ax-range-end';\n if (date.compare(fromRange, 'day') > 0 && date.compare(endRange, 'day') < 0) {\n return 'ax-range-between';\n }\n\n return null;\n }\n\n if (currentView === 'week') {\n const from = this.calendarService.create(this.vm.currentDate());\n const end = from.add('day', 6);\n\n if (date.equal(from, 'day')) return 'ax-range-start';\n if (date.equal(end, 'day')) return 'ax-range-end';\n if (date.compare(from, 'day') > 0 && date.compare(end, 'day') < 0) {\n return 'ax-range-between';\n }\n }\n\n return null;\n };\n\n /**\n * Helper function to calculate the difference in whole days between two dates.\n * The result is inclusive (e.g., May 5 to May 6 is a 2-day range).\n */\n private calculateDifferenceInDays(start: Date, end: Date): number {\n if (!start || !end) {\n return 1;\n }\n const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n\n const timeDifference = endDate.getTime() - startDate.getTime();\n const daysDifference = Math.round(timeDifference / (1000 * 3600 * 24));\n\n return daysDifference + 1;\n }\n\n handleTodayClick() {\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n let currentDate: Date;\n if (this.vm.currentViewMode() === 'week') {\n currentDate = this.calendarService\n .create(new Date(), this.localeService.activeProfile().calendar.system)\n .startOf('week').date;\n } else {\n currentDate = new Date();\n }\n this.vm.setCurrentDate(currentDate);\n if (this.isModifierRangeNavigatorView()) {\n this.vm.setDaysCount(1);\n }\n this.popover()?.close();\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n protected isNonCalendarView = computed(() => {\n const mode = this.vm.currentViewMode();\n return mode === 'kanban' || mode === 'grid' || mode === 'status-grouped-grid';\n });\n\n private async loadFromRoute(): Promise<void> {\n const snapshot = this.activatedRoute.snapshot.queryParamMap;\n const viewParam = snapshot.get('view');\n const layoutParam = snapshot.get('layout');\n const allowedCategories = new Set(this.vm.visibleViewCategories());\n\n const viewBefore = this.vm.currentViewCategory();\n const layoutBefore = this.vm.getLayoutForCategory(viewBefore);\n if (viewParam && allowedCategories.has(viewParam as AXPTaskBoardViewCategory)) {\n const category = viewParam as AXPTaskBoardViewCategory;\n const layout = resolveTaskBoardCategoryLayoutFromQuery(category, layoutParam);\n if (layout) {\n this.vm.setViewLayout(category, layout);\n }\n this.vm.setViewCategory(category);\n }\n const layoutAfter = this.vm.getLayoutForCategory(this.vm.currentViewCategory());\n if (viewBefore !== this.vm.currentViewCategory() || layoutBefore !== layoutAfter) {\n this.recompute();\n }\n\n const type = snapshot.getAll('type') as string[];\n const assignee = snapshot.getAll('assignee') as string[];\n const reporter = snapshot.getAll('reporter') as string[];\n const priority = snapshot.getAll('priority') as AXPPriorityFilterKey[];\n const dueStatus = snapshot.getAll('dueStatus') as AXPDueStatusFilterKey[];\n if (type.length || assignee.length || priority.length || reporter.length || dueStatus.length) {\n this.isQueryParam.set(true);\n this.vm.setSelectedTaskTypeNames(normalizeTaskTypeFilterNames(type, this.vm.taskTypes()), true);\n this.vm.setSelectedAssigneeIds(assignee, true);\n this.vm.setSelectedReporterIds(reporter, true);\n this.vm.setSelectedPriorities(normalizeTaskBoardPriorityFilterKeys(priority), true);\n this.vm.setSelectedDueStatusKeys(normalizeDueStatusFilterKeys(dueStatus), true);\n }\n\n const dateRange = snapshot.get('dateRange') as string;\n if (dateRange) {\n const range = this.taskBoardService.rangeCalculator(dateRange);\n if (range) {\n this.vm.setCurrentDate(range.from);\n this.vm.setDaysCount(this.calculateDifferenceInDays(range.from, range.end));\n }\n } else if (!this.filtersPanelInitialized && this.isModifierRangeNavigatorView()) {\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n this.vm.setDaysCount(1);\n }\n\n await this.syncPanelInitialFilters();\n this.filtersPanelInitialized = true;\n }\n\n /**\n * Checks if the currently selected task is still present in the list of visible tasks.\n * If not, it clears the selection to prevent showing details for a hidden task.\n * @param visibleTasks The new array of tasks that will be displayed.\n */\n private validateSelectedTask(visibleTasks: AXPTask[]): void {\n const currentSelectedTask = this.vm.selectedTask();\n // Proceed only if a task is actually selected\n if (currentSelectedTask) {\n // Check if any task in the new list has the same ID as the selected one\n const isSelectedTaskVisible = visibleTasks.some((task) => task.id === currentSelectedTask.id);\n\n // If the selected task is NOT in the new list, clear the selection.\n if (!isSelectedTaskVisible) {\n this.vm.selectTask(null);\n }\n }\n }\n\n protected async getResources(): Promise<void> {\n if (this.vm.selectedTaskTypeNames().length !== 1) {\n this.resources.set([]);\n return;\n }\n const resources = await this.taskBoardService.getResources(this.vm.selectedTaskTypeNames()[0] ?? '');\n this.resources.set(resources);\n }\n}\n","<!-- Task board page shell -->\n<axp-page-layout *translate=\"let t\">\n <!-- Toolbar: date navigator, filters, view layout, and settings -->\n <axp-page-toolbar class=\"axm-task-board-toolbar\"\n [class.axm-task-board-toolbar--stack-filters]=\"!deviceService.isLarge()\">\n <div class=\"axm-task-board-toolbar__primary-row\">\n <axp-layout-prefix class=\"ax-flex ax-min-w-0 ax-flex-nowrap ax-items-center ax-gap-2\"\n [class.ax-flex-1]=\"deviceService.isLarge()\">\n <!-- Date navigator with calendar popover -->\n @if (showToolbarNavigator()) {\n <div class=\"ax-scheduler-header ax-shrink-0 ax-w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"navigatorTimeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- TODO(acorex-ui): Do not wrap ax-calendar in @for/@if here — ax-popover requires a direct projected child.\n Week layout comes from AXCalendarService (AXPRegionalCalendarService); navigatorCalendarLayoutEffect re-renders on profile/calendar changes.\n Remove manual render() when ax-calendar reacts to calendar service week layout changes.\n See README.md in this folder. -->\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <ax-calendar #calendar [type]=\"calendarType()\" [depth]=\"calendarDepth()\" [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\" [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"ax-single-range-calendar ax-border ax-rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\">\n <ax-footer>\n <ax-button look=\"link\" color=\"primary\" [text]=\"(todayButtonTextKey() | translate | async)!\"\n (onClick)=\"handleTodayClick()\"></ax-button>\n </ax-footer>\n </ax-calendar>\n </ax-popover>\n </div>\n }\n\n <!-- Inline query filters (large screens only) -->\n @if (deviceService.isLarge() && filtersReady()) {\n <axp-query-filters class=\"axm-task-board-toolbar__filters-inline\" [filtersDefinitions]=\"filterDefinitions()\"\n [initialFilters]=\"panelInitialFilters()\" (onFiltersChanged)=\"handleFiltersChanged($event)\"></axp-query-filters>\n }\n </axp-layout-prefix>\n\n <axp-layout-suffix class=\"ax-flex ax-shrink-0 ax-gap-2\">\n <!-- View layout switcher (kanban, grid, calendar, etc.) -->\n @if (showViewLayoutSwitcher()) {\n <ax-button class=\"axm-task-board-toolbar__view-layout-dropdown\" look=\"outline\"\n [text]=\"(selectedViewLayoutTitleKey() | translate | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"selectedViewLayoutIcon()\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewLayoutItems(); track item.key) {\n <ax-button-item [text]=\"(viewLayoutTranslationKey(item.text) | translate | async)!\"\n (onClick)=\"handleViewLayoutChange(item.key)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-check\" class=\"axm-task-board-toolbar__dropdown-menu-check\"\n [class.--placeholder]=\"!isViewLayoutSelected(item.key)\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n\n <!-- Settings panel toggle with active calendar-type badge -->\n <div class=\"axm-task-board-toolbar__settings-slot\">\n <ax-button class=\"axm-task-board-toolbar__settings-button\" look=\"outline\" [iconOnly]=\"true\"\n [title]=\"('@task-management:task-board.settings.title' | translate | async)!\"\n (onClick)=\"toggleSettingsPanel()\">\n <ax-prefix>\n <ax-icon [icon]=\"isSettingsPanelOpen() ? 'fa-solid fa-gear' : 'fa-light fa-gear'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n @if (selectedCalendarEventTypeCount() > 0) {\n <div class=\"axm-task-board-toolbar__settings-badge\" [class.--xs]=\"selectedCalendarEventTypeCount() > 9\">\n <ax-badge color=\"primary\" [text]=\"selectedCalendarEventTypeCount().toString()\"></ax-badge>\n </div>\n }\n </div>\n </axp-layout-suffix>\n </div>\n\n <!-- Stacked query filters (small screens) -->\n @if (!deviceService.isLarge() && filtersReady()) {\n <div class=\"axm-task-board-toolbar__filters-row\">\n <axp-query-filters [filtersDefinitions]=\"filterDefinitions()\" [initialFilters]=\"panelInitialFilters()\"\n (onFiltersChanged)=\"handleFiltersChanged($event)\"></axp-query-filters>\n </div>\n }\n </axp-page-toolbar>\n\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-2 ax-min-h-0\">\n <div class=\"axm-task-board-main ax-flex ax-flex-row ax-gap-4 ax-flex-1 ax-min-w-0 ax-min-h-0 ax-relative\">\n <div class=\"axm-task-board-main__content ax-flex ax-flex-row ax-gap-2 ax-flex-1 ax-min-w-0 ax-min-h-0\">\n @if (isReady()) {\n <!-- Active view: kanban, grid, status-grouped grid, or calendar/scheduler -->\n @switch (vm.currentViewMode()) {\n @case ('kanban') {\n <axm-task-board-kanban-view class=\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\" [(tasks)]=\"resolvedTasks\"\n (onTaskClick)=\"vm.selectTask($event)\" (onActionClick)=\"handleContextMenu($event)\"></axm-task-board-kanban-view>\n }\n @case ('grid') {\n <axm-task-board-grid-view class=\"ax-h-full ax-w-full ax-min-w-0\" [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\" (onTaskClick)=\"vm.selectTask($event)\"></axm-task-board-grid-view>\n }\n @case ('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\" [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"></axm-task-board-status-grouped-grid-view>\n }\n @default {\n <axm-task-board-calendar-view class=\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\"\n [resources]=\"resources()\" [startingDate]=\"vm.currentDate()\" [dataSource]=\"schedulerDataSource\"\n [refreshNonce]=\"refreshNonce()\" (onTaskClick)=\"vm.selectTask($event)\" [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\" (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"></axm-task-board-calendar-view>\n }\n }\n\n <!-- Shared task context menu -->\n <ax-context-menu #rootContextMenu [closeOn]=\"'leave'\" [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\" (onItemClick)=\"handleContextMenuItemClick($event)\">\n </ax-context-menu>\n\n <!-- Task detail side panel (large screens only) -->\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n }\n } @else {\n <!-- Initial bootstrap loading state -->\n <axm-task-board-content-skeleton class=\"ax-flex-1 ax-min-h-0 ax-w-full ax-self-stretch\"></axm-task-board-content-skeleton>\n }\n </div>\n\n <!-- Board settings side panel -->\n @if (isSettingsPanelOpen()) {\n @if (!deviceService.isLarge()) {\n <button type=\"button\" class=\"axm-task-board-settings-backdrop\" (click)=\"closeSettingsPanel()\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)!\"></button>\n }\n <axp-layout-side-detail-panel class=\"ax-sticky ax-top-0 ax-z-10 ax-max-h-full ax-flex-none\"\n [class.axm-task-board-settings-panel--overlay]=\"!deviceService.isLarge()\" [header]=\"settingsPanelHeader()\"\n [sections]=\"settingsPanelSections()\" (panelClose)=\"closeSettingsPanel()\">\n <!-- Color-by dimension selector -->\n <ng-template axpLayoutSideDetailPanelSection=\"colorBy\">\n <ax-selection-list class=\"ax-w-full\" valueField=\"key\" textField=\"titleKey\" [direction]=\"'vertical'\"\n [look]=\"'solid'\" [multiple]=\"false\" [items]=\"colorByItems\" [ngModel]=\"effectiveColorBy()\"\n [customTemplate]=\"colorByItemTemplate\" (onValueChanged)=\"handleColorBySelectionChange($event)\">\n <ng-template #colorByItemTemplate let-item>\n {{ (item.data.titleKey | translate | async)! }}\n </ng-template>\n </ax-selection-list>\n </ng-template>\n\n <!-- Calendar event type visibility (calendar views only) -->\n @if (showCalendarEventButton()) {\n <ng-template axpLayoutSideDetailPanelSection=\"calendars\">\n <ax-selection-list class=\"ax-w-full\" valueField=\"id\" textField=\"text\" [direction]=\"'vertical'\"\n [look]=\"'solid'\" [multiple]=\"true\" [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"vm.selectedCalendarEventTypeIds()\"\n (onValueChanged)=\"handleCalendarEventTypesSelectionChange($event)\"></ax-selection-list>\n </ng-template>\n }\n </axp-layout-side-detail-panel>\n }\n </div>\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Calendar popover: day cell template with task-count badge -->\n<ng-template #dayCellTemplate let-slot>\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\">\n <span class=\"ax-flex-1 ax-text-center\">\n @if (isDateTimeTranslationKey(slot.slot.text)) {\n {{ (toAcorexTranslationKey(slot.slot.text) | translate | async)! }}\n } @else {\n {{ slot.slot.text ?? slot.slot.date?.day ?? '' }}\n }\n </span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<!-- Calendar popover: month cell template with task-count badge -->\n<ng-template #monthCellTemplate let-slot>\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\">\n <span class=\"ax-flex-1 ax-text-center\">\n @if (isDateTimeTranslationKey(slot.slot.text)) {\n {{ (toAcorexTranslationKey(slot.slot.text) | translate | async)! }}\n } @else {\n {{ slot.slot.text ?? '' }}\n }\n </span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n"],"names":["i1","i2","i3","i4","i6","i10"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-task-management-task-board.page-CfgeDnBx.mjs","sources":["../../../../libs/modules/task-management/src/lib/features/task-board/task-board-content-skeleton/task-board-content-skeleton.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-content-skeleton/task-board-content-skeleton.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-view-category.utils.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-filter.utils.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.viewmodel.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board-detail-panel/task-board-detail-panel.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-scheduler-layout.utils.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-calendar-view/task-board-calendar-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-grid-view/task-board-grid-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-kanban-view/task-board-kanban-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.ts","../../../../libs/modules/task-management/src/lib/features/task-board/views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component.html","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.page.ts","../../../../libs/modules/task-management/src/lib/features/task-board/task-board.page.html"],"sourcesContent":["import { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\n@Component({\n selector: 'axm-task-board-content-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXSkeletonModule],\n templateUrl: './task-board-content-skeleton.component.html',\n styleUrl: './task-board-content-skeleton.component.scss',\n host: {\n class: 'axm-task-board-content-skeleton',\n 'aria-busy': 'true',\n 'aria-live': 'polite',\n },\n})\nexport class AXMTaskBoardContentSkeletonComponent {\n //#region ---- Constants ----\n\n private static readonly DAY_HEADER_COUNT = 7;\n\n private static readonly GRID_ROW_COUNT = 6;\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** Weekday header placeholders (Sun–Sat). */\n protected readonly dayHeaderPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.DAY_HEADER_COUNT }, (_, index) => index),\n );\n\n /** Calendar-style grid row placeholders. */\n protected readonly gridRowPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.GRID_ROW_COUNT }, (_, index) => index),\n );\n\n /** Column placeholders per grid row. */\n protected readonly gridColumnPlaceholders = computed(() =>\n Array.from({ length: AXMTaskBoardContentSkeletonComponent.DAY_HEADER_COUNT }, (_, index) => index),\n );\n\n //#endregion\n}\n","<!-- Weekday header row -->\n<div class=\"axm-task-board-content-skeleton__header\">\n @for (index of dayHeaderPlaceholders(); track index) {\n <ax-skeleton [animated]=\"true\" class=\"axm-task-board-content-skeleton__day-header\"></ax-skeleton>\n }\n</div>\n\n<!-- Generic board grid (calendar / kanban / table placeholder) -->\n<div class=\"axm-task-board-content-skeleton__grid\">\n @for (row of gridRowPlaceholders(); track row) {\n <div class=\"axm-task-board-content-skeleton__row\">\n @for (col of gridColumnPlaceholders(); track col) {\n <div class=\"axm-task-board-content-skeleton__cell\">\n <ax-skeleton [animated]=\"true\" class=\"axm-task-board-content-skeleton__cell-date\"></ax-skeleton>\n </div>\n }\n </div>\n }\n</div>\n","//#region ---- Imports ----\n\nimport type { AXCalendarService } from '@acorex/core/date-time';\nimport type { AXPDateTimeFilterValue } from '@acorex/platform/common';\nimport { applyDateFilterPreset } from '@acorex/platform/common';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport type { AXPTaskBoardViewMode } from './task-board.viewmodel';\n\n//#endregion\n\n//#region ---- Layout Types ----\n\nexport type AXPTaskBoardCalendarLayout = 'daily' | 'weekly' | 'monthly' | 'agenda';\nexport type AXPTaskBoardTimelineLayout = 'daily' | 'weekly' | 'monthly' | 'yearly';\nexport type AXPTaskBoardTableLayout = 'simple' | 'grouped';\nexport type AXPTaskBoardViewLayout = AXPTaskBoardCalendarLayout | AXPTaskBoardTimelineLayout | AXPTaskBoardTableLayout;\n\nexport const AXM_TASK_BOARD_VIEW_CATEGORIES: readonly AXPTaskBoardViewCategory[] = [\n 'calendar',\n 'timeline',\n 'table',\n 'kanban',\n];\n\nexport const AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY: Record<AXPTaskBoardViewCategory, AXPTaskBoardViewLayout | null> = {\n calendar: 'monthly',\n timeline: 'daily',\n table: 'simple',\n kanban: null,\n};\n\n//#endregion\n\n//#region ---- Category ↔ Leaf Mode ----\n\nconst CALENDAR_LAYOUT_TO_MODE: Record<AXPTaskBoardCalendarLayout, AXPTaskBoardViewMode> = {\n daily: 'day',\n weekly: 'week',\n monthly: 'month',\n agenda: 'agenda',\n};\n\nconst TIMELINE_LAYOUT_TO_MODE: Record<AXPTaskBoardTimelineLayout, AXPTaskBoardViewMode> = {\n daily: 'timeline-day',\n weekly: 'timeline-weekly',\n monthly: 'timeline-month',\n yearly: 'timeline-year',\n};\n\nconst TABLE_LAYOUT_TO_MODE: Record<AXPTaskBoardTableLayout, AXPTaskBoardViewMode> = {\n simple: 'grid',\n grouped: 'status-grouped-grid',\n};\n\nexport function resolveTaskBoardViewCategory(viewMode: AXPTaskBoardViewMode): AXPTaskBoardViewCategory {\n if (viewMode === 'kanban') {\n return 'kanban';\n }\n if (viewMode === 'grid' || viewMode === 'status-grouped-grid') {\n return 'table';\n }\n if (viewMode.startsWith('timeline-')) {\n return 'timeline';\n }\n return 'calendar';\n}\n\nexport function resolveTaskBoardViewLayout(viewMode: AXPTaskBoardViewMode): AXPTaskBoardViewLayout | null {\n if (viewMode === 'kanban') {\n return null;\n }\n const calendarEntry = Object.entries(CALENDAR_LAYOUT_TO_MODE).find(([, mode]) => mode === viewMode);\n if (calendarEntry) {\n return calendarEntry[0] as AXPTaskBoardCalendarLayout;\n }\n const timelineEntry = Object.entries(TIMELINE_LAYOUT_TO_MODE).find(([, mode]) => mode === viewMode);\n if (timelineEntry) {\n return timelineEntry[0] as AXPTaskBoardTimelineLayout;\n }\n const tableEntry = Object.entries(TABLE_LAYOUT_TO_MODE).find(([, mode]) => mode === viewMode);\n if (tableEntry) {\n return tableEntry[0] as AXPTaskBoardTableLayout;\n }\n return AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.calendar;\n}\n\nexport function resolveTaskBoardLeafViewMode(\n category: AXPTaskBoardViewCategory,\n layout: AXPTaskBoardViewLayout | null | undefined,\n): AXPTaskBoardViewMode {\n switch (category) {\n case 'calendar':\n return CALENDAR_LAYOUT_TO_MODE[(layout as AXPTaskBoardCalendarLayout) ?? 'monthly'] ?? 'month';\n case 'timeline':\n return TIMELINE_LAYOUT_TO_MODE[(layout as AXPTaskBoardTimelineLayout) ?? 'daily'] ?? 'timeline-day';\n case 'table':\n return TABLE_LAYOUT_TO_MODE[(layout as AXPTaskBoardTableLayout) ?? 'simple'] ?? 'grid';\n case 'kanban':\n return 'kanban';\n default:\n return 'month';\n }\n}\n\nexport function isTaskBoardRangeFilterCategory(category: AXPTaskBoardViewCategory): boolean {\n return category === 'table' || category === 'kanban';\n}\n\nexport function usesTaskBoardToolbarNavigator(_viewMode: AXPTaskBoardViewMode): boolean {\n return true;\n}\n\nexport function getTaskBoardLayoutOptions(\n category: AXPTaskBoardViewCategory,\n): { key: AXPTaskBoardViewLayout; text: string; icon: string }[] {\n switch (category) {\n case 'calendar':\n return [\n { key: 'daily', text: 'daily', icon: 'fa-light fa-calendar-day' },\n { key: 'weekly', text: 'weekly', icon: 'fa-light fa-calendar-week' },\n { key: 'monthly', text: 'monthly', icon: 'fa-light fa-calendar-alt' },\n { key: 'agenda', text: 'agenda', icon: 'fa-light fa-calendar-range' },\n ];\n case 'timeline':\n return [\n { key: 'daily', text: 'daily', icon: 'fa-light fa-calendar-day' },\n { key: 'weekly', text: 'weekly', icon: 'fa-light fa-calendar-week' },\n { key: 'monthly', text: 'monthly', icon: 'fa-light fa-calendar-alt' },\n { key: 'yearly', text: 'yearly', icon: 'fa-light fa-calendar-range' },\n ];\n case 'table':\n return [\n { key: 'simple', text: 'grid', icon: 'fa-light fa-table' },\n { key: 'grouped', text: 'status-grouped-grid', icon: 'fa-light fa-table' },\n ];\n default:\n return [];\n }\n}\n\n//#endregion\n\n//#region ---- Date Range ----\n\nexport interface AXMTaskBoardDateRange {\n from: Date;\n end: Date;\n}\n\nexport function deriveTaskBoardDateRangeFromNavigator(\n calendarService: AXCalendarService,\n viewMode: AXPTaskBoardViewMode,\n currentDate: Date,\n daysCount: number,\n): AXMTaskBoardDateRange {\n const cal = calendarService.create(currentDate);\n\n switch (viewMode) {\n case 'month':\n case 'timeline-month':\n return {\n from: cal.startOf('month').date,\n end: cal.endOf('month').date,\n };\n case 'week':\n return {\n from: cal.startOf('week').date,\n end: cal.add('day', 6).date,\n };\n case 'timeline-weekly':\n return {\n from: cal.date,\n end: cal.add('day', Math.max(1, daysCount) - 1).date,\n };\n case 'timeline-year':\n return {\n from: cal.startOf('year').date,\n end: cal.endOf('year').date,\n };\n case 'agenda':\n case 'grid':\n case 'status-grouped-grid':\n case 'kanban':\n return {\n from: cal.date,\n end: cal.add('day', Math.max(1, daysCount) - 1).date,\n };\n case 'day':\n case 'timeline-day':\n default:\n return {\n from: cal.startOf('day').date,\n end: cal.endOf('day').date,\n };\n }\n}\n\nexport function createTodayTaskBoardDateFilterValue(calendarService: AXCalendarService): AXPDateTimeFilterValue {\n return applyDateFilterPreset('today', calendarService) ?? {\n operation: { type: 'between' },\n value: {\n from: calendarService.create(new Date()).startOf('day').date.toISOString(),\n to: calendarService.create(new Date()).endOf('day').date.toISOString(),\n },\n };\n}\n\nexport function parseTaskBoardDateFilterValue(value: unknown): AXMTaskBoardDateRange | null {\n if (value == null) {\n return null;\n }\n const raw = value as AXPDateTimeFilterValue;\n const payload = raw.value;\n if (payload == null) {\n return null;\n }\n if (typeof payload === 'string') {\n const date = new Date(payload);\n return Number.isNaN(date.getTime()) ? null : { from: date, end: date };\n }\n const from = payload.from ? new Date(payload.from) : null;\n const end = payload.to ? new Date(payload.to) : from;\n if (!from || !end || Number.isNaN(from.getTime()) || Number.isNaN(end.getTime())) {\n return null;\n }\n return { from, end };\n}\n\nexport function toTaskBoardDateFilterValue(range: AXMTaskBoardDateRange): AXPDateTimeFilterValue {\n return {\n operation: { type: 'between' },\n value: {\n from: range.from.toISOString(),\n to: range.end.toISOString(),\n },\n };\n}\n\nexport async function formatTaskBoardDateRangeDisplayText(\n range: AXMTaskBoardDateRange,\n calendarService: AXCalendarService,\n format: string,\n): Promise<string> {\n const from = calendarService.create(range.from).format(format);\n const end = calendarService.create(range.end).format(format);\n if (from === end) {\n return from;\n }\n return `${from} – ${end}`;\n}\n\nexport function applyTaskBoardDateRangeToViewModel(\n range: AXMTaskBoardDateRange,\n setCurrentDate: (date: Date) => void,\n setDaysCount: (days: number) => void,\n): void {\n setCurrentDate(range.from);\n const start = new Date(range.from.getFullYear(), range.from.getMonth(), range.from.getDate());\n const end = new Date(range.end.getFullYear(), range.end.getMonth(), range.end.getDate());\n const days = Math.round((end.getTime() - start.getTime()) / (1000 * 3600 * 24)) + 1;\n setDaysCount(Math.max(1, days));\n}\n\n//#endregion\n\n//#region ---- Settings Visibility ----\n\nexport function normalizeVisibleTaskBoardCategories(flags: {\n calendar?: boolean;\n timeline?: boolean;\n table?: boolean;\n kanban?: boolean;\n}): AXPTaskBoardViewCategory[] {\n const categories: AXPTaskBoardViewCategory[] = [];\n if (flags.calendar !== false) {\n categories.push('calendar');\n }\n if (flags.timeline !== false) {\n categories.push('timeline');\n }\n if (flags.table !== false) {\n categories.push('table');\n }\n if (flags.kanban !== false) {\n categories.push('kanban');\n }\n return categories.length > 0 ? categories : [...AXM_TASK_BOARD_VIEW_CATEGORIES];\n}\n\nexport function resolveTaskBoardCategoryLayoutFromQuery(\n category: AXPTaskBoardViewCategory,\n layout: string | null,\n): AXPTaskBoardViewLayout | null {\n if (category === 'kanban') {\n return null;\n }\n const options = getTaskBoardLayoutOptions(category);\n const match = options.find((option) => option.key === layout);\n return (match?.key ?? AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY[category]) as AXPTaskBoardViewLayout;\n}\n\n//#endregion\n","import { AXPDueStatusFilterKey } from './due-status';\nimport { normalizePriorityFilterKeys, type AXPPriorityFilterKey } from './task-board-priority.utils';\n\nexport interface AXPTaskBoardTaskTypeOption {\n name: string;\n title: string;\n}\n\n/**\n * Keeps task-type filter values on stable provider {@link AXPTaskBoardTaskTypeOption.name} keys.\n * Display titles are locale-dependent and must never be used for filtering.\n */\nexport function normalizeTaskTypeFilterNames(\n values: string[] | undefined,\n taskTypes: AXPTaskBoardTaskTypeOption[],\n): string[] {\n if (!values?.length) {\n return [];\n }\n\n if (taskTypes.length === 0) {\n return [...new Set(values.map((value) => value.trim()).filter(Boolean))];\n }\n\n const names = new Set(taskTypes.map((type) => type.name));\n\n const normalized = values.flatMap((value) => {\n const trimmed = value.trim();\n if (!trimmed) {\n return [];\n }\n\n if (names.has(trimmed)) {\n return [trimmed];\n }\n\n const matchedByTitle = taskTypes.find((type) => type.title.trim() === trimmed);\n if (matchedByTitle) {\n return [matchedByTitle.name];\n }\n\n return [];\n });\n\n return [...new Set(normalized)];\n}\n\nconst DUE_STATUS_FILTER_NAMES = new Set<AXPDueStatusFilterKey>([\n 'completed',\n 'no-due-date',\n 'overdue',\n 'due-today',\n 'due-tomorrow',\n 'due-this-week',\n 'upcoming',\n]);\n\n/** Maps due-status filter chips back to stable keys (never localized labels). */\nexport function normalizeDueStatusFilterKeys(values: unknown[] | undefined): AXPDueStatusFilterKey[] {\n if (!values?.length) {\n return [];\n }\n\n const titleToName: Record<string, AXPDueStatusFilterKey> = {\n completed: 'completed',\n 'no due date': 'no-due-date',\n overdue: 'overdue',\n 'due today': 'due-today',\n 'due tomorrow': 'due-tomorrow',\n 'due this week': 'due-this-week',\n upcoming: 'upcoming',\n };\n\n const normalized = values.flatMap((value) => {\n const trimmed = String(value ?? '').trim();\n if (!trimmed) {\n return [];\n }\n\n if (DUE_STATUS_FILTER_NAMES.has(trimmed as AXPDueStatusFilterKey)) {\n return [trimmed as AXPDueStatusFilterKey];\n }\n\n const fromTitle = titleToName[trimmed.toLowerCase()];\n return fromTitle ? [fromTitle] : [];\n });\n\n return [...new Set(normalized)];\n}\n\n/** Re-exports priority normalization for filter panels that may receive display labels. */\nexport function normalizeTaskBoardPriorityFilterKeys(values: unknown[] | undefined): AXPPriorityFilterKey[] {\n return normalizePriorityFilterKeys(values);\n}\n\nexport { normalizeRegionalCalendarEventIds } from '@acorex/modules/calendar-management';\n","import { AXSchedulerView } from '@acorex/components/scheduler';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPRegionalSetting, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { AXMTaskBoardSettings } from './settings.keys';\nimport { canViewAllTaskAssignees, hasTaskBoardSavedAssigneePreference, normalizeTaskBoardAssigneeIds, resolveTaskBoardSavedAssigneeIds } from './task-board-assignee-access';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport {\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY,\n normalizeVisibleTaskBoardCategories,\n resolveTaskBoardLeafViewMode,\n resolveTaskBoardViewCategory,\n resolveTaskBoardViewLayout,\n type AXPTaskBoardCalendarLayout,\n type AXPTaskBoardTableLayout,\n type AXPTaskBoardTimelineLayout,\n type AXPTaskBoardViewLayout,\n} from './task-board-view-category.utils';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPTask, AXPTaskBoardColorBy, AXPWorkflowTaskProvider } from './task-board.types';\nimport { AXPPriorityFilterKey } from './task-board-priority.utils';\nimport { AXPDueStatusFilterKey } from './due-status';\nimport {\n normalizeDueStatusFilterKeys,\n normalizeRegionalCalendarEventIds,\n normalizeTaskBoardPriorityFilterKeys,\n normalizeTaskTypeFilterNames,\n} from './task-board-filter.utils';\n\ntype AXPTaskPriority = NonNullable<AXPTask['priority']>;\nexport type { AXPPriorityFilterKey };\nexport type AXPTaskBoardViewMode = AXSchedulerView | 'kanban' | 'grid' | 'status-grouped-grid';\n\ntype AXPTaskBoardState = {\n daysCount: number;\n currentDate: Date;\n isLoading: boolean;\n detailPanel: boolean;\n rangeStartDate: Date | null;\n selectedTask: AXPTask | null;\n selectedTaskTypeNames: string[];\n taskTypes: AXPWorkflowTaskProvider[];\n currentViewMode: AXPTaskBoardViewMode;\n /** View families the user may select (from settings). */\n visibleViewCategories: AXPTaskBoardViewCategory[];\n calendarLayout: AXPTaskBoardCalendarLayout;\n timelineLayout: AXPTaskBoardTimelineLayout;\n tableLayout: AXPTaskBoardTableLayout;\n selectedPriorities: AXPPriorityFilterKey[];\n selectedDueStatusKeys: AXPDueStatusFilterKey[];\n colorBy: AXPTaskBoardColorBy;\n selectedAssigneeIds: (string | number)[];\n /** False until the user (or persisted settings) sets assignee ids explicitly. */\n assigneeFilterHasSavedPreference: boolean;\n selectedReporterIds: (string | number)[];\n selectedCalendarEventTypeIds: string[];\n};\n\nexport const AXMTaskBoardViewModel = signalStore(\n { providedIn: 'root' },\n withState<AXPTaskBoardState>(() => ({\n daysCount: 7,\n taskTypes: [],\n isLoading: true,\n detailPanel: false,\n selectedTask: null,\n rangeStartDate: null,\n currentDate: new Date(),\n currentViewMode: 'month',\n visibleViewCategories: ['calendar', 'timeline', 'table', 'kanban'],\n calendarLayout: 'monthly',\n timelineLayout: 'daily',\n tableLayout: 'simple',\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n assigneeFilterHasSavedPreference: false,\n selectedPriorities: [],\n selectedDueStatusKeys: [],\n colorBy: 'dueDate',\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n })),\n\n withComputed((store) => ({\n currentViewCategory: computed(() => resolveTaskBoardViewCategory(store.currentViewMode())),\n selectedTaskTypes: computed(() => {\n const names = store.selectedTaskTypeNames();\n if (!names || names.length === 0) {\n return [];\n }\n return store.taskTypes().filter((tt) => names.includes(tt.name));\n }),\n isTaskSelected: computed(() => store.selectedTask() !== null),\n isDetailPanelOpen: computed(() => store.detailPanel()),\n effectiveColorBy: computed((): AXPTaskBoardColorBy => store.colorBy()),\n endDate: computed(() => {\n const currentDate = store.currentDate();\n const daysCount = store.daysCount();\n // Calculate end of the last day in the range (23:59:59.999)\n const endDate = new Date(currentDate);\n endDate.setDate(endDate.getDate() + daysCount - 1);\n endDate.setHours(23, 59, 59, 999);\n return endDate;\n }),\n activeFilterCount: computed(() => {\n let count = 0;\n if (\n store.currentViewMode() !== 'kanban' &&\n store.currentViewMode() !== 'status-grouped-grid' &&\n store.selectedTaskTypeNames().length > 0\n ) {\n count++;\n }\n if (store.selectedAssigneeIds().length > 0) {\n count++;\n }\n if (store.selectedReporterIds().length > 0) {\n count++;\n }\n if (store.selectedPriorities().length > 0) {\n count++;\n }\n if (store.selectedDueStatusKeys().length > 0) {\n count++;\n }\n return count;\n }),\n })),\n\n withMethods(\n (\n store,\n settingsService = inject(AXPSettingsService),\n taskBoardService = inject(AXPTaskBoardService),\n sessionService = inject(AXPSessionService),\n ) => {\n const userScopedSettings = () => settingsService.scope(AXPPlatformScope.User);\n let settingsSyncInitialized = false;\n\n const syncSettingsFromChangeEvent = (keys: string[], values: Record<string, unknown>) => {\n const patch: Partial<AXPTaskBoardState> = {};\n\n if (keys.includes(AXMTaskBoardSettings.ColorBy)) {\n patch.colorBy = (values[AXMTaskBoardSettings.ColorBy] as AXPTaskBoardColorBy | undefined) ?? 'dueDate';\n }\n\n if (keys.includes(AXPRegionalSetting.CalendarEvents)) {\n patch.selectedCalendarEventTypeIds = normalizeRegionalCalendarEventIds(\n values[AXPRegionalSetting.CalendarEvents],\n );\n }\n\n if (Object.keys(patch).length > 0) {\n patchState(store, patch);\n }\n };\n\n return {\n async reloadTaskTypes() {\n const taskTypes = await taskBoardService.getTaskTypes();\n patchState(store, { taskTypes });\n },\n\n async initialize() {\n patchState(store, { isLoading: true });\n try {\n const taskTypes = await taskBoardService.getTaskTypes();\n patchState(store, { taskTypes });\n\n const [\n savedDaysCount,\n savedDateString,\n savedDetailPanel,\n savedViewMode,\n savedVisibleCalendar,\n savedVisibleTimeline,\n savedVisibleTable,\n savedVisibleKanban,\n savedCalendarLayout,\n savedTimelineLayout,\n savedTableLayout,\n savedTaskTypeNames,\n savedAssigneeIds,\n savedReporterIds,\n savedPriorities,\n savedDueStatusKeys,\n savedColorBy,\n savedCalendarEventIds,\n ] = await Promise.all([\n userScopedSettings().get<number | undefined>(AXMTaskBoardSettings.DaysCount),\n userScopedSettings().get<string | undefined>(AXMTaskBoardSettings.CurrentDate),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.DetailPanel),\n userScopedSettings().get<AXPTaskBoardViewMode | undefined>(AXMTaskBoardSettings.ViewMode),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.VisibleCalendar),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.VisibleTimeline),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.VisibleTable),\n userScopedSettings().get<boolean | undefined>(AXMTaskBoardSettings.VisibleKanban),\n userScopedSettings().get<AXPTaskBoardCalendarLayout | undefined>(AXMTaskBoardSettings.CalendarLayout),\n userScopedSettings().get<AXPTaskBoardTimelineLayout | undefined>(AXMTaskBoardSettings.TimelineLayout),\n userScopedSettings().get<AXPTaskBoardTableLayout | undefined>(AXMTaskBoardSettings.TableLayout),\n userScopedSettings().get<string[] | undefined>(AXMTaskBoardSettings.SelectedTaskTypeNames),\n userScopedSettings().get<(string | number)[] | undefined>(AXMTaskBoardSettings.SelectedAssigneeIds),\n userScopedSettings().get<(string | number)[] | undefined>(AXMTaskBoardSettings.SelectedReporterIds),\n userScopedSettings().get<AXPPriorityFilterKey[] | undefined>(AXMTaskBoardSettings.SelectedPriorities),\n userScopedSettings().get<AXPDueStatusFilterKey[] | undefined>(AXMTaskBoardSettings.SelectedDueStatusKeys),\n userScopedSettings().get<AXPTaskBoardColorBy | undefined>(AXMTaskBoardSettings.ColorBy),\n settingsService.get<string[] | undefined>(AXPRegionalSetting.CalendarEvents),\n ]);\n\n const visibleViewCategories = normalizeVisibleTaskBoardCategories({\n calendar: savedVisibleCalendar,\n timeline: savedVisibleTimeline,\n table: savedVisibleTable,\n kanban: savedVisibleKanban,\n });\n\n // Ensure currentDate is always a valid Date\n let currentDate: Date;\n if (savedDateString) {\n const parsedDate = new Date(savedDateString);\n currentDate = isNaN(parsedDate.getTime()) ? new Date() : parsedDate;\n } else {\n currentDate = new Date();\n }\n\n const canViewAll = canViewAllTaskAssignees(sessionService);\n const assigneeFilterHasSavedPreference = hasTaskBoardSavedAssigneePreference(savedAssigneeIds);\n const resolvedSavedAssigneeIds = resolveTaskBoardSavedAssigneeIds(sessionService, savedAssigneeIds);\n const defaultAssigneeIds = canViewAll\n ? resolvedSavedAssigneeIds\n : normalizeTaskBoardAssigneeIds(sessionService, resolvedSavedAssigneeIds);\n\n const calendarLayout = savedCalendarLayout ?? 'monthly';\n const timelineLayout = savedTimelineLayout ?? 'daily';\n const tableLayout = savedTableLayout ?? 'simple';\n\n let effectiveViewMode: AXPTaskBoardViewMode = savedViewMode || 'month';\n const effectiveCategory = resolveTaskBoardViewCategory(effectiveViewMode);\n if (!visibleViewCategories.includes(effectiveCategory)) {\n const fallbackCategory = visibleViewCategories[0] ?? 'calendar';\n effectiveViewMode = resolveTaskBoardLeafViewMode(\n fallbackCategory,\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY[fallbackCategory],\n );\n }\n\n if (savedViewMode != null && effectiveViewMode !== savedViewMode) {\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, effectiveViewMode)\n .catch((error) => console.error('Error aligning task board view mode with visible views:', error));\n }\n\n let selectedTaskTypeNames = normalizeTaskTypeFilterNames(savedTaskTypeNames ?? [], taskTypes);\n if (\n selectedTaskTypeNames.length === 0 &&\n taskTypes.length > 0 &&\n (effectiveViewMode === 'kanban' || effectiveViewMode === 'status-grouped-grid')\n ) {\n selectedTaskTypeNames = [taskTypes[0].name];\n }\n\n patchState(store, {\n daysCount: savedDaysCount || 7,\n detailPanel: savedDetailPanel || false,\n currentViewMode: effectiveViewMode,\n visibleViewCategories,\n calendarLayout,\n timelineLayout,\n tableLayout,\n currentDate,\n selectedTaskTypeNames,\n selectedAssigneeIds: defaultAssigneeIds,\n assigneeFilterHasSavedPreference,\n selectedReporterIds: savedReporterIds || [],\n selectedPriorities: normalizeTaskBoardPriorityFilterKeys(savedPriorities),\n selectedDueStatusKeys: normalizeDueStatusFilterKeys(savedDueStatusKeys),\n colorBy: savedColorBy || 'dueDate',\n selectedCalendarEventTypeIds: normalizeRegionalCalendarEventIds(savedCalendarEventIds),\n isLoading: false,\n });\n\n if (!settingsSyncInitialized) {\n settingsSyncInitialized = true;\n settingsService.onChanged.subscribe((event) => {\n if (event.scope !== AXPPlatformScope.User) {\n return;\n }\n syncSettingsFromChangeEvent(event.keys, event.values);\n });\n }\n } catch (error) {\n console.error('Error initializing TaskBoard ViewModel:', error);\n patchState(store, {\n detailPanel: false,\n currentViewMode: 'month',\n visibleViewCategories: ['calendar', 'timeline', 'table', 'kanban'],\n calendarLayout: 'monthly',\n timelineLayout: 'daily',\n tableLayout: 'simple',\n currentDate: new Date(),\n selectedTaskTypeNames: [],\n selectedAssigneeIds: [],\n assigneeFilterHasSavedPreference: false,\n selectedPriorities: [],\n selectedDueStatusKeys: [],\n colorBy: 'dueDate',\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n taskTypes: store.taskTypes(),\n isLoading: false,\n });\n }\n },\n\n setViewMode(mode: AXPTaskBoardViewMode) {\n let category = resolveTaskBoardViewCategory(mode);\n const allowed = store.visibleViewCategories();\n if (!allowed.includes(category)) {\n const fallbackCategory = allowed[0] ?? category;\n mode = resolveTaskBoardLeafViewMode(\n fallbackCategory,\n this.getLayoutForCategory(fallbackCategory),\n );\n category = fallbackCategory;\n }\n\n const layout = resolveTaskBoardViewLayout(mode);\n if (layout) {\n this.patchLayoutForCategory(category, layout);\n }\n\n this.applyLeafViewMode(mode);\n },\n\n setViewCategory(category: AXPTaskBoardViewCategory) {\n const allowed = store.visibleViewCategories();\n const effectiveCategory = allowed.includes(category) ? category : (allowed[0] ?? category);\n const layout = this.getLayoutForCategory(effectiveCategory);\n this.applyLeafViewMode(resolveTaskBoardLeafViewMode(effectiveCategory, layout));\n },\n\n setViewLayout(category: AXPTaskBoardViewCategory, layout: AXPTaskBoardViewLayout) {\n this.patchLayoutForCategory(category, layout);\n if (resolveTaskBoardViewCategory(store.currentViewMode()) === category) {\n this.applyLeafViewMode(resolveTaskBoardLeafViewMode(category, layout));\n } else {\n this.persistLayout(category, layout);\n }\n },\n\n getLayoutForCategory(category: AXPTaskBoardViewCategory): AXPTaskBoardViewLayout | null {\n switch (category) {\n case 'calendar':\n return store.calendarLayout();\n case 'timeline':\n return store.timelineLayout();\n case 'table':\n return store.tableLayout();\n default:\n return null;\n }\n },\n\n patchLayoutForCategory(category: AXPTaskBoardViewCategory, layout: AXPTaskBoardViewLayout) {\n switch (category) {\n case 'calendar':\n patchState(store, { calendarLayout: layout as AXPTaskBoardCalendarLayout });\n break;\n case 'timeline':\n patchState(store, { timelineLayout: layout as AXPTaskBoardTimelineLayout });\n break;\n case 'table':\n patchState(store, { tableLayout: layout as AXPTaskBoardTableLayout });\n break;\n }\n this.persistLayout(category, layout);\n },\n\n persistLayout(category: AXPTaskBoardViewCategory, layout: AXPTaskBoardViewLayout) {\n const key =\n category === 'calendar'\n ? AXMTaskBoardSettings.CalendarLayout\n : category === 'timeline'\n ? AXMTaskBoardSettings.TimelineLayout\n : AXMTaskBoardSettings.TableLayout;\n userScopedSettings()\n .set(key, layout)\n .catch((error) => console.error('Error saving task board view layout:', error));\n },\n\n applyLeafViewMode(mode: AXPTaskBoardViewMode) {\n if (\n (mode === 'kanban' || mode === 'status-grouped-grid') &&\n store.selectedTaskTypeNames().length === 0\n ) {\n const firstTaskType = store.taskTypes()[0];\n if (firstTaskType) {\n this.setSelectedTaskTypeNames([firstTaskType.name]);\n }\n }\n if (\n (mode === 'kanban' || mode === 'status-grouped-grid') &&\n store.selectedTaskTypeNames().length > 1\n ) {\n this.setSelectedTaskTypeNames([store.selectedTaskTypeNames()[0]]);\n }\n patchState(store, { currentViewMode: mode });\n userScopedSettings()\n .set(AXMTaskBoardSettings.ViewMode, mode)\n .catch((error) => console.error('Error saving task board view mode:', error));\n },\n\n setCurrentDate(date: Date) {\n patchState(store, { currentDate: new Date(date) });\n userScopedSettings()\n .set(AXMTaskBoardSettings.CurrentDate, date.toISOString())\n .catch((error) => console.error('Error saving current date:', error));\n },\n\n setSelectedTaskTypeNames(taskTypeNames: string[], isQueryParam: boolean = false) {\n patchState(store, { selectedTaskTypeNames: taskTypeNames });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedTaskTypeNames, taskTypeNames)\n .catch((error) => console.error('Error saving selected task type filter:', error));\n },\n\n setSelectedAssigneeIds(\n assigneeIds: (string | number)[],\n isQueryParam: boolean = false,\n persistPreference: boolean = !isQueryParam,\n ) {\n const normalizedAssigneeIds = normalizeTaskBoardAssigneeIds(sessionService, assigneeIds);\n patchState(store, {\n selectedAssigneeIds: normalizedAssigneeIds,\n ...(persistPreference ? { assigneeFilterHasSavedPreference: true } : {}),\n });\n if (isQueryParam || !persistPreference) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedAssigneeIds, normalizedAssigneeIds)\n .catch((error) => console.error('Error saving selected assignee filter:', error));\n },\n\n setSelectedReporterIds(reporterIds: (string | number)[], isQueryParam: boolean = false) {\n patchState(store, { selectedReporterIds: reporterIds });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedReporterIds, reporterIds)\n .catch((error) => console.error('Error saving selected reporter filter:', error));\n },\n\n setSelectedPriorities(priorities: AXPPriorityFilterKey[], isQueryParam: boolean = false) {\n patchState(store, { selectedPriorities: priorities });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedPriorities, priorities)\n .catch((error) => console.error('Error saving selected priority filter:', error));\n },\n\n setSelectedDueStatusKeys(dueStatusKeys: AXPDueStatusFilterKey[], isQueryParam: boolean = false) {\n patchState(store, { selectedDueStatusKeys: dueStatusKeys });\n if (isQueryParam) return;\n userScopedSettings()\n .set(AXMTaskBoardSettings.SelectedDueStatusKeys, dueStatusKeys)\n .catch((error) => console.error('Error saving selected due status filter:', error));\n },\n\n setColorBy(colorBy: AXPTaskBoardColorBy) {\n patchState(store, { colorBy });\n userScopedSettings()\n .set(AXMTaskBoardSettings.ColorBy, colorBy)\n .catch((error) => console.error('Error saving task board color by:', error));\n },\n\n setSelectedCalendarEventTypeIds(eventTypeIds: string[]) {\n patchState(store, { selectedCalendarEventTypeIds: eventTypeIds });\n userScopedSettings()\n .set(AXPRegionalSetting.CalendarEvents, eventTypeIds)\n .catch((error) => console.error('Error saving selected calendar events:', error));\n },\n\n /**\n * Sets the currently selected task. Pass `null` to clear the selection.\n * @param task The task to select, or null.\n */\n selectTask(task: AXPTask | null) {\n patchState(store, { selectedTask: task });\n },\n\n /**\n * A convenience method to clear the currently selected task.\n */\n clearSelectedTask() {\n patchState(store, { selectedTask: null });\n },\n\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, true)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, false)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n toggleDetailPanel() {\n const detailPanel = !store.detailPanel();\n patchState(store, { detailPanel: detailPanel });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DetailPanel, detailPanel)\n .catch((error) => console.error('Error saving detail panel:', error));\n },\n\n async getStatusName(key: any, provider: string): Promise<string | null> {\n return taskBoardService.getStatusName(key, provider);\n },\n\n /**\n * Sets the start date for a new range selection.\n * Pass `null` to clear the selection.\n * @param date The start date of the range.\n */\n setRangeStartDate(date: Date | null) {\n patchState(store, { rangeStartDate: date });\n },\n\n setDaysCount(days: number) {\n const count = Math.max(1, days);\n patchState(store, { daysCount: count });\n userScopedSettings()\n .set(AXMTaskBoardSettings.DaysCount, count)\n .catch((error) => console.error('Error saving days count:', error));\n },\n };\n },\n ),\n);\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXFormatPipe } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { RootConfig } from '../../../const';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXPExtraField } from '../task-board.types';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-detail-panel',\n templateUrl: './task-board-detail-panel.component.html',\n styleUrls: ['./task-board-detail-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AsyncPipe,\n AXFormatPipe,\n AXTranslatorPipe,\n AXButtonComponent,\n AXPStateMessageComponent,\n AXPWidgetCoreModule,\n AXDecoratorIconComponent,\n ],\n})\nexport class AXMTaskBoardDetailPanel {\n protected readonly rootConfig = RootConfig;\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n\n protected statusName = signal<string>('');\n protected extraFields = signal<AXPExtraField[]>([]);\n\n #selectedTaskChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const key = selectedTask?.status.id;\n const provider = selectedTask?.provider;\n if (!provider) return;\n const name = await this.vm.getStatusName(key, provider);\n if (name) this.statusName.set(name);\n });\n\n #selectedTaskTypeChanged = effect(async () => {\n const selectedTask = this.vm.selectedTask();\n const selectedTaskType = this.taskBoardService.getProvider(selectedTask?.provider);\n const extraFields = await selectedTaskType?.getExtraFields();\n if (!extraFields) {\n this.extraFields.set([]);\n return;\n }\n this.extraFields.set(extraFields);\n });\n\n protected capitalizeFirstLetter(text: string) {\n return String(text).charAt(0).toUpperCase() + String(text).slice(1);\n }\n}\n","@if (vm.isTaskSelected()) {\n @let nodeInfo = vm.selectedTask();\n <div class=\"__header\">\n <div class=\"__title\">\n <span>{{ nodeInfo?.title }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content\">\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.title' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n @if (nodeInfo?.description) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.description' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.description }}</div>\n </div>\n }\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.start-date' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n {{\n nodeInfo?.startDate\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.end-date' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{\n nodeInfo?.endDate\n | format: 'datetime' : { format: 'short', calendar: localeService.activeProfile().calendar.system }\n | async\n }}\n </div>\n </div>\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.reporter' | translate | async }}</span>\n </div>\n <div class=\"__content\">\n {{ nodeInfo?.reporter?.fullName }}\n </div>\n </div>\n @if (nodeInfo?.assignee) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.assignee' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ nodeInfo?.assignee?.fullName }}</div>\n </div>\n }\n @if (statusName()) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ '@task-management:task-board.detail-panel.status' | translate | async }}</span>\n </div>\n <div class=\"__content\">{{ statusName() }}</div>\n </div>\n }\n @if (nodeInfo?.priority) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.priority' | translate | async }}\n </span>\n </div>\n <div class=\"__content\">{{ capitalizeFirstLetter(nodeInfo?.priority ?? '') }}</div>\n </div>\n }\n @if (extraFields() && extraFields().length) {\n <div class=\"__row\">\n <axp-widgets-container [context]=\"nodeInfo\">\n @for (extraField of extraFields(); track extraField) {\n <div class=\"__title\">\n <span>\n {{ extraField.title | translate | async }}\n </span>\n </div>\n <div class=\"__content\">\n <ng-container axp-widget-renderer [node]=\"extraField.widget\" [mode]=\"'view'\"> </ng-container>\n </div>\n }\n </axp-widgets-container>\n </div>\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"__header\">\n <div class=\"__title\">\n <span>\n {{ '@task-management:task-board.detail-panel.title' | translate | async }}\n </span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n\n <div class=\"__content ax-flex ax-items-center ax-justify-center\">\n <axp-state-message\n icon=\"fa-light fa-clipboard-list-check\"\n [title]=\"'@task-management:task-board.detail-panel.no-task-selected.title'\"\n [description]=\"'@task-management:task-board.detail-panel.no-task-selected.description'\"\n >\n </axp-state-message>\n </div>\n}\n","import { AXPRegionalSetting } from '@acorex/platform/common';\n\nexport const TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS = [\n AXPRegionalSetting.LocaleProfile,\n AXPRegionalSetting.Calendar,\n AXPRegionalSetting.FirstDayOfWeek,\n AXPRegionalSetting.WeekendDays,\n] as const;\n\nexport function buildTaskBoardRegionalProfileKey(parts: {\n profileCode: string;\n calendarSystem: string;\n weekStartsOn: number;\n weekendDays: readonly number[];\n}): string {\n return [parts.profileCode, parts.calendarSystem, parts.weekStartsOn, parts.weekendDays.join('-')].join('|');\n}\n","import {\n AXSchedulerAppointment,\n AXSchedulerAppointmentDataSource,\n AXSchedulerAppointmentMouseEvent,\n AXSchedulerComponent,\n AXSchedulerDateRange,\n AXSchedulerService,\n AXSchedulerSlotDropEvent,\n AXSchedulerSlotMouseEvent,\n AXSchedulerView,\n} from '@acorex/components/scheduler';\nimport { AXCalendarService, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport {\n afterNextRender,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { RootConfig } from '../../../../const';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPResource, AXPTask, AXPTaskAction } from '../../task-board.types';\nimport { AXMTaskBoardViewModel, AXPTaskBoardViewMode } from '../../task-board.viewmodel';\nimport {\n buildTaskBoardRegionalProfileKey,\n TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS,\n} from './task-board-scheduler-layout.utils';\n\n@Component({\n selector: 'axm-task-board-calendar-view',\n templateUrl: './task-board-calendar-view.component.html',\n styleUrls: ['./task-board-calendar-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXSchedulerComponent],\n})\nexport class AXMTaskBoardCalendarViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n protected readonly schedulerService = inject(AXSchedulerService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly localeService = inject(AXLocaleService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly injector = inject(Injector);\n\n schedulerComponent = viewChild(AXSchedulerComponent);\n\n resources = input<AXPResource[]>([]);\n refreshNonce = input<number>(0);\n startingDate = input<Date>(new Date());\n selectedView = input<AXPTaskBoardViewMode>('month');\n dataSource = input.required<AXSchedulerAppointmentDataSource>();\n\n private readonly activeCalendar = toSignal(this.calendarService.calendarChanges$, {\n initialValue: this.calendarService.getActiveCalendar(),\n });\n\n /** Gates ax-scheduler in the template so we can destroy and recreate it cleanly on regional changes. */\n protected readonly schedulerMounted = signal(true);\n\n private readonly regionalSettingsRevision = signal(0);\n private previousRegionalProfileKey: string | null = null;\n\n /** Active calendar system (e.g. solar-hijri for fa-IR). Required for correct week/today rendering. */\n protected schedulerCalendar = computed(\n () => this.activeCalendar()?.name() ?? this.localeService.activeProfile().calendar.system,\n );\n\n /** Detects locale profile and week-layout changes that require a fresh ax-scheduler instance. */\n private readonly regionalProfileKey = computed(() => {\n this.regionalSettingsRevision();\n this.activeCalendar()?.weekdays;\n\n const profile = this.localeService.activeProfile();\n return buildTaskBoardRegionalProfileKey({\n profileCode: profile.localeInfo?.code ?? '',\n calendarSystem: this.schedulerCalendar(),\n weekStartsOn: profile.calendar.week?.startsOn ?? 0,\n weekendDays: profile.calendar.week?.weekends ?? [],\n });\n });\n\n /** Align week/month views to regional week boundaries before passing to ax-scheduler. */\n protected schedulerStartingDate = computed(() => {\n const date = this.startingDate();\n const calendar = this.schedulerCalendar();\n const axDate = this.calendarService.create(date, calendar);\n\n switch (this.currentSchedulerView()) {\n case 'week':\n return axDate.startOf('week').date;\n case 'month':\n case 'timeline-month':\n return axDate.startOf('month').date;\n default:\n return axDate.startOf('day').date;\n }\n });\n\n protected currentSchedulerView = computed<AXSchedulerView>(() =>\n this.selectedView() === 'kanban' || this.selectedView() === 'grid'\n ? 'month'\n : (this.selectedView() as AXSchedulerView),\n );\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n onMonthSlotDblClicked = output<Date>();\n onActionClick = output<AXPTaskAction>();\n component = output<AXSchedulerComponent>();\n onTaskRightClick = output<AXPTaskAction>();\n onRangeChanged = output<AXSchedulerDateRange>();\n\n constructor() {\n this.settingService.onChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((event) => {\n if (event.keys.some((key) => (TASK_BOARD_REGIONAL_LAYOUT_SETTING_KEYS as readonly string[]).includes(key))) {\n this.regionalSettingsRevision.update((value) => value + 1);\n }\n });\n }\n\n private readonly regionalRemountEffect = effect(() => {\n const profileKey = this.regionalProfileKey();\n\n untracked(() => {\n if (this.previousRegionalProfileKey === null) {\n this.previousRegionalProfileKey = profileKey;\n return;\n }\n\n if (profileKey === this.previousRegionalProfileKey) {\n return;\n }\n\n this.previousRegionalProfileKey = profileKey;\n this.remountScheduler();\n });\n });\n\n /** Re-binds parent scheduler ref whenever ax-scheduler remounts after a regional layout change. */\n private readonly schedulerInstanceEffect = effect(() => {\n if (!this.schedulerMounted()) {\n return;\n }\n\n const scheduler = this.schedulerComponent();\n if (!scheduler) {\n return;\n }\n\n afterNextRender(\n () => {\n const currentScheduler = this.schedulerComponent();\n if (!currentScheduler || !this.schedulerMounted()) {\n return;\n }\n\n this.component.emit(currentScheduler);\n this.syncSchedulerCurrentDateFromToolbar({ force: true });\n void currentScheduler.refresh();\n },\n { injector: this.injector },\n );\n });\n\n private readonly refreshNonceEffect = effect(() => {\n this.refreshNonce();\n if (!this.schedulerMounted()) {\n return;\n }\n void this.schedulerComponent()?.refresh();\n });\n\n private readonly schedulerStateSyncEffect = effect(() => {\n if (!this.schedulerMounted()) {\n return;\n }\n\n this.startingDate();\n this.schedulerStartingDate();\n this.schedulerCalendar();\n this.localeService.activeProfile().localeInfo?.code;\n this.currentSchedulerView();\n this.vm.daysCount();\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.selectedDueStatusKeys();\n this.refreshNonce();\n\n queueMicrotask(() => {\n this.syncSchedulerCurrentDateFromToolbar();\n void this.schedulerComponent()?.refresh();\n });\n });\n\n protected holidays = (range: AXSchedulerDateRange): Promise<AXHolidayDate[]> => {\n const selectedEventTypeIds = this.vm.selectedCalendarEventTypeIds();\n return this.taskBoardService.getEvents(range, selectedEventTypeIds);\n };\n\n /**\n * ax-scheduler only consumes `[startingDate]` on first mount; afterward its internal\n * `currentDate` must be updated explicitly when the external toolbar navigator changes.\n */\n private syncSchedulerCurrentDateFromToolbar(options?: { force?: boolean }): void {\n const scheduler = this.schedulerComponent();\n if (!scheduler) {\n return;\n }\n\n const view = this.currentSchedulerView();\n let targetDate = this.calendarService.create(this.schedulerStartingDate(), this.schedulerCalendar());\n\n if (view === 'week' || view === 'timeline-weekly') {\n targetDate = this.schedulerService.alignToWeekStart(targetDate, {});\n }\n\n if (!options?.force && targetDate.equal(scheduler.currentDate())) {\n return;\n }\n\n scheduler.currentDate.set(targetDate);\n }\n\n private remountScheduler(): void {\n this.schedulerMounted.set(false);\n\n afterNextRender(\n () => {\n this.schedulerMounted.set(true);\n },\n { injector: this.injector },\n );\n }\n\n async ngAfterViewInit(): Promise<void> {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n protected onTaskDrop(event: AXSchedulerSlotDropEvent): void {\n if (event.slot.view === 'agenda' && event.isSameSlotDrop) {\n return;\n }\n\n const dropResult = this.schedulerService.calculateAppointmentDropResult(event);\n if (dropResult.isSameSlotDrop) {\n return;\n }\n\n const originalTask = event.appointment as AXPTask;\n this.schedulerService.applyDropResult(\n originalTask as unknown as AXSchedulerAppointment,\n dropResult,\n );\n\n this.taskBoardService\n .updateTaskDateRange(originalTask, {\n from: dropResult.startDate,\n end: dropResult.endDate,\n })\n .then((persistedTask) => {\n this.onTaskChanged.emit(persistedTask);\n void this.schedulerComponent()?.refresh();\n })\n .catch((error) => {\n console.error('[TaskBoardCalendar] Failed to update task date range:', error);\n void this.schedulerComponent()?.refresh();\n });\n }\n\n protected onTaskRightClickHandler(event: AXSchedulerAppointmentMouseEvent): void {\n this.onTaskRightClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected onSlotDblClicked(event: AXSchedulerSlotMouseEvent): void {\n if (event.sender.selectedView() === 'month') {\n this.onMonthSlotDblClicked.emit(event.slot.startDate.date);\n }\n }\n\n protected async handleRangeChanged(event: AXSchedulerDateRange): Promise<void> {\n this.onRangeChanged.emit(event);\n }\n\n protected handleActionClick(event: AXSchedulerAppointmentMouseEvent): void {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: event.appointment as AXPTask });\n }\n\n protected async onTaskClickHandler(event: AXSchedulerAppointmentMouseEvent): Promise<void> {\n const task = event.appointment as AXPTask;\n const anchor = this.resolveAppointmentAnchor(event);\n\n if (anchor) {\n await this.taskPopoverOverlay.open({\n task,\n anchor,\n offsetX: 12,\n offsetY: 12,\n adaptivityEnabled: true,\n });\n }\n\n this.onTaskClick.emit(task);\n }\n\n private async refreshPopoverData(): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(active.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTask = result.items.find((t) => t.id === active.id);\n if (updatedTask) {\n await this.taskPopoverOverlay.refreshTask({ ...updatedTask, provider: active.provider });\n }\n void this.schedulerComponent()?.refresh();\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n\n protected async openTaskDetails(): Promise<void> {\n const task = this.taskPopoverOverlay.getActiveTask();\n if (!task) {\n return;\n }\n\n try {\n await this.commandService.execute('Entity:OpenDetails', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n data: { id: task.id },\n });\n this.taskPopoverOverlay.close();\n } catch (error) {\n console.error('Failed to open task details:', error);\n }\n }\n\n private resolveAppointmentAnchor(event: AXSchedulerAppointmentMouseEvent): HTMLElement | undefined {\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isAppointment =\n element.classList?.contains('dx-scheduler-appointment') ||\n element.classList?.contains('ax-scheduler-appointment') ||\n element.hasAttribute('data-appointment-id');\n\n if (isAppointment) {\n targetElement = element;\n break;\n }\n\n const parent = element.parentElement;\n if (parent) {\n const isParentAppointment =\n parent.classList?.contains('dx-scheduler-appointment') ||\n parent.classList?.contains('ax-scheduler-appointment');\n\n if (isParentAppointment) {\n targetElement = parent;\n break;\n }\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n return targetElement;\n }\n}\n","@if (schedulerMounted()) {\n <ax-scheduler\n [hasHeader]=\"false\"\n [holidays]=\"holidays\"\n [resources]=\"resources()\"\n [dataSource]=\"dataSource()\"\n [calendar]=\"schedulerCalendar()\"\n [startingDate]=\"schedulerStartingDate()\"\n [selectedView]=\"currentSchedulerView()\"\n [multiDayViewDaysCount]=\"vm.daysCount()\"\n [showCurrentTimeIndicator]=\"true\"\n (onAppointmentDrop)=\"onTaskDrop($event)\"\n (onActionClick)=\"handleActionClick($event)\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n (onSlotDblClicked)=\"onSlotDblClicked($event)\"\n (onAppointmentClicked)=\"onTaskClickHandler($event)\"\n ></ax-scheduler>\n}\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH,\n TASK_BOARD_GRID_ROW_ACTION_ITEMS,\n} from '../../task-board-grid-row-actions';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskFilter } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\n@Component({\n selector: 'axm-task-board-grid-view',\n templateUrl: './task-board-grid-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n\n private fetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected grid = viewChild<AXDataTableComponent>('grid');\n\n protected readonly taskRowCommandWidth = TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH;\n protected readonly taskRowCommandItems = TASK_BOARD_GRID_ROW_ACTION_ITEMS;\n\n protected gridRemountKeys = computed(() => [this.refreshNonce()]);\n\n protected tasksDataSource = computed(() => {\n const parentDataSource = this.dataSource();\n void this.refreshNonce();\n\n return new AXDataSource<any>({\n load: async (e) => {\n const result = await parentDataSource({ skip: e.skip, take: e.take });\n this.fetchedTasks.set(result.items);\n const mappedItems = result.items.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n statusTitle: task.status.title,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n type: this.taskBoardService.getProvider(task.provider)?.title,\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n _originalTask: task,\n }));\n return { items: mappedItems, total: result.total };\n },\n pageSize: 10,\n key: 'id',\n byKey: async (key: unknown) => {\n return this.fetchedTasks().find((task) => task.id === key);\n },\n });\n });\n\n constructor() {\n this.taskBoardService.close$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n #gridManualFetchEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n\n const grid = this.grid();\n if (!grid) {\n return;\n }\n\n queueMicrotask(() => {\n untracked(() => {\n grid.refresh({ reset: true });\n });\n });\n });\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.columns.set([]);\n return;\n }\n\n taskType.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n });\n\n protected handleRowClick(event: AXDataTableRowClick): void {\n if (event.data) {\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const originalTask = mappedItem._originalTask || this.fetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n }\n\n protected handleTaskCommandClick(event: AXRowCommandItemClickEvent): void {\n if (event.name !== 'view') {\n return;\n }\n\n event.nativeEvent?.stopPropagation();\n\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const task = mappedItem._originalTask ?? this.fetchedTasks().find((t) => t.id === mappedItem.id);\n if (!task) {\n return;\n }\n\n const anchor = this.taskPopoverOverlay.resolveAnchorFromCommandClick(event);\n if (!anchor) {\n return;\n }\n\n setTimeout(() => {\n void this.taskPopoverOverlay.open({\n task,\n anchor,\n placement: 'bottom-start',\n adaptivityEnabled: false,\n autoFlip: true,\n });\n }, 0);\n }\n}\n","@for (remountKey of gridRemountKeys(); track remountKey) {\n <ax-data-table\n #grid\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"tasksDataSource()\"\n (onRowClick)=\"handleRowClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n [allowResizing]=\"true\"\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"statusTitle\"\n [caption]=\"('@task-management:task-board.grid-headers.status' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"type\"\n [caption]=\"('@task-management:task-board.grid-headers.type' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n\n @if (columns().length) {\n <ng-container>\n @for (column of columns(); track column) {\n <axp-widget-column-renderer\n [node]=\"column.widget\"\n [caption]=\"(column.title | translate | async)!\"\n ></axp-widget-column-renderer>\n }\n </ng-container>\n }\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"taskRowCommandWidth\"\n [items]=\"taskRowCommandItems\"\n (onItemClick)=\"handleTaskCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n}\n","import {\n AXKanbanBeforeDropEvent,\n AXKanbanComponent,\n AXKanbanItem,\n AXKanbanMouseEvent,\n AXKanbanSortEvent,\n AXKanbanStatus,\n} from '@acorex/components/kanban';\nimport { AXPSettingsService } from '@acorex/platform/common';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n model,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPTask, AXPTaskAction, AXPTaskActionMenuItem } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'axm-task-board-kanban-view',\n templateUrl: './task-board-kanban-view.component.html',\n styleUrls: ['./task-board-kanban-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXKanbanComponent],\n})\nexport class AXMTaskBoardKanbanViewComponent implements AfterViewInit {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n protected readonly settingService = inject(AXPSettingsService);\n protected readonly commandService = inject(AXPCommandService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n\n kanbanComponent = viewChild(AXKanbanComponent);\n\n tasks = model.required<AXPTask[]>();\n\n onTaskClick = output<AXPTask>();\n onTaskChanged = output<AXPTask>();\n component = output<AXKanbanComponent>();\n onActionClick = output<AXPTaskAction>();\n\n statuses = signal<AXKanbanStatus[]>([]);\n\n stableTasks = computed(() => this.tasks(), { equal: isEqual });\n protected kanbanTasks = computed<AXKanbanItem[]>(() => {\n return this.stableTasks().map((task) => ({\n id: task.id,\n title: task.title,\n index: task.index,\n cssClass: task.cssClass,\n statusKey: task.status.id,\n description: task.description,\n }));\n });\n\n ngAfterViewInit(): void {\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(async (data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n await this.refreshPopoverData();\n });\n\n this.taskBoardService.close$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n\n if (this.kanbanComponent()) {\n this.component.emit(this.kanbanComponent()!);\n }\n }\n\n #providerChanged = effect(async () => {\n const taskType = this.vm.selectedTaskTypes()[0];\n if (!taskType) {\n this.statuses.set([]);\n return;\n }\n taskType.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n //#region ---- Drag & Drop Handling ----\n\n /**\n * Handles the onBeforeDrop event from the kanban component.\n * Uses event.wait() to register async operations that the kanban will await.\n * If action is cancelled/failed, we set event.canceled = true to prevent the drop.\n */\n protected onBeforeDrop(event: AXKanbanBeforeDropEvent): void {\n // If no status change, allow the drop (just reordering)\n if (event.previousStatusKey === event.currentStatusKey) {\n return;\n }\n\n // Find the task being moved\n const task = this.stableTasks().find((t) => t.id === event.item?.id);\n if (!task || !task.provider) {\n // Allow drop if task not found or no provider\n return;\n }\n\n // Get the provider\n const provider = this.taskBoardService.getProvider(task.provider);\n if (!provider) {\n return;\n }\n\n // Register the async operation using event.wait()\n // The kanban component will await this promise before proceeding\n event.wait(this.executeDropAction(event, task, provider));\n }\n\n /**\n * Executes the action for a drop operation.\n * Sets event.canceled = true if action fails or is cancelled.\n * IMPORTANT: Do NOT update the task status in dataSource here - let the kanban handle the move.\n * The kanban will update the status in onSortChanged, and we'll sync with backend there.\n */\n private async executeDropAction(\n event: AXKanbanBeforeDropEvent,\n task: AXPTask,\n provider: ReturnType<typeof this.taskBoardService.getProvider>,\n ): Promise<void> {\n if (!provider) {\n return;\n }\n\n try {\n // Get available actions for the task\n const actions = await provider.getActions(task);\n if (!actions || actions.length === 0) {\n // No actions available, allow the drop\n return;\n }\n\n // Find action that matches the new status\n const matchingAction = this.findActionForStatus(actions, event.currentStatusKey);\n if (!matchingAction || !matchingAction.command) {\n // No matching action found, allow the drop\n return;\n }\n\n // Execute the action and check result\n const result = await this.taskBoardService.executeCommand(matchingAction.command, task.provider!);\n\n // Check if action was successful (not cancelled or failed)\n if (result?.success === false || result === null) {\n // Action was cancelled or failed - prevent the drop\n event.canceled = true;\n return;\n }\n\n // Action succeeded - allow the drop to proceed\n // The kanban will handle the visual move, and onSortChanged will sync with backend\n } catch (error) {\n console.error('[KanbanDrop] Failed to execute action during drop:', error);\n // On error, prevent the drop to be safe\n event.canceled = true;\n }\n }\n\n /**\n * Finds an action that corresponds to the target status.\n * Matches actions by name patterns (e.g., \"approve\" action for \"approved\" status).\n */\n private findActionForStatus(\n actions: AXPTaskActionMenuItem[],\n targetStatus: string | number,\n ): AXPTaskActionMenuItem | null {\n const targetStatusStr = String(targetStatus).toLowerCase();\n\n // Common status-to-action mappings\n const statusActionMap: Record<string, string[]> = {\n approved: ['approve'],\n rejected: ['reject'],\n cancelled: ['cancel'],\n completed: ['complete', 'finish'],\n done: ['complete', 'finish'],\n inprogress: ['start', 'begin'],\n 'in-progress': ['start', 'begin'],\n blocked: ['block'],\n unblocked: ['unblock'],\n };\n\n // Check direct mappings first\n const possibleActionNames = statusActionMap[targetStatusStr] || [];\n for (const actionName of possibleActionNames) {\n const action = actions.find((a) => a.name?.toLowerCase().includes(actionName));\n if (action) {\n return action;\n }\n }\n\n // Try to find action by name containing status keywords\n const statusKeywords = targetStatusStr.split(/[-_\\s]+/);\n for (const keyword of statusKeywords) {\n if (keyword.length < 3) continue; // Skip very short keywords\n\n const action = actions.find((a) => {\n const actionName = a.name?.toLowerCase() || '';\n return actionName.includes(keyword) || keyword.includes(actionName);\n });\n\n if (action) {\n return action;\n }\n }\n\n // Try exact match with action name\n const exactMatch = actions.find((a) => a.name?.toLowerCase() === targetStatusStr);\n if (exactMatch) {\n return exactMatch;\n }\n\n // Try partial match (status contains action name or vice versa)\n for (const action of actions) {\n const actionName = action.name?.toLowerCase() || '';\n if (targetStatusStr.includes(actionName) || actionName.includes(targetStatusStr)) {\n return action;\n }\n }\n\n return null;\n }\n\n //#endregion\n\n protected onSortChanged(event: AXKanbanSortEvent) {\n const tasks = this.tasks().map((item) => {\n const task: AXKanbanItem | undefined = event.allItems.find((t) => t.id === item.id);\n if (!task) {\n return item;\n }\n\n const status = this.statuses().find((s) => String(s.key) === String(task.statusKey));\n if (!status) {\n return { ...item, index: task.index ?? item.index };\n }\n\n return {\n ...item,\n index: task.index ?? item.index,\n status: { id: status.key, title: status.title },\n };\n });\n\n this.taskBoardService\n .updateTasks(tasks)\n .then((updatedTasks) => {\n this.tasks.set(updatedTasks);\n })\n .catch((error) => {\n console.error('[KanbanSort] Failed to update tasks:', error);\n const provider = tasks[0]?.provider;\n if (provider) {\n this.taskBoardService.requestRefresh(provider);\n }\n });\n }\n\n protected async handleItemClick(event: AXKanbanMouseEvent): Promise<void> {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (!task) return;\n\n // Find the kanban item container element\n let targetElement = (event.nativeEvent.currentTarget as HTMLElement) || (event.nativeEvent.target as HTMLElement);\n\n // Traverse up to find the kanban item container\n let element = targetElement;\n const maxDepth = 10;\n let depth = 0;\n\n while (element && element !== document.body && depth < maxDepth) {\n depth++;\n\n const isKanbanItem =\n element.classList?.contains('dx-kanban-item') ||\n element.classList?.contains('ax-kanban-item') ||\n element.hasAttribute('data-item-id');\n\n if (isKanbanItem) {\n targetElement = element;\n break;\n }\n\n element = element.parentElement as HTMLElement;\n }\n\n if (targetElement) {\n await this.taskPopoverOverlay.open({\n task,\n anchor: targetElement,\n offsetX: 12,\n offsetY: 12,\n adaptivityEnabled: true,\n });\n }\n\n this.onTaskClick.emit(task);\n }\n\n protected handleActionClick(event: AXKanbanMouseEvent) {\n const task = this.stableTasks().find((task) => task.id === event.item.id);\n if (task) {\n this.onActionClick.emit({ nativeEvent: event.nativeEvent, task: task });\n }\n }\n\n private async refreshPopoverData(): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n\n const provider = this.taskBoardService.getProvider(active.provider);\n if (!provider) {\n return;\n }\n\n try {\n const result = await provider.getTasks();\n const updatedTasks = result.items.map((t) => ({ ...t, provider: active.provider }));\n const updatedMap = new Map(updatedTasks.map((t) => [t.id, t]));\n\n const currentTasks = this.tasks();\n const mergedTasks = currentTasks.map((t) => updatedMap.get(t.id) ?? t);\n const existingIds = new Set(currentTasks.map((t) => t.id));\n const newTasks = updatedTasks.filter((t) => !existingIds.has(t.id));\n this.tasks.set([...mergedTasks, ...newTasks]);\n\n const updatedSelectedTask = updatedMap.get(active.id);\n if (updatedSelectedTask) {\n await this.taskPopoverOverlay.refreshTask({ ...updatedSelectedTask, provider: active.provider });\n }\n } catch (error) {\n console.error('[TaskPopover] Failed to refresh popover data:', error);\n }\n }\n}\n","<ax-kanban\n [statuses]=\"statuses()\"\n [dataSource]=\"kanbanTasks()\"\n (onItemClick)=\"handleItemClick($event)\"\n (onBeforeDrop)=\"onBeforeDrop($event)\"\n (onSortChanged)=\"onSortChanged($event)\"\n></ax-kanban>\n","import { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXKanbanStatus } from '@acorex/components/kanban';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslatorPipe } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH,\n TASK_BOARD_GRID_ROW_ACTION_ITEMS,\n} from '../../task-board-grid-row-actions';\nimport { AXMTaskBoardTaskPopoverOverlayService } from '../../task-board-task-popover-overlay.service';\nimport { AXPTaskBoardService } from '../../task-board.service';\nimport { AXPExtraField, AXPTask, AXPTaskFilter, AXPWorkflowTaskProvider } from '../../task-board.types';\nimport { AXMTaskBoardViewModel } from '../../task-board.viewmodel';\n\ninterface StatusTaskGroup {\n statusInfo: AXKanbanStatus;\n tasks: AXDataSource<any>;\n}\n\nfunction statusGroupTrackKey(nonce: number, group: StatusTaskGroup): string {\n return `${nonce}:${String(group.statusInfo.key)}`;\n}\n\nfunction taskMatchesStatus(task: AXPTask, status: AXKanbanStatus): boolean {\n return String(task.status.id) === String(status.key);\n}\n\n@Component({\n selector: 'axm-task-board-status-grouped-grid-view',\n templateUrl: './task-board-status-grouped-grid-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXDataTableModule, AXTranslatorPipe, AsyncPipe, AXPWidgetCoreModule],\n})\nexport class AXMTaskBoardStatusGroupedGridViewComponent {\n protected readonly vm = inject(AXMTaskBoardViewModel);\n protected readonly localeService = inject(AXLocaleService);\n protected readonly calendarService = inject(AXCalendarService);\n protected readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(AXMTaskBoardTaskPopoverOverlayService);\n private readonly destroyRef = inject(DestroyRef);\n\n provider = input<AXPWorkflowTaskProvider>();\n dataSource = input.required<(filter?: AXPTaskFilter) => Promise<{ items: AXPTask[]; total: number }>>();\n refreshNonce = input<number>(0);\n\n onTaskClick = output<AXPTask>();\n\n groupedTasks = signal<StatusTaskGroup[]>([]);\n private allFetchedTasks = signal<AXPTask[]>([]);\n protected columns = signal<AXPExtraField[]>([]);\n protected statuses = signal<AXKanbanStatus[]>([]);\n protected grids = viewChildren<AXDataTableComponent>('grid');\n\n protected readonly taskRowCommandWidth = TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH;\n protected readonly taskRowCommandItems = TASK_BOARD_GRID_ROW_ACTION_ITEMS;\n\n protected trackStatusGroup = (_index: number, group: StatusTaskGroup) =>\n statusGroupTrackKey(this.refreshNonce(), group);\n\n protected groupedViewRemountKeys = computed(() => [this.refreshNonce()]);\n\n constructor() {\n afterNextRender(() => {\n untracked(() => {\n setTimeout(() => {\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 200);\n });\n });\n\n this.taskBoardService.close$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data) => {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (!active?.provider) {\n return;\n }\n if (data.provider && data.provider !== active.provider) {\n return;\n }\n this.taskPopoverOverlay.close();\n });\n }\n\n #dataChanged = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.currentDate();\n this.vm.daysCount();\n this.vm.currentViewMode();\n this.refreshNonce();\n const allStatuses = this.statuses();\n\n const parentDataSource = this.dataSource();\n if (!parentDataSource || allStatuses.length === 0) {\n this.groupedTasks.set([]);\n this.allFetchedTasks.set([]);\n return;\n }\n\n void parentDataSource().then((result) => {\n this.allFetchedTasks.set(result.items);\n const allTasks = result.items;\n\n const statusGroups = allStatuses.map((status) => {\n const tasksForStatus = allTasks.filter((task) => taskMatchesStatus(task, status));\n return {\n statusInfo: status,\n tasks: this.createTaskDataSourceForGroup(tasksForStatus),\n };\n });\n\n this.groupedTasks.set(statusGroups);\n untracked(() => {\n setTimeout(() => {\n this.groupedTasks()?.forEach((group) => {\n group.tasks.refresh();\n });\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 0);\n });\n });\n });\n\n #providerChanged = effect(async () => {\n const provider = this.vm.selectedTaskTypes()[0];\n provider?.getExtraFields().then((extraFields) => {\n if (extraFields) {\n this.columns.set(extraFields);\n }\n });\n provider?.getStatuses().then((statuses) => {\n if (statuses) {\n this.statuses.set(statuses);\n }\n });\n });\n\n #gridsChanged = effect(() => {\n const groups = this.groupedTasks();\n untracked(() => {\n setTimeout(() => {\n this.grids().forEach((grid) => {\n grid.refresh({ reset: true });\n });\n }, 100);\n });\n });\n\n private createTaskDataSourceForGroup(tasks: AXPTask[]): AXDataSource<any> {\n return new AXDataSource<any>({\n load: async (e) => {\n const items = tasks.map((task) => ({\n id: task.id,\n data: task.data,\n title: task.title,\n priority: task.priority,\n description: task.description,\n reporter: task.reporter.fullName ?? '-',\n assignee: task.assignee?.fullName ?? 'unassigned',\n endDate: this.calendarService.format(task.endDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n startDate: this.calendarService.format(task.startDate, 'DD/MM/YYYY HH:mm', {\n locale: this.localeService.activeProfile().calendar.system,\n }),\n _originalTask: task,\n }));\n return {\n items: items.slice(e.skip, e.skip + e.take),\n total: items.length,\n };\n },\n pageSize: 5,\n key: 'id',\n byKey: async (key: unknown) => {\n return tasks.find((task) => task.id === key);\n },\n });\n }\n\n protected handleRowClick(event: AXDataTableRowClick): void {\n if (!event.data) {\n return;\n }\n const mappedItem = event.data as { id?: string | number; _originalTask?: AXPTask };\n const originalTask = mappedItem._originalTask ?? this.allFetchedTasks().find((task) => task.id === mappedItem.id);\n if (originalTask) {\n this.onTaskClick.emit(originalTask);\n }\n }\n\n protected handleTaskCommandClick(event: AXRowCommandItemClickEvent): void {\n if (event.name !== 'view') {\n return;\n }\n\n event.nativeEvent?.stopPropagation();\n\n const mappedItem = event.data as { _originalTask?: AXPTask; id?: string | number };\n const task = mappedItem._originalTask ?? this.allFetchedTasks().find((t) => t.id === mappedItem.id);\n if (!task) {\n return;\n }\n\n const anchor = this.taskPopoverOverlay.resolveAnchorFromCommandClick(event);\n if (!anchor) {\n return;\n }\n\n setTimeout(() => {\n void this.taskPopoverOverlay.open({\n task,\n anchor,\n placement: 'bottom-start',\n adaptivityEnabled: false,\n autoFlip: true,\n });\n }, 0);\n }\n}\n","@for (remountKey of groupedViewRemountKeys(); track remountKey) {\n @for (group of groupedTasks(); track trackStatusGroup($index, group)) {\n <h1 class=\"ax-text-xl ax-font-bold\">{{ group.statusInfo.title }}</h1>\n <ax-data-table\n #grid\n class=\"ax-h-[300px]\"\n [fetchDataMode]=\"'manual'\"\n [dataSource]=\"group.tasks\"\n [loading]=\"{ enabled: true, animation: true }\"\n (onRowClick)=\"handleRowClick($event)\"\n >\n <ax-text-column\n dataField=\"title\"\n [caption]=\"('@task-management:task-board.grid-headers.title' | translate | async)!\"\n [width]=\"'350px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"description\"\n [caption]=\"('@task-management:task-board.grid-headers.description' | translate | async)!\"\n [width]=\"'500px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"startDate\"\n [caption]=\"('@task-management:task-board.grid-headers.start-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"endDate\"\n [caption]=\"('@task-management:task-board.grid-headers.due-date' | translate | async)!\"\n [width]=\"'150px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"priority\"\n [caption]=\"('@task-management:task-board.grid-headers.priority' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"reporter\"\n [caption]=\"('@task-management:task-board.grid-headers.reporter' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n <ax-text-column\n dataField=\"assignee\"\n [caption]=\"('@task-management:task-board.grid-headers.assignee' | translate | async)!\"\n [width]=\"'125px'\"\n ></ax-text-column>\n\n <ax-command-column\n fixed=\"end\"\n [width]=\"taskRowCommandWidth\"\n [items]=\"taskRowCommandItems\"\n (onItemClick)=\"handleTaskCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n }\n}\n","import { AXStyleColorType, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCalendarComponent, AXCalendarSlotClick } from '@acorex/components/calendar';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXSchedulerAppointment, AXSchedulerAppointmentDataSource, AXSchedulerComponent } from '@acorex/components/scheduler';\nimport { AXCalendarService, AXDateTime } from '@acorex/core/date-time';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport {\n AXPActionMenuItem,\n AXPBreadcrumbItem,\n AXPDataSourceDefinitionProviderService,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPFilterDefinition,\n AXPFilterQuery,\n AXPKeyboardShortcutPriority,\n AXPKeyboardShortcutRegistry,\n getActionButton,\n} from '@acorex/platform/core';\nimport {\n AXPSettingsService,\n type AXPDateTimeFilterValue,\n} from '@acorex/platform/common';\nimport {\n AXPQueryFiltersComponent,\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n AXPThemeLayoutBlockComponent,\n type AXPLayoutSideDetailPanelHeader,\n type AXPLayoutSideDetailPanelSection,\n} from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n HostListener,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Params, Router, RouterModule } from '@angular/router';\nimport { isEqual, sortBy } from 'lodash-es';\nimport { filter } from 'rxjs';\nimport { AXMSecurityManagementDataSourceKeys } from '@acorex/modules/security-management';\nimport { AXMTaskManagementDataSourceKeys } from '../../contracts/datasource.keys';\nimport { RootConfig } from '../../const';\nimport {\n canViewAllTaskAssignees,\n normalizeTaskBoardAssigneeIds,\n resolveTaskBoardSavedAssigneeIds,\n} from './task-board-assignee-access';\nimport { AXMTaskBoardContentSkeletonComponent } from './task-board-content-skeleton/task-board-content-skeleton.component';\nimport { AXMTaskBoardDetailPanel } from './task-board-detail-panel/task-board-detail-panel.component';\nimport { filterTasksOverlappingRange } from './task-board-range.utils';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { enrichTaskBoardTasks, resolveTaskBoardSchedulerLabels } from './task-board-task-enrichment.utils';\nimport {\n normalizeDueStatusFilterKeys,\n normalizeTaskBoardPriorityFilterKeys,\n normalizeTaskTypeFilterNames,\n} from './task-board-filter.utils';\nimport { AXPDueStatusFilterKey, AXPDueStatusProviderService } from './due-status';\nimport { AXPResource, AXPTask, AXPTaskAction, AXPTaskBoardColorBy, AXPTaskFilter } from './task-board.types';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport {\n applyTaskBoardDateRangeToViewModel,\n deriveTaskBoardDateRangeFromNavigator,\n getTaskBoardLayoutOptions,\n isTaskBoardRangeFilterCategory,\n resolveTaskBoardCategoryLayoutFromQuery,\n usesTaskBoardToolbarNavigator,\n type AXPTaskBoardViewLayout,\n} from './task-board-view-category.utils';\nimport { AXMTaskBoardViewModel, AXPPriorityFilterKey, AXPTaskBoardViewMode } from './task-board.viewmodel';\nimport { AXMTaskBoardCalendarViewComponent } from './views/task-board-calendar-view/task-board-calendar-view.component';\nimport { AXMTaskBoardGridViewComponent } from './views/task-board-grid-view/task-board-grid-view.component';\nimport { AXMTaskBoardKanbanViewComponent } from './views/task-board-kanban-view/task-board-kanban-view.component';\nimport { AXMTaskBoardStatusGroupedGridViewComponent } from './views/task-board-status-grouped-grid-view/task-board-status-grouped-grid-view.component';\n\nexport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\n\n@Component({\n templateUrl: './task-board.page.html',\n styleUrls: ['./task-board.page.scss'],\n imports: [\n FormsModule,\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n //\n AXPThemeLayoutBlockComponent,\n AXPPageLayoutComponent,\n AXPQueryFiltersComponent,\n AXMTaskBoardContentSkeletonComponent,\n AXMTaskBoardCalendarViewComponent,\n AXMTaskBoardKanbanViewComponent,\n AXMTaskBoardGridViewComponent,\n AXMTaskBoardStatusGroupedGridViewComponent,\n AXMTaskBoardDetailPanel,\n AXPopoverModule,\n AXCalendarComponent,\n AXSelectionListModule,\n AXPLayoutSideDetailPanelComponent,\n AXPLayoutSideDetailPanelSectionDirective,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMTaskBoardPage,\n },\n ],\n})\nexport class AXMTaskBoardPage extends AXPPageLayoutBaseComponent implements OnInit {\n private readonly router = inject(Router);\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n protected readonly vm = inject(AXMTaskBoardViewModel);\n private readonly unsubscribe = inject(AXUnsubscriber);\n private readonly activatedRoute = inject(ActivatedRoute);\n private readonly localeService = inject(AXLocaleService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n private readonly destroyRef = inject(DestroyRef);\n private readonly dueStatusProviderService = inject(AXPDueStatusProviderService);\n private readonly dataSourceDefinitionService = inject(AXPDataSourceDefinitionProviderService);\n private readonly translationService = inject(AXTranslationService);\n\n private readonly sessionUser = toSignal(this.sessionService.user$, { initialValue: null });\n private readonly sessionPermissions = toSignal(this.sessionService.permissions$, { initialValue: [] as string[] });\n\n private readonly activeCalendar = toSignal(this.calendarService.calendarChanges$, {\n initialValue: this.calendarService.getActiveCalendar(),\n });\n\n private readonly profileChanged = toSignal(this.localeService.profileChanged$, {\n initialValue: this.localeService.activeProfile(),\n });\n\n private navigatorTimeTextVersion = 0;\n\n private static readonly PRIORITY_OPTIONS: { title: string; name: AXPPriorityFilterKey }[] = [\n { title: 'Urgent', name: 'urgent' },\n { title: 'High', name: 'high' },\n { title: 'Normal', name: 'normal' },\n { title: 'Low', name: 'low' },\n { title: 'No Priority', name: 'no_priority' },\n ];\n\n private static readonly DUE_STATUS_OPTIONS: { title: string; name: AXPDueStatusFilterKey }[] = [\n { title: 'Completed', name: 'completed' },\n { title: 'No due date', name: 'no-due-date' },\n { title: 'Overdue', name: 'overdue' },\n { title: 'Due today', name: 'due-today' },\n { title: 'Due tomorrow', name: 'due-tomorrow' },\n { title: 'Due this week', name: 'due-this-week' },\n { title: 'Upcoming', name: 'upcoming' },\n ];\n\n protected readonly colorByItems: { key: AXPTaskBoardColorBy; titleKey: string }[] = [\n { key: 'dueDate', titleKey: '@task-management:task-board.color-by.due-date' },\n { key: 'priority', titleKey: '@task-management:task-board.color-by.priority' },\n { key: 'status', titleKey: '@task-management:task-board.color-by.status' },\n ];\n\n protected popover = viewChild<AXPopoverComponent>('popover');\n protected calendar = viewChild<AXCalendarComponent>('calendar');\n\n protected isReady = signal(false);\n protected isSettingsPanelOpen = signal(false);\n protected readonly settingsPanelCopy = signal({\n title: '',\n colorBy: '',\n calendars: '',\n });\n protected filtersReady = signal(false);\n protected calendarEventTypes = signal<Array<{ id: string; title: string; color?: string; icon?: string }>>([]);\n protected resources = signal<AXPResource[]>([]);\n protected isQueryParam = signal<boolean>(false);\n protected refreshNonce = signal(0);\n protected navigatorTimeText = signal('');\n protected panelInitialFilters = signal<AXPFilterQuery[]>([]);\n private currentTask = signal<AXPTask | null>(null);\n protected schedulerComponent = signal<AXSchedulerComponent | null>(null);\n private kanbanLoadVersion = 0;\n private filtersPanelInitialized = false;\n private lastLocaleProfileCode: string | null = null;\n\n /** Ctrl enables range selection in kanban/table navigator popover calendars. */\n protected readonly navigatorRangeSelectActive = signal(false);\n\n /** True after a plain (non-Ctrl) single-day click in the navigator calendar. */\n private navigatorPlainSingleDaySelected = false;\n\n private readonly modifierRangeBasedViews: AXPTaskBoardViewMode[] = ['grid', 'kanban', 'status-grouped-grid'];\n\n private readonly alwaysRangeBasedViews: AXPTaskBoardViewMode[] = ['agenda', 'timeline-weekly'];\n\n private dayDataCache = signal<Map<string, number>>(new Map());\n\n protected readonly showToolbarNavigator = computed(() =>\n usesTaskBoardToolbarNavigator(this.vm.currentViewMode()),\n );\n\n protected readonly showViewLayoutSwitcher = computed(\n () => getTaskBoardLayoutOptions(this.vm.currentViewCategory()).length > 0,\n );\n\n protected readonly viewLayoutItems = computed(() => getTaskBoardLayoutOptions(this.vm.currentViewCategory()));\n\n protected readonly selectedViewLayout = computed(() => this.vm.getLayoutForCategory(this.vm.currentViewCategory()));\n\n protected readonly selectedViewLayoutTitleKey = computed(() => {\n const selectedLayout = this.selectedViewLayout();\n const item = this.viewLayoutItems().find((option) => option.key === selectedLayout);\n return item ? this.viewLayoutTranslationKey(item.text) : '';\n });\n\n protected readonly selectedViewLayoutIcon = computed(() => {\n const selectedLayout = this.selectedViewLayout();\n const item = this.viewLayoutItems().find((option) => option.key === selectedLayout);\n return item?.icon ?? 'fa-light fa-sliders';\n });\n\n protected readonly effectiveColorBy = computed(() => this.vm.effectiveColorBy());\n\n protected readonly settingsPanelHeader = computed(\n (): AXPLayoutSideDetailPanelHeader => ({\n primaryTitle: this.settingsPanelCopy().title,\n icon: {\n iconClass: 'fa-fw fa-lg fa-light fa-gear',\n },\n }),\n );\n\n protected readonly settingsPanelSections = computed((): AXPLayoutSideDetailPanelSection[] => {\n const copy = this.settingsPanelCopy();\n const sections: AXPLayoutSideDetailPanelSection[] = [\n { title: copy.colorBy, projectionKey: 'colorBy' },\n ];\n\n if (this.showCalendarEventButton()) {\n sections.push({ title: copy.calendars, projectionKey: 'calendars' });\n }\n\n return sections;\n });\n\n private readonly settingsPanelI18nEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n void this.loadSettingsPanelCopy();\n });\n\n /** Resolves navigator date label asynchronously so month names react to locale/profile changes. */\n private readonly navigatorTimeTextEffect = effect(() => {\n this.profileChanged();\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.calendarType();\n this.refreshNonce();\n\n const version = ++this.navigatorTimeTextVersion;\n\n untracked(() => {\n void this.resolveNavigatorTimeText().then((text) => {\n if (version === this.navigatorTimeTextVersion) {\n this.navigatorTimeText.set(text);\n }\n });\n });\n });\n\n /** Re-render navigator calendar when regional week layout changes. */\n private readonly navigatorCalendarLayoutEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n this.calendarService.getActiveCalendar()?.weekdays;\n this.calendarType();\n\n untracked(() => {\n queueMicrotask(() => {\n this.calendar()?.render();\n });\n });\n });\n\n private readonly canFilterByAllAssignees = computed(() => {\n this.sessionUser();\n this.sessionPermissions();\n return canViewAllTaskAssignees(this.sessionService);\n });\n\n protected readonly calendarEventTypeItems = computed(() =>\n this.calendarEventTypes().map((eventType) => ({\n id: eventType.id,\n text: eventType.title,\n icon: eventType.icon,\n })),\n );\n\n protected readonly showCalendarEventButton = computed(\n () => !this.isNonCalendarView() && this.calendarEventTypeItems().length > 0,\n );\n\n protected readonly selectedCalendarEventTypeCount = computed(\n () => this.vm.selectedCalendarEventTypeIds().length,\n );\n\n protected readonly filterDefinitions = computed<AXPFilterDefinition[]>(() => {\n const canFilterByAll = this.canFilterByAllAssignees();\n const assigneeScopeKey = `${this.sessionUser()?.id ?? ''}:${canFilterByAll}`;\n const isMultiTaskType = this.isMultiSelectTaskTypeEnabled();\n\n return [\n {\n field: 'type',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.task-type',\n icon: 'fa-light fa-list',\n widget: {\n type: 'select-filter',\n options: {\n dataSource: AXMTaskManagementDataSourceKeys.TaskTypes,\n valueField: 'name',\n textField: 'title',\n multiple: isMultiTaskType,\n allowClear: isMultiTaskType,\n },\n },\n filterType: { advance: true, inline: false },\n },\n {\n field: 'assignee',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.assignee',\n icon: 'fa-light fa-user',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'id',\n textField: 'displayName',\n allowSearch: canFilterByAll,\n allowClear: canFilterByAll,\n readonly: !canFilterByAll,\n dataSource: AXMTaskManagementDataSourceKeys.TaskBoardAssignees,\n assigneeScopeKey,\n },\n },\n filterType: { advance: true, inline: false },\n },\n {\n field: 'reporter',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.reporter',\n icon: 'fa-light fa-user-pen',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'id',\n textField: 'displayName',\n allowSearch: true,\n dataSource: AXMSecurityManagementDataSourceKeys.Users,\n },\n },\n filterType: { advance: true, inline: false },\n },\n {\n field: 'priority',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.priority',\n icon: 'fa-light fa-flag',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'name',\n textField: 'title',\n dataSource: AXMTaskBoardPage.PRIORITY_OPTIONS,\n },\n },\n filterType: { advance: true, inline: false },\n },\n {\n field: 'dueStatus',\n operator: { type: 'equal' },\n title: '@task-management:task-board.filter.due-status',\n icon: 'fa-light fa-calendar-clock',\n widget: {\n type: 'select-filter',\n options: {\n multiple: true,\n valueField: 'name',\n textField: 'title',\n dataSource: AXMTaskBoardPage.DUE_STATUS_OPTIONS,\n },\n },\n filterType: { advance: true, inline: false },\n },\n ];\n });\n\n /** Re-scope assignee filter when user or permissions change. */\n private readonly assigneeScopeEffect = effect(() => {\n this.sessionUser();\n this.sessionPermissions();\n\n if (this.vm.isLoading()) {\n return;\n }\n\n const resolvedAssigneeIds = this.vm.assigneeFilterHasSavedPreference()\n ? this.vm.selectedAssigneeIds()\n : resolveTaskBoardSavedAssigneeIds(this.sessionService, null);\n const scopedIds = normalizeTaskBoardAssigneeIds(this.sessionService, resolvedAssigneeIds);\n const assigneeIdsChanged = !isEqual(sortBy(this.vm.selectedAssigneeIds()), sortBy(scopedIds));\n if (assigneeIdsChanged) {\n this.vm.setSelectedAssigneeIds(scopedIds, this.isQueryParam(), false);\n }\n\n if (this.filtersPanelInitialized && assigneeIdsChanged) {\n untracked(() => void this.syncPanelInitialFilters());\n }\n });\n\n protected calendarType = computed(\n () => this.activeCalendar()?.name() ?? this.localeService.activeProfile().calendar.system,\n );\n\n protected todayButtonTextKey = computed(() => {\n switch (this.vm.currentViewMode()) {\n case 'week':\n return '@task-management:task-board.navigator.current-week';\n case 'month':\n case 'timeline-month':\n return '@task-management:task-board.navigator.current-month';\n case 'timeline-year':\n return '@task-management:task-board.navigator.current-year';\n default:\n return '@task-management:task-board.navigator.today';\n }\n });\n protected calendarDepth = computed(() => {\n if (\n this.vm.currentViewMode() === 'grid' ||\n this.vm.currentViewMode() === 'kanban' ||\n this.vm.currentViewMode() === 'status-grouped-grid'\n ) {\n return 'day';\n }\n return this.schedulerComponent()?.calendarDepth() || 'day';\n });\n\n protected currentDateForCalendar = computed(() => {\n const pendingRangeStart = this.vm.rangeStartDate();\n if (pendingRangeStart && this.isModifierRangeNavigatorView()) {\n return pendingRangeStart;\n }\n const date = this.vm.currentDate();\n return date || new Date();\n });\n protected filter = computed<AXPTaskFilter>(() => {\n const taskTypeNames = this.vm.selectedTaskTypeNames();\n const assigneeIds = this.vm.selectedAssigneeIds();\n const reporterIds = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n const dueStatusKeys = this.vm.selectedDueStatusKeys();\n\n const currentDate = this.vm.currentDate() || new Date();\n let from: AXDateTime = this.calendarService.create(currentDate, this.localeService.activeProfile().calendar.system);\n let end: AXDateTime;\n\n const currentView = this.vm.currentViewMode();\n\n if (\n currentView === 'grid' ||\n currentView === 'kanban' ||\n currentView === 'agenda' ||\n currentView === 'timeline-weekly' ||\n currentView === 'status-grouped-grid'\n ) {\n end = from.add('day', this.vm.daysCount() - 1);\n } else if (currentView === 'month' || currentView === 'timeline-month') {\n from = from.startOf('month');\n end = from.endOf('month');\n } else {\n end = from.endOf('day');\n }\n\n return {\n // Empty filter means \"all items\" for task type/provider.\n ...(taskTypeNames.length > 0 && { types: taskTypeNames }),\n ...(assigneeIds.length > 0 && { assigneeIds }),\n ...(reporterIds.length > 0 && { reporterIds }),\n ...(priorities.length > 0 && { priorities }),\n ...(dueStatusKeys.length > 0 && { dueStatusKeys }),\n range: { from: from.date, end: end.date },\n };\n });\n\n private enrichTasks(tasks: AXPTask[]): AXPTask[] {\n return enrichTaskBoardTasks(tasks, this.vm.effectiveColorBy(), this.dueStatusProviderService);\n }\n\n private async enrichTasksForViews(tasks: AXPTask[]): Promise<AXPTask[]> {\n const labeled = await resolveTaskBoardSchedulerLabels(\n tasks,\n this.translateService,\n this.formatService,\n this.settingsService,\n );\n return this.enrichTasks(labeled);\n }\n\n private contextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n\n override async ngOnInit() {\n await super.ngOnInit();\n\n this.taskBoardService.refresh$.subscribe(async () => {\n await this.reloadTaskBoardData();\n });\n\n this.taskBoardService.clearProviderCache();\n await this.vm.initialize();\n\n const calendars = await this.loadCalendarFilterOptions();\n\n await this.loadFromRoute();\n\n if (this.activatedRoute.snapshot.queryParamMap.has('calendarEvent')) {\n void this.router.navigate([], {\n queryParams: { calendarEvent: null },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n\n if (this.vm.selectedCalendarEventTypeIds().length === 0 && calendars.length > 0) {\n this.vm.setSelectedCalendarEventTypeIds(calendars.map((calendar) => calendar.id));\n }\n\n this.filtersReady.set(true);\n this.isReady.set(true);\n this.registerKeyboardShortcuts();\n await this.reloadTaskBoardData();\n await this.updateDayDataCache();\n\n this.router.events\n .pipe(\n this.unsubscribe.takeUntilDestroy,\n filter((event) => event instanceof NavigationEnd),\n )\n .subscribe(() => {\n void this.loadFromRoute();\n });\n\n this.taskBoardService.openTask$.subscribe(async ({ task, provider, instanceId, activityId }) => {\n await this.taskResolveHandler();\n let match = task;\n if (!match && instanceId && activityId) {\n match = this.resolvedTasks().find((t) => {\n const data = t.data as { instanceId?: string; activityId?: string } | undefined;\n return data?.instanceId === instanceId && data?.activityId === activityId;\n });\n }\n if (!match) {\n return;\n }\n this.vm.selectTask({\n ...match,\n provider: match.provider ?? provider,\n });\n });\n }\n override async getPageTitle(): Promise<string> {\n const category = this.vm.currentViewCategory();\n const layout = this.vm.getLayoutForCategory(category);\n return await this.translateService.translateAsync(this.viewPageTitleTranslationKey(category, layout));\n }\n\n protected override getTitleActions(): AXPActionMenuItem[] {\n const currentCategory = this.vm.currentViewCategory();\n return this.vm.visibleViewCategories().map((category) => ({\n title: this.viewCategoryTranslationKey(category),\n icon: currentCategory === category ? 'fa-check' : '',\n command: {\n name: 'task-board-category',\n metadata: { category, isSelected: currentCategory === category, hideSelectionCheckSuffix: true },\n },\n }));\n }\n\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [\n {\n title: await this.translateService.translateAsync('@task-management:task-board.page-title'),\n },\n ];\n }\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n // {\n // ...getActionButton('refresh'),\n // command: { name: 'refresh' },\n // },\n ];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n if (command.name === 'task-board-category') {\n const category = command.metadata?.['category'] as AXPTaskBoardViewCategory | undefined;\n if (category) {\n this.applyViewCategory(category);\n }\n return;\n }\n // if (command.name === 'refresh') {\n // this.taskBoardService.requestRefresh();\n // }\n }\n\n protected schedulerDataSource: AXSchedulerAppointmentDataSource = (schedulerFilter) => {\n const pageFilter = this.filter();\n const visibleRange = schedulerFilter?.range ?? pageFilter.range;\n const finalFilter: AXPTaskFilter = {\n ...pageFilter,\n ...schedulerFilter,\n range: visibleRange,\n };\n\n return this.taskBoardService.getTasks(finalFilter).then(async (result) => {\n const items = await this.enrichTasksForViews(filterTasksOverlappingRange(result.items, visibleRange));\n this.validateSelectedTask(items);\n return items as AXSchedulerAppointment[];\n });\n };\n\n protected gridDataSource = (filter?: AXPTaskFilter): Promise<{ items: AXPTask[]; total: number }> => {\n const finalFilter: AXPTaskFilter = { ...this.filter(), ...filter };\n\n return this.taskBoardService.getTasks(finalFilter).then(async (result) => {\n const items = await this.enrichTasksForViews(result.items);\n this.validateSelectedTask(items);\n return { items, total: result.total };\n });\n };\n\n resolvedTasks = signal<AXPTask[]>([]);\n\n /** Loads kanban tasks when filters or date range change; ignores stale async results. */\n private readonly kanbanDataEffect = effect(() => {\n if (this.vm.currentViewMode() !== 'kanban') {\n return;\n }\n\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.selectedDueStatusKeys();\n this.vm.effectiveColorBy();\n this.vm.currentDate();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.refreshNonce();\n\n const filter = this.filter();\n const version = ++this.kanbanLoadVersion;\n\n void this.taskBoardService.getTasks(filter).then(async (result) => {\n if (version !== this.kanbanLoadVersion) {\n return;\n }\n this.validateSelectedTask(result.items);\n this.resolvedTasks.set(await this.enrichTasksForViews(result.items));\n });\n });\n\n /** Keeps scheduler in sync when toolbar date/view changes outside the scheduler UI. */\n private readonly schedulerNavigationEffect = effect(() => {\n const viewMode = this.vm.currentViewMode();\n const calendarViews: AXPTaskBoardViewMode[] = [\n 'day',\n 'week',\n 'month',\n 'agenda',\n 'timeline-day',\n 'timeline-weekly',\n 'timeline-month',\n 'timeline-year',\n ];\n if (!calendarViews.includes(viewMode)) {\n return;\n }\n\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.daysCount();\n this.refreshNonce();\n\n queueMicrotask(() => {\n this.schedulerComponent()?.refresh();\n });\n });\n\n private async taskResolveHandler(filter: AXPTaskFilter = this.filter()) {\n const result = await this.taskBoardService.getTasks(filter);\n const items = await this.enrichTasksForViews(result.items);\n this.validateSelectedTask(items);\n this.resolvedTasks.set(items);\n }\n\n private async reloadTaskBoardData(): Promise<void> {\n this.taskBoardService.clearProviderCache();\n await this.vm.reloadTaskTypes();\n if (this.filtersPanelInitialized) {\n await this.syncPanelInitialFilters();\n }\n await this.taskResolveHandler();\n await this.getResources();\n this.refreshNonce.update((value) => value + 1);\n this.schedulerComponent()?.refresh();\n }\n\n schedulerComponentChanged(component: AXSchedulerComponent) {\n this.schedulerComponent.set(component);\n queueMicrotask(() => {\n component.refresh();\n });\n }\n\n protected async handleContextMenuOnOpening(event: AXContextMenuOpeningEvent) {\n const currentTask = this.currentTask();\n if (!currentTask) return;\n const providerName = currentTask.provider;\n if (!providerName) return;\n const provider = this.taskBoardService.getProvider(providerName);\n if (!provider) return;\n const actions = await provider.getActions(currentTask);\n for (const item of actions) {\n const t = item.title;\n const text =\n typeof t === 'string'\n ? t.startsWith('@')\n ? await this.translateService.translateAsync(t)\n : t\n : this.translateService.resolve(t);\n event.items.push({\n text,\n icon: item.icon,\n color: item.color as AXStyleColorType,\n break: item.break,\n data: {\n command: item.command,\n },\n });\n }\n }\n\n protected handleContextMenu(event: AXPTaskAction) {\n this.currentTask.set(event.task);\n const x = event.nativeEvent.clientX;\n const y = event.nativeEvent.clientY;\n const element = event.nativeEvent.target as HTMLElement;\n this.contextMenu()?.showAt({ x, y }, element);\n }\n\n protected handleMonthSlotDblClicked(date: Date) {\n this.vm.setCurrentDate(date);\n this.vm.setViewLayout('calendar', 'daily');\n }\n\n private viewCategoryTranslationKey(category: AXPTaskBoardViewCategory): string {\n return `@task-management:task-board.${category}`;\n }\n\n private viewPageTitleTranslationKey(\n category: AXPTaskBoardViewCategory,\n layout: ReturnType<typeof this.vm.getLayoutForCategory>,\n ): string {\n if (category === 'kanban') {\n return '@task-management:task-board.view-page-title.kanban';\n }\n if (layout) {\n return `@task-management:task-board.view-page-title.${category}.${layout}`;\n }\n return this.viewCategoryTranslationKey(category);\n }\n\n protected viewLayoutTranslationKey(layoutText: string): string {\n return `@task-management:task-board.view.${layoutText}`;\n }\n\n protected isViewLayoutSelected(layout: AXPTaskBoardViewLayout): boolean {\n return this.selectedViewLayout() === layout;\n }\n\n protected handleViewLayoutChange(layout: AXPTaskBoardViewLayout): void {\n this.vm.setViewLayout(this.vm.currentViewCategory(), layout);\n void this.navigateViewState();\n this.recompute();\n }\n\n private applyViewCategory(category: AXPTaskBoardViewCategory): void {\n const previousCategory = this.vm.currentViewCategory();\n const previousMode = this.vm.currentViewMode();\n\n if (isTaskBoardRangeFilterCategory(category) && !isTaskBoardRangeFilterCategory(previousCategory)) {\n this.applySmartDateRangeFromNavigator(previousMode);\n }\n\n this.vm.setViewCategory(category);\n void this.navigateViewState();\n this.popover()?.close();\n this.recompute();\n }\n\n private applySmartDateRangeFromNavigator(sourceViewMode: AXPTaskBoardViewMode): void {\n const range = deriveTaskBoardDateRangeFromNavigator(\n this.calendarService,\n sourceViewMode,\n this.vm.currentDate(),\n this.vm.daysCount(),\n );\n applyTaskBoardDateRangeToViewModel(\n range,\n (date) => this.vm.setCurrentDate(date),\n (days) => this.vm.setDaysCount(days),\n );\n }\n\n private navigateViewState(): void {\n void this.router.navigate([], {\n queryParams: this.buildFilterQueryParams(),\n queryParamsHandling: 'merge',\n });\n }\n\n protected toggleSettingsPanel(): void {\n this.isSettingsPanelOpen.update((open) => !open);\n }\n\n protected closeSettingsPanel(): void {\n this.isSettingsPanelOpen.set(false);\n }\n\n private async loadSettingsPanelCopy(): Promise<void> {\n const [title, colorBy, calendars] = await Promise.all([\n this.translationService.translateAsync('@task-management:task-board.settings.title'),\n this.translationService.translateAsync('@task-management:task-board.settings.color-by'),\n this.translationService.translateAsync('@task-management:task-board.filter.calendars'),\n ]);\n\n this.settingsPanelCopy.set({\n title: title ?? '',\n colorBy: colorBy ?? '',\n calendars: calendars ?? '',\n });\n }\n\n protected handleCalendarEventTypesSelectionChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n const next = Array.isArray(event.value)\n ? event.value.map(String)\n : event.value != null\n ? [String(event.value)]\n : [];\n\n this.vm.setSelectedCalendarEventTypeIds(next);\n this.schedulerComponent()?.refresh();\n }\n\n protected handleFiltersChanged(filters: AXPFilterQuery[]): void {\n if (!this.filtersPanelInitialized) {\n return;\n }\n\n // User-driven filter changes should persist and override URL-seeded state.\n this.isQueryParam.set(false);\n\n const typeFilter = filters.find((f) => f.field === 'type');\n const assigneeFilter = filters.find((f) => f.field === 'assignee');\n const reporterFilter = filters.find((f) => f.field === 'reporter');\n const priorityFilter = filters.find((f) => f.field === 'priority');\n const dueStatusFilter = filters.find((f) => f.field === 'dueStatus');\n\n this.syncTaskTypesToViewModel(typeFilter?.value);\n this.syncAssigneesToViewModel(assigneeFilter?.value);\n this.syncReportersToViewModel(reporterFilter?.value);\n this.syncPrioritiesToViewModel(priorityFilter?.value);\n this.syncDueStatusesToViewModel(dueStatusFilter?.value);\n\n void this.navigateViewState();\n }\n\n private async syncPanelInitialFilters(): Promise<void> {\n this.panelInitialFilters.set(await this.buildInitialFiltersFromViewModel());\n }\n\n private async buildInitialFiltersFromViewModel(): Promise<AXPFilterQuery[]> {\n const filters: AXPFilterQuery[] = [];\n const types = this.vm.selectedTaskTypeNames();\n const assignees = this.vm.selectedAssigneeIds();\n const reporters = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n const dueStatusKeys = this.vm.selectedDueStatusKeys();\n\n if (types.length > 0) {\n const typeValue = this.isMultiSelectTaskTypeEnabled() ? types : types[0];\n filters.push({\n field: 'type',\n operator: { type: 'equal' },\n value: typeValue,\n displayText: await this.resolveSelectFilterDisplayText('task-types', 'name', 'title', typeValue),\n });\n }\n if (assignees.length > 0) {\n filters.push({\n field: 'assignee',\n operator: { type: 'equal' },\n value: assignees,\n displayText: await this.resolveSelectFilterDisplayText(\n 'task-board-assignees',\n 'id',\n 'displayName',\n assignees,\n ),\n });\n }\n if (reporters.length > 0) {\n filters.push({\n field: 'reporter',\n operator: { type: 'equal' },\n value: reporters,\n displayText: await this.resolveSelectFilterDisplayText('users', 'id', 'displayName', reporters),\n });\n }\n if (priorities.length > 0) {\n filters.push({\n field: 'priority',\n operator: { type: 'equal' },\n value: priorities,\n displayText: this.resolvePriorityDisplayText(priorities),\n });\n }\n if (dueStatusKeys.length > 0) {\n filters.push({\n field: 'dueStatus',\n operator: { type: 'equal' },\n value: dueStatusKeys,\n displayText: this.resolveDueStatusDisplayText(dueStatusKeys),\n });\n }\n\n return filters;\n }\n\n private resolveDueStatusDisplayText(values: AXPDueStatusFilterKey[]): string {\n return values\n .map((name) => AXMTaskBoardPage.DUE_STATUS_OPTIONS.find((option) => option.name === name)?.title ?? name)\n .join(', ');\n }\n\n private resolvePriorityDisplayText(values: AXPPriorityFilterKey[]): string {\n return values\n .map((name) => AXMTaskBoardPage.PRIORITY_OPTIONS.find((option) => option.name === name)?.title ?? name)\n .join(', ');\n }\n\n private async resolveSelectFilterDisplayText(\n dataSourceName: string,\n valueField: string,\n textField: string,\n values: unknown,\n ): Promise<string> {\n const ids = Array.isArray(values) ? values : values != null && values !== '' ? [values] : [];\n if (ids.length === 0) {\n return '';\n }\n\n const definition = await this.dataSourceDefinitionService.get(dataSourceName);\n const dsResult = definition?.source();\n const dataSource = dsResult instanceof Promise ? await dsResult : dsResult;\n\n if (!dataSource?.config?.byKey) {\n return ids.map((id) => String(this.unwrapFilterValue(id))).join(', ');\n }\n\n const labels = await Promise.all(\n ids.map(async (id) => {\n const rawId = this.unwrapFilterValue(id);\n const item = await dataSource.config.byKey!(rawId);\n if (item && typeof item === 'object') {\n const label = (item as Record<string, unknown>)[textField];\n if (label != null && label !== '') {\n return String(label);\n }\n }\n return String(rawId);\n }),\n );\n\n return labels.join(', ');\n }\n\n private buildFilterQueryParams(): Params {\n const types = this.vm.selectedTaskTypeNames();\n const assignees = this.vm.selectedAssigneeIds();\n const reporters = this.vm.selectedReporterIds();\n const priorities = this.vm.selectedPriorities();\n const dueStatusKeys = this.vm.selectedDueStatusKeys();\n const category = this.vm.currentViewCategory();\n const layout = this.vm.getLayoutForCategory(category);\n\n return {\n view: category,\n layout: layout ?? null,\n type: types.length > 0 ? types : null,\n assignee: assignees.length > 0 ? assignees.map(String) : null,\n reporter: reporters.length > 0 ? reporters.map(String) : null,\n priority: priorities.length > 0 ? priorities : null,\n dueStatus: dueStatusKeys.length > 0 ? dueStatusKeys : null,\n calendarEvent: null,\n };\n }\n\n private unwrapFilterValue(value: unknown): unknown {\n let v = value;\n while (v != null && typeof v === 'object' && !Array.isArray(v) && 'value' in v) {\n v = (v as Record<string, unknown>)['value'];\n }\n return v;\n }\n\n private normalizeStringArrayFilterValue(value: unknown): string[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v\n .filter((item) => item != null)\n .map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n if (typeof item === 'object' && item != null && 'name' in item) {\n return String((item as { name: string }).name);\n }\n return String(item);\n });\n }\n if (typeof v === 'object' && v != null && 'name' in v) {\n return [String((v as { name: string }).name)];\n }\n return [String(v)];\n }\n\n private normalizeIdArrayFilterValue(value: unknown): (string | number)[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v\n .filter((item) => item != null)\n .map((item) => {\n if (typeof item === 'string' || typeof item === 'number') {\n return item;\n }\n if (typeof item === 'object' && item != null && 'id' in item) {\n return (item as { id: string | number }).id;\n }\n return String(item);\n });\n }\n if (typeof v === 'object' && v != null && 'id' in v) {\n return [(v as { id: string | number }).id];\n }\n if (typeof v === 'string' || typeof v === 'number') {\n return [v];\n }\n return [String(v)];\n }\n\n private syncTaskTypesToViewModel(value: unknown): void {\n const raw = this.normalizeStringArrayFilterValue(value);\n const newNames = normalizeTaskTypeFilterNames(raw, this.vm.taskTypes());\n const currentNames = this.vm.selectedTaskTypeNames();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedTaskTypeNames(newNames, this.isQueryParam());\n }\n }\n\n private syncAssigneesToViewModel(value: unknown): void {\n const newIds = this.normalizeIdArrayFilterValue(value);\n const currentIds = this.vm.selectedAssigneeIds();\n if (!isEqual(sortBy(currentIds.map(String)), sortBy(newIds.map(String)))) {\n // Always persist an explicit UI change (including clearing to \"all assignees\").\n this.vm.setSelectedAssigneeIds(newIds, false, true);\n }\n }\n\n private syncReportersToViewModel(value: unknown): void {\n const newIds = this.normalizeIdArrayFilterValue(value);\n const currentIds = this.vm.selectedReporterIds();\n if (!isEqual(sortBy(currentIds.map(String)), sortBy(newIds.map(String)))) {\n this.vm.setSelectedReporterIds(newIds, this.isQueryParam());\n }\n }\n\n private syncPrioritiesToViewModel(value: unknown): void {\n const raw = this.normalizeStringArrayFilterValue(value);\n const newNames = normalizeTaskBoardPriorityFilterKeys(raw);\n const currentNames = this.vm.selectedPriorities();\n if (!isEqual(sortBy(currentNames), sortBy(newNames))) {\n this.vm.setSelectedPriorities(newNames, this.isQueryParam());\n }\n }\n\n private syncDueStatusesToViewModel(value: unknown): void {\n const raw = this.normalizeStringArrayFilterValue(value);\n const newKeys = normalizeDueStatusFilterKeys(raw);\n const currentKeys = this.vm.selectedDueStatusKeys();\n if (!isEqual(sortBy(currentKeys), sortBy(newKeys))) {\n this.vm.setSelectedDueStatusKeys(newKeys, this.isQueryParam());\n }\n }\n\n protected handleColorBySelectionChange(event: AXValueChangedEvent): void {\n if (!event.isUserInteraction) {\n return;\n }\n\n this.handleColorByChange(event.value as AXPTaskBoardColorBy);\n }\n\n protected handleColorByChange(key: AXPTaskBoardColorBy): void {\n this.vm.setColorBy(key);\n void this.taskResolveHandler();\n this.schedulerComponent()?.refresh();\n this.refreshNonce.update((value) => value + 1);\n }\n\n private isMultiSelectTaskTypeEnabled(): boolean {\n const viewMode = this.vm.currentViewMode();\n return viewMode !== 'kanban' && viewMode !== 'status-grouped-grid';\n }\n\n /** Re-normalizes filter keys when locale/profile changes (titles must not drive filtering). */\n private readonly localeFilterRefreshEffect = effect(() => {\n const profileCode = this.localeService.activeProfile().localeInfo?.code ?? '';\n if (!profileCode || this.vm.isLoading() || !this.filtersPanelInitialized) {\n return;\n }\n\n const previousCode = this.lastLocaleProfileCode;\n this.lastLocaleProfileCode = profileCode;\n if (previousCode == null || previousCode === profileCode) {\n return;\n }\n\n untracked(() => {\n const taskTypes = this.vm.taskTypes();\n const normalizedTypes = normalizeTaskTypeFilterNames(this.vm.selectedTaskTypeNames(), taskTypes);\n if (!isEqual(sortBy(normalizedTypes), sortBy(this.vm.selectedTaskTypeNames()))) {\n this.vm.setSelectedTaskTypeNames(normalizedTypes);\n }\n\n void this.vm.reloadTaskTypes().then(() => {\n this.taskBoardService.clearProviderCache();\n void this.syncPanelInitialFilters();\n this.refreshNonce.update((value) => value + 1);\n this.schedulerComponent()?.refresh();\n });\n });\n });\n\n private readonly refreshEffect = effect(() => {\n this.vm.selectedTaskTypeNames();\n this.vm.selectedAssigneeIds();\n this.vm.selectedReporterIds();\n this.vm.selectedPriorities();\n this.vm.selectedDueStatusKeys();\n this.vm.effectiveColorBy();\n this.vm.currentDate();\n this.vm.daysCount();\n this.localeService.activeProfile().localeInfo?.code;\n this.refreshNonce();\n\n void this.getResources();\n this.schedulerComponent()?.refresh();\n });\n\n private readonly calendarEventTypeRefreshEffect = effect(() => {\n this.vm.selectedCalendarEventTypeIds();\n this.localeService.activeProfile().localeInfo?.code;\n this.schedulerComponent()?.refresh();\n });\n\n private readonly calendarLocalizationEffect = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n void this.loadCalendarFilterOptions();\n });\n\n private readonly dayDataCacheEffect = effect(async () => {\n this.vm.currentDate();\n this.vm.currentViewMode();\n this.vm.selectedTaskTypeNames();\n this.localeService.activeProfile().localeInfo?.code;\n await this.updateDayDataCache();\n });\n\n private async loadCalendarFilterOptions(): Promise<Array<{ id: string; title: string }>> {\n const calendars = await this.taskBoardService.getCalendarEventTypes();\n this.calendarEventTypes.set(\n calendars.map((calendar) => ({\n id: calendar.id,\n title: calendar.title,\n })),\n );\n return calendars;\n }\n\n private async updateDayDataCache(): Promise<void> {\n const currentDate = this.vm.currentDate();\n const depth = this.calendarDepth();\n\n // Determine the date range based on the popover calendar depth\n let rangeStart: Date;\n let rangeEnd: Date;\n if (depth === 'month') {\n // When depth is 'month', the sidebar shows a full year of months -- fetch data for the entire year\n rangeStart = this.calendarService.create(currentDate).startOf('year').date;\n rangeEnd = this.calendarService.create(currentDate).endOf('year').date;\n } else {\n // When depth is 'day', the sidebar shows a single month -- fetch data for that month\n rangeStart = this.calendarService.create(currentDate).startOf('month').date;\n rangeEnd = this.calendarService.create(currentDate).endOf('month').date;\n }\n\n const tasks = await this.taskBoardService.getTasks({\n ...this.filter(),\n range: { from: rangeStart, end: rangeEnd },\n });\n\n const dayCountMap = new Map<string, number>();\n\n tasks.items.forEach((task) => {\n const taskStart = new Date(task.startDate);\n const taskEnd = new Date(task.endDate);\n const startDay = this.calendarService.create(taskStart).startOf('day');\n const endDay = this.calendarService.create(taskEnd).startOf('day');\n\n let currentDay = startDay;\n while (currentDay.compare(endDay, 'day') <= 0) {\n const dayKey = currentDay.format('YYYY-MM-DD');\n dayCountMap.set(dayKey, (dayCountMap.get(dayKey) || 0) + 1);\n currentDay = currentDay.add('day', 1);\n }\n });\n\n this.dayDataCache.set(dayCountMap);\n this.calendar()?.render();\n }\n\n private async resolveNavigatorTimeText(): Promise<string> {\n const formatted = this.formatNavigatorDateText();\n return this.resolveFormattedDateTimeLabels(formatted);\n }\n\n /** Resolves leftover `dateTime.*` tokens via translateAsync (translateSync may run before acorex scope loads). */\n private async resolveFormattedDateTimeLabels(formatted: string): Promise<string> {\n const keyPattern = /(?:@acorex:)?dateTime\\.[A-Za-z0-9._-]+/g;\n const matches = [...new Set(formatted.match(keyPattern) ?? [])];\n\n if (matches.length === 0) {\n return formatted;\n }\n\n let result = formatted;\n for (const match of matches) {\n const key = match.startsWith('@') ? match : `@acorex:${match}`;\n const translated = await this.translateService.translateAsync(key);\n result = result.replaceAll(match, translated);\n }\n\n return result;\n }\n\n /**\n * Builds toolbar navigator date text with calendar-aware AXDateTime tokens.\n * Month/weekday tokens may remain as i18n keys until {@link resolveFormattedDateTimeLabels} runs.\n */\n private formatNavigatorDateText(): string {\n const currentDate = this.vm.currentDate();\n if (!currentDate) {\n return '';\n }\n\n const calendarSystem = this.calendarType();\n const formatOptions = { locale: calendarSystem };\n const axDate = this.calendarService.create(currentDate, calendarSystem);\n const viewMode = this.vm.currentViewMode();\n\n if (\n viewMode === 'grid' ||\n viewMode === 'kanban' ||\n viewMode === 'status-grouped-grid'\n ) {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n if (this.vm.daysCount() <= 1) {\n return startText;\n }\n const endText = axDate.add('day', this.vm.daysCount() - 1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n\n switch (viewMode) {\n case 'day':\n case 'timeline-day':\n return axDate.format('DD MMMM yyyy', formatOptions);\n case 'week': {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n const endText = axDate.add('week', 1).add('day', -1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n case 'agenda':\n case 'timeline-weekly': {\n const startText = axDate.format('DD MMMM yyyy', formatOptions);\n const endText = axDate.add('day', this.vm.daysCount() - 1).format('DD MMMM yyyy', formatOptions);\n return `${startText} - ${endText}`;\n }\n case 'month':\n case 'timeline-month':\n return axDate.format('MMMM yyyy', formatOptions);\n case 'timeline-year':\n return axDate.format('yyyy', formatOptions);\n default:\n return '';\n }\n }\n\n /** Normalizes ax-calendar slot labels (e.g. `dateTime.months.*`) for the translate pipe. */\n protected toAcorexTranslationKey(text: string | number | null | undefined): string {\n if (text == null || text === '') {\n return '';\n }\n\n const value = String(text);\n if (value.startsWith('@')) {\n return value;\n }\n if (value.startsWith('dateTime.')) {\n return `@acorex:${value}`;\n }\n\n return value;\n }\n\n protected isDateTimeTranslationKey(text: string | number | null | undefined): boolean {\n if (text == null) {\n return false;\n }\n\n const value = String(text);\n return value.startsWith('@') || value.startsWith('dateTime.');\n }\n\n protected getDayDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n // Get the native Date object from AXDateTime\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n // Create a new AXDateTime from the date object for consistent formatting\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const dayKey = axDate.format('YYYY-MM-DD');\n return this.dayDataCache().get(dayKey) || 0;\n } catch (error) {\n console.warn('Error getting day data count:', error);\n return 0;\n }\n }\n\n /**\n * Aggregates the day-level data counts for an entire month.\n * Used by the monthCellTemplate to show badges when the sidebar calendar depth is 'month'.\n */\n protected getMonthDataCount(date: AXDateTime | undefined): number {\n if (!date) {\n return 0;\n }\n try {\n const dateObj = (date as any).date || (date as any)._date;\n if (!dateObj) {\n return 0;\n }\n const nativeDate = dateObj instanceof Date ? dateObj : new Date(dateObj);\n const axDate = this.calendarService.create(nativeDate);\n const monthStart = axDate.startOf('month');\n const monthEnd = axDate.endOf('month');\n\n let total = 0;\n let current = monthStart;\n while (current.compare(monthEnd, 'day') <= 0) {\n const dayKey = current.format('YYYY-MM-DD');\n total += this.dayDataCache().get(dayKey) || 0;\n current = current.add('day', 1);\n }\n return total;\n } catch (error) {\n console.warn('Error getting month data count:', error);\n return 0;\n }\n }\n\n protected async handleContextMenuItemClick(event: AXContextMenuItemsClickEvent) {\n const command = event.item.data?.command;\n const provider = this.currentTask()?.provider ?? '';\n try {\n if (command) {\n await this.taskBoardService.executeCommand(command, provider);\n }\n } catch (error) {\n console.error('[TaskBoard] Context menu command failed:', error);\n } finally {\n if (command) {\n this.taskBoardService.requestRefresh(provider || undefined);\n }\n }\n }\n\n @HostListener('document:keydown.control')\n protected handleNavigatorRangeModifierDown(): void {\n this.navigatorRangeSelectActive.set(true);\n }\n\n @HostListener('document:keyup.control')\n protected handleNavigatorRangeModifierUp(): void {\n this.navigatorRangeSelectActive.set(false);\n }\n\n /**\n * Registers page keyboard shortcuts with the platform shortcut registry.\n */\n private registerKeyboardShortcuts(): void {\n this.registerTaskBoardNavigatorShortcuts();\n this.registerTaskBoardPanelShortcuts();\n this.registerTaskBoardViewCategoryShortcuts();\n this.registerTaskBoardViewLayoutShortcuts();\n }\n\n private registerTaskBoardNavigatorShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-navigator',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@general:keyboard-shortcuts.groups.navigation',\n when: () => this.isReady() && this.showToolbarNavigator(),\n shortcuts: [\n {\n keys: ['arrowleft'],\n title: '@task-management:task-board.navigator.previous-period',\n allowInEditableFields: true,\n handler: () => this.changeDate(false),\n },\n {\n keys: ['arrowright'],\n title: '@task-management:task-board.navigator.next-period',\n allowInEditableFields: true,\n handler: () => this.changeDate(true),\n },\n {\n keys: ['alt+t'],\n title: '@task-management:task-board.shortcuts.go-to-today',\n allowInEditableFields: true,\n handler: () => this.handleTodayClick(),\n },\n ],\n });\n }\n\n private registerTaskBoardPanelShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-panels-settings',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.panels',\n when: () => this.isReady(),\n shortcuts: [\n {\n keys: ['ctrl+,'],\n title: '@task-management:task-board.shortcuts.toggle-settings',\n allowInEditableFields: true,\n handler: () => this.toggleSettingsPanel(),\n },\n ],\n });\n\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-panels-dismiss',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.panels',\n when: () => this.isReady() && this.hasKeyboardDismissTarget(),\n shortcuts: [\n {\n keys: ['escape'],\n title: '@task-management:task-board.shortcuts.dismiss-overlays',\n handler: () => this.handleKeyboardDismiss(),\n },\n ],\n });\n }\n\n private registerTaskBoardViewCategoryShortcuts(): void {\n const categories: AXPTaskBoardViewCategory[] = ['calendar', 'timeline', 'table', 'kanban'];\n const titleKeys: Record<AXPTaskBoardViewCategory, string> = {\n calendar: '@task-management:task-board.shortcuts.switch-to-calendar',\n timeline: '@task-management:task-board.shortcuts.switch-to-timeline',\n table: '@task-management:task-board.shortcuts.switch-to-table',\n kanban: '@task-management:task-board.shortcuts.switch-to-kanban',\n };\n\n for (let index = 0; index < categories.length; index++) {\n for (const category of categories) {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: `task-board-view-category-${category}-slot-${index + 1}`,\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.views',\n when: () => this.isReady() && this.getVisibleViewCategoryByShortcutIndex(index) === category,\n shortcuts: [\n {\n keys: [`alt+${index + 1}`],\n title: titleKeys[category],\n handler: () => this.switchToViewCategory(category),\n },\n ],\n });\n }\n }\n }\n\n private registerTaskBoardViewLayoutShortcuts(): void {\n this.shortcutRegistry.register({\n owner: this.destroyRef,\n id: 'task-board-view-layout',\n priority: AXPKeyboardShortcutPriority.Page,\n scope: '@task-management:task-board.page-title',\n group: '@task-management:task-board.shortcuts.groups.views',\n when: () => this.isReady() && this.canCycleViewLayout(),\n shortcuts: [\n {\n keys: ['['],\n title: '@task-management:task-board.shortcuts.previous-layout',\n handler: () => this.cycleViewLayout(false),\n },\n {\n keys: [']'],\n title: '@task-management:task-board.shortcuts.next-layout',\n handler: () => this.cycleViewLayout(true),\n },\n ],\n });\n }\n\n private getVisibleViewCategoryByShortcutIndex(index: number): AXPTaskBoardViewCategory | null {\n return this.vm.visibleViewCategories()[index] ?? null;\n }\n\n private switchToViewCategory(category: AXPTaskBoardViewCategory): void {\n if (!this.vm.visibleViewCategories().includes(category)) {\n return;\n }\n\n if (this.vm.currentViewCategory() !== category) {\n this.applyViewCategory(category);\n }\n }\n\n private canCycleViewLayout(): boolean {\n return this.showViewLayoutSwitcher() && this.viewLayoutItems().length > 1;\n }\n\n private cycleViewLayout(forward: boolean): void {\n const items = this.viewLayoutItems();\n if (items.length <= 1) {\n return;\n }\n\n const currentLayout = this.selectedViewLayout();\n const currentIndex = items.findIndex((item) => item.key === currentLayout);\n const safeIndex = currentIndex >= 0 ? currentIndex : 0;\n const offset = forward ? 1 : -1;\n const nextIndex = (safeIndex + offset + items.length) % items.length;\n\n this.handleViewLayoutChange(items[nextIndex].key);\n }\n\n private hasKeyboardDismissTarget(): boolean {\n return (\n this.isSettingsPanelOpen() ||\n this.popover()?.isOpen === true ||\n this.vm.isDetailPanelOpen() ||\n this.vm.isTaskSelected()\n );\n }\n\n private handleKeyboardDismiss(): void {\n if (this.isSettingsPanelOpen()) {\n this.closeSettingsPanel();\n return;\n }\n\n if (this.popover()?.isOpen) {\n this.popover()?.close();\n return;\n }\n\n if (this.vm.isDetailPanelOpen()) {\n this.vm.closeDetailPanel();\n return;\n }\n\n if (this.vm.isTaskSelected()) {\n this.vm.clearSelectedTask();\n }\n }\n\n private isModifierRangeNavigatorView(): boolean {\n return this.modifierRangeBasedViews.includes(this.vm.currentViewMode());\n }\n\n private usesNavigatorRangeSelection(view: AXPTaskBoardViewMode): boolean {\n if (this.alwaysRangeBasedViews.includes(view)) {\n return true;\n }\n if (this.modifierRangeBasedViews.includes(view)) {\n return this.vm.rangeStartDate() != null || this.vm.daysCount() > 1;\n }\n return false;\n }\n\n private isNavigatorRangeModifierActive(event?: AXCalendarSlotClick): boolean {\n const nativeEvent = event?.nativeEvent;\n if (nativeEvent instanceof MouseEvent) {\n return nativeEvent.ctrlKey || nativeEvent.metaKey;\n }\n return this.navigatorRangeSelectActive();\n }\n\n private normalizeNavigatorDay(date: Date): Date {\n const calendarSystem = this.localeService.activeProfile().calendar.system;\n return this.calendarService.create(date, calendarSystem).startOf('day').date;\n }\n\n private applyNavigatorDateRange(start: Date, end: Date): void {\n const startTime = start.getTime();\n const endTime = end.getTime();\n const newStartDate = new Date(Math.min(startTime, endTime));\n const newEndDate = new Date(Math.max(startTime, endTime));\n const differenceInDays = this.calculateDifferenceInDays(newStartDate, newEndDate);\n\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n this.vm.setCurrentDate(newStartDate);\n this.vm.setDaysCount(differenceInDays);\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n private handleNavigatorRangeSlotClick(clickedDate: Date): void {\n const clickedDay = this.normalizeNavigatorDay(clickedDate);\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (selectionStartDate) {\n this.applyNavigatorDateRange(selectionStartDate, clickedDay);\n return;\n }\n\n if (this.navigatorPlainSingleDaySelected && this.vm.daysCount() === 1) {\n const selectedDay = this.normalizeNavigatorDay(this.vm.currentDate());\n this.applyNavigatorDateRange(selectedDay, clickedDay);\n return;\n }\n\n this.vm.setRangeStartDate(clickedDay);\n this.navigatorPlainSingleDaySelected = false;\n this.calendar()?.render();\n }\n\n private handleNavigatorSingleDaySlotClick(clickedDate: Date): void {\n const dateToSet = this.normalizeNavigatorDay(clickedDate);\n\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = true;\n this.vm.setCurrentDate(dateToSet);\n this.vm.setDaysCount(1);\n this.popover()?.close();\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n changeDate(forward: boolean) {\n this.navigatorPlainSingleDaySelected = false;\n const date = this.calendarService.create(this.vm.currentDate(), this.localeService.activeProfile().calendar.system);\n switch (this.vm.currentViewMode()) {\n case 'day':\n case 'timeline-day':\n this.vm.setCurrentDate(date.add('day', forward ? 1 : -1).date);\n break;\n\n case 'week':\n this.vm.setCurrentDate(date.add('week', forward ? 1 : -1).date);\n break;\n\n case 'grid':\n case 'agenda':\n case 'kanban':\n case 'timeline-weekly':\n case 'status-grouped-grid':\n this.vm.setCurrentDate(date.add('day', forward ? this.vm.daysCount() : -this.vm.daysCount()).date);\n break;\n\n case 'month':\n case 'timeline-month':\n this.vm.setCurrentDate(date.add('month', forward ? 1 : -1).date);\n break;\n\n case 'timeline-year':\n this.vm.setCurrentDate(date.add('year', forward ? 1 : -1).date);\n break;\n }\n this.popover()?.close();\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n protected handleCalendarSlotClick(event: AXCalendarSlotClick) {\n if (event.component.activeView !== event.component.depth) return;\n\n const clickedDate: Date = event.item;\n const currentView = this.vm.currentViewMode();\n\n if (this.modifierRangeBasedViews.includes(currentView)) {\n if (this.isNavigatorRangeModifierActive(event)) {\n this.handleNavigatorRangeSlotClick(clickedDate);\n } else {\n this.handleNavigatorSingleDaySlotClick(clickedDate);\n }\n return;\n }\n\n if (this.alwaysRangeBasedViews.includes(currentView)) {\n this.handleNavigatorRangeSlotClick(clickedDate);\n return;\n }\n\n const calendarSystem = this.localeService.activeProfile().calendar.system;\n let dateToSet = this.calendarService.create(clickedDate, calendarSystem).startOf('day').date;\n\n if (currentView === 'week') {\n const weekDate = this.calendarService.create(dateToSet, calendarSystem);\n dateToSet = weekDate.startOf('week').date;\n }\n\n this.vm.setCurrentDate(dateToSet);\n this.popover()?.close();\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n getCellClass = (date: AXDateTime): string | null => {\n const currentView = this.vm.currentViewMode();\n const selectionStartDate = this.vm.rangeStartDate();\n\n if (!this.usesNavigatorRangeSelection(currentView)) {\n const currentDay = this.calendarService.create(this.vm.currentDate());\n if (date.equal(currentDay, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n if (this.modifierRangeBasedViews.includes(currentView) || this.alwaysRangeBasedViews.includes(currentView)) {\n if (selectionStartDate) {\n const axSelectionStartDate = this.calendarService.create(selectionStartDate);\n if (date.equal(axSelectionStartDate, 'day')) {\n return 'ax-range-start ax-range-end';\n }\n return null;\n }\n\n const fromRange = this.calendarService.create(this.vm.currentDate());\n const endRange = fromRange.add('day', this.vm.daysCount() - 1);\n\n const isStart = date.equal(fromRange, 'day');\n const isEnd = date.equal(endRange, 'day');\n\n if (isStart && isEnd) return 'ax-range-start ax-range-end';\n if (isStart) return 'ax-range-start';\n if (isEnd) return 'ax-range-end';\n if (date.compare(fromRange, 'day') > 0 && date.compare(endRange, 'day') < 0) {\n return 'ax-range-between';\n }\n\n return null;\n }\n\n if (currentView === 'week') {\n const from = this.calendarService.create(this.vm.currentDate());\n const end = from.add('day', 6);\n\n if (date.equal(from, 'day')) return 'ax-range-start';\n if (date.equal(end, 'day')) return 'ax-range-end';\n if (date.compare(from, 'day') > 0 && date.compare(end, 'day') < 0) {\n return 'ax-range-between';\n }\n }\n\n return null;\n };\n\n /**\n * Helper function to calculate the difference in whole days between two dates.\n * The result is inclusive (e.g., May 5 to May 6 is a 2-day range).\n */\n private calculateDifferenceInDays(start: Date, end: Date): number {\n if (!start || !end) {\n return 1;\n }\n const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n\n const timeDifference = endDate.getTime() - startDate.getTime();\n const daysDifference = Math.round(timeDifference / (1000 * 3600 * 24));\n\n return daysDifference + 1;\n }\n\n handleTodayClick() {\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n let currentDate: Date;\n if (this.vm.currentViewMode() === 'week') {\n currentDate = this.calendarService\n .create(new Date(), this.localeService.activeProfile().calendar.system)\n .startOf('week').date;\n } else {\n currentDate = new Date();\n }\n this.vm.setCurrentDate(currentDate);\n if (this.isModifierRangeNavigatorView()) {\n this.vm.setDaysCount(1);\n }\n this.popover()?.close();\n this.calendar()?.render();\n this.schedulerComponent()?.refresh();\n }\n\n protected isNonCalendarView = computed(() => {\n const mode = this.vm.currentViewMode();\n return mode === 'kanban' || mode === 'grid' || mode === 'status-grouped-grid';\n });\n\n private async loadFromRoute(): Promise<void> {\n const snapshot = this.activatedRoute.snapshot.queryParamMap;\n const viewParam = snapshot.get('view');\n const layoutParam = snapshot.get('layout');\n const allowedCategories = new Set(this.vm.visibleViewCategories());\n\n const viewBefore = this.vm.currentViewCategory();\n const layoutBefore = this.vm.getLayoutForCategory(viewBefore);\n if (viewParam && allowedCategories.has(viewParam as AXPTaskBoardViewCategory)) {\n const category = viewParam as AXPTaskBoardViewCategory;\n const layout = resolveTaskBoardCategoryLayoutFromQuery(category, layoutParam);\n if (layout) {\n this.vm.setViewLayout(category, layout);\n }\n this.vm.setViewCategory(category);\n }\n const layoutAfter = this.vm.getLayoutForCategory(this.vm.currentViewCategory());\n if (viewBefore !== this.vm.currentViewCategory() || layoutBefore !== layoutAfter) {\n this.recompute();\n }\n\n const type = snapshot.getAll('type') as string[];\n const assignee = snapshot.getAll('assignee') as string[];\n const reporter = snapshot.getAll('reporter') as string[];\n const priority = snapshot.getAll('priority') as AXPPriorityFilterKey[];\n const dueStatus = snapshot.getAll('dueStatus') as AXPDueStatusFilterKey[];\n if (type.length || assignee.length || priority.length || reporter.length || dueStatus.length) {\n this.isQueryParam.set(true);\n this.vm.setSelectedTaskTypeNames(normalizeTaskTypeFilterNames(type, this.vm.taskTypes()), true);\n this.vm.setSelectedAssigneeIds(assignee, true);\n this.vm.setSelectedReporterIds(reporter, true);\n this.vm.setSelectedPriorities(normalizeTaskBoardPriorityFilterKeys(priority), true);\n this.vm.setSelectedDueStatusKeys(normalizeDueStatusFilterKeys(dueStatus), true);\n }\n\n const dateRange = snapshot.get('dateRange') as string;\n if (dateRange) {\n const range = this.taskBoardService.rangeCalculator(dateRange);\n if (range) {\n this.vm.setCurrentDate(range.from);\n this.vm.setDaysCount(this.calculateDifferenceInDays(range.from, range.end));\n }\n } else if (!this.filtersPanelInitialized && this.isModifierRangeNavigatorView()) {\n this.vm.setRangeStartDate(null);\n this.navigatorPlainSingleDaySelected = false;\n this.vm.setDaysCount(1);\n }\n\n await this.syncPanelInitialFilters();\n this.filtersPanelInitialized = true;\n }\n\n /**\n * Checks if the currently selected task is still present in the list of visible tasks.\n * If not, it clears the selection to prevent showing details for a hidden task.\n * @param visibleTasks The new array of tasks that will be displayed.\n */\n private validateSelectedTask(visibleTasks: AXPTask[]): void {\n const currentSelectedTask = this.vm.selectedTask();\n // Proceed only if a task is actually selected\n if (currentSelectedTask) {\n // Check if any task in the new list has the same ID as the selected one\n const isSelectedTaskVisible = visibleTasks.some((task) => task.id === currentSelectedTask.id);\n\n // If the selected task is NOT in the new list, clear the selection.\n if (!isSelectedTaskVisible) {\n this.vm.selectTask(null);\n }\n }\n }\n\n protected async getResources(): Promise<void> {\n if (this.vm.selectedTaskTypeNames().length !== 1) {\n this.resources.set([]);\n return;\n }\n const resources = await this.taskBoardService.getResources(this.vm.selectedTaskTypeNames()[0] ?? '');\n this.resources.set(resources);\n }\n}\n","<!-- Task board page shell -->\n<axp-page-layout *translate=\"let t\">\n <!-- Toolbar: date navigator, filters, view layout, and settings -->\n <axp-page-toolbar class=\"axm-task-board-toolbar\"\n [class.axm-task-board-toolbar--stack-filters]=\"!deviceService.isLarge()\">\n <div class=\"axm-task-board-toolbar__primary-row\">\n <axp-layout-prefix class=\"ax-flex ax-min-w-0 ax-flex-nowrap ax-items-center ax-gap-2\"\n [class.ax-flex-1]=\"deviceService.isLarge()\">\n <!-- Date navigator with calendar popover -->\n @if (showToolbarNavigator()) {\n <div class=\"ax-scheduler-header ax-shrink-0 ax-w-max ax-sm sm:ax-md\">\n <ax-button look=\"blank\" (onClick)=\"changeDate(false)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-left arrow-icon\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" [text]=\"navigatorTimeText()\" #date></ax-button>\n <ax-button look=\"blank\" (onClick)=\"changeDate(true)\">\n <ax-icon class=\"ax-icon ax-text-xl ax-icon-chevron-right arrow-icon\"></ax-icon>\n </ax-button>\n <!-- TODO(acorex-ui): Do not wrap ax-calendar in @for/@if here — ax-popover requires a direct projected child.\n Week layout comes from AXCalendarService (AXPRegionalCalendarService); navigatorCalendarLayoutEffect re-renders on profile/calendar changes.\n Remove manual render() when ax-calendar reacts to calendar service week layout changes.\n See README.md in this folder. -->\n <ax-popover [target]=\"date\" [placement]=\"'bottom'\" #popover [adaptivityEnabled]=\"true\">\n <ax-calendar #calendar [type]=\"calendarType()\" [depth]=\"calendarDepth()\" [cellClass]=\"getCellClass\"\n [ngModel]=\"currentDateForCalendar()\" [dayCellTemplate]=\"dayCellTemplate\"\n [monthCellTemplate]=\"monthCellTemplate\"\n class=\"ax-single-range-calendar ax-border ax-rounded-lg\"\n (onSlotClick)=\"handleCalendarSlotClick($event)\">\n <ax-footer>\n <ax-button look=\"link\" color=\"primary\" [text]=\"(todayButtonTextKey() | translate | async)!\"\n (onClick)=\"handleTodayClick()\"></ax-button>\n </ax-footer>\n </ax-calendar>\n </ax-popover>\n </div>\n }\n\n <!-- Inline query filters (large screens only) -->\n @if (deviceService.isLarge() && filtersReady()) {\n <axp-query-filters class=\"axm-task-board-toolbar__filters-inline\" [filtersDefinitions]=\"filterDefinitions()\"\n [initialFilters]=\"panelInitialFilters()\" (onFiltersChanged)=\"handleFiltersChanged($event)\"></axp-query-filters>\n }\n </axp-layout-prefix>\n\n <axp-layout-suffix class=\"ax-flex ax-shrink-0 ax-gap-2\">\n <!-- View layout switcher (kanban, grid, calendar, etc.) -->\n @if (showViewLayoutSwitcher()) {\n <ax-button class=\"axm-task-board-toolbar__view-layout-dropdown\" look=\"outline\"\n [text]=\"(selectedViewLayoutTitleKey() | translate | async)!\">\n <ax-prefix>\n <ax-icon [icon]=\"selectedViewLayoutIcon()\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewLayoutItems(); track item.key) {\n <ax-button-item [text]=\"(viewLayoutTranslationKey(item.text) | translate | async)!\"\n (onClick)=\"handleViewLayoutChange(item.key)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-check\" class=\"axm-task-board-toolbar__dropdown-menu-check\"\n [class.--placeholder]=\"!isViewLayoutSelected(item.key)\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n\n <!-- Settings panel toggle with active calendar-type badge -->\n <div class=\"axm-task-board-toolbar__settings-slot\">\n <ax-button class=\"axm-task-board-toolbar__settings-button\" look=\"outline\" [iconOnly]=\"true\"\n [title]=\"('@task-management:task-board.settings.title' | translate | async)!\"\n (onClick)=\"toggleSettingsPanel()\">\n <ax-prefix>\n <ax-icon [icon]=\"isSettingsPanelOpen() ? 'fa-solid fa-gear' : 'fa-light fa-gear'\"></ax-icon>\n </ax-prefix>\n </ax-button>\n @if (selectedCalendarEventTypeCount() > 0) {\n <div class=\"axm-task-board-toolbar__settings-badge\" [class.--xs]=\"selectedCalendarEventTypeCount() > 9\">\n <ax-badge color=\"primary\" [text]=\"selectedCalendarEventTypeCount().toString()\"></ax-badge>\n </div>\n }\n </div>\n </axp-layout-suffix>\n </div>\n\n <!-- Stacked query filters (small screens) -->\n @if (!deviceService.isLarge() && filtersReady()) {\n <div class=\"axm-task-board-toolbar__filters-row\">\n <axp-query-filters [filtersDefinitions]=\"filterDefinitions()\" [initialFilters]=\"panelInitialFilters()\"\n (onFiltersChanged)=\"handleFiltersChanged($event)\"></axp-query-filters>\n </div>\n }\n </axp-page-toolbar>\n\n <axp-page-content class=\"ax-flex ax-flex-row ax-gap-2 ax-min-h-0\">\n <div class=\"axm-task-board-main ax-flex ax-flex-row ax-gap-4 ax-flex-1 ax-min-w-0 ax-min-h-0 ax-relative\">\n <div class=\"axm-task-board-main__content ax-flex ax-flex-row ax-gap-2 ax-flex-1 ax-min-w-0 ax-min-h-0\">\n @if (isReady()) {\n <!-- Active view: kanban, grid, status-grouped grid, or calendar/scheduler -->\n @switch (vm.currentViewMode()) {\n @case ('kanban') {\n <axm-task-board-kanban-view class=\"axp-kanban-container ax-h-full ax-w-full ax-min-w-0\" [(tasks)]=\"resolvedTasks\"\n (onTaskClick)=\"vm.selectTask($event)\" (onActionClick)=\"handleContextMenu($event)\"></axm-task-board-kanban-view>\n }\n @case ('grid') {\n <axm-task-board-grid-view class=\"ax-h-full ax-w-full ax-min-w-0\" [dataSource]=\"gridDataSource\"\n [refreshNonce]=\"refreshNonce()\" (onTaskClick)=\"vm.selectTask($event)\"></axm-task-board-grid-view>\n }\n @case ('status-grouped-grid') {\n <axm-task-board-status-grouped-grid-view class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full ax-min-w-0\"\n [dataSource]=\"gridDataSource\" [refreshNonce]=\"refreshNonce()\"\n (onTaskClick)=\"vm.selectTask($event)\"></axm-task-board-status-grouped-grid-view>\n }\n @default {\n <axm-task-board-calendar-view class=\"axp-scheduler-container ax-h-full ax-w-full ax-min-w-0\"\n [resources]=\"resources()\" [startingDate]=\"vm.currentDate()\" [dataSource]=\"schedulerDataSource\"\n [refreshNonce]=\"refreshNonce()\" (onTaskClick)=\"vm.selectTask($event)\" [selectedView]=\"vm.currentViewMode()\"\n (onActionClick)=\"handleContextMenu($event)\" (onTaskRightClick)=\"handleContextMenu($event)\"\n (component)=\"schedulerComponentChanged($event)\"\n (onMonthSlotDblClicked)=\"handleMonthSlotDblClicked($event)\"></axm-task-board-calendar-view>\n }\n }\n\n <!-- Shared task context menu -->\n <ax-context-menu #rootContextMenu [closeOn]=\"'leave'\" [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOnOpening($event)\" (onItemClick)=\"handleContextMenuItemClick($event)\">\n </ax-context-menu>\n\n <!-- Task detail side panel (large screens only) -->\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-task-board-detail-panel></axm-task-board-detail-panel>\n }\n } @else {\n <!-- Initial bootstrap loading state -->\n <axm-task-board-content-skeleton class=\"ax-flex-1 ax-min-h-0 ax-w-full ax-self-stretch\"></axm-task-board-content-skeleton>\n }\n </div>\n\n <!-- Board settings side panel -->\n @if (isSettingsPanelOpen()) {\n @if (!deviceService.isLarge()) {\n <button type=\"button\" class=\"axm-task-board-settings-backdrop\" (click)=\"closeSettingsPanel()\"\n [attr.aria-label]=\"('@general:actions.close.title' | translate | async)!\"></button>\n }\n <axp-layout-side-detail-panel class=\"ax-sticky ax-top-0 ax-z-10 ax-max-h-full ax-flex-none\"\n [class.axm-task-board-settings-panel--overlay]=\"!deviceService.isLarge()\" [header]=\"settingsPanelHeader()\"\n [sections]=\"settingsPanelSections()\" (panelClose)=\"closeSettingsPanel()\">\n <!-- Color-by dimension selector -->\n <ng-template axpLayoutSideDetailPanelSection=\"colorBy\">\n <ax-selection-list class=\"ax-w-full\" valueField=\"key\" textField=\"titleKey\" [direction]=\"'vertical'\"\n [look]=\"'solid'\" [multiple]=\"false\" [items]=\"colorByItems\" [ngModel]=\"effectiveColorBy()\"\n [customTemplate]=\"colorByItemTemplate\" (onValueChanged)=\"handleColorBySelectionChange($event)\">\n <ng-template #colorByItemTemplate let-item>\n {{ (item.data.titleKey | translate | async)! }}\n </ng-template>\n </ax-selection-list>\n </ng-template>\n\n <!-- Calendar event type visibility (calendar views only) -->\n @if (showCalendarEventButton()) {\n <ng-template axpLayoutSideDetailPanelSection=\"calendars\">\n <ax-selection-list class=\"ax-w-full\" valueField=\"id\" textField=\"text\" [direction]=\"'vertical'\"\n [look]=\"'solid'\" [multiple]=\"true\" [items]=\"calendarEventTypeItems()\"\n [ngModel]=\"vm.selectedCalendarEventTypeIds()\"\n (onValueChanged)=\"handleCalendarEventTypesSelectionChange($event)\"></ax-selection-list>\n </ng-template>\n }\n </axp-layout-side-detail-panel>\n }\n </div>\n </axp-page-content>\n</axp-page-layout>\n\n<!-- Calendar popover: day cell template with task-count badge -->\n<ng-template #dayCellTemplate let-slot>\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\">\n <span class=\"ax-flex-1 ax-text-center\">\n @if (isDateTimeTranslationKey(slot.slot.text)) {\n {{ (toAcorexTranslationKey(slot.slot.text) | translate | async)! }}\n } @else {\n {{ slot.slot.text ?? slot.slot.date?.day ?? '' }}\n }\n </span>\n @if (slot.slot.date && getDayDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n\n<!-- Calendar popover: month cell template with task-count badge -->\n<ng-template #monthCellTemplate let-slot>\n <div class=\"ax-flex ax-flex-col ax-items-center ax-justify-between ax-w-full ax-gap-1\"\n [style.padding-bottom]=\"'0.25rem'\">\n <span class=\"ax-flex-1 ax-text-center\">\n @if (isDateTimeTranslationKey(slot.slot.text)) {\n {{ (toAcorexTranslationKey(slot.slot.text) | translate | async)! }}\n } @else {\n {{ slot.slot.text ?? '' }}\n }\n </span>\n @if (slot.slot.date && getMonthDataCount(slot.slot.date) > 0) {\n <ax-badge color=\"warning\"></ax-badge>\n }\n </div>\n</ng-template>\n"],"names":["i1","i2","i3","i4","i6","i10"],"mappings":"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"}