{"version":3,"file":"puzzleitc-ng-time-chart.mjs","sources":["../../../projects/ng-time-chart/src/lib/period.ts","../../../projects/ng-time-chart/src/lib/group.ts","../../../projects/ng-time-chart/src/lib/constants.ts","../../../projects/ng-time-chart/src/lib/service/period.service.ts","../../../projects/ng-time-chart/src/lib/service/year.service.ts","../../../projects/ng-time-chart/src/lib/layout/layout-strategy.enum.ts","../../../projects/ng-time-chart/src/lib/layout/stacked-layout.service.ts","../../../projects/ng-time-chart/src/lib/layout/tiled-layout.service.ts","../../../projects/ng-time-chart/src/lib/layout/layout-selector.service.ts","../../../projects/ng-time-chart/src/lib/pipes/time-chart-date-formatter.pipe.ts","../../../projects/ng-time-chart/src/lib/components/item/item.component.ts","../../../projects/ng-time-chart/src/lib/components/item/item.component.html","../../../projects/ng-time-chart/src/lib/components/item-grouping/item-grouping.component.ts","../../../projects/ng-time-chart/src/lib/components/item-grouping/item-grouping.component.html","../../../projects/ng-time-chart/src/lib/components/time-table-body/time-table-body.component.ts","../../../projects/ng-time-chart/src/lib/components/time-table-body/time-table-body.component.html","../../../projects/ng-time-chart/src/lib/components/chart/ng-time-chart.component.ts","../../../projects/ng-time-chart/src/lib/components/chart/ng-time-chart.component.html","../../../projects/ng-time-chart/src/lib/components/ng-time-chart.module.ts","../../../projects/ng-time-chart/src/public-api.ts","../../../projects/ng-time-chart/src/puzzleitc-ng-time-chart.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nexport class Period {\n\n  private readonly _startDate: DateTime;\n  private readonly _endDate: DateTime;\n\n  private static splitAtNewYear(period: Period): Period[] {\n    const periods: Period[] = [];\n    if (period.endDate.year > period.startDate.year) {\n      periods.push(new Period(period.startDate.set({}), DateTime.fromISO(`${period.startDate.year}-12-31`)));\n      periods.push(...Period.splitAtNewYear(new Period(DateTime.fromISO(`${period.endDate.year}-01-01`), period.endDate.set({}))));\n    } else {\n      periods.push(period);\n    }\n    return periods;\n  }\n\n  constructor(startDate: DateTime, endDate: DateTime) {\n    this._startDate = startDate?.set({});\n    this._endDate = endDate?.set({});\n  }\n\n  static forYear(year: number): Period {\n    const midYear = DateTime.fromISO(`${year}-06-01`);\n    return new Period(midYear.set({}).startOf('year'), midYear.set({}).endOf('year'));\n  }\n\n  get startDate(): DateTime {\n    return this._startDate;\n  }\n\n  get endDate(): DateTime {\n    return this._endDate;\n  }\n\n  get days(): number {\n    return Math.ceil(this.endDate.diff(this.startDate, 'days').as('days'));\n  }\n\n  get isoWeeks(): number {\n\n    function countThursdays(period: Period) {\n      let count = 0;\n      let startDay = period.startDate.set({}).set({ weekday: 4 });\n      if (Period.isBefore(startDay,period.startDate)) {\n        startDay=startDay.plus({ days: 7 });\n      }\n      if (period.days >= 4) {\n        while (Period.isSameOrBeforeDay(startDay,period.endDate)) {\n          count++;\n          startDay=startDay.plus({ days: 7 });\n        }\n      }\n      return count;\n    }\n\n    const periods = Period.splitAtNewYear(this);\n    return periods.map(p => countThursdays(p))\n      .reduceRight((previousValue, currentValue) => previousValue + currentValue);\n  }\n\n  public isValid(): boolean {\n    if(this._endDate instanceof DateTime && this._startDate instanceof DateTime){\n      return !!this._startDate && !!this._endDate && this._startDate.toMillis() < this._endDate.toMillis()\n    }else{\n      return false;\n    }\n  }\n\n  public containsDate(date: DateTime): boolean {\n    return Period.isSameOrAfter(date,this.startDate) && Period.isSameOrBefore(date,this.endDate);\n  }\n\n  public toString() {\n    return `Period (${this.startDate} - ${this.endDate})`;\n  }\n\n  public overlaps(period: Period): boolean {\n    return !!this.intersect(period);\n  }\n\n  intersect(period: Period): Period {\n    const latestStart = DateTime.max(this.startDate, period.startDate);\n    const earliestEnd = DateTime.min(this.endDate, period.endDate);\n    if (!latestStart || !earliestEnd) {\n      return null;\n    }\n    if (Period.isAfter(latestStart,earliestEnd)) {\n      return null;\n    }\n    return new Period(latestStart, earliestEnd);\n  }\n\n  public equals(period: Period) {\n    return Period.isSame(this.startDate,period.startDate) && Period.isSame(this.endDate,period.endDate)\n  }\n\n\n  public static isSameDay(first:DateTime,second:DateTime):boolean{\n    return DateTime.fromISO(first.toISODate()).toMillis()==DateTime.fromISO(second.toISODate()).toMillis();\n  }\n  public static isSameOrBeforeDay(first:DateTime,second:DateTime):boolean{\n    return DateTime.fromISO(first.toISODate()).toMillis()<=DateTime.fromISO(second.toISODate()).toMillis();\n  }\n  public static isSameOrBefore(first:DateTime,second:DateTime):boolean{\n    return first.toMillis()<=second.toMillis();\n  }\n  public static isSameOrAfter(first:DateTime,second:DateTime):boolean{\n    return first.toMillis()>=second.toMillis();\n  }\n  public static isSame(first:DateTime,second:DateTime):boolean{\n    return first.toMillis()==second.toMillis();\n  }\n  public static isBefore(first:DateTime,second:DateTime):boolean{\n    return first.toMillis()<second.toMillis();\n  }\n  public static isAfter(first:DateTime,second:DateTime):boolean{\n    return first.toMillis()>second.toMillis();\n  }\n}\n","import {Item} from './item';\nimport {Period} from './period';\nimport { DateTime } from 'luxon';\n\nexport class Group {\n  readonly name: string;\n  readonly items: Item[];\n  readonly duration?: Period;\n  onClick?: () => void;\n\n  public constructor(name: string, items: Item[], onClick = () => {\n  }) {\n    this.name = name;\n    this.items = items;\n    this.duration = Group.calculateDuration(items);\n    this.onClick = onClick;\n  }\n\n  private static calculateDuration(items: Item[]) {\n    const startDate = DateTime.min(...items.map(item => item.startTime));\n    const endDate = DateTime.max(...items.map(item => item.endTime));\n    if (!startDate || !endDate) {\n      return null;\n    }\n    return new Period(startDate, endDate);\n  }\n\n}\n","export class Constants {\n  public static readonly DAY_WIDTH = 20;\n  public static readonly SIDEBAR_WIDTH = 200;\n}\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject, combineLatest, Observable, Subject} from 'rxjs';\nimport {Period} from '../period';\nimport {map} from 'rxjs/operators';\nimport { DateTime } from 'luxon';\n\n/**\n * The service provides the current calendar period. It is specified:\n * <ul>\n *   <li>As the period between a start and end date if both are specified</li>\n *   <li>The duration of a year following the start date if no end date is specified</li>\n *   <li>The duration of a year preceding the end date if no start date is specified</li>\n *   <li>The full current year from jan 1st to dec 31 if neither start nor end date are specified</li>\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class PeriodService {\n\n  private readonly _period$: Observable<Period>;\n  private readonly _isFullYear$: Observable<boolean>;\n  private readonly _startDate$: Subject<DateTime>;\n  private readonly _endDate$: Subject<DateTime>;\n\n\n  /**\n   * Set the start date of the period. If the parameter is null the start date will be calculated\n   * @param date A luxon date or null\n   */\n  set startDate(date: DateTime) {\n    this._startDate$.next(date);\n  }\n\n  /**\n   * Set the end date of the period. If the parameter is null the end date will be  calculated.\n   * @param date A luxon date or null\n   */\n  set endDate(date: DateTime) {\n    this._endDate$.next(date);\n  }\n\n  /**\n   * The observable with the period between start- and end date or the current year if neither is passed.\n   */\n  public get period$(): Observable<Period> {\n    return this._period$;\n  }\n\n  /**\n   * Returns true if neither start nor end were given and the current year was picked instead.\n   */\n  public get isFullYear$(): Observable<boolean> {\n    return this._isFullYear$;\n  }\n\n  constructor() {\n    this._startDate$ = new BehaviorSubject(null);\n    this._endDate$ = new BehaviorSubject(null);\n    this._period$ = new BehaviorSubject(PeriodService.getCurrentYearPeriod());\n    const startAndEnd$ = combineLatest([this._startDate$, this._endDate$]);\n    this._isFullYear$ = startAndEnd$.pipe(map(([start, end]) => !start && !end));\n    this._period$ = startAndEnd$.pipe(map(([start, end]) => PeriodService.calculatePeriod(start, end)));\n  }\n\n  private static getCurrentYearPeriod() {\n    const currentYear = DateTime.local();\n    return new Period(\n      currentYear.set({}).startOf('year'),\n      currentYear.set({}).endOf('year')\n    );\n  }\n\n  private static calculatePeriod(startDate: DateTime, endDate: DateTime): Period {\n    if (startDate == null && endDate == null) {\n      return null;\n    }\n    let myStartDate;\n    if (startDate != null) {\n      myStartDate = startDate;\n    } else {\n      myStartDate = endDate.set({});\n      myStartDate=myStartDate.minus({ year: 1 });\n    }\n\n    let myEndDate;\n    if (endDate != null) {\n      myEndDate = endDate.set({});\n    } else {\n      myEndDate = myStartDate.set({});\n      myEndDate=myEndDate.plus({ year: 1 });\n    }\n    return new Period(myStartDate, myEndDate);\n  }\n}\n","import {Injectable} from '@angular/core';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {Period} from '../period';\nimport {map} from 'rxjs/operators';\nimport { DateTime } from 'luxon';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class YearService {\n\n  private readonly _year$: Subject<number>;\n  private readonly _period$: Observable<Period>;\n\n  set year(value: number) {\n    this._year$.next(value);\n  }\n\n  get year$(): Observable<number> {\n    return this._year$.asObservable();\n  }\n\n  get period$() {\n    return this._period$;\n  }\n\n  private static periodForYear(year: number) {\n    return Period.forYear(year);\n  }\n\n  constructor() {\n    this._year$ = new BehaviorSubject<number>( DateTime.local().year);\n    this._period$ = this._year$.pipe(map(year => YearService.periodForYear(year)));\n  }\n}\n","export enum LayoutStrategy {\n  /**\n   * Stack items one on top of the other\n   */\n  Stacked = 0,\n  /**\n   * Try to tile items if their start and end dates do not overlap\n   */\n  Tiled = 1\n}\n","import {Injectable} from '@angular/core';\nimport {LayoutService} from './layout.service';\nimport {Item} from '../item';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class StackedLayoutService implements LayoutService {\n\n  constructor() {\n  }\n\n  doLayout(items: Item[]): Item[][] {\n    return items.map(item => [item]);\n  }\n}\n","import {Injectable} from '@angular/core';\nimport {LayoutService} from './layout.service';\nimport {Item} from '../item';\nimport { DateTime } from 'luxon';\nimport {Period} from '../period';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TiledLayoutService implements LayoutService {\n\n  constructor() {\n  }\n\n  /**\n   * Tries to layout items in the most compact way\n   * @param items The {@link Item}s to lay out.\n   */\n  public doLayout(items: Item[]): Item[][] {\n    const itemOrder = new ItemOrder();\n    const sorted = items.sort((a, b) => a.startTime.diff(b.startTime));\n    sorted.forEach(item => itemOrder.add(item));\n    return itemOrder.queues;\n  }\n}\n\nclass ItemOrder {\n\n  get queues(): Item[][] {\n    return this._queues;\n  }\n\n  constructor() {\n    this._queues = [];\n  }\n  private readonly _queues: Item[][];\n\n  private static getStartDate(item: Item): DateTime {\n    return item.startTime.set({}).startOf('day');\n  }\n\n  private static getEndDate(item: Item): DateTime {\n    return item.endTime.set({}).endOf('day');\n  }\n\n  add(item: Item) {\n    this.getFreeQueue(ItemOrder.getStartDate(item)).push(item);\n\n  }\n\n  private getFreeQueue(date: DateTime): Item[] {\n    if (this._queues.length === 0) {\n      return this.createNewSubQueue();\n    }\n\n    const queuesWithFreeSpace = this._queues.filter(queue => Period.isBefore(ItemOrder.getEndDate(queue[queue.length - 1]),date));\n    if (queuesWithFreeSpace.length > 0) {\n      return queuesWithFreeSpace[0];\n    }\n\n    return this.createNewSubQueue();\n  }\n\n  private createNewSubQueue(): Item[] {\n    const myQueue: Item[] = [];\n    this._queues.push(myQueue);\n    return myQueue;\n  }\n\n}\n","import {Injectable} from '@angular/core';\nimport {StackedLayoutService} from './stacked-layout.service';\nimport {TiledLayoutService} from './tiled-layout.service';\nimport {Item} from '../item';\nimport {LayoutStrategy} from './layout-strategy.enum';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LayoutSelectorService {\n\n  constructor(private readonly stackedLayout: StackedLayoutService,\n              private readonly tiledLayout: TiledLayoutService) {\n  }\n\n  /**\n   * Does the layout of the an {@link Item} list using the selected strategy\n   * @param items The Items to lay out\n   * @param strategy The {@link LayoutStrategy} to use to layout the items\n   */\n  public doLayout(items: Item[], strategy: LayoutStrategy = LayoutStrategy.Stacked): Item[][] {\n    switch (strategy) {\n      case LayoutStrategy.Stacked:\n        return this.stackedLayout.doLayout(items);\n      case LayoutStrategy.Tiled:\n        return this.tiledLayout.doLayout(items);\n\n    }\n  }\n\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport { DateTime } from 'luxon';\n\n@Pipe({\n  name: 'timeChartDateFormatter'\n})\n\nexport class TimeChartDateFormatterPipe implements PipeTransform {\n\n  transform(dateString: (string | DateTime)): any {\n    if(dateString instanceof DateTime){\n      return dateString.toFormat('dd. MM.');\n    }else{\n      return DateTime.fromISO(dateString).toFormat('dd. MM.');\n    }\n  }\n\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {Item} from '../../item';\nimport {Constants} from '../../constants';\nimport {Period} from '../../period';\nimport { DateTime } from 'luxon';\n\n@Component({\n  selector: 'ng-item',\n  templateUrl: './item.component.html',\n  styleUrls: ['./item.component.scss']\n})\nexport class ItemComponent implements OnInit {\n\n  readonly DAY_WIDTH = Constants.DAY_WIDTH;\n  readonly SIDEBAR_WIDTH = Constants.SIDEBAR_WIDTH;\n\n  @Input()\n  period: Period;\n\n  @Input()\n  item: Item;\n\n  constructor() {\n  }\n\n  ngOnInit(): void {\n  }\n\n  isVisible(item: Item) {\n    return this.isInPeriod(item.startTime) ||\n      this.isInPeriod(item.endTime) ||\n      new Period(item.startTime, item.endTime).containsDate(this.period.startDate);\n  }\n\n  isInPeriod(time: DateTime): boolean {\n    return this.period.containsDate(time);\n  }\n\n  getDayOfPeriod(date: DateTime): number {\n    if (!this.period.containsDate(date)) {\n      return 0;\n    }\n    return Math.floor(date.diff(this.period.startDate, 'days').as('days'));\n  }\n\n  getDuration(item: Item): number {\n    const startDate = this.getStartDateInCurrentPeriod(item.startTime).startOf('day');\n    const endDate = this.getEndDateCurrentPeriod(item.endTime).endOf('day');\n    return Math.ceil(endDate.diff(startDate, 'days').as('days'));\n  }\n\n  isNotInPeriod(time: DateTime): boolean {\n    return !this.period.containsDate(time);\n  }\n\n  getDaysSince(referenceDate: string | DateTime, date: string | DateTime): number {\n    let referenceDT: DateTime;\n    if(referenceDate instanceof DateTime){\n      referenceDT=referenceDate.set({});\n    }else{\n      referenceDT = DateTime.fromISO(referenceDate);;\n    }\n    referenceDT=this.getStartDateInCurrentPeriod(referenceDT).startOf('day');\n\n\n    let myDT: DateTime;\n    if(myDT instanceof DateTime){\n      myDT=date.set({});\n    }else{\n      myDT = DateTime.fromISO(date);;\n    }\n    myDT=this.getStartDateInCurrentPeriod(myDT).startOf('day');\n\n    return Math.ceil(myDT.diff(referenceDT, 'days').as('days'));\n  }\n\n\n  open(item: Item) {\n    item.onClick?.apply(null);\n  }\n\n  private getStartDateInCurrentPeriod(startDate: DateTime): DateTime {\n    if (Period.isBefore(startDate,this.period.startDate)) {\n      return this.period.startDate;\n    }\n    return startDate;\n  }\n\n  private getEndDateCurrentPeriod(endDate: DateTime): DateTime {\n    if (Period.isAfter(endDate,this.period.endDate)) {\n      return this.period.endDate;\n    }\n    return endDate;\n  }\n\n}\n","<div class=\"item {{item.class}}\"\n     *ngIf=\"isVisible(item)\"\n     [style.left.px]=\"(getDayOfPeriod(item.startTime) * DAY_WIDTH + SIDEBAR_WIDTH)\"\n     [style.minWidth.px]=\"(getDuration(item) * DAY_WIDTH)\"\n     [style.maxWidth.px]=\"(getDuration(item) * DAY_WIDTH)\"\n     [class.open-left]=\"isNotInPeriod(item.startTime)\"\n     [class.open-right]=\"isNotInPeriod(item.endTime)\"\n     (click)=\"open(item)\">\n  <ng-container *ngFor=\"let day of item.dates\">\n    <div class=\"blockade-day day-width-1\"\n         *ngIf=\"isInPeriod(day)\"\n         [style.left.px]=\"getDaysSince(item.startTime, day) * DAY_WIDTH\">\n      &nbsp;\n    </div>\n  </ng-container>\n  <div class=\"blockade-title\">\n    {{item.name}}\n    <ng-container *ngIf=\"!item.hideDateRangeInHeader\">\n      ({{item.startTime | timeChartDateFormatter}} - {{item.endTime | timeChartDateFormatter}})\n    </ng-container>\n  </div>\n  <div *ngIf=\"item.details\" class=\"blockade-details\">\n    <p>{{item.details}}</p>\n  </div>\n</div>\n","import {Component, Input} from '@angular/core';\nimport {Period} from '../../period';\nimport {Item} from '../../item';\nimport { DateTime } from 'luxon';\n\n@Component({\n  selector: 'ng-item-grouping',\n  templateUrl: './item-grouping.component.html',\n  styleUrls: ['./item-grouping.component.scss']\n})\nexport class ItemGroupingComponent {\n\n  @Input()\n  period: Period;\n\n  @Input()\n  itemGrouping: Item[];\n\n  constructor() {\n  }\n\n  isInPeriod(time: DateTime): boolean {\n    return this.period.containsDate(time);\n  }\n\n  open(item: Item) {\n    item.onClick?.apply(null);\n  }\n\n  visibleInPeriod(itemGrouping: Item[]) {\n    if (!itemGrouping || itemGrouping.length === 0) {\n      return false;\n    }\n    const earliestDate = DateTime.min(...itemGrouping.map(item => item.startTime));\n    const latestDate = DateTime.max(...itemGrouping.map(item => item.endTime));\n    const groupingPeriod = new Period(earliestDate, latestDate);\n    return this.isInPeriod(earliestDate) ||\n      this.isInPeriod(latestDate) ||\n      groupingPeriod.containsDate(this.period.startDate);\n  }\n}\n","<div class=\"item-grouping\" *ngIf=\"visibleInPeriod(itemGrouping)\">\n  <div class=\"items\">\n    <ng-container *ngFor=\"let item of itemGrouping\">\n      <ng-item [period]=\"period\" [item]=\"item\"></ng-item>\n    </ng-container>\n  </div>\n</div>\n","import {Component, Input, ViewChild} from '@angular/core';\nimport {Constants} from '../../constants';\nimport {Group} from '../../group';\nimport {Item} from '../../item';\nimport {Period} from '../../period';\nimport {LayoutSelectorService} from '../../layout/layout-selector.service';\nimport {LayoutStrategy} from '../../layout/layout-strategy.enum';\nimport {DateTime} from 'luxon';\n\n@Component({\n  selector: 'ng-time-table-body',\n  templateUrl: './time-table-body.component.html',\n  styleUrls: ['./time-table-body.component.scss']\n})\nexport class TimeTableBodyComponent {\n\n  readonly DAY_WIDTH = Constants.DAY_WIDTH;\n  readonly SIDEBAR_WIDTH = Constants.SIDEBAR_WIDTH;\n\n  @Input()\n  groups: Group[];\n\n  @Input()\n  period: Period;\n\n  @Input()\n  today: DateTime;\n\n  @Input()\n  durationInDays: number;\n\n  @Input()\n  layoutStrategy: LayoutStrategy;\n\n  @ViewChild('todaymarker') todayMarker;\n\n\n  constructor(readonly layoutSelectorService: LayoutSelectorService) {\n    this.groups = [];\n  }\n\n  doLayout(items: Item[]): Item[][] {\n    return this.layoutSelectorService.doLayout(items, this.layoutStrategy);\n  }\n\n  getDayOfPeriod(date: DateTime): number {\n    if (!this.period.containsDate(date)) {\n      return 0;\n    }\n    return Math.round(date.diff(this.period.startDate, 'days').as('days')) - 1;\n  }\n\n  isInPeriod(time: DateTime): boolean {\n    if (this.period) {\n      return this.period.containsDate(time);\n    } else {\n      return false;\n    }\n  }\n\n\n  open(group: Group) {\n    group.onClick?.apply(null);\n  }\n}\n","<div class=\"timetable-body\"\n     [style.minWidth.px]=\"durationInDays * DAY_WIDTH + SIDEBAR_WIDTH\">\n  <div class=\"item-group\"\n       *ngFor=\"let group of groups\">\n    <div class=\"item-label label-bar\" (click)=\"open(group)\">\n      {{group.name}}\n    </div>\n    <div class=\"item-display\">\n      <ng-container *ngFor=\"let itemGrouping of doLayout(group.items)\">\n        <ng-item-grouping [itemGrouping]=\"itemGrouping\" [period]=\"period\"></ng-item-grouping>\n      </ng-container>\n    </div>\n  </div>\n  <div class=\"today-marker\"\n       *ngIf=\"isInPeriod(this.today)\"\n       [style.left.px]=\"(getDayOfPeriod(this.today) * DAY_WIDTH) + SIDEBAR_WIDTH + 7\"></div>\n</div>\n","import {AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {filter, map} from 'rxjs/operators';\nimport {Period} from '../../period';\nimport {BehaviorSubject, combineLatest, Observable, Subject} from 'rxjs';\nimport {Group} from '../../group';\nimport {Constants} from '../../constants';\nimport {LayoutStrategy} from '../../layout/layout-strategy.enum';\nimport {PeriodService} from '../../service/period.service';\nimport {YearService} from '../../service/year.service';\nimport { DateTime } from 'luxon';\n\n\n@Component({\n  selector: 'ng-time-chart',\n  templateUrl: './ng-time-chart.component.html',\n  styleUrls: ['./ng-time-chart.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [\n    PeriodService,\n    YearService]\n})\nexport class NgTimeChartComponent implements AfterViewInit {\n\n  private readonly _groups$: Subject<Group[]>;\n\n  @Input()\n  set groups(value: Group[]) {\n    this._groups$.next(value);\n  }\n\n  readonly filteredGroups$: Observable<Group[]>;\n  readonly currentPeriod$: Observable<Period>;\n\n  @Input()\n  set startDate(date: DateTime) {\n    this.periodService.startDate = date;\n  }\n\n  get startDate(): DateTime {\n    return this.periodService.startDate;\n  }\n\n  @Input()\n  set endDate(date: DateTime) {\n    this.periodService.endDate = date;\n  }\n\n  get endDate(): DateTime {\n    return this.periodService.endDate;\n  }\n\n  get currentYear$(): Observable<number> {\n    return this.yearService.year$;\n  }\n\n  @Input()\n  layoutStrategy: LayoutStrategy;\n\n  @Output()\n  readonly yearChange: EventEmitter<number>;\n\n  @ViewChild('todayMarker') todayMarker;\n\n  readonly months$: Observable<Period[]>;\n  readonly weeks$: Observable<Period[]>;\n  readonly days$: Observable<DateTime[]>;\n  readonly durationInDays$: Observable<number>;\n  readonly precedingPeriodDaysBeforeFirstWeek$: Observable<number>;\n  readonly today: DateTime;\n\n  readonly DAY_WIDTH = Constants.DAY_WIDTH;\n\n  constructor(public periodService: PeriodService,\n              public yearService: YearService) {\n    this.yearChange = new EventEmitter<number>();\n    this.yearService.year$.subscribe(year => this.yearChange.emit(year));\n    this._groups$ = new BehaviorSubject<Group[]>([]);\n    this.today = DateTime.local().set({ hour: 12 })\n    this.currentPeriod$ = combineLatest([this.periodService.period$, this.yearService.period$])\n      .pipe(map(([period, year]) => period != null ? period : year),\n        filter(period => period.isValid()));\n\n    this.months$ = this.currentPeriod$.pipe(map(period => NgTimeChartComponent.enumerateMonths(period)));\n    this.weeks$ = this.currentPeriod$.pipe(map(period => NgTimeChartComponent.enumerateWeeks(period)));\n    this.days$ = this.currentPeriod$.pipe(map(period => NgTimeChartComponent.enumerateDays(period)));\n    this.durationInDays$ = this.days$.pipe(map(days => days.length));\n    this.precedingPeriodDaysBeforeFirstWeek$ = this.currentPeriod$.pipe(\n      map(period => NgTimeChartComponent.getOldPeriodDaysBeforeFirstWeek(period))\n    );\n\n    this.filteredGroups$ = combineLatest([this.currentPeriod$, this._groups$])\n      .pipe(map(([period, groups]) => groups.filter(group => period.overlaps(group.duration))));\n  }\n\n\n  private static getOldPeriodDaysBeforeFirstWeek(period: Period): number {\n    if (!period.isValid()) {\n      return 0;\n    }\n    if (period.startDate.weekday <= 4) {\n      return 0;\n    }\n    const weekStart = period.startDate.set({}).set(({ weekday: 1 }));\n    if (!period.containsDate(weekStart)) {\n      weekStart.plus({ week: 1 })\n    }\n    const difference = Math.ceil(weekStart.diff(period.startDate, 'days').as('days'));\n    return difference > 0 ? difference : 0;\n  }\n\n  static enumerateMonths(period: Period): Period[] {\n    if (!period) {\n      return null;\n    }\n\n    function getMonthWithinPeriod(dayInMonth: DateTime): Period {\n      const fullMonth = new Period(dayInMonth.set({}).startOf('month'), dayInMonth.set({}).endOf('month'));\n      return fullMonth.intersect(myPeriod);\n    }\n\n    function enumerateWithinPeriod(startDate: DateTime): Period[] {\n      const months = [];\n      let current = startDate.set({});\n      while (myPeriod.containsDate(current)) {\n        months.push(getMonthWithinPeriod(current));\n        current = current.set({}).plus({ month: 1 });\n      }\n      return months;\n    }\n\n\n    const myPeriod = new Period(period.startDate.set({}).set({ hour: 0 }), period.endDate.set({}).set({ hour: 23 }));\n    return enumerateWithinPeriod(period.startDate.set({}));\n  }\n\n  static enumerateWeeks(period: Period): Period[] {\n    function enumerate(currentDate: DateTime, expanded: Period[]): Period[] {\n      if (Period.isSameOrBeforeDay(currentDate,period.endDate)) {\n        const endDate = currentDate.set({}).endOf('week');\n        const startDate = currentDate.set({}).startOf('week');\n        const week = new Period(startDate, endDate);\n        expanded.push(period.intersect(week));\n        const advanceDate = currentDate.set({}).plus({ week: 1 });\n        enumerate(advanceDate, expanded);\n      }\n      return expanded;\n    }\n\n    function firstWeekInPeriod(): DateTime {\n      const date = period?.startDate.set({}).set({ weekday: 4 })\n      return period.containsDate(date) ? date : date.plus({ week: 1 });\n    }\n\n    return !period ? null : enumerate(firstWeekInPeriod(), []);\n  }\n\n  static enumerateDays(period: Period): DateTime[] {\n    function enumerate(currentDate: DateTime, expanded: DateTime[]) {\n      if (Period.isSameOrBeforeDay(currentDate,period.endDate)) {\n        expanded.push(currentDate);\n        const advanceDate = currentDate.set({}).plus({ days: 1 });\n        enumerate(advanceDate, expanded);\n      }\n      return expanded;\n    }\n\n    return !period ? null : enumerate(period.startDate.set({}), []);\n  }\n\n  ngAfterViewInit() {\n    this.scrollTodayIntoView();\n  }\n\n  isToday(day: DateTime): boolean {\n    return Period.isSameDay(this.today,day);\n  }\n\n  changeYear(year: number) {\n    this.yearService.year = year;\n  }\n\n  showYearSpinner$(): Observable<boolean> {\n    return this.periodService.isFullYear$;\n  }\n\n  private scrollTodayIntoView() {\n    if (!!this.todayMarker) {\n      this.todayMarker.nativeElement.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'center'});\n    }\n  }\n}\n","<div class=\"timetable\">\n  <div class=\"timetable-header\"\n       [style.width.px]=\"(durationInDays$ | async) * DAY_WIDTH\">\n    <div class=\"year-selector label-bar\">\n      <div *ngIf=\"(showYearSpinner$() | async) && (currentYear$ | async) as currentYear\">\n        <h3 style=\"display: inline-block; cursor: pointer\" (click)=\"changeYear(currentYear -1)\">&lt; </h3>\n        <h1 style=\"display: inline-block\">{{currentYear}}</h1>\n        <h3 style=\"display: inline-block; cursor: pointer\" (click)=\"changeYear(currentYear + 1)\"> &gt;</h3>\n      </div>\n    </div>\n    <div class=\"calendar-header\"\n         [style.width.px]=\"(durationInDays$ | async) * DAY_WIDTH\">\n      <div class=\"months\">\n        <div *ngFor=\"let month of months$ | async\"\n             [style.width.px]=\"month.days * DAY_WIDTH\"\n             [style.max-width.px]=\"month.days * DAY_WIDTH\"\n             class=\"month\">\n          {{month.startDate.toFormat('MMMM yyyy')}}\n        </div>\n      </div>\n      <div class=\"week-bar\">\n        <div class=\"weeks\">\n          <div class=\"week-offset\"\n               *ngIf=\"(precedingPeriodDaysBeforeFirstWeek$ |async)>0\"\n               [style.width.px]=\"(precedingPeriodDaysBeforeFirstWeek$ | async) * DAY_WIDTH\"></div>\n          <div class=\"week\"\n               *ngFor=\"let week of weeks$ | async\"\n               [style.width.px]=\"week.days * DAY_WIDTH\">({{week.startDate.weekNumber}}\n            ){{week.startDate.startOf('week').toFormat('L')}}</div>\n        </div>\n      </div>\n      <div class=\"days\">\n        <ng-container *ngFor=\"let day of days$ | async\">\n          <div class=\"day today\" *ngIf=\"isToday(day); else normalDay\" [ngClass]=\"{'today': isToday(day)}\" #todayMarker>\n            {{day.toFormat('dd')}}\n          </div>\n          <ng-template #normalDay>\n            <div class=\"day\">\n              {{day.toFormat('dd')}}\n            </div>\n          </ng-template>\n        </ng-container>\n      </div>\n    </div>\n  </div>\n  <ng-time-table-body [groups]=\"filteredGroups$ | async\"\n                      [today]=\"today\"\n                      [period]=\"currentPeriod$ | async\"\n                      [durationInDays]=\"durationInDays$ | async\"\n                      [layoutStrategy]=\"layoutStrategy\"></ng-time-table-body>\n</div>\n","import {NgModule} from '@angular/core';\nimport {NgTimeChartComponent} from './chart/ng-time-chart.component';\nimport {CommonModule} from '@angular/common';\nimport {TimeTableBodyComponent} from './time-table-body/time-table-body.component';\nimport {ItemGroupingComponent} from './item-grouping/item-grouping.component';\nimport {TimeChartDateFormatterPipe} from '../pipes/time-chart-date-formatter.pipe';\nimport {ItemComponent} from './item/item.component';\n\n@NgModule({\n  declarations: [\n    TimeTableBodyComponent,\n    ItemGroupingComponent,\n    TimeChartDateFormatterPipe,\n    ItemComponent,\n    NgTimeChartComponent\n  ],\n  imports: [\n    CommonModule,\n  ],\n  exports: [\n    ItemComponent,\n    TimeTableBodyComponent,\n    ItemGroupingComponent,\n    NgTimeChartComponent\n  ]\n})\nexport class NgTimeChartModule {\n}\n","/*\n * Public API Surface of ng-timeline\n */\n\nexport * from './lib/group';\nexport * from './lib/item';\nexport * from './lib/components/ng-time-chart.module';\nexport * from './lib/components/chart/ng-time-chart.component';\nexport * from './lib/layout/layout-strategy.enum';\nexport * from './lib/components/time-table-body/time-table-body.component';\nexport * from './lib/components/item-grouping/item-grouping.component';\nexport * from './lib/components/item/item.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.StackedLayoutService","i2.TiledLayoutService","i1","i2.TimeChartDateFormatterPipe","i1.ItemComponent","i2","i1.LayoutSelectorService","i2.ItemGroupingComponent","i3","i1.PeriodService","i2.YearService","i3.TimeTableBodyComponent"],"mappings":"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"}