{"version":3,"file":"obliczeniowo-elementary-time.mjs","sources":["../../../../projects/components/time/components/clock-time/clock-time.component.ts","../../../../projects/components/time/components/clock-time/clock-time.component.html","../../../../projects/components/time/pipes/time.pipe.ts","../../../../projects/components/time/time.module.ts","../../../../projects/components/time/obliczeniowo-elementary-time.ts"],"sourcesContent":["import { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { AfterViewInit, Component, ElementRef, Input, ViewChild, HostBinding, EventEmitter, Output, Renderer2, input, effect } from '@angular/core';\r\nimport { Dates, Point2D } from '@obliczeniowo/elementary/classes';\r\nimport { DrawingSvgInterface } from '@obliczeniowo/elementary/drawing';\r\n\r\nexport interface DisplayClockTime {\r\n  seconds?: boolean;\r\n  time?: boolean;\r\n  interactive?: boolean;\r\n}\r\n\r\n/**\r\n * Basic usage of component is to display time as HH:mm:ss format combined with a little dynamic svg\r\n * element that display clock pointing time given in input time as Date object or [h, m, s]\r\n *\r\n * You can set 'interactive' mode by 'display' input set { interactive: true, ... }\r\n * In this mode you can change time by clicking on modifying area fields, this will emit\r\n * new date every time you click on this areas\r\n *\r\n * To have easy way of manipulate time size of clock-time must be at least 150px\r\n *\r\n * In interactive mode you can add own controls buttons:\r\n *\r\n * @example\r\n *\r\n * <obl-clock-time [display]=\"{ time: true; interactive: true }\" [column]=\"true\" #clock>\r\n *   <button (click)=\"setDate(clock)\">OK</button>\r\n * <obl-clock-time>\r\n */\r\n@Component({\r\n    selector: 'obl-clock-time',\r\n    templateUrl: './clock-time.component.html',\r\n    styleUrls: ['./clock-time.component.scss'],\r\n    standalone: false\r\n})\r\nexport class ClockTimeComponent implements AfterViewInit {\r\n  /** size of clock */\r\n  size = input<number>(30);\r\n\r\n  /** switch on/off displaying time text */\r\n  display = input<DisplayClockTime>({\r\n    seconds: true,\r\n    time: true\r\n  });\r\n\r\n  /** font size */\r\n  fontSize = input<number>();\r\n\r\n  /** if display time is set to tru this one will control if clock and time text is displayed in one row or in column */\r\n  @Input()\r\n  @HostBinding('class.column') column = false;\r\n\r\n  /**\r\n   * set time by Date object or table of [hours, minutes, seconds]\r\n   */\r\n  date = input(new Date(), {\r\n      transform: (value: Date | [number, number, number]) => {\r\n        let date;\r\n        if (value instanceof Date) {\r\n          date = value;\r\n        } else {\r\n          date = new Date();\r\n          date.setHours(value[0]);\r\n          date.setMinutes(value[1]);\r\n          date.setSeconds(value[2]);\r\n        }\r\n        const h = date.getHours();\r\n        const m = date.getMinutes();\r\n        const s = date.getSeconds();\r\n        this.hAngle = ((h % 12) + m / 60 + s / 3600) * Math.PI / 6;\r\n        this.mAngle = (m + s / 60) * Math.PI / 30;\r\n        this.sAngle = s * Math.PI / 30;\r\n        this.pmAm = date.getHours() / 12 > 1;\r\n        return date;\r\n      }\r\n    }\r\n  );\r\n\r\n  /** Emit when date is changed */\r\n  @Output() changed = new EventEmitter<Date>();\r\n\r\n  @ViewChild('svg') protected svg!: ElementRef<SVGSVGElement>;\r\n\r\n  @HostBinding('class.no-time') protected get noTime() {\r\n    return !this.display().time;\r\n  }\r\n\r\n  protected interactiveTime?: Date;\r\n\r\n  protected dc!: DrawingSvgInterface;\r\n  protected hRay = 2;\r\n  protected mRay = 3;\r\n  protected sRay = 3.5;\r\n\r\n  protected hAngle = 0;\r\n  protected mAngle = 0;\r\n  protected sAngle = 0;\r\n\r\n  protected pmAm: boolean = false;\r\n\r\n  protected mouse = new Point2D();\r\n\r\n  constructor(protected renderer: Renderer2) {\r\n    effect(() => {\r\n      this.draw();\r\n    })\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this.svg) {\r\n      this.dc = new DrawingSvgInterface(this.svg.nativeElement, this.renderer);\r\n      this.draw();\r\n    }\r\n  }\r\n\r\n  protected switchPmAm() {\r\n    this.pmAm = !this.pmAm;\r\n    this.date().setHours(this.date().getHours() + (this.pmAm ? -12 : 12));\r\n    if (this.interactiveTime) {\r\n      this.interactiveTime = new Date(this.date());\r\n    }\r\n  }\r\n\r\n  protected clicked(event: MouseEvent) {\r\n    if (!this.display().interactive) {\r\n      return;\r\n    }\r\n\r\n    if (this.interactiveTime) {\r\n      this.date().setSeconds(this.interactiveTime.getSeconds());\r\n      this.date().setMinutes(this.interactiveTime.getMinutes());\r\n      this.date().setHours(this.interactiveTime.getHours());\r\n      this.changed.emit(new Date(this.date()));\r\n    }\r\n  }\r\n\r\n  protected mouseMove(event: MouseEvent) {\r\n    if (!this.display().interactive) {\r\n      return;\r\n    }\r\n\r\n    const scale = (this.getBrowserName() === 'firefox' ? 10 : 11) / this.size();\r\n    const box = this.dc.svgContainer.getBoundingClientRect();\r\n\r\n    this.mouse = new Point2D((event.x - box.left) * scale, (event.y - box.top) * scale).subtract(new Point2D(5, 5));\r\n\r\n    const { hRay, mRay, mouse } = this;\r\n    const len = mouse.sickLength();\r\n    const angle = mouse.angle();\r\n    const date = new Date(this.date());\r\n\r\n    if (len < hRay * hRay) {\r\n      date.setHours(Math.round(ElementaryMath.fmod(angle + Math.PI * 2.5, 2 * Math.PI) / (2 * Math.PI) * 11 + (this.pmAm ? 12 : 0)) % (12 + (this.pmAm ? 12 : 0)));\r\n    } else if (len < mRay * mRay) {\r\n      date.setMinutes(Math.round((angle + Math.PI) / (2 * Math.PI) * 60 + 45) % 60);\r\n    }\r\n\r\n    this.interactiveTime = date;\r\n    this.draw();\r\n  }\r\n\r\n  protected draw(dc: DrawingSvgInterface = this.dc): void {\r\n    if (dc) {\r\n      const center = new Point2D(5, 5);\r\n      dc.clear();\r\n      dc.drawCircle(center, 4.5, 0.7, 'var(--default-text-color)');\r\n\r\n      if (this.display().interactive) {\r\n        dc.drawCircle(center, this.mRay, 0, undefined, undefined, {\r\n          svgOnly: {\r\n            classes: ['minutes-area']\r\n          }\r\n        });\r\n        dc.drawCircle(center, this.hRay, 0, undefined, undefined, {\r\n          svgOnly: {\r\n            classes: ['hours-area']\r\n          }\r\n        });\r\n      }\r\n\r\n      dc.drawPolyline([\r\n        center.add(new Point2D(this.hRay * Math.sin(this.hAngle), -this.hRay * Math.cos(this.hAngle))),\r\n        center,\r\n        center.add(new Point2D(this.mRay * Math.sin(this.mAngle), -this.mRay * Math.cos(this.mAngle)))],\r\n        0.5,\r\n        'var(--default-text-color)'\r\n      );\r\n\r\n      if (this.display().interactive) {\r\n        if (this.interactiveTime && !Dates.equalToTimeLevel(this.interactiveTime, this.date())) {\r\n          const h = this.interactiveTime.getHours();\r\n          const m = this.interactiveTime.getMinutes();\r\n          const hAngle = ((h % 12) + m / 60) * Math.PI / 6;\r\n          const mAngle = m * Math.PI / 30;\r\n\r\n          dc.drawPolyline([\r\n            center.add(new Point2D(this.hRay * Math.sin(hAngle), -this.hRay * Math.cos(hAngle))),\r\n            center,\r\n            center.add(new Point2D(this.mRay * Math.sin(mAngle), -this.mRay * Math.cos(mAngle)))],\r\n            0.5,\r\n            'var(--obl-clock-time-set-pointer, gray)'\r\n          );\r\n        }\r\n      }\r\n\r\n      if (this.size() > 99) {\r\n        /** draw seconds pointer */\r\n        if (this.display().seconds) {\r\n          dc.drawLine(center, center.add(new Point2D(this.sRay * Math.sin(this.sAngle), -this.sRay * Math.cos(this.sAngle))), 0.25,\r\n            'var(--default-text-color)');\r\n        }\r\n\r\n        /** draw scale */\r\n        for (let i = 0; i < 12; i++) {\r\n          const angle = i * Math.PI / 6;\r\n          dc.drawLine(\r\n            center.add(new Point2D(this.sRay * Math.sin(angle), -this.sRay * Math.cos(angle))),\r\n            center.add(new Point2D(1.1 * this.sRay * Math.sin(angle), -(this.sRay * 1.1) * Math.cos(angle))), 0.1, 'var(--default-text-color)');\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  protected getBrowserName() {\r\n    const agent = window.navigator.userAgent.toLowerCase()\r\n    switch (true) {\r\n      case agent.includes('edge'):\r\n        return 'edge';\r\n      case agent.includes('opr') && !!(window as any).opr:\r\n        return 'opera';\r\n      case agent.includes('chrome') && !!(window as any).chrome:\r\n        return 'chrome';\r\n      case agent.includes('trident'):\r\n        return 'ie';\r\n      case agent.includes('firefox'):\r\n        return 'firefox';\r\n      case agent.includes('safari'):\r\n        return 'safari';\r\n      default:\r\n        return 'other';\r\n    }\r\n}\r\n}\r\n","<svg\r\n  [attr.width]=\"size()\"\r\n  [attr.height]=\"size()\"\r\n  viewBox=\"0 0 10 10\"\r\n  (mousemove)=\"mouseMove($event)\"\r\n  (click)=\"clicked($event)\"\r\n  #svg\r\n></svg>\r\n\r\n@if (display().time) {\r\n  <span\r\n    [style.font-size.px]=\"fontSize() || size() * 0.6\"\r\n    [style.line-height.px]=\"fontSize() || size() * 0.6\"\r\n  >\r\n    {{ (interactiveTime ?? date()) | date : (display().seconds ? 'HH:mm:ss' : 'HH:mm') }}\r\n    <ng-content></ng-content>\r\n  </span>\r\n}\r\n\r\n@if (display().interactive) {\r\n  <div class=\"actions\">\r\n    <button oblButton (click)=\"switchPmAm()\"> {{ pmAm && 'PM' || 'AM' }} </button>\r\n  </div>\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'time',\r\n  standalone: true\r\n})\r\nexport class TimePipe implements PipeTransform {\r\n  transform(time: number, ...args: unknown[]): string {\r\n    time = Math.ceil(time);\r\n\r\n    const hours = Math.floor(time / 3600);\r\n    const minutes = Math.floor(time / 60) % 60\r\n    const seconds = time % 60;\r\n\r\n    return (hours ? hours + ':' : '') + `0${minutes}`.slice(-2) + ':' + `0${seconds}`.slice(-2);\r\n  }\r\n}\r\n","import { ButtonsModule } from '@obliczeniowo/elementary/buttons';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ClockTimeComponent } from './components/clock-time/clock-time.component';\r\nimport { TimePipe } from './pipes/time.pipe';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    ClockTimeComponent,\r\n  ],\r\n  providers: [\r\n    TimePipe\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    ButtonsModule\r\n  ],\r\n  exports: [\r\n    ClockTimeComponent,\r\n  ]\r\n})\r\nexport class TimeModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}