{"version":3,"file":"date.mjs","names":["useLocale","inject","watch","mergeDeep","propsFactory","VuetifyDateAdapter","DateAdapterSymbol","Symbol","for","createDate","options","adapter","locale","af","bg","ca","ckb","cs","de","el","en","et","fa","fi","hr","hu","he","id","it","ja","ko","lv","lt","nl","no","pl","pt","ro","ru","sk","sl","srCyrl","srLatn","sv","th","tr","az","uk","vi","zhHans","zhHant","makeDateProps","displayDate","type","Object","default","Date","hideAdjacentMonths","Boolean","modelValue","useDate","date","Error","instance","current","value","newLocale","toIso","toJsDate","getFullYear","getMonth","getDate","getMondayOfFirstWeekOfYear","year","getWeek","d1w1","tv","diffTime","Math","abs","getTime","diffDays","ceil","floor"],"sources":["../../../src/labs/date/date.ts"],"sourcesContent":["// Composables\nimport { useLocale } from '@/composables/locale'\n\n// Utilities\nimport { inject, watch } from 'vue'\nimport { mergeDeep, propsFactory } from '@/util'\n\n// Adapters\nimport { VuetifyDateAdapter } from './adapters/vuetify'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { DateAdapter } from './DateAdapter'\n\nexport interface DateInstance<T> extends DateAdapter<T> {\n  locale?: any\n}\n\nexport type InternalDateOptions<T = any> = {\n  adapter: (new (options: { locale: any }) => DateInstance<T>) | DateInstance<T>\n  formats?: Record<string, string>\n  locale: Record<string, any>\n}\n\nexport type DateOptions<T = any> = Partial<InternalDateOptions<T>>\n\nexport const DateAdapterSymbol: InjectionKey<InternalDateOptions> = Symbol.for('vuetify:date-adapter')\n\nexport interface DateProps {\n  displayDate: any\n  hideAdjacentMonths: boolean\n  modelValue: readonly any[]\n}\n\nexport function createDate (options?: DateOptions) {\n  return mergeDeep({\n    adapter: VuetifyDateAdapter,\n    locale: {\n      af: 'af-ZA',\n      // ar: '', # not the same value for all variants\n      bg: 'bg-BG',\n      ca: 'ca-ES',\n      ckb: '',\n      cs: '',\n      de: 'de-DE',\n      el: 'el-GR',\n      en: 'en-US',\n      // es: '', # not the same value for all variants\n      et: 'et-EE',\n      fa: 'fa-IR',\n      fi: 'fi-FI',\n      // fr: '', #not the same value for all variants\n      hr: 'hr-HR',\n      hu: 'hu-HU',\n      he: 'he-IL',\n      id: 'id-ID',\n      it: 'it-IT',\n      ja: 'ja-JP',\n      ko: 'ko-KR',\n      lv: 'lv-LV',\n      lt: 'lt-LT',\n      nl: 'nl-NL',\n      no: 'nn-NO',\n      pl: 'pl-PL',\n      pt: 'pt-PT',\n      ro: 'ro-RO',\n      ru: 'ru-RU',\n      sk: 'sk-SK',\n      sl: 'sl-SI',\n      srCyrl: 'sr-SP',\n      srLatn: 'sr-SP',\n      sv: 'sv-SE',\n      th: 'th-TH',\n      tr: 'tr-TR',\n      az: 'az-AZ',\n      uk: 'uk-UA',\n      vi: 'vi-VN',\n      zhHans: 'zh-CN',\n      zhHant: 'zh-TW',\n    },\n  }, options)\n}\n\n// TODO: revisit this after it starts being implemented\nexport const makeDateProps = propsFactory({\n  displayDate: {\n    type: Object as PropType<Date>,\n    default: new Date(),\n  },\n  hideAdjacentMonths: Boolean,\n  modelValue: {\n    type: null as unknown as PropType<readonly any[]>,\n    default: () => [],\n  },\n}, 'date')\n\nexport function useDate () {\n  const date = inject(DateAdapterSymbol)\n  const locale = useLocale()\n\n  if (!date) throw new Error('[Vuetify] Could not find injected date')\n\n  const instance = typeof date.adapter === 'function'\n    // eslint-disable-next-line new-cap\n    ? new date.adapter({ locale: date.locale?.[locale.current.value] ?? locale.current.value })\n    : date.adapter\n\n  watch(locale.current, value => {\n    const newLocale = date.locale ? date.locale[value] : value\n    instance.locale = newLocale ?? instance.locale\n  })\n\n  return instance\n}\n\nexport function toIso (adapter: DateAdapter<any>, value: any) {\n  const date = adapter.toJsDate(value)\n  return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`\n}\n\nfunction getMondayOfFirstWeekOfYear (year: number) {\n  return new Date(year, 0, 1)\n}\n\n// https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024\nexport function getWeek (adapter: DateAdapter<any>, value: any) {\n  const date = adapter.toJsDate(value)\n  let year = date.getFullYear()\n  let d1w1 = getMondayOfFirstWeekOfYear(year)\n\n  if (date < d1w1) {\n    year = year - 1\n    d1w1 = getMondayOfFirstWeekOfYear(year)\n  } else {\n    const tv = getMondayOfFirstWeekOfYear(year + 1)\n    if (date >= tv) {\n      year = year + 1\n      d1w1 = tv\n    }\n  }\n\n  const diffTime = Math.abs(date.getTime() - d1w1.getTime())\n  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))\n\n  return Math.floor(diffDays / 7) + 1\n}\n"],"mappings":"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"}