UNPKG

@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.

176 lines 10.2 kB
import * as React from "react"; import type { Props } from "./types"; /** * @orbit-doc-start * README * ---------- * # Checkbox * * To implement Checkbox component into your project you'll need to add the import: * * ```jsx * import Checkbox from "@kiwicom/orbit-components/lib/Checkbox"; * ``` * * After adding import into your project you can use it simply like: * * ```jsx * <Checkbox label="Checkbox" /> * ``` * * ## Props * * Table below contains all types of the props available in Checkbox component. * * | Name | Type | Default | Description | * | :-------------- | :------------------------- | :------ | :--------------------------------------------------------------------------------------------- | * | ariaControls | `string` | | Identifies the element whose contents or presence are controlled by the Checkbox. | * | ariaDescribedby | `string` | | Identifies the element that describes the Checkbox, providing additional information. | * | checked | `boolean` | | If `true`, the Checkbox will be checked. | * | defaultChecked | `boolean` | | If `true`, the Checkbox will be checked by default. Only to be used in uncontrolled. | * | disabled | `boolean` | `false` | If `true`, the Checkbox will be set up as disabled. | * | dataTest | `string` | | Optional prop for testing purposes. | * | id | `string` | | Set `id` for `Checkbox` | * | hasError | `boolean` | `false` | If `true`, the border of the Checkbox will turn red. [See Functional specs](#functional-specs) | * | info | `React.Node` | | The additional info about the Checkbox. | * | label | `string` | | The label of the Checkbox. | * | name | `string` | | The name for the Checkbox. | * | onChange | `event => void \| Promise` | | Function for handling onChange event. | * | ref | `func` | | Prop for forwarded ref of the Checkbox. [See Functional specs](#functional-specs) | * | tabIndex | `string \| number` | | Specifies the tab order of an element | * | value | `string` | | The value of the Checkbox. | * * ## Functional specs * * - The `hasError` prop will be visible only when the Checkbox is not checked nor disabled. * * - `ref` can be used, for example, to control focus or to get the status (checked) of the element. * * # FakeCheckbox * * The FakeCheckbox component was created for accessibility reasons and offers only a visual presentation of the Checkbox component. It does not have any functionality and accepts only state props - `disabled`, `checked`, `hasError`. * * ## Props * * Table below contains all types of the props available in FakeCheckbox component. * * | Name | Type | Default | Description | * | :------- | :-------- | :------ | :------------------------------------------------------------------------------------------------------------------ | --- | * | checked | `boolean` | `false` | If `true`, the FakeCheckbox will be checked. | * | disabled | `boolean` | `false` | If `true`, the FakeCheckbox will be set up as disabled. | * | hasError | `boolean` | `false` | If `true`, the border of the FakeCheckbox will turn red. [See Functional specs](#functional-specs-for-fakecheckbox) | | * * ## Functional specs for FakeCheckbox * * - The `hasError` prop will be visible only when the FakeCheckbox is not checked nor disabled. * * ## Example * * ```jsx * import * as React from "react"; * * <div role="checkbox" onChange={() => {}}> * <Text>Item title</Text> * <FakeCheckbox checked={selected} disabled={disabled} /> * </div>; * ``` * * * Accessibility * ------------- * ## Accessibility * * The Checkbox component has been designed with accessibility in mind, providing standard checkbox functionality with keyboard navigation and screen reader support. * * ### Accessibility Props * * **Checkbox props:** * * | Name | Type | Description | * | :-------------- | :--------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | * | ariaControls | string | Identifies the element whose contents or presence are controlled by the Checkbox. Use this to connect the Checkbox to related elements that are shown/hidden based on the Checkbox state. | * | ariaDescribedby | string | Identifies the element that describes the Checkbox. Typically used to connect error messages or additional information to the Checkbox. | * | hasError | boolean | When true, applies a visual error state and sets aria-invalid="true" to indicate an error to screen readers. | * | label | React.Node | Provides an accessible name for the Checkbox through its label content. | * | disabled | boolean | When true, prevents interaction with the Checkbox and communicates this state to assistive technology. | * | tabIndex | string \| number | Controls the tab order of the checkbox within the page. | * * ### Automatic Accessibility Features * * - The component automatically manages ARIA attributes: * - Uses native HTML `<input type="checkbox">` element which has an implicit `role="checkbox"` for screen readers * - Automatically announces checked/unchecked states for screen readers * - Provides visual feedback for error states that is also communicated to screen readers * - Supports keyboard focus management with visible focus indicators * - Disabled state is properly communicated to screen readers * * ### Best Practices * * - Always provide a descriptive label for the Checkbox to ensure screen reader users understand its purpose * - Use `ariaControls` to establish relationships between a Checkbox and the content it shows/hides or controls * - Use `ariaDescribedby` to connect supplementary information to the Checkbox, such as error messages, help text, or additional context for better screen reader communication * - Group related Checkboxes with appropriate heading elements or fieldsets with legends * - Ensure sufficient color contrast between the checkbox, its label, and the background * - When using the hasError state, make sure to provide an accessible error message using ariaDescribedby * - Use the Checkbox's native state management rather than creating custom checkbox-like components * * ### Keyboard Navigation * * - **Tab**: Moves focus to the Checkbox * - **Space**: Toggles the checked state of the Checkbox * - When focused, the Checkbox has a visible focus indicator * * ### Examples * * #### Basic Checkbox with Label * * ```jsx * <Checkbox label="I agree to the terms and conditions" /> * ``` * * Screen reader announces: "I agree to the terms and conditions, checkbox, not checked" * * #### Checkbox with Error State * * ```jsx * <div> * <Checkbox * label="I agree to the terms and conditions" * hasError={true} * ariaDescribedby="checkbox-error" * /> * <div id="checkbox-error">You must accept the terms to continue</div> * </div> * ``` * * Screen reader announces: "I agree to the terms and conditions, You must accept the terms to continue, invalid, not checked, checkbox" * * #### Checkbox Controlling Content Display * * ```jsx * <div> * <Checkbox label="Show advanced options" ariaControls="advanced-options" /> * <div id="advanced-options">{/* Advanced options content *\/}</div> * </div> * ``` * * Screen reader announces: "Show advanced options, checkbox, not checked" and indicates that the checkbox controls other content. * * #### Checkbox with Additional Information * * ```jsx * <Checkbox * label="Subscribe to newsletter" * info="Receive weekly updates about our products and services" * /> * ``` * * Screen reader announces: "Subscribe to newsletter, Receive weekly updates about our products and services, checkbox, not checked" * * * @orbit-doc-end */ declare const Checkbox: (props: Props) => React.JSX.Element; export default Checkbox; export { default as FakeCheckbox } from "./FakeCheckbox"; //# sourceMappingURL=index.d.ts.map