Перейти к основному содержанию

Справочник API

Этот документ предоставляет исчерпывающий справочник по всем экспортируемым API из библиотеки @ui8kit/core. Он охватывает экспорт компонентов, свойства вариантов, интерфейсы TypeScript и соглашения об именовании, используемые во всей кодовой базе. Для архитектурного контекста и взаимосвязей компонентов см. Архитектура. Для подробной документации API отдельных компонентов см. подразделы: Базовые компоненты, UI-компоненты и Компоненты макетов. Для паттернов использования и примеров см. Руководство разработчика.

Структура экспорта

Библиотека следует плоской структуре экспорта из src/index.ts Все компоненты, варианты, хуки и утилиты реэкспортируются из этой единственной точки входа для упрощения импортов.
Вспомогательные хуки

Система тем

Экспорт вариантов

Компоненты макетов

UI-компоненты

Базовые примитивы

Точка входа пакета

src/index.ts
Основной бочонок экспорта

Block
BlockProps

Box
BoxProps

Grid
GridProps

Flex
FlexProps

Stack
StackProps

Button
BaseButtonProps

Card + Card.Header/Content/Footer
CardProps, CardHeaderProps

Text
TextProps

Title
TitleProps

Badge
BadgeProps

Container
ContainerProps

Icon
IconProps

Image
ImageProps

Group
GroupProps

Sheet
SheetProps

Accordion
AccordionProps

DashLayout
DashLayoutProps

LayoutBlock
LayoutBlockProps

SplitBlock
SplitBlockProps

spacingVariants
marginVariants, paddingVariants

backgroundColorVariants
textColorVariants, borderColorVariants

widthVariants, heightVariants
positionVariants

fontSizeVariants, fontWeightVariants
textAlignVariants, lineHeightVariants

roundedVariants, shadowVariants
borderVariants

ThemeProvider
ThemeProviderProps

useTheme()
ThemeContextValue

modernUITheme
ThemeConfig

useMediaQuery(query)
boolean

useMobile()
boolean

useViewport()
ViewportSize
Источники: src/index.ts README.md362-386 .devin/wiki.json136-139

Каталог экспортируемых компонентов

Следующая таблица документирует все экспорты компонентов с их исходными расположениями и интерфейсами TypeScript:
Имя экспортаТипИсходный файлИнтерфейс свойствОписание
BlockКомпонентsrc/core/ui/Block.tsxBlockPropsСемантический блочный контейнер с поддержкой элементов HTML5
BoxКомпонентsrc/core/ui/Box.tsxBoxPropsГибкий примитив с полной поддержкой вариантов
GridКомпонентsrc/core/ui/Grid.tsxGridPropsПримитив макета CSS Grid
FlexКомпонентsrc/core/ui/Flex.tsxFlexPropsПримитив макета Flexbox
StackКомпонентsrc/core/ui/Stack.tsxStackPropsВертикальное/горизонтальное расположение с промежутками
ButtonКомпонентsrc/components/ui/Button.tsxBaseButtonPropsКнопка действия с вариантами
CardКомпонентsrc/components/ui/Card.tsxCardPropsГибкая карточка с составными частями
Card.HeaderКомпонентsrc/components/ui/Card.tsxCardHeaderPropsСекция заголовка карточки
Card.ContentКомпонентsrc/components/ui/Card.tsxCardContentPropsСекция содержимого карточки
Card.FooterКомпонентsrc/components/ui/Card.tsxCardFooterPropsСекция подвала карточки
Card.TitleКомпонентsrc/components/ui/Card.tsxCardTitlePropsЭлемент заголовка карточки
Card.DescriptionКомпонентsrc/components/ui/Card.tsxCardDescriptionPropsТекст описания карточки
TextКомпонентsrc/components/ui/Text.tsxTextPropsСемантическая отрисовка текста
TitleКомпонентsrc/components/ui/Title.tsxTitlePropsИерархия заголовков (h1-h6)
BadgeКомпонентsrc/components/ui/Badge.tsxBadgePropsКомпонент небольшой метки
ContainerКомпонентsrc/components/ui/Container.tsxContainerPropsАдаптивный контейнер
IconКомпонентsrc/components/ui/Icon.tsxIconPropsОбертка для SVG-иконок
ImageКомпонентsrc/components/ui/Image.tsxImagePropsОптимизированный компонент изображения
GroupКомпонентsrc/components/ui/Group.tsxGroupPropsГруппировка связанных элементов
SheetКомпонентsrc/components/ui/Sheet.tsxSheetPropsКомпонент выдвижной панели
AccordionКомпонентsrc/components/ui/Accordion.tsxAccordionPropsРаскрывающиеся секции содержимого
DashLayoutКомпонентsrc/layouts/DashLayout.tsxDashLayoutPropsШаблон макета дашборда
LayoutBlockКомпонентsrc/layouts/LayoutBlock.tsxLayoutBlockPropsГибкий макет блока содержимого
SplitBlockКомпонентsrc/layouts/SplitBlock.tsxSplitBlockPropsМакет с двумя колонками
Источники: src/index.ts README.md362-386 src/registry.json2-244

API системы вариантов

Система вариантов предоставляет 12 компонуемых категорий свойств, которые применяются ко всем компонентам через движок CVA (class-variance-authority). Каждая категория вариантов сопоставляется с конкретными типами TypeScript и утилитарными классами Tailwind CSS.

Типы свойств вариантов

Исходные файлы

Варианты эффектов

Варианты типографики

Варианты макета

Варианты цветов

Варианты отступов

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

определено в

p, px, py, pt, pb, pl, pr
Тип: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'

m, mx, my, mt, mb, ml, mr
Тип: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'auto'

bg
Тип: 'background' | 'card' | 'primary' | 'secondary' | и др.

c
Тип: 'foreground' | 'primary' | 'secondary' | 'muted' | и др.

borderColor
Тип: 'border' | 'input' | 'primary' | и др.

w
Тип: 'auto' | 'full' | 'screen' | 'fit' | 'min' | 'max'

h, minH
Тип: 'auto' | 'full' | 'screen' | 'fit' | 'min'

maxW
Тип: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | и др.

position
Тип: 'relative' | 'absolute' | 'fixed' | 'sticky'

size
Тип: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | и др.

weight
Тип: 'normal' | 'medium' | 'semibold' | 'bold'

align
Тип: 'left' | 'center' | 'right' | 'justify'

leading
Тип: 'none' | 'tight' | 'snug' | 'normal' | 'relaxed' | 'loose'

rounded
Тип: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full'

shadow
Тип: 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'

border
Тип: '1px solid border' | '2px solid border' | и др.

src/core/variants/spacing.ts
paddingVariants, marginVariants

src/core/variants/colors.ts
backgroundColorVariants, textColorVariants

src/core/variants/layout.ts
widthVariants, heightVariants, positionVariants

src/core/variants/typography.ts
fontSizeVariants, fontWeightVariants

src/core/variants/effects.ts
roundedVariants, shadowVariants, borderVariants
Источники: src/core/variants/ README.md170-217 .devin/wiki.json19-22

Справочная таблица свойств вариантов

Категория вариантаСвойстваДопустимые значенияИмя экспортаИсходный файл
Внутренние отступыp, px, py, pt, pb, pl, pr'none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'paddingVariantssrc/core/variants/spacing.ts
Внешние отступыm, mx, my, mt, mb, ml, mr'none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl', 'auto'marginVariantssrc/core/variants/spacing.ts
Фонbg'background', 'card', 'primary', 'secondary', 'destructive', 'muted', 'accent'backgroundColorVariantssrc/core/variants/colors.ts
Цвет текстаc'foreground', 'primary', 'secondary', 'muted', 'accent', 'destructive'textColorVariantssrc/core/variants/colors.ts
Цвет границыborderColor'border', 'input', 'primary', 'secondary', 'destructive'borderColorVariantssrc/core/variants/colors.ts
Ширинаw'auto', 'full', 'screen', 'fit', 'min', 'max'widthVariantssrc/core/variants/layout.ts
Высотаh, minH'auto', 'full', 'screen', 'fit', 'min'heightVariantssrc/core/variants/layout.ts
Максимальная ширинаmaxW'xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl', '6xl', '7xl', 'full'maxWidthVariantssrc/core/variants/layout.ts
Позиционированиеposition'relative', 'absolute', 'fixed', 'sticky'positionVariantssrc/core/variants/layout.ts
Размер шрифтаsize'xs', 'sm', 'md', 'lg', 'xl', '2xl', '3xl', '4xl', '5xl'fontSizeVariantssrc/core/variants/typography.ts
Толщина шрифтаweight'normal', 'medium', 'semibold', 'bold'fontWeightVariantssrc/core/variants/typography.ts
Выравнивание текстаalign'left', 'center', 'right', 'justify'textAlignVariantssrc/core/variants/typography.ts
Межстрочный интервалleading'none', 'tight', 'snug', 'normal', 'relaxed', 'loose'lineHeightVariantssrc/core/variants/typography.ts
Закруглениеrounded'none', 'sm', 'md', 'lg', 'xl', '2xl', 'full'roundedVariantssrc/core/variants/effects.ts
Теньshadow'none', 'sm', 'md', 'lg', 'xl', '2xl'shadowVariantssrc/core/variants/effects.ts
Границаborder'1px solid border', '2px solid border', 'default'borderVariantssrc/core/variants/effects.ts
Источники: src/core/variants/ README.md174-217 .devin/wiki.json19-22

Паттерн пробрасывания свойств

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

Разрешение вариантов

Слой примитива

Слой компонента

API разработчика

пробрасывает отступы и эффекты

применяет варианты кнопки

применяет базовые варианты

  p='md'
  rounded='lg'
  variant='primary'
  size='md'
/>

Button
src/components/ui/Button.tsx

BaseButtonProps расширяет
- ButtonHTMLAttributes
- Варианты отступов
- Варианты эффектов
- Пользовательские: variant, size

Box
src/core/ui/Box.tsx

BoxProps расширяет
- HTMLAttributes
- Все свойства вариантов
- свойство component

Движок CVA
class-variance-authority

Сгенерированные классы:
'p-4 rounded-lg'
+ специфичные классы кнопки

  class='...'
  data-class='button'
/>
Источники: src/components/ui/Button.tsx src/core/ui/Box.tsx .devin/wiki.json11-14 README.md14-17

Примеры пробрасывания свойств

Следующие примеры демонстрируют, как свойства вариантов пробрасываются от составных компонентов к их базовым примитивам: Button расширяет Box:
// Button получает варианты отступов и эффектов от Box
<Button 
  p="md"           // пробрасывается в Box → paddingVariants
  rounded="lg"     // пробрасывается в Box → roundedVariants
  variant="primary" // специфичное для Button свойство
  size="md"        // специфичное для Button свойство
/>
Card расширяет Block:
// Card получает все варианты Block
<Card 
  p="xl"           // пробрасывается в Block → paddingVariants
  shadow="md"      // пробрасывается в Block → shadowVariants
  rounded="2xl"    // пробрасывается в Block → roundedVariants
  bg="card"        // пробрасывается в Block → backgroundColorVariants
/>
Text расширяет Box:
// Text получает варианты Box плюс варианты типографики
<Text 
  size="lg"        // специфичный для Text вариант типографики
  weight="bold"    // специфичный для Text вариант типографики
  c="primary"      // пробрасывается в Box → textColorVariants
  mb="md"          // пробрасывается в Box → marginVariants
/>
Источники: src/components/ui/Button.tsx src/components/ui/Card.tsx src/components/ui/Text.tsx README.md38-60

Система типов TypeScript

Библиотека предоставляет всестороннюю поддержку TypeScript с точными определениями типов для всех компонентов, вариантов и утилит.

Иерархия базовых типов

Свойства компонентов макетов

Свойства UI-компонентов

Свойства базовых компонентов

Типы вариантов

Базовые типы

React.HTMLAttributes

React.ComponentPropsWithRef

React.ForwardRefExoticComponent

SpacingProps
из paddingVariants, marginVariants
VariantProps

ColorProps
из backgroundColorVariants, textColorVariants
VariantProps

LayoutProps
из widthVariants, heightVariants
VariantProps

TypographyProps
из fontSizeVariants, fontWeightVariants
VariantProps

EffectsProps
из roundedVariants, shadowVariants
VariantProps

BoxProps расширяет
HTMLAttributes & SpacingProps
& ColorProps & LayoutProps
& EffectsProps & TypographyProps

BlockProps расширяет
BoxProps & { component?: 'section' | 'article' | ... }

GridProps расширяет
BlockProps & { cols?: number, gap?: string }

FlexProps расширяет
BoxProps & { direction?: 'row' | 'column' }

StackProps расширяет
BoxProps & { gap?: string, direction?: 'vertical' | 'horizontal' }

BaseButtonProps расширяет
ButtonHTMLAttributes & SpacingProps
& EffectsProps & { variant, size, ... }

CardProps расширяет
BlockProps & { variant?: string }

TextProps расширяет
BoxProps & TypographyProps
& { as?: 'p' | 'span' | ... }

TitleProps расширяет
BoxProps & TypographyProps
& { order: 1 | 2 | 3 | 4 | 5 | 6 }

DashLayoutProps расширяет
{ sidebar, header, children, ... }

LayoutBlockProps расширяет
BlockProps & { layout?: 'default' | 'grid' | 'flex' }

SplitBlockProps расширяет
{ left, right, ratio?, ... }
Источники: src/core/ui/Box.tsx src/core/ui/Block.tsx src/components/ui/Button.tsx src/components/ui/Card.tsx src/layouts/

Общие паттерны типов

ПаттернОписаниеПример интерфейсаИсточник
Свойства вариантовСвойства, извлеченные из определений вариантов CVA с использованием VariantProps<typeof variant>VariantProps<typeof paddingVariants>src/core/variants/
Свойство ComponentТип объединения, позволяющий выбор семантического HTML-элементаcomponent?: 'section' | 'article' | 'nav' | 'header' | 'footer' | 'aside' | 'main' | 'div'src/core/ui/Block.tsx
Свойство AsТип объединения для полиморфной отрисовки текстаas?: 'p' | 'span' | 'div' | 'em' | 'strong' | 'small'src/components/ui/Text.tsx
Свойство OrderЧисловой литеральный тип для уровней заголовковorder: 1 | 2 | 3 | 4 | 5 | 6src/components/ui/Title.tsx
Пробрасывание RefForwardRefExoticComponent с ComponentPropsWithRefReact.forwardRef<HTMLDivElement, BoxProps>src/core/ui/Box.tsx
Составные компонентыПаттерн пространства имен для связанных частей компонентаCard.Header, Card.Content, Card.Footersrc/components/ui/Card.tsx
Источники: src/core/ui/ src/components/ui/ .devin/wiki.json11-14

Общие свойства компонентов

Все компоненты в библиотеке разделяют последовательный набор базовых свойств, унаследованных от HTML-атрибутов React и системы вариантов.

Стандартные React-свойства

СвойствоТипОписаниеУнаследовано от
classNamestringДополнительные CSS-классы для объединения со сгенерированными классамиHTMLAttributes
styleCSSPropertiesВстроенные стилиHTMLAttributes
childrenReactNodeДочерние элементы для отрисовкиHTMLAttributes
refRef<HTMLElement>Ссылка на базовый DOM-элементComponentPropsWithRef
data-*stringАтрибуты данных для таргетирования DOMHTMLAttributes
aria-*stringАтрибуты доступностиHTMLAttributes

Пользовательские свойства компонентов

СвойствоТипПо умолчаниюОписаниеДоступность
component'section' | 'article' | 'nav' | 'header' | 'footer' | 'aside' | 'main' | 'div''div'Семантический HTML-элемент для отрисовкиBlock, Grid
as'p' | 'span' | 'div' | 'em' | 'strong' | 'small''p'Тип текстового элементаText
order1 | 2 | 3 | 4 | 5 | 6ОбязательноУровень заголовкаTitle
data-classstringИмя компонентаИдентификатор компонента для таргетирования DOMВсе компоненты
Источники: src/core/ui/Block.tsx src/components/ui/Text.tsx src/components/ui/Title.tsx .devin/wiki.json11-14

API системы тем

Система тем предоставляет поддержку темной темы, настройки доступности и сохранение темы через React Context.

Провайдер темы

// Экспорт: ThemeProvider
// Интерфейс: ThemeProviderProps
interface ThemeProviderProps {
  theme: ThemeConfig;
  children: ReactNode;
  defaultMode?: 'light' | 'dark' | 'system';
  storageKey?: string;
}

// Экспорт: useTheme
// Возвращает: ThemeContextValue
interface ThemeContextValue {
  isDarkMode: boolean;
  toggleDarkMode: () => void;
  setDarkMode: (enabled: boolean) => void;
  mode: 'light' | 'dark' | 'system';
  setMode: (mode: 'light' | 'dark' | 'system') => void;
  preferences: ThemePreferences;
  updatePreferences: (preferences: Partial<ThemePreferences>) => void;
}

// Экспорт: modernUITheme
// Тип: ThemeConfig
interface ThemeConfig {
  name: string;
  displayName: string;
  description: string;
  author: string;
  version: string;
  colors: ColorScheme;
  typography: TypographyConfig;
  spacing: SpacingConfig;
  effects: EffectsConfig;
}
Источники: src/themes/providers/ThemeProvider.tsx1-109 src/themes/modern-ui.ts README.md219-249

API вспомогательных хуков

Библиотека экспортирует утилиты адаптивного дизайна для определения области просмотра и медиа-запросов.
ХукПараметрыВозвращаемый типОписаниеИсточник
useMediaQueryquery: stringbooleanСоответствует CSS медиа-запросуsrc/lib/hooks/useMediaQuery.ts
useMobileНетbooleanОпределяет мобильную область просмотра (< 768px)src/lib/hooks/useMobile.ts
useViewportНет{ width: number, height: number }Возвращает текущие размеры области просмотраsrc/lib/hooks/useViewport.ts
Пример использования:
import { useMediaQuery, useMobile, useViewport } from '@ui8kit/core';

function ResponsiveComponent() {
  const isMobile = useMobile();
  const isSmall = useMediaQuery('(max-width: 640px)');
  const { width, height } = useViewport();
  
  return <Box>{isMobile ? 'Мобильная' : 'Десктопная'}</Box>;
}
Источники: src/lib/hooks/ README.md341-359

Специфичные для компонентов варианты

Некоторые компоненты определяют дополнительные варианты помимо основной системы вариантов для специализированной стилизации.

Варианты кнопок

// Определено в: src/components/ui/Button.tsx
export const buttonStyleVariants = cva('', {
  variants: {
    variant: {
      default: 'bg-primary text-primary-foreground hover:bg-primary/90',
      destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
      outline: 'border border-input bg-background hover:bg-accent',
      secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
      ghost: 'hover:bg-accent hover:text-accent-foreground',
      link: 'text-primary underline-offset-4 hover:underline'
    }
  }
});

export const buttonSizeVariants = cva('', {
  variants: {
    size: {
      sm: 'h-8 px-3 text-sm',
      md: 'h-10 px-4 text-base',
      lg: 'h-12 px-6 text-lg',
      icon: 'h-10 w-10'
    }
  }
});
Источники: src/components/ui/Button.tsx README.md284-303

Варианты карточек

// Определено в: src/components/ui/Card.tsx
export const cardVariants = cva('', {
  variants: {
    variant: {
      default: 'bg-card text-card-foreground',
      outlined: 'border border-border bg-card text-card-foreground'
    }
  }
});
Источники: src/components/ui/Card.tsx README.md125-144

Атрибуты данных

Все компоненты отрисовываются с атрибутами data-class для последовательного таргетирования DOM и стилизации.
КомпонентЗначение data-classНазначение
Block'block'Идентифицирует примитив Block
Box'box'Идентифицирует примитив Box
Grid'grid'Идентифицирует примитив Grid
Flex'flex'Идентифицирует примитив Flex
Stack'stack'Идентифицирует примитив Stack
Button'button'Идентифицирует компонент Button
Card'card'Идентифицирует компонент Card
Card.Header'card-header'Идентифицирует заголовок Card
Card.Content'card-content'Идентифицирует содержимое Card
Card.Footer'card-footer'Идентифицирует подвал Card
Text'text'Идентифицирует компонент Text
Title'title'Идентифицирует компонент Title
Badge'badge'Идентифицирует компонент Badge
Container'container'Идентифицирует компонент Container
Пример использования:
// Таргетирование в тестах или таблицах стилей
const button = document.querySelector('[data-class="button"]');

// CSS таргетирование
[data-class="card"] {
  /* Пользовательские стили */
}
Источники: src/core/ui/ src/components/ui/ .devin/wiki.json11-14

Подробная документация API

Для полной документации API отдельных компонентов со всеми свойствами, методами и примерами использования см.: Источники: .devin/wiki.json135-168 src/index.ts README.md1-453