You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
3.2 KiB

3 years ago
# @carbon/icon-helpers
> Helpers used alongside icons for digital and software products using the
> Carbon Design System
## Getting started
To install `@carbon/icon-helpers` in your project, you will need to run the
following command using [npm](https://www.npmjs.com/):
```bash
npm install -S @carbon/icon-helpers
```
If you prefer [Yarn](https://yarnpkg.com/en/), use the following command
instead:
```bash
yarn add @carbon/icon-helpers
```
## Usage
`@carbon/icon-helpers` provides a couple of helpers for rendering `<svg>` nodes
in a document, or to help get the correct attributes to set on an `<svg>` node.
These include:
| Name | Type | Description |
| ------------------ | --------------------------------- | ---------------------------------------------------------------------------- |
| `getAttributes` | `(attributes: Object) => Object` | Get the attributes for an `<svg>` node |
| `formatAttributes` | `(attributes: Object) => String` | Format the attributes into a string that can be applied to a node in the DOM |
| `toString` | `(descriptor: Object) => String` | Format the given icon descriptor into a string. Useful for templates |
| `toSVG` | `(descriptor: Object) => DOMNode` | Format the given icon descriptor into a DOM node |
For most of the methods, `attributes` corresponds with whatever the name and
value would be if you were writing the HTML for the `<svg>`. For example, if we
wanted to set `width` and `height` we would do the following:
```js
const { getAttributes } = require('@carbon/icon-helpers');
const attributes = getAttributes({ width: 20, height: 20 });
```
In order for the icon to be considered focusable, you will need to provide
either `aria-label`, `aria-labelledby`, or `title` in the given `attributes` in
addition to `tabindex`. For example:
```js
const { getAttributes } = require('@carbon/icon-helpers');
const attributes = getAttributes({
'aria-label': 'My icon label',
tabindex: '0',
});
```
### Icon descriptors
An icon descriptor is the term we use to describe icon objects exported by
`@carbon/icons`. By default, they will have the following shape:
```js
{
elem: 'svg',
attrs: {
xmlns: 'http://www.w3.org/2000/svg',
viewBox: '0 0 16 16',
width: 16,
height: 16,
},
content: [
{
elem: 'path',
attrs: {
d: '...',
},
},
],
name: 'IconName',
size: 16,
}
```
You can import these definitions directly from `@carbon/icons` and use them
alongside `toSVG` or `toString` by doing:
```js
import { IconName } from '@carbon/icons';
import { toString, toSVG } from '@carbon/icon-helpers';
const iconString = toString(IconName);
const iconSVG = toSVG({
...IconName,
attrs: {
...IconName.attrs,
myCustomAttribute: 'myCustomAttributeValue',
},
});
```
## 🙌 Contributing
We're always looking for contributors to help us fix bugs, build new features,
or help us improve the project documentation. If you're interested, definitely
check out our [Contributing Guide](/.github/CONTRIBUTING.md)! 👀
## 📝 License
Licensed under the [Apache 2.0 License](/LICENSE).