@payfit/unity-icons
Version:
149 lines (92 loc) • 4.32 kB
Markdown
# /unity-icons
A comprehensive icon library for the Unity design system, provided as React Components.
## Unity v3 compatibility
Unity Icons v3 is released under Unity's shared major version policy. No icon API breaking changes are introduced in this release. Upgrade it together with the other `/unity-*` packages and follow the [Unity Components 2.x to 3.x migration guide](../components/src/docs/guides/migration/Migrating%20from%202.x%20to%203.x.mdx) for component API changes.
## Installation
Install the package in your project. We recommend you use this package alongside `/unity-components`.
```bash
pnpm add /unity-icons @payfit/unity-components
```
Ensure that `react` and `react-dom` are also installed in your project:
```bash
pnpm add react react-dom
```
## Usage
This package provides two ways to import and use icons.
### 1. Import the provider
Wrap your application with the `IconProvider` to make all icons available in your application.
```tsx
import { UnityIconsProvider } from '@payfit/unity-icons'
function App() {
return (
<UnityIconsProvider>
<MyComponent />
</UnityIconsProvider>
)
}
```
### 2. Use the `IconSprite` component
Render any icon using the `IconSprite` component, passing the icon's name as the `src` prop.
```tsx
import { IconSprite } from '@payfit/unity-icons'
function MyComponent() {
return <IconSprite src="Icon1" />
}
```
### 3. Use the Icon component from unity components
You can also use the `Icon` component from `/unity-components` to render icons (recommended). The `Icon` component provides additional customization options that follow design system guidelines, and uses the `IconSprite` component internally.
```tsx
import { Icon } from '@payfit/unity-components'
function MyComponent() {
return <Icon src="Icon1" size={20} />
}
```
## API
The icons library uses SVG sprites to render icons. All icons are referenced by their name, which is the filename in the `/svg` folder without the extension.
The `IconSprite` component accepts all the props of an SVG element.
```tsx
import { IconSprite } from '@payfit/unity-icons'
function MyComponent() {
return <IconSprite src="AirplaneFilled" width="32" height="32" fill="#000" />
}
```
We recommend you customize the icon's color, sizes, and other properties via the `Icon` component from `/unity-components`.
## Customization
All icons use `currentColor` for their fill or stroke, allowing you to easily customize the color using CSS or the `color` prop.
## TypeScript Support
This package includes TypeScript definitions, and a list of all the available icon names is exported as a type.
```tsx
import { iconNames, UnityIcon } from '@payfit/unity-icons'
const myIcons: UnityIcon[] = ['AirplaneFilled', 'CakeOutlined']
console.log(iconNames) // ['AirplaneFilled', 'AirplaneOutlined', ...+309 icons more]
```
## Figma Code Connect
This package includes Figma Code Connect integration, which displays the correct `<Icon />` usage directly in Figma Dev Mode when inspecting icon components.
### How It Works
The `Icon.figma.tsx` file is auto-generated by the sync script and contains `figma.connect()` calls for all icons. Each icon maps:
- **Type variant** (Filled/Outlined) to the `src` prop
- **Size variant** (20/24) to the `size` prop
### Publishing Code Connect
After running the sync script, publish the Code Connect configuration to Figma:
```bash
cd libs/shared/unity/icons
npx figma connect publish
```
This requires `FIGMA_ACCESS_TOKEN` to be set in your environment.
## Syncing Icons from Figma
The icon library is synced from Figma using the `sync-unity-icons` script, which:
1. Downloads SVG icons from Figma (with breaking change detection)
2. Generates the Code Connect configuration file
To run the sync:
```bash
npx tsx libs/shared/unity/icons/scripts/sync-unity-icons.ts
```
Required environment variables:
- `FIGMA_UNITY_SYNC_ACCESS_TOKEN` - Figma access token (or use refresh token credentials)
## Browser Support
This package supports all modern evergreen browsers. It does not support IE.
## How to release manually
Add an emoji below:
- 🦄
- 🏰
In some cases, local hr-apps libraries are not published properly, which fails install for `/payslip-template` afterward.