{"version":3,"file":"sebgroup-green-angular-src-v-angular-datepicker.mjs","sources":["../../../../libs/angular/src/v-angular/datepicker/datepicker.utils.ts","../../../../libs/angular/src/v-angular/datepicker/models/dates.ts","../../../../libs/angular/src/v-angular/datepicker/date-control-value-accessor/date-control-value-accessor.component.ts","../../../../libs/angular/src/v-angular/datepicker/directives/calendar-date.directive.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/is-disabled.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/date-thook.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/pipes/matches.pipe.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar/calendar.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar/calendar.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.models.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar-control/calendar-control.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/calendar-control/calendar-control.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.globals.ts","../../../../libs/angular/src/v-angular/datepicker/components/datepicker/datepicker.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/datepicker/datepicker.component.html","../../../../libs/angular/src/v-angular/datepicker/components/date-input/date-input.component.ts","../../../../libs/angular/src/v-angular/datepicker/components/date-input/date-input.component.html","../../../../libs/angular/src/v-angular/datepicker/datepicker.module.ts","../../../../libs/angular/src/v-angular/datepicker/index.ts","../../../../libs/angular/src/v-angular/datepicker/sebgroup-green-angular-src-v-angular-datepicker.ts"],"sourcesContent":["import { WeekDay } from '@angular/common'\n\nconst weekdays: WeekDay[] = [\n  WeekDay.Monday,\n  WeekDay.Tuesday,\n  WeekDay.Wednesday,\n  WeekDay.Thursday,\n  WeekDay.Friday,\n  WeekDay.Saturday,\n  WeekDay.Sunday,\n]\n\nexport const sortWeekDays = (firstDayOfWeek: WeekDay): WeekDay[] => {\n  const firstDayIndex = weekdays.indexOf(firstDayOfWeek)\n  const weekStart = weekdays.slice(firstDayIndex)\n  const weekEnd = weekdays.slice(0, firstDayIndex)\n  return weekStart.concat(weekEnd)\n}\n\n/**\n * Safely converts a value to a Date object, handling timezone issues.\n * If the value is already a Date, returns it as-is.\n * If it's a string in ISO format (YYYY-MM-DD), parses it in local timezone.\n * Otherwise, uses standard Date constructor.\n */\nexport const toLocalDate = (value: Date | string): Date => {\n  // If already a Date object, use it directly to avoid timezone issues\n  if (value instanceof Date) {\n    return value\n  }\n  \n  // If string is in ISO format (YYYY-MM-DD), parse in local timezone\n  const dateMatch = String(value).match(/^(\\d{4})-(\\d{2})-(\\d{2})/)\n  if (dateMatch) {\n    const [, year, month, day] = dateMatch\n    return new Date(parseInt(year), parseInt(month) - 1, parseInt(day))\n  }\n  \n  // Otherwise use standard Date constructor\n  return new Date(value)\n}\n\n/** Sets labels and sort weekday arrays based off of first day of week. */\nexport const getSortedWeekDays = (\n  firstDayOfWeek: WeekDay,\n  startDate?: Date,\n): Date[] => {\n  if (startDate === undefined) startDate = new Date()\n\n  // sort weekdays according to firstDayOfWeek\n  const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n  // get the date object for the first day of week\n  const startDayIndex = sortedWeekdays.indexOf(startDate.getDay())\n  const firstOfWeek = new Date(startDate)\n  firstOfWeek.setDate(startDate.getDate() - startDayIndex)\n\n  // map each day in array to a date object\n  return sortedWeekdays.map((_: WeekDay, offset: number) => {\n    // set appropriate date\n    const weekdayDate = new Date(firstOfWeek)\n    weekdayDate.setDate(weekdayDate.getDate() + offset)\n\n    // and return value\n    return weekdayDate\n  })\n}\n\n/** Generate a matrix of dates used to visualize a calendar month. */\nexport const generateDateMatrix = (\n  month: number,\n  year: number,\n  minWeeks = 5,\n  firstDayOfWeek: WeekDay,\n): Date[][] => {\n  // generate a new matrix with 5 or 6 rows (depending on number of days in that month)\n  const matrix: Date[][] = new Array<Date[]>(minWeeks)\n  matrix.fill([])\n\n  const date = new Date(year, month, 1)\n  const firstDate = firstCalendarDate(date, firstDayOfWeek)\n\n  // for each week in that month\n  const dateMatrix = matrix.map((_: Date[], weekOffset: number) => {\n    const offset = weekOffset * 7\n    // update the date with the offset for that week\n    const firstOfWeek = new Date(firstDate)\n    firstOfWeek.setDate(firstDate.getDate() + offset)\n    return getSortedWeekDays(firstDayOfWeek, firstOfWeek)\n  })\n\n  // check if another row needs to be added (if last dates of month are missing)\n  const lastAdded = dateMatrix.slice(-1)[0].slice(-1)[0]\n  const lastOfMonth = new Date(lastAdded)\n  lastOfMonth.setMonth(month + 1)\n  lastOfMonth.setDate(0)\n\n  if (isBefore(lastAdded, lastOfMonth)) {\n    // add another week row\n    const firstOfWeek = new Date(lastAdded)\n    firstOfWeek.setDate(lastAdded.getDate() + 1)\n    dateMatrix.push(getSortedWeekDays(firstDayOfWeek, firstOfWeek))\n  }\n  // return final datematrix\n  return dateMatrix\n}\n\n/** Returns the first date used in the calendars first button. */\nexport const firstCalendarDate = (\n  date: Date,\n  firstDayOfWeek: WeekDay,\n): Date => {\n  // sort weekdays according to firstDayOfWeek\n  const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n  // set date to the first of month\n  const firstOfMonth = new Date(date)\n  firstOfMonth.setDate(1)\n\n  // get the offset\n  const offset = sortedWeekdays.indexOf(firstOfMonth.getDay())\n  const firstOfWeek = new Date(firstOfMonth)\n  // use offset to set date\n  firstOfWeek.setDate(1 - offset)\n  return firstOfWeek\n}\n\nexport const getDayOffset = (\n  from: WeekDay,\n  to: WeekDay,\n  firstDayOfWeek: WeekDay,\n  direction?: 'forward' | 'back',\n): number => {\n  const sortedWeekdays: WeekDay[] = sortWeekDays(firstDayOfWeek)\n\n  const fromIndex = sortedWeekdays.indexOf(from)\n  const toIndex = sortedWeekdays.indexOf(to)\n\n  const offset = toIndex - fromIndex\n\n  if (direction === 'forward' && offset < 0) return offset + 6\n  if (direction === 'back' && offset > 0) return offset - 6\n  return offset\n}\n\n/** Returns an array of Dates for each of month. */\nexport const getMonthArray = (): Date[] => {\n  const firstDayOfYear = new Date()\n  firstDayOfYear.setMonth(0)\n  firstDayOfYear.setDate(1)\n\n  // create a new array of length 12,\n  // and fill it with date objects of 1:st of january\n  const monthArray: Date[] = new Array(12).fill(firstDayOfYear)\n\n  // map through the array,\n  // and create a new instance of the date,\n  // changing the month based on index (0 - 11)\n  return monthArray.map((d: Date, index: number) => {\n    const date = new Date(d)\n    date.setMonth(index)\n    return date\n  })\n}\n\n/** Returns an array of Dates for the current year and the next. */\nexport const getYearArray = (): Date[] => {\n  const currentYear = new Date()\n  currentYear.setMonth(0)\n  currentYear.setDate(1)\n  const nextYear = new Date(currentYear)\n  nextYear.setFullYear(currentYear.getFullYear() + 1)\n  return [currentYear, nextYear]\n}\n\n/** Returns true if the two dates have the same year, month and date values. */\nexport const match = (a: Date | undefined, b: Date | undefined): boolean => {\n  if (!a || !b) return false\n  if (a.getDate() !== b.getDate()) return false\n  if (a.getMonth() !== b.getMonth()) return false\n  if (a.getFullYear() !== b.getFullYear()) return false\n  return true\n}\n\nexport const afterClosingHours = (closingHours: Date | undefined): boolean => {\n  if (!closingHours) return false\n  return Date.now() >= closingHours.getTime()\n}\n\n/**\n * Checks if a date is before control date, regardless of time.\n *\n * @param date - comparison date\n * @param controlDate - date to compare against\n * @returns - true if the comparison date is before the control date\n */\nexport const isBefore = (date: Date, controlDate: Date): boolean => {\n  // if year values are dissimilar\n  if (date.getFullYear() !== controlDate.getFullYear()) {\n    return date.getFullYear() < controlDate.getFullYear()\n  }\n  // if month values are dissimilar\n  if (date.getMonth() !== controlDate.getMonth()) {\n    return date.getMonth() < controlDate.getMonth()\n  }\n  // if year and month are equal, check the date\n  return date.getDate() < controlDate.getDate()\n}\n\n/**\n * Checks if a date is after control date, regardless of time.\n *\n * @param date - comparison date\n * @param controlDate - date to compare against\n * @returns - true if the comparison date is before the control date\n */\nexport const isAfter = (date: Date, controlDate: Date): boolean => {\n  // if year values are dissimilar\n  if (date.getFullYear() !== controlDate.getFullYear()) {\n    return date.getFullYear() > controlDate.getFullYear()\n  }\n  // if month values are dissimilar\n  if (date.getMonth() !== controlDate.getMonth()) {\n    return date.getMonth() > controlDate.getMonth()\n  }\n  // if year and month are equal, check the date\n  return date.getDate() > controlDate.getDate()\n}\n\n/**\n * Checks if a value can be used to initiate a new Date object.\n *\n * @param value any value\n * @returns - true if value can be coersed to a Date.\n */\nexport const isValid = (value: any): boolean => {\n  // if value is type of string and can be parsed to a Date\n  const date =\n    value && typeof value === 'string' && !isNaN(Date.parse(value))\n      ? new Date(value)\n      : null\n\n  switch (true) {\n    // if date or value is a valid date object - return valid\n    case typeof value?.getMonth === 'function':\n    case typeof date?.getMonth === 'function':\n      return true\n    // if date or value is not a valid date object - return invalid\n    case value == null:\n    case date?.toString() === 'Invalid Date':\n      return false\n    default:\n      return false\n  }\n}\n","import {\n  createMask,\n  InputmaskOptions,\n} from '@sebgroup/green-angular/src/v-angular/input-mask'\n\n/**\n * Helper function to generate InputmaskOptions by requested locale.\n * @param locale - requested locale. If not given, it'll use the browsers locale\n * @returns InputmaskOptions with date settings\n */\nexport const getLocaleDateMask = (\n  dateCharacters?: DateCharacters,\n  locale?: string,\n): InputmaskOptions<Date> => {\n  // If no locale has been passed, use browser language\n  if (!locale) locale = navigator.language\n\n  const format = getLocaleDateString(locale).toLowerCase()\n\n  return getFormatDateMask(format, dateCharacters)\n}\n\nexport const getLocaleDateString = (locale?: string) =>\n  locale && dateFormats[locale] ? dateFormats[locale] : 'yyyy-MM-dd'\nconst dateFormats: Record<string, string> = {\n  'af-ZA': 'yyyy/MM/dd',\n  'am-ET': 'dd/MM/yyyy',\n  'ar-AE': 'dd/MM/yyyy',\n  'ar-BH': 'dd/MM/yyyy',\n  'ar-DZ': 'dd-MM-yyyy',\n  'ar-EG': 'dd/MM/yyyy',\n  'ar-IQ': 'dd/MM/yyyy',\n  'ar-JO': 'dd/MM/yyyy',\n  'ar-KW': 'dd/MM/yyyy',\n  'ar-LB': 'dd/MM/yyyy',\n  'ar-LY': 'dd/MM/yyyy',\n  'ar-MA': 'dd-MM-yyyy',\n  'ar-OM': 'dd/MM/yyyy',\n  'ar-QA': 'dd/MM/yyyy',\n  'ar-SA': 'dd/MM/yyyy',\n  'ar-SY': 'dd/MM/yyyy',\n  'ar-TN': 'dd-MM-yyyy',\n  'ar-YE': 'dd/MM/yyyy',\n  'arn-CL': 'dd-MM-yyyy',\n  'as-IN': 'dd-MM-yyyy',\n  'az-Cyrl-AZ': 'dd.MM.yyyy',\n  'az-Latn-AZ': 'dd.MM.yyyy',\n  'ba-RU': 'dd.MM.yyyy',\n  'be-BY': 'dd.MM.yyyy',\n  'bg-BG': 'dd.MM.yyyy',\n  'bn-BD': 'dd-MM-yyyy',\n  'bn-IN': 'dd-MM-yyyy',\n  'bo-CN': 'yyyy/MM/dd',\n  'br-FR': 'dd/MM/yyyy',\n  'bs-Cyrl-BA': 'dd.MM.yyyy',\n  'bs-Latn-BA': 'dd.MM.yyyy',\n  'ca-ES': 'dd/MM/yyyy',\n  'co-FR': 'dd/MM/yyyy',\n  'cs-CZ': 'dd.MM.yyyy',\n  'cy-GB': 'dd/MM/yyyy',\n  'da-DK': 'dd.MM.yyyy',\n  'de-AT': 'dd.MM.yyyy',\n  'de-CH': 'dd.MM.yyyy',\n  'de-DE': 'dd.MM.yyyy',\n  'de-LI': 'dd.MM.yyyy',\n  'de-LU': 'dd.MM.yyyy',\n  'dsb-DE': 'dd.MM.yyyy',\n  'dv-MV': 'dd/MM/yyyy',\n  'el-GR': 'dd/MM/yyyy',\n  en: 'MM/dd/yyyy',\n  'en-029': 'MM/dd/yyyy',\n  'en-AU': 'dd/MM/yyyy',\n  'en-BZ': 'dd/MM/yyyy',\n  'en-CA': 'dd/MM/yyyy',\n  'en-GB': 'dd/MM/yyyy',\n  'en-IE': 'dd/MM/yyyy',\n  'en-IN': 'dd-MM-yyyy',\n  'en-JM': 'dd/MM/yyyy',\n  'en-MY': 'dd/MM/yyyy',\n  'en-NZ': 'dd/MM/yyyy',\n  'en-PH': 'MM/dd/yyyy',\n  'en-SG': 'dd/MM/yyyy',\n  'en-TT': 'dd/MM/yyyy',\n  'en-US': 'MM/dd/yyyy',\n  'en-ZA': 'yyyy/MM/dd',\n  'en-ZW': 'MM/dd/yyyy',\n  'es-AR': 'dd/MM/yyyy',\n  'es-BO': 'dd/MM/yyyy',\n  'es-CL': 'dd-MM-yyyy',\n  'es-CO': 'dd/MM/yyyy',\n  'es-CR': 'dd/MM/yyyy',\n  'es-DO': 'dd/MM/yyyy',\n  'es-EC': 'dd/MM/yyyy',\n  'es-ES': 'dd/MM/yyyy',\n  'es-GT': 'dd/MM/yyyy',\n  'es-HN': 'dd/MM/yyyy',\n  'es-MX': 'dd/MM/yyyy',\n  'es-NI': 'dd/MM/yyyy',\n  'es-PA': 'MM/dd/yyyy',\n  'es-PE': 'dd/MM/yyyy',\n  'es-PR': 'dd/MM/yyyy',\n  'es-PY': 'dd/MM/yyyy',\n  'es-SV': 'dd/MM/yyyy',\n  'es-US': 'MM/dd/yyyy',\n  'es-UY': 'dd/MM/yyyy',\n  'es-VE': 'dd/MM/yyyy',\n  'et-EE': 'dd.MM.yyyy',\n  'eu-ES': 'yyyy/MM/dd',\n  'fa-IR': 'MM/dd/yyyy',\n  'fi-FI': 'dd.MM.yyyy',\n  'fil-PH': 'MM/dd/yyyy',\n  'fo-FO': 'dd-MM-yyyy',\n  'fr-BE': 'dd/MM/yyyy',\n  'fr-CA': 'yyyy-MM-dd',\n  'fr-CH': 'dd.MM.yyyy',\n  'fr-FR': 'dd/MM/yyyy',\n  'fr-LU': 'dd/MM/yyyy',\n  'fr-MC': 'dd/MM/yyyy',\n  'fy-NL': 'dd-MM-yyyy',\n  'ga-IE': 'dd/MM/yyyy',\n  'gd-GB': 'dd/MM/yyyy',\n  'gl-ES': 'dd/MM/yyyy',\n  'gsw-FR': 'dd/MM/yyyy',\n  'gu-IN': 'dd-MM-yyyy',\n  'ha-Latn-NG': 'dd/MM/yyyy',\n  'he-IL': 'dd/MM/yyyy',\n  'hi-IN': 'dd-MM-yyyy',\n  'hr-BA': 'dd.MM.yyyy.',\n  'hr-HR': 'dd.MM.yyyy',\n  'hsb-DE': 'dd.MM.yyyy',\n  'hu-HU': 'yyyy.MM.dd.',\n  'hy-AM': 'dd.MM.yyyy',\n  'id-ID': 'dd/MM/yyyy',\n  'ig-NG': 'dd/MM/yyyy',\n  'ii-CN': 'yyyy/MM/dd',\n  'is-IS': 'dd.MM.yyyy',\n  'it-CH': 'dd.MM.yyyy',\n  'it-IT': 'dd/MM/yyyy',\n  'iu-Cans-CA': 'dd/MM/yyyy',\n  'iu-Latn-CA': 'dd/MM/yyyy',\n  'ja-JP': 'yyyy/MM/dd',\n  'ka-GE': 'dd.MM.yyyy',\n  'kk-KZ': 'dd.MM.yyyy',\n  'kl-GL': 'dd-MM-yyyy',\n  'km-KH': 'yyyy-MM-dd',\n  'kn-IN': 'dd-MM-yyyy',\n  'ko-KR': 'yyyy.MM.dd',\n  'kok-IN': 'dd-MM-yyyy',\n  'ky-KG': 'dd.MM.yyyy',\n  'lb-LU': 'dd/MM/yyyy',\n  'lo-LA': 'dd/MM/yyyy',\n  'lt-LT': 'yyyy.MM.dd',\n  'lv-LV': 'yyyy.MM.dd.',\n  'mi-NZ': 'dd/MM/yyyy',\n  'mk-MK': 'dd.MM.yyyy',\n  'ml-IN': 'dd-MM-yyyy',\n  'mn-MN': 'yyyy.MM.dd',\n  'mn-Mong-CN': 'yyyy/MM/dd',\n  'moh-CA': 'MM/dd/yyyy',\n  'mr-IN': 'dd-MM-yyyy',\n  'ms-BN': 'dd/MM/yyyy',\n  'ms-MY': 'dd/MM/yyyy',\n  'mt-MT': 'dd/MM/yyyy',\n  'nb-NO': 'dd.MM.yyyy',\n  'ne-NP': 'MM/dd/yyyy',\n  'nl-BE': 'dd/MM/yyyy',\n  'nl-NL': 'dd-MM-yyyy',\n  'nn-NO': 'dd.MM.yyyy',\n  'nso-ZA': 'yyyy/MM/dd',\n  'oc-FR': 'dd/MM/yyyy',\n  'or-IN': 'dd-MM-yyyy',\n  'pa-IN': 'dd-MM-yyyy',\n  'pl-PL': 'dd.MM.yyyy',\n  'prs-AF': 'dd/MM/yyyy',\n  'ps-AF': 'dd/MM/yyyy',\n  'pt-BR': 'dd/MM/yyyy',\n  'pt-PT': 'dd-MM-yyyy',\n  'qut-GT': 'dd/MM/yyyy',\n  'quz-BO': 'dd/MM/yyyy',\n  'quz-EC': 'dd/MM/yyyy',\n  'quz-PE': 'dd/MM/yyyy',\n  'rm-CH': 'dd/MM/yyyy',\n  'ro-RO': 'dd.MM.yyyy',\n  'ru-RU': 'dd.MM.yyyy',\n  'rw-RW': 'MM/dd/yyyy',\n  'sa-IN': 'dd-MM-yyyy',\n  'sah-RU': 'MM.dd.yyyy',\n  se: 'yyyy-MM-dd',\n  'se-FI': 'dd.MM.yyyy',\n  'se-NO': 'dd.MM.yyyy',\n  'se-SE': 'yyyy-MM-dd',\n  'si-LK': 'yyyy-MM-dd',\n  'sk-SK': 'dd.MM.yyyy',\n  'sl-SI': 'dd.MM.yyyy',\n  'sma-NO': 'dd.MM.yyyy',\n  'sma-SE': 'yyyy-MM-dd',\n  'smj-NO': 'dd.MM.yyyy',\n  'smj-SE': 'yyyy-MM-dd',\n  'smn-FI': 'dd.MM.yyyy',\n  'sms-FI': 'dd.MM.yyyy',\n  'sq-AL': 'yyyy-MM-dd',\n  'sr-Cyrl-BA': 'dd.MM.yyyy',\n  'sr-Cyrl-CS': 'dd.MM.yyyy',\n  'sr-Cyrl-ME': 'dd.MM.yyyy',\n  'sr-Cyrl-RS': 'dd.MM.yyyy',\n  'sr-Latn-BA': 'dd.MM.yyyy',\n  'sr-Latn-CS': 'dd.MM.yyyy',\n  'sr-Latn-ME': 'dd.MM.yyyy',\n  'sr-Latn-RS': 'dd.MM.yyyy',\n  sv: 'yyyy-MM-dd',\n  'sv-FI': 'dd.MM.yyyy',\n  'sv-SE': 'yyyy-MM-dd',\n  'sw-KE': 'MM/dd/yyyy',\n  'syr-SY': 'dd/MM/yyyy',\n  'ta-IN': 'dd-MM-yyyy',\n  'te-IN': 'dd-MM-yyyy',\n  'tg-Cyrl-TJ': 'dd.MM.yyyy',\n  'th-TH': 'dd/MM/yyyy',\n  'tk-TM': 'dd.MM.yyyy',\n  'tn-ZA': 'yyyy/MM/dd',\n  'tr-TR': 'dd.MM.yyyy',\n  'tt-RU': 'dd.MM.yyyy',\n  'tzm-Latn-DZ': 'dd-MM-yyyy',\n  'ug-CN': 'yyyy-MM-dd',\n  'uk-UA': 'dd.MM.yyyy',\n  'ur-PK': 'dd/MM/yyyy',\n  'uz-Cyrl-UZ': 'dd.MM.yyyy',\n  'uz-Latn-UZ': 'dd/MM yyyy',\n  'vi-VN': 'dd/MM/yyyy',\n  'wo-SN': 'dd/MM/yyyy',\n  'xh-ZA': 'yyyy/MM/dd',\n  'yo-NG': 'dd/MM/yyyy',\n  'zh-CN': 'yyyy/MM/dd',\n  'zh-HK': 'dd/MM/yyyy',\n  'zh-MO': 'dd/MM/yyyy',\n  'zh-SG': 'dd/MM/yyyy',\n  'zh-TW': 'yyyy/MM/dd',\n  'zu-ZA': 'yyyy/MM/dd',\n}\nexport const getFormatDateMask = (\n  format: string,\n  dateCharacters?: DateCharacters,\n) => {\n  const separators = [' ', '.', '-', '/']\n  const separator =\n    separators.find((operator) => format.indexOf(operator) > -1) ?? '-'\n  const dateObjects = format.split(separator)\n  const year: { key: string; index: number } = { key: 'year', index: 0 },\n    month: { key: string; index: number } = { key: 'month', index: 1 },\n    day: { key: string; index: number } = { key: 'day', index: 2 }\n\n  dateObjects.forEach((dateObject, index) => {\n    switch (dateObject[0]) {\n      case 'y':\n        year.index = index\n        break\n      case 'm':\n        month.index = index\n        break\n      case 'd':\n        day.index = index\n        break\n    }\n  })\n  const placeholder = setDateFormatCharacters(format, dateCharacters)\n\n  return createMask<Date>({\n    alias: 'datetime',\n    inputFormat: format,\n    placeholder,\n    parser: (value: string) => {\n      const values = value.split(separator)\n      const y = +values[year.index]\n      const m = +values[month.index] - 1\n      const d = +values[day.index]\n      return new Date(y, m, d)\n    },\n    onBeforeMask(initialValue: string) {\n      if (!initialValue || typeof initialValue !== 'string') return ''\n      // If initialValues is in dateTime format, remove seconds that present after the \"T\"\n      if (initialValue.includes('T')) initialValue = initialValue.split('T')[0]\n      // initialValue should always be in yyyy-mm-dd no matter if set from control, via datepicker or manually with keyboard\n      const values = initialValue.split('-')\n      const datePartsInOrder = [year, month, day].sort(\n        (a, b) => a.index - b.index,\n      )\n      // \"Insert\" correct values for the year/month/day, then join to string with separator\n      return datePartsInOrder\n        .map(({ key }) => {\n          const [yearValue, monthValue, dateValue] = values\n          if (key === 'year') return yearValue\n          if (key === 'month') return monthValue\n          return dateValue\n        })\n        .join(separator)\n    },\n  })\n}\n\nexport interface DateCharacters {\n  year: string\n  month: string\n  day: string\n}\nexport const setDateFormatCharacters = (\n  format: string,\n  dateCharacters?: DateCharacters,\n) => {\n  if (!dateCharacters) return format\n  format = format.replace(/y/g, dateCharacters.year)\n  format = format.replace(/m/g, dateCharacters.month)\n  format = format.replace(/d/g, dateCharacters.day)\n  return format\n}\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  ContentChild,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  Self,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core'\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NgControl,\n  ValidationErrors,\n  Validator,\n  Validators,\n} from '@angular/forms'\n\nimport {\n  Observable,\n  Subject,\n} from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\nimport {\n  TRANSLOCO_SCOPE,\n  TranslocoScope,\n  TranslocoService,\n} from '@jsverse/transloco'\nimport type {\n  InputmaskOptions,\n} from '@sebgroup/green-angular/src/v-angular/input-mask'\n\nimport { toLocalDate } from '../datepicker.utils'\nimport {\n  DateCharacters,\n  getFormatDateMask,\n  getLocaleDateMask,\n  getLocaleDateString,\n  setDateFormatCharacters,\n} from '../models/dates'\n\n@Directive() // Required with Angular ivy compiler\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport abstract class DateControlValueAccessorComponent\n  implements\n    AfterViewInit,\n    OnInit,\n    OnChanges,\n    OnDestroy,\n    ControlValueAccessor,\n    Validator\n{\n  /** Custom template for displaying the content of the label.\n   * Specified by nesting an `<ng-template #labelTpl>Custom Label</ng-template>`.\n   */\n  @ContentChild('labelTpl', { read: TemplateRef })\n  labelContentTpl?: TemplateRef<undefined>\n\n  /** Custom template for displaying value when the input is locked.\n   * Specified by nesting an `<ng-template #lockedTpl let-selectedDate>Custom locked content date: {{ selectedDate }}</ng-template>`.\n   */\n  @ContentChild('lockedTpl', { read: TemplateRef })\n  lockedTpl?: TemplateRef<undefined>\n\n  /** Reference to the native child input element. */\n  @ViewChild('input', { read: ElementRef }) inputRef?: ElementRef\n\n  /* ATTRIBUTES */\n\n  /** Id of the host element and is accessible by the children, automatically generated if not provided. */\n  @HostBinding('attr.id') @Input() id = (window as any).ngv?.nextId(\n    'datepicker',\n  )\n  /** Name of the child input element. */\n  @Input() name?: string\n  /** Label of the child input element using the default template.\n   * Can be overwritten by specifying an `<ng-template #labelTpl>Custom Label</ng-template>`.\n   */\n  @Input() label?: string\n  /** Text shown before input has a written value. Default current date format by locale of transloco */\n  @Input() set placeholder(value: string | undefined) {\n    this._placeholder = value\n      ? setDateFormatCharacters(value, this.dateCharacters)\n      : value\n    this.defaultPlaceholder = value\n      ? setDateFormatCharacters(value, this.dateCharacters)\n      : value\n  }\n  get placeholder() {\n    return this._placeholder\n  }\n  private _placeholder: string | undefined\n  defaultPlaceholder?: string\n  /** What characters to use in date placeholder, e.g. {year: 'Y', month: 'M', day: 'D'} */\n  @Input() dateCharacters?: DateCharacters\n  /** Role of the child input element. https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles */\n  @Input() role?: string\n  /** Value of the child input element. Mostly used in conjunction with radio and checkboxes. */\n  @Input() value: any\n  /** An error string to be shown under invalid inputs. Overwrites any form errors. */\n  @Input() error?: string\n  /** A list of errors string to be shown under invalid inputs. Overwrites any form errors. */\n  @Input() errorList?: string[]\n  /** Adds an icon before each error message. */\n  @Input() withErrorIcon?: boolean = false\n  /** Description of the child input element. Both visibly and as `aria-label`. */\n  @Input() description?: string\n  /** If set to true, the browser will try to automatically set focus to the child input element. */\n  @Input() autofocus = false\n  /** Default value of the child input element. */\n  @Input() defaultValue?: any\n  /** If passed, the component will listen for updates and will reset its value. */\n  @Input() reset?: Observable<any>\n  /** Adds (Optional) to input label. */\n  @Input() optional?: boolean | null | undefined\n  /**\n   * Settings for input mask for dates based on locale\n   * @see {@link getLocaleDateMask} use this tool to generate settings for `dateInputMask`\n   */\n  @Input() set dateInputMask(dateMask: InputmaskOptions<Date>) {\n    // Hide input field\n    this.showInputDateSrc.next(false)\n    this.cdr.detectChanges()\n    this._dateInputMask = dateMask\n\n    // Show input field to reload input-mask settings upon update\n    setTimeout(() => {\n      this.showInputDateSrc.next(true)\n      this.cdr.detectChanges()\n    }, 200)\n  }\n  get dateInputMask(): InputmaskOptions<Date> {\n    return this._dateInputMask\n  }\n  private _dateInputMask!: InputmaskOptions<Date>\n\n  private _locked: boolean | null | undefined = undefined\n  /** Hides the input borders and displays current value as a text. */\n  @Input() set locked(value: boolean | null | undefined) {\n    this._locked = value\n    this.cdr.detectChanges()\n  }\n  get locked(): boolean | null | undefined {\n    return this._locked\n  }\n  /** If set to true, using a controls disabled state will display input as locked. */\n  @Input() displayDisabledAsLocked?: boolean | null | undefined\n\n  /* STATES */\n\n  private _required: boolean | null | undefined = undefined\n  /** Override the required flag of the component. */\n  @Input() set required(value: boolean | null | undefined) {\n    this._required = value\n  }\n  /** Child input element is considered required and changes default label template accordingly. */\n  get required(): boolean | null | undefined {\n    // if required is set => return required\n    if (this._required !== undefined) return this._required\n\n    // if required can be determined from the control => return control.required\n    if (this.ngControl?.control?.validator) {\n      const validator = this.ngControl?.control?.validator(\n        {} as AbstractControl,\n      )\n      return validator && validator.required\n    }\n\n    return\n  }\n\n  private _invalid: boolean | undefined = undefined\n  /** Override the invalid state of the component. */\n  @Input() set invalid(value: boolean) {\n    this._invalid = value\n  }\n  /** The component has the invalid state, usually decorating the elements red and shows the first error. */\n  get invalid(): boolean {\n    if (this._invalid === true || this._invalid === false) return this._invalid\n    return (\n      !!this.ngControl?.control?.invalid && this.ngControl?.control?.touched\n    )\n  }\n\n  private _valid: boolean | undefined = undefined\n  /** Override the valid state of the component. */\n  @Input() set valid(value: boolean) {\n    this._valid = value\n  }\n  /** The component has the valid state, usually decorating the elements green. */\n  get valid(): boolean {\n    if (this._valid === true || this._valid === false) return this._valid\n    return !!this.ngControl?.control?.valid && this.ngControl?.control?.touched\n  }\n\n  /** The component has the focused state, updated by the child input element's focus state. */\n  @Input() focused = false\n  /** The component has the disabled state, usually muting the colors and removes interaction. */\n  @Input() disabled = false\n  /** Locale for using correct language in the datepicker. */\n  @Input() locale: string | undefined\n  /** Date format used for placeholder and input mask. Should be in lower case {year: 'y', month: 'm', day: 'd'} */\n  @Input() dateFormat: string | undefined\n  /** Date locale used for placeholder and input mask. */\n  @Input() dateLocale: string | undefined\n\n  /** Toggler for showing or hiding the input field */\n  protected showInputDateSrc = new Subject<boolean>()\n\n  /* TRIGGERS */\n\n  /** Emits focus events triggered by the child elements. */\n  @Output() readonly ngvFocus = new EventEmitter()\n  /** Emits focus events triggered by the child elements. */\n  @Output() readonly ngvBlur = new EventEmitter()\n\n  /* VALUE HANDLERS */\n  /** @internal */\n  protected onChange = (_: any): void => {} // eslint-disable-line @typescript-eslint/no-empty-function\n  /** @internal */\n  protected onTouched = (): void => {} // eslint-disable-line @typescript-eslint/no-empty-function\n  /** @internal */\n  protected onValidatorChange: () => void = () => null\n  private _state: any = null\n\n  /* OTHER VARIABLES */\n  scope: string | undefined\n  /** @internal */\n  // warningIcon = faTriangleExclamation;\n\n  /* LIFE CYCLE VARIABLES */\n  private _onDestroy$ = new Subject<true>()\n\n  /**\n   * Creates a new BaseControlValueAccessorComponent.\n   * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n   */\n  constructor(\n    @Self() @Optional() public ngControl: NgControl,\n    @Optional()\n    @Inject(TRANSLOCO_SCOPE)\n    protected translocoScope: TranslocoScope,\n    protected elementRef: ElementRef,\n    protected cdr: ChangeDetectorRef,\n    private _transloco: TranslocoService,\n  ) {\n    if (this.ngControl) {\n      // Note: we provide the value accessor through here, instead of\n      // the `providers` to avoid running into a circular import.\n      this.ngControl.valueAccessor = this\n    }\n\n    if (this.translocoScope) this.scope = this.translocoScope.toString()\n  }\n\n  static parseDateLike(value: any): null | undefined | string {\n    try {\n      // if value is type of string,\n      if (value && typeof value === 'string') value = toLocalDate(value)\n      switch (true) {\n        // remove instances where the value will not correctly be parsed to a date string\n        case value == null:\n        case value?.toString() === 'Invalid Date':\n          return null\n        // if value-as-date is a valid date object, parse the value to YYYY-MM-DD format\n        case typeof value?.getMonth === 'function':\n          return new Intl.DateTimeFormat('sv-SE').format(value)\n        default:\n          return value as string\n      }\n    } catch (_e) {\n      return\n    }\n  }\n\n  // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n  ngOnInit(): void {\n    if (this.ngControl && this.ngControl.control) {\n      this.ngControl.control.setValidators(\n        Validators.compose([this.ngControl.control.validator, this.validate]),\n      )\n    }\n\n    this._transloco.langChanges$.pipe(takeUntil(this._onDestroy$)).subscribe({\n      next: () => {\n        if (!this.locale && !this.dateFormat) {\n          return this.updatePlaceholderAndMask()\n        }\n      },\n    })\n\n    // if reset observable has been passed, subscribe after updates\n    this.reset?.pipe(takeUntil(this._onDestroy$)).subscribe({\n      next: () => {\n        // reset value of controller\n        this.updateValue('')\n      },\n    })\n  }\n\n  // eslint-disable-next-line @angular-eslint/contextual-lifecycle\n  ngAfterViewInit(): void {\n    // if default value is set, then don't alter it. Otherwise, use\n    // current value of controller after initiation as default value\n    this.defaultValue = this.defaultValue ?? this.ngControl?.value\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.defaultValue?.currentValue) {\n      this.updateValue(changes.defaultValue.currentValue)\n    }\n\n    if (\n      changes.locale?.currentValue &&\n      !this.dateFormat &&\n      !changes.dateFormat?.currentValue\n    ) {\n      this.updatePlaceholderAndMask()\n    }\n\n    if (changes.dateFormat?.currentValue) {\n      this.updateFormat()\n    }\n\n    if (changes.dateCharacters?.currentValue) {\n      if (this.dateFormat) {\n        this.updateFormat()\n      } else {\n        this.updatePlaceholderAndMask()\n      }\n    }\n\n    if (!!changes.dateLocale?.currentValue && !this.dateFormat) {\n      this.updatePlaceholderAndMask()\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._onDestroy$.next(true)\n    this._onDestroy$.complete()\n  }\n\n  /** @internal */\n  onFocus(event: Event) {\n    event.stopPropagation\n      ? event.stopPropagation()\n      : (event.cancelBubble = true)\n    this.focused = true\n    this.ngvFocus.emit(event)\n  }\n\n  /** @internal */\n  onBlur(event: Event) {\n    event.stopPropagation\n      ? event.stopPropagation()\n      : (event.cancelBubble = true)\n    this.onTouched()\n    this.focused = false\n    this.ngvBlur.emit(event)\n  }\n\n  detectChanges(): void {\n    this.cdr.detectChanges()\n  }\n\n  /** Sets the focus on the actual input element. */\n  setFocus() {\n    if (this.inputRef) this.inputRef.nativeElement.focus()\n  }\n\n  /**\n   * @internal\n   * Update placeholder  and input mask to match locale.\n   * Order if choice for locale:\n   * 1. dateLocale - Used for specifying which locale to be used for formatting date\n   * 2. locale - Unless dateLocale is not provided, use locale form current translation\n   * 3. transloco.getActiveLang - as last resort, get active language form trnasloco\n   * If locale is undefined, transloco.activeLang will be used instead.\n   */\n  updatePlaceholderAndMask() {\n    const locale =\n      this.dateLocale ?? this.locale ?? this._transloco.getActiveLang()\n\n    this._placeholder = this.defaultPlaceholder\n      ? setDateFormatCharacters(this.defaultPlaceholder, this.dateCharacters)\n      : setDateFormatCharacters(\n          getLocaleDateString(locale).toLowerCase(),\n          this.dateCharacters,\n        )\n    this.dateInputMask = getLocaleDateMask(this.dateCharacters, locale)\n  }\n\n  updateFormat() {\n    if (this.dateFormat) {\n      this._placeholder = this.defaultPlaceholder\n        ? setDateFormatCharacters(this.defaultPlaceholder, this.dateCharacters)\n        : setDateFormatCharacters(\n            this.dateFormat.toLowerCase(),\n            this.dateCharacters,\n          )\n      this.dateInputMask = getFormatDateMask(\n        this.dateFormat,\n        this.dateCharacters,\n      )\n    }\n  }\n\n  // ----------------------------------------------------------------------------\n  // CONTROL VALUE ACCESSOR\n  // ----------------------------------------------------------------------------\n\n  /** Internal state/value that the native input element has. */\n  get state() {\n    return this._state\n  }\n\n  /**\n   * Internal state/value that the native input element has.\n   */\n  set state(value) {\n    this._state = value\n  }\n\n  /** Writes a new value to the child input element. */\n  writeValue(value: any): void {\n    this.state = value\n    this.onChange(this.state)\n  }\n\n  /** Registers a callback function that is called when the child input element's value changes. */\n  registerOnChange(fn: (value: any) => void): void {\n    this.onChange = (value) => {\n      // ensure emitted value is a string | null | undefined\n      const emitValue = DateControlValueAccessorComponent.parseDateLike(value)\n      fn(emitValue)\n    }\n  }\n\n  /** Registers a callback function that is called when the child input element triggers on blur. */\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn\n  }\n\n  /** Function that is called by the forms API when the control status changes to or from 'DISABLED'. */\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled\n\n    // if displayDisabledAsLocked is enabled - update locked state based on disabled state\n    if (this.displayDisabledAsLocked) {\n      this.locked = isDisabled\n    }\n  }\n\n  // ----------------------------------------------------------------------------\n  // VALIDATORS\n  // ----------------------------------------------------------------------------\n\n  /** Method that performs synchronous validation against the provided control. Used for internal validation. */\n  validate(_control: AbstractControl): { [name: string]: any } | null {\n    return null\n  }\n\n  /** Registers a callback function to call when the validator inputs change. */\n  registerOnValidatorChange(fn: () => void): void {\n    this.onValidatorChange = fn\n  }\n\n  // ----------------------------------------------------------------------------\n  // HELPERS\n  // ----------------------------------------------------------------------------\n\n  /** Returns the first entry in an error object. */\n  get firstError(): { code: string; params: Record<string, any> } | null {\n    const errors: ValidationErrors | null = this.ngControl.errors\n    if (!errors) return null\n    const code = Object.keys(errors)[0]\n    return { code, params: errors[code] }\n  }\n\n  private updateValue(value = this.defaultValue) {\n    this.state = value\n    this.onChange(this.state)\n    this.cdr.detectChanges()\n  }\n}\n","import {\n  Directive,\n  ElementRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  SimpleChanges,\n} from '@angular/core'\n\nimport { match } from '../datepicker.utils'\n\nexport const enum DateCss {\n  notWithinMonth = 'not-within-month',\n  selected = 'selected',\n  today = 'today',\n}\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[calendarDate]',\n  standalone: false,\n})\nexport class CalendarDateDirective implements OnInit, OnChanges {\n  @Input() calendarDate!: Date\n  @HostBinding('class.' + DateCss.selected) @Input() selected!: boolean\n  @HostBinding('class.' + DateCss.notWithinMonth)\n  @Input()\n  notWithinMonth!: boolean\n  @HostBinding('class.' + DateCss.today) isToday = false\n  @Input() disabled!: boolean\n\n  get nativeElement(): HTMLElement {\n    return this.elementRef.nativeElement\n  }\n\n  constructor(private elementRef: ElementRef) {}\n\n  ngOnInit() {\n    this.isToday = match(new Date(), this.calendarDate)\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.disabled?.currentValue) {\n      ;(this.nativeElement as HTMLButtonElement).disabled = this.disabled\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\nimport { DisableDateConfig } from '../datepicker.models'\nimport {\n  afterClosingHours,\n  isAfter,\n  isBefore,\n  match,\n} from '../datepicker.utils'\n\nconst TODAY = new Date()\n\n@Pipe({\n    name: 'isDisabled',\n    standalone: false\n})\nexport class IsDisabledPipe implements PipeTransform {\n  // transform(value: Date, firstValid: Date | undefined, lastValid: Date | undefined, excludeDates: Date[] | undefined, excludeDays: WeekDay[] | undefined): boolean {\n  transform(value: Date, config: DisableDateConfig = {}): boolean {\n    const { fromDate, toDate, excludeDates, excludeDays, closingTime } = config\n\n    // if closingHours was provided and the date matches today - check closingHours (including timezone)\n    if (closingTime && match(value, TODAY) && afterClosingHours(closingTime))\n      return true\n\n    // if fromDate was provided and the date occurs before fromDate date\n    if (fromDate && !match(value, fromDate) && isBefore(value, fromDate))\n      return true\n\n    // if toDate was provided and the date occurs after toDate date\n    if (toDate && !match(value, toDate) && isAfter(value, toDate)) return true\n\n    // if a list of disallowed days is provided and value matches\n    if (\n      excludeDays &&\n      excludeDays.length &&\n      excludeDays.indexOf(value.getDay()) !== -1\n    )\n      return true\n\n    // if a list of disallowed dates is provided\n    if (excludeDates && excludeDates.length) {\n      return !!excludeDates.find((d: Date) => match(value, d))\n    }\n\n    // otherwise show date as not disabled\n    return false\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\n@Pipe({\n    name: 'dateThook',\n    standalone: false\n})\nexport class DateThookPipe implements PipeTransform {\n  get today(): Date {\n    const tmp = new Date()\n    const today = new Date(tmp.setHours(0, 0, 0, 0))\n    return today\n  }\n\n  transform(date: Date, isDisabled: boolean): string {\n    if (!!date && !isDisabled) {\n      // Reset time for target date\n      const dateTmp = new Date(date.setHours(0, 0, 0, 0))\n\n      // To calculate the time difference of two dates\n      const differenceInTime = dateTmp.getTime() - this.today.getTime()\n\n      // To calculate the no. of days between two dates\n      const differenceInDays = differenceInTime / (1000 * 3600 * 24)\n      const absoluteDifferenceInDays = Math.abs(differenceInDays)\n\n      const differentiator =\n        differenceInDays < 0 ? '-' : differenceInDays === 0 ? '' : '+'\n\n      return `today${differentiator}${absoluteDifferenceInDays === 0 ? '' : absoluteDifferenceInDays}`\n    }\n\n    return 'disabled-date'\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core'\n\nimport { match } from '../datepicker.utils'\n\n@Pipe({\n    name: 'matches',\n    standalone: false\n})\nexport class MatchesPipe implements PipeTransform {\n  transform(value: Date, selected: Date | undefined): boolean {\n    return match(value, selected)\n  }\n}\n","import { WeekDay } from '@angular/common'\nimport {\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  Output,\n  QueryList,\n  SimpleChanges,\n  ViewChildren,\n} from '@angular/core'\n\nimport type {\n  CalendarType,\n  DisableDateConfig,\n} from '../../datepicker.models'\nimport {\n  generateDateMatrix,\n  getDayOffset,\n  sortWeekDays,\n  toLocalDate,\n} from '../../datepicker.utils'\nimport { CalendarDateDirective } from '../../directives/calendar-date.directive'\n\n@Component({\n  selector: 'nggv-calendar',\n  templateUrl: './calendar.component.html',\n  styleUrls: ['./calendar.component.scss'],\n  standalone: false,\n})\nexport class CalendarComponent implements OnChanges {\n  @Output() dateClick = new EventEmitter<Date>()\n\n  @ViewChildren(CalendarDateDirective)\n  dateButtonRefs!: QueryList<CalendarDateDirective>\n\n  @Input() year!: number\n  @Input() month!: number\n  @Input() selected: Date | undefined\n\n  // inputs that configure display behaviour\n  @Input() locale: string | undefined\n  @Input() minCalendarRows = 5\n  @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n  @Input() type: CalendarType = 'normal'\n\n  // inputs that affects which dates in the calendar should be grayed out\n  @Input() set disableDates(value: Date[] | undefined) {\n    this.updateDisableDateConfig({ excludeDates: value ?? [] })\n  }\n  @Input() set disableWeekDays(value: WeekDay[] | undefined) {\n    this.updateDisableDateConfig({ excludeDays: value })\n  }\n  @Input() set firstValid(value: Date | undefined) {\n    this.updateDisableDateConfig({ fromDate: value })\n  }\n  @Input() set lastValid(value: Date | undefined) {\n    this.updateDisableDateConfig({ toDate: value })\n  }\n  @Input() set closingTime(value: Date | undefined) {\n    this.updateDisableDateConfig({ closingTime: value })\n  }\n\n  dateMatrix: Date[][] = [[]]\n  disableDateConfig: DisableDateConfig = {}\n\n  private lastDayOfWeek: WeekDay = WeekDay.Sunday\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.selected?.currentValue) {\n      this.selected = toLocalDate(changes.selected.currentValue)\n    }\n\n    if (changes.firstDayOfWeek?.currentValue) {\n      this.lastDayOfWeek = sortWeekDays(\n        changes.firstDayOfWeek.currentValue,\n      ).pop() as WeekDay\n    }\n\n    if (\n      (changes.month?.currentValue !== undefined &&\n        changes.month?.currentValue !== null) ||\n      !!changes.year?.currentValue ||\n      !!changes.firstDayOfWeek?.currentValue ||\n      !!changes.minCalendarRows?.currentValue\n    ) {\n      this.dateMatrix = generateDateMatrix(\n        this.month,\n        this.year,\n        this.minCalendarRows,\n        this.firstDayOfWeek,\n      )\n    }\n  }\n\n  clickDate(date: Date): void {\n    this.dateClick.emit(date)\n  }\n\n  @HostListener('keydown', ['$event'])\n  keyNavigation(event: KeyboardEvent): void {\n    let activeElement: HTMLElement | undefined\n    if (event.key !== 'Tab')\n      activeElement = document.activeElement as HTMLElement\n    if (event.key === 'ArrowRight') {\n      const nextFocusable = this.getNextFocusable(activeElement)\n      if (nextFocusable) nextFocusable.focus()\n    }\n\n    if (event.key === 'ArrowLeft') {\n      const nextFocusable = this.getPreviousFocusable(activeElement)\n      if (nextFocusable) nextFocusable.focus()\n    }\n\n    if (event.key === 'ArrowUp') {\n      event.preventDefault()\n      const nextFocusable = this.getElementWithOffset(activeElement, -7)\n      if (nextFocusable) nextFocusable.focus()\n    }\n\n    if (event.key === 'ArrowDown') {\n      event.preventDefault()\n      const nextFocusable = this.getElementWithOffset(activeElement, 7)\n      if (nextFocusable) nextFocusable.focus()\n    }\n\n    if (event.key === 'Enter' || event.key === 'Space') {\n      if (activeElement) {\n        const dateRef = this.dateButtonRefs.find(\n          (ref) => ref.nativeElement === activeElement,\n        )\n        if (!dateRef?.disabled) {\n          this.dateClick.emit(dateRef?.calendarDate)\n        }\n      }\n    }\n\n    if (event.key === 'Home') {\n      event.preventDefault()\n      const nextFocusable = this.firstDayOfWeekElement()\n      if (nextFocusable) nextFocusable.focus()\n    }\n\n    if (event.key === 'End') {\n      event.preventDefault()\n      const nextFocusable = this.lastDayOfWeekElement()\n      if (nextFocusable) nextFocusable.focus()\n    }\n  }\n\n  getElementWithOffset(\n    fromElement: HTMLElement | undefined,\n    offsetDays: number,\n    returnOnlyEnabled = true,\n  ): HTMLElement | undefined {\n    if (!fromElement) return\n    const fromIndex = this.dateButtonRefs\n      .toArray()\n      .map((ref) => ref.nativeElement)\n      .indexOf(fromElement)\n    const next = this.dateButtonRefs.get(fromIndex + offsetDays)\n    if (!next) return\n    if (returnOnlyEnabled && next.disabled)\n      return this.getElementWithOffset(next.nativeElement, offsetDays)\n    return next.nativeElement\n  }\n\n  getNextFocusable(\n    fromElement: HTMLElement | undefined,\n  ): HTMLElement | undefined {\n    if (!fromElement) return\n    return this.getElementWithOffset(fromElement, 1)\n  }\n\n  getPreviousFocusable(\n    fromElement: HTMLElement | undefined,\n  ): HTMLElement | undefined {\n    if (!fromElement) return\n    return this.getElementWithOffset(fromElement, -1)\n  }\n\n  firstDayOfWeekElement(): HTMLElement | undefined {\n    const activeElement = document.activeElement as HTMLElement\n    if (!activeElement) return\n    const dateRef = this.dateButtonRefs.find(\n      (ref) => ref.nativeElement === activeElement,\n    ) as CalendarDateDirective\n    if (dateRef.calendarDate.getDay() === this.firstDayOfWeek) return\n    const offset = this.getDayOffset(\n      dateRef.calendarDate.getDay(),\n      this.firstDayOfWeek,\n      'back',\n    )\n    const targetElement = this.getElementWithOffset(\n      activeElement,\n      offset,\n      false,\n    ) as HTMLButtonElement\n    if (targetElement && targetElement.disabled)\n      return this.getNextFocusable(targetElement)\n    return targetElement\n  }\n\n  lastDayOfWeekElement(): HTMLElement | undefined {\n    const activeElement = document.activeElement as HTMLElement\n    if (!activeElement) return\n    const dateRef = this.dateButtonRefs.find(\n      (ref) => ref.nativeElement === activeElement,\n    ) as CalendarDateDirective\n    if (dateRef.calendarDate.getDay() === this.lastDayOfWeek) return\n    const offset = this.getDayOffset(\n      dateRef.calendarDate.getDay(),\n      this.lastDayOfWeek,\n      'forward',\n    )\n    const targetElement = this.getElementWithOffset(\n      activeElement,\n      offset,\n      false,\n    ) as HTMLButtonElement\n    if (targetElement && targetElement.disabled)\n      return this.getPreviousFocusable(targetElement)\n    return targetElement\n  }\n\n  getDayOffset(\n    from: WeekDay,\n    to: WeekDay,\n    direction?: 'forward' | 'back',\n  ): number {\n    return getDayOffset(from, to, this.firstDayOfWeek, direction)\n  }\n\n  private updateDisableDateConfig(config: Partial<DisableDateConfig>): void {\n    this.disableDateConfig = {\n      ...this.disableDateConfig,\n      ...config,\n    }\n  }\n}\n","<ng-container *ngFor=\"let weekRow of dateMatrix\">\n  <div class=\"nggv-calendar-row\">\n    <button\n      *ngFor=\"let date of weekRow\"\n      class=\"gds-button gds-button-alternative\"\n      [attr.data-thook]=\"\n        date | dateThook: (date | isDisabled: disableDateConfig)\n      \"\n      [attr.aria-label]=\"date\"\n      [calendarDate]=\"date\"\n      [notWithinMonth]=\"!(month === date?.getMonth())\"\n      [selected]=\"date | matches: selected\"\n      [disabled]=\"date | isDisabled: disableDateConfig\"\n      (click)=\"clickDate(date)\"\n    >\n      {{ date | date: 'd' : undefined : locale }}\n    </button>\n  </div>\n</ng-container>\n","import { formatDate, WeekDay } from '@angular/common'\nimport { Injectable } from '@angular/core'\n\nexport type CalendarType = 'normal' | 'extended'\n\nexport const enum Month {\n  January,\n  February,\n  March,\n  April,\n  May,\n  June,\n  July,\n  August,\n  September,\n  October,\n  November,\n  December,\n}\n\nexport interface DisableDateConfig {\n  fromDate?: Date | undefined\n  toDate?: Date | undefined\n  excludeDates?: Date[] | undefined\n  excludeDays?: WeekDay[] | undefined\n  closingTime?: Date | undefined\n}\n\n@Injectable()\nexport class CalendarMonth {\n  year: number\n  month: number\n  id: string\n  _date: Date\n\n  constructor(date?: Date) {\n    this._date = date ? new Date(date) : new Date()\n    this._date.setDate(1)\n    this._date.setHours(0, 0, 0, 0)\n    this.year = this._date.getFullYear()\n    this.month = this._date.getMonth()\n    this.id = formatDate(this._date, 'yyyyMM', 'en')\n  }\n\n  /** Creates an instance based of input year and month. */\n  static fromObject(obj: { year: number; month: number }): CalendarMonth {\n    const objectDate = new Date(obj.year, obj.month, 1)\n    return new CalendarMonth(objectDate)\n  }\n\n  /** Returns a Date representation for the instance. */\n  get date(): Date {\n    return new Date(this._date)\n  }\n\n  /** Returns the string id representing the instance in form of 'yyyyMM'. */\n  valueOf() {\n    return this.id\n  }\n\n  /** Returns a new instance for next month. */\n  nextMonth(): CalendarMonth {\n    const next = this.date\n    next.setMonth(this.month + 1)\n    return new CalendarMonth(next)\n  }\n\n  /** Returns a new instance for previous month. */\n  previousMonth(): CalendarMonth {\n    const previous = this.date\n    previous.setMonth(this.month - 1)\n    return new CalendarMonth(previous)\n  }\n\n  /** Returns a new instance for next year. */\n  nextYear(): CalendarMonth {\n    const nextYear = this.date\n    nextYear.setFullYear(nextYear.getFullYear() + 1)\n    return new CalendarMonth(nextYear)\n  }\n\n  /** Returns a new instance for previous year. */\n  previousYear(): CalendarMonth {\n    const previousYear = this.date\n    previousYear.setFullYear(previousYear.getFullYear() - 1)\n    return new CalendarMonth(previousYear)\n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core'\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'\nimport { Subscription } from 'rxjs'\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators'\n\nimport { CalendarMonth } from '../../datepicker.models'\nimport { getMonthArray, getYearArray } from '../../datepicker.utils'\n\nimport type { CalendarType } from '../../datepicker.models'\n\nimport '@sebgroup/green-core/components/icon/icons/chevron-left.js'\nimport '@sebgroup/green-core/components/icon/icons/chevron-right.js'\n\n@Component({\n    selector: 'nggv-calendar-control',\n    templateUrl: './calendar-control.component.html',\n    styleUrls: ['./calendar-control.component.scss'],\n    standalone: false\n})\nexport class CalendarControlComponent implements OnInit, OnChanges, OnDestroy {\n  // nextIcon: IconDefinition = faChevronRight\n  // previousIcon: IconDefinition = faChevronLeft\n\n  @Output() calendarChange = new EventEmitter<CalendarMonth>()\n\n  @Input() activeCalendar!: CalendarMonth\n  @Input() locale: string | undefined\n  @Input() type: CalendarType = 'normal'\n\n  monthArray: Date[] = [] // array used for month dropdown\n  yearArray: Date[] = [] // array used for year dropdown\n  selectedCalendar: UntypedFormGroup // dropdown form group\n\n  private subs: Subscription[] = []\n\n  constructor(private fb: UntypedFormBuilder) {\n    // initiate form group for dropdown menus\n    this.selectedCalendar = this.fb.group({\n      year: [],\n      month: [],\n    })\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (\n      changes.activeCalendar &&\n      !changes.activeCalendar.isFirstChange() &&\n      changes.activeCalendar.currentValue.valueOf() !==\n        this.selectedCalendar.value.id\n    ) {\n      this.selectedCalendar.patchValue(changes.activeCalendar.currentValue)\n    }\n  }\n\n  ngOnInit() {\n    // populate drowdowns and labels with data\n    this.monthArray = getMonthArray()\n    this.yearArray = getYearArray()\n\n    // subscribe to year and month changes, and emit event to datepicker\n    this.subscribeToFormChanges()\n\n    // update control to initial value\n    if (this.activeCalendar)\n      this.selectedCalendar.patchValue(this.activeCalendar)\n  }\n\n  ngOnDestroy() {\n    this.subs.forEach((sub) => sub.unsubscribe())\n  }\n\n  viewPreviousMonth() {\n    const previousMonth = CalendarMonth.fromObject(\n      this.selectedCalendar.value,\n    ).previousMonth()\n    this.selectedCalendar.patchValue(previousMonth)\n  }\n\n  viewNextMonth() {\n    const nextMonth = CalendarMonth.fromObject(\n      this.selectedCalendar.value,\n    ).nextMonth()\n    this.selectedCalendar.patchValue(nextMonth)\n  }\n\n  viewPreviousYear() {\n    const previousYear = CalendarMonth.fromObject(\n      this.selectedCalendar.value,\n    ).previousYear()\n    this.selectedCalendar.patchValue(previousYear)\n  }\n\n  viewNextYear() {\n    const nextYear = CalendarMonth.fromObject(\n      this.selectedCalendar.value,\n    ).nextYear()\n    this.selectedCalendar.patchValue(nextYear)\n  }\n\n  @HostListener('keydown', ['$event'])\n  keyNavigation(event: KeyboardEvent): void {\n    if (event.key !== 'PageUp' && event.key !== 'PageDown') return\n    event.preventDefault()\n    if (event.shiftKey) {\n      if (event.key === 'PageUp') return this.viewPreviousYear()\n      if (event.key === 'PageDown') return this.viewNextYear()\n    }\n    if (event.key === 'PageUp') return this.viewPreviousMonth()\n    if (event.key === 'PageDown') return this.viewNextMonth()\n  }\n\n  private subscribeToFormChanges(): void {\n    // used to quickly check if the yearsArray needs years appended to it\n    let existingYears = this.yearArray.map((e) => e.getFullYear())\n    const changes = this.selectedCalendar.valueChanges.pipe(\n      debounceTime(1), // added due to this issue: https://github.com/angular/angular/issues/13129\n      map((value: { year: number; month: number }) =>\n        CalendarMonth.fromObject(value),\n      ),\n      distinctUntilChanged(\n        (prev: CalendarMonth, curr: CalendarMonth) =>\n          prev.valueOf() === curr.valueOf(),\n      ),\n    )\n    this.subs.push(\n      changes.subscribe({\n        next: (value: CalendarMonth) => {\n          // if you need to append to year array\n          if (existingYears.indexOf(value.year) === -1) {\n            this.yearArray.push(value.date)\n            this.yearArray.sort((a, b) => a.getFullYear() - b.getFullYear())\n            existingYears = this.yearArray.map((e) => e.getFullYear())\n          }\n          this.calendarChange.emit(value)\n        },\n      }),\n    )\n  }\n}\n","<button\n  *ngIf=\"type === 'normal'\"\n  data-thook=\"previous-month\"\n  class=\"nggv-prev-button\"\n  (click)=\"viewPreviousMonth()\"\n>\n  <gds-icon-chevron-left *nggCoreElement></gds-icon-chevron-left>\n</button>\n\n<ng-container [formGroup]=\"selectedCalendar\">\n  <select\n    class=\"nggv-calendar-select\"\n    data-thook=\"select-month\"\n    formControlName=\"month\"\n  >\n    <option\n      *ngFor=\"let month of monthArray\"\n      class=\"gds-field-dropdown__label\"\n      tabindex=\"0\"\n      [value]=\"month.getMonth()\"\n    >\n      {{ month | date: 'MMMM' : undefined : locale }}\n    </option>\n  </select>\n\n  <select\n    class=\"nggv-calendar-select\"\n    data-thook=\"select-year\"\n    formControlName=\"year\"\n  >\n    <option\n      *ngFor=\"let year of yearArray\"\n      class=\"gds-field-dropdown__label\"\n      tabindex=\"0\"\n      [value]=\"year.getFullYear()\"\n    >\n      {{ year | date: 'yyyy' : undefined : locale }}\n    </option>\n  </select>\n</ng-container>\n\n<button\n  *ngIf=\"type === 'normal'\"\n  data-thook=\"next-month\"\n  class=\"nggv-next-button\"\n  (click)=\"viewNextMonth()\"\n>\n  <gds-icon-chevron-right *nggCoreElement></gds-icon-chevron-right>\n</button>\n","// We must force tsc to interpret this file as a module, resolves\n// \"Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.\"\nexport {}\n\ndeclare global {\n  interface Window {\n    /** Counter for unique identifiers */\n    ngv: {\n      ids: { [namespace: string]: number; default: number }\n      nextId: (namespace?: string) => string\n    }\n  }\n}\n\n;(() => {\n  // Make sure there is an incremental ID each component can use\n  if (typeof window !== 'undefined' && !window.ngv) {\n    window.ngv = {\n      ids: { default: -1 },\n      nextId(namespace = 'default'): string {\n        let id = this.ids[namespace] || 0\n        if (typeof this.ids[namespace] === 'number') id++\n        this.ids[namespace] = id\n        return namespace === 'default'\n          ? `nggv-${id}`\n          : `nggv-${namespace}-${id}`\n      },\n    }\n  }\n})()\n","import { WeekDay } from '@angular/common'\nimport {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core'\n\nimport { Subscription } from 'rxjs'\n\nimport type { CalendarType } from '../../datepicker.models'\nimport { CalendarMonth } from '../../datepicker.models'\nimport {\n  getSortedWeekDays,\n  isValid,\n  toLocalDate,\n} from '../../datepicker.utils'\n\n@Component({\n  selector: 'nggv-datepicker',\n  templateUrl: './datepicker.component.html',\n  styleUrls: ['./datepicker.component.scss'],\n  standalone: false,\n})\nexport class DatepickerComponent implements OnInit, OnChanges, OnDestroy {\n  @ViewChild('calendarTemplate') calendarTemplate: TemplateRef<any> | null =\n    null\n\n  /** Emits a Date upon selection. */\n  @Output() ngvDateChange = new EventEmitter<Date>()\n\n  /** Sets first day of week in calendar. Defaults to Monday. */\n  @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n  /** Bank holidays. */\n  @Input() disableDates: (string | Date)[] = []\n  /** Other non selectable dates. */\n  @Input() disableWeekDays: WeekDay[] = []\n  /** Minimum number of calendar rows shown. */\n  @Input() minCalendarRows = 5\n  /** Initial date set as selected. */\n  @Input() selected: Date | undefined\n  /** Set locale for date format. */\n  @Input() locale: string | undefined = 'en-US'\n  /** Set type of calendar. */\n  @Input() type: CalendarType = 'normal'\n  /** Sets a from date of which all dates before will be invalid. */\n  @Input() firstValid: Date | undefined\n  /** Sets a to date of which all dates after will be invalid. */\n  @Input() lastValid: Date | undefined\n  /** Sets a closing time for today to toggle availability for today's date. */\n  @Input() closingTime: Date | undefined\n  /**\n   * When true, the datepicker will automatically choose to open above or below the input\n   * based on available space in the viewport, and will scale its height to fit if needed.\n   */\n  @Input() dynamicPosition = false\n  /** Needed to determent where to place datepicker if dropdownPosition === 'top' */\n  @Input() size: 'small' | 'large' = 'large'\n\n  @HostBinding('attr.data-position') get positionAttr() {\n    return this.datepickerPosition\n  }\n\n  @HostBinding('attr.data-size') get sizeAttr() {\n    return this.size\n  }\n\n  /** @internal */\n  activeCalendar!: CalendarMonth /*  = new CalendarMonth(new Date()) */\n  /** @internal */\n\n  /** @internal */\n  weekdayArray: Date[] = []\n\n  /** @internal */\n  disabledDatesForActiveMonth: Date[] = []\n\n  // Indicates whether the datepicker should be displayed below ('bottom') or above ('top') the input, based on available space.\n  datepickerPosition: 'bottom' | 'top' = 'bottom'\n\n  private subs: Subscription[] = []\n\n  constructor(\n    private elementRef: ElementRef,\n    private renderer: Renderer2,\n  ) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      changes.selected &&\n      !!changes.selected.currentValue &&\n      !changes.selected.isFirstChange()\n    ) {\n      // set active calendar to match selected date\n      const activeCalendar = new CalendarMonth(\n        toLocalDate(changes.selected.currentValue),\n      )\n      this.changeActiveCalendar(activeCalendar)\n    }\n\n    if (changes.disableDates && !changes.disableDates.isFirstChange()) {\n      this.disabledDatesForActiveMonth = this.getDisabledDatesFor(\n        this.activeCalendar,\n        changes.disableDates.currentValue || [],\n      )\n    }\n  }\n\n  ngOnInit(): void {\n    // initiate week label row\n    this.weekdayArray = getSortedWeekDays(this.firstDayOfWeek)\n\n    // initiate calendar\n    const initDate =\n      !!this.selected && isValid(this.selected)\n        ? new Date(this.selected)\n        : new Date()\n    this.activeCalendar = new CalendarMonth(initDate)\n\n    if (this.dynamicPosition) this.setDropdownPosition()\n  }\n\n  ngOnDestroy() {\n    this.subs.forEach((sub) => sub.unsubscribe())\n  }\n\n  /**\n   * @internal\n   * Update local calendar variable and changes displayed calendar.\n   */\n  changeActiveCalendar(calendar: CalendarMonth): void {\n    this.activeCalendar = calendar\n    this.disabledDatesForActiveMonth = this.getDisabledDatesFor(\n      calendar,\n      this.disableDates,\n    )\n  }\n\n  /**\n   * @internal\n   * Returns a subset of all disabled dates.\n   *\n   * @param month current month to filter from\n   * @param disableDates master list of all disabled dates\n   * @returns a subset with current and adjacent months disabled dates\n   */\n  getDisabledDatesFor(\n    calendar: CalendarMonth,\n    disableDates?: (string | Date)[],\n  ): Date[] {\n    if (!disableDates) disableDates = []\n    // sets month to target month\n    const targetMonth = calendar.date\n\n    // gets previous month from target month\n    const previousMonth = calendar.previousMonth().date\n\n    // gets next month from target month\n    const nextMonth = calendar.nextMonth().date\n\n    // checks if two dates are within the same year and month\n    const withinSameMonth = (a: Date, b: Date): boolean =>\n      a.getMonth() === b.getMonth() && a.getFullYear() === b.getFullYear()\n\n    // filter out disabled dates for current and adjacent months\n    return disableDates\n      .map((d: Date | string) => toLocalDate(d))\n      .filter(\n        (d: Date) =>\n          withinSameMonth(d, previousMonth) ||\n          withinSameMonth(d, targetMonth) ||\n          withinSameMonth(d, nextMonth),\n      )\n  }\n\n  /**\n   * Handles date-clicks from calendar compoentn. Emits event or changes calendar.\n   * @param date date clicked in calendar\n   */\n  dateClickHandler(date: Date): void {\n    // if a date is clicked within the active month, emit date\n    if (date.getMonth() === this.activeCalendar.month)\n      return this.ngvDateChange.emit(date)\n    // else, change active calendar to match the date clicked\n    this.selected = date\n    this.changeActiveCalendar(new CalendarMonth(date))\n  }\n\n  setDropdownPosition() {\n    const datePicker = this.elementRef.nativeElement\n    const parent = datePicker.parentElement\n\n    const rect = parent.getBoundingClientRect()\n\n    const viewportHeight = window.innerHeight\n    const spaceBelow = viewportHeight - rect.bottom\n    const spaceAbove = rect.top\n\n    const MARGIN = 10\n    const DATEPICKER_HEIGHT = 362 // 6 ROWS OF DATES, TO BE SURE\n    let maxDatepickerHeight: number\n\n    if (spaceBelow >= DATEPICKER_HEIGHT) {\n      this.datepickerPosition = 'bottom'\n      maxDatepickerHeight = DATEPICKER_HEIGHT\n    } else if (spaceAbove >= DATEPICKER_HEIGHT) {\n      this.datepickerPosition = 'top'\n      maxDatepickerHeight = DATEPICKER_HEIGHT\n    } else if (spaceBelow > spaceAbove) {\n      this.datepickerPosition = 'bottom'\n      maxDatepickerHeight = Math.max(spaceBelow - MARGIN, DATEPICKER_HEIGHT) // 10px margin, height 362px\n    } else {\n      this.datepickerPosition = 'top'\n      maxDatepickerHeight = Math.max(spaceAbove - MARGIN, DATEPICKER_HEIGHT) // 10px margin, height 362px\n    }\n\n    this.renderer.setStyle(datePicker, 'max-height', `${maxDatepickerHeight}px`)\n  }\n}\n","<!-- control for changing displayed calendar -->\n<nggv-calendar-control\n  [activeCalendar]=\"activeCalendar\"\n  [locale]=\"locale\"\n  [type]=\"type\"\n  (calendarChange)=\"changeActiveCalendar($event)\"\n>\n</nggv-calendar-control>\n\n<!-- label row for week -->\n<div class=\"nggv-weekday-row\">\n  <span *ngFor=\"let weekday of weekdayArray\">{{\n    weekday | date: 'EEE' : undefined : locale\n  }}</span>\n</div>\n\n<!-- outlet for active calendar -->\n<div class=\"nggv-calendar-view-container\">\n  <ng-container\n    *ngTemplateOutlet=\"\n      calendarTemplate;\n      context: {\n        calendar: activeCalendar,\n        disableDates: disabledDatesForActiveMonth,\n      }\n    \"\n  >\n  </ng-container>\n</div>\n\n<div *ngIf=\"type === 'extended'\" class=\"gds-datepicker__controls\">\n  <ng-content></ng-content>\n</div>\n\n<ng-template\n  #calendarTemplate\n  let-calendar=\"calendar\"\n  let-disableDates=\"disableDates\"\n>\n  <nggv-calendar\n    [year]=\"calendar.year\"\n    [month]=\"calendar.month\"\n    [type]=\"type\"\n    [locale]=\"locale\"\n    [disableDates]=\"disableDates\"\n    [selected]=\"selected\"\n    [lastValid]=\"lastValid\"\n    [firstValid]=\"firstValid\"\n    [closingTime]=\"closingTime\"\n    [disableWeekDays]=\"disableWeekDays\"\n    [minCalendarRows]=\"minCalendarRows\"\n    [firstDayOfWeek]=\"firstDayOfWeek\"\n    (dateClick)=\"dateClickHandler($event)\"\n  >\n  </nggv-calendar>\n</ng-template>\n","import '../../datepicker.globals'\nimport '@sebgroup/green-core/components/icon/icons/calendar.js'\nimport '@sebgroup/green-core/components/icon/icons/triangle-exclamation.js'\n\nimport { WeekDay } from '@angular/common'\nimport {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  Inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Self,\n  ViewChild,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\n\nimport {\n  fromEvent,\n  Observable,\n  Subject,\n} from 'rxjs'\nimport {\n  startWith,\n  takeUntil,\n} from 'rxjs/operators'\n\nimport {\n  TRANSLOCO_SCOPE,\n  TranslocoScope,\n  TranslocoService,\n} from '@jsverse/transloco'\n\nimport {\n  DateControlValueAccessorComponent,\n} from '../../date-control-value-accessor/date-control-value-accessor.component'\nimport type { CalendarType } from '../../datepicker.models'\n\n/**\n * Date pickers simplify the task of selecting a date in a visual representation of a calendar.\n * https://designlibrary.sebgroup.com/components/component-datepicker\n *\n * Selector: `nggv-dateinput`\n *\n * When focusing an date element, the calendar allows for navigation using both tab and arrow keys.\n * Pressing 'esc' will close the calendar.\n *\n * Requires TranslocoLocale, but in turn allows for setting locale dynamically:\n * https://jsverse.github.io/transloco/docs/plugins/locale/#manually-setting-locale\n *\n * To configure TranslocoLocale, follow this guide:\n * https://jsverse.github.io/transloco/docs/plugins/locale/#setup\n */\n@Component({\n  selector: 'nggv-dateinput,nggv-input[type=date]',\n  templateUrl: './date-input.component.html',\n  styleUrls: ['./date-input.component.scss'],\n  standalone: false,\n})\nexport class DateInputComponent\n  extends DateControlValueAccessorComponent\n  implements OnDestroy\n{\n  @ViewChild('toggleCalendarButton')\n  toggleButtonRef?: ElementRef<HTMLButtonElement>\n  /** Special property used for selecting DOM elements during automated UI testing. */\n  @HostBinding('attr.data-thook') @Input() thook: string | null | undefined =\n    'date-input'\n\n  @HostBinding('class.small') get isSmall(): boolean {\n    return this.size === 'small'\n  }\n\n  @HostBinding('class.large') get isLarge(): boolean {\n    return this.size === 'large'\n  }\n\n  /** Set type of calendar: either 'normal' or 'expanded'. Default is 'normal'. */\n  @Input() type: CalendarType = 'normal'\n  /** If set to true, the value will not be editable. */\n  @Input() readonly = false\n  /**\n   * An array of Dates or parsable strings that corresponds with dates that should not be selectable in the calendar.\n   * I.e. bank holidays.\n   */\n  @Input() disableDates: (string | Date)[] = []\n  /**\n   * An array of weekdays that should not be selectable in the calendar.\n   * Can be used together with or instead of @Input() disableDates.\n   */\n  @Input() disableWeekDays: WeekDay[] = []\n  /** Mininum number of rows shown in the calendar. */\n  @Input() minRows = 5\n  /** Sets a from-date of which all dates before will be invalid. */\n  @Input() firstValid: Date | undefined\n  /** Sets a to-date of which all dates after will be invalid. */\n  @Input() lastValid: Date | undefined\n  /** Sets a closing time for today to toggle availability for today's date. */\n  @Input() closingTime: Date | undefined\n  /** Sets first day of week in calendar. Defaults to Monday. */\n  @Input() firstDayOfWeek: WeekDay = WeekDay.Monday\n  /** If set to true, it will allow to close the calendar on escape button click. */\n  @Input() closeCalendarOnEscape = true\n  /** If the date-input should close when scrolling the viewport. Default: false*/\n  @Input() closeOnScroll = false\n\n  /**\n   * Sets the displayed size of the date input field.\n   */\n  @Input() size: 'small' | 'large' = 'large'\n\n  @Input() dynamicPosition = false\n\n  /** @internal */\n  // calendarIcon: IconDefinition = faCalendarDays;\n\n  /** @internal */\n  shown = false\n\n  /** @internal */\n  showInput$ = this.showInputDateSrc.asObservable().pipe(startWith(true))\n\n  /** Observable for listening to scrolls when the datepicker is open */\n  private documentScroll$: Observable<Event> = fromEvent(document, 'scroll')\n  /** Observable for listening to clicks outside of the datepicker. */\n  private documentClick$: Observable<Event> = fromEvent(document, 'click')\n  /** Subject used for unsubscribe pattern on above observable. */\n  private datepickerClosed$ = new Subject<boolean>()\n\n  constructor(\n    @Self() @Optional() public ngControl: NgControl,\n    @Optional()\n    @Inject(TRANSLOCO_SCOPE)\n    protected translocoScope: TranslocoScope,\n    protected transloco: TranslocoService,\n    protected elementRef: ElementRef,\n    protected cdr: ChangeDetectorRef,\n  ) {\n    super(ngControl, translocoScope, elementRef, cdr, transloco)\n    // this.showInput$ = this.showInputDateSrc.asObservable()\n  }\n\n  ngOnDestroy(): void {\n    this.datepickerClosed$.next(true)\n    this.datepickerClosed$.complete()\n  }\n\n  /**\n   * @internal\n   * Called from the datepicker-component when a date button is clicked in the calendar.\n   *\n   * @param date date object emitted when selecting a date in the datepicker.\n   */\n  onDateChange(date: Date): void {\n    // control value accessor will ensure correct formatting of state\n    this.state = DateControlValueAccessorComponent.parseDateLike(date)\n    // emit state\n    this.onChange(this.state)\n    // close datepicker and move focus to datepicker button\n    this.setShown(false)\n    setTimeout(() => this.toggleButtonRef?.nativeElement.focus(), 1)\n  }\n\n  /**\n   * @internal\n   * Called when entering date manually in input field.\n   */\n  onValueChange(eventTarget: any): void {\n    // Will be in the format selected in inputMask\n    const value = `${eventTarget.inputmask.undoValue}`\n\n    // Use parserfunction from inputMask to parse to a date object since value can be in multiple formats\n    // Then ontrol value accessor will ensure correct formatting of state\n    const parsedDate = DateControlValueAccessorComponent.parseDateLike(\n      this.dateInputMask.parser!(value),\n    )\n\n    this.state = parsedDate\n\n    // emit parsed date\n    this.onChange(parsedDate)\n    this.onTouched()\n  }\n\n  /**\n   * @internal\n   * Listen to 'esc' keypress and closes datepicker if open.\n   */\n  @HostListener('keydown', ['$event'])\n  keyListener(event: KeyboardEvent): void {\n    if (this.closeCalendarOnEscape && event.key === 'Escape')\n      this.setShown(false)\n  }\n\n  /** @internal */\n  toggleDatepicker(): void {\n    this.setShown(!this.shown)\n  }\n\n  /** To externally trigger the datepicker to close. */\n  close(): void {\n    this.setShown(false)\n  }\n\n  /**\n   * Set the shown state of the datepicker popup. If true the popup will be visible.\n   * If the state is set to false, call onTouched to notify any state listeners\n   * @param state the shown state which to set.\n   */\n  private setShown(state = true): void {\n    this.shown = state\n    if (!this.shown) {\n      // if shown is set to false, stop listening to clicks\n      this.datepickerClosed$.next(true)\n      return this.onTouched()\n    }\n    // if shown is set to true, reset unsubscribe variable\n    this.datepickerClosed$.next(false)\n\n    // start listen to scroll if closeOnScroll is enabled\n    if (this.closeOnScroll) {\n      this.documentScroll$.pipe(takeUntil(this.datepickerClosed$)).subscribe({\n        next: () => {\n          // if document starts scrolling, close datepicker\n          return this.setShown(false)\n        },\n      })\n    }\n\n    // start listening for clicks outside the component\n    this.documentClick$.pipe(takeUntil(this.datepickerClosed$)).subscribe({\n      next: (event: Event) => {\n        // clicking on a gray date causes the datepicker to reload the calendar dates,\n        // and the button element clicked will no longer be considered as a child of the datepicker.\n        // but the event target path will still contain the parent element\n        // if target has datepicker parent, keep listening\n        const eventPath = event.composedPath()\n        const hasDatepickerParent = !!eventPath.find(\n          (e) => e === this.elementRef.nativeElement,\n        )\n        if (hasDatepickerParent) return\n        // else the click is considered to be outside, close datepicker\n        return this.setShown(false)\n      },\n    })\n  }\n}\n","<!-- LABEL -->\n<ng-container *transloco=\"let t; read: scope\">\n  <label\n    [id]=\"id + '-label'\"\n    class=\"gds-field-label hide-if-empty\"\n    [attr.for]=\"id + '-input'\"\n  >\n    <ng-template\n      *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n    ></ng-template>\n    <ng-template #basicLabelContentTpl>\n      <!-- to trigger css:empty if no label was added -->\n      <ng-container *ngIf=\"label\">\n        {{ label }}\n        <span\n          *ngIf=\"optional === true || (required !== true && optional !== false)\"\n          class=\"gds-field-label--optional\"\n        >\n          ({{ t('label.optional') }})\n        </span>\n      </ng-container>\n    </ng-template>\n  </label>\n\n  <!-- DESCRIPTION -->\n  <div\n    class=\"gds-field-label--small description hide-if-empty\"\n    *ngIf=\"description\"\n  >\n    {{ description }}\n  </div>\n\n  <!-- LOCKED INPUT -->\n  <ng-container *ngIf=\"locked\">\n    <ng-template\n      *ngTemplateOutlet=\"\n        lockedTpl || defaultLockedTpl;\n        context: { $implicit: state }\n      \"\n    ></ng-template>\n    <ng-template #defaultLockedTpl>\n      <div\n        [id]=\"id + '-input'\"\n        class=\"nggv-field--locked\"\n        [attr.name]=\"name\"\n        [attr.value]=\"state\"\n        [attr.role]=\"role\"\n      >\n        <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n        <ng-container *ngIf=\"state\">\n          {{ state | nggvInputMaskFormat: dateInputMask }}\n        </ng-container>\n      </div>\n    </ng-template>\n  </ng-container>\n\n  <!-- INPUT WRAPPER -->\n  <ng-container *ngIf=\"!locked\">\n    <div\n      class=\"field-wrap\"\n      [class.nggv-field--error]=\"invalid\"\n      *ngIf=\"showInput$ | async\"\n    >\n      <!-- INPUT FIELD -->\n      <input\n        #input\n        [id]=\"id + '-input'\"\n        class=\"nggv-field-date\"\n        type=\"text\"\n        autocomplete=\"off\"\n        [attr.name]=\"name\"\n        [attr.required]=\"required || null\"\n        [disabled]=\"disabled\"\n        [readOnly]=\"readonly\"\n        [attr.role]=\"role\"\n        [attr.placeholder]=\"placeholder\"\n        [attr.aria-label]=\"description\"\n        [nggvInputMask]=\"dateInputMask\"\n        [value]=\"state\"\n        title=\"\"\n        (change)=\"onValueChange($event.target)\"\n        (focus)=\"onFocus($event)\"\n        (blur)=\"onBlur($event)\"\n      />\n\n      <button\n        aria-label=\"toggle calendar\"\n        #toggleCalendarButton\n        class=\"nggv-button-date\"\n        type=\"button\"\n        data-thook=\"toggle-calendar-button\"\n        (click)=\"toggleDatepicker()\"\n        [disabled]=\"disabled\"\n      >\n        @if (size === 'small') {\n          <gds-icon-calendar *nggCoreElement size=\"16px\"></gds-icon-calendar>\n        }\n\n        @if (size === 'large') {\n          <gds-icon-calendar *nggCoreElement size=\"20px\"></gds-icon-calendar>\n        }\n      </button>\n    </div>\n\n    <!-- DATEPICKER -->\n    <div class=\"nggv-datepicker\" *ngIf=\"shown\">\n      <nggv-datepicker\n        #input\n        [type]=\"type\"\n        [disableDates]=\"disableDates\"\n        [disableWeekDays]=\"disableWeekDays\"\n        [selected]=\"state\"\n        [locale]=\"locale\"\n        [minCalendarRows]=\"minRows\"\n        [firstDayOfWeek]=\"firstDayOfWeek\"\n        [firstValid]=\"firstValid\"\n        [lastValid]=\"lastValid\"\n        [closingTime]=\"closingTime\"\n        [dynamicPosition]=\"dynamicPosition\"\n        [size]=\"size\"\n        (ngvDateChange)=\"onDateChange($event)\"\n      >\n        <ng-content></ng-content>\n      </nggv-datepicker>\n    </div>\n\n    <!-- ERRORS -->\n    <ng-container\n      *ngIf=\"\n        invalid &&\n        (error || ngControl?.invalid) &&\n        (!errorList || !errorList.length)\n      \"\n    >\n      <label\n        class=\"gds-field-notice gds-field-notice--error\"\n        [attr.for]=\"id + '-input'\"\n      >\n        <span class=\"error-item\">\n          <span class=\"error-item--icon\">\n            <gds-icon-triangle-exclamation\n              *nggCoreElement\n              [solid]=\"true\"\n              size=\"16px\"\n            ></gds-icon-triangle-exclamation>\n          </span>\n          <span\n            *ngIf=\"error; else errorsRef\"\n            class=\"error-item--text\"\n            [attr.data-thook]=\"thook + '-errorlabel'\"\n            >{{ error }}</span\n          >\n          <ng-template #errorsRef>\n            <span\n              *ngIf=\"firstError as error\"\n              class=\"error-item--text\"\n              [attr.data-thook]=\"thook + '-errorlabel'\"\n            >\n              {{ t('error.field' + error?.code, error?.params) }}\n            </span>\n          </ng-template>\n        </span>\n      </label>\n    </ng-container>\n    <ng-container *ngFor=\"let error of errorList ?? []\">\n      <label\n        class=\"gds-field-notice gds-field-notice--error\"\n        [attr.for]=\"id + '-input'\"\n        *ngIf=\"invalid && error\"\n      >\n        <span class=\"error-item\">\n          <span class=\"error-item--icon\">\n            <gds-icon-triangle-exclamation\n              *nggCoreElement\n              [solid]=\"true\"\n              size=\"16px\"\n            ></gds-icon-triangle-exclamation>\n          </span>\n          <span\n            class=\"error-item--text\"\n            [attr.data-thook]=\"thook + '-errorlabel'\"\n            >{{ error }}</span\n          >\n        </span>\n      </label>\n    </ng-container>\n  </ng-container>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms'\nimport { TranslocoModule } from '@jsverse/transloco'\n\nimport { NggCoreWrapperModule } from '@sebgroup/green-angular/src/lib/shared'\nimport { NggvInputMaskModule } from '@sebgroup/green-angular/src/v-angular/input-mask'\nimport { CalendarControlComponent } from './components/calendar-control/calendar-control.component'\nimport { CalendarComponent } from './components/calendar/calendar.component'\nimport { DateInputComponent } from './components/date-input/date-input.component'\nimport { DatepickerComponent } from './components/datepicker/datepicker.component'\nimport { CalendarDateDirective } from './directives/calendar-date.directive'\nimport { DateThookPipe } from './pipes/date-thook.pipe'\nimport { IsDisabledPipe } from './pipes/is-disabled.pipe'\nimport { MatchesPipe } from './pipes/matches.pipe'\n\n@NgModule({\n  declarations: [\n    CalendarComponent,\n    CalendarDateDirective,\n    IsDisabledPipe,\n    DateThookPipe,\n    CalendarControlComponent,\n    DatepickerComponent,\n    DateInputComponent,\n    MatchesPipe,\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    TranslocoModule,\n    NggvInputMaskModule,\n    NggCoreWrapperModule,\n  ],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  exports: [DateInputComponent, DatepickerComponent],\n})\nexport class NggvDatepickerModule {}\n","/*\n * Public API Surface of date-picker\n */\nexport * from './date-control-value-accessor/date-control-value-accessor.component'\nexport * from './components/calendar/calendar.component'\nexport * from './components/calendar-control/calendar-control.component'\nexport * from './components/date-input/date-input.component'\nexport * from './components/datepicker/datepicker.component'\nexport * from './directives/calendar-date.directive'\nexport * from './pipes/is-disabled.pipe'\nexport * from './pipes/matches.pipe'\nexport * from './models/dates'\nexport * from './datepicker.models'\nexport * from './datepicker.globals'\nexport * from './datepicker.module'\nexport * from './datepicker.utils'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.CalendarDateDirective","i3.IsDisabledPipe","i4.DateThookPipe","i5.MatchesPipe","i2","i2.CalendarComponent","i3.CalendarControlComponent","i3","i5","i6.DatepickerComponent"],"mappings":"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Y;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,EAAE,EAAE,YAAY;AAChB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,OAAO,EAAE,YAAY;AACrB,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA,YAAY,EAAE,YAAY;AAC1B,IAAA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"}