@endge/nova 0.13.5 → 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 +30 -24
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ConstructorOrFactory, EventList } from '@endge/utils';
|
|
2
|
+
import { NovaNodeProperties } from '../../../domain/types/base.types';
|
|
3
|
+
import { NovaRenderCompileStats, NovaRenderCullingMode, NovaRenderCullingStats, NovaRenderer } from '../../../domain/types/renderer.types';
|
|
4
|
+
import { NovaRenderFrame, NovaRenderMetrics } from '../../../domain/types/rendering/index';
|
|
5
|
+
import { NovaCanvas } from '../../platform/NovaCanvas';
|
|
6
|
+
import { NovaApp } from '../app/NovaApp';
|
|
7
|
+
import { NovaRenderGraph } from '../../render/graph/NovaRenderGraph';
|
|
8
|
+
import { NovaNode } from './NovaNode';
|
|
9
|
+
/**
|
|
10
|
+
* Логическая render boundary внутри app-level render pass Nova.
|
|
11
|
+
*/
|
|
12
|
+
export declare class NovaSurface<E extends EventList> extends NovaNode<E> {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
private _activeRenderContext;
|
|
15
|
+
private readonly _renderCompiler;
|
|
16
|
+
private readonly _renderGraph;
|
|
17
|
+
private _renderMetrics;
|
|
18
|
+
protected _dirty: boolean;
|
|
19
|
+
private _renderCullingMode;
|
|
20
|
+
private _renderCompileStats;
|
|
21
|
+
private _renderCullingStats;
|
|
22
|
+
private readonly _novaApp;
|
|
23
|
+
/**
|
|
24
|
+
* Создает logical surface. Canvas и backend принадлежат NovaApp.
|
|
25
|
+
*/
|
|
26
|
+
constructor(name: string, app: NovaApp<E>);
|
|
27
|
+
/**
|
|
28
|
+
* Обновляет logical dimensions. Physical canvas принадлежит приложению.
|
|
29
|
+
*/
|
|
30
|
+
options(opts: Partial<NovaNodeProperties>): this;
|
|
31
|
+
/**
|
|
32
|
+
* Компилирует surface в retained frame.
|
|
33
|
+
*/
|
|
34
|
+
compileRenderFrame(): NovaRenderFrame;
|
|
35
|
+
/**
|
|
36
|
+
* Выполняет render hooks нод через recorder context.
|
|
37
|
+
*/
|
|
38
|
+
renderWithContext(renderer: NovaRenderer): void;
|
|
39
|
+
/**
|
|
40
|
+
* Обновляет последние renderer metrics после backend replay.
|
|
41
|
+
*/
|
|
42
|
+
setRenderMetrics(metrics: NovaRenderMetrics): void;
|
|
43
|
+
/**
|
|
44
|
+
* Помечает node как rebuilt во время compile.
|
|
45
|
+
*/
|
|
46
|
+
markRenderNodeRebuilt(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Помечает node как проверенную для culling.
|
|
49
|
+
*/
|
|
50
|
+
markRenderNodeTestedForCulling(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Помечает node как culled.
|
|
53
|
+
*/
|
|
54
|
+
markRenderNodeCulled(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Освобождает resources логического surface.
|
|
57
|
+
*/
|
|
58
|
+
destroy(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Создает node внутри этого surface.
|
|
61
|
+
*/
|
|
62
|
+
createNode<T extends NovaNode<E>>(NodeClassOrFactory?: ConstructorOrFactory<T, [NovaApp<E>, NovaSurface<E>, ...Array<any>]>, ...args: Array<any>): T;
|
|
63
|
+
/**
|
|
64
|
+
* Возвращает app-owned canvas.
|
|
65
|
+
*/
|
|
66
|
+
get canvas(): NovaCanvas;
|
|
67
|
+
/**
|
|
68
|
+
* Возвращает текущий render context. Доступен только во время compile.
|
|
69
|
+
*/
|
|
70
|
+
get renderer(): NovaRenderer;
|
|
71
|
+
/**
|
|
72
|
+
* Возвращает render graph.
|
|
73
|
+
*/
|
|
74
|
+
get renderGraph(): NovaRenderGraph;
|
|
75
|
+
/**
|
|
76
|
+
* Возвращает render culling mode.
|
|
77
|
+
*/
|
|
78
|
+
get renderCullingMode(): NovaRenderCullingMode;
|
|
79
|
+
/**
|
|
80
|
+
* Обновляет render culling mode.
|
|
81
|
+
*/
|
|
82
|
+
set renderCullingMode(value: NovaRenderCullingMode);
|
|
83
|
+
/**
|
|
84
|
+
* Возвращает compile stats последнего retained frame compile.
|
|
85
|
+
*/
|
|
86
|
+
get renderCompileStats(): NovaRenderCompileStats;
|
|
87
|
+
/**
|
|
88
|
+
* Возвращает render culling stats.
|
|
89
|
+
*/
|
|
90
|
+
get renderCullingStats(): NovaRenderCullingStats;
|
|
91
|
+
/**
|
|
92
|
+
* Возвращает последние retained renderer metrics.
|
|
93
|
+
*/
|
|
94
|
+
get renderMetrics(): NovaRenderMetrics | null;
|
|
95
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { NovaSemanticQueryOptions, NovaSemanticRegion, NovaSemanticRegisterOptions, NovaSemanticSnapshot, NovaSemanticSnapshotOptions } from '../../domain/types/semantic.types';
|
|
2
|
+
/**
|
|
3
|
+
* Хранит bounded semantic regions без DOM-оверлея и без участия в render hot path.
|
|
4
|
+
*/
|
|
5
|
+
export declare class NovaSemanticService {
|
|
6
|
+
private readonly regions;
|
|
7
|
+
private readonly sourceIndex;
|
|
8
|
+
private insertionCounter;
|
|
9
|
+
private autoIdCounter;
|
|
10
|
+
private focusedByScope;
|
|
11
|
+
register(options: NovaSemanticRegisterOptions): NovaSemanticRegion;
|
|
12
|
+
update(id: string, patch: Partial<Omit<NovaSemanticRegisterOptions, 'id'>>): NovaSemanticRegion | undefined;
|
|
13
|
+
remove(id: string): boolean;
|
|
14
|
+
clearScope(scope?: string): void;
|
|
15
|
+
clearSource(sourceKey: string): void;
|
|
16
|
+
syncSource(sourceKey: string, regions: Array<NovaSemanticRegisterOptions>): Array<NovaSemanticRegion>;
|
|
17
|
+
query(options?: NovaSemanticQueryOptions): Array<NovaSemanticRegion>;
|
|
18
|
+
snapshot(options?: NovaSemanticSnapshotOptions): NovaSemanticSnapshot;
|
|
19
|
+
focusNext(options?: NovaSemanticQueryOptions): NovaSemanticRegion | undefined;
|
|
20
|
+
focusPrevious(options?: NovaSemanticQueryOptions): NovaSemanticRegion | undefined;
|
|
21
|
+
getFocused(scope?: string): NovaSemanticRegion | undefined;
|
|
22
|
+
setFocused(id: string | null, scope?: string): NovaSemanticRegion | undefined;
|
|
23
|
+
clear(): void;
|
|
24
|
+
reset(): void;
|
|
25
|
+
private moveFocus;
|
|
26
|
+
private addToSourceIndex;
|
|
27
|
+
private removeFromSourceIndex;
|
|
28
|
+
private findAnyFocusedId;
|
|
29
|
+
private clearRegionFocused;
|
|
30
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { NovaSoundCueInput, NovaSoundDescriptor, NovaSoundHandle, NovaSoundOptions, NovaSoundPlayOptions, NovaSoundStats } from '../../domain/types/sound.types';
|
|
2
|
+
import { NovaApp } from '../runtime/app/NovaApp';
|
|
3
|
+
/**
|
|
4
|
+
* Управляет загрузкой, кэшированием и воспроизведением звуков Nova runtime.
|
|
5
|
+
*/
|
|
6
|
+
export declare class NovaSoundEngine {
|
|
7
|
+
private readonly descriptors;
|
|
8
|
+
private readonly assets;
|
|
9
|
+
private readonly activeHandles;
|
|
10
|
+
private readonly lastPlayedAt;
|
|
11
|
+
private readonly categoryVolumes;
|
|
12
|
+
private readonly formats;
|
|
13
|
+
private readonly backend;
|
|
14
|
+
private readonly maxVoices;
|
|
15
|
+
private readonly unlockMode;
|
|
16
|
+
private enabled;
|
|
17
|
+
private muted;
|
|
18
|
+
private volume;
|
|
19
|
+
private played;
|
|
20
|
+
private skipped;
|
|
21
|
+
private unlocked;
|
|
22
|
+
/**
|
|
23
|
+
* Создает instance и выбирает audio backend.
|
|
24
|
+
*/
|
|
25
|
+
constructor(_app: NovaApp<any>, options?: NovaSoundOptions);
|
|
26
|
+
/**
|
|
27
|
+
* Загружает один или несколько sound descriptors.
|
|
28
|
+
*/
|
|
29
|
+
load(input: NovaSoundDescriptor | Array<NovaSoundDescriptor>): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Алиас для фоновой предзагрузки sound descriptors.
|
|
32
|
+
*/
|
|
33
|
+
preload(input: NovaSoundDescriptor | Array<NovaSoundDescriptor>): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Запускает воспроизведение sound asset.
|
|
36
|
+
*/
|
|
37
|
+
play(id: string, options?: NovaSoundPlayOptions): NovaSoundHandle;
|
|
38
|
+
/**
|
|
39
|
+
* Останавливает конкретный handle, asset id или все активные звуки.
|
|
40
|
+
*/
|
|
41
|
+
stop(target?: NovaSoundHandle | string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Обновляет master mute.
|
|
44
|
+
*/
|
|
45
|
+
setMuted(muted: boolean): void;
|
|
46
|
+
/**
|
|
47
|
+
* Обновляет master volume.
|
|
48
|
+
*/
|
|
49
|
+
setVolume(volume: number): void;
|
|
50
|
+
/**
|
|
51
|
+
* Обновляет громкость категории.
|
|
52
|
+
*/
|
|
53
|
+
setCategoryVolume(category: string, volume: number): void;
|
|
54
|
+
/**
|
|
55
|
+
* Разблокирует browser audio context после пользовательского жеста.
|
|
56
|
+
*/
|
|
57
|
+
unlock(): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Разблокирует audio context только для режима first-input.
|
|
60
|
+
*/
|
|
61
|
+
unlockFromInput(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Создает scene/component scope для привязанных playback.
|
|
64
|
+
*/
|
|
65
|
+
scope(name: string): NovaSoundScope;
|
|
66
|
+
/**
|
|
67
|
+
* Возвращает runtime stats.
|
|
68
|
+
*/
|
|
69
|
+
stats(): NovaSoundStats;
|
|
70
|
+
/**
|
|
71
|
+
* Освобождает active handles, cache и backend resources.
|
|
72
|
+
*/
|
|
73
|
+
destroy(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Проигрывает sound cue input.
|
|
76
|
+
*/
|
|
77
|
+
playCue(input: NovaSoundCueInput | undefined): NovaSoundHandle | null;
|
|
78
|
+
/**
|
|
79
|
+
* Загружает один descriptor.
|
|
80
|
+
*/
|
|
81
|
+
private loadOne;
|
|
82
|
+
/**
|
|
83
|
+
* Проверяет cooldown и instance limits.
|
|
84
|
+
*/
|
|
85
|
+
private canPlay;
|
|
86
|
+
/**
|
|
87
|
+
* Останавливает предыдущее воспроизведение с тем же dedupe key.
|
|
88
|
+
*/
|
|
89
|
+
private stopDedupeHandle;
|
|
90
|
+
/**
|
|
91
|
+
* Освобождает место в voice pool при необходимости.
|
|
92
|
+
*/
|
|
93
|
+
private enforceVoicePool;
|
|
94
|
+
/**
|
|
95
|
+
* Удаляет завершенный handle из active pool.
|
|
96
|
+
*/
|
|
97
|
+
private finishHandle;
|
|
98
|
+
/**
|
|
99
|
+
* Фиксирует skipped playback.
|
|
100
|
+
*/
|
|
101
|
+
private skip;
|
|
102
|
+
/**
|
|
103
|
+
* Создает лучший доступный backend.
|
|
104
|
+
*/
|
|
105
|
+
private createBackend;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Управляет playback handles в рамках scene/component scope.
|
|
109
|
+
*/
|
|
110
|
+
export declare class NovaSoundScope {
|
|
111
|
+
private readonly engine;
|
|
112
|
+
readonly name: string;
|
|
113
|
+
private readonly handles;
|
|
114
|
+
/**
|
|
115
|
+
* Создает scope.
|
|
116
|
+
*/
|
|
117
|
+
constructor(engine: NovaSoundEngine, name: string);
|
|
118
|
+
/**
|
|
119
|
+
* Запускает scoped sound.
|
|
120
|
+
*/
|
|
121
|
+
play(id: string, options?: NovaSoundPlayOptions): NovaSoundHandle;
|
|
122
|
+
/**
|
|
123
|
+
* Запускает scoped sound cue.
|
|
124
|
+
*/
|
|
125
|
+
playCue(input: NovaSoundCueInput | undefined): NovaSoundHandle | null;
|
|
126
|
+
/**
|
|
127
|
+
* Останавливает и освобождает scope.
|
|
128
|
+
*/
|
|
129
|
+
destroy(): void;
|
|
130
|
+
/**
|
|
131
|
+
* Отслеживает handle до завершения.
|
|
132
|
+
*/
|
|
133
|
+
private track;
|
|
134
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Описывает тип EventKind.
|
|
3
|
+
*/
|
|
4
|
+
export type EventKind = 'ctx:create' | 'ctx:destroy' | 'ctx:lost' | 'ctx:restored' | 'gl:error' | 'canvas:resize' | 'res:create' | 'res:delete' | 'raf:drop' | 'page' | 'visibility';
|
|
5
|
+
/**
|
|
6
|
+
* Описывает тип Evt.
|
|
7
|
+
*/
|
|
8
|
+
export interface Evt {
|
|
9
|
+
t: number;
|
|
10
|
+
k: EventKind;
|
|
11
|
+
s?: string;
|
|
12
|
+
g?: string;
|
|
13
|
+
d: any;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Описывает тип FrameStat.
|
|
17
|
+
*/
|
|
18
|
+
export interface FrameStat {
|
|
19
|
+
t: number;
|
|
20
|
+
s?: string;
|
|
21
|
+
g?: string;
|
|
22
|
+
bytes: number;
|
|
23
|
+
draws: number;
|
|
24
|
+
rects?: number;
|
|
25
|
+
batches?: number;
|
|
26
|
+
backbufferBytes?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Описывает тип Snapshot.
|
|
30
|
+
*/
|
|
31
|
+
interface Snapshot {
|
|
32
|
+
label: string;
|
|
33
|
+
at: number;
|
|
34
|
+
stats: Array<FrameStat>;
|
|
35
|
+
events: Array<Evt>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Описывает тип SnapshotHandler.
|
|
39
|
+
*/
|
|
40
|
+
type SnapshotHandler = (snap: Snapshot) => void;
|
|
41
|
+
/**
|
|
42
|
+
* Собирает graphics telemetry events и статистику кадров.
|
|
43
|
+
*/
|
|
44
|
+
export declare class GfxTelemetry {
|
|
45
|
+
private readonly eventsLimit;
|
|
46
|
+
private readonly statsLimit;
|
|
47
|
+
private _enabled;
|
|
48
|
+
private _events;
|
|
49
|
+
private _stats;
|
|
50
|
+
private _snapListeners;
|
|
51
|
+
lastSnap?: Snapshot;
|
|
52
|
+
private _accBytes;
|
|
53
|
+
/**
|
|
54
|
+
* Возвращает enabled.
|
|
55
|
+
*/
|
|
56
|
+
get enabled(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Обновляет enabled.
|
|
59
|
+
*/
|
|
60
|
+
set enabled(value: boolean);
|
|
61
|
+
/**
|
|
62
|
+
* Обрабатывает событие snapshot.
|
|
63
|
+
*/
|
|
64
|
+
onSnapshot(cb: SnapshotHandler): () => void;
|
|
65
|
+
/**
|
|
66
|
+
* Выполняет внутреннюю операцию emit snapshot.
|
|
67
|
+
*/
|
|
68
|
+
private _emitSnapshot;
|
|
69
|
+
/**
|
|
70
|
+
* Добавляет upload bytes.
|
|
71
|
+
*/
|
|
72
|
+
addUploadBytes(n: number): void;
|
|
73
|
+
/**
|
|
74
|
+
* Выполняет внутреннюю операцию consume acc bytes.
|
|
75
|
+
*/
|
|
76
|
+
consumeAccBytes(): number;
|
|
77
|
+
/**
|
|
78
|
+
* Создает instance и подготавливает внутреннее состояние.
|
|
79
|
+
*/
|
|
80
|
+
constructor(opts?: {
|
|
81
|
+
eventsLimit?: number;
|
|
82
|
+
statsLimit?: number;
|
|
83
|
+
});
|
|
84
|
+
/**
|
|
85
|
+
* Выполняет внутреннюю операцию event.
|
|
86
|
+
*/
|
|
87
|
+
event(k: EventKind, d?: any, s?: string, g?: string): void;
|
|
88
|
+
/**
|
|
89
|
+
* Выполняет внутреннюю операцию stat.
|
|
90
|
+
*/
|
|
91
|
+
stat(partial: Omit<FrameStat, 't'>): void;
|
|
92
|
+
/**
|
|
93
|
+
* Выполняет внутреннюю операцию snapshot.
|
|
94
|
+
*/
|
|
95
|
+
snapshot(label: string): Snapshot;
|
|
96
|
+
}
|
|
97
|
+
export declare const Telemetry: GfxTelemetry;
|
|
98
|
+
/**
|
|
99
|
+
* Выполняет публичную операцию analyze snapshot.
|
|
100
|
+
*/
|
|
101
|
+
export declare function analyzeSnapshot(snap: {
|
|
102
|
+
stats: Array<FrameStat>;
|
|
103
|
+
events: Array<Evt>;
|
|
104
|
+
}): {
|
|
105
|
+
flags: string[];
|
|
106
|
+
notes: any;
|
|
107
|
+
};
|
|
108
|
+
export {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { NovaClipboardResult } from '../input/NovaClipboardService';
|
|
2
|
+
import { NovaTextSelectionHit, NovaTextSelectionOptions, NovaTextSelectionRange, NovaTextSelectionState, NovaTextSelectionTarget } from './nova-text-selection.types';
|
|
3
|
+
/**
|
|
4
|
+
* Инкапсулирует сервисную логику NovaTextSelectionService.
|
|
5
|
+
*/
|
|
6
|
+
export declare class NovaTextSelectionService<TContext = unknown> {
|
|
7
|
+
private options;
|
|
8
|
+
private readonly clipboard;
|
|
9
|
+
private readonly targets;
|
|
10
|
+
private readonly buckets;
|
|
11
|
+
private readonly orderedTargets;
|
|
12
|
+
private anchor;
|
|
13
|
+
private focus;
|
|
14
|
+
private dragging;
|
|
15
|
+
private orderCursor;
|
|
16
|
+
/**
|
|
17
|
+
* Создает экземпляр NovaTextSelectionService и подготавливает базовое состояние.
|
|
18
|
+
*/
|
|
19
|
+
constructor(options?: Required<NovaTextSelectionOptions>);
|
|
20
|
+
/**
|
|
21
|
+
* Выполняет действие configure в рамках ответственности NovaTextSelectionService.
|
|
22
|
+
*/
|
|
23
|
+
configure(options: NovaTextSelectionOptions | false | undefined): void;
|
|
24
|
+
/**
|
|
25
|
+
* Выполняет действие beginFrame в рамках ответственности NovaTextSelectionService.
|
|
26
|
+
*/
|
|
27
|
+
beginFrame(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Регистрирует сущность в runtime-слое NovaTextSelectionService.
|
|
30
|
+
*/
|
|
31
|
+
register(target: NovaTextSelectionTarget<TContext>): void;
|
|
32
|
+
/**
|
|
33
|
+
* Выполняет hit-test для runtime-геометрии NovaTextSelectionService.
|
|
34
|
+
*/
|
|
35
|
+
hitTest(x: number, y: number): NovaTextSelectionHit<TContext> | null;
|
|
36
|
+
/**
|
|
37
|
+
* Запускает runtime-процесс NovaTextSelectionService.
|
|
38
|
+
*/
|
|
39
|
+
start(x: number, y: number): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Обновляет runtime-состояние NovaTextSelectionService.
|
|
42
|
+
*/
|
|
43
|
+
update(x: number, y: number): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Выполняет действие end в рамках ответственности NovaTextSelectionService.
|
|
46
|
+
*/
|
|
47
|
+
end(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Очищает накопленное состояние NovaTextSelectionService.
|
|
50
|
+
*/
|
|
51
|
+
clear(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Выполняет действие hasSelection в рамках ответственности NovaTextSelectionService.
|
|
54
|
+
*/
|
|
55
|
+
hasSelection(): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Возвращает значение состояния NovaTextSelectionService.
|
|
58
|
+
*/
|
|
59
|
+
getSelectionColor(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Возвращает значение состояния NovaTextSelectionService.
|
|
62
|
+
*/
|
|
63
|
+
getRanges(): Array<NovaTextSelectionRange<TContext>>;
|
|
64
|
+
/**
|
|
65
|
+
* Возвращает значение состояния NovaTextSelectionService.
|
|
66
|
+
*/
|
|
67
|
+
getSelectedText(formatter?: (ranges: Array<NovaTextSelectionRange<TContext>>) => string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Выполняет действие copy в рамках ответственности NovaTextSelectionService.
|
|
70
|
+
*/
|
|
71
|
+
copy(formatter?: (ranges: Array<NovaTextSelectionRange<TContext>>) => string): Promise<NovaClipboardResult>;
|
|
72
|
+
/**
|
|
73
|
+
* Возвращает значение состояния NovaTextSelectionService.
|
|
74
|
+
*/
|
|
75
|
+
getState(formatter?: (ranges: Array<NovaTextSelectionRange<TContext>>) => string): NovaTextSelectionState<TContext>;
|
|
76
|
+
/**
|
|
77
|
+
* Выполняет внутренний шаг addToBuckets для NovaTextSelectionService.
|
|
78
|
+
*/
|
|
79
|
+
private addToBuckets;
|
|
80
|
+
/**
|
|
81
|
+
* Выполняет внутренний шаг bucketKey для NovaTextSelectionService.
|
|
82
|
+
*/
|
|
83
|
+
private bucketKey;
|
|
84
|
+
}
|
|
85
|
+
export declare function resolveNovaTextSelectionOptions(options?: NovaTextSelectionOptions | false): Required<NovaTextSelectionOptions>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { NovaRectLike, NovaTextRange } from '../input/nova-input.types';
|
|
2
|
+
export type NovaTextSelectionMode = 'explicit' | 'all-text';
|
|
3
|
+
export type NovaTextSelectionGranularity = 'text' | 'word' | 'line' | 'block';
|
|
4
|
+
export type NovaTextSelectionClipboardMode = 'plain' | 'rich' | 'contextual';
|
|
5
|
+
export interface NovaTextSelectionOptions {
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
mode?: NovaTextSelectionMode;
|
|
8
|
+
copy?: boolean;
|
|
9
|
+
drag?: boolean;
|
|
10
|
+
doubleClick?: 'word' | 'block';
|
|
11
|
+
tripleClick?: 'line' | 'paragraph';
|
|
12
|
+
granularity?: NovaTextSelectionGranularity;
|
|
13
|
+
clipboard?: NovaTextSelectionClipboardMode;
|
|
14
|
+
selectionColor?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface NovaTextSelectionTarget<TContext = unknown> {
|
|
17
|
+
id: string;
|
|
18
|
+
text: string;
|
|
19
|
+
rect: NovaRectLike;
|
|
20
|
+
selectable?: boolean;
|
|
21
|
+
copyable?: boolean;
|
|
22
|
+
scope?: string;
|
|
23
|
+
ownerId?: string;
|
|
24
|
+
zIndex?: number;
|
|
25
|
+
order?: number;
|
|
26
|
+
context?: TContext;
|
|
27
|
+
copyText?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface NovaTextSelectionResolvedTarget<TContext = unknown> extends NovaTextSelectionTarget<TContext> {
|
|
30
|
+
selectable: boolean;
|
|
31
|
+
copyable: boolean;
|
|
32
|
+
zIndex: number;
|
|
33
|
+
order: number;
|
|
34
|
+
}
|
|
35
|
+
export interface NovaTextSelectionAnchor {
|
|
36
|
+
targetId: string;
|
|
37
|
+
offset: number;
|
|
38
|
+
}
|
|
39
|
+
export interface NovaTextSelectionRange<TContext = unknown> {
|
|
40
|
+
target: NovaTextSelectionResolvedTarget<TContext>;
|
|
41
|
+
range: NovaTextRange;
|
|
42
|
+
}
|
|
43
|
+
export interface NovaTextSelectionState<TContext = unknown> {
|
|
44
|
+
active: boolean;
|
|
45
|
+
dragging: boolean;
|
|
46
|
+
anchor: NovaTextSelectionAnchor | null;
|
|
47
|
+
focus: NovaTextSelectionAnchor | null;
|
|
48
|
+
ranges: Array<NovaTextSelectionRange<TContext>>;
|
|
49
|
+
text: string;
|
|
50
|
+
}
|
|
51
|
+
export interface NovaTextSelectionHit<TContext = unknown> {
|
|
52
|
+
target: NovaTextSelectionResolvedTarget<TContext>;
|
|
53
|
+
offset: number;
|
|
54
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { EventList } from '@endge/utils';
|
|
2
|
+
import { NovaThemeId, NovaThemeTokens } from '../../domain/types/theme.types';
|
|
3
|
+
import { NovaApp } from '../runtime/app/NovaApp';
|
|
4
|
+
export interface NovaGlobalThemeRule {
|
|
5
|
+
selector?: {
|
|
6
|
+
parts?: Array<{
|
|
7
|
+
type?: string;
|
|
8
|
+
id?: string;
|
|
9
|
+
classes?: Array<string>;
|
|
10
|
+
}>;
|
|
11
|
+
specificity?: number;
|
|
12
|
+
};
|
|
13
|
+
declarations?: {
|
|
14
|
+
customProperties?: Record<string, unknown>;
|
|
15
|
+
};
|
|
16
|
+
order?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface NovaGlobalThemeStyleSheet {
|
|
19
|
+
rules?: Array<NovaGlobalThemeRule>;
|
|
20
|
+
}
|
|
21
|
+
export interface NovaGlobalThemeAsset {
|
|
22
|
+
themes?: Array<{
|
|
23
|
+
id: NovaThemeId;
|
|
24
|
+
title?: string;
|
|
25
|
+
tokens?: NovaThemeTokens;
|
|
26
|
+
styleSheet?: NovaGlobalThemeStyleSheet | null;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
export interface NovaThemeSelectorTarget {
|
|
30
|
+
type: string;
|
|
31
|
+
id?: string | null;
|
|
32
|
+
className?: unknown;
|
|
33
|
+
theme?: NovaThemeId | null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Global registry for imported NovaCSS assets and app-wide theme switching.
|
|
37
|
+
*/
|
|
38
|
+
export declare class NovaGlobalThemeRegistry {
|
|
39
|
+
private readonly assets;
|
|
40
|
+
private readonly listeners;
|
|
41
|
+
private readonly apps;
|
|
42
|
+
private activeTheme;
|
|
43
|
+
import(asset: NovaGlobalThemeAsset): void;
|
|
44
|
+
theme(): NovaThemeId | null;
|
|
45
|
+
theme(id: NovaThemeId): NovaThemeId;
|
|
46
|
+
attach<E extends EventList>(app: NovaApp<E>, options?: {
|
|
47
|
+
inheritActive?: boolean;
|
|
48
|
+
}): () => void;
|
|
49
|
+
subscribe(listener: () => void): () => void;
|
|
50
|
+
resolveTokens(target: NovaThemeSelectorTarget): NovaThemeTokens;
|
|
51
|
+
resetForTests(): void;
|
|
52
|
+
private registerThemes;
|
|
53
|
+
private collectThemeDefinitions;
|
|
54
|
+
private tryUseTheme;
|
|
55
|
+
private notify;
|
|
56
|
+
}
|
|
57
|
+
export declare const NovaGlobalThemes: NovaGlobalThemeRegistry;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { EventList } from '@endge/utils';
|
|
2
|
+
import { NovaThemeCreateOptions, NovaThemeDefinition, NovaThemeId, NovaThemeObserveOptions, NovaThemeSnapshot, NovaThemeTokenName, NovaThemeTokenResolver, NovaThemeTokenValue } from '../../domain/types/theme.types';
|
|
3
|
+
import { NovaApp } from '../runtime/app/NovaApp';
|
|
4
|
+
import { NovaNode } from '../runtime/tree/NovaNode';
|
|
5
|
+
/**
|
|
6
|
+
* Путь активной темы в shared RaphKernel data-store.
|
|
7
|
+
*/
|
|
8
|
+
export declare const NOVA_THEME_ACTIVE_PATH = "nova.theme.active";
|
|
9
|
+
/**
|
|
10
|
+
* Путь версии темы в shared RaphKernel data-store.
|
|
11
|
+
*/
|
|
12
|
+
export declare const NOVA_THEME_VERSION_PATH = "nova.theme.version";
|
|
13
|
+
/**
|
|
14
|
+
* Управляет Nova theme definitions, а активную тему хранит в shared RaphKernel.
|
|
15
|
+
*/
|
|
16
|
+
export declare class NovaThemeService<E extends EventList = Record<string, any>> {
|
|
17
|
+
private readonly app;
|
|
18
|
+
private readonly themes;
|
|
19
|
+
/**
|
|
20
|
+
* Создает service и регистрирует начальные темы.
|
|
21
|
+
*/
|
|
22
|
+
constructor(app: NovaApp<E>, options?: NovaThemeCreateOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Регистрирует тему в локальном Nova registry.
|
|
25
|
+
*/
|
|
26
|
+
register(theme: NovaThemeDefinition, options?: {
|
|
27
|
+
activate?: boolean;
|
|
28
|
+
}): void;
|
|
29
|
+
/**
|
|
30
|
+
* Регистрирует несколько тем.
|
|
31
|
+
*/
|
|
32
|
+
registerMany(themes: Array<NovaThemeDefinition>, options?: {
|
|
33
|
+
active?: NovaThemeId;
|
|
34
|
+
}): void;
|
|
35
|
+
/**
|
|
36
|
+
* Делает тему активной и пишет состояние в RaphKernel.
|
|
37
|
+
*/
|
|
38
|
+
use(id: NovaThemeId): void;
|
|
39
|
+
/**
|
|
40
|
+
* Возвращает активный theme id из RaphKernel.
|
|
41
|
+
*/
|
|
42
|
+
active(): NovaThemeId | null;
|
|
43
|
+
/**
|
|
44
|
+
* Возвращает текущую версию темы из RaphKernel.
|
|
45
|
+
*/
|
|
46
|
+
version(): number;
|
|
47
|
+
/**
|
|
48
|
+
* Возвращает активную theme definition.
|
|
49
|
+
*/
|
|
50
|
+
activeDefinition(): NovaThemeDefinition | null;
|
|
51
|
+
/**
|
|
52
|
+
* Возвращает raw token активной темы.
|
|
53
|
+
*/
|
|
54
|
+
token(name: NovaThemeTokenName): NovaThemeTokenValue | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Резолвит token в строку для renderer и NovaCSS.
|
|
57
|
+
*/
|
|
58
|
+
resolve(name: string, fallback?: string): string | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Возвращает snapshot активной темы.
|
|
61
|
+
*/
|
|
62
|
+
snapshot(): NovaThemeSnapshot;
|
|
63
|
+
/**
|
|
64
|
+
* Создает resolver, совместимый с Nova UI Kit style engine.
|
|
65
|
+
*/
|
|
66
|
+
createTokenResolver(): NovaThemeTokenResolver;
|
|
67
|
+
/**
|
|
68
|
+
* Подписывает Nova node на смену темы через Raph data observer.
|
|
69
|
+
*/
|
|
70
|
+
observe(node: NovaNode<E>, options?: NovaThemeObserveOptions): () => void;
|
|
71
|
+
/**
|
|
72
|
+
* Возвращает путь версии темы для прямых подписок.
|
|
73
|
+
*/
|
|
74
|
+
get versionPath(): string;
|
|
75
|
+
/**
|
|
76
|
+
* Возвращает путь активной темы для диагностики и интеграций.
|
|
77
|
+
*/
|
|
78
|
+
get activePath(): string;
|
|
79
|
+
/**
|
|
80
|
+
* Поднимает версию темы без смены active id.
|
|
81
|
+
*/
|
|
82
|
+
private bumpVersion;
|
|
83
|
+
}
|