@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com's products.
272 lines • 23.8 kB
TypeScript
import * as React from "react";
import type { Props } from "./types";
export declare const FakeInput: ({ error, disabled }: Pick<Props, "error" | "disabled">) => React.JSX.Element;
/**
* @orbit-doc-start
* README
* ----------
* # InputField
*
* To implement the InputField component into your project you'll need to add the import:
*
* ```jsx
* import InputField from "@kiwicom/orbit-components/lib/InputField";
* ```
*
* After adding import to your project you can use it simply like:
*
* ```jsx
* <InputField />
* ```
*
* ## Props
*
* The table below contains all types of props available in the InputField component.
*
* | Name | Type | Default | Description |
* | :------------------- | :--------------------------------- | :-------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
* | autoComplete | `string` | | The autocomplete attribute of the input, see [this docs](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete). |
* | autoFocus | `boolean` | | The autofocus attribute of the input, see [this docs](https://www.w3schools.com/tags/att_autofocus.asp). Keep in mind that autofocus works only when Input is initially rendered. |
* | defaultValue | `string \| number` | | Specifies the default value of the InputField. To be used with uncontrolled usage. |
* | disabled | `boolean` | | If `true`, the InputField will be disabled. |
* | dataAttrs | `Object` | | Optional prop for passing `data-*` attributes to the `input` DOM element. |
* | dataTest | `string` | | Optional prop for testing purposes. |
* | error | `React.Node` | | The error to display beneath the InputField. [See Functional specs](#functional-specs) |
* | tags | `React.Node` | | Optional prop to display rendered Tag component. [See Functional specs](#functional-specs) |
* | help | `React.Node` | | The help to display beneath the InputField. |
* | label | `Translation` | | The label for the InputField. [See Functional specs](#functional-specs) |
* | id | `string` | | Set `id` attribute for input. |
* | inlineLabel | `boolean` | | If `true`, the label renders on the left side of input. |
* | inputMode | [`enum`](#enum) | | The type of data that might be entered by the user. [See more here](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode). |
* | minValue | `number` | | Specifies the minimum value for the InputField. |
* | maxValue | `number` | | Specifies the maximum value for the InputField. |
* | maxLength | `number` | | Specifies the maximum number of characters allowed. |
* | minLength | `number` | | Specifies the minimum number of characters allowed. |
* | width | `string` | `"100%"` | Specifies the width of the InputField. |
* | required | `boolean` | | If `true`, the label is displayed as required. |
* | name | `string` | | The name for the InputField. |
* | onBlur | `event => void \| Promise` | | Function for handling onBlur event. |
* | onChange | `event => void \| Promise` | | Function for handling onChange event. |
* | onFocus | `event => void \| Promise` | | Function for handling onFocus event. |
* | onKeyDown | `event => void \| Promise` | | Function for handling onKeyDown event. |
* | onKeyUp | `event => void \| Promise` | | Function for handling onKeyUp event. |
* | onMouseDown | `event => void \| Promise` | | Function for handling onMouseDown event. |
* | onMouseUp | `event => void \| Promise` | | Function for handling onMouseUp event. |
* | onSelect | `event => void \| Promise` | | Function for handling onSelect event. |
* | placeholder | `string \| (() => string))` | | The placeholder of the InputField. |
* | **prefix** | `React.Node` | | The prefix component for the InputField. |
* | readOnly | `boolean` | `false` | If `true`, the InputField is readOnly. |
* | ref | `func` | | Prop for forwarded ref of the InputField. [See Functional specs](#functional-specs) |
* | spaceAfter | `enum` | | Additional `margin-bottom` after component. |
* | suffix | `React.Node` | | The suffix component for the InputField. |
* | tabIndex | `string \| number` | | Specifies the tab order of an element. |
* | **type** | [`enum`](#enum) | `"text"` | The type of the InputField. |
* | value | `string \| number` | | Specifies the value of the InputField. To be used with controlled usage. |
* | list | `string` | | The id of the datalist element. |
* | ariaAutocomplete | `inline \| list \| both` | | The aria-autocomplete attribute of the input, see [this docs](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-autocomplete). |
* | role | `textbox \| combobox \| searchbox` | `textbox` | The role attribute of the input, see [this docs](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/textbox_role). |
* | ariaActiveDescendant | `string` | | The aria-activedescendant attribute of the input, see [this docs](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-activedescendant). |
* | ariaHasPopup | `boolean` | | The aria-haspopup attribute of the input, see [this docs](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-haspopup). |
* | ariaExpanded | `boolean` | | The aria-expanded attribute of the input, see [this docs](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded). |
* | ariaControls | `string` | | The aria-controls attribute of the input, see [this docs](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-controls). |
* | ariaLabel | `string` | | Optional prop for `aria-label` value. See `Accessibility` tab. |
* | ariaLabelledby | `string` | | Optional prop for `aria-labelledby` value. See `Accessibility` tab. |
* | ariaDescribedby | `string` | | Optional prop for `aria-describedby` value. See `Accessibility` tab. |
*
* ### enum
*
* | inputMode | type | spaceAfter |
* | :---------- | :------------- | :----------- |
* | `"numeric"` | `"text"` | `"none"` |
* | `"tel"` | `"number"` | `"smallest"` |
* | `"decimal"` | `"email"` | `"small"` |
* | `"email"` | `"password"` | `"normal"` |
* | `"url"` | `"passportid"` | `"medium"` |
* | `"search"` | | `"large"` |
* | `"text"` | | `"largest"` |
* | `"none"` |
*
* ## Functional specs
*
* - The `error` prop overwrites the `help` prop, due to higher priority.
*
* - The `help` and `error` icons overwrite the prefix when `inlineLabel` is `true`.
*
* ### Examples
*
* - Usage of `Tag` in `InputField`
*
* ```jsx
* import Tag from "@kiwicom/orbit-components/lib/Tag";
*
* <InputField
* placeholder="My placeholder"
* tags={
* <div>
* <Tag>Brno</Tag>
* <Tag>Praha</Tag>
* </div>
* }
* />;
* ```
*
*
* Accessibility
* -------------
* ## Accessibility
*
* The InputField component has been designed with accessibility in mind, providing features that enhance the experience for users of assistive technologies.
*
* ### Accessibility props
*
* The following props are available to improve the accessibility of your InputField component:
*
* | Name | Type | Description |
* | :------------------- | :------------------------------- | :-------------------------------------------------------------------------------------------------------------------------- |
* | label | `Translation` | Provides a visible label that is associated with the input field. |
* | role | `string` | Defines the role of the input element, which helps screen readers understand its purpose and behavior. |
* | ariaLabel | `string` | Adds an `aria-label` to the input, providing a description for screen readers when no visible label is present. |
* | ariaLabelledby | `string` | References the ID of an element that labels the input, establishing a relationship for screen readers. |
* | ariaDescribedby | `string` | References the ID of an element that describes the input, useful for associating additional information with the field. |
* | ariaAutocomplete | `inline \| list \| both \| none` | Indicates to screen readers whether and how the input provides autocomplete suggestions. |
* | ariaActiveDescendant | `string` | Identifies the currently active descendant in a composite widget, such as when navigating through autocomplete suggestions. |
* | ariaHasPopup | `boolean` | Indicates to screen readers that the input can trigger a popup, like a dropdown menu or dialog. |
* | ariaExpanded | `boolean` | Indicates to screen readers whether the associated popup or dropdown is currently expanded. |
* | ariaControls | `string` | Identifies the element controlled by the input, establishing a relationship for screen readers. |
*
* ### Automatic Accessibility Features
*
* The InputField component automatically handles several important ARIA attributes:
*
* - `aria-invalid`: When the `error` prop is provided, the input is automatically marked as invalid (`aria-invalid="true"`). This helps screen readers announce to users that the input contains an error.
*
* - `aria-describedby`: This attribute is automatically managed to associate `error` or `help` text with the input field:
* - When the component is not inside an InputGroup and has `error` or `help` text, a unique ID is generated (based on the input's ID) and is combined with the `ariaDescribedby` prop to ensure all descriptions are announced by screen readers.
* - When the component is inside an InputGroup, the InputGroup completely overrides any `ariaDescribedby` value that was set on the InputField. The InputGroup sets its own feedback ID as the `aria-describedby` value if there are any `error` or `help` values and the tooltip is shown.
*
* These automatic features ensure that the InputField remains accessible even without explicitly setting every ARIA attribute, while still allowing for customization when needed. See the [Examples section](#using-ariadescribedby-for-enhanced-accessibility) for detailed usage examples of `ariaDescribedby`.
*
* ### Best practices
*
* - When no visible `label` is provided, use `ariaLabel` to provide an accessible name for the input field to ensure the input's purpose is clear to screen reader users. Alternatively, you can use `ariaLabelledby` to reference the ID of an existing element that labels the input.
*
* - Always ensure that `ariaLabel` text and any text in elements referenced by `ariaLabelledby` are properly translated to match the user's language.
*
* - Don't rely solely on `placeholder` for providing instructions or label of the input.
*
* - For inputs that trigger autocomplete behavior or control other elements, use the appropriate ARIA attributes (`ariaAutocomplete`, `ariaActiveDescendant`, `ariaHasPopup`, `ariaExpanded`, `ariaControls`) to make the functionality accessible.
*
* - When using `prefix` or `suffix` elements, ensure they don't interfere with the accessibility of the input field and are properly labeled if they are interactive.
*
* ### Examples
*
* #### Basic InputField with label
*
* ```jsx
* <InputField label="Email address" placeholder="your@email.com" type="email" name="email" required />
* ```
*
* In this example, screen readers would announce "Email address, required, edit, email" when focusing on the input field.
*
* #### InputField with autocomplete
*
* ```jsx
* <InputField
* label="City"
* placeholder="Start typing..."
* role="combobox"
* ariaHasPopup={true}
* ariaExpanded={suggestionsVisible}
* ariaControls="city-suggestions"
* ariaAutocomplete="list"
* ariaActiveDescendant={activeItemId}
* />
* ```
*
* In this example, the InputField is configured as a combobox with autocomplete features. Screen readers would announce information about the combobox state, including whether suggestions are available and which suggestion is currently active.
*
* #### Using ariaDescribedby for enhanced accessibility
*
* The `ariaDescribedby` prop allows you to specify an `aria-describedby` attribute for the InputField component. This attribute links the component to additional descriptive text, enhancing accessibility by providing supplementary information to screen readers.
*
* ```jsx
* <InputField label="Password" type="password" ariaDescribedby="password-requirements" />
* <p id="password-requirements" style={{ display: "none", visibility: "hidden" }}>
* Password must be at least 8 characters long and include at least one uppercase letter and one number.
* </p>
* ```
*
* When using the `error` or `help` props, the component automatically manages the `aria-describedby` attribute:
*
* ```jsx
* <InputField label="Username" error="This username is already taken" />
* ```
*
* In this example, the error message is automatically associated with the input field via `aria-describedby`.
*
* If you provide both an `ariaDescribedby` prop and use `error` or `help`, the component automatically combines them, ensuring that screen readers announce all descriptive content:
*
* ```jsx
* <InputField label="Email" error="Invalid email format" ariaDescribedby="email-hint" />
* <p id="email-hint" style={{ display: "none", visibility: "hidden" }}>
* We'll never share your email with anyone else.
* </p>
* ```
*
* In this example, both the "email-hint" text and the error message will be announced by screen readers. The text from `ariaDescribedby` will be announced first, followed by the text from `error`.
*
* ### InputGroup Integration
*
* When using InputField within an InputGroup, the `aria-describedby` association follows these rules:
*
* #### Group-level error/help messages
*
* If the InputGroup has `error`/`help` messages, all child components will have `aria-describedby` set to these values **by default:**
*
* ```jsx
* <InputGroup label="Passenger details" error="Incomplete information">
* <InputField label="First name" />
* <InputField label="Last name" />
* </InputGroup>
* ```
*
* In this example, all InputField components will have the InputGroup's error message "Incomplete information" announced by screen readers.
*
* #### Component-level error/help messages
*
* If individual InputField components have their own `error`/`help` messages (and the InputGroup doesn't), only those specific components will have `aria-describedby` set:
*
* ```jsx
* <InputGroup label="Passenger details">
* <InputField label="First name" />
* <InputField label="Last name" error="Last name is required" />
* </InputGroup>
* ```
*
* In this example, only the second InputField will have its error message "Last name is required" announced.
*
* #### Component-level ariaDescribedby value
*
* Avoid setting `ariaDescribedby` directly on InputField components when inside an InputGroup, as these values will be overwritten by the InputGroup's internal accessibility logic:
*
* ```jsx
* <InputGroup label="Contact information">
* <Select options={countryOptions} label="Country" />
* <InputField
* label="Phone number"
* ariaDescribedby="phone-hint" // This will be overwritten
* />
* <p id="phone-hint" style={{ display: "none", visibility: "hidden" }}>
* Enter your phone number
* </p>
* </InputGroup>
* ```
*
* In this example, the `ariaDescribedby` value "phone-hint" will be ignored because the InputGroup manages the accessibility associations internally. Instead, rely on the InputGroup's `error`/`help` props or the component's own `error`/`help` props.
*
*
* @orbit-doc-end
*/
declare const InputField: (props: Props) => React.JSX.Element;
export default InputField;
//# sourceMappingURL=index.d.ts.map