Time Field
Features
- Full keyboard navigation
- Can be controlled or uncontrolled
- Focus is fully managed
- Localization support
- Highly composable
- Accessible by default
Preface
The component depends on the @internationalized/date package, which solves a lot of the problems that come with working with dates and times in JavaScript.
We highly recommend reading through the documentation for the package to get a solid feel for how it works, and you'll need to install it in your project to use the date-related components.
Installation
Install the date package.
$ npm add @internationalized/date
Install the component from your command line.
$ npm add reka-ui
Anatomy
Import all parts and piece them together.
<script setup>
import {
TimeFieldInput,
TimeFieldRoot,
} from 'reka-ui'
</script>
<template>
<TimeFieldRoot>
<TimeFieldInput />
</TimeFieldRoot>
</template>
API Reference
Root
Contains all the parts of a time field
Prop | Default | Type |
---|---|---|
as | 'div' | AsTag | Component The element or component this component should render as. Can be overwrite by |
asChild | boolean Change the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | |
defaultPlaceholder | TimeValue The default placeholder date | |
defaultValue | TimeValue The default value for the calendar | |
dir | 'ltr' | 'rtl' The reading direction of the time field when applicable. | |
disabled | false | boolean Whether or not the time field is disabled |
granularity | 'hour' | 'minute' | 'second' The granularity to use for formatting times. Defaults to minute if a Time is provided, otherwise defaults to minute. The field will render segments for each part of the date up to and including the specified granularity | |
hideTimeZone | boolean Whether or not to hide the time zone segment of the field | |
hourCycle | 12 | 24 The hour cycle used for formatting times. Defaults to the local preference | |
id | string Id of the element | |
locale | string The locale to use for formatting dates | |
maxValue | TimeValue The maximum date that can be selected | |
minValue | TimeValue The minimum date that can be selected | |
modelValue | TimeValue The controlled checked state of the field. Can be bound as | |
name | string The name of the field. Submitted with its owning form as part of a name/value pair. | |
placeholder | TimeValue The placeholder date, which is used to determine what time to display when no time is selected. This updates as the user navigates the field | |
readonly | false | boolean Whether or not the time field is readonly |
required | boolean When |
Emit | Payload |
---|---|
update:modelValue | [date: TimeValue] Event handler called whenever the model value changes |
update:placeholder | [date: TimeValue] Event handler called whenever the placeholder value changes |
Slots (default) | Payload |
---|---|
modelValue | TimeValue | undefined The current time of the field |
segments | { part: SegmentPart; value: string; }[] The time field segment contents |
isInvalid | boolean Value if the input is invalid |
Methods | Type |
---|---|
setFocusedElement | (el: HTMLElement) => void Helper to set the focused element inside the DateField |
Data Attribute | Value |
---|---|
[data-readonly] | Present when readonly |
[data-disabled] | Present when disabled |
[data-invalid] | Present when invalid |
Input
Contains the time field segments
Prop | Default | Type |
---|---|---|
as | 'div' | AsTag | Component The element or component this component should render as. Can be overwrite by |
asChild | boolean Change the default rendered element for the one passed as a child, merging their props and behavior. Read our Composition guide for more details. | |
part* | 'day' | 'month' | 'year' | 'hour' | 'minute' | 'second' | 'dayPeriod' | 'literal' | 'timeZoneName' The part of the date to render |
Data Attribute | Value |
---|---|
[data-disabled] | Present when disabled |
[data-invalid] | Present when invalid |
[data-placeholder] | Present when no value is set |
Accessibility
Keyboard Interactions
Key | Description |
---|---|
Tab | When focus moves onto the time field, focuses the first segment. |
ArrowLeftArrowRight |
Navigates between the time field segments.
|
ArrowUpArrowDown | Increments/changes the value of the segment. |
0-9 |
When the focus is on a numeric TimeFieldInput , it types in the number and focuses the next segment if the next input would result in an invalid value.
|
Backspace | Deletes a digit from the focused numeric segments. |
AP | When the focus is on the day period, it sets it to AM or PM. |