Date Range Field
Allows users to input a range of dates within a designated field.
Heads up!
Before diving into this component, it's important to understand how dates/times work in Bits UI. Please read the Dates documentation to learn more!
Overview
The DateRangeField
component combines two Date Field components to create a date range field. Check out the Date Field component documentation for information on how to customize this component.
Structure
Managing Placeholder State
Bits UI offers several approaches to manage and synchronize the component's placeholder state, catering to different levels of control and integration needs.
1. Two-Way Binding
For seamless state synchronization, use Svelte's bind:placeholder
directive. This method automatically keeps your local state in sync with the component's internal state.
Key Benefits
- Simplifies state management
- Automatically updates
myPlaceholder
when the internal state changes - Allows external control (e.g., changing the placeholder via a separate button/programmatically)
2. Change Handler
For more granular control or to perform additional logic on state changes, use the onPlaceholderChange
prop. This approach is useful when you need to execute custom logic alongside state updates.
Use Cases
- Implementing custom behaviors on placeholder change
- Integrating with external state management solutions
- Triggering side effects (e.g., logging, data fetching)
3. Fully Controlled
For complete control over the component's placeholder state, use the controlledPlaceholder
prop. This approach requires you to manually manage the state, giving you full control over when and how the component responds to change events.
To implement controlled state:
- Set the
controlledPlaceholder
prop totrue
on theDateRangeField.Root
component. - Provide a
placeholder
prop toDateRangeField.Root
, which should be a variable holding the current state. - Implement an
onPlaceholderChange
handler to update the state when the internal state changes.
When to Use
- Implementing complex logic
- Coordinating multiple UI elements
- Debugging state-related issues
Note
While powerful, fully controlled state should be used judiciously as it increases complexity and can cause unexpected behaviors if not handled carefully.
For more in-depth information on controlled components and advanced state management techniques, refer to our Controlled State documentation.
Managing Value State
Bits UI offers several approaches to manage and synchronize the component's value state, catering to different levels of control and integration needs.
1. Two-Way Binding
For seamless state synchronization, use Svelte's bind:value
directive. This method automatically keeps your local state in sync with the component's internal state.
Key Benefits
- Simplifies state management
- Automatically updates
myValue
when the internal state changes - Allows external control (e.g., changing the value via a separate button/programmatically)
2. Change Handler
For more granular control or to perform additional logic on state changes, use the onValueChange
prop. This approach is useful when you need to execute custom logic alongside state updates.
Use Cases
- Implementing custom behaviors on value change
- Integrating with external state management solutions
- Triggering side effects (e.g., logging, data fetching)
3. Fully Controlled
For complete control over the component's value state, use the controlledValue
prop. This approach requires you to manually manage the state, giving you full control over when and how the component responds to change events.
To implement controlled state:
- Set the
controlledValue
prop totrue
on theDateRangeField.Root
component. - Provide a
value
prop toDateRangeField.Root
, which should be a variable holding the current state. - Implement an
onValueChange
handler to update the state when the internal state changes.
When to Use
- Implementing complex logic
- Coordinating multiple UI elements
- Debugging state-related issues
Note
While powerful, fully controlled state should be used judiciously as it increases complexity and can cause unexpected behaviors if not handled carefully.
For more in-depth information on controlled components and advanced state management techniques, refer to our Controlled State documentation.
API Reference
The root date field component.
Property | Type | Description |
---|---|---|
value $bindable | DateRange | The selected date range. Default: undefined |
onValueChange | function | A function that is called when the selected date changes. Default: undefined |
controlledValue | boolean | Whether or not the Default: false |
placeholder $bindable | DateValue | The placeholder date, which is used to determine what date to start the segments from when no value exists. Default: undefined |
onPlaceholderChange | function | A function that is called when the placeholder date changes. Default: undefined |
controlledPlaceholder | boolean | Whether or not the Default: false |
errorMessageId | string | The Default: undefined |
validate | function | A function that returns whether or not a date is unavailable. Default: undefined |
onInvalid | function | A callback fired when the date field's value is invalid. Default: undefined |
minValue | DateValue | The minimum valid date that can be entered. Default: undefined |
maxValue | DateValue | The maximum valid date that can be entered. Default: undefined |
granularity | enum | The granularity to use for formatting the field. Defaults to Default: undefined |
hideTimeZone | boolean | Whether or not to hide the time zone segment of the field. Default: false |
hourCycle | enum | The hour cycle to use for formatting times. Defaults to the locale preference Default: undefined |
locale | string | The locale to use for formatting dates. Default: 'en-US' |
disabled | boolean | Whether or not the accordion is disabled. Default: false |
readonly | boolean | Whether or not the field is readonly. Default: false |
readonlySegments | EditableSegmentPart[] | An array of segments that should be readonly, which prevent user input on them. Default: undefined |
required | boolean | Whether or not the date field is required. Default: false |
onStartValueChange | function | A function that is called when the start date changes. Default: undefined |
onEndValueChange | function | A function that is called when the end date changes. Default: undefined |
ref $bindable | HTMLDivElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See Child Snippet docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-date-range-field-root | '' | Present on the root element. |
The container for the segments of the date field.
Property | Type | Description |
---|---|---|
type required | enum | The type of field to render (start or end). Default: undefined |
name | string | The name of the date field used for form submission. If provided, a hidden input element will be rendered alongside the date field. Default: undefined |
ref $bindable | HTMLDivElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See Child Snippet docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-invalid | '' | Present on the element when the field is invalid. |
data-disabled | '' | Present on the element when the field is disabled. |
data-date-field-input | '' | Present on the element. |
A segment of the date field.
Property | Type | Description |
---|---|---|
part required | SegmentPart | The part of the date to render. Default: undefined |
ref $bindable | HTMLSpanElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See Child Snippet docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-invalid | '' | Present on the element when the field is invalid |
data-disabled | '' | Present on the element when the field is disabled |
data-segment | enum | The type of segment the element represents. |
data-date-field-segment | '' | Present on the element. |
The label for the date field.
Property | Type | Description |
---|---|---|
ref $bindable | HTMLSpanElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See Child Snippet docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-invalid | '' | Present on the element when the field is invalid |
data-date-field-label | '' | Present on the element. |