{"version":3,"file":"model-value.mjs","sources":["../../../../../../src/components/va-date-input/hooks/model-value.ts"],"sourcesContent":["import { Ref, computed } from 'vue'\nimport { DateInputDate, DateInputModelValue, DateInputRange, DateInputValue } from '../types'\nimport { formatDateToTheSameStandardFormat, parseDate } from '../utils/parse-date'\nimport { isNil } from '../../../utils/isNilValue'\n\nexport const isRange = (date: DateInputModelValue): date is DateInputRange<DateInputDate> => {\n  if (date === null) { return false }\n\n  return typeof date === 'object' && ('start' in date || 'end' in date)\n}\n\nexport const isMultiple = (date: DateInputModelValue): date is DateInputDate[] => {\n  if (date === null) { return false }\n\n  return Array.isArray(date)\n}\n\nexport const isSingleDate = (date: DateInputModelValue): date is DateInputDate => {\n  if (date === null) { return false }\n\n  return typeof date === 'string' || typeof date === 'number' || date instanceof Date\n}\n\nexport const useDateInputModelValue = (\n  modelValue: Ref<DateInputModelValue>,\n  mode: Ref<'single' | 'multiple' | 'range' | 'auto'>,\n  parseModelValue: (date: string) => DateInputModelValue,\n  formatModelValue: (date: DateInputModelValue) => string,\n  formatModelValueSingleDate?: (date: Date) => string,\n) => {\n  const syncFormat = (original: DateInputDate | null | undefined, target: Date) => {\n    if (formatModelValueSingleDate) {\n      return formatModelValueSingleDate(target)\n    }\n\n    if (typeof original === 'string') {\n      const standardFormat = formatDateToTheSameStandardFormat(target, original)\n\n      if (standardFormat) { return standardFormat }\n\n      return formatModelValue(target)\n    }\n\n    if (typeof original === 'number') {\n      return target.getTime()\n    }\n\n    return target\n  }\n\n  const normalizeSingleDate = (value: DateInputDate): Date => {\n    if (value instanceof Date) {\n      return value\n    }\n\n    return new Date(value)\n  }\n\n  const dateValue = computed(() => {\n    if (modelValue.value === null || modelValue.value === undefined) {\n      return null\n    }\n\n    if (typeof modelValue.value === 'string') {\n      return parseModelValue(modelValue.value)\n    }\n\n    if (typeof modelValue.value === 'number') {\n      return new Date(modelValue.value)\n    }\n\n    return modelValue.value\n  })\n\n  const normalized = computed({\n    get: () => {\n      if (dateValue.value === null || dateValue.value === undefined) {\n        return null\n      }\n\n      if (isMultiple(dateValue.value)) {\n        return dateValue.value.map(normalizeSingleDate)\n      }\n\n      if (isRange(dateValue.value)) {\n        const { start, end } = dateValue.value\n\n        return {\n          start: start ? normalizeSingleDate(start) : null,\n          end: end ? normalizeSingleDate(end) : null,\n        }\n      }\n\n      return normalizeSingleDate(dateValue.value)\n    },\n    set (newValue: DateInputValue) {\n      if (newValue === null || newValue === undefined) {\n        modelValue.value = newValue\n        return\n      }\n\n      if (isMultiple(newValue) && (isMultiple(modelValue.value) || isNil(modelValue.value))) {\n        const originalValue = modelValue.value\n\n        modelValue.value = newValue\n          .map((v, index) => syncFormat((originalValue)?.[index] || (originalValue)?.[0], v))\n        return\n      }\n\n      if (isRange(newValue) && (isRange(modelValue.value) || isNil(modelValue.value))) {\n        const { start, end } = newValue\n\n        modelValue.value = {\n          start: start ? syncFormat(modelValue.value?.start, start) : null,\n          // Sync end date only if start date is specified\n          end: end ? syncFormat(modelValue.value?.start, end) : null,\n        }\n\n        return\n      }\n\n      if (isSingleDate(newValue) && (isSingleDate(modelValue.value) || isNil(modelValue.value))) {\n        modelValue.value = syncFormat(modelValue.value, newValue)\n        return\n      }\n\n      throw new Error('Input date is not the same as date from props')\n    },\n  })\n\n  const text = computed({\n    get: () => {\n      if (normalized.value === null || normalized.value === undefined) {\n        return ''\n      }\n\n      return formatModelValue(normalized.value)\n    },\n    set: (value: string) => {\n      modelValue.value = parseModelValue(value)\n    },\n  })\n\n  return {\n    text,\n    normalized,\n  }\n}\n"],"names":[],"mappings":"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"}