@endge/nova 0.13.6 → 0.13.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/domain/constants/nova-phase.d.ts +16 -0
- package/dist/domain/types/base.types.d.ts +177 -0
- package/dist/domain/types/component.types.d.ts +156 -0
- package/dist/domain/types/context.types.d.ts +31 -0
- package/dist/domain/types/cursor.types.d.ts +89 -0
- package/dist/domain/types/diagnostics.types.d.ts +148 -0
- package/dist/domain/types/events.types.d.ts +85 -0
- package/dist/domain/types/export.types.d.ts +27 -0
- package/dist/domain/types/hit-test.types.d.ts +16 -0
- package/dist/domain/types/motion.types.d.ts +118 -0
- package/dist/domain/types/renderer.types.d.ts +607 -0
- package/dist/domain/types/rendering/index.d.ts +559 -0
- package/dist/domain/types/semantic.types.d.ts +69 -0
- package/dist/domain/types/sound.types.d.ts +84 -0
- package/dist/domain/types/theme.types.d.ts +53 -0
- package/dist/domain/utils/bounds.d.ts +34 -0
- package/dist/domain/utils/schemaBounds.d.ts +10 -0
- package/dist/index.d.ts +82 -8919
- package/dist/model/input/NovaCaretBlinkController.d.ts +35 -0
- package/dist/model/input/NovaClipboardService.d.ts +18 -0
- package/dist/model/input/NovaInputProxy_Adapter.d.ts +61 -0
- package/dist/model/input/NovaInputValidationController.d.ts +46 -0
- package/dist/model/input/NovaTextInputController.d.ts +126 -0
- package/dist/model/input/NovaTextLayoutEngine.d.ts +31 -0
- package/dist/model/input/index.d.ts +7 -0
- package/dist/model/input/nova-input.types.d.ts +137 -0
- package/dist/model/motion/NovaMotionEngine.d.ts +152 -0
- package/dist/model/motion/nova-motion-easing.d.ts +13 -0
- package/dist/model/motion/nova-motion-interpolation.d.ts +19 -0
- package/dist/model/motion/nova-motion-presets.d.ts +288 -0
- package/dist/model/motion/nova-motion-timeline.d.ts +5 -0
- package/dist/model/platform/NovaCanvas.d.ts +112 -0
- package/dist/model/platform/NovaGraphics.d.ts +32 -0
- package/dist/model/render/backends/canvas2d/NovaCanvas2DTargetManager.d.ts +29 -0
- package/dist/model/render/backends/canvas2d/NovaRenderer2D.d.ts +238 -0
- package/dist/model/render/backends/nova-render-backend-factory.d.ts +10 -0
- package/dist/model/render/backends/nova-render-backend.d.ts +16 -0
- package/dist/model/render/backends/webgl/NovaGpuBufferArena.d.ts +76 -0
- package/dist/model/render/backends/webgl/NovaRendererWebGL.d.ts +154 -0
- package/dist/model/render/backends/webgl/NovaWebGLBatcher.d.ts +17 -0
- package/dist/model/render/backends/webgl/NovaWebGLBuffer.d.ts +19 -0
- package/dist/model/render/backends/webgl/NovaWebGLDevice.d.ts +24 -0
- package/dist/model/render/backends/webgl/NovaWebGLDiagnostics.d.ts +29 -0
- package/dist/model/render/backends/webgl/NovaWebGLFrameRenderer.d.ts +1013 -0
- package/dist/model/render/backends/webgl/NovaWebGLProgram.d.ts +33 -0
- package/dist/model/render/backends/webgl/NovaWebGLTargetManager.d.ts +11 -0
- package/dist/model/render/backends/webgl/NovaWebGLTextRenderer.d.ts +17 -0
- package/dist/model/render/backends/webgl/NovaWebGLTextureManager.d.ts +16 -0
- package/dist/model/render/compiler/NovaRenderBuilder.d.ts +176 -0
- package/dist/model/render/compiler/NovaRenderCommandWriter.d.ts +166 -0
- package/dist/model/render/compiler/NovaRenderCompiler.d.ts +48 -0
- package/dist/model/render/compiler/NovaRenderFrameBuilder.d.ts +59 -0
- package/dist/model/render/graph/NovaRenderGraph.d.ts +96 -0
- package/dist/model/render/graph/NovaRenderHitIndex.d.ts +54 -0
- package/dist/model/render/graph/nova-render-culling.d.ts +26 -0
- package/dist/model/render/graph/nova-render-group.d.ts +18 -0
- package/dist/model/render/graph/nova-render-item.d.ts +35 -0
- package/dist/model/render/graph/nova-render-layer.d.ts +5 -0
- package/dist/model/render/graph/nova-render-stream.d.ts +117 -0
- package/dist/model/render/orchestration/NovaRenderOrchestrator.d.ts +73 -0
- package/dist/model/render/policy/nova-render-policy.d.ts +45 -0
- package/dist/model/render/resources/NovaGlyphAtlasManager.d.ts +45 -0
- package/dist/model/render/resources/NovaRenderResourceCache.d.ts +30 -0
- package/dist/model/render/resources/NovaRenderScheduler.d.ts +33 -0
- package/dist/model/render/resources/NovaTextAtlasManager.d.ts +44 -0
- package/dist/model/render/resources/NovaTextLayoutEngine.d.ts +23 -0
- package/dist/model/render/resources/NovaTextureAtlasManager.d.ts +95 -0
- package/dist/model/render/schema/NovaRenderContext.d.ts +74 -0
- package/dist/model/render/schema/nova-color-parser.d.ts +18 -0
- package/dist/model/render/schema/nova-style-compiler.d.ts +88 -0
- package/dist/model/render/targets/NovaRenderTargetManager.d.ts +51 -0
- package/dist/model/render/targets/nova-render-target-resource.d.ts +14 -0
- package/dist/model/render/utils/nova-icon-rendering.d.ts +9 -0
- package/dist/model/runtime/app/Nova.d.ts +167 -0
- package/dist/model/runtime/app/NovaApp.d.ts +305 -0
- package/dist/model/runtime/app/createNovaRaphRuntime.d.ts +17 -0
- package/dist/model/runtime/assets/NovaAssetRegistry.d.ts +511 -0
- package/dist/model/runtime/commands/NovaCommandBus.d.ts +48 -0
- package/dist/model/runtime/components/NovaComponentNode.d.ts +109 -0
- package/dist/model/runtime/components/NovaComponentRegistry.d.ts +35 -0
- package/dist/model/runtime/components/NovaSchemaRegistry.d.ts +71 -0
- package/dist/model/runtime/components/nova-component-metadata.d.ts +90 -0
- package/dist/model/runtime/components/nova-component.decorator.d.ts +38 -0
- package/dist/model/runtime/components/nova-defined-component.d.ts +58 -0
- package/dist/model/runtime/context/nova-context.d.ts +5 -0
- package/dist/model/runtime/cursor/NovaCursorManager.d.ts +148 -0
- package/dist/model/runtime/debug/NovaDebug.d.ts +105 -0
- package/dist/model/runtime/debug/NovaMetrics.d.ts +55 -0
- package/dist/model/runtime/diagnostics/NovaDiagnostics_Module.d.ts +143 -0
- package/dist/model/runtime/diagnostics/adapters/NovaDiagnosticsBrowser_Adapter.d.ts +32 -0
- package/dist/model/runtime/interaction/NovaEvents.d.ts +229 -0
- package/dist/model/runtime/interaction/NovaHitIndex.d.ts +57 -0
- package/dist/model/runtime/interaction/NovaSpatialIndex.d.ts +49 -0
- package/dist/model/runtime/reactivity/nova-reactivity.d.ts +24 -0
- package/dist/model/runtime/refs/nova-ref.d.ts +61 -0
- package/dist/model/runtime/scene/NovaScene.d.ts +80 -0
- package/dist/model/runtime/scene/nova-scene-components.d.ts +88 -0
- package/dist/model/runtime/state/NovaStore.d.ts +27 -0
- package/dist/model/runtime/state/nova-store-decorators.d.ts +38 -0
- package/dist/model/runtime/state/nova-store-runtime.d.ts +23 -0
- package/dist/model/runtime/state/nova-store-tracking.d.ts +17 -0
- package/dist/model/runtime/sync/NovaSyncScope.d.ts +93 -0
- package/dist/model/runtime/sync/nova-sync-context.d.ts +2 -0
- package/dist/model/runtime/sync/nova-sync-ports.d.ts +5 -0
- package/dist/model/runtime/sync/nova-sync.types.d.ts +48 -0
- package/dist/model/runtime/template/NovaTemplateRuntime.d.ts +79 -0
- package/dist/model/runtime/tree/NovaContainer.d.ts +78 -0
- package/dist/model/runtime/tree/NovaNode.d.ts +626 -0
- package/dist/model/runtime/tree/NovaSurface.d.ts +95 -0
- package/dist/model/semantic/NovaSemanticService.d.ts +30 -0
- package/dist/model/sound/NovaSoundEngine.d.ts +134 -0
- package/dist/model/telemetry.d.ts +108 -0
- package/dist/model/text-selection/NovaTextSelectionService.d.ts +85 -0
- package/dist/model/text-selection/index.d.ts +2 -0
- package/dist/model/text-selection/nova-text-selection.types.d.ts +54 -0
- package/dist/model/theme/NovaGlobalThemeRegistry.d.ts +57 -0
- package/dist/model/theme/NovaThemeService.d.ts +83 -0
- package/dist/nova.js +14489 -14069
- package/package.json +29 -23
|
@@ -0,0 +1,607 @@
|
|
|
1
|
+
import { DataRect } from '@endge/utils';
|
|
2
|
+
import { mat3 } from 'gl-matrix';
|
|
3
|
+
import { NovaSemanticSchemaItem } from './semantic.types';
|
|
4
|
+
import { NovaAssetDrawableInput, NovaAssetRef, NovaNineSliceInsets } from '../../model/runtime/assets/NovaAssetRegistry';
|
|
5
|
+
/**
|
|
6
|
+
* Описывает набор значений RendererType.
|
|
7
|
+
*/
|
|
8
|
+
export declare enum RendererType {
|
|
9
|
+
Web2D = "2d",
|
|
10
|
+
WebGL = "webgl"
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Описывает тип NovaStylePadding.
|
|
14
|
+
*/
|
|
15
|
+
export type NovaStylePadding = {
|
|
16
|
+
left?: number;
|
|
17
|
+
right?: number;
|
|
18
|
+
top?: number;
|
|
19
|
+
bottom?: number;
|
|
20
|
+
} | {
|
|
21
|
+
horizontal?: number;
|
|
22
|
+
vertical?: number;
|
|
23
|
+
} | {
|
|
24
|
+
all?: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* HEX/RGBA/ImageBitmap
|
|
28
|
+
*/
|
|
29
|
+
export type NovaStyleBackground = string | ImageBitmap | HTMLCanvasElement | OffscreenCanvas | NovaAssetRef<'fill' | 'image'>;
|
|
30
|
+
/**
|
|
31
|
+
* Описывает контракт NovaUIBase.
|
|
32
|
+
*/
|
|
33
|
+
export interface NovaUIBase {
|
|
34
|
+
active?: boolean;
|
|
35
|
+
clip?: DataRect | true;
|
|
36
|
+
meta?: NovaSchemaItemMeta;
|
|
37
|
+
semantic?: false | NovaSemanticSchemaItem;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Описывает режим рендеринга текста.
|
|
41
|
+
*/
|
|
42
|
+
export type NovaTextRenderMode = 'auto' | 'run-atlas' | 'glyph-atlas' | 'msdf';
|
|
43
|
+
/**
|
|
44
|
+
* Описывает роль текста внутри продуктового canvas.
|
|
45
|
+
*/
|
|
46
|
+
export type NovaTextRenderRole = 'timescale' | 'task-label' | 'ui-label' | 'debug';
|
|
47
|
+
/**
|
|
48
|
+
* Описывает LOD-поведение конкретного text item.
|
|
49
|
+
*/
|
|
50
|
+
export type NovaTextLodMode = 'auto' | 'always' | 'hide-while-moving';
|
|
51
|
+
/**
|
|
52
|
+
* Описывает общие metadata schema item.
|
|
53
|
+
*/
|
|
54
|
+
export interface NovaSchemaItemMeta {
|
|
55
|
+
textMode?: NovaTextRenderMode;
|
|
56
|
+
textRole?: NovaTextRenderRole;
|
|
57
|
+
textPriority?: number;
|
|
58
|
+
textLod?: NovaTextLodMode;
|
|
59
|
+
[key: string]: any;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Описывает контракт NovaRect.
|
|
63
|
+
*/
|
|
64
|
+
export interface NovaRect extends NovaUIBase {
|
|
65
|
+
x: number;
|
|
66
|
+
y: number;
|
|
67
|
+
width: number;
|
|
68
|
+
height: number;
|
|
69
|
+
styles?: {
|
|
70
|
+
background?: NovaStyleBackground;
|
|
71
|
+
radius?: number;
|
|
72
|
+
border?: {
|
|
73
|
+
color?: string;
|
|
74
|
+
width?: number;
|
|
75
|
+
radius?: number;
|
|
76
|
+
dashPattern?: [number, number];
|
|
77
|
+
position?: Array<'left' | 'right' | 'top' | 'bottom'> | 'vertical' | 'horizontal' | 'all';
|
|
78
|
+
};
|
|
79
|
+
opacity?: number;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Описывает контракт NovaBorder.
|
|
84
|
+
*/
|
|
85
|
+
export interface NovaBorder extends NovaUIBase {
|
|
86
|
+
x: number;
|
|
87
|
+
y: number;
|
|
88
|
+
width: number;
|
|
89
|
+
height: number;
|
|
90
|
+
position?: Array<'left' | 'right' | 'top' | 'bottom'> | 'vertical' | 'horizontal' | 'all';
|
|
91
|
+
styles?: {
|
|
92
|
+
color?: string;
|
|
93
|
+
width?: number;
|
|
94
|
+
radius?: number;
|
|
95
|
+
dashPattern?: [number, number];
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Описывает контракт NovaText.
|
|
100
|
+
*/
|
|
101
|
+
export interface NovaText extends NovaUIBase {
|
|
102
|
+
text: string;
|
|
103
|
+
x: number;
|
|
104
|
+
y: number;
|
|
105
|
+
width: number;
|
|
106
|
+
height: number;
|
|
107
|
+
rotation?: number;
|
|
108
|
+
parser?: 'string' | 'markdown';
|
|
109
|
+
styles?: {
|
|
110
|
+
color?: string;
|
|
111
|
+
font?: {
|
|
112
|
+
family?: string;
|
|
113
|
+
size?: number;
|
|
114
|
+
style?: 'normal' | 'italic';
|
|
115
|
+
weight?: 'normal' | 'bold' | 'bolder' | 'lighter' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
|
|
116
|
+
};
|
|
117
|
+
lineHeight?: number;
|
|
118
|
+
padding?: NovaStylePadding;
|
|
119
|
+
align?: {
|
|
120
|
+
horizontal?: 'left' | 'center' | 'right';
|
|
121
|
+
vertical?: 'top' | 'middle' | 'bottom';
|
|
122
|
+
/**
|
|
123
|
+
* Управляет горизонтальным выравниванием, когда текст шире content-box.
|
|
124
|
+
* start повторяет поведение старого renderer: overflow-текст начинается от
|
|
125
|
+
* левого края, чтобы в clip была видна первая часть строки.
|
|
126
|
+
*/
|
|
127
|
+
overflow?: 'start' | 'preserve';
|
|
128
|
+
};
|
|
129
|
+
ellipsis?: boolean;
|
|
130
|
+
opacity?: number;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Описывает тип font стилей текста.
|
|
135
|
+
*/
|
|
136
|
+
export type NovaTextFont = NonNullable<NovaText['styles']>['font'];
|
|
137
|
+
/**
|
|
138
|
+
* Описывает тип align стилей текста.
|
|
139
|
+
*/
|
|
140
|
+
export type NovaTextAlign = NonNullable<NovaText['styles']>['align'];
|
|
141
|
+
/**
|
|
142
|
+
* Описывает контракт NovaLine.
|
|
143
|
+
*/
|
|
144
|
+
export interface NovaLine extends NovaUIBase {
|
|
145
|
+
x1: number;
|
|
146
|
+
y1: number;
|
|
147
|
+
x2: number;
|
|
148
|
+
y2: number;
|
|
149
|
+
styles?: {
|
|
150
|
+
color?: string;
|
|
151
|
+
width?: number;
|
|
152
|
+
dashPattern?: Array<number>;
|
|
153
|
+
opacity?: number;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Описывает контракт NovaCircle.
|
|
158
|
+
*/
|
|
159
|
+
export interface NovaCircle extends NovaUIBase {
|
|
160
|
+
x: number;
|
|
161
|
+
y: number;
|
|
162
|
+
radius: number;
|
|
163
|
+
styles?: {
|
|
164
|
+
background?: NovaStyleBackground;
|
|
165
|
+
border?: {
|
|
166
|
+
color?: string;
|
|
167
|
+
width?: number;
|
|
168
|
+
dashPattern?: [number, number];
|
|
169
|
+
};
|
|
170
|
+
opacity?: number;
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Описывает контракт NovaArc.
|
|
175
|
+
*/
|
|
176
|
+
export interface NovaArc extends NovaUIBase {
|
|
177
|
+
x: number;
|
|
178
|
+
y: number;
|
|
179
|
+
radius: number;
|
|
180
|
+
startAngle: number;
|
|
181
|
+
endAngle: number;
|
|
182
|
+
counterClockwise?: boolean;
|
|
183
|
+
styles?: {
|
|
184
|
+
color?: string;
|
|
185
|
+
width?: number;
|
|
186
|
+
lineCap?: 'butt' | 'round' | 'square';
|
|
187
|
+
opacity?: number;
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Описывает контракт NovaTextChunk.
|
|
192
|
+
*/
|
|
193
|
+
export interface NovaTextChunk {
|
|
194
|
+
text: string;
|
|
195
|
+
bold?: boolean;
|
|
196
|
+
italic?: boolean;
|
|
197
|
+
newline?: boolean;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Описывает preset качества рендеринга иконок.
|
|
201
|
+
*/
|
|
202
|
+
export type NovaIconRenderQualityPreset = 'auto' | 'crisp' | 'readable-dense';
|
|
203
|
+
/**
|
|
204
|
+
* Описывает настройки readable рендеринга иконок для плотных Canvas UI.
|
|
205
|
+
*/
|
|
206
|
+
export interface NovaIconRenderQualityOptions {
|
|
207
|
+
mode?: NovaIconRenderQualityPreset;
|
|
208
|
+
snapToPixel?: boolean;
|
|
209
|
+
minDpr1Size?: number;
|
|
210
|
+
dpr1ScaleBoost?: number;
|
|
211
|
+
maxScaleBoost?: number;
|
|
212
|
+
dpr1OpacityBoost?: number;
|
|
213
|
+
maxOpacity?: number;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Описывает контракт NovaIcon.
|
|
217
|
+
*/
|
|
218
|
+
export interface NovaIcon extends NovaUIBase {
|
|
219
|
+
x: number;
|
|
220
|
+
y: number;
|
|
221
|
+
width: number;
|
|
222
|
+
height: number;
|
|
223
|
+
icon: CanvasImageSource | NovaAssetRef<'icon' | 'image'> | string;
|
|
224
|
+
styles?: {
|
|
225
|
+
opacity?: number;
|
|
226
|
+
quality?: NovaIconRenderQualityPreset | NovaIconRenderQualityOptions;
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Описывает контракт NovaNineSliceImage.
|
|
231
|
+
*/
|
|
232
|
+
export interface NovaNineSliceImage extends NovaUIBase {
|
|
233
|
+
x: number;
|
|
234
|
+
y: number;
|
|
235
|
+
width: number;
|
|
236
|
+
height: number;
|
|
237
|
+
image: NovaAssetRef<'image'> | string;
|
|
238
|
+
slice?: number | Partial<NovaNineSliceInsets>;
|
|
239
|
+
centerMode?: 'stretch' | 'repeat';
|
|
240
|
+
styles?: {
|
|
241
|
+
opacity?: number;
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Описывает процедурный dot-grid pattern для фоновых canvas-слоев.
|
|
246
|
+
*/
|
|
247
|
+
export interface NovaDotGridPattern {
|
|
248
|
+
type: 'dot-grid';
|
|
249
|
+
color: string;
|
|
250
|
+
originX: number;
|
|
251
|
+
originY: number;
|
|
252
|
+
worldStep: number;
|
|
253
|
+
scale: number;
|
|
254
|
+
minScreenStep?: number;
|
|
255
|
+
size?: number;
|
|
256
|
+
shape?: 'square' | 'circle';
|
|
257
|
+
opacity?: number;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Описывает прямоугольник с процедурным pattern-фоном.
|
|
261
|
+
*/
|
|
262
|
+
export interface NovaPatternRect extends NovaUIBase {
|
|
263
|
+
x: number;
|
|
264
|
+
y: number;
|
|
265
|
+
width: number;
|
|
266
|
+
height: number;
|
|
267
|
+
pattern: NovaDotGridPattern;
|
|
268
|
+
styles?: {
|
|
269
|
+
opacity?: number;
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Описывает контракт NovaPolygon.
|
|
274
|
+
*/
|
|
275
|
+
export interface NovaPolygon extends NovaUIBase {
|
|
276
|
+
points: Array<{
|
|
277
|
+
x: number;
|
|
278
|
+
y: number;
|
|
279
|
+
}>;
|
|
280
|
+
styles?: {
|
|
281
|
+
background?: string;
|
|
282
|
+
stroke?: string;
|
|
283
|
+
lineWidth?: number;
|
|
284
|
+
opacity?: number;
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Описывает тип NovaParticleBatchKind.
|
|
289
|
+
*/
|
|
290
|
+
export type NovaParticleBatchKind = 'circle' | 'sprite';
|
|
291
|
+
/**
|
|
292
|
+
* Описывает массив числовых данных particle stream.
|
|
293
|
+
*/
|
|
294
|
+
export type NovaParticleNumberData = Float32Array | ReadonlyArray<number>;
|
|
295
|
+
/**
|
|
296
|
+
* Описывает массив числовых данных rect stream.
|
|
297
|
+
*/
|
|
298
|
+
export type NovaRectNumberData = Float32Array | ReadonlyArray<number>;
|
|
299
|
+
/**
|
|
300
|
+
* Описывает retained rect batch для плотных прямоугольных сцен.
|
|
301
|
+
*/
|
|
302
|
+
export interface NovaRectBatch extends NovaUIBase {
|
|
303
|
+
count: number;
|
|
304
|
+
x: NovaRectNumberData;
|
|
305
|
+
y: NovaRectNumberData;
|
|
306
|
+
width: NovaRectNumberData;
|
|
307
|
+
height: NovaRectNumberData;
|
|
308
|
+
colors: NovaRectNumberData;
|
|
309
|
+
radii?: NovaRectNumberData;
|
|
310
|
+
states?: NovaRectNumberData;
|
|
311
|
+
opacity?: number;
|
|
312
|
+
revision?: number;
|
|
313
|
+
staticRevision?: number;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Описывает retained batch временных сегментов, где x/width вычисляются на GPU.
|
|
317
|
+
*/
|
|
318
|
+
export interface NovaTimeRangeSegmentBatch extends NovaUIBase {
|
|
319
|
+
count: number;
|
|
320
|
+
startTime: NovaRectNumberData;
|
|
321
|
+
endTime: NovaRectNumberData;
|
|
322
|
+
y: NovaRectNumberData;
|
|
323
|
+
height: NovaRectNumberData;
|
|
324
|
+
colors: NovaRectNumberData;
|
|
325
|
+
styles?: NovaRectNumberData;
|
|
326
|
+
timeOrigin: number;
|
|
327
|
+
timeStart: number;
|
|
328
|
+
pxPerMs: number;
|
|
329
|
+
viewportX: number;
|
|
330
|
+
yOffset: number;
|
|
331
|
+
revision?: number;
|
|
332
|
+
staticRevision?: number;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Описывает retained stripe batch.
|
|
336
|
+
*/
|
|
337
|
+
export interface NovaStripeRectBatch extends NovaUIBase {
|
|
338
|
+
count: number;
|
|
339
|
+
x: NovaRectNumberData;
|
|
340
|
+
y: NovaRectNumberData;
|
|
341
|
+
width: NovaRectNumberData;
|
|
342
|
+
height: NovaRectNumberData;
|
|
343
|
+
fills: ReadonlyArray<NovaAssetDrawableInput>;
|
|
344
|
+
opacity?: number;
|
|
345
|
+
revision?: number;
|
|
346
|
+
staticRevision?: number;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Описывает retained icon batch.
|
|
350
|
+
*/
|
|
351
|
+
export interface NovaIconBatch extends NovaUIBase {
|
|
352
|
+
count: number;
|
|
353
|
+
x: NovaRectNumberData;
|
|
354
|
+
y: NovaRectNumberData;
|
|
355
|
+
width: NovaRectNumberData;
|
|
356
|
+
height: NovaRectNumberData;
|
|
357
|
+
icons: ReadonlyArray<NovaAssetDrawableInput>;
|
|
358
|
+
opacity?: number;
|
|
359
|
+
revision?: number;
|
|
360
|
+
staticRevision?: number;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Описывает retained text batch.
|
|
364
|
+
*/
|
|
365
|
+
export interface NovaTextBatch extends NovaUIBase {
|
|
366
|
+
count: number;
|
|
367
|
+
text: ReadonlyArray<string>;
|
|
368
|
+
x: NovaRectNumberData;
|
|
369
|
+
y: NovaRectNumberData;
|
|
370
|
+
width: NovaRectNumberData;
|
|
371
|
+
height: NovaRectNumberData;
|
|
372
|
+
clipX?: NovaRectNumberData;
|
|
373
|
+
clipY?: NovaRectNumberData;
|
|
374
|
+
clipWidth?: NovaRectNumberData;
|
|
375
|
+
clipHeight?: NovaRectNumberData;
|
|
376
|
+
color?: string | ReadonlyArray<string>;
|
|
377
|
+
font?: NovaTextFont | ReadonlyArray<NovaTextFont | undefined>;
|
|
378
|
+
align?: NovaTextAlign | ReadonlyArray<NovaTextAlign | undefined>;
|
|
379
|
+
lineHeight?: number;
|
|
380
|
+
padding?: NovaStylePadding;
|
|
381
|
+
ellipsis?: boolean;
|
|
382
|
+
opacity?: number;
|
|
383
|
+
priority?: number | ReadonlyArray<number> | Float32Array;
|
|
384
|
+
dirtyIndices?: ReadonlyArray<number> | Uint32Array;
|
|
385
|
+
revision?: number;
|
|
386
|
+
staticRevision?: number;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Описывает retained particle batch для массовых dynamic-сцен.
|
|
390
|
+
*/
|
|
391
|
+
export interface NovaParticleBatch extends NovaUIBase {
|
|
392
|
+
kind: NovaParticleBatchKind;
|
|
393
|
+
count: number;
|
|
394
|
+
positions: NovaParticleNumberData;
|
|
395
|
+
sizes: NovaParticleNumberData;
|
|
396
|
+
colors: NovaParticleNumberData;
|
|
397
|
+
strokeColors?: NovaParticleNumberData;
|
|
398
|
+
strokeWidths?: NovaParticleNumberData;
|
|
399
|
+
velocities?: NovaParticleNumberData;
|
|
400
|
+
texture?: CanvasImageSource | string;
|
|
401
|
+
opacity?: number;
|
|
402
|
+
revision?: number;
|
|
403
|
+
staticRevision?: number;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Паттерн полосок (например, для заливки фона).
|
|
407
|
+
*/
|
|
408
|
+
export interface NovaStripePattern {
|
|
409
|
+
stripeColor: string;
|
|
410
|
+
backgroundColor: string;
|
|
411
|
+
stripeWidth: number;
|
|
412
|
+
angle?: number;
|
|
413
|
+
sizeK?: number;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Описывает тип NovaSchemaItem.
|
|
417
|
+
*/
|
|
418
|
+
export type NovaSchemaItem<TCustom extends {
|
|
419
|
+
type: string;
|
|
420
|
+
} = never> = ({
|
|
421
|
+
type: 'rect';
|
|
422
|
+
} & NovaRect) | ({
|
|
423
|
+
type: 'border';
|
|
424
|
+
} & NovaBorder) | ({
|
|
425
|
+
type: 'text';
|
|
426
|
+
} & NovaText) | ({
|
|
427
|
+
type: 'line';
|
|
428
|
+
} & NovaLine) | ({
|
|
429
|
+
type: 'circle';
|
|
430
|
+
} & NovaCircle) | ({
|
|
431
|
+
type: 'arc';
|
|
432
|
+
} & NovaArc) | ({
|
|
433
|
+
type: 'icon';
|
|
434
|
+
} & NovaIcon) | ({
|
|
435
|
+
type: 'nine-slice-image';
|
|
436
|
+
} & NovaNineSliceImage) | ({
|
|
437
|
+
type: 'pattern-rect';
|
|
438
|
+
} & NovaPatternRect) | ({
|
|
439
|
+
type: 'polygon';
|
|
440
|
+
} & NovaPolygon) | TCustom;
|
|
441
|
+
/**
|
|
442
|
+
* Описывает контракт NovaCustomSchemaItem.
|
|
443
|
+
*/
|
|
444
|
+
export interface NovaCustomSchemaItem extends NovaUIBase {
|
|
445
|
+
type: string;
|
|
446
|
+
id?: string;
|
|
447
|
+
props?: Record<string, any>;
|
|
448
|
+
[key: string]: any;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Описывает тип NovaSemanticScopeKind.
|
|
452
|
+
*/
|
|
453
|
+
export type NovaSemanticScopeKind = 'strict' | 'grid' | 'table' | 'timeline-row' | 'non-overlap-layered';
|
|
454
|
+
/**
|
|
455
|
+
* Описывает тип NovaSchema.
|
|
456
|
+
*/
|
|
457
|
+
export type NovaSchema<TCustom extends {
|
|
458
|
+
type: string;
|
|
459
|
+
} = never> = Array<NovaSchemaItem<TCustom>> & {
|
|
460
|
+
semanticScope?: NovaSemanticScopeKind;
|
|
461
|
+
contentVersion?: number;
|
|
462
|
+
dirtyIndices?: ReadonlyArray<number>;
|
|
463
|
+
};
|
|
464
|
+
/**
|
|
465
|
+
* Описывает контракт NovaRendererCapabilities.
|
|
466
|
+
*/
|
|
467
|
+
export interface NovaRendererCapabilities {
|
|
468
|
+
canvas2d: boolean;
|
|
469
|
+
webgl: boolean;
|
|
470
|
+
schema: boolean;
|
|
471
|
+
rect: boolean;
|
|
472
|
+
border: boolean;
|
|
473
|
+
line: boolean;
|
|
474
|
+
circle: boolean;
|
|
475
|
+
arc: boolean;
|
|
476
|
+
polygon: boolean;
|
|
477
|
+
icon: boolean;
|
|
478
|
+
text: boolean;
|
|
479
|
+
patternRects: boolean;
|
|
480
|
+
particles: boolean;
|
|
481
|
+
rectBatches: boolean;
|
|
482
|
+
stripeBatches: boolean;
|
|
483
|
+
iconBatches: boolean;
|
|
484
|
+
textBatches: boolean;
|
|
485
|
+
measureText: boolean;
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Описывает тип NovaRenderCullingMode.
|
|
489
|
+
*/
|
|
490
|
+
export type NovaRenderCullingMode = 'off' | 'bounds';
|
|
491
|
+
/**
|
|
492
|
+
* Описывает тип NovaHitTestMode.
|
|
493
|
+
*/
|
|
494
|
+
export type NovaHitTestMode = 'linear' | 'spatial';
|
|
495
|
+
/**
|
|
496
|
+
* Описывает тип NovaLifecycleState.
|
|
497
|
+
*/
|
|
498
|
+
export type NovaLifecycleState = 'created' | 'mounted' | 'paused' | 'destroyed';
|
|
499
|
+
/**
|
|
500
|
+
* Описывает статистику compile-фазы retained frame.
|
|
501
|
+
*/
|
|
502
|
+
export interface NovaRenderCompileStats {
|
|
503
|
+
rebuiltNodes: number;
|
|
504
|
+
cachedNodes: number;
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Описывает контракт NovaRenderCullingStats.
|
|
508
|
+
*/
|
|
509
|
+
export interface NovaRenderCullingStats {
|
|
510
|
+
testedNodes: number;
|
|
511
|
+
culledNodes: number;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Описывает контракт NovaBounds.
|
|
515
|
+
*/
|
|
516
|
+
export interface NovaBounds {
|
|
517
|
+
x: number;
|
|
518
|
+
y: number;
|
|
519
|
+
width: number;
|
|
520
|
+
height: number;
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Описывает контракт NovaRendererCanvas.
|
|
524
|
+
*/
|
|
525
|
+
export interface NovaRendererCanvas {
|
|
526
|
+
readonly element: HTMLCanvasElement;
|
|
527
|
+
readonly width: number;
|
|
528
|
+
readonly height: number;
|
|
529
|
+
readonly pixelWidth: number;
|
|
530
|
+
readonly pixelHeight: number;
|
|
531
|
+
readonly dpr: number;
|
|
532
|
+
readonly maxDpr: number;
|
|
533
|
+
getBoundingClientRect: () => DOMRectReadOnly;
|
|
534
|
+
invalidate: () => void;
|
|
535
|
+
resize: (width: number, height: number, options?: {
|
|
536
|
+
dpr?: number;
|
|
537
|
+
maxDpr?: number;
|
|
538
|
+
}) => void;
|
|
539
|
+
getContext2D: () => CanvasRenderingContext2D;
|
|
540
|
+
destroy: () => void;
|
|
541
|
+
onContextLost: (callback: () => void) => void;
|
|
542
|
+
onContextRestored: (callback: () => void) => void;
|
|
543
|
+
isContextLost: () => boolean;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Описывает сохраненную границу mutable render-state.
|
|
547
|
+
*/
|
|
548
|
+
export interface NovaRendererStateMark {
|
|
549
|
+
transformDepth: number;
|
|
550
|
+
clipDepth: number;
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Рендерер.
|
|
554
|
+
*/
|
|
555
|
+
export interface NovaRenderer {
|
|
556
|
+
readonly id: string;
|
|
557
|
+
readonly novaCanvas: NovaRendererCanvas;
|
|
558
|
+
readonly capabilities: NovaRendererCapabilities;
|
|
559
|
+
schema: (schema: NovaSchema<any>) => void;
|
|
560
|
+
save: () => void;
|
|
561
|
+
restore: () => void;
|
|
562
|
+
clear: () => void;
|
|
563
|
+
clip: (x: number, y: number, width: number, height: number) => void;
|
|
564
|
+
clearClip: () => void;
|
|
565
|
+
markState: () => NovaRendererStateMark;
|
|
566
|
+
restoreState: (mark: NovaRendererStateMark) => void;
|
|
567
|
+
setTransform: (matrix: mat3) => void;
|
|
568
|
+
beginRenderTarget?: (id: string, width: number, height: number, options?: {
|
|
569
|
+
dpr?: number;
|
|
570
|
+
kind?: 'texture' | 'cache' | 'effect';
|
|
571
|
+
}) => void;
|
|
572
|
+
endRenderTarget?: () => void;
|
|
573
|
+
drawRenderTarget?: (id: string, x: number, y: number, width: number, height: number) => void;
|
|
574
|
+
text: (params: NovaText) => void;
|
|
575
|
+
rect: (params: NovaRect) => void;
|
|
576
|
+
border: (params: NovaBorder) => void;
|
|
577
|
+
line: (params: NovaLine) => void;
|
|
578
|
+
circle: (params: NovaCircle) => void;
|
|
579
|
+
arc: (params: NovaArc) => void;
|
|
580
|
+
polygon: (params: NovaPolygon) => void;
|
|
581
|
+
icon: (params: NovaIcon) => void;
|
|
582
|
+
patternRect: (params: NovaPatternRect) => void;
|
|
583
|
+
rects: (batch: NovaRectBatch) => void;
|
|
584
|
+
timeRangeSegments: (batch: NovaTimeRangeSegmentBatch) => void;
|
|
585
|
+
stripes: (batch: NovaStripeRectBatch) => void;
|
|
586
|
+
icons: (batch: NovaIconBatch) => void;
|
|
587
|
+
texts: (batch: NovaTextBatch) => void;
|
|
588
|
+
particles: (batch: NovaParticleBatch) => void;
|
|
589
|
+
measureText: (params: NovaText) => {
|
|
590
|
+
width: number;
|
|
591
|
+
height: number;
|
|
592
|
+
};
|
|
593
|
+
cursor: (type: string) => void;
|
|
594
|
+
destroy: () => void;
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* Описывает контракт Batch.
|
|
598
|
+
*/
|
|
599
|
+
export interface Batch<G = unknown, T = unknown> {
|
|
600
|
+
id: number;
|
|
601
|
+
tasks: Array<any>;
|
|
602
|
+
taskIds: Set<string>;
|
|
603
|
+
readonly __types?: {
|
|
604
|
+
group: G;
|
|
605
|
+
task: T;
|
|
606
|
+
};
|
|
607
|
+
}
|