import { SyntheticEvent } from 'react';
import type { FormMessage } from '@instructure/ui-form-field/v11_6';
import type { InteractionType } from '@instructure/ui-react-utils';
import type { Moment } from '@instructure/ui-i18n';
import type { Renderable } from '@instructure/shared-types';
type DateTimeInputProps = {
/**
* The label over the composite `DateTimeInput` component
**/
description: React.ReactNode;
/**
* The label over the DateInput
**/
dateRenderLabel: Renderable;
/**
* The screen reader label for the calendar navigation header's prev month
* button
*/
prevMonthLabel: string;
/**
* The screen reader label for the calendar navigation header's next month
* button
*/
nextMonthLabel: string;
/**
* HTML placeholder text to display when the date input has no value.
* This should be hint text, not a label replacement.
**/
datePlaceholder?: string;
/**
* HTML placeholder text to display when the time input has no value.
* This should be hint text, not a label replacement.
**/
timePlaceholder?: string;
/**
* The format of the date shown in the `DateInput` when a date is selected.
* Valid formats are compatible with
* [Moment formats](https://momentjs.com/docs/#/displaying/format/),
* including localized formats.
*
* If omitted, it will use 'LL' which is a localized date with full month,
* e.g. "August 6, 2014"
**/
dateFormat?: string;
/**
* The label over the time input
**/
timeRenderLabel: Renderable;
/**
* The number of minutes to increment by when generating the allowable time options.
*/
timeStep?: 5 | 10 | 15 | 20 | 30 | 60;
/**
* The format of the time shown in the `TimeSelect` when a time is selected.
* Valid formats are compatible with
* [Moment formats](https://momentjs.com/docs/#/displaying/format/),
* including localized formats.
*
* If omitted, defers to the underlying `TimeSelect`'s default.
**/
timeFormat?: string;
/**
* A standard language identifier.
*
* See [Moment.js](https://momentjs.com/timezone/docs/#/using-timezones/parsing-in-zone/) for
* more details.
*
* This property can also be set via a context property and if both are set
* then the component property takes precedence over the context property.
*
* The web browser's locale will be used if no value is set via a component
* property or a context property.
**/
locale?: string;
/**
* A timezone identifier in the format: *Area/Location*
*
* See [List of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for the list
* of possible options.
*
* This property can also be set via a context property and if both are set
* then the component property takes precedence over the context property.
*
* The web browser's timezone will be used if no value is set via a component
* property or a context property.
**/
timezone?: string;
/**
* The message shown to the user when the data is invalid.
* If a string, shown to the user anytime the input is invalid.
*
* If a function, receives a single parameter:
* - *rawDateValue*: the string entered as a date by the user.
*
* Currently, times must be selected from a list, it can never be incorrect,
* Though `invalidDateTimeMessage()` will be called if the user selects a time without
* setting the date.
**/
invalidDateTimeMessage: string | ((rawDateValue: string) => string);
/**
* Toggles whether to show built-in messages (the date/time, or the
* `invalidDateTimeMessage`). Even when set to `false` the component will
* show user supplied messages by the `messages` prop.
* @default true
*/
showMessages?: boolean;
/**
* Extra message(s) to be displayed.
*/
messages?: FormMessage[];
/**
* This format of the composite date-time when displayed in messages.
* Valid formats are defined in the
* [Moment docs](https://momentjs.com/docs/#/displaying/format/)
**/
messageFormat?: string;
/**
* The layout of this component.
* Vertically stacked, horizontally arranged in 2 columns, or inline (default).
* See [FormFieldGroup](FormFieldGroup) for details.
**/
layout?: 'stacked' | 'columns' | 'inline';
/**
* Controls the spacing between the inputs when they are in a vertical layout.
**/
rowSpacing?: 'none' | 'small' | 'medium' | 'large';
/**
* Controls the spacing between the inputs when they are in a horizontal layout.
**/
colSpacing?: 'none' | 'small' | 'medium' | 'large';
/**
* An ISO 8601 formatted date string representing the current date-time
* (must be accompanied by an onChange prop).
**/
value?: string;
/**
* An ISO 8601 formatted date string to use if `value` isn't provided.
**/
defaultValue?: string;
/**
* An array of labels containing the name of each day of the week. The visible
* portion of the label should be abbreviated (no longer than three characters).
* Note that screen readers will read this content preceding each date as the
* `` is navigated. Consider using
* [AccessibleContent](AccessibleContent) with the `alt` prop containing the
* full day name for assistive technologies and the children containing the
* abbreviation. ex. `[Mon, ...]`
*
* You must render set the starting day of the week to the one specified by
* the current locale (e.g. Sunday in the US, Monday in Germany),
* dates are already displayed this way.
*
* By default it will render accessible, localized, abbreviated weekdays
* with week starts according to the current locale.
*/
renderWeekdayLabels?: (React.ReactNode | ((...args: any[]) => React.ReactNode))[];
/**
* Specifies if the input is required (its passed down to the native DOM
* elements). If its `true` then an empty input will produce an error message
* (`invalidDateTimeMessage`)
*/
isRequired?: boolean;
/**
* Specifies if interaction with the input is enabled, disabled, or readonly.
* When "disabled", the input changes visibly to indicate that it cannot
* receive user interactions. When "readonly" the input still cannot receive
* user interactions but it keeps the same styles as if it were enabled.
*/
interaction?: InteractionType;
/**
* Called when the date-time value has changed.
* The passed in parameters are:
* - *event*: The triggering event (which may be from the underlying
* `DateInput` or `TimeSelect`)
* - *isoValue*: The new date value in ISO8601 format, undefined if its invalid
**/
onChange?: (event: SyntheticEvent, isoValue?: string) => void;
/**
* The HTML `input` element where the date is entered.
**/
dateInputRef?: (el: HTMLInputElement | null) => void;
/**
* The HTML `input` element where the time is entered.
**/
timeInputRef?: (el: HTMLInputElement | null) => void;
/**
* onBlur event handler for when focus leaves DateTimeInput.
* Does not fire when focus moves between DateInput and TimeSelect within the
* component
*/
onBlur?: (e: SyntheticEvent) => void;
disabledDates?: string[] | ((isoDateToCheck: string) => boolean);
/**
* Error message shown to the user if they enter a date that is disabled.
* If not specified the component will show the `invalidDateTimeMessage`.
*/
disabledDateTimeMessage?: string | ((rawDateValue: string) => string);
/**
* Whether to allow the user to enter non-step divisible values in the time
* input field. Note that even if this is set to false one can enter non-step
* divisible values programmatically. The user will need to enter the value
* exactly (except for lower/uppercase) as specified by the `timeFormat` prop
* for it to be accepted.
* Default is `undefined` which equals to `false`
*/
allowNonStepInput?: boolean;
/**
* The default time to be prefilled if a day is selected. The time input has to be empty for this to be applied.
* An error is thrown if the time format is not HH:MM.
*/
initialTimeForNewDate?: string;
/**
* Used for getting the internal reset function of DateTimeInput. If that
* function is called, the component will reset to its default inner state.
* The callback function will be called in componentDidMount
* NOTE: this won't call onChange, so you have to reset the value manually when calling reset
*/
reset?: (reset: () => void) => void;
/**
* Screen reader label appended to the date label when the day is selected.
* Used to announce the selected state to assistive technologies.
*/
selectedLabel?: string;
};
type DateTimeInputState = {
iso?: Moment;
dateInputTextChanged: boolean;
calendarSelectedDate?: Moment;
renderedDate: Moment;
dateInputText: string;
timeSelectValue?: string;
message?: FormMessage;
isShowingCalendar?: boolean;
};
type PropKeys = keyof DateTimeInputProps;
type AllowedPropKeys = Readonly>;
declare const allowedProps: AllowedPropKeys;
export type { DateTimeInputProps, DateTimeInputState };
export { allowedProps };
//# sourceMappingURL=props.d.ts.map