Тема
LazyResizer
Deferred resize updates без лишних layout пересчетов.
Практическая схема
- Документация: NovaUIKit.
- Раздел: Resizer primitives.
- Тема страницы: LazyResizer.
- Переключатель TypeScript / DSL находится в панели навигации; вкладка
Кодв примере показывает файлы выбранного подхода.
Исполняемый примерРабочая область с resizeИнтерактивный splitter и panel geometry.
import { Nova, NovaNode, type NovaSchema } from '@endge/nova'
// Документационный сценарий: nova-resizable-workspace
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: 'Рабочая область с resize',
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: 'resizable-workspace' })
surface.createNode(ExampleNode)
return () => app.destroy()
}ui-kit · @endge/nova-ui-kit
LazyResizer
Reusable Nova node for panel resizing with wider hit bounds than visual line.
class LazyResizer<E extends EventList> extends NovaNode<E>Options
| Поле | Тип | Описание |
|---|---|---|
directionrequired | 'top' | 'right' | 'bottom' | 'left' | Сторона, по которой работает resize. |
minSize / maxSizerequired | number | Ограничения размера при drag. |
lineWidth | number1 | Визуальная толщина line. |
lineWidthHover | number10 | Толщина hit zone. |
activeOverlayColor | string | Цвет overlay во время drag. |
Callbacks
| Поле | Тип | Описание |
|---|---|---|
onChangeStart | (event) => void | Точка подключения внешней модели перед resize. |
onChangeMove | (event, delta) => void | Синхронизация во время drag. |
onChangeEnd | (event, size) => void | Финальный размер после drag. |
Как применять
Используйте страницу как короткую рабочую заметку: сначала определите границу ответственности, затем откройте пример и сравните TypeScript-реализацию с DSL-описанием. Runtime-код остается в Nova-слое, а Vue отвечает только за mount, layout shell и cleanup.