@vulfram/engine 0.14.8-alpha → 0.19.2-alpha

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 (63) hide show
  1. package/README.md +106 -0
  2. package/package.json +60 -4
  3. package/src/core.ts +14 -0
  4. package/src/ecs.ts +1 -0
  5. package/src/engine/api.ts +222 -24
  6. package/src/engine/bridge/dispatch.ts +260 -40
  7. package/src/engine/bridge/guards.ts +4 -1
  8. package/src/engine/bridge/protocol.ts +69 -52
  9. package/src/engine/ecs/components.ts +340 -0
  10. package/src/engine/ecs/index.ts +3 -518
  11. package/src/engine/ecs/intents.ts +184 -0
  12. package/src/engine/ecs/systems.ts +26 -0
  13. package/src/engine/intents/store.ts +72 -0
  14. package/src/engine/state.ts +136 -5
  15. package/src/engine/systems/command-intent.ts +159 -14
  16. package/src/engine/systems/constraint-solve.ts +167 -0
  17. package/src/engine/systems/core-command-builder.ts +9 -268
  18. package/src/engine/systems/diagnostics.ts +20 -29
  19. package/src/engine/systems/index.ts +3 -1
  20. package/src/engine/systems/input-mirror.ts +257 -21
  21. package/src/engine/systems/resource-upload.ts +108 -58
  22. package/src/engine/systems/response-decode.ts +86 -15
  23. package/src/engine/systems/scene-sync.ts +305 -0
  24. package/src/engine/systems/ui-bridge.ts +381 -0
  25. package/src/engine/systems/utils.ts +86 -1
  26. package/src/engine/systems/world-lifecycle.ts +43 -114
  27. package/src/engine/window/manager.ts +168 -0
  28. package/src/engine/world/entities.ts +998 -91
  29. package/src/engine/world/mount.ts +195 -0
  30. package/src/engine/world/types.ts +71 -0
  31. package/src/engine/world/world-ui.ts +313 -0
  32. package/src/engine/world/world3d.ts +529 -0
  33. package/src/helpers/collision.ts +487 -0
  34. package/src/helpers/index.ts +2 -0
  35. package/src/helpers/raycast.ts +442 -0
  36. package/src/index.ts +30 -1
  37. package/src/mount.ts +2 -0
  38. package/src/types/cmds/audio.ts +73 -48
  39. package/src/types/cmds/camera.ts +12 -8
  40. package/src/types/cmds/environment.ts +9 -3
  41. package/src/types/cmds/geometry.ts +15 -16
  42. package/src/types/cmds/index.ts +234 -162
  43. package/src/types/cmds/input.ts +39 -0
  44. package/src/types/cmds/light.ts +12 -11
  45. package/src/types/cmds/material.ts +19 -21
  46. package/src/types/cmds/model.ts +17 -15
  47. package/src/types/cmds/realm.ts +23 -0
  48. package/src/types/cmds/system.ts +29 -0
  49. package/src/types/cmds/target.ts +96 -0
  50. package/src/types/cmds/texture.ts +13 -3
  51. package/src/types/cmds/ui.ts +220 -0
  52. package/src/types/cmds/window.ts +41 -204
  53. package/src/types/events/index.ts +4 -1
  54. package/src/types/events/keyboard.ts +2 -2
  55. package/src/types/events/pointer.ts +85 -13
  56. package/src/types/events/system.ts +188 -30
  57. package/src/types/events/ui.ts +21 -0
  58. package/src/types/index.ts +1 -0
  59. package/src/types/json.ts +15 -0
  60. package/src/window.ts +8 -0
  61. package/src/world-ui.ts +2 -0
  62. package/src/world3d.ts +10 -0
  63. package/tsconfig.json +0 -29
@@ -1,42 +1,200 @@
1
- /** Payload for notification system events. */
2
- export interface SystemEventOnNotificationData {
3
- id: string;
4
- }
1
+ import type { CursorGrabMode } from '../kinds';
5
2
 
6
- /** Payload for async texture decode completion. */
7
- export interface SystemEventTextureReadyData {
8
- window_id: number;
9
- texture_id: number;
10
- success: boolean;
11
- message: string;
12
- }
3
+ export type PointerTraceLevel = 'off' | 'errors' | 'basic' | 'full';
13
4
 
14
- /** Payload for async audio decode completion. */
15
- export interface SystemEventAudioReadyData {
16
- resource_id: number;
17
- success: boolean;
18
- message: string;
19
- }
5
+ export type UiViewportClass = 'root' | 'deferred' | 'immediate' | 'embedded';
20
6
 
21
- /** Payload for audio stream progress. */
22
- export interface SystemEventAudioStreamProgressData {
23
- resource_id: number;
24
- received_bytes: number;
25
- total_bytes: number;
26
- complete: boolean;
27
- }
7
+ export type UiViewportCommand =
8
+ | { type: 'close' }
9
+ | { type: 'title'; content: { title: string } }
10
+ | { type: 'inner-size'; content: { width: number; height: number } }
11
+ | { type: 'outer-position'; content: { x: number; y: number } }
12
+ | { type: 'resizable'; content: { value: boolean } }
13
+ | { type: 'decorations'; content: { value: boolean } }
14
+ | { type: 'fullscreen'; content: { value: boolean } }
15
+ | { type: 'minimized'; content: { value: boolean } }
16
+ | { type: 'maximized'; content: { value: boolean } }
17
+ | { type: 'focus' }
18
+ | { type: 'screenshot' }
19
+ | { type: 'cursor-visible'; content: { value: boolean } }
20
+ | { type: 'cursor-grab'; content: { mode: CursorGrabMode } }
21
+ | { type: 'ime-allowed'; content: { value: boolean } }
22
+ | {
23
+ type: 'ime-rect';
24
+ content: { minX: number; minY: number; maxX: number; maxY: number };
25
+ };
28
26
 
29
- /** Discriminated union of system-level events. */
30
27
  export type SystemEvent =
28
+ | {
29
+ event: 'error';
30
+ data: {
31
+ scope: string;
32
+ message: string;
33
+ commandId?: number;
34
+ commandType?: string;
35
+ };
36
+ }
37
+ | {
38
+ event: 'command-deferred';
39
+ data: {
40
+ commandId: number;
41
+ commandType: string;
42
+ attempts: number;
43
+ reason: string;
44
+ };
45
+ }
46
+ | {
47
+ event: 'command-applied';
48
+ data: {
49
+ commandId: number;
50
+ commandType: string;
51
+ attempts: number;
52
+ };
53
+ }
54
+ | {
55
+ event: 'command-dropped';
56
+ data: {
57
+ commandId: number;
58
+ commandType: string;
59
+ attempts: number;
60
+ reason: string;
61
+ };
62
+ }
31
63
  | { event: 'on-resume' }
32
64
  | { event: 'on-suspend' }
33
65
  | { event: 'on-memory-warning' }
34
66
  | { event: 'on-exit' }
35
- | { event: 'on-notification-clicked'; data: SystemEventOnNotificationData }
36
- | { event: 'on-notification-dismissed'; data: SystemEventOnNotificationData }
37
- | { event: 'texture-ready'; data: SystemEventTextureReadyData }
38
- | { event: 'audio-ready'; data: SystemEventAudioReadyData }
67
+ | { event: 'on-notification-clicked'; data: { id: string } }
68
+ | { event: 'on-notification-dismissed'; data: { id: string } }
69
+ | {
70
+ event: 'texture-ready';
71
+ data: { windowId: number; textureId: number; success: boolean; message: string };
72
+ }
73
+ | {
74
+ event: 'texture-processing-started';
75
+ data: { windowId: number; textureId: number; totalBytes: number };
76
+ }
77
+ | {
78
+ event: 'texture-processing-progress';
79
+ data: {
80
+ windowId: number;
81
+ textureId: number;
82
+ processedBytes: number;
83
+ totalBytes: number;
84
+ };
85
+ }
86
+ | {
87
+ event: 'texture-processing-finished';
88
+ data: {
89
+ windowId: number;
90
+ textureId: number;
91
+ success: boolean;
92
+ message: string;
93
+ totalBytes: number;
94
+ };
95
+ }
96
+ | {
97
+ event: 'ui-image-ready';
98
+ data: { imageId: number; success: boolean; message: string };
99
+ }
100
+ | {
101
+ event: 'ui-image-processing-started';
102
+ data: { imageId: number; totalBytes: number };
103
+ }
104
+ | {
105
+ event: 'ui-image-processing-progress';
106
+ data: { imageId: number; processedBytes: number; totalBytes: number };
107
+ }
108
+ | {
109
+ event: 'ui-image-processing-finished';
110
+ data: {
111
+ imageId: number;
112
+ success: boolean;
113
+ message: string;
114
+ totalBytes: number;
115
+ };
116
+ }
117
+ | {
118
+ event: 'audio-ready';
119
+ data: { resourceId: number; success: boolean; message: string };
120
+ }
39
121
  | {
40
122
  event: 'audio-stream-progress';
41
- data: SystemEventAudioStreamProgressData;
123
+ data: {
124
+ resourceId: number;
125
+ receivedBytes: number;
126
+ totalBytes: number;
127
+ complete: boolean;
128
+ };
129
+ }
130
+ | {
131
+ event: 'ui-open-url';
132
+ data: { windowId: number; realmId: number; url: string; newTab: boolean };
133
+ }
134
+ | {
135
+ event: 'ui-clipboard-set-text';
136
+ data: { windowId: number; realmId: number; text: string };
137
+ }
138
+ | {
139
+ event: 'ui-clipboard-request-copy';
140
+ data: { windowId: number; realmId: number };
141
+ }
142
+ | {
143
+ event: 'ui-clipboard-request-cut';
144
+ data: { windowId: number; realmId: number };
145
+ }
146
+ | {
147
+ event: 'ui-clipboard-request-paste';
148
+ data: { windowId: number; realmId: number };
149
+ }
150
+ | {
151
+ event: 'ui-screenshot-request';
152
+ data: { windowId: number; realmId: number };
153
+ }
154
+ | {
155
+ event: 'ui-viewport-sync';
156
+ data: {
157
+ windowId: number;
158
+ realmId: number;
159
+ viewportId: number;
160
+ parentViewportId?: number;
161
+ class: UiViewportClass;
162
+ title?: string;
163
+ };
164
+ }
165
+ | {
166
+ event: 'ui-viewport-command';
167
+ data: {
168
+ windowId: number;
169
+ realmId: number;
170
+ viewportId: number;
171
+ command: UiViewportCommand;
172
+ };
173
+ }
174
+ | {
175
+ event: 'ui-viewport-fallback-embedded';
176
+ data: {
177
+ windowId: number;
178
+ realmId: number;
179
+ viewportId: number;
180
+ parentViewportId?: number;
181
+ };
182
+ }
183
+ | {
184
+ event: 'input-target-listener-event';
185
+ data: {
186
+ listenerId: number;
187
+ targetId: number;
188
+ eventType: string;
189
+ windowId?: number;
190
+ windowWidth?: number;
191
+ windowHeight?: number;
192
+ pointerId?: number;
193
+ positionGlobal?: [number, number];
194
+ positionTarget?: [number, number];
195
+ targetWidth?: number;
196
+ targetHeight?: number;
197
+ keyCode?: number;
198
+ keyState?: 'pressed' | 'released';
199
+ };
42
200
  };
@@ -0,0 +1,21 @@
1
+ export type UiEventKind =
2
+ | 'click'
3
+ | 'double-click'
4
+ | 'pressed'
5
+ | 'released'
6
+ | 'hover-enter'
7
+ | 'hover-leave'
8
+ | 'changed'
9
+ | 'change-commit'
10
+ | 'focus'
11
+ | 'blur'
12
+ | 'submit'
13
+ | 'anim-complete';
14
+
15
+ export interface UiEvent {
16
+ realmId: number;
17
+ documentId: number;
18
+ nodeId: number;
19
+ kind: UiEventKind;
20
+ label?: string;
21
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './kinds';
2
+ export * from './json';
2
3
  export * from './cmds';
3
4
  export * from './events';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * JSON-like values that are safe to serialize across the host/core boundary.
3
+ */
4
+ export type JsonValue =
5
+ | null
6
+ | boolean
7
+ | number
8
+ | string
9
+ | JsonValue[]
10
+ | { [key: string]: JsonValue };
11
+
12
+ /**
13
+ * Convenience alias for object-shaped JSON payloads.
14
+ */
15
+ export type JsonObject = { [key: string]: JsonValue };
package/src/window.ts ADDED
@@ -0,0 +1,8 @@
1
+ export {
2
+ closeWindow,
3
+ createWindow,
4
+ focusWindow,
5
+ requestAttention,
6
+ updateWindow,
7
+ } from './engine/window/manager';
8
+ export type { WindowId } from './engine/world/types';
@@ -0,0 +1,2 @@
1
+ export * from './engine/world/world-ui';
2
+ export type { EntityId, TargetId, WorldId, WorldUIId } from './engine/world/types';
package/src/world3d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export * from './engine/world/world3d';
2
+ export type {
3
+ EntityId,
4
+ GeometryId,
5
+ MaterialId,
6
+ TargetId,
7
+ TextureId,
8
+ World3DId,
9
+ WorldId,
10
+ } from './engine/world/types';
package/tsconfig.json DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- // Environment setup & latest features
4
- "lib": ["ESNext"],
5
- "target": "ESNext",
6
- "module": "Preserve",
7
- "moduleDetection": "force",
8
- "jsx": "react-jsx",
9
- "allowJs": true,
10
-
11
- // Bundler mode
12
- "moduleResolution": "bundler",
13
- "allowImportingTsExtensions": true,
14
- "verbatimModuleSyntax": true,
15
- "noEmit": true,
16
-
17
- // Best practices
18
- "strict": true,
19
- "skipLibCheck": true,
20
- "noFallthroughCasesInSwitch": true,
21
- "noUncheckedIndexedAccess": true,
22
- "noImplicitOverride": true,
23
-
24
- // Some stricter flags (disabled by default)
25
- "noUnusedLocals": false,
26
- "noUnusedParameters": false,
27
- "noPropertyAccessFromIndexSignature": false
28
- }
29
- }