bo-grid · Svelte 5 · MIT

Таблица данных для оживлённых рынков.

Табло котировок, списки наблюдения, журналы ордеров и стаканы. Десятки тысяч тиков в секунду укладываются в одно обновление на кадр, и перерисовываются только изменившиеся ячейки. Группировка, сводные таблицы, древовидные данные и экспорт в Excel входят в тот же бесплатный пакет.

npm i bo-grid

Смоделированные котировки. Каждая изменившаяся ячейка мигает; Ctrl/⌘+F находит символ.
  • 1000 × 24символов и столбцов на одном табло
  • 30 000событий в секунду за одно обновление на кадр
  • ~45 KBядро после gzip, без runtime-зависимостей
  • 8готовых тем и ваши собственные токены

Измерено на production-сборке в Chrome: табло из 1000 символов и 24 столбцов занимает около 9 мс работы основного потока на кадр при 10 000 событий в секунду и около 12 мс при 30 000, и каждая изменившаяся ячейка мигает.

Создано для цен

Всё, что нужно торговому экрану, встроено, а не оставлено на откуп рендереру ячеек.

  • Вспышка на каждом тикеЯчейки подсвечиваются вверх или вниз при изменении и могут показывать величину движения. На загруженном табло удерживаемые вспышки делают каждую из них дешёвой.
  • Цвета ценовых пределовВерхний предел, нижний предел и референсная цена окрашены так, как их показывают биржи, с форматированием по шагу цены и состоянием сессии.
  • Передаётся только то, что на экранеОбъединяющий поток тиков обновляет строки на месте, а подписки по области просмотра передают только видимые символы.
  • Помощники для стакана и ленты сделокПомощники для стакана, ценовой лестницы и ленты сделок в необязательной точке входа размером около 1 KB.

Взгляд вокруг

Табло котировок в цветах биржи, с открытой строкой поиска и закреплёнными строками над прокруткой.
Табло котировок в цветах биржи, с открытой строкой поиска и закреплёнными строками над прокруткой.
Насыщенные ячейки из коробки: тепловая подсветка, сигналы, подписи и свечные спарклайны.
Насыщенные ячейки из коробки: тепловая подсветка, сигналы, подписи и свечные спарклайны.
Электронная таблица, когда она нужна: номера строк, строка фильтров, типизированные редакторы, маркер заполнения и отмена, в светлой теме.
Электронная таблица, когда она нужна: номера строк, строка фильтров, типизированные редакторы, маркер заполнения и отмена, в светлой теме.

Всё в одном пакете

Одна установка, никаких дополнений, никакого лицензионного ключа.

Реальное время
Вспышки на тиках · величина каждого движения · обновления на месте · объединяющий поток тиков · передача только видимых строк · живая пересортировка
Данные
Сортировка по одному и нескольким столбцам · текстовые, числовые, календарные фильтры и фильтры по набору · быстрый поиск · поиск по таблице · группировка с промежуточными итогами · сводные таблицы · древовидные данные · master-detail · строки на стороне сервера
Редактирование
Встроенные и типизированные редакторы · валидация · буфер обмена · маркер заполнения · отмена и повтор
Макет
Закреплённые столбцы и строки · столбцы, которые масштабируются или расширяются по мере роста значений · изменение размера, порядка, скрытие · группы заголовков · объединённые ячейки · виртуализация столбцов · постраничный вывод
Оформление
8 готовых тем и ваши собственные токены · гистограммы в ячейках, значки и цветовые шкалы · спарклайны · локализация
Платформа
Клавиатура и программы чтения с экрана · SSR и SvelteKit · сохранение и восстановление макета · экспорт и импорт CSV и Excel

Начните за минуту

Нативно в Svelte 5. React, Vue, Angular или чистый JavaScript используют элемент <bo-grid> и не требуют настройки Svelte.

Svelte
<script lang="ts">
  import { Grid, type ColumnDef } from 'bo-grid';

  const columns: ColumnDef[] = [
    { type: 'text',    key: 'symbol', header: 'Symbol' },
    { type: 'price',   key: 'price',  header: 'Price', flash: 'auto', showChange: true },
    { type: 'percent', key: 'change', header: 'Chg %' },
    { type: 'volume',  key: 'volume', header: 'Volume' },
  ];
  let rows = $state.raw(quotes);
</script>

<Grid {rows} {columns} height={480} fitColumns findBar />
Любой фреймворк
// React, Vue, Angular or plain JS: no Svelte setup
import 'bo-grid/element';

document.querySelector('bo-grid').config = {
  columns,
  rows,
  height: 480,
  theme: 'dark',
  // Ticks patch rows in place: only changed cells repaint
  onReady: (api) => feed.onTicks((changes) => api.patchRows(changes)),
};

Рядом с графиком

bo-grid и TradeCanvas созданы, чтобы стоять рядом: табло, строки которого открывают график, график рядом с журналом ордеров. Вместе они — начало набора инструментов для торгового софта: графики, ввод ордеров, табло котировок и поток ордеров.

Делаете торговый экран на TradeCanvas?

Мы будем рады узнать об этом.