Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions packages/react-aria-components/src/DateField.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,12 @@ export interface DateFieldRenderProps {
* Whether the date field is disabled.
* @selector [data-disabled]
*/
isDisabled: boolean
isDisabled: boolean,
/**
* Whether the date field is read only.
* @selector [data-readonly]
*/
isReadOnly: boolean
}
export interface DateFieldProps<T extends DateValue> extends Omit<AriaDateFieldProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<DateFieldRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
export interface TimeFieldProps<T extends TimeValue> extends Omit<AriaTimeFieldProps<T>, 'label' | 'description' | 'errorMessage' | 'validationState' | 'validationBehavior'>, RACValidation, RenderProps<DateFieldRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {}
Expand Down Expand Up @@ -81,7 +86,8 @@ export const DateField = /*#__PURE__*/ (forwardRef as forwardRefType)(function D
values: {
state,
isInvalid: state.isInvalid,
isDisabled: state.isDisabled
isDisabled: state.isDisabled,
isReadOnly: state.isReadOnly
},
defaultClassName: 'react-aria-DateField'
});
Expand Down Expand Up @@ -110,7 +116,8 @@ export const DateField = /*#__PURE__*/ (forwardRef as forwardRefType)(function D
ref={ref}
slot={props.slot || undefined}
data-invalid={state.isInvalid || undefined}
data-disabled={state.isDisabled || undefined} />
data-disabled={state.isDisabled || undefined}
data-readonly={state.isReadOnly || undefined} />
<HiddenDateInput
autoComplete={props.autoComplete}
name={props.name}
Expand Down Expand Up @@ -152,7 +159,8 @@ export const TimeField = /*#__PURE__*/ (forwardRef as forwardRefType)(function T
values: {
state,
isInvalid: state.isInvalid,
isDisabled: state.isDisabled
isDisabled: state.isDisabled,
isReadOnly: state.isReadOnly
},
defaultClassName: 'react-aria-TimeField'
});
Expand Down Expand Up @@ -181,7 +189,8 @@ export const TimeField = /*#__PURE__*/ (forwardRef as forwardRefType)(function T
ref={ref}
slot={props.slot || undefined}
data-invalid={state.isInvalid || undefined}
data-disabled={state.isDisabled || undefined} />
data-disabled={state.isDisabled || undefined}
data-readonly={state.isReadOnly || undefined} />
</Provider>
);
});
Expand Down
13 changes: 11 additions & 2 deletions packages/react-aria-components/src/DatePicker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ export interface DatePickerRenderProps {
* @selector [data-disabled]
*/
isDisabled: boolean,
/**
* Whether the date picker is read only.
* @selector [data-readonly]
*/
isReadOnly: boolean,
/**
* Whether the date picker is invalid.
* @selector [data-invalid]
Expand Down Expand Up @@ -130,7 +135,8 @@ export const DatePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(function
isFocusVisible,
isDisabled: props.isDisabled || false,
isInvalid: state.isInvalid,
isOpen: state.isOpen
isOpen: state.isOpen,
isReadOnly: props.isReadOnly || false
},
defaultClassName: 'react-aria-DatePicker'
});
Expand Down Expand Up @@ -172,6 +178,7 @@ export const DatePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(function
data-invalid={state.isInvalid || undefined}
data-focus-visible={isFocusVisible || undefined}
data-disabled={props.isDisabled || undefined}
data-readonly={props.isReadOnly || undefined}
data-open={state.isOpen || undefined} />
<HiddenDateInput
autoComplete={props.autoComplete}
Expand Down Expand Up @@ -238,7 +245,8 @@ export const DateRangePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(func
isFocusVisible,
isDisabled: props.isDisabled || false,
isInvalid: state.isInvalid,
isOpen: state.isOpen
isOpen: state.isOpen,
isReadOnly: props.isReadOnly || false
},
defaultClassName: 'react-aria-DateRangePicker'
});
Expand Down Expand Up @@ -285,6 +293,7 @@ export const DateRangePicker = /*#__PURE__*/ (forwardRef as forwardRefType)(func
data-invalid={state.isInvalid || undefined}
data-focus-visible={isFocusVisible || undefined}
data-disabled={props.isDisabled || undefined}
data-readonly={props.isReadOnly || undefined}
data-open={state.isOpen || undefined} />
</Provider>
);
Expand Down
46 changes: 37 additions & 9 deletions packages/react-aria-components/stories/DatePicker.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,41 @@ import './styles.css';

export default {
title: 'React Aria Components/DatePicker',
component: DatePicker
component: DatePicker,
argTypes: {
onChange: {
table: {
disable: true
}
},
granularity: {
control: 'select',
options: ['day', 'hour', 'minute', 'second']
},
isRequired: {
control: 'boolean'
},
isInvalid: {
control: 'boolean'
},
isDisabled: {
control: 'boolean'
},
isReadOnly: {
control: 'boolean'
},
validationBehavior: {
control: 'select',
options: ['native', 'aria']
}
}
} as Meta<typeof DatePicker>;

export type DatePickerStory = StoryFn<typeof DatePicker>;
export type DateRangePickerStory = StoryFn<typeof DateRangePicker>;

export const DatePickerExample: DatePickerStory = () => (
<DatePicker data-testid="date-picker-example">
export const DatePickerExample: DatePickerStory = (args) => (
<DatePicker data-testid="date-picker-example" {...args}>
<Label style={{display: 'block'}}>Date</Label>
<Group style={{display: 'inline-flex'}}>
<DateInput className={styles.field}>
Expand Down Expand Up @@ -58,8 +86,8 @@ export const DatePickerExample: DatePickerStory = () => (
</DatePicker>
);

export const DatePickerTriggerWidthExample: DatePickerStory = () => (
<DatePicker data-testid="date-picker-example">
export const DatePickerTriggerWidthExample: DatePickerStory = (args) => (
<DatePicker data-testid="date-picker-example" {...args}>
<Label style={{display: 'block'}}>Date</Label>
<Group style={{display: 'inline-flex', width: 300}}>
<DateInput className={styles.field} style={{flex: 1}}>
Expand Down Expand Up @@ -93,8 +121,8 @@ export const DatePickerTriggerWidthExample: DatePickerStory = () => (
</DatePicker>
);

export const DateRangePickerExample: DatePickerStory = () => (
<DateRangePicker data-testid="date-range-picker-example">
export const DateRangePickerExample: DateRangePickerStory = (args) => (
<DateRangePicker data-testid="date-range-picker-example" {...args}>
<Label style={{display: 'block'}}>Date</Label>
<Group style={{display: 'inline-flex'}}>
<div className={styles.field}>
Expand Down Expand Up @@ -132,8 +160,8 @@ export const DateRangePickerExample: DatePickerStory = () => (
</DateRangePicker>
);

export const DateRangePickerTriggerWidthExample: DatePickerStory = () => (
<DateRangePicker data-testid="date-range-picker-example">
export const DateRangePickerTriggerWidthExample: DateRangePickerStory = (args) => (
<DateRangePicker data-testid="date-range-picker-example" {...args}>
<Label style={{display: 'block'}}>Date</Label>
<Group style={{display: 'inline-flex', width: 300}}>
<div className={styles.field} style={{flex: 1}}>
Expand Down
4 changes: 2 additions & 2 deletions starters/docs/src/InputGroup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ export function InputGroup(props: InputGroupProps) {
{props.label && <span id={id}>{props.label}</span>}
<Group {...props} aria-labelledby={id}>
{composeRenderProps(props.children, (children, renderProps) => (
<InputContext value={{disabled: renderProps.isDisabled}}>
<InputContext.Provider value={{disabled: renderProps.isDisabled}}>
{children}
</InputContext>
</InputContext.Provider>
))}
</Group>
</div>
Expand Down
4 changes: 2 additions & 2 deletions starters/docs/src/Toolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import './Toolbar.css';

export function Toolbar(props: ToolbarProps) {
return (
<ToggleButtonGroupContext value={{orientation: props.orientation}}>
<ToggleButtonGroupContext.Provider value={{orientation: props.orientation}}>
<RACToolbar {...props} />
</ToggleButtonGroupContext>
</ToggleButtonGroupContext.Provider>
);
}
16 changes: 11 additions & 5 deletions starters/docs/stories/DisclosureGroup.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {DisclosureGroup} from '../src/DisclosureGroup';
import {Disclosure} from '../src/Disclosure';
import {Disclosure, DisclosureHeader, DisclosurePanel} from '../src/Disclosure';

import type {Meta, StoryFn} from '@storybook/react';

Expand All @@ -16,11 +16,17 @@ type Story = StoryFn<typeof DisclosureGroup>;

export const Example: Story = (args) => (
<DisclosureGroup {...args} style={{width: '400px'}}>
<Disclosure id="personal" title="Personal Information">
<p>Personal information form here.</p>
<Disclosure id="personal">
<DisclosureHeader>Personal Information</DisclosureHeader>
<DisclosurePanel>
<p>Personal information form here.</p>
</DisclosurePanel>
</Disclosure>
<Disclosure id="billing" title="Billing Address">
<p>Billing address form here.</p>
<Disclosure id="billing">
<DisclosureHeader>Billing Address</DisclosureHeader>
<DisclosurePanel>
<p>Billing address form here.</p>
</DisclosurePanel>
</Disclosure>
</DisclosureGroup>
);
Expand Down
Loading