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.ItemPopover, Popover.Trigger (кнопку передайте внутрь), Popover.Content, Popover.Item
DropdownItemPopoverItem
Dropdown.Content align='left' | 'right'Popover placement='bottom-start' | 'bottom-end' и другие значения floating-ui
SwitchToggle
Select / Search: dropdownClassName, dropdownItemClassNamepopoverClassName, 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Текст с иконками слева и справа.
IconSVG-иконка с заданным размером.
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.