{"version":3,"file":"ngx-cron-editor.mjs","sources":["../../../../libs/ngx-cron-editor/src/cron-time-picker.component.ts","../../../../libs/ngx-cron-editor/src/cron-time-picker.template.html","../../../../libs/ngx-cron-editor/src/CronOptions.ts","../../../../libs/ngx-cron-editor/src/enums.ts","../../../../libs/ngx-cron-editor/src/cron-editor.component.ts","../../../../libs/ngx-cron-editor/src/cron-editor.template.html","../../../../libs/ngx-cron-editor/src/cron-editor.module.ts","../../../../libs/ngx-cron-editor/public_api.ts","../../../../libs/ngx-cron-editor/ngx-cron-editor.ts"],"sourcesContent":["import {Component, Input, OnInit} from '@angular/core';\nimport {ControlContainer, FormGroup} from '@angular/forms';\n\nexport interface TimePickerModel {\n  days: number;\n  hours: number;\n  minutes: number;\n  seconds: number;\n}\n\nfunction* range(start: number, end: number) {\n  for (let i = start; i <= end; i++) {\n    yield i;\n  }\n}\n\n@Component({\n  selector: 'cron-time-picker',\n  templateUrl: './cron-time-picker.template.html',\n  providers: []\n})\nexport class TimePickerComponent implements OnInit {\n  @Input() public disabled = false;\n  @Input() public use24HourTime = true;\n  @Input() public hideHours = false;\n  @Input() public hideMinutes = false;\n  @Input() public hideSeconds = true;\n\n  allForm: FormGroup;\n\n  public minutes =  [...range(0, 59) ].map(String);\n  public seconds = [...range(0, 59) ].map(String);\n  public hourTypes = ['AM', 'PM'];\n\n  get hours(): string[] {\n    return this.use24HourTime ? [... range(0, 23)].map(String) : [... range(0, 12)].map(String);\n  }\n\n  constructor(public parent: ControlContainer) {}\n\n  ngOnInit(): void {\n    this.allForm = this.parent.control as FormGroup;\n  }\n}\n\n\n","<ng-container [formGroup]=\"allForm\">\n\n  <ng-container *ngIf=\"!hideHours\">\n    <mat-form-field>\n      <mat-label i18n>Hour(s)</mat-label>\n      <mat-select formControlName=\"hours\">\n        <mat-option *ngFor=\"let hour of hours\" [value]=\"hour\">{{hour}}</mat-option>\n      </mat-select>\n    </mat-form-field>\n  </ng-container>\n\n  <ng-container *ngIf=\"!hideMinutes\">\n    <span *ngIf=\"!hideHours\">:</span>\n    <mat-form-field>\n      <mat-label i18n>Minute(s)</mat-label>\n      <mat-select formControlName=\"minutes\">\n        <mat-option *ngFor=\"let minute of minutes\" [value]=\"minute\">{{minute}}</mat-option>\n      </mat-select>\n    </mat-form-field>\n  </ng-container>\n\n  <ng-container *ngIf=\"!hideSeconds\">\n    <span *ngIf=\"!hideMinutes\">:</span>\n    <mat-form-field>\n      <mat-label i18n>Second(s)</mat-label>\n      <mat-select formControlName=\"seconds\">\n        <mat-option *ngFor=\"let second of seconds\" [value]=\"second\">{{second}}</mat-option>\n      </mat-select>\n    </mat-form-field>\n  </ng-container>\n\n  <ng-container *ngIf=\"!use24HourTime\">\n    <span></span>.\n    <mat-form-field>\n      <mat-select formControlName=\"hourType\">\n        <mat-option *ngFor=\"let hourType of hourTypes\" [value]=\"hourType\">{{hourType}}</mat-option>\n      </mat-select>\n    </mat-form-field>\n  </ng-container>\n</ng-container>\n","export type CronFlavor = 'standard' | 'quartz';\n\nexport interface CronOptions {\n    formInputClass?: string;\n    formSelectClass?: string;\n    formRadioClass?: string;\n    formCheckboxClass?: string;\n\n    defaultTime: string,\n\n    hideMinutesTab: boolean;\n    hideHourlyTab: boolean;\n    hideDailyTab: boolean;\n    hideWeeklyTab: boolean;\n    hideMonthlyTab: boolean;\n    hideYearlyTab: boolean;\n    hideAdvancedTab: boolean;\n    hideSpecificWeekDayTab: boolean;\n    hideSpecificMonthWeekTab: boolean;\n\n    use24HourTime: boolean;\n    hideSeconds: boolean;\n\n    cronFlavor: CronFlavor;\n}\n\nexport class DefaultOptions implements  CronOptions {\n\n  cronFlavor: CronFlavor = 'standard';\n  defaultTime = '00:00:00';\n  hideAdvancedTab = false;\n  hideDailyTab = false;\n  hideHourlyTab = false;\n  hideMinutesTab = false;\n  hideMonthlyTab = false;\n  hideSeconds = false;\n  hideSpecificMonthWeekTab = false;\n  hideSpecificWeekDayTab = false;\n  hideWeeklyTab = false;\n  hideYearlyTab = false;\n  use24HourTime = true;\n}\n","\nexport const Days = {\n  'SUN': $localize`Sunday`,\n  'MON': $localize`Monday`,\n  'TUE': $localize`Tuesday`,\n  'WED': $localize`Wednesday`,\n  'THU': $localize`Thursday`,\n  'FRI': $localize`Friday`,\n  'SAT': $localize`Saturday`\n};\n\nexport const MonthWeeks = {\n  '#1': $localize`First`,\n  '#2': $localize`Second`,\n  '#3': $localize`Third`,\n  '#4': $localize`Fourth`,\n  '#5': $localize`Fifth`,\n  'L': $localize`Last`\n};\n\nexport const Months = {\n  1: $localize`January`,\n  2: $localize`February`,\n  3: $localize`March`,\n  4: $localize`April`,\n  5: $localize`May`,\n  6: $localize`June`,\n  7: $localize`July`,\n  8: $localize`August`,\n  9: $localize`September`,\n  10: $localize`October`,\n  11: $localize`November`,\n  12: $localize`December`\n}\n","import {Component, Input, OnInit, forwardRef, ViewChild, OnDestroy} from '@angular/core';\nimport {CronOptions, DefaultOptions} from './CronOptions';\nimport { Days, MonthWeeks, Months } from './enums';\nimport {ControlValueAccessor, FormBuilder, NG_VALUE_ACCESSOR, Validators} from '@angular/forms';\nimport { ThemePalette } from '@angular/material/core';\nimport {MatTab, MatTabChangeEvent} from '@angular/material/tabs';\nimport {debounceTime, Subscription } from 'rxjs';\n\ntype CronType = 'minutely' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'unknown';\n\nconst minutesExp = /\\d+ 0\\/\\d+ \\* 1\\/1 \\* [\\?\\*] \\*/;\nconst hourlyExp = /\\d+ \\d+ 0\\/\\d+ 1\\/1 \\* [\\?\\*] \\*/;\nconst dailyExp = /\\d+ \\d+ \\d+ 1\\/\\d+ \\* [\\?\\*] \\*/;\nconst dailyWeekdayExp = /\\d+ \\d+ \\d+ [\\?\\*] \\* MON-FRI \\*/;\nconst weeklyExp = /\\d+ \\d+ \\d+ [\\?\\*] \\* (MON|TUE|WED|THU|FRI|SAT|SUN)(,(MON|TUE|WED|THU|FRI|SAT|SUN))* \\*/;\nconst monthlyExp = /\\d+ \\d+ \\d+ (\\d+|L|LW|1W) 1\\/\\d+ [\\?\\*] \\*/;\nconst monthlyWeekdayExp = /\\d+ \\d+ \\d+ [\\?\\*] 1\\/\\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/;\nconst yearlyExp  = /\\d+ \\d+ \\d+ (\\d+|L|LW|1W) \\d+ [\\?\\*] \\*/;\nconst yearlyMonthWeekExp = /\\d+ \\d+ \\d+ [\\?\\*] \\d+ (MON|TUE|WED|THU|FRI|SAT|SUN)((#[1-5])|L) \\*/;\n\nexport const CRON_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => CronGenComponent),\n  multi: true,\n};\n\ninterface CronToken {\n  val: string;\n  inc: string;\n}\n\nfunction parseCronNumberToken(val: string): CronToken {\n  const v = val.split('/');\n  if (v.length === 1) {\n    return {val: v[0], inc: '0'};\n  }\n  return {val: v[0], inc: v[1]}\n}\n\nfunction* range(start: number, end: number) {\n  for (let i = start; i <= end; i++) {\n    yield i;\n  }\n}\n\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'cron-editor',\n  templateUrl: './cron-editor.template.html',\n  styleUrls: ['./cron-editor.component.scss'],\n  providers: [CRON_VALUE_ACCESSOR]\n})\nexport class CronGenComponent implements OnInit, OnDestroy, ControlValueAccessor {\n  public tabIndex = 0;\n\n  @Input() public backgroundColor: ThemePalette;\n  @Input() public color: ThemePalette;\n\n  @Input() public disabled = false;\n  @Input() public options: CronOptions = new DefaultOptions();\n\n\n  public selectOptions = this.getSelectOptions();\n\n  @ViewChild('minutesTab')\n  minutesTab: MatTab | undefined;\n\n  @ViewChild('hourlyTab')\n  hourlyTab: MatTab | undefined;\n\n  @ViewChild('dailyTab')\n  dailyTab: MatTab | undefined;\n\n  @ViewChild('weeklyTab')\n  weeklyTab: MatTab | undefined;\n\n  @ViewChild('monthlyTab')\n  monthlyTab: MatTab | undefined;\n\n  @ViewChild('yearlyTab')\n  yearlyTab: MatTab | undefined;\n\n  @ViewChild('advancedTab')\n  advancedTab: MatTab | undefined;\n\n  formSub: Subscription | undefined;\n\n  touched = false;\n  allForm = this.fb.group({\n    cronType: [<CronType>'unknown', Validators.required],\n    seconds: ['0'],\n\n    minutes: ['0'],\n    minutesPer: ['0'],\n\n    hours: [this.getAmPmHour('0')],\n    hoursPer: ['0'],\n    hoursType: [this.getHourType('0')],\n\n    days: ['0'],  // Days of Month, 1, 2, 31....\n    daysPer: ['0'],\n\n    months: ['0'],\n    monthsInc: ['0'],\n\n    day: ['MON'], // Day of week '1' or 'MON;\n    monthsWeek: ['#1'],\n\n    weekdaysOnly: [false],\n    specificWeekDay: [false],\n    specificMonthWeek: [false],\n    MON: [true],\n    TUE: [true],\n    WED: [true],\n    THU: [true],\n    FRI: [true],\n    SAT: [true],\n    SUN: [true],\n    expression: ['0 0 0 0 0']\n  });\n\n  /*\n * ControlValueAccessor\n */\n  public onChange: (value) => void\n  public onTouched: () => void;\n\n\n  get isCronFlavorQuartz() {\n    return this.options.cronFlavor === 'quartz';\n  }\n\n  get isCronFlavorStandard() {\n    return this.options.cronFlavor === 'standard';\n  }\n\n  get yearDefaultChar() {\n    return this.options.cronFlavor === 'quartz' ? '*' : '';\n  }\n\n  get weekDayDefaultChar() {\n    return this.options.cronFlavor === 'quartz' ? '?' : '*';\n  }\n\n  get monthDayDefaultChar() {\n    return this.options.cronFlavor === 'quartz' ? '?' : '*';\n  }\n\n  constructor(private fb: FormBuilder) {\n  }\n\n  /* Update the cron output to that of the selected tab.\n   * The cron output value is updated whenever a form is updated. To make it change in response to tab selection, we simply reset\n   * the value of the form that goes into focus.\n   * We cannot rely on the index of the tab, as the hide options could hide tabs and\n   * then the index dynamically changes based on the hidden tab.*/\n  onTabChange(tabChangeEvent: MatTabChangeEvent) {\n    const currentTab = tabChangeEvent.tab;\n    let x: CronType;\n\n    switch (currentTab) {\n      case this.minutesTab:\n        x = 'minutely';\n        break;\n      case this.hourlyTab:\n        x = 'hourly';\n        break;\n      case this.dailyTab:\n        x = 'daily';\n        break;\n      case this.weeklyTab:\n        x = 'weekly';\n        break;\n      case this.monthlyTab:\n        x = 'monthly';\n        break;\n      case this.yearlyTab:\n        x = 'yearly';\n        break;\n      case this.advancedTab:\n        x = 'unknown';\n        break;\n      default:\n        throw (new Error('Invalid tab selected'));\n    }\n\n    this.allForm.controls.cronType.setValue(x);\n  }\n\n  public async ngOnInit() {\n    this.formSub =  this.allForm.valueChanges.pipe(debounceTime(50)).subscribe(value => {\n\n      this.markAsTouched();\n      const cron = this.computeCron();\n      // this.allForm.controls.expression.setValue(cron, {emitEvent: false});\n      this.onChange(cron);\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.formSub) {\n      this.formSub.unsubscribe();\n    }\n  }\n\n  private computeCron(): string {\n\n    let cron: string;\n    switch (this.allForm.value.cronType) {\n      case 'minutely':\n        cron = this.computeMinutesCron();\n        break;\n      case 'hourly':\n        cron = this.computeHourlyCron();\n        this.tabIndex = 1;\n        break;\n      case 'daily':\n        cron = this.computeDailyCron();\n        this.tabIndex = 2;\n        break;\n      case 'weekly':\n        cron = this.computeWeeklyCron();\n        this.tabIndex = 3;\n        break;\n      case 'monthly':\n        cron = this.computeMonthlyCron();\n        this.tabIndex = 4;\n        break;\n      case 'yearly':\n        cron = this.computeYearlyCron();\n        this.tabIndex = 5;\n        break;\n      case 'unknown':\n        cron = this.computeAdvancedExpression();\n        this.tabIndex = 6;\n        break;\n      default:\n        throw Error($localize`Unknown cron type ${this.allForm.value.cronType}`);\n    }\n    return cron;\n  }\n\n  private computeMinutesCron(): string {\n\n    const state = this.allForm.value;\n\n    return `${this.isCronFlavorQuartz ? state.seconds : ''} 0/${state.minutesPer} * 1/1 * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n  }\n\n  private computeHourlyCron(): string {\n\n    const state = this.allForm.value;\n\n    return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} 0/${state.hoursPer} 1/1 * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n  }\n\n  private computeDailyCron(): string {\n    if (this.allForm.value.weekdaysOnly) {\n      return this.computeEveryWeekdayCron();\n    }\n    return this.computeEveryDaysCron();\n  }\n\n  private computeEveryDaysCron(): string {\n\n    const state = this.allForm.value;\n\n    return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} 1/${state.daysPer} * ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n\n  }\n\n  private computeEveryWeekdayCron(): string {\n\n    const state = this.allForm.value;\n\n    return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} * MON-FRI ${this.yearDefaultChar}`.trim();\n  }\n\n\n  private computeWeeklyCron(): string {\n\n    const state = this.allForm.value;\n    const days = this.selectOptions.days\n      .reduce((acc, day) => state[day] ? acc.concat([day]) : acc, [])\n      .join(',') || '*';\n\n    return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} * ${days} ${this.yearDefaultChar}`.trim();\n  }\n\n  private computeMonthlyCron(): string {\n\n    const state = this.allForm.value;\n\n    if (state.specificWeekDay) {\n      return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} 1/${state.monthsInc} ${state.day}${state.monthsWeek} ${this.yearDefaultChar}`.trim();\n    }\n    return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${state.days} 1/${state.monthsInc} ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n  }\n\n  private computeYearlyCron(): string {\n    const state = this.allForm.value;\n\n    if (state.specificMonthWeek) {\n      return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${this.monthDayDefaultChar} ${state.months} ${state.day}${state.monthsWeek} ${this.yearDefaultChar}`.trim();\n    }\n    return `${this.isCronFlavorQuartz ? state.seconds : ''} ${state.minutes} ${this.hourToCron(state.hours, state.hoursType)} ${state.days} ${state.months} ${this.weekDayDefaultChar} ${this.yearDefaultChar}`.trim();\n  }\n\n  private computeAdvancedExpression(): string  {\n    return this.allForm.controls.expression.value;\n  }\n\n  public dayDisplay(day: string): string {\n    return Days[day];\n  }\n\n  public monthWeekDisplay(monthWeekNumber: string): string {\n    return MonthWeeks[monthWeekNumber];\n  }\n\n  public monthDisplay(month: string): string {\n    return Months[parseInt(month, 10)];\n  }\n\n  public monthDayDisplay(month: string | number): string {\n\n    if (typeof month === 'number') {\n      return `${month}${this.getOrdinalSuffix(month)}`\n    }\n\n    if (month === 'L') {\n      return $localize`Last Day`;\n    } else if (month === 'LW') {\n      return $localize`Last Weekday`;\n    } else if (month === '1W') {\n      return $localize`First Weekday`;\n    } else {\n      return `${month}${this.getOrdinalSuffix(month)}`;\n    }\n  }\n\n  private getAmPmHour(hour: string): string {\n\n    if (this.options.use24HourTime) {\n      return hour;\n    }\n    return ((parseInt(hour, 10) + 11) % 12 + 1).toString()\n  }\n\n  // Return the AM or PM component of a clocktime, or null if 24-hour format is used.\n  private getHourType(hour: string): string | null {\n    if (this.options.use24HourTime) {\n      return null;\n    }\n\n    if (parseInt(hour, 10) >= 12) {\n      return 'PM';\n    }\n    return 'AM';\n  }\n\n  private hourToCron(hour: string, hourType: string): string {\n    if (this.options.use24HourTime) {\n      return hour;\n    } else {\n      return hourType === 'AM' ? (hour === '12' ? '0' : hour) : (hour === '12' ? '12' :  (parseInt(hour, 10) + 12).toString());\n    }\n  }\n\n  private handleModelChange(cron: string) {\n\n    if (!this.cronIsValid(cron)) {\n      if (this.isCronFlavorQuartz) {\n        throw new Error($localize`Invalid cron expression, there must be 6 or 7 segments`);\n      }\n\n      if (this.isCronFlavorStandard) {\n        throw new Error($localize`Invalid cron expression, there must be 5 segments`);\n      }\n    }\n\n    // Store original cron expression here.\n    this.allForm.controls.expression.setValue(cron);\n\n    // Normalize cron so that second segment is included.\n    if (cron.split(' ').length === 5 && this.isCronFlavorStandard) {\n      cron = `0 ${cron} *`;\n    }\n\n    // Parse cron tokens\n    const t = cron.split(' ');\n\n    // Seconds\n    this.allForm.controls.seconds.setValue(t[0], {emitEvent: false})\n\n    // Minutes\n    let x = parseCronNumberToken(t[1]);\n    this.allForm.controls.minutesPer.setValue(x.inc, {emitEvent: false});\n    this.allForm.controls.minutes.setValue(x.val);\n\n    // Hours\n    x = parseCronNumberToken(t[2])\n    this.allForm.controls.hoursPer.setValue(x.inc);\n    this.allForm.controls.hours.setValue(x.val);\n    this.allForm.controls.hoursType.setValue(this.getHourType(this.allForm.value.hours), {emitEvent: false});\n\n    // Day of Month\n    x = parseCronNumberToken(t[3])\n    this.allForm.controls.days.setValue(x.val, {emitEvent: false});\n    this.allForm.controls.daysPer.setValue(x.inc, {emitEvent: false});\n\n    // Month\n    x = parseCronNumberToken(t[4])\n    this.allForm.controls.months.setValue(x.val, {emitEvent: false});\n    this.allForm.controls.monthsInc.setValue(x.inc, { emitEvent: false });\n\n    // Day of Week\n    this.allForm.controls.SUN.setValue(t[5].match(/(?<!#)((SUN)|0)/) !== null, {emitEvent: false});\n    this.allForm.controls.MON.setValue(t[5].match(/(?<!#)((MON)|1)/) !== null, {emitEvent: false});\n    this.allForm.controls.TUE.setValue(t[5].match(/(?<!#)((TUE)|2)/) !== null, {emitEvent: false});\n    this.allForm.controls.WED.setValue(t[5].match(/(?<!#)((WED)|3)/) !== null, {emitEvent: false});\n    this.allForm.controls.THU.setValue(t[5].match(/(?<!#)((THU)|4)/) !== null, {emitEvent: false});\n    this.allForm.controls.FRI.setValue(t[5].match(/(?<!#)((FRI)|5)/) !== null, {emitEvent: false});\n    this.allForm.controls.SAT.setValue(t[5].match(/(?<!#)((SAT)|6)/) !== null, {emitEvent: false});\n\n    // Weekdays\n    if ((t[5].match(/(?<!#)(MON-FRI)/))) {\n      this.allForm.controls.MON.setValue(true);\n      this.allForm.controls.TUE.setValue(true);\n      this.allForm.controls.WED.setValue(true);\n      this.allForm.controls.THU.setValue(true);\n      this.allForm.controls.FRI.setValue(true);\n    }\n\n    // Weekends\n    if ((t[5].match(/(?<!#)(SAT-SUN)/))) {\n      this.allForm.controls.SAT.setValue(true);\n      this.allForm.controls.SUN.setValue(true);\n    }\n\n\n    // Get value after # sign\n    const y = t[5].match(/#[0-9]*$/)\n    if (y) {\n      this.allForm.controls.monthsWeek.setValue(y[0], {emitEvent: false});\n    }\n\n    // Update the day control from selected weekdays.\n    // Note, only one day is supported here.\n    if (this.allForm.controls.SUN.value) {\n      this.allForm.controls.day.setValue('SUN', {emitEvent: false});\n    }\n    if (this.allForm.controls.MON.value) {\n      this.allForm.controls.day.setValue('MON', {emitEvent: false});\n    }\n    if (this.allForm.controls.TUE.value) {\n      this.allForm.controls.day.setValue('TUE', {emitEvent: false});\n    }\n    if (this.allForm.controls.WED.value) {\n      this.allForm.controls.day.setValue('WED', {emitEvent: false});\n    }\n    if (this.allForm.controls.THU.value) {\n      this.allForm.controls.day.setValue('THU', {emitEvent: false});\n    }\n    if (this.allForm.controls.FRI.value) {\n      this.allForm.controls.day.setValue('FRI', {emitEvent: false});\n    }\n    if (this.allForm.controls.SAT.value) {\n      this.allForm.controls.day.setValue('SAT', {emitEvent: false});\n    }\n\n    // Year\n    // Not supported\n\n    if (cron.match(minutesExp)) {\n      this.allForm.controls.cronType.setValue('minutely', {emitEvent: false});\n\n    } else if (cron.match(hourlyExp)) {\n      this.allForm.controls.cronType.setValue('hourly', {emitEvent: false});\n\n    } else if (cron.match(dailyExp)) {\n      this.allForm.controls.cronType.setValue('daily', {emitEvent: false});\n      this.allForm.controls.weekdaysOnly.setValue(false);\n\n    } else if (cron.match(dailyWeekdayExp)) {\n      this.allForm.controls.cronType.setValue('daily', {emitEvent: false});\n      this.allForm.controls.weekdaysOnly.setValue(true);\n\n    } else if (cron.match(weeklyExp)) {\n      this.allForm.controls.cronType.setValue('weekly', {emitEvent: false});\n\n    } else if (cron.match(monthlyExp)) {\n      this.allForm.controls.cronType.setValue('monthly', {emitEvent: false});\n      this.allForm.controls.specificWeekDay.setValue(false);\n\n    } else if (cron.match(monthlyWeekdayExp)) {\n      this.allForm.controls.cronType.setValue('monthly', {emitEvent: false});\n      this.allForm.controls.specificWeekDay.setValue(true);\n\n    } else if (cron.match(yearlyExp)) {\n      this.allForm.controls.cronType.setValue('yearly', {emitEvent: false});\n      this.allForm.controls.specificMonthWeek.setValue(false);\n\n    } else if (cron.match(yearlyMonthWeekExp)) {\n      this.allForm.controls.cronType.setValue('yearly', {emitEvent: false});\n      this.allForm.controls.specificMonthWeek.setValue(true);\n\n    } else {\n      this.allForm.controls.cronType.setValue('unknown', {emitEvent: false});\n    }\n    this.allForm.updateValueAndValidity( {onlySelf: true});\n  }\n\n  private cronIsValid(cron: string): boolean {\n    if (cron) {\n      const cronParts = cron.split(' ');\n      return (this.isCronFlavorQuartz && (cronParts.length === 6\n          || cronParts.length === 7)\n        || (this.isCronFlavorStandard && cronParts.length === 5));\n    }\n\n    return false;\n  }\n\n\n  private getOrdinalSuffix(v: string | number): string {\n\n    // Convert to string. There is also a faster LOG10 algorithm, but it requires the math library.\n    let value: string;\n    if (typeof v === 'number') {\n      value = v.toString(10);\n    } else {\n      value = v;\n    }\n\n    // th if secondToLastDigit is 1: ..10th, ..11th, ..19th,\n    if (value.length > 1 && value.charAt(value.length - 2) === '1') {\n        return 'th';\n    }\n\n    // Check last digit:  21st, 22nd, 23rd, 24th, 25t, etc.\n    switch (value.charAt(value.length - 1)) {\n      case '1':\n        return 'st';\n      case '2':\n        return 'nd';\n      case '3':\n        return 'rd';\n      default:\n        return 'th';\n    }\n  }\n\n  private getSelectOptions() {\n    return {\n      months: this.getRange(1, 12).map(String),\n      monthWeeks: ['#1', '#2', '#3', '#4', '#5', 'L'],\n      days: ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'],\n      minutes: this.getRange(0, 59).map(String),\n      fullMinutes: this.getRange(0, 59).map(String),\n      seconds: this.getRange(0, 59).map(String),\n      hours: this.getRange(1, 23).map(String),\n      monthDays: this.getRange(1, 31).map(String),\n      monthDaysWithLasts: ['1W', ...[...this.getRange(1, 31).map(String)], 'LW', 'L'],\n      monthDaysWithOutLasts: [...[...this.getRange(1, 31).map(String)]],\n      hourTypes: ['AM', 'PM']\n    };\n  }\n\n  private getRange(start: number, end: number): number[] {\n    const length = end - start + 1;\n    return Array.apply(null, Array(length)).map((_, i) => i + start);\n  }\n\n\n\n\n  writeValue(obj: string | null): void {\n    if (obj === null) {\n      return\n    }\n\n    this.handleModelChange(obj);\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  markAsTouched() {\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n}\n","  <mat-tab-group (selectedTabChange)=\"onTabChange($event)\" [(selectedIndex)]=\"tabIndex\">\n\n    <!-- Minute -->\n    <mat-tab [formGroup]=\"allForm\"  i18n-label label=\"Minutely\" *ngIf=\"!options.hideMinutesTab\" #minutesTab>\n      <div class=\"cron-editor-tab-content\" (click)=\"allForm.controls.cronType.setValue('minutely')\">\n\n        <div>\n          <span i18n>Every</span>\n          <mat-form-field>\n            <mat-label i18n>Minute(s)</mat-label>\n            <mat-select formControlName=\"minutesPer\">\n              <mat-option *ngFor=\"let minute of selectOptions.minutes\" [value]=\"minute\">{{minute}}</mat-option>\n            </mat-select>\n          </mat-form-field>\n        </div>\n\n        <div *ngIf=\"isCronFlavorQuartz\">\n          <span i18n>At time</span>\n          <cron-time-picker\n            [formGroup]=\"allForm\"\n            [hideHours] = true\n            [hideMinutes] = true\n            [use24HourTime]=\"options.use24HourTime\"\n            [hideSeconds]=\"options.hideSeconds || !isCronFlavorQuartz\">\n          </cron-time-picker>\n        </div>\n      </div>\n    </mat-tab>\n\n    <!-- Hourly -->\n    <mat-tab  i18n-label label=\"Hourly\" *ngIf=\"!options.hideHourlyTab\" #hourlyTab>\n      <div class=\"cron-editor-tab-content\" (click)=\"allForm.controls.cronType.setValue('hourly')\">\n        <div>\n          <span i18n class=\"cron-form-label\">Every </span>\n          <mat-form-field [formGroup]=\"allForm\">\n            <mat-label i18n>Hour(s)</mat-label>\n            <mat-select formControlName=\"hoursPer\">\n              <mat-option *ngFor=\"let hour of selectOptions.hours\" [value]=\"hour\">{{hour}}</mat-option>\n            </mat-select>\n          </mat-form-field>\n        </div>\n        <div>\n          <span i18n>At time </span>\n          <cron-time-picker\n              [formGroup]=\"allForm\"\n              [hideHours] = true\n              [use24HourTime]=\"options.use24HourTime\"\n              [hideSeconds]=\"options.hideSeconds || !isCronFlavorQuartz\">\n          </cron-time-picker>\n        </div>\n      </div>\n    </mat-tab>\n\n    <!-- Daily-->\n    <mat-tab i18n-label label=\"Daily\" *ngIf=\"!options.hideDailyTab\" #dailyTab>\n      <div class=\"cron-editor-tab-content\" (click)=\"allForm.controls.cronType.setValue('daily')\">\n\n        <div [formGroup]=\"allForm\">\n          <span i18n>Every </span>\n            <mat-radio-group class=\"cron-editor-radio-group\" formControlName=\"weekdaysOnly\" >\n              <mat-radio-button name=\"subTab\" class=\"cron-editor-radio-button\" [value]=\"false\"  [checked]=\"true\" >\n                <mat-form-field>\n                  <mat-label i18n>Day(s)</mat-label>\n                  <mat-select formControlName=\"daysPer\">\n                    <mat-option *ngFor=\"let monthDay of selectOptions.monthDays\" [value]=\"monthDay\">\n                      {{monthDay}}\n                    </mat-option>\n                  </mat-select>\n                </mat-form-field>\n              </mat-radio-button>\n              <mat-radio-button name=\"subTab\" class=\"cron-editor-radio-button\" [value]=\"true\">\n                <span i18n>Week Day (MON-FRI) </span>\n              </mat-radio-button>\n            </mat-radio-group>\n        </div>\n\n        <div>\n          <span i18n>At time </span>\n          <cron-time-picker\n            [formGroup]=\"allForm\"\n            [use24HourTime]=\"options.use24HourTime\"\n            [hideSeconds]=\"options.hideSeconds || !isCronFlavorQuartz\">\n          </cron-time-picker>\n        </div>\n      </div>\n\n    </mat-tab>\n\n    <!-- Weekly-->\n    <mat-tab i18n-label label=\"Weekly\" *ngIf=\"!options.hideWeeklyTab\" #weeklyTab >\n      <div class=\"cron-editor-tab-content\" (click)=\"allForm.controls.cronType.setValue('weekly')\">\n\n        <div>\n          <span i18n>Every:</span>\n\n          <span [formGroup]=\"allForm\">\n            <mat-checkbox formControlName=\"MON\" i18n>Monday</mat-checkbox>\n            <mat-checkbox formControlName=\"TUE\" i18n>Tuesday</mat-checkbox>\n            <mat-checkbox formControlName=\"WED\" i18n>Wednesday</mat-checkbox>\n            <mat-checkbox formControlName=\"THU\" i18n>Thursday</mat-checkbox>\n            <mat-checkbox formControlName=\"FRI\" i18n>Friday</mat-checkbox>\n            <mat-checkbox formControlName=\"SAT\" i18n>Saturday</mat-checkbox>\n            <mat-checkbox formControlName=\"SUN\" i18n>Sunday</mat-checkbox>\n          </span>\n        </div>\n\n        <div>\n          <span i18n class=\"cron-form-label\"> At </span>\n          <cron-time-picker [formGroup]=\"allForm\"\n                            [use24HourTime]=\"options.use24HourTime\"\n                            [hideSeconds]=\"options.hideSeconds|| !isCronFlavorQuartz\">\n          </cron-time-picker>\n        </div>\n      </div>\n    </mat-tab>\n\n    <!-- Monthly-->\n    <mat-tab i18n-label label=\"Monthly\" *ngIf=\"!options.hideMonthlyTab\" #monthlyTab>\n      <div class=\"cron-editor-tab-content\" [formGroup]=\"allForm\" (click)=\"allForm.controls.cronType.setValue('monthly')\">\n\n        <mat-radio-group formControlName=\"specificWeekDay\">\n          <mat-radio-button name=\"monthly-radio\" class=\"cron-editor-pad-line\" [value]=\"false\">\n            <!-- Spesific day -->\n\n              <span i18n>On the</span>\n\n                <mat-form-field>\n                  <mat-label i18n>Day</mat-label>\n                  <mat-select formControlName=\"days\">\n                    <mat-option *ngFor=\"let monthDay of selectOptions.monthDays\" [value]=\"monthDay\">\n                      {{monthDayDisplay(monthDay)}}\n                    </mat-option>\n                  </mat-select>\n                </mat-form-field>\n\n              <span i18n>of every</span>\n\n                <mat-form-field>\n                  <mat-label i18n>Month</mat-label>\n                  <mat-select formControlName=\"monthsInc\" [ngClass]=\"options.formSelectClass\">\n                    <mat-option *ngFor=\"let month of selectOptions.months\" [value]=\"month\">\n                      {{month}}\n                    </mat-option>\n                  </mat-select>\n                </mat-form-field>\n\n          </mat-radio-button>\n\n          <mat-radio-button name=\"monthly-radio\" class=\"cron-editor-pad-line\"  [value]=\"true\" >\n\n            <!-- Spesific Week day -->\n            <span i18n>On the</span>\n\n              <mat-form-field>\n                <mat-label i18n>Week</mat-label>\n                <mat-select class=\"day-order-in-month\" formControlName=\"monthsWeek\">\n                  <mat-option *ngFor=\"let monthWeek of selectOptions.monthWeeks\" [value]=\"monthWeek\">\n                    {{monthWeekDisplay(monthWeek)}}\n                  </mat-option>\n                </mat-select>\n              </mat-form-field>\n\n              <mat-form-field>\n                <mat-label i18n>Day</mat-label>\n                <mat-select class=\"week-days\" formControlName=\"day\">\n                  <mat-option *ngFor=\"let day of selectOptions.days\" [value]=\"day\">\n                    {{dayDisplay(day)}}\n                  </mat-option>\n                </mat-select>\n              </mat-form-field>\n\n              <span i18n>of every</span>\n\n              <mat-form-field>\n                <mat-label i18n>Month</mat-label>\n                <mat-select class=\"months-small\" formControlName=\"monthsInc\">\n                  <mat-option *ngFor=\"let month of selectOptions.months\" [value]=\"month\">\n                    {{month}}\n                  </mat-option>\n                </mat-select>\n              </mat-form-field>\n          </mat-radio-button>\n        </mat-radio-group>\n\n        <div class=\"cron-editor-pad-line\" >\n          <span i18n>At time</span>\n          <cron-time-picker [formGroup]=\"allForm\"\n                            [use24HourTime]=\"options.use24HourTime\"\n                            [hideSeconds]=\"options.hideSeconds || !isCronFlavorQuartz\">\n          </cron-time-picker>\n        </div>\n      </div>\n    </mat-tab>\n\n    <!-- Yearly-->\n    <mat-tab i18n-label  label=\"Yearly\" *ngIf=\"!options.hideYearlyTab\" #yearlyTab>\n      <div class=\"cron-editor-tab-content\" [formGroup]=\"allForm\">\n        <mat-radio-group class=\"cron-editor-radio-group\" formControlName=\"specificMonthWeek\">\n          <mat-radio-button name=\"yearly-radio\" class=\"cron-editor-pad-line\" [value]=\"false\">\n\n            <span i18n>On the</span>\n\n            <mat-form-field>\n              <mat-label i18n>Day</mat-label>\n              <mat-select formControlName=\"days\" >\n                <mat-option *ngFor=\"let monthDay of selectOptions.monthDays\" [value]=\"monthDay\">\n                  {{monthDayDisplay(monthDay)}}\n                </mat-option>\n              </mat-select>\n            </mat-form-field>\n\n            <span i18n=\"day of month\">of</span>\n\n            <mat-form-field>\n              <mat-label i18n>Month</mat-label>\n              <mat-select formControlName=\"months\">\n                <mat-option *ngFor=\"let month of selectOptions.months\" [value]=\"month\">\n                  {{monthDisplay(month)}}\n                </mat-option>\n              </mat-select>\n            </mat-form-field>\n\n          </mat-radio-button>\n\n          <mat-radio-button name=\"yearly-radio\" class=\"cron-editor-pad-line\" [value]=\"true\">\n\n            <span i18n>On the</span>\n\n            <mat-form-field >\n              <mat-label i18n>Week</mat-label>\n              <mat-select formControlName=\"monthsWeek\" >\n                <mat-option *ngFor=\"let monthWeek of selectOptions.monthWeeks\" [value]=\"monthWeek\">\n                  {{monthWeekDisplay(monthWeek)}}\n                </mat-option>\n              </mat-select>\n            </mat-form-field>\n\n            <mat-form-field>\n              <mat-label i18n>Day</mat-label>\n              <mat-select formControlName=\"day\" >\n                <mat-option *ngFor=\"let day of selectOptions.days\" [value]=\"day\">\n                  {{dayDisplay(day)}}\n                </mat-option>\n              </mat-select>\n            </mat-form-field>\n\n            <span i18n>of</span>\n\n            <mat-form-field>\n              <mat-label i18n>Month</mat-label>\n              <mat-select formControlName=\"months\">\n                <mat-option *ngFor=\"let month of selectOptions.months\" [value]=\"month\">\n                  {{monthDisplay(month)}}\n                </mat-option>\n              </mat-select>\n            </mat-form-field>\n\n          </mat-radio-button>\n        </mat-radio-group>\n\n        <div class=\"cron-editor-pad-line\">\n\n          <span i18n>At time</span>\n\n          <cron-time-picker [disabled]=\"disabled\"\n                            [formGroup]=\"allForm\"\n                            [use24HourTime]=\"options.use24HourTime\"\n                            [hideSeconds]=\"options.hideSeconds || !isCronFlavorQuartz\">\n          </cron-time-picker>\n        </div>\n\n      </div>\n    </mat-tab>\n\n    <!-- Advanced-->\n    <mat-tab i18n-label label=\"Advanced\" *ngIf=\"!options.hideAdvancedTab\" #advancedTab>\n      <div class=\"cron-editor-tab-content\" [formGroup]=\"allForm\">\n        <mat-form-field>\n          <mat-label i18n>Expression</mat-label>\n          <input matInput type=\"text\" class=\"advanced-cron-editor-input\" formControlName=\"expression\">\n        </mat-form-field>\n      </div>\n    </mat-tab>\n  </mat-tab-group>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TimePickerComponent } from './cron-time-picker.component';\nimport { CronGenComponent } from './cron-editor.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        FormsModule,\n        ReactiveFormsModule,\n        MatTabsModule,\n        MatListModule,\n        MatSelectModule,\n        MatInputModule,\n        MatRadioModule,\n        MatCheckboxModule\n    ],\n  exports: [TimePickerComponent, CronGenComponent],\n  declarations: [TimePickerComponent, CronGenComponent]\n})\nexport class CronEditorModule { }\n","/*\n * Public API Surface\n */\n\nexport * from './src/cron-editor.module';\nexport * from './src/CronOptions';\nexport * from './src/enums';\nexport * from './src/cron-editor.component';\nexport * from './src/cron-time-picker.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["range","i3","i4","i5","i6","i10.TimePickerComponent"],"mappings":"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"}