@acorex-platform/module-task-management-client 2.0.0-next.2 → 2.0.0-next.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-5zHpZCXa.mjs → acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-INIEvacu.mjs} +6 -6
- package/fesm2022/{acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-5zHpZCXa.mjs.map → acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-INIEvacu.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-task-management-client-list-task-board-assignees.query-m6EMYMGX.mjs → acorex-platform-module-task-management-client-list-task-board-assignees.query-CENurmLO.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-task-management-client-list-task-board-assignees.query-m6EMYMGX.mjs.map → acorex-platform-module-task-management-client-list-task-board-assignees.query-CENurmLO.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-task-management-client-list-task-types.query-aSPzB4oy.mjs → acorex-platform-module-task-management-client-list-task-types.query-DQ2MnsAK.mjs} +2 -2
- package/fesm2022/{acorex-platform-module-task-management-client-list-task-types.query-aSPzB4oy.mjs.map → acorex-platform-module-task-management-client-list-task-types.query-DQ2MnsAK.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-module-task-management-client-task-board.page-1Qq2hK0A.mjs → acorex-platform-module-task-management-client-task-board.page-xzDabJXk.mjs} +3 -3
- package/fesm2022/{acorex-platform-module-task-management-client-task-board.page-1Qq2hK0A.mjs.map → acorex-platform-module-task-management-client-task-board.page-xzDabJXk.mjs.map} +1 -1
- package/fesm2022/acorex-platform-module-task-management-client.mjs +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-5zHpZCXa.mjs","sources":["../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.module.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.types.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-assignee-access.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/calendar-holiday-presentation.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-realtime-entities.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-task-cache.util.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.service.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-view-category.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-menu-path.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-priority.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-filter.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.viewmodel.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/commands/reset-filters-assign-to-current-user.command.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/due-status.types.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/due-status-evaluation.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/default-due-status.provider.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/due-status-provider.service.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-range.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/task-board-accent-color.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-command-result.util.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-default-task-popover.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-grid-row-actions.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-task-enrichment.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-task-popover-shell.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-task-popover-overlay.service.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/entity-task.provider.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/shortcut/task-board-shortcut.component.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/shortcut/task-board-shortcut.component.html","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/widget-category.type.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/task-dashboard-widget-subcategories.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/task-dashboard-widget.dimensions.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/shortcut/task-board-shortcut.config.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/task-board/task-board-widget.component.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/task-board/task-board-widget.component.html","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/task-board/task-board-widget.config.ts","../../../../libs/modules/task-management/client/src/lib/widget-definition.provider.ts","../../../../libs/modules/task-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/task-management/client/src/lib/badge.provider.ts","../../../../libs/modules/task-management/client/src/lib/menu.provider.ts","../../../../libs/modules/task-management/client/src/lib/setting.provider.ts","../../../../libs/modules/task-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/task-management/client/src/lib/catalog-scope-definition.provider.ts","../../../../libs/modules/task-management/client/src/lib/features/task/task-feature.module.ts","../../../../libs/modules/task-management/client/src/lib/task-management.module.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/dashboard-seed-widget-builders.util.ts","../../../../libs/modules/task-management/client/src/acorex-platform-module-task-management-client.ts"],"sourcesContent":["import { AXP_HOME_PAGES, AXP_PROTECTED_ROUTE_GUARDS } from '@acorex-platform/framework-client/common';\nimport { AXP_ENTITY_CONFIG_TOKEN } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPRuntimeModule, provideCommandSetups, provideQuerySetups } from '@acorex-platform/framework-client/runtime';\nimport { inject, NgModule } from '@angular/core';\nimport { Route, ROUTES, Routes } from '@angular/router';\nimport {\n AXPTaskManagementCommandKeys,\n AXMTaskManagementQueryKeys,\n} from '@acorex-platform/module-task-management-client/contracts';\n\nfunction createAppRoute(): Route {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n return {\n path: ':app/TaskManagement/task-board',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { rootLayout: true },\n loadComponent: () => {\n return config.viewers.root();\n },\n children: [\n {\n path: '',\n loadComponent: () => import('./task-board.page').then((c) => c.AXMTaskBoardPage),\n },\n ],\n };\n}\n\nfunction routesFactory() {\n const routes: Routes = [createAppRoute()];\n return routes;\n}\n\n@NgModule({\n imports: [AXPRuntimeModule],\n providers: [\n provideCommandSetups([\n {\n key: AXPTaskManagementCommandKeys.TaskBoard.ResetFiltersAssignToCurrentUser,\n command: () =>\n import('./commands/reset-filters-assign-to-current-user.command').then(\n (c) => c.ResetTaskBoardFiltersAssignToCurrentUserCommand,\n ),\n },\n ]),\n {\n provide: AXP_HOME_PAGES,\n multi: true,\n useFactory: () => [\n {\n key: 'task-board',\n title: 'Task Board',\n route: createAppRoute(),\n },\n ],\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n provideQuerySetups([\n {\n key: AXMTaskManagementQueryKeys.ListTaskTypes,\n loader: () =>\n import('../queries/list-task-types.query').then((c) => c.AXMListTaskTypesQuery),\n },\n {\n key: AXMTaskManagementQueryKeys.TaskBoardAssignees,\n loader: () =>\n import('../queries/list-task-board-assignees.query').then(\n (c) => c.AXMListTaskBoardAssigneesQuery,\n ),\n },\n {\n key: AXMTaskManagementQueryKeys.TaskBoardReporters,\n loader: () =>\n import('../queries/list-task-board-reporters.query').then(\n (c) => c.AXMListTaskBoardReportersQuery,\n ),\n },\n ]),\n ],\n})\nexport class AXPTaskBoardModule {}\n","import { AXPActionMenuItem, AXPExecuteCommand, AXPRuntimeCommandResult, AXPUserReference, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetColumnNode } from '@acorex-platform/framework-shared/widget-core';\n\nimport { AXRange } from '@acorex/cdk/common';\nimport type { AXSchedulerResource } from '@acorex/components/scheduler';\n\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\n\nimport { InjectionToken, InputSignal, Type, inject } from '@angular/core';\nimport type { AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\n\n/** Canonical task priority — matches workflow human-task activity values (normalized to lowercase). */\nexport type AXPTaskPriority = 'low' | 'normal' | 'high' | 'urgent';\n\n/** Task board row/card accent color source. */\nexport type AXPTaskBoardColorBy = 'dueDate' | 'priority' | 'status';\n\nexport interface AXPTaskDueStatusPresentation {\n name: string;\n title: string;\n color: string;\n icon?: string;\n}\n\n/**\n * A single label/value row rendered in a task popover metadata section.\n */\nexport interface AXPTaskPopoverMetadataField {\n name: string;\n title: string;\n node: AXPWidgetNode;\n}\n\n/**\n * Widget definitions and context values for task popover metadata.\n */\nexport interface AXPTaskPopoverMetadata {\n context: Record<string, unknown>;\n fields: AXPTaskPopoverMetadataField[];\n}\n\n/**\n * Extended action menu item for task board with priority support.\n * Primary actions are shown as icon-only buttons, secondary actions are shown in a dropdown.\n */\nexport type AXPTaskActionMenuItem = AXPActionMenuItem & {\n priority?: 'primary' | 'secondary';\n};\n\ninterface AXPAuditable {\n createdAt?: Date;\n updatedAt?: Date;\n createdBy?: string;\n updatedBy?: string;\n}\n\n/**\n * Defines the structure of an extra field for a task.\n */\nexport interface AXPExtraField {\n title: string;\n description?: string;\n widget: AXPWidgetColumnNode;\n}\n\n/**\n * Represents a single task in the system.\n * @template T - The type of custom data associated with the task.\n */\nexport interface AXPTask<T = Record<string, any>> extends AXPAuditable {\n /**\n * Unique identifier for the task. Should be immutable.\n */\n readonly id: string | number;\n\n /**\n * The index of the task.\n */\n index: number;\n\n /**\n * The title of the task.\n */\n title: string;\n\n /**\n * A detailed description of the task, potentially supporting markdown.\n */\n description?: string;\n\n /**\n * The current status of the task.\n */\n status: {\n id: string | number;\n title: string;\n /** Semantic chip/badge color token (e.g. warning, success). */\n color?: string;\n };\n\n /**\n * The user who is assigned to work on the task.\n */\n assignee?: AXPUserReference;\n\n /**\n * The user who created or reported the task.\n */\n reporter: AXPUserReference;\n\n /**\n * Other users involved or watching the task.\n */\n participants?: AXPUserReference[];\n\n /**\n * The start date of the task.\n */\n startDate: Date;\n\n /**\n * The end date or deadline of the task.\n */\n endDate: Date;\n\n /**\n * Canonical task priority (single source with workflow human-task activities).\n */\n priority?: AXPTaskPriority;\n\n /**\n * The progress of the task, from 0 to 100.\n */\n progress?: number;\n\n /**\n * An array of tags for categorizing and filtering.\n */\n tags?: string[];\n\n /**\n * Indicates if the task is an all-day event.\n */\n allDay?: boolean;\n\n /**\n * A CSS class to apply to the task for custom styling.\n */\n cssClass?: string;\n\n /**\n * Indicates if the task is read-only for the current user.\n */\n readonly?: boolean;\n\n /**\n * Custom data associated with the task for extensibility.\n */\n data?: T;\n\n /**\n * The name of the provider that owns this task.\n */\n provider?: string;\n\n /**\n * The resource id associated with the task.\n */\n resourceId?: string | number;\n}\n\n/** Task-board assignee/reporter picker item returned by queries and default loaders. */\nexport interface AXPTaskBoardUserOption {\n id: string | number;\n displayName: string;\n username?: string;\n}\n\n/** Due-status filter keys (aligned with {@link AXPDueStatusKey} in due-status module). */\nexport type AXPTaskDueStatusFilterKey =\n | 'completed'\n | 'no-due-date'\n | 'overdue'\n | 'due-today'\n | 'due-tomorrow'\n | 'due-this-week'\n | 'upcoming';\n\n/**\n * Defines the filter options for querying tasks.\n */\nexport interface AXPTaskFilter {\n range?: AXRange<Date>;\n assigneeIds?: (string | number)[];\n reporterIds?: (string | number)[];\n tags?: string[];\n types?: string[];\n skip?: number;\n take?: number;\n priorities?: Array<AXPTaskPriority | 'no_priority'>;\n dueStatusKeys?: AXPTaskDueStatusFilterKey[];\n /** Filter by {@link AXPEntityReference.type} entity sources (e.g. `ProjectManagement.Project`). */\n subjectRefTypes?: string[];\n /** Filter by {@link AXPEntityReference.id} values. */\n subjectRefIds?: string[];\n}\n\n/**\n * Represents an action performed on a task.\n */\nexport interface AXPTaskAction {\n nativeEvent: MouseEvent;\n task: AXPTask;\n}\n\n/**\n * Represents the status of a task (e.g., a column on a Kanban board).\n */\nexport interface AXPTaskStatus {\n key: string;\n index: number;\n title: string;\n color?: string;\n}\n\nexport interface AXPResource extends AXSchedulerResource {\n readonly id: string | number;\n title: string;\n description?: string;\n}\n\n/** Resolved task-board provider metadata for filters, datasources, and display. */\nexport interface AXPTaskBoardTaskTypeOption {\n name: string;\n title: string;\n icon: string;\n}\n\n/**\n * An abstract class for a workflow task provider, which is responsible for\n * fetching and manipulating task data from a specific source.\n * @template T - The type of custom data associated with the tasks.\n */\nexport abstract class AXPWorkflowTaskProvider<T = Record<string, any>> {\n /** Stable provider key used for filtering, events, and task.provider. */\n abstract get name(): string;\n\n abstract getTitle(): Promise<string>;\n\n abstract getIcon(): Promise<string>;\n\n private readonly eventService = inject(AXPBroadcastEventService);\n\n /**\n * Retrieves a list of tasks based on the provided filter options.\n * @param options - The filter options.\n * @returns A promise that resolves with the list of tasks and the total count.\n */\n abstract getTasks(options?: AXPTaskFilter): Promise<{ items: AXPTask<T>[]; total: number }>;\n\n /**\n * Returns a list of extra fields that can be displayed as columns for this provider's tasks.\n * This defines the schema for custom data.\n */\n abstract getExtraFields(): Promise<AXPExtraField[]>;\n\n abstract getActions(context?: AXPTask<T>): Promise<AXPTaskActionMenuItem[]>;\n\n abstract getStatuses(): Promise<AXPTaskStatus[]>;\n\n async getResources(): Promise<AXPResource[]> {\n return [];\n }\n\n /**\n * Updates a list of tasks.\n * @param tasks - The tasks to update.\n * @returns A promise that resolves with the updated tasks.\n */\n abstract updateTasks(tasks: AXPTask<T>[]): Promise<AXPTask<T>[]>;\n\n /**\n * Executes a command on the task provider.\n * @param command - The command to execute.\n * @returns A promise that resolves with the result of the command execution.\n */\n abstract executeCommand(command: AXPExecuteCommand): AXPCommandExecuteResultPromise;\n\n /**\n * Optional component to display in the task popover instead of the default popover content.\n * The component must implement AXPTaskPopoverComponent interface and accept a task input.\n * @returns A component type or a function that returns a component type (for lazy loading).\n */\n getComponent?(): Type<AXPTaskPopoverComponent> | (() => Promise<Type<AXPTaskPopoverComponent>>) | null;\n\n /**\n * Optional metadata for custom task popovers: widget definitions and context values rendered in view mode.\n */\n getPopoverMetadata?(task: AXPTask<T>): Promise<AXPTaskPopoverMetadata>;\n\n public refresh() {\n this.eventService.publish('task-board.refresh', {\n provider: this.name,\n });\n }\n\n public close() {\n this.eventService.publish('task-board.close', {\n provider: this.name,\n });\n }\n\n /**\n * Opens a task on the task board (after refresh, the board selects this task).\n */\n protected requestTaskBoardOpenTask(task: AXPTask<T>): void {\n this.eventService.publish('task-board.open-task', {\n provider: this.name,\n task: { ...task, provider: this.name },\n });\n }\n}\n\n/**\n * Interface that task popover components must implement.\n * Components provided by task providers should implement this interface to receive the task data.\n */\nexport abstract class AXPTaskPopoverComponent {\n private readonly eventService = inject(AXPBroadcastEventService);\n\n /**\n * The task/appointment data to display in the popover.\n */\n abstract task: InputSignal<AXPTask>;\n\n /**\n * Requests the task board to refresh popover/task data.\n * Provider defaults to the current task provider.\n */\n protected refreshPopover(provider?: string): void {\n this.eventService.publish('task-board.refresh', {\n provider: provider ?? this.task()?.provider,\n });\n }\n\n /**\n * Requests the host task board view to close the active popover.\n * Provider defaults to the current task provider.\n */\n protected closePopover(provider?: string): void {\n this.eventService.publish('task-board.close', {\n provider: provider ?? this.task()?.provider,\n });\n }\n}\n\nexport interface AXPWorkflowTaskProviderResolveOptions {\n /** When true, clears workflow-definition caches and re-discovers providers. */\n force?: boolean;\n}\n\n/**\n * Optional resolver registered by workflow-management to discover task providers on demand.\n */\nexport const AXP_WORKFLOW_TASK_PROVIDER_RESOLVER = new InjectionToken<\n (options?: AXPWorkflowTaskProviderResolveOptions) => Promise<AXPWorkflowTaskProvider[]>\n>('AXP_WORKFLOW_TASK_PROVIDER_RESOLVER');\n\n/**\n * Injection token for registering multiple workflow task providers.\n */\nexport const AXP_WORKFLOW_TASK_PROVIDER = new InjectionToken<\n AXPWorkflowTaskProvider[] | Promise<AXPWorkflowTaskProvider>[]\n>('AXP_WORKFLOW_TASK_PROVIDER');\n","//#region ---- Imports ----\n\nimport {\n AXPProjectsWorkPermissionKeys\n} from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\n\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Sentinel id for the task-board assignee filter option: tasks with no assignee. */\nexport const AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID = 'TaskManagement:TaskBoard:Assignee:Unassigned';\n\n//#endregion\n\n//#region ---- Permission Helpers ----\n\n/** Permission to view and filter tasks across all assignees on the task board. */\nexport const AXM_TASK_VIEW_ALL_PERMISSION = AXPProjectsWorkPermissionKeys.ViewAllTasks;\n\n/**\n * Returns whether the current session may filter tasks by any assignee.\n */\nexport function canViewAllTaskAssignees(sessionService: AXPSessionService): boolean {\n return sessionService.authorize(AXM_TASK_VIEW_ALL_PERMISSION);\n}\n\nexport function isTaskBoardUnassignedAssigneeId(id: string | number): boolean {\n return String(id) === AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID;\n}\n\n/** Whether the user has a persisted assignee filter (including an explicit empty selection). */\nexport function hasTaskBoardSavedAssigneePreference(\n savedAssigneeIds: (string | number)[] | null | undefined,\n): boolean {\n return savedAssigneeIds !== undefined && savedAssigneeIds !== null;\n}\n\n/**\n * Resolves saved assignee ids from settings. When the setting is unset (`undefined`/`null`):\n * - Users with view-all permission default to no assignee filter (all tasks).\n * - Everyone else defaults to the signed-in user only.\n * An explicit empty array means \"no assignee filter\" only for view-all users;\n * for everyone else it is coerced to the signed-in user.\n */\nexport function resolveTaskBoardSavedAssigneeIds(\n sessionService: AXPSessionService,\n savedAssigneeIds: (string | number)[] | null | undefined,\n): (string | number)[] {\n if (hasTaskBoardSavedAssigneePreference(savedAssigneeIds)) {\n const saved = savedAssigneeIds ?? [];\n if (saved.length === 0 && !canViewAllTaskAssignees(sessionService)) {\n const currentUserId = sessionService.user?.id;\n return currentUserId != null ? [currentUserId] : [];\n }\n return saved;\n }\n\n if (canViewAllTaskAssignees(sessionService)) {\n return [];\n }\n\n const currentUserId = sessionService.user?.id;\n return currentUserId != null ? [currentUserId] : [];\n}\n\n/** Assignee picker item for the signed-in user (used by task-board assignee datasource). */\nexport function resolveTaskBoardCurrentUserAssigneeItem(sessionService: AXPSessionService): {\n id: string;\n displayName: string;\n username: string;\n} | null {\n const currentUser = sessionService.user;\n if (currentUser?.id == null) {\n return null;\n }\n\n return {\n id: currentUser.id,\n displayName: currentUser.title || currentUser.name,\n username: currentUser.name,\n };\n}\n\n/**\n * Restricts assignee filter ids to the current user when {@link canViewAllTaskAssignees} is false.\n * Strips the unassigned sentinel for users without view-all permission.\n * Empty selection is only allowed for view-all users (means all assignees).\n */\nexport function normalizeTaskBoardAssigneeIds(\n sessionService: AXPSessionService,\n assigneeIds: (string | number)[],\n): (string | number)[] {\n if (canViewAllTaskAssignees(sessionService)) {\n return assigneeIds;\n }\n\n const currentUserId = sessionService.user?.id;\n return currentUserId != null ? [currentUserId] : [];\n}\n\n/**\n * Whether a task matches the selected assignee filter ids (OR semantics).\n * Supports {@link AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID} for tasks without an assignee.\n */\nexport function matchesTaskBoardAssigneeFilter(\n assigneeId: string | undefined | null,\n filterIds: (string | number)[],\n): boolean {\n if (filterIds.length === 0) {\n return true;\n }\n\n const filterSet = new Set(filterIds.map(String));\n const wantsUnassigned = filterSet.has(AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID);\n const hasAssignee = assigneeId != null && assigneeId !== '';\n\n if (!hasAssignee) {\n return wantsUnassigned;\n }\n\n return filterSet.has(String(assigneeId));\n}\n\n/**\n * Whether a workflow task matches assignee filters using assigned/candidate user ids.\n */\nexport function matchesTaskBoardAssigneeUserIdsFilter(\n userIds: string[],\n filterIds: (string | number)[],\n): boolean {\n if (filterIds.length === 0) {\n return true;\n }\n\n const filterSet = new Set(filterIds.map(String));\n const wantsUnassigned = filterSet.has(AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID);\n\n if (userIds.length === 0) {\n return wantsUnassigned;\n }\n\n return userIds.some((id) => filterSet.has(String(id)));\n}\n\n//#endregion\n","import type { AXMCalendarManagementOccasion } from '@acorex-platform/module-calendar-management-client';\nimport { mapCalendarOccasionToHolidayDate } from '@acorex-platform/module-calendar-management-client';\n\nexport function toTaskBoardHolidayDate(occasion: AXMCalendarManagementOccasion) {\n return mapCalendarOccasionToHolidayDate(occasion);\n}\n","//#region ----- Imports -----\n\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Persisted task rows shown on the task board. */\nexport const TASK_BOARD_TASK_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.task.name}`;\n\n/** Assignment rows that change who a task is assigned to. */\nexport const TASK_BOARD_TASK_ASSIGNMENT_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.taskAssignment.name}`;\n\n/**\n * Workflow human-task cards come from suspended instance bookmarks, not Task rows.\n * Keep this string in sync with `WorkflowManagement.WorkflowInstance` (do not import workflow-management — it already depends on this package).\n */\nexport const TASK_BOARD_WORKFLOW_INSTANCE_ENTITY = 'WorkflowManagement.WorkflowInstance';\n\nconst TASK_BOARD_REALTIME_ENTITIES = new Set<string>([\n TASK_BOARD_TASK_ENTITY,\n TASK_BOARD_TASK_ASSIGNMENT_ENTITY,\n TASK_BOARD_WORKFLOW_INSTANCE_ENTITY,\n]);\n\n//#endregion\n\n//#region ----- Helpers -----\n\n/** True when a layout-refresh / entity-mutation name should refresh the task board or its menu badge. */\nexport function isTaskBoardRealtimeEntity(name: string | undefined | null): boolean {\n return name != null && TASK_BOARD_REALTIME_ENTITIES.has(name);\n}\n\n//#endregion\n","import type { AXPTaskFilter } from './task-board.types';\n\nfunction serializeDate(value: Date | undefined): string | null {\n if (!value) {\n return null;\n }\n return new Date(value).toISOString();\n}\n\n/** Stable cache key for {@link AXPTaskBoardService.getTasks} deduplication. */\nexport function serializeTaskFilterForCache(options?: AXPTaskFilter): string {\n if (!options) {\n return '{}';\n }\n\n const normalized = {\n types: options.types?.slice().sort(),\n assigneeIds: options.assigneeIds?.map(String).sort(),\n reporterIds: options.reporterIds?.map(String).sort(),\n tags: options.tags?.slice().sort(),\n priorities: options.priorities?.slice().sort(),\n dueStatusKeys: options.dueStatusKeys?.slice().sort(),\n subjectRefTypes: options.subjectRefTypes?.slice().sort(),\n subjectRefIds: options.subjectRefIds?.map(String).sort(),\n skip: options.skip ?? 0,\n take: options.take ?? null,\n range: options.range\n ? {\n from: serializeDate(options.range.from),\n end: serializeDate(options.range.end),\n }\n : null,\n };\n\n return JSON.stringify(normalized);\n}\n","import { AXRange } from '@acorex/cdk/common';\nimport type { AXSchedulerDateRange } from '@acorex/components/scheduler';\nimport { AXCalendarService, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXMCalendarManagementService } from '@acorex-platform/module-calendar-management-client';\nimport { AXPExecuteCommand, AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport {\n AXPBroadcastEventService,\n AXPEntityBroadcastService,\n} from '@acorex-platform/framework-client/core';\nimport { DestroyRef, inject, Injectable, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, filter, merge, Subject } from 'rxjs';\nimport { toTaskBoardHolidayDate } from './calendar-holiday-presentation.utils';\nimport { isTaskBoardRealtimeEntity } from './task-board-realtime-entities';\nimport { serializeTaskFilterForCache } from './task-board-task-cache.util';\nimport type { AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXP_WORKFLOW_TASK_PROVIDER,\n AXP_WORKFLOW_TASK_PROVIDER_RESOLVER,\n AXPResource,\n AXPTask,\n AXPTaskBoardTaskTypeOption,\n AXPTaskFilter,\n AXPWorkflowTaskProvider,\n AXPWorkflowTaskProviderResolveOptions,\n} from './task-board.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTaskBoardService {\n private calendarService = inject(AXCalendarService);\n private calendarManagementService = inject(AXMCalendarManagementService);\n private readonly injector = inject(Injector);\n private readonly providerResolver = inject(AXP_WORKFLOW_TASK_PROVIDER_RESOLVER, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly entityEvents = inject(AXPEntityBroadcastService);\n\n /** Cached resolved providers; set after first call to resolveProviders(). */\n private resolvedProviders: AXPWorkflowTaskProvider[] | null = null;\n\n /** Cached resolved provider metadata; set together with {@link resolvedProviders}. */\n private resolvedTaskTypeOptions: AXPTaskBoardTaskTypeOption[] | null = null;\n\n private readonly taskResultCache = new Map<\n string,\n { result: { items: AXPTask[]; total: number }; expiresAt: number }\n >();\n private readonly taskResultInFlight = new Map<string, Promise<{ items: AXPTask[]; total: number }>>();\n private readonly taskCacheTtlMs = 5_000;\n\n private calendarEventTypesCache: { id: string; title: string; color?: string; icon?: string }[] | null = null;\n private calendarEventTypesInFlight: Promise<{ id: string; title: string; color?: string; icon?: string }[]> | null =\n null;\n\n refresh$ = new Subject<{ provider?: string }>();\n close$ = new Subject<{ provider?: string }>();\n openTask$ = new Subject<{\n provider?: string;\n task?: AXPTask;\n instanceId?: string;\n activityId?: string;\n bookmarkId?: string;\n }>();\n\n constructor() {\n this.refresh$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.resolvedProviders = null;\n this.resolvedTaskTypeOptions = null;\n this.invalidateTaskCache();\n });\n\n //\n this.eventService\n .listen<{ provider?: string }>('task-board.refresh')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ data }) => {\n this.refresh$.next(data ?? {});\n });\n\n this.eventService\n .listen<{ provider?: string }>('task-board.close')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ data }) => {\n this.close$.next(data ?? {});\n });\n\n this.eventService\n .listen<{\n provider?: string;\n task?: AXPTask;\n instanceId?: string;\n activityId?: string;\n bookmarkId?: string;\n }>('task-board.open-task')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ data }) => {\n if (data?.task || (data?.instanceId && data?.activityId)) {\n this.openTask$.next(data);\n }\n });\n\n // Keep board in sync when Task / assignment / workflow-instance rows change elsewhere\n // (local CRUD + realtime `entity.mutation` → layout refresh). Refresh all providers:\n // site-inspection cards also come from workflow human-task bookmarks, not only Task rows.\n merge(\n this.entityEvents.listenDeleted(),\n this.entityEvents.listenCreated(),\n this.entityEvents.listenModified(),\n this.entityEvents.listenLayoutRefresh(),\n )\n .pipe(\n filter(({ data }) => isTaskBoardRealtimeEntity(data?.name)),\n debounceTime(300),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n this.requestRefresh();\n });\n }\n\n /**\n * Requests task board refresh through broadcast events.\n */\n requestRefresh(provider?: string): void {\n this.eventService.publish('task-board.refresh', { provider });\n }\n\n /**\n * Requests active task popover close through broadcast events.\n */\n requestClose(provider?: string): void {\n this.eventService.publish('task-board.close', { provider });\n }\n\n /**\n * Opens a task on the task board (refresh, then select the task in the active view).\n */\n requestOpenTask(\n taskOrRef: AXPTask | { instanceId: string; activityId: string; provider?: string; bookmarkId?: string },\n provider?: string,\n ): void {\n if ('id' in taskOrRef && taskOrRef.title !== undefined) {\n const task = taskOrRef as AXPTask;\n this.eventService.publish('task-board.open-task', { provider: provider ?? task.provider, task });\n return;\n }\n const ref = taskOrRef as { instanceId: string; activityId: string; provider?: string; bookmarkId?: string };\n this.eventService.publish('task-board.open-task', ref);\n }\n\n /** Clears cached workflow task providers so the next resolve re-reads DI registrations. */\n clearProviderCache(): void {\n this.resolvedProviders = null;\n this.resolvedTaskTypeOptions = null;\n }\n\n /** Clears cached task query results and calendar metadata. */\n invalidateTaskCache(): void {\n this.taskResultCache.clear();\n this.taskResultInFlight.clear();\n this.calendarEventTypesCache = null;\n this.calendarEventTypesInFlight = null;\n this.eventService.publish('task-board.invalidate-task-cache', {});\n }\n\n /**\n * Resolves workflow task providers. Uses the optional workflow resolver when registered so discovery\n * can be re-run after workflow definitions become available (first app load before mock seed).\n */\n async resolveProviders(options?: AXPWorkflowTaskProviderResolveOptions): Promise<AXPWorkflowTaskProvider[]> {\n if (\n !options?.force &&\n this.resolvedProviders !== null &&\n this.resolvedProviders.length > 0\n ) {\n return this.resolvedProviders;\n }\n\n let providers: AXPWorkflowTaskProvider[] = [];\n\n if (this.providerResolver) {\n providers = await this.providerResolver(options);\n if (providers.length === 0) {\n providers = await this.providerResolver({ ...options, force: true });\n }\n } else {\n providers = await this.flattenProviderEntries(this.getInjectedProviderEntries());\n }\n\n if (providers.length > 0) {\n this.resolvedProviders = providers;\n this.resolvedTaskTypeOptions = await this.resolveTaskTypeOptions(providers);\n } else {\n this.resolvedProviders = null;\n this.resolvedTaskTypeOptions = null;\n }\n return providers;\n }\n\n private async resolveTaskTypeOptions(\n providers: AXPWorkflowTaskProvider[],\n ): Promise<AXPTaskBoardTaskTypeOption[]> {\n return Promise.all(\n providers.map(async (provider) => ({\n name: provider.name,\n title: await provider.getTitle(),\n icon: await provider.getIcon(),\n })),\n );\n }\n\n private getInjectedProviderEntries(): unknown[] {\n const injected = this.injector.get(AXP_WORKFLOW_TASK_PROVIDER, null, { optional: true });\n if (injected == null) {\n return [];\n }\n return Array.isArray(injected) ? injected : [injected];\n }\n\n private async flattenProviderEntries(entries: unknown[]): Promise<AXPWorkflowTaskProvider[]> {\n const resolved = await Promise.all(entries.map((entry) => Promise.resolve(entry)));\n const flattened = resolved.flatMap((entry) => (Array.isArray(entry) ? entry : [entry]));\n return flattened.filter(\n (provider): provider is AXPWorkflowTaskProvider =>\n provider != null && typeof (provider as AXPWorkflowTaskProvider).getTasks === 'function',\n );\n }\n\n async getTaskTypes(options?: AXPWorkflowTaskProviderResolveOptions): Promise<AXPWorkflowTaskProvider[]> {\n return this.resolveProviders(options);\n }\n\n /**\n * Resolved provider metadata for UI filters and datasources.\n * Call {@link resolveProviders} or {@link getTaskTypes} first.\n */\n getTaskTypeOptions(): AXPTaskBoardTaskTypeOption[] {\n return this.resolvedTaskTypeOptions ?? [];\n }\n\n getTaskTypeOption(name: string | undefined): AXPTaskBoardTaskTypeOption | null {\n if (!name) {\n return null;\n }\n return this.resolvedTaskTypeOptions?.find((option) => option.name === name) ?? null;\n }\n\n async getTasks(options?: AXPTaskFilter): Promise<{ items: AXPTask[]; total: number }> {\n const cacheKey = serializeTaskFilterForCache(options);\n const now = Date.now();\n const cached = this.taskResultCache.get(cacheKey);\n if (cached && cached.expiresAt > now) {\n return cached.result;\n }\n\n const inFlight = this.taskResultInFlight.get(cacheKey);\n if (inFlight) {\n return inFlight;\n }\n\n const request = this.fetchTasksFromProviders(options)\n .then((result) => {\n this.taskResultCache.set(cacheKey, {\n result,\n expiresAt: Date.now() + this.taskCacheTtlMs,\n });\n return result;\n })\n .finally(() => {\n this.taskResultInFlight.delete(cacheKey);\n });\n\n this.taskResultInFlight.set(cacheKey, request);\n return request;\n }\n\n private async fetchTasksFromProviders(\n options?: AXPTaskFilter,\n ): Promise<{ items: AXPTask[]; total: number }> {\n const providers = await this.resolveProviders();\n if (providers.length === 0) {\n console.warn('No task providers available');\n return { items: [], total: 0 };\n }\n\n const filteredProviders = providers.filter(\n (provider) => (options?.types?.length ?? 0) === 0 || options?.types?.includes(provider.name),\n );\n\n if (filteredProviders.length === 0) {\n return { items: [], total: 0 };\n }\n\n // Single provider case - handles pagination efficiently at the source.\n if (filteredProviders.length === 1) {\n const provider = filteredProviders[0];\n const result = await provider.getTasks(options);\n // Add provider name to each task for identification.\n const itemsWithProvider = result.items.map((t) => ({ ...t, provider: provider.name }));\n return { items: itemsWithProvider, total: result.total };\n }\n\n // Multi-provider case - fetch filtered data then paginate client-side.\n const mergeData: AXPTask[] = [];\n\n // Separate pagination from filtering to pass correct options to providers.\n const { skip, take, ...providerOptions } = options ?? {};\n const listTake = options?.take != null && options.take > 0 ? options.take : 5000;\n\n const promises = filteredProviders.map((provider) =>\n provider\n .getTasks({ ...providerOptions, skip: 0, take: listTake })\n .then((result) => result.items.map((t) => ({ ...t, provider: provider.name }))),\n );\n\n const results = await Promise.all(promises);\n for (const resultArray of results) {\n mergeData.push(...resultArray);\n }\n\n // Apply pagination client-side after merging the correctly filtered data.\n const total = mergeData.length;\n const finalSkip = skip ?? 0;\n const finalTake = take ?? total;\n const items = mergeData.slice(finalSkip, finalSkip + finalTake);\n\n return { items, total };\n }\n\n async updateTaskDateRange(task: AXPTask, range: AXSchedulerDateRange): Promise<AXPTask> {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === task.provider) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${task.provider}' not found`);\n }\n // Create a task update object and call the unified method\n const taskWithNewRange = { ...task, startDate: range.from, endDate: range.end };\n const updatedTasks = await provider.updateTasks([taskWithNewRange]);\n\n if (updatedTasks.length > 0) {\n return updatedTasks[0];\n } else {\n throw new Error('Task update failed or task not found in provider.');\n }\n }\n\n async updateTasks(tasks: AXPTask[]): Promise<AXPTask[]> {\n if (!tasks || tasks.length === 0) {\n return [];\n }\n // Ensure all tasks are from the same provider before performing a bulk update\n if (!tasks.every((t) => t.provider === tasks[0].provider)) {\n throw new Error('All tasks must have the same provider for a bulk update.');\n }\n\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === tasks[0].provider) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${tasks[0].provider}' not found`);\n }\n return provider.updateTasks(tasks);\n }\n\n async executeCommand(command: AXPExecuteCommand, providerName: string): AXPCommandExecuteResultPromise {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === providerName) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${providerName}' not found`);\n }\n return await provider.executeCommand(command);\n }\n\n async getStatusName(key: any, providerName: string): Promise<string | null> {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === providerName) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${providerName}' not found`);\n }\n const statuses = await provider.getStatuses();\n return statuses.find((s) => s.key === key)?.title ?? null;\n }\n\n async getEvents(range: AXRange<Date>, eventTypeIds?: string[]): Promise<AXHolidayDate[]> {\n const events = await this.calendarManagementService.getOccasions(range, eventTypeIds);\n return events.map((event) => toTaskBoardHolidayDate(event));\n }\n\n async getCalendarEventTypes() {\n if (this.calendarEventTypesCache) {\n return this.calendarEventTypesCache;\n }\n\n if (this.calendarEventTypesInFlight) {\n return this.calendarEventTypesInFlight;\n }\n\n this.calendarEventTypesInFlight = this.calendarManagementService\n .getCalendars()\n .then((result) => {\n this.calendarEventTypesCache = result ?? [];\n return this.calendarEventTypesCache;\n })\n .catch((error) => {\n console.error(error);\n this.calendarEventTypesCache = [];\n return this.calendarEventTypesCache;\n })\n .finally(() => {\n this.calendarEventTypesInFlight = null;\n });\n\n return this.calendarEventTypesInFlight;\n }\n\n /**\n * Returns the provider by name. Uses cached resolved providers; returns null if not resolved yet.\n * Ensure resolveProviders() has been called (e.g. via getTaskTypes() or getTasks()) before using this.\n */\n getProvider(name: string | undefined): AXPWorkflowTaskProvider | null {\n if (!name) return null;\n return this.resolvedProviders?.find((p) => p.name === name) ?? null;\n }\n\n rangeCalculator(type: string): AXRange<Date> | undefined {\n switch (type) {\n case 'today':\n return {\n from: this.calendarService.create(new Date()).startOf('day').date,\n end: this.calendarService.create(new Date()).endOf('day').date,\n };\n case 'this-week':\n return {\n from: this.calendarService.create(new Date()).startOf('week').date,\n end: this.calendarService.create(new Date()).endOf('week').date,\n };\n case 'this-month':\n return {\n from: this.calendarService.create(new Date()).startOf('month').date,\n end: this.calendarService.create(new Date()).endOf('month').date,\n };\n default:\n return undefined;\n }\n }\n\n async getResources(providerName: string): Promise<AXPResource[]> {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === providerName) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${providerName}' not found`);\n }\n return provider.getResources();\n }\n}\n","//#region ---- Imports ----\n\nimport type { AXCalendarService } from '@acorex/core/date-time';\nimport type { AXPDateTimeFilterValue } from '@acorex-platform/framework-client/common';\nimport { applyDateFilterPreset } from '@acorex-platform/framework-client/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","//#region ----- Imports -----\n\nimport {\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY,\n resolveTaskBoardViewCategory,\n resolveTaskBoardViewLayout,\n type AXPTaskBoardCalendarLayout,\n type AXPTaskBoardTableLayout,\n type AXPTaskBoardTimelineLayout,\n type AXPTaskBoardViewLayout,\n} from './task-board-view-category.utils';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype AXPTaskBoardMenuViewMode = Parameters<typeof resolveTaskBoardViewCategory>[0];\n\nexport type AXPTaskBoardMenuPathLayouts = {\n calendar?: AXPTaskBoardCalendarLayout | null;\n timeline?: AXPTaskBoardTimelineLayout | null;\n table?: AXPTaskBoardTableLayout | null;\n};\n\n//#endregion\n\n//#region ----- Menu Path -----\n\n/**\n * Builds the task-board menu / navigate path including persisted view + layout query params.\n * Example: `safetyminder/TaskManagement/task-board?view=calendar&layout=monthly`\n */\nexport function buildTaskBoardMenuPath(\n applicationName: string,\n moduleName: string,\n viewMode?: string | null,\n layouts: AXPTaskBoardMenuPathLayouts = {},\n): string {\n const effectiveMode = (viewMode || 'month') as AXPTaskBoardMenuViewMode;\n const category = resolveTaskBoardViewCategory(effectiveMode);\n const layout = resolveTaskBoardMenuLayout(category, effectiveMode, layouts);\n\n const base = `${applicationName}/${moduleName}/task-board`;\n const params = new URLSearchParams({ view: category });\n if (layout) {\n params.set('layout', layout);\n }\n\n return `${base}?${params.toString()}`;\n}\n\nfunction resolveTaskBoardMenuLayout(\n category: ReturnType<typeof resolveTaskBoardViewCategory>,\n viewMode: AXPTaskBoardMenuViewMode,\n layouts: AXPTaskBoardMenuPathLayouts,\n): AXPTaskBoardViewLayout | null {\n switch (category) {\n case 'calendar':\n return (\n layouts.calendar ??\n (resolveTaskBoardViewLayout(viewMode) as AXPTaskBoardCalendarLayout | null) ??\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.calendar\n );\n case 'timeline':\n return (\n layouts.timeline ??\n (resolveTaskBoardViewLayout(viewMode) as AXPTaskBoardTimelineLayout | null) ??\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.timeline\n );\n case 'table':\n return (\n layouts.table ??\n (resolveTaskBoardViewLayout(viewMode) as AXPTaskBoardTableLayout | null) ??\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.table\n );\n case 'kanban':\n return null;\n default:\n return AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.calendar;\n }\n}\n\n//#endregion\n","import { AXPTask, AXPTaskPriority } from './task-board.types';\n\nexport type AXPPriorityFilterKey = AXPTaskPriority | 'no_priority';\n\nexport const AXPTASK_PRIORITIES: readonly AXPTaskPriority[] = ['urgent', 'high', 'normal', 'low'];\n\nexport const TASK_PRIORITY_ORDER: Record<AXPPriorityFilterKey, number> = {\n urgent: 0,\n high: 1,\n normal: 2,\n low: 3,\n no_priority: 4,\n};\n\n/** Normalizes workflow or legacy task-board priority values to the canonical enum. */\nexport function normalizeTaskPriority(value: unknown): AXPTaskPriority {\n const normalized = String(value ?? 'normal')\n .trim()\n .toLowerCase();\n\n if (normalized === 'urgent' || normalized === 'high' || normalized === 'normal' || normalized === 'low') {\n return normalized;\n }\n\n const legacyMap: Record<string, AXPTaskPriority> = {\n highest: 'urgent',\n medium: 'normal',\n lowest: 'low',\n };\n\n return legacyMap[normalized] ?? 'normal';\n}\n\nexport function getTaskPriorityColor(priority: AXPTaskPriority): string {\n switch (priority) {\n case 'urgent':\n return 'danger';\n case 'high':\n return 'warning';\n case 'normal':\n return 'secondary';\n case 'low':\n return 'neutral';\n }\n}\n\nconst LEGACY_PRIORITY_FILTER_MAP: Record<string, AXPPriorityFilterKey> = {\n highest: 'urgent',\n medium: 'normal',\n lowest: 'low',\n};\n\n/** Maps persisted or query-string priority filter keys to the canonical filter enum. */\nexport function normalizePriorityFilterKey(value: unknown): AXPPriorityFilterKey {\n const normalized = String(value ?? '')\n .trim()\n .toLowerCase();\n\n if (normalized === 'no_priority') {\n return 'no_priority';\n }\n\n if (normalized in LEGACY_PRIORITY_FILTER_MAP) {\n return LEGACY_PRIORITY_FILTER_MAP[normalized];\n }\n\n return normalizeTaskPriority(normalized);\n}\n\nexport function normalizePriorityFilterKeys(values: unknown[] | undefined): AXPPriorityFilterKey[] {\n if (!values?.length) {\n return [];\n }\n\n return [...new Set(values.map(normalizePriorityFilterKey))];\n}\n\nexport function getTaskPriorityFilterKey(task: AXPTask): AXPPriorityFilterKey {\n return task.priority ? normalizeTaskPriority(task.priority) : 'no_priority';\n}\n\nexport function matchesTaskPriorityFilter(task: AXPTask, priorities: AXPPriorityFilterKey[]): boolean {\n if (priorities.length === 0) {\n return true;\n }\n\n const filterSet = new Set(priorities.map(normalizePriorityFilterKey));\n return filterSet.has(getTaskPriorityFilterKey(task));\n}\n","import { AXPDueStatusFilterKey } from './due-status';\nimport { normalizePriorityFilterKeys, type AXPPriorityFilterKey } from './task-board-priority.utils';\nimport type { AXPTaskBoardTaskTypeOption } from './task-board.types';\n\nexport type { AXPTaskBoardTaskTypeOption };\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-platform/module-calendar-management-client';\n","import { AXPPlatformScope, AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport type { AXSchedulerView } from '@acorex/components/scheduler';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuService, AXPSettingsService } from '@acorex-platform/framework-client/common';\n\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport {\n AXMTaskBoardSettings,\n AXPTaskManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-task-management-client/contracts';\nimport { hasTaskBoardSavedAssigneePreference, normalizeTaskBoardAssigneeIds, resolveTaskBoardSavedAssigneeIds } from './task-board-assignee-access';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport { buildTaskBoardMenuPath } from './task-board-menu-path.utils';\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, AXPTaskBoardTaskTypeOption, AXPWorkflowTaskProvider, AXPWorkflowTaskProviderResolveOptions } 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 taskTypeOptions: AXPTaskBoardTaskTypeOption[];\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 taskTypeOptions: [],\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 return count;\n }),\n })),\n\n withMethods(\n (\n store,\n settingsService = inject(AXPSettingsService),\n taskBoardService = inject(AXPTaskBoardService),\n sessionService = inject(AXPSessionService),\n menuService = inject(AXPMenuService),\n ) => {\n const userScopedSettings = () => settingsService.scope(AXPPlatformScope.User);\n let settingsSyncInitialized = false;\n\n const syncTaskBoardMenuPath = () => {\n const applicationName = sessionService.application?.name;\n if (!applicationName) {\n return;\n }\n\n menuService.updateItem(AXPTaskManagementMenuKeys.TaskBoard, {\n path: buildTaskBoardMenuPath(applicationName, RootConfig.module.name, store.currentViewMode(), {\n calendar: store.calendarLayout(),\n timeline: store.timelineLayout(),\n table: store.tableLayout(),\n }),\n });\n };\n\n const syncSettingsFromChangeEvent = (keys: string[], values: Record<string, unknown>) => {\n const patch: Partial<AXPTaskBoardState> = {};\n let shouldSyncMenuPath = false;\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 (keys.includes(AXMTaskBoardSettings.ViewMode)) {\n const mode = values[AXMTaskBoardSettings.ViewMode] as AXPTaskBoardViewMode | undefined;\n if (mode) {\n patch.currentViewMode = mode;\n shouldSyncMenuPath = true;\n }\n }\n\n if (keys.includes(AXMTaskBoardSettings.CalendarLayout)) {\n const layout = values[AXMTaskBoardSettings.CalendarLayout] as AXPTaskBoardCalendarLayout | undefined;\n if (layout) {\n patch.calendarLayout = layout;\n shouldSyncMenuPath = true;\n }\n }\n\n if (keys.includes(AXMTaskBoardSettings.TimelineLayout)) {\n const layout = values[AXMTaskBoardSettings.TimelineLayout] as AXPTaskBoardTimelineLayout | undefined;\n if (layout) {\n patch.timelineLayout = layout;\n shouldSyncMenuPath = true;\n }\n }\n\n if (keys.includes(AXMTaskBoardSettings.TableLayout)) {\n const layout = values[AXMTaskBoardSettings.TableLayout] as AXPTaskBoardTableLayout | undefined;\n if (layout) {\n patch.tableLayout = layout;\n shouldSyncMenuPath = true;\n }\n }\n\n if (Object.keys(patch).length > 0) {\n patchState(store, patch);\n }\n\n if (shouldSyncMenuPath) {\n syncTaskBoardMenuPath();\n }\n };\n\n const loadPersistedSettings = async () => {\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 return {\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 };\n };\n\n const buildStateFromPersistedSettings = (\n settings: Awaited<ReturnType<typeof loadPersistedSettings>>,\n taskTypes: AXPWorkflowTaskProvider[],\n taskTypeOptions: AXPTaskBoardTaskTypeOption[],\n ): Partial<AXPTaskBoardState> => {\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 } = settings;\n\n const visibleViewCategories = normalizeVisibleTaskBoardCategories({\n calendar: savedVisibleCalendar,\n timeline: savedVisibleTimeline,\n table: savedVisibleTable,\n kanban: savedVisibleKanban,\n });\n\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 assigneeFilterHasSavedPreference = hasTaskBoardSavedAssigneePreference(savedAssigneeIds);\n const defaultAssigneeIds = normalizeTaskBoardAssigneeIds(\n sessionService,\n resolveTaskBoardSavedAssigneeIds(sessionService, savedAssigneeIds),\n );\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 ?? [], taskTypeOptions);\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 return {\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 };\n };\n\n return {\n async reloadTaskTypes(options?: AXPWorkflowTaskProviderResolveOptions) {\n taskBoardService.clearProviderCache();\n const taskTypes = await taskBoardService.getTaskTypes(options);\n patchState(store, {\n taskTypes,\n taskTypeOptions: taskBoardService.getTaskTypeOptions(),\n });\n },\n\n async initialize() {\n patchState(store, { isLoading: true });\n try {\n const persistedSettings = await loadPersistedSettings();\n\n let taskTypes: AXPWorkflowTaskProvider[] = [];\n let taskTypeOptions: AXPTaskBoardTaskTypeOption[] = [];\n try {\n taskTypes = await taskBoardService.getTaskTypes();\n taskTypeOptions = taskBoardService.getTaskTypeOptions();\n } catch (error) {\n console.error('Error loading task board task types:', error);\n }\n\n patchState(store, {\n taskTypes,\n taskTypeOptions,\n ...buildStateFromPersistedSettings(persistedSettings, taskTypes, taskTypeOptions),\n isLoading: false,\n });\n syncTaskBoardMenuPath();\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\n let persistedSettingsPatch: Partial<AXPTaskBoardState> = {};\n try {\n const persistedSettings = await loadPersistedSettings();\n persistedSettingsPatch = buildStateFromPersistedSettings(persistedSettings, [], []);\n } catch (settingsError) {\n console.error('Error loading task board persisted settings:', settingsError);\n }\n\n const fallbackAssigneeIds = normalizeTaskBoardAssigneeIds(\n sessionService,\n resolveTaskBoardSavedAssigneeIds(sessionService, null),\n );\n\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: fallbackAssigneeIds,\n assigneeFilterHasSavedPreference: false,\n selectedPriorities: [],\n selectedDueStatusKeys: [],\n colorBy: 'dueDate',\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n taskTypes: store.taskTypes(),\n taskTypeOptions: store.taskTypeOptions(),\n isLoading: false,\n ...persistedSettingsPatch,\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 syncTaskBoardMenuPath();\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 async restoreQueryFiltersFromSettings() {\n const persistedSettings = await loadPersistedSettings();\n const filterPatch = buildStateFromPersistedSettings(\n persistedSettings,\n store.taskTypes(),\n store.taskTypeOptions(),\n );\n\n patchState(store, {\n selectedTaskTypeNames: filterPatch.selectedTaskTypeNames ?? [],\n selectedAssigneeIds: filterPatch.selectedAssigneeIds ?? [],\n assigneeFilterHasSavedPreference: filterPatch.assigneeFilterHasSavedPreference ?? false,\n selectedReporterIds: filterPatch.selectedReporterIds ?? [],\n });\n },\n\n clearQueryFilters() {\n const defaultAssigneeIds = normalizeTaskBoardAssigneeIds(\n sessionService,\n resolveTaskBoardSavedAssigneeIds(sessionService, null),\n );\n patchState(store, {\n selectedTaskTypeNames: [],\n selectedAssigneeIds: defaultAssigneeIds,\n assigneeFilterHasSavedPreference: false,\n selectedReporterIds: [],\n });\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","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { isNil } from 'lodash';\n\nimport { AXPTaskManagementCommandKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type ResetTaskBoardFiltersAssignToCurrentUserInput = Record<string, never>;\n\nexport const RESET_TASK_BOARD_FILTERS_ASSIGN_TO_CURRENT_USER_COMMAND_KEY =\n AXPTaskManagementCommandKeys.TaskBoard.ResetFiltersAssignToCurrentUser;\n\n//#endregion\n\n/**\n * Clears task-board filters, scopes assignee to the signed-in user, and requests a board refresh.\n */\n@Injectable({ providedIn: 'root' })\nexport class ResetTaskBoardFiltersAssignToCurrentUserCommand\n implements AXPCommand<ResetTaskBoardFiltersAssignToCurrentUserInput, void>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly vm = inject(AXMTaskBoardViewModel);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(\n _input?: ResetTaskBoardFiltersAssignToCurrentUserInput,\n ): AXPCommandExecuteResultPromise<void> {\n const currentUserId = this.sessionService.user?.id;\n if (isNil(currentUserId)) {\n return { success: false, message: { text: 'Current user is not available.' } };\n }\n\n this.vm.setSelectedTaskTypeNames([], false);\n this.vm.setSelectedReporterIds([], false);\n this.vm.setSelectedPriorities([], false);\n this.vm.setSelectedDueStatusKeys([], false);\n this.vm.setSelectedAssigneeIds([currentUserId], false, true);\n\n this.ensureTaskTypeForGroupedViews();\n\n this.taskBoardService.requestRefresh();\n\n return { success: true, kind: 'object', data: undefined };\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private ensureTaskTypeForGroupedViews(): void {\n const viewMode = this.vm.currentViewMode();\n if (viewMode !== 'kanban' && viewMode !== 'status-grouped-grid') {\n return;\n }\n\n if (this.vm.selectedTaskTypeNames().length > 0) {\n return;\n }\n\n const firstTaskType = this.vm.taskTypes()[0];\n if (firstTaskType) {\n this.vm.setSelectedTaskTypeNames([firstTaskType.name]);\n }\n }\n\n //#endregion\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPTask } from '../task-board.types';\n\nexport type AXPDueStatusKey =\n | 'completed'\n | 'no-due-date'\n | 'overdue'\n | 'due-today'\n | 'due-tomorrow'\n | 'due-this-week'\n | 'upcoming';\n\nexport interface AXPDueStatusDefinition {\n name: AXPDueStatusKey;\n title: string;\n color: string;\n icon?: string;\n order: number;\n}\n\nexport interface AXPDueStatusEvaluationContext {\n now: Date;\n dueDate?: Date | null;\n hasExplicitDueDate: boolean;\n bookmarkConsumed: boolean;\n weekStartsOn: number;\n}\n\nexport interface AXPDueStatusPresentation {\n name: AXPDueStatusKey;\n title: string;\n color: string;\n icon?: string;\n}\n\nexport interface AXPDueStatusResolveOptions {\n workflowDefinitionId?: string;\n activityType?: string;\n}\n\nexport abstract class AXPDueStatusProvider {\n abstract readonly key: string;\n abstract readonly priority: number;\n abstract getDefinitions(): AXPDueStatusDefinition[];\n abstract resolve(context: AXPDueStatusEvaluationContext): AXPDueStatusDefinition | null;\n}\n\nexport const AXP_DUE_STATUS_PROVIDERS = new InjectionToken<AXPDueStatusProvider[]>('AXP_DUE_STATUS_PROVIDERS');\n\nexport type AXPDueStatusFilterKey = AXPDueStatusKey;\n\nexport function getTaskDueStatusKey(task: AXPTask): AXPDueStatusFilterKey | undefined {\n const data = task.data as { dueStatusKey?: AXPDueStatusKey } | undefined;\n return data?.dueStatusKey;\n}\n\nexport function matchesTaskDueStatusFilter(task: AXPTask, dueStatusKeys: AXPDueStatusFilterKey[]): boolean {\n if (dueStatusKeys.length === 0) {\n return true;\n }\n\n const key = getTaskDueStatusKey(task);\n return key != null && dueStatusKeys.includes(key);\n}\n","import { AXPDueStatusDefinition, AXPDueStatusEvaluationContext, AXPDueStatusKey } from './due-status.types';\n\nfunction startOfLocalDay(date: Date): Date {\n const value = new Date(date);\n value.setHours(0, 0, 0, 0);\n return value;\n}\n\nfunction endOfLocalDay(date: Date): Date {\n const value = new Date(date);\n value.setHours(23, 59, 59, 999);\n return value;\n}\n\nfunction isSameLocalDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n );\n}\n\nfunction addLocalDays(date: Date, days: number): Date {\n const value = new Date(date);\n value.setDate(value.getDate() + days);\n return value;\n}\n\nfunction getStartOfLocalWeek(date: Date, weekStartsOn: number): Date {\n const day = startOfLocalDay(date);\n const weekday = day.getDay();\n const diff = (weekday - weekStartsOn + 7) % 7;\n day.setDate(day.getDate() - diff);\n return day;\n}\n\nfunction getEndOfLocalWeek(date: Date, weekStartsOn: number): Date {\n const start = getStartOfLocalWeek(date, weekStartsOn);\n return endOfLocalDay(addLocalDays(start, 6));\n}\n\nfunction matchesDueStatusKey(context: AXPDueStatusEvaluationContext, key: AXPDueStatusKey): boolean {\n const today = startOfLocalDay(context.now);\n const tomorrow = startOfLocalDay(addLocalDays(context.now, 1));\n const weekEnd = getEndOfLocalWeek(context.now, context.weekStartsOn);\n\n if (key === 'completed') {\n return context.bookmarkConsumed;\n }\n\n if (key === 'no-due-date') {\n return !context.bookmarkConsumed && !context.hasExplicitDueDate;\n }\n\n if (!context.hasExplicitDueDate || !context.dueDate || context.bookmarkConsumed) {\n return false;\n }\n\n const dueDay = startOfLocalDay(context.dueDate);\n\n if (key === 'overdue') {\n return dueDay.getTime() < today.getTime();\n }\n\n if (key === 'due-today') {\n return isSameLocalDay(dueDay, today);\n }\n\n if (key === 'due-tomorrow') {\n return isSameLocalDay(dueDay, tomorrow);\n }\n\n if (key === 'due-this-week') {\n return dueDay.getTime() > tomorrow.getTime() && dueDay.getTime() <= weekEnd.getTime();\n }\n\n if (key === 'upcoming') {\n return dueDay.getTime() > weekEnd.getTime();\n }\n\n return false;\n}\n\nexport function resolveDueStatusFromDefinitions(\n definitions: AXPDueStatusDefinition[],\n context: AXPDueStatusEvaluationContext,\n): AXPDueStatusDefinition | null {\n const ordered = [...definitions].sort((a, b) => a.order - b.order);\n\n for (const definition of ordered) {\n if (matchesDueStatusKey(context, definition.name)) {\n return definition;\n }\n }\n\n return null;\n}\n","import { Injectable } from '@angular/core';\nimport {\n AXPDueStatusDefinition,\n AXPDueStatusEvaluationContext,\n AXPDueStatusProvider,\n} from './due-status.types';\nimport { resolveDueStatusFromDefinitions } from './due-status-evaluation.utils';\n\nconst DEFAULT_DUE_STATUS_DEFINITIONS: AXPDueStatusDefinition[] = [\n {\n name: 'completed',\n title: '@task-management:task-board.due-status.completed',\n color: 'success',\n icon: 'fa-light fa-circle-check',\n order: 0,\n },\n {\n name: 'no-due-date',\n title: '@task-management:task-board.due-status.no-due-date',\n color: 'neutral',\n icon: 'fa-light fa-calendar-xmark',\n order: 1,\n },\n {\n name: 'overdue',\n title: '@task-management:task-board.due-status.overdue',\n color: 'danger',\n icon: 'fa-light fa-calendar-exclamation',\n order: 2,\n },\n {\n name: 'due-today',\n title: '@task-management:task-board.due-status.due-today',\n color: 'warning',\n icon: 'fa-light fa-calendar-day',\n order: 3,\n },\n {\n name: 'due-tomorrow',\n title: '@task-management:task-board.due-status.due-tomorrow',\n color: 'accent3',\n icon: 'fa-light fa-calendar-plus',\n order: 4,\n },\n {\n name: 'due-this-week',\n title: '@task-management:task-board.due-status.due-this-week',\n color: 'primary',\n icon: 'fa-light fa-calendar-week',\n order: 5,\n },\n {\n name: 'upcoming',\n title: '@task-management:task-board.due-status.upcoming',\n color: 'secondary',\n icon: 'fa-light fa-calendar',\n order: 6,\n },\n];\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDefaultDueStatusProvider extends AXPDueStatusProvider {\n readonly key = 'default';\n readonly priority = 0;\n\n getDefinitions(): AXPDueStatusDefinition[] {\n return DEFAULT_DUE_STATUS_DEFINITIONS;\n }\n\n resolve(context: AXPDueStatusEvaluationContext): AXPDueStatusDefinition | null {\n return resolveDueStatusFromDefinitions(DEFAULT_DUE_STATUS_DEFINITIONS, context);\n }\n}\n\nexport function getDefaultDueStatusDefinitions(): AXPDueStatusDefinition[] {\n return DEFAULT_DUE_STATUS_DEFINITIONS;\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPTask } from '../task-board.types';\nimport { AXMDefaultDueStatusProvider } from './default-due-status.provider';\nimport {\n AXPDueStatusEvaluationContext,\n AXPDueStatusPresentation,\n AXPDueStatusProvider,\n AXPDueStatusResolveOptions,\n AXP_DUE_STATUS_PROVIDERS,\n} from './due-status.types';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPDueStatusProviderService {\n private readonly localeService = inject(AXLocaleService);\n private readonly registeredProviders =\n inject(AXP_DUE_STATUS_PROVIDERS, { optional: true }) ?? [];\n private readonly fallbackProvider = inject(AXMDefaultDueStatusProvider);\n\n getDefinitions(options?: AXPDueStatusResolveOptions): ReturnType<AXPDueStatusProvider['getDefinitions']> {\n return this.selectProvider(options).getDefinitions();\n }\n\n resolveForTask(task: AXPTask, options?: AXPDueStatusResolveOptions): AXPDueStatusPresentation | null {\n const data = task.data as\n | {\n hasExplicitDueDate?: boolean;\n bookmarkConsumed?: boolean;\n }\n | undefined;\n\n const context: AXPDueStatusEvaluationContext = {\n now: new Date(),\n dueDate: task.endDate ? new Date(task.endDate) : null,\n hasExplicitDueDate: data?.hasExplicitDueDate === true,\n bookmarkConsumed: data?.bookmarkConsumed === true,\n weekStartsOn: this.resolveWeekStartsOn(),\n };\n\n const definition = this.selectProvider(options).resolve(context);\n if (!definition) {\n return null;\n }\n\n return {\n name: definition.name,\n title: definition.title,\n color: definition.color,\n icon: definition.icon,\n };\n }\n\n attachDueStatusToTask(task: AXPTask, options?: AXPDueStatusResolveOptions): AXPTask {\n const presentation = this.resolveForTask(task, options);\n if (!presentation) {\n return task;\n }\n\n return {\n ...task,\n data: {\n ...(task.data ?? {}),\n dueStatusKey: presentation.name,\n dueStatus: presentation,\n },\n };\n }\n\n private selectProvider(options?: AXPDueStatusResolveOptions): AXPDueStatusProvider {\n const providers = [...this.registeredProviders, this.fallbackProvider].sort(\n (a, b) => b.priority - a.priority,\n );\n\n if (!options?.workflowDefinitionId && !options?.activityType) {\n return providers[providers.length - 1] ?? this.fallbackProvider;\n }\n\n const matched = providers.find((provider) => {\n if (options.workflowDefinitionId && provider.key === options.workflowDefinitionId) {\n return true;\n }\n return Boolean(options.activityType && provider.key === options.activityType);\n });\n\n return matched ?? providers[providers.length - 1] ?? this.fallbackProvider;\n }\n\n private resolveWeekStartsOn(): number {\n return this.localeService.activeProfile()?.calendar?.week?.startsOn ?? 0;\n }\n}\n","import { AXRange } from '@acorex/cdk/common';\nimport { AXPSystemStatuses } from '@acorex-platform/framework-shared/core';\nimport { get } from 'lodash';\nimport { AXPTask } from './task-board.types';\n\nconst BADGE_COLORS = new Set([\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'accent1',\n 'accent2',\n 'accent3',\n 'neutral',\n 'ghost',\n]);\n\n/** Plain gray/white tokens → soft secondary (`neutral` → secondary-lightest in CSS). */\nconst NON_CHROMATIC_BADGE_COLORS = new Set([\n 'gray',\n 'grey',\n 'white',\n 'black',\n 'default',\n 'light',\n 'lighter',\n 'lightest',\n 'natural',\n]);\n\n/** Maps entity status semantic colors to badge/chip tokens (`info` → `accent3`). */\nexport function mapEntityStatusColorForBadge(color: string | undefined, statusId: string | number): string {\n const normalized = color?.trim().toLowerCase();\n if (normalized === 'info') {\n return 'accent3';\n }\n if (normalized && NON_CHROMATIC_BADGE_COLORS.has(normalized)) {\n return 'neutral';\n }\n if (normalized && BADGE_COLORS.has(normalized)) {\n return normalized;\n }\n return resolveDefaultTaskStatusColor(statusId);\n}\n\nexport function resolveDefaultTaskStatusColor(statusId: string | number): string {\n if (String(statusId) === AXPSystemStatuses.Pending.name) {\n return 'warning';\n }\n return 'primary';\n}\n\n/** Resolves the chip color for a task row, aligned with workflow popover badge layout. */\nexport function resolveTaskBoardStatusColor(task: AXPTask): string {\n if (task.status.color) {\n return task.status.color;\n }\n\n const data = task.data as\n | {\n statusColor?: string;\n entityStatusDefinition?: { color?: string };\n }\n | undefined;\n\n const rawColor = get(data, 'entityStatusDefinition.color') ?? get(data, 'statusColor');\n return mapEntityStatusColorForBadge(rawColor, task.status.id);\n}\n\n/** Calendar placement for tasks without an explicit due date (received/created day, all-day). */\nexport function resolveTaskBoardCalendarPlacement(task: AXPTask): Pick<AXPTask, 'startDate' | 'endDate' | 'allDay'> {\n const hasExplicitDueDate = get(task.data, 'hasExplicitDueDate') === true;\n\n if (hasExplicitDueDate) {\n const due = new Date(task.endDate);\n const dayStart = new Date(due);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(due);\n dayEnd.setHours(23, 59, 59, 999);\n\n return {\n startDate: dayStart,\n endDate: dayEnd,\n allDay: true,\n };\n }\n\n const received = task.createdAt ? new Date(task.createdAt) : new Date(task.startDate);\n const dayStart = new Date(received);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(received);\n dayEnd.setHours(23, 59, 59, 999);\n\n return {\n startDate: dayStart,\n endDate: dayEnd,\n allDay: true,\n };\n}\n\n/**\n * Returns tasks whose effective scheduling range overlaps the filter range (inclusive).\n * Open tasks without an explicit due date are always included (widget-style visibility).\n */\nexport function resolveTaskBoardSchedulingRange(task: AXPTask): { from: Date; end: Date } {\n const hasExplicitDueDate = get(task.data, 'hasExplicitDueDate') === true;\n\n if (hasExplicitDueDate) {\n const due = new Date(task.endDate);\n return { from: due, end: due };\n }\n\n const received = task.createdAt ? new Date(task.createdAt) : new Date(task.startDate);\n return { from: received, end: received };\n}\n\n/** Whether a task should appear for the task board's active date navigator range. */\nexport function taskOverlapsFilterRange(task: AXPTask, range?: AXRange<Date>): boolean {\n if (!range?.from || !range?.end) {\n return true;\n }\n\n const hasExplicitDueDate = get(task.data, 'hasExplicitDueDate') === true;\n const bookmarkConsumed = get(task.data, 'bookmarkConsumed') === true;\n\n if (!hasExplicitDueDate && !bookmarkConsumed) {\n return true;\n }\n\n const { from, end } = resolveTaskBoardSchedulingRange(task);\n const rangeStart = range.from.getTime();\n const rangeEnd = range.end.getTime();\n const taskStart = from.getTime();\n const taskEnd = end.getTime();\n return taskStart <= rangeEnd && taskEnd >= rangeStart;\n}\n\nexport function filterTasksOverlappingRange<T extends AXPTask>(tasks: T[], range?: AXRange<Date>): T[] {\n if (!range?.from || !range?.end) {\n return tasks;\n }\n\n return tasks.filter((task) => taskOverlapsFilterRange(task, range));\n}\n","import { get } from 'lodash';\nimport { getTaskPriorityColor, normalizeTaskPriority } from '../task-board-priority.utils';\nimport { resolveTaskBoardStatusColor } from '../task-board-range.utils';\nimport { AXPTask, AXPTaskBoardColorBy } from '../task-board.types';\nimport { AXPDueStatusPresentation } from './due-status.types';\n\n/**\n * Soft secondary fallback class token.\n * CSS maps `neutral` / `ghost` to `secondary-lightest` / `secondary-lighter` surfaces\n * (never plain gray/white).\n */\nconst TASK_BOARD_SOFT_SECONDARY_TOKEN = 'neutral';\n\nconst SURFACE_CLASS_TOKENS = new Set([\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'accent1',\n 'accent2',\n 'accent3',\n 'neutral',\n 'ghost',\n]);\n\n/** Gray / white / natural tokens that blend into the calendar background. */\nconst NON_CHROMATIC_SURFACE_TOKENS = new Set([\n 'gray',\n 'grey',\n 'white',\n 'black',\n 'default',\n 'light',\n 'lighter',\n 'lightest',\n 'natural',\n]);\n\nexport function resolveTaskBoardAccentColor(task: AXPTask, colorBy: AXPTaskBoardColorBy): string {\n switch (colorBy) {\n case 'dueDate':\n return resolveDueStatusAccentColor(task);\n case 'priority':\n return task.priority\n ? getTaskPriorityColor(normalizeTaskPriority(task.priority))\n : TASK_BOARD_SOFT_SECONDARY_TOKEN;\n case 'status':\n return resolveTaskBoardStatusColor(task);\n default:\n return resolveDueStatusAccentColor(task);\n }\n}\n\nfunction resolveDueStatusAccentColor(task: AXPTask): string {\n const dueStatus = get(task.data, 'dueStatus') as AXPDueStatusPresentation | undefined;\n if (dueStatus?.color) {\n return dueStatus.color;\n }\n\n if (get(task.data, 'hasExplicitDueDate') !== true) {\n return TASK_BOARD_SOFT_SECONDARY_TOKEN;\n }\n\n return 'secondary';\n}\n\nfunction normalizeSurfaceClassToken(colorToken: string): string {\n const safe = colorToken.replace(/[^a-z0-9-]/gi, '').toLowerCase();\n if (!safe || NON_CHROMATIC_SURFACE_TOKENS.has(safe)) {\n return TASK_BOARD_SOFT_SECONDARY_TOKEN;\n }\n return SURFACE_CLASS_TOKENS.has(safe) ? safe : TASK_BOARD_SOFT_SECONDARY_TOKEN;\n}\n\n/** Maps a color token to a static BEM class backed by Tailwind @apply rules in task-board-surface.css. */\nexport function buildTaskSurfaceCssClass(colorToken: string): string {\n return `axm-task-board-surface--${normalizeSurfaceClassToken(colorToken)}`;\n}\n\n/** Accent stripe modifier for dashboard widget rows. */\nexport function buildTaskAccentSurfaceCssClass(colorToken: string): string {\n return `axm-task-board-accent--${normalizeSurfaceClassToken(colorToken)}`;\n}\n\n/** @deprecated Use {@link buildTaskSurfaceCssClass}. */\nexport function buildTaskAccentCssClass(colorToken: string): string {\n return buildTaskSurfaceCssClass(colorToken);\n}\n","//#region ----- Command result helpers -----\n\n/**\n * True when a task-board action collected input but did not complete\n * (e.g. Sign Off dialog cancelled). The card must stay on the board.\n */\nexport function isCancelledTaskBoardCommandResult(result: unknown): boolean {\n if (!result || typeof result !== 'object') {\n return false;\n }\n const data = (result as { data?: unknown }).data;\n return (\n !!data &&\n typeof data === 'object' &&\n !Array.isArray(data) &&\n (data as { cancelled?: unknown }).cancelled === true\n );\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n Type,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPTask, AXPTaskActionMenuItem, AXPTaskPopoverComponent } from './task-board.types';\nimport { isCancelledTaskBoardCommandResult } from './task-board-command-result.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-task-board-default-task-popover',\n template: `\n @if (task().description) {\n <p class=\"task-popover__description\">{{ task().description }}</p>\n }\n\n <div class=\"task-popover__content\">\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(task()) }}</span>\n </div>\n </div>\n\n @if (task().status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ task().status.title }}</span>\n </div>\n </div>\n }\n\n @if (task().assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n task().assignee?.fullName || task().assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n @if (task().priority) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon task-popover__icon--priority\" [attr.data-priority]=\"task().priority\">\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text task-popover__priority\" [attr.data-priority]=\"task().priority\">\n {{ task().priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions\">\n <div class=\"task-popover__actions-group\">\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n </div>\n }\n `,\n styleUrls: ['./task-board-default-task-popover.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule],\n})\nexport class AXMTaskBoardDefaultTaskPopoverComponent extends AXPTaskPopoverComponent {\n //#region ---- Inputs ----\n\n task = input.required<AXPTask>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly calendarService = inject(AXCalendarService);\n\n //#endregion\n\n //#region ---- Actions ----\n\n protected readonly taskActions = signal<AXPTaskActionMenuItem[]>([]);\n\n protected readonly primaryActions = computed(() =>\n this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'primary'),\n );\n\n protected readonly secondaryActions = computed(() =>\n this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'secondary'),\n );\n\n constructor() {\n super();\n effect(() => {\n const currentTask = this.task();\n if (!currentTask?.provider) {\n this.taskActions.set([]);\n return;\n }\n const provider = this.taskBoardService.getProvider(currentTask.provider);\n if (!provider) {\n this.taskActions.set([]);\n return;\n }\n provider\n .getActions(currentTask)\n .then((actions) =>\n this.taskActions.set(\n (actions ?? []).map((action) => ({\n ...action,\n priority: action.priority ?? 'secondary',\n })),\n ),\n )\n .catch((error) => {\n console.error('[TaskBoardDefaultTaskPopover] Failed to load actions:', error);\n this.taskActions.set([]);\n });\n });\n }\n\n protected getActionColor(action: AXPTaskActionMenuItem): string | null {\n return (action.color as string) ?? null;\n }\n\n protected async executeAction(action: AXPTaskActionMenuItem): Promise<void> {\n const currentTask = this.task();\n if (!currentTask?.provider || !action.command) {\n return;\n }\n\n try {\n const result = await this.taskBoardService.executeCommand(action.command, currentTask.provider);\n if (result?.success === false || result === null || isCancelledTaskBoardCommandResult(result)) {\n return;\n }\n this.closePopover();\n this.taskBoardService.requestRefresh(currentTask.provider);\n } catch (error) {\n console.error('[TaskBoardDefaultTaskPopover] executeAction failed:', error);\n }\n }\n\n //#endregion\n\n //#region ---- Date Formatting ----\n\n protected formatDateRange(task: AXPTask): string {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n\n if (start.date.getTime() === end.date.getTime()) {\n return this.formatDate(task.startDate);\n }\n\n const startFormatted = this.formatDate(task.startDate);\n const endFormatted = this.formatDate(task.endDate);\n\n if (start.date.getMonth() === end.date.getMonth() && start.date.getFullYear() === end.date.getFullYear()) {\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const monthYear = start.format('MMM YYYY');\n return `${startDay} - ${endDay}, ${monthYear}`;\n }\n\n return `${startFormatted} - ${endFormatted}`;\n }\n\n if (this.isMultiDay(task)) {\n return `${this.formatDateTime(task.startDate)} - ${this.formatDateTime(task.endDate)}`;\n }\n\n const dateFormatted = this.formatDate(task.startDate);\n const timeRange = `${this.formatTime(task.startDate)} - ${this.formatTime(task.endDate)}`;\n return `${dateFormatted} ${timeRange}`;\n }\n\n private formatTime(date: Date): string {\n return this.calendarService.create(date).format('HH:mm');\n }\n\n private formatDate(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY');\n }\n\n private formatDateTime(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY HH:mm');\n }\n\n private isMultiDay(task: AXPTask): boolean {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return start.date.getTime() !== end.date.getTime();\n }\n\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return (\n start.date.getDate() !== end.date.getDate() ||\n start.date.getMonth() !== end.date.getMonth() ||\n start.date.getFullYear() !== end.date.getFullYear()\n );\n }\n\n //#endregion\n}\n\n/**\n * Resolves the popover component for a task: provider custom component or the default task popover.\n */\nexport async function resolveTaskPopoverComponent(\n task: AXPTask,\n taskBoardService: AXPTaskBoardService,\n): Promise<Type<AXPTaskPopoverComponent>> {\n const defaultType = AXMTaskBoardDefaultTaskPopoverComponent;\n\n if (!task.provider) {\n return defaultType;\n }\n\n const provider = taskBoardService.getProvider(task.provider);\n if (!provider) {\n return defaultType;\n }\n\n const componentGetter = provider.getComponent?.();\n if (!componentGetter) {\n return defaultType;\n }\n\n try {\n if (typeof componentGetter !== 'function') {\n return defaultType;\n }\n\n let result: Promise<Type<AXPTaskPopoverComponent>> | Type<AXPTaskPopoverComponent> | undefined;\n\n try {\n result = (componentGetter as () => Promise<Type<AXPTaskPopoverComponent>> | Type<AXPTaskPopoverComponent>)();\n } catch {\n return componentGetter as Type<AXPTaskPopoverComponent>;\n }\n\n if (result instanceof Promise) {\n return await result;\n }\n\n if (result) {\n return result;\n }\n\n return componentGetter as Type<AXPTaskPopoverComponent>;\n } catch (error) {\n console.error('[TaskPopover] Failed to load custom task popover component:', error);\n return defaultType;\n }\n}\n\n//#endregion\n","import { AXRowCommandItem } from '@acorex/components/data-table';\n\n/** Width for a single icon-only row action column. */\nexport const TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH = '70px';\n\n/** Icon-only command that opens the task details popover. */\nexport const TASK_BOARD_GRID_ROW_VIEW_ACTION: AXRowCommandItem = {\n name: 'view',\n text: '@task-management:task-board.grid-headers.action-view',\n icon: 'fa-light fa-ellipsis-vertical',\n iconOnly: true,\n look: 'blank',\n};\n\nexport const TASK_BOARD_GRID_ROW_ACTION_ITEMS: AXRowCommandItem[] = [TASK_BOARD_GRID_ROW_VIEW_ACTION];\n","import { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport { get } from 'lodash';\nimport { AXPDueStatusProviderService } from './due-status/due-status-provider.service';\nimport {\n buildTaskSurfaceCssClass,\n resolveTaskBoardAccentColor,\n} from './due-status/task-board-accent-color.utils';\nimport { resolveTaskBoardCalendarPlacement } from './task-board-range.utils';\nimport { AXPTask, AXPTaskBoardColorBy } from './task-board.types';\n\nfunction taskParamToDisplayString(translationService: AXTranslationService, value: unknown): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.trim();\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (typeof value === 'object') {\n const resolved = translationService.resolve(value as never);\n return resolved?.trim() ?? '';\n }\n return String(value).trim();\n}\n\nconst TASK_I18N_DATE_KEYS = new Set([\n 'startDate',\n 'endDate',\n 'effectiveDate',\n 'dueDate',\n 'occurredDate',\n]);\n\nfunction isDateLikeString(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}(?:T|$)/.test(value.trim());\n}\n\nfunction parseDateOnlyString(value: string): Date | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(value.trim());\n if (!match) {\n return null;\n }\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n if (!year || !month || !day) {\n return null;\n }\n return new Date(year, month - 1, day);\n}\n\n/** Resolves MLS and formats dates at display time so task labels react to locale changes. */\nexport async function formatTaskI18nParamsForTranslate(\n raw: Record<string, unknown> | undefined,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n settingsService: AXPSettingsService,\n): Promise<Record<string, string>> {\n if (!raw) {\n return {};\n }\n\n const format = await settingsService.get(AXPRegionalSetting.ShortDate);\n const params: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(raw)) {\n if (value == null || value === '') {\n continue;\n }\n\n if (\n TASK_I18N_DATE_KEYS.has(key) &&\n (value instanceof Date || (typeof value === 'string' && isDateLikeString(value)))\n ) {\n const date =\n value instanceof Date ? value : parseDateOnlyString(value) ?? new Date(value);\n if (!Number.isNaN(date.getTime())) {\n const formatted = formatService.format(date, 'date', { format });\n const text = typeof formatted === 'string' ? formatted : String(formatted ?? '');\n if (text) {\n params[key] = text;\n }\n }\n continue;\n }\n\n const text = taskParamToDisplayString(translationService, value);\n if (text) {\n params[key] = text;\n }\n }\n\n return params;\n}\n\nexport function getTaskTranslationKey(task: AXPTask, field: 'title' | 'description'): string | undefined {\n const data = task.data as\n | { titleKey?: string; descriptionKey?: string; payload?: { title?: string; description?: string } }\n | undefined;\n const key = field === 'title' ? data?.titleKey : data?.descriptionKey;\n if (key?.trim().startsWith('@')) {\n return key.trim();\n }\n\n const payloadKey = field === 'title' ? data?.payload?.title : data?.payload?.description;\n if (payloadKey?.trim().startsWith('@')) {\n return payloadKey.trim();\n }\n\n const fallback = field === 'title' ? task.title : task.description;\n return fallback?.trim().startsWith('@') ? fallback.trim() : undefined;\n}\n\n/** Resolves scheduler/kanban labels; popovers should use the translate pipe with {@link getTaskTranslationKey}. */\nexport async function resolveTaskBoardSchedulerLabels(\n tasks: AXPTask[],\n translationService: AXTranslationService,\n formatService: AXFormatService,\n settingsService: AXPSettingsService,\n): Promise<AXPTask[]> {\n return Promise.all(\n tasks.map(async (task) => {\n const titleKey = getTaskTranslationKey(task, 'title');\n const descriptionKey = getTaskTranslationKey(task, 'description');\n const rawParams = get(task.data, 'taskI18nParams') as Record<string, unknown> | undefined;\n const params = await formatTaskI18nParamsForTranslate(\n rawParams,\n translationService,\n formatService,\n settingsService,\n );\n\n return {\n ...task,\n ...(titleKey ? { title: await translationService.translateAsync(titleKey, { params }) } : {}),\n ...(descriptionKey\n ? { description: await translationService.translateAsync(descriptionKey, { params }) }\n : {}),\n };\n }),\n );\n}\n\nexport function enrichTaskBoardTasks(\n tasks: AXPTask[],\n colorBy: AXPTaskBoardColorBy,\n dueStatusProviderService: AXPDueStatusProviderService,\n): AXPTask[] {\n return tasks.map((task) => {\n const withDueStatus = dueStatusProviderService.attachDueStatusToTask(task);\n const accentClass = buildTaskSurfaceCssClass(resolveTaskBoardAccentColor(withDueStatus, colorBy));\n const calendarPlacement = resolveTaskBoardCalendarPlacement(withDueStatus);\n\n return {\n ...withDueStatus,\n ...calendarPlacement,\n cssClass: accentClass,\n };\n });\n}\n","//#region ---- Imports ----\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n Type,\n ViewEncapsulation,\n} from '@angular/core';\nimport { get } from 'lodash';\nimport {\n formatTaskI18nParamsForTranslate,\n getTaskTranslationKey,\n} from './task-board-task-enrichment.utils';\nimport { AXPTask, AXPTaskPopoverComponent } from './task-board.types';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-task-board-task-popover-shell',\n template: `\n <div class=\"task-popover\">\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\">\n @if (titleKey(); as key) {\n {{ key | translate: { params: i18nParams() } | async }}\n } @else {\n {{ task().title }}\n }\n </h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"requestClose()()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"task-popover__body\">\n @if (bodyComponent()) {\n <ng-container *ngComponentOutlet=\"bodyComponent()!; inputs: bodyInputs()\" />\n }\n </div>\n </div>\n `,\n styleUrls: ['./task-board-default-task-popover.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXDecoratorModule, AXTranslationModule],\n})\nexport class AXMTaskBoardTaskPopoverShellComponent {\n task = input.required<AXPTask>();\n bodyComponent = input.required<Type<AXPTaskPopoverComponent>>();\n requestClose = input.required<() => void>();\n\n private readonly localeService = inject(AXLocaleService);\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly translationService = inject(AXTranslationService);\n\n protected readonly i18nParams = signal<Record<string, string>>({});\n\n protected readonly titleKey = computed(() => getTaskTranslationKey(this.task(), 'title'));\n\n protected readonly bodyInputs = computed(() => ({ task: this.task() }));\n\n private readonly i18nParamsEffect = effect(() => {\n const task = this.task();\n void this.localeService.activeProfile().localeInfo?.code;\n const raw = get(task.data, 'taskI18nParams') as Record<string, unknown> | undefined;\n void formatTaskI18nParamsForTranslate(\n raw,\n this.translationService,\n this.formatService,\n this.settingsService,\n ).then((params) => this.i18nParams.set(params));\n });\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXClickEvent, AXPlacement } from '@acorex/cdk/common';\nimport { AXOverlayRef, AXOverlayService } from '@acorex/cdk/overlay';\nimport { AXRowCommandItemClickEvent } from '@acorex/components/data-table';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, inject, Injectable } from '@angular/core';\nimport { resolveTaskPopoverComponent } from './task-board-default-task-popover.component';\nimport { AXMTaskBoardTaskPopoverShellComponent } from './task-board-task-popover-shell.component';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPTask } from './task-board.types';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Anchor for overlay positioning: native element, ElementRef, or component host via `getHostElement()`. */\nexport type AXMTaskPopoverAnchor = Element | ElementRef<HTMLElement>;\n\nexport interface AXMOpenTaskPopoverOverlayOptions {\n task: AXPTask;\n anchor: AXMTaskPopoverAnchor;\n /** Default: `bottom-start` (below anchor, aligned to the left / start edge). */\n placement?: AXPlacement;\n offsetX?: number;\n offsetY?: number;\n adaptivityEnabled?: boolean;\n autoFlip?: boolean;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Opens task-board task popovers via {@link AXOverlayService}, matching {@link AXPopoverComponent} anchor positioning.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMTaskBoardTaskPopoverOverlayService {\n //#region ---- Services & Dependencies ----\n\n private readonly overlayService = inject(AXOverlayService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly platform = inject(AXPlatform);\n private readonly document = inject(DOCUMENT);\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private overlayRef: AXOverlayRef<AXMTaskBoardTaskPopoverShellComponent> | null = null;\n private shellRef: ComponentRef<AXMTaskBoardTaskPopoverShellComponent> | null = null;\n private activeTask: AXPTask | null = null;\n private anchorElement: HTMLElement | null = null;\n private outsideClickHandler: ((event: MouseEvent) => void) | null = null;\n private keydownHandler: ((event: KeyboardEvent) => void) | null = null;\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n getActiveTask(): AXPTask | null {\n return this.activeTask;\n }\n\n isOpen(): boolean {\n return this.overlayRef !== null;\n }\n\n async open(options: AXMOpenTaskPopoverOverlayOptions): Promise<void> {\n const anchorElement = this.resolveAnchorElement(options.anchor);\n if (!anchorElement) {\n return;\n }\n\n this.close();\n\n const bodyComponent = await resolveTaskPopoverComponent(options.task, this.taskBoardService);\n this.activeTask = options.task;\n this.anchorElement = anchorElement;\n\n const panelClasses = ['animate-fadeIn', 'animate-faster'];\n if (this.platform.isDark()) {\n panelClasses.push('ax-dark');\n }\n\n const requestClose = (): void => {\n this.close();\n };\n\n try {\n const ref = await this.overlayService.create(AXMTaskBoardTaskPopoverShellComponent, {\n centered: false,\n width: 'fit-content',\n actionSheetStyle: options.adaptivityEnabled ?? true,\n panelClass: panelClasses,\n backdrop: {\n enabled: false,\n background: false,\n closeOnClick: false,\n },\n anchorOptions: {\n anchor: anchorElement,\n placement: options.placement ?? 'bottom-start',\n offsetX: options.offsetX ?? 8,\n offsetY: options.offsetY ?? 8,\n autoFlip: options.autoFlip ?? true,\n },\n inputs: {\n task: options.task,\n bodyComponent,\n requestClose,\n },\n onDispose: () => {\n this.handleOverlayDisposed();\n },\n });\n\n this.overlayRef = ref;\n this.shellRef = ref.instance as ComponentRef<AXMTaskBoardTaskPopoverShellComponent>;\n\n setTimeout(() => {\n ref.updatePosition();\n this.bindDismissHandlers(ref.overlayElement, anchorElement);\n }, 0);\n } catch (error) {\n console.error('[TaskBoardTaskPopover] Failed to open overlay:', error);\n this.handleOverlayDisposed();\n }\n }\n\n async refreshTask(task: AXPTask): Promise<void> {\n if (!this.overlayRef || !this.shellRef || !this.activeTask || this.activeTask.id !== task.id) {\n return;\n }\n\n const bodyComponent = await resolveTaskPopoverComponent(task, this.taskBoardService);\n this.activeTask = task;\n this.shellRef.setInput('task', task);\n this.shellRef.setInput('bodyComponent', bodyComponent);\n }\n\n close(): void {\n this.removeDismissHandlers();\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.shellRef = null;\n this.activeTask = null;\n this.anchorElement = null;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Normalizes an anchor to a host {@link HTMLElement} for {@link AXOverlayService}.\n */\n resolveAnchorElement(anchor: AXMTaskPopoverAnchor): HTMLElement | null {\n if (anchor instanceof ElementRef) {\n return anchor.nativeElement;\n }\n\n if (anchor instanceof HTMLElement) {\n return anchor;\n }\n\n const hostCandidate = anchor as Element & { getHostElement?: () => HTMLElement };\n if (typeof hostCandidate.getHostElement === 'function') {\n return hostCandidate.getHostElement();\n }\n\n return anchor as HTMLElement;\n }\n\n /**\n * Resolves an overlay anchor from a grid command-column click.\n */\n resolveAnchorFromCommandClick(event: AXRowCommandItemClickEvent): HTMLElement | undefined {\n if (event.htmlElement instanceof HTMLElement) {\n return event.htmlElement;\n }\n\n const nativeEvent = event.nativeEvent;\n if (nativeEvent instanceof MouseEvent) {\n return this.resolveAnchor(nativeEvent);\n }\n\n const nestedClick = nativeEvent as AXClickEvent | undefined;\n if (nestedClick?.htmlElement instanceof HTMLElement) {\n return nestedClick.htmlElement;\n }\n\n if (nestedClick?.component && typeof nestedClick.component.getHostElement === 'function') {\n return nestedClick.component.getHostElement();\n }\n\n return this.resolveAnchor(nestedClick?.nativeEvent);\n }\n\n /**\n * Resolves an overlay anchor from a native click (e.g. command button in a data table cell).\n */\n resolveAnchor(nativeEvent?: MouseEvent | null, htmlElement?: HTMLElement | null): HTMLElement | undefined {\n if (htmlElement) {\n return htmlElement;\n }\n\n const target = (nativeEvent?.currentTarget ?? nativeEvent?.target) as Element | null;\n if (!target) {\n return undefined;\n }\n\n const cell = target.closest?.('td');\n const cellTrigger = cell?.querySelector('ax-button, button');\n if (cellTrigger instanceof HTMLElement) {\n return cellTrigger;\n }\n\n const buttonHost = target.closest?.('ax-button');\n if (buttonHost instanceof HTMLElement) {\n return buttonHost;\n }\n\n let element: Element | null = target;\n for (let depth = 0; element && depth < 12; depth++) {\n if (element.tagName.toLowerCase() === 'ax-button' && element instanceof HTMLElement) {\n return element;\n }\n element = element.parentElement;\n }\n\n return target instanceof HTMLElement ? target : undefined;\n }\n\n private bindDismissHandlers(overlayElement: HTMLElement | null, anchor: HTMLElement): void {\n this.removeDismissHandlers();\n\n this.keydownHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.close();\n }\n };\n this.document.addEventListener('keydown', this.keydownHandler);\n\n this.outsideClickHandler = (event: MouseEvent) => {\n const target = event.target as Element | null;\n if (!target || !overlayElement) {\n return;\n }\n if (this.isInsideTaskPopoverInteractiveSurface(target, overlayElement, anchor)) {\n return;\n }\n this.close();\n };\n this.document.addEventListener('mousedown', this.outsideClickHandler);\n }\n\n /** Dropdown menus render outside the popover overlay; ignore those clicks when dismissing. */\n private isInsideTaskPopoverInteractiveSurface(\n target: Element,\n overlayElement: HTMLElement,\n anchor: HTMLElement,\n ): boolean {\n if (anchor.contains(target) || overlayElement.contains(target)) {\n return true;\n }\n return Boolean(\n target.closest(\n 'ax-dropdown-panel, ax-button-item-list, ax-button-item, ax-dropdown-button, .ax-dropdown-panel',\n ),\n );\n }\n\n private removeDismissHandlers(): void {\n if (this.keydownHandler) {\n this.document.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = null;\n }\n if (this.outsideClickHandler) {\n this.document.removeEventListener('mousedown', this.outsideClickHandler);\n this.outsideClickHandler = null;\n }\n }\n\n private handleOverlayDisposed(): void {\n this.removeDismissHandlers();\n this.overlayRef = null;\n this.shellRef = null;\n this.activeTask = null;\n this.anchorElement = null;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPActionMenuItem, AXPExecuteCommand, AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport {\n AXPExtraField,\n AXPTask,\n AXPTaskFilter,\n AXPTaskPriority,\n AXPTaskStatus,\n AXPWorkflowTaskProvider,\n} from './task-board.types';\nimport { filterTasksOverlappingRange } from './task-board-range.utils';\nimport { matchesTaskDueStatusFilter } from './due-status/due-status.types';\nimport { matchesTaskPriorityFilter } from './task-board-priority.utils';\nimport { AXPDueStatusProviderService } from './due-status';\nimport type { AXMTaskManagementTaskEntityModel } from '@acorex-platform/module-task-management-client/contracts';\n\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get } from 'lodash';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport type { AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\n\n//#endregion\n\n//#region ---- Provider ----\n\ntype TaskRow = AXMTaskManagementTaskEntityModel & {\n status?: { id: string; title?: string; color?: string };\n taskType?: { id: string; title?: string };\n};\n\n/**\n * Feeds the platform task board from persisted {@link TaskManagement.Task} rows.\n */\n@Injectable()\nexport class AXPTaskManagementEntityTaskProvider extends AXPWorkflowTaskProvider<Record<string, unknown>> {\n\n override getTitle(): Promise<string> {\n return Promise.resolve('Tasks');\n }\n\n override getIcon(): Promise<string> {\n return Promise.resolve('fa-light fa-clipboard-check');\n }\n\n private readonly entityService = inject(AXPEntityService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly dueStatusProviderService = inject(AXPDueStatusProviderService);\n\n get name(): string {\n return 'task-management.tasks';\n }\n\n async getTasks(options?: AXPTaskFilter): Promise<{ items: AXPTask<Record<string, unknown>>[]; total: number }> {\n const filters: Array<Record<string, unknown>> = [\n { field: 'isArchived', operator: { type: 'equal' }, value: false },\n ];\n\n if (options?.subjectRefTypes?.length) {\n filters.push({\n field: 'subjectRef.type',\n operator: { type: 'in' },\n value: options.subjectRefTypes,\n });\n }\n\n if (options?.subjectRefIds?.length) {\n filters.push({\n field: 'subjectRef.id',\n operator: { type: 'in' },\n value: options.subjectRefIds,\n });\n }\n\n const requiresClientSideFiltering =\n Boolean(options?.range?.from && options.range.end) ||\n (options?.priorities?.length ?? 0) > 0 ||\n (options?.dueStatusKeys?.length ?? 0) > 0;\n\n const page = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.task.name)\n .data()\n .query({\n skip: requiresClientSideFiltering ? 0 : (options?.skip ?? 0),\n take: requiresClientSideFiltering ? 1000 : Math.min(options?.take ?? 1000, 1000),\n filter: { logic: 'and', filters },\n });\n\n const rows = (page.items ?? []) as TaskRow[];\n let items = rows.map((row) => this.mapRowToTask(row));\n\n if (options?.range?.from && options.range.end) {\n items = filterTasksOverlappingRange(items, options.range);\n }\n\n if (options?.priorities?.length) {\n items = items.filter((task) => matchesTaskPriorityFilter(task, options.priorities!));\n }\n\n items = items.map(\n (task) => this.dueStatusProviderService.attachDueStatusToTask(task) as AXPTask<Record<string, unknown>>,\n );\n\n if (options?.dueStatusKeys?.length) {\n items = items.filter((task) => matchesTaskDueStatusFilter(task, options.dueStatusKeys!));\n }\n\n const total = items.length;\n const skip = options?.skip ?? 0;\n const take = options?.take ?? total;\n return { items: items.slice(skip, skip + take), total };\n }\n\n async updateTasks(tasksToUpdate: AXPTask<Record<string, unknown>>[]): Promise<AXPTask<Record<string, unknown>>[]> {\n return tasksToUpdate;\n }\n\n async getStatuses(): Promise<AXPTaskStatus[]> {\n return [];\n }\n\n async getExtraFields(): Promise<AXPExtraField[]> {\n return [];\n }\n\n async executeCommand(command: AXPExecuteCommand): AXPCommandExecuteResultPromise {\n return command.name === 'Entity:OpenDetails'\n ? { success: true, kind: 'object', data: undefined }\n : { success: false };\n }\n\n async getActions(task?: AXPTask<Record<string, unknown>>): Promise<AXPActionMenuItem[]> {\n if (!task?.id) {\n return [];\n }\n return [\n {\n name: 'Entity:OpenDetails',\n title: '@general:actions.view.title',\n icon: 'fa-light fa-eye',\n command: {\n name: 'Entity:OpenDetails',\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n id: task.id,\n },\n },\n },\n ];\n }\n\n //#region ---- Mapping ----\n\n private mapRowToTask(row: TaskRow): AXPTask<Record<string, unknown>> {\n const startDate = row.startDate ?? row.dueDate ?? this.calendarService.create(new Date()).date;\n const endDate = row.dueDate ?? row.startDate ?? startDate;\n const statusTitle = defaultTo(get(row, 'status.title'), 'Unknown');\n const statusId = defaultTo(get(row, 'status.id'), row.statusId);\n\n return {\n id: row.id,\n index: row.order ?? 0,\n title: row.title,\n description: row.description,\n status: {\n id: statusId,\n title: statusTitle,\n color: get(row, 'status.color') as string | undefined,\n },\n assignee: row.assigneeId\n ? {\n id: row.assigneeId,\n type: 'user',\n fullName: String(get(row, 'assignee.displayName') ?? get(row, 'assignee.fullName') ?? row.assigneeId),\n }\n : undefined,\n reporter: { id: 'system', type: 'user', fullName: 'System' },\n startDate,\n endDate,\n priority: this.mapPriority(row.priority),\n progress: row.progress,\n tags: row.tags,\n provider: this.name,\n data: {\n taskTypeId: row.taskTypeId,\n subjectRef: row.subjectRef,\n entityId: row.id,\n },\n };\n }\n\n private mapPriority(priority: TaskRow['priority']): AXPTaskPriority | undefined {\n switch (priority) {\n case 'low':\n return 'low';\n case 'medium':\n return 'normal';\n case 'high':\n return 'high';\n case 'critical':\n return 'urgent';\n default:\n return undefined;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMSecurityManagementUsersEntityModel } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { normalizeTaskBoardAssigneeIds } from '../../../task-board/task-board-assignee-access';\nimport { AXPTask, AXPTaskBoardService, AXPTaskFilter } from '../../../task-board';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\n\ntype TaskPriority = NonNullable<AXPTask['priority']>;\ntype PriorityFilterKey = TaskPriority | 'no_priority';\ntype Priority = { title: string; name: PriorityFilterKey };\ntype TaskType = { name: string; title: string; icon: string };\ntype Assignee = AXMSecurityManagementUsersEntityModel & { displayName: string };\ntype DateRange = { title: string; name: string };\ntype QueryParam = {\n type?: string[];\n dateRange: string;\n assignee?: string[];\n priority?: PriorityFilterKey[];\n};\n\n@Component({\n templateUrl: './task-board-shortcut.component.html',\n styleUrls: ['./task-board-shortcut.component.css'],\n imports: [\n CommonModule,\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXDecoratorGenericComponent,\n RouterLink,\n AXTranslationModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPTaskBoardShortcutViewComponent extends AXPLayoutBaseWidgetComponent {\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly sessionService = inject(AXPSessionService);\n\n protected tasksCount = signal<number>(0);\n\n protected readonly assignee = computed<Assignee[]>(() => this.options()?.['assignee'] ?? []);\n protected readonly priority = computed<Priority[]>(() => this.options()?.['priority'] ?? []);\n protected readonly selectedTaskTypes = computed<TaskType[]>(() => this.options()?.['taskTypes'] ?? []);\n protected readonly dateRange = computed<DateRange>(\n () => this.options()?.['dateRange'] ?? { title: 'This Month', name: 'this-month' },\n );\n protected readonly title = computed<string>(() => {\n const types = this.selectedTaskTypes()\n .map((t) => t.title)\n .join(', ');\n return types === '' ? 'All Tasks' : types;\n });\n protected readonly queryParams = computed<QueryParam>(() => {\n const dateRange = this.dateRange().name;\n const assignee = normalizeTaskBoardAssigneeIds(\n this.sessionService,\n this.assignee().map((a) => a.id),\n ).map(String);\n const priority = this.priority().map((p) => p.name);\n const type = this.selectedTaskTypes().map((t) => t.name);\n return { type, priority, assignee, dateRange };\n });\n\n #taskCounter = effect(async () => {\n const params = this.queryParams();\n const range = this.taskBoardService.rangeCalculator(params.dateRange);\n const options: AXPTaskFilter = {\n range,\n types: params.type,\n priorities: params.priority,\n assigneeIds: params.assignee,\n };\n this.taskBoardService.getTasks(options).then((t) => this.tasksCount.set(t.total));\n });\n}\n","<div class=\"flex flex-col gap-3 px-6 pt-3 pb-6 h-full\">\n <h1 class=\"text-start text-lg font-medium truncate h-9\">{{ title() | translate | async }}</h1>\n <div class=\"w-full h-full relative\">\n <div class=\"flex flex-col gap-2 text-start\">\n <h3 class=\"text-xl text-primary text-nowrap\">{{ dateRange().title | translate | async }}</h3>\n <h1 class=\"text-6xl font-bold\">{{ tasksCount() }}</h1>\n </div>\n <a\n [queryParams]=\"queryParams()\"\n class=\"absolute bottom-0 right-0\"\n [routerLink]=\"['/TaskManagement/task-board']\"\n >\n <ax-button [text]=\"'View all'\" [look]=\"'link'\" class=\"ax-sm\" [color]=\"'primary'\">\n <ax-suffix> <ax-icon class=\"fa-solid fa-external-link\"></ax-icon> </ax-suffix>\n </ax-button>\n </a>\n </div>\n</div>\n","import { AXPDefinitionCategory } from '@acorex-platform/framework-shared/core';\n\n/**\n * Parent tab for task-management dashboard widgets in the widget gallery.\n */\nexport const AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY: AXPDefinitionCategory = {\n name: 'tasks',\n order: 4,\n title: '@task-management:dashboard-widgets.widget-picker-category.tasks',\n};\n","import { AXPDefinitionCategory } from '@acorex-platform/framework-shared/core';\n\nconst SUB = '@task-management:dashboard-widgets.widget-picker-sub-categories';\n\n//#region ---- Task dashboard widget picker sub-categories ----\n\nexport const AXP_TASK_MANAGEMENT_DASHBOARD_SUB_SHORTCUT: AXPDefinitionCategory = {\n name: 'task-dashboard-shortcut',\n order: 1,\n title: `${SUB}.shortcut`,\n};\n\nexport const AXP_TASK_MANAGEMENT_DASHBOARD_SUB_BOARD: AXPDefinitionCategory = {\n name: 'task-dashboard-board',\n order: 2,\n title: `${SUB}.board`,\n};\n\n//#endregion\n\n","//#region ----- Imports -----\n\nimport { defineDashboardWidgetDimensions } from '@acorex-platform/module-dashboard-management-client';\n\n//#endregion\n\n//#region ----- Task dashboard presets -----\n\n/** Task board list tile. */\nexport const AXP_TASK_BOARD_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 6]],\n md: [\n [3, 4],\n [4, 4],\n ],\n lg: [\n [3, 4],\n [4, 4],\n ],\n xl: [\n [3, 4],\n [4, 4],\n ],\n '2xl': [\n [3, 4],\n [4, 4],\n ],\n '3xl': [\n [3, 4],\n [4, 4],\n ],\n '4xl': [\n [3, 4],\n [4, 4],\n ],\n});\n\n/** Filtered task-board shortcut launcher. */\nexport const AXP_TASK_BOARD_SHORTCUT_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 2]],\n md: [\n [2, 2],\n [3, 2],\n ],\n lg: [\n [2, 2],\n [3, 2],\n ],\n xl: [\n [2, 2],\n [3, 2],\n ],\n '2xl': [\n [2, 2],\n [3, 2],\n ],\n '3xl': [\n [2, 2],\n [3, 2],\n ],\n '4xl': [\n [2, 2],\n [3, 2],\n ],\n});\n\n//#endregion\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_DATA_PATH_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXMTaskManagementQueryKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPPriorityFilterKey } from '../../../task-board/task-board.viewmodel';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY } from '../widget-category.type';\nimport { AXP_TASK_MANAGEMENT_DASHBOARD_SUB_SHORTCUT } from '../task-dashboard-widget-subcategories';\nimport { AXP_TASK_BOARD_SHORTCUT_DIMENSIONS } from '../../task-dashboard-widget.dimensions';\n\nconst VALID_PRIORITIES: { 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\nconst VALID_DATE_RANGES: { title: string; name: string }[] = [\n { title: 'Today', name: 'today' },\n { title: 'This Week', name: 'this-week' },\n { title: 'This Month', name: 'this-month' },\n];\n\nexport const AXPTaskBoardShortcut: AXPWidgetConfig = {\n name: RootConfig.widgets.taskBoardShortcut,\n title: '@dashboard:widgets.task-board-shortcut.widget-title',\n description: '@dashboard:widgets.task-board-shortcut.widget-description',\n categories: [AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY],\n subCategory: AXP_TASK_MANAGEMENT_DASHBOARD_SUB_SHORTCUT,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-clipboard-list-check',\n properties: [\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Task Type ======\n {\n order: 0,\n name: 'taskTypes',\n title: '@task-management:task-board.filter.task-type',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'taskTypes',\n path: 'options.taskTypes',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n textField: 'title',\n valueField: 'name',\n dataSource: AXMTaskManagementQueryKeys.ListTaskTypes,\n },\n },\n },\n visible: true,\n },\n // ====== Asigned To ======\n {\n order: 1,\n name: 'assignee',\n title: '@task-management:task-board.filter.assignee',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'assignee',\n path: 'options.assignee',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: AXMTaskManagementQueryKeys.TaskBoardAssignees,\n textField: 'displayName',\n },\n },\n },\n visible: true,\n },\n // ====== Priority ======\n {\n order: 2,\n name: 'priority',\n title: '@task-management:task-board.filter.priority',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'priority',\n path: 'options.priority',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n textField: 'title',\n valueField: 'name',\n dataSource: VALID_PRIORITIES,\n },\n },\n },\n visible: true,\n },\n // ====== Date Range ======\n {\n order: 3,\n name: 'dateRange',\n title: '@task-management:task-board.filter.date-range',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n defaultValue: { title: 'This Month', name: 'this-month' },\n interface: {\n name: 'dateRange',\n path: 'options.dateRange',\n type: AXPWidgetsCatalog.select,\n options: {\n textField: 'title',\n valueField: 'name',\n dataSource: VALID_DATE_RANGES,\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./task-board-shortcut.component').then((c) => c.AXPTaskBoardShortcutViewComponent),\n },\n },\n meta: {\n dimensions: AXP_TASK_BOARD_SHORTCUT_DIMENSIONS,\n },\n};\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXChipsComponent } from '@acorex/components/chips';\nimport { AXFormatPipe, AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport {\n AXTranslationModule,\n AXTranslationService,\n} from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXMSecurityManagementUsersEntityModel } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { get } from 'lodash';\nimport {\n AXMTaskBoardTaskPopoverOverlayService,\n AXPDueStatusFilterKey,\n AXPDueStatusProviderService,\n AXPPriorityFilterKey,\n AXPTask,\n AXPTaskBoardColorBy,\n AXPTaskBoardService,\n AXPTaskPriority,\n AXPTASK_PRIORITIES,\n buildTaskAccentSurfaceCssClass,\n getDefaultDueStatusDefinitions,\n getTaskPriorityColor,\n getTaskPriorityFilterKey,\n matchesTaskDueStatusFilter,\n resolveTaskBoardAccentColor,\n resolveTaskBoardSchedulerLabels,\n resolveTaskBoardStatusColor,\n TASK_PRIORITY_ORDER,\n} from '../../../task-board';\nimport { AXMTaskBoardSettings } from '@acorex-platform/module-task-management-client/contracts';\n\ntype SortBy = { title: string; name: 'priority' | 'dueDate' };\ntype TaskType = { name: string; title: string; icon: string };\ntype Assignee = AXMSecurityManagementUsersEntityModel & { displayName: string };\n\nconst NO_PRIORITY_KEY: AXPPriorityFilterKey = 'no_priority';\n\nconst PRIORITY_LABEL_KEYS: Record<AXPPriorityFilterKey, string> = {\n urgent: '@task-management:task-board.priority.urgent',\n high: '@task-management:task-board.priority.high',\n normal: '@task-management:task-board.priority.normal',\n low: '@task-management:task-board.priority.low',\n no_priority: '@task-management:task-board.priority.no-priority',\n};\n\n@Component({\n templateUrl: './task-board-widget.component.html',\n styleUrls: ['./task-board-widget.component.css'],\n imports: [\n CommonModule,\n AXFormatPipe,\n AXChipsComponent,\n AXTranslationModule,\n AXPStateMessageComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPTaskBoardWidgetViewComponent extends AXPLayoutBaseWidgetComponent {\n taskClick = output<AXPTask>();\n\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(\n AXMTaskBoardTaskPopoverOverlayService,\n );\n private readonly dueStatusProviderService = inject(\n AXPDueStatusProviderService,\n );\n private readonly settingsService = inject(AXPSettingsService);\n private readonly formatService = inject(AXFormatService);\n private readonly translationService = inject(AXTranslationService);\n private readonly localeService = inject(AXLocaleService);\n private readonly destroyRef = inject(DestroyRef);\n\n protected readonly maxItems = computed<number>(\n () => this.options()?.['maxItems'] ?? 10,\n );\n protected readonly assignee = computed<Assignee[]>(\n () => this.options()?.['assignee'] ?? [],\n );\n protected readonly selectedTaskTypes = computed<TaskType[]>(() => {\n const raw = this.options()?.['taskTypes'] ?? this.options()?.['taskType'];\n if (!raw) {\n return [];\n }\n return Array.isArray(raw) ? raw : [raw];\n });\n protected readonly sortBy = computed<SortBy>(\n () => this.options()?.['sortBy'] ?? { title: 'Priority', name: 'priority' },\n );\n protected readonly widgetColorBy = computed<AXPTaskBoardColorBy | undefined>(\n () => this.options()?.['colorBy'] as AXPTaskBoardColorBy | undefined,\n );\n\n private readonly globalColorBy = signal<AXPTaskBoardColorBy>('dueDate');\n private readonly allTasks = signal<AXPTask[]>([]);\n protected readonly selectedPriorities = signal<Set<AXPPriorityFilterKey>>(\n new Set([...AXPTASK_PRIORITIES, NO_PRIORITY_KEY]),\n );\n protected readonly selectedDueStatuses = signal<Set<AXPDueStatusFilterKey>>(\n new Set(getDefaultDueStatusDefinitions().map((item) => item.name)),\n );\n\n protected readonly effectiveColorBy = computed<AXPTaskBoardColorBy>(\n () => this.widgetColorBy() ?? this.globalColorBy(),\n );\n\n protected readonly filteredTasks = computed(() => {\n const tasks = this.allTasks();\n const limit = this.maxItems();\n const selectedTypes = this.selectedTaskTypes();\n const selectedPrioritiesSet = this.selectedPriorities();\n const selectedDueStatusSet = this.selectedDueStatuses();\n\n const selectedTypeNames = new Set(selectedTypes.map((t) => t.name));\n const typeFiltered =\n selectedTypes.length > 0\n ? tasks.filter(\n (task) => task.provider && selectedTypeNames.has(task.provider),\n )\n : tasks;\n\n const priorityFiltered = typeFiltered.filter((task) => {\n const priorityKey = getTaskPriorityFilterKey(task);\n return selectedPrioritiesSet.has(priorityKey);\n });\n\n const dueStatusFiltered = priorityFiltered.filter((task) =>\n matchesTaskDueStatusFilter(task, [...selectedDueStatusSet]),\n );\n\n const sorted = this.sortTasks([...dueStatusFiltered]);\n return sorted.slice(0, limit);\n });\n\n protected readonly priorityBadges = computed(() => {\n const tasks = this.getTypeFilteredTasks();\n\n const counts = [...AXPTASK_PRIORITIES, NO_PRIORITY_KEY].reduce(\n (acc, key) => {\n acc[key] = 0;\n return acc;\n },\n {} as Record<AXPPriorityFilterKey, number>,\n );\n\n for (const task of tasks) {\n counts[getTaskPriorityFilterKey(task)]++;\n }\n\n const priorityBadges = AXPTASK_PRIORITIES.map((priority) => ({\n name: priority,\n label: PRIORITY_LABEL_KEYS[priority],\n count: counts[priority],\n color: getTaskPriorityColor(priority) as AXStyleColorType,\n }));\n\n return [\n ...priorityBadges,\n {\n name: NO_PRIORITY_KEY,\n label: PRIORITY_LABEL_KEYS[NO_PRIORITY_KEY],\n count: counts[NO_PRIORITY_KEY],\n color: 'secondary' as AXStyleColorType,\n },\n ].filter((badge) => badge.count > 0);\n });\n\n protected readonly dueStatusBadges = computed(() => {\n const tasks = this.getTypeFilteredTasks();\n const definitions = getDefaultDueStatusDefinitions();\n\n const counts = definitions.reduce(\n (acc, definition) => {\n acc[definition.name] = 0;\n return acc;\n },\n {} as Record<AXPDueStatusFilterKey, number>,\n );\n\n for (const task of tasks) {\n const key = get(task.data, 'dueStatusKey') as\n | AXPDueStatusFilterKey\n | undefined;\n if (key && key in counts) {\n counts[key]++;\n }\n }\n\n return definitions\n .map((definition) => ({\n name: definition.name,\n label: definition.title,\n count: counts[definition.name],\n color: definition.color as AXStyleColorType,\n }))\n .filter((badge) => badge.count > 0);\n });\n\n protected readonly hasFilterToolbar = computed(\n () => this.priorityBadges().length > 0 || this.dueStatusBadges().length > 0,\n );\n\n protected readonly hasNarrowedFilters = computed(() => {\n const allPriorityCount = AXPTASK_PRIORITIES.length + 1;\n const allDueStatusCount = getDefaultDueStatusDefinitions().length;\n\n return (\n this.selectedPriorities().size < allPriorityCount ||\n this.selectedDueStatuses().size < allDueStatusCount\n );\n });\n\n constructor() {\n super();\n\n void this.settingsService\n .scope(AXPPlatformScope.User)\n .get<AXPTaskBoardColorBy>(AXMTaskBoardSettings.ColorBy)\n .then((value) => {\n if (value) {\n this.globalColorBy.set(value);\n }\n });\n\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n void this.handleBoardRefresh(data);\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 #loadTasks = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n this.maxItems();\n this.assignee();\n this.selectedTaskTypes();\n this.sortBy();\n void this.reloadTasks();\n });\n\n protected onPriorityFilterChange(priorityKey: AXPPriorityFilterKey): void {\n this.selectedPriorities.update((currentSet) => {\n const newSet = new Set(currentSet);\n if (newSet.has(priorityKey)) {\n newSet.delete(priorityKey);\n } else {\n newSet.add(priorityKey);\n }\n return newSet;\n });\n }\n\n protected onDueStatusFilterChange(dueStatusKey: AXPDueStatusFilterKey): void {\n this.selectedDueStatuses.update((currentSet) => {\n const newSet = new Set(currentSet);\n if (newSet.has(dueStatusKey)) {\n newSet.delete(dueStatusKey);\n } else {\n newSet.add(dueStatusKey);\n }\n return newSet;\n });\n }\n\n protected isPriorityFilterActive(priorityKey: AXPPriorityFilterKey): boolean {\n return this.selectedPriorities().has(priorityKey);\n }\n\n protected isDueStatusFilterActive(\n dueStatusKey: AXPDueStatusFilterKey,\n ): boolean {\n return this.selectedDueStatuses().has(dueStatusKey);\n }\n\n protected resetFilters(): void {\n this.selectedPriorities.set(\n new Set([...AXPTASK_PRIORITIES, NO_PRIORITY_KEY]),\n );\n this.selectedDueStatuses.set(\n new Set(getDefaultDueStatusDefinitions().map((item) => item.name)),\n );\n }\n\n protected async onTaskClick(task: AXPTask, event: MouseEvent): Promise<void> {\n const anchor = event.currentTarget as HTMLElement;\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.taskClick.emit(task);\n }\n\n protected getStatusColor(task: AXPTask): AXStyleColorType {\n return resolveTaskBoardStatusColor(task) as AXStyleColorType;\n }\n\n protected getAccentClass(task: AXPTask): string {\n const colorToken = resolveTaskBoardAccentColor(\n task,\n this.effectiveColorBy(),\n );\n return buildTaskAccentSurfaceCssClass(colorToken);\n }\n\n protected hasExplicitDueDate(task: AXPTask): boolean {\n return get(task.data, 'hasExplicitDueDate') === true;\n }\n\n protected getProviderTitle(task: AXPTask): string | null {\n if (!task.provider) {\n return null;\n }\n\n return (\n this.taskBoardService.getTaskTypeOption(task.provider)?.title ?? null\n );\n }\n\n protected getProviderIcon(task: AXPTask): string {\n if (!task.provider) {\n return 'fa-light fa-layer-group';\n }\n\n return (\n this.taskBoardService.getTaskTypeOption(task.provider)?.icon ??\n 'fa-light fa-layer-group'\n );\n }\n\n private getTypeFilteredTasks(): AXPTask[] {\n const tasks = this.allTasks();\n const selectedTypes = this.selectedTaskTypes();\n const selectedTypeNames = new Set(selectedTypes.map((t) => t.name));\n\n return selectedTypes.length > 0\n ? tasks.filter(\n (task) => task.provider && selectedTypeNames.has(task.provider),\n )\n : tasks;\n }\n\n private async handleBoardRefresh(data?: {\n provider?: string;\n }): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (\n data?.provider &&\n active?.provider &&\n data.provider !== active.provider\n ) {\n return;\n }\n\n this.taskBoardService.invalidateTaskCache();\n await this.reloadTasks();\n\n if (!active?.provider) {\n return;\n }\n\n const updated = this.allTasks().find((task) => task.id === active.id);\n if (updated) {\n await this.taskPopoverOverlay.refreshTask({\n ...updated,\n provider: active.provider,\n });\n return;\n }\n\n this.taskPopoverOverlay.close();\n }\n\n private reloadTasks(): Promise<void> {\n const limit = this.maxItems();\n const assignee = this.assignee();\n const selectedTypes = this.selectedTaskTypes();\n const typeNames = selectedTypes.map((t) => t.name);\n\n return this.taskBoardService\n .getTasks({\n take: limit,\n assigneeIds: assignee.map((a) => a.id),\n types: typeNames,\n })\n .then(async (tasks) => {\n const labeled = await resolveTaskBoardSchedulerLabels(\n tasks.items,\n this.translationService,\n this.formatService,\n this.settingsService,\n );\n const enriched = labeled.map((task) =>\n this.dueStatusProviderService.attachDueStatusToTask(task),\n );\n this.allTasks.set(enriched);\n });\n }\n\n private compareByPriority(a: AXPTask, b: AXPTask): number {\n const priorityA = getTaskPriorityFilterKey(a);\n const priorityB = getTaskPriorityFilterKey(b);\n return TASK_PRIORITY_ORDER[priorityA] - TASK_PRIORITY_ORDER[priorityB];\n }\n\n private compareByDueDate(a: AXPTask, b: AXPTask): number {\n const now = Date.now();\n const dateA =\n this.hasExplicitDueDate(a) && a.endDate\n ? new Date(a.endDate).getTime()\n : null;\n const dateB =\n this.hasExplicitDueDate(b) && b.endDate\n ? new Date(b.endDate).getTime()\n : null;\n\n if (dateA === null && dateB === null) {\n return 0;\n }\n if (dateA === null) {\n return 1;\n }\n if (dateB === null) {\n return -1;\n }\n\n return dateA - dateB;\n }\n\n private sortTasks(\n tasks: AXPTask<Record<string, unknown>>[],\n ): AXPTask<Record<string, unknown>>[] {\n const sortBy = this.sortBy().name;\n return tasks.sort((a, b) => {\n if (sortBy === 'priority') {\n const priorityCompare = this.compareByPriority(a, b);\n if (priorityCompare !== 0) {\n return priorityCompare;\n }\n return this.compareByDueDate(a, b);\n }\n\n const dateCompare = this.compareByDueDate(a, b);\n if (dateCompare !== 0) {\n return dateCompare;\n }\n return this.compareByPriority(a, b);\n });\n }\n}\n","<div class=\"size-full p-3 flex flex-col gap-3\">\n @if (hasFilterToolbar()) {\n <section class=\"__filters\">\n @if (priorityBadges().length > 0) {\n <div class=\"__filter-group\">\n <span class=\"__filter-label\">\n {{\n '@task-management:task-board.filter.priority' | translate | async\n }}\n </span>\n <div class=\"__filter-chips\">\n @for (badge of priorityBadges(); track badge.name) {\n <ax-chips\n [color]=\"badge.color\"\n class=\"filter-badge ax-sm\"\n [class.--active]=\"isPriorityFilterActive(badge.name)\"\n [text]=\"\n ((badge.label | translate | async) ?? '') +\n ' (' +\n badge.count +\n ')'\n \"\n (click)=\"onPriorityFilterChange(badge.name)\"\n [look]=\"\n isPriorityFilterActive(badge.name) ? 'solid' : 'outline'\n \"\n ></ax-chips>\n }\n </div>\n </div>\n }\n\n @if (dueStatusBadges().length > 0) {\n <div class=\"__filter-group\">\n <span class=\"__filter-label\">\n {{\n '@task-management:task-board.filter.due-status'\n | translate\n | async\n }}\n </span>\n <div class=\"__filter-chips\">\n @for (badge of dueStatusBadges(); track badge.name) {\n <ax-chips\n [color]=\"badge.color\"\n class=\"filter-badge ax-sm\"\n [class.--active]=\"isDueStatusFilterActive(badge.name)\"\n [text]=\"\n ((badge.label | translate | async) ?? '') +\n ' (' +\n badge.count +\n ')'\n \"\n (click)=\"onDueStatusFilterChange(badge.name)\"\n [look]=\"\n isDueStatusFilterActive(badge.name) ? 'solid' : 'outline'\n \"\n ></ax-chips>\n }\n </div>\n </div>\n }\n </section>\n\n @if (hasNarrowedFilters()) {\n <button type=\"button\" class=\"__filter-reset\" (click)=\"resetFilters()\">\n <i class=\"fa-light fa-arrow-rotate-left\" aria-hidden=\"true\"></i>\n <span>{{ '@acorex:common.general.clear' | translate | async }}</span>\n </button>\n }\n }\n\n <div class=\"overflow-auto overflow-x-hidden grow min-h-0\">\n <div class=\"__list\">\n @for (task of filteredTasks(); track task.id) {\n <div class=\"__item\" (click)=\"onTaskClick(task, $event)\">\n <div\n class=\"__accent\"\n [ngClass]=\"getAccentClass(task)\"\n aria-hidden=\"true\"\n ></div>\n\n <div class=\"__content\">\n <div class=\"__header\">\n <p class=\"__title\" [title]=\"task.title\">{{ task.title }}</p>\n\n @if (task.status.title) {\n <ax-chips\n class=\"__status-chip ax-sm\"\n [look]=\"'twotone'\"\n [color]=\"getStatusColor(task)\"\n [text]=\"(task.status.title | translate | async)!\"\n ></ax-chips>\n }\n </div>\n\n <div class=\"__meta\">\n @if (getProviderTitle(task); as providerTitle) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.type'\n | translate\n | async\n \"\n >\n <i [class]=\"getProviderIcon(task)\" aria-hidden=\"true\"></i>\n <span>{{ providerTitle | translate | async }}</span>\n </span>\n }\n\n @if (hasExplicitDueDate(task) && task.endDate) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.due-date'\n | translate\n | async\n \"\n >\n <i class=\"fa-light fa-calendar\" aria-hidden=\"true\"></i>\n <span>{{\n task.endDate\n | format: 'datetime' : { format: 'datetime' }\n | async\n }}</span>\n </span>\n } @else if (task.createdAt) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.received'\n | translate\n | async\n \"\n >\n <i class=\"fa-light fa-inbox\" aria-hidden=\"true\"></i>\n <span>{{\n task.createdAt\n | format: 'datetime' : { format: 'datetime' }\n | async\n }}</span>\n </span>\n }\n\n @if (task.reporter.fullName) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.reporter'\n | translate\n | async\n \"\n >\n <i class=\"fa-light fa-user-pen\" aria-hidden=\"true\"></i>\n <span>{{ task.reporter.fullName }}</span>\n </span>\n } @else if (task.assignee; as assignee) {\n @if (assignee.fullName) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.assignee'\n | translate\n | async\n \"\n >\n <i class=\"fa-light fa-user\" aria-hidden=\"true\"></i>\n <span>{{ assignee.fullName }}</span>\n </span>\n }\n }\n </div>\n </div>\n </div>\n } @empty {\n <axp-state-message\n icon=\"fa-light fa-clipboard-list-check\"\n [title]=\"'@dashboard:task-board.no-tasks-found.title'\"\n [description]=\"'@dashboard:task-board.no-tasks-found.description'\"\n ></axp-state-message>\n }\n </div>\n </div>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY } from '../widget-category.type';\nimport { AXP_TASK_MANAGEMENT_DASHBOARD_SUB_BOARD } from '../task-dashboard-widget-subcategories';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_DATA_PATH_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXMTaskManagementQueryKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXP_TASK_BOARD_DIMENSIONS } from '../../task-dashboard-widget.dimensions';\n\nexport const AXPTaskBoardWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.taskBoard,\n title: '@dashboard:widgets.task-board-widget.widget-title',\n description: '@dashboard:widgets.task-board-widget.widget-description',\n categories: [AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY],\n subCategory: AXP_TASK_MANAGEMENT_DASHBOARD_SUB_BOARD,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-clipboard-list-check',\n properties: [\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Title ======\n {\n order: 1,\n name: 'title',\n title: '@dashboard:task-board.task-board-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n defaultValue: 'Task Board',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: '@dashboard:widgets.task-board-widget.title-placeholder',\n },\n triggers: [\n {\n event: `{{ events.context('options.taskTypes') }}`,\n action: `{{ widget.setValue(widget.find(\"taskTypes\").output('item').title==='All' ? 'Task Board' : widget.find(\"taskTypes\").output('item').title) }}`,\n },\n ],\n },\n },\n visible: true,\n },\n // ====== Task Type ======\n {\n order: 0,\n name: 'taskTypes',\n title: '@task-management:task-board.filter.task-type',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'taskTypes',\n path: 'options.taskTypes',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n textField: 'title',\n valueField: 'name',\n dataSource: AXMTaskManagementQueryKeys.ListTaskTypes,\n },\n },\n },\n visible: true,\n },\n // ====== Sort By ======\n {\n name: 'sortBy',\n title: '@dashboard:task-board.sort-by',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n defaultValue: { title: 'Priority', name: 'priority' },\n interface: {\n name: 'sortBy',\n path: 'options.sortBy',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n dataSource: [\n { title: 'Priority', name: 'priority' },\n { title: 'Due Date', name: 'dueDate' },\n ],\n multiple: false,\n direction: 'horizontal',\n },\n },\n },\n visible: true,\n },\n // ====== Color By ======\n {\n name: 'colorBy',\n title: '@dashboard:task-board.color-by',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'colorBy',\n path: 'options.colorBy',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n allowClear: true,\n dataSource: [\n { title: 'Due Date', name: 'dueDate' },\n { title: 'Priority', name: 'priority' },\n { title: 'Status', name: 'status' },\n ],\n },\n },\n },\n visible: true,\n },\n // ====== Display options ======\n {\n name: 'maxItems',\n title: '@dashboard:task-board.max-items',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 10,\n dataType: 'number',\n interface: {\n name: 'maxItems',\n path: 'options.maxItems',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 50,\n },\n },\n },\n visible: true,\n },\n // ====== Asigned To ======\n {\n name: 'assignee',\n title: '@dashboard:task-board.asigned-to',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'assignee',\n path: 'options.assignee',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: AXMTaskManagementQueryKeys.TaskBoardAssignees,\n textField: 'displayName',\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./task-board-widget.component').then((c) => c.AXPTaskBoardWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_TASK_BOARD_DIMENSIONS,\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPTaskBoardShortcut } from './features/dashboard/widgets/shortcut';\nimport { AXPTaskBoardWidget } from './features/dashboard/widgets/task-board';\n\n//#endregion\n\n//#region ---- Task Management Widgets Provider ----\n\nconst TASK_WIDGETS = [AXPTaskBoardWidget, AXPTaskBoardShortcut];\n\n@Injectable()\nexport class AXMTaskManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return TASK_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPProjectsWorkPermissionKeys\n} from '@acorex-platform/module-task-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers task capabilities into the shared Projects & Work group.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPProjectsWorkPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:projects-work.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ProjectsWork.Root, `${G}.projects-work.title`, `${G}.projects-work.description`, { order: 60 });\n\n context\n .addGroup(\n groups.ProjectsWork.Tasks,\n `${G}.projects-work-tasks.title`,\n `${G}.projects-work-tasks.description`,\n { parent: groups.ProjectsWork.Root, order: 20 },\n )\n .addPermission(keys.MaintainTasks, `${P}.maintain-tasks.title`, `${P}.maintain-tasks.description`)\n .endPermission()\n .addPermission(keys.ViewAllTasks, `${P}.view-all-tasks.title`, `${P}.view-all-tasks.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService, AXPSessionStatus } from '@acorex-platform/framework-client/auth';\nimport {\n AXPBroadcastEventService,\n AXPEntityBroadcastService,\n} from '@acorex-platform/framework-client/core';\nimport { AXPTaskBadgeProvider } from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPCommandEventsService,\n type AXPCommandExecutionEvent,\n} from '@acorex-platform/framework-client/runtime';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { get } from 'lodash';\nimport { debounceTime, distinctUntilChanged, filter, Subject } from 'rxjs';\nimport { isTaskBoardRealtimeEntity, TASK_BOARD_TASK_ENTITY } from './features/task-board/task-board-realtime-entities';\nimport { AXPTaskBoardService } from './features/task-board/task-board.service';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Menu `badgeKey` for Task Board. */\nexport const AXM_TASK_BOARD_BADGE_KEY = 'task-management-task-board-badge';\n\nconst TASK_MANAGEMENT_COMMAND_PREFIX = `${RootConfig.module.name}.`;\nconst WORKFLOW_MANAGEMENT_COMMAND_PREFIX = 'WorkflowManagement.';\n\n//#endregion\n\n//#region ----- Task badge provider -----\n\n/**\n * Shows the current user's assigned task count on the Task Board menu item.\n *\n * On user switch: clears the badge immediately, invalidates task cache, and refetches.\n * In-flight counts from a previous user are ignored.\n *\n * Refreshes after:\n * - task-management / workflow-management commands\n * - entity CRUD for Task (`Entity:Insert:Default` etc.)\n * - realtime `entity.mutation` → layout refresh broadcast for Task, TaskAssignment, WorkflowInstance\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMTaskBoardBadgeProvider extends AXPTaskBadgeProvider {\n //#region ----- Services & Dependencies -----\n\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly commandEvents = inject(AXPCommandEventsService);\n private readonly entityBroadcast = inject(AXPEntityBroadcastService);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- Signals & Properties -----\n\n readonly key = AXM_TASK_BOARD_BADGE_KEY;\n readonly count = signal(0);\n\n /** Bumped on every refresh so stale async results cannot overwrite a newer user/session. */\n private refreshGeneration = 0;\n\n /** Collapses task, instance, and layout events from one workflow step into a single count. */\n private readonly queuedRefresh = new Subject<void>();\n\n //#endregion\n\n constructor() {\n super();\n\n this.queuedRefresh.pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n void this.refresh();\n });\n\n // User switch / login: update immediately (no debounce).\n this.sessionService.user$\n .pipe(\n distinctUntilChanged((prev, next) => prev?.id === next?.id),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((user) => {\n // Clear stale badge from previous user right away.\n this.count.set(0);\n if (user?.id != null) {\n void this.refresh({ resetProviders: true });\n }\n });\n\n // After auth completes (login / user switch), refetch even if user id was already streamed.\n this.sessionService.status$\n .pipe(\n filter((status) => status === AXPSessionStatus.Authenticated),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n // Touch getter so storage-synced user switches emit on user$ when needed.\n const userId = this.sessionService.user?.id;\n if (userId != null) {\n void this.refresh({ resetProviders: true });\n } else {\n this.count.set(0);\n }\n });\n\n const unsubscribeCommands = this.commandEvents.listen((event) => {\n if (this.isRelevantCommandEvent(event)) {\n this.handleCommandEvent(event);\n }\n });\n\n this.eventService\n .listen('task-board.refresh')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.queuedRefresh.next();\n });\n\n this.taskBoardService.refresh$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.queuedRefresh.next();\n });\n\n const layoutSub = this.entityBroadcast.listenLayoutRefresh().subscribe(({ data }) => {\n if (isTaskBoardRealtimeEntity(data?.name)) {\n this.queuedRefresh.next();\n }\n });\n\n this.destroyRef.onDestroy(() => {\n unsubscribeCommands();\n layoutSub.unsubscribe();\n });\n }\n\n //#region ----- Badge actions -----\n\n async refresh(options?: { resetProviders?: boolean }): Promise<void> {\n const generation = ++this.refreshGeneration;\n const currentUserId = this.sessionService.user?.id;\n\n if (currentUserId == null) {\n if (generation === this.refreshGeneration) {\n this.count.set(0);\n }\n return;\n }\n\n this.taskBoardService.invalidateTaskCache();\n\n try {\n if (options?.resetProviders) {\n await this.taskBoardService.resolveProviders({ force: true });\n }\n\n // Do not pass a small `take`: multi-provider merge uses client-side length as total.\n const result = await this.taskBoardService.getTasks({\n assigneeIds: [currentUserId],\n });\n\n if (generation !== this.refreshGeneration) {\n return;\n }\n if (this.sessionService.user?.id !== currentUserId) {\n return;\n }\n\n this.count.set(result.total ?? 0);\n } catch {\n if (generation === this.refreshGeneration) {\n this.count.set(0);\n }\n }\n }\n\n private isRelevantCommandEvent(event: AXPCommandExecutionEvent): boolean {\n if (\n event.key.startsWith(TASK_MANAGEMENT_COMMAND_PREFIX) ||\n event.key.startsWith(WORKFLOW_MANAGEMENT_COMMAND_PREFIX)\n ) {\n return true;\n }\n\n const input = event.input as Record<string, unknown> | undefined;\n const entity = get(input, 'entity');\n if (entity === TASK_BOARD_TASK_ENTITY) {\n return true;\n }\n\n const entityInfo = get(input, 'entityInfo') as Record<string, unknown> | undefined;\n return (\n get(entityInfo, 'source') === TASK_BOARD_TASK_ENTITY ||\n (get(entityInfo, 'module') === RootConfig.module.name &&\n get(entityInfo, 'name') === RootConfig.entities.task.name)\n );\n }\n\n private handleCommandEvent(event?: AXPCommandExecutionEvent): void {\n if (!event || event.stage !== 'after' || !event.success) {\n return;\n }\n if (this.commandSkipsTaskRefresh(event)) {\n return;\n }\n this.queuedRefresh.next();\n }\n\n /** Cancelled or unchanged commands must not reload the task board. */\n private commandSkipsTaskRefresh(event: AXPCommandExecutionEvent): boolean {\n const metadata = event.result?.metadata;\n if (metadata?.['refresh'] === false) {\n return true;\n }\n const outcome = metadata?.['outcome'];\n return typeof outcome === 'string' && outcome.toLowerCase() === 'cancelled';\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPCommonMenuKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport {\n AXMTaskBoardSettings,\n AXPProjectsWorkPermissionKeys,\n AXPTaskManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-task-management-client/contracts';\nimport { AXM_TASK_BOARD_BADGE_KEY } from './badge.provider';\nimport { buildTaskBoardMenuPath } from './features/task-board/task-board-menu-path.utils';\nimport type {\n AXPTaskBoardCalendarLayout,\n AXPTaskBoardTableLayout,\n AXPTaskBoardTimelineLayout,\n} from './features/task-board/task-board-view-category.utils';\n\nexport class AXMTaskManagementMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n private sessionService = inject(AXPSessionService);\n private settingsService = inject(AXPSettingsService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n const keys = AXPProjectsWorkPermissionKeys;\n const applicationName = this.sessionService.application?.name ?? '';\n const taskBoardPath = await this.resolveTaskBoardMenuPath(applicationName, module.name);\n\n context.addItems([\n {\n name: AXPTaskManagementMenuKeys.TaskBoard,\n priority: 0,\n text: '@task-management:task-board.page-title',\n type: 'menu',\n icon: 'fa-light fa-list-check',\n path: taskBoardPath,\n badgeKey: AXM_TASK_BOARD_BADGE_KEY,\n policy: {\n features: [module.name],\n permissions: [keys.MaintainTasks],\n },\n },\n // {\n // name: AXPTaskManagementMenuKeys.Cartable,\n // text: '@task-management:cartable.menu-title',\n // type: 'menu',\n // icon: 'fa-light fa-inbox',\n // path: `${this.sessionService.application?.name}/${RootConfig.module.name}/cartable`,\n // policy: {\n // features: [module.name],\n // },\n // },\n // {\n // name: AXPTaskManagementMenuKeys.Root,\n // priority: 9003,\n // text: '@task-management:root-menu',\n // icon: module.icon,\n // children: [\n // {\n // name: AXPTaskManagementMenuKeys.Tasks,\n // text: '@task-management:task.plural-title',\n // path: this.entityService.createPath(module.name, RootConfig.entities.task.name),\n // icon: RootConfig.entities.task.icon,\n // priority: 1,\n // },\n // {\n // name: AXPTaskManagementMenuKeys.TaskTemplates,\n // text: '@task-management:task-template.plural-title',\n // path: this.entityService.createPath(module.name, RootConfig.entities.taskTemplate.name),\n // icon: RootConfig.entities.taskTemplate.icon,\n // priority: 2,\n // },\n // {\n // text: ``,\n // type: 'break',\n // priority: 5,\n // },\n // {\n // name: AXPTaskManagementMenuKeys.TaskTypes,\n // text: '@task-management:task-type.plural-title',\n // path: this.entityService.createPath(module.name, RootConfig.entities.taskType.name),\n // icon: RootConfig.entities.taskType.icon,\n // priority: 6,\n // },\n // ],\n // },\n ]);\n\n context.find(AXPCommonMenuKeys.Projects).addItems([\n {\n name: `${AXPTaskManagementMenuKeys.TaskTypes}:divider`,\n text: '',\n type: 'break',\n priority: 5,\n },\n {\n name: AXPTaskManagementMenuKeys.TaskTypes,\n text: RootConfig.entities.taskType.titlePlural,\n icon: RootConfig.entities.taskType.icon,\n priority: 10,\n path: this.entityService.createPath(module.name, RootConfig.entities.taskType.name),\n policy: {\n features: [module.name],\n permissions: [keys.Setup],\n },\n },\n ]);\n }\n\n private async resolveTaskBoardMenuPath(applicationName: string, moduleName: string): Promise<string> {\n const userSettings = this.settingsService.scope(AXPPlatformScope.User);\n const [viewMode, calendarLayout, timelineLayout, tableLayout] = await Promise.all([\n userSettings.get<string | undefined>(AXMTaskBoardSettings.ViewMode),\n userSettings.get<AXPTaskBoardCalendarLayout | undefined>(AXMTaskBoardSettings.CalendarLayout),\n userSettings.get<AXPTaskBoardTimelineLayout | undefined>(AXMTaskBoardSettings.TimelineLayout),\n userSettings.get<AXPTaskBoardTableLayout | undefined>(AXMTaskBoardSettings.TableLayout),\n ]);\n\n return buildTaskBoardMenuPath(applicationName, moduleName, viewMode, {\n calendar: calendarLayout,\n timeline: timelineLayout,\n table: tableLayout,\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXMTaskBoardSettings } from '@acorex-platform/module-task-management-client/contracts';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\nconst I18N = `@${RootConfig.config.i18n}:settings`;\n\nexport class AXMSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'task-management',\n `${I18N}.task-management.group.nav-title`,\n `${I18N}.task-management.group.description`,\n RootConfig.module.icon,\n `${I18N}.task-management.group.title`,\n 90,\n )\n .addSection(\n 'taskboard',\n `${I18N}.task-management.taskboard.section.title`,\n `${I18N}.task-management.taskboard.section.description`,\n )\n .addSetting({\n key: AXMTaskBoardSettings.VisibleCalendar,\n title: `${I18N}.task-management.taskboard.parts.calendar.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.task-management.taskboard.parts.calendar.description`,\n })\n .addSetting({\n key: AXMTaskBoardSettings.VisibleTimeline,\n title: `${I18N}.task-management.taskboard.parts.timeline.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.task-management.taskboard.parts.timeline.description`,\n })\n .addSetting({\n key: AXMTaskBoardSettings.VisibleTable,\n title: `${I18N}.task-management.taskboard.parts.table.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.task-management.taskboard.parts.table.description`,\n })\n .addSetting({\n key: AXMTaskBoardSettings.VisibleKanban,\n title: `${I18N}.task-management.taskboard.parts.kanban.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.task-management.taskboard.parts.kanban.description`,\n })\n .addSetting({\n key: AXMTaskBoardSettings.ColorBy,\n title: `${I18N}.task-management.taskboard.color-by.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: 'dueDate',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'name',\n textField: 'title',\n dataSource: [\n { name: 'dueDate', title: `${I18N}.task-management.taskboard.color-by.due-date` },\n { name: 'priority', title: `${I18N}.task-management.taskboard.color-by.priority` },\n { name: 'status', title: `${I18N}.task-management.taskboard.color-by.status` },\n ],\n },\n },\n description: `${I18N}.task-management.taskboard.color-by.description`,\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","import { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPSearchCommandProvider, AXPSearchResult } from '@acorex-platform/framework-client/common';\n\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [\n // {\n // group: 'command',\n // title: 'New Form Template',\n // icon: RootConfig.entities.template.icon,\n // description: 'Create a new form template for designing reusable forms.', // Added description\n // commands: {\n // 'create-entity': {\n // entity: `${RootConfig.module.name}.${RootConfig.entities.template.name}`,\n // },\n // },\n // }\n ];\n}\n","//#region ---- Imports ----\n\nimport type { AXPCatalogScopeDefinition, AXPCatalogScopeDefinitionProvider } from '@acorex-platform/framework-client/core';\nimport { Injectable } from '@angular/core';\nimport { TASK_MANAGEMENT_CATALOG_SCOPE_TASKS } from '@acorex-platform/module-task-management-client/contracts';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst WORKFLOW_DEFINITION = 'WorkflowManagement.WorkflowDefinition';\n\n//#endregion\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMTaskManagementCatalogScopeDefinitionProvider implements AXPCatalogScopeDefinitionProvider {\n async items(): Promise<AXPCatalogScopeDefinition[]> {\n return [\n {\n name: TASK_MANAGEMENT_CATALOG_SCOPE_TASKS,\n title: '@task-management:catalog-scopes.tasks.title',\n description: '@task-management:catalog-scopes.tasks.description',\n targets: [WORKFLOW_DEFINITION],\n icon: 'fa-light fa-clipboard-check',\n cssClass: 'primary-lighter-surface',\n order: 20,\n },\n ];\n }\n}\n\n//#endregion\n","import { AXPRuntimeModule, provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXPTaskManagementCommandKeys } from '@acorex-platform/module-task-management-client/contracts';\n\n@NgModule({\n imports: [CommonModule, AXPRuntimeModule],\n providers: [\n provideCommandSetups([\n {\n key: AXPTaskManagementCommandKeys.Task.StartFlow,\n command: () => import('./commands/start-task-flow.command').then((c) => c.StartTaskFlowCommand),\n },\n ]),\n ],\n})\nexport class AXMTaskFeatureModule {}\n","import { AXP_CATALOG_SCOPE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXP_TASK_BADGE_PROVIDERS } from '@acorex-platform/framework-client/layout/components';\n\nimport { AXPTaskBoardModule } from './features/task-board/task-board.module';\nimport { AXP_WORKFLOW_TASK_PROVIDER } from './features/task-board/task-board.types';\n\n// Services\nimport { AXMCalendarManagementModule } from '@acorex-platform/module-calendar-management-client';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXMTaskManagementWidgetsProvider } from './widget-definition.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMTaskBoardBadgeProvider } from './badge.provider';\nimport { AXMTaskManagementMenuProvider } from './menu.provider';\n\nimport { AXMSettingProvider } from './setting.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\nimport { AXMTaskManagementCatalogScopeDefinitionProvider } from './catalog-scope-definition.provider';\nimport { AXMTaskFeatureModule } from './features/task/task-feature.module';\nimport { AXPTaskManagementEntityTaskProvider } from './features/task-board/entity-task.provider';\n\n@NgModule({\n imports: [\n CommonModule,\n AXPTaskBoardModule,\n AXMCalendarManagementModule,\n AXPWidgetCoreModule,\n AXMTaskFeatureModule,\n ],\n providers: [\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMTaskManagementMenuProvider,\n multi: true,\n },\n {\n // useExisting keeps a single root instance (avoids a second copy that never refreshes).\n provide: AXP_TASK_BADGE_PROVIDERS,\n useExisting: AXMTaskBoardBadgeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMSettingProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMTaskManagementWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_CATALOG_SCOPE_DEFINITION_PROVIDER,\n useClass: AXMTaskManagementCatalogScopeDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_WORKFLOW_TASK_PROVIDER,\n multi: true,\n useClass: AXPTaskManagementEntityTaskProvider,\n },\n ],\n})\nexport class AXMTaskManagementModule { }\n","//#region ----- Imports -----\n\nimport type { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { layoutFromDimensions } from '@acorex-platform/module-dashboard-management-client';\n\nimport { AXP_TASK_BOARD_DIMENSIONS, AXP_TASK_BOARD_SHORTCUT_DIMENSIONS } from './task-dashboard-widget.dimensions';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype DashboardSeedWidget = AXMCommonDashboardEntityModel['widgets'][number];\ntype DashboardSeedGridSize = readonly [width: number, height: number];\n\n//#endregion\n\n//#region ----- Builders -----\n\nexport function buildTaskBoardWidget(\n id: string,\n x: number,\n y: number,\n size: DashboardSeedGridSize = [6, 4],\n title = 'Tasks',\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_TASK_BOARD_DIMENSIONS, { x, y, lg: size });\n\n return {\n config: { ...config, title },\n node: {\n type: 'TaskManagement:Widget:Dashboard:TaskBoard',\n options: { title, maxItems: 10 },\n meta,\n name: `TaskManagement:Widget:Dashboard:TaskBoard-${id}`,\n path: `TaskManagement:Widget:Dashboard:TaskBoard-${id}`,\n },\n };\n}\n\nexport function buildTaskBoardShortcutWidget(\n id: string,\n x: number,\n y: number,\n size: DashboardSeedGridSize = [3, 2],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_TASK_BOARD_SHORTCUT_DIMENSIONS, { x, y, lg: size });\n\n return {\n config,\n node: {\n type: 'TaskManagement:Widget:Dashboard:TaskBoardShortcut',\n options: {\n dateRange: { title: 'This Month', name: 'this-month' },\n },\n meta,\n name: `TaskManagement:Widget:Dashboard:TaskBoardShortcut-${id}`,\n path: `TaskManagement:Widget:Dashboard:TaskBoardShortcut-${id}`,\n },\n };\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i1","i3","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-task-management-client-acorex-platform-module-task-management-client-INIEvacu.mjs","sources":["../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.module.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.types.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-assignee-access.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/calendar-holiday-presentation.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-realtime-entities.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-task-cache.util.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.service.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-view-category.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-menu-path.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-priority.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-filter.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board.viewmodel.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/commands/reset-filters-assign-to-current-user.command.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/due-status.types.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/due-status-evaluation.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/default-due-status.provider.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/due-status-provider.service.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-range.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/due-status/task-board-accent-color.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-command-result.util.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-default-task-popover.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-grid-row-actions.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-task-enrichment.utils.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-task-popover-shell.component.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/task-board-task-popover-overlay.service.ts","../../../../libs/modules/task-management/client/src/lib/features/task-board/entity-task.provider.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/shortcut/task-board-shortcut.component.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/shortcut/task-board-shortcut.component.html","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/widget-category.type.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/task-dashboard-widget-subcategories.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/task-dashboard-widget.dimensions.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/shortcut/task-board-shortcut.config.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/task-board/task-board-widget.component.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/task-board/task-board-widget.component.html","../../../../libs/modules/task-management/client/src/lib/features/dashboard/widgets/task-board/task-board-widget.config.ts","../../../../libs/modules/task-management/client/src/lib/widget-definition.provider.ts","../../../../libs/modules/task-management/client/src/lib/permission-definition.provider.ts","../../../../libs/modules/task-management/client/src/lib/badge.provider.ts","../../../../libs/modules/task-management/client/src/lib/menu.provider.ts","../../../../libs/modules/task-management/client/src/lib/setting.provider.ts","../../../../libs/modules/task-management/client/src/lib/search-command.provider.ts","../../../../libs/modules/task-management/client/src/lib/catalog-scope-definition.provider.ts","../../../../libs/modules/task-management/client/src/lib/features/task/task-feature.module.ts","../../../../libs/modules/task-management/client/src/lib/task-management.module.ts","../../../../libs/modules/task-management/client/src/lib/features/dashboard/dashboard-seed-widget-builders.util.ts","../../../../libs/modules/task-management/client/src/acorex-platform-module-task-management-client.ts"],"sourcesContent":["import { AXP_HOME_PAGES, AXP_PROTECTED_ROUTE_GUARDS } from '@acorex-platform/framework-client/common';\nimport { AXP_ENTITY_CONFIG_TOKEN } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPRuntimeModule, provideCommandSetups, provideQuerySetups } from '@acorex-platform/framework-client/runtime';\nimport { inject, NgModule } from '@angular/core';\nimport { Route, ROUTES, Routes } from '@angular/router';\nimport {\n AXPTaskManagementCommandKeys,\n AXMTaskManagementQueryKeys,\n} from '@acorex-platform/module-task-management-client/contracts';\n\nfunction createAppRoute(): Route {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n return {\n path: ':app/TaskManagement/task-board',\n canActivate: [...AXP_PROTECTED_ROUTE_GUARDS],\n data: { rootLayout: true },\n loadComponent: () => {\n return config.viewers.root();\n },\n children: [\n {\n path: '',\n loadComponent: () => import('./task-board.page').then((c) => c.AXMTaskBoardPage),\n },\n ],\n };\n}\n\nfunction routesFactory() {\n const routes: Routes = [createAppRoute()];\n return routes;\n}\n\n@NgModule({\n imports: [AXPRuntimeModule],\n providers: [\n provideCommandSetups([\n {\n key: AXPTaskManagementCommandKeys.TaskBoard.ResetFiltersAssignToCurrentUser,\n command: () =>\n import('./commands/reset-filters-assign-to-current-user.command').then(\n (c) => c.ResetTaskBoardFiltersAssignToCurrentUserCommand,\n ),\n },\n ]),\n {\n provide: AXP_HOME_PAGES,\n multi: true,\n useFactory: () => [\n {\n key: 'task-board',\n title: 'Task Board',\n route: createAppRoute(),\n },\n ],\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n provideQuerySetups([\n {\n key: AXMTaskManagementQueryKeys.ListTaskTypes,\n loader: () =>\n import('../queries/list-task-types.query').then((c) => c.AXMListTaskTypesQuery),\n },\n {\n key: AXMTaskManagementQueryKeys.TaskBoardAssignees,\n loader: () =>\n import('../queries/list-task-board-assignees.query').then(\n (c) => c.AXMListTaskBoardAssigneesQuery,\n ),\n },\n {\n key: AXMTaskManagementQueryKeys.TaskBoardReporters,\n loader: () =>\n import('../queries/list-task-board-reporters.query').then(\n (c) => c.AXMListTaskBoardReportersQuery,\n ),\n },\n ]),\n ],\n})\nexport class AXPTaskBoardModule {}\n","import { AXPActionMenuItem, AXPExecuteCommand, AXPRuntimeCommandResult, AXPUserReference, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPWidgetColumnNode } from '@acorex-platform/framework-shared/widget-core';\n\nimport { AXRange } from '@acorex/cdk/common';\nimport type { AXSchedulerResource } from '@acorex/components/scheduler';\n\nimport { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\n\nimport { InjectionToken, InputSignal, Type, inject } from '@angular/core';\nimport type { AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\n\n/** Canonical task priority — matches workflow human-task activity values (normalized to lowercase). */\nexport type AXPTaskPriority = 'low' | 'normal' | 'high' | 'urgent';\n\n/** Task board row/card accent color source. */\nexport type AXPTaskBoardColorBy = 'dueDate' | 'priority' | 'status';\n\nexport interface AXPTaskDueStatusPresentation {\n name: string;\n title: string;\n color: string;\n icon?: string;\n}\n\n/**\n * A single label/value row rendered in a task popover metadata section.\n */\nexport interface AXPTaskPopoverMetadataField {\n name: string;\n title: string;\n node: AXPWidgetNode;\n}\n\n/**\n * Widget definitions and context values for task popover metadata.\n */\nexport interface AXPTaskPopoverMetadata {\n context: Record<string, unknown>;\n fields: AXPTaskPopoverMetadataField[];\n}\n\n/**\n * Extended action menu item for task board with priority support.\n * Primary actions are shown as icon-only buttons, secondary actions are shown in a dropdown.\n */\nexport type AXPTaskActionMenuItem = AXPActionMenuItem & {\n priority?: 'primary' | 'secondary';\n};\n\ninterface AXPAuditable {\n createdAt?: Date;\n updatedAt?: Date;\n createdBy?: string;\n updatedBy?: string;\n}\n\n/**\n * Defines the structure of an extra field for a task.\n */\nexport interface AXPExtraField {\n title: string;\n description?: string;\n widget: AXPWidgetColumnNode;\n}\n\n/**\n * Represents a single task in the system.\n * @template T - The type of custom data associated with the task.\n */\nexport interface AXPTask<T = Record<string, any>> extends AXPAuditable {\n /**\n * Unique identifier for the task. Should be immutable.\n */\n readonly id: string | number;\n\n /**\n * The index of the task.\n */\n index: number;\n\n /**\n * The title of the task.\n */\n title: string;\n\n /**\n * A detailed description of the task, potentially supporting markdown.\n */\n description?: string;\n\n /**\n * The current status of the task.\n */\n status: {\n id: string | number;\n title: string;\n /** Semantic chip/badge color token (e.g. warning, success). */\n color?: string;\n };\n\n /**\n * The user who is assigned to work on the task.\n */\n assignee?: AXPUserReference;\n\n /**\n * The user who created or reported the task.\n */\n reporter: AXPUserReference;\n\n /**\n * Other users involved or watching the task.\n */\n participants?: AXPUserReference[];\n\n /**\n * The start date of the task.\n */\n startDate: Date;\n\n /**\n * The end date or deadline of the task.\n */\n endDate: Date;\n\n /**\n * Canonical task priority (single source with workflow human-task activities).\n */\n priority?: AXPTaskPriority;\n\n /**\n * The progress of the task, from 0 to 100.\n */\n progress?: number;\n\n /**\n * An array of tags for categorizing and filtering.\n */\n tags?: string[];\n\n /**\n * Indicates if the task is an all-day event.\n */\n allDay?: boolean;\n\n /**\n * A CSS class to apply to the task for custom styling.\n */\n cssClass?: string;\n\n /**\n * Indicates if the task is read-only for the current user.\n */\n readonly?: boolean;\n\n /**\n * Custom data associated with the task for extensibility.\n */\n data?: T;\n\n /**\n * The name of the provider that owns this task.\n */\n provider?: string;\n\n /**\n * The resource id associated with the task.\n */\n resourceId?: string | number;\n}\n\n/** Task-board assignee/reporter picker item returned by queries and default loaders. */\nexport interface AXPTaskBoardUserOption {\n id: string | number;\n displayName: string;\n username?: string;\n}\n\n/** Due-status filter keys (aligned with {@link AXPDueStatusKey} in due-status module). */\nexport type AXPTaskDueStatusFilterKey =\n | 'completed'\n | 'no-due-date'\n | 'overdue'\n | 'due-today'\n | 'due-tomorrow'\n | 'due-this-week'\n | 'upcoming';\n\n/**\n * Defines the filter options for querying tasks.\n */\nexport interface AXPTaskFilter {\n range?: AXRange<Date>;\n assigneeIds?: (string | number)[];\n reporterIds?: (string | number)[];\n tags?: string[];\n types?: string[];\n skip?: number;\n take?: number;\n priorities?: Array<AXPTaskPriority | 'no_priority'>;\n dueStatusKeys?: AXPTaskDueStatusFilterKey[];\n /** Filter by {@link AXPEntityReference.type} entity sources (e.g. `ProjectManagement.Project`). */\n subjectRefTypes?: string[];\n /** Filter by {@link AXPEntityReference.id} values. */\n subjectRefIds?: string[];\n}\n\n/**\n * Represents an action performed on a task.\n */\nexport interface AXPTaskAction {\n nativeEvent: MouseEvent;\n task: AXPTask;\n}\n\n/**\n * Represents the status of a task (e.g., a column on a Kanban board).\n */\nexport interface AXPTaskStatus {\n key: string;\n index: number;\n title: string;\n color?: string;\n}\n\nexport interface AXPResource extends AXSchedulerResource {\n readonly id: string | number;\n title: string;\n description?: string;\n}\n\n/** Resolved task-board provider metadata for filters, datasources, and display. */\nexport interface AXPTaskBoardTaskTypeOption {\n name: string;\n title: string;\n icon: string;\n}\n\n/**\n * An abstract class for a workflow task provider, which is responsible for\n * fetching and manipulating task data from a specific source.\n * @template T - The type of custom data associated with the tasks.\n */\nexport abstract class AXPWorkflowTaskProvider<T = Record<string, any>> {\n /** Stable provider key used for filtering, events, and task.provider. */\n abstract get name(): string;\n\n abstract getTitle(): Promise<string>;\n\n abstract getIcon(): Promise<string>;\n\n private readonly eventService = inject(AXPBroadcastEventService);\n\n /**\n * Retrieves a list of tasks based on the provided filter options.\n * @param options - The filter options.\n * @returns A promise that resolves with the list of tasks and the total count.\n */\n abstract getTasks(options?: AXPTaskFilter): Promise<{ items: AXPTask<T>[]; total: number }>;\n\n /**\n * Returns a list of extra fields that can be displayed as columns for this provider's tasks.\n * This defines the schema for custom data.\n */\n abstract getExtraFields(): Promise<AXPExtraField[]>;\n\n abstract getActions(context?: AXPTask<T>): Promise<AXPTaskActionMenuItem[]>;\n\n abstract getStatuses(): Promise<AXPTaskStatus[]>;\n\n async getResources(): Promise<AXPResource[]> {\n return [];\n }\n\n /**\n * Updates a list of tasks.\n * @param tasks - The tasks to update.\n * @returns A promise that resolves with the updated tasks.\n */\n abstract updateTasks(tasks: AXPTask<T>[]): Promise<AXPTask<T>[]>;\n\n /**\n * Executes a command on the task provider.\n * @param command - The command to execute.\n * @returns A promise that resolves with the result of the command execution.\n */\n abstract executeCommand(command: AXPExecuteCommand): AXPCommandExecuteResultPromise;\n\n /**\n * Optional component to display in the task popover instead of the default popover content.\n * The component must implement AXPTaskPopoverComponent interface and accept a task input.\n * @returns A component type or a function that returns a component type (for lazy loading).\n */\n getComponent?(): Type<AXPTaskPopoverComponent> | (() => Promise<Type<AXPTaskPopoverComponent>>) | null;\n\n /**\n * Optional metadata for custom task popovers: widget definitions and context values rendered in view mode.\n */\n getPopoverMetadata?(task: AXPTask<T>): Promise<AXPTaskPopoverMetadata>;\n\n public refresh() {\n this.eventService.publish('task-board.refresh', {\n provider: this.name,\n });\n }\n\n public close() {\n this.eventService.publish('task-board.close', {\n provider: this.name,\n });\n }\n\n /**\n * Opens a task on the task board (after refresh, the board selects this task).\n */\n protected requestTaskBoardOpenTask(task: AXPTask<T>): void {\n this.eventService.publish('task-board.open-task', {\n provider: this.name,\n task: { ...task, provider: this.name },\n });\n }\n}\n\n/**\n * Interface that task popover components must implement.\n * Components provided by task providers should implement this interface to receive the task data.\n */\nexport abstract class AXPTaskPopoverComponent {\n private readonly eventService = inject(AXPBroadcastEventService);\n\n /**\n * The task/appointment data to display in the popover.\n */\n abstract task: InputSignal<AXPTask>;\n\n /**\n * Requests the task board to refresh popover/task data.\n * Provider defaults to the current task provider.\n */\n protected refreshPopover(provider?: string): void {\n this.eventService.publish('task-board.refresh', {\n provider: provider ?? this.task()?.provider,\n });\n }\n\n /**\n * Requests the host task board view to close the active popover.\n * Provider defaults to the current task provider.\n */\n protected closePopover(provider?: string): void {\n this.eventService.publish('task-board.close', {\n provider: provider ?? this.task()?.provider,\n });\n }\n}\n\nexport interface AXPWorkflowTaskProviderResolveOptions {\n /** When true, clears workflow-definition caches and re-discovers providers. */\n force?: boolean;\n}\n\n/**\n * Optional resolver registered by workflow-management to discover task providers on demand.\n */\nexport const AXP_WORKFLOW_TASK_PROVIDER_RESOLVER = new InjectionToken<\n (options?: AXPWorkflowTaskProviderResolveOptions) => Promise<AXPWorkflowTaskProvider[]>\n>('AXP_WORKFLOW_TASK_PROVIDER_RESOLVER');\n\n/**\n * Injection token for registering multiple workflow task providers.\n */\nexport const AXP_WORKFLOW_TASK_PROVIDER = new InjectionToken<\n AXPWorkflowTaskProvider[] | Promise<AXPWorkflowTaskProvider>[]\n>('AXP_WORKFLOW_TASK_PROVIDER');\n","//#region ---- Imports ----\n\nimport {\n AXPProjectsWorkPermissionKeys\n} from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\n\n\n//#endregion\n\n//#region ---- Constants ----\n\n/** Sentinel id for the task-board assignee filter option: tasks with no assignee. */\nexport const AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID = 'TaskManagement:TaskBoard:Assignee:Unassigned';\n\n//#endregion\n\n//#region ---- Permission Helpers ----\n\n/** Permission to view and filter tasks across all assignees on the task board. */\nexport const AXM_TASK_VIEW_ALL_PERMISSION = AXPProjectsWorkPermissionKeys.ViewAllTasks;\n\n/**\n * Returns whether the current session may filter tasks by any assignee.\n */\nexport function canViewAllTaskAssignees(sessionService: AXPSessionService): boolean {\n return sessionService.authorize(AXM_TASK_VIEW_ALL_PERMISSION);\n}\n\nexport function isTaskBoardUnassignedAssigneeId(id: string | number): boolean {\n return String(id) === AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID;\n}\n\n/** Whether the user has a persisted assignee filter (including an explicit empty selection). */\nexport function hasTaskBoardSavedAssigneePreference(\n savedAssigneeIds: (string | number)[] | null | undefined,\n): boolean {\n return savedAssigneeIds !== undefined && savedAssigneeIds !== null;\n}\n\n/**\n * Resolves saved assignee ids from settings. When the setting is unset (`undefined`/`null`):\n * - Users with view-all permission default to no assignee filter (all tasks).\n * - Everyone else defaults to the signed-in user only.\n * An explicit empty array means \"no assignee filter\" only for view-all users;\n * for everyone else it is coerced to the signed-in user.\n */\nexport function resolveTaskBoardSavedAssigneeIds(\n sessionService: AXPSessionService,\n savedAssigneeIds: (string | number)[] | null | undefined,\n): (string | number)[] {\n if (hasTaskBoardSavedAssigneePreference(savedAssigneeIds)) {\n const saved = savedAssigneeIds ?? [];\n if (saved.length === 0 && !canViewAllTaskAssignees(sessionService)) {\n const currentUserId = sessionService.user?.id;\n return currentUserId != null ? [currentUserId] : [];\n }\n return saved;\n }\n\n if (canViewAllTaskAssignees(sessionService)) {\n return [];\n }\n\n const currentUserId = sessionService.user?.id;\n return currentUserId != null ? [currentUserId] : [];\n}\n\n/** Assignee picker item for the signed-in user (used by task-board assignee datasource). */\nexport function resolveTaskBoardCurrentUserAssigneeItem(sessionService: AXPSessionService): {\n id: string;\n displayName: string;\n username: string;\n} | null {\n const currentUser = sessionService.user;\n if (currentUser?.id == null) {\n return null;\n }\n\n return {\n id: currentUser.id,\n displayName: currentUser.title || currentUser.name,\n username: currentUser.name,\n };\n}\n\n/**\n * Restricts assignee filter ids to the current user when {@link canViewAllTaskAssignees} is false.\n * Strips the unassigned sentinel for users without view-all permission.\n * Empty selection is only allowed for view-all users (means all assignees).\n */\nexport function normalizeTaskBoardAssigneeIds(\n sessionService: AXPSessionService,\n assigneeIds: (string | number)[],\n): (string | number)[] {\n if (canViewAllTaskAssignees(sessionService)) {\n return assigneeIds;\n }\n\n const currentUserId = sessionService.user?.id;\n return currentUserId != null ? [currentUserId] : [];\n}\n\n/**\n * Whether a task matches the selected assignee filter ids (OR semantics).\n * Supports {@link AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID} for tasks without an assignee.\n */\nexport function matchesTaskBoardAssigneeFilter(\n assigneeId: string | undefined | null,\n filterIds: (string | number)[],\n): boolean {\n if (filterIds.length === 0) {\n return true;\n }\n\n const filterSet = new Set(filterIds.map(String));\n const wantsUnassigned = filterSet.has(AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID);\n const hasAssignee = assigneeId != null && assigneeId !== '';\n\n if (!hasAssignee) {\n return wantsUnassigned;\n }\n\n return filterSet.has(String(assigneeId));\n}\n\n/**\n * Whether a workflow task matches assignee filters using assigned/candidate user ids.\n */\nexport function matchesTaskBoardAssigneeUserIdsFilter(\n userIds: string[],\n filterIds: (string | number)[],\n): boolean {\n if (filterIds.length === 0) {\n return true;\n }\n\n const filterSet = new Set(filterIds.map(String));\n const wantsUnassigned = filterSet.has(AXM_TASK_BOARD_UNASSIGNED_ASSIGNEE_ID);\n\n if (userIds.length === 0) {\n return wantsUnassigned;\n }\n\n return userIds.some((id) => filterSet.has(String(id)));\n}\n\n//#endregion\n","import type { AXMCalendarManagementOccasion } from '@acorex-platform/module-calendar-management-client';\nimport { mapCalendarOccasionToHolidayDate } from '@acorex-platform/module-calendar-management-client';\n\nexport function toTaskBoardHolidayDate(occasion: AXMCalendarManagementOccasion) {\n return mapCalendarOccasionToHolidayDate(occasion);\n}\n","//#region ----- Imports -----\n\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Persisted task rows shown on the task board. */\nexport const TASK_BOARD_TASK_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.task.name}`;\n\n/** Assignment rows that change who a task is assigned to. */\nexport const TASK_BOARD_TASK_ASSIGNMENT_ENTITY = `${RootConfig.module.name}.${RootConfig.entities.taskAssignment.name}`;\n\n/**\n * Workflow human-task cards come from suspended instance bookmarks, not Task rows.\n * Keep this string in sync with `WorkflowManagement.WorkflowInstance` (do not import workflow-management — it already depends on this package).\n */\nexport const TASK_BOARD_WORKFLOW_INSTANCE_ENTITY = 'WorkflowManagement.WorkflowInstance';\n\nconst TASK_BOARD_REALTIME_ENTITIES = new Set<string>([\n TASK_BOARD_TASK_ENTITY,\n TASK_BOARD_TASK_ASSIGNMENT_ENTITY,\n TASK_BOARD_WORKFLOW_INSTANCE_ENTITY,\n]);\n\n//#endregion\n\n//#region ----- Helpers -----\n\n/** True when a layout-refresh / entity-mutation name should refresh the task board or its menu badge. */\nexport function isTaskBoardRealtimeEntity(name: string | undefined | null): boolean {\n return name != null && TASK_BOARD_REALTIME_ENTITIES.has(name);\n}\n\n//#endregion\n","import type { AXPTaskFilter } from './task-board.types';\n\nfunction serializeDate(value: Date | undefined): string | null {\n if (!value) {\n return null;\n }\n return new Date(value).toISOString();\n}\n\n/** Stable cache key for {@link AXPTaskBoardService.getTasks} deduplication. */\nexport function serializeTaskFilterForCache(options?: AXPTaskFilter): string {\n if (!options) {\n return '{}';\n }\n\n const normalized = {\n types: options.types?.slice().sort(),\n assigneeIds: options.assigneeIds?.map(String).sort(),\n reporterIds: options.reporterIds?.map(String).sort(),\n tags: options.tags?.slice().sort(),\n priorities: options.priorities?.slice().sort(),\n dueStatusKeys: options.dueStatusKeys?.slice().sort(),\n subjectRefTypes: options.subjectRefTypes?.slice().sort(),\n subjectRefIds: options.subjectRefIds?.map(String).sort(),\n skip: options.skip ?? 0,\n take: options.take ?? null,\n range: options.range\n ? {\n from: serializeDate(options.range.from),\n end: serializeDate(options.range.end),\n }\n : null,\n };\n\n return JSON.stringify(normalized);\n}\n","import { AXRange } from '@acorex/cdk/common';\nimport type { AXSchedulerDateRange } from '@acorex/components/scheduler';\nimport { AXCalendarService, AXHolidayDate } from '@acorex/core/date-time';\nimport { AXMCalendarManagementService } from '@acorex-platform/module-calendar-management-client';\nimport { AXPExecuteCommand, AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport {\n AXPBroadcastEventService,\n AXPEntityBroadcastService,\n} from '@acorex-platform/framework-client/core';\nimport { DestroyRef, inject, Injectable, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { debounceTime, filter, merge, Subject } from 'rxjs';\nimport { toTaskBoardHolidayDate } from './calendar-holiday-presentation.utils';\nimport { isTaskBoardRealtimeEntity } from './task-board-realtime-entities';\nimport { serializeTaskFilterForCache } from './task-board-task-cache.util';\nimport type { AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXP_WORKFLOW_TASK_PROVIDER,\n AXP_WORKFLOW_TASK_PROVIDER_RESOLVER,\n AXPResource,\n AXPTask,\n AXPTaskBoardTaskTypeOption,\n AXPTaskFilter,\n AXPWorkflowTaskProvider,\n AXPWorkflowTaskProviderResolveOptions,\n} from './task-board.types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPTaskBoardService {\n private calendarService = inject(AXCalendarService);\n private calendarManagementService = inject(AXMCalendarManagementService);\n private readonly injector = inject(Injector);\n private readonly providerResolver = inject(AXP_WORKFLOW_TASK_PROVIDER_RESOLVER, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly entityEvents = inject(AXPEntityBroadcastService);\n\n /** Cached resolved providers; set after first call to resolveProviders(). */\n private resolvedProviders: AXPWorkflowTaskProvider[] | null = null;\n\n /** Cached resolved provider metadata; set together with {@link resolvedProviders}. */\n private resolvedTaskTypeOptions: AXPTaskBoardTaskTypeOption[] | null = null;\n\n private readonly taskResultCache = new Map<\n string,\n { result: { items: AXPTask[]; total: number }; expiresAt: number }\n >();\n private readonly taskResultInFlight = new Map<string, Promise<{ items: AXPTask[]; total: number }>>();\n private readonly taskCacheTtlMs = 5_000;\n\n private calendarEventTypesCache: { id: string; title: string; color?: string; icon?: string }[] | null = null;\n private calendarEventTypesInFlight: Promise<{ id: string; title: string; color?: string; icon?: string }[]> | null =\n null;\n\n refresh$ = new Subject<{ provider?: string }>();\n close$ = new Subject<{ provider?: string }>();\n openTask$ = new Subject<{\n provider?: string;\n task?: AXPTask;\n instanceId?: string;\n activityId?: string;\n bookmarkId?: string;\n }>();\n\n constructor() {\n this.refresh$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.resolvedProviders = null;\n this.resolvedTaskTypeOptions = null;\n this.invalidateTaskCache();\n });\n\n //\n this.eventService\n .listen<{ provider?: string }>('task-board.refresh')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ data }) => {\n this.refresh$.next(data ?? {});\n });\n\n this.eventService\n .listen<{ provider?: string }>('task-board.close')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ data }) => {\n this.close$.next(data ?? {});\n });\n\n this.eventService\n .listen<{\n provider?: string;\n task?: AXPTask;\n instanceId?: string;\n activityId?: string;\n bookmarkId?: string;\n }>('task-board.open-task')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(({ data }) => {\n if (data?.task || (data?.instanceId && data?.activityId)) {\n this.openTask$.next(data);\n }\n });\n\n // Keep board in sync when Task / assignment / workflow-instance rows change elsewhere\n // (local CRUD + realtime `entity.mutation` → layout refresh). Refresh all providers:\n // site-inspection cards also come from workflow human-task bookmarks, not only Task rows.\n merge(\n this.entityEvents.listenDeleted(),\n this.entityEvents.listenCreated(),\n this.entityEvents.listenModified(),\n this.entityEvents.listenLayoutRefresh(),\n )\n .pipe(\n filter(({ data }) => isTaskBoardRealtimeEntity(data?.name)),\n debounceTime(300),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n this.requestRefresh();\n });\n }\n\n /**\n * Requests task board refresh through broadcast events.\n */\n requestRefresh(provider?: string): void {\n this.eventService.publish('task-board.refresh', { provider });\n }\n\n /**\n * Requests active task popover close through broadcast events.\n */\n requestClose(provider?: string): void {\n this.eventService.publish('task-board.close', { provider });\n }\n\n /**\n * Opens a task on the task board (refresh, then select the task in the active view).\n */\n requestOpenTask(\n taskOrRef: AXPTask | { instanceId: string; activityId: string; provider?: string; bookmarkId?: string },\n provider?: string,\n ): void {\n if ('id' in taskOrRef && taskOrRef.title !== undefined) {\n const task = taskOrRef as AXPTask;\n this.eventService.publish('task-board.open-task', { provider: provider ?? task.provider, task });\n return;\n }\n const ref = taskOrRef as { instanceId: string; activityId: string; provider?: string; bookmarkId?: string };\n this.eventService.publish('task-board.open-task', ref);\n }\n\n /** Clears cached workflow task providers so the next resolve re-reads DI registrations. */\n clearProviderCache(): void {\n this.resolvedProviders = null;\n this.resolvedTaskTypeOptions = null;\n }\n\n /** Clears cached task query results and calendar metadata. */\n invalidateTaskCache(): void {\n this.taskResultCache.clear();\n this.taskResultInFlight.clear();\n this.calendarEventTypesCache = null;\n this.calendarEventTypesInFlight = null;\n this.eventService.publish('task-board.invalidate-task-cache', {});\n }\n\n /**\n * Resolves workflow task providers. Uses the optional workflow resolver when registered so discovery\n * can be re-run after workflow definitions become available (first app load before mock seed).\n */\n async resolveProviders(options?: AXPWorkflowTaskProviderResolveOptions): Promise<AXPWorkflowTaskProvider[]> {\n if (\n !options?.force &&\n this.resolvedProviders !== null &&\n this.resolvedProviders.length > 0\n ) {\n return this.resolvedProviders;\n }\n\n let providers: AXPWorkflowTaskProvider[] = [];\n\n if (this.providerResolver) {\n providers = await this.providerResolver(options);\n if (providers.length === 0) {\n providers = await this.providerResolver({ ...options, force: true });\n }\n } else {\n providers = await this.flattenProviderEntries(this.getInjectedProviderEntries());\n }\n\n if (providers.length > 0) {\n this.resolvedProviders = providers;\n this.resolvedTaskTypeOptions = await this.resolveTaskTypeOptions(providers);\n } else {\n this.resolvedProviders = null;\n this.resolvedTaskTypeOptions = null;\n }\n return providers;\n }\n\n private async resolveTaskTypeOptions(\n providers: AXPWorkflowTaskProvider[],\n ): Promise<AXPTaskBoardTaskTypeOption[]> {\n return Promise.all(\n providers.map(async (provider) => ({\n name: provider.name,\n title: await provider.getTitle(),\n icon: await provider.getIcon(),\n })),\n );\n }\n\n private getInjectedProviderEntries(): unknown[] {\n const injected = this.injector.get(AXP_WORKFLOW_TASK_PROVIDER, null, { optional: true });\n if (injected == null) {\n return [];\n }\n return Array.isArray(injected) ? injected : [injected];\n }\n\n private async flattenProviderEntries(entries: unknown[]): Promise<AXPWorkflowTaskProvider[]> {\n const resolved = await Promise.all(entries.map((entry) => Promise.resolve(entry)));\n const flattened = resolved.flatMap((entry) => (Array.isArray(entry) ? entry : [entry]));\n return flattened.filter(\n (provider): provider is AXPWorkflowTaskProvider =>\n provider != null && typeof (provider as AXPWorkflowTaskProvider).getTasks === 'function',\n );\n }\n\n async getTaskTypes(options?: AXPWorkflowTaskProviderResolveOptions): Promise<AXPWorkflowTaskProvider[]> {\n return this.resolveProviders(options);\n }\n\n /**\n * Resolved provider metadata for UI filters and datasources.\n * Call {@link resolveProviders} or {@link getTaskTypes} first.\n */\n getTaskTypeOptions(): AXPTaskBoardTaskTypeOption[] {\n return this.resolvedTaskTypeOptions ?? [];\n }\n\n getTaskTypeOption(name: string | undefined): AXPTaskBoardTaskTypeOption | null {\n if (!name) {\n return null;\n }\n return this.resolvedTaskTypeOptions?.find((option) => option.name === name) ?? null;\n }\n\n async getTasks(options?: AXPTaskFilter): Promise<{ items: AXPTask[]; total: number }> {\n const cacheKey = serializeTaskFilterForCache(options);\n const now = Date.now();\n const cached = this.taskResultCache.get(cacheKey);\n if (cached && cached.expiresAt > now) {\n return cached.result;\n }\n\n const inFlight = this.taskResultInFlight.get(cacheKey);\n if (inFlight) {\n return inFlight;\n }\n\n const request = this.fetchTasksFromProviders(options)\n .then((result) => {\n this.taskResultCache.set(cacheKey, {\n result,\n expiresAt: Date.now() + this.taskCacheTtlMs,\n });\n return result;\n })\n .finally(() => {\n this.taskResultInFlight.delete(cacheKey);\n });\n\n this.taskResultInFlight.set(cacheKey, request);\n return request;\n }\n\n private async fetchTasksFromProviders(\n options?: AXPTaskFilter,\n ): Promise<{ items: AXPTask[]; total: number }> {\n const providers = await this.resolveProviders();\n if (providers.length === 0) {\n console.warn('No task providers available');\n return { items: [], total: 0 };\n }\n\n const filteredProviders = providers.filter(\n (provider) => (options?.types?.length ?? 0) === 0 || options?.types?.includes(provider.name),\n );\n\n if (filteredProviders.length === 0) {\n return { items: [], total: 0 };\n }\n\n // Single provider case - handles pagination efficiently at the source.\n if (filteredProviders.length === 1) {\n const provider = filteredProviders[0];\n const result = await provider.getTasks(options);\n // Add provider name to each task for identification.\n const itemsWithProvider = result.items.map((t) => ({ ...t, provider: provider.name }));\n return { items: itemsWithProvider, total: result.total };\n }\n\n // Multi-provider case - fetch filtered data then paginate client-side.\n const mergeData: AXPTask[] = [];\n\n // Separate pagination from filtering to pass correct options to providers.\n const { skip, take, ...providerOptions } = options ?? {};\n const listTake = options?.take != null && options.take > 0 ? options.take : 5000;\n\n const promises = filteredProviders.map((provider) =>\n provider\n .getTasks({ ...providerOptions, skip: 0, take: listTake })\n .then((result) => result.items.map((t) => ({ ...t, provider: provider.name }))),\n );\n\n const results = await Promise.all(promises);\n for (const resultArray of results) {\n mergeData.push(...resultArray);\n }\n\n // Apply pagination client-side after merging the correctly filtered data.\n const total = mergeData.length;\n const finalSkip = skip ?? 0;\n const finalTake = take ?? total;\n const items = mergeData.slice(finalSkip, finalSkip + finalTake);\n\n return { items, total };\n }\n\n async updateTaskDateRange(task: AXPTask, range: AXSchedulerDateRange): Promise<AXPTask> {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === task.provider) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${task.provider}' not found`);\n }\n // Create a task update object and call the unified method\n const taskWithNewRange = { ...task, startDate: range.from, endDate: range.end };\n const updatedTasks = await provider.updateTasks([taskWithNewRange]);\n\n if (updatedTasks.length > 0) {\n return updatedTasks[0];\n } else {\n throw new Error('Task update failed or task not found in provider.');\n }\n }\n\n async updateTasks(tasks: AXPTask[]): Promise<AXPTask[]> {\n if (!tasks || tasks.length === 0) {\n return [];\n }\n // Ensure all tasks are from the same provider before performing a bulk update\n if (!tasks.every((t) => t.provider === tasks[0].provider)) {\n throw new Error('All tasks must have the same provider for a bulk update.');\n }\n\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === tasks[0].provider) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${tasks[0].provider}' not found`);\n }\n return provider.updateTasks(tasks);\n }\n\n async executeCommand(command: AXPExecuteCommand, providerName: string): AXPCommandExecuteResultPromise {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === providerName) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${providerName}' not found`);\n }\n return await provider.executeCommand(command);\n }\n\n async getStatusName(key: any, providerName: string): Promise<string | null> {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === providerName) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${providerName}' not found`);\n }\n const statuses = await provider.getStatuses();\n return statuses.find((s) => s.key === key)?.title ?? null;\n }\n\n async getEvents(range: AXRange<Date>, eventTypeIds?: string[]): Promise<AXHolidayDate[]> {\n const events = await this.calendarManagementService.getOccasions(range, eventTypeIds);\n return events.map((event) => toTaskBoardHolidayDate(event));\n }\n\n async getCalendarEventTypes() {\n if (this.calendarEventTypesCache) {\n return this.calendarEventTypesCache;\n }\n\n if (this.calendarEventTypesInFlight) {\n return this.calendarEventTypesInFlight;\n }\n\n this.calendarEventTypesInFlight = this.calendarManagementService\n .getCalendars()\n .then((result) => {\n this.calendarEventTypesCache = result ?? [];\n return this.calendarEventTypesCache;\n })\n .catch((error) => {\n console.error(error);\n this.calendarEventTypesCache = [];\n return this.calendarEventTypesCache;\n })\n .finally(() => {\n this.calendarEventTypesInFlight = null;\n });\n\n return this.calendarEventTypesInFlight;\n }\n\n /**\n * Returns the provider by name. Uses cached resolved providers; returns null if not resolved yet.\n * Ensure resolveProviders() has been called (e.g. via getTaskTypes() or getTasks()) before using this.\n */\n getProvider(name: string | undefined): AXPWorkflowTaskProvider | null {\n if (!name) return null;\n return this.resolvedProviders?.find((p) => p.name === name) ?? null;\n }\n\n rangeCalculator(type: string): AXRange<Date> | undefined {\n switch (type) {\n case 'today':\n return {\n from: this.calendarService.create(new Date()).startOf('day').date,\n end: this.calendarService.create(new Date()).endOf('day').date,\n };\n case 'this-week':\n return {\n from: this.calendarService.create(new Date()).startOf('week').date,\n end: this.calendarService.create(new Date()).endOf('week').date,\n };\n case 'this-month':\n return {\n from: this.calendarService.create(new Date()).startOf('month').date,\n end: this.calendarService.create(new Date()).endOf('month').date,\n };\n default:\n return undefined;\n }\n }\n\n async getResources(providerName: string): Promise<AXPResource[]> {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === providerName) ?? null;\n if (!provider) {\n throw new Error(`Task provider '${providerName}' not found`);\n }\n return provider.getResources();\n }\n}\n","//#region ---- Imports ----\n\nimport type { AXCalendarService } from '@acorex/core/date-time';\nimport type { AXPDateTimeFilterValue } from '@acorex-platform/framework-client/common';\nimport { applyDateFilterPreset } from '@acorex-platform/framework-client/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","//#region ----- Imports -----\n\nimport {\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY,\n resolveTaskBoardViewCategory,\n resolveTaskBoardViewLayout,\n type AXPTaskBoardCalendarLayout,\n type AXPTaskBoardTableLayout,\n type AXPTaskBoardTimelineLayout,\n type AXPTaskBoardViewLayout,\n} from './task-board-view-category.utils';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype AXPTaskBoardMenuViewMode = Parameters<typeof resolveTaskBoardViewCategory>[0];\n\nexport type AXPTaskBoardMenuPathLayouts = {\n calendar?: AXPTaskBoardCalendarLayout | null;\n timeline?: AXPTaskBoardTimelineLayout | null;\n table?: AXPTaskBoardTableLayout | null;\n};\n\n//#endregion\n\n//#region ----- Menu Path -----\n\n/**\n * Builds the task-board menu / navigate path including persisted view + layout query params.\n * Example: `safetyminder/TaskManagement/task-board?view=calendar&layout=monthly`\n */\nexport function buildTaskBoardMenuPath(\n applicationName: string,\n moduleName: string,\n viewMode?: string | null,\n layouts: AXPTaskBoardMenuPathLayouts = {},\n): string {\n const effectiveMode = (viewMode || 'month') as AXPTaskBoardMenuViewMode;\n const category = resolveTaskBoardViewCategory(effectiveMode);\n const layout = resolveTaskBoardMenuLayout(category, effectiveMode, layouts);\n\n const base = `${applicationName}/${moduleName}/task-board`;\n const params = new URLSearchParams({ view: category });\n if (layout) {\n params.set('layout', layout);\n }\n\n return `${base}?${params.toString()}`;\n}\n\nfunction resolveTaskBoardMenuLayout(\n category: ReturnType<typeof resolveTaskBoardViewCategory>,\n viewMode: AXPTaskBoardMenuViewMode,\n layouts: AXPTaskBoardMenuPathLayouts,\n): AXPTaskBoardViewLayout | null {\n switch (category) {\n case 'calendar':\n return (\n layouts.calendar ??\n (resolveTaskBoardViewLayout(viewMode) as AXPTaskBoardCalendarLayout | null) ??\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.calendar\n );\n case 'timeline':\n return (\n layouts.timeline ??\n (resolveTaskBoardViewLayout(viewMode) as AXPTaskBoardTimelineLayout | null) ??\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.timeline\n );\n case 'table':\n return (\n layouts.table ??\n (resolveTaskBoardViewLayout(viewMode) as AXPTaskBoardTableLayout | null) ??\n AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.table\n );\n case 'kanban':\n return null;\n default:\n return AXM_TASK_BOARD_DEFAULT_LAYOUT_BY_CATEGORY.calendar;\n }\n}\n\n//#endregion\n","import { AXPTask, AXPTaskPriority } from './task-board.types';\n\nexport type AXPPriorityFilterKey = AXPTaskPriority | 'no_priority';\n\nexport const AXPTASK_PRIORITIES: readonly AXPTaskPriority[] = ['urgent', 'high', 'normal', 'low'];\n\nexport const TASK_PRIORITY_ORDER: Record<AXPPriorityFilterKey, number> = {\n urgent: 0,\n high: 1,\n normal: 2,\n low: 3,\n no_priority: 4,\n};\n\n/** Normalizes workflow or legacy task-board priority values to the canonical enum. */\nexport function normalizeTaskPriority(value: unknown): AXPTaskPriority {\n const normalized = String(value ?? 'normal')\n .trim()\n .toLowerCase();\n\n if (normalized === 'urgent' || normalized === 'high' || normalized === 'normal' || normalized === 'low') {\n return normalized;\n }\n\n const legacyMap: Record<string, AXPTaskPriority> = {\n highest: 'urgent',\n medium: 'normal',\n lowest: 'low',\n };\n\n return legacyMap[normalized] ?? 'normal';\n}\n\nexport function getTaskPriorityColor(priority: AXPTaskPriority): string {\n switch (priority) {\n case 'urgent':\n return 'danger';\n case 'high':\n return 'warning';\n case 'normal':\n return 'secondary';\n case 'low':\n return 'neutral';\n }\n}\n\nconst LEGACY_PRIORITY_FILTER_MAP: Record<string, AXPPriorityFilterKey> = {\n highest: 'urgent',\n medium: 'normal',\n lowest: 'low',\n};\n\n/** Maps persisted or query-string priority filter keys to the canonical filter enum. */\nexport function normalizePriorityFilterKey(value: unknown): AXPPriorityFilterKey {\n const normalized = String(value ?? '')\n .trim()\n .toLowerCase();\n\n if (normalized === 'no_priority') {\n return 'no_priority';\n }\n\n if (normalized in LEGACY_PRIORITY_FILTER_MAP) {\n return LEGACY_PRIORITY_FILTER_MAP[normalized];\n }\n\n return normalizeTaskPriority(normalized);\n}\n\nexport function normalizePriorityFilterKeys(values: unknown[] | undefined): AXPPriorityFilterKey[] {\n if (!values?.length) {\n return [];\n }\n\n return [...new Set(values.map(normalizePriorityFilterKey))];\n}\n\nexport function getTaskPriorityFilterKey(task: AXPTask): AXPPriorityFilterKey {\n return task.priority ? normalizeTaskPriority(task.priority) : 'no_priority';\n}\n\nexport function matchesTaskPriorityFilter(task: AXPTask, priorities: AXPPriorityFilterKey[]): boolean {\n if (priorities.length === 0) {\n return true;\n }\n\n const filterSet = new Set(priorities.map(normalizePriorityFilterKey));\n return filterSet.has(getTaskPriorityFilterKey(task));\n}\n","import { AXPDueStatusFilterKey } from './due-status';\nimport { normalizePriorityFilterKeys, type AXPPriorityFilterKey } from './task-board-priority.utils';\nimport type { AXPTaskBoardTaskTypeOption } from './task-board.types';\n\nexport type { AXPTaskBoardTaskTypeOption };\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-platform/module-calendar-management-client';\n","import { AXPPlatformScope, AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport type { AXSchedulerView } from '@acorex/components/scheduler';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuService, AXPSettingsService } from '@acorex-platform/framework-client/common';\n\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport {\n AXMTaskBoardSettings,\n AXPTaskManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-task-management-client/contracts';\nimport { hasTaskBoardSavedAssigneePreference, normalizeTaskBoardAssigneeIds, resolveTaskBoardSavedAssigneeIds } from './task-board-assignee-access';\nimport type { AXPTaskBoardViewCategory } from './task-board-menu.definition';\nimport { buildTaskBoardMenuPath } from './task-board-menu-path.utils';\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, AXPTaskBoardTaskTypeOption, AXPWorkflowTaskProvider, AXPWorkflowTaskProviderResolveOptions } 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 taskTypeOptions: AXPTaskBoardTaskTypeOption[];\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 taskTypeOptions: [],\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 return count;\n }),\n })),\n\n withMethods(\n (\n store,\n settingsService = inject(AXPSettingsService),\n taskBoardService = inject(AXPTaskBoardService),\n sessionService = inject(AXPSessionService),\n menuService = inject(AXPMenuService),\n ) => {\n const userScopedSettings = () => settingsService.scope(AXPPlatformScope.User);\n let settingsSyncInitialized = false;\n\n const syncTaskBoardMenuPath = () => {\n const applicationName = sessionService.application?.name;\n if (!applicationName) {\n return;\n }\n\n menuService.updateItem(AXPTaskManagementMenuKeys.TaskBoard, {\n path: buildTaskBoardMenuPath(applicationName, RootConfig.module.name, store.currentViewMode(), {\n calendar: store.calendarLayout(),\n timeline: store.timelineLayout(),\n table: store.tableLayout(),\n }),\n });\n };\n\n const syncSettingsFromChangeEvent = (keys: string[], values: Record<string, unknown>) => {\n const patch: Partial<AXPTaskBoardState> = {};\n let shouldSyncMenuPath = false;\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 (keys.includes(AXMTaskBoardSettings.ViewMode)) {\n const mode = values[AXMTaskBoardSettings.ViewMode] as AXPTaskBoardViewMode | undefined;\n if (mode) {\n patch.currentViewMode = mode;\n shouldSyncMenuPath = true;\n }\n }\n\n if (keys.includes(AXMTaskBoardSettings.CalendarLayout)) {\n const layout = values[AXMTaskBoardSettings.CalendarLayout] as AXPTaskBoardCalendarLayout | undefined;\n if (layout) {\n patch.calendarLayout = layout;\n shouldSyncMenuPath = true;\n }\n }\n\n if (keys.includes(AXMTaskBoardSettings.TimelineLayout)) {\n const layout = values[AXMTaskBoardSettings.TimelineLayout] as AXPTaskBoardTimelineLayout | undefined;\n if (layout) {\n patch.timelineLayout = layout;\n shouldSyncMenuPath = true;\n }\n }\n\n if (keys.includes(AXMTaskBoardSettings.TableLayout)) {\n const layout = values[AXMTaskBoardSettings.TableLayout] as AXPTaskBoardTableLayout | undefined;\n if (layout) {\n patch.tableLayout = layout;\n shouldSyncMenuPath = true;\n }\n }\n\n if (Object.keys(patch).length > 0) {\n patchState(store, patch);\n }\n\n if (shouldSyncMenuPath) {\n syncTaskBoardMenuPath();\n }\n };\n\n const loadPersistedSettings = async () => {\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 return {\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 };\n };\n\n const buildStateFromPersistedSettings = (\n settings: Awaited<ReturnType<typeof loadPersistedSettings>>,\n taskTypes: AXPWorkflowTaskProvider[],\n taskTypeOptions: AXPTaskBoardTaskTypeOption[],\n ): Partial<AXPTaskBoardState> => {\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 } = settings;\n\n const visibleViewCategories = normalizeVisibleTaskBoardCategories({\n calendar: savedVisibleCalendar,\n timeline: savedVisibleTimeline,\n table: savedVisibleTable,\n kanban: savedVisibleKanban,\n });\n\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 assigneeFilterHasSavedPreference = hasTaskBoardSavedAssigneePreference(savedAssigneeIds);\n const defaultAssigneeIds = normalizeTaskBoardAssigneeIds(\n sessionService,\n resolveTaskBoardSavedAssigneeIds(sessionService, savedAssigneeIds),\n );\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 ?? [], taskTypeOptions);\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 return {\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 };\n };\n\n return {\n async reloadTaskTypes(options?: AXPWorkflowTaskProviderResolveOptions) {\n taskBoardService.clearProviderCache();\n const taskTypes = await taskBoardService.getTaskTypes(options);\n patchState(store, {\n taskTypes,\n taskTypeOptions: taskBoardService.getTaskTypeOptions(),\n });\n },\n\n async initialize() {\n patchState(store, { isLoading: true });\n try {\n const persistedSettings = await loadPersistedSettings();\n\n let taskTypes: AXPWorkflowTaskProvider[] = [];\n let taskTypeOptions: AXPTaskBoardTaskTypeOption[] = [];\n try {\n taskTypes = await taskBoardService.getTaskTypes();\n taskTypeOptions = taskBoardService.getTaskTypeOptions();\n } catch (error) {\n console.error('Error loading task board task types:', error);\n }\n\n patchState(store, {\n taskTypes,\n taskTypeOptions,\n ...buildStateFromPersistedSettings(persistedSettings, taskTypes, taskTypeOptions),\n isLoading: false,\n });\n syncTaskBoardMenuPath();\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\n let persistedSettingsPatch: Partial<AXPTaskBoardState> = {};\n try {\n const persistedSettings = await loadPersistedSettings();\n persistedSettingsPatch = buildStateFromPersistedSettings(persistedSettings, [], []);\n } catch (settingsError) {\n console.error('Error loading task board persisted settings:', settingsError);\n }\n\n const fallbackAssigneeIds = normalizeTaskBoardAssigneeIds(\n sessionService,\n resolveTaskBoardSavedAssigneeIds(sessionService, null),\n );\n\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: fallbackAssigneeIds,\n assigneeFilterHasSavedPreference: false,\n selectedPriorities: [],\n selectedDueStatusKeys: [],\n colorBy: 'dueDate',\n selectedReporterIds: [],\n selectedCalendarEventTypeIds: [],\n taskTypes: store.taskTypes(),\n taskTypeOptions: store.taskTypeOptions(),\n isLoading: false,\n ...persistedSettingsPatch,\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 syncTaskBoardMenuPath();\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 async restoreQueryFiltersFromSettings() {\n const persistedSettings = await loadPersistedSettings();\n const filterPatch = buildStateFromPersistedSettings(\n persistedSettings,\n store.taskTypes(),\n store.taskTypeOptions(),\n );\n\n patchState(store, {\n selectedTaskTypeNames: filterPatch.selectedTaskTypeNames ?? [],\n selectedAssigneeIds: filterPatch.selectedAssigneeIds ?? [],\n assigneeFilterHasSavedPreference: filterPatch.assigneeFilterHasSavedPreference ?? false,\n selectedReporterIds: filterPatch.selectedReporterIds ?? [],\n });\n },\n\n clearQueryFilters() {\n const defaultAssigneeIds = normalizeTaskBoardAssigneeIds(\n sessionService,\n resolveTaskBoardSavedAssigneeIds(sessionService, null),\n );\n patchState(store, {\n selectedTaskTypeNames: [],\n selectedAssigneeIds: defaultAssigneeIds,\n assigneeFilterHasSavedPreference: false,\n selectedReporterIds: [],\n });\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","//#region ---- Imports ----\n\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { inject, Injectable } from '@angular/core';\nimport { isNil } from 'lodash';\n\nimport { AXPTaskManagementCommandKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPTaskBoardService } from '../task-board.service';\nimport { AXMTaskBoardViewModel } from '../task-board.viewmodel';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport type ResetTaskBoardFiltersAssignToCurrentUserInput = Record<string, never>;\n\nexport const RESET_TASK_BOARD_FILTERS_ASSIGN_TO_CURRENT_USER_COMMAND_KEY =\n AXPTaskManagementCommandKeys.TaskBoard.ResetFiltersAssignToCurrentUser;\n\n//#endregion\n\n/**\n * Clears task-board filters, scopes assignee to the signed-in user, and requests a board refresh.\n */\n@Injectable({ providedIn: 'root' })\nexport class ResetTaskBoardFiltersAssignToCurrentUserCommand\n implements AXPCommand<ResetTaskBoardFiltersAssignToCurrentUserInput, void>\n{\n //#region ---- Services & Dependencies ----\n\n private readonly sessionService = inject(AXPSessionService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly vm = inject(AXMTaskBoardViewModel);\n\n //#endregion\n\n //#region ---- Command Implementation ----\n\n async execute(\n _input?: ResetTaskBoardFiltersAssignToCurrentUserInput,\n ): AXPCommandExecuteResultPromise<void> {\n const currentUserId = this.sessionService.user?.id;\n if (isNil(currentUserId)) {\n return { success: false, message: { text: 'Current user is not available.' } };\n }\n\n this.vm.setSelectedTaskTypeNames([], false);\n this.vm.setSelectedReporterIds([], false);\n this.vm.setSelectedPriorities([], false);\n this.vm.setSelectedDueStatusKeys([], false);\n this.vm.setSelectedAssigneeIds([currentUserId], false, true);\n\n this.ensureTaskTypeForGroupedViews();\n\n this.taskBoardService.requestRefresh();\n\n return { success: true, kind: 'object', data: undefined };\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private ensureTaskTypeForGroupedViews(): void {\n const viewMode = this.vm.currentViewMode();\n if (viewMode !== 'kanban' && viewMode !== 'status-grouped-grid') {\n return;\n }\n\n if (this.vm.selectedTaskTypeNames().length > 0) {\n return;\n }\n\n const firstTaskType = this.vm.taskTypes()[0];\n if (firstTaskType) {\n this.vm.setSelectedTaskTypeNames([firstTaskType.name]);\n }\n }\n\n //#endregion\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPTask } from '../task-board.types';\n\nexport type AXPDueStatusKey =\n | 'completed'\n | 'no-due-date'\n | 'overdue'\n | 'due-today'\n | 'due-tomorrow'\n | 'due-this-week'\n | 'upcoming';\n\nexport interface AXPDueStatusDefinition {\n name: AXPDueStatusKey;\n title: string;\n color: string;\n icon?: string;\n order: number;\n}\n\nexport interface AXPDueStatusEvaluationContext {\n now: Date;\n dueDate?: Date | null;\n hasExplicitDueDate: boolean;\n bookmarkConsumed: boolean;\n weekStartsOn: number;\n}\n\nexport interface AXPDueStatusPresentation {\n name: AXPDueStatusKey;\n title: string;\n color: string;\n icon?: string;\n}\n\nexport interface AXPDueStatusResolveOptions {\n workflowDefinitionId?: string;\n activityType?: string;\n}\n\nexport abstract class AXPDueStatusProvider {\n abstract readonly key: string;\n abstract readonly priority: number;\n abstract getDefinitions(): AXPDueStatusDefinition[];\n abstract resolve(context: AXPDueStatusEvaluationContext): AXPDueStatusDefinition | null;\n}\n\nexport const AXP_DUE_STATUS_PROVIDERS = new InjectionToken<AXPDueStatusProvider[]>('AXP_DUE_STATUS_PROVIDERS');\n\nexport type AXPDueStatusFilterKey = AXPDueStatusKey;\n\nexport function getTaskDueStatusKey(task: AXPTask): AXPDueStatusFilterKey | undefined {\n const data = task.data as { dueStatusKey?: AXPDueStatusKey } | undefined;\n return data?.dueStatusKey;\n}\n\nexport function matchesTaskDueStatusFilter(task: AXPTask, dueStatusKeys: AXPDueStatusFilterKey[]): boolean {\n if (dueStatusKeys.length === 0) {\n return true;\n }\n\n const key = getTaskDueStatusKey(task);\n return key != null && dueStatusKeys.includes(key);\n}\n","import { AXPDueStatusDefinition, AXPDueStatusEvaluationContext, AXPDueStatusKey } from './due-status.types';\n\nfunction startOfLocalDay(date: Date): Date {\n const value = new Date(date);\n value.setHours(0, 0, 0, 0);\n return value;\n}\n\nfunction endOfLocalDay(date: Date): Date {\n const value = new Date(date);\n value.setHours(23, 59, 59, 999);\n return value;\n}\n\nfunction isSameLocalDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n );\n}\n\nfunction addLocalDays(date: Date, days: number): Date {\n const value = new Date(date);\n value.setDate(value.getDate() + days);\n return value;\n}\n\nfunction getStartOfLocalWeek(date: Date, weekStartsOn: number): Date {\n const day = startOfLocalDay(date);\n const weekday = day.getDay();\n const diff = (weekday - weekStartsOn + 7) % 7;\n day.setDate(day.getDate() - diff);\n return day;\n}\n\nfunction getEndOfLocalWeek(date: Date, weekStartsOn: number): Date {\n const start = getStartOfLocalWeek(date, weekStartsOn);\n return endOfLocalDay(addLocalDays(start, 6));\n}\n\nfunction matchesDueStatusKey(context: AXPDueStatusEvaluationContext, key: AXPDueStatusKey): boolean {\n const today = startOfLocalDay(context.now);\n const tomorrow = startOfLocalDay(addLocalDays(context.now, 1));\n const weekEnd = getEndOfLocalWeek(context.now, context.weekStartsOn);\n\n if (key === 'completed') {\n return context.bookmarkConsumed;\n }\n\n if (key === 'no-due-date') {\n return !context.bookmarkConsumed && !context.hasExplicitDueDate;\n }\n\n if (!context.hasExplicitDueDate || !context.dueDate || context.bookmarkConsumed) {\n return false;\n }\n\n const dueDay = startOfLocalDay(context.dueDate);\n\n if (key === 'overdue') {\n return dueDay.getTime() < today.getTime();\n }\n\n if (key === 'due-today') {\n return isSameLocalDay(dueDay, today);\n }\n\n if (key === 'due-tomorrow') {\n return isSameLocalDay(dueDay, tomorrow);\n }\n\n if (key === 'due-this-week') {\n return dueDay.getTime() > tomorrow.getTime() && dueDay.getTime() <= weekEnd.getTime();\n }\n\n if (key === 'upcoming') {\n return dueDay.getTime() > weekEnd.getTime();\n }\n\n return false;\n}\n\nexport function resolveDueStatusFromDefinitions(\n definitions: AXPDueStatusDefinition[],\n context: AXPDueStatusEvaluationContext,\n): AXPDueStatusDefinition | null {\n const ordered = [...definitions].sort((a, b) => a.order - b.order);\n\n for (const definition of ordered) {\n if (matchesDueStatusKey(context, definition.name)) {\n return definition;\n }\n }\n\n return null;\n}\n","import { Injectable } from '@angular/core';\nimport {\n AXPDueStatusDefinition,\n AXPDueStatusEvaluationContext,\n AXPDueStatusProvider,\n} from './due-status.types';\nimport { resolveDueStatusFromDefinitions } from './due-status-evaluation.utils';\n\nconst DEFAULT_DUE_STATUS_DEFINITIONS: AXPDueStatusDefinition[] = [\n {\n name: 'completed',\n title: '@task-management:task-board.due-status.completed',\n color: 'success',\n icon: 'fa-light fa-circle-check',\n order: 0,\n },\n {\n name: 'no-due-date',\n title: '@task-management:task-board.due-status.no-due-date',\n color: 'neutral',\n icon: 'fa-light fa-calendar-xmark',\n order: 1,\n },\n {\n name: 'overdue',\n title: '@task-management:task-board.due-status.overdue',\n color: 'danger',\n icon: 'fa-light fa-calendar-exclamation',\n order: 2,\n },\n {\n name: 'due-today',\n title: '@task-management:task-board.due-status.due-today',\n color: 'warning',\n icon: 'fa-light fa-calendar-day',\n order: 3,\n },\n {\n name: 'due-tomorrow',\n title: '@task-management:task-board.due-status.due-tomorrow',\n color: 'accent3',\n icon: 'fa-light fa-calendar-plus',\n order: 4,\n },\n {\n name: 'due-this-week',\n title: '@task-management:task-board.due-status.due-this-week',\n color: 'primary',\n icon: 'fa-light fa-calendar-week',\n order: 5,\n },\n {\n name: 'upcoming',\n title: '@task-management:task-board.due-status.upcoming',\n color: 'secondary',\n icon: 'fa-light fa-calendar',\n order: 6,\n },\n];\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDefaultDueStatusProvider extends AXPDueStatusProvider {\n readonly key = 'default';\n readonly priority = 0;\n\n getDefinitions(): AXPDueStatusDefinition[] {\n return DEFAULT_DUE_STATUS_DEFINITIONS;\n }\n\n resolve(context: AXPDueStatusEvaluationContext): AXPDueStatusDefinition | null {\n return resolveDueStatusFromDefinitions(DEFAULT_DUE_STATUS_DEFINITIONS, context);\n }\n}\n\nexport function getDefaultDueStatusDefinitions(): AXPDueStatusDefinition[] {\n return DEFAULT_DUE_STATUS_DEFINITIONS;\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXPTask } from '../task-board.types';\nimport { AXMDefaultDueStatusProvider } from './default-due-status.provider';\nimport {\n AXPDueStatusEvaluationContext,\n AXPDueStatusPresentation,\n AXPDueStatusProvider,\n AXPDueStatusResolveOptions,\n AXP_DUE_STATUS_PROVIDERS,\n} from './due-status.types';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPDueStatusProviderService {\n private readonly localeService = inject(AXLocaleService);\n private readonly registeredProviders =\n inject(AXP_DUE_STATUS_PROVIDERS, { optional: true }) ?? [];\n private readonly fallbackProvider = inject(AXMDefaultDueStatusProvider);\n\n getDefinitions(options?: AXPDueStatusResolveOptions): ReturnType<AXPDueStatusProvider['getDefinitions']> {\n return this.selectProvider(options).getDefinitions();\n }\n\n resolveForTask(task: AXPTask, options?: AXPDueStatusResolveOptions): AXPDueStatusPresentation | null {\n const data = task.data as\n | {\n hasExplicitDueDate?: boolean;\n bookmarkConsumed?: boolean;\n }\n | undefined;\n\n const context: AXPDueStatusEvaluationContext = {\n now: new Date(),\n dueDate: task.endDate ? new Date(task.endDate) : null,\n hasExplicitDueDate: data?.hasExplicitDueDate === true,\n bookmarkConsumed: data?.bookmarkConsumed === true,\n weekStartsOn: this.resolveWeekStartsOn(),\n };\n\n const definition = this.selectProvider(options).resolve(context);\n if (!definition) {\n return null;\n }\n\n return {\n name: definition.name,\n title: definition.title,\n color: definition.color,\n icon: definition.icon,\n };\n }\n\n attachDueStatusToTask(task: AXPTask, options?: AXPDueStatusResolveOptions): AXPTask {\n const presentation = this.resolveForTask(task, options);\n if (!presentation) {\n return task;\n }\n\n return {\n ...task,\n data: {\n ...(task.data ?? {}),\n dueStatusKey: presentation.name,\n dueStatus: presentation,\n },\n };\n }\n\n private selectProvider(options?: AXPDueStatusResolveOptions): AXPDueStatusProvider {\n const providers = [...this.registeredProviders, this.fallbackProvider].sort(\n (a, b) => b.priority - a.priority,\n );\n\n if (!options?.workflowDefinitionId && !options?.activityType) {\n return providers[providers.length - 1] ?? this.fallbackProvider;\n }\n\n const matched = providers.find((provider) => {\n if (options.workflowDefinitionId && provider.key === options.workflowDefinitionId) {\n return true;\n }\n return Boolean(options.activityType && provider.key === options.activityType);\n });\n\n return matched ?? providers[providers.length - 1] ?? this.fallbackProvider;\n }\n\n private resolveWeekStartsOn(): number {\n return this.localeService.activeProfile()?.calendar?.week?.startsOn ?? 0;\n }\n}\n","import { AXRange } from '@acorex/cdk/common';\nimport { AXPSystemStatuses } from '@acorex-platform/framework-shared/core';\nimport { get } from 'lodash';\nimport { AXPTask } from './task-board.types';\n\nconst BADGE_COLORS = new Set([\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'accent1',\n 'accent2',\n 'accent3',\n 'neutral',\n 'ghost',\n]);\n\n/** Plain gray/white tokens → soft secondary (`neutral` → secondary-lightest in CSS). */\nconst NON_CHROMATIC_BADGE_COLORS = new Set([\n 'gray',\n 'grey',\n 'white',\n 'black',\n 'default',\n 'light',\n 'lighter',\n 'lightest',\n 'natural',\n]);\n\n/** Maps entity status semantic colors to badge/chip tokens (`info` → `accent3`). */\nexport function mapEntityStatusColorForBadge(color: string | undefined, statusId: string | number): string {\n const normalized = color?.trim().toLowerCase();\n if (normalized === 'info') {\n return 'accent3';\n }\n if (normalized && NON_CHROMATIC_BADGE_COLORS.has(normalized)) {\n return 'neutral';\n }\n if (normalized && BADGE_COLORS.has(normalized)) {\n return normalized;\n }\n return resolveDefaultTaskStatusColor(statusId);\n}\n\nexport function resolveDefaultTaskStatusColor(statusId: string | number): string {\n if (String(statusId) === AXPSystemStatuses.Pending.name) {\n return 'warning';\n }\n return 'primary';\n}\n\n/** Resolves the chip color for a task row, aligned with workflow popover badge layout. */\nexport function resolveTaskBoardStatusColor(task: AXPTask): string {\n if (task.status.color) {\n return task.status.color;\n }\n\n const data = task.data as\n | {\n statusColor?: string;\n entityStatusDefinition?: { color?: string };\n }\n | undefined;\n\n const rawColor = get(data, 'entityStatusDefinition.color') ?? get(data, 'statusColor');\n return mapEntityStatusColorForBadge(rawColor, task.status.id);\n}\n\n/** Calendar placement for tasks without an explicit due date (received/created day, all-day). */\nexport function resolveTaskBoardCalendarPlacement(task: AXPTask): Pick<AXPTask, 'startDate' | 'endDate' | 'allDay'> {\n const hasExplicitDueDate = get(task.data, 'hasExplicitDueDate') === true;\n\n if (hasExplicitDueDate) {\n const due = new Date(task.endDate);\n const dayStart = new Date(due);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(due);\n dayEnd.setHours(23, 59, 59, 999);\n\n return {\n startDate: dayStart,\n endDate: dayEnd,\n allDay: true,\n };\n }\n\n const received = task.createdAt ? new Date(task.createdAt) : new Date(task.startDate);\n const dayStart = new Date(received);\n dayStart.setHours(0, 0, 0, 0);\n const dayEnd = new Date(received);\n dayEnd.setHours(23, 59, 59, 999);\n\n return {\n startDate: dayStart,\n endDate: dayEnd,\n allDay: true,\n };\n}\n\n/**\n * Returns tasks whose effective scheduling range overlaps the filter range (inclusive).\n * Open tasks without an explicit due date are always included (widget-style visibility).\n */\nexport function resolveTaskBoardSchedulingRange(task: AXPTask): { from: Date; end: Date } {\n const hasExplicitDueDate = get(task.data, 'hasExplicitDueDate') === true;\n\n if (hasExplicitDueDate) {\n const due = new Date(task.endDate);\n return { from: due, end: due };\n }\n\n const received = task.createdAt ? new Date(task.createdAt) : new Date(task.startDate);\n return { from: received, end: received };\n}\n\n/** Whether a task should appear for the task board's active date navigator range. */\nexport function taskOverlapsFilterRange(task: AXPTask, range?: AXRange<Date>): boolean {\n if (!range?.from || !range?.end) {\n return true;\n }\n\n const hasExplicitDueDate = get(task.data, 'hasExplicitDueDate') === true;\n const bookmarkConsumed = get(task.data, 'bookmarkConsumed') === true;\n\n if (!hasExplicitDueDate && !bookmarkConsumed) {\n return true;\n }\n\n const { from, end } = resolveTaskBoardSchedulingRange(task);\n const rangeStart = range.from.getTime();\n const rangeEnd = range.end.getTime();\n const taskStart = from.getTime();\n const taskEnd = end.getTime();\n return taskStart <= rangeEnd && taskEnd >= rangeStart;\n}\n\nexport function filterTasksOverlappingRange<T extends AXPTask>(tasks: T[], range?: AXRange<Date>): T[] {\n if (!range?.from || !range?.end) {\n return tasks;\n }\n\n return tasks.filter((task) => taskOverlapsFilterRange(task, range));\n}\n","import { get } from 'lodash';\nimport { getTaskPriorityColor, normalizeTaskPriority } from '../task-board-priority.utils';\nimport { resolveTaskBoardStatusColor } from '../task-board-range.utils';\nimport { AXPTask, AXPTaskBoardColorBy } from '../task-board.types';\nimport { AXPDueStatusPresentation } from './due-status.types';\n\n/**\n * Soft secondary fallback class token.\n * CSS maps `neutral` / `ghost` to `secondary-lightest` / `secondary-lighter` surfaces\n * (never plain gray/white).\n */\nconst TASK_BOARD_SOFT_SECONDARY_TOKEN = 'neutral';\n\nconst SURFACE_CLASS_TOKENS = new Set([\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'accent1',\n 'accent2',\n 'accent3',\n 'neutral',\n 'ghost',\n]);\n\n/** Gray / white / natural tokens that blend into the calendar background. */\nconst NON_CHROMATIC_SURFACE_TOKENS = new Set([\n 'gray',\n 'grey',\n 'white',\n 'black',\n 'default',\n 'light',\n 'lighter',\n 'lightest',\n 'natural',\n]);\n\nexport function resolveTaskBoardAccentColor(task: AXPTask, colorBy: AXPTaskBoardColorBy): string {\n switch (colorBy) {\n case 'dueDate':\n return resolveDueStatusAccentColor(task);\n case 'priority':\n return task.priority\n ? getTaskPriorityColor(normalizeTaskPriority(task.priority))\n : TASK_BOARD_SOFT_SECONDARY_TOKEN;\n case 'status':\n return resolveTaskBoardStatusColor(task);\n default:\n return resolveDueStatusAccentColor(task);\n }\n}\n\nfunction resolveDueStatusAccentColor(task: AXPTask): string {\n const dueStatus = get(task.data, 'dueStatus') as AXPDueStatusPresentation | undefined;\n if (dueStatus?.color) {\n return dueStatus.color;\n }\n\n if (get(task.data, 'hasExplicitDueDate') !== true) {\n return TASK_BOARD_SOFT_SECONDARY_TOKEN;\n }\n\n return 'secondary';\n}\n\nfunction normalizeSurfaceClassToken(colorToken: string): string {\n const safe = colorToken.replace(/[^a-z0-9-]/gi, '').toLowerCase();\n if (!safe || NON_CHROMATIC_SURFACE_TOKENS.has(safe)) {\n return TASK_BOARD_SOFT_SECONDARY_TOKEN;\n }\n return SURFACE_CLASS_TOKENS.has(safe) ? safe : TASK_BOARD_SOFT_SECONDARY_TOKEN;\n}\n\n/** Maps a color token to a static BEM class backed by Tailwind @apply rules in task-board-surface.css. */\nexport function buildTaskSurfaceCssClass(colorToken: string): string {\n return `axm-task-board-surface--${normalizeSurfaceClassToken(colorToken)}`;\n}\n\n/** Accent stripe modifier for dashboard widget rows. */\nexport function buildTaskAccentSurfaceCssClass(colorToken: string): string {\n return `axm-task-board-accent--${normalizeSurfaceClassToken(colorToken)}`;\n}\n\n/** @deprecated Use {@link buildTaskSurfaceCssClass}. */\nexport function buildTaskAccentCssClass(colorToken: string): string {\n return buildTaskSurfaceCssClass(colorToken);\n}\n","//#region ----- Command result helpers -----\n\n/**\n * True when a task-board action collected input but did not complete\n * (e.g. Sign Off dialog cancelled). The card must stay on the board.\n */\nexport function isCancelledTaskBoardCommandResult(result: unknown): boolean {\n if (!result || typeof result !== 'object') {\n return false;\n }\n const data = (result as { data?: unknown }).data;\n return (\n !!data &&\n typeof data === 'object' &&\n !Array.isArray(data) &&\n (data as { cancelled?: unknown }).cancelled === true\n );\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n Type,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPTask, AXPTaskActionMenuItem, AXPTaskPopoverComponent } from './task-board.types';\nimport { isCancelledTaskBoardCommandResult } from './task-board-command-result.util';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-task-board-default-task-popover',\n template: `\n @if (task().description) {\n <p class=\"task-popover__description\">{{ task().description }}</p>\n }\n\n <div class=\"task-popover__content\">\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-clock\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ formatDateRange(task()) }}</span>\n </div>\n </div>\n\n @if (task().status) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-flag\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{ task().status.title }}</span>\n </div>\n </div>\n }\n\n @if (task().assignee) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon\">\n <i class=\"fa-light fa-user\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text\">{{\n task().assignee?.fullName || task().assignee?.username || 'Unassigned'\n }}</span>\n </div>\n </div>\n }\n\n @if (task().priority) {\n <div class=\"task-popover__info-item\">\n <div class=\"task-popover__icon task-popover__icon--priority\" [attr.data-priority]=\"task().priority\">\n <i class=\"fa-light fa-exclamation-circle\"></i>\n </div>\n <div class=\"task-popover__info-content\">\n <span class=\"task-popover__info-text task-popover__priority\" [attr.data-priority]=\"task().priority\">\n {{ task().priority }}\n </span>\n </div>\n </div>\n }\n </div>\n\n @if (taskActions().length > 0) {\n <div class=\"task-popover__actions\">\n <div class=\"task-popover__actions-group\">\n @if (primaryActions().length > 0) {\n @for (action of primaryActions(); track action.name || action.title) {\n <ax-button\n [look]=\"'solid'\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"executeAction(action)\"\n [disabled]=\"action.disabled === true\"\n [text]=\"(action.title | translate | async)!\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n }\n\n @if (secondaryActions().length > 0) {\n <ax-button [look]=\"'blank'\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-ellipsis-vertical\"></ax-icon>\n </ax-prefix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (action of secondaryActions(); track action.name || action.title) {\n <ax-button-item\n [text]=\"(action.title | translate | async)!\"\n [disabled]=\"action.disabled === true\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon>\n <i [class]=\"action.icon\"></i>\n </ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n </div>\n }\n `,\n styleUrls: ['./task-board-default-task-popover.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule],\n})\nexport class AXMTaskBoardDefaultTaskPopoverComponent extends AXPTaskPopoverComponent {\n //#region ---- Inputs ----\n\n task = input.required<AXPTask>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly calendarService = inject(AXCalendarService);\n\n //#endregion\n\n //#region ---- Actions ----\n\n protected readonly taskActions = signal<AXPTaskActionMenuItem[]>([]);\n\n protected readonly primaryActions = computed(() =>\n this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'primary'),\n );\n\n protected readonly secondaryActions = computed(() =>\n this.taskActions().filter((action) => (action.priority ?? 'secondary') === 'secondary'),\n );\n\n constructor() {\n super();\n effect(() => {\n const currentTask = this.task();\n if (!currentTask?.provider) {\n this.taskActions.set([]);\n return;\n }\n const provider = this.taskBoardService.getProvider(currentTask.provider);\n if (!provider) {\n this.taskActions.set([]);\n return;\n }\n provider\n .getActions(currentTask)\n .then((actions) =>\n this.taskActions.set(\n (actions ?? []).map((action) => ({\n ...action,\n priority: action.priority ?? 'secondary',\n })),\n ),\n )\n .catch((error) => {\n console.error('[TaskBoardDefaultTaskPopover] Failed to load actions:', error);\n this.taskActions.set([]);\n });\n });\n }\n\n protected getActionColor(action: AXPTaskActionMenuItem): string | null {\n return (action.color as string) ?? null;\n }\n\n protected async executeAction(action: AXPTaskActionMenuItem): Promise<void> {\n const currentTask = this.task();\n if (!currentTask?.provider || !action.command) {\n return;\n }\n\n try {\n const result = await this.taskBoardService.executeCommand(action.command, currentTask.provider);\n if (result?.success === false || result === null || isCancelledTaskBoardCommandResult(result)) {\n return;\n }\n this.closePopover();\n this.taskBoardService.requestRefresh(currentTask.provider);\n } catch (error) {\n console.error('[TaskBoardDefaultTaskPopover] executeAction failed:', error);\n }\n }\n\n //#endregion\n\n //#region ---- Date Formatting ----\n\n protected formatDateRange(task: AXPTask): string {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n\n if (start.date.getTime() === end.date.getTime()) {\n return this.formatDate(task.startDate);\n }\n\n const startFormatted = this.formatDate(task.startDate);\n const endFormatted = this.formatDate(task.endDate);\n\n if (start.date.getMonth() === end.date.getMonth() && start.date.getFullYear() === end.date.getFullYear()) {\n const startDay = start.date.getDate();\n const endDay = end.date.getDate();\n const monthYear = start.format('MMM YYYY');\n return `${startDay} - ${endDay}, ${monthYear}`;\n }\n\n return `${startFormatted} - ${endFormatted}`;\n }\n\n if (this.isMultiDay(task)) {\n return `${this.formatDateTime(task.startDate)} - ${this.formatDateTime(task.endDate)}`;\n }\n\n const dateFormatted = this.formatDate(task.startDate);\n const timeRange = `${this.formatTime(task.startDate)} - ${this.formatTime(task.endDate)}`;\n return `${dateFormatted} ${timeRange}`;\n }\n\n private formatTime(date: Date): string {\n return this.calendarService.create(date).format('HH:mm');\n }\n\n private formatDate(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY');\n }\n\n private formatDateTime(date: Date): string {\n return this.calendarService.create(date).format('MMM DD, YYYY HH:mm');\n }\n\n private isMultiDay(task: AXPTask): boolean {\n if (task.allDay) {\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return start.date.getTime() !== end.date.getTime();\n }\n\n const start = this.calendarService.create(task.startDate);\n const end = this.calendarService.create(task.endDate);\n return (\n start.date.getDate() !== end.date.getDate() ||\n start.date.getMonth() !== end.date.getMonth() ||\n start.date.getFullYear() !== end.date.getFullYear()\n );\n }\n\n //#endregion\n}\n\n/**\n * Resolves the popover component for a task: provider custom component or the default task popover.\n */\nexport async function resolveTaskPopoverComponent(\n task: AXPTask,\n taskBoardService: AXPTaskBoardService,\n): Promise<Type<AXPTaskPopoverComponent>> {\n const defaultType = AXMTaskBoardDefaultTaskPopoverComponent;\n\n if (!task.provider) {\n return defaultType;\n }\n\n const provider = taskBoardService.getProvider(task.provider);\n if (!provider) {\n return defaultType;\n }\n\n const componentGetter = provider.getComponent?.();\n if (!componentGetter) {\n return defaultType;\n }\n\n try {\n if (typeof componentGetter !== 'function') {\n return defaultType;\n }\n\n let result: Promise<Type<AXPTaskPopoverComponent>> | Type<AXPTaskPopoverComponent> | undefined;\n\n try {\n result = (componentGetter as () => Promise<Type<AXPTaskPopoverComponent>> | Type<AXPTaskPopoverComponent>)();\n } catch {\n return componentGetter as Type<AXPTaskPopoverComponent>;\n }\n\n if (result instanceof Promise) {\n return await result;\n }\n\n if (result) {\n return result;\n }\n\n return componentGetter as Type<AXPTaskPopoverComponent>;\n } catch (error) {\n console.error('[TaskPopover] Failed to load custom task popover component:', error);\n return defaultType;\n }\n}\n\n//#endregion\n","import { AXRowCommandItem } from '@acorex/components/data-table';\n\n/** Width for a single icon-only row action column. */\nexport const TASK_BOARD_GRID_ROW_ACTION_COLUMN_WIDTH = '70px';\n\n/** Icon-only command that opens the task details popover. */\nexport const TASK_BOARD_GRID_ROW_VIEW_ACTION: AXRowCommandItem = {\n name: 'view',\n text: '@task-management:task-board.grid-headers.action-view',\n icon: 'fa-light fa-ellipsis-vertical',\n iconOnly: true,\n look: 'blank',\n};\n\nexport const TASK_BOARD_GRID_ROW_ACTION_ITEMS: AXRowCommandItem[] = [TASK_BOARD_GRID_ROW_VIEW_ACTION];\n","import { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport { get } from 'lodash';\nimport { AXPDueStatusProviderService } from './due-status/due-status-provider.service';\nimport {\n buildTaskSurfaceCssClass,\n resolveTaskBoardAccentColor,\n} from './due-status/task-board-accent-color.utils';\nimport { resolveTaskBoardCalendarPlacement } from './task-board-range.utils';\nimport { AXPTask, AXPTaskBoardColorBy } from './task-board.types';\n\nfunction taskParamToDisplayString(translationService: AXTranslationService, value: unknown): string {\n if (value == null) {\n return '';\n }\n if (typeof value === 'string') {\n return value.trim();\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (typeof value === 'object') {\n const resolved = translationService.resolve(value as never);\n return resolved?.trim() ?? '';\n }\n return String(value).trim();\n}\n\nconst TASK_I18N_DATE_KEYS = new Set([\n 'startDate',\n 'endDate',\n 'effectiveDate',\n 'dueDate',\n 'occurredDate',\n]);\n\nfunction isDateLikeString(value: string): boolean {\n return /^\\d{4}-\\d{2}-\\d{2}(?:T|$)/.test(value.trim());\n}\n\nfunction parseDateOnlyString(value: string): Date | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(value.trim());\n if (!match) {\n return null;\n }\n const year = Number(match[1]);\n const month = Number(match[2]);\n const day = Number(match[3]);\n if (!year || !month || !day) {\n return null;\n }\n return new Date(year, month - 1, day);\n}\n\n/** Resolves MLS and formats dates at display time so task labels react to locale changes. */\nexport async function formatTaskI18nParamsForTranslate(\n raw: Record<string, unknown> | undefined,\n translationService: AXTranslationService,\n formatService: AXFormatService,\n settingsService: AXPSettingsService,\n): Promise<Record<string, string>> {\n if (!raw) {\n return {};\n }\n\n const format = await settingsService.get(AXPRegionalSetting.ShortDate);\n const params: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(raw)) {\n if (value == null || value === '') {\n continue;\n }\n\n if (\n TASK_I18N_DATE_KEYS.has(key) &&\n (value instanceof Date || (typeof value === 'string' && isDateLikeString(value)))\n ) {\n const date =\n value instanceof Date ? value : parseDateOnlyString(value) ?? new Date(value);\n if (!Number.isNaN(date.getTime())) {\n const formatted = formatService.format(date, 'date', { format });\n const text = typeof formatted === 'string' ? formatted : String(formatted ?? '');\n if (text) {\n params[key] = text;\n }\n }\n continue;\n }\n\n const text = taskParamToDisplayString(translationService, value);\n if (text) {\n params[key] = text;\n }\n }\n\n return params;\n}\n\nexport function getTaskTranslationKey(task: AXPTask, field: 'title' | 'description'): string | undefined {\n const data = task.data as\n | { titleKey?: string; descriptionKey?: string; payload?: { title?: string; description?: string } }\n | undefined;\n const key = field === 'title' ? data?.titleKey : data?.descriptionKey;\n if (key?.trim().startsWith('@')) {\n return key.trim();\n }\n\n const payloadKey = field === 'title' ? data?.payload?.title : data?.payload?.description;\n if (payloadKey?.trim().startsWith('@')) {\n return payloadKey.trim();\n }\n\n const fallback = field === 'title' ? task.title : task.description;\n return fallback?.trim().startsWith('@') ? fallback.trim() : undefined;\n}\n\n/** Resolves scheduler/kanban labels; popovers should use the translate pipe with {@link getTaskTranslationKey}. */\nexport async function resolveTaskBoardSchedulerLabels(\n tasks: AXPTask[],\n translationService: AXTranslationService,\n formatService: AXFormatService,\n settingsService: AXPSettingsService,\n): Promise<AXPTask[]> {\n return Promise.all(\n tasks.map(async (task) => {\n const titleKey = getTaskTranslationKey(task, 'title');\n const descriptionKey = getTaskTranslationKey(task, 'description');\n const rawParams = get(task.data, 'taskI18nParams') as Record<string, unknown> | undefined;\n const params = await formatTaskI18nParamsForTranslate(\n rawParams,\n translationService,\n formatService,\n settingsService,\n );\n\n return {\n ...task,\n ...(titleKey ? { title: await translationService.translateAsync(titleKey, { params }) } : {}),\n ...(descriptionKey\n ? { description: await translationService.translateAsync(descriptionKey, { params }) }\n : {}),\n };\n }),\n );\n}\n\nexport function enrichTaskBoardTasks(\n tasks: AXPTask[],\n colorBy: AXPTaskBoardColorBy,\n dueStatusProviderService: AXPDueStatusProviderService,\n): AXPTask[] {\n return tasks.map((task) => {\n const withDueStatus = dueStatusProviderService.attachDueStatusToTask(task);\n const accentClass = buildTaskSurfaceCssClass(resolveTaskBoardAccentColor(withDueStatus, colorBy));\n const calendarPlacement = resolveTaskBoardCalendarPlacement(withDueStatus);\n\n return {\n ...withDueStatus,\n ...calendarPlacement,\n cssClass: accentClass,\n };\n });\n}\n","//#region ---- Imports ----\n\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n Type,\n ViewEncapsulation,\n} from '@angular/core';\nimport { get } from 'lodash';\nimport {\n formatTaskI18nParamsForTranslate,\n getTaskTranslationKey,\n} from './task-board-task-enrichment.utils';\nimport { AXPTask, AXPTaskPopoverComponent } from './task-board.types';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-task-board-task-popover-shell',\n template: `\n <div class=\"task-popover\">\n <div class=\"task-popover__header\">\n <div class=\"task-popover__title-section\">\n <div class=\"task-popover__title-row\">\n <h3 class=\"task-popover__title\">\n @if (titleKey(); as key) {\n {{ key | translate: { params: i18nParams() } | async }}\n } @else {\n {{ task().title }}\n }\n </h3>\n <button type=\"button\" class=\"task-popover__close-btn\" (click)=\"requestClose()()\" aria-label=\"Close\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n </div>\n </div>\n </div>\n <div class=\"task-popover__body\">\n @if (bodyComponent()) {\n <ng-container *ngComponentOutlet=\"bodyComponent()!; inputs: bodyInputs()\" />\n }\n </div>\n </div>\n `,\n styleUrls: ['./task-board-default-task-popover.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXDecoratorModule, AXTranslationModule],\n})\nexport class AXMTaskBoardTaskPopoverShellComponent {\n task = input.required<AXPTask>();\n bodyComponent = input.required<Type<AXPTaskPopoverComponent>>();\n requestClose = input.required<() => void>();\n\n private readonly localeService = inject(AXLocaleService);\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly translationService = inject(AXTranslationService);\n\n protected readonly i18nParams = signal<Record<string, string>>({});\n\n protected readonly titleKey = computed(() => getTaskTranslationKey(this.task(), 'title'));\n\n protected readonly bodyInputs = computed(() => ({ task: this.task() }));\n\n private readonly i18nParamsEffect = effect(() => {\n const task = this.task();\n void this.localeService.activeProfile().localeInfo?.code;\n const raw = get(task.data, 'taskI18nParams') as Record<string, unknown> | undefined;\n void formatTaskI18nParamsForTranslate(\n raw,\n this.translationService,\n this.formatService,\n this.settingsService,\n ).then((params) => this.i18nParams.set(params));\n });\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXClickEvent, AXPlacement } from '@acorex/cdk/common';\nimport { AXOverlayRef, AXOverlayService } from '@acorex/cdk/overlay';\nimport { AXRowCommandItemClickEvent } from '@acorex/components/data-table';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { ComponentRef, ElementRef, inject, Injectable } from '@angular/core';\nimport { resolveTaskPopoverComponent } from './task-board-default-task-popover.component';\nimport { AXMTaskBoardTaskPopoverShellComponent } from './task-board-task-popover-shell.component';\nimport { AXPTaskBoardService } from './task-board.service';\nimport { AXPTask } from './task-board.types';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Anchor for overlay positioning: native element, ElementRef, or component host via `getHostElement()`. */\nexport type AXMTaskPopoverAnchor = Element | ElementRef<HTMLElement>;\n\nexport interface AXMOpenTaskPopoverOverlayOptions {\n task: AXPTask;\n anchor: AXMTaskPopoverAnchor;\n /** Default: `bottom-start` (below anchor, aligned to the left / start edge). */\n placement?: AXPlacement;\n offsetX?: number;\n offsetY?: number;\n adaptivityEnabled?: boolean;\n autoFlip?: boolean;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Opens task-board task popovers via {@link AXOverlayService}, matching {@link AXPopoverComponent} anchor positioning.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMTaskBoardTaskPopoverOverlayService {\n //#region ---- Services & Dependencies ----\n\n private readonly overlayService = inject(AXOverlayService);\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly platform = inject(AXPlatform);\n private readonly document = inject(DOCUMENT);\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private overlayRef: AXOverlayRef<AXMTaskBoardTaskPopoverShellComponent> | null = null;\n private shellRef: ComponentRef<AXMTaskBoardTaskPopoverShellComponent> | null = null;\n private activeTask: AXPTask | null = null;\n private anchorElement: HTMLElement | null = null;\n private outsideClickHandler: ((event: MouseEvent) => void) | null = null;\n private keydownHandler: ((event: KeyboardEvent) => void) | null = null;\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n getActiveTask(): AXPTask | null {\n return this.activeTask;\n }\n\n isOpen(): boolean {\n return this.overlayRef !== null;\n }\n\n async open(options: AXMOpenTaskPopoverOverlayOptions): Promise<void> {\n const anchorElement = this.resolveAnchorElement(options.anchor);\n if (!anchorElement) {\n return;\n }\n\n this.close();\n\n const bodyComponent = await resolveTaskPopoverComponent(options.task, this.taskBoardService);\n this.activeTask = options.task;\n this.anchorElement = anchorElement;\n\n const panelClasses = ['animate-fadeIn', 'animate-faster'];\n if (this.platform.isDark()) {\n panelClasses.push('ax-dark');\n }\n\n const requestClose = (): void => {\n this.close();\n };\n\n try {\n const ref = await this.overlayService.create(AXMTaskBoardTaskPopoverShellComponent, {\n centered: false,\n width: 'fit-content',\n actionSheetStyle: options.adaptivityEnabled ?? true,\n panelClass: panelClasses,\n backdrop: {\n enabled: false,\n background: false,\n closeOnClick: false,\n },\n anchorOptions: {\n anchor: anchorElement,\n placement: options.placement ?? 'bottom-start',\n offsetX: options.offsetX ?? 8,\n offsetY: options.offsetY ?? 8,\n autoFlip: options.autoFlip ?? true,\n },\n inputs: {\n task: options.task,\n bodyComponent,\n requestClose,\n },\n onDispose: () => {\n this.handleOverlayDisposed();\n },\n });\n\n this.overlayRef = ref;\n this.shellRef = ref.instance as ComponentRef<AXMTaskBoardTaskPopoverShellComponent>;\n\n setTimeout(() => {\n ref.updatePosition();\n this.bindDismissHandlers(ref.overlayElement, anchorElement);\n }, 0);\n } catch (error) {\n console.error('[TaskBoardTaskPopover] Failed to open overlay:', error);\n this.handleOverlayDisposed();\n }\n }\n\n async refreshTask(task: AXPTask): Promise<void> {\n if (!this.overlayRef || !this.shellRef || !this.activeTask || this.activeTask.id !== task.id) {\n return;\n }\n\n const bodyComponent = await resolveTaskPopoverComponent(task, this.taskBoardService);\n this.activeTask = task;\n this.shellRef.setInput('task', task);\n this.shellRef.setInput('bodyComponent', bodyComponent);\n }\n\n close(): void {\n this.removeDismissHandlers();\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.shellRef = null;\n this.activeTask = null;\n this.anchorElement = null;\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Normalizes an anchor to a host {@link HTMLElement} for {@link AXOverlayService}.\n */\n resolveAnchorElement(anchor: AXMTaskPopoverAnchor): HTMLElement | null {\n if (anchor instanceof ElementRef) {\n return anchor.nativeElement;\n }\n\n if (anchor instanceof HTMLElement) {\n return anchor;\n }\n\n const hostCandidate = anchor as Element & { getHostElement?: () => HTMLElement };\n if (typeof hostCandidate.getHostElement === 'function') {\n return hostCandidate.getHostElement();\n }\n\n return anchor as HTMLElement;\n }\n\n /**\n * Resolves an overlay anchor from a grid command-column click.\n */\n resolveAnchorFromCommandClick(event: AXRowCommandItemClickEvent): HTMLElement | undefined {\n if (event.htmlElement instanceof HTMLElement) {\n return event.htmlElement;\n }\n\n const nativeEvent = event.nativeEvent;\n if (nativeEvent instanceof MouseEvent) {\n return this.resolveAnchor(nativeEvent);\n }\n\n const nestedClick = nativeEvent as AXClickEvent | undefined;\n if (nestedClick?.htmlElement instanceof HTMLElement) {\n return nestedClick.htmlElement;\n }\n\n if (nestedClick?.component && typeof nestedClick.component.getHostElement === 'function') {\n return nestedClick.component.getHostElement();\n }\n\n return this.resolveAnchor(nestedClick?.nativeEvent);\n }\n\n /**\n * Resolves an overlay anchor from a native click (e.g. command button in a data table cell).\n */\n resolveAnchor(nativeEvent?: MouseEvent | null, htmlElement?: HTMLElement | null): HTMLElement | undefined {\n if (htmlElement) {\n return htmlElement;\n }\n\n const target = (nativeEvent?.currentTarget ?? nativeEvent?.target) as Element | null;\n if (!target) {\n return undefined;\n }\n\n const cell = target.closest?.('td');\n const cellTrigger = cell?.querySelector('ax-button, button');\n if (cellTrigger instanceof HTMLElement) {\n return cellTrigger;\n }\n\n const buttonHost = target.closest?.('ax-button');\n if (buttonHost instanceof HTMLElement) {\n return buttonHost;\n }\n\n let element: Element | null = target;\n for (let depth = 0; element && depth < 12; depth++) {\n if (element.tagName.toLowerCase() === 'ax-button' && element instanceof HTMLElement) {\n return element;\n }\n element = element.parentElement;\n }\n\n return target instanceof HTMLElement ? target : undefined;\n }\n\n private bindDismissHandlers(overlayElement: HTMLElement | null, anchor: HTMLElement): void {\n this.removeDismissHandlers();\n\n this.keydownHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.close();\n }\n };\n this.document.addEventListener('keydown', this.keydownHandler);\n\n this.outsideClickHandler = (event: MouseEvent) => {\n const target = event.target as Element | null;\n if (!target || !overlayElement) {\n return;\n }\n if (this.isInsideTaskPopoverInteractiveSurface(target, overlayElement, anchor)) {\n return;\n }\n this.close();\n };\n this.document.addEventListener('mousedown', this.outsideClickHandler);\n }\n\n /** Dropdown menus render outside the popover overlay; ignore those clicks when dismissing. */\n private isInsideTaskPopoverInteractiveSurface(\n target: Element,\n overlayElement: HTMLElement,\n anchor: HTMLElement,\n ): boolean {\n if (anchor.contains(target) || overlayElement.contains(target)) {\n return true;\n }\n return Boolean(\n target.closest(\n 'ax-dropdown-panel, ax-button-item-list, ax-button-item, ax-dropdown-button, .ax-dropdown-panel',\n ),\n );\n }\n\n private removeDismissHandlers(): void {\n if (this.keydownHandler) {\n this.document.removeEventListener('keydown', this.keydownHandler);\n this.keydownHandler = null;\n }\n if (this.outsideClickHandler) {\n this.document.removeEventListener('mousedown', this.outsideClickHandler);\n this.outsideClickHandler = null;\n }\n }\n\n private handleOverlayDisposed(): void {\n this.removeDismissHandlers();\n this.overlayRef = null;\n this.shellRef = null;\n this.activeTask = null;\n this.anchorElement = null;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPActionMenuItem, AXPExecuteCommand, AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport {\n AXPExtraField,\n AXPTask,\n AXPTaskFilter,\n AXPTaskPriority,\n AXPTaskStatus,\n AXPWorkflowTaskProvider,\n} from './task-board.types';\nimport { filterTasksOverlappingRange } from './task-board-range.utils';\nimport { matchesTaskDueStatusFilter } from './due-status/due-status.types';\nimport { matchesTaskPriorityFilter } from './task-board-priority.utils';\nimport { AXPDueStatusProviderService } from './due-status';\nimport type { AXMTaskManagementTaskEntityModel } from '@acorex-platform/module-task-management-client/contracts';\n\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { defaultTo, get } from 'lodash';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport type { AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\n\n//#endregion\n\n//#region ---- Provider ----\n\ntype TaskRow = AXMTaskManagementTaskEntityModel & {\n status?: { id: string; title?: string; color?: string };\n taskType?: { id: string; title?: string };\n};\n\n/**\n * Feeds the platform task board from persisted {@link TaskManagement.Task} rows.\n */\n@Injectable()\nexport class AXPTaskManagementEntityTaskProvider extends AXPWorkflowTaskProvider<Record<string, unknown>> {\n\n override getTitle(): Promise<string> {\n return Promise.resolve('Tasks');\n }\n\n override getIcon(): Promise<string> {\n return Promise.resolve('fa-light fa-clipboard-check');\n }\n\n private readonly entityService = inject(AXPEntityService);\n private readonly calendarService = inject(AXCalendarService);\n private readonly dueStatusProviderService = inject(AXPDueStatusProviderService);\n\n get name(): string {\n return 'task-management.tasks';\n }\n\n async getTasks(options?: AXPTaskFilter): Promise<{ items: AXPTask<Record<string, unknown>>[]; total: number }> {\n const filters: Array<Record<string, unknown>> = [\n { field: 'isArchived', operator: { type: 'equal' }, value: false },\n ];\n\n if (options?.subjectRefTypes?.length) {\n filters.push({\n field: 'subjectRef.type',\n operator: { type: 'in' },\n value: options.subjectRefTypes,\n });\n }\n\n if (options?.subjectRefIds?.length) {\n filters.push({\n field: 'subjectRef.id',\n operator: { type: 'in' },\n value: options.subjectRefIds,\n });\n }\n\n const requiresClientSideFiltering =\n Boolean(options?.range?.from && options.range.end) ||\n (options?.priorities?.length ?? 0) > 0 ||\n (options?.dueStatusKeys?.length ?? 0) > 0;\n\n const page = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.task.name)\n .data()\n .query({\n skip: requiresClientSideFiltering ? 0 : (options?.skip ?? 0),\n take: requiresClientSideFiltering ? 1000 : Math.min(options?.take ?? 1000, 1000),\n filter: { logic: 'and', filters },\n });\n\n const rows = (page.items ?? []) as TaskRow[];\n let items = rows.map((row) => this.mapRowToTask(row));\n\n if (options?.range?.from && options.range.end) {\n items = filterTasksOverlappingRange(items, options.range);\n }\n\n if (options?.priorities?.length) {\n items = items.filter((task) => matchesTaskPriorityFilter(task, options.priorities!));\n }\n\n items = items.map(\n (task) => this.dueStatusProviderService.attachDueStatusToTask(task) as AXPTask<Record<string, unknown>>,\n );\n\n if (options?.dueStatusKeys?.length) {\n items = items.filter((task) => matchesTaskDueStatusFilter(task, options.dueStatusKeys!));\n }\n\n const total = items.length;\n const skip = options?.skip ?? 0;\n const take = options?.take ?? total;\n return { items: items.slice(skip, skip + take), total };\n }\n\n async updateTasks(tasksToUpdate: AXPTask<Record<string, unknown>>[]): Promise<AXPTask<Record<string, unknown>>[]> {\n return tasksToUpdate;\n }\n\n async getStatuses(): Promise<AXPTaskStatus[]> {\n return [];\n }\n\n async getExtraFields(): Promise<AXPExtraField[]> {\n return [];\n }\n\n async executeCommand(command: AXPExecuteCommand): AXPCommandExecuteResultPromise {\n return command.name === 'Entity:OpenDetails'\n ? { success: true, kind: 'object', data: undefined }\n : { success: false };\n }\n\n async getActions(task?: AXPTask<Record<string, unknown>>): Promise<AXPActionMenuItem[]> {\n if (!task?.id) {\n return [];\n }\n return [\n {\n name: 'Entity:OpenDetails',\n title: '@general:actions.view.title',\n icon: 'fa-light fa-eye',\n command: {\n name: 'Entity:OpenDetails',\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.task.name}`,\n id: task.id,\n },\n },\n },\n ];\n }\n\n //#region ---- Mapping ----\n\n private mapRowToTask(row: TaskRow): AXPTask<Record<string, unknown>> {\n const startDate = row.startDate ?? row.dueDate ?? this.calendarService.create(new Date()).date;\n const endDate = row.dueDate ?? row.startDate ?? startDate;\n const statusTitle = defaultTo(get(row, 'status.title'), 'Unknown');\n const statusId = defaultTo(get(row, 'status.id'), row.statusId);\n\n return {\n id: row.id,\n index: row.order ?? 0,\n title: row.title,\n description: row.description,\n status: {\n id: statusId,\n title: statusTitle,\n color: get(row, 'status.color') as string | undefined,\n },\n assignee: row.assigneeId\n ? {\n id: row.assigneeId,\n type: 'user',\n fullName: String(get(row, 'assignee.displayName') ?? get(row, 'assignee.fullName') ?? row.assigneeId),\n }\n : undefined,\n reporter: { id: 'system', type: 'user', fullName: 'System' },\n startDate,\n endDate,\n priority: this.mapPriority(row.priority),\n progress: row.progress,\n tags: row.tags,\n provider: this.name,\n data: {\n taskTypeId: row.taskTypeId,\n subjectRef: row.subjectRef,\n entityId: row.id,\n },\n };\n }\n\n private mapPriority(priority: TaskRow['priority']): AXPTaskPriority | undefined {\n switch (priority) {\n case 'low':\n return 'low';\n case 'medium':\n return 'normal';\n case 'high':\n return 'high';\n case 'critical':\n return 'urgent';\n default:\n return undefined;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorGenericComponent, AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMSecurityManagementUsersEntityModel } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { normalizeTaskBoardAssigneeIds } from '../../../task-board/task-board-assignee-access';\nimport { AXPTask, AXPTaskBoardService, AXPTaskFilter } from '../../../task-board';\nimport { AXPSessionService } from '@acorex-platform/framework-client/auth';\n\ntype TaskPriority = NonNullable<AXPTask['priority']>;\ntype PriorityFilterKey = TaskPriority | 'no_priority';\ntype Priority = { title: string; name: PriorityFilterKey };\ntype TaskType = { name: string; title: string; icon: string };\ntype Assignee = AXMSecurityManagementUsersEntityModel & { displayName: string };\ntype DateRange = { title: string; name: string };\ntype QueryParam = {\n type?: string[];\n dateRange: string;\n assignee?: string[];\n priority?: PriorityFilterKey[];\n};\n\n@Component({\n templateUrl: './task-board-shortcut.component.html',\n styleUrls: ['./task-board-shortcut.component.css'],\n imports: [\n CommonModule,\n AXButtonComponent,\n AXDecoratorIconComponent,\n AXDecoratorGenericComponent,\n RouterLink,\n AXTranslationModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPTaskBoardShortcutViewComponent extends AXPLayoutBaseWidgetComponent {\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly sessionService = inject(AXPSessionService);\n\n protected tasksCount = signal<number>(0);\n\n protected readonly assignee = computed<Assignee[]>(() => this.options()?.['assignee'] ?? []);\n protected readonly priority = computed<Priority[]>(() => this.options()?.['priority'] ?? []);\n protected readonly selectedTaskTypes = computed<TaskType[]>(() => this.options()?.['taskTypes'] ?? []);\n protected readonly dateRange = computed<DateRange>(\n () => this.options()?.['dateRange'] ?? { title: 'This Month', name: 'this-month' },\n );\n protected readonly title = computed<string>(() => {\n const types = this.selectedTaskTypes()\n .map((t) => t.title)\n .join(', ');\n return types === '' ? 'All Tasks' : types;\n });\n protected readonly queryParams = computed<QueryParam>(() => {\n const dateRange = this.dateRange().name;\n const assignee = normalizeTaskBoardAssigneeIds(\n this.sessionService,\n this.assignee().map((a) => a.id),\n ).map(String);\n const priority = this.priority().map((p) => p.name);\n const type = this.selectedTaskTypes().map((t) => t.name);\n return { type, priority, assignee, dateRange };\n });\n\n #taskCounter = effect(async () => {\n const params = this.queryParams();\n const range = this.taskBoardService.rangeCalculator(params.dateRange);\n const options: AXPTaskFilter = {\n range,\n types: params.type,\n priorities: params.priority,\n assigneeIds: params.assignee,\n };\n this.taskBoardService.getTasks(options).then((t) => this.tasksCount.set(t.total));\n });\n}\n","<div class=\"flex flex-col gap-3 px-6 pt-3 pb-6 h-full\">\n <h1 class=\"text-start text-lg font-medium truncate h-9\">{{ title() | translate | async }}</h1>\n <div class=\"w-full h-full relative\">\n <div class=\"flex flex-col gap-2 text-start\">\n <h3 class=\"text-xl text-primary text-nowrap\">{{ dateRange().title | translate | async }}</h3>\n <h1 class=\"text-6xl font-bold\">{{ tasksCount() }}</h1>\n </div>\n <a\n [queryParams]=\"queryParams()\"\n class=\"absolute bottom-0 right-0\"\n [routerLink]=\"['/TaskManagement/task-board']\"\n >\n <ax-button [text]=\"'View all'\" [look]=\"'link'\" class=\"ax-sm\" [color]=\"'primary'\">\n <ax-suffix> <ax-icon class=\"fa-solid fa-external-link\"></ax-icon> </ax-suffix>\n </ax-button>\n </a>\n </div>\n</div>\n","import { AXPDefinitionCategory } from '@acorex-platform/framework-shared/core';\n\n/**\n * Parent tab for task-management dashboard widgets in the widget gallery.\n */\nexport const AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY: AXPDefinitionCategory = {\n name: 'tasks',\n order: 4,\n title: '@task-management:dashboard-widgets.widget-picker-category.tasks',\n};\n","import { AXPDefinitionCategory } from '@acorex-platform/framework-shared/core';\n\nconst SUB = '@task-management:dashboard-widgets.widget-picker-sub-categories';\n\n//#region ---- Task dashboard widget picker sub-categories ----\n\nexport const AXP_TASK_MANAGEMENT_DASHBOARD_SUB_SHORTCUT: AXPDefinitionCategory = {\n name: 'task-dashboard-shortcut',\n order: 1,\n title: `${SUB}.shortcut`,\n};\n\nexport const AXP_TASK_MANAGEMENT_DASHBOARD_SUB_BOARD: AXPDefinitionCategory = {\n name: 'task-dashboard-board',\n order: 2,\n title: `${SUB}.board`,\n};\n\n//#endregion\n\n","//#region ----- Imports -----\n\nimport { defineDashboardWidgetDimensions } from '@acorex-platform/module-dashboard-management-client';\n\n//#endregion\n\n//#region ----- Task dashboard presets -----\n\n/** Task board list tile. */\nexport const AXP_TASK_BOARD_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 6]],\n md: [\n [3, 4],\n [4, 4],\n ],\n lg: [\n [3, 4],\n [4, 4],\n ],\n xl: [\n [3, 4],\n [4, 4],\n ],\n '2xl': [\n [3, 4],\n [4, 4],\n ],\n '3xl': [\n [3, 4],\n [4, 4],\n ],\n '4xl': [\n [3, 4],\n [4, 4],\n ],\n});\n\n/** Filtered task-board shortcut launcher. */\nexport const AXP_TASK_BOARD_SHORTCUT_DIMENSIONS = defineDashboardWidgetDimensions({\n sm: [[1, 2]],\n md: [\n [2, 2],\n [3, 2],\n ],\n lg: [\n [2, 2],\n [3, 2],\n ],\n xl: [\n [2, 2],\n [3, 2],\n ],\n '2xl': [\n [2, 2],\n [3, 2],\n ],\n '3xl': [\n [2, 2],\n [3, 2],\n ],\n '4xl': [\n [2, 2],\n [3, 2],\n ],\n});\n\n//#endregion\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_DATA_PATH_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXMTaskManagementQueryKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPPriorityFilterKey } from '../../../task-board/task-board.viewmodel';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY } from '../widget-category.type';\nimport { AXP_TASK_MANAGEMENT_DASHBOARD_SUB_SHORTCUT } from '../task-dashboard-widget-subcategories';\nimport { AXP_TASK_BOARD_SHORTCUT_DIMENSIONS } from '../../task-dashboard-widget.dimensions';\n\nconst VALID_PRIORITIES: { 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\nconst VALID_DATE_RANGES: { title: string; name: string }[] = [\n { title: 'Today', name: 'today' },\n { title: 'This Week', name: 'this-week' },\n { title: 'This Month', name: 'this-month' },\n];\n\nexport const AXPTaskBoardShortcut: AXPWidgetConfig = {\n name: RootConfig.widgets.taskBoardShortcut,\n title: '@dashboard:widgets.task-board-shortcut.widget-title',\n description: '@dashboard:widgets.task-board-shortcut.widget-description',\n categories: [AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY],\n subCategory: AXP_TASK_MANAGEMENT_DASHBOARD_SUB_SHORTCUT,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-clipboard-list-check',\n properties: [\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Task Type ======\n {\n order: 0,\n name: 'taskTypes',\n title: '@task-management:task-board.filter.task-type',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'taskTypes',\n path: 'options.taskTypes',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n textField: 'title',\n valueField: 'name',\n dataSource: AXMTaskManagementQueryKeys.ListTaskTypes,\n },\n },\n },\n visible: true,\n },\n // ====== Asigned To ======\n {\n order: 1,\n name: 'assignee',\n title: '@task-management:task-board.filter.assignee',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'assignee',\n path: 'options.assignee',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: AXMTaskManagementQueryKeys.TaskBoardAssignees,\n textField: 'displayName',\n },\n },\n },\n visible: true,\n },\n // ====== Priority ======\n {\n order: 2,\n name: 'priority',\n title: '@task-management:task-board.filter.priority',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'priority',\n path: 'options.priority',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n textField: 'title',\n valueField: 'name',\n dataSource: VALID_PRIORITIES,\n },\n },\n },\n visible: true,\n },\n // ====== Date Range ======\n {\n order: 3,\n name: 'dateRange',\n title: '@task-management:task-board.filter.date-range',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n defaultValue: { title: 'This Month', name: 'this-month' },\n interface: {\n name: 'dateRange',\n path: 'options.dateRange',\n type: AXPWidgetsCatalog.select,\n options: {\n textField: 'title',\n valueField: 'name',\n dataSource: VALID_DATE_RANGES,\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./task-board-shortcut.component').then((c) => c.AXPTaskBoardShortcutViewComponent),\n },\n },\n meta: {\n dimensions: AXP_TASK_BOARD_SHORTCUT_DIMENSIONS,\n },\n};\n","import { AXStyleColorType } from '@acorex/cdk/common';\nimport { AXChipsComponent } from '@acorex/components/chips';\nimport { AXFormatPipe, AXFormatService } from '@acorex/core/format';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport {\n AXTranslationModule,\n AXTranslationService,\n} from '@acorex/core/translation';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { AXMSecurityManagementUsersEntityModel } from '@acorex-platform/module-security-management-client/contracts';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPLayoutBaseWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n output,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { get } from 'lodash';\nimport {\n AXMTaskBoardTaskPopoverOverlayService,\n AXPDueStatusFilterKey,\n AXPDueStatusProviderService,\n AXPPriorityFilterKey,\n AXPTask,\n AXPTaskBoardColorBy,\n AXPTaskBoardService,\n AXPTaskPriority,\n AXPTASK_PRIORITIES,\n buildTaskAccentSurfaceCssClass,\n getDefaultDueStatusDefinitions,\n getTaskPriorityColor,\n getTaskPriorityFilterKey,\n matchesTaskDueStatusFilter,\n resolveTaskBoardAccentColor,\n resolveTaskBoardSchedulerLabels,\n resolveTaskBoardStatusColor,\n TASK_PRIORITY_ORDER,\n} from '../../../task-board';\nimport { AXMTaskBoardSettings } from '@acorex-platform/module-task-management-client/contracts';\n\ntype SortBy = { title: string; name: 'priority' | 'dueDate' };\ntype TaskType = { name: string; title: string; icon: string };\ntype Assignee = AXMSecurityManagementUsersEntityModel & { displayName: string };\n\nconst NO_PRIORITY_KEY: AXPPriorityFilterKey = 'no_priority';\n\nconst PRIORITY_LABEL_KEYS: Record<AXPPriorityFilterKey, string> = {\n urgent: '@task-management:task-board.priority.urgent',\n high: '@task-management:task-board.priority.high',\n normal: '@task-management:task-board.priority.normal',\n low: '@task-management:task-board.priority.low',\n no_priority: '@task-management:task-board.priority.no-priority',\n};\n\n@Component({\n templateUrl: './task-board-widget.component.html',\n styleUrls: ['./task-board-widget.component.css'],\n imports: [\n CommonModule,\n AXFormatPipe,\n AXChipsComponent,\n AXTranslationModule,\n AXPStateMessageComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPTaskBoardWidgetViewComponent extends AXPLayoutBaseWidgetComponent {\n taskClick = output<AXPTask>();\n\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly taskPopoverOverlay = inject(\n AXMTaskBoardTaskPopoverOverlayService,\n );\n private readonly dueStatusProviderService = inject(\n AXPDueStatusProviderService,\n );\n private readonly settingsService = inject(AXPSettingsService);\n private readonly formatService = inject(AXFormatService);\n private readonly translationService = inject(AXTranslationService);\n private readonly localeService = inject(AXLocaleService);\n private readonly destroyRef = inject(DestroyRef);\n\n protected readonly maxItems = computed<number>(\n () => this.options()?.['maxItems'] ?? 10,\n );\n protected readonly assignee = computed<Assignee[]>(\n () => this.options()?.['assignee'] ?? [],\n );\n protected readonly selectedTaskTypes = computed<TaskType[]>(() => {\n const raw = this.options()?.['taskTypes'] ?? this.options()?.['taskType'];\n if (!raw) {\n return [];\n }\n return Array.isArray(raw) ? raw : [raw];\n });\n protected readonly sortBy = computed<SortBy>(\n () => this.options()?.['sortBy'] ?? { title: 'Priority', name: 'priority' },\n );\n protected readonly widgetColorBy = computed<AXPTaskBoardColorBy | undefined>(\n () => this.options()?.['colorBy'] as AXPTaskBoardColorBy | undefined,\n );\n\n private readonly globalColorBy = signal<AXPTaskBoardColorBy>('dueDate');\n private readonly allTasks = signal<AXPTask[]>([]);\n protected readonly selectedPriorities = signal<Set<AXPPriorityFilterKey>>(\n new Set([...AXPTASK_PRIORITIES, NO_PRIORITY_KEY]),\n );\n protected readonly selectedDueStatuses = signal<Set<AXPDueStatusFilterKey>>(\n new Set(getDefaultDueStatusDefinitions().map((item) => item.name)),\n );\n\n protected readonly effectiveColorBy = computed<AXPTaskBoardColorBy>(\n () => this.widgetColorBy() ?? this.globalColorBy(),\n );\n\n protected readonly filteredTasks = computed(() => {\n const tasks = this.allTasks();\n const limit = this.maxItems();\n const selectedTypes = this.selectedTaskTypes();\n const selectedPrioritiesSet = this.selectedPriorities();\n const selectedDueStatusSet = this.selectedDueStatuses();\n\n const selectedTypeNames = new Set(selectedTypes.map((t) => t.name));\n const typeFiltered =\n selectedTypes.length > 0\n ? tasks.filter(\n (task) => task.provider && selectedTypeNames.has(task.provider),\n )\n : tasks;\n\n const priorityFiltered = typeFiltered.filter((task) => {\n const priorityKey = getTaskPriorityFilterKey(task);\n return selectedPrioritiesSet.has(priorityKey);\n });\n\n const dueStatusFiltered = priorityFiltered.filter((task) =>\n matchesTaskDueStatusFilter(task, [...selectedDueStatusSet]),\n );\n\n const sorted = this.sortTasks([...dueStatusFiltered]);\n return sorted.slice(0, limit);\n });\n\n protected readonly priorityBadges = computed(() => {\n const tasks = this.getTypeFilteredTasks();\n\n const counts = [...AXPTASK_PRIORITIES, NO_PRIORITY_KEY].reduce(\n (acc, key) => {\n acc[key] = 0;\n return acc;\n },\n {} as Record<AXPPriorityFilterKey, number>,\n );\n\n for (const task of tasks) {\n counts[getTaskPriorityFilterKey(task)]++;\n }\n\n const priorityBadges = AXPTASK_PRIORITIES.map((priority) => ({\n name: priority,\n label: PRIORITY_LABEL_KEYS[priority],\n count: counts[priority],\n color: getTaskPriorityColor(priority) as AXStyleColorType,\n }));\n\n return [\n ...priorityBadges,\n {\n name: NO_PRIORITY_KEY,\n label: PRIORITY_LABEL_KEYS[NO_PRIORITY_KEY],\n count: counts[NO_PRIORITY_KEY],\n color: 'secondary' as AXStyleColorType,\n },\n ].filter((badge) => badge.count > 0);\n });\n\n protected readonly dueStatusBadges = computed(() => {\n const tasks = this.getTypeFilteredTasks();\n const definitions = getDefaultDueStatusDefinitions();\n\n const counts = definitions.reduce(\n (acc, definition) => {\n acc[definition.name] = 0;\n return acc;\n },\n {} as Record<AXPDueStatusFilterKey, number>,\n );\n\n for (const task of tasks) {\n const key = get(task.data, 'dueStatusKey') as\n | AXPDueStatusFilterKey\n | undefined;\n if (key && key in counts) {\n counts[key]++;\n }\n }\n\n return definitions\n .map((definition) => ({\n name: definition.name,\n label: definition.title,\n count: counts[definition.name],\n color: definition.color as AXStyleColorType,\n }))\n .filter((badge) => badge.count > 0);\n });\n\n protected readonly hasFilterToolbar = computed(\n () => this.priorityBadges().length > 0 || this.dueStatusBadges().length > 0,\n );\n\n protected readonly hasNarrowedFilters = computed(() => {\n const allPriorityCount = AXPTASK_PRIORITIES.length + 1;\n const allDueStatusCount = getDefaultDueStatusDefinitions().length;\n\n return (\n this.selectedPriorities().size < allPriorityCount ||\n this.selectedDueStatuses().size < allDueStatusCount\n );\n });\n\n constructor() {\n super();\n\n void this.settingsService\n .scope(AXPPlatformScope.User)\n .get<AXPTaskBoardColorBy>(AXMTaskBoardSettings.ColorBy)\n .then((value) => {\n if (value) {\n this.globalColorBy.set(value);\n }\n });\n\n this.taskBoardService.refresh$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((data) => {\n void this.handleBoardRefresh(data);\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 #loadTasks = effect(() => {\n this.localeService.activeProfile().localeInfo?.code;\n this.maxItems();\n this.assignee();\n this.selectedTaskTypes();\n this.sortBy();\n void this.reloadTasks();\n });\n\n protected onPriorityFilterChange(priorityKey: AXPPriorityFilterKey): void {\n this.selectedPriorities.update((currentSet) => {\n const newSet = new Set(currentSet);\n if (newSet.has(priorityKey)) {\n newSet.delete(priorityKey);\n } else {\n newSet.add(priorityKey);\n }\n return newSet;\n });\n }\n\n protected onDueStatusFilterChange(dueStatusKey: AXPDueStatusFilterKey): void {\n this.selectedDueStatuses.update((currentSet) => {\n const newSet = new Set(currentSet);\n if (newSet.has(dueStatusKey)) {\n newSet.delete(dueStatusKey);\n } else {\n newSet.add(dueStatusKey);\n }\n return newSet;\n });\n }\n\n protected isPriorityFilterActive(priorityKey: AXPPriorityFilterKey): boolean {\n return this.selectedPriorities().has(priorityKey);\n }\n\n protected isDueStatusFilterActive(\n dueStatusKey: AXPDueStatusFilterKey,\n ): boolean {\n return this.selectedDueStatuses().has(dueStatusKey);\n }\n\n protected resetFilters(): void {\n this.selectedPriorities.set(\n new Set([...AXPTASK_PRIORITIES, NO_PRIORITY_KEY]),\n );\n this.selectedDueStatuses.set(\n new Set(getDefaultDueStatusDefinitions().map((item) => item.name)),\n );\n }\n\n protected async onTaskClick(task: AXPTask, event: MouseEvent): Promise<void> {\n const anchor = event.currentTarget as HTMLElement;\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.taskClick.emit(task);\n }\n\n protected getStatusColor(task: AXPTask): AXStyleColorType {\n return resolveTaskBoardStatusColor(task) as AXStyleColorType;\n }\n\n protected getAccentClass(task: AXPTask): string {\n const colorToken = resolveTaskBoardAccentColor(\n task,\n this.effectiveColorBy(),\n );\n return buildTaskAccentSurfaceCssClass(colorToken);\n }\n\n protected hasExplicitDueDate(task: AXPTask): boolean {\n return get(task.data, 'hasExplicitDueDate') === true;\n }\n\n protected getProviderTitle(task: AXPTask): string | null {\n if (!task.provider) {\n return null;\n }\n\n return (\n this.taskBoardService.getTaskTypeOption(task.provider)?.title ?? null\n );\n }\n\n protected getProviderIcon(task: AXPTask): string {\n if (!task.provider) {\n return 'fa-light fa-layer-group';\n }\n\n return (\n this.taskBoardService.getTaskTypeOption(task.provider)?.icon ??\n 'fa-light fa-layer-group'\n );\n }\n\n private getTypeFilteredTasks(): AXPTask[] {\n const tasks = this.allTasks();\n const selectedTypes = this.selectedTaskTypes();\n const selectedTypeNames = new Set(selectedTypes.map((t) => t.name));\n\n return selectedTypes.length > 0\n ? tasks.filter(\n (task) => task.provider && selectedTypeNames.has(task.provider),\n )\n : tasks;\n }\n\n private async handleBoardRefresh(data?: {\n provider?: string;\n }): Promise<void> {\n const active = this.taskPopoverOverlay.getActiveTask();\n if (\n data?.provider &&\n active?.provider &&\n data.provider !== active.provider\n ) {\n return;\n }\n\n this.taskBoardService.invalidateTaskCache();\n await this.reloadTasks();\n\n if (!active?.provider) {\n return;\n }\n\n const updated = this.allTasks().find((task) => task.id === active.id);\n if (updated) {\n await this.taskPopoverOverlay.refreshTask({\n ...updated,\n provider: active.provider,\n });\n return;\n }\n\n this.taskPopoverOverlay.close();\n }\n\n private reloadTasks(): Promise<void> {\n const limit = this.maxItems();\n const assignee = this.assignee();\n const selectedTypes = this.selectedTaskTypes();\n const typeNames = selectedTypes.map((t) => t.name);\n\n return this.taskBoardService\n .getTasks({\n take: limit,\n assigneeIds: assignee.map((a) => a.id),\n types: typeNames,\n })\n .then(async (tasks) => {\n const labeled = await resolveTaskBoardSchedulerLabels(\n tasks.items,\n this.translationService,\n this.formatService,\n this.settingsService,\n );\n const enriched = labeled.map((task) =>\n this.dueStatusProviderService.attachDueStatusToTask(task),\n );\n this.allTasks.set(enriched);\n });\n }\n\n private compareByPriority(a: AXPTask, b: AXPTask): number {\n const priorityA = getTaskPriorityFilterKey(a);\n const priorityB = getTaskPriorityFilterKey(b);\n return TASK_PRIORITY_ORDER[priorityA] - TASK_PRIORITY_ORDER[priorityB];\n }\n\n private compareByDueDate(a: AXPTask, b: AXPTask): number {\n const now = Date.now();\n const dateA =\n this.hasExplicitDueDate(a) && a.endDate\n ? new Date(a.endDate).getTime()\n : null;\n const dateB =\n this.hasExplicitDueDate(b) && b.endDate\n ? new Date(b.endDate).getTime()\n : null;\n\n if (dateA === null && dateB === null) {\n return 0;\n }\n if (dateA === null) {\n return 1;\n }\n if (dateB === null) {\n return -1;\n }\n\n return dateA - dateB;\n }\n\n private sortTasks(\n tasks: AXPTask<Record<string, unknown>>[],\n ): AXPTask<Record<string, unknown>>[] {\n const sortBy = this.sortBy().name;\n return tasks.sort((a, b) => {\n if (sortBy === 'priority') {\n const priorityCompare = this.compareByPriority(a, b);\n if (priorityCompare !== 0) {\n return priorityCompare;\n }\n return this.compareByDueDate(a, b);\n }\n\n const dateCompare = this.compareByDueDate(a, b);\n if (dateCompare !== 0) {\n return dateCompare;\n }\n return this.compareByPriority(a, b);\n });\n }\n}\n","<div class=\"size-full p-3 flex flex-col gap-3\">\n @if (hasFilterToolbar()) {\n <section class=\"__filters\">\n @if (priorityBadges().length > 0) {\n <div class=\"__filter-group\">\n <span class=\"__filter-label\">\n {{\n '@task-management:task-board.filter.priority' | translate | async\n }}\n </span>\n <div class=\"__filter-chips\">\n @for (badge of priorityBadges(); track badge.name) {\n <ax-chips\n [color]=\"badge.color\"\n class=\"filter-badge ax-sm\"\n [class.--active]=\"isPriorityFilterActive(badge.name)\"\n [text]=\"\n ((badge.label | translate | async) ?? '') +\n ' (' +\n badge.count +\n ')'\n \"\n (click)=\"onPriorityFilterChange(badge.name)\"\n [look]=\"\n isPriorityFilterActive(badge.name) ? 'solid' : 'outline'\n \"\n ></ax-chips>\n }\n </div>\n </div>\n }\n\n @if (dueStatusBadges().length > 0) {\n <div class=\"__filter-group\">\n <span class=\"__filter-label\">\n {{\n '@task-management:task-board.filter.due-status'\n | translate\n | async\n }}\n </span>\n <div class=\"__filter-chips\">\n @for (badge of dueStatusBadges(); track badge.name) {\n <ax-chips\n [color]=\"badge.color\"\n class=\"filter-badge ax-sm\"\n [class.--active]=\"isDueStatusFilterActive(badge.name)\"\n [text]=\"\n ((badge.label | translate | async) ?? '') +\n ' (' +\n badge.count +\n ')'\n \"\n (click)=\"onDueStatusFilterChange(badge.name)\"\n [look]=\"\n isDueStatusFilterActive(badge.name) ? 'solid' : 'outline'\n \"\n ></ax-chips>\n }\n </div>\n </div>\n }\n </section>\n\n @if (hasNarrowedFilters()) {\n <button type=\"button\" class=\"__filter-reset\" (click)=\"resetFilters()\">\n <i class=\"fa-light fa-arrow-rotate-left\" aria-hidden=\"true\"></i>\n <span>{{ '@acorex:common.general.clear' | translate | async }}</span>\n </button>\n }\n }\n\n <div class=\"overflow-auto overflow-x-hidden grow min-h-0\">\n <div class=\"__list\">\n @for (task of filteredTasks(); track task.id) {\n <div class=\"__item\" (click)=\"onTaskClick(task, $event)\">\n <div\n class=\"__accent\"\n [ngClass]=\"getAccentClass(task)\"\n aria-hidden=\"true\"\n ></div>\n\n <div class=\"__content\">\n <div class=\"__header\">\n <p class=\"__title\" [title]=\"task.title\">{{ task.title }}</p>\n\n @if (task.status.title) {\n <ax-chips\n class=\"__status-chip ax-sm\"\n [look]=\"'twotone'\"\n [color]=\"getStatusColor(task)\"\n [text]=\"(task.status.title | translate | async)!\"\n ></ax-chips>\n }\n </div>\n\n <div class=\"__meta\">\n @if (getProviderTitle(task); as providerTitle) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.type'\n | translate\n | async\n \"\n >\n <i [class]=\"getProviderIcon(task)\" aria-hidden=\"true\"></i>\n <span>{{ providerTitle | translate | async }}</span>\n </span>\n }\n\n @if (hasExplicitDueDate(task) && task.endDate) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.due-date'\n | translate\n | async\n \"\n >\n <i class=\"fa-light fa-calendar\" aria-hidden=\"true\"></i>\n <span>{{\n task.endDate\n | format: 'datetime' : { format: 'datetime' }\n | async\n }}</span>\n </span>\n } @else if (task.createdAt) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.received'\n | translate\n | async\n \"\n >\n <i class=\"fa-light fa-inbox\" aria-hidden=\"true\"></i>\n <span>{{\n task.createdAt\n | format: 'datetime' : { format: 'datetime' }\n | async\n }}</span>\n </span>\n }\n\n @if (task.reporter.fullName) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.reporter'\n | translate\n | async\n \"\n >\n <i class=\"fa-light fa-user-pen\" aria-hidden=\"true\"></i>\n <span>{{ task.reporter.fullName }}</span>\n </span>\n } @else if (task.assignee; as assignee) {\n @if (assignee.fullName) {\n <span\n class=\"__meta-item\"\n [title]=\"\n '@task-management:task-board.grid-headers.assignee'\n | translate\n | async\n \"\n >\n <i class=\"fa-light fa-user\" aria-hidden=\"true\"></i>\n <span>{{ assignee.fullName }}</span>\n </span>\n }\n }\n </div>\n </div>\n </div>\n } @empty {\n <axp-state-message\n icon=\"fa-light fa-clipboard-list-check\"\n [title]=\"'@dashboard:task-board.no-tasks-found.title'\"\n [description]=\"'@dashboard:task-board.no-tasks-found.description'\"\n ></axp-state-message>\n }\n </div>\n </div>\n</div>\n","import { AXPWidgetConfig, AXPWidgetGroupEnum, cloneProperty } from '@acorex-platform/framework-shared/widget-core';\nimport { AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY } from '../widget-category.type';\nimport { AXP_TASK_MANAGEMENT_DASHBOARD_SUB_BOARD } from '../task-dashboard-widget-subcategories';\nimport { AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';\n\nimport { AXP_APPEARANCE_PROPERTY_GROUP, AXP_DATA_PATH_PROPERTY } from '@acorex-platform/framework-client/layout/widgets';\nimport { AXMTaskManagementQueryKeys } from '@acorex-platform/module-task-management-client/contracts';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXP_TASK_BOARD_DIMENSIONS } from '../../task-dashboard-widget.dimensions';\n\nexport const AXPTaskBoardWidget: AXPWidgetConfig = {\n name: RootConfig.widgets.taskBoard,\n title: '@dashboard:widgets.task-board-widget.widget-title',\n description: '@dashboard:widgets.task-board-widget.widget-description',\n categories: [AXP_TASK_MANAGEMENT_DASHBOARD_WIDGET_CATEGORY],\n subCategory: AXP_TASK_MANAGEMENT_DASHBOARD_SUB_BOARD,\n groups: [AXPWidgetGroupEnum.DashboardWidget],\n type: 'dashboard',\n icon: 'fa-light fa-clipboard-list-check',\n properties: [\n cloneProperty(AXP_DATA_PATH_PROPERTY, { visible: false }),\n // ====== Title ======\n {\n order: 1,\n name: 'title',\n title: '@dashboard:task-board.task-board-title',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n defaultValue: 'Task Board',\n interface: {\n name: 'title',\n path: 'options.title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: '@dashboard:widgets.task-board-widget.title-placeholder',\n },\n triggers: [\n {\n event: `{{ events.context('options.taskTypes') }}`,\n action: `{{ widget.setValue(widget.find(\"taskTypes\").output('item').title==='All' ? 'Task Board' : widget.find(\"taskTypes\").output('item').title) }}`,\n },\n ],\n },\n },\n visible: true,\n },\n // ====== Task Type ======\n {\n order: 0,\n name: 'taskTypes',\n title: '@task-management:task-board.filter.task-type',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'taskTypes',\n path: 'options.taskTypes',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n textField: 'title',\n valueField: 'name',\n dataSource: AXMTaskManagementQueryKeys.ListTaskTypes,\n },\n },\n },\n visible: true,\n },\n // ====== Sort By ======\n {\n name: 'sortBy',\n title: '@dashboard:task-board.sort-by',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n defaultValue: { title: 'Priority', name: 'priority' },\n interface: {\n name: 'sortBy',\n path: 'options.sortBy',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n dataSource: [\n { title: 'Priority', name: 'priority' },\n { title: 'Due Date', name: 'dueDate' },\n ],\n multiple: false,\n direction: 'horizontal',\n },\n },\n },\n visible: true,\n },\n // ====== Color By ======\n {\n name: 'colorBy',\n title: '@dashboard:task-board.color-by',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'string',\n interface: {\n name: 'colorBy',\n path: 'options.colorBy',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'name',\n textField: 'title',\n allowClear: true,\n dataSource: [\n { title: 'Due Date', name: 'dueDate' },\n { title: 'Priority', name: 'priority' },\n { title: 'Status', name: 'status' },\n ],\n },\n },\n },\n visible: true,\n },\n // ====== Display options ======\n {\n name: 'maxItems',\n title: '@dashboard:task-board.max-items',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n defaultValue: 10,\n dataType: 'number',\n interface: {\n name: 'maxItems',\n path: 'options.maxItems',\n type: AXPWidgetsCatalog.number,\n options: {\n minValue: 1,\n maxValue: 50,\n },\n },\n },\n visible: true,\n },\n // ====== Asigned To ======\n {\n name: 'assignee',\n title: '@dashboard:task-board.asigned-to',\n group: AXP_APPEARANCE_PROPERTY_GROUP,\n schema: {\n dataType: 'object',\n interface: {\n name: 'assignee',\n path: 'options.assignee',\n type: AXPWidgetsCatalog.select,\n options: {\n multiple: true,\n valueField: 'id',\n allowSearch: true,\n dataSource: AXMTaskManagementQueryKeys.TaskBoardAssignees,\n textField: 'displayName',\n },\n },\n },\n visible: true,\n },\n ],\n components: {\n view: {\n component: () => import('./task-board-widget.component').then((c) => c.AXPTaskBoardWidgetViewComponent),\n },\n },\n meta: {\n dimensions: AXP_TASK_BOARD_DIMENSIONS,\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex-platform/framework-client/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXPTaskBoardShortcut } from './features/dashboard/widgets/shortcut';\nimport { AXPTaskBoardWidget } from './features/dashboard/widgets/task-board';\n\n//#endregion\n\n//#region ---- Task Management Widgets Provider ----\n\nconst TASK_WIDGETS = [AXPTaskBoardWidget, AXPTaskBoardShortcut];\n\n@Injectable()\nexport class AXMTaskManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return TASK_WIDGETS;\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPPermissionDefinitionProvider,\n AXPPermissionDefinitionProviderContext,\n} from '@acorex-platform/framework-client/auth';\nimport {\n AXPCommonPermissionGroupKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport {\n AXPProjectsWorkPermissionKeys\n} from '@acorex-platform/module-task-management-client/contracts';\n\nimport { Injectable } from '@angular/core';\n\n//#endregion\n\n//#region ---- Permission Definition Provider ----\n\n/**\n * Registers task capabilities into the shared Projects & Work group.\n */\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXPProjectsWorkPermissionKeys;\n const groups = AXPCommonPermissionGroupKeys;\n const P = '@common:projects-work.permissions';\n const G = '@common:permission-groups';\n\n context.addGroup(groups.ProjectsWork.Root, `${G}.projects-work.title`, `${G}.projects-work.description`, { order: 60 });\n\n context\n .addGroup(\n groups.ProjectsWork.Tasks,\n `${G}.projects-work-tasks.title`,\n `${G}.projects-work-tasks.description`,\n { parent: groups.ProjectsWork.Root, order: 20 },\n )\n .addPermission(keys.MaintainTasks, `${P}.maintain-tasks.title`, `${P}.maintain-tasks.description`)\n .endPermission()\n .addPermission(keys.ViewAllTasks, `${P}.view-all-tasks.title`, `${P}.view-all-tasks.description`)\n .endPermission()\n .endGroup();\n }\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXPSessionService, AXPSessionStatus } from '@acorex-platform/framework-client/auth';\nimport {\n AXPBroadcastEventService,\n AXPEntityBroadcastService,\n} from '@acorex-platform/framework-client/core';\nimport { AXPTaskBadgeProvider } from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPCommandEventsService,\n type AXPCommandExecutionEvent,\n} from '@acorex-platform/framework-client/runtime';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { get } from 'lodash';\nimport { debounceTime, distinctUntilChanged, filter, Subject } from 'rxjs';\nimport { isTaskBoardRealtimeEntity, TASK_BOARD_TASK_ENTITY } from './features/task-board/task-board-realtime-entities';\nimport { AXPTaskBoardService } from './features/task-board/task-board.service';\n\n//#endregion\n\n//#region ----- Constants -----\n\n/** Menu `badgeKey` for Task Board. */\nexport const AXM_TASK_BOARD_BADGE_KEY = 'task-management-task-board-badge';\n\nconst TASK_MANAGEMENT_COMMAND_PREFIX = `${RootConfig.module.name}.`;\nconst WORKFLOW_MANAGEMENT_COMMAND_PREFIX = 'WorkflowManagement.';\n\n//#endregion\n\n//#region ----- Task badge provider -----\n\n/**\n * Shows the current user's assigned task count on the Task Board menu item.\n *\n * On user switch: clears the badge immediately, invalidates task cache, and refetches.\n * In-flight counts from a previous user are ignored.\n *\n * Refreshes after:\n * - task-management / workflow-management commands\n * - entity CRUD for Task (`Entity:Insert:Default` etc.)\n * - realtime `entity.mutation` → layout refresh broadcast for Task, TaskAssignment, WorkflowInstance\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMTaskBoardBadgeProvider extends AXPTaskBadgeProvider {\n //#region ----- Services & Dependencies -----\n\n private readonly taskBoardService = inject(AXPTaskBoardService);\n private readonly sessionService = inject(AXPSessionService);\n private readonly commandEvents = inject(AXPCommandEventsService);\n private readonly entityBroadcast = inject(AXPEntityBroadcastService);\n private readonly eventService = inject(AXPBroadcastEventService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ----- Signals & Properties -----\n\n readonly key = AXM_TASK_BOARD_BADGE_KEY;\n readonly count = signal(0);\n\n /** Bumped on every refresh so stale async results cannot overwrite a newer user/session. */\n private refreshGeneration = 0;\n\n /** Collapses task, instance, and layout events from one workflow step into a single count. */\n private readonly queuedRefresh = new Subject<void>();\n\n //#endregion\n\n constructor() {\n super();\n\n this.queuedRefresh.pipe(debounceTime(300), takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n void this.refresh();\n });\n\n // User switch / login: update immediately (no debounce).\n this.sessionService.user$\n .pipe(\n distinctUntilChanged((prev, next) => prev?.id === next?.id),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((user) => {\n // Clear stale badge from previous user right away.\n this.count.set(0);\n if (user?.id != null) {\n void this.refresh({ resetProviders: true });\n }\n });\n\n // After auth completes (login / user switch), refetch even if user id was already streamed.\n this.sessionService.status$\n .pipe(\n filter((status) => status === AXPSessionStatus.Authenticated),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(() => {\n // Touch getter so storage-synced user switches emit on user$ when needed.\n const userId = this.sessionService.user?.id;\n if (userId != null) {\n void this.refresh({ resetProviders: true });\n } else {\n this.count.set(0);\n }\n });\n\n const unsubscribeCommands = this.commandEvents.listen((event) => {\n if (this.isRelevantCommandEvent(event)) {\n this.handleCommandEvent(event);\n }\n });\n\n this.eventService\n .listen('task-board.refresh')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.queuedRefresh.next();\n });\n\n this.taskBoardService.refresh$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.queuedRefresh.next();\n });\n\n const layoutSub = this.entityBroadcast.listenLayoutRefresh().subscribe(({ data }) => {\n if (isTaskBoardRealtimeEntity(data?.name)) {\n this.queuedRefresh.next();\n }\n });\n\n this.destroyRef.onDestroy(() => {\n unsubscribeCommands();\n layoutSub.unsubscribe();\n });\n }\n\n //#region ----- Badge actions -----\n\n async refresh(options?: { resetProviders?: boolean }): Promise<void> {\n const generation = ++this.refreshGeneration;\n const currentUserId = this.sessionService.user?.id;\n\n if (currentUserId == null) {\n if (generation === this.refreshGeneration) {\n this.count.set(0);\n }\n return;\n }\n\n this.taskBoardService.invalidateTaskCache();\n\n try {\n if (options?.resetProviders) {\n await this.taskBoardService.resolveProviders({ force: true });\n }\n\n // Do not pass a small `take`: multi-provider merge uses client-side length as total.\n const result = await this.taskBoardService.getTasks({\n assigneeIds: [currentUserId],\n });\n\n if (generation !== this.refreshGeneration) {\n return;\n }\n if (this.sessionService.user?.id !== currentUserId) {\n return;\n }\n\n this.count.set(result.total ?? 0);\n } catch {\n if (generation === this.refreshGeneration) {\n this.count.set(0);\n }\n }\n }\n\n private isRelevantCommandEvent(event: AXPCommandExecutionEvent): boolean {\n if (\n event.key.startsWith(TASK_MANAGEMENT_COMMAND_PREFIX) ||\n event.key.startsWith(WORKFLOW_MANAGEMENT_COMMAND_PREFIX)\n ) {\n return true;\n }\n\n const input = event.input as Record<string, unknown> | undefined;\n const entity = get(input, 'entity');\n if (entity === TASK_BOARD_TASK_ENTITY) {\n return true;\n }\n\n const entityInfo = get(input, 'entityInfo') as Record<string, unknown> | undefined;\n return (\n get(entityInfo, 'source') === TASK_BOARD_TASK_ENTITY ||\n (get(entityInfo, 'module') === RootConfig.module.name &&\n get(entityInfo, 'name') === RootConfig.entities.task.name)\n );\n }\n\n private handleCommandEvent(event?: AXPCommandExecutionEvent): void {\n if (!event || event.stage !== 'after' || !event.success) {\n return;\n }\n if (this.commandSkipsTaskRefresh(event)) {\n return;\n }\n this.queuedRefresh.next();\n }\n\n /** Cancelled or unchanged commands must not reload the task board. */\n private commandSkipsTaskRefresh(event: AXPCommandExecutionEvent): boolean {\n const metadata = event.result?.metadata;\n if (metadata?.['refresh'] === false) {\n return true;\n }\n const outcome = metadata?.['outcome'];\n return typeof outcome === 'string' && outcome.toLowerCase() === 'cancelled';\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXPSessionService } from '@acorex-platform/framework-client/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext, AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport {\n AXPCommonMenuKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { inject } from '@angular/core';\nimport {\n AXMTaskBoardSettings,\n AXPProjectsWorkPermissionKeys,\n AXPTaskManagementMenuKeys,\n RootConfig,\n} from '@acorex-platform/module-task-management-client/contracts';\nimport { AXM_TASK_BOARD_BADGE_KEY } from './badge.provider';\nimport { buildTaskBoardMenuPath } from './features/task-board/task-board-menu-path.utils';\nimport type {\n AXPTaskBoardCalendarLayout,\n AXPTaskBoardTableLayout,\n AXPTaskBoardTimelineLayout,\n} from './features/task-board/task-board-view-category.utils';\n\nexport class AXMTaskManagementMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n private sessionService = inject(AXPSessionService);\n private settingsService = inject(AXPSettingsService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n const keys = AXPProjectsWorkPermissionKeys;\n const applicationName = this.sessionService.application?.name ?? '';\n const taskBoardPath = await this.resolveTaskBoardMenuPath(applicationName, module.name);\n\n context.addItems([\n {\n name: AXPTaskManagementMenuKeys.TaskBoard,\n priority: 0,\n text: '@task-management:task-board.page-title',\n type: 'menu',\n icon: 'fa-light fa-list-check',\n path: taskBoardPath,\n badgeKey: AXM_TASK_BOARD_BADGE_KEY,\n policy: {\n features: [module.name],\n permissions: [keys.MaintainTasks],\n },\n },\n // {\n // name: AXPTaskManagementMenuKeys.Cartable,\n // text: '@task-management:cartable.menu-title',\n // type: 'menu',\n // icon: 'fa-light fa-inbox',\n // path: `${this.sessionService.application?.name}/${RootConfig.module.name}/cartable`,\n // policy: {\n // features: [module.name],\n // },\n // },\n // {\n // name: AXPTaskManagementMenuKeys.Root,\n // priority: 9003,\n // text: '@task-management:root-menu',\n // icon: module.icon,\n // children: [\n // {\n // name: AXPTaskManagementMenuKeys.Tasks,\n // text: '@task-management:task.plural-title',\n // path: this.entityService.createPath(module.name, RootConfig.entities.task.name),\n // icon: RootConfig.entities.task.icon,\n // priority: 1,\n // },\n // {\n // name: AXPTaskManagementMenuKeys.TaskTemplates,\n // text: '@task-management:task-template.plural-title',\n // path: this.entityService.createPath(module.name, RootConfig.entities.taskTemplate.name),\n // icon: RootConfig.entities.taskTemplate.icon,\n // priority: 2,\n // },\n // {\n // text: ``,\n // type: 'break',\n // priority: 5,\n // },\n // {\n // name: AXPTaskManagementMenuKeys.TaskTypes,\n // text: '@task-management:task-type.plural-title',\n // path: this.entityService.createPath(module.name, RootConfig.entities.taskType.name),\n // icon: RootConfig.entities.taskType.icon,\n // priority: 6,\n // },\n // ],\n // },\n ]);\n\n context.find(AXPCommonMenuKeys.Projects).addItems([\n {\n name: `${AXPTaskManagementMenuKeys.TaskTypes}:divider`,\n text: '',\n type: 'break',\n priority: 5,\n },\n {\n name: AXPTaskManagementMenuKeys.TaskTypes,\n text: RootConfig.entities.taskType.titlePlural,\n icon: RootConfig.entities.taskType.icon,\n priority: 10,\n path: this.entityService.createPath(module.name, RootConfig.entities.taskType.name),\n policy: {\n features: [module.name],\n permissions: [keys.Setup],\n },\n },\n ]);\n }\n\n private async resolveTaskBoardMenuPath(applicationName: string, moduleName: string): Promise<string> {\n const userSettings = this.settingsService.scope(AXPPlatformScope.User);\n const [viewMode, calendarLayout, timelineLayout, tableLayout] = await Promise.all([\n userSettings.get<string | undefined>(AXMTaskBoardSettings.ViewMode),\n userSettings.get<AXPTaskBoardCalendarLayout | undefined>(AXMTaskBoardSettings.CalendarLayout),\n userSettings.get<AXPTaskBoardTimelineLayout | undefined>(AXMTaskBoardSettings.TimelineLayout),\n userSettings.get<AXPTaskBoardTableLayout | undefined>(AXMTaskBoardSettings.TableLayout),\n ]);\n\n return buildTaskBoardMenuPath(applicationName, moduleName, viewMode, {\n calendar: calendarLayout,\n timeline: timelineLayout,\n table: tableLayout,\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex-platform/framework-client/common';\nimport { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXMTaskBoardSettings } from '@acorex-platform/module-task-management-client/contracts';\n\n//#endregion\n\n//#region ---- Settings Provider ----\n\nconst I18N = `@${RootConfig.config.i18n}:settings`;\n\nexport class AXMSettingProvider implements AXPSettingDefinitionProvider {\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n context\n .addGroup(\n 'task-management',\n `${I18N}.task-management.group.nav-title`,\n `${I18N}.task-management.group.description`,\n RootConfig.module.icon,\n `${I18N}.task-management.group.title`,\n 90,\n )\n .addSection(\n 'taskboard',\n `${I18N}.task-management.taskboard.section.title`,\n `${I18N}.task-management.taskboard.section.description`,\n )\n .addSetting({\n key: AXMTaskBoardSettings.VisibleCalendar,\n title: `${I18N}.task-management.taskboard.parts.calendar.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.task-management.taskboard.parts.calendar.description`,\n })\n .addSetting({\n key: AXMTaskBoardSettings.VisibleTimeline,\n title: `${I18N}.task-management.taskboard.parts.timeline.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.task-management.taskboard.parts.timeline.description`,\n })\n .addSetting({\n key: AXMTaskBoardSettings.VisibleTable,\n title: `${I18N}.task-management.taskboard.parts.table.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.task-management.taskboard.parts.table.description`,\n })\n .addSetting({\n key: AXMTaskBoardSettings.VisibleKanban,\n title: `${I18N}.task-management.taskboard.parts.kanban.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: true,\n widget: { type: AXPWidgetsList.Editors.ToggleSwitch },\n description: `${I18N}.task-management.taskboard.parts.kanban.description`,\n })\n .addSetting({\n key: AXMTaskBoardSettings.ColorBy,\n title: `${I18N}.task-management.taskboard.color-by.title`,\n scope: 'U',\n overridableAt: [],\n isInherited: true,\n defaultValue: 'dueDate',\n widget: {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'name',\n textField: 'title',\n dataSource: [\n { name: 'dueDate', title: `${I18N}.task-management.taskboard.color-by.due-date` },\n { name: 'priority', title: `${I18N}.task-management.taskboard.color-by.priority` },\n { name: 'status', title: `${I18N}.task-management.taskboard.color-by.status` },\n ],\n },\n },\n description: `${I18N}.task-management.taskboard.color-by.description`,\n })\n .endSection()\n .endGroup();\n }\n}\n\n//#endregion\n","import { RootConfig } from '@acorex-platform/module-task-management-client/contracts';\nimport { AXPSearchCommandProvider, AXPSearchResult } from '@acorex-platform/framework-client/common';\n\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [\n // {\n // group: 'command',\n // title: 'New Form Template',\n // icon: RootConfig.entities.template.icon,\n // description: 'Create a new form template for designing reusable forms.', // Added description\n // commands: {\n // 'create-entity': {\n // entity: `${RootConfig.module.name}.${RootConfig.entities.template.name}`,\n // },\n // },\n // }\n ];\n}\n","//#region ---- Imports ----\n\nimport type { AXPCatalogScopeDefinition, AXPCatalogScopeDefinitionProvider } from '@acorex-platform/framework-client/core';\nimport { Injectable } from '@angular/core';\nimport { TASK_MANAGEMENT_CATALOG_SCOPE_TASKS } from '@acorex-platform/module-task-management-client/contracts';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst WORKFLOW_DEFINITION = 'WorkflowManagement.WorkflowDefinition';\n\n//#endregion\n\n//#region ---- Provider ----\n\n@Injectable()\nexport class AXMTaskManagementCatalogScopeDefinitionProvider implements AXPCatalogScopeDefinitionProvider {\n async items(): Promise<AXPCatalogScopeDefinition[]> {\n return [\n {\n name: TASK_MANAGEMENT_CATALOG_SCOPE_TASKS,\n title: '@task-management:catalog-scopes.tasks.title',\n description: '@task-management:catalog-scopes.tasks.description',\n targets: [WORKFLOW_DEFINITION],\n icon: 'fa-light fa-clipboard-check',\n cssClass: 'primary-lighter-surface',\n order: 20,\n },\n ];\n }\n}\n\n//#endregion\n","import { AXPRuntimeModule, provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXPTaskManagementCommandKeys } from '@acorex-platform/module-task-management-client/contracts';\n\n@NgModule({\n imports: [CommonModule, AXPRuntimeModule],\n providers: [\n provideCommandSetups([\n {\n key: AXPTaskManagementCommandKeys.Task.StartFlow,\n command: () => import('./commands/start-task-flow.command').then((c) => c.StartTaskFlowCommand),\n },\n ]),\n ],\n})\nexport class AXMTaskFeatureModule {}\n","import { AXP_CATALOG_SCOPE_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXP_MENU_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/auth';\nimport { AXP_TASK_BADGE_PROVIDERS } from '@acorex-platform/framework-client/layout/components';\n\nimport { AXPTaskBoardModule } from './features/task-board/task-board.module';\nimport { AXP_WORKFLOW_TASK_PROVIDER } from './features/task-board/task-board.types';\n\n// Services\nimport { AXMCalendarManagementModule } from '@acorex-platform/module-calendar-management-client';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXMTaskManagementWidgetsProvider } from './widget-definition.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMTaskBoardBadgeProvider } from './badge.provider';\nimport { AXMTaskManagementMenuProvider } from './menu.provider';\n\nimport { AXMSettingProvider } from './setting.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\nimport { AXMTaskManagementCatalogScopeDefinitionProvider } from './catalog-scope-definition.provider';\nimport { AXMTaskFeatureModule } from './features/task/task-feature.module';\nimport { AXPTaskManagementEntityTaskProvider } from './features/task-board/entity-task.provider';\n\n@NgModule({\n imports: [\n CommonModule,\n AXPTaskBoardModule,\n AXMCalendarManagementModule,\n AXPWidgetCoreModule,\n AXMTaskFeatureModule,\n ],\n providers: [\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMTaskManagementMenuProvider,\n multi: true,\n },\n {\n // useExisting keeps a single root instance (avoids a second copy that never refreshes).\n provide: AXP_TASK_BADGE_PROVIDERS,\n useExisting: AXMTaskBoardBadgeProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMSettingProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_WIDGET_DEFINITION_PROVIDER,\n useClass: AXMTaskManagementWidgetsProvider,\n multi: true,\n },\n {\n provide: AXP_CATALOG_SCOPE_DEFINITION_PROVIDER,\n useClass: AXMTaskManagementCatalogScopeDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_WORKFLOW_TASK_PROVIDER,\n multi: true,\n useClass: AXPTaskManagementEntityTaskProvider,\n },\n ],\n})\nexport class AXMTaskManagementModule { }\n","//#region ----- Imports -----\n\nimport type { AXMCommonDashboardEntityModel } from '@acorex-platform/module-dashboard-management-client/contracts';\nimport { layoutFromDimensions } from '@acorex-platform/module-dashboard-management-client';\n\nimport { AXP_TASK_BOARD_DIMENSIONS, AXP_TASK_BOARD_SHORTCUT_DIMENSIONS } from './task-dashboard-widget.dimensions';\n\n//#endregion\n\n//#region ----- Types -----\n\ntype DashboardSeedWidget = AXMCommonDashboardEntityModel['widgets'][number];\ntype DashboardSeedGridSize = readonly [width: number, height: number];\n\n//#endregion\n\n//#region ----- Builders -----\n\nexport function buildTaskBoardWidget(\n id: string,\n x: number,\n y: number,\n size: DashboardSeedGridSize = [6, 4],\n title = 'Tasks',\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_TASK_BOARD_DIMENSIONS, { x, y, lg: size });\n\n return {\n config: { ...config, title },\n node: {\n type: 'TaskManagement:Widget:Dashboard:TaskBoard',\n options: { title, maxItems: 10 },\n meta,\n name: `TaskManagement:Widget:Dashboard:TaskBoard-${id}`,\n path: `TaskManagement:Widget:Dashboard:TaskBoard-${id}`,\n },\n };\n}\n\nexport function buildTaskBoardShortcutWidget(\n id: string,\n x: number,\n y: number,\n size: DashboardSeedGridSize = [3, 2],\n): DashboardSeedWidget {\n const { config, meta } = layoutFromDimensions(id, AXP_TASK_BOARD_SHORTCUT_DIMENSIONS, { x, y, lg: size });\n\n return {\n config,\n node: {\n type: 'TaskManagement:Widget:Dashboard:TaskBoardShortcut',\n options: {\n dateRange: { title: 'This Month', name: 'this-month' },\n },\n meta,\n name: `TaskManagement:Widget:Dashboard:TaskBoardShortcut-${id}`,\n path: `TaskManagement:Widget:Dashboard:TaskBoardShortcut-${id}`,\n },\n };\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i1","i3","i2"],"mappings":"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"}
|