{"version":3,"file":"use-picker.mjs","sources":["../../../../../../src/components/va-date-picker/hooks/use-picker.ts"],"sourcesContent":["import { computed, ComputedRef, ref, watch } from 'vue'\n\nimport { isDatesMonthEqual, isDatesDayEqual, isDatesYearEqual, isDates, isRange, isSingleDate } from './../utils/date-utils'\nimport { useDatePickerModelValue } from './model-value-helper'\nimport { DatePickerMode, DatePickerModelValue, DatePickerType } from '../types'\n\nconst getDateEqualFunction = (type: DatePickerType) => {\n  return {\n    month: isDatesMonthEqual,\n    day: isDatesDayEqual,\n    year: isDatesYearEqual,\n  }[type]\n}\n\nexport const useDatePicker = (\n  type: DatePickerType,\n  dates: ComputedRef<Date[]>,\n  props: {\n    modelValue?: DatePickerModelValue,\n    mode: DatePickerMode,\n    readonly: boolean,\n    allowedDays?: (date: Date) => boolean,\n    allowedMonths?: (date: Date) => boolean,\n    allowedYears?: (date: Date) => boolean,\n  },\n  emit: (event: 'update:modelValue' | any, ...args: any[]) => void,\n) => {\n  const datesEqual = getDateEqualFunction(type)\n  const isAllowedDate = props.allowedDays || props.allowedMonths || props.allowedYears\n  const isDateDisabled = (date: Date) => isAllowedDate === undefined ? false : !isAllowedDate(date)\n\n  const hoveredIndex = ref(-1)\n  const hoveredValue = computed(() => dates.value[hoveredIndex.value])\n\n  const { updateModelValue } = useDatePickerModelValue(\n    props,\n    emit,\n    datesEqual,\n  )\n\n  const onClick = (date: Date) => {\n    if (props.readonly || isDateDisabled(date)) { return }\n\n    updateModelValue(date)\n    emit(`click:${type}`, date)\n  }\n\n  const isToday = (date: Date): boolean => {\n    const today = new Date()\n    return datesEqual(today, date)\n  }\n\n  const isSelected = (date: Date): boolean => {\n    if (!props.modelValue) { return false }\n\n    if (isSingleDate(props.modelValue)) {\n      return datesEqual(props.modelValue, date)\n    } else if (isDates(props.modelValue)) {\n      return !!props.modelValue.find((d) => datesEqual(d, date))\n    } else if (isRange(props.modelValue)) {\n      return datesEqual(props.modelValue.start, date) || datesEqual(props.modelValue.end, date)\n    }\n\n    return false\n  }\n\n  const isInRange = (date: Date): boolean => {\n    if (!props.modelValue) { return false }\n\n    if (!isRange(props.modelValue)) { return false }\n\n    if (props.modelValue.start && props.modelValue.end) {\n      return props.modelValue.start < date && props.modelValue.end > date\n    }\n\n    const selectedDate = props.modelValue.start || props.modelValue.end\n\n    if (selectedDate) {\n      if (!hoveredValue.value) { return false }\n\n      return selectedDate < date\n        ? (hoveredValue.value >= date)\n        : (hoveredValue.value <= date)\n    }\n\n    return false\n  }\n\n  watch(hoveredValue, (date) => { emit(`hover:${type}`, date) })\n\n  return {\n    hoveredIndex,\n    hoveredValue,\n    onClick,\n    isToday,\n    isSelected,\n    isInRange,\n  }\n}\n"],"names":[],"mappings":";;;AAMA,MAAM,uBAAuB,CAAC,SAAyB;AAC9C,SAAA;AAAA,IACL,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AACR;AAEO,MAAM,gBAAgB,CAC3B,MACA,OACA,OAQA,SACG;AACG,QAAA,aAAa,qBAAqB,IAAI;AAC5C,QAAM,gBAAgB,MAAM,eAAe,MAAM,iBAAiB,MAAM;AAClE,QAAA,iBAAiB,CAAC,SAAe,kBAAkB,SAAY,QAAQ,CAAC,cAAc,IAAI;AAE1F,QAAA,eAAe,IAAI,EAAE;AAC3B,QAAM,eAAe,SAAS,MAAM,MAAM,MAAM,aAAa,KAAK,CAAC;AAE7D,QAAA,EAAE,qBAAqB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGI,QAAA,UAAU,CAAC,SAAe;AAC9B,QAAI,MAAM,YAAY,eAAe,IAAI,GAAG;AAAE;AAAA,IAAO;AAErD,qBAAiB,IAAI;AAChB,SAAA,SAAS,IAAI,IAAI,IAAI;AAAA,EAAA;AAGtB,QAAA,UAAU,CAAC,SAAwB;AACjC,UAAA,4BAAY;AACX,WAAA,WAAW,OAAO,IAAI;AAAA,EAAA;AAGzB,QAAA,aAAa,CAAC,SAAwB;AACtC,QAAA,CAAC,MAAM,YAAY;AAAS,aAAA;AAAA,IAAM;AAElC,QAAA,aAAa,MAAM,UAAU,GAAG;AAC3B,aAAA,WAAW,MAAM,YAAY,IAAI;AAAA,IAC/B,WAAA,QAAQ,MAAM,UAAU,GAAG;AAC7B,aAAA,CAAC,CAAC,MAAM,WAAW,KAAK,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAAA,IAChD,WAAA,QAAQ,MAAM,UAAU,GAAG;AAC7B,aAAA,WAAW,MAAM,WAAW,OAAO,IAAI,KAAK,WAAW,MAAM,WAAW,KAAK,IAAI;AAAA,IAC1F;AAEO,WAAA;AAAA,EAAA;AAGH,QAAA,YAAY,CAAC,SAAwB;AACrC,QAAA,CAAC,MAAM,YAAY;AAAS,aAAA;AAAA,IAAM;AAEtC,QAAI,CAAC,QAAQ,MAAM,UAAU,GAAG;AAAS,aAAA;AAAA,IAAM;AAE/C,QAAI,MAAM,WAAW,SAAS,MAAM,WAAW,KAAK;AAClD,aAAO,MAAM,WAAW,QAAQ,QAAQ,MAAM,WAAW,MAAM;AAAA,IACjE;AAEA,UAAM,eAAe,MAAM,WAAW,SAAS,MAAM,WAAW;AAEhE,QAAI,cAAc;AACZ,UAAA,CAAC,aAAa,OAAO;AAAS,eAAA;AAAA,MAAM;AAExC,aAAO,eAAe,OACjB,aAAa,SAAS,OACtB,aAAa,SAAS;AAAA,IAC7B;AAEO,WAAA;AAAA,EAAA;AAGH,QAAA,cAAc,CAAC,SAAS;AAAO,SAAA,SAAS,IAAI,IAAI,IAAI;AAAA,EAAA,CAAG;AAEtD,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}