Counter

Счётчик — компактный компонент для отображения числовых значений внутри другой UI-поверхности: кнопок, тегов, пунктов меню, навигации.

Демо

Preview
9
Prop
Type
Value
appearance
primary | neutral | red | orange | yellow | green | blue | violet | pink
data-test-id
text
plusLimit
number
roleAppearance
accent | decor
size
xs | s
value
number
variant
count | count-plus | count-k
Code
<Counter appearance="primary" plusLimit={10} roleAppearance="accent" size="xs" variant="count" value={9} />

Когда использовать

  • Количество непрочитанных уведомлений у иконки колокольчика.
  • Количество элементов в корзине или списке.
  • Бейдж на табе / пункте меню.

Когда не нужен Counter: для крупных числовых метрик используйте Typography, для статусов — Tag.

Анатомия

Appearance (default primary)

Цветовая схема счётчика. Значение совпадает с именем семантической палитры темы:

  • primary — акцентный (непрочитанные, новые).
  • neutral — нейтральный.
  • red — ошибки, срочные элементы.
  • orange — предупреждения.
  • yellow — внимание.
  • green — успех, положительный статус.
  • blue — информационный.
  • violet — дополнительный акцент.
  • pink — дополнительный акцент.

Variant

Формат отображения числа: count — число как есть, count-plus — сокращение с плюсом после лимита (10+, 99+), count-k — сокращение в тысячах (1K, 12K).

Size

Размер бейджа: xs — на иконках/мелких элементах, s — дефолт в табах и пунктах меню.

Role appearance (default accent)

Роль, в которой применяется выбранный appearance:

  • accent — насыщенная заливка, основной токен appearance.
  • decor — декоративная подложка, визуально более мягкий бейдж.

Установка

pnpm add @cloud-ru/ds-counter
import { Counter, APPEARANCE, VARIANT, SIZE } from '@cloud-ru/ds-counter'

Примеры использования

Обычное число

Обычное число
9
tsx
import { Counter } from '@cloud-ru/ds-counter';

export function Basic() {
  return <Counter value={9} />;
}

С порогом 10+

С порогом 10+
9+
tsx
import { Counter } from '@cloud-ru/ds-counter';

export function PlusThreshold() {
  return <Counter value={42} variant='count-plus' plusLimit={10} />;
}

Тысячи как K

Тысячи как K
3K
tsx
import { Counter } from '@cloud-ru/ds-counter';

export function ThousandsK() {
  return <Counter value={2500} variant='count-k' />;
}

Red — ошибки и срочные элементы

Red — ошибки и срочные элементы
3
tsx
import { Counter } from '@cloud-ru/ds-counter';

export function Red() {
  return <Counter value={3} appearance='red' />;
}

Props

Types

PropsCounterProps
PropTypeDefaultRequiredDescription
appearance"blue" | "green" | "neutral" | "orange" | "pink" | "primary" | "red" | "violet" | "yellow"primarynoВнешний вид
classNamestringnoДополнительный CSS-класс
data-test-idstringno
innerRefRef<HTMLDivElement>noRef на корневой DOM-элемент. Используем явный проп, чтобы не зависеть от `forwardRef` и не тащить type-assertions на экспорт.
plusLimitnumber10noПорог сокращения значения для варианта `count-plus`
roleAppearance"accent" | "decor"accentnoРоль, в которой применяется `appearance`: акцентная заливка или декоративная
size"s" | "xs"snoРазмер
valuenumberyesЗначение
variant"count" | "count-k" | "count-plus"countnoВариант форматирования

Unions

Types

CounterProps

Unions

Storybook

Figma