@fonsecabarreto/genesis-gl-react 0.1.31 → 0.1.33

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useGenesisGL.ts","../src/hooks/useRenderer.ts","../src/hooks/useWorldToScreen.ts","../src/hooks/useCameraControls.ts"],"sourcesContent":["import { useRef, useEffect, useState } from 'react';\nimport {\n WebGLCore,\n WebGLCore as WebGLCoreImpl,\n Scene,\n Scene as SceneImpl,\n Renderer,\n Renderer as RendererImpl,\n Viewport,\n Viewport as ViewportImpl,\n type Model,\n} from '@fonsecabarreto/genesis-gl-core/Core';\nimport { loadOBJWithMTL } from '@fonsecabarreto/genesis-gl-core/Core/utils/parse-obj';\nexport interface LoadOBJOptions {\n mtlUrl?: string | null;\n translation?: [number, number, number];\n scale?: [number, number, number];\n}\n\nexport interface GenesisGLContext {\n renderer: Renderer | null;\n scene: Scene | null;\n viewport: Viewport | null;\n webglCore: WebGLCore | null;\n loadOBJ: (objUrl: string, options?: LoadOBJOptions) => Promise<Model>;\n}\n\nexport interface UseGenesisGLOptions {\n canvasRef: React.RefObject<HTMLCanvasElement>;\n width?: number;\n height?: number;\n initialYaw?: number;\n initialPitch?: number;\n initialZoom?: number;\n onReady?: (context: GenesisGLContext) => void;\n onError?: (error: Error) => void;\n}\n\nconst nullLoadOBJ = (): Promise<never> =>\n Promise.reject(new Error('GenesisGL not initialized'));\n\nexport function useGenesisGL(options: UseGenesisGLOptions): GenesisGLContext {\n const [context, setContext] = useState<GenesisGLContext>({\n renderer: null,\n scene: null,\n viewport: null,\n webglCore: null,\n loadOBJ: nullLoadOBJ,\n });\n\n const contextRef = useRef<GenesisGLContext>(context);\n\n useEffect(() => {\n const {\n canvasRef,\n onReady,\n onError,\n width,\n height,\n initialYaw,\n initialPitch,\n initialZoom,\n } = options;\n if (!canvasRef.current) return;\n\n try {\n const canvas = canvasRef.current;\n const vpWidth = width ?? window.innerWidth;\n const vpHeight = height ?? window.innerHeight;\n\n const webglCore = new WebGLCoreImpl(canvas);\n const viewport = new ViewportImpl(canvas, vpWidth, vpHeight, webglCore, {\n pointerLock: false,\n });\n const renderer = new RendererImpl(webglCore, viewport);\n const scene = SceneImpl.withDefaultLights(webglCore);\n\n viewport.camera.target = [0, 0, 0];\n viewport.camera.position = [4, 2, 8];\n if (initialYaw !== undefined) viewport.camera.yaw = initialYaw;\n if (initialPitch !== undefined) viewport.camera.pitch = initialPitch;\n if (initialZoom !== undefined) viewport.camera.setZoom(initialZoom);\n viewport.camera.invalidate();\n\n const loadOBJ = (objUrl: string, opts: LoadOBJOptions = {}) =>\n loadOBJWithMTL(\n webglCore,\n objUrl,\n opts.mtlUrl ?? null,\n opts.translation,\n opts.scale,\n );\n\n const ctx: GenesisGLContext = {\n renderer,\n scene,\n viewport,\n webglCore,\n loadOBJ,\n };\n contextRef.current = ctx;\n setContext(ctx);\n\n if (onReady) onReady(ctx);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n console.error('Failed to initialize GenesisGL:', err);\n if (onError) onError(err);\n }\n\n return () => {\n const { scene, viewport, webglCore } = contextRef.current;\n if (scene && webglCore) scene.dispose(webglCore);\n if (viewport) viewport.dispose();\n if (webglCore) webglCore.dispose();\n };\n }, []);\n\n return context;\n}\n","import { useRef, useEffect } from 'react';\nimport type { Renderer } from '@fonsecabarreto/genesis-gl-core/Core';\n\nexport interface UseRendererOptions {\n renderer: Renderer | null;\n onFrame?: (time: number) => void;\n enabled?: boolean;\n}\n\n/**\n * Hook to manage the render loop with requestAnimationFrame.\n * Handles starting/stopping animation and cleanup.\n */\nexport function useRenderer(options: UseRendererOptions): void {\n const { renderer, onFrame, enabled = true } = options;\n const animationIdRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (!renderer || !enabled) return;\n\n const animate = (time: number) => {\n if (onFrame) onFrame(time);\n animationIdRef.current = requestAnimationFrame(animate);\n };\n\n animationIdRef.current = requestAnimationFrame(animate);\n\n return () => {\n if (animationIdRef.current !== null) {\n cancelAnimationFrame(animationIdRef.current);\n }\n };\n }, [renderer, onFrame, enabled]);\n}\n","import { useState, useCallback } from 'react';\nimport type { GenesisGLContext } from './useGenesisGL';\n\nexport interface ScreenPoint {\n x: number;\n y: number;\n visible: boolean;\n}\n\nfunction mat4TransformVec4(m: Float32Array, x: number, y: number, z: number, w: number) {\n return {\n x: m[0] * x + m[4] * y + m[8] * z + m[12] * w,\n y: m[1] * x + m[5] * y + m[9] * z + m[13] * w,\n z: m[2] * x + m[6] * y + m[10] * z + m[14] * w,\n w: m[3] * x + m[7] * y + m[11] * z + m[15] * w,\n };\n}\n\nexport function useWorldToScreen(context: GenesisGLContext | null) {\n const [, forceUpdate] = useState(0);\n\n const project = useCallback(\n (worldX: number, worldY: number, worldZ: number): ScreenPoint => {\n if (!context?.viewport) return { x: 0, y: 0, visible: false };\n\n const { viewport } = context;\n const camera = viewport.camera;\n const canvas = viewport.getCanvas();\n\n const view = camera.getViewMatrix() as unknown as Float32Array;\n const proj = camera.getProjectionMatrix() as unknown as Float32Array;\n\n // view * worldPos\n const v = mat4TransformVec4(view, worldX, worldY, worldZ, 1);\n // proj * (view * worldPos)\n const c = mat4TransformVec4(proj, v.x, v.y, v.z, v.w);\n\n if (Math.abs(c.w) < 1e-6) return { x: 0, y: 0, visible: false };\n\n const ndcX = c.x / c.w;\n const ndcY = c.y / c.w;\n const ndcZ = c.z / c.w;\n\n const visible = ndcZ > -1 && ndcZ < 1 && Math.abs(ndcX) < 1.2 && Math.abs(ndcY) < 1.2;\n\n return {\n x: ((ndcX + 1) * 0.5) * canvas.clientWidth,\n y: ((1 - ndcY) * 0.5) * canvas.clientHeight,\n visible,\n };\n },\n [context],\n );\n\n // expose a tick function callers can plug into onFrame to re-render\n const tick = useCallback(() => forceUpdate((n) => n + 1), []);\n\n return { project, tick };\n}\n","import { useCallback, useState } from 'react';\nimport type { GenesisGLContext } from './useGenesisGL';\n\nexport interface CameraState {\n yaw: number;\n pitch: number;\n zoom: number;\n}\n\nexport interface UseCameraControlsResult {\n camera: CameraState;\n rotate: (deltaYaw: number, deltaPitch: number) => void;\n setYaw: (yaw: number) => void;\n setPitch: (pitch: number) => void;\n zoomBy: (delta: number) => void;\n setZoom: (zoom: number) => void;\n reset: () => void;\n}\n\nconst DEFAULT_YAW = 0;\nconst DEFAULT_PITCH = 0;\nconst DEFAULT_ZOOM = 1;\n\nexport function useCameraControls(\n ctx: GenesisGLContext | null,\n): UseCameraControlsResult {\n const [camera, setCameraState] = useState<CameraState>({\n yaw: DEFAULT_YAW,\n pitch: DEFAULT_PITCH,\n zoom: DEFAULT_ZOOM,\n });\n\n const sync = useCallback((c: { yaw: number; pitch: number; zoom: number }) => {\n setCameraState({ yaw: c.yaw, pitch: c.pitch, zoom: c.zoom });\n }, []);\n\n const rotate = useCallback(\n (deltaYaw: number, deltaPitch: number) => {\n const c = ctx?.viewport?.camera;\n if (!c) return;\n c.rotate(deltaYaw, deltaPitch);\n sync(c);\n },\n [ctx, sync],\n );\n\n const zoomBy = useCallback(\n (delta: number) => {\n const c = ctx?.viewport?.camera;\n if (!c) return;\n c.zoomBy(delta);\n sync(c);\n },\n [ctx, sync],\n );\n\n const setZoom = useCallback(\n (zoom: number) => {\n const c = ctx?.viewport?.camera;\n if (!c) return;\n c.setZoom(zoom);\n sync(c);\n },\n [ctx, sync],\n );\n\n const setYaw = useCallback(\n (yaw: number) => {\n const c = ctx?.viewport?.camera;\n if (!c) return;\n c.yaw = yaw;\n c.invalidate();\n sync(c);\n },\n [ctx, sync],\n );\n\n const setPitch = useCallback(\n (pitch: number) => {\n const c = ctx?.viewport?.camera;\n if (!c) return;\n c.pitch = pitch;\n c.invalidate();\n sync(c);\n },\n [ctx, sync],\n );\n\n const reset = useCallback(() => {\n const c = ctx?.viewport?.camera;\n if (!c) return;\n c.yaw = DEFAULT_YAW;\n c.pitch = DEFAULT_PITCH;\n c.invalidate();\n c.setZoom(DEFAULT_ZOOM);\n sync(c);\n }, [ctx, sync]);\n\n return { camera, rotate, setYaw, setPitch, zoomBy, setZoom, reset };\n}\n"],"mappings":"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","names":["useRef","useEffect","useState","useCallback","useState"]}
@@ -11,11 +11,35 @@ interface GenesisGLCanvasProps {
11
11
  initialYaw?: number;
12
12
  initialPitch?: number;
13
13
  initialZoom?: number;
14
+ /** RGBA clear color, e.g. [0.05, 0.05, 0.05, 1] */
15
+ background?: [number, number, number, number];
14
16
  style?: React.CSSProperties;
15
17
  className?: string;
16
18
  }
17
19
  declare const GenesisGLCanvas: React.ForwardRefExoticComponent<GenesisGLCanvasProps & React.RefAttributes<HTMLCanvasElement>>;
18
20
 
21
+ interface ViewportGizmoProps {
22
+ context: GenesisGLContext | null;
23
+ /** Size of the gizmo widget in px. Default 96 */
24
+ size?: number;
25
+ /** Corner to anchor in. Default 'top-right' */
26
+ position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
27
+ style?: React.CSSProperties;
28
+ }
29
+ declare function ViewportGizmo({ context, size, position, style, }: ViewportGizmoProps): react_jsx_runtime.JSX.Element;
30
+
31
+ interface OrbitArrowsProps {
32
+ context: GenesisGLContext | null;
33
+ /** World-space centre the rings are drawn around. Default [0,0,0] */
34
+ center?: [number, number, number];
35
+ /** Radius of the orbit rings in world units. Default 1.2 */
36
+ radius?: number;
37
+ /** How many points to sample per arc. Default 48 */
38
+ segments?: number;
39
+ style?: React.CSSProperties;
40
+ }
41
+ declare function OrbitArrows({ context, center, radius, segments, style, }: OrbitArrowsProps): react_jsx_runtime.JSX.Element | null;
42
+
19
43
  interface RotationControlsProps {
20
44
  context: GenesisGLContext | null;
21
45
  style?: React.CSSProperties;
@@ -57,4 +81,4 @@ interface FaceSkinProps {
57
81
  }
58
82
  declare function FaceSkin({ context, model, corners, children, style, className, surfaceWidth, surfaceHeight, }: FaceSkinProps): react_jsx_runtime.JSX.Element | null;
59
83
 
60
- export { FaceSkin as FaceLabel, type FaceSkinProps as FaceLabelProps, FaceSkin, type FaceSkinProps, GenesisGLCanvas, type GenesisGLCanvasProps, RotationControls, type RotationControlsProps };
84
+ export { FaceSkin as FaceLabel, type FaceSkinProps as FaceLabelProps, FaceSkin, type FaceSkinProps, GenesisGLCanvas, type GenesisGLCanvasProps, OrbitArrows, type OrbitArrowsProps, RotationControls, type RotationControlsProps, ViewportGizmo, type ViewportGizmoProps };
@@ -1,13 +1,17 @@
1
1
  import {
2
2
  FaceSkin,
3
3
  GenesisGLCanvas,
4
- RotationControls
5
- } from "../chunk-7BVTZKWZ.js";
6
- import "../chunk-XJKE4L2D.js";
4
+ OrbitArrows,
5
+ RotationControls,
6
+ ViewportGizmo
7
+ } from "../chunk-A2C6CGTL.js";
8
+ import "../chunk-TJHSBQII.js";
7
9
  export {
8
10
  FaceSkin as FaceLabel,
9
11
  FaceSkin,
10
12
  GenesisGLCanvas,
11
- RotationControls
13
+ OrbitArrows,
14
+ RotationControls,
15
+ ViewportGizmo
12
16
  };
13
17
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  import { L as LoadOBJOptions, G as GenesisGLContext } from '../useGenesisGL-VdB4J3Hl.js';
2
2
  export { U as UseGenesisGLOptions, u as useGenesisGL } from '../useGenesisGL-VdB4J3Hl.js';
3
- import { Renderer, Model, WebGLCore } from '@fonsecabarreto/genesis-gl-core/Core';
3
+ import { Renderer, Model, WebGLCore, GroundShadowOptions } from '@fonsecabarreto/genesis-gl-core/Core';
4
4
 
5
5
  interface UseRendererOptions {
6
6
  renderer: Renderer | null;
@@ -61,4 +61,6 @@ declare function useCameraControls(ctx: GenesisGLContext | null): UseCameraContr
61
61
 
62
62
  declare function useCameraMouseDrag(ctx: GenesisGLContext | null, canvasRef: React.RefObject<HTMLElement | null>): void;
63
63
 
64
- export { type CameraState, GenesisGLContext, LoadOBJOptions, type ScreenPoint, type UseCameraControlsResult, type UseModelOptions, type UseModelResult, type UseModelRotationResult, type UseRendererOptions, useCameraControls, useCameraMouseDrag, useModel, useModelRotation, useRenderer, useWorldToScreen };
64
+ declare function useGroundShadow(context: GenesisGLContext | null, options?: GroundShadowOptions): void;
65
+
66
+ export { type CameraState, GenesisGLContext, LoadOBJOptions, type ScreenPoint, type UseCameraControlsResult, type UseModelOptions, type UseModelResult, type UseModelRotationResult, type UseRendererOptions, useCameraControls, useCameraMouseDrag, useGroundShadow, useModel, useModelRotation, useRenderer, useWorldToScreen };
@@ -1,18 +1,20 @@
1
1
  import {
2
+ useCameraMouseDrag,
3
+ useGroundShadow,
2
4
  useModel,
3
5
  useModelRotation
4
- } from "../chunk-GDDOUPFO.js";
6
+ } from "../chunk-HR2GWVYU.js";
5
7
  import {
6
8
  useCameraControls,
7
- useCameraMouseDrag,
8
9
  useGenesisGL,
9
10
  useRenderer,
10
11
  useWorldToScreen
11
- } from "../chunk-XJKE4L2D.js";
12
+ } from "../chunk-TJHSBQII.js";
12
13
  export {
13
14
  useCameraControls,
14
15
  useCameraMouseDrag,
15
16
  useGenesisGL,
17
+ useGroundShadow,
16
18
  useModel,
17
19
  useModelRotation,
18
20
  useRenderer,
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { G as GenesisGLContext, L as LoadOBJOptions, U as UseGenesisGLOptions, u as useGenesisGL } from './useGenesisGL-VdB4J3Hl.js';
2
- export { CameraState, ScreenPoint, UseCameraControlsResult, UseModelOptions, UseModelResult, UseModelRotationResult, UseRendererOptions, useCameraControls, useCameraMouseDrag, useModel, useModelRotation, useRenderer, useWorldToScreen } from './hooks/index.js';
3
- export { FaceLabel, FaceLabelProps, FaceLabel as FaceSkin, FaceLabelProps as FaceSkinProps, GenesisGLCanvas, GenesisGLCanvasProps, RotationControls, RotationControlsProps } from './components/index.js';
2
+ export { CameraState, ScreenPoint, UseCameraControlsResult, UseModelOptions, UseModelResult, UseModelRotationResult, UseRendererOptions, useCameraControls, useCameraMouseDrag, useGroundShadow, useModel, useModelRotation, useRenderer, useWorldToScreen } from './hooks/index.js';
3
+ export { FaceLabel, FaceLabelProps, FaceLabel as FaceSkin, FaceLabelProps as FaceSkinProps, GenesisGLCanvas, GenesisGLCanvasProps, OrbitArrows, OrbitArrowsProps, RotationControls, RotationControlsProps, ViewportGizmo, ViewportGizmoProps } from './components/index.js';
4
4
  export { Model, Renderer, Scene, Viewport, WebGLCore } from '@fonsecabarreto/genesis-gl-core/Core';
5
5
  export { loadOBJWithMTL } from '@fonsecabarreto/genesis-gl-core/Core/utils/parse-obj';
6
6
  import 'react';
package/dist/index.js CHANGED
@@ -1,19 +1,22 @@
1
1
  import {
2
2
  FaceSkin,
3
3
  GenesisGLCanvas,
4
- RotationControls
5
- } from "./chunk-7BVTZKWZ.js";
4
+ OrbitArrows,
5
+ RotationControls,
6
+ ViewportGizmo
7
+ } from "./chunk-A2C6CGTL.js";
6
8
  import {
9
+ useCameraMouseDrag,
10
+ useGroundShadow,
7
11
  useModel,
8
12
  useModelRotation
9
- } from "./chunk-GDDOUPFO.js";
13
+ } from "./chunk-HR2GWVYU.js";
10
14
  import {
11
15
  useCameraControls,
12
- useCameraMouseDrag,
13
16
  useGenesisGL,
14
17
  useRenderer,
15
18
  useWorldToScreen
16
- } from "./chunk-XJKE4L2D.js";
19
+ } from "./chunk-TJHSBQII.js";
17
20
 
18
21
  // src/index.ts
19
22
  import { loadOBJWithMTL } from "@fonsecabarreto/genesis-gl-core/Core/utils/parse-obj";
@@ -21,11 +24,14 @@ export {
21
24
  FaceSkin as FaceLabel,
22
25
  FaceSkin,
23
26
  GenesisGLCanvas,
27
+ OrbitArrows,
24
28
  RotationControls,
29
+ ViewportGizmo,
25
30
  loadOBJWithMTL,
26
31
  useCameraControls,
27
32
  useCameraMouseDrag,
28
33
  useGenesisGL,
34
+ useGroundShadow,
29
35
  useModel,
30
36
  useModelRotation,
31
37
  useRenderer,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './hooks';\nexport * from './components';\nexport type {\n Scene,\n Viewport,\n Renderer,\n Model,\n WebGLCore,\n} from '@fonsecabarreto/genesis-gl-core/Core';\nexport { loadOBJWithMTL } from '@fonsecabarreto/genesis-gl-core/Core/utils/parse-obj';\n"],"mappings":";;;;;;;;;;;;;;;;;;AASA,SAAS,sBAAsB;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './hooks';\nexport * from './components';\nexport type {\n Scene,\n Viewport,\n Renderer,\n Model,\n WebGLCore,\n} from '@fonsecabarreto/genesis-gl-core/Core';\nexport { loadOBJWithMTL } from '@fonsecabarreto/genesis-gl-core/Core/utils/parse-obj';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AASA,SAAS,sBAAsB;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fonsecabarreto/genesis-gl-react",
3
- "version": "0.1.31",
3
+ "version": "0.1.33",
4
4
  "description": "React integration for GenesisGL — WebGL 3D engine",
5
5
  "author": "Lucas Fonseca Barreto",
6
6
  "license": "MIT",