Chat Token Chip

Inline-чип токена /skill и @connector с hover-карточкой.

Установка

Использование

Чип сам по себе — это ссылка-текст (label), а имя в карточке не дублируется. Карточка повторяет узкую раскладку Claude (w-[178px]): серый бокс с описанием (line-clamp-5) и под ним тип-лейбл.

Компонент построен на примитиве PreviewCard (богатый hover-контент, привязанный к inline-ссылке), а не на Tooltip, поэтому всплывающая карточка не объявляется как role="tooltip". Карточка открывается почти мгновенно (delay={150}).

API намеренно generic: kind — свободная строка (стиль одинаков для всех видов), typeLabel задаёт вызывающий код (локаль не зашита), icon — произвольная нода.

Состояния

  • default — окрашенный чип-токен, карточка скрыта. kind="skill" и kind="connector" выглядят одинаково.
  • hover — открывается карточка: при наличии description показывается внутренний muted-бокс с описанием (line-clamp-5), под ним всегда тип-лейбл.
  • focus-visible — у интерактивного чипа (с onOpen) при фокусе с клавиатуры появляется кольцо focus-visible:ring-2 focus-visible:ring-ring, и фокус так же открывает карточку. Без onOpen чип не получает фокус, поэтому фокус не открывает карточку.
  • active / pressed — при клике или нажатии Enter / Space интерактивный чип кратко затемняется (active:opacity-70) и подчёркивается (active:underline).
  • no-meta fallbackdescription отсутствует, бокс описания скрыт, карточка показывает только typeLabel.
  • с иконкой — опциональный icon рендерится перед описанием внутри карточки.
  • clickable — при заданном onOpen чип получает role="button", tabIndex={0}, cursor-pointer; onOpen(kind, id) срабатывает по клику и по Enter / Space. Без onOpen чип остаётся не-интерактивным.
  • disableddisabled снимает обработчики и фокус, приглушает лейбл (opacity-50, cursor-not-allowed) и выставляет aria-disabled; карточка по-прежнему открывается по hover, чтобы ссылку можно было осмотреть.

Oracul DS

Built for the future of AI-driven interfaces.