{"version":3,"file":"ngx-gem-spaas-date.mjs","sources":["../../../projects/ngx-gem-spaas/date/src/_models/date.model.ts","../../../projects/ngx-gem-spaas/date/src/_services/date.service.ts","../../../projects/ngx-gem-spaas/date/src/calendar/calendar.component.ts","../../../projects/ngx-gem-spaas/date/src/calendar/calendar.component.html","../../../projects/ngx-gem-spaas/date/src/_services/contract-label.service.ts","../../../projects/ngx-gem-spaas/date/src/_pipes/date.pipe.ts","../../../projects/ngx-gem-spaas/date/src/date-indicator/date-indicator.component.ts","../../../projects/ngx-gem-spaas/date/src/date-indicator/date-indicator.component.html","../../../projects/ngx-gem-spaas/date/src/date-picker/date-picker.component.ts","../../../projects/ngx-gem-spaas/date/src/date-picker/date-picker.component.html","../../../projects/ngx-gem-spaas/date/src/date-range-picker/date-range-picker.component.ts","../../../projects/ngx-gem-spaas/date/src/date-range-picker/date-range-picker.component.html","../../../projects/ngx-gem-spaas/date/src/_pipes/datetime-format.pipe.ts","../../../projects/ngx-gem-spaas/date/src/_services/granularity.service.ts","../../../projects/ngx-gem-spaas/date/src/granularity-picker/granularity-picker.component.ts","../../../projects/ngx-gem-spaas/date/src/granularity-picker/granularity-picker.component.html","../../../projects/ngx-gem-spaas/date/src/date.module.ts","../../../projects/ngx-gem-spaas/date/src/_models/contract.model.ts","../../../projects/ngx-gem-spaas/date/src/public-api.ts","../../../projects/ngx-gem-spaas/date/src/ngx-gem-spaas-date.ts"],"sourcesContent":["import {DateTime} from 'luxon';\r\nimport {GranularityType} from \"./contract.model\";\r\n\r\nexport class DateModel {\r\n  intraDay: string;\r\n  intraDayLabelsH: string[] = [];\r\n  intraDayLabelsS: string[] = [];\r\n  intraDayLabelsQ: string[] = [];\r\n  intraDayNumH: number = 0;\r\n  dayAhead: string = '';\r\n  dayAheadLabelsH: string[] = [];\r\n  dayAheadLabelsS: string[] = [];\r\n  dayAheadLabelsQ: string[] = [];\r\n  dayAheadNumH: number = 0;\r\n\r\n  private static setLabels(date: string, byMins: GranularityType): string[] {\r\n    const labels: string[] = [];\r\n    let from = DateTime.fromISO(date).startOf('day');\r\n    const to = DateTime.fromISO(date).endOf('day');\r\n    while (from < to) {\r\n      labels.push(from.toUTC().toISO() || 'invalid date');\r\n      from = from.plus({minutes: byMins});\r\n    }\r\n    return labels;\r\n  }\r\n\r\n  constructor(date: string) {\r\n    let dt = DateTime.fromISO(date).startOf('day').toUTC();\r\n    if (!dt.isValid) {\r\n      dt = DateTime.now().startOf('day');\r\n    }\r\n    this.intraDay = dt.toISO();\r\n    this.calcFields();\r\n  }\r\n\r\n  calcFields(): void {\r\n    // intra-day\r\n    this.intraDayNumH = this.calcHours(this.intraDay);\r\n    this.intraDayLabelsH = DateModel.setLabels(this.intraDay, 60);\r\n    this.intraDayLabelsS = DateModel.setLabels(this.intraDay, 30);\r\n    this.intraDayLabelsQ = DateModel.setLabels(this.intraDay, 15);\r\n    // day-ahead\r\n    this.dayAhead = DateTime.fromISO(this.intraDay).plus({days: 1}).toUTC().toISO() || 'invalid date';\r\n    this.dayAheadNumH = this.calcHours(this.dayAhead);\r\n    this.dayAheadLabelsH = DateModel.setLabels(this.dayAhead, 60);\r\n    this.dayAheadLabelsS = DateModel.setLabels(this.dayAhead, 30);\r\n    this.dayAheadLabelsQ = DateModel.setLabels(this.dayAhead, 15);\r\n  }\r\n\r\n  private calcHours(date: string): number {\r\n    const startOfDate = DateTime.fromISO(date).startOf('day');\r\n    return <number>startOfDate.plus({days: 1}).startOf('day').diff(startOfDate, 'hours').toObject().hours;\r\n  }\r\n\r\n}\r\n","import {Observable, ReplaySubject} from 'rxjs';\r\nimport {Injectable} from '@angular/core';\r\nimport {DateTime} from 'luxon';\r\nimport {SessionStorageService} from 'ngx-gem-spaas';\r\nimport {DateModel} from \"../_models/date.model\";\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class DateService {\r\n\r\n  private date: DateModel;\r\n  private date$ = new ReplaySubject<DateModel>(0);\r\n\r\n  private readonly SS_DATE = 'date';\r\n\r\n  static calcIdx(from: string, ts: string, granularity: 15 | 30 | 60, setToStartOfDay: boolean = true): number {\r\n    switch (granularity) {\r\n      case 15:\r\n        return DateService.calcIdxQ(from, ts, setToStartOfDay);\r\n      case 30:\r\n        return DateService.calcIdxS(from, ts, setToStartOfDay);\r\n      case 60:\r\n        return DateService.calcIdxH(from, ts, setToStartOfDay);\r\n    }\r\n\r\n  }\r\n\r\n  static calcIdxH(from: string, ts: string, setToStartOfDay: boolean = true): number {\r\n    const fromDt = setToStartOfDay ? DateTime.fromISO(from).startOf('day').toUTC() : DateTime.fromISO(from).toUTC();\r\n    return Math.floor(<number>DateTime.fromISO(ts).toUTC().diff(fromDt, 'hours').toObject().hours);\r\n  }\r\n\r\n  static calcIdxS(from: string, ts: string, setToStartOfDay: boolean = true): number {\r\n    const hours = DateService.calcIdxH(from, ts, setToStartOfDay);\r\n    const minutes = DateTime.fromISO(ts).toUTC().minute;\r\n    return Math.floor(hours * 2 + minutes / 30);\r\n  }\r\n\r\n  static calcIdxQ(from: string, ts: string, setToStartOfDay: boolean = true): number {\r\n    const hours = DateService.calcIdxH(from, ts, setToStartOfDay);\r\n    const minutes = DateTime.fromISO(ts).toUTC().minute;\r\n    return hours * 4 + minutes / 15;\r\n  }\r\n\r\n  static calcQinH(ts: string): number {\r\n    return Math.floor(DateTime.fromISO(ts).minute / 15);\r\n  }\r\n\r\n  constructor(\r\n    private ssService: SessionStorageService,\r\n  ) {\r\n    const date = <DateModel>this.ssService.getItem(this.SS_DATE);\r\n    this.date = new DateModel(date.intraDay || DateTime.now().toISO());\r\n    this.newDate(this.date);\r\n  }\r\n\r\n\r\n  // ********************************************************************************************************\r\n  // BROADCAST DATA\r\n  // ********************************************************************************************************\r\n\r\n  newDate(newDate: DateModel) {\r\n    newDate.calcFields();\r\n    this.ssService.setItem(this.SS_DATE, newDate);\r\n    this.date$.next(newDate);\r\n    this.date = newDate;\r\n  }\r\n\r\n  onNewDate(): Observable<DateModel> {\r\n    return this.date$.asObservable();\r\n  }\r\n\r\n  getDate(): DateModel {\r\n    return this.date;\r\n  }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {DateTime} from 'luxon';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {DateModel} from \"../_models/date.model\";\r\nimport {DateService} from \"../_services/date.service\";\r\nimport {BaseComponent} from \"ngx-gem-spaas\";\r\n\r\n/** An inline calendar which is hooked up directly to the date service */\r\n@Component({\r\n  selector: 'spaas-calendar',\r\n  templateUrl: './calendar.component.html',\r\n  styleUrls: ['./calendar.component.scss']\r\n})\r\n\r\nexport class CalendarComponent extends BaseComponent {\r\n\r\n  /** The title (H1) to be displayed above the calendar */\r\n  @Input() title = '';\r\n  /** A custom function to limit which dates can be chosen.\r\n   *  Takes DateTime as input and should return a boolean. */\r\n  @Input() dateConstraint: (selectedDate: DateTime) => boolean = () => {\r\n    return true;\r\n  };\r\n\r\n  curDate = new DateModel(DateTime.now().toISO());\r\n  selDate: (DateTime & Date) | null = null;\r\n\r\n  constructor(\r\n    private dateService: DateService,\r\n  ) {\r\n    super();\r\n    this.getDate();\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // LOAD DATA\r\n  // ********************************************************************************************************\r\n\r\n  private getDate(): void {\r\n    this.dateService.onNewDate()\r\n      .pipe(takeUntil(this.onDestroy$))\r\n      .subscribe(\r\n        (date) => {\r\n          this.curDate = date;\r\n          this.selDate = DateTime.fromISO(date.intraDay) as (DateTime & Date);\r\n        }\r\n      );\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // UI\r\n  // ********************************************************************************************************\r\n\r\n  onChangeDate(e: any): void {\r\n    // should be a DateTime object, but check anyway\r\n    if (e?.toISO()) {\r\n      this.curDate.intraDay = e.toUTC().toISO();\r\n      this.dateService.newDate(this.curDate);\r\n    }\r\n  }\r\n\r\n}\r\n","<div class=\"calendar pad-big-top\">\r\n  @if (title) {\r\n    <h1>{{ title }}</h1>\r\n  }\r\n  <mat-calendar (selectedChange)=\"onChangeDate($event)\"\r\n                [dateFilter]=\"dateConstraint\"\r\n                [selected]=\"selDate\"\r\n                [startAt]=\"selDate\">\r\n  </mat-calendar>\r\n</div>\r\n","import {DateTime} from 'luxon';\r\nimport {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ContractLabelService {\r\n\r\n  private static fromH01toH24(ts: string): string {\r\n    return (DateTime.fromISO(ts).hour + 1).toFixed(0).padStart(3, 'H0');\r\n  }\r\n\r\n  private static fromS01toS48(ts: string): string {\r\n    const dt = DateTime.fromISO(ts);\r\n    return ((dt.hour * 2 + 1) + (dt.minute / 30)).toFixed(0).padStart(3, 'S0');\r\n  }\r\n\r\n  private static from00H1to23H2(ts: string): string {\r\n    const dt = DateTime.fromISO(ts);\r\n    return dt.toFormat('HH\\'H\\'') + (dt.minute / 30 + 1);\r\n  }\r\n\r\n  private static from00Q1to23Q4(ts: string): string {\r\n    const dt = DateTime.fromISO(ts);\r\n    return dt.toFormat(`HH'Q'`) + (dt.minute / 15 + 1);\r\n  }\r\n\r\n  static dstSuffixOct(ts: string): string {\r\n    const dt = DateTime.fromISO(ts);\r\n    const hoursInDay = dt.plus({days: 1}).startOf('day').diff(dt.startOf('day'), 'hours').toObject().hours;\r\n    if (hoursInDay === 25 && dt.hour === 2) {\r\n      return dt.toUTC().hour === 0 ? 'A' : 'B';\r\n    }\r\n    return '';\r\n  }\r\n\r\n  private static epexHourInc(ts: string): number {\r\n    const dt = DateTime.fromISO(ts);\r\n    const hoursInDay = dt.plus({days: 1}).startOf('day').diff(dt.startOf('day'), 'hours').toObject().hours;\r\n    if (hoursInDay === 23 && dt.toUTC().hour === 0) {\r\n      return 2;\r\n    }\r\n    return 1;\r\n  }\r\n\r\n  static getContractLabel(\r\n    ts: string,\r\n    type: 'epexH' | 'epexS' | 'epexQ' | 'bookH' | 'bookS' | 'bookQ' | 'vnetH' | 'vnetS' | 'vnetQ'\r\n  ): string {\r\n\r\n    switch (type) {\r\n\r\n      // EPEX\r\n      case 'epexH':\r\n        // 00-01 - 23-00 (DST: 01-03, 02-03A, 02-03B)\r\n        const h = DateTime.fromISO(ts).hour;\r\n        const inc = this.epexHourInc(ts);\r\n        return h.toString().padStart(2, '0') + '-' +\r\n          (h + inc).toString().replace('24', '0').padStart(2, '0') +\r\n          this.dstSuffixOct(ts);\r\n      case 'epexS':\r\n        // 00H1 - 23H2 (DST: 02H1A - 02H2B)\r\n        return this.from00H1to23H2(ts) + this.dstSuffixOct(ts);\r\n      case 'epexQ':\r\n        // 00Q1 - 23Q4 (DST: 02Q1A - 02Q4B)\r\n        return this.from00Q1to23Q4(ts) + this.dstSuffixOct(ts);\r\n\r\n      // VNET\r\n      case 'vnetH':\r\n        // H01 - H24 (DST: H03A, H03B)\r\n        return this.fromH01toH24(ts) + this.dstSuffixOct(ts);\r\n      case 'vnetS':\r\n        // S01 - S48 (DST: S06A - S06B)\r\n        return this.fromS01toS48(ts) + this.dstSuffixOct(ts);\r\n      case 'vnetQ':\r\n        // SAME AS EPEX: 00Q1 - 23Q4 (DST: 02Q1A - 02Q4B)\r\n        return this.from00Q1to23Q4(ts) + this.dstSuffixOct(ts);\r\n\r\n      // BOOKING\r\n      case 'bookH':\r\n        // SAMES AS VNET: H01 - H24 (DST: H03A, H03B)\r\n        return this.fromH01toH24(ts) + this.dstSuffixOct(ts);\r\n      case 'bookS':\r\n        // SAME AS VNET: S01 - S48 (DST: S05A - S06B)\r\n        return this.fromS01toS48(ts) + this.dstSuffixOct(ts);\r\n      case 'bookQ':\r\n        // Q01 - Q96\r\n        const dt = DateTime.fromISO(ts);\r\n        return (dt.hour * 4) + (dt.minute / 15 + 1).toFixed(0).padStart(2, 'Q0') + this.dstSuffixOct(ts);\r\n\r\n      default:\r\n        return '';\r\n\r\n    }\r\n  }\r\n\r\n}\r\n","import {DateTime} from 'luxon';\r\nimport {Pipe, PipeTransform} from '@angular/core';\r\nimport {ContractLabelService} from '../_services/contract-label.service';\r\nimport {DateService} from \"../_services/date.service\";\r\n\r\n@Pipe({name: 'tsToContract'})\r\nexport class TsToContractPipe implements PipeTransform {\r\n\r\n  transform(ts: string, gran: 15 | 30 | 60 = 60): string {\r\n    if (!ts) {\r\n      return '';\r\n    }\r\n    const labelType = gran === 60 ? 'vnetH' : gran === 30 ? 'epexS' : 'epexQ';\r\n    return ContractLabelService.getContractLabel(ts, labelType);\r\n  }\r\n}\r\n\r\n@Pipe({name: 'idxToH'})\r\nexport class IdxToHPipe implements PipeTransform {\r\n  transform(idx: number, refDate: string, gran: 15 | 30 | 60 = 60): number {\r\n    if (idx === null) {\r\n      return 0;\r\n    }\r\n    const dt = DateTime.fromISO(refDate).startOf('day').plus({minutes: idx * gran});\r\n    return dt.hour;\r\n  }\r\n}\r\n\r\n@Pipe({name: 'idxToTs'})\r\nexport class IdxToTsPipe implements PipeTransform {\r\n  transform(idx: number, refDate: string | null, gran: 15 | 30 | 60 = 60, withDate = false, customFormat = ''): string {\r\n    if (idx === null) {\r\n      return '';\r\n    }\r\n    const dt = DateTime.fromISO(refDate || '').startOf('day').plus({minutes: idx * gran});\r\n    const fmt = customFormat || (withDate ? 'DD/MM HH:mm' : 'HH:mm');\r\n    return dt.toFormat(fmt) + ContractLabelService.dstSuffixOct(dt.toISO() || '');\r\n  }\r\n}\r\n\r\n@Pipe({name: 'idOrDa'})\r\nexport class IdOrDaPipe implements PipeTransform {\r\n\r\n  constructor(\r\n    private dateService: DateService,\r\n  ) {\r\n  }\r\n\r\n  transform(ts: string, withIdString = true): string {\r\n    const date = this.dateService.getDate().intraDay;\r\n    const idString = withIdString ? 'ID' : '';\r\n    if (!ts || !date) {\r\n      return '';\r\n    }\r\n    return DateTime.fromISO(ts).day !== DateTime.fromISO(date).startOf('day').day ? 'DA' : idString;\r\n  }\r\n}\r\n","import {Component} from '@angular/core';\r\nimport {DateTime} from 'luxon';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {DateModel} from \"../_models/date.model\";\r\nimport {DateService} from \"../_services/date.service\";\r\nimport {BaseComponent} from \"ngx-gem-spaas\";\r\n\r\n@Component({\r\n  selector: 'spaas-date-indicator',\r\n  templateUrl: './date-indicator.component.html',\r\n  styleUrls: ['./date-indicator.component.scss']\r\n})\r\nexport class DateIndicatorComponent extends BaseComponent {\r\n\r\n  curDate = new DateModel(DateTime.now().toISO());\r\n\r\n  constructor(\r\n    private dateService: DateService,\r\n  ) {\r\n    super();\r\n    this.getDate();\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // LOAD DATA\r\n  // ********************************************************************************************************\r\n\r\n  private getDate(): void {\r\n    this.dateService.onNewDate()\r\n      .pipe(takeUntil(this.onDestroy$))\r\n      .subscribe(\r\n        (date) => {\r\n          this.curDate = date;\r\n        }\r\n      );\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // UI\r\n  // ********************************************************************************************************\r\n\r\n}\r\n","<div class=\"date-indicator txt-center\">\r\n  <div>{{curDate.intraDay | date:'dd'}}</div>\r\n  <div>{{curDate.intraDay | date:'MM'}}</div>\r\n</div>\r\n","import {Component, Input, OnInit} from '@angular/core';\r\nimport {DateTime} from 'luxon';\r\nimport {FormControl} from \"@angular/forms\";\r\nimport {BaseComponent} from \"ngx-gem-spaas\";\r\nimport {takeUntil} from \"rxjs/operators\";\r\n\r\n@Component({\r\n  selector: 'spaas-date-picker',\r\n  templateUrl: './date-picker.component.html',\r\n  styleUrls: ['./date-picker.component.scss']\r\n})\r\n/** A stand-alone date picker (not hooked up to the date service) */\r\nexport class DatePickerComponent extends BaseComponent implements OnInit {\r\n\r\n  /** The label to be displayed in the form field (optional) */\r\n  @Input() label: string = '';\r\n  /** Whether to also show the time-fields. Default is false. */\r\n  @Input() withTime: boolean = false;\r\n  /** Your formcontrol of type DateTime. Will be updated directly by the date picker */\r\n  @Input() fcDate: FormControl<DateTime> = new FormControl(DateTime.now()) as FormControl<DateTime>;\r\n  /** Whether to allow manual keyboard input */\r\n  @Input() allowManualInput = false;\r\n\r\n  /** Minimum date in luxon DateTime */\r\n  @Input() minDate: DateTime | null = null;\r\n  /** Maximum date in luxon DateTime */\r\n  @Input() maxDate: DateTime | null = null;\r\n  /** A custom function to limit which dates can be chosen.\r\n   *  Takes DateTime as input and should return a boolean. */\r\n  @Input() dateConstraint: (selectedDate: DateTime | null) => boolean = () => {\r\n    return true;\r\n  };\r\n\r\n  dateStart: string | null = this.fcDate.value.toISO();\r\n  hour: number = 0;\r\n  allHours: number[] = [];\r\n  minute: number = 0;\r\n  allMinutes: number[] = [];\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.onDateChange();\r\n    this.fcDate.valueChanges\r\n      .pipe(takeUntil(this.onDestroy$))\r\n      .subscribe(() => this.onDateChange());\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // LOAD DATA\r\n  // ********************************************************************************************************\r\n\r\n  // ********************************************************************************************************\r\n  // UI\r\n  // ********************************************************************************************************\r\n\r\n  onHourOrMinuteChange(): void {\r\n    if (this.fcDate.valid) {\r\n      let dt = this.fcDate.value;\r\n      this.fcDate.patchValue(dt.startOf('day').plus({minute: this.hour * 60 + this.minute}))\r\n    }\r\n  }\r\n\r\n  onDateChange(): void {\r\n    this.allMinutes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59];\r\n    if (this.fcDate.valid) {\r\n      this.hour = this.fcDate.value?.hour || 0;\r\n      this.minute = this.fcDate.value?.minute || 0;\r\n      const startOfDate = this.fcDate.value.startOf('day');\r\n      this.dateStart = startOfDate.toISO();\r\n      this.allHours = new Array(startOfDate.plus({days: 1}).startOf('day').diff(startOfDate, 'hours').toObject().hours).fill(0).map((_, i) => i);\r\n      // correct arrays and hours/minutes in case of minDate/maxDate\r\n      if (\r\n        this.minDate && this.fcDate.value.day === this.minDate.day\r\n      ) {\r\n        this.allHours = this.allHours.filter((a) => a >= (this.minDate?.hour || 0));\r\n        this.allMinutes = this.allMinutes.filter((a) => a >= (this.minDate?.minute || 0));\r\n        this.hour = Math.max(this.hour, this.allHours[0]);\r\n        this.minute = Math.max(this.minute, this.allMinutes[0]);\r\n      } else if (\r\n        this.maxDate && this.fcDate.value.day === this.maxDate.day\r\n      ) {\r\n        this.allHours = this.allHours.filter((a) => a <= (this.maxDate?.hour || 0));\r\n        this.allMinutes = this.allMinutes.filter((a) => a <= (this.maxDate?.minute || 0));\r\n        this.hour = Math.min(this.hour, this.allHours[0]);\r\n        this.minute = Math.min(this.minute, this.allMinutes[0]);\r\n      }\r\n    } else {\r\n      this.fcDate.markAsTouched();\r\n    }\r\n  }\r\n\r\n}\r\n","<div [style.--dp-min-width]=\"withTime ? '254px' : '154px'\"\r\n     class=\"date-picker flex\">\r\n\r\n  <mat-form-field class=\"grow-h\">\r\n    @if (label) {\r\n      <mat-label>{{ label }}</mat-label>\r\n    }\r\n    <input [formControl]=\"fcDate\"\r\n           [matDatepicker]=\"picker\"\r\n           [matDatepickerFilter]=\"dateConstraint\"\r\n           [min]=\"minDate\"\r\n           [max]=\"maxDate\"\r\n           matInput\r\n           [readonly]=\"!allowManualInput\">\r\n    <mat-datepicker-toggle [for]=\"picker\" matIconPrefix></mat-datepicker-toggle>\r\n    <mat-datepicker #picker [disabled]=\"false\"></mat-datepicker>\r\n    <mat-error>\r\n      @if (fcDate.hasError('matDatepickerMin') || fcDate.hasError('matDatepickerMax') || fcDate.hasError('matDatepickerFilter')) {\r\n        date is not within the correct range\r\n      } @else {\r\n        invalid date (yyyy-mm-dd expected)\r\n      }\r\n    </mat-error>\r\n  </mat-form-field>\r\n\r\n  @if (withTime) {\r\n    <div [style.--dp-time-top]=\"label ? '19px' : '11px'\"\r\n         class=\"timefields flex\">\r\n      <div>\r\n        <mat-select (selectionChange)=\"onHourOrMinuteChange()\"\r\n                    [(ngModel)]=\"hour\"\r\n                    [disabled]=\"!fcDate.valid\"\r\n                    [hideSingleSelectionIndicator]=\"true\">\r\n          @for (hour of allHours; track hour) {\r\n            <mat-option [value]=\"hour\">\r\n              {{ hour | idxToTs:dateStart:60:false:'HH' }}\r\n            </mat-option>\r\n          }\r\n        </mat-select>\r\n      </div>\r\n      <div>\r\n        <mat-select (selectionChange)=\"onHourOrMinuteChange()\"\r\n                    [(ngModel)]=\"minute\"\r\n                    [disabled]=\"!fcDate.valid\"\r\n                    [hideSingleSelectionIndicator]=\"true\">\r\n          @for (min of allMinutes; track min) {\r\n            <mat-option [value]=\"min\">\r\n              {{ min | number:'2.0-0' }}\r\n            </mat-option>\r\n          }\r\n        </mat-select>\r\n      </div>\r\n    </div>\r\n  }\r\n\r\n</div>\r\n","import {Component, Input} from '@angular/core';\r\nimport {DateTime} from 'luxon';\r\nimport {FormControl, FormGroup} from \"@angular/forms\";\r\nimport {BaseComponent} from \"ngx-gem-spaas\";\r\n\r\n@Component({\r\n  selector: 'spaas-date-range-picker',\r\n  templateUrl: './date-range-picker.component.html',\r\n  styleUrls: ['./date-range-picker.component.scss']\r\n})\r\n/** A stand-alone date-range picker (not hooked up to the date service) */\r\nexport class DateRangePickerComponent extends BaseComponent {\r\n\r\n  /** The label to be displayed in the form field (optional) */\r\n  @Input() label: string = '';\r\n  /** Your formgroup with 2 formcontrols: \"start\" (type DateTime) and \"end\" (type DateTime).\r\n   * Will be updated directly by the date picker */\r\n  @Input() fgDateRange: FormGroup<{ start: FormControl<DateTime>, end: FormControl<DateTime> }> =\r\n    new FormGroup({\r\n      start: new FormControl(DateTime.now()) as FormControl<DateTime>,\r\n      end: new FormControl(DateTime.now()) as FormControl<DateTime>,\r\n    });\r\n\r\n  /** Minimum date in luxon DateTime */\r\n  @Input() minDate: DateTime | null = null;\r\n  /** Maximum date in luxon DateTime */\r\n  @Input() maxDate: DateTime | null = null;\r\n\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // LOAD DATA\r\n  // ********************************************************************************************************\r\n\r\n  // ********************************************************************************************************\r\n  // UI\r\n  // ********************************************************************************************************\r\n\r\n}\r\n","<div class=\"date-range-picker flex\">\r\n\r\n  <mat-form-field class=\"grow-h\">\r\n    @if (label) {\r\n      <mat-label>{{label}}</mat-label>\r\n    }\r\n    <mat-date-range-input [formGroup]=\"fgDateRange\"\r\n                          [rangePicker]=\"picker\"\r\n                          [min]=\"minDate\"\r\n                          [max]=\"maxDate\">\r\n      <input matStartDate formControlName=\"start\" readonly>\r\n      <input matEndDate formControlName=\"end\" readonly>\r\n    </mat-date-range-input>\r\n    <mat-datepicker-toggle [for]=\"picker\" matIconPrefix></mat-datepicker-toggle>\r\n    <mat-date-range-picker #picker disabled=\"false\"></mat-date-range-picker>\r\n    <mat-error>\r\n      dates are not within the correct range\r\n    </mat-error>\r\n  </mat-form-field>\r\n\r\n</div>\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {DateTime} from 'luxon';\r\n\r\n@Pipe({\r\n  name: 'dateTimeFormat'\r\n})\r\nexport class DatetimeFormatPipe implements PipeTransform {\r\n  transform(dateTime: DateTime, format: string): string {\r\n    return (dateTime.toFormat(format));\r\n  }\r\n}\r\n","import {Observable, ReplaySubject} from 'rxjs';\r\nimport {Injectable} from '@angular/core';\r\nimport {LocalStorageService} from 'ngx-gem-spaas';\r\nimport {GranularityType} from \"../_models/contract.model\";\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class GranularityService {\r\n\r\n  private LS_GRANULARITY = 'granularity';\r\n  private granularity$ = new ReplaySubject<GranularityType>(1);\r\n\r\n  static getGranularityAsString(gran: GranularityType): string {\r\n    return gran === 60 ? 'H' : gran === 30 ? 'S' : 'Q';\r\n  }\r\n\r\n  constructor(\r\n    private localStorageService: LocalStorageService,\r\n  ) {\r\n    this.newGranularity(this.localStorageService.getItem(this.LS_GRANULARITY) || 15);\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // LOAD DATA\r\n  // ********************************************************************************************************\r\n\r\n  // ********************************************************************************************************\r\n  // BROADCAST DATA\r\n  // ********************************************************************************************************\r\n\r\n  newGranularity(gran: GranularityType) {\r\n    this.localStorageService.setItem(this.LS_GRANULARITY, gran);\r\n    this.granularity$.next(gran);\r\n  }\r\n\r\n  onNewGranularity(): Observable<GranularityType> {\r\n    return this.granularity$.asObservable();\r\n  }\r\n\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {BaseComponent, SnackbarService} from 'ngx-gem-spaas';\r\nimport {GranularityService} from '../_services/granularity.service';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {GranularityType} from \"../_models/contract.model\";\r\n\r\n@Component({\r\n  selector: 'spaas-granularity-picker',\r\n  templateUrl: './granularity-picker.component.html',\r\n  styleUrls: ['./granularity-picker.component.scss']\r\n})\r\n\r\nexport class GranularityPickerComponent extends BaseComponent {\r\n\r\n  /** Whether to allow selection of half-hourly granularity */\r\n  @Input() allowHalfHour: boolean = false;\r\n\r\n  granularity: GranularityType | null = null;\r\n  hoverGran: GranularityType | null = null;\r\n\r\n  constructor(\r\n    private granularityService: GranularityService,\r\n    private snackbarService: SnackbarService,\r\n  ) {\r\n    super();\r\n    this.getGranularity();\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // LOAD DATA\r\n  // ********************************************************************************************************\r\n\r\n  private getGranularity(): void {\r\n    this.granularityService.onNewGranularity()\r\n      .pipe(takeUntil(this.onDestroy$))\r\n      .subscribe(\r\n        (gran) => {\r\n          this.granularity = gran;\r\n        }\r\n      );\r\n  }\r\n\r\n  // ********************************************************************************************************\r\n  // PROCESS DATA\r\n  // ********************************************************************************************************\r\n\r\n  // ********************************************************************************************************\r\n  // UI\r\n  // ********************************************************************************************************\r\n\r\n  // EVENT LISTENERS\r\n\r\n  // MISCELLANEOUS\r\n\r\n  onClickGranularity(gran: GranularityType): void {\r\n    if (gran === 30 && !this.allowHalfHour) {\r\n      this.snackbarService.message('half-hourly granularity is not allowed here');\r\n      return;\r\n    }\r\n    if (gran !== this.granularity) {\r\n      this.granularity = gran;\r\n      this.granularityService.newGranularity(gran);\r\n    }\r\n  }\r\n\r\n  onHoverGranularity(gran: GranularityType | null): void {\r\n    this.hoverGran = gran;\r\n  }\r\n\r\n}\r\n","<div class=\"granularity-picker\">\r\n  <svg viewBox=\"0 0 24 24\">\r\n\r\n    <!-- quarter-hourly -->\r\n    <path\r\n      d=\"m 12.761755,3.4794896 c 4.292785,0 7.772768,3.649382 7.772768,8.1511264 l -7.772768,1e-6 V 3.4794896\"\r\n      matTooltip=\"quarter-hourly\"\r\n      matTooltipPosition=\"right\"\r\n      [class.hovering]=\"hoverGran !== null && hoverGran >= 15\"\r\n      (click)=\"onClickGranularity(15)\"\r\n      (mouseenter)=\"onHoverGranularity(15)\"\r\n      (mouseleave)=\"onHoverGranularity(null)\"/>\r\n    <!-- half-hourly -->\r\n    <path\r\n      d=\"m 12.691367,20.517048 c 4.292785,0 7.772768,-3.646374 7.772768,-8.144407 l -7.772768,-10e-7 v 8.144408\"\r\n      matTooltip=\"half-hourly\"\r\n      matTooltipPosition=\"right\"\r\n      [class.hovering]=\"hoverGran !== null && hoverGran >= 30\"\r\n      (click)=\"onClickGranularity(30)\"\r\n      (mouseenter)=\"onHoverGranularity(30)\"\r\n      (mouseleave)=\"onHoverGranularity(null)\"/>\r\n    <!-- hourly -->\r\n    <path\r\n      d=\"m 11.238245,3.5260593 c -4.292785,-10e-8 -7.7727682,3.8043355 -7.7727682,8.4972247 0,4.692891 3.4799832,8.497226 7.7727682,8.497226 V 3.5260593\"\r\n      matTooltip=\"hourly\"\r\n      matTooltipPosition=\"above\"\r\n      [class.hovering]=\"hoverGran !== null && hoverGran >= 60\"\r\n      (click)=\"onClickGranularity(60)\"\r\n      (mouseenter)=\"onHoverGranularity(60)\"\r\n      (mouseleave)=\"onHoverGranularity(null)\"/>\r\n\r\n    <!-- outer rings -->\r\n    <path\r\n      class=\"outer-ring minutes\"\r\n      d=\"M 12.897203,1.1187345 C 18.507141,1.5750485 22.917603,6.272465 22.917603,12 22.917603,18.029626 18.029626,22.917603 12,22.917603 5.9703746,22.917603 1.0823972,18.029625 1.0823975,12 1.0823978,6.2326689 5.5543616,1.509821 11.219907,1.1098381\"\r\n      pathLength=\"100\"/>\r\n    <path\r\n      class=\"outer-ring gran-indicator\"\r\n      d=\"M 12.897203,1.1187345 C 18.507141,1.5750485 22.917603,6.272465 22.917603,12 22.917603,18.029626 18.029626,22.917603 12,22.917603 5.9703746,22.917603 1.0823972,18.029625 1.0823975,12 1.0823978,6.2326689 5.5543616,1.509821 11.219907,1.1098381\"\r\n      pathLength=\"100\"\r\n      [class.gran-15]=\"granularity === 15\"\r\n      [class.gran-30]=\"granularity === 30\"/>\r\n\r\n  </svg>\r\n</div>\r\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {CalendarComponent} from \"./calendar/calendar.component\";\r\nimport {MatDatepickerModule} from \"@angular/material/datepicker\";\r\nimport {LuxonDateAdapter, MAT_LUXON_DATE_ADAPTER_OPTIONS, MatLuxonDateModule} from \"@angular/material-luxon-adapter\";\r\nimport {DateAdapter, MAT_DATE_FORMATS} from \"@angular/material/core\";\r\nimport {IdOrDaPipe, IdxToHPipe, IdxToTsPipe, TsToContractPipe} from \"./_pipes/date.pipe\";\r\nimport {DateIndicatorComponent} from \"./date-indicator/date-indicator.component\";\r\nimport {DatePickerComponent} from \"./date-picker/date-picker.component\";\r\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {MatFormFieldModule} from \"@angular/material/form-field\";\r\nimport {MatSelectModule} from \"@angular/material/select\";\r\nimport {MatInputModule} from \"@angular/material/input\";\r\nimport {DateRangePickerComponent} from \"./date-range-picker/date-range-picker.component\";\r\nimport {DatetimeFormatPipe} from \"./_pipes/datetime-format.pipe\";\r\nimport {GranularityPickerComponent} from \"./granularity-picker/granularity-picker.component\";\r\nimport {MatTooltipModule} from \"@angular/material/tooltip\";\r\n\r\nexport const MY_DATE_FORMATS = {\r\n  parse: {\r\n    dateInput: 'yyyy-MM-dd',\r\n  },\r\n  display: {\r\n    dateInput: 'yyyy-MM-dd',\r\n    monthYearLabel: 'MMM yy',\r\n    dateA11yLabel: 'LL',\r\n    monthYearA11yLabel: 'MMMM yyyy'\r\n  },\r\n};\r\n\r\n@NgModule({\r\n  declarations: [\r\n    CalendarComponent,\r\n    DateIndicatorComponent,\r\n    DatePickerComponent,\r\n    DateRangePickerComponent,\r\n    DatetimeFormatPipe,\r\n    GranularityPickerComponent,\r\n    IdOrDaPipe,\r\n    IdxToHPipe,\r\n    IdxToTsPipe,\r\n    TsToContractPipe,\r\n  ],\r\n  exports: [\r\n    CalendarComponent,\r\n    DateIndicatorComponent,\r\n    DatePickerComponent,\r\n    DateRangePickerComponent,\r\n    DatetimeFormatPipe,\r\n    GranularityPickerComponent,\r\n    IdOrDaPipe,\r\n    IdxToHPipe,\r\n    IdxToTsPipe,\r\n    MatDatepickerModule,\r\n    MatLuxonDateModule,\r\n    TsToContractPipe,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    MatDatepickerModule,\r\n    MatInputModule,\r\n    MatFormFieldModule,\r\n    MatLuxonDateModule,\r\n    MatSelectModule,\r\n    MatTooltipModule,\r\n    ReactiveFormsModule,\r\n  ],\r\n  providers: [\r\n    {provide: MAT_LUXON_DATE_ADAPTER_OPTIONS, useValue: {firstDayOfWeek: 1}},\r\n    {provide: DateAdapter, useClass: LuxonDateAdapter}, // , deps: [MAT_DATE_LOCALE, MAT_LUXON_DATE_FORMATS]\r\n    {provide: MAT_DATE_FORMATS, useValue: MY_DATE_FORMATS}\r\n  ]\r\n})\r\nexport class SpaasDateModule {\r\n}\r\n","import {DateTime} from 'luxon';\r\n\r\nexport type GranularityType = 15 | 30 | 60;\r\n\r\nexport class ContractMatrixModel<T> {\r\n  hs: T[];\r\n  ss: T[];\r\n  qs: T[];\r\n\r\n  constructor(hLabels: string[], callBack: (ts: string | null) => T) {\r\n    this.hs = [];\r\n    this.ss = [];\r\n    this.qs = [];\r\n    for (const hLabel of hLabels) {\r\n      this.hs.push(callBack(hLabel));\r\n      for (let s = 0; s < 2; s++) {\r\n        this.ss.push(callBack(DateTime.fromISO(hLabel).toUTC().plus({minutes: s * 30}).toISO()));\r\n      }\r\n      for (let q = 0; q < 4; q++) {\r\n        this.qs.push(callBack(DateTime.fromISO(hLabel).toUTC().plus({minutes: q * 15}).toISO()));\r\n      }\r\n    }\r\n  }\r\n\r\n  getContracts(granularity: GranularityType): T[] {\r\n    return granularity === 15 ? this.qs : granularity === 30 ? this.ss : this.hs;\r\n  }\r\n\r\n}\r\n","// MODULE\r\nexport * from './date.module';\r\n\r\n// SERVICES\r\nexport * from './_services/contract-label.service';\r\nexport * from './_services/date.service';\r\nexport * from './_services/granularity.service';\r\n\r\n// PIPES\r\nexport * from './_pipes/date.pipe';\r\nexport * from './_pipes/datetime-format.pipe';\r\n\r\n// MODELS AND CONSTANTS\r\nexport * from './_models/date.model';\r\nexport * from './_models/contract.model';\r\n\r\n// COMPONENTS\r\nexport * from './calendar/calendar.component';\r\nexport * from './date-indicator/date-indicator.component';\r\nexport * from './date-picker/date-picker.component';\r\nexport * from './date-range-picker/date-range-picker.component';\r\nexport * from './granularity-picker/granularity-picker.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DateService","i2","i1","i7","i8.IdxToTsPipe","i3","i1.GranularityService"],"mappings":"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"}