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

<Meta title='@dxtmisha/ru/scripts/Classes/PropertiesSettings - Настройки компонентов'/>

# Класс PropertiesSettings

Класс `PropertiesSettings` отвечает за автоматический поиск и загрузку конфигурационных файлов компонентов (настроек) во всех активных дизайнах. Он сканирует специальные директории `settings` и объединяет найденные токены в единый реестр, который затем используется для генерации стилей и типизации.

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

- **Автоматическое сканирование** — самостоятельно находит все папки компонентов в путях `components` и `constructor`.
- **Мульти-дизайнерская поддержка** — загружает настройки для каждого дизайна отдельно и объединяет их с учетом контекста.
- **Интеграция с конструктором** — содержит специальную логику для сбора свойств конструктора компонентов (`dxt.constructor`).
- **Стандартизация** — автоматически преобразует сырые данные из файлов настроек в стандартизированный формат свойств через `PropertiesStandard`.

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

Для инициализации передайте экземпляр `PropertiesPath` в конструктор.

**Параметры:**
- `path: PropertiesPath` — объект для работы с путями дизайн-системы.

```typescript
import { PropertiesPath, PropertiesSettings } from '@dxtmisha/scripts'

const pathHandler = new PropertiesPath()
const settings = new PropertiesSettings(pathHandler)
```

## Методы

### `get`
Возвращает объединенный список всех свойств настроек, найденных в системе. Сюда входят как индивидуальные настройки компонентов каждого дизайна, так и общие свойства конструктора компонентов.

**Возвращает:** `PropertyList` — объект, содержащий все загруженные и стандартизированные настройки.

```typescript
const allSettings = settings.get();
// Результат: { basic: { button: { ... } }, 'dxt.constructor': { ... } }
```

## Операции

### Процесс сбора настроек

`PropertiesSettings` выполняет поиск данных в несколько этапов:
1. **Определение путей**: Класс получает актуальные пути к директориям `settings` для каждого дизайна через менеджер путей.
2. **Сканирование директорий**: Для каждого найденного пути сканируются все поддиректории (имена компонентов).
3. **Чтение файлов**: Внутри каждой папки компонента ищется файл с токенами (настройками), который считывается через `PropertiesFile`.
4. **Нормализация**: Полученные данные проходят через `PropertiesStandard` для приведения их к единому формату (`PropertyItem`), включая преобразование имен в kebab-case.
5. **Генерация конструктора**: Параллельно вызывается `getConstructorProperties()`, которая на основе списка найденных папок формирует мета-данные для конструктора компонентов.

## Примеры

### Сбор всех настроек системы
```typescript
import { PropertiesSettings, PropertiesPath } from '@dxtmisha/scripts'

const settingsManager = new PropertiesSettings(new PropertiesPath())
const config = settingsManager.get()

// Теперь config содержит все переменные компонентов для всех тем
```
