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