Component Preview
ComponentPreview — компонент для живого предпросмотра Svelte-компонентов прямо на странице документации. Показывает интерактивное демо сверху и исходный код снизу с подсветкой синтаксиса и вкладками.
Как это выглядит
Демонстрация на примере ThemeToggle — кнопки переключения тёмной/светлой темы. Вкладки показывают полный исходный код компонента и его store:
Нажмите на кнопку выше — тема переключится. Вкладки внизу показывают полный исходный код обоих файлов с подсветкой и кнопкой копирования.
Как подключить
ComponentPreview не входит в список автоимпортируемых markdown-компонентов, поэтому его нужно импортировать вручную через блок script в .svx файле.
Шаг 1: Добавить импорты
В начале .svx файла, после frontmatter, добавьте блок script с импортом ComponentPreview, самого компонента и его исходного кода через суффикс ?raw:
Импорт с суффиксом ?raw возвращает содержимое файла как строку — это и есть исходный код для вкладок. Импорт без суффикса — живой компонент для превью. Чтобы избежать проблем с source maps внутри .svx файлов, ?raw импорты вынесите в отдельный .ts модуль (например demo-sources.ts) и импортируйте оттуда.
Шаг 2: Использовать в markdown
Передайте компонент в children (между открывающим и закрывающим тегом), а исходный код — в пропс sources как массив вкладок:
Пропсы
| Пропс | Тип | Назначение |
|---|---|---|
code | string | Исходный код для отображения в панели снизу (одна вкладка) |
language | string | Язык подсветки синтаксиса (по умолчанию typescript) |
label | string | Название вкладки с кодом (по умолчанию Code) |
sources | SourceTab[] | Массив вкладок с кодом (заменяёт code) |
children | Snippet | Живой превью компонента |
class | string | Дополнительные классы для области превью |
Несколько вкладок с кодом
Если нужно показать несколько файлов, используйте пропс sources вместо code. Передайте массив объектов с полями name, code и language — каждый объект станет отдельной вкладкой. Демонстрация выше использует именно этот подход с двумя вкладками: ThemeToggle.svelte и theme.svelte.ts.
Каждый объект в массиве sources содержит:
| Поле | Тип | Назначение |
|---|---|---|
name | string | Название вкладки |
code | string | Исходный код |
language | string | Язык подсветки (по умолчанию typescript) |
Особенности
- Превью рендерится в изолированной области с прокруткой
- Код подсвечивается через Shiki (github-light / github-dark)
- Вкладки переключаются стрелками на клавиатуре (ArrowLeft / ArrowRight)
- Кнопка копирования кода в правом верхнем углу панели с кодом
- Тема превью наследует текущую тему сайта
