{"version":3,"file":"view.mjs","sources":["../../../../../../src/components/va-date-picker/hooks/view.ts"],"sourcesContent":["import { computed, ref } from 'vue'\n\nimport { DatePickerView, DatePickerViewProp, DatePickerModelValue } from '../types'\nimport { isDate } from '../../../utils/is-date'\n\nconst JANUARY_MONTH_INDEX = 0\nconst DECEMBER_MONTH_INDEX = 11\n\nconst addMonth = (view: DatePickerView) => {\n  if (view.month === DECEMBER_MONTH_INDEX) {\n    return { ...view, year: view.year + 1, month: JANUARY_MONTH_INDEX }\n  } else {\n    return { ...view, month: view.month + 1 }\n  }\n}\n\nconst subMonth = (view: DatePickerView) => {\n  if (view.month === JANUARY_MONTH_INDEX) {\n    return { ...view, year: view.year - 1, month: DECEMBER_MONTH_INDEX }\n  } else {\n    return { ...view, month: view.month - 1 }\n  }\n}\n\nconst getDefaultDate = (modelValue: DatePickerModelValue): Date => {\n  if (isDate(modelValue)) { return modelValue }\n  if (isDate((modelValue as any)?.start)) { return (modelValue as any).start }\n  if (Array.isArray(modelValue) && isDate(modelValue[0])) { return modelValue[0] }\n\n  return new Date()\n}\n\nexport const useView = (\n  props: { [key: string]: any, 'view'?: DatePickerViewProp },\n  emit: (event: any | 'update:view', newValue: DatePickerViewProp) => any,\n  defaultOverride?: DatePickerViewProp,\n) => {\n  const defaultDate = getDefaultDate(props.modelValue)\n  const defaultView: DatePickerView = {\n    type: 'day',\n    year: defaultDate.getFullYear(),\n    month: defaultDate.getMonth(),\n    ...defaultOverride,\n  }\n\n  const statefulView = ref(defaultView)\n\n  const syncView = computed<DatePickerView>({\n    get () {\n      // Merge default view and user view prop\n      return { ...statefulView.value, ...props.view }\n    },\n    set (view: DatePickerView) {\n      statefulView.value = view\n\n      emit('update:view', view)\n    },\n  })\n\n  const next = () => {\n    if (syncView.value.type === 'day') {\n      syncView.value = addMonth(syncView.value)\n    } else if (syncView.value.type === 'month') {\n      syncView.value = { ...syncView.value, year: syncView.value.year + 1 }\n    }\n  }\n\n  const prev = () => {\n    if (syncView.value.type === 'day') {\n      syncView.value = subMonth(syncView.value)\n    } else if (syncView.value.type === 'month') {\n      syncView.value = { ...syncView.value, year: syncView.value.year - 1 }\n    }\n  }\n\n  return {\n    syncView,\n    next,\n    prev,\n  }\n}\n"],"names":[],"mappings":";;AAKA,MAAM,sBAAsB;AAC5B,MAAM,uBAAuB;AAE7B,MAAM,WAAW,CAAC,SAAyB;AACrC,MAAA,KAAK,UAAU,sBAAsB;AAChC,WAAA,EAAE,GAAG,MAAM,MAAM,KAAK,OAAO,GAAG,OAAO;EAAoB,OAC7D;AACL,WAAO,EAAE,GAAG,MAAM,OAAO,KAAK,QAAQ;EACxC;AACF;AAEA,MAAM,WAAW,CAAC,SAAyB;AACrC,MAAA,KAAK,UAAU,qBAAqB;AAC/B,WAAA,EAAE,GAAG,MAAM,MAAM,KAAK,OAAO,GAAG,OAAO;EAAqB,OAC9D;AACL,WAAO,EAAE,GAAG,MAAM,OAAO,KAAK,QAAQ;EACxC;AACF;AAEA,MAAM,iBAAiB,CAAC,eAA2C;AAC7D,MAAA,OAAO,UAAU,GAAG;AAAS,WAAA;AAAA,EAAW;AACxC,MAAA,OAAQ,yCAAoB,KAAK,GAAG;AAAE,WAAQ,WAAmB;AAAA,EAAM;AACvE,MAAA,MAAM,QAAQ,UAAU,KAAK,OAAO,WAAW,CAAC,CAAC,GAAG;AAAE,WAAO,WAAW,CAAC;AAAA,EAAE;AAE/E,6BAAW,KAAK;AAClB;AAEO,MAAM,UAAU,CACrB,OACA,MACA,oBACG;AACG,QAAA,cAAc,eAAe,MAAM,UAAU;AACnD,QAAM,cAA8B;AAAA,IAClC,MAAM;AAAA,IACN,MAAM,YAAY,YAAY;AAAA,IAC9B,OAAO,YAAY,SAAS;AAAA,IAC5B,GAAG;AAAA,EAAA;AAGC,QAAA,eAAe,IAAI,WAAW;AAEpC,QAAM,WAAW,SAAyB;AAAA,IACxC,MAAO;AAEL,aAAO,EAAE,GAAG,aAAa,OAAO,GAAG,MAAM,KAAK;AAAA,IAChD;AAAA,IACA,IAAK,MAAsB;AACzB,mBAAa,QAAQ;AAErB,WAAK,eAAe,IAAI;AAAA,IAC1B;AAAA,EAAA,CACD;AAED,QAAM,OAAO,MAAM;AACb,QAAA,SAAS,MAAM,SAAS,OAAO;AACxB,eAAA,QAAQ,SAAS,SAAS,KAAK;AAAA,IAC/B,WAAA,SAAS,MAAM,SAAS,SAAS;AACjC,eAAA,QAAQ,EAAE,GAAG,SAAS,OAAO,MAAM,SAAS,MAAM,OAAO;IACpE;AAAA,EAAA;AAGF,QAAM,OAAO,MAAM;AACb,QAAA,SAAS,MAAM,SAAS,OAAO;AACxB,eAAA,QAAQ,SAAS,SAAS,KAAK;AAAA,IAC/B,WAAA,SAAS,MAAM,SAAS,SAAS;AACjC,eAAA,QAAQ,EAAE,GAAG,SAAS,OAAO,MAAM,SAAS,MAAM,OAAO;IACpE;AAAA,EAAA;AAGK,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}