import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/# Иконки'/>

# Иконки

Класс `Icons` — это централизованный реестр для регистрации, хранения и ленивой загрузки иконок. Он позволяет управлять путями к ассетам, поддерживает динамические импорты и синхронизирует состояние между различными частями приложения через глобальный объект.

```javascript
import { Icons } from '@dxtmisha/functional-basic'

// 1. Настройка базового пути (по умолчанию /icons/)
Icons.setUrl('/assets/icons/')

// 2. Регистрация иконок
Icons.add('home', 'home-icon.svg')
Icons.addByList({
  'search': 'search.svg',
  'close': 'close.svg'
})

// 3. Проверка и получение
if (Icons.is('home')) {
  const path = await Icons.get('home')
}

// 4. Синхронное получение
const fastPath = Icons.getAsync('search') // возвращает строку или пустую строку
```

## Ленивая загрузка

Одной из ключевых особенностей является поддержка `Promise` и функций, что позволяет подгружать иконки только в момент их реального использования, снижая объем начальной загрузки приложения.

```javascript
// Регистрация через динамический импорт
Icons.add('user', () => import('./user.svg'))

// Автоматическое ожидание загрузки при вызове get
const iconData = await Icons.get('user')
```

## Глобальная синхронизация

Инструмент автоматически поддерживает актуальность данных в `window.__UI_ICON`. Это позволяет регистрировать иконки в одном месте (например, при инициализации приложения) и мгновенно получать к ним доступ в любой части кода.

```javascript
// Добавление иконки относительно глобального пути
Icons.addGlobal('logo', 'logo.svg')
```
