bg2e-js 2.3.0 → 2.3.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bg2e-js",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "a graphics engine for productivity applications",
5
5
  "main": "./dist/bg2e-js.js",
6
6
  "types": "./src/index.ts",
@@ -15,7 +15,14 @@ function resolveCanvas(canvas: string | HTMLCanvasElement): HTMLCanvasElement |
15
15
  }
16
16
  }
17
17
 
18
- export default function useBg2e(target: string | HTMLCanvasElement, renderer: Renderer, appController: AppController) {
18
+ type RendererConstructor<T extends Renderer> = new () => T;
19
+ type AppControllerConstructor<T extends AppController> = new () => T;
20
+
21
+ export default function useBg2e<R extends Renderer, A extends AppController>(
22
+ target: string | HTMLCanvasElement,
23
+ RendererType: RendererConstructor<R>,
24
+ AppControllerType: AppControllerConstructor<A>
25
+ ) {
19
26
  const canvas = useMemo(() => {
20
27
  if (typeof document === "undefined") return null; // SSR guard
21
28
  return resolveCanvas(target);
@@ -41,6 +48,9 @@ export default function useBg2e(target: string | HTMLCanvasElement, renderer: Re
41
48
  return;
42
49
  }
43
50
 
51
+ const renderer = new RendererType();
52
+ const appController = new AppControllerType();
53
+
44
54
  const bg2Canvas = new Canvas(canvas, renderer);
45
55
  const mainLoop = new MainLoop(bg2Canvas, appController);
46
56
 
@@ -51,7 +61,7 @@ export default function useBg2e(target: string | HTMLCanvasElement, renderer: Re
51
61
  createdRef.current = true;
52
62
 
53
63
  forceUpdate((x) => x + 1);
54
- }, []);
64
+ }, [canvas, RendererType, AppControllerType]);
55
65
 
56
66
  return {
57
67
  mainLoop: mainLoopRef.current,