{"version":3,"file":"parser.cjs","sources":["../../src/shared/date/parser.ts"],"sourcesContent":["import type { DateFields, DateValue } from '@internationalized/date'\nimport type { Ref } from 'vue'\nimport type { Formatter } from '@/shared'\nimport type { DateSegmentPart, Granularity, HourCycle, SegmentContentObj, SegmentPart, SegmentValueObj, TimeSegmentPart } from '@/shared/date'\nimport { isZonedDateTime, toDate } from '@/date'\nimport { DATE_SEGMENT_PARTS, EDITABLE_SEGMENT_PARTS, getOptsByGranularity, getPlaceholder, isDateSegmentPart, isSegmentPart, normalizeHourCycle, TIME_SEGMENT_PARTS } from '@/shared/date'\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\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 if (part === 'day') {\n return formatter.part(props.dateRef.set({\n [part as keyof DateFields]: value,\n /**\n * Edge case for the day field:\n *\n * 1. If the month is filled,\n * we need to ensure that the day snaps to the maximum value of that month.\n * 2. If the month is not filled,\n * we default to the month with the maximum number of days (here just using January, 31 days),\n * so that user can input any possible day.\n */\n month: segmentValues.month ?? 1,\n }), part, { hourCycle: normalizeHourCycle(props.hourCycle) })\n }\n return formatter.part(props.dateRef.set({ [part]: value }), part, {\n hourCycle: normalizeHourCycle(props.hourCycle),\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') {\n return formatter.part(props.dateRef.set({\n [part]: value,\n // Same logic as above for the day field\n month: segmentValues.month ?? 1,\n }), part)\n }\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","normalizeHourCycle","getPlaceholder","isDateSegmentPart","isSegmentPart","getOptsByGranularity","isZonedDateTime"],"mappings":"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"}