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

<Meta title='@dxtmisha/ru/scripts/Classes/LibraryMedia - Генератор подключения медиа-данных'/>

# Класс LibraryMedia

Класс `LibraryMedia` отвечает за формирование файлов подключения медиа-данных (прежде всего иконок) и основной точки входа стилей для проекта дизайн-системы. Это обеспечивает индексацию ассетов и их оптимизацию для использования в библиотеке.

## Ключевые особенности

- **Подключение иконок** — сканирует иконки и формирует механизм их асинхронной загрузки через динамические импорты.
- **Интеграция стилей** — подключает основные SCSS-файлы проекта к инструментам сборки.
- **Интеграция с менеджером иконок** — автоматически регистрирует ассеты в глобальном менеджере `Icons` из функциональной библиотеки.
- **Управление жизненным циклом** — поддержка цепочки вызовов и чистая регистрация ассетов через автоматическую генерацию кода.

## Инициализация

Для инициализации объекта вызовите конструктор `LibraryMedia(items)`.

**Параметры:**
- `items: LibraryItems` — объект для работы со списком компонентов и управления записью файлов.

```typescript
import { LibraryMedia, LibraryItems } from '@dxtmisha/scripts'

// 1. Инициализация LibraryItems
const items = new LibraryItems()

// 2. Инициализация LibraryMedia
const mediaGenerator = new LibraryMedia(items)
```

## Методы

### Управление

- `make(): void` — Запускает процесс генерации файлов подключения медиа и стилей.

## Структура сгенерированных файлов

Метод `make` формирует несколько файлов для интеграции ассетов в библиотеку:

### 1. Подключение медиа (`media.ts`)

Регистрирует все иконки из директории `icons`, используя динамические импорты для оптимизации производительности.

**Профиль сгенерированного кода:**
- **Имя:** `[Design]MakeIcons` (например, `dxtMakeIcons`)
- **Действие:** Добавляет пути к иконкам в глобальный реестр `Icons`.

**Пример структуры:**
```typescript
import { Icons } from '@dxtmisha/functional'

// Динамические импорты для каждой иконки
const iconArrow = async () => (await import('../../icons/arrow.svg'))?.default
const iconSearch = async () => (await import('../../icons/search.svg'))?.default

export const dxtMakeIcons = (): void => {
  Icons.add('arrow', iconArrow)
  Icons.add('search', iconSearch)
}
```

### 2. Точка входа стилей (`style.ts`)

Служит основной точкой входа SCSS, связывая специфичные стили проекта с библиотекой.

**Пример структуры:**
```typescript
import '../styles/ProjectName/main.scss'
```
