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

<Meta title='@dxtmisha/ru/# UI/# Настройка данных Wiki'/>

# Настройка данных Wiki

Для управления демонстрационными данными и аргументами Storybook в рамках конкретного проекта (например, `d1`) используется файл `src/wiki/wiki.ts`. Этот файл позволяет дополнять или переопределять глобальные настройки Wiki, заданные в основном пакете `@dxtmisha/wiki`.

### Зачем это нужно?
Файл `wiki.ts` служит центральной точкой конфигурации для:
- Переопределения значений по умолчанию для аргументов Storybook (например, текста кнопок или иконок).
- Настройки списков выбора (options) для специфичных для проекта ресурсов.
- Добавления уникальных демонстрационных данных, которые не входят в базовую библиотеку.

### Как работать с файлом
В каждом пакете компонентов (например, в `@dxtmisha/d1`) файл `src/wiki/wiki.ts` экспортирует объект типа `StorybookArgsToList`. Этот объект импортирует базовые данные `wiki` и модифицирует их по необходимости.

```typescript
import { StorybookControl, StorybookCategory, type StorybookArgsToList } from '@dxtmisha/wiki'
import { wiki } from '@dxtmisha/wiki/media'

export const wikiD1: StorybookArgsToList = {
  // 1. Наследование: Переопределяем существующий аргумент 'image.value'
  'image.value': {
    ...wiki['image.value'],
    options: {
      ...wiki['image.value']?.options,
      value: 'mail-01'
    }
  },

  // 2. Новый параметр: Создаем полностью новое свойство
  'my.new.parameter': {
    type: StorybookControl.text,
    options: {
      category: StorybookCategory.technical,
      description: 'Описание полностью нового параметра, которого нет в базе',
      value: 'Default Value'
    }
  }
}
```



## Принципы именования ключей

Выбор названия ключа в объекте `wiki` определяет область применения настроек:

#### Глобальные свойства
Если ключ состоит только из названия свойства (например, `value`, `size`, `text`), настройки считаются **глобальными**. Они автоматически применяются ко всем компонентам, в которых присутствует данное свойство. Это удобно для задания единых описаний или типов контролов для всей библиотеки.

#### Специфичные свойства
Если ключ содержит точку, он интерпретируется как `[ComponentName].[PropertyName]` (например, `button.size`, `input.value`).
- Настройки применяются **только к указанному компоненту**.
- Эти значения имеют приоритет перед глобальными настройками.
- Позволяет задать уникальное поведение или значения по умолчанию для конкретного элемента, не затрагивая остальные.

## Структура типов данных

Для корректной настройки файла `wiki.ts` важно понимать структуру используемых типов. Ниже приведено детальное описание основного типа `StorybookArgsToList` и его составляющих.

### `StorybookArgsToList`

Это объектный тип (`Record`), используемый для конфигурации аргументов.

- **Ключ (Key)**: Название аргумента (строка).
- **Значение (Value)**: Объект типа `StorybookArgsToItem`.

---

### `StorybookArgsToItem`

Описывает конфигурацию конкретного элемента управления в Storybook.

- `type: StorybookControl` — определяет тип интерфейса для управления значением (текстовое поле, переключатель и т.д.).
- `options: StorybookArgsToOptionsByType` — объект расширенных настроек поведения и отображения.
- `isDemo?: boolean` — указывает, что параметр предназначен только для демонстрации.
- `demo?: any` — демонстрационные данные, которые будут подставлены в примеры.
- `hide?: boolean` — позволяет скрыть параметр из таблицы аргументов, если он является чисто техническим.

---

### `StorybookArgsToOptionsByType`

Объект для настройки метаданных и ограничений аргумента.

- `category?: StorybookCategory` — название категории для группировки в таблице (используйте значения из перечисления `StorybookCategory`).
- `value?: any` — текущее значение аргумента.
- `defaultValue?: string | number | boolean` — значение, которое будет отображаться как "по умолчанию" в документации.
- `description?: string | Record<string, string>` — описание свойства. Может быть строкой или объектом для разных языков.
- `options?: string[] | Record<string, string>` — список доступных вариантов для выбора (актуально для типов `select` или `radio`).
- `min?: number` / `max?: number` — минимальное и максимальное значение для числовых контролов.
- `order?: number` — числовой индекс для сортировки аргументов в списке.

---

### Перечисления (Enums)

#### `StorybookControl`
Определяет визуальный тип контрола:
- `text` — текстовое поле.
- `boolean` — переключатель (true/false).
- `number` — ввод числа.
- `select` — выпадающий список (требует заполнения `options`).
- `object` — редактор JSON-объектов.

#### `StorybookCategory`
Используется для группировки свойств в логические блоки:
- `Values` — основные значения.
- `Styles` — параметры внешнего вида.
- `Technical` — технические и внутренние настройки.
- `Adaptive` — параметры адаптивности.
- `Status` — состояния компонента.
