pbcomponents
Установка, настройка и справочник компонентов React.
@prosazhin/pbcomponents — библиотека компонентов для React 19. Справочник охватывает компоненты, хелперы, провайдеры и хуки с примерами и сигнатурами API.
Ресурсы: GitHub · npm · Figma Community · Behance · Дизайн-система.
Установка
npm install @prosazhin/pbcomponents @prosazhin/pbstylesПакет компонентов использует React 19 как peer dependency и Tailwind CSS 4. Для фирменных токенов подключите pbstyles в глобальном CSS:
@import 'tailwindcss';
@import '@prosazhin/pbstyles/styles/tailwind/theme.css';Первая кнопка
import { Button } from '@prosazhin/pbcomponents';
export default function Example() {
return (
<Button
size='m'
color='primary'
theme='filled'
>
Сохранить
</Button>
);
}Диалоги и уведомления
Если используете Dialog, Notification или связанные хуки, оберните приложение в PBCProvider один раз:
import { PBCProvider } from '@prosazhin/pbcomponents';
export default function Layout({ children }: { children: React.ReactNode }) {
return <PBCProvider notifications={{ top: 80 }}>{children}</PBCProvider>;
}На этом сайте провайдер расположен в корневом layout. Для остальных компонентов дополнительный провайдер не нужен.
Тема и ссылки Next.js
Цвета компонентов берутся из pbstyles. Без настройки они следуют prefers-color-scheme; data-theme="dark" или data-theme="light" на <html> либо контейнере задаёт режим вручную.
Компоненты с href (Button, Tab, PopoverItem, Tag) принимают linkComponent, если вместо обычной ссылки нужен next/link:
import NextLink from 'next/link';
import { Button } from '@prosazhin/pbcomponents';
<Button
href='/projects'
linkComponent={NextLink}
>
Проекты
</Button>;Переход с 1.x на 2.0
| Было | Стало |
|---|---|
Dropdown, Dropdown.Trigger, Dropdown.Content, Dropdown.Item | Popover, Popover.Trigger (кнопку передайте внутрь), Popover.Content, Popover.Item |
DropdownItem | PopoverItem |
Dropdown.Content align='left' | 'right' | Popover placement='bottom-start' | 'bottom-end' и другие значения floating-ui |
Switch | Toggle |
Select / Search: dropdownClassName, dropdownItemClassName | popoverClassName, popoverItemClassName |
RadioGroup / InlineRadioGroup: onChange(checked, value, event) | onChange(value) |
Text / Content: size='s' | 'm' | 'l' | size={12 | 16 | 20} — размер в пикселях, доступны 10–32 |
Icon: size='s' | 'm' | 'l' | size={16 | 20 | 24} — размер в пикселях, доступны 12–32 |
Типы SMLSizeType, SelectDropdownOptionType | удалены; вместо SelectDropdownOptionType — OptionType |
Новое во 2.0: Popover, ConfirmPopover, ConfirmDialog, Tooltip, Pagination, Progress и хук usePopover. У существующих компонентов появились размер xs и цвет warning у Badge, цвет warning у Alert, description у Checkbox, Toggle и Radio, заголовок и ошибка у групп, Field.Error, темы и клавиатурная навигация у Tabs, аккордеон в CollapseGroup, мобильная шторка у Dialog. Все попапы используют единый вид и не уходят за край экрана.
Новое во 2.1: проп icon у Popover.Trigger (шеврон у кнопки-триггера, можно отключить) и maxWidth у Tooltip.
Справочник
Компоненты
| Экспорт | Назначение |
|---|---|
| Container | Контейнер страницы с основным содержимым и боковыми областями. |
| Headline | Заголовок с управляемым семантическим уровнем. |
| Button | Действие или ссылка с размером, цветом, темой и состоянием загрузки. |
| ButtonGroup | Группа кнопок одного размера. |
| Tag | Интерактивная метка, ссылка или фильтр. |
| Badge | Небольшая текстовая метка статуса или категории. |
| Field | Обёртка для подписи, контрола, подсказки и ошибки. |
| Input | Однострочное поле ввода с дополнениями. |
| Textarea | Многострочное поле ввода. |
| Search | Поиск и выбор вариантов из списка. |
| Select | Выбор одного или нескольких вариантов из списка. |
| Checkbox | Независимый флажок с подписью. |
| CheckboxGroup | Группа флажков с массивом выбранных значений. |
| Radio | Один вариант в наборе взаимно исключающих ответов. |
| RadioGroup | Группа радиокнопок с одним выбранным значением. |
| InlineRadio | Компактный вариант радио-кнопки. |
| InlineRadioGroup | Группа компактных вариантов выбора. |
| Toggle | Переключатель булевой настройки. |
| Tabs | Набор вкладок с выбранным индексом. |
| Tab | Одна вкладка для Tabs или самостоятельной навигации. |
| Collapse | Раскрываемый блок с заголовком. |
| CollapseGroup | Группа раскрываемых блоков. |
| Popover | Попап с произвольным содержимым; из него собирается меню. |
| PopoverItem | Пункт меню: действие или ссылка. |
| ConfirmPopover | Подтверждение действия в попапе рядом с кнопкой. |
| Tooltip | Подсказка при наведении и фокусе. |
| Dialog | Модальное окно с триггером, секциями и закрытием. |
| ConfirmDialog | Подтверждение действия в модальном окне. |
| Alert | Встроенное сообщение о состоянии с заголовком и действиями. |
| Notification | Всплывающее сообщение с таймером и прогрессом. |
| Pagination | Постраничная навигация. |
| Progress | Полоса прогресса. |
Хелперы
| Экспорт | Назначение |
|---|---|
| Content | Текст с иконками слева и справа. |
| Icon | SVG-иконка с заданным размером. |
| Text | Текст с размером и весом, выбираемым через пропсы. |
Провайдеры
| Экспорт | Назначение |
|---|---|
| DialogProvider | Контекст для управления диалогами из дочерних компонентов. |
| NotificationsProvider | Контекст для вызова уведомлений из любой вложенной части. |
| PBCProvider | Общий провайдер диалогов и уведомлений. |
Хуки
| Экспорт | Назначение |
|---|---|
| useClickOutside | Вызывает callback при клике или касании вне переданных элементов. |
| useControllableState | Состояние, которое может управляться пропсом value или храниться внутри компонента. |
| useCountdown | Возвращает прогресс таймера от 0 до 100 с поддержкой паузы. |
| useDialog | Читает диалоги из DialogProvider и закрывает активный или указанный диалог. |
| useHoverControllable | Отслеживает наведение как управляемое или внутреннее состояние. |
| useKeydown | Вызывает callback при нажатии указанных клавиш. |
| useMergeRefs | Объединяет несколько React ref в один callback ref. |
| useNotifications | Читает уведомления и предоставляет методы показа и скрытия. |
| usePopover | Позиционирование и поведение попапов на floating-ui. |
| useScreenSize | Возвращает ширину и высоту окна, обновляясь при resize. |
| useShowDialog | Регистрирует диалог и возвращает функцию его открытия. |
Типы доступны из корня пакета и @prosazhin/pbcomponents/types. На страницах экспортов приведены примеры и сигнатуры API.