Source: library.js

import { WebGLContext }             from './webgl-context.js';
import { Matrix4 }                  from './math/matrix4.js';
import { Vector3 }                  from './math/vector3.js';
import { CameraMath }               from './math/camera-math.js';
import { Vector3Math }              from './math/vector3-math.js';
import { Curve3 }                   from './math/curve3.js';
import { CatmullRomCurve3 }         from './math/catmull-rom-curve3.js';
import { Path3D }                   from './math/path3d.js';
import { Geometry }                 from './geometry/geometry.js';
import { CustomGeometry }           from './geometry/custom-geometry.js';
import { BoxGeometry }              from './geometry/box-geometry.js';
import { PlaneGeometry }            from './geometry/plane-geometry.js';
import { SphereGeometry }           from './geometry/sphere-geometry.js';
import { TorusGeometry }            from './geometry/torus-geometry.js';
import { ConeGeometry }             from './geometry/cone-geometry.js';
import { PyramidGeometry }          from './geometry/pyramid-geometry.js';
import { HeightmapGeometry }        from './geometry/heightmap-geometry.js';
import { PointsGeometry }           from './geometry/points-geometry.js';
import { PolylineGeometry }         from './geometry/polyline-geometry.js';
import { TubeLineGeometry }         from './geometry/tube-line-geometry.js';
import { ShaderProgram }            from './shader/shader-program.js';
import { Material }                 from './material/material.js';
import { VertexColorMaterial }      from './material/vertex-color-material.js';
import { SolidColorMaterial }       from './material/solid-color-material.js';
import { TexturedMaterial }         from './material/textured-material.js';
import { NormalMaterial }           from './material/normal-material.js';
import { DirectionalLightMaterial } from './material/directional-light-material.js';
import { LambertMaterial }          from './material/lambert-material.js';
import { PhongMaterial }            from './material/phong-material.js';
import { PointsMaterial }           from './material/points-material.js';
import { MtlStandardMaterial }      from './material/mtl-standard-material.js';
import { Texture2D }                from './texture/texture2d.js';
import { Object3D }                 from './scene/object3d.js';
import { Mesh }                     from './scene/mesh.js';
import { Points }                   from './scene/points.js';
import { Line }                     from './scene/line.js';
import { Scene }                    from './scene/scene.js';
import { Camera }                   from './scene/camera.js';
import { PerspectiveCamera }        from './scene/perspective-camera.js';
import { OrthographicCamera }       from './scene/orthographic-camera.js';
import { FirstPersonCamera }        from './scene/first-person-camera.js';
import { ThirdPersonCamera }        from './scene/third-person-camera.js';
import { Renderer }                 from './render/renderer.js';
import { Engine, createEngine }     from './engine/engine.js';
import { FpsCounter }               from './debug/fps-counter.js';
import { LightGizmo }               from './debug/light-gizmo.js';
import { TransformGizmo }           from './debug/transform-gizmo.js';
import { ObjMtlLoader }             from './loaders/obj-mtl/obj-mtl-loader.js';
import { OrbitControls }            from './controls/orbit-controls.js';
import { KeyboardControls }         from './controls/keyboard-controls.js';
import { FirstPersonControls }      from './controls/first-person-controls.js';
import { ThirdPersonControls }      from './controls/third-person-controls.js';
import { Raycaster }                from './interaction/raycaster.js';
import { Light }                    from './light/light.js';
import { DirectionalLight }         from './light/directional-light.js';
import { AmbientLight }             from './light/ambient-light.js';

/**
 * Main public API namespace.
 *
 * Suggested usage:
 *
 * ```js
 * import { GeraWebGL } from './gerawebgl.js';
 * const engine = GeraWebGL.createEngine(canvas);
 * ```
 *
 * @namespace
 */
export const GeraWebGL = Object.freeze({
    Engine,
    createEngine,

    // High-level building blocks:
    WebGLContext,
    Renderer,
    Scene,
    Camera,
    PerspectiveCamera,
    OrthographicCamera,
    FirstPersonCamera,
    ThirdPersonCamera,
    Object3D,
    Mesh,
    Points,
    Line,
    Raycaster,
    Light,
    DirectionalLight,
    AmbientLight,

    // Grouped namespaces:
    Math: Object.freeze({
        Matrix4,
        Vector3,
        Vector3Math,
        CameraMath,
        Curve3,
        CatmullRomCurve3,
        Path3D
    }),

    Geometries: Object.freeze({
        Geometry,
        BoxGeometry,
        PlaneGeometry,
        SphereGeometry,
        TorusGeometry,
        ConeGeometry,
        PyramidGeometry,
        CustomGeometry,
        HeightmapGeometry,
        PointsGeometry,
        PolylineGeometry,
        TubeLineGeometry
    }),

    Textures: Object.freeze({
        Texture2D
    }),

    Materials: Object.freeze({
        Material,
        VertexColorMaterial,
        SolidColorMaterial,
        TexturedMaterial,
        NormalMaterial,
        DirectionalLightMaterial,
        LambertMaterial,
        PhongMaterial,
        PointsMaterial,
        MtlStandardMaterial
    }),

    Controls: Object.freeze({
        OrbitControls,
        KeyboardControls,
        ThirdPersonControls,
        FirstPersonControls
    }),

    Loaders: Object.freeze({
        ObjMtlLoader
    }),

    Debug: Object.freeze({
        FpsCounter,
        LightGizmo,
        TransformGizmo
    }),

    // Low-level access (shaders, manual uniforms/attributes):
    LowLevel: Object.freeze({
        ShaderProgram
    })
});

export default GeraWebGL;