/**
 * Contains Needle Engine Core Components.
 * 
 * This includes
 * - Interactivity components  
 *   {@link DragControls}, {@link SmoothFollow}, {@link Duplicatable}, {@link SpatialTrigger}
 * 
 * - Everywhere Actions  
 *   {@link SetActiveOnClick}, {@link PlayAnimationOnClick}, {@link PlayAudioOnClick}, {@link ChangeMaterialOnClick}  
 * - Camera and user controls  
 *   {@link OrbitControls}, {@link CharacterController}
 * - Rendering components  
 *   {@link Light}, {@link Renderer}, {@link ParticleSystem}, {@link Volume} (post processing), {@link ReflectionProbe}, {@link GroundProjectedEnv}, {@link ShadowCatcher}
 * - Media components  
 *   {@link AudioSource}, {@link VideoPlayer}
 * - Helpers   
 *   {@link AxesHelper}, {@link GridHelper}, {@link TransformGizmo}
 * - Asset Management components  
 *   {@link DropListener}, {@link SceneSwitcher}, {@link GltfExport}
 * - XR components  
 *   {@link WebXR}, {@link USDZExporter}, {@link XRRig}
 * - Networking components  
 *   {@link SyncedRoom}, {@link SyncedTransform}, {@link SyncedCamera}, {@link Voip}, {@link ScreenCapture}
 * - Animation components  
 *   {@link Animator}, {@link Animation}, {@link PlayableDirector}
 * - Physics components  
 *   {@link Rigidbody}, {@link BoxCollider}, {@link SphereCollider}, {@link MeshCollider}, {@link PhysicsMaterial}
 * - Utilities  
 *   {@link NeedleMenu}  
 * - and more.
 * 
 * All these components are available wherever Needle Engine is used.
 * 
 * @module Built-in Components
 */

export * from "./codegen/components.js";
export { Collider } from "./Collider.js"; // export abstract type
export { Behaviour, Component, GameObject } from "./Component.js";

// We dont want to export everything in the extensions
export { ClearFlags } from "./Camera.js"
export { DragMode } from "./DragControls.js";
export type { DropListenerNetworkEventArguments, DropListenerOnDropArguments } from "./DropListener.js";
export * from "./export/index.js"
export * from "./particlesystem/api.js"
export * from "./postprocessing/index.js"
export { type ISceneEventListener } from "./SceneSwitcher.js";
export * from "./splines/index.js";
export * from "./timeline/index.js"
export * from "./ui/index.js"
export * from "./web/index.js";
export * from "./webxr/index.js"
export * from "./webxr/XRFlag.js"

// for correct type resolution in JSDoc
import type { PhysicsMaterial } from "../engine/engine_physics.types.js";
import type { Animation } from "./Animation.js";
