getStableColor

Детерминированно выбирает цвет из палитры темы (--theme-stable-color-1--theme-stable-color-8) по переданной строке: одна и та же строка всегда даёт один и тот же цвет — во всех списках, сессиях и приложениях. Возвращает CSS-значение вида var(--theme-stable-color-N).

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

import { getStableColor } from "@tulls/ui/helpers";

getStableColor("Tulls User"); // "var(--theme-stable-color-1)"
getStableColor("Дементьева Алина"); // "var(--theme-stable-color-2)"

Автоматически в Avatar

Если color не передан, а children — строка, Avatar.Fallback сам вычисляет цвет через getStableColor: у каждого имени — свой стабильный цвет без ручной настройки. Контрастный цвет инициалов компонент подбирает к любому цвету палитры автоматически.

<Avatar.Root>
  {/* фон var(--theme-stable-color-1) */}
  <Avatar.Fallback>Tulls User</Avatar.Fallback>
</Avatar.Root>

Стабильный цвет по UUID

Цвет, вычисленный из имени, «переедет» при переименовании пользователя. Чтобы цвет был привязан к пользователю навсегда, передавайте в хелпер его id и отдавайте результат явно через color:

<Avatar.Fallback color={getStableColor(user.id)}>{user.name}</Avatar.Fallback>

// user.id = "6f9619ff-8b86-d011-b42d-00c04fc964ff" → var(--theme-stable-color-6)