canvasengine 2.0.1-beta.1 → 2.0.1

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 (212) hide show
  1. package/dist/DebugRenderer-DkjTAc48.js +1384 -0
  2. package/dist/DebugRenderer-DkjTAc48.js.map +1 -0
  3. package/dist/components/Button.d.ts +185 -0
  4. package/dist/components/Button.d.ts.map +1 -0
  5. package/dist/components/Canvas.d.ts +17 -0
  6. package/dist/components/Canvas.d.ts.map +1 -0
  7. package/dist/components/Container.d.ts +25 -0
  8. package/dist/components/Container.d.ts.map +1 -0
  9. package/dist/components/DOMContainer.d.ts +28 -0
  10. package/dist/components/DOMContainer.d.ts.map +1 -0
  11. package/dist/components/DOMElement.d.ts +54 -0
  12. package/dist/components/DOMElement.d.ts.map +1 -0
  13. package/dist/components/DOMSprite.d.ts +127 -0
  14. package/dist/components/DOMSprite.d.ts.map +1 -0
  15. package/dist/components/DisplayObject.d.ts +18 -0
  16. package/dist/components/DisplayObject.d.ts.map +1 -0
  17. package/dist/components/FocusContainer.d.ts +129 -0
  18. package/dist/components/FocusContainer.d.ts.map +1 -0
  19. package/dist/components/Graphic.d.ts +64 -0
  20. package/dist/components/Graphic.d.ts.map +1 -0
  21. package/dist/components/Joystick.d.ts +37 -0
  22. package/dist/components/Joystick.d.ts.map +1 -0
  23. package/dist/components/Mesh.d.ts +138 -0
  24. package/dist/components/Mesh.d.ts.map +1 -0
  25. package/dist/components/NineSliceSprite.d.ts +16 -0
  26. package/dist/components/NineSliceSprite.d.ts.map +1 -0
  27. package/dist/components/ParticleEmitter.d.ts +4 -0
  28. package/dist/components/ParticleEmitter.d.ts.map +1 -0
  29. package/dist/components/Scene.d.ts +2 -0
  30. package/dist/components/Scene.d.ts.map +1 -0
  31. package/dist/components/Sprite.d.ts +182 -0
  32. package/dist/components/Sprite.d.ts.map +1 -0
  33. package/dist/components/Text.d.ts +24 -0
  34. package/dist/components/Text.d.ts.map +1 -0
  35. package/dist/components/TilingSprite.d.ts +17 -0
  36. package/dist/components/TilingSprite.d.ts.map +1 -0
  37. package/dist/components/Video.d.ts +14 -0
  38. package/dist/components/Video.d.ts.map +1 -0
  39. package/dist/components/Viewport.d.ts +52 -0
  40. package/dist/components/Viewport.d.ts.map +1 -0
  41. package/dist/components/index.d.ts +20 -0
  42. package/dist/components/index.d.ts.map +1 -0
  43. package/dist/components/types/DisplayObject.d.ts +127 -0
  44. package/dist/components/types/DisplayObject.d.ts.map +1 -0
  45. package/dist/components/types/MouseEvent.d.ts +4 -0
  46. package/dist/components/types/MouseEvent.d.ts.map +1 -0
  47. package/dist/components/types/Spritesheet.d.ts +248 -0
  48. package/dist/components/types/Spritesheet.d.ts.map +1 -0
  49. package/dist/components/types/index.d.ts +4 -0
  50. package/dist/components/types/index.d.ts.map +1 -0
  51. package/dist/directives/Controls.d.ts +112 -0
  52. package/dist/directives/Controls.d.ts.map +1 -0
  53. package/dist/directives/ControlsBase.d.ts +199 -0
  54. package/dist/directives/ControlsBase.d.ts.map +1 -0
  55. package/dist/directives/Drag.d.ts +69 -0
  56. package/dist/directives/Drag.d.ts.map +1 -0
  57. package/dist/directives/Flash.d.ts +116 -0
  58. package/dist/directives/Flash.d.ts.map +1 -0
  59. package/dist/directives/FocusNavigation.d.ts +52 -0
  60. package/dist/directives/FocusNavigation.d.ts.map +1 -0
  61. package/dist/directives/FogVisibility.d.ts +47 -0
  62. package/dist/directives/FogVisibility.d.ts.map +1 -0
  63. package/dist/directives/GamepadControls.d.ts +224 -0
  64. package/dist/directives/GamepadControls.d.ts.map +1 -0
  65. package/dist/directives/JoystickControls.d.ts +171 -0
  66. package/dist/directives/JoystickControls.d.ts.map +1 -0
  67. package/dist/directives/KeyboardControls.d.ts +219 -0
  68. package/dist/directives/KeyboardControls.d.ts.map +1 -0
  69. package/dist/directives/Scheduler.d.ts +36 -0
  70. package/dist/directives/Scheduler.d.ts.map +1 -0
  71. package/dist/directives/Shake.d.ts +98 -0
  72. package/dist/directives/Shake.d.ts.map +1 -0
  73. package/dist/directives/Sound.d.ts +25 -0
  74. package/dist/directives/Sound.d.ts.map +1 -0
  75. package/dist/directives/SpriteEffects.d.ts +70 -0
  76. package/dist/directives/SpriteEffects.d.ts.map +1 -0
  77. package/dist/directives/Transition.d.ts +10 -0
  78. package/dist/directives/Transition.d.ts.map +1 -0
  79. package/dist/directives/ViewportCull.d.ts +11 -0
  80. package/dist/directives/ViewportCull.d.ts.map +1 -0
  81. package/dist/directives/ViewportFollow.d.ts +18 -0
  82. package/dist/directives/ViewportFollow.d.ts.map +1 -0
  83. package/dist/directives/index.d.ts +15 -0
  84. package/dist/directives/index.d.ts.map +1 -0
  85. package/dist/dist-BOOc43Qm.js +778 -0
  86. package/dist/dist-BOOc43Qm.js.map +1 -0
  87. package/dist/engine/FocusManager.d.ts +174 -0
  88. package/dist/engine/FocusManager.d.ts.map +1 -0
  89. package/dist/engine/animation.d.ts +72 -0
  90. package/dist/engine/animation.d.ts.map +1 -0
  91. package/dist/engine/bootstrap.d.ts +52 -0
  92. package/dist/engine/bootstrap.d.ts.map +1 -0
  93. package/dist/engine/directive.d.ts +13 -0
  94. package/dist/engine/directive.d.ts.map +1 -0
  95. package/dist/engine/reactive.d.ts +139 -0
  96. package/dist/engine/reactive.d.ts.map +1 -0
  97. package/dist/engine/signal.d.ts +74 -0
  98. package/dist/engine/signal.d.ts.map +1 -0
  99. package/dist/engine/trigger.d.ts +54 -0
  100. package/dist/engine/trigger.d.ts.map +1 -0
  101. package/dist/engine/utils.d.ts +89 -0
  102. package/dist/engine/utils.d.ts.map +1 -0
  103. package/dist/hooks/addContext.d.ts +2 -0
  104. package/dist/hooks/addContext.d.ts.map +1 -0
  105. package/dist/hooks/useFocus.d.ts +60 -0
  106. package/dist/hooks/useFocus.d.ts.map +1 -0
  107. package/dist/hooks/useProps.d.ts +53 -0
  108. package/dist/hooks/useProps.d.ts.map +1 -0
  109. package/dist/hooks/useRef.d.ts +4 -0
  110. package/dist/hooks/useRef.d.ts.map +1 -0
  111. package/dist/index.d.ts +19 -844
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.global.js +189 -0
  114. package/dist/index.global.js.map +1 -0
  115. package/dist/index.js +15156 -3287
  116. package/dist/index.js.map +1 -1
  117. package/dist/utils/Ease.d.ts +17 -0
  118. package/dist/utils/Ease.d.ts.map +1 -0
  119. package/dist/utils/GlobalAssetLoader.d.ts +141 -0
  120. package/dist/utils/GlobalAssetLoader.d.ts.map +1 -0
  121. package/dist/utils/RadialGradient.d.ts +57 -0
  122. package/dist/utils/RadialGradient.d.ts.map +1 -0
  123. package/dist/utils/functions.d.ts +2 -0
  124. package/dist/utils/functions.d.ts.map +1 -0
  125. package/dist/utils/tabindex.d.ts +16 -0
  126. package/dist/utils/tabindex.d.ts.map +1 -0
  127. package/index.d.ts +1 -3
  128. package/package.json +19 -52
  129. package/src/components/Button.ts +406 -0
  130. package/src/components/Canvas.ts +82 -51
  131. package/src/components/Container.ts +31 -4
  132. package/src/components/DOMContainer.ts +387 -0
  133. package/src/components/DOMElement.ts +556 -0
  134. package/src/components/DOMSprite.ts +1044 -0
  135. package/src/components/DisplayObject.ts +423 -202
  136. package/src/components/FocusContainer.ts +368 -0
  137. package/src/components/Graphic.ts +255 -68
  138. package/src/components/Joystick.ts +269 -0
  139. package/src/components/Mesh.ts +239 -0
  140. package/src/components/NineSliceSprite.ts +4 -1
  141. package/src/components/ParticleEmitter.ts +12 -8
  142. package/src/components/Sprite.ts +441 -54
  143. package/src/components/Text.ts +270 -26
  144. package/src/components/Video.ts +110 -0
  145. package/src/components/Viewport.ts +122 -63
  146. package/src/components/index.ts +12 -5
  147. package/src/components/types/DisplayObject.ts +64 -5
  148. package/src/components/types/Spritesheet.ts +0 -118
  149. package/src/directives/Controls.ts +254 -0
  150. package/src/directives/ControlsBase.ts +267 -0
  151. package/src/directives/Drag.ts +357 -52
  152. package/src/directives/Flash.ts +419 -0
  153. package/src/directives/FocusNavigation.ts +113 -0
  154. package/src/directives/FogVisibility.ts +273 -0
  155. package/src/directives/GamepadControls.ts +537 -0
  156. package/src/directives/JoystickControls.ts +396 -0
  157. package/src/directives/KeyboardControls.ts +86 -431
  158. package/src/directives/Scheduler.ts +21 -16
  159. package/src/directives/Shake.ts +298 -0
  160. package/src/directives/Sound.ts +94 -31
  161. package/src/directives/SpriteEffects.ts +461 -0
  162. package/src/directives/ViewportFollow.ts +40 -9
  163. package/src/directives/index.ts +14 -6
  164. package/src/engine/FocusManager.ts +510 -0
  165. package/src/engine/animation.ts +175 -21
  166. package/src/engine/bootstrap.ts +140 -6
  167. package/src/engine/directive.ts +4 -4
  168. package/src/engine/reactive.ts +1266 -167
  169. package/src/engine/signal.ts +335 -47
  170. package/src/engine/trigger.ts +95 -12
  171. package/src/engine/utils.ts +101 -9
  172. package/src/hooks/useFocus.ts +91 -0
  173. package/src/hooks/useProps.ts +92 -7
  174. package/src/index.ts +13 -6
  175. package/src/types/pixi-cull.d.ts +7 -0
  176. package/src/utils/GlobalAssetLoader.ts +257 -0
  177. package/src/utils/RadialGradient.ts +29 -0
  178. package/src/utils/functions.ts +7 -0
  179. package/src/utils/tabindex.ts +70 -0
  180. package/testing/index.ts +42 -0
  181. package/tsconfig.json +15 -25
  182. package/vite.config.ts +39 -0
  183. package/.cursorrules +0 -0
  184. package/.github/workflows/ci.yml +0 -29
  185. package/README.md +0 -79
  186. package/dist/compiler/vite.js +0 -119
  187. package/dist/compiler/vite.js.map +0 -1
  188. package/logo.png +0 -0
  189. package/src/compiler/grammar.pegjs +0 -180
  190. package/src/compiler/vite.ts +0 -166
  191. package/src/components/DrawMap/index.ts +0 -65
  192. package/src/components/Tilemap/Tile.ts +0 -79
  193. package/src/components/Tilemap/TileGroup.ts +0 -207
  194. package/src/components/Tilemap/TileLayer.ts +0 -163
  195. package/src/components/Tilemap/TileSet.ts +0 -41
  196. package/src/components/Tilemap/index.ts +0 -80
  197. package/src/presets/Bar.ts +0 -89
  198. package/src/presets/Button.ts +0 -0
  199. package/src/presets/Joystick.ts +0 -286
  200. package/src/presets/NightAmbiant.ts +0 -122
  201. package/src/presets/Particle.ts +0 -53
  202. package/starter/assets/logo.png +0 -0
  203. package/starter/components/app.ce +0 -18
  204. package/starter/components/hello.ce +0 -35
  205. package/starter/index.html +0 -21
  206. package/starter/main.ts +0 -6
  207. package/starter/package.json +0 -20
  208. package/starter/tsconfig.json +0 -32
  209. package/starter/vite.config.ts +0 -12
  210. package/tsconfig.node.json +0 -10
  211. package/tsup.config.ts +0 -28
  212. package/vitest.config.ts +0 -12
@@ -0,0 +1,239 @@
1
+ import { isSignal } from "@signe/reactive";
2
+ import { Mesh as PixiMesh, Geometry, Shader, Texture, Assets, BLEND_MODES } from "pixi.js";
3
+ import { createComponent, Element, registerComponent } from "../engine/reactive";
4
+ import { ComponentInstance, DisplayObject } from "./DisplayObject";
5
+ import { DisplayObjectProps } from "./types/DisplayObject";
6
+ import { SignalOrPrimitive } from "./types";
7
+ import { ComponentFunction } from "../engine/signal";
8
+
9
+ /**
10
+ * Interface defining the properties for a Mesh component.
11
+ * Extends DisplayObjectProps to inherit common display object properties.
12
+ */
13
+ interface MeshProps extends DisplayObjectProps {
14
+ /** The geometry defining the mesh structure (vertices, indices, UVs, etc.) */
15
+ geometry?: SignalOrPrimitive<Geometry>;
16
+ /** The shader to render the mesh with */
17
+ shader?: SignalOrPrimitive<Shader>;
18
+ /** The texture to apply to the mesh */
19
+ texture?: SignalOrPrimitive<Texture | string>;
20
+ /** The image URL to load as texture */
21
+ image?: SignalOrPrimitive<string>;
22
+ /** The tint color to apply to the mesh */
23
+ tint?: SignalOrPrimitive<number>;
24
+ /** Whether to round pixels for sharper rendering */
25
+ roundPixels?: SignalOrPrimitive<boolean>;
26
+ }
27
+
28
+ const resolveProp = <T>(value: SignalOrPrimitive<T> | undefined): T | undefined => {
29
+ return isSignal(value as any) ? (value as any)() : value as T | undefined;
30
+ };
31
+
32
+ const isValidGeometry = (value: Geometry | undefined): value is Geometry => {
33
+ if (!value) return false;
34
+ if (value instanceof Geometry) return true;
35
+
36
+ const geometry = value as any;
37
+ return typeof geometry.on === 'function' && typeof geometry.off === 'function';
38
+ };
39
+
40
+ /**
41
+ * Canvas Mesh component class that extends DisplayObject with PixiMesh functionality.
42
+ * This component allows rendering of custom 3D meshes with shaders and textures.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * // Basic mesh with geometry and texture
47
+ * const mesh = Mesh({
48
+ * geometry: myGeometry,
49
+ * texture: "path/to/texture.png",
50
+ * tint: 0xff0000
51
+ * });
52
+ *
53
+ * // Mesh with custom shader
54
+ * const customMesh = Mesh({
55
+ * geometry: myGeometry,
56
+ * shader: myCustomShader,
57
+ * draw: (mesh) => {
58
+ * // Custom mesh manipulation
59
+ * mesh.rotation += 0.01;
60
+ * }
61
+ * });
62
+ * ```
63
+ */
64
+ class CanvasMesh extends DisplayObject(PixiMesh) {
65
+ /**
66
+ * Constructor for the CanvasMesh component.
67
+ * Initializes the PixiMesh with default geometry and shader to prevent errors.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * // This constructor is called internally by the engine
72
+ * const mesh = new CanvasMesh();
73
+ * ```
74
+ */
75
+ constructor() {
76
+ // Call parent constructor with minimal options to prevent destructuring error
77
+ // @ts-ignore - PixiMesh constructor expects options object but TypeScript doesn't recognize it
78
+ super({
79
+ geometry: new Geometry()
80
+ });
81
+ }
82
+
83
+ /**
84
+ * Initializes the mesh component with the provided properties.
85
+ * This method is called before onUpdate to set up initial state.
86
+ *
87
+ * @param props - The initial properties
88
+ * @example
89
+ * ```typescript
90
+ * // This method is called internally when the component is created
91
+ * mesh.onInit({
92
+ * geometry: myGeometry,
93
+ * texture: "texture.png"
94
+ * });
95
+ * ```
96
+ */
97
+ onInit(props: MeshProps) {
98
+ super.onInit(props);
99
+
100
+ // Set initial geometry if provided
101
+ const geometry = resolveProp(props.geometry);
102
+ if (isValidGeometry(geometry)) {
103
+ try {
104
+ this.geometry = geometry;
105
+ } catch (error) {
106
+ console.warn('Failed to set geometry:', error);
107
+ }
108
+ }
109
+
110
+ // Set initial shader if provided
111
+ const shader = resolveProp(props.shader);
112
+ if (shader) {
113
+ this.shader = shader;
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Updates the mesh component when properties change.
119
+ * Handles texture loading, shader updates, and other property changes.
120
+ *
121
+ * @param props - The updated properties
122
+ * @example
123
+ * ```typescript
124
+ * // This method is called internally when props change
125
+ * mesh.onUpdate({
126
+ * tint: 0x00ff00,
127
+ * texture: "new-texture.png"
128
+ * });
129
+ * ```
130
+ */
131
+ async onUpdate(props: MeshProps) {
132
+ super.onUpdate(props);
133
+
134
+ // Handle geometry updates
135
+ const geometry = resolveProp(props.geometry);
136
+ if (isValidGeometry(geometry)) {
137
+ try {
138
+ this.geometry = geometry;
139
+ } catch (error) {
140
+ console.warn('Failed to update geometry:', error);
141
+ }
142
+ }
143
+
144
+ // Handle shader/material updates
145
+ const shader = resolveProp(props.shader);
146
+ if (shader) {
147
+ this.shader = shader;
148
+ }
149
+
150
+ // Handle texture updates
151
+ const texture = resolveProp(props.texture);
152
+ const image = resolveProp(props.image);
153
+ if (texture) {
154
+ if (typeof texture === 'string') {
155
+ this.texture = await Assets.load(texture);
156
+ } else {
157
+ this.texture = texture;
158
+ }
159
+ } else if (image) {
160
+ this.texture = await Assets.load(image);
161
+ }
162
+
163
+ // Handle tint updates
164
+ if (props.tint !== undefined) {
165
+ this.tint = props.tint;
166
+ }
167
+
168
+ // Handle blend mode updates
169
+ if (props.blendMode !== undefined) {
170
+ this.blendMode = props.blendMode;
171
+ }
172
+
173
+ // Handle round pixels updates
174
+ if (props.roundPixels !== undefined) {
175
+ this.roundPixels = props.roundPixels;
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Called when the component is about to be destroyed.
181
+ * Cleans up the draw effect subscription and calls the parent destroy method.
182
+ *
183
+ * @param parent - The parent element
184
+ * @param afterDestroy - Callback function to execute after destruction
185
+ * @example
186
+ * ```typescript
187
+ * // This method is typically called by the engine internally
188
+ * await mesh.onDestroy(parentElement, () => console.log('Mesh destroyed'));
189
+ * ```
190
+ */
191
+ async onDestroy(parent: Element<ComponentInstance>, afterDestroy: () => void): Promise<void> {
192
+ const _afterDestroyCallback = async () => {
193
+ afterDestroy();
194
+ };
195
+ await super.onDestroy(parent, _afterDestroyCallback);
196
+ }
197
+ }
198
+
199
+ // Register the component with the engine
200
+ registerComponent("Mesh", CanvasMesh);
201
+
202
+ /**
203
+ * Creates a Mesh component with the specified properties.
204
+ * This is the main function used to create mesh instances in your application.
205
+ *
206
+ * @param props - The properties for the mesh component
207
+ * @returns A mesh component element
208
+ * @example
209
+ * ```typescript
210
+ * import { Mesh } from 'canvasengine';
211
+ *
212
+ * // Create a basic textured mesh
213
+ * const myMesh = Mesh({
214
+ * geometry: triangleGeometry,
215
+ * texture: "assets/texture.png",
216
+ * x: 100,
217
+ * y: 100,
218
+ * tint: 0xff0000
219
+ * });
220
+ *
221
+ * // Create a mesh with custom shader
222
+ * const shaderMesh = Mesh({
223
+ * geometry: planeGeometry,
224
+ * shader: customShader,
225
+ * draw: (mesh) => {
226
+ * mesh.rotation += 0.01;
227
+ * }
228
+ * });
229
+ * ```
230
+ */
231
+ export const Mesh: ComponentFunction<MeshProps> = (props) => {
232
+ return createComponent("Mesh", props);
233
+ };
234
+
235
+ // Export the component class for advanced usage
236
+ export { CanvasMesh };
237
+
238
+ // Export the props interface for TypeScript users
239
+ export type { MeshProps };
@@ -2,6 +2,7 @@ import { Assets, NineSliceSprite as PixiNineSliceSprite, Texture } from "pixi.js
2
2
  import { createComponent, registerComponent } from "../engine/reactive";
3
3
  import { DisplayObject } from "./DisplayObject";
4
4
  import { DisplayObjectProps } from "./types/DisplayObject";
5
+ import { Layout } from "@pixi/layout";
5
6
 
6
7
  interface NineSliceSpriteProps extends DisplayObjectProps {
7
8
  image?: string;
@@ -37,7 +38,9 @@ class CanvasNineSliceSprite extends DisplayObject(PixiNineSliceSprite) {
37
38
  }
38
39
  }
39
40
 
40
- interface CanvasNineSliceSprite extends PixiNineSliceSprite {}
41
+ interface CanvasNineSliceSprite extends PixiNineSliceSprite {
42
+ layout: Layout | null;
43
+ }
41
44
 
42
45
  registerComponent("NineSliceSprite", CanvasNineSliceSprite);
43
46
 
@@ -1,14 +1,15 @@
1
1
  import * as particles from "@barvynkoa/particle-emitter";
2
- import { createComponent, registerComponent } from "../engine/reactive";
2
+ import { createComponent, Element, registerComponent } from "../engine/reactive";
3
3
  import { CanvasContainer } from "./Container";
4
4
  import { Signal } from "@signe/reactive";
5
+ import { ComponentInstance } from "./DisplayObject";
5
6
 
6
7
  class CanvasParticlesEmitter extends CanvasContainer {
7
8
  private emitter: particles.Emitter | null;
8
9
  private elapsed: number = Date.now();
9
10
 
10
- onMount(params) {
11
- super.onMount(params);
11
+ async onMount(params) {
12
+ await super.onMount(params);
12
13
  const { props } = params;
13
14
  const tick: Signal = props.context.tick;
14
15
  this.emitter = new particles.Emitter(this as any, props.config);
@@ -24,11 +25,14 @@ class CanvasParticlesEmitter extends CanvasContainer {
24
25
 
25
26
  onUpdate(props) {}
26
27
 
27
- onDestroy(): void {
28
- super.onDestroy();
29
- this.emitter?.destroy();
30
- this.emitter = null;
31
- this.subscriptionTick.unsubscribe();
28
+ async onDestroy(parent: Element<ComponentInstance>, afterDestroy: () => void) {
29
+ const _afterDestroy = async () => {
30
+ this.emitter?.destroy();
31
+ this.emitter = null;
32
+ this.subscriptionTick.unsubscribe();
33
+ afterDestroy();
34
+ }
35
+ await super.onDestroy(parent, _afterDestroy);
32
36
  }
33
37
  }
34
38