{"version":3,"file":"redkhat-timepicker.mjs","sources":["../../../../src/timepicker/src/lib/utils/clock-iterable.ts","../../../../src/timepicker/src/lib/utils/time.ts","../../../../src/timepicker/src/lib/utils/animation.ts","../../../../src/timepicker/src/lib/utils/events.ts","../../../../src/timepicker/src/lib/utils/angle.ts","../../../../src/timepicker/src/lib/utils/constants.ts","../../../../src/timepicker/src/lib/timepicker-dial.ts","../../../../src/timepicker/src/lib/timepicker-input-label.ts","../../../../src/timepicker/src/lib/timepicker.ts","../../../../src/timepicker/src/lib/timepicker-input.ts","../../../../src/timepicker/src/lib/timepicker-toggle.ts","../../../../src/timepicker/src/lib/clock.ts","../../../../src/timepicker/src/public-api.ts","../../../../src/timepicker/src/redkhat-timepicker.ts"],"sourcesContent":["\n/**\n * A class that implements the `Iterable` interface to generate coordinates for clock labels.\n * \n * @template T - The type of the labels.\n */\nexport class ClockIterable<T> implements Iterable<[T, number, number]> {\n  /**\n   * The labels to be positioned around the clock.\n   */\n  private labels: T[];\n\n  /**\n   * The radius of the clock.\n   */\n  private radio: number;\n\n  /**\n   * The size of each label.\n   */\n  private labelSize: number;\n\n  /**\n   * The inset distance from the edge of the clock.\n   */\n  private inset: number;\n\n  /**\n   * The degrees between each label.\n   */\n  private readonly degreesByNumber = 30;\n\n  /**\n   * Creates an instance of ClockIterable.\n   * \n   * @param labels - An array of labels to be positioned around the clock [12, 1, 2, 3...].\n   * @param labelSize - The size of each label.\n   * @param diameter - The diameter of the clock.\n   * @param inset - The inset distance from the edge of the clock (default is 0).\n   */\n  constructor(labels: T[], labelSize: number, diameter: number, inset: number = 0) {\n    this.labels = labels;\n    this.labelSize = labelSize / 2;\n    this.radio = (diameter / 2) - inset;\n    this.inset = inset;\n  }\n\n  /**\n   * Returns an iterator that yields the label and its x, y coordinates.\n   * \n   * @returns An iterator that yields a tuple containing the label and its x, y coordinates.\n   */\n  *[Symbol.iterator](): Iterator<[T, number, number]> {\n    for (let i = 0; i < this.labels.length; i++) {\n      const x = this.radio + (this.radio - this.labelSize) * Math.sin(i * this.degreesByNumber * Math.PI / 180);\n      const y = this.radio - (this.radio - this.labelSize) * Math.cos(i * this.degreesByNumber * Math.PI / 180);\n      yield [this.labels[i], this.inset + x - this.labelSize, this.inset + y - this.labelSize];\n    }\n  }\n}\n","export function secondsToDate(seconds: number): Date {\n  const initialDate = new Date(0, 0, 0, 0);\n  const date = new Date(initialDate.getTime() + seconds * 1000);\n  return date;\n}\n\nexport function detectTimeFormat(date: Date): string {\n  const localTime = date.toLocaleTimeString();\n  if (localTime.includes('AM') || localTime.includes('PM')) {\n    return '12h';\n  } else {\n    return '24h';\n  }\n}\n\nexport function splitDate(date: Date): SimpleTime {\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  return { hours, minutes };\n}\n\nexport function amPmTransform(isAm: string, date: Date) : Date {\n  const newDate = new Date(date);\n  const tempHours = newDate.getHours();\n  if (isAm === 'AM' && tempHours >= 12) {\n    newDate.setHours(tempHours - 12);\n  } else if (isAm === 'PM' && tempHours < 12) {\n    newDate.setHours(tempHours + 12);\n  }\n  return newDate;\n}\n\nexport function validateTimeValue(value: string, max: number): string {\n  let numericValue = value.replace(/[^0-9]/g, '');\n\n  if (numericValue.length > 2) {\n    numericValue = numericValue.slice(0, 2);\n  }\n\n  if (numericValue === '') {\n    return '';\n  }\n  const num = parseInt(numericValue, 10);\n  return num > max ? max.toString() : numericValue;\n}\n\nexport function formatTimeValue(value: string, defaultValue: string, padLength: number = 2): string {\n  if (value === '') {\n    return defaultValue;\n  }\n  const num = parseInt(value, 10);\n  if (num === 0) {\n    return defaultValue;\n  }\n  return value.padStart(padLength, '0');\n}\n\nexport interface SimpleTime {\n  hours: number;\n  minutes: number;\n}\n\n\n/**\n * Converts a time string or number to the number of seconds since midnight.\n *\n * Supported formats include:\n *  - Integers (e.g., \"10\", \"1030\", 10, 1030) in 24-hour format (up to 2359).\n *  - Space-separated numbers (e.g., \"10 30\") as HH MM.\n *  - Colon-separated numbers (e.g., \"10:30\" or \"10:30:00\") as HH:MM or HH:MM:SS.\n *  - Formats with regional AM/PM markers either at the beginning or at the end\n *    (e.g., \"10:30am\", \"am 10:30\", \"午後3:25:00\", \"10:30 du matin\").\n *\n * Additionally, this function normalizes Arabic digits (Unicode range \\u0660-\\u0669)\n * to their Western counterparts before processing.\n *\n * @param input The input to convert (can be a string or number).\n * @returns The number of seconds since midnight, or null if the input is invalid.\n */\nexport function timeToSecondsi18n(input: string | number): number | null {\n  // Convert input to string and trim whitespace.\n  let inputStr = typeof input === 'number' ? String(input) : input;\n  inputStr = inputStr.trim();\n\n  // Normalize Arabic digits to Western digits if found.\n  if (/[\\u0660-\\u0669]/.test(inputStr)) {\n    inputStr = inputStr.replace(/[\\u0660-\\u0669]/g, d => (d.charCodeAt(0) - 0x0660).toString());\n  }\n  // Extended list of AM and PM markers across various regions/languages.\n  const AM_MARKERS = [\n    'am', 'a.m.', 'a.m',         // English\n    '午前',                     // Japanese\n    '上午',                     // Chinese\n    '오전',                     // Korean\n    'ص', 'صباح', 'صباحاً',       // Arabic\n    'du matin', 'matin'         // French\n  ];\n  const PM_MARKERS = [\n    'pm', 'p.m.', 'p.m',         // English\n    '午後',                     // Japanese\n    '下午',                     // Chinese\n    '오후',                     // Korean\n    'م', 'مساء', 'مساءً',         // Arabic\n    \"de l’après-midi\", \"de l'aprés-midi\", \"de l'après-midi\",\n    'après-midi', 'du soir', 'soir' // French\n  ];\n\n  let period: 'AM' | 'PM' | null = null;\n\n  // Helper functions to compare prefix/suffix ignoring case.\n  const startsWithIgnoreCase = (str: string, prefix: string) =>\n    str.substring(0, prefix.length).toLowerCase() === prefix.toLowerCase();\n  const endsWithIgnoreCase = (str: string, suffix: string) =>\n    str.substring(str.length - suffix.length).toLowerCase() === suffix.toLowerCase();\n\n  // Check if the period marker is at the beginning.\n  for (const marker of AM_MARKERS) {\n    if (startsWithIgnoreCase(inputStr, marker)) {\n      period = 'AM';\n      inputStr = inputStr.substring(marker.length).trim();\n      break;\n    }\n  }\n  if (!period) {\n    for (const marker of PM_MARKERS) {\n      if (startsWithIgnoreCase(inputStr, marker)) {\n        period = 'PM';\n        inputStr = inputStr.substring(marker.length).trim();\n        break;\n      }\n    }\n  }\n  // If not found at the beginning, check at the end.\n  if (!period) {\n    for (const marker of AM_MARKERS) {\n      if (endsWithIgnoreCase(inputStr, marker)) {\n        period = 'AM';\n        inputStr = inputStr.substring(0, inputStr.length - marker.length).trim();\n        break;\n      }\n    }\n  }\n  if (!period) {\n    for (const marker of PM_MARKERS) {\n      if (endsWithIgnoreCase(inputStr, marker)) {\n        period = 'PM';\n        inputStr = inputStr.substring(0, inputStr.length - marker.length).trim();\n        break;\n      }\n    }\n  }\n\n  // Split the numeric part of the time.\n  let timeParts: number[] = [];\n\n  if (inputStr.includes(':')) {\n    // Colon-separated format. Accepts HH:MM or HH:MM:SS.\n    const parts = inputStr.split(':');\n    if (parts.length < 2 || parts.length > 3) return null;\n    for (const part of parts) {\n      const num = parseInt(part, 10);\n      if (isNaN(num)) return null;\n      timeParts.push(num);\n    }\n  } else if (inputStr.includes(' ')) {\n    // Space-separated format (e.g., \"10 30\").\n    const parts = inputStr.split(/\\s+/);\n    if (parts.length > 3) return null;\n    for (const part of parts) {\n      const num = parseInt(part, 10);\n      if (isNaN(num)) return null;\n      timeParts.push(num);\n    }\n  } else if (/^\\d+$/.test(inputStr)) {\n    // Numeric case without separators: \"10\", \"1030\".\n    if (inputStr.length <= 2) {\n      timeParts = [parseInt(inputStr, 10)];\n    } else if (inputStr.length === 3) {\n      timeParts = [\n        parseInt(inputStr.substring(0, 1), 10),\n        parseInt(inputStr.substring(1), 10),\n      ];\n    } else if (inputStr.length === 4) {\n      timeParts = [\n        parseInt(inputStr.substring(0, 2), 10),\n        parseInt(inputStr.substring(2), 10),\n      ];\n    } else {\n      // Unsupported numeric format with more than 4 digits.\n      return null;\n    }\n  } else {\n    // Unrecognized format.\n    return null;\n  }\n\n  // Extract hour, minute, and second (defaulting to 0 if not provided).\n  let hour = timeParts[0];\n  let minute = timeParts.length >= 2 ? timeParts[1] : 0;\n  let second = timeParts.length === 3 ? timeParts[2] : 0;\n\n  // Validate minute and second ranges.\n  if (minute < 0 || minute > 59) return null;\n  if (second < 0 || second > 59) return null;\n\n  // Adjust hour based on the AM/PM marker.\n  if (period) {\n    if (hour < 1 || hour > 12) return null;\n    if (period === 'PM') {\n      hour = hour === 12 ? 12 : hour + 12;\n    } else {\n      hour = hour === 12 ? 0 : hour;\n    }\n  } else {\n    // Without a period, assume 24-hour format.\n    if (hour < 0 || hour > 23) return null;\n  }\n\n  return hour * 3600 + minute * 60 + second;\n}\n","export function cubicBezier(p1x: number, p1y: number, p2x: number, p2y: number, t: number): number {\n  const cx = 3.0 * p1x;\n  const bx = 3.0 * (p2x - p1x) - cx;\n  const ax = 1.0 - cx - bx;\n  const cy = 3.0 * p1y;\n  const by = 3.0 * (p2y - p1y) - cy;\n  const ay = 1.0 - cy - by;\n\n  let x = t;\n  for (let i = 0; i < 4; i++) {\n      const t_0 = x * x * x * ax + x * x * bx + x * cx;\n      const t_1 = 3 * x * x * ax + 2 * x * bx + cx;\n      x = x - (t_0 - t) / t_1;\n  }\n  return x * x * x * ay + x * x * by + x * cy;\n}\n","import { fromEvent, merge, Observable, tap } from \"rxjs\";\n\nexport interface MouseTouchEvent {\n  clientX: number;\n  clientY: number;\n  pageX: number;\n  pageY: number;\n  screenX: number;\n  screenY: number;\n  target: EventTarget | null;\n}\n\n export function normalizeEvent(event: MouseEvent | TouchEvent | Touch): MouseTouchEvent {\n  if (event instanceof MouseEvent) {\n    return event;\n  } else if (event instanceof TouchEvent) {\n    return event.touches[0] || event.changedTouches[0];\n  } else if (event instanceof Touch) {\n    return {\n      clientX: event.clientX,\n      clientY: event.clientY,\n      pageX: event.pageX,\n      pageY: event.pageY,\n      screenX: event.screenX,\n      screenY: event.screenY,\n      target: event.target\n    };\n  }\n  return event;\n}\n\n  export function createPointerEvents(element: HTMLElement | Element): {\n    start$: Observable<PointerEvent>;\n    move$: Observable<PointerEvent>;\n    end$: Observable<PointerEvent>;\n  } {\n  const pointerDown$ = fromEvent<PointerEvent>(element, 'pointerdown');\n  const pointerMove$ = fromEvent<PointerEvent>(document, 'pointermove');\n  const pointerUp$ = fromEvent<PointerEvent>(document, 'pointerup');\n  const pointerLeave$ = fromEvent<PointerEvent>(document, 'pointerleave');\n\n  const start$ = pointerDown$;\n  const move$ = pointerMove$;\n  const end$ = merge(pointerUp$, pointerLeave$);\n\n  return { start$, move$, end$ };\n}\n","export function snapAngle(angle: number, steps: number): number {\n  // Calc the size of each step in the scale. 12 for hours, 60 for minutes\n  const stepSize = 360 / steps;\n  // Find the closest multiple of the step size. 12 for hours, 60 for minutes\n  const closestStep = Math.round(angle / stepSize);\n  // Calc the snapped angle\n  const snappedAngle = closestStep * stepSize;\n\n  return snappedAngle;\n}\n\nexport function hoursToAngle(hour: number): number {\n  const angle = (hour - 3) * 30;\n  return (angle + 360) % 360;\n}\n\nexport function minutesToAngle(minute: number): number {\n  let angle = (minute - 15) * 6;\n  angle = (angle + 360) % 360;\n\n  return angle;\n}\n\nexport function hours24ToAngle(hour: number): number {\n  let angle: number;\n\n  if (hour >= 0 && hour <= 11) {\n    angle = (hour - 3) * 30; // Dial 1: 0 to 11\n  } else {\n    angle = (hour - 15) * 30; // Dial 2: 12 to 23\n  }\n\n  angle = (angle + 360) % 360;\n\n  return angle;\n}\n\nexport function angleToHours(angle: number): number {\n  // Normalize the angle to be within 0-360 range\n  angle = (angle + 360) % 360;\n  // Correct mapping: 0 degrees -> 3, 270 degrees -> 12\n  let hour = Math.floor((angle + 90) / 30) % 12;\n  // Handle the 0 hour case (midnight)\n  if (hour === 0) {\n    hour = 12;\n  }\n\n  return hour;\n}\n\nexport function angleToMinutes(angle: number): number {\n  // Normalize the angle\n  angle = (angle + 360) % 360;\n\n  let minute = (angle / 6) + 15;\n\n  minute = (minute + 60) % 60; // Ensure positive value and wrap around 60\n\n  return Math.floor(minute);\n}\n\nexport function angleToHours24(angle: number, dial: number): number {\n  angle = (angle + 360) % 360;\n\n  let hour: number = 0;\n  const baseValue = angle / 30;\n\n  if (dial === 1) { \n    hour = (Math.floor(baseValue + 3) % 12 + 12) % 12;\n  } else if (dial === 2) { \n    hour = (Math.floor(baseValue + 3) % 12) + 12;\n  }\n  \n  return hour;\n}","export const HOURS_LABEL = [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\nexport const HOURS_LABEL_24_P1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\nexport const  HOURS_LABEL_24_P2 = [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23];\nexport const  MINUTES_LABEL = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, ModelSignal, model, viewChild, ElementRef, Renderer2, DestroyRef, inject, computed, afterNextRender, effect, Injector, WritableSignal, signal, untracked } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { switchMap, takeUntil, tap } from 'rxjs';\n\nimport { ClockIterable } from './utils/clock-iterable';\nimport { amPmTransform, detectTimeFormat, SimpleTime, splitDate } from './utils/time';\nimport { cubicBezier } from './utils/animation';\nimport { normalizeEvent, createPointerEvents, MouseTouchEvent } from './utils/events';\nimport { snapAngle, hoursToAngle, angleToHours, hours24ToAngle, minutesToAngle, angleToHours24, angleToMinutes } from './utils/angle';\nimport { HOURS_LABEL, HOURS_LABEL_24_P1, HOURS_LABEL_24_P2, MINUTES_LABEL } from './utils/constants';\n\n@Component({\n  selector: 'rk-timepicker-dial',\n  host: {\n    'class': 'rk-timepicker-dial',\n  },\n  imports: [],\n  template: `\t\n    <div class=\"rk-timepicker-dial-container\">\n      <div #dial class=\"rk-label-container rk-dial-size\">\n      </div>\n      <div #dial2 class=\"rk-cliped-label rk-dial-size\">\n      </div>\n      <div #dialSelector class=\"rk-dial-selector\"></div>\n      <div class=\"rk-pivot-point\"></div>\n    </div>\n  `,\n  styles: [],\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class RkTimepickerDial {\n  currentTime: ModelSignal<Date | null> = model.required<Date | null>({alias: 'time'});\n  timeFormat: ModelSignal<string | null> = model<string | null>('12h', {alias: 'format'});\n  selectedTime: ModelSignal<string | null> = model<string | null>('hours', {alias: 'selected'});\n  period: ModelSignal<string> = model<string>('AM');\n\n  readonly value = computed(() => {\n      const date = this.currentTime();\n      return date ? splitDate(date) : { hours: 0, minutes: 0 };\n  });\n  readonly format = computed(() => {\n    const fm = this.timeFormat();\n    return (fm && (fm === '24h' || fm === '12h')) ? fm : detectTimeFormat(new Date());\n  });\n  readonly selected = computed(() => {\n    const selected = this.selectedTime();\n    return selected === 'hours' || selected === 'minutes' ? selected : 'hours';\n  });\n\n  private _dial  = viewChild.required<ElementRef>('dial');\n  private _clipedLabel  = viewChild.required<ElementRef>('dial2');\n  private _dialSelector = viewChild.required<ElementRef>('dialSelector');\n\n  private _elRef: ElementRef = inject(ElementRef);\n  private _renderer: Renderer2 = inject(Renderer2);\n  private _destroyRef: DestroyRef = inject(DestroyRef);\n  private _injector = inject(Injector);\n  private _document = inject(DOCUMENT);\n\n  private _currentDial = signal(1);\n  private _currentDegree: WritableSignal<number> = signal(0);\n  private _loading = signal(false);\n  private readonly _motion = 250;\n  private readonly _radius = 128;\n  private readonly _labelSize = 48;\n  \n  constructor() {\n    afterNextRender(() => {\n     this._fillBySelected(this.selected(), this.format());\n\n    effect(() => {\n      const selected = this.selected();\n      const format = this.format();\n      this._fillBySelected(selected, format);\n      untracked(() => {\n        const value = this.value();\n        this.period.set(this.value().hours < 12 ? 'AM' : 'PM');\n        this._currentDial.set(format === '24h'  && selected === 'hours' && value.hours >= 12 ? 2 : 1);\n        this._handleInputsChange(value, format, selected);\n      });\n\n    }, { injector: this._injector});\n\n    effect(() => {\n      const value = this.value();\n      untracked(() => {\n        if(this._loading()) return;\n        const format = this.format();\n        const selected = this.selected();\n        this.period.set(this.value().hours < 12 ? 'AM' : 'PM');\n        this._currentDial.set(format === '24h'  && selected === 'hours' && value.hours >= 12 ? 2 : 1);\n        this._handleInputsChange(value, format, selected, true);\n      })\n    }, { injector: this._injector});\n\n    effect(() => {\n      const period = this.period();\n      untracked(() => {\n        const currentTime = this.currentTime();\n        if(period === null || currentTime === null) return;\n        this.currentTime.set(amPmTransform(period, currentTime));\n      })\n    }, { injector: this._injector});\n\n    const { start$, move$, end$ } = createPointerEvents(this._elRef.nativeElement);\n    start$.pipe(\n      tap((event) => this._onPointerEventInit(normalizeEvent(event))),\n      switchMap(() => {\n        return move$.pipe(\n          takeUntil(end$.pipe(tap((event) => this._onPointerEventStop(normalizeEvent(event)))))\n        );\n      }),\n      takeUntilDestroyed(this._destroyRef)\n    ).subscribe(event => {\n      const normalized = normalizeEvent(event);\n      this._onPointerEventInit(normalized);\n    })\n    });\n  }\n\n  private _handleInputsChange(value: SimpleTime, format: string, selected: string, animate = true) {\n    if(selected === 'hours') {\n      const angle = format === '24h' ? hours24ToAngle(value.hours) : hoursToAngle(value.hours);\n      if(animate) {\n        this._rotateAnimation(this._currentDegree(), angle, this._motion, 2);\n      } else {\n        this._moveByAngle(angle, 2);\n      }\n      this._currentDegree.set(angle);\n    } else {\n      const angle = minutesToAngle(value.minutes);\n      if(animate) {\n        this._rotateAnimation(this._currentDegree(), angle, this._motion, 2);\n      } else {\n        this._moveByAngle(angle, 2);\n      }\n      this._currentDegree.set(angle);\n    }\n  }\n\n  private _onPointerEventInit(event: MouseTouchEvent) {\n    this._loading.set(true);\n    this._moveByTouchClick(event, this._dial().nativeElement);\n  }\n\n  private async _onPointerEventStop(event: MouseTouchEvent) {\n    const currentDegree = this._currentDegree();\n    const snapDegrees = this.selected() === 'hours' ? snapAngle(currentDegree, 12) : snapAngle(currentDegree, 60);\n\n    await this._rotateAnimation(this._currentDegree(), snapDegrees, this._motion / 2, 2);\n    this._currentDegree.set(snapDegrees);\n    this._loading.set(false);\n    if(this.selected() === 'hours') {\n      this.selectedTime.set('minutes');\n    }\n  }\n\n  private _fillDial(dial: HTMLElement, labels: number[], withClean: boolean, inset: number = 2) {\n    if (withClean) {\n      dial.innerHTML = '';\n    }\n    const clockIterable = new ClockIterable(labels, this._labelSize, this._radius * 2, inset);\n    for (const [label, x, y] of clockIterable) {\n      const numero = this._document.createElement('div');\n      numero.classList.add('rk-clock-dial-label')\n      numero.textContent =  this.selected() === 'hours' ? label.toString() : label.toString().padStart(2, '0');\n      numero.style.position = 'absolute';\n      numero.style.left = x + 'px';\n      numero.style.top = y + 'px';\n      this._renderer.appendChild(dial, numero);\n    }\n  }\n\n  private _fillBySelected(selected: string, format: string) {\n    switch (selected) {\n      case 'hours':\n        if (format === '12h') {\n          this._fillDial(this._dial().nativeElement, HOURS_LABEL, true);\n          this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL, true);\n        } else if (format === '24h') {\n          this._fillDial(this._dial().nativeElement, HOURS_LABEL_24_P1, true);\n          this._fillDial(this._dial().nativeElement, HOURS_LABEL_24_P2, false, 38);\n          this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL_24_P1, true);\n          this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL_24_P2, false, 38);\n        }\n        break;\n      case 'minutes':\n        this._fillDial(this._dial().nativeElement, MINUTES_LABEL, true);\n        this._fillDial(this._clipedLabel().nativeElement, MINUTES_LABEL, true);\n        break;\n      default:\n        this._fillDial(this._dial().nativeElement, HOURS_LABEL, true);\n        this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL, true);\n    }\n  }\n\n  private _moveByTouchClick(event: MouseTouchEvent, dial: HTMLElement, inset: number = 2) {\n    const rect = dial.getBoundingClientRect();\n    // relative to the center of the clock\n    const x = event.clientX - rect.left - this._radius;\n    const y = event.clientY - rect.top - this._radius;\n\n    // Calc angle in degrees\n    let angle = Math.atan2(y, x) * (180 / Math.PI);\n    if (angle < 0) {\n      angle += 360; //make sure the angle is in the range [0, 360]\n    }\n  \n    // Calc new position for the object (using radius as reference)\n    let radius = this._radius - (this._labelSize / 2) - inset;\n\n//--------------------------------------------------------------------------------------------------------------//\n    // logic when format is 24h and two dial exist\n    const distanceFromCenter = Math.sqrt(x * x + y * y);\n    const MAX_RAD = radius - 20;\n    let selectorInset = 0;\n    \n    if (distanceFromCenter < MAX_RAD && this.selected() === 'hours' && this.format() === '24h') {\n        radius -= 36;\n        this._currentDial.set(2);\n        selectorInset = 36;\n    } else {\n      this._currentDial.set(1);\n      selectorInset = 0;\n    }\n  \n//----------------------------------------------------------------------------------------------------------------//\n\n    const moveX = this._radius + radius * Math.cos(angle * (Math.PI / 180));\n    const moveY = this._radius + radius * Math.sin(angle * (Math.PI / 180));\n    // Call the provided functions with the calculated values\n    this._moveTrack(moveX, moveY);\n    this._moveSelector(angle, selectorInset);\n    this._currentDegree.set(angle);\n\n    //update time\n    const snapDegrees = this.selected() === 'hours' ? snapAngle(angle, 12) : snapAngle(angle, 60);\n    const currentDate = this.currentTime();\n    const date = currentDate ? new Date(currentDate) :  new Date();\n    \n    if(this.selected() === 'hours') {\n      let hours = this.format() === '24h' ? angleToHours24(snapDegrees, this._currentDial()) : angleToHours(snapDegrees);\n      if(this.format() === '24h') {\n        this.period.set(hours < 12 ? 'AM' : 'PM');\n      }\n      if (this.format() !== '24h' && this.period() === 'PM') {\n        hours = hours < 12 ? hours + 12 : hours; \n      }\n      if(this.period() === 'AM' && hours >= 12 && this.format() === '12h') {\n        hours = hours - 12;\n      }\n      date.setHours(hours);\n    } else {\n      date.setMinutes(angleToMinutes(snapDegrees));\n    }\n    \n    this.currentTime.set(date);\n  }\n\n  private _moveByAngle(angle: number, inset: number = 2) {\n      // Ensure angle is within 0-360 range\n      angle = angle % 360;\n      if (angle < 0) {\n          angle += 360;\n      }\n      // Calc new position for the object (using radius as reference)\n      let radius = this._radius - (this._labelSize / 2) - inset;\n\n      // logic when format is 24h and two dial exist\n      let selectorInset = 0;\n      if (this.selected() === 'hours' && this.format() === '24h' && this._currentDial() === 2) {\n        radius -= 36;\n        selectorInset = 36;\n      }\n\n      const moveX = this._radius + radius * Math.cos(angle * (Math.PI / 180));\n      const moveY = this._radius + radius * Math.sin(angle * (Math.PI / 180));\n\n      // Call the provided functions with the calculated values\n      this._moveTrack(moveX, moveY);\n      this._moveSelector(angle, selectorInset);\n  }\n\n  private _moveTrack(x: number, y: number) {\n    this._renderer.setStyle(this._clipedLabel().nativeElement, 'clip-path', `circle(24px at ${x}px ${y}px)`);\n  }\n\n  private _moveSelector(degrees: number, inset: number = 0) {\n    this._renderer.setStyle(this._dialSelector().nativeElement, 'width', 104 - inset + 'px');\n    this._renderer.setStyle(this._dialSelector().nativeElement, 'transform', `rotate(${degrees}deg)`);\n  }\n\n  private async _rotateAnimation(currentDegree: number, degree: number, animationTime: number, inset: number = 2): Promise<void> {\n    return new Promise<void>((resolve) => {\n        // Calculate the shortest angle difference between the current and target degrees.\n        let angleDiff = degree - currentDegree;\n\n        // Adjust the angle difference to be within the range of -180 to 180 degrees.\n        if (angleDiff > 180) {\n            angleDiff -= 360;\n        } else if (angleDiff < -180) {\n            angleDiff += 360;\n        }\n\n        // Store the start time of the animation.\n        let startTime: number | null = null;\n\n        const animate = (timestamp: number) => {\n            // Initialize the start time if it hasn't been set yet.\n            if (!startTime) startTime = timestamp;\n\n            // Calculate the progress of the animation (0 to 1).\n            let progress = Math.min((timestamp - startTime) / animationTime, 1);\n\n            // Apply a cubic Bezier easing function to the progress.  This makes the animation smoother.\n            const easedProgress = cubicBezier(0.05, 0.7, 0.1, 1.0, progress);\n\n            // Calculate the current angle based on the eased progress.\n            const currentAngle = currentDegree + angleDiff * easedProgress;\n\n            // Update the position of the dial and selector based on the current angle.\n            this._moveByAngle(currentAngle, inset);\n\n            // Continue the animation if it's not finished.\n            if (progress < 1) {\n                requestAnimationFrame(animate);\n            } else {\n                resolve(); // Resolve the promise when the animation is complete.\n            }\n        };\n        requestAnimationFrame(animate);\n    });\n  }\n}","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, ModelSignal, signal, untracked, viewChild, ViewEncapsulation } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatRippleModule } from '@angular/material/core';\nimport { formatTimeValue, splitDate, validateTimeValue } from './utils';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n  selector: 'rk-timepicker-input-label',\n  imports: [NgClass, MatRippleModule, FormsModule],\n  host: {\n    'class': 'rk-time-input-field',\n  },\n  template: `\n    <div class=\"rk-time-input-label-container\">\n      <div class=\"rk-time-selector-container\" matRipple [ngClass]=\"{'rk-time-selector-container-selected': selected() === 'hours'}\" (click)=\"selectedChange('hours')\">\n        @if (!editable()) {\n          {{value().hours.toString().padStart(2, '0')}}\n        } @else {\n          <input type=\"number\" maxlength=\"2\" #inputH [value]=\"hours()\" (focus)=\"selectedChange('hours')\" (input)=\"onHoursInput($event)\" (keydown)=\"handleKeydown($event, 'hours')\" (blur)=\"onHoursBlur()\" name=\"hours\">\n        }\n      </div>\n      @if (editable()) {\n        <span class=\"rk-time-input-support-label\">{{inputSupportLabels()[0]}}</span>\n      }\n    </div>\n    <div class=\"rk-time-divider\">:</div>\n    <div class=\"rk-time-input-label-container\">\n      <div class=\"rk-time-selector-container\" matRipple [ngClass]=\"{'rk-time-selector-container-selected': selected() === 'minutes'}\" (click)=\"selectedChange('minutes')\">\n        @if (!editable()) {\n          {{value().minutes.toString().padStart(2, '0')}}\n        } @else {\n          <input type=\"number\" maxlength=\"2\" #inputM [value]=\"minutes()\" (focus)=\"selectedChange('minutes')\" (input)=\"onMinutesInput($event)\" (keydown)=\"handleKeydown($event, 'minutes')\" (blur)=\"onMinutesBlur()\" name=\"minutes\">\n        }\n      </div>\n      @if (editable()) {\n        <span class=\"rk-time-input-support-label\">{{inputSupportLabels()[1]}}</span>\n      }\n    </div>\n    @if (format() === '12h') {\n      <div class=\"rk-period-selector-container\">\n        <div class=\"rk-period-selector\" matRipple [ngClass]=\"{'rk-period-selector-selected': period() === 'AM'}\" (click)=\"periodSelector('AM')\">AM</div>\n        <div class=\"rk-period-selector\" matRipple [ngClass]=\"{'rk-period-selector-selected': period() === 'PM'}\" (click)=\"periodSelector('PM')\">PM</div>\n      </div>\n    }\n  `,\n  styles: ``,\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None\n})\nexport class RkTimepickerInputLabel {\n  currentTime: ModelSignal<Date | null> = model.required<Date | null>({alias: 'time'});\n  selected = model('hours');\n  period = model('AM');\n  format = model('12h');\n  editable = model(false);\n\n  hours = signal<string>('');\n  minutes = signal<string>('');\n\n  inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n  inputHours = viewChild<ElementRef<HTMLInputElement>>('inputH');\n  inputMinutes = viewChild<ElementRef<HTMLInputElement>>('inputM');\n\n  readonly value = computed(() => {\n    const date = this.currentTime();\n    const format = this.format();\n    if (date) {\n      const { hours, minutes } = splitDate(date);\n      if (format === '12h') {\n        return { hours: hours > 12 ? hours - 12 : hours === 0 ? 12 : hours, minutes };\n      }\n      return { hours, minutes };\n    }\n    return { hours: 0, minutes: 0 };\n  });\n\n  constructor() {\n    effect(() => {\n      const editable = this.editable();\n      const selected = this.selected();\n      if (editable) {\n        if (selected=== 'hours') {\n          this.inputHours()?.nativeElement.focus();\n        } else if (selected === 'minutes') {\n          this.inputMinutes()?.nativeElement.focus();\n        }\n      }\n    });\n\n    effect(() => {\n      const value = this.value();\n      untracked(() => {\n        this.onHoursInput(value.hours.toString().padStart(2, '0'));\n        this.onMinutesInput(value.minutes.toString().padStart(2, '0'));\n      })\n    })\n  }\n\n  onHoursInput(event: Event|string): void {\n    const input = this.inputHours()?.nativeElement;\n    const value = typeof event === 'string' ? event : (<HTMLInputElement>event.target)?.value;\n    const max = this.format() === '24h' ? 23 : 12;\n    const validatedValue = validateTimeValue(value, max);\n\n    if (input &&input.value !== validatedValue) {\n      input.value = validatedValue;\n    }\n    this.hours.set(validatedValue);\n\n  }\n  \n  onMinutesInput(event: Event|string): void {\n    const input = this.inputMinutes()?.nativeElement;\n    const value =  typeof event === 'string' ? event : (<HTMLInputElement>event.target)?.value;\n    const validatedValue = validateTimeValue(value, 59);\n\n    if (input &&input.value !== validatedValue) {\n      input.value = validatedValue;\n    }\n\n    this.minutes.set(validatedValue);\n  }\n\n  onHoursBlur(): void {\n    const defaultHour = this.format() === '24h' ? '00' : '01';\n    const formattedValue = formatTimeValue(this.hours(), defaultHour);\n    this.hours.set(formattedValue);\n    this.updateModel();\n  }\n\n  onMinutesBlur(): void {\n    const formattedValue = formatTimeValue(this.minutes(), '00');\n    this.minutes.set(formattedValue);\n    this.updateModel();\n  }\n\n  updateModel() {\n    const tempDate = this.currentTime();\n    if(tempDate) {\n      const newDate = new Date(tempDate);\n      let hoursN = Number(this.hours());\n      const minutesN = Number(this.minutes());\n      if (this.format() === '12h' && this.period() === 'PM') {\n        hoursN = hoursN < 12 ? hoursN + 12 : hoursN;\n      }\n      newDate.setHours(hoursN);\n      newDate.setMinutes(minutesN);\n      this.currentTime.set(newDate);\n    }\n  }\n  handleKeydown(event: KeyboardEvent, selected: string) {\n    if (['Enter', 'Escape', 'Tab'].includes(event.code)) {\n      if(selected === 'hours') {\n        this.onHoursBlur();\n        this.selected.set('minutes');\n      } else {\n        this.onMinutesBlur();\n      }\n    }\n  }\n\n  selectedChange(selected: string) {\n    if (this.selected() === selected) {\n      return;\n    }\n    this.selected.set(selected);\n  }\n\n  periodSelector(period: string) {\n    if (this.period() === period) {\n      return;\n    }\n    this.period.set(period);\n  }\n}","import { Component, ChangeDetectionStrategy, ViewEncapsulation, model, input, computed, effect, signal, output, afterRender, InputSignal, viewChild, TemplateRef, OutputEmitterRef, inject, untracked, Signal } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { Dialog, DialogModule, DialogRef } from '@angular/cdk/dialog';\nimport { RkTimepickerDial } from './timepicker-dial';\nimport { RkTimepickerInputLabel } from './timepicker-input-label';\nimport { RkTimepickerInput } from './timepicker-input';\n\n@Component({\n  selector: 'rk-timepicker',\n  exportAs: 'rkTimepicker',\n  imports: [RkTimepickerInputLabel, NgClass, DialogModule, RkTimepickerDial, MatButton, MatIconButton, MatIcon],\n  host: {\n    '[class.rk-timepicker-landscape]': 'isLandscape()',\n    '[class.rk-timepicker-editable]': 'editable()',\n    '(keydown)': '_handleKeydown($event)',\n  },\n  template: `\n    <ng-template #panelTemplate>\n      <div class=\"rk-timepicker rk-timepicker-panel\">\n        <div class=\"rk-timepicker-container\" [ngClass]=\"{ 'rk-timepicker-container-hide': !load() }\">\n          <span class=\"rk-timepicker-headline\">{{ headline() }}</span>\n          <rk-timepicker-input-label [(time)]=\"currentTime\" [inputLabels]=\"_inputSupportLabels()\" [(editable)]=\"editable\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-input-label>\n          <rk-timepicker-dial  [ngClass]=\"{ 'rk-dial-closed': editable(), 'rk-dial-animated': animated()}\" [(time)]=\"currentTime\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-dial>\n          <div class=\"rk-timepicker-footer\">\n            <button class=\"rk-timepicker-mode-button\" (click)=\"changeMode()\" mat-icon-button>\n              @if (editable()) {\n                <mat-icon>schedule</mat-icon>\n              } @else {\n                <mat-icon>keyboard</mat-icon> \n              }\n            </button>\n            <div class=\"rk-timepicker-actions\">\n              <button mat-button (click)=\"onCancel()\">{{_actions()[0]}}</button>\n              <button mat-button (click)=\"onConfirm()\">{{_actions()[1]}}</button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </ng-template>\n  `,\n  styles: ``,\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class RkTimepicker {\n  selected =  model<string>('hours');\n  format = model('12h');\n  period = model<string>('AM');\n  editable = model(false);\n  orientation  = model<string>('portrait');\n  \n  _inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n  _headline = input<string[]>(['Enter time', 'Select time'], {alias: 'headline'});\n  _actions = input<string[]>(['Cancel', 'OK'], {alias: 'actions'});\n  /** Whether the timepicker is currently disabled. */\n  readonly disabled: Signal<boolean> = computed(() => !!this._input()?.disabled());\n  \n  readonly defaultTime: InputSignal<Date | null> = input<Date | null>(null,{alias: 'time'});\n  readonly  load = signal(false);\n  \n  readonly isLandscape = computed(() => {\n    return this.orientation() === 'landscape';\n  });\n  \n  readonly headline = computed(() => {\n    const editable = this.editable();\n    const labels = this._headline();\n    return editable ? labels[0] : labels[1];\n  });\n  \n  \n  protected _panelTemplate = viewChild.required<TemplateRef<unknown>>('panelTemplate');\n  private _dialogRef = signal<DialogRef<Date | null> | null>(null);\n  \n  private _input = signal<RkTimepickerInput | null>(null);\n  private _isOpen = signal(false);\n\n  currentTime = signal<Date | null>(null);\n  animated = signal(false);\n  \n  /** Emits when the timepicker is opened. */\n  readonly opened: OutputEmitterRef<void> = output();\n  /** Emits when the timepicker is closed. */\n  readonly closed: OutputEmitterRef<void> = output();\n\n  readonly selectedTime: OutputEmitterRef<Date> = output();\n  \n  private _dialog = inject(Dialog);\n\n  constructor() {\n    effect(() => {\n      const value = this.defaultTime();\n      if(!value) {\n        this.currentTime.set(new Date());\n      } else {\n        this.currentTime.set(value);\n      }\n    });\n\n    effect(() => {\n      const editable = this.editable();\n      untracked(() => {\n        this.animated.set(true);\n      })\n    })\n\n    afterRender(() => {\n      this.load.set(true);\n    });\n  }\n\n  /** Opens the timepicker. */\n  open(): void {\n    const input = this._input();\n\n    if (!input) {\n      return;\n    }\n\n    if (this._isOpen()) {\n      return;\n    }\n\n    this.currentTime.set(input.value());\n    this.animated.set(false);\n    this._isOpen.set(true);\n    this.opened.emit();\n    \n    const dialogRef = this._dialog.open<Date | null>(this._panelTemplate(), {\n      width: '328px',\n    });\n\n    this._dialogRef.set(dialogRef);\n\n    dialogRef.closed.subscribe(result => {\n      if(result) {\n        this._input()?.value.set(result);\n        this.selectedTime.emit(result);\n        input.simulateEnter();\n      }\n      this._isOpen.set(false);\n      this.closed.emit();\n      this.selected.set('hours');\n      input.focus();\n    });\n  }\n\n /** Registers an input with the timepicker. */\n  registerInput(input: RkTimepickerInput): void {\n    const currentInput = this._input();\n\n    if (currentInput && input !== currentInput ) {\n      console.warn('RkTimepicker can only be registered with one input at a time');\n    }\n\n    this._input.set(input);\n  }\n\n  private _handleKeydown(event: KeyboardEvent): void {\n    const keyCode = event.key;\n    if (keyCode === 'Enter') {\n      event.preventDefault();\n      this.onConfirm();\n    } else if (keyCode === 'Escape') {\n      event.preventDefault();\n      this.onCancel();\n    }\n  }\n\n\n  changeMode() {\n    this.editable.set(!this.editable());\n  }\n\n  \n  onConfirm() {\n    this._dialogRef()?.close(this.currentTime());\n  }\n\n  onCancel() {\n    this._dialogRef()?.close();\n  } \n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input, InputSignal, InputSignalWithTransform, model, ModelSignal, Renderer2, Signal, signal } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\nimport { RkTimepicker } from './timepicker';\nimport { secondsToDate, timeToSecondsi18n as timeToSeconds } from './utils';\n\n@Directive({\n  selector: 'input[rkTimepicker]',\n  exportAs: 'rkTimepickerInput',\n  host: {\n    'class': 'rk-timepicker-input',\n    'type': 'text',\n    '(input)': '_handleInput($event.target.value)',\n    '(blur)': '_handleBlur()',\n    '(keydown)': '_handleKeydown($event)',\n    '[disabled]': 'disabled()',\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: RkTimepickerInput,\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: RkTimepickerInput,\n      multi: true,\n    },\n    {\n      provide: MAT_INPUT_VALUE_ACCESSOR,\n      useExisting: RkTimepickerInput,\n    },\n  ]\n})\nexport class RkTimepickerInput implements ControlValueAccessor, Validator {\n  private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n  private _renderer = inject(Renderer2);\n  \n  /** Necessary for ControlValueAccessor implementation */\n  private _onChange: ((value: any) => void) | undefined;\n  private _onTouched: (() => void) | undefined;\n  private _accessorDisabled = signal(false);\n  private _validatorOnChange: (() => void) | undefined;\n\n  /** Current value of the input. */\n  readonly value: ModelSignal<Date | null> = model<Date | null>(null);\n  private _tempDateSafe = signal<Date | null>(null);\n  \n  /** Timepicker that the input is associated with. */\n  readonly timepicker: InputSignal<RkTimepicker> = input.required<RkTimepicker>({\n    alias: 'rkTimepicker',\n  });\n  /** Whether the input is disabled. */\n  readonly disabled: Signal<boolean> = computed(\n    () => this.disabledInput() || this._accessorDisabled(),\n  );\n  /**\n   * Whether the input should be disabled through the template.\n   */\n  readonly disabledInput: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n    alias: 'disabled',\n  });\n  \n  constructor() {\n    this._registerTimepicker();\n  }\n\n  private _updateModelValue() {\n    const value = this.value();\n    if(!value) {\n      this._validatorOnChange?.();\n      return\n    }\n    this._onChange?.(value);\n  }\n  \n  private _validateTimeOrNull(value: string | Date | null) {\n    if (value === null || value instanceof Date) {\n      this.value.set(value);\n      return;\n    }\n    const validTime = timeToSeconds(value);\n    const time = validTime ? secondsToDate(validTime) : null;\n    if(!time) {\n      this.value.set(null);\n    } else {\n      const newDate = new Date(this._tempDateSafe() ?? new Date());\n      newDate.setHours(time.getHours(), time.getMinutes());\n      this.value.set(newDate);\n    }\n  }\n  \n   private _updateInputValue() {\n    if (this.value() !== null) {\n      this._renderer.setProperty(this._elementRef.nativeElement, 'value', this.value()?.toLocaleTimeString([],{ hour: \"2-digit\", minute: \"2-digit\" }));\n    }\n  }\n\n  /** Handles the `input` event. */\n  protected _handleInput(value: string) {\n    this._validateTimeOrNull(value);\n    this._validatorOnChange?.();\n  }\n\n  /** Handles the `keydown` event. */\n  protected _handleKeydown(event: KeyboardEvent) {\n    if (['Enter', 'Escape', 'Tab'].includes(event.code)) {\n      this._updateModelValue();\n      this._updateInputValue();\n    }\n  }\n\n  simulateEnter() {\n    this._handleKeydown({ code: 'Enter' } as KeyboardEvent);\n  }\n\n  /** Handles the `blur` event. */\n  protected _handleBlur() {\n    this._onTouched?.();\n    this._updateModelValue();\n    this._updateInputValue();\n  }\n\n  /** Focuses the input. */\n  focus(): void {\n    this._elementRef.nativeElement.focus();\n  }\n\n  /** Implemented as a part of ControlValueAccessor. */\n  writeValue(value: any): void {\n    if(value instanceof Date) {\n      this._tempDateSafe.set(value);\n      this.value.set(value);\n      this._updateInputValue();\n    } else {\n      this._validateTimeOrNull(value);\n      this._updateInputValue();\n    }\n  }\n   /** Implemented as a part of ControlValueAccessor. */\n  registerOnChange(fn: (value: any) => void): void {\n    this._onChange = fn;\n  }\n  /** Implemented as a part of ControlValueAccessor. */\n  registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n  /** Implemented as a part of ControlValueAccessor. */\n  setDisabledState(isDisabled: any): void {\n    this._accessorDisabled.set(isDisabled);\n  }\n\n  // implemented as a part of Validator\n  validate(control: AbstractControl): ValidationErrors | null {\n    if (control.value == null || this.value() == null) {\n      return { invalidTimeFormat: true };\n    }\n    return null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this._validatorOnChange = fn;\n  }\n\n  /** Sets up the logic that registers the input with the timepicker. */\n  private _registerTimepicker(): void {\n    effect(() => {\n      const timepicker = this.timepicker();\n      timepicker.registerInput(this);\n      timepicker.closed.subscribe(() => this._onTouched?.());\n    });\n  }\n}\n","import { booleanAttribute, Component, computed, input, InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { RkTimepicker } from './timepicker';\n\n@Component({\n  selector: 'rk-timepicker-toggle',\n  imports: [MatIconButton],\n  template: `\n    <button mat-icon-button type=\"button\" [disabled]=\"_isDisabled()\" (click)=\"_open($event)\">\n      <ng-content select=\"[rkTimepickerToggleIcon]\">\n        <svg\n          class=\"rk-timepicker-toggle-default-icon\"\n          height=\"24px\"\n          width=\"24px\"\n          viewBox=\"0 -960 960 960\"\n          fill=\"currentColor\"\n          focusable=\"false\"\n          aria-hidden=\"true\">\n          <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n        </svg>\n      </ng-content>\n    </button>\n  `,\n  styles: ``\n})\nexport class RkTimepickerToggle {\n  readonly timepicker: InputSignal<RkTimepicker> = input.required<RkTimepicker>({\n    alias: 'for',\n  });\n\n  /** Whether the toggle button is disabled. */\n  readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n    transform: booleanAttribute,\n    alias: 'disabled',\n  });\n\n  protected _isDisabled = computed(() => {\n    const timepicker = this.timepicker();\n    return this.disabled() || timepicker.disabled();\n  });\n\n  /** Opens the connected timepicker. */\n  protected _open(event: Event): void {\n    if (this.timepicker() && !this._isDisabled()) {\n      this.timepicker().open();\n      event.stopPropagation();\n    }\n  }\n}","import { Component, ChangeDetectionStrategy, ViewEncapsulation, model, input, computed, effect, signal, afterRender } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RkTimepickerDial } from './timepicker-dial';\nimport { RkTimepickerInputLabel } from './timepicker-input-label';\n\n@Component({\n  selector: 'rk-clock',\n  exportAs: 'rkClock',\n  imports: [RkTimepickerInputLabel, NgClass, RkTimepickerDial, MatButton, MatIconButton, MatIcon],\n  host: {\n    'class': 'rk-timepicker',\n    '[class.rk-timepicker-landscape]': 'isLandscape()',\n    '[class.rk-timepicker-editable]': 'editable()',\n  },\n  template: `\n    <div class=\"rk-timepicker-container\" [ngClass]=\"{ 'rk-timepicker-container-hide': !load() }\">\n      <span class=\"rk-timepicker-headline\">{{ headline() }}</span>\n      <rk-timepicker-input-label [(time)]=\"value\" [inputLabels]=\"inputSupportLabels()\" [(editable)]=\"editable\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-input-label>\n      <rk-timepicker-dial  [ngClass]=\"{ 'rk-dial-closed': editable()}\" [(time)]=\"value\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-dial>\n      <div class=\"rk-timepicker-footer\">\n        <button class=\"rk-timepicker-mode-button\" (click)=\"changeMode()\" mat-icon-button>\n          @if (editable()) {\n            <mat-icon>schedule</mat-icon>\n          } @else {\n            <mat-icon>keyboard</mat-icon> \n          }\n        </button>\n      </div>\n    </div>\n  `,\n  styles: ``,\n  standalone: true,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class RkClock {\n  value= model<Date | null>(null, {alias: 'time'});\n  selected =  model<string>('hours');\n  format = model('24h');\n  period = model<string>('AM');\n  editable = model(false);\n  orientation  = model<string>('portrait');\n  inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n  _headline = input<string[]>(['Enter time', 'Select time'], {alias: 'headline'});\n\n  readonly  load = signal(false);\n\n  readonly isLandscape = computed(() => {\n    return this.orientation() === 'landscape';\n  });\n\n  readonly headline = computed(() => {\n      const editable = this.editable();\n      const labels = this._headline();\n      return editable ? labels[0] : labels[1];\n  });\n\n  constructor() {\n    effect(() => {\n      const value = this.value();\n      if(!value) {\n        this.value.set(new Date());\n      };\n    });\n\n    afterRender(() => {\n      this.load.set(true);\n    });\n  }\n\n  changeMode() {\n    this.editable.set(!this.editable());\n  }\n}\n","/*\n * Public API Surface of timepicker\n */\nexport * from './lib/timepicker';\nexport * from './lib/timepicker-input';\nexport * from './lib/timepicker-toggle';\nexport * from './lib/clock';\nexport * from './lib/utils/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["timeToSeconds"],"mappings":"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"}