@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.
112 lines • 10.1 kB
TypeScript
import * as React from "react";
import type { Props } from "./types";
/**
* @orbit-doc-start
* README
* ----------
* # ButtonLink
*
* To implement ButtonLink component into your project you'll need to add the import:
*
* ```jsx
* import ButtonLink from "@kiwicom/orbit-components/lib/ButtonLink";
* ```
*
* After adding import into your project you can use it simply like:
*
* ```jsx
* <ButtonLink>Hello World!</ButtonLink>
* ```
*
* ## Props
*
* Table below contains all types of the props available in ButtonLink component.
*
* | Name | Type | Default | Description |
* | :----------- | :------------------------------ | :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |
* | ariaControls | `string` | | Id of the element the button controls. |
* | ariaExpanded | `boolean` | | Tells screen reader the controlled element from `ariaControls` is expanded |
* | asComponent | `string \| () => React.Element` | `"button"` | The component used for the root node. |
* | centered | `boolean` | `false` | Can only be used when `fullWidth` is true and if `iconLeft` and/or `iconRight` are defined. If `centered` prop is `true`, the Button will center everything. |
* | circled | `boolean` | `false` | If `true`, the ButtonLink will have circular shape. |
* | children | `React.Node` | | The content of the ButtonLink. [See Functional specs](#functional-specs) |
* | compact | `boolean` | `false` | If `true`, the ButtonLink will not have horizontal paddings. |
* | disabled | `boolean` | `false` | If `true`, the ButtonLink will be disabled. |
* | download | `boolean \| string` | | Can only be used when `href` is defined. Adds the `download` attribute to the anchor element. |
* | dataTest | `string` | | Optional prop for testing purposes. |
* | id | `string` | | Set `id` for `ButtonLink` |
* | external | `boolean` | `false` | If `true`, the ButtonLink opens link in a new tab. [See Functional specs](#functional-specs) |
* | fullWidth | `boolean` | `false` | If `true`, the ButtonLink will grow up to the full width of its container. |
* | href | `string` | | The URL of link to open when ButtonLink is clicked. [See Functional specs](#functional-specs) |
* | iconLeft | `React.Node` | | The displayed icon on the left. |
* | iconRight | `React.Node` | | The displayed icon on the right. |
* | onClick | `event => void \| Promise` | | Function for handling onClick event. |
* | ref | `func` | | Prop for forwarded ref of the Button. |
* | ref | `string` | | Specifies the ref of an element. [See Functional specs](#functional-specs) |
* | role | `string` | | Specifies the role of an element. |
* | **size** | [`enum`](#enum) | `"normal"` | The size of the ButtonLink. |
* | spaceAfter | `enum` | | Additional `margin-bottom` after component. |
* | submit | `boolean` | `false` | If `true`, the Button will have `type="submit"` attribute, otherwise `type="button"`. |
* | tabIndex | `string \| number` | | Specifies the tab order of an element. |
* | title | `string` | | Adds `aria-label`. |
* | **type** | [`enum`](#enum) | `"primary"` | The type of ButtonLink. |
* | width | `string` | | The width of the ButtonLink. Can be any string - `100px`, `20%`. |
*
* ### enum
*
* | type | size | spaceAfter |
* | :------------ | :--------- | :----------- |
* | `"primary"` | `"small"` | `"none"` |
* | `"secondary"` | `"normal"` | `"smallest"` |
* | `"critical"` | `"large"` | `"small"` |
* | | | `"normal"` |
* | | | `"medium"` |
* | | | `"large"` |
* | | | `"largest"` |
*
* ## Functional specs
*
* - When the `external` is specified, `noopener` value will be automatically added to attribute `rel` for security reason. Read more about it [here](https://web.dev/external-anchors-use-rel-noopener/).
*
* - By passing the `href` prop into Button, it will render into `a` element. If you pass `component` prop it will override this logic.
*
* - If you want to render **Icon only ButtonLink**, you just need to let `children` prop empty and set up any `icon` you want to use.
*
* - If you want to use the `asComponent` prop then **YourComponent** should accept at least `className`. Otherwise it won't be rendered with proper styling, e.g.:
*
* ```jsx
* const YourComponent = props => <div {...props} />
*
* <ButtonLink asComponent={YourComponent}>Title</ButtonLink>
* ```
*
* If you specify the children of **YourComponent** component, it will override the children prop of Button component, e.g.:
*
* ```jsx
* const YourComponent = props => <div {...props}>YourComponent</div>
*
* <ButtonLink asComponent={YourComponent}>Title</ButtonLink>
* ```
*
* This example will render ButtonLink in div with children **YourComponent** and not **Title**.
*
* ## Accessibility
*
* If you use `ButtonLink` without `href` so it's rendered as a `<button>` HTML element, then you can use props below. In case you are passing `href` and element is rendered as `<a>` then it should be treated as a link and `ariaControls`, `ariaExpanded` shouldn't be useful.
*
* - Use `ariaControls` prop to add `aria-controls` attribute to establish the relationship between button and element which is controlled by it. `aria-controls` works only with a unique `id` of an element.
*
* - Use `ariaExpands` prop to add `aria-expands` to indicate screenreaders, that element controlled by button through `ariaControls` is expanded or not.
*
* - Use `disabled` prop to indicate users that button is inactive and they can't interact with it.
*
* - Use `role` and `tabIndex` when you are rendering `ButtonLink` to non-actionable HTML element as `div` or `span`. However, this should be done only in edge-cases as it is anti-pattern behavior.
*
* - Use `title` to add `aria-label` when you need to add extra informations to screen readers or there is no `children` presented to be used as label.
*
*
* @orbit-doc-end
*/
declare const ButtonLink: ({ type, size, compact, disabled, children, iconLeft, iconRight, ref, ...props }: Props) => React.JSX.Element;
export default ButtonLink;
//# sourceMappingURL=index.d.ts.map