Skip to content

Быстрый старт

Установка

Пакет подключается как обычная npm/workspace зависимость и используется напрямую из Vue-кода.

ts
import { TimelineChart } from '@engine2d/timeline-chart'

Для базового сценария нужен Vue 3 и runtime-пакеты Nova. Для template-профилей через DSL в проекте должен быть включен Nova compiler plugin. Для большинства рабочих сценариев используйте renderer="webgl".

Основные понятия

ПонятиеЧто означает
groupСтрока, ресурс или категория в левой панели.
taskИнтервал времени с startTime, endTime и groupId.
backgroundФоновый интервал для визуального контекста.
ungrouped taskЗадача с groupId: null, которая попадает в нижнюю ungrouped panel.
timeRangeОбщий доступный диапазон времени и текущее видимое окно.
viewportВидимая часть timeline, scroll offsets и ограничения zoom.
task profileПравило отрисовки задачи через schema или compiled recipe.
pluginРасширение timeline, например markers или overlay.
TimelineChartRefImperative API: add, update, remove, batch, focusOnTask, selectTasks, refresh, data, options.

Пример

Исполняемый примерTimeline: базовый примерГруппы, задачи и временная шкала.
import { Nova, NovaNode, type NovaSchema } from '@endge/nova'

// Документационный сценарий: timeline-chart-basic
class ExampleNode extends NovaNode<Record<string, Event>> {
  render(): void {
    const schema: NovaSchema = [
      {
        type: 'rect',
        x: 24,
        y: 24,
        width: this.width - 48,
        height: this.height - 48,
        styles: { background: '#0d2745' },
      },
      {
        type: 'text',
        x: 44,
        y: 44,
        width: this.width - 88,
        height: 32,
        text: 'Timeline: базовый пример',
        styles: { color: '#e8f5ff' },
      },
    ]

    this.renderer.schema(schema)
    this.setRenderBoundsFromSchema(schema)
  }
}

export function mountExample(canvas: HTMLCanvasElement) {
  const app = Nova.createApp({
    target: canvas,
    size: { width: canvas.clientWidth, height: canvas.clientHeight, maxDpr: 2 },
    scheduler: { loop: false },
  })
  const surface = app.surface({ id: 'dirty-culling' })
  surface.createNode(ExampleNode)

  return () => app.destroy()
}