{"version":3,"file":"obliczeniowo-elementary-daily-statistics.mjs","sources":["../../../../projects/components/daily-statistics/components/daily-statistic/daily-statistic.component.ts","../../../../projects/components/daily-statistics/components/daily-statistic/daily-statistic.component.html","../../../../projects/components/daily-statistics/components/daily-legend/daily-legend.component.ts","../../../../projects/components/daily-statistics/components/daily-legend/daily-legend.component.html","../../../../projects/components/daily-statistics/components/daily-statistics/daily-statistics.component.ts","../../../../projects/components/daily-statistics/components/daily-statistics/daily-statistics.component.html","../../../../projects/components/daily-statistics/daily-statistics.module.ts","../../../../projects/components/daily-statistics/obliczeniowo-elementary-daily-statistics.ts"],"sourcesContent":["import { Component, HostBinding, Input, EventEmitter, Output, HostListener, effect, input, computed } from '@angular/core';\r\nimport { Observable, lastValueFrom } from 'rxjs';\r\n\r\nimport { HtmlColor } from '@obliczeniowo/elementary/classes';\r\nimport { keys } from '@obliczeniowo/elementary/objects';\r\n\r\nexport interface DayStatistic<T extends {} = { [key: string]: any }> {\r\n  date: Date;\r\n  count: number;\r\n  data?: T;\r\n  // optional as it should calculate on level of daily-statistics-component and not came up from API or what's so ever\r\n  x?: number;\r\n  y?: number;\r\n}\r\n\r\nexport interface DaySettings {\r\n  size: number;\r\n  margin: number;\r\n  colors: HtmlColor[];\r\n  colorsStats?: { [key: number]: HtmlColor };\r\n  getExtData?: (statistic: DayStatistic) => Observable<any>;\r\n}\r\n\r\n@Component({\r\n    selector: 'obl-daily-statistic',\r\n    templateUrl: './daily-statistic.component.html',\r\n    styleUrls: ['./daily-statistic.component.scss'],\r\n    standalone: false\r\n})\r\nexport class DailyStatisticComponent {\r\n  protected loading: boolean = false;\r\n\r\n  @HostBinding('class.selected')\r\n  @Input() selected: boolean = false;\r\n\r\n  /** day statistic day */\r\n  statistics = input.required<DayStatistic>();\r\n\r\n  /** */\r\n  settings = input.required<DaySettings>();\r\n\r\n  @HostBinding('style.left.px') get x() {\r\n    return this.statistics()?.x ?? 0;\r\n  }\r\n\r\n  @HostBinding('style.top.px') get y() {\r\n    return this.statistics()?.y ?? 0;\r\n  }\r\n\r\n  @Output() clicked = new EventEmitter<DayStatistic>();\r\n\r\n  @HostListener('click') async onClick() {\r\n    if (this.loading) {\r\n      return;\r\n    }\r\n\r\n    const { date, count, data } = this.statistics();\r\n    const settings = this.settings();\r\n\r\n    if (!data && settings.getExtData) {\r\n      this.loading = true;\r\n      const data = await lastValueFrom(\r\n        settings.getExtData(this.statistics())\r\n      );\r\n      this.loading = false;\r\n      if (data) {\r\n        this.statistics().data = data;\r\n      }\r\n    }\r\n    this.clicked.emit({ date, count, data: data || this.statistics().data });\r\n  }\r\n\r\n  @Output() hovered = new EventEmitter<DayStatistic | undefined>();\r\n\r\n  @HostListener('mouseover') hover() {\r\n    this.hovered.emit(this.statistics());\r\n  }\r\n\r\n  @HostListener('mouseleave') leave() {\r\n    this.hovered.emit(undefined);\r\n  }\r\n\r\n  constructor() {\r\n    effect(() => {\r\n      this.setCurrentColor();\r\n    })\r\n  }\r\n\r\n  protected setCurrentColor() {\r\n    if (this.settings() && this.statistics()) {\r\n      const { count } = this.statistics();\r\n      const { colors, colorsStats } = this.settings();\r\n\r\n      const key = (keys(colorsStats || {})).map(num => +num).sort((p, c) => p - c).find((item: number) => item >= count);\r\n\r\n      this.currentColor = count === 0 || !key ? colors[0] : colorsStats?.[key] as any;\r\n    }\r\n  }\r\n\r\n  @HostBinding('style.background-color')\r\n  protected currentColor: HtmlColor = 'rgba(200, 200, 200, 0.5)';\r\n\r\n  @HostBinding('style.width.px') get width() {\r\n    return this.settings().size || 10;\r\n  }\r\n\r\n  @HostBinding('style.height.px') get height() {\r\n    return this.settings().size || 10;\r\n  }\r\n\r\n  size = computed(() => this.settings().size || 10);\r\n}\r\n","@if (loading) {\r\n  <obl-spinner\r\n    [style.width.px]=\"size() * 0.8\"\r\n    [style.height.px]=\"size() * 0.8\"\r\n    [style.margin.px]=\"size() * 0.2\"\r\n  ></obl-spinner>\r\n}\r\n","import { Component, input } from '@angular/core';\r\nimport { DaySettings } from '../daily-statistic/daily-statistic.component';\r\n\r\nexport interface LegendSettings extends DaySettings {\r\n  text?: {\r\n    less: string,\r\n    more: string\r\n  };\r\n}\r\n@Component({\r\n    selector: 'obl-daily-legend',\r\n    templateUrl: './daily-legend.component.html',\r\n    styleUrls: ['./daily-legend.component.scss'],\r\n    standalone: false\r\n})\r\nexport class DailyLegendComponent {\r\n  settings = input.required<LegendSettings>();\r\n\r\n  sort = (p: any, c: any) => (+p.key) - (+c.key);\r\n}\r\n","<span>{{ settings().text?.less || 'less' }}</span>\r\n\r\n@for (item of (settings().colorsStats || {}) | keyvalue: sort; track item.key) {\r\n  <div\r\n    [style.background]=\"item.value\"\r\n    [style.width.px]=\"settings().size\"\r\n    [style.height.px]=\"settings().size\"\r\n    [style.margin.px]=\"settings().margin\"\r\n  ></div>\r\n}\r\n\r\n<span>{{ settings().text?.more || 'more' }}</span>\r\n","import { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { Component, Input, LOCALE_ID, Inject, Output, EventEmitter, TemplateRef, ContentChild } from '@angular/core';\r\nimport { map, Observable } from 'rxjs';\r\nimport { DaySettings, DayStatistic } from '../daily-statistic/daily-statistic.component';\r\nimport { Dates, HtmlColor } from '@obliczeniowo/elementary/classes';\r\n\r\nexport interface DailyStatisticsSettings<ext extends {} = { [key: string]: any }> extends DaySettings {\r\n  start: Date;\r\n  end: Date;\r\n  colors: HtmlColor[];\r\n  yearSwitcher?: boolean;\r\n  minYear?: number;\r\n  maxYear?: number;\r\n  get: (start: Date, end: Date) => Observable<DayStatistic<ext>[]>;\r\n  /** for legend translation text */\r\n  text?: {\r\n    less: string,\r\n    more: string\r\n  };\r\n}\r\n\r\n@Component({\r\n    selector: 'obl-daily-statistics',\r\n    templateUrl: './daily-statistics.component.html',\r\n    styleUrls: ['./daily-statistics.component.scss'],\r\n    standalone: false\r\n})\r\nexport class DailyStatisticsComponent {\r\n  protected statistics: DayStatistic<any>[] = [];\r\n  protected _settings!: DailyStatisticsSettings;\r\n  protected max: number = 0;\r\n  protected daysHeaders: Date[] = [];\r\n  protected monthHeaders: { date: Date; x: number }[] = [];\r\n  protected selected?: DayStatistic;\r\n  protected hovered?: DayStatistic;\r\n  protected total?: number;\r\n  protected selectedIndex?: number;\r\n  protected default = {\r\n    min: new Date().getFullYear() - 20,\r\n    max: new Date().getFullYear()\r\n  }\r\n\r\n  @ContentChild('totalRef') protected totalRef!: TemplateRef<any>;\r\n  @ContentChild('selectedRef') protected selectedRef!: TemplateRef<any>;\r\n\r\n  /** settings for all view components */\r\n  @Input()\r\n  set settings(value: DailyStatisticsSettings) {\r\n    const dateChanged = !this._settings || !Dates.equalToDayLevel(this._settings.end, value.end) || !Dates.equalToDayLevel(this._settings.start, value.start)\r\n\r\n    this._settings = value;\r\n    const first: Date = Dates.getWeekDate(value.start, 'first', this.weakDayOffset);\r\n    const date = new Date(first);\r\n\r\n    this.daysHeaders = [];\r\n\r\n    for (let i = 0; i < 7; i += 2) {\r\n      date.setDate(date.getDate() + (i ? 2 : 0));\r\n      this.daysHeaders.push(new Date(date));\r\n    }\r\n\r\n    if (dateChanged || !this.statistics) {\r\n      this.selected = undefined;\r\n      this.selectedIndex = undefined;\r\n      this.selectionChanged.emit(this.selected);\r\n      value.get(value.start, value.end).pipe(\r\n        map((statistics: DayStatistic[]) => {\r\n          const { start, end } = value;\r\n\r\n          this.total = statistics.map(v => v.count).reduce((p, c) => (p += c, p), 0);\r\n\r\n          const iterator = new Date(start);\r\n\r\n          this.setColors(statistics);\r\n\r\n          while (!Dates.equalToDayLevel(iterator, end)) {\r\n            if (statistics.findIndex(v => Dates.equalToDayLevel(v.date, iterator)) === -1) {\r\n              statistics.push({\r\n                date: new Date(iterator.getTime()),\r\n                count: 0,\r\n              })\r\n            }\r\n            iterator.setDate(iterator.getDate() + 1);\r\n          }\r\n\r\n          return statistics;\r\n        }),\r\n        map((statistics: DayStatistic[]) => {\r\n          this.max = 0;\r\n          this.monthHeaders = [];\r\n          return statistics.map(v => {\r\n            const days = Dates.countDays(first, v.date);\r\n            const x = Math.floor(days / 7) * (value.size + this.margin);\r\n\r\n            if (this.max < x) {\r\n              this.max = x;\r\n            }\r\n\r\n            if (v.date.getDate() === 1 && !this.monthHeaders.find(d => Dates.equalToDayLevel(d.date, v.date))) {\r\n              this.monthHeaders.push(\r\n                {\r\n                  date: new Date(v.date),\r\n                  x\r\n                }\r\n              )\r\n            }\r\n\r\n            return {\r\n              ...v,\r\n              x,\r\n              y: (Math.floor(days) % 7) * (value.size + this.margin)\r\n            }\r\n          })\r\n        })\r\n      ).subscribe(v => this.statistics = v);\r\n    }\r\n  }\r\n\r\n  private _weakDayOffset: number = 0;\r\n\r\n  /**\r\n   * Set weak day offset to for example start weak not from Sunday but from Monday you should set it to 6\r\n   *\r\n   * Do not use values less then 0\r\n   */\r\n  @Input() set weakDayOffset(value: number) {\r\n    this._weakDayOffset = value;\r\n\r\n    if (this.statistics && this.settings) {\r\n      const { size, start } = this.settings;\r\n\r\n      const first: Date = Dates.getWeekDate(start, 'first', value);\r\n      const date = new Date(first);\r\n\r\n      this.daysHeaders = [];\r\n\r\n      for (let i = 0; i < 7; i += 2) {\r\n        date.setDate(date.getDate() + (i ? 2 : 0));\r\n        this.daysHeaders.push(new Date(date));\r\n      }\r\n\r\n      this.max = 0;\r\n      this.monthHeaders = [];\r\n      this.statistics = this.statistics.map(v => {\r\n        const days = Dates.countDays(first, v.date);\r\n        const x = Math.floor(days / 7) * (size + this.margin);\r\n\r\n        if (this.max < x) {\r\n          this.max = x;\r\n        }\r\n\r\n        if (v.date.getDate() === 1) {\r\n          this.monthHeaders.push(\r\n            {\r\n              date: new Date(v.date),\r\n              x\r\n            }\r\n          )\r\n        }\r\n\r\n        return {\r\n          ...v,\r\n          x,\r\n          y: (Math.floor(days) % 7) * (size + this.margin)\r\n        }\r\n      })\r\n    }\r\n  }\r\n\r\n  get weakDayOffset(): number {\r\n    return this._weakDayOffset;\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures\r\n  get settings(): DailyStatisticsSettings {\r\n    return this._settings;\r\n  }\r\n\r\n  get margin(): number {\r\n    return this._settings?.margin ?? 5;\r\n  }\r\n\r\n  get height() {\r\n    return (this.size + this.margin) * 7;\r\n  }\r\n\r\n  get width() {\r\n    return this.max + this.fontSize + this.margin;\r\n  }\r\n\r\n  get size() {\r\n    return this._settings?.size ?? 10;\r\n  }\r\n\r\n  get fontSize() {\r\n    return this.size * 0.5;\r\n  }\r\n\r\n  @Output() clicked = new EventEmitter<DayStatistic>();\r\n\r\n  @Output() selectionChanged = new EventEmitter<DayStatistic | undefined>();\r\n\r\n  constructor(@Inject(LOCALE_ID) public readonly locale: string) { }\r\n\r\n  protected changed(year: number) {\r\n    this.settings = {\r\n      ...this._settings,\r\n      start: new Date(year, 0, 1),\r\n      end: new Date(year + 1, 0, 1)\r\n    };\r\n  }\r\n\r\n  protected onClicked(statistic: DayStatistic, index: number) {\r\n    this.selected = statistic;\r\n    this.selectedIndex = index;\r\n    this.clicked.emit(statistic);\r\n    this.selectionChanged.emit(statistic);\r\n  }\r\n\r\n  protected onHovered(statistics: DayStatistic | undefined) {\r\n    this.hovered = statistics;\r\n  }\r\n\r\n  protected setColors(statistics: DayStatistic[]) {\r\n    const elements = statistics.map(item => item.count).filter(v => v);\r\n\r\n    const { min, max } = elements.length && ElementaryMath.getMinMax(elements) || { min: 0, max: 0 };\r\n\r\n    const mid = (max - min) / ((this._settings.colors.length - 1) || 1);\r\n\r\n    const colorsStats = this._settings.colors.map((color, index: number) => {\r\n      return { [index === 0 ? 0 : mid * index + min]: color }\r\n    }).reduce((p, c) => ({ ...p, ...c }), {});\r\n\r\n    this._settings = {\r\n      ...this._settings,\r\n      colorsStats\r\n    }\r\n  }\r\n}\r\n","<div class=\"months-header\">\r\n  @for (month of monthHeaders; track month) {\r\n    <div\r\n      class=\"month-header\"\r\n      [style.left.px]=\"month.x\"\r\n    >\r\n      {{ month.date | date : 'LLL' : undefined : locale }}\r\n    </div>\r\n  }\r\n</div>\r\n\r\n<div class=\"days-section\">\r\n  <div class=\"days-header\" [style.lineHeight.px]=\"size\">\r\n    @for (date of daysHeaders; track date) {\r\n      <div\r\n        class=\"day\"\r\n        [style.top.px]=\"$index * 2 * (settings.size + settings.margin)\"\r\n      >\r\n        {{ date | date : 'EEEE' : undefined : locale }}\r\n      </div>\r\n    }\r\n  </div>\r\n  <div class=\"days\" [style.width.px]=\"width\" [style.height.px]=\"height\">\r\n    @for (statistic of statistics; track statistic) {\r\n      <obl-daily-statistic\r\n        [settings]=\"settings\"\r\n        [statistics]=\"statistic\"\r\n        (clicked)=\"onClicked($event, $index)\"\r\n        (hovered)=\"onHovered($event)\"\r\n        [selected]=\"selectedIndex === $index\"\r\n      ></obl-daily-statistic>\r\n    }\r\n  </div>\r\n</div>\r\n\r\n<div class=\"legend\" [style.width.px]=\"width\">\r\n  <div>\r\n    @if (selected || hovered) {\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          selectedRef || defaultSelected;\r\n          context: { $implicit: hovered || selected }\r\n        \"\r\n      >\r\n      </ng-container>\r\n    }\r\n    @if (total) {\r\n      <ng-container\r\n        *ngTemplateOutlet=\"\r\n          totalRef || defaultTotal;\r\n          context: { $implicit: total }\r\n        \"\r\n      >\r\n      </ng-container>\r\n    }\r\n  </div>\r\n  <obl-daily-legend [settings]=\"settings\"></obl-daily-legend>\r\n</div>\r\n\r\n@if (settings.yearSwitcher) {\r\n  <div class=\"year-picker\" [style.width.px]=\"width\">\r\n    <obl-year-picker\r\n      [display]=\"{ nextPrevious: false }\"\r\n      [current]=\"settings.start.getFullYear()\"\r\n      [start]=\"settings.minYear || default.min\"\r\n      [end]=\"settings.maxYear || default.max\"\r\n      [picker]=\"{\r\n        className: 'obl-daily-picker'\r\n      }\"\r\n      (changed)=\"changed($event)\"\r\n    ></obl-year-picker>\r\n  </div>\r\n}\r\n\r\n<ng-template let-selected #defaultSelected>\r\n  {{ selected.date | date : 'dd-MM-yyyy' : locale }} &rarr;\r\n  {{ selected.count }}\r\n</ng-template>\r\n\r\n<ng-template let-total #defaultTotal> Total: {{ total }} </ng-template>\r\n","import { LoadingModule } from '@obliczeniowo/elementary/loading';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { YearPickerModule } from '@obliczeniowo/elementary/year-picker';\r\n\r\nimport { DailyStatisticsComponent } from './components/daily-statistics/daily-statistics.component';\r\nimport { DailyStatisticComponent } from './components/daily-statistic/daily-statistic.component';\r\nimport { DailyLegendComponent } from './components/daily-legend/daily-legend.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    DailyStatisticsComponent,\r\n    DailyStatisticComponent,\r\n    DailyLegendComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    LoadingModule,\r\n    YearPickerModule\r\n  ],\r\n  exports: [\r\n    DailyStatisticsComponent,\r\n    DailyStatisticComponent,\r\n    DailyLegendComponent\r\n  ]\r\n})\r\nexport class DailyStatisticsModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3.DailyStatisticComponent","i4.DailyLegendComponent"],"mappings":"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"}