Перейти к содержимому
EN
Масштаб
Плотность
Тема
Акцент

Отображение данных

Лента событий

Хронология: что произошло и когда. Точки соединены линией, поэтому лента читается как последовательность, а не как список.

Компонент
Прогон завершён
4 файла изменено
14:36
Индексация
terrain/
14:32
Разметка
<div class="inst-timeline">
  <div class="inst-timeline-item">
    <span class="inst-timeline-dot" data-tone="ok"></span>
    <div class="inst-timeline-body">
      Прогон завершён
      <div class="inst-timeline-sub">4 файла изменено</div>
    </div>
    <span class="inst-timeline-time">14:36</span>
  </div>
  <div class="inst-timeline-item">
    <span class="inst-timeline-dot" data-tone="running"></span>
    <div class="inst-timeline-body">
      Индексация
      <div class="inst-timeline-sub">terrain/</div>
    </div>
    <span class="inst-timeline-time">14:32</span>
  </div>
</div>

Контракт

Что Обязательно Почему
<ol> и <li> да Порядок здесь несёт смысл, и скринридер должен объявить «список из N»
<time datetime> да «14:36» без даты неоднозначно вне контекста дня
Тон дублируется словом в описании да Точка сама по себе ничего не сообщает тому, кто не различает тон
data-tone нет Без атрибута точка нейтральна

Линия рисуется псевдоэлементом и в озвучивание не попадает — она декоративна.

Доступность

Это список Оберните в <ol>, а событие — в <li>: порядок здесь несёт смысл, и скринридер должен объявить «список из N»
Время <time datetime="…"> с машинным значением. «14:36» без даты неоднозначно вне контекста дня
Не только цвет Тон точки дублируется словом в описании события. Точка сама по себе ничего не сообщает тому, кто не различает тон
Линия Рисуется псевдоэлементом и в озвучивание не попадает — это правильно, она декоративна
Уменьшенное движение Пульсация точки running замедляется, а не гаснет

Варианты

Точка берёт тот же data-tone, что и вся библиотека.

Пример
Рядовое событие
Происходит сейчас
Успешно завершено
С замечаниями
Отказ
Разметка
<div class="inst-timeline">
  <div class="inst-timeline-item">
    <span class="inst-timeline-dot"></span>
    <div class="inst-timeline-body">Рядовое событие</div>
  </div>
  <div class="inst-timeline-item">
    <span class="inst-timeline-dot" data-tone="running"></span>
    <div class="inst-timeline-body">Происходит сейчас</div>
  </div>
  <div class="inst-timeline-item">
    <span class="inst-timeline-dot" data-tone="ok"></span>
    <div class="inst-timeline-body">Успешно завершено</div>
  </div>
  <div class="inst-timeline-item">
    <span class="inst-timeline-dot" data-tone="warn"></span>
    <div class="inst-timeline-body">С замечаниями</div>
  </div>
  <div class="inst-timeline-item">
    <span class="inst-timeline-dot" data-tone="error"></span>
    <div class="inst-timeline-body">Отказ</div>
  </div>
</div>
Тон Когда
без атрибута Рядовое событие
data-tone="running" Происходит сейчас. Точка пульсирует
data-tone="ok" Успешное завершение
data-tone="warn" С замечаниями
data-tone="error" Отказ

API

Классы
ИмяЧто делает
класс
inst-timelineКонтейнер
inst-timeline-itemОдно событие
inst-timeline-dotТочка на линии
inst-timeline-bodyОписание события
inst-timeline-subПодробность под описанием
inst-timeline-timeОтметка времени, прижата к концу
Атрибуты
ИмяЗначениеЧто делает
атрибут
data-tone—neutral running ok warn error
Токены
ИмяЗначениеОткуда
токен
--size-gutter14pxбаза +14: плотность · масштаб
--gap-inlinevar(--space-4)база +14: плотность · масштаб
--row-pad-yvar(--space-3)база +14: плотность · масштаб
--size-dot6pxбаза +4: масштаб
--size-marker2pxбаза +4: масштаб
--borderlight-dark(oklch(0 0 0 / 0.12), oklch(1 0 0 / 0.11))одно на все ячейки
--text-sm0.875remбаза +4: масштаб
--text-xs0.78125remбаза +4: масштаб
--text-mutedlight-dark(var(--n-8), var(--n-6))одно на все ячейки
--tone-markvar(--text-secondary)база +4:

Почему кит устроен именно так — конституция · Открытый код под MIT, github.com/keshon/instrument