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