57 компонентов. - strelchenko blogперейти к контенту
Sstrelchenko blog
компоненты

57 компонентов.

Тема Rocket поставляется с 57 компонентами из библиотеки Velocity.

Х

Ханс Мартенс

время чтения 1 мин
57 components

Astro Rocket унаследовал полную библиотеку компонентов пользовательского интерфейса от Velocity от Southwell Media. Это означает, что 57 готовых к использованию компонентов доступны сразу после установки темы - никаких пакетов npm для установки, никакой дополнительной настройки. Каждый компонент уже стилизован с использованием цветовых токенов системы дизайна, поэтому они автоматически адаптируются при смене темы или включении темного режима.

Библиотека организована в три уровня: 33 примитива пользовательского интерфейса, которые образуют строительные блоки, 7 компонентов шаблонов более высокого уровня и набор компонентов структуры страницы для уровней «Герой», «Заголовок», «Нижний колонтитул», «Блог» и «SEO».


UI primitives

Эти 33 компонента охватывают все распространенные потребности пользовательского интерфейса. Они принимают варианты и размеры через свойства и разработаны с учетом доступности - навигация с помощью клавиатуры, атрибуты ARIA и управление фокусом обрабатываются автоматически.

Форма (7 компонентов)

Слой форм охватывает все стандартные типы ввода. Слой форм охватывает все стандартные типы ввода.

Компонент Как работает
Кнопка Основной интерактивный элемент. Поддерживает variant (brand, secondary, outline, ghost, destructive) и size (sm, md, lg). Работает как <button> или отображается как <a> при наличии href.
Input Однострочное текстовое поле ввода с поддержкой метки, вспомогательного текста и состояния ошибки..
Textarea Многострочный текстовый ввод с тем же шаблоном метки/ошибки, что и в поле ввода.
Select Стилизованный стандартный элемент выбора с тем же шаблоном поля формы.
Checkbox Accessible checkbox with custom styling that follows the active theme.
Radio Переключатель с тем же оформлением, что и флажок.
Switch Переключатель для включения/выключения с плавным CSS-переходом.
---
import Button from '@/components/ui/form/Button/Button.astro';
import Input from '@/components/ui/form/Input/Input.astro';
---

<Button variant="brand" size="md">Поехали</Button>
<Button variant="outline" size="md">Узнать больше</Button>

<Input label="Email address" type="email" placeholder="you@example.com" />

Data display (9 components)

Компонент Как работает
Card Контейнер с рамкой и закругленными углами. Используйте его для любого сгруппированного блока контента..
Badge Небольшая встроенная метка. Поддерживает свойства variant (brand, secondary, success, warning, destructive) и pill для округлого стиля..
Avatar Круглое изображение или инициалы в качестве запасного варианта.
AvatarGroup Ряд аватаров, расположенных друг над другом, для списков команд или участников..
Table Стилизованная HTML-таблица с поддержкой заголовка, основного содержимого и полосатых строк..
Pagination Навигация по страницам с кнопками «Предыдущая/Следующая» и нумерацией страниц..
Progress Горизонтальная полоса прогресса, заполняющаяся в процентах..
Skeleton Заполнитель загрузки, который пульсирует, повторяя форму заменяемого им контента..
GoogleMap Встраивает интерактивную карту Google через iframe. Принимает свойства address, zoom и size..
---
import Badge from '@/components/ui/data-display/Badge/Badge.astro';
import Card from '@/components/ui/data-display/Card/Card.astro';
---

<Badge variant="brand" pill>Новое</Badge>
<Badge variant="success">Активно</Badge>

<Card>
  <p>Здесь любой контент.</p>
</Card>

Feedback Обратная связь (3 components)

Компонент Как работает
Alert Встроенное сообщение для отображения состояния «информация», «успех», «предупреждение» или «ошибка»..
Toast Временное уведомление, которое появляется в углу экрана и автоматически закрывается..
Tooltip Текстовая метка, которая появляется при наведении курсора или фокусировке на любой элемент..

Overlay перекрытие(6 components)

Компонент Как работает
Accordion Сворачиваемые панели контента - любое количество элементов, но одновременно открыт только один.
Dialog Модальное окно с фоном, блокировкой фокуса и закрытием с помощью клавиатуры..
Dropdown Floating menu that opens below a trigger button.
Tabs Горизонтальная панель вкладок, позволяющая переключаться между панелями контента..
VerticalTabs Аналогично вкладкам, но со списком вкладок слева. Удобно для панелей настроек..
ConsentBanner Баннер согласия на использование файлов cookie с кнопками «Принять»/«Отклонить»..
---
import Accordion from '@/components/ui/overlay/Accordion/Accordion.astro';
---

<Accordion items={[
  { title: 'Что такое Astro Rocket??', content: 'Готовая к использованию тема оформления для Astro 6..' },
  { title: 'Это шара?', content: 'Да. Имеет лицензию MIT.' },
]} />

Layout & content (3 components)

Компонент Так работает
Icon Единый компонент иконок. Объединяет более 350 иконок Lucide UI и более 3000 иконок брендов Simple Icons через Iconify..
Separator Горизонтальная или вертикальная разделительная линия.
CodeBlock Блок кода с синтаксисной подсветкой, кнопкой копирования и языковой меткой..

Компонент Icon используется во всей теме. Вы можете ссылаться на любой значок Lucide по имени, или на любой значок бренда Simple Icons по его сокращенному названию (например, github, x-twitter, instagram) или с полным префиксом simple-icons:.

---
import Icon from '@/components/ui/primitives/Icon/Icon.astro';
---

<Icon name="arrow-right" size="sm" />
<Icon name="github" size="md" />
<Icon name="simple-icons:vercel" size="md" />

Marketing UI (5 components)

Это маркетинговые компоненты пользовательского интерфейса, отличающиеся от компонентов полнофункциональной целевой страницы, описанных ниже.

Component What it does
CTA Блок призыва к действию с заголовком, описанием и кнопкой.
Logo Автоматически генерируемый логотип-значок - первая буква названия вашего сайта на фоне активного фирменного цвета. Обновления в режиме реального времени при переключении темы.
SocialProof Описание проекта и краткое пояснение (например, «Присоединяйтесь к более чем 2000 разработчикам»).
NpmCopyButton Команда npm install в один клик с иконкой копирования - полезна для страниц проектов с открытым исходным кодом..
TerminalDemo Анимированное окно терминала, отображающее последовательность команд..

Pattern components -Компоненты шаблона

Компоненты шаблонов позволяют комбинировать примитивы пользовательского интерфейса в конкретные сценарии использования в реальном мире. Они относятся к более высокому уровню и имеют более четкие требования.

Component What it does
ContactForm Полная форма обратной связи, интегрированная с Resend. Включает проверку Zod на стороне сервера и защиту от спама с помощью ловушек (honeypot).
NewsletterForm Форма для сбора адресов электронной почты, также подключенная к Resend.
StatCard Карточка для отображения метрик с крупным числом, подписью и дополнительным индикатором тренда. Используется на панели мониторинга или страницах с информацией о продукте.
EmptyState Заполнитель для пустых списков или результатов поиска (ноль результатов). Принимает значок, заголовок, описание и кнопку действия..
FormField Общая метка + поле ввода + оболочка ошибки, используемая внутри всех компонентов формы.
SearchInput Введите текст с иконкой поиска и кнопкой очистки.
PasswordInput Поле ввода с возможностью отображения/скрытия пароля.

Компоненты структуры страницы

Эти компоненты являются фиксированными частями архитектуры сайта. Они используются один раз для каждого типа страницы и, как правило, не комбинируются с другими компонентами - они определяют страницу.

Герой - компонент Hero поддерживает два макета (centered, split) и четыре размера (sm, md, lg, xl). Весь контент героя использует именованные слоты: badge, title, description, actions и, опционально, image.

Заголовок - фиксированная верхняя панель навигации с логотипом, навигационными ссылками, панелью выбора цветового режима (выпадающее меню «Система» / «Светлая» / «Темная»), панелью выбора цветовой темы (выбор из 12 образцов) и опциональной кнопкой призыва к действию (CTA). Три варианта отображения: solid, transparent и default. Капсульный заголовок на главной странице представляет собой отдельный параметр shape="floating" - отличный от варианта. Включает индикатор выполнения прокрутки, если он включен.

Нижний колонтитул - нижняя навигация со ссылками на сайт, иконками социальных сетей и текстом об авторских правах.

Хлебные крошки - автоматически генерируются из текущего URL-адреса. Используются в верхней части записей блога и внутренних страниц.

ThemeModeDropdown / ThemeSelectorDropdown - два выпадающих списка в форме таблеток, расположенные рядом в заголовке. ThemeModeDropdown - это трехпозиционный выбор цветового режима (Системный / Светлый / Темный), основанный на localStorage; ThemeSelectorDropdown - это выбор цветовой темы с 12 вариантами, основанный на sessionStorage. Оба выпадающих списка скрываются ниже контрольной точки md и перерисовываются внутри мобильного меню - выпадающий список цветового режима остается, а выбор цветовой темы становится плоским рядом вариантов ThemeSelector. Полный дизайн смотрите в статье о цветовом режиме.

Компоненты блога - BlogCard (карточка с обложкой, тегами и временем чтения), ArticleHero (заголовок статьи во всю ширину с обложкой и метаданными), RelatedPosts (раздел из трех карточек внизу каждой статьи), ShareButtons (Twitter/X, LinkedIn, текст из буфера обмена) и BlogImageSVG (SVG-фоны фирменных цветов для обложек статей).

Разделы целевой страницы - Credibility (панель с логотипом), FeatureTabs (интерактивная витрина функций с вкладками), LighthouseScores (анимированные шкалы оценок) и TechStack (полоса с технологическими значками).

SEO - SEO (все метатеги, Open Graph, Twitter Cards), JsonLd (структурированные данные для веб-сайта, организации, публикаций в блоге, хлебных крошек, часто задаваемых вопросов) и Analytics (слот для скрипта аналитики).


Всё соответствует активной теме.

Каждый компонент использует цветовые токены CSS системы дизайна - --color-brand-500, --color-foreground, --color-background и так далее. Переключитесь с изумрудного на фиолетовый, и все кнопки, значки, индикаторы выполнения и кольца фокусировки мгновенно обновятся. Ни один компонент не имеет жестко заданного фирменного цвета.

То же самое относится и к темному режиму: все значения токенов изменяются при переключении класса dark на <html>, и каждый компонент обновляется без дополнительного кода.

Добавление собственных компонентов

Если вам нужно что-то, чего нет в библиотеке, следуйте тем же шаблонам, что и в кодовой базе, чтобы создать новые компоненты, соответствующие существующей системе.

Куда поместить

Разместите новые компоненты в соответствующем подкаталоге в src/components/:

src/components/
├── ui/
│   ├── form/          # Button, Input, Select, Checkbox, Radio, Switch, Textarea
│   ├── data-display/  # Card, Badge, Avatar, AvatarGroup, GoogleMap, Table, Pagination, Progress, Skeleton
│   ├── feedback/      # Alert, Toast, Tooltip
│   ├── overlay/       # Dialog, Dropdown, Tabs, VerticalTabs, Accordion, ConsentBanner
│   ├── layout/        # Separator
│   ├── primitives/    # Icon
│   ├── content/       # CodeBlock
│   └── marketing/     # Logo, CTA, NpmCopyButton, SocialProof, TerminalDemo
├── patterns/          # Composed patterns (ContactForm, SearchInput, etc.)
├── layout/            # Page structure (Header, Footer)
├── blog/              # Blog-specific
└── landing/           # Marketing pages

Базовая структура компонента

Типичный компонент пользовательского интерфейса определяет свои свойства в метаданных, сопоставляет варианты со строками классов и использует class:list для составления окончательного класса:`:

---
interface Props {
  variant?: 'default' | 'primary' | 'success';
  size?: 'sm' | 'md';
  class?: string;
}

const {
  variant = 'default',
  size = 'md',
  class: className = '',
} = Astro.props;

const variants = {
  default: 'bg-background-secondary text-foreground',
  primary:  'bg-primary text-primary-foreground',
  success:  'bg-success-light text-success-foreground',
};

const sizes = {
  sm: 'px-2 py-0.5 text-xs',
  md: 'px-3 py-1 text-sm',
};
---
<span
  class:list={[
    'inline-flex items-center rounded-full font-medium',
    variants[variant],
    sizes[size],
    className,
  ]}
>
  <slot />
</span>

Три правила, которым следует следовать

Используйте токены дизайна, а не жестко заданные значения. Каждый встроенный компонент использует bg-background, text-foreground, border-border и токены бренда. Если вы жестко зададите bg-white или text-gray-900, ваш компонент сломается в темном режиме и проигнорирует активную цветовую тему.

Поддерживайте именованные слоты для гибкого контента. Слоты позволяют пользователю передавать значки, действия или контент нижнего колонтитула без необходимости сообщать о них компоненту:

<FeatureCard title="Fast">
  <Icon name="zap" slot="icon" />
  Lightning быстрая сборка.
  <Button slot="footer">Узнай еще...</Button>
</FeatureCard>

Используйте React для интерактивности. Компоненты Astro отрисовываются на сервере и не имеют состояния на стороне клиента. Для всего, что требует useState, onClick или обновлений в реальном времени, создайте файл .tsx и используйте директиву client:visible при его подключении:

---
import { Counter } from '@/components/ui';
---
<Counter client:visible />

Просмотрите демонстрацию в реальном времени

Самый быстрый способ ознакомиться со всеми 57 компонентами - это демонстрация компонентов в реальном времени. Каждый компонент отображается с возможностью просмотра свойств в реальном времени:

/components

Эта демонстрация встроена в сам Astro Rocket. Все 57 компонентов отображаются там - та же разметка, те же варианты, те же свойства, которые вы будете использовать в своем собственном проекте.

Вернуться к блогу
Поделиться:

Следите за обновлениями

Будьте в курсе событий - новые статьи, идеи и обновления.