Skip to content

Schema primitives

Базовые schema-объекты: rect, line, circle, arc, polygon, border, clip и opacity.

Практическая схема

  • Документация: NovaCore.
  • Раздел: Отрисовка.
  • Тема страницы: Schema primitives.
  • Переключатель TypeScript / DSL находится в панели навигации; вкладка Код в примере показывает файлы выбранного подхода.
Исполняемый примерГалерея schema primitivesRect, line, circle, arc, polygon и dashed styling.
import { Nova, NovaNode, type NovaSchema } from '@endge/nova'

// Документационный сценарий: nova-schema-primitives
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: 'Галерея schema primitives',
        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: 'schema-primitives' })
  surface.createNode(ExampleNode)

  return () => app.destroy()
}
schema · @endge/nova

NovaSchemaItem

Дискриминированный union всех primitives, которые renderer умеет отрисовывать через schema.

type NovaSchemaItem = { type: 'rect' | 'border' | 'text' | 'line' | 'circle' | 'arc' | 'icon' | 'polygon' }
rect Базовый прямоугольник для фонов, панелей, карточек и батчинга.
ПолеТипОписание
x, yrequirednumberЛокальная позиция внутри текущей node transform.
width, heightrequirednumberЛогический размер rect.
styles.backgroundstring | ImageBitmap | HTMLCanvasElementЦвет, rgba или canvas texture/pattern.
styles.border{ color, width, radius, dashPattern, position }Обводка rect. WebGL backend может rasterize сложные случаи в texture resource.
styles.opacitynumberПрозрачность элемента.
text Текст с padding, align, ellipsis, markdown parser и clip.
ПолеТипОписание
textrequiredstringСтрока для отрисовки.
parser'string' | 'markdown''string'Markdown parser поддерживает базовые bold/italic/newline chunks.
styles.font{ family, size, weight }Шрифт текста.
styles.paddingNovaStylePaddingInner padding. Включает безопасный inner clip.
styles.align{ horizontal, vertical }Выравнивание внутри text box.
styles.ellipsisbooleanОбрезает длинный текст в одну строку.
line / circle / arc Простые primitives для связей, маркеров, progress rings и overlays.
ПолеТипОписание
line.x1/y1/x2/y2requirednumberКоординаты начала и конца линии.
line.styles.dashPatternnumber[]Штриховка линии.
circle.x/y/radiusrequirednumberЦентр и радиус круга.
circle.styles.border{ color, width, dashPattern }Обводка круга.
arc.x/y/radiusrequirednumberЦентр и радиус дуги.
arc.startAngle/endAnglerequirednumberУглы в радианах.
arc.styles{ color, width, lineCap, opacity }Цвет, толщина и окончание дуги.
  • Schema items обычно создаются внутри render() node и передаются в renderer.schema().
  • Для точного hit-test используйте setRenderBoundsFromSchema(schema).

Arc

arc рисует дугу или кольцевой сегмент без DOM и подходит для progress rings, circular indicators и компактных gauge-элементов.

ts
{
  type: 'arc',
  x: 24,
  y: 24,
  radius: 9,
  startAngle: -Math.PI / 2,
  endAngle: -Math.PI / 2 + Math.PI * 1.5,
  styles: {
    color: '#10b981',
    width: 2,
    lineCap: 'round',
  },
}

Для готового индикатора прогресса используйте NovaUIKit.progressRingSchema.

Как применять

Используйте страницу как короткую рабочую заметку: сначала определите границу ответственности, затем откройте пример и сравните TypeScript-реализацию с DSL-описанием. Runtime-код остается в Nova-слое, а Vue отвечает только за mount, layout shell и cleanup.