import { ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnInit, QueryList, SimpleChanges } from '@angular/core'; import { DatePipe } from '@angular/common'; import { BsModalService } from 'ngx-bootstrap/modal'; import { BsDatepickerConfig, BsDatepickerViewMode } from 'ngx-bootstrap/datepicker'; import * as i0 from "@angular/core"; export interface TaskCalendarEmployee { id: string; _id: string; full_name?: string; name?: string; profile_pictures?: Array<{ path: string; }>; department?: Array<{ department_name: string; }>; designation?: { designation_name: string; }; } export interface TaskCalendarTask { _id: string; task_name: string; summary: string; description?: string; status: string; priority?: string; start_date?: string; end_date?: string; due_date?: string; created_at?: string; updated_at?: string; assignee?: Array<{ _id: string; id: string; full_name?: string; name?: string; profile_pictures?: Array<{ path: string; }>; department?: Array<{ department_name: string; }>; designation?: { designation_name: string; }; }>; reporter?: { _id: string; full_name?: string; name?: string; }; comment_count?: number; progressPercentage?: number; ParentTask?: { _id: string; task_name: string; __typename?: string; }; sub_task?: TaskCalendarTask[]; isSubtask?: boolean; level?: number; hasSubtasks?: boolean; subtaskCount?: number; completedSubtasks?: number; totalSubtasks?: number; no_sub_task?: number; startTime?: string; endTime?: string; eventType?: 'birthday' | 'leave' | 'holiday' | 'task'; isEvent?: boolean; isReadOnly?: boolean; color_code?: string; icon?: string; } export interface TaskCalendarData { employees: TaskCalendarEmployee[]; tasks: TaskCalendarTask[]; } export declare enum TaskCalendarView { Week = "week", Day = "day", Month = "month" } export interface TaskCalendarConfig { enableDragDrop?: boolean; enableTaskCreation?: boolean; enableTaskEditing?: boolean; enableTaskDeletion?: boolean; showPriority?: boolean; showStatus?: boolean; maxTasksPerCell?: number; viewMode?: 'employee-based' | 'task-based'; enableSubtasks?: boolean; maxSubtaskDepth?: number; showSubtaskProgress?: boolean; enableSubtaskDragDrop?: boolean; subtaskIndentSize?: number; showSubtaskCount?: boolean; enableBulkSubtaskOperations?: boolean; showComments?: boolean; showProgressBar?: boolean; showDeadline?: boolean; enableFiltering?: boolean; } export interface TaskCalendarPagination { total_item?: number; per_page: number; total_page?: number; current_page: number; previous_page: number; } export declare class TaskCalendarComponent implements OnInit, OnChanges { private cdr; private modalService; private datePipe; private _dataSet; set taskDataSet(value: TaskCalendarData); get taskDataSet(): TaskCalendarData; config: TaskCalendarConfig; currentView: TaskCalendarView; timeZone: string; selectedDateFormat: string; timeFormat: string; permissions: { canCreateTask?: boolean; canEditTask?: boolean; canDeleteTask?: boolean; canAssignTask?: boolean; canViewAllTasks?: boolean; }; requestInProgress: boolean; paginationConfig: TaskCalendarPagination; enablePagination: boolean; isShowAdvanceFilter: boolean; genericEvent: EventEmitter; taskClicked: EventEmitter; dateClicked: EventEmitter<{ employee: TaskCalendarEmployee; date: Date; }>; viewChanged: EventEmitter<{ view: TaskCalendarView; date: Date; }>; commentClicked: EventEmitter; employeeClicked: EventEmitter; subtaskExpanded: EventEmitter; subtaskCollapsed: EventEmitter; bulkSubtaskUpdate: EventEmitter<{ parentTaskId: string; subtaskIds: string[]; operation: string; data: any; }>; timelineExtended: EventEmitter<{ type: 'extend-previous' | 'extend-next'; task: TaskCalendarTask; newStartDate: Date; newEndDate: Date; originalStartDate: Date; originalEndDate: Date; hiddenDays: number; }>; taskHighlighted: EventEmitter<{ task: TaskCalendarTask; elements: HTMLElement[]; timestamp: Date; }>; dateRangeChanged: EventEmitter<{ startDate: Date; endDate: Date; view: TaskCalendarView; }>; calendarContainer: ElementRef; taskCells: QueryList; viewDate: Date; weekDays: string[]; columns: string[]; calendarDays: Date[]; processedTasks: Map; private dateStringCache; private taskRowIndex; minMode: BsDatepickerViewMode; paginatedEmployees: TaskCalendarEmployee[]; totalEmployees: number; paginatedTasks: TaskCalendarTask[]; selectedSubtasks: Set; subtaskCache: Map; flatTaskList: TaskCalendarTask[]; taskHierarchyMap: Map; totalTasks: number; perPageOptions: number[]; selectedTask?: TaskCalendarTask; selectedDate?: Date; loading: boolean; searchTerm: string; private searchSubject; private searchSubscription?; taskFilter: 'all' | 'my'; bsConfig?: Partial; TaskCalendarView: typeof TaskCalendarView; Math: Math; dayPickerValue?: Date | null; weekPickerValue?: Date | null; monthPickerValue?: Date | null; isCreateMenuOpen: boolean; currentCellEmployee?: TaskCalendarEmployee; currentCellDate?: Date; canvasRef: ElementRef; cellRef: ElementRef; private confettiInstances; private readonly CONFETTI_COLORS; constructor(cdr: ChangeDetectorRef, modalService: BsModalService, datePipe: DatePipe); ngOnInit(): void; ngOnChanges(changes: SimpleChanges): void; private initializeDatePicker; private generateCalendarDays; private generateExtendedCalendarDays; getMonthStartAndEndDates(selectedDate?: Date): { startDate: Date; endDate: Date; }; selectMonthDate(selectedDate: Date): void; private processTaskData; private getTaskKey; private updatePaginatedData; private getFilteredTasks; onSearchChange(): void; clearSearch(): void; onPageChange(event: any): void; onChangePageSize(event: any): void; previousPeriod(): void; nextPeriod(): void; goToToday(): void; changeView(view: TaskCalendarView, date?: Date): void; onViewButtonClick(view: TaskCalendarView): void; pendingView: TaskCalendarView | null; onPickerDateSelected(view: TaskCalendarView, date: Date): void; generateView(view: TaskCalendarView, date: Date): void; generateMonthView(date: Date): void; generateWeekView(date: Date): void; generateDayView(date: Date): void; private emitViewChange; private emitViewChangeWithDate; toggleViewMode(mode: 'employee-based' | 'task-based'): void; onTaskFilterChange(filter: 'all' | 'my', event: Event): void; showLoader(): void; hideLoader(): void; get isLoading(): boolean; getTasksForEmployeeAndDate(employee: TaskCalendarEmployee, date: Date): TaskCalendarTask[]; getTasksWithPositions(employee: TaskCalendarEmployee, date: Date): Array<{ task: TaskCalendarTask | null; rowIndex: number; }>; getTasksForEmployeeAndTimeSlot(employee: TaskCalendarEmployee, date: Date, timeSlot: string): TaskCalendarTask[]; getTaskVerticalIndex(employee: TaskCalendarEmployee, date: Date, task: TaskCalendarTask): number; getTaskDurationInHours(task: TaskCalendarTask): number; getTaskStartHour(task: TaskCalendarTask): number; hasMoreTasksForDay(employee: TaskCalendarEmployee, date: Date): boolean; getHiddenTasksCount(employee: TaskCalendarEmployee, date: Date): number; getAllTasksForDay(employee: TaskCalendarEmployee, date: Date): TaskCalendarTask[]; onDateCellClick(employee: TaskCalendarEmployee, date: Date, event?: Event): void; onTaskClick(task: TaskCalendarTask, event: Event): void; showAllTasks(employee: TaskCalendarEmployee, date: Date, event: Event): void; isToday(date: Date): boolean; isWeekend(date: Date): boolean; isTaskOverdue(task: TaskCalendarTask): boolean; isOverdueCell(task: TaskCalendarTask, day: Date): boolean; getDeadlineLabel(task: TaskCalendarTask, day: Date): string | null; formatDate(date: Date | string | undefined | null): string; formatDateWithDay(date: Date | string | undefined | null): string; formatTime(timeString: string, timeFormat: string): string; getStatusColor(status: string, task?: TaskCalendarTask): string; getStatusBorderColor(status: string, task?: TaskCalendarTask): string; getStatusTextColor(status: string, task?: TaskCalendarTask): string; getStatusIcon(status: string, task?: TaskCalendarTask): string; getStatusIconColor(status: string, task?: TaskCalendarTask): string; getTaskSpanDates(task: TaskCalendarTask): Date[]; isDueDateDate(task: TaskCalendarTask, date: Date): boolean; isDateInTaskRange(task: TaskCalendarTask, date: Date): boolean; getTaskPositionInfo(task: TaskCalendarTask, date: Date): { isStart: boolean; isEnd: boolean; isDueDate: boolean; spanDays: number; }; onCommentClick(task: TaskCalendarTask, event: Event): void; getAllTasksForView(): TaskCalendarTask[]; getFilteredTasksForView(): TaskCalendarTask[]; hasNoTasksInView(): boolean; taskStartsBeforeView(task: TaskCalendarTask): boolean; taskEndsAfterView(task: TaskCalendarTask): boolean; getFirstVisibleDateInRange(task: TaskCalendarTask): Date | null; getLastVisibleDateInRange(task: TaskCalendarTask): Date | null; getDayNumber(task: TaskCalendarTask, currentDate: Date): number; showSubtasksModal(task: TaskCalendarTask, event: Event): void; handleTaskClicked(task: TaskCalendarTask, event: Event): void; handleEmployeeClicked(employee: TaskCalendarEmployee, event: Event): void; getTaskDisplayText(tasks: TaskCalendarTask[]): string; get currentViewTitle(): string; getTooltipPlacement(event?: Event): string; getRowTooltipPlacement(rowIndex: number): any; getTaskTooltip(task: TaskCalendarTask): string; trackByEmployeeId(index: number, employee: TaskCalendarEmployee): string; trackByTaskId(index: number, task: TaskCalendarTask): string; trackByTaskPosition(index: number, taskPosition: { task: TaskCalendarTask | null; rowIndex: number; }): string; getHiddenDaysCount(task: TaskCalendarTask, direction: 'previous' | 'next'): number; extendTimelineView(direction: 'previous' | 'next', task: TaskCalendarTask, event: Event): void; onTimelineCellClick(task: TaskCalendarTask, day: Date, dayIndex: number, event: Event): void; resetTimelineToOriginal(): void; private scrollToAndHighlightTask; private scrollToEmployeeRow; private findTaskElements; private scrollToElement; private highlightTaskTimeline; getTaskTimelineInfo(task: TaskCalendarTask): { totalDays: number; visibleDays: number; hiddenBefore: number; hiddenAfter: number; startsBeforeView: boolean; endsAfterView: boolean; }; /** * Build subtask hierarchy and cache relationships */ private buildSubtaskHierarchy; /** * Calculate task level in hierarchy */ private calculateTaskLevel; /** * Calculate total subtasks recursively */ private calculateTotalSubtasks; private calculateCompletedSubtasks; /** * Calculate parent task progress based on subtask completion */ private calculateParentProgress; /** * Get flattened task list including visible subtasks */ private getFlattenedTaskList; /** * Recursively add subtasks to flat list */ private addSubtasksToFlatList; /** * Get subtask indentation style */ getSubtaskIndentStyle(task: TaskCalendarTask): { [key: string]: string; }; /** * Check if task has visible subtasks */ hasVisibleSubtasks(task: TaskCalendarTask): boolean; /** * Get subtask count display text */ getSubtaskCountText(task: TaskCalendarTask): string; toggleAdvanceFilter(): void; closeCreateMenu(): void; toggleCreateMenu(event: Event): void; onCreateMenuItemClick(action: string, event: Event): void; private birthdayAnimInitDone; ngAfterViewInit(): void; ngOnDestroy(): void; private stopAnimation; private launchSparkles; private launchConfetti; initBirthdayAnimations(): void; isBirthdayAnimationActive(task: any): boolean; onMouseLeave(event: MouseEvent): void; onMouseEnter(event: MouseEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }