@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.
Files changed (119) hide show
  1. package/dist/domain/constants/nova-phase.d.ts +16 -0
  2. package/dist/domain/types/base.types.d.ts +177 -0
  3. package/dist/domain/types/component.types.d.ts +156 -0
  4. package/dist/domain/types/context.types.d.ts +31 -0
  5. package/dist/domain/types/cursor.types.d.ts +89 -0
  6. package/dist/domain/types/diagnostics.types.d.ts +148 -0
  7. package/dist/domain/types/events.types.d.ts +85 -0
  8. package/dist/domain/types/export.types.d.ts +27 -0
  9. package/dist/domain/types/hit-test.types.d.ts +16 -0
  10. package/dist/domain/types/motion.types.d.ts +118 -0
  11. package/dist/domain/types/renderer.types.d.ts +607 -0
  12. package/dist/domain/types/rendering/index.d.ts +559 -0
  13. package/dist/domain/types/semantic.types.d.ts +69 -0
  14. package/dist/domain/types/sound.types.d.ts +84 -0
  15. package/dist/domain/types/theme.types.d.ts +53 -0
  16. package/dist/domain/utils/bounds.d.ts +34 -0
  17. package/dist/domain/utils/schemaBounds.d.ts +10 -0
  18. package/dist/index.d.ts +82 -8919
  19. package/dist/model/input/NovaCaretBlinkController.d.ts +35 -0
  20. package/dist/model/input/NovaClipboardService.d.ts +18 -0
  21. package/dist/model/input/NovaInputProxy_Adapter.d.ts +61 -0
  22. package/dist/model/input/NovaInputValidationController.d.ts +46 -0
  23. package/dist/model/input/NovaTextInputController.d.ts +126 -0
  24. package/dist/model/input/NovaTextLayoutEngine.d.ts +31 -0
  25. package/dist/model/input/index.d.ts +7 -0
  26. package/dist/model/input/nova-input.types.d.ts +137 -0
  27. package/dist/model/motion/NovaMotionEngine.d.ts +152 -0
  28. package/dist/model/motion/nova-motion-easing.d.ts +13 -0
  29. package/dist/model/motion/nova-motion-interpolation.d.ts +19 -0
  30. package/dist/model/motion/nova-motion-presets.d.ts +288 -0
  31. package/dist/model/motion/nova-motion-timeline.d.ts +5 -0
  32. package/dist/model/platform/NovaCanvas.d.ts +112 -0
  33. package/dist/model/platform/NovaGraphics.d.ts +32 -0
  34. package/dist/model/render/backends/canvas2d/NovaCanvas2DTargetManager.d.ts +29 -0
  35. package/dist/model/render/backends/canvas2d/NovaRenderer2D.d.ts +238 -0
  36. package/dist/model/render/backends/nova-render-backend-factory.d.ts +10 -0
  37. package/dist/model/render/backends/nova-render-backend.d.ts +16 -0
  38. package/dist/model/render/backends/webgl/NovaGpuBufferArena.d.ts +76 -0
  39. package/dist/model/render/backends/webgl/NovaRendererWebGL.d.ts +154 -0
  40. package/dist/model/render/backends/webgl/NovaWebGLBatcher.d.ts +17 -0
  41. package/dist/model/render/backends/webgl/NovaWebGLBuffer.d.ts +19 -0
  42. package/dist/model/render/backends/webgl/NovaWebGLDevice.d.ts +24 -0
  43. package/dist/model/render/backends/webgl/NovaWebGLDiagnostics.d.ts +29 -0
  44. package/dist/model/render/backends/webgl/NovaWebGLFrameRenderer.d.ts +1013 -0
  45. package/dist/model/render/backends/webgl/NovaWebGLProgram.d.ts +33 -0
  46. package/dist/model/render/backends/webgl/NovaWebGLTargetManager.d.ts +11 -0
  47. package/dist/model/render/backends/webgl/NovaWebGLTextRenderer.d.ts +17 -0
  48. package/dist/model/render/backends/webgl/NovaWebGLTextureManager.d.ts +16 -0
  49. package/dist/model/render/compiler/NovaRenderBuilder.d.ts +176 -0
  50. package/dist/model/render/compiler/NovaRenderCommandWriter.d.ts +166 -0
  51. package/dist/model/render/compiler/NovaRenderCompiler.d.ts +48 -0
  52. package/dist/model/render/compiler/NovaRenderFrameBuilder.d.ts +59 -0
  53. package/dist/model/render/graph/NovaRenderGraph.d.ts +96 -0
  54. package/dist/model/render/graph/NovaRenderHitIndex.d.ts +54 -0
  55. package/dist/model/render/graph/nova-render-culling.d.ts +26 -0
  56. package/dist/model/render/graph/nova-render-group.d.ts +18 -0
  57. package/dist/model/render/graph/nova-render-item.d.ts +35 -0
  58. package/dist/model/render/graph/nova-render-layer.d.ts +5 -0
  59. package/dist/model/render/graph/nova-render-stream.d.ts +117 -0
  60. package/dist/model/render/orchestration/NovaRenderOrchestrator.d.ts +73 -0
  61. package/dist/model/render/policy/nova-render-policy.d.ts +45 -0
  62. package/dist/model/render/resources/NovaGlyphAtlasManager.d.ts +45 -0
  63. package/dist/model/render/resources/NovaRenderResourceCache.d.ts +30 -0
  64. package/dist/model/render/resources/NovaRenderScheduler.d.ts +33 -0
  65. package/dist/model/render/resources/NovaTextAtlasManager.d.ts +44 -0
  66. package/dist/model/render/resources/NovaTextLayoutEngine.d.ts +23 -0
  67. package/dist/model/render/resources/NovaTextureAtlasManager.d.ts +95 -0
  68. package/dist/model/render/schema/NovaRenderContext.d.ts +74 -0
  69. package/dist/model/render/schema/nova-color-parser.d.ts +18 -0
  70. package/dist/model/render/schema/nova-style-compiler.d.ts +88 -0
  71. package/dist/model/render/targets/NovaRenderTargetManager.d.ts +51 -0
  72. package/dist/model/render/targets/nova-render-target-resource.d.ts +14 -0
  73. package/dist/model/render/utils/nova-icon-rendering.d.ts +9 -0
  74. package/dist/model/runtime/app/Nova.d.ts +167 -0
  75. package/dist/model/runtime/app/NovaApp.d.ts +305 -0
  76. package/dist/model/runtime/app/createNovaRaphRuntime.d.ts +17 -0
  77. package/dist/model/runtime/assets/NovaAssetRegistry.d.ts +511 -0
  78. package/dist/model/runtime/commands/NovaCommandBus.d.ts +48 -0
  79. package/dist/model/runtime/components/NovaComponentNode.d.ts +109 -0
  80. package/dist/model/runtime/components/NovaComponentRegistry.d.ts +35 -0
  81. package/dist/model/runtime/components/NovaSchemaRegistry.d.ts +71 -0
  82. package/dist/model/runtime/components/nova-component-metadata.d.ts +90 -0
  83. package/dist/model/runtime/components/nova-component.decorator.d.ts +38 -0
  84. package/dist/model/runtime/components/nova-defined-component.d.ts +58 -0
  85. package/dist/model/runtime/context/nova-context.d.ts +5 -0
  86. package/dist/model/runtime/cursor/NovaCursorManager.d.ts +148 -0
  87. package/dist/model/runtime/debug/NovaDebug.d.ts +105 -0
  88. package/dist/model/runtime/debug/NovaMetrics.d.ts +55 -0
  89. package/dist/model/runtime/diagnostics/NovaDiagnostics_Module.d.ts +143 -0
  90. package/dist/model/runtime/diagnostics/adapters/NovaDiagnosticsBrowser_Adapter.d.ts +32 -0
  91. package/dist/model/runtime/interaction/NovaEvents.d.ts +229 -0
  92. package/dist/model/runtime/interaction/NovaHitIndex.d.ts +57 -0
  93. package/dist/model/runtime/interaction/NovaSpatialIndex.d.ts +49 -0
  94. package/dist/model/runtime/reactivity/nova-reactivity.d.ts +24 -0
  95. package/dist/model/runtime/refs/nova-ref.d.ts +61 -0
  96. package/dist/model/runtime/scene/NovaScene.d.ts +80 -0
  97. package/dist/model/runtime/scene/nova-scene-components.d.ts +88 -0
  98. package/dist/model/runtime/state/NovaStore.d.ts +27 -0
  99. package/dist/model/runtime/state/nova-store-decorators.d.ts +38 -0
  100. package/dist/model/runtime/state/nova-store-runtime.d.ts +23 -0
  101. package/dist/model/runtime/state/nova-store-tracking.d.ts +17 -0
  102. package/dist/model/runtime/sync/NovaSyncScope.d.ts +93 -0
  103. package/dist/model/runtime/sync/nova-sync-context.d.ts +2 -0
  104. package/dist/model/runtime/sync/nova-sync-ports.d.ts +5 -0
  105. package/dist/model/runtime/sync/nova-sync.types.d.ts +48 -0
  106. package/dist/model/runtime/template/NovaTemplateRuntime.d.ts +79 -0
  107. package/dist/model/runtime/tree/NovaContainer.d.ts +78 -0
  108. package/dist/model/runtime/tree/NovaNode.d.ts +626 -0
  109. package/dist/model/runtime/tree/NovaSurface.d.ts +95 -0
  110. package/dist/model/semantic/NovaSemanticService.d.ts +30 -0
  111. package/dist/model/sound/NovaSoundEngine.d.ts +134 -0
  112. package/dist/model/telemetry.d.ts +108 -0
  113. package/dist/model/text-selection/NovaTextSelectionService.d.ts +85 -0
  114. package/dist/model/text-selection/index.d.ts +2 -0
  115. package/dist/model/text-selection/nova-text-selection.types.d.ts +54 -0
  116. package/dist/model/theme/NovaGlobalThemeRegistry.d.ts +57 -0
  117. package/dist/model/theme/NovaThemeService.d.ts +83 -0
  118. package/dist/nova.js +14489 -14069
  119. package/package.json +29 -23
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Описывает стандартные фазы Nova runtime pipeline.
3
+ */
4
+ export declare const NovaPhase: {
5
+ readonly Before: "before";
6
+ readonly PreUpdate: "preupdate";
7
+ readonly Update: "update";
8
+ readonly Matrix: "matrix";
9
+ readonly Render: "render";
10
+ readonly Flush: "flush";
11
+ readonly After: "after";
12
+ };
13
+ /**
14
+ * Описывает имя стандартной фазы Nova runtime pipeline.
15
+ */
16
+ export type NovaPhaseName = typeof NovaPhase[keyof typeof NovaPhase];
@@ -0,0 +1,177 @@
1
+ import { RaphKernel, RaphProperties, RaphSchedulerType } from '@endge/raph';
2
+ import { EventList } from '@endge/utils';
3
+ import { mat3 } from 'gl-matrix';
4
+ import { NovaCursorContext, NovaCursorDeclaration } from './cursor.types';
5
+ import { NovaDiagnosticsOptions } from './diagnostics.types';
6
+ import { NovaHitTestHandler } from './hit-test.types';
7
+ import { RendererType } from './renderer.types';
8
+ import { NovaRendererConfigInput } from './rendering/index';
9
+ import { NovaSoundOptions } from './sound.types';
10
+ import { NovaThemeCreateOptions } from './theme.types';
11
+ import { NovaSchemaRegistry } from '../../model/runtime/components/NovaSchemaRegistry';
12
+ import { NovaSyncScope } from '../../model/runtime/sync/NovaSyncScope';
13
+ /**
14
+ * Описывает контракт NovaNodeProperties.
15
+ */
16
+ export interface NovaNodeProperties extends RaphProperties {
17
+ localActive: boolean;
18
+ localVisible: boolean;
19
+ interactive: boolean;
20
+ propagateUpdate: boolean;
21
+ cursor: NovaCursorDeclaration | null;
22
+ cursorContext: NovaCursorContext | null;
23
+ hitTest: NovaHitTestHandler | null;
24
+ active: boolean;
25
+ x: number;
26
+ y: number;
27
+ scaleX: number;
28
+ scaleY: number;
29
+ rotation: number;
30
+ matrix: mat3;
31
+ visible: boolean;
32
+ opacity: number;
33
+ width: number;
34
+ height: number;
35
+ }
36
+ /**
37
+ * Описывает контракт NovaAppOptions.
38
+ */
39
+ export interface NovaAppOptions {
40
+ debug: boolean | string | Array<string>;
41
+ diagnostics: NovaDiagnosticsOptions;
42
+ loop: boolean;
43
+ width: number;
44
+ height: number;
45
+ dpr: number;
46
+ maxDpr: number;
47
+ }
48
+ /**
49
+ * Описывает тип NovaCanvasTarget.
50
+ */
51
+ export type NovaCanvasTarget = HTMLCanvasElement;
52
+ /**
53
+ * Описывает контракт NovaSizeOptions.
54
+ */
55
+ export interface NovaSizeOptions {
56
+ width: number;
57
+ height: number;
58
+ dpr?: number;
59
+ maxDpr?: number;
60
+ }
61
+ /**
62
+ * Описывает тип NovaPointerScope.
63
+ */
64
+ export type NovaPointerScope = 'target';
65
+ /**
66
+ * Описывает тип NovaKeyboardScope.
67
+ */
68
+ export type NovaKeyboardScope = 'focused' | 'active' | 'hovered' | 'global' | 'manual';
69
+ /**
70
+ * Описывает тип NovaInputPreventDefault.
71
+ */
72
+ export type NovaInputPreventDefault = 'never' | 'handled' | 'always';
73
+ /**
74
+ * Описывает контракт NovaPointerInputOptions.
75
+ */
76
+ export interface NovaPointerInputOptions {
77
+ enabled?: boolean;
78
+ scope?: NovaPointerScope;
79
+ capture?: boolean;
80
+ }
81
+ /**
82
+ * Описывает контракт NovaKeyboardInputOptions.
83
+ */
84
+ export interface NovaKeyboardInputOptions {
85
+ enabled?: boolean;
86
+ scope?: NovaKeyboardScope;
87
+ preventDefault?: NovaInputPreventDefault;
88
+ ignoreEditableTargets?: boolean;
89
+ }
90
+ /**
91
+ * Описывает контракт NovaInputOptions.
92
+ */
93
+ export interface NovaInputOptions {
94
+ pointer?: NovaPointerInputOptions;
95
+ keyboard?: NovaKeyboardInputOptions;
96
+ }
97
+ /**
98
+ * Описывает контракт ResolvedNovaInputOptions.
99
+ */
100
+ export interface ResolvedNovaInputOptions {
101
+ pointer: {
102
+ enabled: boolean;
103
+ capture: boolean;
104
+ };
105
+ keyboard: {
106
+ enabled: boolean;
107
+ scope: NovaKeyboardScope;
108
+ preventDefault: NovaInputPreventDefault;
109
+ ignoreEditableTargets: boolean;
110
+ };
111
+ }
112
+ /**
113
+ * Описывает контракт NovaRendererOptions.
114
+ */
115
+ export interface NovaRendererOptions {
116
+ main?: RendererType;
117
+ webgl?: WebGLContextAttributes;
118
+ config?: NovaRendererConfigInput;
119
+ }
120
+ /**
121
+ * Описывает контракт NovaSchedulerOptions.
122
+ */
123
+ export interface NovaSchedulerOptions {
124
+ type?: RaphSchedulerType;
125
+ loop?: boolean;
126
+ }
127
+ /**
128
+ * Описывает контракт NovaDebugOptions.
129
+ */
130
+ export interface NovaDebugOptions {
131
+ enabled?: boolean | string | Array<string>;
132
+ telemetry?: boolean;
133
+ overlay?: boolean;
134
+ }
135
+ /**
136
+ * Описывает настройки подключения NovaApp к Raph runtime/kernel.
137
+ */
138
+ export interface NovaRaphOptions {
139
+ kernel?: RaphKernel;
140
+ runtimeId?: string;
141
+ }
142
+ /**
143
+ * Описывает наследование глобальной темы Nova.
144
+ */
145
+ export interface NovaGlobalThemeCreateOptions {
146
+ inherit?: boolean;
147
+ }
148
+ /**
149
+ * Описывает контракт NovaAppCreateOptions.
150
+ */
151
+ export interface NovaAppCreateOptions<E extends EventList = Record<string, any>> {
152
+ target: NovaCanvasTarget;
153
+ size: NovaSizeOptions;
154
+ input?: NovaInputOptions;
155
+ renderer?: NovaRendererOptions;
156
+ scheduler?: NovaSchedulerOptions;
157
+ sound?: NovaSoundOptions;
158
+ theme?: NovaThemeCreateOptions;
159
+ globalTheme?: NovaGlobalThemeCreateOptions;
160
+ debug?: NovaDebugOptions;
161
+ diagnostics?: NovaDiagnosticsOptions;
162
+ raph?: NovaRaphOptions;
163
+ syncScope?: NovaSyncScope;
164
+ predefinedEvents?: Array<keyof E>;
165
+ schemaRegistry?: NovaSchemaRegistry;
166
+ }
167
+ /**
168
+ * Описывает тип NovaCanvasOwnership.
169
+ */
170
+ export type NovaCanvasOwnership = 'external' | 'internal';
171
+ /**
172
+ * Описывает контракт NovaCanvasCreateOptions.
173
+ */
174
+ export interface NovaCanvasCreateOptions extends Partial<NovaSizeOptions> {
175
+ webgl?: WebGLContextAttributes;
176
+ contextType?: RendererType;
177
+ }
@@ -0,0 +1,156 @@
1
+ import { EventList } from '@endge/utils';
2
+ import { NovaBounds, NovaRenderer, NovaSchema } from './renderer.types';
3
+ import { NovaApp } from '../../model/runtime/app/NovaApp';
4
+ import { NovaSchemaRegistry } from '../../model/runtime/components/NovaSchemaRegistry';
5
+ import { NovaNode } from '../../model/runtime/tree/NovaNode';
6
+ import { NovaSurface } from '../../model/runtime/tree/NovaSurface';
7
+ /**
8
+ * Описывает тип NovaSchemaDescriptorKind.
9
+ */
10
+ export type NovaSchemaDescriptorKind = 'primitive' | 'schema-component' | 'node-component';
11
+ /**
12
+ * Описывает тип NovaSchemaRenderMode.
13
+ */
14
+ export type NovaSchemaRenderMode = 'schema' | 'batched' | 'ordered';
15
+ /**
16
+ * Описывает тип NovaComponentDirtyPhase.
17
+ */
18
+ export type NovaComponentDirtyPhase = 'update' | 'render' | 'matrix';
19
+ /**
20
+ * Constructor runtime-компонента, который может быть создан напрямую без string registry key.
21
+ */
22
+ export type NovaElementConstructor<E extends EventList = Record<string, any>> = new (app: NovaApp<E>, surface: NovaSurface<E>, props?: Record<string, any>, listeners?: Record<string, (...args: Array<any>) => void>, slots?: NovaElementSlots) => NovaNode<E>;
23
+ /**
24
+ * Фабрика named slot, которая строит schema snapshot по публичному scope.
25
+ */
26
+ export type NovaElementSlotFactory<TScope = Record<string, any>> = (scope?: TScope) => Array<NovaElementSchema<any>>;
27
+ /**
28
+ * Набор named slots для runtime component schema.
29
+ */
30
+ export type NovaElementSlots = Record<string, NovaElementSlotFactory<any>>;
31
+ /**
32
+ * Тип компонента в runtime trees: string schema type или прямой constructor.
33
+ */
34
+ export type NovaElementType<E extends EventList = Record<string, any>> = string | NovaElementConstructor<E>;
35
+ /**
36
+ * Описывает контракт NovaComponentDirtyPolicy.
37
+ */
38
+ export type NovaComponentDirtyPath<TProps extends Record<string, any> = Record<string, any>> = keyof TProps | string;
39
+ /**
40
+ * Описывает контракт NovaComponentDirtyPolicy.
41
+ */
42
+ export interface NovaComponentDirtyPolicy<TProps extends Record<string, any> = Record<string, any>> {
43
+ update?: ReadonlyArray<NovaComponentDirtyPath<TProps>>;
44
+ render?: ReadonlyArray<NovaComponentDirtyPath<TProps>>;
45
+ matrix?: ReadonlyArray<NovaComponentDirtyPath<TProps>>;
46
+ }
47
+ /**
48
+ * Описывает kind prop-декоратора.
49
+ */
50
+ export type NovaComponentPropKind = 'model' | 'object' | 'options' | 'array' | 'string' | 'number' | 'boolean' | 'function';
51
+ /**
52
+ * Описывает prop metadata class-компонента.
53
+ */
54
+ export interface NovaComponentPropDefinition {
55
+ key: string;
56
+ propertyKey?: string;
57
+ kind: NovaComponentPropKind;
58
+ required?: boolean;
59
+ defaultValue?: unknown | (() => unknown);
60
+ mode?: 'plain' | 'versioned';
61
+ event?: boolean;
62
+ }
63
+ /**
64
+ * Описывает watcher metadata class-компонента.
65
+ */
66
+ export interface NovaComponentWatchDefinition {
67
+ path: string;
68
+ methodName: string;
69
+ phase: 'update' | 'render' | 'matrix';
70
+ immediate?: boolean;
71
+ }
72
+ /**
73
+ * Описывает command metadata class-компонента.
74
+ */
75
+ export interface NovaComponentCommandDefinition {
76
+ id: string;
77
+ methodName: string;
78
+ scope?: string;
79
+ }
80
+ /**
81
+ * Описывает API metadata class-компонента.
82
+ */
83
+ export interface NovaComponentApiDefinition {
84
+ methodName: string;
85
+ }
86
+ /**
87
+ * Описывает контракт NovaComponentSchema.
88
+ */
89
+ export interface NovaComponentSchema<TSchema = Record<string, any>> {
90
+ type: string;
91
+ id?: string;
92
+ props?: Partial<TSchema> & Record<string, any>;
93
+ slots?: NovaElementSlots;
94
+ [key: string]: any;
95
+ }
96
+ /**
97
+ * Описывает runtime tree schema item, который может ссылаться на string type или constructor.
98
+ */
99
+ export interface NovaElementSchema<TSchema = Record<string, any>, TType extends NovaElementType = NovaElementType> extends Omit<NovaComponentSchema<TSchema>, 'type'> {
100
+ type: TType;
101
+ }
102
+ /**
103
+ * Описывает runtime component node, доступный через app.components.
104
+ */
105
+ export interface NovaRuntimeComponentNode {
106
+ componentId: string;
107
+ getApi: () => unknown;
108
+ }
109
+ /**
110
+ * Описывает контракт NovaSchemaRenderContext.
111
+ */
112
+ export interface NovaSchemaRenderContext {
113
+ renderer: NovaRenderer;
114
+ registry: NovaSchemaRegistry;
115
+ depth: number;
116
+ }
117
+ /**
118
+ * Описывает контракт NovaSchemaBoundsContext.
119
+ */
120
+ export interface NovaSchemaBoundsContext {
121
+ registry: NovaSchemaRegistry;
122
+ depth: number;
123
+ }
124
+ /**
125
+ * Описывает контракт NovaComponentCreateContext.
126
+ */
127
+ export interface NovaComponentCreateContext<E extends EventList = Record<string, any>> {
128
+ app: NovaApp<E>;
129
+ surface: NovaSurface<E>;
130
+ registry: NovaSchemaRegistry;
131
+ parent?: NovaNode<E>;
132
+ context?: unknown;
133
+ }
134
+ /**
135
+ * Описывает контракт NovaComponentDescriptor.
136
+ */
137
+ export interface NovaComponentDescriptor<TProps extends Record<string, any> = Record<string, any>, TApi = unknown, TEvents extends Record<string, unknown> = Record<string, unknown>, TSchema = TProps> {
138
+ type: string;
139
+ name: string;
140
+ title?: string;
141
+ version: string;
142
+ kind: NovaSchemaDescriptorKind;
143
+ dirtyPolicy?: NovaComponentDirtyPolicy<TProps>;
144
+ propDefinitions?: ReadonlyArray<NovaComponentPropDefinition>;
145
+ watchDefinitions?: ReadonlyArray<NovaComponentWatchDefinition>;
146
+ commandDefinitions?: ReadonlyArray<NovaComponentCommandDefinition>;
147
+ apiDefinitions?: ReadonlyArray<NovaComponentApiDefinition>;
148
+ bounds?: 'size' | 'custom';
149
+ fields?: unknown;
150
+ api?: unknown | TApi;
151
+ events?: unknown | TEvents;
152
+ normalize?: (schema: NovaComponentSchema<TSchema>) => TProps;
153
+ renderSchema?: (ctx: NovaSchemaRenderContext, schema: NovaComponentSchema<TSchema>) => NovaSchema<any> | void;
154
+ measureBounds?: (ctx: NovaSchemaBoundsContext, schema: NovaComponentSchema<TSchema>) => NovaBounds | null;
155
+ createNode?: <E extends EventList>(ctx: NovaComponentCreateContext<E>, schema: NovaComponentSchema<TSchema>) => NovaNode<E>;
156
+ }
@@ -0,0 +1,31 @@
1
+ import { DataPathDef, RaphObserveDataOptions, Traversal } from '@endge/raph';
2
+ import { NovaPhaseName } from '../constants/nova-phase';
3
+ /**
4
+ * Описывает типизированный token scoped dependency в Nova tree.
5
+ */
6
+ export type NovaContextToken<T> = symbol & {
7
+ readonly __novaContextType?: T;
8
+ };
9
+ /**
10
+ * Описывает параметры явного контекста child-ноды.
11
+ */
12
+ export interface NovaNodeContextOptions {
13
+ context?: unknown;
14
+ }
15
+ /**
16
+ * Описывает параметры добавления child-ноды.
17
+ */
18
+ export interface NovaAddChildOptions extends NovaNodeContextOptions {
19
+ invalidate?: boolean;
20
+ }
21
+ /**
22
+ * Описывает параметры подписки Nova-ноды на business data path.
23
+ */
24
+ export interface NovaObserveDataOptions extends Omit<RaphObserveDataOptions, 'phase' | 'traversal'> {
25
+ phase?: NovaPhaseName | string;
26
+ traversal?: Traversal;
27
+ }
28
+ /**
29
+ * Описывает публичную сигнатуру подписки Nova-ноды на business data path.
30
+ */
31
+ export type NovaObserveData = (path: DataPathDef, options?: NovaObserveDataOptions) => () => void;
@@ -0,0 +1,89 @@
1
+ import { EventList } from '@endge/utils';
2
+ import { NovaNode } from '../../model/runtime/tree/NovaNode';
3
+ /**
4
+ * Описывает имя состояния pointer для выбора cursor.
5
+ */
6
+ export type NovaCursorStateName = 'default' | 'hover' | 'pressed' | 'dragging' | 'disabled';
7
+ /**
8
+ * Описывает встроенный CSS cursor.
9
+ */
10
+ export type NovaNativeCursor = 'auto' | 'default' | 'none' | 'pointer' | 'text' | 'move' | 'grab' | 'grabbing' | 'not-allowed' | 'crosshair' | 'ew-resize' | 'ns-resize' | 'col-resize' | 'row-resize' | 'e-resize' | 'w-resize' | 'n-resize' | 's-resize' | 'ne-resize' | 'nw-resize' | 'se-resize' | 'sw-resize' | 'nesw-resize' | 'nwse-resize';
11
+ /**
12
+ * Описывает hotspot cursor относительно левого верхнего угла.
13
+ */
14
+ export interface NovaCursorHotspot {
15
+ x: number;
16
+ y: number;
17
+ }
18
+ /**
19
+ * Описывает cursor из внешнего image/svg URL.
20
+ */
21
+ export interface NovaUrlCursorValue {
22
+ type: 'url';
23
+ src: string;
24
+ hotspot?: NovaCursorHotspot;
25
+ fallback?: NovaNativeCursor | string;
26
+ }
27
+ /**
28
+ * Описывает cursor как зарегистрированный Nova schema component.
29
+ */
30
+ export interface NovaComponentCursorValue {
31
+ type: 'component';
32
+ component: string;
33
+ props?: Record<string, unknown>;
34
+ hotspot?: NovaCursorHotspot;
35
+ fallback?: NovaNativeCursor | string;
36
+ }
37
+ /**
38
+ * Описывает конкретное значение cursor.
39
+ */
40
+ export type NovaCursorValue = NovaNativeCursor | (string & {}) | NovaUrlCursorValue | NovaComponentCursorValue;
41
+ /**
42
+ * Описывает state-map форму cursor declaration.
43
+ */
44
+ export interface NovaCursorStateMap {
45
+ default?: NovaCursorValue;
46
+ hover?: NovaCursorValue;
47
+ pressed?: NovaCursorValue;
48
+ dragging?: NovaCursorValue;
49
+ disabled?: NovaCursorValue;
50
+ }
51
+ /**
52
+ * Описывает значение контекста cursor rule.
53
+ */
54
+ export type NovaCursorContextValue = string | number | boolean;
55
+ /**
56
+ * Описывает условие cursor rule.
57
+ */
58
+ export interface NovaCursorRuleCondition extends Record<string, NovaCursorContextValue | NovaCursorStateName | Array<NovaCursorStateName> | undefined> {
59
+ state?: NovaCursorStateName | Array<NovaCursorStateName>;
60
+ }
61
+ /**
62
+ * Описывает rule-форму cursor declaration.
63
+ */
64
+ export interface NovaCursorRule {
65
+ when?: NovaCursorRuleCondition;
66
+ use: NovaCursorValue;
67
+ }
68
+ /**
69
+ * Описывает декларативный cursor для Nova node.
70
+ */
71
+ export type NovaCursorDeclaration = NovaCursorValue | NovaCursorStateMap | Array<NovaCursorRule>;
72
+ /**
73
+ * Описывает контекст cursor rule на node.
74
+ */
75
+ export type NovaCursorContext = Record<string, NovaCursorContextValue>;
76
+ /**
77
+ * Описывает runtime state pointer для выбора cursor.
78
+ */
79
+ export interface NovaCursorRuntimeState<E extends EventList = Record<string, any>> {
80
+ x: number;
81
+ y: number;
82
+ hover: boolean;
83
+ pressed: boolean;
84
+ dragging: boolean;
85
+ disabled: boolean;
86
+ target: NovaNode<E> | null;
87
+ source: NovaNode<E> | null;
88
+ context: NovaCursorContext;
89
+ }
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Описывает источник и точность диагностической метрики.
3
+ */
4
+ export type NovaDiagnosticsMetricSource = 'exact' | 'estimated' | 'observed' | 'unavailable';
5
+ /**
6
+ * Описывает категорию runtime diagnostics.
7
+ */
8
+ export type NovaDiagnosticsCategory = 'runtime' | 'frame' | 'render' | 'resources' | 'browser' | 'input' | 'history';
9
+ /**
10
+ * Описывает доступность группы диагностических данных.
11
+ */
12
+ export interface NovaDiagnosticsAvailability {
13
+ runtime: NovaDiagnosticsMetricSource;
14
+ frame: NovaDiagnosticsMetricSource;
15
+ render: NovaDiagnosticsMetricSource;
16
+ resources: NovaDiagnosticsMetricSource;
17
+ browserHeap: NovaDiagnosticsMetricSource;
18
+ browserMemory: NovaDiagnosticsMetricSource;
19
+ browserDom: NovaDiagnosticsMetricSource;
20
+ browserLongTasks: NovaDiagnosticsMetricSource;
21
+ gpuProcessMemory: NovaDiagnosticsMetricSource;
22
+ }
23
+ /**
24
+ * Описывает настройки diagnostics runtime.
25
+ */
26
+ export interface NovaDiagnosticsOptions {
27
+ enabled?: boolean;
28
+ browser?: boolean;
29
+ sampleIntervalMs?: number;
30
+ historyLimit?: number;
31
+ categories?: Array<NovaDiagnosticsCategory>;
32
+ }
33
+ /**
34
+ * Описывает runtime-счетчики NovaApp.
35
+ */
36
+ export interface NovaDiagnosticsRuntimeSnapshot {
37
+ enabled: boolean;
38
+ fps: number;
39
+ renderFps: number;
40
+ ups: number;
41
+ idleMs: number;
42
+ surfaces: number;
43
+ dirtySurfaces: number;
44
+ nodes: number;
45
+ width: number;
46
+ height: number;
47
+ dpr: number;
48
+ loop: boolean;
49
+ }
50
+ /**
51
+ * Описывает timings последнего frame.
52
+ */
53
+ export interface NovaDiagnosticsFrameSnapshot {
54
+ index: number;
55
+ lastMs: number;
56
+ phases: Record<string, number>;
57
+ dirtyNodes: number;
58
+ dirtyRenderNodes: number;
59
+ renderedAt: number;
60
+ }
61
+ /**
62
+ * Описывает renderer counters последнего replay.
63
+ */
64
+ export interface NovaDiagnosticsRenderSnapshot {
65
+ compilerMs: number;
66
+ backendMs: number;
67
+ uploadMs: number;
68
+ drawMs: number;
69
+ drawCalls: number;
70
+ batches: number;
71
+ commands: number;
72
+ items: number;
73
+ groups: number;
74
+ uploadBytes: number;
75
+ bufferDataCalls: number;
76
+ bufferSubDataCalls: number;
77
+ fullUploads: number;
78
+ dirtyRangeCount: number;
79
+ nodeRenderCalls: number;
80
+ updatedHandles: number;
81
+ dirtyStreamRanges: number;
82
+ rebuiltNodes: number;
83
+ cachedNodes: number;
84
+ culledNodes: number;
85
+ cullingTests: number;
86
+ textRasterCount: number;
87
+ textRasterPixels: number;
88
+ textRasterBytes: number;
89
+ textRasterBoxPixels: number;
90
+ textRasterSavedPixels: number;
91
+ textRasterMs: number;
92
+ }
93
+ /**
94
+ * Описывает расчетные ресурсы, которыми владеет Nova runtime.
95
+ */
96
+ export interface NovaDiagnosticsResourceSnapshot {
97
+ estimatedGpuMemoryMB: number;
98
+ estimatedTextureMemoryMB: number;
99
+ estimatedTextAtlasMemoryMB: number;
100
+ estimatedCachedTextureMemoryMB: number;
101
+ estimatedBufferMemoryMB: number;
102
+ estimatedCanvasMemoryMB: number;
103
+ textAtlasPages: number;
104
+ glyphAtlasPages: number;
105
+ textAtlasEvictions: number;
106
+ glyphAtlasEvictions: number;
107
+ textureBatchFallbacks: number;
108
+ atlasUploads: number;
109
+ }
110
+ /**
111
+ * Описывает наблюдаемые браузерные метрики.
112
+ */
113
+ export interface NovaDiagnosticsBrowserSnapshot {
114
+ jsHeapUsedMB?: number;
115
+ jsHeapTotalMB?: number;
116
+ jsHeapLimitMB?: number;
117
+ userAgentMemoryMB?: number;
118
+ domNodes?: number;
119
+ documents?: number;
120
+ frames?: number;
121
+ longTasks?: number;
122
+ longTaskMs?: number;
123
+ resources?: number;
124
+ lastSampledAt?: number;
125
+ }
126
+ /**
127
+ * Описывает input diagnostics.
128
+ */
129
+ export interface NovaDiagnosticsInputSnapshot {
130
+ hitTestMode: string;
131
+ hitTestIndexPolicy?: string;
132
+ lastHitTestCandidates: number;
133
+ cursorLastHitTestCandidates?: number;
134
+ hitTestIndexedNodes?: number;
135
+ cursorIndexedNodes?: number;
136
+ }
137
+ /**
138
+ * Описывает полный diagnostics snapshot.
139
+ */
140
+ export interface NovaDiagnosticsSnapshot {
141
+ runtime: NovaDiagnosticsRuntimeSnapshot;
142
+ frame: NovaDiagnosticsFrameSnapshot;
143
+ render: NovaDiagnosticsRenderSnapshot;
144
+ resources: NovaDiagnosticsResourceSnapshot;
145
+ browser: NovaDiagnosticsBrowserSnapshot;
146
+ input: NovaDiagnosticsInputSnapshot;
147
+ availability: NovaDiagnosticsAvailability;
148
+ }