{"version":3,"file":"parser.cjs","sources":["../../src/shared/date/parser.ts"],"sourcesContent":["import { DATE_SEGMENT_PARTS, type DateSegmentPart, EDITABLE_SEGMENT_PARTS, type Granularity, type HourCycle, type SegmentContentObj, type SegmentPart, type SegmentValueObj, TIME_SEGMENT_PARTS, type TimeSegmentPart, getOptsByGranularity, getPlaceholder, isDateSegmentPart, isSegmentPart } from '@/shared/date'\nimport { isZonedDateTime, toDate } from '@/date'\nimport type { Formatter } from '@/shared'\nimport type { DateFields, DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\n\nconst calendarDateTimeGranularities = ['hour', 'minute', 'second']\n\ntype SyncDateSegmentValuesProps = {\n  value: DateValue\n  formatter: Formatter\n}\n\ntype SyncTimeSegmentValuesProps = {\n  value: DateValue\n  formatter: Formatter\n}\n\nexport function syncTimeSegmentValues(props: SyncTimeSegmentValuesProps) {\n  return Object.fromEntries(TIME_SEGMENT_PARTS.map((part) => {\n    if (part === 'dayPeriod')\n      return [part, props.formatter.dayPeriod(toDate(props.value))]\n    return [part, props.value[part as keyof DateValue]]\n  })) as SegmentValueObj\n}\n\nexport function syncSegmentValues(props: SyncDateSegmentValuesProps) {\n  const { formatter } = props\n\n  const dateValues = DATE_SEGMENT_PARTS.map((part) => {\n    return [part, props.value[part]]\n  })\n  if ('hour' in props.value) {\n    const timeValues = syncTimeSegmentValues({ value: props.value, formatter })\n\n    return { ...Object.fromEntries(dateValues), ...timeValues } as SegmentValueObj\n  }\n\n  return Object.fromEntries(dateValues) as SegmentValueObj\n}\n\nexport function initializeTimeSegmentValues(granularity: 'hour' | 'minute' | 'second'): SegmentValueObj {\n  return Object.fromEntries(\n    TIME_SEGMENT_PARTS.map((part) => {\n      if (part === 'dayPeriod')\n        return [part, 'AM']\n      return [part, null]\n    }).filter(([key]) => {\n      if (key === 'literal' || key === null)\n        return false\n      if (granularity === 'minute' && key === 'second')\n        return false\n      if (granularity === 'hour' && (key === 'second' || key === 'minute'))\n        return false\n      else return true\n    }),\n  )\n}\n\nexport function initializeSegmentValues(granularity: Granularity): SegmentValueObj {\n  const initialParts = EDITABLE_SEGMENT_PARTS.map((part) => {\n    if (part === 'dayPeriod')\n      return [part, 'AM']\n\n    return [part, null]\n  }).filter(([key]) => {\n    if (key === 'literal' || key === null)\n      return false\n    if (granularity === 'minute' && key === 'second')\n      return false\n    if (granularity === 'hour' && (key === 'second' || key === 'minute'))\n      return false\n    if (granularity === 'day')\n      return !calendarDateTimeGranularities.includes(key) && key !== 'dayPeriod'\n    else return true\n  })\n\n  return Object.fromEntries(initialParts)\n}\n\ntype SharedContentProps = {\n  granularity: Granularity\n  dateRef: DateValue\n  formatter: Formatter\n  hideTimeZone: boolean\n  hourCycle: HourCycle\n  isTimeValue?: boolean\n}\n\ntype CreateContentObjProps = SharedContentProps & {\n  segmentValues: SegmentValueObj\n  locale: Ref<string>\n}\n\ntype CreateContentArrProps = SharedContentProps & {\n  contentObj: SegmentContentObj\n}\n\nfunction createContentObj(props: CreateContentObjProps) {\n  const { segmentValues, formatter, locale } = props\n  function getPartContent(part: DateSegmentPart | TimeSegmentPart) {\n    if ('hour' in segmentValues) {\n      const value = segmentValues[part]\n      if (value !== null) {\n        /**\n         * Edge case for when the month field is filled and the day field snaps to the maximum value of the value of the placeholder month\n         */\n        if (part === 'day' && segmentValues.month !== null) {\n          return formatter.part(props.dateRef.set({ [part as keyof DateFields]: value, month: segmentValues.month }), part, {\n            hourCycle: props.hourCycle === 24 ? 'h23' : undefined,\n          })\n        }\n        return formatter.part(props.dateRef.set({ [part]: value }), part, {\n          hourCycle: props.hourCycle === 24 ? 'h23' : undefined,\n        })\n      }\n      else {\n        return getPlaceholder(part, '', locale.value)\n      }\n    }\n    else {\n      if (isDateSegmentPart(part)) {\n        const value = segmentValues[part]\n        if (value !== null) {\n          if (part === 'day' && segmentValues.month !== null)\n          /**\n           * As described above, same function\n           */\n            return formatter.part(props.dateRef.set({ [part]: value, month: segmentValues.month }), part)\n\n          return formatter.part(props.dateRef.set({ [part]: value }), part)\n        }\n\n        else {\n          return getPlaceholder(part, '', locale.value)\n        }\n      }\n      return ''\n    }\n  }\n\n  const content = Object.keys(segmentValues).reduce((obj, part) => {\n    if (!isSegmentPart(part))\n      return obj\n    if ('hour' in segmentValues && part === 'dayPeriod') {\n      const value = segmentValues[part]\n\n      if (value !== null)\n        obj[part] = value\n\n      else\n        obj[part] = getPlaceholder(part, 'AM', locale.value)\n    }\n    else {\n      obj[part] = getPartContent(part)\n    }\n\n    return obj\n  }, {} as SegmentContentObj)\n\n  return content\n}\n\nfunction createContentArr(props: CreateContentArrProps) {\n  const { granularity, formatter, contentObj, hideTimeZone, hourCycle, isTimeValue } = props\n  const parts = formatter.toParts(props.dateRef, getOptsByGranularity(granularity, hourCycle, isTimeValue))\n\n  const segmentContentArr = parts\n    .map((part) => {\n      const defaultParts = ['literal', 'timeZoneName', null]\n\n      if (defaultParts.includes(part.type) || !isSegmentPart(part.type)) {\n        return {\n          part: part.type,\n          value: part.value,\n        }\n      }\n\n      return {\n        part: part.type,\n        value: contentObj[part.type],\n      }\n    })\n    .filter((segment): segment is { part: SegmentPart, value: string } => {\n      if (segment.part === null || segment.value === null)\n        return false\n      if (segment.part === 'timeZoneName' && (!isZonedDateTime(props.dateRef) || hideTimeZone))\n        return false\n\n      return true\n    })\n\n  return segmentContentArr\n}\n\ntype CreateContentProps = CreateContentObjProps\n\nexport function createContent(props: CreateContentProps) {\n  const contentObj = createContentObj(props)\n\n  const contentArr = createContentArr({\n    contentObj,\n    ...props,\n  })\n\n  return {\n    obj: contentObj,\n    arr: contentArr,\n  }\n}\n"],"names":["TIME_SEGMENT_PARTS","toDate","DATE_SEGMENT_PARTS","EDITABLE_SEGMENT_PARTS","getPlaceholder","isDateSegmentPart","isSegmentPart","getOptsByGranularity","isZonedDateTime"],"mappings":"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"}