{"version":3,"file":"matheo-datepicker-luxon.mjs","sources":["../../../../libs/datepicker/luxon/luxon-date-adapter.ts","../../../../libs/datepicker/luxon/luxon-date-formats.ts","../../../../libs/datepicker/luxon/index.ts","../../../../libs/datepicker/luxon/matheo-datepicker-luxon.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { Inject, Injectable, Optional, InjectionToken } from '@angular/core';\nimport { MAT_DATE_LOCALE } from '@angular/material/core';\nimport { DateAdapter } from '@matheo/datepicker/core';\nimport {\n  DateTime as LuxonDateTime,\n  Info as LuxonInfo,\n  DateTimeOptions as LuxonDateTimeOptions,\n} from 'luxon';\n\n/** Configurable options for {@see LuxonDateAdapter}. */\nexport interface MatLuxonDateAdapterOptions {\n  /**\n   * Turns the use of utc dates on or off.\n   * Changing this will change how Angular Material components like DatePicker output dates.\n   * {@default false}\n   */\n  useUtc: boolean;\n\n  /**\n   * Luxon does not have support for retrieving the first day of the week.\n   * This allows supplying a custom function to override it.\n   * Remember that you need to return 0 = Sunday, 1 = Monday\n   */\n  firstDayOfWeek?: (locale: string) => number;\n}\n\n/** InjectionToken for LuxonDateAdapter to configure options. */\nexport const MAT_LUXON_DATE_ADAPTER_OPTIONS = new InjectionToken<MatLuxonDateAdapterOptions>(\n  'MAT_LUXON_DATE_ADAPTER_OPTIONS',\n  {\n    providedIn: 'root',\n    factory: MAT_LUXON_DATE_ADAPTER_OPTIONS_FACTORY,\n  }\n);\n\n/** @docs-private */\nexport function MAT_LUXON_DATE_ADAPTER_OPTIONS_FACTORY(): MatLuxonDateAdapterOptions {\n  return {\n    useUtc: false,\n  };\n}\n\n/** The default hour names to use if Intl API is not available. */\nconst DEFAULT_HOUR_NAMES = range(24, (i) => (i === 0 ? '00' : String(i)));\n\n/** The default minute names to use if Intl API is not available. */\nconst DEFAULT_MINUTE_NAMES = range(60, String);\n\n/** Creates an array and fills it with values. */\nfunction range<T>(length: number, valueFunction: (index: number) => T): T[] {\n  const valuesArray = Array(length);\n  for (let i = 0; i < length; i++) {\n    valuesArray[i] = valueFunction(i);\n  }\n  return valuesArray;\n}\n\n/** Adapts Luxon Dates for use with Angular Material. */\n@Injectable()\nexport class LuxonDateAdapter extends DateAdapter<LuxonDateTime> {\n  private _useUTC: boolean;\n  private _getFirstDayOfWeek?: MatLuxonDateAdapterOptions['firstDayOfWeek'];\n\n  constructor(\n    @Optional() @Inject(MAT_DATE_LOCALE) dateLocale: string,\n    @Optional()\n    @Inject(MAT_LUXON_DATE_ADAPTER_OPTIONS)\n    options?: MatLuxonDateAdapterOptions,\n  ) {\n    super();\n    this._useUTC = options ? !!options.useUtc : false;\n    this._getFirstDayOfWeek = options?.firstDayOfWeek;\n    this.setLocale(dateLocale || LuxonDateTime.local().locale);\n  }\n\n  setLocale(locale: string) {\n    super.setLocale(locale);\n  }\n\n  getYear(date: LuxonDateTime): number {\n    return date.year;\n  }\n\n  getMonth(date: LuxonDateTime): number {\n    // Luxon works with 1-indexed months whereas our code expects 0-indexed.\n    return date.month - 1;\n  }\n\n  getDate(date: LuxonDateTime): number {\n    return date.day;\n  }\n\n  getHours(date: LuxonDateTime): number {\n    return date.hour;\n  }\n\n  setHours(date: LuxonDateTime, hour: number): LuxonDateTime {\n    return date.set({ hour });\n  }\n\n  getMinutes(date: LuxonDateTime): number {\n    return date.minute;\n  }\n\n  setMinutes(date: LuxonDateTime, minute: number): LuxonDateTime {\n    return date.set({ minute });\n  }\n\n  getSeconds(date: LuxonDateTime): number {\n    return date.second;\n  }\n\n  setSeconds(date: LuxonDateTime, second: number, ms?: number): LuxonDateTime {\n    return date.set({ second, millisecond: ms });\n  }\n\n  getMilliseconds(date: LuxonDateTime): number {\n    return date.millisecond;\n  }\n\n  getDayOfWeek(date: LuxonDateTime): number {\n    return date.weekday === 7 ? 0 : date.weekday;\n  }\n\n  getMonthNames(style: 'long' | 'short' | 'narrow'): string[] {\n    return LuxonInfo.months(style, { locale: this.locale });\n  }\n\n  getDateNames(): string[] {\n    // At the time of writing, Luxon doesn't offer similar\n    // functionality so we have to fall back to the Intl API.\n    const dtf = new Intl.DateTimeFormat(this.locale, {\n      day: 'numeric',\n      timeZone: 'utc',\n    });\n\n    // Format a UTC date in order to avoid DST issues.\n    return range(31, (i) => {\n      return dtf.format(LuxonDateTime.utc(2017, 1, i + 1).toJSDate());\n    });\n  }\n\n  getHourNames(): string[] {\n    return DEFAULT_HOUR_NAMES;\n  }\n\n  getMinuteNames(): string[] {\n    return DEFAULT_MINUTE_NAMES;\n  }\n\n  getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n    // Note that we shift the array once, because Luxon returns Monday as the\n    // first day of the week, whereas our logic assumes that it's Sunday. See:\n    // https://moment.github.io/luxon/api-docs/index.html#infoweekdays\n    const days = LuxonInfo.weekdays(style, { locale: this.locale });\n    days.unshift(days.pop()!);\n    return days;\n  }\n\n  getYearName(date: LuxonDateTime): string {\n    return date.toFormat('yyyy');\n  }\n\n  getFirstDayOfWeek(): number {\n    // Luxon doesn't have support for getting the first day of the week.\n    if (this._getFirstDayOfWeek) {\n      return this._getFirstDayOfWeek(this.locale);\n    }\n    return 0;\n  }\n\n  getNumDaysInMonth(date: LuxonDateTime): number {\n    return date.daysInMonth;\n  }\n\n  clone(date: LuxonDateTime): LuxonDateTime {\n    return LuxonDateTime.fromObject(date.toObject({ includeConfig: true }));\n  }\n\n  createDate(\n    year: number,\n    month: number,\n    date: number,\n    hours: number = 0,\n    minutes: number = 0,\n    seconds: number = 0,\n    ms: number = 0\n  ): LuxonDateTime {\n    if (month < 0 || month > 11) {\n      throw Error(\n        `Invalid month index \"${month}\". Month index has to be between 0 and 11.`\n      );\n    }\n\n    if (date < 1) {\n      throw Error(`Invalid date \"${date}\". Date has to be greater than 0.`);\n    }\n\n    // Luxon uses 1-indexed months so we need to add one to the month.\n    const result = this._useUTC\n      ? LuxonDateTime.utc(year, month + 1, date, hours, minutes, seconds, ms)\n      : LuxonDateTime.local(year, month + 1, date, hours, minutes, seconds, ms);\n\n    if (!this.isValid(result)) {\n      throw Error(`Invalid date \"${date}\". Reason: \"${result.invalidReason}\".`);\n    }\n\n    return result.setLocale(this.locale);\n  }\n\n  today(): LuxonDateTime {\n    return (this._useUTC ? LuxonDateTime.utc() : LuxonDateTime.local()).setLocale(\n      this.locale\n    );\n  }\n\n  parse(value: any, parseFormat: string | string[]): LuxonDateTime | null {\n    const options: LuxonDateTimeOptions = this._getOptions();\n\n    if (typeof value == 'string' && value.length > 0) {\n      const iso8601Date = LuxonDateTime.fromISO(value, options);\n\n      if (this.isValid(iso8601Date)) {\n        return iso8601Date;\n      }\n\n      const parseFormats = Array.isArray(parseFormat)\n        ? parseFormat\n        : [parseFormat];\n      for (const format of parseFormats) {\n        const fromFormat = LuxonDateTime.fromFormat(value, format, options);\n\n        if (this.isValid(fromFormat)) {\n          return fromFormat;\n        }\n      }\n\n      return this.invalid();\n    } else if (typeof value === 'number') {\n      return LuxonDateTime.fromMillis(value, options);\n    } else if (value instanceof Date) {\n      return LuxonDateTime.fromJSDate(value, options);\n    } else if (value instanceof LuxonDateTime) {\n      return LuxonDateTime.fromMillis(value.toMillis(), options);\n    }\n\n    return null;\n  }\n\n  format(date: LuxonDateTime, displayFormat: string): string {\n    if (!this.isValid(date)) {\n      throw Error('LuxonDateAdapter: Cannot format invalid date.');\n    }\n\n    let result = date.setLocale(this.locale);\n    if (this._useUTC) {\n      result = result.toUTC();\n    }\n    return result.toFormat(displayFormat);\n  }\n\n  addCalendarYears(date: LuxonDateTime, years: number): LuxonDateTime {\n    return date.plus({ years }).setLocale(this.locale);\n  }\n\n  addCalendarMonths(date: LuxonDateTime, months: number): LuxonDateTime {\n    return date.plus({ months }).setLocale(this.locale);\n  }\n\n  addCalendarDays(date: LuxonDateTime, days: number): LuxonDateTime {\n    return date.plus({ days }).setLocale(this.locale);\n  }\n\n  addCalendarHours(date: LuxonDateTime, hours: number): LuxonDateTime {\n    return date.plus({ hours });\n  }\n\n  addCalendarMinutes(date: LuxonDateTime, minutes: number): LuxonDateTime {\n    return date.plus({ minutes });\n  }\n\n  addCalendarSeconds(date: LuxonDateTime, seconds: number, ms?: number): LuxonDateTime {\n    return date.plus({ seconds, milliseconds: ms });\n  }\n\n  toIso8601(date: LuxonDateTime): string {\n    return date.toISO();\n  }\n\n  /**\n   * Returns the given value if given a valid Luxon or null. Deserializes valid ISO 8601 strings\n   * (https://www.ietf.org/rfc/rfc3339.txt) and valid Date objects into valid DateTime and empty\n   * string into null. Returns an invalid date for all other values.\n   */\n  deserialize(value: any): LuxonDateTime | null {\n    const options = this._getOptions();\n    let date;\n    if (value instanceof Date) {\n      date = LuxonDateTime.fromJSDate(value, options);\n    }\n    if (typeof value === 'string') {\n      if (!value) {\n        return null;\n      }\n      date = LuxonDateTime.fromISO(value, options);\n    }\n    if (date && this.isValid(date)) {\n      return date;\n    }\n    return super.deserialize(value);\n  }\n\n  isDateInstance(obj: any): boolean {\n    return obj instanceof LuxonDateTime;\n  }\n\n  isValid(date: LuxonDateTime): boolean {\n    return date.isValid;\n  }\n\n  invalid(): LuxonDateTime {\n    return LuxonDateTime.invalid('Invalid Luxon DateTime object.');\n  }\n\n  /** Gets the options that should be used when constructing a new `DateTime` object. */\n  private _getOptions(): LuxonDateTimeOptions {\n    return {\n      zone: this._useUTC ? 'utc' : undefined,\n      locale: this.locale,\n    };\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { MatDateFormats } from '@matheo/datepicker/core';\n\nexport const MAT_LUXON_DATE_FORMATS: MatDateFormats = {\n  parse: {\n    dateInput: 'D',\n    datetimeInput: 'f',\n    timeInput: 'h:mm',\n    monthInput: 'LLL',\n    yearInput: 'yyyy',\n  },\n  display: {\n    dateInput: 'D',\n    datetimeInput: 'f',\n    timeInput: 'T',\n    monthInput: 'LLL yyyy',\n    yearInput: 'yyyy',\n    dateA11yLabel: 'DD',\n    monthLabel: 'LLL',\n    monthDayLabel: 'LLL d',\n    monthDayA11yLabel: 'LLLL d',\n    monthYearLabel: 'LLL yyyy',\n    monthYearA11yLabel: 'LLLL yyyy',\n    timeLabel: 'T',\n  },\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { NgModule } from '@angular/core';\nimport {\n  DateAdapter as MaterialDateAdapter,\n  MAT_DATE_FORMATS,\n  MAT_DATE_LOCALE,\n} from '@angular/material/core';\nimport { DateAdapter } from '@matheo/datepicker/core';\nimport {\n  MAT_LUXON_DATE_ADAPTER_OPTIONS,\n  LuxonDateAdapter,\n} from './luxon-date-adapter';\nimport { MAT_LUXON_DATE_FORMATS } from './luxon-date-formats';\n\nexport * from './luxon-date-adapter';\nexport * from './luxon-date-formats';\n\n@NgModule({\n  providers: [\n    {\n      provide: DateAdapter,\n      useClass: LuxonDateAdapter,\n      deps: [MAT_DATE_LOCALE, MAT_LUXON_DATE_ADAPTER_OPTIONS],\n    },\n    {\n      provide: MaterialDateAdapter,\n      useClass: LuxonDateAdapter,\n      deps: [MAT_DATE_LOCALE, MAT_LUXON_DATE_ADAPTER_OPTIONS],\n    },\n  ],\n})\nexport class LuxonDateModule {}\n\n@NgModule({\n  imports: [LuxonDateModule],\n  providers: [{ provide: MAT_DATE_FORMATS, useValue: MAT_LUXON_DATE_FORMATS }],\n})\nexport class MatLuxonDateModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["LuxonDateTime","LuxonInfo","MaterialDateAdapter"],"mappings":";;;;;;AAAA;;;;;;;AAkCA;MACa,8BAA8B,GAAG,IAAI,cAAc,CAC9D,gCAAgC,EAChC;IACE,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,sCAAsC;CAChD,EACD;AAEF;SACgB,sCAAsC;IACpD,OAAO;QACL,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AAED;AACA,MAAM,kBAAkB,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E;AACA,MAAM,oBAAoB,GAAG,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAE/C;AACA,SAAS,KAAK,CAAI,MAAc,EAAE,aAAmC;IACnE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;KACnC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;MAEa,yBAAyB,WAA0B;IAI9D,YACuC,UAAkB,EAGvD,OAAoC;QAEpC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,UAAU,IAAIA,QAAa,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;KAC5D;IAED,SAAS,CAAC,MAAc;QACtB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACzB;IAED,OAAO,CAAC,IAAmB;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAED,QAAQ,CAAC,IAAmB;;QAE1B,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KACvB;IAED,OAAO,CAAC,IAAmB;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC;KACjB;IAED,QAAQ,CAAC,IAAmB;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAED,QAAQ,CAAC,IAAmB,EAAE,IAAY;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAC3B;IAED,UAAU,CAAC,IAAmB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,UAAU,CAAC,IAAmB,EAAE,MAAc;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;KAC7B;IAED,UAAU,CAAC,IAAmB;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,UAAU,CAAC,IAAmB,EAAE,MAAc,EAAE,EAAW;QACzD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;KAC9C;IAED,eAAe,CAAC,IAAmB;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,YAAY,CAAC,IAAmB;QAC9B,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;KAC9C;IAED,aAAa,CAAC,KAAkC;QAC9C,OAAOC,IAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACzD;IAED,YAAY;;;QAGV,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE;YAC/C,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;;QAGH,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACjB,OAAO,GAAG,CAAC,MAAM,CAACD,QAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SACjE,CAAC,CAAC;KACJ;IAED,YAAY;QACV,OAAO,kBAAkB,CAAC;KAC3B;IAED,cAAc;QACZ,OAAO,oBAAoB,CAAC;KAC7B;IAED,iBAAiB,CAAC,KAAkC;;;;QAIlD,MAAM,IAAI,GAAGC,IAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAG,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;KACb;IAED,WAAW,CAAC,IAAmB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC9B;IAED,iBAAiB;;QAEf,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC7C;QACD,OAAO,CAAC,CAAC;KACV;IAED,iBAAiB,CAAC,IAAmB;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,KAAK,CAAC,IAAmB;QACvB,OAAOD,QAAa,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;KACzE;IAED,UAAU,CACR,IAAY,EACZ,KAAa,EACb,IAAY,EACZ,QAAgB,CAAC,EACjB,UAAkB,CAAC,EACnB,UAAkB,CAAC,EACnB,KAAa,CAAC;QAEd,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;YAC3B,MAAM,KAAK,CACT,wBAAwB,KAAK,4CAA4C,CAC1E,CAAC;SACH;QAED,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,MAAM,KAAK,CAAC,iBAAiB,IAAI,mCAAmC,CAAC,CAAC;SACvE;;QAGD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;cACvBA,QAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;cACrEA,QAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAE5E,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACzB,MAAM,KAAK,CAAC,iBAAiB,IAAI,eAAe,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;SAC3E;QAED,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACtC;IAED,KAAK;QACH,OAAO,CAAC,IAAI,CAAC,OAAO,GAAGA,QAAa,CAAC,GAAG,EAAE,GAAGA,QAAa,CAAC,KAAK,EAAE,EAAE,SAAS,CAC3E,IAAI,CAAC,MAAM,CACZ,CAAC;KACH;IAED,KAAK,CAAC,KAAU,EAAE,WAA8B;QAC9C,MAAM,OAAO,GAAyB,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzD,IAAI,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAChD,MAAM,WAAW,GAAGA,QAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE1D,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC7B,OAAO,WAAW,CAAC;aACpB;YAED,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;kBAC3C,WAAW;kBACX,CAAC,WAAW,CAAC,CAAC;YAClB,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE;gBACjC,MAAM,UAAU,GAAGA,QAAa,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEpE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;oBAC5B,OAAO,UAAU,CAAC;iBACnB;aACF;YAED,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;SACvB;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,OAAOA,QAAa,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACjD;aAAM,IAAI,KAAK,YAAY,IAAI,EAAE;YAChC,OAAOA,QAAa,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACjD;aAAM,IAAI,KAAK,YAAYA,QAAa,EAAE;YACzC,OAAOA,QAAa,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;SAC5D;QAED,OAAO,IAAI,CAAC;KACb;IAED,MAAM,CAAC,IAAmB,EAAE,aAAqB;QAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,MAAM,KAAK,CAAC,+CAA+C,CAAC,CAAC;SAC9D;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;SACzB;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;KACvC;IAED,gBAAgB,CAAC,IAAmB,EAAE,KAAa;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACpD;IAED,iBAAiB,CAAC,IAAmB,EAAE,MAAc;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACrD;IAED,eAAe,CAAC,IAAmB,EAAE,IAAY;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACnD;IAED,gBAAgB,CAAC,IAAmB,EAAE,KAAa;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KAC7B;IAED,kBAAkB,CAAC,IAAmB,EAAE,OAAe;QACrD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;KAC/B;IAED,kBAAkB,CAAC,IAAmB,EAAE,OAAe,EAAE,EAAW;QAClE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;KACjD;IAED,SAAS,CAAC,IAAmB;QAC3B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;KACrB;;;;;;IAOD,WAAW,CAAC,KAAU;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC;QACT,IAAI,KAAK,YAAY,IAAI,EAAE;YACzB,IAAI,GAAGA,QAAa,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACjD;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,KAAK,EAAE;gBACV,OAAO,IAAI,CAAC;aACb;YACD,IAAI,GAAGA,QAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SAC9C;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACjC;IAED,cAAc,CAAC,GAAQ;QACrB,OAAO,GAAG,YAAYA,QAAa,CAAC;KACrC;IAED,OAAO,CAAC,IAAmB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAED,OAAO;QACL,OAAOA,QAAa,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;KAChE;;IAGO,WAAW;QACjB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,GAAG,SAAS;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;KACH;;mJA/QU,gBAAgB,kBAKL,eAAe,6BAE3B,8BAA8B;uJAP7B,gBAAgB;2FAAhB,gBAAgB;kBAD5B,UAAU;;;8BAMN,QAAQ;;8BAAI,MAAM;+BAAC,eAAe;;8BAClC,QAAQ;;8BACR,MAAM;+BAAC,8BAA8B;;;;AC1E1C;;;;;;;MAUa,sBAAsB,GAAmB;IACpD,KAAK,EAAE;QACL,SAAS,EAAE,GAAG;QACd,aAAa,EAAE,GAAG;QAClB,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,MAAM;KAClB;IACD,OAAO,EAAE;QACP,SAAS,EAAE,GAAG;QACd,aAAa,EAAE,GAAG;QAClB,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,MAAM;QACjB,aAAa,EAAE,IAAI;QACnB,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,OAAO;QACtB,iBAAiB,EAAE,QAAQ;QAC3B,cAAc,EAAE,UAAU;QAC1B,kBAAkB,EAAE,WAAW;QAC/B,SAAS,EAAE,GAAG;KACf;;;AC/BH;;;;;;;MAsCa,eAAe;;kJAAf,eAAe;mJAAf,eAAe;mJAAf,eAAe,aAbf;QACT;YACE,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,CAAC,eAAe,EAAE,8BAA8B,CAAC;SACxD;QACD;YACE,OAAO,EAAEE,aAAmB;YAC5B,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,CAAC,eAAe,EAAE,8BAA8B,CAAC;SACxD;KACF;2FAEU,eAAe;kBAd3B,QAAQ;mBAAC;oBACR,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,WAAW;4BACpB,QAAQ,EAAE,gBAAgB;4BAC1B,IAAI,EAAE,CAAC,eAAe,EAAE,8BAA8B,CAAC;yBACxD;wBACD;4BACE,OAAO,EAAEA,aAAmB;4BAC5B,QAAQ,EAAE,gBAAgB;4BAC1B,IAAI,EAAE,CAAC,eAAe,EAAE,8BAA8B,CAAC;yBACxD;qBACF;iBACF;;MAOY,kBAAkB;;qJAAlB,kBAAkB;sJAAlB,kBAAkB,YANlB,eAAe;sJAMf,kBAAkB,aAFlB,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC,YADnE,CAAC,eAAe,CAAC;2FAGf,kBAAkB;kBAJ9B,QAAQ;mBAAC;oBACR,OAAO,EAAE,CAAC,eAAe,CAAC;oBAC1B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC;iBAC7E;;;AC3CD;;;;;;"}