reka-ui
Version:
Vue port for Radix UI Primitives.
33 lines (26 loc) • 1.41 kB
text/typescript
/*
* Implementation ported from https://github.com/melt-ui/melt-ui/blob/develop/src/lib/builders/date-field/_internal/helpers.ts
*/
import type { DateSegmentPart, EditableSegmentPart, SegmentPart, TimeSegmentPart } from './types'
export const DATE_SEGMENT_PARTS = ['day', 'month', 'year'] as const
export const TIME_SEGMENT_PARTS = ['hour', 'minute', 'second', 'dayPeriod'] as const
export const NON_EDITABLE_SEGMENT_PARTS = ['literal', 'timeZoneName'] as const
export const EDITABLE_SEGMENT_PARTS = [...DATE_SEGMENT_PARTS, ...TIME_SEGMENT_PARTS] as const
export const EDITABLE_TIME_SEGMENT_PARTS = [...TIME_SEGMENT_PARTS] as const
export const ALL_SEGMENT_PARTS = [
...EDITABLE_SEGMENT_PARTS,
...NON_EDITABLE_SEGMENT_PARTS,
] as const
export const ALL_EXCEPT_LITERAL_PARTS = ALL_SEGMENT_PARTS.filter(part => part !== 'literal')
export function isDateSegmentPart(part: unknown): part is DateSegmentPart {
return DATE_SEGMENT_PARTS.includes(part as DateSegmentPart)
}
export function isTimeSegmentPart(part: unknown): part is TimeSegmentPart {
return TIME_SEGMENT_PARTS.includes(part as TimeSegmentPart)
}
export function isSegmentPart(part: string): part is EditableSegmentPart {
return EDITABLE_SEGMENT_PARTS.includes(part as EditableSegmentPart)
}
export function isAnySegmentPart(part: unknown): part is SegmentPart {
return ALL_SEGMENT_PARTS.includes(part as EditableSegmentPart)
}