{"version":3,"file":"calendar.mjs","names":["getWeek","useDate","useProxiedModel","computed","propsFactory","wrapInArray","makeCalendarProps","allowedDates","Array","Function","disabled","Boolean","displayValue","modelValue","month","Number","String","max","min","showAdjacentMonths","year","useCalendar","props","adapter","model","v","date","value","length","isArray","undefined","getYear","startOfYear","setYear","getMonth","setMonth","weeksInMonth","weeks","getWeekArray","days","flat","daysInMonth","lastDay","week","day","push","addDays","today","map","index","isoDate","toISO","isAdjacent","isSameMonth","isStart","isSameDay","startOfMonth","isEnd","endOfMonth","isSame","formatted","format","isDisabled","isWeekStart","isWeekEnd","isToday","isHidden","isSelected","some","localized","weekNumbers","isAfter","d"],"sources":["../../src/composables/calendar.ts"],"sourcesContent":["// Composables\nimport { getWeek, useDate } from '@/composables/date/date'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { propsFactory, wrapInArray } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\n// Types\nexport interface CalendarProps {\n  allowedDates: unknown[] | ((date: unknown) => boolean)\n  disabled: boolean\n  displayValue: unknown\n  modelValue: unknown[]\n  max: unknown\n  min: unknown\n  showAdjacentMonths?: boolean\n  month: number | string\n  year: number | string\n\n  'onUpdate:modelValue': (value: unknown[]) => void\n  'onUpdate:month': (value: number) => void\n  'onUpdate:year': (value: number) => void\n}\n\n// Composables\nexport const makeCalendarProps = propsFactory({\n  allowedDates: [Array, Function],\n  disabled: Boolean,\n  displayValue: null as any as PropType<unknown>,\n  modelValue: Array as PropType<unknown[] | undefined>,\n  month: [Number, String],\n  max: null as any as PropType<unknown>,\n  min: null as any as PropType<unknown>,\n  showAdjacentMonths: Boolean,\n  year: [Number, String],\n}, 'calendar')\n\nexport function useCalendar (props: CalendarProps) {\n  const adapter = useDate()\n  const model = useProxiedModel(\n    props,\n    'modelValue',\n    [],\n    v => wrapInArray(v),\n  )\n  const displayValue = computed(() => {\n    if (props.displayValue) return adapter.date(props.displayValue)\n    if (model.value.length > 0) return adapter.date(model.value[0])\n    if (props.min) return adapter.date(props.min)\n    if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0])\n\n    return adapter.date()\n  })\n\n  const year = useProxiedModel(\n    props,\n    'year',\n    undefined,\n    v => {\n      const value = v != null ? Number(v) : adapter.getYear(displayValue.value)\n\n      return adapter.startOfYear(adapter.setYear(adapter.date(), value))\n    },\n    v => adapter.getYear(v)\n  )\n\n  const month = useProxiedModel(\n    props,\n    'month',\n    undefined,\n    v => {\n      const value = v != null ? Number(v) : adapter.getMonth(displayValue.value)\n      const date = adapter.setYear(adapter.date(), adapter.getYear(year.value))\n\n      return adapter.setMonth(date, value)\n    },\n    v => adapter.getMonth(v)\n  )\n\n  const weeksInMonth = computed(() => {\n    const weeks = adapter.getWeekArray(month.value)\n\n    const days = weeks.flat()\n\n    // Make sure there's always 6 weeks in month (6 * 7 days)\n    // But only do it if we're not hiding adjacent months?\n    const daysInMonth = 6 * 7\n    if (days.length < daysInMonth) {\n      const lastDay = days[days.length - 1]\n\n      let week = []\n      for (let day = 1; day <= daysInMonth - days.length; day++) {\n        week.push(adapter.addDays(lastDay, day))\n\n        if (day % 7 === 0) {\n          weeks.push(week)\n          week = []\n        }\n      }\n    }\n\n    return weeks\n  })\n\n  const daysInMonth = computed(() => {\n    const days = weeksInMonth.value.flat()\n    const today = adapter.date()\n\n    return days.map((date, index) => {\n      const isoDate = adapter.toISO(date)\n      const isAdjacent = !adapter.isSameMonth(date, month.value)\n      const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value))\n      const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value))\n      const isSame = adapter.isSameDay(date, month.value)\n\n      return {\n        date,\n        isoDate,\n        formatted: adapter.format(date, 'keyboardDate'),\n        year: adapter.getYear(date),\n        month: adapter.getMonth(date),\n        isDisabled: isDisabled(date),\n        isWeekStart: index % 7 === 0,\n        isWeekEnd: index % 7 === 6,\n        isToday: adapter.isSameDay(date, today),\n        isAdjacent,\n        isHidden: isAdjacent && !props.showAdjacentMonths,\n        isStart,\n        isSelected: model.value.some(value => adapter.isSameDay(date, value)),\n        isEnd,\n        isSame,\n        localized: adapter.format(date, 'dayOfMonth'),\n      }\n    })\n  })\n\n  const weekNumbers = computed(() => {\n    return weeksInMonth.value.map(week => {\n      return week.length ? getWeek(adapter, week[0]) : null\n    })\n  })\n\n  function isDisabled (value: unknown) {\n    if (props.disabled) return true\n\n    const date = adapter.date(value)\n\n    if (props.min && adapter.isAfter(adapter.date(props.min), date)) return true\n    if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true\n\n    if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {\n      return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date))\n    }\n\n    if (typeof props.allowedDates === 'function') {\n      return !props.allowedDates(date)\n    }\n\n    return false\n  }\n\n  return {\n    displayValue,\n    daysInMonth,\n    model,\n    weeksInMonth,\n    weekNumbers,\n  }\n}\n"],"mappings":"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"}