Разработка Storybook для документирования UI-компонентов

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка Storybook для документирования UI-компонентов
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1224
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    859
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1069
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    832

Разработка Storybook для документирования UI-компонентов

Storybook — среда разработки и документирования UI-компонентов в изоляции от приложения. Компонент открывается без контекста роутера, стора, авторизации — только с теми props, которые ему нужны. Это ускоряет разработку, упрощает тестирование и создаёт живую документацию, которая всегда актуальна.

Когда Storybook нужен

Storybook оправдан, если выполнено хотя бы одно условие:

  • Компонентная библиотека используется в нескольких проектах
  • В команде больше 2–3 фронтенд-разработчиков
  • Есть дизайнеры, которым нужно проверять реализацию
  • Компоненты сложные (DatePicker, DataTable, RichTextEditor)

Для небольших проектов с одной командой Storybook — оверхед. Достаточно визуального тестирования в самом приложении.

Настройка Storybook 8

Storybook 8 (2024) — текущая актуальная версия. Поддерживает React, Vue, Angular, Svelte, Web Components.

Инициализация в существующем проекте:

npx storybook@latest init

Автодетектирует фреймворк, добавляет .storybook/main.ts и .storybook/preview.ts, создаёт примеры stories.

Конфигурация .storybook/main.ts для React + Vite:

import type { StorybookConfig } from '@storybook/react-vite';

const config: StorybookConfig = {
  stories: ['../src/**/*.stories.@(ts|tsx)'],
  addons: [
    '@storybook/addon-essentials',
    '@storybook/addon-a11y',
    '@chromatic-com/storybook',
  ],
  framework: {
    name: '@storybook/react-vite',
    options: {},
  },
};
export default config;

Написание Stories: CSF3 формат

Component Story Format 3 (CSF3) — актуальный стандарт. Каждый story — это именованный объект с args:

// Button.stories.tsx
import type { Meta, StoryObj } from '@storybook/react';
import { Button } from './Button';

const meta: Meta<typeof Button> = {
  component: Button,
  tags: ['autodocs'],           // автогенерация docs-страницы
  args: {
    children: 'Нажать',
    variant: 'primary',
    size: 'md',
  },
  argTypes: {
    variant: {
      control: 'select',
      options: ['primary', 'secondary', 'ghost', 'danger'],
    },
  },
};

export default meta;
type Story = StoryObj<typeof Button>;

export const Primary: Story = {};

export const Secondary: Story = {
  args: { variant: 'secondary' },
};

export const Disabled: Story = {
  args: { disabled: true },
};

export const Loading: Story = {
  args: { isLoading: true },
};

Ключевые возможности CSF3:

  • args — props компонента, управляемые через Controls панель в реальном времени
  • argTypes — конфигурация контролов: select, text, boolean, color, number
  • tags: ['autodocs'] — Storybook автоматически генерирует страницу документации с prop-таблицей и всеми stories

Autodocs: автоматическая документация

С тегом autodocs Storybook генерирует страницу для каждого компонента:

  • Все stories с превью
  • Таблица props с типами (из TypeScript) и описаниями (из JSDoc/TSDoc)
  • Интерактивный Canvas с Controls

Для JSDoc описаний props:

type ButtonProps = {
  /** Визуальный вариант кнопки */
  variant?: 'primary' | 'secondary' | 'ghost';
  /** Размер кнопки */
  size?: 'sm' | 'md' | 'lg';
  /** Показывает спиннер вместо контента */
  isLoading?: boolean;
};

Эти описания автоматически попадают в таблицу props в Autodocs.

Addon A11y: проверка доступности

@storybook/addon-a11y добавляет вкладку Accessibility в каждый story. Запускает axe-core на рендере компонента и показывает нарушения прямо в Storybook:

npm install -D @storybook/addon-a11y

В main.ts добавить в addons: ['@storybook/addon-a11y']. После этого каждый story проверяется автоматически: видны violation (нарушения), incomplete (неоднозначно), passes (прошло).

Темизация и глобальные декораторы

Если приложение поддерживает dark mode — настраиваем переключатель темы в Storybook через глобальные декораторы в preview.ts:

// .storybook/preview.ts
import type { Preview } from '@storybook/react';
import '../src/styles/globals.css';

const preview: Preview = {
  globalTypes: {
    theme: {
      name: 'Theme',
      defaultValue: 'light',
      toolbar: {
        icon: 'circlehollow',
        items: ['light', 'dark'],
        showName: true,
      },
    },
  },
  decorators: [
    (Story, context) => {
      const theme = context.globals.theme;
      return (
        <div data-theme={theme} className={theme}>
          <Story />
        </div>
      );
    },
  ],
};

export default preview;

Visual Regression с Chromatic

Chromatic (разработан командой Storybook, коммерческий) — облачный сервис для visual regression testing:

  1. На каждый PR снимает скриншоты всех stories
  2. Сравнивает с базой (approved snapshots)
  3. Показывает diff в PR-ревью
  4. Reviewer подтверждает или отклоняет изменения

Интеграция с GitHub Actions:

- name: Publish to Chromatic
  uses: chromaui/action@latest
  with:
    projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}

Бесплатный tier: 5000 snapshots/месяц. Для команды из 3–5 разработчиков с библиотекой в 30–50 компонентов — достаточно.

Deploy Storybook

Storybook деплоится как статический сайт:

npm run build-storybook    # собирает в /storybook-static

Хостинг: Chromatic (встроено), Vercel, Netlify, GitHub Pages. Для CI/CD — добавить шаг в pipeline, деплой на каждый merge в main.

Сроки

Этап Время
Настройка Storybook + конфигурация аддонов 1–2 дня
Stories для существующих компонентов (на компонент ~1–2ч) 5–10 дней
Настройка темизации, глобальных декораторов 1 день
Интеграция Chromatic + CI pipeline 1–2 дня
MDX-документация паттернов использования 2–3 дня

Для библиотеки с 20–30 компонентами: 2–3 недели на полноценный Storybook с autodocs, a11y-аддоном и Chromatic. Дальнейшая поддержка — stories добавляются параллельно с разработкой новых компонентов.