{"version":3,"file":"ng-gantt-scheduler.mjs","sources":["../../../projects/ng-gantt-scheduler/src/lib/interfaces/gantt-state.interface.ts","../../../projects/ng-gantt-scheduler/src/lib/interfaces/executions-gantt-calendar-state.interface.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-calendar-row/executions-gantt-calendar-row.component.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-calendar-row/executions-gantt-calendar-row.component.html","../../../projects/ng-gantt-scheduler/src/lib/ng-gantt-scheduler.service.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-calendar/executions-gantt-calendar.component.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-calendar/executions-gantt-calendar.component.html","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-chart-element/executions-gantt-task-chart-element.component.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-chart-element/executions-gantt-task-chart-element.component.html","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-chart-row/executions-gantt-task-chart-row.component.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-chart-row/executions-gantt-task-chart-row.component.html","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-chart-group/executions-gantt-task-chart-group.component.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-chart-group/executions-gantt-task-chart-group.component.html","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-chart/executions-gantt-task-chart.component.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-chart/executions-gantt-task-chart.component.html","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-list-item/executions-gantt-task-list-item.component.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-list-item/executions-gantt-task-list-item.component.html","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-list/executions-gantt-task-list.component.ts","../../../projects/ng-gantt-scheduler/src/lib/components/executions-gantt-task-list/executions-gantt-task-list.component.html","../../../projects/ng-gantt-scheduler/src/lib/ng-gantt-scheduler.component.ts","../../../projects/ng-gantt-scheduler/src/lib/ng-gantt-scheduler.component.html","../../../projects/ng-gantt-scheduler/src/public-api.ts","../../../projects/ng-gantt-scheduler/src/ng-gantt-scheduler.ts"],"sourcesContent":["import { OptionsActionsInterface } from './options-actions.interface';\nimport { OptionsCalendarInterface } from './options-calendar.interface';\nimport { OptionsTimesInterface } from './options-times.interface';\nimport { Task } from './task.interface';\n\n/**\n * GanttState\n */\nexport interface GanttState {\n  tasks: Task[];\n  viewMode: ViewMode;\n  times: OptionsTimesInterface;\n  calendar: OptionsCalendarInterface;\n  options: OptionsActionsInterface;\n  yearSelected: number;\n  useLimit: boolean;\n}\n\nexport type ViewMode = 'month' | 'day';\n\nexport const ganttInitialState: GanttState = {\n  tasks: [],\n  viewMode: 'month',\n  times: {\n    width: 0,\n    timePerPixel: 0,\n    firstTaskTime: 0,\n    lastTaskTime: 0,\n    firstTime: 0,\n    lastTime: 0,\n    steps: [],\n  },\n  calendar: {\n    day: { display: true, widths: [] },\n    month: { display: true, widths: [] },\n    year: { display: false, widths: [] },\n  },\n  options: {\n    update: false,\n    delete: false,\n  },\n  yearSelected: 0,\n  useLimit: true,\n};\n","import { ExecutionsGanttCalendarDatesInterface } from './executions-gantt-calendar-dates.interface';\n\n/**\n * ExecutionsGanttCalendarStateInterface\n */\nexport interface ExecutionsGanttCalendarStateInterface {\n  dates: ExecutionsGanttCalendarDatesInterface;\n}\n\nexport const executionsGanttCalendarInitialState: ExecutionsGanttCalendarStateInterface = {\n  dates: {\n    days: [],\n    months: [],\n    years: []\n  }\n};\n","import {\n  AfterRenderPhase,\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  afterNextRender,\n} from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { startOfDay } from 'date-fns';\nimport { ExecutionsGanttCalendarDateCildrenInterface } from '../../interfaces/executions-gantt-calendar-date-cildren.interface';\nimport { ExecutionsGanttCalendarDateInterface } from '../../interfaces/executions-gantt-calendar-date.interface';\n\n@Component({\n  selector: 'app-executions-gantt-calendar-row',\n  standalone: true,\n  imports: [CommonModule],\n  templateUrl: './executions-gantt-calendar-row.component.html',\n  styleUrls: ['./executions-gantt-calendar-row.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExecutionsGanttCalendarRowComponent {\n  @Input() items!: ExecutionsGanttCalendarDateInterface[];\n  @Input() type!: string;\n  @Input() viewMonth!: boolean;\n\n  constructor() {\n    afterNextRender(\n      () => {\n        this.initialize();\n      },\n      { phase: AfterRenderPhase.Write },\n    );\n  }\n\n  /**\n   * After render\n   */\n  initialize(): void {\n    const todayTime: number = startOfDay(new Date()).getTime();\n    const todayId: string = `${todayTime}d`;\n    const existToday: boolean = this.items?.some(\n      (item: ExecutionsGanttCalendarDateInterface) => item.key === todayId,\n    );\n    if (existToday) {\n      document.getElementById(todayId)?.scrollIntoView({\n        behavior: 'smooth',\n        block: 'center',\n        inline: 'center',\n      });\n    }\n  }\n\n  trackByItemsFn(\n    index: number,\n    item: ExecutionsGanttCalendarDateInterface,\n  ): string {\n    return `${item.key}`;\n  }\n\n  trackByCildrenFn(\n    index: number,\n    child: ExecutionsGanttCalendarDateCildrenInterface,\n  ): string {\n    return `${child.key}`;\n  }\n}\n","<div\n  class=\"calendar-row executions-gantt-calendar-row-{{ type }}\"\n  [ngClass]=\"{ 'view-month': viewMonth }\"\n  *ngIf=\"items\"\n>\n  <div\n    *ngFor=\"let item of items; trackBy: trackByItemsFn\"\n    class=\"calendar-row-rect calendar-row-rect-{{ type }}\"\n    id=\"{{ item.key }}\"\n  >\n    <div\n      class=\"calendar-row-rect-child--{{ type }}\"\n      [ngStyle]=\"{\n        'width.px': child.width,\n        height: type === 'day' ? '100%' : 'auto'\n      }\"\n      [ngClass]=\"{ weekend: child.isWeekend, today: child.isToday }\"\n      *ngFor=\"let child of item.children; trackBy: trackByCildrenFn\"\n    >\n      <div class=\"calendar-row-text calendar-row-text--{{ type }}\">\n        <span *ngIf=\"type === 'day'\">{{ child.label }}</span>\n        <span class=\"label-month\" *ngIf=\"type === 'month'\">{{\n          child.label | date: \"LLLL\" | titlecase\n        }}</span>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { addDays, getMonth } from 'date-fns';\nimport { Observable, Subject } from 'rxjs';\nimport { OptionsTimesInterface } from './interfaces/options-times.interface';\nimport { Task } from './interfaces/task.interface';\nimport { TimesStepInterface } from './interfaces/times-step.interface';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgGanttSchedulerService {\n  /**\n   * Subjet to emit if refresh data\n   */\n  private refeshDataTask$: Subject<boolean> = new Subject();\n\n  /**\n   * Subjet to emit if task collapsed\n   */\n  private collapsedTask$: Subject<Task> = new Subject();\n\n  /**\n   * Function to subcribe collapsed tasks\n   *\n   * @returns {Observable<Task>} an observale who holds the executions tasks\n   */\n  getCollapsedTaskObservable(): Observable<Task> {\n    return this.collapsedTask$.asObservable();\n  }\n\n  /**\n   * setter collapsed observable data\n   *\n   * @param {Task} task task\n   */\n  setCollapsedTaskObservable(task: Task): void {\n    this.collapsedTask$.next(task);\n  }\n\n  /**\n   * Function to subcribe refresh tasks data\n   *\n   * @returns {Observable<boolean>} boolean\n   */\n  getRefreshDataTaskObservable(): Observable<boolean> {\n    return this.refeshDataTask$.asObservable();\n  }\n\n  /**\n   * setter refresh tasks data\n   */\n  setRefreshDataTaskObservable(): void {\n    this.refeshDataTask$.next(true);\n  }\n\n  /**\n   * Functon count mounths\n   *\n   * @param {number} fromTime from\n   * @param {number} toTime to\n   * @returns {number} number\n   */\n  monthsCount(fromTime: number, toTime: number): number {\n    if (fromTime > toTime) {\n      return 0;\n    }\n    let currentMonth = fromTime;\n    let previousMonth = fromTime;\n    let monthsCount = 1;\n    while (currentMonth < toTime) {\n      currentMonth = addDays(currentMonth, 1).getTime();\n      if (getMonth(previousMonth) !== getMonth(currentMonth)) {\n        monthsCount++;\n      }\n      previousMonth = currentMonth;\n    }\n    return monthsCount;\n  }\n\n  /**\n   * Funtion return offset month\n   *\n   * @param {number} monthOffset month\n   * @param {number} step step\n   * @param {number} firstTime time\n   * @param {number} finalDate date\n   * @returns {number} number\n   */\n  getMonthOffset(\n    monthOffset: number,\n    step: TimesStepInterface,\n    firstTime: number,\n    finalDate: number,\n  ): number {\n    if (\n      step.time >= firstTime &&\n      step.time < finalDate &&\n      step.offset.px < monthOffset\n    ) {\n      return step.offset.px;\n    }\n    return monthOffset;\n  }\n\n  /**\n   * Funtion return width month\n   *\n   * @param {number} monthWidth month\n   * @param {number} step step\n   * @param {number} firstTime time\n   * @param {number} finalDate date\n   * @returns {number} number\n   */\n  getMonthWidth(\n    monthWidth: number,\n    step: TimesStepInterface,\n    firstTime: number,\n    finalDate: number,\n  ): number {\n    if (step.time >= firstTime && step.time <= finalDate) {\n      monthWidth += step.width.px;\n    }\n    return monthWidth;\n  }\n\n  getWidthSteps(\n    startTime: number,\n    endTime: number,\n    times: OptionsTimesInterface,\n  ): number {\n    return times.steps.reduce((aggr: number, step: TimesStepInterface) => {\n      if (step.time >= startTime && step.time < endTime) {\n        return aggr + step.width.px;\n      }\n      return aggr;\n    }, 0);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnChanges,\n  OnInit,\n} from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { addDays, addMonths, isWeekend, startOfMonth } from 'date-fns';\nimport { ExecutionsGanttCalendarDateCildrenInterface } from '../../interfaces/executions-gantt-calendar-date-cildren.interface';\nimport { ExecutionsGanttCalendarDateInterface } from '../../interfaces/executions-gantt-calendar-date.interface';\nimport { ExecutionsGanttCalendarDatesInterface } from '../../interfaces/executions-gantt-calendar-dates.interface';\nimport {\n  ExecutionsGanttCalendarStateInterface,\n  executionsGanttCalendarInitialState,\n} from '../../interfaces/executions-gantt-calendar-state.interface';\nimport { OptionsCalendarInterface } from '../../interfaces/options-calendar.interface';\nimport { OptionsTimesInterface } from '../../interfaces/options-times.interface';\nimport { TimesStepInterface } from '../../interfaces/times-step.interface';\nimport { NgGanttSchedulerService } from '../../ng-gantt-scheduler.service';\nimport { ExecutionsGanttCalendarRowComponent } from '../executions-gantt-calendar-row/executions-gantt-calendar-row.component';\n\n@Component({\n  selector: 'app-executions-gantt-calendar',\n  standalone: true,\n  imports: [CommonModule, ExecutionsGanttCalendarRowComponent],\n  templateUrl: './executions-gantt-calendar.component.html',\n  styleUrls: ['./executions-gantt-calendar.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExecutionsGanttCalendarComponent implements OnInit, OnChanges {\n  @Input() times!: OptionsTimesInterface;\n  @Input() calendar!: OptionsCalendarInterface;\n\n  state!: ExecutionsGanttCalendarStateInterface;\n\n  constructor(private executionsHelpersService: NgGanttSchedulerService) {}\n\n  /**\n   * handler changes\n   */\n  ngOnChanges(): void {\n    if (this.state) {\n      this.ngOnInit();\n    }\n  }\n  /**\n   * Initialization component\n   */\n  ngOnInit(): void {\n    this.state = {\n      ...executionsGanttCalendarInitialState,\n      dates: this.getDates(this.times, this.calendar),\n    };\n  }\n\n  private getDates(\n    times: OptionsTimesInterface,\n    calendar: OptionsCalendarInterface,\n  ): ExecutionsGanttCalendarDatesInterface {\n    const days: ExecutionsGanttCalendarDateInterface[] = this.generateDays(\n      times,\n      calendar,\n    );\n    const months: ExecutionsGanttCalendarDateInterface[] = this.generateMonths(\n      times,\n      calendar,\n    );\n    const years: ExecutionsGanttCalendarDateInterface[] = [];\n    return { days, months, years };\n  }\n\n  private generateMonths(\n    times: OptionsTimesInterface,\n    calendar: OptionsCalendarInterface,\n  ): ExecutionsGanttCalendarDateInterface[] {\n    const months: ExecutionsGanttCalendarDateCildrenInterface[] = [];\n    if (!calendar?.month?.display) {\n      return [];\n    }\n    const monthsCount = this.executionsHelpersService.monthsCount(\n      times?.firstTime,\n      times?.lastTime,\n    );\n    if (monthsCount === 0) {\n      return [];\n    }\n    let currentDate: number = times?.firstTime;\n    for (let monthIndex = 0; monthIndex < monthsCount; monthIndex++) {\n      let monthWidth: number = 0;\n      let monthOffset: number = Number.MAX_SAFE_INTEGER;\n\n      let finalDate: number = addDays(\n        startOfMonth(addMonths(currentDate, 1)),\n        -1,\n      ).getTime();\n\n      if (finalDate > times?.lastTime) {\n        finalDate = times?.lastTime;\n      }\n\n      for (let step = 0, len = times?.steps?.length - 1; step <= len; step++) {\n        const currentStep = times?.steps?.[step];\n        monthOffset = this.executionsHelpersService.getMonthOffset(\n          monthOffset,\n          currentStep,\n          currentDate,\n          finalDate,\n        );\n        monthWidth = this.executionsHelpersService.getMonthWidth(\n          monthWidth,\n          currentStep,\n          currentDate,\n          finalDate,\n        );\n      }\n\n      months.push({\n        index: monthIndex,\n        time: currentDate,\n        key: `${monthIndex}m`,\n        x: monthOffset,\n        y: 0,\n        width: monthWidth - 1,\n        textWidth: 0,\n        height: 0,\n        label: `${currentDate}`,\n      });\n\n      currentDate = startOfMonth(addMonths(currentDate, 1)).getTime();\n      if (currentDate > times?.lastTime) {\n        currentDate = times?.lastTime;\n      }\n    }\n    return months.map((item: ExecutionsGanttCalendarDateCildrenInterface) => ({\n      key: item.key,\n      children: [item],\n    }));\n  }\n\n  private generateDays(\n    times: OptionsTimesInterface,\n    calendar: OptionsCalendarInterface,\n  ): ExecutionsGanttCalendarDateInterface[] {\n    let days: ExecutionsGanttCalendarDateCildrenInterface[] = [];\n    if (!calendar?.day?.display) {\n      return [];\n    }\n    const daysCount: number = this.howManyDaysFit(times);\n    if (daysCount === 0) {\n      return [];\n    }\n    const steps: TimesStepInterface[] = times?.steps;\n\n    days = steps.map((item: TimesStepInterface, dayIndex: number) => ({\n      index: dayIndex,\n      time: item.time,\n      key: item.time + 'd',\n      x: item.offset.px || 0,\n      y: 0,\n      width: item.width?.px - 1,\n      textWidth: 0,\n      height: 0,\n      label: new Date(item.time).getDate().toString(),\n      isWeekend: isWeekend(item.time),\n      isToday: this.isToday(item.time),\n    }));\n\n    return days.map((item) => ({\n      key: item.key,\n      children: [item],\n    }));\n  }\n\n  private howManyDaysFit(times: OptionsTimesInterface): number {\n    const stroke = 1;\n    const additionalSpace = stroke + 2;\n    const fullWidth = times?.width || 1;\n    for (\n      let days = times?.steps?.length;\n      days > 1;\n      days = Math.ceil(days / 2)\n    ) {\n      if (additionalSpace * days <= fullWidth && days > 1) {\n        return days;\n      }\n    }\n    return 0;\n  }\n\n  public isToday(time: number): boolean {\n    //check if timestamp is today\n    const today = new Date();\n    const date = new Date(time);\n    return (\n      date.getDate() === today.getDate() &&\n      date.getMonth() === today.getMonth() &&\n      date.getFullYear() === today.getFullYear()\n    );\n  }\n}\n","<div class=\"executions-gantt-calendar\" [ngStyle]=\"{ width: times.width + 'px' }\" *ngIf=\"times && calendar\">\n  <app-executions-gantt-calendar-row\n    [items]=\"state.dates.months\"\n    [type]=\"'month'\"\n    [viewMonth]=\"!calendar.day.display\"\n    *ngIf=\"calendar.month.display\"></app-executions-gantt-calendar-row>\n  <app-executions-gantt-calendar-row\n    [items]=\"state.dates.days\"\n    [type]=\"'day'\"\n    [viewMonth]=\"!calendar.day.display\"\n    *ngIf=\"calendar.day.display && state.dates.days.length > 0\"></app-executions-gantt-calendar-row>\n</div>\n","import { Component, Input, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { addDays, startOfDay, subDays } from 'date-fns';\n\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { OptionsActionsInterface } from '../../interfaces/options-actions.interface';\nimport { OptionsTimesInterface } from '../../interfaces/options-times.interface';\nimport { Task } from '../../interfaces/task.interface';\nimport { TimesStepInterface } from '../../interfaces/times-step.interface';\nimport { NgGanttSchedulerService } from '../../ng-gantt-scheduler.service';\n\n@Component({\n  selector: 'app-executions-gantt-task-chart-element',\n  standalone: true,\n  imports: [CommonModule, MatMenuModule, MatButtonModule, MatIconModule],\n  templateUrl: './executions-gantt-task-chart-element.component.html',\n  styleUrls: ['./executions-gantt-task-chart-element.component.scss'],\n})\nexport class ExecutionsGanttTaskChartElementComponent implements OnDestroy {\n  @Input() task!: Task;\n  @Input() times!: OptionsTimesInterface;\n  @Input() options!: OptionsActionsInterface;\n  /**\n   * subject to unsubscribe\n   */\n  unsubscribe$ = new Subject<void>();\n\n  get tooltipDisabled(): boolean {\n    return true;\n  }\n\n  get showActions(): boolean {\n    return this.canDelete || this.canEdit;\n  }\n\n  get getHeight(): number {\n    if (this.task.childs.length > 0) {\n      return this.task.collapsed === undefined || this.task.collapsed\n        ? 60\n        : 60 * this.task.childs?.length + 60;\n    }\n    return 60;\n  }\n\n  get getX(): string {\n    const startTime: number = startOfDay(this.task.startTime).getTime();\n    const step = this.times.steps.find(\n      (item: TimesStepInterface) => item.time === startTime,\n    );\n    return `${step?.offset.px ?? 0}`;\n  }\n\n  get getWidth(): string {\n    const startTime: number = startOfDay(this.task.startTime).getTime();\n    const endTime: number = startOfDay(addDays(this.task.endTime, 1)).getTime();\n    const width = this.getWidthSteps(startTime, endTime);\n    return `${width}`;\n  }\n\n  get tooltipSteps(): number[] {\n    const startTime: number = startOfDay(this.task.startTime).getTime();\n    const endTime: number = startOfDay(addDays(this.task.endTime, 1)).getTime();\n    const width = this.getWidthSteps(startTime, endTime);\n    const n = Math.trunc(width / 46);\n    return new Array(n).fill(null).map((_, i) => i + 1);\n  }\n\n  get getOffsetPrevX(): string {\n    const startTime: number = startOfDay(\n      subDays(this.task.startTime, this.task.offsetPre ?? 0),\n    ).getTime();\n    const step = this.times.steps.find(\n      (item: TimesStepInterface) => item.time === startTime,\n    );\n    return `${step?.offset?.px ?? 0}`;\n  }\n\n  get showBorderLeft(): boolean {\n    const startTime: number = startOfDay(\n      subDays(this.task.startTime, this.task.offsetPre ?? 0),\n    ).getTime();\n    const step = this.times.steps?.some(\n      (item: TimesStepInterface) => item.time === startTime,\n    );\n    return step;\n  }\n\n  get showBorderLeftMaster(): boolean {\n    const offsetPre: boolean = this.task.offsetPre === 0;\n    return offsetPre;\n  }\n\n  get showBorderRight(): boolean {\n    const startTime: number = startOfDay(\n      addDays(this.task.endTime, 1),\n    ).getTime();\n    const step = this.times.steps?.some(\n      (item: TimesStepInterface) => item.time === startTime,\n    );\n    return step;\n  }\n\n  get showBorderRightMaster(): boolean {\n    const offsetPost: boolean = this.task.offsetPost === 0;\n    return offsetPost;\n  }\n\n  get getWidthOffsetPre(): string {\n    const startTime: number = startOfDay(\n      addDays(this.task.startTime, -(this.task.offsetPre ?? 0)),\n    ).getTime();\n    const endTime: number = startOfDay(this.task.startTime).getTime();\n\n    const width = this.times.steps.reduce(\n      (aggr: number, step: TimesStepInterface) => {\n        if (step.time > startTime && step.time <= endTime) {\n          return aggr + step.width.px;\n        }\n        return aggr;\n      },\n      0,\n    );\n\n    return `${width}`;\n  }\n\n  get getOffsetPostX(): string {\n    const startTime: number = startOfDay(\n      addDays(this.task.endTime, 1),\n    ).getTime();\n    const step = this.times.steps.find(\n      (item: TimesStepInterface) => item.time === startTime,\n    );\n    return `${step?.offset?.px ?? 0}`;\n  }\n\n  get getWidthOffsetPost(): string {\n    const startTime: number = startOfDay(\n      addDays(this.task.endTime, 1),\n    ).getTime();\n    const endTime: number = startOfDay(\n      addDays(this.task.endTime, this.task.offsetPost ?? 0 + 1),\n    ).getTime();\n    const width = this.getWidthSteps(startTime, endTime);\n    return `${width}`;\n  }\n\n  get canEdit(): boolean {\n    return this.options.update;\n  }\n\n  get canDelete(): boolean {\n    return this.options.delete;\n  }\n\n  constructor(private executionsHelpersService: NgGanttSchedulerService) {}\n\n  /**\n   * Hanler open dialog to update task\n   */\n  openEditDialog(): void {\n    //TODO: Launch event to open dialog\n  }\n\n  /**\n   * Open delete confirm dialog\n   */\n  openDeleteConfirmDialog() {\n    //TODO: Launch event to open dialog\n  }\n\n  private getWidthSteps(startTime: number, endTime: number): number {\n    return this.executionsHelpersService.getWidthSteps(\n      startTime,\n      endTime,\n      this.times,\n    );\n  }\n\n  trackByFn(index: number, stepTooltip: number): string {\n    return `${stepTooltip}`;\n  }\n\n  /**\n   * Destroy: unsubscribe from subscriptions\n   */\n  ngOnDestroy() {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<div class=\"executions-gantt-task-chart-element\" *ngIf=\"times && task\">\n  <svg\n    class=\"executions-gantt-task-chart-row-svg\"\n    [attr.x]=\"0\"\n    y=\"0\"\n    [attr.width]=\"times.width\"\n    [attr.height]=\"getHeight\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g class=\"task-wrapper\">\n      <foreignObject\n        *ngIf=\"task.offsetPre\"\n        [attr.x]=\"getOffsetPrevX\"\n        [attr.y]=\"5\"\n        [attr.width]=\"getWidthOffsetPre\"\n        [attr.height]=\"getHeight - 10\"\n      >\n        <div\n          class=\"task-offset task-offset\"\n          [ngStyle]=\"{\n            'border-left': '3px solid ' + task.color,\n            'background-color': task.color + '60'\n          }\"\n        >\n          <div [ngClass]=\"{ 'task-offset-border-left': showBorderLeft }\"></div>\n        </div>\n      </foreignObject>\n      <foreignObject\n        [attr.x]=\"getX\"\n        [attr.y]=\"5\"\n        [attr.width]=\"getWidth\"\n        [attr.height]=\"getHeight - 10\"\n        class=\"task task\"\n        [ngStyle]=\"{ 'background-color': task.color }\"\n      >\n        <div\n          class=\"task-item\"\n          [ngClass]=\"{\n            'task-border-left': showBorderLeftMaster,\n            'task-border-right': showBorderRightMaster\n          }\"\n        >\n          <span class=\"task-item-label\">{{ task.description }}</span>\n          <div\n            class=\"step-tooltip\"\n            *ngFor=\"let item of tooltipSteps; trackBy: trackByFn\"\n          ></div>\n          <div class=\"task-item-acctions\" *ngIf=\"showActions\">\n            <button\n              mat-icon-button\n              [matMenuTriggerFor]=\"actionsTask\"\n              xPosition=\"before\"\n            >\n              <mat-icon fontIcon=\"more_vert\"></mat-icon>\n            </button>\n            <mat-menu #actionsTask=\"matMenu\">\n              <button mat-menu-item>\n                <mat-icon>edit</mat-icon>\n                <span>Edit</span>\n              </button>\n              <button mat-menu-item>\n                <mat-icon>delete</mat-icon>\n                <span>Delete</span>\n              </button>\n            </mat-menu>\n          </div>\n        </div>\n      </foreignObject>\n      <foreignObject\n        *ngIf=\"task.offsetPost\"\n        [attr.x]=\"getOffsetPostX\"\n        [attr.y]=\"5\"\n        [attr.width]=\"getWidthOffsetPost\"\n        [attr.height]=\"getHeight - 10\"\n      >\n        <div\n          class=\"task-offset task-offset\"\n          [ngStyle]=\"{\n            'border-right': '3px solid ' + task.color,\n            'background-color': task.color + '60'\n          }\"\n        >\n          <div\n            [ngClass]=\"{ 'task-offset-border-right': showBorderRight }\"\n          ></div>\n        </div>\n      </foreignObject>\n    </g>\n  </svg>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { isWeekend } from 'date-fns';\nimport { GridLinesInterface } from '../../interfaces/grid-lines.interface';\nimport { OptionsActionsInterface } from '../../interfaces/options-actions.interface';\nimport { OptionsTimesInterface } from '../../interfaces/options-times.interface';\nimport { Task } from '../../interfaces/task.interface';\nimport { TimesStepInterface } from '../../interfaces/times-step.interface';\nimport { ExecutionsGanttTaskChartElementComponent } from '../executions-gantt-task-chart-element/executions-gantt-task-chart-element.component';\n\n@Component({\n  selector: 'app-executions-gantt-task-chart-row',\n  standalone: true,\n  imports: [\n    CommonModule,\n    MatMenuModule,\n    MatButtonModule,\n    MatIconModule,\n    MatTooltipModule,\n    ExecutionsGanttTaskChartElementComponent,\n  ],\n  templateUrl: './executions-gantt-task-chart-row.component.html',\n  styleUrls: ['./executions-gantt-task-chart-row.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExecutionsGanttTaskChartRowComponent implements OnDestroy {\n  @Input() tasks!: Task[];\n  @Input() times!: OptionsTimesInterface;\n  @Input() options!: OptionsActionsInterface;\n  /**\n   * subject to unsubscribe\n   */\n  unsubscribe$ = new Subject<void>();\n\n  get getHeight(): number {\n    return 60;\n  }\n\n  get verticalLines(): GridLinesInterface[] {\n    return this.times.steps.reduce(\n      (aggr: GridLinesInterface[], step: TimesStepInterface) => {\n        if (step.showLine) {\n          const output = {\n            key: `${step.time}`,\n            x1: `${step.offset.px}`,\n            y1: `${0}`,\n            x2: `${step.offset.px}`,\n            y2: `100%`,\n            color: 'var(--jacaranda-400)',\n          };\n          return [...aggr, output];\n        }\n\n        return aggr;\n      },\n      [],\n    );\n  }\n\n  get weekendDays(): TimesStepInterface[] {\n    const isViewMonth: boolean = this.times.steps?.some(\n      (item: TimesStepInterface) => !item.showLine,\n    );\n    return this.times.steps.filter(\n      (item: TimesStepInterface) => isWeekend(item.time) && !isViewMonth,\n    );\n  }\n\n  trackByFnTasks(index: number, task: Task): string {\n    return `${task.id}`;\n  }\n\n  trackByFn(index: number, line: GridLinesInterface): string {\n    return `${line.key}`;\n  }\n\n  trackByWeekendDayFn(index: number, item: TimesStepInterface): string {\n    return `${item.time}`;\n  }\n\n  /**\n   * Destroy: unsubscribe from subscriptions\n   */\n  ngOnDestroy() {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<div class=\"executions-gantt-task-chart-row\" *ngIf=\"times\">\n  <svg\n    class=\"executions-gantt-task-chart-row-svg\"\n    x=\"0\"\n    y=\"0\"\n    [attr.width]=\"times.width\"\n    [attr.height]=\"getHeight\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g class=\"highlight-weekend-days\">\n      <rect\n        class=\"chart-days-highlight-rect\"\n        *ngFor=\"let day of weekendDays; trackBy: trackByWeekendDayFn\"\n        [attr.x]=\"day.offset.px\"\n        y=\"0\"\n        [attr.width]=\"day.width.px\"\n        fill=\"var(--jacaranda-100)\"\n        height=\"100%\"\n      ></rect>\n    </g>\n    <g class=\"vertical-lines\">\n      <line\n        class=\"grid-line-vertical\"\n        *ngFor=\"let line of verticalLines; trackBy: trackByFn\"\n        [attr.x1]=\"line.x1\"\n        [attr.y1]=\"line.y1\"\n        [attr.x2]=\"line.x2\"\n        [attr.y2]=\"line.y2\"\n        [attr.stroke]=\"line.color\"\n      ></line>\n    </g>\n    <g class=\"tasks-wrapper\">\n      <foreignObject\n        x=\"0\"\n        y=\"0\"\n        [attr.width]=\"times.width\"\n        [attr.height]=\"getHeight\"\n        *ngFor=\"let task of tasks; trackBy: trackByFnTasks\"\n      >\n        <app-executions-gantt-task-chart-element\n          [task]=\"task\"\n          [times]=\"times\"\n          [options]=\"options\"\n        >\n        </app-executions-gantt-task-chart-element>\n      </foreignObject>\n    </g>\n  </svg>\n</div>\n","import { Component, Input } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { addDays, startOfDay, subDays } from 'date-fns';\nimport { OptionsActionsInterface } from '../../interfaces/options-actions.interface';\nimport { OptionsTimesInterface } from '../../interfaces/options-times.interface';\nimport { Task } from '../../interfaces/task.interface';\nimport { ExecutionsGanttTaskChartRowComponent } from '../executions-gantt-task-chart-row/executions-gantt-task-chart-row.component';\n\n@Component({\n  selector: 'app-executions-gantt-task-chart-group',\n  standalone: true,\n  imports: [CommonModule, ExecutionsGanttTaskChartRowComponent],\n  templateUrl: './executions-gantt-task-chart-group.component.html',\n  styleUrls: ['./executions-gantt-task-chart-group.component.scss'],\n})\nexport class ExecutionsGanttTaskChartGroupComponent {\n  @Input() task!: Task;\n  @Input() times!: OptionsTimesInterface;\n  @Input() options!: OptionsActionsInterface;\n\n  get optionsMain(): OptionsActionsInterface {\n    return {\n      update: false,\n      delete: false,\n    };\n  }\n\n  get height(): number {\n    return this.task.collapsed === undefined || this.task.collapsed\n      ? 60\n      : 60 * this.task.childs?.length + 60;\n  }\n\n  get heightChilds(): number {\n    const value = this.task.childs?.length;\n    return value * 60;\n  }\n\n  get mainTasks(): Task[] {\n    return [...this.task.childs];\n  }\n\n  trackByFn(index: number, task: Task): string {\n    return `${task.id}`;\n  }\n\n  getOverlaps(): Task[] {\n    const childs: Task[] = this.task.childs.sort(\n      (a: Task, b: Task) =>\n        startOfDay(subDays(a.startTime, a.offsetPre ?? 0)).getTime() -\n        startOfDay(subDays(b.startTime, b.offsetPre ?? 0)).getTime(),\n    );\n    const taskOverlaps: Task[] = childs.reduce(\n      (aggr: Task[], item: Task, index: number) => {\n        const endTimeitem: Date = startOfDay(\n          addDays(item.endTime, item.offsetPost ?? 0),\n        );\n        const overlapsFilter = childs\n          .filter(\n            (chd: Task, indexFilter: number) =>\n              chd.id !== item.id && indexFilter > index,\n          )\n          .filter(\n            (chd: Task) =>\n              startOfDay(\n                subDays(chd.startTime, chd.offsetPre ?? 0),\n              ).getTime() <= endTimeitem.getTime(),\n          );\n        return overlapsFilter.reduce((aggrO: Task[], itemO: Task) => {\n          const endTimeitemO = startOfDay(\n            addDays(itemO.endTime, itemO.offsetPost ?? 0),\n          );\n          const newOverlap = {\n            ...itemO,\n            type: {\n              id: this.getColorOverlap(itemO.color ?? '', item.color ?? ''),\n              name: '',\n            },\n            startTime: startOfDay(\n              subDays(itemO.startTime, itemO.offsetPre ?? 0),\n            ),\n            endTime: endTimeitemO <= endTimeitem ? endTimeitemO : endTimeitem,\n            text: '',\n            offsetPre: 0,\n            offsetPost: 0,\n          };\n          return [...aggrO, newOverlap];\n        }, aggr);\n      },\n      [],\n    );\n\n    return [...taskOverlaps];\n  }\n\n  getColorOverlap(color1: string, color2: string): string {\n    //Transform to RGB\n    const color1Rgb = this.hexToRgb(color1);\n    const color2Rgb = this.hexToRgb(color2);\n\n    //Mixing colors\n    const newColorRgb = {\n      r: Math.round((color1Rgb.r + color2Rgb.r) / 2),\n      g: Math.round((color1Rgb.g + color2Rgb.g) / 2),\n      b: Math.round((color1Rgb.b + color2Rgb.b) / 2),\n    };\n    return this.rgbToHex(newColorRgb);\n  }\n\n  private hexToRgb(hex: string): { r: number; g: number; b: number } {\n    hex = hex.replace('#', '');\n    const bigint = parseInt(hex, 16);\n    const r = (bigint >> 16) & 255;\n    const g = (bigint >> 8) & 255;\n    const b = bigint & 255;\n    return { r, g, b };\n  }\n\n  private rgbToHex(rgb: { r: number; g: number; b: number }): string {\n    const { r, g, b } = rgb;\n    const rgbHex = (r << 16) | (g << 8) | b;\n    const hex = (0x1000000 | rgbHex).toString(16).substring(1);\n    return `#${hex}`;\n  }\n}\n","<div class=\"executions-gantt-task-chart-group\" *ngIf=\"times && task\">\n  <svg x=\"0\" y=\"0\" [attr.width]=\"times.width\" [attr.height]=\"height\" xmlns=\"http://www.w3.org/2000/svg\">\n    <!-- main line -->\n    <g class=\"task-main-wrapper\">\n      <foreignObject x=\"0\" y=\"0\" [attr.width]=\"times.width\" [attr.height]=\"60\">\n        <div class=\"executions-gantt-task-chart-wrapper\">\n          <div class=\"executions-gantt-task-chart-item\" [ngStyle]=\"{ 'height.px': 60 }\">\n            <app-executions-gantt-task-chart-row [tasks]=\"mainTasks\" [times]=\"times\" [options]=\"optionsMain\">\n            </app-executions-gantt-task-chart-row>\n          </div>\n        </div>\n      </foreignObject>\n    </g>\n\n    <!-- row tasks if not collapsed -->\n    <g class=\"task-childs-wrapper\">\n      <foreignObject x=\"0\" y=\"60\" [attr.width]=\"times.width\" [attr.height]=\"heightChilds\">\n        <div class=\"executions-gantt-task-chart-wrapper\">\n          <div\n            class=\"executions-gantt-task-chart-item\"\n            [ngStyle]=\"{ 'height.px': 60 }\"\n            *ngFor=\"let taskChld of task.childs; trackBy: trackByFn\">\n            <app-executions-gantt-task-chart-row [tasks]=\"[taskChld]\" [times]=\"times\" [options]=\"options\">\n            </app-executions-gantt-task-chart-row>\n          </div>\n        </div>\n      </foreignObject>\n    </g>\n  </svg>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { CommonModule } from '@angular/common';\nimport { startOfDay } from 'date-fns';\nimport { GridLinesInterface } from '../../interfaces/grid-lines.interface';\nimport { OptionsActionsInterface } from '../../interfaces/options-actions.interface';\nimport { OptionsTimesInterface } from '../../interfaces/options-times.interface';\nimport { Task } from '../../interfaces/task.interface';\nimport { TimesStepInterface } from '../../interfaces/times-step.interface';\nimport { NgGanttSchedulerService } from '../../ng-gantt-scheduler.service';\nimport { ExecutionsGanttTaskChartGroupComponent } from '../executions-gantt-task-chart-group/executions-gantt-task-chart-group.component';\nimport { ExecutionsGanttTaskChartRowComponent } from '../executions-gantt-task-chart-row/executions-gantt-task-chart-row.component';\n\n@Component({\n  selector: 'app-executions-gantt-task-chart',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ExecutionsGanttTaskChartRowComponent,\n    ExecutionsGanttTaskChartGroupComponent,\n  ],\n  templateUrl: './executions-gantt-task-chart.component.html',\n  styleUrls: ['./executions-gantt-task-chart.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExecutionsGanttTaskChartComponent\n  implements OnInit, OnChanges, OnDestroy\n{\n  @Input() tasks!: Task[];\n  @Input() times!: OptionsTimesInterface;\n  @Input() options!: OptionsActionsInterface;\n\n  /**\n   * subject to unsubscribe\n   */\n  unsubscribe$ = new Subject<void>();\n\n  get line(): GridLinesInterface | null {\n    const todayTime: number = startOfDay(new Date()).getTime();\n    const stepToday: TimesStepInterface | undefined = this.times.steps.find(\n      (step: TimesStepInterface) => step.time === todayTime,\n    );\n    if (!stepToday) {\n      return null;\n    }\n    const pixelToCenter: number = stepToday.width.px / 2;\n    return {\n      key: `${stepToday.time}`,\n      x1: `${stepToday.offset.px + pixelToCenter}`,\n      y1: `${0}`,\n      x2: `${stepToday.offset.px + pixelToCenter}`,\n      y2: `100%`,\n      color: 'var(--jacaranda-900)',\n    };\n  }\n\n  get totalHeight(): number {\n    return this.tasks.reduce((aggr: number, task: Task) => {\n      if (task.collapsed === undefined || task.collapsed) {\n        return aggr + 60;\n      }\n      if (!task.childs || task.childs?.length === 0) {\n        return aggr + 60;\n      }\n      return aggr + task.childs?.length * 60 + 60;\n    }, 0);\n  }\n\n  /**\n   * Class constructor\n   *\n   *  @param ExecutionsHelpersService\n   */\n\n  constructor(\n    private cd: ChangeDetectorRef,\n    private executionsHelpersService: NgGanttSchedulerService,\n  ) {}\n\n  /**\n   * handler changes\n   */\n  ngOnChanges(): void {\n    this.cd.detectChanges();\n  }\n\n  /**\n   * initialization: Gantt task chart\n   */\n  ngOnInit(): void {\n    this.executionsHelpersService\n      .getCollapsedTaskObservable()\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((task: Task) => {\n        this.tasks = this.tasks.map((item: Task) => {\n          if (item.id === task.id) {\n            return { ...item, collapsed: task.collapsed ?? true };\n          }\n          return item;\n        });\n        this.cd.detectChanges();\n      });\n  }\n\n  trackByFn(index: number, task: Task): string {\n    return `${task.id}-${task.collapsed}`;\n  }\n\n  /**\n   * Destroy: unsubscribe from subscriptions\n   */\n  ngOnDestroy() {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<div\n  class=\"executions-gantt-task-chart\"\n  [ngStyle]=\"{ width: times.width + 'px' }\"\n  *ngIf=\"times\"\n>\n  <svg\n    x=\"0\"\n    y=\"0\"\n    [attr.width]=\"times.width\"\n    [attr.height]=\"totalHeight\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g class=\"task-wrapper\">\n      <foreignObject\n        x=\"0\"\n        y=\"0\"\n        [attr.width]=\"times.width\"\n        [attr.height]=\"totalHeight\"\n      >\n        <div class=\"executions-gantt-task-chart-wrapper\">\n          <div\n            class=\"executions-gantt-task-chart-item\"\n            [ngStyle]=\"{\n              'height.px': task.childs\n                ? task.collapsed === undefined || task.collapsed\n                  ? 60\n                  : 60 * task.childs.length + 60\n                : 60\n            }\"\n            *ngFor=\"let task of tasks; trackBy: trackByFn\"\n          >\n            <app-executions-gantt-task-chart-row\n              *ngIf=\"task.childs.length === 0\"\n              [tasks]=\"[task]\"\n              [times]=\"times\"\n              [options]=\"options\"\n            >\n            </app-executions-gantt-task-chart-row>\n            <app-executions-gantt-task-chart-group\n              *ngIf=\"task.childs.length > 0\"\n              [task]=\"task\"\n              [times]=\"times\"\n              [options]=\"options\"\n            ></app-executions-gantt-task-chart-group>\n          </div>\n        </div>\n      </foreignObject>\n    </g>\n    <g class=\"vertical-lines\" *ngIf=\"line\">\n      <line\n        class=\"line-vertical-today\"\n        [attr.x1]=\"line.x1\"\n        [attr.y1]=\"line.y1\"\n        [attr.x2]=\"line.x2\"\n        [attr.y2]=\"line.y2\"\n        [attr.stroke]=\"line.color\"\n      ></line>\n    </g>\n  </svg>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  HostBinding,\n  Input,\n  ViewChild,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Task } from '../../interfaces/task.interface';\nimport { NgGanttSchedulerService } from '../../ng-gantt-scheduler.service';\n\n@Component({\n  selector: 'app-executions-gantt-task-list-item',\n  standalone: true,\n  imports: [CommonModule, MatTooltipModule, MatButtonModule, MatIconModule],\n  templateUrl: './executions-gantt-task-list-item.component.html',\n  styleUrls: ['./executions-gantt-task-list-item.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExecutionsGanttTaskListItemComponent {\n  @Input() task!: Task;\n\n  @HostBinding('style.overflow') hostOverflowStyle = 'hidden';\n  @HostBinding('style.width') hostWidthStyle = '100%';\n  @HostBinding('style.height') hostHeight = '60px';\n\n  @ViewChild('label', { static: false, read: ElementRef }) element!: ElementRef;\n\n  tooltipDisabled: boolean = true;\n\n  get isGroup(): boolean {\n    return this.task.childs.length > 0;\n  }\n\n  constructor(private executionsHelpersService: NgGanttSchedulerService) {}\n\n  /**\n   * funtions to collapsed\n   */\n  onCollapsed(): void {\n    if (this.task.collapsed === undefined) {\n      this.task.collapsed = true;\n    }\n    this.task = { ...this.task, collapsed: !this.task.collapsed };\n    this.executionsHelpersService.setCollapsedTaskObservable(this.task);\n  }\n}\n","<div class=\"executions-gantt-task-list-item\" *ngIf=\"task\">\n  <p #label class=\"text-elipsis\">\n    {{ task.label }}\n  </p>\n  <button\n    *ngIf=\"isGroup && task.collapsed === false\"\n    mat-icon-button\n    (click)=\"onCollapsed()\"\n  >\n    <mat-icon fontIcon=\"expand_less\"></mat-icon>\n  </button>\n  <button\n    *ngIf=\"isGroup && (task.collapsed === undefined || task.collapsed)\"\n    mat-icon-button\n    (click)=\"onCollapsed()\"\n  >\n    <mat-icon fontIcon=\"expand_more\"></mat-icon>\n  </button>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Task } from '../../interfaces/task.interface';\nimport { NgGanttSchedulerService } from '../../ng-gantt-scheduler.service';\nimport { ExecutionsGanttTaskListItemComponent } from '../executions-gantt-task-list-item/executions-gantt-task-list-item.component';\n\n@Component({\n  selector: 'app-executions-gantt-task-list',\n  standalone: true,\n  imports: [\n    CommonModule,\n    MatButtonModule,\n    MatIconModule,\n    MatProgressSpinnerModule,\n    ExecutionsGanttTaskListItemComponent,\n  ],\n  templateUrl: './executions-gantt-task-list.component.html',\n  styleUrls: ['./executions-gantt-task-list.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ExecutionsGanttTaskListComponent\n  implements OnInit, OnChanges, OnDestroy\n{\n  @Input() tasks!: Task[];\n  @Input() yearSelected!: number;\n  @Output() changeYearSelected: EventEmitter<number> =\n    new EventEmitter<number>();\n\n  /**\n   * subject to unsubscribe\n   */\n  unsubscribe$ = new Subject<void>();\n\n  /**\n   * buttons loading\n   */\n  buttonsLoading: { previous: boolean; next: boolean } = {\n    previous: false,\n    next: false,\n  };\n\n  /**\n   * Class constructor\n   *\n   *  @param ExecutionsHelpersService\n   */\n\n  constructor(\n    private executionsHelpersService: NgGanttSchedulerService,\n    private cd: ChangeDetectorRef,\n  ) {}\n\n  /**\n   * ngOnChanges\n   * @param changes\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['yearSelected']) {\n      setTimeout(() => {\n        this.buttonsLoading = { previous: false, next: false };\n        this.cd.detectChanges();\n      }, 500);\n    }\n  }\n\n  /**\n   * initialization: Gantt task list\n   */\n  ngOnInit(): void {\n    this.executionsHelpersService\n      .getCollapsedTaskObservable()\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe((task: Task) => {\n        this.tasks = this.tasks.map((item: Task) => {\n          if (item.id === task.id) {\n            return { ...item, collapsed: task.collapsed ?? true };\n          }\n          return item;\n        });\n      });\n  }\n\n  trackByFn(index: number, task: Task): string {\n    return `${task.id}`;\n  }\n\n  /**\n   * emit change next year\n   */\n  nextYear(): void {\n    this.buttonsLoading = { previous: false, next: true };\n    setTimeout(() => {\n      this.changeYearSelected.emit(this.yearSelected + 1);\n      document.getElementById('scrollGantt')?.scrollTo({ left: 0 });\n    }, 500);\n  }\n\n  /**\n   * emit change previous year\n   */\n  previousYear(): void {\n    this.buttonsLoading = { previous: true, next: false };\n    setTimeout(() => {\n      this.changeYearSelected.emit(this.yearSelected - 1);\n      document\n        .getElementById('11m')\n        ?.scrollIntoView({ behavior: 'smooth', inline: 'end' });\n    }, 500);\n  }\n\n  /**\n   * Destroy: unsubscribe from subscriptions\n   */\n  ngOnDestroy() {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n}\n","<div class=\"executions-gantt-task-list\">\n  <div class=\"executions-gantt-task-list-header\">\n    <button mat-icon-button (click)=\"previousYear()\">\n      <mat-icon\n        fontIcon=\"arrow_back_ios\"\n        *ngIf=\"!buttonsLoading.previous\"\n      ></mat-icon>\n      <mat-progress-spinner\n        mode=\"indeterminate\"\n        *ngIf=\"buttonsLoading.previous\"\n        class=\"mat-progress-spinner\"\n      ></mat-progress-spinner>\n    </button>\n    <span>{{ yearSelected }}</span>\n    <button mat-icon-button (click)=\"nextYear()\">\n      <mat-icon\n        fontIcon=\"arrow_forward_ios\"\n        *ngIf=\"!buttonsLoading.next\"\n      ></mat-icon>\n      <mat-progress-spinner\n        mode=\"indeterminate\"\n        *ngIf=\"buttonsLoading.next\"\n        class=\"mat-progress-spinner\"\n      ></mat-progress-spinner>\n    </button>\n  </div>\n  <div class=\"executions-gantt-task-list-item-wrapper\">\n    <div\n      class=\"executions-gantt-task-list-item\"\n      [ngStyle]=\"{\n        'height.px': item.childs\n          ? item.collapsed === undefined || item.collapsed\n            ? 59\n            : 60 * item.childs.length + 59\n          : 59\n      }\"\n      *ngFor=\"let item of tasks; trackBy: trackByFn\"\n    >\n      <app-executions-gantt-task-list-item\n        [task]=\"item\"\n      ></app-executions-gantt-task-list-item>\n    </div>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Input,\n  OnChanges,\n  OnInit,\n} from '@angular/core';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport {\n  addDays,\n  differenceInMilliseconds,\n  getYear,\n  isFirstDayOfMonth,\n  lastDayOfMonth,\n  startOfDay,\n  startOfMonth,\n  subDays,\n} from 'date-fns';\nimport { ExecutionsGanttCalendarComponent } from './components/executions-gantt-calendar/executions-gantt-calendar.component';\nimport { ExecutionsGanttTaskChartComponent } from './components/executions-gantt-task-chart/executions-gantt-task-chart.component';\nimport { ExecutionsGanttTaskListComponent } from './components/executions-gantt-task-list/executions-gantt-task-list.component';\nimport {\n  GanttState,\n  ViewMode,\n  ganttInitialState,\n} from './interfaces/gantt-state.interface';\nimport { OptionsTimesInterface } from './interfaces/options-times.interface';\nimport { Task } from './interfaces/task.interface';\nimport { TimesStepInterface } from './interfaces/times-step.interface';\n@Component({\n  selector: 'ng-gantt-scheduler',\n  standalone: true,\n  imports: [\n    CommonModule,\n    ExecutionsGanttTaskListComponent,\n    ExecutionsGanttCalendarComponent,\n    ExecutionsGanttTaskChartComponent,\n    MatProgressSpinner,\n  ],\n  templateUrl: './ng-gantt-scheduler.component.html',\n  styleUrl: './ng-gantt-scheduler.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgGanttSchedulerComponent implements OnInit, OnChanges {\n  @Input() tasks: Task[] = [];\n  @Input() viewMode: ViewMode = 'day';\n\n  state!: GanttState;\n\n  /**\n   * Initialization component\n   */\n  ngOnInit(): void {\n    this.state = {\n      ...ganttInitialState,\n      viewMode: this.viewMode,\n      tasks: this.tasks,\n      yearSelected: this.getYearSelected(),\n      options: {\n        ...ganttInitialState.options,\n        update: true,\n        delete: true,\n      },\n    };\n    this.initialization();\n  }\n\n  /**\n   * handler changes\n   */\n  ngOnChanges(): void {\n    if (this.state) {\n      this.state = {\n        ...this.state,\n        tasks: this.tasks,\n        viewMode: this.viewMode,\n      };\n      this.initialization();\n    }\n  }\n\n  getYearSelected(): number {\n    return getYear(new Date());\n  }\n\n  onChangeYearSelected(yearSelected: number): void {\n    localStorage.setItem('yearConfig', yearSelected.toString());\n    this.state = { ...this.state, yearSelected };\n    this.initialization();\n  }\n\n  /**\n   * initialization values with new values of tasks\n   */\n  private initialization(): void {\n    this.initTimes();\n    this.recalculateTimes();\n    this.calculateSteps(this.state.times);\n    this.handlerVisibilityCalendarRows();\n  }\n  /**\n   * initialization values of times\n   */\n  private initTimes(): void {\n    let firstTaskTime =\n      this.state.tasks?.length > 0 ? Number.MAX_SAFE_INTEGER : 0;\n    let lastTaskTime = 0;\n    let firstTime: number =\n      this.state.tasks?.length > 0 ? Number.MAX_SAFE_INTEGER : 0;\n    let lastTime: number = 0;\n    for (let index = 0, len = this.state.tasks?.length; index < len; index++) {\n      const task = this.state.tasks[index];\n\n      const startTime: number = startOfDay(new Date(task.startTime)).getTime();\n      const endTime: number = startOfDay(new Date(task.endTime)).getTime();\n      if (startTime < firstTaskTime) {\n        firstTaskTime = startOfDay(task.startTime).getTime();\n      }\n      if (endTime > lastTaskTime) {\n        lastTaskTime = startOfDay(task.endTime).getTime();\n      }\n    }\n    const optionsScopeBefore: number = 2;\n    const optionsScopeAfter: number = 2;\n    // apply limit times\n    const startLimitTime: number = startOfDay(\n      new Date(this.state.yearSelected, 0, 1),\n    ).getTime();\n    const endLimitTime: number = startOfDay(\n      new Date(this.state.yearSelected, 11, 31),\n    ).getTime();\n    firstTime = this.state.useLimit\n      ? startLimitTime\n      : startOfMonth(\n          subDays(startOfDay(firstTime), optionsScopeBefore),\n        ).getTime();\n    lastTime = this.state.useLimit\n      ? endLimitTime\n      : lastDayOfMonth(\n          addDays(startOfDay(lastTime), optionsScopeAfter),\n        ).getTime();\n    this.state = {\n      ...this.state,\n      times: {\n        ...this.state.times,\n        firstTaskTime,\n        firstTime,\n        lastTaskTime,\n        lastTime,\n      },\n    };\n  }\n  /**\n   * recalculate time per pixel and width\n   */\n  private recalculateTimes(): void {\n    const timeScale: number = 60 * 1000;\n    const timeZoom: number = this.state.viewMode === 'day' ? 20 : 24;\n    const lastTime: number = addDays(this.state.times?.lastTime, 1).getTime();\n    const firstTime: number = this.state.times?.firstTime;\n    const max = timeScale * 60;\n    const min = timeScale;\n    const steps = max / min;\n    const percent = timeZoom / 100;\n    const timePerPixel: number = Math.trunc(\n      timeScale * steps * percent + Math.pow(2, timeZoom),\n    );\n    const totalViewDurationMs: number = differenceInMilliseconds(\n      lastTime,\n      firstTime,\n    );\n    const width: number = Math.trunc(totalViewDurationMs / timePerPixel);\n    this.state = {\n      ...this.state,\n      times: { ...this.state.times, timePerPixel, width },\n    };\n  }\n\n  private calculateSteps(times: OptionsTimesInterface): void {\n    let steps: TimesStepInterface[] = [] as TimesStepInterface[];\n    const lastMs: number = times?.lastTime;\n    const timePerPixel: number = times?.timePerPixel;\n    steps.push({\n      time: times.firstTime,\n      showLine:\n        this.state.viewMode === 'month'\n          ? isFirstDayOfMonth(times.firstTime)\n          : true,\n      offset: { ms: 0, px: 0 },\n      width: { ms: 0, px: 0 },\n    });\n    for (\n      let currentDate = startOfDay(addDays(times.firstTime, 1));\n      currentDate.getTime() <= lastMs;\n      currentDate = startOfDay(addDays(currentDate, 1))\n    ) {\n      const offsetMs: number = differenceInMilliseconds(\n        currentDate,\n        times.firstTime,\n      );\n      const offsetPx = Math.trunc(offsetMs / timePerPixel);\n      const step: TimesStepInterface = {\n        time: currentDate.getTime(),\n        showLine:\n          this.state.viewMode === 'month'\n            ? isFirstDayOfMonth(currentDate.getTime())\n            : true,\n        offset: { ms: offsetMs, px: offsetPx },\n        width: { ms: 0, px: 0 },\n      };\n      const lastStep: TimesStepInterface = steps[steps.length - 1];\n      steps[steps.length - 1].width = {\n        ms: offsetMs - lastStep.offset.ms,\n        px: offsetPx - lastStep.offset.px,\n      };\n      // add new\n      steps.push(step);\n    }\n\n    steps = steps.map((item: TimesStepInterface, index: number) => {\n      if (index === steps.length - 1) {\n        return {\n          ...item,\n          width: {\n            ms: times.lastTime - item.offset.ms,\n            px: times.width - item.offset.px,\n          },\n        };\n      }\n      return item;\n    });\n    this.state = { ...this.state, times: { ...this.state.times, steps } };\n  }\n\n  /**\n   * handler visibilite calendar rows\n   */\n  private handlerVisibilityCalendarRows(): void {\n    const isViewModeDay: boolean = this.state.viewMode === 'day';\n    this.state = {\n      ...this.state,\n      calendar: {\n        ...this.state.calendar,\n        day: { ...this.state.calendar.day, display: isViewModeDay },\n        month: { ...this.state.calendar.month, display: true },\n        year: { ...this.state.calendar.year, display: !isViewModeDay },\n      },\n    };\n  }\n}\n","<div id=\"scrollGantt\" class=\"executions-wrapper\">\n  <div class=\"executions-gantt\" *ngIf=\"state.tasks && state.times\">\n    <div class=\"executions-gantt-task-list-wrapper\">\n      <app-executions-gantt-task-list\n        [tasks]=\"state.tasks\"\n        [yearSelected]=\"state.yearSelected\"\n        (changeYearSelected)=\"onChangeYearSelected($event)\"\n      ></app-executions-gantt-task-list>\n    </div>\n    <div class=\"executions-gantt-chart-wrapper\">\n      <div class=\"executions-gantt-chart-wrapper-calendar\">\n        <app-executions-gantt-calendar\n          [times]=\"state.times\"\n          [calendar]=\"state.calendar\"\n        ></app-executions-gantt-calendar>\n      </div>\n      <app-executions-gantt-task-chart\n        [tasks]=\"state.tasks\"\n        [times]=\"state.times\"\n        [options]=\"state.options\"\n        *ngIf=\"state.tasks.length > 0; else emptyTasks\"\n      >\n      </app-executions-gantt-task-chart>\n      <ng-template #emptyTasks>\n        <div class=\"error\">\n          <div class=\"error-image\"></div>\n          <div class=\"error-label\">\n            <span> No tasks </span>\n          </div>\n        </div>\n      </ng-template>\n    </div>\n  </div>\n</div>\n","/*\n * Public API Surface of ng-gantt-scheduler\n */\nexport * from './lib/interfaces/gantt-state.interface';\nexport * from './lib/interfaces/task.interface';\nexport * from './lib/ng-gantt-scheduler.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.NgGanttSchedulerService","i4","i5","i3"],"mappings":"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"}