diff --git a/.gitignore b/.gitignore index d60b5d6..3cdf78a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -build +# build dist node_modules temp diff --git a/build/trois.d.ts b/build/trois.d.ts new file mode 100644 index 0000000..e0c2f71 --- /dev/null +++ b/build/trois.d.ts @@ -0,0 +1,9560 @@ +import * as vue from 'vue'; +import { ComponentPublicInstance, InjectionKey, PropType, ComponentPropsOptions, WatchStopHandle, App } from 'vue'; +import * as three from 'three'; +import { Intersection, Vector2, Vector3, Object3D, WebGLRenderer, Camera, Scene, WebGLRendererParameters, OrthographicCamera, PerspectiveCamera, Group, Mesh as Mesh$1, WebGLCubeRenderTarget, CubeCamera, BufferGeometry, Material, Shape, ExtrudeGeometryOptions, Curve, Light, Texture, Color, ShaderMaterial, VideoTexture, MeshBasicMaterial, SpriteMaterial, Sprite, Points, TextureLoader } from 'three'; +import { EffectComposer as EffectComposer$1 } from 'three/examples/jsm/postprocessing/EffectComposer'; +import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; +import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'; +import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'; +import { Font } from 'three/examples/jsm/loaders/FontLoader.js'; +import * as three_examples_jsm_postprocessing_Pass from 'three/examples/jsm/postprocessing/Pass'; +import { Pass } from 'three/examples/jsm/postprocessing/Pass'; +import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'; + +interface PointerEventInterface { + type: 'pointerenter' | 'pointermove' | 'pointerleave' | 'click'; + position?: Vector2; + positionN?: Vector2; + positionV3?: Vector3; +} +interface PointerIntersectEventInterface { + type: 'pointerenter' | 'pointerover' | 'pointermove' | 'pointerleave' | 'click'; + component: any; + over?: boolean; + intersect?: Intersection; +} +type PointerCallbackType = (e: PointerEventInterface) => void; +type PointerIntersectCallbackType = (e: PointerIntersectEventInterface) => void; +interface PointerPublicConfigInterface { + intersectMode?: 'frame'; + intersectRecursive?: boolean; + touch?: boolean; + resetOnEnd?: boolean; + onEnter?: PointerCallbackType; + onMove?: PointerCallbackType; + onLeave?: PointerCallbackType; + onClick?: PointerCallbackType; + onIntersectEnter?: PointerIntersectCallbackType; + onIntersectOver?: PointerIntersectCallbackType; + onIntersectMove?: PointerIntersectCallbackType; + onIntersectLeave?: PointerIntersectCallbackType; + onIntersectClick?: PointerIntersectCallbackType; +} +interface PointerInterface { + position: Vector2; + positionN: Vector2; + positionV3: Vector3; + intersectObjects: Object3D[] | (() => Object3D[]); + listeners: boolean; + addListeners(cb: void): void; + removeListeners(cb: void): void; + intersect(): void; +} + +interface SizeInterface { + width: number; + height: number; + wWidth: number; + wHeight: number; + ratio: number; +} +interface ThreeConfigInterface { + params?: WebGLRendererParameters; + canvas?: HTMLCanvasElement; + antialias: boolean; + alpha: boolean; + autoClear: boolean; + orbitCtrl: boolean | Record; + pointer: boolean | PointerPublicConfigInterface; + resize: boolean | string; + width?: number; + height?: number; + onResize?(size: SizeInterface): void; + [index: string]: any; +} +interface ThreeInterface { + config: ThreeConfigInterface; + renderer: WebGLRenderer; + composer?: EffectComposer; + camera?: Camera; + cameraCtrl?: OrbitControls; + scene?: Scene; + pointer?: PointerInterface; + size: SizeInterface; + init(): boolean; + dispose(): void; + render(): void; + renderC(): void; + setSize(width: number, height: number): void; + addIntersectObject(o: Object3D): void; + removeIntersectObject(o: Object3D): void; +} + +type CallbackType = (event: T) => void; +interface EventInterface { + type: 'init' | 'mounted'; + renderer: RendererInterface; +} +interface RenderEventInterface { + type: 'beforerender' | 'afterrender'; + renderer: RendererInterface; + time: number; +} +interface ResizeEventInterface { + type: 'resize'; + renderer: RendererInterface; + size: SizeInterface; +} +type InitCallbackType = CallbackType; +type MountedCallbackType = CallbackType; +type RenderCallbackType = CallbackType; +type ResizeCallbackType = CallbackType; +interface EventCallbackMap { + 'init': InitCallbackType; + 'mounted': MountedCallbackType; + 'beforerender': RenderCallbackType; + 'afterrender': RenderCallbackType; + 'resize': ResizeCallbackType; +} +interface RenderFunctionEventInterface { + renderer: RendererInterface; + time: number; +} +interface RendererSetupInterface { + canvas: HTMLCanvasElement; + three: ThreeInterface; + renderer: WebGLRenderer; + size: SizeInterface; + renderFn(e: RenderFunctionEventInterface): void; + raf: boolean; + $pointer?: PointerInterface; + initCallbacks: InitCallbackType[]; + mountedCallbacks: MountedCallbackType[]; + beforeRenderCallbacks: RenderCallbackType[]; + afterRenderCallbacks: RenderCallbackType[]; + resizeCallbacks: ResizeCallbackType[]; +} +interface RendererInterface extends RendererSetupInterface { + scene?: Scene; + camera?: Camera; + composer?: EffectComposer$1; + onInit(cb: InitCallbackType): void; + onMounted(cb: MountedCallbackType): void; + onBeforeRender(cb: RenderCallbackType): void; + offBeforeRender(cb: RenderCallbackType): void; + onAfterRender(cb: RenderCallbackType): void; + offAfterRender(cb: RenderCallbackType): void; + onResize(cb: ResizeCallbackType): void; + offResize(cb: ResizeCallbackType): void; + addListener(t: T, cb: EventCallbackMap[T]): void; + removeListener(t: T, cb: EventCallbackMap[T]): void; +} +interface RendererPublicInterface extends ComponentPublicInstance, RendererInterface { +} +declare const RendererInjectionKey: InjectionKey; +declare const _default$18: vue.DefineComponent<{ + params: { + type: PropType; + default: () => {}; + }; + antialias: BooleanConstructor; + alpha: BooleanConstructor; + autoClear: { + type: BooleanConstructor; + default: boolean; + }; + orbitCtrl: { + type: PropType>; + default: boolean; + }; + pointer: { + type: PropType; + default: boolean; + }; + resize: { + type: PropType; + default: boolean; + }; + shadow: BooleanConstructor; + width: StringConstructor; + height: StringConstructor; + pixelRatio: NumberConstructor; + xr: BooleanConstructor; + props: { + type: ObjectConstructor; + default: () => {}; + }; + onReady: PropType<(r: RendererInterface) => void>; +}, RendererSetupInterface, unknown, { + camera: { + get: () => Camera | undefined; + set: (camera: Camera) => void; + }; + scene: { + get: () => Scene | undefined; + set: (scene: Scene) => void; + }; + composer: { + get: () => EffectComposer$1 | undefined; + set: (composer: EffectComposer$1) => void; + }; +}, { + onInit(cb: InitCallbackType): void; + onMounted(cb: MountedCallbackType): void; + onBeforeRender(cb: RenderCallbackType): void; + offBeforeRender(cb: RenderCallbackType): void; + onAfterRender(cb: RenderCallbackType): void; + offAfterRender(cb: RenderCallbackType): void; + onResize(cb: ResizeCallbackType): void; + offResize(cb: ResizeCallbackType): void; + addListener(type: string, cb: (e?: any) => void): void; + removeListener(type: string, cb: (e?: any) => void): void; + getCallbacks(type: string): InitCallbackType[] | RenderCallbackType[] | ResizeCallbackType[]; + render(time: number): void; + renderLoop(time: number): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; + antialias: BooleanConstructor; + alpha: BooleanConstructor; + autoClear: { + type: BooleanConstructor; + default: boolean; + }; + orbitCtrl: { + type: PropType>; + default: boolean; + }; + pointer: { + type: PropType; + default: boolean; + }; + resize: { + type: PropType; + default: boolean; + }; + shadow: BooleanConstructor; + width: StringConstructor; + height: StringConstructor; + pixelRatio: NumberConstructor; + xr: BooleanConstructor; + props: { + type: ObjectConstructor; + default: () => {}; + }; + onReady: PropType<(r: RendererInterface) => void>; +}>>, { + alpha: boolean; + resize: string | boolean; + shadow: boolean; + params: WebGLRendererParameters; + props: Record; + pointer: boolean | PointerPublicConfigInterface; + antialias: boolean; + autoClear: boolean; + orbitCtrl: boolean | Record; + xr: boolean; +}>; + +interface Object3DSetupInterface { + renderer?: RendererInterface; + scene?: Scene; + o3d?: Object3D; + parent?: ComponentPublicInstance; +} +interface Object3DInterface extends Object3DSetupInterface { + addToParent(o?: Object3D): boolean; + removeFromParent(o?: Object3D): boolean; + add(o: Object3D): void; + remove(o: Object3D): void; +} +interface Object3DPublicInterface extends ComponentPublicInstance, Object3DInterface { +} +interface Vector2PropInterface { + x?: number; + y?: number; + width?: number; + height?: number; +} +interface Vector3PropInterface extends Vector2PropInterface { + z?: number; +} +interface EulerPropInterface extends Vector3PropInterface { + order?: 'XYZ' | 'YZX' | 'ZXY' | 'XZY' | 'YXZ' | 'ZYX'; +} +declare const _default$17: vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: Object3D): void; + getParent(): undefined | ComponentPublicInstance; + addToParent(o?: Object3D): boolean; + removeFromParent(o?: Object3D): boolean; + add(o: Object3D): void; + remove(o: Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>; + +declare const _default$16: vue.DefineComponent<{ + left: { + type: NumberConstructor; + default: number; + }; + right: { + type: NumberConstructor; + default: number; + }; + top: { + type: NumberConstructor; + default: number; + }; + bottom: { + type: NumberConstructor; + default: number; + }; + near: { + type: NumberConstructor; + default: number; + }; + far: { + type: NumberConstructor; + default: number; + }; + zoom: { + type: NumberConstructor; + default: number; + }; + position: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; +}, { + renderer: RendererPublicInterface; + camera: OrthographicCamera; +} | undefined, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + props: { + type: ObjectConstructor; + default: () => {}; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly {}; + }; +}>>, { + props: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; +}>>, { + left: number; + top: number; + bottom: number; + position: Vector3PropInterface; + right: number; + zoom: number; + near: number; + far: number; +}>; +//# sourceMappingURL=OrthographicCamera.d.ts.map + +declare const _default$15: vue.DefineComponent<{ + aspect: { + type: NumberConstructor; + default: number; + }; + far: { + type: NumberConstructor; + default: number; + }; + fov: { + type: NumberConstructor; + default: number; + }; + near: { + type: NumberConstructor; + default: number; + }; + position: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + lookAt: { + type: PropType; + default: null; + }; +}, { + renderer: RendererPublicInterface; + camera: PerspectiveCamera; +} | undefined, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + props: { + type: ObjectConstructor; + default: () => {}; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly {}; + }; +}>>, { + props: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + lookAt: { + type: PropType; + default: null; + }; +}>>, { + position: Vector3PropInterface; + lookAt: Vector3PropInterface; + near: number; + far: number; + aspect: number; + fov: number; +}>; +//# sourceMappingURL=PerspectiveCamera.d.ts.map + +declare const _default$14: vue.DefineComponent<{}, { + group: Group; +}, {}, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=Group.d.ts.map + +declare const SceneInjectionKey: InjectionKey; +declare const _default$13: vue.DefineComponent<{ + background: (ObjectConstructor | StringConstructor | NumberConstructor)[]; +}, { + scene: Scene; + add: (o: Object3D) => void; + remove: (o: Object3D) => void; +} | undefined, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; + +interface RaycasterSetupInterface { + renderer?: RendererInterface; + pointer?: PointerInterface; +} +declare const _default$12: vue.DefineComponent<{ + onPointerEnter: { + type: PropType; + default: PointerIntersectCallbackType; + }; + onPointerOver: { + type: PropType; + default: PointerIntersectCallbackType; + }; + onPointerMove: { + type: PropType; + default: PointerIntersectCallbackType; + }; + onPointerLeave: { + type: PropType; + default: PointerIntersectCallbackType; + }; + onClick: { + type: PropType; + default: PointerIntersectCallbackType; + }; + intersectMode: { + type: StringConstructor; + default: string; + }; + intersectRecursive: { + type: BooleanConstructor; + default: boolean; + }; +}, RaycasterSetupInterface, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: PointerIntersectCallbackType; + }; + onPointerOver: { + type: PropType; + default: PointerIntersectCallbackType; + }; + onPointerMove: { + type: PropType; + default: PointerIntersectCallbackType; + }; + onPointerLeave: { + type: PropType; + default: PointerIntersectCallbackType; + }; + onClick: { + type: PropType; + default: PointerIntersectCallbackType; + }; + intersectMode: { + type: StringConstructor; + default: string; + }; + intersectRecursive: { + type: BooleanConstructor; + default: boolean; + }; +}>>, { + onClick: PointerIntersectCallbackType; + intersectRecursive: boolean; + onPointerEnter: PointerIntersectCallbackType; + onPointerOver: PointerIntersectCallbackType; + onPointerMove: PointerIntersectCallbackType; + onPointerLeave: PointerIntersectCallbackType; + intersectMode: string; +}>; +//# sourceMappingURL=Raycaster.d.ts.map + +interface CubeCameraSetupInterface { + cubeRT?: WebGLCubeRenderTarget; + cubeCamera?: CubeCamera; + updateRT?: { + (): void; + }; +} +declare const _default$11: vue.DefineComponent<{ + cubeRTSize: { + type: NumberConstructor; + default: number; + }; + cubeCameraNear: { + type: NumberConstructor; + default: number; + }; + cubeCameraFar: { + type: NumberConstructor; + default: number; + }; + autoUpdate: BooleanConstructor; + hideMeshes: { + type: PropType[]>; + default: () => never[]; + }; +}, CubeCameraSetupInterface, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly[]>; + default: () => never[]; + }; +}>>, { + cubeRTSize: number; + cubeCameraNear: number; + cubeCameraFar: number; + autoUpdate: boolean; + hideMeshes: Mesh$1[]; +}>; +//# sourceMappingURL=CubeCamera.d.ts.map + +interface MeshSetupInterface extends Object3DSetupInterface { + mesh?: Mesh$1; + geometry?: BufferGeometry; + material?: Material | Material[]; + loading?: boolean; +} +interface MeshInterface extends MeshSetupInterface { + setGeometry(g: BufferGeometry): void; + setMaterial(m: Material): void; +} +interface MeshPublicInterface extends ComponentPublicInstance, MeshInterface { +} +declare const MeshInjectionKey: InjectionKey; +declare const Mesh: vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly): void; + setGeometry(geometry: BufferGeometry): void; + setMaterial(material: Material | Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>; + +interface GeometrySetupInterface { + mesh?: MeshInterface; + geometry?: BufferGeometry; + watchProps?: string[]; +} +interface GeometryAttributeInterface { + name: string; + array: ArrayLike; + itemSize: number; + normalized?: boolean; +} +declare const Geometry: vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>; + +declare const _default$10: vue.DefineComponent<{ + readonly size: NumberConstructor; + readonly width: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly depth: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly widthSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly depthSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly height: number; + readonly width: number; + readonly depth: number; + readonly widthSegments: number; + readonly heightSegments: number; + readonly depthSegments: number; +}>; + +declare const _default$$: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly segments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly segments: number; + readonly radius: number; + readonly thetaStart: number; + readonly thetaLength: number; +}>; + +declare const _default$_: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly openEnded: { + readonly type: BooleanConstructor; + readonly default: false; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly height: number; + readonly radius: number; + readonly heightSegments: number; + readonly thetaStart: number; + readonly thetaLength: number; + readonly radialSegments: number; + readonly openEnded: boolean; +}>; + +declare const _default$Z: vue.DefineComponent<{ + readonly radiusTop: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radiusBottom: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly openEnded: { + readonly type: BooleanConstructor; + readonly default: false; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly height: number; + readonly heightSegments: number; + readonly thetaStart: number; + readonly thetaLength: number; + readonly radialSegments: number; + readonly openEnded: boolean; + readonly radiusTop: number; + readonly radiusBottom: number; +}>; + +declare const _default$Y: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; + +declare const _default$X: vue.DefineComponent<{ + readonly shapes: { + readonly type: PropType; + }; + readonly options: { + readonly type: PropType; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + }; + readonly options: { + readonly type: PropType; + }; +}>>, {}>; + +declare const _default$W: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; + +declare const _default$V: vue.DefineComponent<{ + readonly points: ArrayConstructor; + readonly segments: { + readonly type: NumberConstructor; + readonly default: 12; + }; + readonly phiStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly phiLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly segments: number; + readonly phiStart: number; + readonly phiLength: number; +}>; + +declare const _default$U: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; + +declare const _default$T: vue.DefineComponent<{ + readonly width: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly widthSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly height: number; + readonly width: number; + readonly widthSegments: number; + readonly heightSegments: number; +}>; + +declare const _default$S: vue.DefineComponent<{ + readonly vertices: ArrayConstructor; + readonly indices: ArrayConstructor; + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; + +declare const _default$R: vue.DefineComponent<{ + readonly innerRadius: { + readonly type: NumberConstructor; + readonly default: 0.5; + }; + readonly outerRadius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly thetaSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly phiSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly thetaStart: number; + readonly thetaLength: number; + readonly innerRadius: number; + readonly outerRadius: number; + readonly thetaSegments: number; + readonly phiSegments: number; +}>; + +declare const _default$Q: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly widthSegments: { + readonly type: NumberConstructor; + readonly default: 12; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 12; + }; + readonly phiStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly phiLength: { + readonly type: NumberConstructor; + readonly default: number; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly radius: number; + readonly widthSegments: number; + readonly heightSegments: number; + readonly thetaStart: number; + readonly thetaLength: number; + readonly phiStart: number; + readonly phiLength: number; +}>; + +declare const _default$P: vue.DefineComponent<{ + readonly shapes: { + readonly type: PropType; + }; + readonly curveSegments: { + readonly type: NumberConstructor; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + }; + readonly curveSegments: { + readonly type: NumberConstructor; + }; +}>>, {}>; + +declare const _default$O: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; + +declare const _default$N: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly tube: { + readonly type: NumberConstructor; + readonly default: 0.4; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly tubularSegments: { + readonly type: NumberConstructor; + readonly default: 6; + }; + readonly arc: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly radius: number; + readonly radialSegments: number; + readonly tube: number; + readonly tubularSegments: number; + readonly arc: number; +}>; + +declare const _default$M: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly tube: { + readonly type: NumberConstructor; + readonly default: 0.4; + }; + readonly tubularSegments: { + readonly type: NumberConstructor; + readonly default: 64; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly p: { + readonly type: NumberConstructor; + readonly default: 2; + }; + readonly q: { + readonly type: NumberConstructor; + readonly default: 3; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly p: number; + readonly q: number; + readonly radius: number; + readonly radialSegments: number; + readonly tube: number; + readonly tubularSegments: number; +}>; + +declare const _default$L: vue.DefineComponent<{ + readonly points: ArrayConstructor; + readonly path: typeof Curve; + readonly tubularSegments: { + readonly type: NumberConstructor; + readonly default: 64; + }; + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly closed: { + readonly type: BooleanConstructor; + readonly default: false; + }; +}, unknown, unknown, {}, { + createGeometry(): void; + updatePoints(points: Vector3[]): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + rotateX: NumberConstructor; + rotateY: NumberConstructor; + rotateZ: NumberConstructor; + attributes: { + type: vue.PropType; + default: () => never[]; + }; +}, GeometrySetupInterface, unknown, {}, { + createGeometry(): void; + rotateGeometry(): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => never[]; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + attributes: GeometryAttributeInterface[]; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly closed: boolean; + readonly radius: number; + readonly radialSegments: number; + readonly tubularSegments: number; +}>; + +interface LightSetupInterface { + light?: Light; +} + +declare const _default$K: vue.DefineComponent<{}, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + intensity: { + type: NumberConstructor; + default: number; + }; + castShadow: { + type: BooleanConstructor; + default: boolean; + }; + shadowMapSize: { + type: vue.PropType; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}, LightSetupInterface, unknown, {}, { + initLight(light: three.Light): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + color: string; + castShadow: boolean; + intensity: number; + shadowMapSize: Vector2PropInterface; + shadowCamera: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=AmbientLight.d.ts.map + +declare const _default$J: vue.DefineComponent<{ + target: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + intensity: { + type: NumberConstructor; + default: number; + }; + castShadow: { + type: BooleanConstructor; + default: boolean; + }; + shadowMapSize: { + type: PropType; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}, LightSetupInterface, unknown, {}, { + initLight(light: three.Light): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + color: string; + castShadow: boolean; + intensity: number; + shadowMapSize: Vector2PropInterface; + shadowCamera: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; +}>>, { + target: Vector3PropInterface; +}>; +//# sourceMappingURL=DirectionalLight.d.ts.map + +declare const _default$I: vue.DefineComponent<{ + groundColor: { + type: StringConstructor; + default: string; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + intensity: { + type: NumberConstructor; + default: number; + }; + castShadow: { + type: BooleanConstructor; + default: boolean; + }; + shadowMapSize: { + type: vue.PropType; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}, LightSetupInterface, unknown, {}, { + initLight(light: three.Light): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + color: string; + castShadow: boolean; + intensity: number; + shadowMapSize: Vector2PropInterface; + shadowCamera: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + groundColor: string; +}>; +//# sourceMappingURL=HemisphereLight.d.ts.map + +declare const _default$H: vue.DefineComponent<{ + distance: { + type: NumberConstructor; + default: number; + }; + decay: { + type: NumberConstructor; + default: number; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + intensity: { + type: NumberConstructor; + default: number; + }; + castShadow: { + type: BooleanConstructor; + default: boolean; + }; + shadowMapSize: { + type: vue.PropType; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}, LightSetupInterface, unknown, {}, { + initLight(light: three.Light): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + color: string; + castShadow: boolean; + intensity: number; + shadowMapSize: Vector2PropInterface; + shadowCamera: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + distance: number; + decay: number; +}>; +//# sourceMappingURL=PointLight.d.ts.map + +declare const _default$G: vue.DefineComponent<{ + width: { + type: NumberConstructor; + default: number; + }; + height: { + type: NumberConstructor; + default: number; + }; + helper: BooleanConstructor; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + intensity: { + type: NumberConstructor; + default: number; + }; + castShadow: { + type: BooleanConstructor; + default: boolean; + }; + shadowMapSize: { + type: vue.PropType; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}, LightSetupInterface, unknown, {}, { + initLight(light: three.Light): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + color: string; + castShadow: boolean; + intensity: number; + shadowMapSize: Vector2PropInterface; + shadowCamera: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + height: number; + width: number; + helper: boolean; +}>; +//# sourceMappingURL=RectAreaLight.d.ts.map + +declare const _default$F: vue.DefineComponent<{ + angle: { + type: NumberConstructor; + default: number; + }; + decay: { + type: NumberConstructor; + default: number; + }; + distance: { + type: NumberConstructor; + default: number; + }; + penumbra: { + type: NumberConstructor; + default: number; + }; + target: ObjectConstructor; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + intensity: { + type: NumberConstructor; + default: number; + }; + castShadow: { + type: BooleanConstructor; + default: boolean; + }; + shadowMapSize: { + type: vue.PropType; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}, LightSetupInterface, unknown, {}, { + initLight(light: three.Light): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + }; + }; + shadowCamera: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + color: string; + castShadow: boolean; + intensity: number; + shadowMapSize: Vector2PropInterface; + shadowCamera: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + distance: number; + decay: number; + angle: number; + penumbra: number; +}>; +//# sourceMappingURL=SpotLight.d.ts.map + +interface MaterialPropsInterface { + alphaTest?: number; + blending?: number; + color?: number | string; + depthTest?: boolean; + depthWrite?: boolean; + fog?: boolean; + opacity?: number; + side?: number; + toneMapped?: boolean; + transparent?: boolean; + vertexColors?: boolean; + visible?: boolean; + [index: string]: any; +} +interface AlphaPropsInterface { + alphaMap?: Texture; +} +interface AOPropsInterface { + aoMap?: Texture; + aoMapIntensity?: number; +} +interface BumpPropsInterface { + bumpMap?: Texture; + bumpScale?: number; +} +interface DisplacementPropsInterface { + displacementMap?: Texture; + displacementScale?: number; + displacementBias?: number; +} +interface EmissivePropsInterface { + emissive?: number | string; + emissiveIntensity?: number; + emissiveMap?: Texture; +} +interface EnvPropsInterface { + envMap?: Texture; + envMapIntensity?: number; + reflectivity?: number; + refractionRatio?: number; +} +interface LightPropsInterface { + lightMap?: Texture; + lightMapIntensity?: number; +} +interface WireframePropsInterface { + wireframe?: boolean; + wireframeLinewidth?: number; +} +interface BasicMaterialPropsInterface extends MaterialPropsInterface, AlphaPropsInterface, AOPropsInterface, EnvPropsInterface, WireframePropsInterface { +} +interface LambertMaterialPropsInterface extends MaterialPropsInterface, AlphaPropsInterface, AOPropsInterface, EmissivePropsInterface, EnvPropsInterface, LightPropsInterface, WireframePropsInterface { +} +interface PhongMaterialPropsInterface extends MaterialPropsInterface, AlphaPropsInterface, AOPropsInterface, DisplacementPropsInterface, EmissivePropsInterface, EnvPropsInterface, LightPropsInterface, WireframePropsInterface { + flatShading?: boolean; + shininess?: number; + specular?: number | string; +} +interface PhysicalMaterialPropsInterface extends MaterialPropsInterface { + clearcoat?: number; + clearcoatMap?: Texture; + clearcoatRoughness?: number; + clearcoatRoughnessMap?: Texture; + clearcoatNormalScale?: Vector2; + clearcoatNormalMap?: Texture; + ior?: number; + reflectivity?: number; + sheen?: Color; + transmission?: number; + transmissionMap?: Texture | null; +} +interface PointsMaterialPropsInterface extends MaterialPropsInterface, AlphaPropsInterface { + size?: number; + sizeAttenuation?: boolean; +} +interface StandardMaterialPropsInterface extends MaterialPropsInterface, AlphaPropsInterface, AOPropsInterface, BumpPropsInterface, DisplacementPropsInterface, EmissivePropsInterface, EnvPropsInterface, LightPropsInterface, WireframePropsInterface { + flatShading?: boolean; + metalness?: number; + metalnessMap?: Texture; + roughness?: number; + roughnessMap?: Texture; +} +interface ToonMaterialPropsInterface extends MaterialPropsInterface, AlphaPropsInterface, AOPropsInterface, BumpPropsInterface, DisplacementPropsInterface, EmissivePropsInterface, LightPropsInterface, WireframePropsInterface { +} + +interface MaterialSetupInterface { + mesh?: MeshInterface; + material?: Material; + createMaterial?(): Material; +} +interface MaterialInterface extends MaterialSetupInterface { + setTexture(texture: Texture | null, key: string): void; +} +interface MaterialPublicInterface extends ComponentPublicInstance, MaterialInterface { +} +declare const MaterialInjectionKey: InjectionKey; +declare const BaseMaterial: vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>; + +declare const BasicMaterial: vue.DefineComponent<{ + props: { + type: PropType; + default: () => {}; + }; +}, unknown, unknown, {}, { + createMaterial(): Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>>, { + props: BasicMaterialPropsInterface; +}>; +declare const LambertMaterial: vue.DefineComponent<{ + props: { + type: PropType; + default: () => {}; + }; +}, unknown, unknown, {}, { + createMaterial(): Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>>, { + props: LambertMaterialPropsInterface; +}>; +declare const PhongMaterial: vue.DefineComponent<{ + props: { + type: PropType; + default: () => {}; + }; +}, unknown, unknown, {}, { + createMaterial(): Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>>, { + props: PhongMaterialPropsInterface; +}>; +declare const PhysicalMaterial: vue.DefineComponent<{ + props: { + type: PropType; + default: () => {}; + }; +}, unknown, unknown, {}, { + createMaterial(): Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>>, { + props: PhysicalMaterialPropsInterface; +}>; +declare const PointsMaterial: vue.DefineComponent<{ + props: { + type: PropType; + default: () => {}; + }; +}, unknown, unknown, {}, { + createMaterial(): Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>>, { + props: PointsMaterialPropsInterface; +}>; +declare const ShadowMaterial: vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, unknown, unknown, {}, { + createMaterial(): Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>>, { + color: string; + props: MaterialPropsInterface; +}>; +declare const StandardMaterial: vue.DefineComponent<{ + props: { + type: PropType; + default: () => {}; + }; +}, unknown, unknown, {}, { + createMaterial(): Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>>, { + props: StandardMaterialPropsInterface; +}>; +declare const ToonMaterial: vue.DefineComponent<{ + props: { + type: PropType; + default: () => {}; + }; +}, unknown, unknown, {}, { + createMaterial(): Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>>, { + props: ToonMaterialPropsInterface; +}>; + +declare const _default$E: vue.DefineComponent<{ + src: StringConstructor; + name: { + type: StringConstructor; + default: string; + }; +}, unknown, unknown, {}, { + createMaterial(): three.Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: vue.PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: three.Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + name: string; +}>; +//# sourceMappingURL=MatcapMaterial.d.ts.map + +declare const _default$D: vue.DefineComponent<{ + props: { + type: ObjectConstructor; + default: () => { + uniforms: {}; + vertexShader: string; + fragmentShader: string; + }; + }; +}, unknown, unknown, {}, { + createMaterial(): three.Material; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: vue.PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: three.Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly { + uniforms: {}; + vertexShader: string; + fragmentShader: string; + }; + }; +}>>, { + props: Record; +}>; +//# sourceMappingURL=ShaderMaterial.d.ts.map + +interface SubSurfaceMaterialUniformsInterface { + diffuse?: string | number; + thicknessColor?: string | number; + thicknessDistortion?: number; + thicknessAmbient?: number; + thicknessAttenuation?: number; + thicknessPower?: number; + thicknessScale?: number; +} +declare const _default$C: vue.DefineComponent<{ + uniforms: { + type: PropType; + default: () => { + diffuse: string; + thicknessColor: string; + thicknessDistortion: number; + thicknessAmbient: number; + thicknessAttenuation: number; + thicknessPower: number; + thicknessScale: number; + }; + }; +}, unknown, unknown, {}, { + createMaterial(): ShaderMaterial; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + color: { + type: StringConstructor; + default: string; + }; + props: { + type: PropType; + default: () => {}; + }; +}, MaterialSetupInterface, unknown, {}, { + getMaterialParams(): { + [x: string]: any; + alphaTest?: number | undefined; + blending?: number | undefined; + color?: string | number | undefined; + depthTest?: boolean | undefined; + depthWrite?: boolean | undefined; + fog?: boolean | undefined; + opacity?: number | undefined; + side?: number | undefined; + toneMapped?: boolean | undefined; + transparent?: boolean | undefined; + vertexColors?: boolean | undefined; + visible?: boolean | undefined; + }; + setProp(material: any, key: string, value: any, needsUpdate?: boolean): void; + setTexture(texture: three.Texture | null, key?: string): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "created"[], "created", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => {}; + }; +}>> & { + onCreated?: ((...args: any[]) => any) | undefined; +}, { + color: string; + props: MaterialPropsInterface; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + diffuse: string; + thicknessColor: string; + thicknessDistortion: number; + thicknessAmbient: number; + thicknessAttenuation: number; + thicknessPower: number; + thicknessScale: number; + }; + }; +}>>, { + uniforms: SubSurfaceMaterialUniformsInterface; +}>; + +interface TexureInterface { + material?: MaterialInterface; + texture?: Texture; +} +declare const _default$B: vue.DefineComponent<{ + name: { + type: StringConstructor; + default: string; + }; + uniform: StringConstructor; + src: StringConstructor; + onLoad: PropType<(t: Texture) => void>; + onProgress: PropType<(e: ProgressEvent) => void>; + onError: PropType<(e: ErrorEvent) => void>; + props: { + type: ObjectConstructor; + default: () => {}; + }; +}, TexureInterface, unknown, {}, { + createTexture(): Texture | undefined; + initTexture(): void; + refreshTexture(): void; + onLoaded(t: Texture): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly void>; + onProgress: PropType<(e: ProgressEvent) => void>; + onError: PropType<(e: ErrorEvent) => void>; + props: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + name: string; + props: Record; +}>; + +declare const _default$A: vue.DefineComponent<{ + name: { + type: StringConstructor; + default: string; + }; + path: { + type: StringConstructor; + required: true; + }; + urls: { + type: PropType; + default: () => string[]; + }; + props: { + type: ObjectConstructor; + default: () => { + mapping: three.Mapping; + }; + }; +}, unknown, unknown, {}, { + createTexture(): three.CubeTexture; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + name: { + type: StringConstructor; + default: string; + }; + uniform: StringConstructor; + src: StringConstructor; + onLoad: PropType<(t: three.Texture) => void>; + onProgress: PropType<(e: ProgressEvent) => void>; + onError: PropType<(e: ErrorEvent) => void>; + props: { + type: ObjectConstructor; + default: () => {}; + }; +}, TexureInterface, unknown, {}, { + createTexture(): three.Texture | undefined; + initTexture(): void; + refreshTexture(): void; + onLoaded(t: three.Texture): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly void>; + onProgress: PropType<(e: ProgressEvent) => void>; + onError: PropType<(e: ErrorEvent) => void>; + props: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + name: string; + props: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => string[]; + }; + props: { + type: ObjectConstructor; + default: () => { + mapping: three.Mapping; + }; + }; +}>>, { + name: string; + props: Record; + urls: string[]; +}>; +//# sourceMappingURL=CubeTexture.d.ts.map + +declare const _default$z: vue.DefineComponent<{ + videoId: { + type: StringConstructor; + required: true; + }; +}, unknown, unknown, {}, { + createTexture(): VideoTexture; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + name: { + type: StringConstructor; + default: string; + }; + uniform: StringConstructor; + src: StringConstructor; + onLoad: vue.PropType<(t: three.Texture) => void>; + onProgress: vue.PropType<(e: ProgressEvent) => void>; + onError: vue.PropType<(e: ErrorEvent) => void>; + props: { + type: ObjectConstructor; + default: () => {}; + }; +}, TexureInterface, unknown, {}, { + createTexture(): three.Texture | undefined; + initTexture(): void; + refreshTexture(): void; + onLoaded(t: three.Texture): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly void>; + onProgress: vue.PropType<(e: ProgressEvent) => void>; + onError: vue.PropType<(e: ErrorEvent) => void>; + props: { + type: ObjectConstructor; + default: () => {}; + }; +}>>, { + name: string; + props: Record; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=VideoTexture.d.ts.map + +declare const _default$y: vue.DefineComponent<{ + readonly size: NumberConstructor; + readonly width: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly depth: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly widthSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly depthSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly height: number; + readonly width: number; + readonly depth: number; + readonly widthSegments: number; + readonly heightSegments: number; + readonly depthSegments: number; +}>; +//# sourceMappingURL=Box.d.ts.map + +declare const _default$x: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly segments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly segments: number; + readonly radius: number; + readonly thetaStart: number; + readonly thetaLength: number; +}>; +//# sourceMappingURL=Circle.d.ts.map + +declare const _default$w: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly openEnded: { + readonly type: BooleanConstructor; + readonly default: false; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly height: number; + readonly radius: number; + readonly heightSegments: number; + readonly thetaStart: number; + readonly thetaLength: number; + readonly radialSegments: number; + readonly openEnded: boolean; +}>; +//# sourceMappingURL=Cone.d.ts.map + +declare const _default$v: vue.DefineComponent<{ + readonly radiusTop: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radiusBottom: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly openEnded: { + readonly type: BooleanConstructor; + readonly default: false; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly height: number; + readonly heightSegments: number; + readonly thetaStart: number; + readonly thetaLength: number; + readonly radialSegments: number; + readonly openEnded: boolean; + readonly radiusTop: number; + readonly radiusBottom: number; +}>; +//# sourceMappingURL=Cylinder.d.ts.map + +declare const _default$u: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; +//# sourceMappingURL=Dodecahedron.d.ts.map + +declare const _default$t: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; +//# sourceMappingURL=Icosahedron.d.ts.map + +declare const _default$s: vue.DefineComponent<{ + readonly points: ArrayConstructor; + readonly segments: { + readonly type: NumberConstructor; + readonly default: 12; + }; + readonly phiStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly phiLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly segments: number; + readonly phiStart: number; + readonly phiLength: number; +}>; +//# sourceMappingURL=Lathe.d.ts.map + +declare const _default$r: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; +//# sourceMappingURL=Octahedron.d.ts.map + +declare const _default$q: vue.DefineComponent<{ + readonly width: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly widthSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly height: number; + readonly width: number; + readonly widthSegments: number; + readonly heightSegments: number; +}>; +//# sourceMappingURL=Plane.d.ts.map + +declare const _default$p: vue.DefineComponent<{ + readonly vertices: ArrayConstructor; + readonly indices: ArrayConstructor; + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; +//# sourceMappingURL=Polyhedron.d.ts.map + +declare const _default$o: vue.DefineComponent<{ + readonly innerRadius: { + readonly type: NumberConstructor; + readonly default: 0.5; + }; + readonly outerRadius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly thetaSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly phiSegments: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly thetaStart: number; + readonly thetaLength: number; + readonly innerRadius: number; + readonly outerRadius: number; + readonly thetaSegments: number; + readonly phiSegments: number; +}>; +//# sourceMappingURL=Ring.d.ts.map + +declare const _default$n: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly widthSegments: { + readonly type: NumberConstructor; + readonly default: 12; + }; + readonly heightSegments: { + readonly type: NumberConstructor; + readonly default: 12; + }; + readonly phiStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly phiLength: { + readonly type: NumberConstructor; + readonly default: number; + }; + readonly thetaStart: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly thetaLength: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly radius: number; + readonly widthSegments: number; + readonly heightSegments: number; + readonly thetaStart: number; + readonly thetaLength: number; + readonly phiStart: number; + readonly phiLength: number; +}>; +//# sourceMappingURL=Sphere.d.ts.map + +declare const _default$m: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly detail: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly detail: number; + readonly radius: number; +}>; +//# sourceMappingURL=Tetrahedron.d.ts.map + +interface TextSetupInterface extends MeshSetupInterface { + geometry?: TextGeometry; + font?: Font; +} +declare const _default$l: vue.DefineComponent<{ + readonly text: { + readonly type: StringConstructor; + readonly required: true; + readonly default: "Text"; + }; + readonly fontSrc: { + readonly type: StringConstructor; + readonly required: true; + }; + readonly size: { + readonly type: NumberConstructor; + readonly default: 80; + }; + readonly height: { + readonly type: NumberConstructor; + readonly default: 5; + }; + readonly depth: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly curveSegments: { + readonly type: NumberConstructor; + readonly default: 12; + }; + readonly bevelEnabled: { + readonly type: BooleanConstructor; + readonly default: false; + }; + readonly bevelThickness: { + readonly type: NumberConstructor; + readonly default: 10; + }; + readonly bevelSize: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly bevelOffset: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly bevelSegments: { + readonly type: NumberConstructor; + readonly default: 5; + }; + readonly align: { + readonly type: PropType; + readonly default: false; + }; +}, TextSetupInterface, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + readonly default: false; + }; +}>>, { + readonly height: number; + readonly text: string; + readonly size: number; + readonly depth: number; + readonly align: string | boolean; + readonly curveSegments: number; + readonly bevelEnabled: boolean; + readonly bevelThickness: number; + readonly bevelSize: number; + readonly bevelOffset: number; + readonly bevelSegments: number; +}>; +//# sourceMappingURL=Text.d.ts.map + +declare const _default$k: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly tube: { + readonly type: NumberConstructor; + readonly default: 0.4; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly tubularSegments: { + readonly type: NumberConstructor; + readonly default: 6; + }; + readonly arc: { + readonly type: NumberConstructor; + readonly default: number; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly radius: number; + readonly radialSegments: number; + readonly tube: number; + readonly tubularSegments: number; + readonly arc: number; +}>; +//# sourceMappingURL=Torus.d.ts.map + +declare const _default$j: vue.DefineComponent<{ + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly tube: { + readonly type: NumberConstructor; + readonly default: 0.4; + }; + readonly tubularSegments: { + readonly type: NumberConstructor; + readonly default: 64; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly p: { + readonly type: NumberConstructor; + readonly default: 2; + }; + readonly q: { + readonly type: NumberConstructor; + readonly default: 3; + }; +}, unknown, unknown, {}, { + createGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly p: number; + readonly q: number; + readonly radius: number; + readonly radialSegments: number; + readonly tube: number; + readonly tubularSegments: number; +}>; +//# sourceMappingURL=TorusKnot.d.ts.map + +declare const _default$i: vue.DefineComponent<{ + readonly points: ArrayConstructor; + readonly path: typeof three.Curve; + readonly tubularSegments: { + readonly type: NumberConstructor; + readonly default: 64; + }; + readonly radius: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radialSegments: { + readonly type: NumberConstructor; + readonly default: 8; + }; + readonly closed: { + readonly type: BooleanConstructor; + readonly default: false; + }; +}, unknown, unknown, {}, { + createGeometry(): void; + updatePoints(points: Vector3[]): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly closed: boolean; + readonly radius: number; + readonly radialSegments: number; + readonly tubularSegments: number; +}>; +//# sourceMappingURL=Tube.d.ts.map + +interface ImageSetupInterface extends MeshSetupInterface { + material?: MeshBasicMaterial; + texture?: Texture; +} +declare const _default$h: vue.DefineComponent<{ + src: { + type: StringConstructor; + required: true; + }; + width: NumberConstructor; + height: NumberConstructor; + widthSegments: { + type: NumberConstructor; + default: number; + }; + heightSegments: { + type: NumberConstructor; + default: number; + }; + keepSize: BooleanConstructor; +}, ImageSetupInterface, unknown, {}, { + loadTexture(): Texture; + refreshTexture(): void; + onLoaded(texture: Texture): void; + resize(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, "loaded"[], "loaded", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onLoaded?: ((...args: any[]) => any) | undefined; +}, { + widthSegments: number; + heightSegments: number; + keepSize: boolean; +}>; +//# sourceMappingURL=Image.d.ts.map + +declare const _default$g: vue.DefineComponent<{ + count: { + type: NumberConstructor; + required: true; + }; +}, unknown, unknown, {}, { + initMesh(): false | undefined; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + castShadow: BooleanConstructor; + receiveShadow: BooleanConstructor; +}, MeshSetupInterface, unknown, {}, { + initMesh(): void; + createGeometry(): void; + addGeometryWatchers(props: Readonly>): void; + setGeometry(geometry: three.BufferGeometry): void; + setMaterial(material: three.Material | three.Material[]): void; + refreshGeometry(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + castShadow: boolean; + receiveShadow: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=InstancedMesh.d.ts.map + +interface SpriteSetupInterface extends Object3DSetupInterface { + texture?: Texture; + material?: SpriteMaterial; + sprite?: Sprite; +} +declare const _default$f: vue.DefineComponent<{ + src: { + type: StringConstructor; + required: true; + }; +}, SpriteSetupInterface, unknown, {}, { + onLoaded(): void; + updateUV(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, "loaded"[], "loaded", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onLoaded?: ((...args: any[]) => any) | undefined; +}, {}>; +//# sourceMappingURL=Sprite.d.ts.map + +interface PointsSetupInterface extends Object3DSetupInterface { + mesh?: Points; + points?: Points; + geometry?: BufferGeometry; + material?: Material; +} +declare const _default$e: vue.DefineComponent<{}, PointsSetupInterface, {}, {}, { + setGeometry(geometry: BufferGeometry): void; + setMaterial(material: Material): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; + +declare const _default$d: vue.DefineComponent<{}, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + src: { + type: StringConstructor; + required: true; + }; +}, unknown, { + progress: number; +}, {}, { + onLoad(model: three.Object3D): void; + onProgress(progress: ProgressEvent): void; + onError(error: ErrorEvent): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, ("progress" | "error" | "load" | "before-load")[], "progress" | "error" | "load" | "before-load", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onError?: ((...args: any[]) => any) | undefined; + onLoad?: ((...args: any[]) => any) | undefined; + onProgress?: ((...args: any[]) => any) | undefined; + "onBefore-load"?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=GLTF.d.ts.map + +declare const _default$c: vue.DefineComponent<{}, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + src: { + type: StringConstructor; + required: true; + }; +}, unknown, { + progress: number; +}, {}, { + onLoad(model: three.Object3D): void; + onProgress(progress: ProgressEvent): void; + onError(error: ErrorEvent): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{ + onPointerEnter: FunctionConstructor; + onPointerOver: FunctionConstructor; + onPointerMove: FunctionConstructor; + onPointerLeave: FunctionConstructor; + onPointerDown: FunctionConstructor; + onPointerUp: FunctionConstructor; + onClick: FunctionConstructor; + position: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}, Object3DSetupInterface, unknown, {}, { + initObject3D(o3d: three.Object3D): void; + getParent(): vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase, {}> | undefined; + addToParent(o?: three.Object3D | undefined): boolean; + removeFromParent(o?: three.Object3D | undefined): boolean; + add(o: three.Object3D): void; + remove(o: three.Object3D): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("created" | "ready")[], "created" | "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + z: number; + }; + }; + rotation: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + }; + }; + scale: { + type: vue.PropType; + default: () => { + x: number; + y: number; + z: number; + order: string; + }; + }; + lookAt: { + type: vue.PropType; + default: null; + }; + userData: { + type: ObjectConstructor; + default: () => {}; + }; + visible: { + type: BooleanConstructor; + default: boolean; + }; + props: { + type: ObjectConstructor; + default: () => {}; + }; + disableAdd: { + type: BooleanConstructor; + default: boolean; + }; + disableRemove: { + type: BooleanConstructor; + default: boolean; + }; +}>> & { + onReady?: ((...args: any[]) => any) | undefined; + onCreated?: ((...args: any[]) => any) | undefined; +}, { + position: Vector3PropInterface; + scale: Vector3PropInterface; + visible: boolean; + rotation: EulerPropInterface; + props: Record; + lookAt: Vector3PropInterface; + userData: Record; + disableAdd: boolean; + disableRemove: boolean; +}>, ("progress" | "error" | "load" | "before-load")[], "progress" | "error" | "load" | "before-load", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onError?: ((...args: any[]) => any) | undefined; + onLoad?: ((...args: any[]) => any) | undefined; + onProgress?: ((...args: any[]) => any) | undefined; + "onBefore-load"?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=FBX.d.ts.map + +interface EffectComposerSetupInterface { + renderer?: RendererInterface; + composer?: EffectComposer; +} +interface EffectComposerInterface extends EffectComposerSetupInterface { + addPass(pass: Pass): void; + removePass(pass: Pass): void; +} +declare const ComposerInjectionKey: InjectionKey; +declare const _default$b: vue.DefineComponent<{}, EffectComposerSetupInterface, {}, {}, { + addPass(pass: Pass): void; + removePass(pass: Pass): void; + resize(): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; + +interface EffectSetupInterface { + renderer?: RendererInterface; + composer?: EffectComposerInterface; + pass?: Pass; +} +declare const _default$a: vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>; + +declare const _default$9: vue.DefineComponent<{}, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=RenderPass.d.ts.map + +declare const _default$8: vue.DefineComponent<{ + readonly focus: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly aperture: { + readonly type: NumberConstructor; + readonly default: 0.025; + }; + readonly maxblur: { + readonly type: NumberConstructor; + readonly default: 0.01; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly focus: number; + readonly aperture: number; + readonly maxblur: number; +}>; +//# sourceMappingURL=BokehPass.d.ts.map + +declare const _default$7: vue.DefineComponent<{ + readonly noiseIntensity: { + readonly type: NumberConstructor; + readonly default: 0.5; + }; + readonly scanlinesIntensity: { + readonly type: NumberConstructor; + readonly default: 0.05; + }; + readonly scanlinesCount: { + readonly type: NumberConstructor; + readonly default: 4096; + }; + readonly grayscale: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly noiseIntensity: number; + readonly scanlinesIntensity: number; + readonly scanlinesCount: number; + readonly grayscale: number; +}>; +//# sourceMappingURL=FilmPass.d.ts.map + +declare const _default$6: vue.DefineComponent<{}, {}, {}, {}, { + resize({ size }: { + size: SizeInterface; + }): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=FXAAPass.d.ts.map + +declare const _default$5: vue.DefineComponent<{ + readonly shape: { + readonly type: NumberConstructor; + readonly default: 1; + }; + readonly radius: { + readonly type: NumberConstructor; + readonly default: 4; + }; + readonly rotateR: { + readonly type: NumberConstructor; + readonly default: number; + }; + readonly rotateG: { + readonly type: NumberConstructor; + readonly default: number; + }; + readonly rotateB: { + readonly type: NumberConstructor; + readonly default: number; + }; + readonly scatter: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly shape: number; + readonly radius: number; + readonly rotateR: number; + readonly rotateG: number; + readonly rotateB: number; + readonly scatter: number; +}>; +//# sourceMappingURL=HalftonePass.d.ts.map + +declare const _default$4: vue.DefineComponent<{}, {}, {}, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, {}>; +//# sourceMappingURL=SMAAPass.d.ts.map + +declare const _default$3: vue.DefineComponent<{ + options: { + type: ObjectConstructor; + default: () => {}; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly {}; + }; +}>>, { + options: Record; +}>; +//# sourceMappingURL=SSAOPass.d.ts.map + +interface TiltShiftPassSetupInterface { + uniforms1: { + [name: string]: { + value: any; + }; + }; + uniforms2: { + [name: string]: { + value: any; + }; + }; + pass1?: ShaderPass; + pass2?: ShaderPass; +} +declare const _default$2: vue.DefineComponent<{ + readonly blurRadius: { + readonly type: NumberConstructor; + readonly default: 10; + }; + readonly gradientRadius: { + readonly type: NumberConstructor; + readonly default: 100; + }; + readonly start: { + readonly type: PropType; + readonly default: () => { + x: number; + y: number; + }; + }; + readonly end: { + readonly type: PropType; + readonly default: () => { + x: number; + y: number; + }; + }; +}, TiltShiftPassSetupInterface, unknown, {}, { + updateFocusLine(): void; +}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + readonly default: () => { + x: number; + y: number; + }; + }; + readonly end: { + readonly type: PropType; + readonly default: () => { + x: number; + y: number; + }; + }; +}>>, { + readonly end: Vector2PropInterface; + readonly start: Vector2PropInterface; + readonly blurRadius: number; + readonly gradientRadius: number; +}>; +//# sourceMappingURL=TiltShiftPass.d.ts.map + +declare const _default$1: vue.DefineComponent<{ + readonly strength: { + readonly type: NumberConstructor; + readonly default: 1.5; + }; + readonly radius: { + readonly type: NumberConstructor; + readonly default: 0; + }; + readonly threshold: { + readonly type: NumberConstructor; + readonly default: 0; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly>, { + readonly threshold: number; + readonly radius: number; + readonly strength: number; +}>; +//# sourceMappingURL=UnrealBloomPass.d.ts.map + +declare const _default: vue.DefineComponent<{ + center: { + type: PropType; + default: () => { + x: number; + y: number; + }; + }; + strength: { + type: NumberConstructor; + default: number; + }; +}, unknown, unknown, {}, {}, vue.ComponentOptionsMixin, vue.DefineComponent<{}, EffectSetupInterface, {}, {}, { + initEffectPass(pass: three_examples_jsm_postprocessing_Pass.Pass): void; +}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, "ready"[], "ready", vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly> & { + onReady?: ((...args: any[]) => any) | undefined; +}, {}>, {}, string, vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, Readonly; + default: () => { + x: number; + y: number; + }; + }; + strength: { + type: NumberConstructor; + default: number; + }; +}>>, { + center: Vector2PropInterface; + strength: number; +}>; +//# sourceMappingURL=ZoomBlurPass.d.ts.map + +type OptionSetter = (dst: any, key: string, value: any) => void; +declare function applyObjectProps(dst: any, options: Record, setter?: OptionSetter): void; +declare function bindObjectProp(src: any, prop: string, dst: any, apply?: boolean, setter?: OptionSetter): WatchStopHandle; +declare function bindObjectProps(src: any, dst: any, apply?: boolean, setter?: OptionSetter): WatchStopHandle; +declare function setFromProp(o: Record, prop: Record): void; +declare function bindProps(src: any, props: string[], dst: any): void; +declare function bindProp(src: any, srcProp: string, dst: any, dstProp?: string): void; +declare function propsValues(props: Record, exclude?: string[]): Record; +declare function lerp(value1: number, value2: number, amount: number): number; +declare function limit(val: number, min: number, max: number): number; +declare function getMatcapUrl(hash?: string, format?: number): string; + +declare const TroisJSVuePlugin: { + install(app: App): void; +}; +declare function createApp(params: any): App; + +interface TextureConfigInterface { + src: string; +} +interface TexturesInterface { + loader: TextureLoader; + count: number; + textures: Texture[]; + loadProgress: number; + loadTextures(images: TextureConfigInterface[], cb: { + (): void; + }): void; + dispose(): void; +} +declare function useTextures(): TexturesInterface; + +export { _default$K as AmbientLight, BasicMaterial, _default$8 as BokehPass, _default$y as Box, _default$10 as BoxGeometry, Geometry as BufferGeometry, _default$15 as Camera, _default$x as Circle, _default$$ as CircleGeometry, ComposerInjectionKey, _default$w as Cone, _default$_ as ConeGeometry, _default$11 as CubeCamera, _default$A as CubeTexture, _default$v as Cylinder, _default$Z as CylinderGeometry, _default$J as DirectionalLight, _default$u as Dodecahedron, _default$Y as DodecahedronGeometry, _default$b as EffectComposer, _default$a as EffectPass, _default$X as ExtrudeGeometry, _default$6 as FXAAPass, _default$c as FbxModel, _default$7 as FilmPass, _default$d as GltfModel, _default$14 as Group, _default$5 as HalftonePass, _default$I as HemisphereLight, _default$t as Icosahedron, _default$W as IcosahedronGeometry, _default$h as Image, _default$g as InstancedMesh, LambertMaterial, _default$s as Lathe, _default$V as LatheGeometry, _default$E as MatcapMaterial, BaseMaterial as Material, MaterialInjectionKey, MaterialPublicInterface, Mesh, MeshInjectionKey, MeshPublicInterface, _default$17 as Object3D, Object3DPublicInterface, _default$r as Octahedron, _default$U as OctahedronGeometry, _default$16 as OrthographicCamera, _default$15 as PerspectiveCamera, PhongMaterial, PhysicalMaterial, _default$q as Plane, _default$T as PlaneGeometry, _default$H as PointLight, _default$e as Points, PointsMaterial, _default$p as Polyhedron, _default$S as PolyhedronGeometry, _default$12 as Raycaster, _default$G as RectAreaLight, _default$9 as RenderPass, _default$18 as Renderer, RendererInjectionKey, RendererPublicInterface, _default$o as Ring, _default$R as RingGeometry, _default$4 as SMAAPass, _default$3 as SSAOPass, _default$13 as Scene, SceneInjectionKey, _default$D as ShaderMaterial, ShadowMaterial, _default$P as ShapeGeometry, _default$n as Sphere, _default$Q as SphereGeometry, _default$F as SpotLight, _default$f as Sprite, StandardMaterial, _default$C as SubSurfaceMaterial, _default$m as Tetrahedron, _default$O as TetrahedronGeometry, _default$l as Text, _default$B as Texture, _default$2 as TiltShiftPass, ToonMaterial, _default$k as Torus, _default$N as TorusGeometry, _default$j as TorusKnot, _default$M as TorusKnotGeometry, TroisJSVuePlugin, _default$i as Tube, _default$L as TubeGeometry, _default$1 as UnrealBloomPass, _default$z as VideoTexture, _default as ZoomBlurPass, applyObjectProps, bindObjectProp, bindObjectProps, bindProp, bindProps, createApp, getMatcapUrl, lerp, limit, propsValues, setFromProp, useTextures }; diff --git a/build/trois.js b/build/trois.js new file mode 100644 index 0000000..28c8ae0 --- /dev/null +++ b/build/trois.js @@ -0,0 +1,3116 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var vue = require('vue'); +var three = require('three'); +var OrbitControls_js = require('three/examples/jsm/controls/OrbitControls.js'); +var RectAreaLightUniformsLib_js = require('three/examples/jsm/lights/RectAreaLightUniformsLib.js'); +var RectAreaLightHelper_js = require('three/examples/jsm/helpers/RectAreaLightHelper.js'); +var TextGeometry_js = require('three/examples/jsm/geometries/TextGeometry.js'); +var FontLoader_js = require('three/examples/jsm/loaders/FontLoader.js'); +var GLTFLoader_js = require('three/examples/jsm/loaders/GLTFLoader.js'); +var FBXLoader_js = require('three/examples/jsm/loaders/FBXLoader.js'); +var EffectComposer_js = require('three/examples/jsm/postprocessing/EffectComposer.js'); +var RenderPass_js = require('three/examples/jsm/postprocessing/RenderPass.js'); +var BokehPass_js = require('three/examples/jsm/postprocessing/BokehPass.js'); +var FilmPass_js = require('three/examples/jsm/postprocessing/FilmPass.js'); +var ShaderPass_js = require('three/examples/jsm/postprocessing/ShaderPass.js'); +var FXAAShader_js = require('three/examples/jsm/shaders/FXAAShader.js'); +var HalftonePass_js = require('three/examples/jsm/postprocessing/HalftonePass.js'); +var SMAAPass_js = require('three/examples/jsm/postprocessing/SMAAPass.js'); +var SSAOPass_js = require('three/examples/jsm/postprocessing/SSAOPass.js'); +var UnrealBloomPass_js = require('three/examples/jsm/postprocessing/UnrealBloomPass.js'); + +function applyObjectProps(dst, options, setter) { + if (options instanceof Object) { + Object.entries(options).forEach(([key, value]) => { + if (setter) + setter(dst, key, value); + else + dst[key] = value; + }); + } +} +function bindObjectProp(src, prop, dst, apply = true, setter) { + if (apply) + applyObjectProps(dst, src[prop], setter); + const r = vue.toRef(src, prop); + return vue.watch(r, (value) => { + applyObjectProps(dst, value, setter); + }); +} +function bindObjectProps(src, dst, apply = true, setter) { + if (apply) + applyObjectProps(dst, src, setter); + const r = vue.ref(src); + return vue.watch(r, (value) => { + applyObjectProps(dst, value, setter); + }, { deep: true }); +} +function setFromProp(o, prop) { + if (prop instanceof Object) { + Object.entries(prop).forEach(([key, value]) => { + o[key] = value; + }); + } +} +function bindProps(src, props, dst) { + props.forEach((prop) => { + bindProp(src, prop, dst, prop); + }); +} +function bindProp(src, srcProp, dst, dstProp) { + const _dstProp = dstProp || srcProp; + const ref2 = vue.toRef(src, srcProp); + if (ref2.value instanceof Object) { + setFromProp(dst[_dstProp], ref2.value); + vue.watch(ref2, (value) => { + setFromProp(dst[_dstProp], value); + }, { deep: true }); + } else { + if (ref2.value !== void 0) + dst[_dstProp] = src[srcProp]; + vue.watch(ref2, (value) => { + dst[_dstProp] = value; + }); + } +} +function propsValues(props, exclude = []) { + const values = {}; + Object.entries(props).forEach(([key, value]) => { + if (!exclude || !exclude.includes(key)) { + values[key] = value; + } + }); + return values; +} +function lerp(value1, value2, amount) { + amount = amount < 0 ? 0 : amount; + amount = amount > 1 ? 1 : amount; + return value1 + (value2 - value1) * amount; +} +function limit(val, min, max) { + return val < min ? min : val > max ? max : val; +} +const MATCAP_ROOT = "https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d"; +const DEFAULT_MATCAP = "0404E8_0404B5_0404CB_3333FC"; +function getMatcapUrl(hash = DEFAULT_MATCAP, format = 1024) { + const fileName = `${hash}${getMatcapFormatString(format)}.png`; + return `${MATCAP_ROOT}/${format}/${fileName}`; +} +function getMatcapFormatString(format) { + switch (format) { + case 64: + return "-64px"; + case 128: + return "-128px"; + case 256: + return "-256px"; + case 512: + return "-512px"; + default: + return ""; + } +} + +function useRaycaster(options) { + const { + camera, + resetPosition = new three.Vector3(0, 0, 0) + } = options; + const raycaster = new three.Raycaster(); + const position = resetPosition.clone(); + const plane = new three.Plane(new three.Vector3(0, 0, 1), 0); + const updatePosition = (coords) => { + raycaster.setFromCamera(coords, camera); + camera.getWorldDirection(plane.normal); + raycaster.ray.intersectPlane(plane, position); + }; + const intersect = (coords, objects, recursive = false) => { + raycaster.setFromCamera(coords, camera); + return raycaster.intersectObjects(objects, recursive); + }; + return { + position, + updatePosition, + intersect + }; +} + +function usePointer(options) { + const { + camera, + domElement, + intersectObjects, + intersectRecursive = false, + touch = true, + resetOnEnd = false, + onEnter = () => { + }, + onMove = () => { + }, + onLeave = () => { + }, + onClick = () => { + }, + onIntersectEnter = () => { + }, + onIntersectOver = () => { + }, + onIntersectMove = () => { + }, + onIntersectLeave = () => { + }, + onIntersectClick = () => { + } + } = options; + const position = new three.Vector2(0, 0); + const positionN = new three.Vector2(0, 0); + const raycaster = useRaycaster({ camera }); + const positionV3 = raycaster.position; + const obj = { + position, + positionN, + positionV3, + intersectObjects, + listeners: false, + addListeners, + removeListeners, + intersect + }; + return obj; + function reset() { + position.set(0, 0); + positionN.set(0, 0); + positionV3.set(0, 0, 0); + } + function updatePosition(event) { + let x, y; + if (event.touches && event.touches.length > 0) { + x = event.touches[0].clientX; + y = event.touches[0].clientY; + } else { + x = event.clientX; + y = event.clientY; + } + const rect = domElement.getBoundingClientRect(); + position.x = x - rect.left; + position.y = y - rect.top; + positionN.x = position.x / rect.width * 2 - 1; + positionN.y = -(position.y / rect.height) * 2 + 1; + raycaster.updatePosition(positionN); + } + function intersect() { + const _intersectObjects = getIntersectObjects(); + if (_intersectObjects.length) { + const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive); + const offObjects = [..._intersectObjects]; + const iMeshes = []; + intersects.forEach((intersect2) => { + var _a, _b, _c; + const { object } = intersect2; + const component = getComponent(object); + if (object instanceof three.InstancedMesh) { + if (iMeshes.indexOf(object) !== -1) + return; + iMeshes.push(object); + } + if (!object.userData.over) { + object.userData.over = true; + const overEvent = { type: "pointerover", over: true, component, intersect: intersect2 }; + const enterEvent = { ...overEvent, type: "pointerenter" }; + onIntersectOver(overEvent); + onIntersectEnter(enterEvent); + (_a = component == null ? void 0 : component.onPointerOver) == null ? void 0 : _a.call(component, overEvent); + (_b = component == null ? void 0 : component.onPointerEnter) == null ? void 0 : _b.call(component, enterEvent); + } + const moveEvent = { type: "pointermove", component, intersect: intersect2 }; + onIntersectMove(moveEvent); + (_c = component == null ? void 0 : component.onPointerMove) == null ? void 0 : _c.call(component, moveEvent); + offObjects.splice(offObjects.indexOf(object), 1); + }); + offObjects.forEach((object) => { + var _a, _b; + const component = getComponent(object); + if (object.userData.over) { + object.userData.over = false; + const overEvent = { type: "pointerover", over: false, component }; + const leaveEvent = { ...overEvent, type: "pointerleave" }; + onIntersectOver(overEvent); + onIntersectLeave(leaveEvent); + (_a = component == null ? void 0 : component.onPointerOver) == null ? void 0 : _a.call(component, overEvent); + (_b = component == null ? void 0 : component.onPointerLeave) == null ? void 0 : _b.call(component, leaveEvent); + } + }); + } + } + function pointerEnter(event) { + updatePosition(event); + onEnter({ type: "pointerenter", position, positionN, positionV3 }); + } + function pointerMove(event) { + updatePosition(event); + onMove({ type: "pointermove", position, positionN, positionV3 }); + intersect(); + } + function pointerClick(event) { + updatePosition(event); + const _intersectObjects = getIntersectObjects(); + if (_intersectObjects.length) { + const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive); + const iMeshes = []; + intersects.forEach((intersect2) => { + var _a; + const { object } = intersect2; + const component = getComponent(object); + if (object instanceof three.InstancedMesh) { + if (iMeshes.indexOf(object) !== -1) + return; + iMeshes.push(object); + } + const event2 = { type: "click", component, intersect: intersect2 }; + onIntersectClick(event2); + (_a = component == null ? void 0 : component.onClick) == null ? void 0 : _a.call(component, event2); + }); + } + onClick({ type: "click", position, positionN, positionV3 }); + } + function pointerLeave() { + if (resetOnEnd) + reset(); + onLeave({ type: "pointerleave" }); + } + function getComponent(object) { + if (object.userData.component) + return object.userData.component; + let parent = object.parent; + while (parent) { + if (parent.userData.component) { + return parent.userData.component; + } + parent = parent.parent; + } + return void 0; + } + function getIntersectObjects() { + if (typeof intersectObjects === "function") { + return intersectObjects(); + } else + return intersectObjects; + } + function addListeners() { + domElement.addEventListener("mouseenter", pointerEnter); + domElement.addEventListener("mousemove", pointerMove); + domElement.addEventListener("mouseleave", pointerLeave); + domElement.addEventListener("click", pointerClick); + if (touch) { + domElement.addEventListener("touchstart", pointerEnter); + domElement.addEventListener("touchmove", pointerMove); + domElement.addEventListener("touchend", pointerLeave); + } + obj.listeners = true; + } + function removeListeners() { + domElement.removeEventListener("mouseenter", pointerEnter); + domElement.removeEventListener("mousemove", pointerMove); + domElement.removeEventListener("mouseleave", pointerLeave); + domElement.removeEventListener("click", pointerClick); + domElement.removeEventListener("touchstart", pointerEnter); + domElement.removeEventListener("touchmove", pointerMove); + domElement.removeEventListener("touchend", pointerLeave); + obj.listeners = false; + } +} + +function useThree(params) { + const config = { + antialias: true, + alpha: false, + autoClear: true, + orbitCtrl: false, + pointer: false, + resize: false, + width: 300, + height: 150 + }; + if (params) { + Object.entries(params).forEach(([key, value]) => { + config[key] = value; + }); + } + const size = { + width: 1, + height: 1, + wWidth: 1, + wHeight: 1, + ratio: 1 + }; + const beforeRenderCallbacks = []; + const intersectObjects = []; + const renderer = createRenderer(); + const obj = { + config, + renderer, + size, + init, + dispose, + render, + renderC, + setSize, + addIntersectObject, + removeIntersectObject + }; + return obj; + function createRenderer() { + const renderer2 = new three.WebGLRenderer({ canvas: config.canvas, antialias: config.antialias, alpha: config.alpha, ...config.params }); + renderer2.autoClear = config.autoClear; + return renderer2; + } + function init() { + if (!obj.scene) { + console.error("Missing Scene"); + return false; + } + if (!obj.camera) { + console.error("Missing Camera"); + return false; + } + if (config.resize) { + onResize(); + window.addEventListener("resize", onResize); + } else if (config.width && config.height) { + setSize(config.width, config.height); + } + initPointer(); + if (config.orbitCtrl) { + const cameraCtrl = new OrbitControls_js.OrbitControls(obj.camera, obj.renderer.domElement); + if (config.orbitCtrl instanceof Object) { + Object.entries(config.orbitCtrl).forEach(([key, value]) => { + cameraCtrl[key] = value; + }); + } + onBeforeRender(() => { + cameraCtrl.update(); + }); + obj.cameraCtrl = cameraCtrl; + } + return true; + } + function initPointer() { + let pointerConf = { + camera: obj.camera, + domElement: obj.renderer.domElement, + intersectObjects + }; + if (config.pointer && config.pointer instanceof Object) { + pointerConf = { ...pointerConf, ...config.pointer }; + } + const pointer = obj.pointer = usePointer(pointerConf); + if (config.pointer || intersectObjects.length) { + pointer.addListeners(); + if (pointerConf.intersectMode === "frame") { + onBeforeRender(pointer.intersect); + } + } + } + function onBeforeRender(cb) { + beforeRenderCallbacks.push(cb); + } + function render() { + beforeRenderCallbacks.forEach((c) => c()); + obj.renderer.render(obj.scene, obj.camera); + } + function renderC() { + beforeRenderCallbacks.forEach((c) => c()); + obj.composer.render(); + } + function addIntersectObject(o) { + if (intersectObjects.indexOf(o) === -1) { + intersectObjects.push(o); + } + if (obj.pointer && !obj.pointer.listeners) { + obj.pointer.addListeners(); + } + } + function removeIntersectObject(o) { + const i = intersectObjects.indexOf(o); + if (i !== -1) { + intersectObjects.splice(i, 1); + } + if (obj.pointer && !config.pointer && intersectObjects.length === 0) { + obj.pointer.removeListeners(); + } + } + function dispose() { + window.removeEventListener("resize", onResize); + if (obj.pointer) + obj.pointer.removeListeners(); + if (obj.cameraCtrl) + obj.cameraCtrl.dispose(); + if (obj.renderer) + obj.renderer.dispose(); + } + function onResize() { + var _a; + if (config.resize === "window") { + setSize(window.innerWidth, window.innerHeight); + } else { + const elt = obj.renderer.domElement.parentNode; + if (elt) + setSize(elt.clientWidth, elt.clientHeight); + } + (_a = config.onResize) == null ? void 0 : _a.call(config, size); + } + function setSize(width, height) { + size.width = width; + size.height = height; + size.ratio = width / height; + obj.renderer.setSize(width, height, false); + const camera = obj.camera; + if (camera.type === "PerspectiveCamera") { + const pCamera = camera; + pCamera.aspect = size.ratio; + pCamera.updateProjectionMatrix(); + } + if (camera.type === "OrthographicCamera") { + const oCamera = camera; + size.wWidth = oCamera.right - oCamera.left; + size.wHeight = oCamera.top - oCamera.bottom; + } else { + const wsize = getCameraSize(); + size.wWidth = wsize[0]; + size.wHeight = wsize[1]; + } + } + function getCameraSize() { + const camera = obj.camera; + const vFOV = camera.fov * Math.PI / 180; + const h = 2 * Math.tan(vFOV / 2) * Math.abs(camera.position.z); + const w = h * camera.aspect; + return [w, h]; + } +} + +const RendererInjectionKey = Symbol("Renderer"); +var Renderer = vue.defineComponent({ + name: "Renderer", + props: { + params: { type: Object, default: () => ({}) }, + antialias: Boolean, + alpha: Boolean, + autoClear: { type: Boolean, default: true }, + orbitCtrl: { type: [Boolean, Object], default: false }, + pointer: { type: [Boolean, Object], default: false }, + resize: { type: [Boolean, String], default: false }, + shadow: Boolean, + width: String, + height: String, + pixelRatio: Number, + xr: Boolean, + props: { type: Object, default: () => ({}) }, + onReady: Function + }, + inheritAttrs: false, + setup(props, { attrs }) { + const initCallbacks = []; + const mountedCallbacks = []; + const beforeRenderCallbacks = []; + const afterRenderCallbacks = []; + const resizeCallbacks = []; + const canvas = document.createElement("canvas"); + Object.entries(attrs).forEach(([key, value]) => { + const matches = key.match(/^on([A-Z][a-zA-Z]*)$/); + if (matches) { + canvas.addEventListener(matches[1].toLowerCase(), value); + } else { + canvas.setAttribute(key, value); + } + }); + const config = { + canvas, + params: props.params, + antialias: props.antialias, + alpha: props.alpha, + autoClear: props.autoClear, + orbitCtrl: props.orbitCtrl, + pointer: props.pointer, + resize: props.resize + }; + if (props.width) + config.width = parseInt(props.width); + if (props.height) + config.height = parseInt(props.height); + const three = useThree(config); + bindObjectProp(props, "props", three.renderer); + vue.watchEffect(() => { + if (props.pixelRatio) + three.renderer.setPixelRatio(props.pixelRatio); + }); + const renderFn = () => { + }; + return { + canvas, + three, + renderer: three.renderer, + size: three.size, + renderFn, + raf: true, + initCallbacks, + mountedCallbacks, + beforeRenderCallbacks, + afterRenderCallbacks, + resizeCallbacks + }; + }, + computed: { + camera: { + get: function() { + return this.three.camera; + }, + set: function(camera) { + this.three.camera = camera; + } + }, + scene: { + get: function() { + return this.three.scene; + }, + set: function(scene) { + this.three.scene = scene; + } + }, + composer: { + get: function() { + return this.three.composer; + }, + set: function(composer) { + this.three.composer = composer; + } + } + }, + provide() { + return { + [RendererInjectionKey]: this + }; + }, + mounted() { + var _a; + this.$el.parentNode.insertBefore(this.canvas, this.$el); + if (this.three.init()) { + if (this.three.pointer) { + this.$pointer = this.three.pointer; + } + this.three.config.onResize = (size) => { + this.resizeCallbacks.forEach((e) => e({ type: "resize", renderer: this, size })); + }; + if (this.shadow) { + this.renderer.shadowMap.enabled = true; + } + this.renderFn = this.three.composer ? this.three.renderC : this.three.render; + this.initCallbacks.forEach((e) => e({ type: "init", renderer: this })); + (_a = this.onReady) == null ? void 0 : _a.call(this, this); + if (this.xr) { + this.renderer.xr.enabled = true; + this.renderer.setAnimationLoop(this.render); + } else { + requestAnimationFrame(this.renderLoop); + } + } + this.mountedCallbacks.forEach((e) => e({ type: "mounted", renderer: this })); + }, + beforeUnmount() { + this.canvas.remove(); + this.beforeRenderCallbacks = []; + this.afterRenderCallbacks = []; + this.raf = false; + this.three.dispose(); + }, + methods: { + onInit(cb) { + this.addListener("init", cb); + }, + onMounted(cb) { + this.addListener("mounted", cb); + }, + onBeforeRender(cb) { + this.addListener("beforerender", cb); + }, + offBeforeRender(cb) { + this.removeListener("beforerender", cb); + }, + onAfterRender(cb) { + this.addListener("afterrender", cb); + }, + offAfterRender(cb) { + this.removeListener("afterrender", cb); + }, + onResize(cb) { + this.addListener("resize", cb); + }, + offResize(cb) { + this.removeListener("resize", cb); + }, + addListener(type, cb) { + const callbacks = this.getCallbacks(type); + callbacks.push(cb); + }, + removeListener(type, cb) { + const callbacks = this.getCallbacks(type); + const index = callbacks.indexOf(cb); + if (index !== -1) + callbacks.splice(index, 1); + }, + getCallbacks(type) { + if (type === "init") { + return this.initCallbacks; + } else if (type === "mounted") { + return this.mountedCallbacks; + } else if (type === "beforerender") { + return this.beforeRenderCallbacks; + } else if (type === "afterrender") { + return this.afterRenderCallbacks; + } else { + return this.resizeCallbacks; + } + }, + render(time) { + this.beforeRenderCallbacks.forEach((e) => e({ type: "beforerender", renderer: this, time })); + this.renderFn({ renderer: this, time }); + this.afterRenderCallbacks.forEach((e) => e({ type: "afterrender", renderer: this, time })); + }, + renderLoop(time) { + if (this.raf) + requestAnimationFrame(this.renderLoop); + this.render(time); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Renderer" +}); + +var Camera = vue.defineComponent({ + props: { + props: { type: Object, default: () => ({}) } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + } +}); +function cameraSetProp(camera, key, value, updateProjectionMatrix = true) { + camera[key] = value; + if (updateProjectionMatrix) + camera.updateProjectionMatrix(); +} + +var OrthographicCamera = vue.defineComponent({ + extends: Camera, + name: "OrthographicCamera", + props: { + left: { type: Number, default: -1 }, + right: { type: Number, default: 1 }, + top: { type: Number, default: 1 }, + bottom: { type: Number, default: -1 }, + near: { type: Number, default: 0.1 }, + far: { type: Number, default: 2e3 }, + zoom: { type: Number, default: 1 }, + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) } + }, + setup(props) { + const renderer = vue.inject(RendererInjectionKey); + if (!renderer) { + console.error("Renderer not found"); + return; + } + const camera = new three.OrthographicCamera(props.left, props.right, props.top, props.bottom, props.near, props.far); + renderer.camera = camera; + bindProp(props, "position", camera); + bindObjectProp(props, "props", camera, true, cameraSetProp); + ["left", "right", "top", "bottom", "near", "far", "zoom"].forEach((p) => { + vue.watch(() => props[p], (value) => { + cameraSetProp(camera, p, value); + }); + }); + return { renderer, camera }; + }, + __hmrId: "OrthographicCamera" +}); + +var PerspectiveCamera = vue.defineComponent({ + extends: Camera, + name: "PerspectiveCamera", + props: { + aspect: { type: Number, default: 1 }, + far: { type: Number, default: 2e3 }, + fov: { type: Number, default: 50 }, + near: { type: Number, default: 0.1 }, + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + lookAt: { type: Object, default: null } + }, + setup(props) { + var _a; + const renderer = vue.inject(RendererInjectionKey); + if (!renderer) { + console.error("Renderer not found"); + return; + } + const camera = new three.PerspectiveCamera(props.fov, props.aspect, props.near, props.far); + renderer.camera = camera; + bindProp(props, "position", camera); + if (props.lookAt) + camera.lookAt((_a = props.lookAt.x) != null ? _a : 0, props.lookAt.y, props.lookAt.z); + vue.watch(() => props.lookAt, (v) => { + var _a2; + camera.lookAt((_a2 = v.x) != null ? _a2 : 0, v.y, v.z); + }, { deep: true }); + bindObjectProp(props, "props", camera, true, cameraSetProp); + ["aspect", "far", "fov", "near"].forEach((p) => { + vue.watch(() => props[p], (value) => { + cameraSetProp(camera, p, value); + }); + }); + return { renderer, camera }; + }, + __hmrId: "PerspectiveCamera" +}); + +const SceneInjectionKey = Symbol("Scene"); +var Scene = vue.defineComponent({ + name: "Scene", + props: { + background: [String, Number, Object] + }, + setup(props) { + const renderer = vue.inject(RendererInjectionKey); + const scene = new three.Scene(); + if (!renderer) { + console.error("Renderer not found"); + return; + } + renderer.scene = scene; + vue.provide(SceneInjectionKey, scene); + const setBackground = (value) => { + if (!value) + return; + if (typeof value === "string" || typeof value === "number") { + if (scene.background instanceof three.Color) + scene.background.set(value); + else + scene.background = new three.Color(value); + } else if (value instanceof three.Texture) { + scene.background = value; + } + }; + setBackground(props.background); + vue.watch(() => props.background, setBackground); + const add = (o) => { + scene.add(o); + }; + const remove = (o) => { + scene.remove(o); + }; + return { scene, add, remove }; + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Scene" +}); + +const pointerProps = { + onPointerEnter: Function, + onPointerOver: Function, + onPointerMove: Function, + onPointerLeave: Function, + onPointerDown: Function, + onPointerUp: Function, + onClick: Function +}; +var Object3D = vue.defineComponent({ + name: "Object3D", + inject: { + renderer: RendererInjectionKey, + scene: SceneInjectionKey + }, + emits: ["created", "ready"], + props: { + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + rotation: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + scale: { type: Object, default: () => ({ x: 1, y: 1, z: 1, order: "XYZ" }) }, + lookAt: { type: Object, default: null }, + userData: { type: Object, default: () => ({}) }, + visible: { type: Boolean, default: true }, + props: { type: Object, default: () => ({}) }, + disableAdd: { type: Boolean, default: false }, + disableRemove: { type: Boolean, default: false }, + ...pointerProps + }, + setup() { + return {}; + }, + created() { + if (!this.renderer) { + console.error("Missing parent Renderer"); + } + if (!this.scene) { + console.error("Missing parent Scene"); + } + }, + unmounted() { + if (!this.disableRemove) + this.removeFromParent(); + if (this.o3d) { + if (this.renderer) + this.renderer.three.removeIntersectObject(this.o3d); + } + }, + methods: { + initObject3D(o3d) { + var _a; + this.o3d = o3d; + o3d.userData.component = this; + if (this.onPointerEnter || this.onPointerOver || this.onPointerMove || this.onPointerLeave || this.onPointerDown || this.onPointerUp || this.onClick) { + if (this.renderer) + this.renderer.three.addIntersectObject(o3d); + } + bindProp(this, "position", o3d); + bindProp(this, "rotation", o3d); + bindProp(this, "scale", o3d); + bindProp(this, "userData", o3d.userData); + bindProp(this, "visible", o3d); + bindObjectProp(this, "props", o3d); + this.$emit("created", o3d); + if (this.lookAt) + o3d.lookAt((_a = this.lookAt.x) != null ? _a : 0, this.lookAt.y, this.lookAt.z); + vue.watch(() => this.lookAt, (v) => { + var _a2; + o3d.lookAt((_a2 = v.x) != null ? _a2 : 0, v.y, v.z); + }, { deep: true }); + this.parent = this.getParent(); + if (!this.disableAdd) { + if (this.addToParent()) + this.$emit("ready", this); + else + console.error("Missing parent (Scene, Group...)"); + } + }, + getParent() { + let parent = this.$parent; + if (!parent) { + const instance = vue.getCurrentInstance(); + if (instance && instance.parent) + parent = instance.parent.ctx; + } + while (parent) { + if (parent.add) + return parent; + parent = parent.$parent; + } + return void 0; + }, + addToParent(o) { + const o3d = o || this.o3d; + if (this.parent) { + this.parent.add(o3d); + return true; + } + return false; + }, + removeFromParent(o) { + const o3d = o || this.o3d; + if (this.parent) { + this.parent.remove(o3d); + return true; + } + return false; + }, + add(o) { + var _a; + (_a = this.o3d) == null ? void 0 : _a.add(o); + }, + remove(o) { + var _a; + (_a = this.o3d) == null ? void 0 : _a.remove(o); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Object3D" +}); + +var Group = vue.defineComponent({ + name: "Group", + extends: Object3D, + setup() { + return { + group: new three.Group() + }; + }, + created() { + this.initObject3D(this.group); + }, + __hmrId: "Group" +}); + +const emptyCallBack = () => { +}; +var Raycaster = vue.defineComponent({ + name: "Raycaster", + props: { + onPointerEnter: { type: Function, default: emptyCallBack }, + onPointerOver: { type: Function, default: emptyCallBack }, + onPointerMove: { type: Function, default: emptyCallBack }, + onPointerLeave: { type: Function, default: emptyCallBack }, + onClick: { type: Function, default: emptyCallBack }, + intersectMode: { type: String, default: "move" }, + intersectRecursive: { type: Boolean, default: false } + }, + setup() { + const renderer = vue.inject(RendererInjectionKey); + return { renderer }; + }, + mounted() { + if (!this.renderer) { + console.error("Renderer not found"); + return; + } + const renderer = this.renderer; + this.renderer.onMounted(() => { + if (!renderer.camera) + return; + this.pointer = usePointer({ + camera: renderer.camera, + domElement: renderer.canvas, + intersectObjects: () => renderer.scene ? renderer.scene.children : [], + intersectRecursive: this.intersectRecursive, + onIntersectEnter: this.onPointerEnter, + onIntersectOver: this.onPointerOver, + onIntersectMove: this.onPointerMove, + onIntersectLeave: this.onPointerLeave, + onIntersectClick: this.onClick + }); + this.pointer.addListeners(); + if (this.intersectMode === "frame") { + renderer.onBeforeRender(this.pointer.intersect); + } + }); + }, + unmounted() { + var _a; + if (this.pointer) { + this.pointer.removeListeners(); + (_a = this.renderer) == null ? void 0 : _a.offBeforeRender(this.pointer.intersect); + } + }, + render() { + return []; + }, + __hmrId: "Raycaster" +}); + +var CubeCamera = vue.defineComponent({ + extends: Object3D, + props: { + cubeRTSize: { type: Number, default: 256 }, + cubeCameraNear: { type: Number, default: 0.1 }, + cubeCameraFar: { type: Number, default: 2e3 }, + autoUpdate: Boolean, + hideMeshes: { type: Array, default: () => [] } + }, + setup(props) { + const rendererC = vue.inject(RendererInjectionKey); + if (!rendererC || !rendererC.scene) { + console.error("Missing Renderer / Scene"); + return {}; + } + const renderer = rendererC.renderer, scene = rendererC.scene; + const cubeRT = new three.WebGLCubeRenderTarget(props.cubeRTSize, { format: three.RGBAFormat, generateMipmaps: true, minFilter: three.LinearMipmapLinearFilter }); + const cubeCamera = new three.CubeCamera(props.cubeCameraNear, props.cubeCameraFar, cubeRT); + const updateRT = () => { + props.hideMeshes.forEach((m) => { + m.visible = false; + }); + cubeCamera.update(renderer, scene); + props.hideMeshes.forEach((m) => { + m.visible = true; + }); + }; + if (props.autoUpdate) { + rendererC.onBeforeRender(updateRT); + vue.onUnmounted(() => { + rendererC.offBeforeRender(updateRT); + }); + } else { + rendererC.onMounted(updateRT); + } + return { cubeRT, cubeCamera, updateRT }; + }, + created() { + if (this.cubeCamera) + this.initObject3D(this.cubeCamera); + }, + render() { + return []; + }, + __hmrId: "CubeCamera" +}); + +const MeshInjectionKey = Symbol("Mesh"); +const Mesh = vue.defineComponent({ + name: "Mesh", + extends: Object3D, + props: { + castShadow: Boolean, + receiveShadow: Boolean + }, + setup() { + return {}; + }, + provide() { + return { + [MeshInjectionKey]: this + }; + }, + mounted() { + if (!this.mesh && !this.loading) + this.initMesh(); + }, + methods: { + initMesh() { + const mesh = new three.Mesh(this.geometry, this.material); + bindProp(this, "castShadow", mesh); + bindProp(this, "receiveShadow", mesh); + this.mesh = mesh; + this.initObject3D(mesh); + }, + createGeometry() { + }, + addGeometryWatchers(props) { + Object.keys(props).forEach((prop) => { + vue.watch(() => this[prop], () => { + this.refreshGeometry(); + }); + }); + }, + setGeometry(geometry) { + this.geometry = geometry; + if (this.mesh) + this.mesh.geometry = geometry; + }, + setMaterial(material) { + if (Array.isArray(material) || !this.material) { + this.material = material; + if (this.mesh) + this.mesh.material = material; + } else { + let prev = this.material; + if (Array.isArray(prev)) { + prev.push(material); + } else { + prev = [prev, material]; + } + this.material = prev; + if (this.mesh) + this.mesh.material = prev; + } + }, + refreshGeometry() { + const oldGeo = this.geometry; + this.createGeometry(); + if (this.mesh && this.geometry) + this.mesh.geometry = this.geometry; + oldGeo == null ? void 0 : oldGeo.dispose(); + } + }, + unmounted() { + if (this.geometry) + this.geometry.dispose(); + if (this.material) { + if (Array.isArray(this.material)) { + for (const m of this.material) + m.dispose(); + } else { + this.material.dispose(); + } + } + }, + __hmrId: "Mesh" +}); +function meshComponent(name, props, createGeometry) { + return vue.defineComponent({ + name, + extends: Mesh, + props, + created() { + this.createGeometry(); + this.addGeometryWatchers(props); + }, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + } + } + }); +} + +const Geometry = vue.defineComponent({ + emits: ["created"], + props: { + rotateX: Number, + rotateY: Number, + rotateZ: Number, + attributes: { type: Array, default: () => [] } + }, + inject: { + mesh: MeshInjectionKey + }, + setup() { + return {}; + }, + created() { + if (!this.mesh) { + console.error("Missing parent Mesh"); + return; + } + this.createGeometry(); + this.rotateGeometry(); + if (this.geometry) + this.mesh.setGeometry(this.geometry); + Object.keys(this.$props).forEach((prop) => { + vue.watch(() => this[prop], this.refreshGeometry); + }); + }, + unmounted() { + var _a; + (_a = this.geometry) == null ? void 0 : _a.dispose(); + }, + methods: { + createGeometry() { + const bufferAttributes = {}; + const geometry = new three.BufferGeometry(); + this.attributes.forEach((attribute) => { + if (attribute.name && attribute.itemSize && attribute.array) { + const bufferAttribute = bufferAttributes[attribute.name] = new three.BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized); + geometry.setAttribute(attribute.name, bufferAttribute); + } + }); + geometry.computeBoundingBox(); + geometry.userData.component = this; + this.geometry = geometry; + this.$emit("created", geometry); + }, + rotateGeometry() { + if (!this.geometry) + return; + if (this.rotateX) + this.geometry.rotateX(this.rotateX); + if (this.rotateY) + this.geometry.rotateY(this.rotateY); + if (this.rotateZ) + this.geometry.rotateZ(this.rotateZ); + }, + refreshGeometry() { + const oldGeo = this.geometry; + this.createGeometry(); + this.rotateGeometry(); + if (this.geometry && this.mesh) + this.mesh.setGeometry(this.geometry); + oldGeo == null ? void 0 : oldGeo.dispose(); + } + }, + render() { + return []; + } +}); +function geometryComponent(name, props, createGeometry) { + return vue.defineComponent({ + name, + extends: Geometry, + props, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + this.geometry.userData.component = this; + this.$emit("created", this.geometry); + } + } + }); +} + +const props$n = { + size: Number, + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + depth: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + depthSegments: { type: Number, default: 1 } +}; +function createGeometry$h(comp) { + if (comp.size) { + return new three.BoxGeometry(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } else { + return new three.BoxGeometry(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } +} +var BoxGeometry = geometryComponent("BoxGeometry", props$n, createGeometry$h); + +const props$m = { + radius: { type: Number, default: 1 }, + segments: { type: Number, default: 8 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$g(comp) { + return new three.CircleGeometry(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength); +} +var CircleGeometry = geometryComponent("CircleGeometry", props$m, createGeometry$g); + +const props$l = { + radius: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$f(comp) { + return new three.ConeGeometry(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var ConeGeometry = geometryComponent("ConeGeometry", props$l, createGeometry$f); + +const props$k = { + radiusTop: { type: Number, default: 1 }, + radiusBottom: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$e(comp) { + return new three.CylinderGeometry(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var CylinderGeometry = geometryComponent("CylinderGeometry", props$k, createGeometry$e); + +const props$j = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$d(comp) { + return new three.DodecahedronGeometry(comp.radius, comp.detail); +} +var DodecahedronGeometry = geometryComponent("DodecahedronGeometry", props$j, createGeometry$d); + +const props$i = { + shapes: { type: [Object, Array] }, + options: { type: Object } +}; +function createGeometry$c(comp) { + return new three.ExtrudeGeometry(comp.shapes, comp.options); +} +var ExtrudeGeometry = geometryComponent("ExtrudeGeometry", props$i, createGeometry$c); + +const props$h = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$b(comp) { + return new three.IcosahedronGeometry(comp.radius, comp.detail); +} +var IcosahedronGeometry = geometryComponent("IcosahedronGeometry", props$h, createGeometry$b); + +const props$g = { + points: Array, + segments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$a(comp) { + return new three.LatheGeometry(comp.points, comp.segments, comp.phiStart, comp.phiLength); +} +var LatheGeometry = geometryComponent("LatheGeometry", props$g, createGeometry$a); + +const props$f = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$9(comp) { + return new three.OctahedronGeometry(comp.radius, comp.detail); +} +var OctahedronGeometry = geometryComponent("OctahedronGeometry", props$f, createGeometry$9); + +const props$e = { + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 } +}; +function createGeometry$8(comp) { + return new three.PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments); +} +var PlaneGeometry = geometryComponent("PlaneGeometry", props$e, createGeometry$8); + +const props$d = { + vertices: Array, + indices: Array, + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$7(comp) { + return new three.PolyhedronGeometry(comp.vertices, comp.indices, comp.radius, comp.detail); +} +var PolyhedronGeometry = geometryComponent("PolyhedronGeometry", props$d, createGeometry$7); + +const props$c = { + innerRadius: { type: Number, default: 0.5 }, + outerRadius: { type: Number, default: 1 }, + thetaSegments: { type: Number, default: 8 }, + phiSegments: { type: Number, default: 1 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$6(comp) { + return new three.RingGeometry(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength); +} +var RingGeometry = geometryComponent("RingGeometry", props$c, createGeometry$6); + +const props$b = { + radius: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 12 }, + heightSegments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI } +}; +function createGeometry$5(comp) { + return new three.SphereGeometry(comp.radius, comp.widthSegments, comp.heightSegments, comp.phiStart, comp.phiLength, comp.thetaStart, comp.thetaLength); +} +var SphereGeometry = geometryComponent("SphereGeometry", props$b, createGeometry$5); + +const props$a = { + shapes: { type: [Object, Array] }, + curveSegments: { type: Number } +}; +function createGeometry$4(comp) { + return new three.ShapeGeometry(comp.shapes, comp.curveSegments); +} +var ShapeGeometry = geometryComponent("ShapeGeometry", props$a, createGeometry$4); + +const props$9 = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$3(comp) { + return new three.TetrahedronGeometry(comp.radius, comp.detail); +} +var TetrahedronGeometry = geometryComponent("TetrahedronGeometry", props$9, createGeometry$3); + +const props$8 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + radialSegments: { type: Number, default: 8 }, + tubularSegments: { type: Number, default: 6 }, + arc: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$2(comp) { + return new three.TorusGeometry(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc); +} +var TorusGeometry = geometryComponent("TorusGeometry", props$8, createGeometry$2); + +const props$7 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + tubularSegments: { type: Number, default: 64 }, + radialSegments: { type: Number, default: 8 }, + p: { type: Number, default: 2 }, + q: { type: Number, default: 3 } +}; +function createGeometry$1(comp) { + return new three.TorusKnotGeometry(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q); +} +var TorusKnotGeometry = geometryComponent("TorusKnotGeometry", props$7, createGeometry$1); + +const props$6 = { + points: Array, + path: three.Curve, + tubularSegments: { type: Number, default: 64 }, + radius: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + closed: { type: Boolean, default: false } +}; +function createGeometry(comp) { + let curve; + if (comp.points) { + curve = new three.CatmullRomCurve3(comp.points); + } else if (comp.path) { + curve = comp.path; + } else { + console.error("Missing path curve or points."); + } + return new three.TubeGeometry(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed); +} +var TubeGeometry = vue.defineComponent({ + extends: Geometry, + props: props$6, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); + } + } +}); +function updateTubeGeometryPoints(tube, points) { + const curve = new three.CatmullRomCurve3(points); + const { radialSegments, radius, tubularSegments, closed } = tube.parameters; + const frames = curve.computeFrenetFrames(tubularSegments, closed); + tube.tangents = frames.tangents; + tube.normals = frames.normals; + tube.binormals = frames.binormals; + tube.parameters.path = curve; + const pAttribute = tube.getAttribute("position"); + const nAttribute = tube.getAttribute("normal"); + const normal = new three.Vector3(); + const P = new three.Vector3(); + for (let i = 0; i < tubularSegments; i++) { + updateSegment(i); + } + updateSegment(tubularSegments); + tube.attributes.position.needsUpdate = true; + tube.attributes.normal.needsUpdate = true; + function updateSegment(i) { + curve.getPointAt(i / tubularSegments, P); + const N = frames.normals[i]; + const B = frames.binormals[i]; + for (let j = 0; j <= radialSegments; j++) { + const v = j / radialSegments * Math.PI * 2; + const sin = Math.sin(v); + const cos = -Math.cos(v); + normal.x = cos * N.x + sin * B.x; + normal.y = cos * N.y + sin * B.y; + normal.z = cos * N.z + sin * B.z; + normal.normalize(); + const index = i * (radialSegments + 1) + j; + nAttribute.setXYZ(index, normal.x, normal.y, normal.z); + pAttribute.setXYZ(index, P.x + radius * normal.x, P.y + radius * normal.y, P.z + radius * normal.z); + } + } +} + +var Light = vue.defineComponent({ + extends: Object3D, + name: "Light", + props: { + color: { type: String, default: "#ffffff" }, + intensity: { type: Number, default: 1 }, + castShadow: { type: Boolean, default: false }, + shadowMapSize: { type: Object, default: () => ({ x: 512, y: 512 }) }, + shadowCamera: { type: Object, default: () => ({}) } + }, + setup() { + return {}; + }, + unmounted() { + if (this.light instanceof three.SpotLight || this.light instanceof three.DirectionalLight) { + this.removeFromParent(this.light.target); + } + }, + methods: { + initLight(light) { + this.light = light; + if (light.shadow) { + light.castShadow = this.castShadow; + setFromProp(light.shadow.mapSize, this.shadowMapSize); + setFromProp(light.shadow.camera, this.shadowCamera); + } + ["color", "intensity", "castShadow"].forEach((p) => { + vue.watch(() => this[p], (value) => { + if (p === "color") { + light.color.set(value); + } else { + light[p] = value; + } + }); + }); + this.initObject3D(light); + if (light instanceof three.SpotLight || light instanceof three.DirectionalLight) { + bindProp(this, "target", light.target, "position"); + this.addToParent(light.target); + } + } + }, + __hmrId: "Light" +}); + +var AmbientLight = vue.defineComponent({ + extends: Light, + created() { + this.initLight(new three.AmbientLight(this.color, this.intensity)); + }, + __hmrId: "AmbientLight" +}); + +var DirectionalLight = vue.defineComponent({ + extends: Light, + props: { + target: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) } + }, + created() { + this.initLight(new three.DirectionalLight(this.color, this.intensity)); + }, + __hmrId: "DirectionalLight" +}); + +var HemisphereLight = vue.defineComponent({ + extends: Light, + props: { + groundColor: { type: String, default: "#444444" } + }, + created() { + const light = new three.HemisphereLight(this.color, this.groundColor, this.intensity); + vue.watch(() => this.groundColor, (value) => { + light.groundColor.set(value); + }); + this.initLight(light); + }, + __hmrId: "HemisphereLight" +}); + +var PointLight = vue.defineComponent({ + extends: Light, + props: { + distance: { type: Number, default: 0 }, + decay: { type: Number, default: 1 } + }, + created() { + this.initLight(new three.PointLight(this.color, this.intensity, this.distance, this.decay)); + }, + __hmrId: "PointLight" +}); + +var RectAreaLight = vue.defineComponent({ + extends: Light, + props: { + width: { type: Number, default: 10 }, + height: { type: Number, default: 10 }, + helper: Boolean + }, + created() { + RectAreaLightUniformsLib_js.RectAreaLightUniformsLib.init(); + const light = new three.RectAreaLight(this.color, this.intensity, this.width, this.height); + const watchProps = ["width", "height"]; + watchProps.forEach((p) => { + vue.watch(() => this[p], (value) => { + light[p] = value; + }); + }); + if (this.helper) { + const lightHelper = new RectAreaLightHelper_js.RectAreaLightHelper(light); + light.add(lightHelper); + } + this.initLight(light); + }, + __hmrId: "RectAreaLight" +}); + +var SpotLight = vue.defineComponent({ + extends: Light, + props: { + angle: { type: Number, default: Math.PI / 3 }, + decay: { type: Number, default: 1 }, + distance: { type: Number, default: 0 }, + penumbra: { type: Number, default: 0 }, + target: Object + }, + created() { + const light = new three.SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay); + const watchProps = ["angle", "decay", "distance", "penumbra"]; + watchProps.forEach((p) => { + vue.watch(() => this[p], (value) => { + light[p] = value; + }); + }); + this.initLight(light); + }, + __hmrId: "SpotLight" +}); + +const MaterialInjectionKey = Symbol("Material"); +const BaseMaterial = vue.defineComponent({ + emits: ["created"], + props: { + color: { type: String, default: "#ffffff" }, + props: { type: Object, default: () => ({}) } + }, + inject: { + mesh: MeshInjectionKey + }, + setup() { + return {}; + }, + provide() { + return { + [MaterialInjectionKey]: this + }; + }, + created() { + if (!this.mesh) { + console.error("Missing parent Mesh"); + return; + } + if (this.createMaterial) { + const material = this.material = this.createMaterial(); + vue.watch(() => this.color, (value) => { + material.color.set(value); + }); + bindObjectProp(this, "props", material, false, this.setProp); + this.$emit("created", material); + this.mesh.setMaterial(material); + } + }, + unmounted() { + var _a; + (_a = this.material) == null ? void 0 : _a.dispose(); + }, + methods: { + getMaterialParams() { + return { ...propsValues(this.$props, ["props"]), ...this.props }; + }, + setProp(material, key, value, needsUpdate = false) { + const dstVal = material[key]; + if (dstVal instanceof three.Color) + dstVal.set(value); + else + material[key] = value; + material.needsUpdate = needsUpdate; + }, + setTexture(texture, key = "map") { + this.setProp(this.material, key, texture, true); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Material" +}); +function materialComponent(name, props, createMaterial) { + return vue.defineComponent({ + name, + extends: BaseMaterial, + props, + methods: { + createMaterial() { + return createMaterial(this.getMaterialParams()); + } + } + }); +} +const BasicMaterial = materialComponent("BasicMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new three.MeshBasicMaterial(opts)); +const LambertMaterial = materialComponent("LambertMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new three.MeshLambertMaterial(opts)); +const PhongMaterial = materialComponent("PhongMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new three.MeshPhongMaterial(opts)); +const PhysicalMaterial = materialComponent("PhysicalMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new three.MeshPhysicalMaterial(opts)); +const PointsMaterial = materialComponent("PointsMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new three.PointsMaterial(opts)); +const ShadowMaterial = materialComponent("ShadowMaterial", { color: { type: String, default: "#000000" }, props: { type: Object, default: () => ({}) } }, (opts) => new three.ShadowMaterial(opts)); +const StandardMaterial = materialComponent("StandardMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new three.MeshStandardMaterial(opts)); +const ToonMaterial = materialComponent("ToonMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new three.MeshToonMaterial(opts)); + +var MatcapMaterial = materialComponent( + "MatcapMaterial", + { + src: String, + name: { type: String, default: "0404E8_0404B5_0404CB_3333FC" } + }, + (opts) => { + const src = opts.src ? opts.src : getMatcapUrl(opts.name); + const params = propsValues(opts, ["src", "name"]); + params.matcap = new three.TextureLoader().load(src); + return new three.MeshMatcapMaterial(params); + } +); + +const defaultVertexShader = ` + varying vec2 vUv; + void main(){ + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); + } +`; +const defaultFragmentShader = ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0); + } +`; +var ShaderMaterial = materialComponent( + "ShaderMaterial", + { + props: { type: Object, default: () => ({ + uniforms: {}, + vertexShader: defaultVertexShader, + fragmentShader: defaultFragmentShader + }) } + }, + (opts) => new three.ShaderMaterial(propsValues(opts, ["color"])) +); + +function replaceAll(string, find, replace) { + return string.split(find).join(replace); +} +const meshphongFragHead = three.ShaderChunk.meshphong_frag.slice(0, three.ShaderChunk.meshphong_frag.indexOf("void main() {")); +const meshphongFragBody = three.ShaderChunk.meshphong_frag.slice(three.ShaderChunk.meshphong_frag.indexOf("void main() {")); +const SubsurfaceScatteringShader = { + uniforms: three.UniformsUtils.merge([ + three.ShaderLib.phong.uniforms, + { + thicknessColor: { value: new three.Color(16777215) }, + thicknessDistortion: { value: 0.1 }, + thicknessAmbient: { value: 0 }, + thicknessAttenuation: { value: 0.1 }, + thicknessPower: { value: 2 }, + thicknessScale: { value: 10 } + } + ]), + vertexShader: ` + #define USE_UV + ${three.ShaderChunk.meshphong_vert} + `, + fragmentShader: ` + #define USE_UV + #define SUBSURFACE + + ${meshphongFragHead} + + uniform float thicknessPower; + uniform float thicknessScale; + uniform float thicknessDistortion; + uniform float thicknessAmbient; + uniform float thicknessAttenuation; + uniform vec3 thicknessColor; + + void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { + #ifdef USE_COLOR + vec3 thickness = vColor * thicknessColor; + #else + vec3 thickness = thicknessColor; + #endif + vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); + float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; + vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; + reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; + } + ` + meshphongFragBody.replace( + "#include ", + replaceAll( + three.ShaderChunk.lights_fragment_begin, + "RE_Direct( directLight, geometry, material, reflectedLight );", + ` + RE_Direct( directLight, geometry, material, reflectedLight ); + #if defined( SUBSURFACE ) && defined( USE_UV ) + RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); + #endif + ` + ) + ) +}; + +var SubSurfaceMaterial = vue.defineComponent({ + extends: BaseMaterial, + props: { + uniforms: { type: Object, default: () => ({ + diffuse: "#ffffff", + thicknessColor: "#ffffff", + thicknessDistortion: 0.4, + thicknessAmbient: 0.01, + thicknessAttenuation: 0.7, + thicknessPower: 2, + thicknessScale: 4 + }) } + }, + methods: { + createMaterial() { + const params = SubsurfaceScatteringShader; + const uniforms = three.UniformsUtils.clone(params.uniforms); + bindObjectProp(this, "uniforms", uniforms, true, (dst, key, value) => { + const dstVal = dst[key].value; + if (dstVal instanceof three.Color) + dstVal.set(value); + else + dst[key].value = value; + }); + const material = new three.ShaderMaterial({ + ...params, + lights: true, + ...this.props, + uniforms + }); + return material; + } + } +}); + +var Texture = vue.defineComponent({ + inject: { + material: MaterialInjectionKey + }, + props: { + name: { type: String, default: "map" }, + uniform: String, + src: String, + onLoad: Function, + onProgress: Function, + onError: Function, + props: { type: Object, default: () => ({}) } + }, + setup() { + return {}; + }, + created() { + this.refreshTexture(); + vue.watch(() => this.src, this.refreshTexture); + }, + unmounted() { + var _a, _b; + (_a = this.material) == null ? void 0 : _a.setTexture(null, this.name); + (_b = this.texture) == null ? void 0 : _b.dispose(); + }, + methods: { + createTexture() { + if (!this.src) + return void 0; + return new three.TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError); + }, + initTexture() { + if (!this.texture) + return; + bindObjectProp(this, "props", this.texture); + if (!this.material) + return; + this.material.setTexture(this.texture, this.name); + if (this.material.material instanceof three.ShaderMaterial && this.uniform) { + this.material.material.uniforms[this.uniform] = { value: this.texture }; + } + }, + refreshTexture() { + var _a; + (_a = this.texture) == null ? void 0 : _a.dispose(); + this.texture = this.createTexture(); + this.initTexture(); + }, + onLoaded(t) { + var _a; + (_a = this.onLoad) == null ? void 0 : _a.call(this, t); + } + }, + render() { + return []; + } +}); + +var CubeTexture = vue.defineComponent({ + extends: Texture, + props: { + name: { type: String, default: "envMap" }, + path: { type: String, required: true }, + urls: { + type: Array, + default: () => ["px.jpg", "nx.jpg", "py.jpg", "ny.jpg", "pz.jpg", "nz.jpg"] + }, + props: { type: Object, default: () => ({ mapping: three.CubeReflectionMapping }) } + }, + created() { + vue.watch(() => this.path, this.refreshTexture); + vue.watch(() => this.urls, this.refreshTexture); + }, + methods: { + createTexture() { + return new three.CubeTextureLoader().setPath(this.path).load(this.urls, this.onLoaded, this.onProgress, this.onError); + } + } +}); + +var VideoTexture = vue.defineComponent({ + extends: Texture, + props: { + videoId: { + type: String, + required: true + } + }, + created() { + vue.watch(() => this.videoId, this.refreshTexture); + }, + methods: { + createTexture() { + const video = document.getElementById(this.videoId); + return new three.VideoTexture(video); + } + } +}); + +var Box = meshComponent("Box", props$n, createGeometry$h); + +var Circle = meshComponent("Circle", props$m, createGeometry$g); + +var Cone = meshComponent("Cone", props$l, createGeometry$f); + +var Cylinder = meshComponent("Cylinder", props$k, createGeometry$e); + +var Dodecahedron = meshComponent("Dodecahedron", props$j, createGeometry$d); + +var Icosahedron = meshComponent("Icosahedron", props$h, createGeometry$b); + +var Lathe = meshComponent("Lathe", props$g, createGeometry$a); + +var Octahedron = meshComponent("Octahedron", props$f, createGeometry$9); + +var Plane = meshComponent("Plane", props$e, createGeometry$8); + +var Polyhedron = meshComponent("Polyhedron", props$d, createGeometry$7); + +var Ring = meshComponent("Ring", props$c, createGeometry$6); + +var Sphere = meshComponent("Sphere", props$b, createGeometry$5); + +var Tetrahedron = meshComponent("Tetrahedron", props$9, createGeometry$3); + +const props$5 = { + text: { type: String, required: true, default: "Text" }, + fontSrc: { type: String, required: true }, + size: { type: Number, default: 80 }, + height: { type: Number, default: 5 }, + depth: { type: Number, default: 1 }, + curveSegments: { type: Number, default: 12 }, + bevelEnabled: { type: Boolean, default: false }, + bevelThickness: { type: Number, default: 10 }, + bevelSize: { type: Number, default: 8 }, + bevelOffset: { type: Number, default: 0 }, + bevelSegments: { type: Number, default: 5 }, + align: { type: [Boolean, String], default: false } +}; +var Text = vue.defineComponent({ + extends: Mesh, + props: props$5, + setup() { + return {}; + }, + created() { + if (!this.fontSrc) { + console.error('Missing required prop: "font-src"'); + return; + } + const watchProps = [ + "text", + "size", + "height", + "curveSegments", + "bevelEnabled", + "bevelThickness", + "bevelSize", + "bevelOffset", + "bevelSegments", + "align" + ]; + watchProps.forEach((p) => { + vue.watch(() => this[p], () => { + if (this.font) + this.refreshGeometry(); + }); + }); + const loader = new FontLoader_js.FontLoader(); + this.loading = true; + loader.load(this.fontSrc, (font) => { + this.loading = false; + this.font = font; + this.createGeometry(); + this.initMesh(); + }); + }, + methods: { + createGeometry() { + this.geometry = new TextGeometry_js.TextGeometry(this.text, { + font: this.font, + size: this.size, + height: this.height, + depth: this.depth, + curveSegments: this.curveSegments, + bevelEnabled: this.bevelEnabled, + bevelThickness: this.bevelThickness, + bevelSize: this.bevelSize, + bevelOffset: this.bevelOffset, + bevelSegments: this.bevelSegments + }); + if (this.align === "center") { + this.geometry.center(); + } + } + } +}); + +var Torus = meshComponent("Torus", props$8, createGeometry$2); + +var TorusKnot = meshComponent("TorusKnot", props$7, createGeometry$1); + +var Tube = vue.defineComponent({ + extends: Mesh, + props: props$6, + created() { + this.createGeometry(); + this.addGeometryWatchers(props$6); + }, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); + } + }, + __hmrId: "Tube" +}); + +var Image = vue.defineComponent({ + emits: ["loaded"], + extends: Mesh, + props: { + src: { type: String, required: true }, + width: Number, + height: Number, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + keepSize: Boolean + }, + setup() { + return {}; + }, + created() { + if (!this.renderer) + return; + this.geometry = new three.PlaneGeometry(1, 1, this.widthSegments, this.heightSegments); + this.material = new three.MeshBasicMaterial({ side: three.DoubleSide, map: this.loadTexture() }); + vue.watch(() => this.src, this.refreshTexture); + ["width", "height"].forEach((p) => { + vue.watch(() => this[p], this.resize); + }); + this.resize(); + if (this.keepSize) + this.renderer.onResize(this.resize); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.offResize(this.resize); + }, + methods: { + loadTexture() { + return new three.TextureLoader().load(this.src, this.onLoaded); + }, + refreshTexture() { + var _a; + (_a = this.texture) == null ? void 0 : _a.dispose(); + if (this.material) { + this.material.map = this.loadTexture(); + this.material.needsUpdate = true; + } + }, + onLoaded(texture) { + this.texture = texture; + this.resize(); + this.$emit("loaded", texture); + }, + resize() { + if (!this.renderer || !this.texture) + return; + const screen = this.renderer.size; + const iW = this.texture.image.width; + const iH = this.texture.image.height; + const iRatio = iW / iH; + let w = 1, h = 1; + if (this.width && this.height) { + w = this.width * screen.wWidth / screen.width; + h = this.height * screen.wHeight / screen.height; + } else if (this.width) { + w = this.width * screen.wWidth / screen.width; + h = w / iRatio; + } else if (this.height) { + h = this.height * screen.wHeight / screen.height; + w = h * iRatio; + } else { + if (iRatio > 1) + w = h * iRatio; + else + h = w / iRatio; + } + if (this.mesh) { + this.mesh.scale.x = w; + this.mesh.scale.y = h; + } + } + }, + __hmrId: "Image" +}); + +var InstancedMesh = vue.defineComponent({ + extends: Mesh, + props: { + count: { type: Number, required: true } + }, + methods: { + initMesh() { + if (!this.renderer) + return; + if (!this.geometry || !this.material) { + console.error("Missing geometry and/or material"); + return false; + } + this.mesh = new three.InstancedMesh(this.geometry, this.material, this.count); + this.mesh.userData.component = this; + bindProp(this, "castShadow", this.mesh); + bindProp(this, "receiveShadow", this.mesh); + if (this.onPointerEnter || this.onPointerOver || this.onPointerMove || this.onPointerLeave || this.onPointerDown || this.onPointerUp || this.onClick) { + this.renderer.three.addIntersectObject(this.mesh); + } + this.initObject3D(this.mesh); + } + }, + __hmrId: "InstancedMesh" +}); + +var Sprite = vue.defineComponent({ + extends: Object3D, + emits: ["loaded"], + props: { + src: { type: String, required: true } + }, + setup() { + return {}; + }, + created() { + this.texture = new three.TextureLoader().load(this.src, this.onLoaded); + this.material = new three.SpriteMaterial({ map: this.texture }); + this.sprite = new three.Sprite(this.material); + this.initObject3D(this.sprite); + }, + unmounted() { + var _a, _b; + (_a = this.texture) == null ? void 0 : _a.dispose(); + (_b = this.material) == null ? void 0 : _b.dispose(); + }, + methods: { + onLoaded() { + this.updateUV(); + this.$emit("loaded"); + }, + updateUV() { + if (!this.texture || !this.sprite) + return; + const iWidth = this.texture.image.width; + const iHeight = this.texture.image.height; + const iRatio = iWidth / iHeight; + let x = 0.5, y = 0.5; + if (iRatio > 1) { + x = 0.5 * iRatio; + } else { + y = 0.5 / iRatio; + } + const positions = this.sprite.geometry.attributes.position.array; + positions[0] = -x; + positions[1] = -y; + positions[5] = x; + positions[6] = -y; + positions[10] = x; + positions[11] = y; + positions[15] = -x; + positions[16] = y; + this.sprite.geometry.attributes.position.needsUpdate = true; + } + }, + __hmrId: "Sprite" +}); + +var Points = vue.defineComponent({ + extends: Object3D, + setup() { + return {}; + }, + provide() { + return { + [MeshInjectionKey]: this + }; + }, + mounted() { + this.mesh = this.points = new three.Points(this.geometry, this.material); + this.initObject3D(this.mesh); + }, + methods: { + setGeometry(geometry) { + this.geometry = geometry; + if (this.mesh) + this.mesh.geometry = geometry; + }, + setMaterial(material) { + this.material = material; + if (this.mesh) + this.mesh.material = material; + } + } +}); + +var Model = vue.defineComponent({ + extends: Object3D, + emits: ["before-load", "load", "progress", "error"], + props: { + src: { type: String, required: true } + }, + data() { + return { + progress: 0 + }; + }, + methods: { + onLoad(model) { + this.$emit("load", model); + }, + onProgress(progress) { + this.progress = progress.loaded / progress.total; + this.$emit("progress", progress); + }, + onError(error) { + this.$emit("error", error); + } + } +}); + +var GLTF = vue.defineComponent({ + extends: Model, + created() { + const loader = new GLTFLoader_js.GLTFLoader(); + this.$emit("before-load", loader); + loader.load(this.src, (gltf) => { + this.onLoad(gltf); + this.initObject3D(gltf.scene); + }, this.onProgress, this.onError); + } +}); + +var FBX = vue.defineComponent({ + extends: Model, + created() { + const loader = new FBXLoader_js.FBXLoader(); + this.$emit("before-load", loader); + loader.load(this.src, (fbx) => { + this.onLoad(fbx); + this.initObject3D(fbx); + }, this.onProgress, this.onError); + } +}); + +const ComposerInjectionKey = Symbol("Composer"); +var EffectComposer = vue.defineComponent({ + setup() { + const renderer = vue.inject(RendererInjectionKey); + return { renderer }; + }, + provide() { + return { + [ComposerInjectionKey]: this + }; + }, + created() { + if (!this.renderer) { + console.error("Renderer not found"); + return; + } + const renderer = this.renderer; + const composer = new EffectComposer_js.EffectComposer(this.renderer.renderer); + this.composer = composer; + this.renderer.composer = composer; + renderer.addListener("init", () => { + renderer.renderer.autoClear = false; + this.resize(); + renderer.addListener("resize", this.resize); + }); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.removeListener("resize", this.resize); + }, + methods: { + addPass(pass) { + var _a; + (_a = this.composer) == null ? void 0 : _a.addPass(pass); + }, + removePass(pass) { + var _a; + (_a = this.composer) == null ? void 0 : _a.removePass(pass); + }, + resize() { + if (this.composer && this.renderer) { + this.composer.setSize(this.renderer.size.width, this.renderer.size.height); + } + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "EffectComposer" +}); + +var EffectPass = vue.defineComponent({ + inject: { + renderer: RendererInjectionKey, + composer: ComposerInjectionKey + }, + emits: ["ready"], + setup() { + return {}; + }, + created() { + if (!this.composer) { + console.error("Missing parent EffectComposer"); + } + if (!this.renderer) { + console.error("Missing parent Renderer"); + } + }, + unmounted() { + var _a, _b, _c; + if (this.pass) { + (_a = this.composer) == null ? void 0 : _a.removePass(this.pass); + (_c = (_b = this.pass).dispose) == null ? void 0 : _c.call(_b); + } + }, + methods: { + initEffectPass(pass) { + var _a; + this.pass = pass; + (_a = this.composer) == null ? void 0 : _a.addPass(pass); + this.$emit("ready", pass); + } + }, + render() { + return []; + }, + __hmrId: "EffectPass" +}); + +var RenderPass = vue.defineComponent({ + extends: EffectPass, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const pass = new RenderPass_js.RenderPass(this.renderer.scene, this.renderer.camera); + this.initEffectPass(pass); + }, + __hmrId: "RenderPass" +}); + +const props$4 = { + focus: { type: Number, default: 1 }, + aperture: { type: Number, default: 0.025 }, + maxblur: { type: Number, default: 0.01 } +}; +var BokehPass = vue.defineComponent({ + extends: EffectPass, + props: props$4, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const params = { + focus: this.focus, + aperture: this.aperture, + maxblur: this.maxblur, + width: this.renderer.size.width, + height: this.renderer.size.height + }; + const pass = new BokehPass_js.BokehPass(this.renderer.scene, this.renderer.camera, params); + Object.keys(props$4).forEach((p) => { + vue.watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "BokehPass" +}); + +const props$3 = { + noiseIntensity: { type: Number, default: 0.5 }, + scanlinesIntensity: { type: Number, default: 0.05 }, + scanlinesCount: { type: Number, default: 4096 }, + grayscale: { type: Number, default: 0 } +}; +var FilmPass = vue.defineComponent({ + extends: EffectPass, + props: props$3, + created() { + const pass = new FilmPass_js.FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); + Object.keys(props$3).forEach((p) => { + vue.watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "FilmPass" +}); + +var FXAAPass = vue.defineComponent({ + extends: EffectPass, + created() { + var _a; + const pass = new ShaderPass_js.ShaderPass(FXAAShader_js.FXAAShader); + (_a = this.renderer) == null ? void 0 : _a.addListener("resize", this.resize); + this.initEffectPass(pass); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.removeListener("resize", this.resize); + }, + methods: { + resize({ size }) { + if (this.pass) { + const { resolution } = this.pass.material.uniforms; + resolution.value.x = 1 / size.width; + resolution.value.y = 1 / size.height; + } + } + }, + __hmrId: "FXAAPass" +}); + +const props$2 = { + shape: { type: Number, default: 1 }, + radius: { type: Number, default: 4 }, + rotateR: { type: Number, default: Math.PI / 12 * 1 }, + rotateG: { type: Number, default: Math.PI / 12 * 2 }, + rotateB: { type: Number, default: Math.PI / 12 * 3 }, + scatter: { type: Number, default: 0 } +}; +var HalftonePass = vue.defineComponent({ + extends: EffectPass, + props: props$2, + created() { + if (!this.renderer) + return; + const pass = new HalftonePass_js.HalftonePass(this.renderer.size.width, this.renderer.size.height, {}); + Object.keys(props$2).forEach((p) => { + pass.uniforms[p].value = this[p]; + vue.watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "HalftonePass" +}); + +var SMAAPass = vue.defineComponent({ + extends: EffectPass, + created() { + if (!this.renderer) + return; + const pass = new SMAAPass_js.SMAAPass(this.renderer.size.width, this.renderer.size.height); + this.initEffectPass(pass); + }, + __hmrId: "SMAAPass" +}); + +var SSAOPass = vue.defineComponent({ + extends: EffectPass, + props: { + options: { + type: Object, + default: () => ({}) + } + }, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const pass = new SSAOPass_js.SSAOPass( + this.renderer.scene, + this.renderer.camera, + this.renderer.size.width, + this.renderer.size.height + ); + Object.keys(this.options).forEach((key) => { + pass[key] = this.options[key]; + }); + this.initEffectPass(pass); + }, + __hmrId: "SSAOPass" +}); + +var DefaultShader = { + uniforms: {}, + vertexShader: ` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `, + fragmentShader: ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + ` +}; + +var TiltShift = { + uniforms: { + tDiffuse: { value: null }, + blurRadius: { value: 0 }, + gradientRadius: { value: 0 }, + start: { value: new three.Vector2() }, + end: { value: new three.Vector2() }, + delta: { value: new three.Vector2() }, + texSize: { value: new three.Vector2() } + }, + vertexShader: DefaultShader.vertexShader, + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform float blurRadius; + uniform float gradientRadius; + uniform vec2 start; + uniform vec2 end; + uniform vec2 delta; + uniform vec2 texSize; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x)); + float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius; + for (float t = -30.0; t <= 30.0; t++) { + float percent = (t + offset - 0.5) / 30.0; + float weight = 1.0 - abs(percent); + vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius); + // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + // texel2.rgb *= texel2.a; + + color += texel * weight; + total += 2.0 * weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + ` +}; + +const props$1 = { + blurRadius: { type: Number, default: 10 }, + gradientRadius: { type: Number, default: 100 }, + start: { type: Object, default: () => ({ x: 0, y: 100 }) }, + end: { type: Object, default: () => ({ x: 10, y: 100 }) } +}; +var TiltShiftPass = vue.defineComponent({ + extends: EffectPass, + props: props$1, + setup() { + return { uniforms1: {}, uniforms2: {} }; + }, + created() { + if (!this.composer) + return; + this.pass1 = new ShaderPass_js.ShaderPass(TiltShift); + this.pass2 = new ShaderPass_js.ShaderPass(TiltShift); + const uniforms1 = this.uniforms1 = this.pass1.uniforms; + const uniforms2 = this.uniforms2 = this.pass2.uniforms; + uniforms2.blurRadius = uniforms1.blurRadius; + uniforms2.gradientRadius = uniforms1.gradientRadius; + uniforms2.start = uniforms1.start; + uniforms2.end = uniforms1.end; + uniforms2.texSize = uniforms1.texSize; + bindProp(this, "blurRadius", uniforms1.blurRadius, "value"); + bindProp(this, "gradientRadius", uniforms1.gradientRadius, "value"); + this.updateFocusLine(); + ["start", "end"].forEach((p) => { + vue.watch(() => this[p], this.updateFocusLine, { deep: true }); + }); + this.pass1.setSize = (width, height) => { + uniforms1.texSize.value.set(width, height); + }; + this.initEffectPass(this.pass1); + this.composer.addPass(this.pass2); + }, + unmounted() { + if (this.composer && this.pass2) + this.composer.removePass(this.pass2); + }, + methods: { + updateFocusLine() { + this.uniforms1.start.value.copy(this.start); + this.uniforms1.end.value.copy(this.end); + const dv = new three.Vector2().copy(this.end).sub(this.start).normalize(); + this.uniforms1.delta.value.copy(dv); + this.uniforms2.delta.value.set(-dv.y, dv.x); + } + }, + __hmrId: "TiltShiftPass" +}); + +const props = { + strength: { type: Number, default: 1.5 }, + radius: { type: Number, default: 0 }, + threshold: { type: Number, default: 0 } +}; +var UnrealBloomPass = vue.defineComponent({ + extends: EffectPass, + props, + created() { + if (!this.renderer) + return; + const size = new three.Vector2(this.renderer.size.width, this.renderer.size.height); + const pass = new UnrealBloomPass_js.UnrealBloomPass(size, this.strength, this.radius, this.threshold); + Object.keys(props).forEach((p) => { + vue.watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "UnrealBloomPass" +}); + +var ZoomBlur = { + uniforms: { + tDiffuse: { value: null }, + center: { value: new three.Vector2(0.5, 0.5) }, + strength: { value: 0 } + }, + vertexShader: DefaultShader.vertexShader, + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform vec2 center; + uniform float strength; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + vec2 toCenter = center - vUv; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + for (float t = 0.0; t <= 40.0; t++) { + float percent = (t + offset) / 40.0; + float weight = 4.0 * (percent - percent * percent); + vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + + color += texel * weight; + total += weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + ` +}; + +var ZoomBlurPass = vue.defineComponent({ + extends: EffectPass, + props: { + center: { type: Object, default: () => ({ x: 0.5, y: 0.5 }) }, + strength: { type: Number, default: 0.5 } + }, + created() { + const pass = new ShaderPass_js.ShaderPass(ZoomBlur); + bindProp(this, "center", pass.uniforms.center, "value"); + bindProp(this, "strength", pass.uniforms.strength, "value"); + this.initEffectPass(pass); + }, + __hmrId: "ZoomBlurPass" +}); + +var TROIS = /*#__PURE__*/Object.freeze({ + __proto__: null, + Renderer: Renderer, + RendererInjectionKey: RendererInjectionKey, + OrthographicCamera: OrthographicCamera, + PerspectiveCamera: PerspectiveCamera, + Camera: PerspectiveCamera, + Group: Group, + Scene: Scene, + SceneInjectionKey: SceneInjectionKey, + Object3D: Object3D, + Raycaster: Raycaster, + CubeCamera: CubeCamera, + BufferGeometry: Geometry, + BoxGeometry: BoxGeometry, + CircleGeometry: CircleGeometry, + ConeGeometry: ConeGeometry, + CylinderGeometry: CylinderGeometry, + DodecahedronGeometry: DodecahedronGeometry, + ExtrudeGeometry: ExtrudeGeometry, + IcosahedronGeometry: IcosahedronGeometry, + LatheGeometry: LatheGeometry, + OctahedronGeometry: OctahedronGeometry, + PlaneGeometry: PlaneGeometry, + PolyhedronGeometry: PolyhedronGeometry, + RingGeometry: RingGeometry, + SphereGeometry: SphereGeometry, + ShapeGeometry: ShapeGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TorusGeometry: TorusGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TubeGeometry: TubeGeometry, + AmbientLight: AmbientLight, + DirectionalLight: DirectionalLight, + HemisphereLight: HemisphereLight, + PointLight: PointLight, + RectAreaLight: RectAreaLight, + SpotLight: SpotLight, + Material: BaseMaterial, + BasicMaterial: BasicMaterial, + LambertMaterial: LambertMaterial, + PhongMaterial: PhongMaterial, + PhysicalMaterial: PhysicalMaterial, + PointsMaterial: PointsMaterial, + ShadowMaterial: ShadowMaterial, + StandardMaterial: StandardMaterial, + ToonMaterial: ToonMaterial, + MaterialInjectionKey: MaterialInjectionKey, + MatcapMaterial: MatcapMaterial, + ShaderMaterial: ShaderMaterial, + SubSurfaceMaterial: SubSurfaceMaterial, + Texture: Texture, + CubeTexture: CubeTexture, + VideoTexture: VideoTexture, + Mesh: Mesh, + MeshInjectionKey: MeshInjectionKey, + Box: Box, + Circle: Circle, + Cone: Cone, + Cylinder: Cylinder, + Dodecahedron: Dodecahedron, + Icosahedron: Icosahedron, + Lathe: Lathe, + Octahedron: Octahedron, + Plane: Plane, + Polyhedron: Polyhedron, + Ring: Ring, + Sphere: Sphere, + Tetrahedron: Tetrahedron, + Text: Text, + Torus: Torus, + TorusKnot: TorusKnot, + Tube: Tube, + Image: Image, + InstancedMesh: InstancedMesh, + Sprite: Sprite, + Points: Points, + GltfModel: GLTF, + FbxModel: FBX, + EffectComposer: EffectComposer, + ComposerInjectionKey: ComposerInjectionKey, + RenderPass: RenderPass, + EffectPass: EffectPass, + BokehPass: BokehPass, + FilmPass: FilmPass, + FXAAPass: FXAAPass, + HalftonePass: HalftonePass, + SMAAPass: SMAAPass, + SSAOPass: SSAOPass, + TiltShiftPass: TiltShiftPass, + UnrealBloomPass: UnrealBloomPass, + ZoomBlurPass: ZoomBlurPass, + applyObjectProps: applyObjectProps, + bindObjectProp: bindObjectProp, + bindObjectProps: bindObjectProps, + setFromProp: setFromProp, + bindProps: bindProps, + bindProp: bindProp, + propsValues: propsValues, + lerp: lerp, + limit: limit, + getMatcapUrl: getMatcapUrl +}); + +const TroisJSVuePlugin = { + install(app) { + const comps = [ + "Camera", + "OrthographicCamera", + "PerspectiveCamera", + "Raycaster", + "Renderer", + "Scene", + "Group", + "CubeCamera", + "AmbientLight", + "DirectionalLight", + "HemisphereLight", + "PointLight", + "RectAreaLight", + "SpotLight", + "BasicMaterial", + "LambertMaterial", + "MatcapMaterial", + "PhongMaterial", + "PhysicalMaterial", + "PointsMaterial", + "ShaderMaterial", + "StandardMaterial", + "SubSurfaceMaterial", + "ToonMaterial", + "Texture", + "CubeTexture", + "BufferGeometry", + "Mesh", + "Box", + "BoxGeometry", + "Circle", + "CircleGeometry", + "Cone", + "ConeGeometry", + "Cylinder", + "CylinderGeometry", + "Dodecahedron", + "DodecahedronGeometry", + "Icosahedron", + "IcosahedronGeometry", + "Lathe", + "LatheGeometry", + "Octahedron", + "OctahedronGeometry", + "Plane", + "PlaneGeometry", + "Polyhedron", + "PolyhedronGeometry", + "Ring", + "RingGeometry", + "Sphere", + "SphereGeometry", + "Tetrahedron", + "TetrahedronGeometry", + "Text", + "Torus", + "TorusGeometry", + "TorusKnot", + "TorusKnotGeometry", + "Tube", + "TubeGeometry", + "Image", + "InstancedMesh", + "Points", + "Sprite", + "FbxModel", + "GltfModel", + "BokehPass", + "EffectComposer", + "FilmPass", + "FXAAPass", + "HalftonePass", + "RenderPass", + "SAOPass", + "SMAAPass", + "SSAOPass", + "TiltShiftPass", + "UnrealBloomPass", + "ZoomBlurPass" + ]; + comps.forEach((comp) => { + app.component(comp, TROIS[comp]); + }); + } +}; +function createApp(params) { + return vue.createApp(params).use(TroisJSVuePlugin); +} + +function useTextures() { + const obj = { + loader: new three.TextureLoader(), + count: 0, + textures: [], + loadProgress: 0, + loadTextures, + dispose + }; + return obj; + function loadTextures(images, cb) { + obj.count = images.length; + obj.textures.splice(0); + obj.loadProgress = 0; + Promise.all(images.map(loadTexture)).then(cb); + } + function loadTexture(img, index) { + return new Promise((resolve) => { + obj.loader.load( + img.src, + (texture) => { + obj.loadProgress += 1 / obj.count; + obj.textures[index] = texture; + resolve(texture); + } + ); + }); + } + function dispose() { + obj.textures.forEach((t) => t.dispose()); + } +} + +exports.AmbientLight = AmbientLight; +exports.BasicMaterial = BasicMaterial; +exports.BokehPass = BokehPass; +exports.Box = Box; +exports.BoxGeometry = BoxGeometry; +exports.BufferGeometry = Geometry; +exports.Camera = PerspectiveCamera; +exports.Circle = Circle; +exports.CircleGeometry = CircleGeometry; +exports.ComposerInjectionKey = ComposerInjectionKey; +exports.Cone = Cone; +exports.ConeGeometry = ConeGeometry; +exports.CubeCamera = CubeCamera; +exports.CubeTexture = CubeTexture; +exports.Cylinder = Cylinder; +exports.CylinderGeometry = CylinderGeometry; +exports.DirectionalLight = DirectionalLight; +exports.Dodecahedron = Dodecahedron; +exports.DodecahedronGeometry = DodecahedronGeometry; +exports.EffectComposer = EffectComposer; +exports.EffectPass = EffectPass; +exports.ExtrudeGeometry = ExtrudeGeometry; +exports.FXAAPass = FXAAPass; +exports.FbxModel = FBX; +exports.FilmPass = FilmPass; +exports.GltfModel = GLTF; +exports.Group = Group; +exports.HalftonePass = HalftonePass; +exports.HemisphereLight = HemisphereLight; +exports.Icosahedron = Icosahedron; +exports.IcosahedronGeometry = IcosahedronGeometry; +exports.Image = Image; +exports.InstancedMesh = InstancedMesh; +exports.LambertMaterial = LambertMaterial; +exports.Lathe = Lathe; +exports.LatheGeometry = LatheGeometry; +exports.MatcapMaterial = MatcapMaterial; +exports.Material = BaseMaterial; +exports.MaterialInjectionKey = MaterialInjectionKey; +exports.Mesh = Mesh; +exports.MeshInjectionKey = MeshInjectionKey; +exports.Object3D = Object3D; +exports.Octahedron = Octahedron; +exports.OctahedronGeometry = OctahedronGeometry; +exports.OrthographicCamera = OrthographicCamera; +exports.PerspectiveCamera = PerspectiveCamera; +exports.PhongMaterial = PhongMaterial; +exports.PhysicalMaterial = PhysicalMaterial; +exports.Plane = Plane; +exports.PlaneGeometry = PlaneGeometry; +exports.PointLight = PointLight; +exports.Points = Points; +exports.PointsMaterial = PointsMaterial; +exports.Polyhedron = Polyhedron; +exports.PolyhedronGeometry = PolyhedronGeometry; +exports.Raycaster = Raycaster; +exports.RectAreaLight = RectAreaLight; +exports.RenderPass = RenderPass; +exports.Renderer = Renderer; +exports.RendererInjectionKey = RendererInjectionKey; +exports.Ring = Ring; +exports.RingGeometry = RingGeometry; +exports.SMAAPass = SMAAPass; +exports.SSAOPass = SSAOPass; +exports.Scene = Scene; +exports.SceneInjectionKey = SceneInjectionKey; +exports.ShaderMaterial = ShaderMaterial; +exports.ShadowMaterial = ShadowMaterial; +exports.ShapeGeometry = ShapeGeometry; +exports.Sphere = Sphere; +exports.SphereGeometry = SphereGeometry; +exports.SpotLight = SpotLight; +exports.Sprite = Sprite; +exports.StandardMaterial = StandardMaterial; +exports.SubSurfaceMaterial = SubSurfaceMaterial; +exports.Tetrahedron = Tetrahedron; +exports.TetrahedronGeometry = TetrahedronGeometry; +exports.Text = Text; +exports.Texture = Texture; +exports.TiltShiftPass = TiltShiftPass; +exports.ToonMaterial = ToonMaterial; +exports.Torus = Torus; +exports.TorusGeometry = TorusGeometry; +exports.TorusKnot = TorusKnot; +exports.TorusKnotGeometry = TorusKnotGeometry; +exports.TroisJSVuePlugin = TroisJSVuePlugin; +exports.Tube = Tube; +exports.TubeGeometry = TubeGeometry; +exports.UnrealBloomPass = UnrealBloomPass; +exports.VideoTexture = VideoTexture; +exports.ZoomBlurPass = ZoomBlurPass; +exports.applyObjectProps = applyObjectProps; +exports.bindObjectProp = bindObjectProp; +exports.bindObjectProps = bindObjectProps; +exports.bindProp = bindProp; +exports.bindProps = bindProps; +exports.createApp = createApp; +exports.getMatcapUrl = getMatcapUrl; +exports.lerp = lerp; +exports.limit = limit; +exports.propsValues = propsValues; +exports.setFromProp = setFromProp; +exports.useTextures = useTextures; +//# sourceMappingURL=trois.js.map diff --git a/build/trois.js.map b/build/trois.js.map new file mode 100644 index 0000000..edf910c --- /dev/null +++ b/build/trois.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trois.js","sources":["../src/tools.ts","../src/core/useRaycaster.ts","../src/core/usePointer.ts","../src/core/useThree.ts","../src/core/Renderer.ts","../src/core/Camera.ts","../src/core/OrthographicCamera.ts","../src/core/PerspectiveCamera.ts","../src/core/Scene.ts","../src/core/Object3D.ts","../src/core/Group.ts","../src/core/Raycaster.ts","../src/core/CubeCamera.ts","../src/meshes/Mesh.ts","../src/geometries/Geometry.ts","../src/geometries/BoxGeometry.ts","../src/geometries/CircleGeometry.ts","../src/geometries/ConeGeometry.ts","../src/geometries/CylinderGeometry.ts","../src/geometries/DodecahedronGeometry.ts","../src/geometries/ExtrudeGeometry.ts","../src/geometries/IcosahedronGeometry.ts","../src/geometries/LatheGeometry.ts","../src/geometries/OctahedronGeometry.ts","../src/geometries/PlaneGeometry.ts","../src/geometries/PolyhedronGeometry.ts","../src/geometries/RingGeometry.ts","../src/geometries/SphereGeometry.ts","../src/geometries/ShapeGeometry.ts","../src/geometries/TetrahedronGeometry.ts","../src/geometries/TorusGeometry.ts","../src/geometries/TorusKnotGeometry.ts","../src/geometries/TubeGeometry.ts","../src/lights/Light.ts","../src/lights/AmbientLight.ts","../src/lights/DirectionalLight.ts","../src/lights/HemisphereLight.ts","../src/lights/PointLight.ts","../src/lights/RectAreaLight.ts","../src/lights/SpotLight.ts","../src/materials/Material.ts","../src/materials/MatcapMaterial.ts","../src/materials/ShaderMaterial.ts","../src/materials/SubsurfaceScatteringShader.ts","../src/materials/SubSurfaceMaterial.ts","../src/materials/Texture.ts","../src/materials/CubeTexture.ts","../src/materials/VideoTexture.ts","../src/meshes/Box.ts","../src/meshes/Circle.ts","../src/meshes/Cone.ts","../src/meshes/Cylinder.ts","../src/meshes/Dodecahedron.ts","../src/meshes/Icosahedron.ts","../src/meshes/Lathe.ts","../src/meshes/Octahedron.ts","../src/meshes/Plane.ts","../src/meshes/Polyhedron.ts","../src/meshes/Ring.ts","../src/meshes/Sphere.ts","../src/meshes/Tetrahedron.ts","../src/meshes/Text.ts","../src/meshes/Torus.ts","../src/meshes/TorusKnot.ts","../src/meshes/Tube.ts","../src/meshes/Image.ts","../src/meshes/InstancedMesh.ts","../src/meshes/Sprite.ts","../src/meshes/Points.ts","../src/models/Model.ts","../src/models/GLTF.ts","../src/models/FBX.ts","../src/effects/EffectComposer.ts","../src/effects/EffectPass.ts","../src/effects/RenderPass.ts","../src/effects/BokehPass.ts","../src/effects/FilmPass.ts","../src/effects/FXAAPass.ts","../src/effects/HalftonePass.ts","../src/effects/SMAAPass.ts","../src/effects/SSAOPass.ts","../src/shaders/default.ts","../src/shaders/TiltShift.ts","../src/effects/TiltShiftPass.ts","../src/effects/UnrealBloomPass.ts","../src/shaders/ZoomBlur.ts","../src/effects/ZoomBlurPass.ts","../src/plugin.ts","../src/use/useTextures.ts"],"sourcesContent":["import { ref, toRef, watch, WatchStopHandle } from 'vue'\n\ntype OptionSetter = (dst: any, key: string, value: any) => void\n\nexport function applyObjectProps(\n dst: any,\n options: Record,\n setter?: OptionSetter\n): void {\n if (options instanceof Object) {\n Object.entries(options).forEach(([key, value]) => {\n if (setter) setter(dst, key, value)\n else dst[key] = value\n })\n }\n}\n\nexport function bindObjectProp(\n src: any,\n prop: string,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src[prop], setter)\n const r = toRef(src, prop)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) })\n}\n\nexport function bindObjectProps(\n src: any,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src, setter)\n const r = ref(src)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) }, { deep: true })\n}\n\nexport function setFromProp(o: Record, prop: Record): void {\n if (prop instanceof Object) {\n Object.entries(prop).forEach(([key, value]) => {\n o[key] = value\n })\n }\n}\n\nexport function bindProps(src: any, props: string[], dst: any): void {\n props.forEach(prop => {\n bindProp(src, prop, dst, prop)\n })\n}\n\nexport function bindProp(src: any, srcProp: string, dst: any, dstProp?: string): void {\n const _dstProp = dstProp || srcProp\n const ref = toRef(src, srcProp)\n if (ref.value instanceof Object) {\n setFromProp(dst[_dstProp], ref.value)\n watch(ref, (value) => { setFromProp(dst[_dstProp], value) }, { deep: true })\n } else {\n if (ref.value !== undefined) dst[_dstProp] = src[srcProp]\n watch(ref, (value) => { dst[_dstProp] = value })\n }\n}\n\nexport function propsValues(props: Record, exclude: string[] = []): Record {\n const values: Record = {}\n Object.entries(props).forEach(([key, value]) => {\n if (!exclude || !exclude.includes(key)) {\n values[key] = value\n }\n })\n return values\n}\n\nexport function lerp(value1: number, value2: number, amount: number): number {\n amount = amount < 0 ? 0 : amount\n amount = amount > 1 ? 1 : amount\n return value1 + (value2 - value1) * amount\n}\n\nexport function limit(val: number, min: number, max: number): number {\n return val < min ? min : (val > max ? max : val)\n}\n\n// from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'\nconst DEFAULT_MATCAP = '0404E8_0404B5_0404CB_3333FC'\n\nexport function getMatcapUrl(hash = DEFAULT_MATCAP, format = 1024): string {\n const fileName = `${hash}${getMatcapFormatString(format)}.png`\n return `${MATCAP_ROOT}/${format}/${fileName}`\n}\n\nfunction getMatcapFormatString(format: number) {\n switch (format) {\n case 64:\n return '-64px'\n case 128:\n return '-128px'\n case 256:\n return '-256px'\n case 512:\n return '-512px'\n default:\n return ''\n }\n}\n","import { Camera, Intersection, Object3D, Plane, Raycaster, Vector2, Vector3 } from 'three'\n\nexport interface RaycasterInterface {\n position: Vector3\n updatePosition(coords: Vector2): void\n intersect(coords: Vector2, objects: Object3D[], recursive?: boolean): Intersection[],\n}\n\nexport interface RaycasterConfigInterface {\n camera: Camera\n resetPosition?: Vector3\n}\n\nexport default function useRaycaster(options: RaycasterConfigInterface): RaycasterInterface {\n const {\n camera,\n resetPosition = new Vector3(0, 0, 0),\n } = options\n\n const raycaster = new Raycaster()\n const position = resetPosition.clone()\n const plane = new Plane(new Vector3(0, 0, 1), 0)\n\n const updatePosition = (coords: Vector2) => {\n raycaster.setFromCamera(coords, camera)\n camera.getWorldDirection(plane.normal)\n raycaster.ray.intersectPlane(plane, position)\n }\n\n const intersect = (coords: Vector2, objects: Object3D[], recursive = false) => {\n raycaster.setFromCamera(coords, camera)\n return raycaster.intersectObjects(objects, recursive)\n }\n\n return {\n position,\n updatePosition,\n intersect,\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Camera, InstancedMesh, Intersection, Object3D, Vector2, Vector3 } from 'three'\nimport useRaycaster from './useRaycaster'\n\nexport interface PointerEventInterface {\n type: 'pointerenter' | 'pointermove' | 'pointerleave' | 'click'\n position?: Vector2\n positionN?: Vector2\n positionV3?: Vector3\n}\n\nexport interface PointerIntersectEventInterface {\n type: 'pointerenter' | 'pointerover' | 'pointermove' | 'pointerleave' | 'click'\n component: any\n over?: boolean\n intersect?: Intersection\n}\n\nexport type PointerCallbackType = (e: PointerEventInterface) => void\nexport type PointerIntersectCallbackType = (e: PointerIntersectEventInterface) => void\n\nexport interface PointerPublicConfigInterface {\n intersectMode?: 'frame'\n intersectRecursive?: boolean\n touch?: boolean\n resetOnEnd?: boolean\n onEnter?: PointerCallbackType\n onMove?: PointerCallbackType\n onLeave?: PointerCallbackType\n onClick?: PointerCallbackType\n onIntersectEnter?: PointerIntersectCallbackType\n onIntersectOver?: PointerIntersectCallbackType\n onIntersectMove?: PointerIntersectCallbackType\n onIntersectLeave?: PointerIntersectCallbackType\n onIntersectClick?: PointerIntersectCallbackType\n}\n\nexport interface PointerConfigInterface extends PointerPublicConfigInterface {\n camera: Camera\n domElement: HTMLCanvasElement\n intersectObjects: Object3D[] | (() => Object3D[])\n}\n\nexport interface PointerInterface {\n position: Vector2\n positionN: Vector2\n positionV3: Vector3\n intersectObjects: Object3D[] | (() => Object3D[])\n listeners: boolean\n addListeners(cb: void): void\n removeListeners(cb: void): void\n intersect(): void\n}\n\nexport default function usePointer(options: PointerConfigInterface): PointerInterface {\n const {\n camera,\n domElement,\n intersectObjects,\n intersectRecursive = false,\n touch = true,\n resetOnEnd = false,\n onEnter = () => {},\n onMove = () => {},\n onLeave = () => {},\n onClick = () => {},\n onIntersectEnter = () => {},\n onIntersectOver = () => {},\n onIntersectMove = () => {},\n onIntersectLeave = () => {},\n onIntersectClick = () => {},\n } = options\n\n const position = new Vector2(0, 0)\n const positionN = new Vector2(0, 0)\n\n const raycaster = useRaycaster({ camera })\n const positionV3 = raycaster.position\n\n const obj: PointerInterface = {\n position,\n positionN,\n positionV3,\n intersectObjects,\n listeners: false,\n addListeners,\n removeListeners,\n intersect,\n }\n\n return obj\n\n function reset() {\n position.set(0, 0)\n positionN.set(0, 0)\n positionV3.set(0, 0, 0)\n }\n\n function updatePosition(event: TouchEvent | MouseEvent) {\n let x, y\n // @ts-ignore\n if (event.touches && event.touches.length > 0) {\n x = (event).touches[0].clientX\n y = (event).touches[0].clientY\n } else {\n x = (event).clientX\n y = (event).clientY\n }\n\n const rect = domElement.getBoundingClientRect()\n position.x = x - rect.left\n position.y = y - rect.top\n positionN.x = (position.x / rect.width) * 2 - 1\n positionN.y = -(position.y / rect.height) * 2 + 1\n raycaster.updatePosition(positionN)\n }\n\n function intersect() {\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const offObjects: Object3D[] = [..._intersectObjects]\n const iMeshes: InstancedMesh[] = []\n\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n if (!object.userData.over) {\n object.userData.over = true\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: true, component, intersect }\n const enterEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerenter' }\n onIntersectOver(overEvent)\n onIntersectEnter(enterEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerEnter?.(enterEvent)\n }\n\n const moveEvent: PointerIntersectEventInterface = { type: 'pointermove', component, intersect }\n onIntersectMove(moveEvent)\n component?.onPointerMove?.(moveEvent)\n\n offObjects.splice(offObjects.indexOf((object)), 1)\n })\n\n offObjects.forEach(object => {\n const component = getComponent(object)\n if (object.userData.over) {\n object.userData.over = false\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: false, component }\n const leaveEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerleave' }\n onIntersectOver(overEvent)\n onIntersectLeave(leaveEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerLeave?.(leaveEvent)\n }\n })\n }\n }\n\n function pointerEnter(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onEnter({ type: 'pointerenter', position, positionN, positionV3 })\n }\n\n function pointerMove(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onMove({ type: 'pointermove', position, positionN, positionV3 })\n intersect()\n }\n\n function pointerClick(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const iMeshes: InstancedMesh[] = []\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n const event: PointerIntersectEventInterface = { type: 'click', component, intersect }\n onIntersectClick(event)\n component?.onClick?.(event)\n })\n }\n onClick({ type: 'click', position, positionN, positionV3 })\n }\n\n function pointerLeave() {\n if (resetOnEnd) reset()\n onLeave({ type: 'pointerleave' })\n }\n\n function getComponent(object: Object3D) {\n if (object.userData.component) return object.userData.component\n\n let parent = object.parent\n while (parent) {\n if (parent.userData.component) {\n return parent.userData.component\n }\n parent = parent.parent\n }\n\n return undefined\n }\n\n function getIntersectObjects() {\n if (typeof intersectObjects === 'function') {\n return intersectObjects()\n } else return intersectObjects\n }\n\n function addListeners() {\n domElement.addEventListener('mouseenter', pointerEnter)\n domElement.addEventListener('mousemove', pointerMove)\n domElement.addEventListener('mouseleave', pointerLeave)\n domElement.addEventListener('click', pointerClick)\n if (touch) {\n domElement.addEventListener('touchstart', pointerEnter)\n domElement.addEventListener('touchmove', pointerMove)\n domElement.addEventListener('touchend', pointerLeave)\n }\n obj.listeners = true\n }\n\n function removeListeners() {\n domElement.removeEventListener('mouseenter', pointerEnter)\n domElement.removeEventListener('mousemove', pointerMove)\n domElement.removeEventListener('mouseleave', pointerLeave)\n domElement.removeEventListener('click', pointerClick)\n\n domElement.removeEventListener('touchstart', pointerEnter)\n domElement.removeEventListener('touchmove', pointerMove)\n domElement.removeEventListener('touchend', pointerLeave)\n obj.listeners = false\n }\n}\n","import { Camera, Object3D, OrthographicCamera, PerspectiveCamera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport usePointer, { PointerConfigInterface, PointerPublicConfigInterface, PointerInterface } from './usePointer'\n\nexport interface SizeInterface {\n width: number\n height: number\n wWidth: number\n wHeight: number\n ratio: number\n}\n\nexport interface ThreeConfigInterface {\n params?: WebGLRendererParameters\n canvas?: HTMLCanvasElement\n antialias: boolean\n alpha: boolean\n autoClear: boolean\n orbitCtrl: boolean | Record\n pointer: boolean | PointerPublicConfigInterface\n resize: boolean | string\n width?: number\n height?: number\n onResize?(size: SizeInterface): void\n [index:string]: any\n}\n\nexport interface ThreeInterface {\n config: ThreeConfigInterface\n renderer: WebGLRenderer\n composer?: EffectComposer\n camera?: Camera\n cameraCtrl?: OrbitControls\n scene?: Scene\n pointer?: PointerInterface\n size: SizeInterface\n init(): boolean\n dispose(): void\n render(): void\n renderC(): void\n setSize(width: number, height: number): void\n addIntersectObject(o: Object3D): void\n removeIntersectObject(o: Object3D): void\n}\n\n/**\n * Three.js helper\n */\nexport default function useThree(params: ThreeConfigInterface): ThreeInterface {\n // default config\n const config: ThreeConfigInterface = {\n antialias: true,\n alpha: false,\n autoClear: true,\n orbitCtrl: false,\n pointer: false,\n resize: false,\n width: 300,\n height: 150,\n }\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n config[key] = value\n })\n }\n\n // size\n const size: SizeInterface = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n }\n\n const beforeRenderCallbacks: {(): void}[] = []\n\n const intersectObjects: Object3D[] = []\n\n const renderer = createRenderer()\n\n // returned object\n const obj: ThreeInterface = {\n config,\n renderer,\n size,\n init,\n dispose,\n render,\n renderC,\n setSize,\n addIntersectObject, removeIntersectObject,\n }\n\n return obj\n\n /**\n * create WebGLRenderer\n */\n function createRenderer(): WebGLRenderer {\n const renderer = new WebGLRenderer({ canvas: config.canvas, antialias: config.antialias, alpha: config.alpha, ...config.params })\n renderer.autoClear = config.autoClear\n return renderer\n }\n\n /**\n * init three\n */\n function init() {\n if (!obj.scene) {\n console.error('Missing Scene')\n return false\n }\n\n if (!obj.camera) {\n console.error('Missing Camera')\n return false\n }\n\n if (config.resize) {\n onResize()\n window.addEventListener('resize', onResize)\n } else if (config.width && config.height) {\n setSize(config.width, config.height)\n }\n\n initPointer()\n\n if (config.orbitCtrl) {\n const cameraCtrl = new OrbitControls(obj.camera, obj.renderer.domElement)\n if (config.orbitCtrl instanceof Object) {\n Object.entries(config.orbitCtrl).forEach(([key, value]) => {\n // @ts-ignore\n cameraCtrl[key] = value\n })\n }\n onBeforeRender(() => { cameraCtrl.update() })\n obj.cameraCtrl = cameraCtrl\n }\n\n return true\n }\n\n /**\n * init pointer\n */\n function initPointer() {\n let pointerConf: PointerConfigInterface = {\n camera: obj.camera!,\n domElement: obj.renderer!.domElement,\n intersectObjects,\n }\n\n if (config.pointer && config.pointer instanceof Object) {\n pointerConf = { ...pointerConf, ...config.pointer }\n }\n\n const pointer = obj.pointer = usePointer(pointerConf)\n if (config.pointer || intersectObjects.length) {\n pointer.addListeners()\n if (pointerConf.intersectMode === 'frame') {\n onBeforeRender(pointer.intersect)\n }\n }\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(cb: {(): void}) {\n beforeRenderCallbacks.push(cb)\n }\n\n /**\n * default render\n */\n function render() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.renderer!.render(obj.scene!, obj.camera!)\n }\n\n /**\n * composer render\n */\n function renderC() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.composer!.render()\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o: Object3D) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o)\n }\n // add listeners if needed\n if (obj.pointer && !obj.pointer.listeners) {\n obj.pointer.addListeners()\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o: Object3D) {\n const i = intersectObjects.indexOf(o)\n if (i !== -1) {\n intersectObjects.splice(i, 1)\n }\n // remove listeners if needed\n if (obj.pointer && !config.pointer && intersectObjects.length === 0) {\n obj.pointer.removeListeners()\n }\n }\n\n /**\n * remove listeners and dispose\n */\n function dispose() {\n // beforeRenderCallbacks = []\n window.removeEventListener('resize', onResize)\n if (obj.pointer) obj.pointer.removeListeners()\n if (obj.cameraCtrl) obj.cameraCtrl.dispose()\n if (obj.renderer) obj.renderer.dispose()\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (config.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight)\n } else {\n const elt = obj.renderer!.domElement.parentNode as Element\n if (elt) setSize(elt.clientWidth, elt.clientHeight)\n }\n config.onResize?.(size)\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width: number, height: number) {\n size.width = width\n size.height = height\n size.ratio = width / height\n\n obj.renderer!.setSize(width, height, false)\n\n // already done in EffectComposer\n // if (obj.composer) {\n // obj.composer.setSize(width, height)\n // }\n\n const camera = (obj.camera!)\n if (camera.type === 'PerspectiveCamera') {\n const pCamera = (camera)\n pCamera.aspect = size.ratio\n pCamera.updateProjectionMatrix()\n }\n\n if (camera.type === 'OrthographicCamera') {\n const oCamera = (camera)\n size.wWidth = oCamera.right - oCamera.left\n size.wHeight = oCamera.top - oCamera.bottom\n } else {\n const wsize = getCameraSize()\n size.wWidth = wsize[0]\n size.wHeight = wsize[1]\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const camera = (obj.camera!)\n const vFOV = (camera.fov * Math.PI) / 180\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(camera.position.z)\n const w = h * camera.aspect\n return [w, h]\n }\n}\n","/* eslint-disable no-use-before-define */\nimport { Camera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'\nimport { ComponentPublicInstance, defineComponent, InjectionKey, PropType, watchEffect } from 'vue'\nimport { bindObjectProp } from '../tools'\nimport { PointerInterface, PointerPublicConfigInterface } from './usePointer'\nimport useThree, { SizeInterface, ThreeConfigInterface, ThreeInterface } from './useThree'\n\ntype CallbackType = (event: T) => void\n\n// type EventType = 'init' | 'mounted' | 'beforerender' | 'afterrender' | 'resize'\n\nexport interface EventInterface {\n type: 'init' | 'mounted'\n renderer: RendererInterface\n}\n\nexport interface RenderEventInterface {\n type: 'beforerender' | 'afterrender'\n renderer: RendererInterface\n time: number\n}\n\nexport interface ResizeEventInterface {\n type: 'resize'\n renderer: RendererInterface\n size: SizeInterface\n}\n\ntype InitCallbackType = CallbackType\ntype MountedCallbackType = CallbackType\ntype RenderCallbackType = CallbackType\ntype ResizeCallbackType = CallbackType\n// type CallbackTypes = InitCallbackType | MountedCallbackType | RenderCallbackType | ResizeCallbackType\n\n// interface EventMap {\n// 'init': EventInterface;\n// 'mounted': EventInterface;\n// 'beforerender': RenderEventInterface;\n// 'afterrender': RenderEventInterface;\n// 'resize': ResizeEventInterface;\n// }\n\ninterface EventCallbackMap {\n 'init': InitCallbackType;\n 'mounted': MountedCallbackType;\n 'beforerender': RenderCallbackType;\n 'afterrender': RenderCallbackType;\n 'resize': ResizeCallbackType;\n}\n\ninterface RenderFunctionEventInterface {\n renderer: RendererInterface\n time: number\n}\n\ninterface RendererSetupInterface {\n canvas: HTMLCanvasElement\n three: ThreeInterface\n renderer: WebGLRenderer\n size: SizeInterface\n renderFn(e: RenderFunctionEventInterface): void\n raf: boolean\n\n $pointer?: PointerInterface\n\n initCallbacks: InitCallbackType[]\n mountedCallbacks: MountedCallbackType[]\n beforeRenderCallbacks: RenderCallbackType[]\n afterRenderCallbacks: RenderCallbackType[]\n resizeCallbacks: ResizeCallbackType[]\n}\n\nexport interface RendererInterface extends RendererSetupInterface {\n scene?: Scene\n camera?: Camera\n composer?: EffectComposer\n\n onInit(cb: InitCallbackType): void\n onMounted(cb: MountedCallbackType): void\n\n onBeforeRender(cb: RenderCallbackType): void\n offBeforeRender(cb: RenderCallbackType): void\n onAfterRender(cb: RenderCallbackType): void\n offAfterRender(cb: RenderCallbackType): void\n\n onResize(cb: ResizeCallbackType): void\n offResize(cb: ResizeCallbackType): void\n\n addListener(t: T, cb: EventCallbackMap[T]): void\n removeListener(t: T, cb: EventCallbackMap[T]): void\n}\n\nexport interface RendererPublicInterface extends ComponentPublicInstance, RendererInterface {}\n\nexport const RendererInjectionKey: InjectionKey = Symbol('Renderer')\n\nexport default defineComponent({\n name: 'Renderer',\n props: {\n params: { type: Object as PropType, default: () => ({}) },\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n orbitCtrl: { type: [Boolean, Object] as PropType>, default: false },\n pointer: { type: [Boolean, Object] as PropType, default: false },\n resize: { type: [Boolean, String] as PropType, default: false },\n shadow: Boolean,\n width: String,\n height: String,\n pixelRatio: Number,\n xr: Boolean,\n props: { type: Object, default: () => ({}) },\n onReady: Function as PropType<(r: RendererInterface) => void>,\n },\n inheritAttrs: false,\n setup(props, { attrs }): RendererSetupInterface {\n const initCallbacks: InitCallbackType[] = []\n const mountedCallbacks: MountedCallbackType[] = []\n const beforeRenderCallbacks: RenderCallbackType[] = []\n const afterRenderCallbacks: RenderCallbackType[] = []\n const resizeCallbacks: ResizeCallbackType[] = []\n\n const canvas = document.createElement('canvas')\n Object.entries(attrs).forEach(([key, value]) => {\n const matches = key.match(/^on([A-Z][a-zA-Z]*)$/)\n if (matches) {\n canvas.addEventListener(matches[1].toLowerCase(), value as {(): void })\n } else {\n canvas.setAttribute(key, value as string)\n }\n })\n\n const config: ThreeConfigInterface = {\n canvas,\n params: props.params,\n antialias: props.antialias,\n alpha: props.alpha,\n autoClear: props.autoClear,\n orbitCtrl: props.orbitCtrl,\n pointer: props.pointer,\n resize: props.resize,\n }\n\n if (props.width) config.width = parseInt(props.width)\n if (props.height) config.height = parseInt(props.height)\n\n const three = useThree(config)\n bindObjectProp(props, 'props', three.renderer)\n\n watchEffect(() => {\n if (props.pixelRatio) three.renderer.setPixelRatio(props.pixelRatio)\n })\n\n const renderFn: {(): void} = () => {}\n\n return {\n canvas,\n three,\n renderer: three.renderer,\n size: three.size,\n renderFn,\n raf: true,\n initCallbacks,\n mountedCallbacks,\n beforeRenderCallbacks,\n afterRenderCallbacks,\n resizeCallbacks,\n }\n },\n computed: {\n camera: {\n get: function(): Camera | undefined { return this.three.camera },\n set: function(camera: Camera): void { this.three.camera = camera },\n },\n scene: {\n get: function(): Scene | undefined { return this.three.scene },\n set: function(scene: Scene): void { this.three.scene = scene },\n },\n composer: {\n get: function(): EffectComposer | undefined { return this.three.composer },\n set: function(composer: EffectComposer): void { this.three.composer = composer },\n },\n },\n provide() {\n return {\n [RendererInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // appendChild won't work on reload\n this.$el.parentNode.insertBefore(this.canvas, this.$el)\n\n if (this.three.init()) {\n if (this.three.pointer) {\n this.$pointer = this.three.pointer\n }\n\n // TODO : don't use config\n this.three.config.onResize = (size) => {\n this.resizeCallbacks.forEach(e => e({ type: 'resize', renderer: this, size }))\n }\n\n if (this.shadow) {\n this.renderer.shadowMap.enabled = true\n }\n\n this.renderFn = this.three.composer ? this.three.renderC : this.three.render\n\n this.initCallbacks.forEach(e => e({ type: 'init', renderer: this }))\n this.onReady?.(this as RendererInterface)\n\n if (this.xr) {\n this.renderer.xr.enabled = true\n this.renderer.setAnimationLoop(this.render)\n } else {\n requestAnimationFrame(this.renderLoop)\n }\n }\n\n this.mountedCallbacks.forEach(e => e({ type: 'mounted', renderer: this }))\n },\n beforeUnmount() {\n this.canvas.remove()\n this.beforeRenderCallbacks = []\n this.afterRenderCallbacks = []\n this.raf = false\n this.three.dispose()\n },\n methods: {\n onInit(cb: InitCallbackType) { this.addListener('init', cb) },\n onMounted(cb: MountedCallbackType) { this.addListener('mounted', cb) },\n onBeforeRender(cb: RenderCallbackType) { this.addListener('beforerender', cb) },\n offBeforeRender(cb: RenderCallbackType) { this.removeListener('beforerender', cb) },\n onAfterRender(cb: RenderCallbackType) { this.addListener('afterrender', cb) },\n offAfterRender(cb: RenderCallbackType) { this.removeListener('afterrender', cb) },\n onResize(cb: ResizeCallbackType) { this.addListener('resize', cb) },\n offResize(cb: ResizeCallbackType) { this.removeListener('resize', cb) },\n\n addListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n callbacks.push(cb)\n },\n\n removeListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n const index = callbacks.indexOf(cb)\n if (index !== -1) callbacks.splice(index, 1)\n },\n\n getCallbacks(type: string) {\n if (type === 'init') {\n return this.initCallbacks\n } else if (type === 'mounted') {\n return this.mountedCallbacks\n } else if (type === 'beforerender') {\n return this.beforeRenderCallbacks\n } else if (type === 'afterrender') {\n return this.afterRenderCallbacks\n } else {\n return this.resizeCallbacks\n }\n },\n\n render(time: number) {\n this.beforeRenderCallbacks.forEach(e => e({ type: 'beforerender', renderer: this, time }))\n // this.onFrame?.(cbParams)\n this.renderFn({ renderer: this, time })\n this.afterRenderCallbacks.forEach(e => e({ type: 'afterrender', renderer: this, time }))\n },\n renderLoop(time: number) {\n if (this.raf) requestAnimationFrame(this.renderLoop)\n this.render(time)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Renderer',\n})\n","import { defineComponent } from 'vue'\n// import { Camera } from 'three'\n// import { RendererInjectionKey, RendererInterface } from './Renderer'\n// import Object3D from './Object3D'\n\n// export interface CameraSetupInterface {\n// renderer?: RendererInterface\n// camera: Camera\n// }\n\nexport default defineComponent({\n // TODO: eventually extend Object3D\n // extends: Object3D,\n\n props: {\n props: { type: Object, default: () => ({}) },\n },\n\n // inject: { renderer: RendererInjectionKey as symbol },\n\n // setup(): CameraSetupInterface {\n // return {}\n // },\n\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n})\n\nexport function cameraSetProp(camera: any, key: string, value: any, updateProjectionMatrix = true) {\n camera[key] = value\n if (updateProjectionMatrix) camera.updateProjectionMatrix()\n}\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { OrthographicCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'OrthographicCamera',\n props: {\n left: { type: Number, default: -1 },\n right: { type: Number, default: 1 },\n top: { type: Number, default: 1 },\n bottom: { type: Number, default: -1 },\n near: { type: Number, default: 0.1 },\n far: { type: Number, default: 2000 },\n zoom: { type: Number, default: 1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new OrthographicCamera(props.left, props.right, props.top, props.bottom, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'OrthographicCamera',\n})\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { PerspectiveCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'PerspectiveCamera',\n props: {\n aspect: { type: Number, default: 1 },\n far: { type: Number, default: 2000 },\n fov: { type: Number, default: 50 },\n near: { type: Number, default: 0.1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n lookAt: { type: Object as PropType, default: null },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new PerspectiveCamera(props.fov, props.aspect, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n\n if (props.lookAt) camera.lookAt(props.lookAt.x ?? 0, props.lookAt.y, props.lookAt.z)\n watch(() => props.lookAt, (v) => { camera.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'PerspectiveCamera',\n})\n","import { defineComponent, inject, InjectionKey, provide, watch } from 'vue'\nimport { Scene, Color, Object3D, Texture } from 'three'\nimport { RendererInjectionKey } from './Renderer'\n\nexport const SceneInjectionKey: InjectionKey = Symbol('Scene')\n\nexport default defineComponent({\n name: 'Scene',\n props: {\n background: [String, Number, Object],\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n const scene = new Scene()\n\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n renderer.scene = scene\n provide(SceneInjectionKey, scene)\n\n const setBackground = (value: any): void => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n if (scene.background instanceof Color) scene.background.set(value)\n else scene.background = new Color(value)\n } else if (value instanceof Texture) {\n scene.background = value\n }\n }\n\n setBackground(props.background)\n watch(() => props.background, setBackground)\n\n const add = (o: Object3D): void => { scene.add(o) }\n const remove = (o: Object3D): void => { scene.remove(o) }\n\n return { scene, add, remove }\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Scene',\n})\n","import { Object3D, Scene } from 'three'\nimport { ComponentPublicInstance, defineComponent, getCurrentInstance, PropType, watch } from 'vue'\nimport { bindObjectProp, bindProp } from '../tools'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\nimport { SceneInjectionKey } from './Scene'\n\nexport interface Object3DSetupInterface {\n renderer?: RendererInterface\n scene?: Scene\n o3d?: Object3D\n parent?: ComponentPublicInstance\n}\n\nexport interface Object3DInterface extends Object3DSetupInterface {\n addToParent(o?: Object3D): boolean\n removeFromParent(o?: Object3D): boolean\n add(o: Object3D): void\n remove(o: Object3D): void\n}\n\nexport interface Object3DPublicInterface extends ComponentPublicInstance, Object3DInterface {}\n\n// export function object3DSetup(): Object3DSetupInterface {\n// const renderer = inject(RendererInjectionKey)\n// const scene = inject(SceneInjectionKey)\n// return { scene, renderer }\n// }\n\nexport const pointerProps = {\n onPointerEnter: Function,\n onPointerOver: Function,\n onPointerMove: Function,\n onPointerLeave: Function,\n onPointerDown: Function,\n onPointerUp: Function,\n onClick: Function,\n}\n\nexport interface Vector2PropInterface {\n x?: number\n y?: number\n width?: number\n height?: number\n}\n\nexport interface Vector3PropInterface extends Vector2PropInterface {\n z?: number\n}\n\nexport interface EulerPropInterface extends Vector3PropInterface {\n order?: 'XYZ' | 'YZX' | 'ZXY' | 'XZY' | 'YXZ' | 'ZYX'\n}\n\nexport default defineComponent({\n name: 'Object3D',\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n scene: SceneInjectionKey as symbol,\n },\n emits: ['created', 'ready'],\n props: {\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n rotation: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n scale: { type: Object as PropType, default: () => ({ x: 1, y: 1, z: 1, order: 'XYZ' }) },\n lookAt: { type: Object as PropType, default: null },\n userData: { type: Object, default: () => ({}) },\n visible: { type: Boolean, default: true },\n props: { type: Object, default: () => ({}) },\n disableAdd: { type: Boolean, default: false },\n disableRemove: { type: Boolean, default: false },\n ...pointerProps,\n },\n setup(): Object3DSetupInterface {\n // return object3DSetup()\n return {}\n },\n created() {\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n if (!this.scene) {\n console.error('Missing parent Scene')\n }\n },\n unmounted() {\n if (!this.disableRemove) this.removeFromParent()\n if (this.o3d) {\n if (this.renderer) this.renderer.three.removeIntersectObject(this.o3d)\n }\n },\n methods: {\n initObject3D(o3d: Object3D) {\n this.o3d = o3d\n o3d.userData.component = this\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n if (this.renderer) this.renderer.three.addIntersectObject(o3d)\n }\n\n bindProp(this, 'position', o3d)\n bindProp(this, 'rotation', o3d)\n bindProp(this, 'scale', o3d)\n bindProp(this, 'userData', o3d.userData)\n bindProp(this, 'visible', o3d)\n\n bindObjectProp(this, 'props', o3d)\n\n this.$emit('created', o3d)\n\n if (this.lookAt) o3d.lookAt(this.lookAt.x ?? 0, this.lookAt.y, this.lookAt.z)\n watch(() => this.lookAt, (v) => { o3d.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n this.parent = this.getParent()\n if (!this.disableAdd) {\n if (this.addToParent()) this.$emit('ready', this)\n else console.error('Missing parent (Scene, Group...)')\n }\n },\n getParent(): undefined | ComponentPublicInstance {\n let parent = this.$parent\n\n if (!parent) {\n // for script setup\n const instance = getCurrentInstance() as any // ctx is internal\n if (instance && instance.parent) parent = instance.parent.ctx\n }\n\n while (parent) {\n if ((parent as any).add) return parent\n parent = parent.$parent\n }\n return undefined\n },\n addToParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).add(o3d)\n return true\n }\n return false\n },\n removeFromParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).remove(o3d)\n return true\n }\n return false\n },\n add(o: Object3D) { this.o3d?.add(o) },\n remove(o: Object3D) { this.o3d?.remove(o) },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Object3D',\n})\n","import { defineComponent } from 'vue'\nimport { Group } from 'three'\nimport Object3D from './Object3D'\n\nexport default defineComponent({\n name: 'Group',\n extends: Object3D,\n setup() {\n return {\n group: new Group(),\n }\n },\n created() {\n this.initObject3D(this.group)\n },\n __hmrId: 'Group',\n})\n","import { defineComponent, inject, PropType } from 'vue'\nimport usePointer, { PointerInterface, PointerIntersectCallbackType } from './usePointer'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst emptyCallBack: PointerIntersectCallbackType = () => {}\n\ninterface RaycasterSetupInterface {\n renderer?: RendererInterface\n pointer?: PointerInterface\n}\n\nexport default defineComponent({\n name: 'Raycaster',\n props: {\n onPointerEnter: { type: Function as PropType, default: emptyCallBack },\n onPointerOver: { type: Function as PropType, default: emptyCallBack },\n onPointerMove: { type: Function as PropType, default: emptyCallBack },\n onPointerLeave: { type: Function as PropType, default: emptyCallBack },\n onClick: { type: Function as PropType, default: emptyCallBack },\n intersectMode: { type: String, default: 'move' },\n intersectRecursive: { type: Boolean, default: false },\n },\n setup(): RaycasterSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n mounted() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n this.renderer.onMounted(() => {\n if (!renderer.camera) return\n\n this.pointer = usePointer({\n camera: renderer.camera,\n domElement: renderer.canvas,\n intersectObjects: () => renderer.scene ? renderer.scene.children : [],\n intersectRecursive: this.intersectRecursive,\n onIntersectEnter: this.onPointerEnter,\n onIntersectOver: this.onPointerOver,\n onIntersectMove: this.onPointerMove,\n onIntersectLeave: this.onPointerLeave,\n onIntersectClick: this.onClick,\n })\n this.pointer.addListeners()\n\n if (this.intersectMode === 'frame') {\n renderer.onBeforeRender(this.pointer.intersect)\n }\n })\n },\n unmounted() {\n if (this.pointer) {\n this.pointer.removeListeners()\n this.renderer?.offBeforeRender(this.pointer.intersect)\n }\n },\n render() {\n return []\n },\n __hmrId: 'Raycaster',\n})\n","import { defineComponent, inject, onUnmounted, PropType } from 'vue'\nimport { CubeCamera, LinearMipmapLinearFilter, Mesh, RGBAFormat, WebGLCubeRenderTarget } from 'three'\nimport Object3D from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\ninterface CubeCameraSetupInterface {\n cubeRT?: WebGLCubeRenderTarget\n cubeCamera?: CubeCamera\n updateRT?: {(): void}\n}\n\nexport default defineComponent({\n extends: Object3D,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n hideMeshes: { type: Array as PropType, default: () => ([]) },\n },\n setup(props): CubeCameraSetupInterface {\n const rendererC = inject(RendererInjectionKey)\n if (!rendererC || !rendererC.scene) {\n console.error('Missing Renderer / Scene')\n return {}\n }\n\n const renderer = rendererC.renderer, scene = rendererC.scene\n const cubeRT = new WebGLCubeRenderTarget(props.cubeRTSize, { format: RGBAFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter })\n const cubeCamera = new CubeCamera(props.cubeCameraNear, props.cubeCameraFar, cubeRT)\n const updateRT = () => {\n props.hideMeshes.forEach(m => { m.visible = false })\n cubeCamera.update(renderer, scene)\n props.hideMeshes.forEach(m => { m.visible = true })\n }\n\n if (props.autoUpdate) {\n rendererC.onBeforeRender(updateRT)\n onUnmounted(() => { rendererC.offBeforeRender(updateRT) })\n } else {\n rendererC.onMounted(updateRT)\n }\n\n return { cubeRT, cubeCamera, updateRT }\n },\n created() {\n if (this.cubeCamera) this.initObject3D(this.cubeCamera)\n },\n render() {\n return []\n },\n __hmrId: 'CubeCamera',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, watch } from 'vue'\nimport { BufferGeometry, Material, Mesh as TMesh } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport interface MeshSetupInterface extends Object3DSetupInterface {\n mesh?: TMesh\n geometry?: BufferGeometry\n material?: Material | Material[]\n loading?: boolean\n}\n\nexport interface MeshInterface extends MeshSetupInterface {\n setGeometry(g: BufferGeometry): void\n setMaterial(m: Material): void\n}\n\nexport interface MeshPublicInterface extends ComponentPublicInstance, MeshInterface {}\n\nexport const MeshInjectionKey: InjectionKey = Symbol('Mesh')\n\nconst Mesh = defineComponent({\n name: 'Mesh',\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n },\n setup(): MeshSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // TODO : proper ?\n if (!this.mesh && !this.loading) this.initMesh()\n },\n methods: {\n initMesh() {\n const mesh = new TMesh(this.geometry, this.material)\n\n bindProp(this, 'castShadow', mesh)\n bindProp(this, 'receiveShadow', mesh)\n\n this.mesh = mesh\n this.initObject3D(mesh)\n },\n createGeometry() {},\n addGeometryWatchers(props: Readonly) {\n Object.keys(props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], () => {\n this.refreshGeometry()\n })\n })\n },\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material | Material[]) {\n if (Array.isArray(material) || !this.material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n } else {\n let prev = this.material\n if (Array.isArray(prev)) {\n prev.push(material)\n } else {\n prev = [prev, material]\n }\n this.material = prev\n if (this.mesh) this.mesh.material = prev\n }\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n if (this.mesh && this.geometry) this.mesh.geometry = this.geometry\n oldGeo?.dispose()\n },\n },\n unmounted() {\n // for predefined mesh (geometry/material are not unmounted)\n if (this.geometry) this.geometry.dispose()\n if (this.material) {\n if (Array.isArray(this.material)) {\n for (const m of this.material) m.dispose()\n } else {\n this.material.dispose()\n }\n }\n },\n __hmrId: 'Mesh',\n})\n\nexport default Mesh\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function meshComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n },\n })\n}\n","import { ComponentPropsOptions, defineComponent, PropType, watch } from 'vue'\nimport { BufferAttribute, BufferGeometry } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\n\nexport interface GeometrySetupInterface {\n mesh?: MeshInterface\n geometry?: BufferGeometry\n watchProps?: string[]\n}\n\nexport interface GeometryAttributeInterface {\n name: string\n array: ArrayLike\n itemSize: number\n normalized?: boolean\n}\n\n// function defaultSetup(): GeometryInterface {\n// const mesh = inject('mesh') as MeshInterface\n// const watchProps: string[] = []\n// return { mesh, watchProps }\n// }\n\nconst Geometry = defineComponent({\n emits: ['created'],\n props: {\n rotateX: Number,\n rotateY: Number,\n rotateZ: Number,\n attributes: { type: Array as PropType>, default: () => ([]) },\n },\n // inject for sub components\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): GeometrySetupInterface {\n return {}\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry) this.mesh.setGeometry(this.geometry)\n\n Object.keys(this.$props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], this.refreshGeometry)\n })\n },\n unmounted() {\n this.geometry?.dispose()\n },\n methods: {\n createGeometry() {\n const bufferAttributes: Record = {}\n const geometry = new BufferGeometry()\n this.attributes.forEach(attribute => {\n if (attribute.name && attribute.itemSize && attribute.array) {\n const bufferAttribute = bufferAttributes[attribute.name] = new BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized)\n geometry.setAttribute(attribute.name, bufferAttribute)\n }\n })\n geometry.computeBoundingBox()\n geometry.userData.component = this\n this.geometry = geometry\n this.$emit('created', geometry)\n },\n rotateGeometry() {\n if (!this.geometry) return\n if (this.rotateX) this.geometry.rotateX(this.rotateX)\n if (this.rotateY) this.geometry.rotateY(this.rotateY)\n if (this.rotateZ) this.geometry.rotateZ(this.rotateZ)\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry && this.mesh) this.mesh.setGeometry(this.geometry)\n oldGeo?.dispose()\n },\n },\n render() { return [] },\n})\n\nexport default Geometry\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function geometryComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n this.geometry.userData.component = this\n this.$emit('created', this.geometry)\n },\n },\n })\n}\n","import { geometryComponent } from './Geometry'\nimport { BoxGeometry } from 'three'\n\nexport const props = {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): BoxGeometry {\n if (comp.size) {\n return new BoxGeometry(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n } else {\n return new BoxGeometry(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n }\n}\n\nexport default geometryComponent('BoxGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CircleGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CircleGeometry {\n return new CircleGeometry(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CircleGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { ConeGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): ConeGeometry {\n return new ConeGeometry(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('ConeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CylinderGeometry } from 'three'\n\nexport const props = {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CylinderGeometry {\n return new CylinderGeometry(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CylinderGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { DodecahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): DodecahedronGeometry {\n return new DodecahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('DodecahedronGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { ExtrudeGeometry, ExtrudeGeometryOptions, Shape } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n options: { type: Object as PropType },\n} as const\n\nexport function createGeometry(comp: any): ExtrudeGeometry {\n return new ExtrudeGeometry(comp.shapes, comp.options)\n}\n\nexport default geometryComponent('ExtrudeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { IcosahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): IcosahedronGeometry {\n return new IcosahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('IcosahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { LatheGeometry } from 'three'\n\nexport const props = {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): LatheGeometry {\n return new LatheGeometry(comp.points, comp.segments, comp.phiStart, comp.phiLength)\n}\n\nexport default geometryComponent('LatheGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { OctahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): OctahedronGeometry {\n return new OctahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('OctahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PlaneGeometry } from 'three'\n\nexport const props = {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): PlaneGeometry {\n return new PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments)\n}\n\nexport default geometryComponent('PlaneGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PolyhedronGeometry } from 'three'\n\nexport const props = {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): PolyhedronGeometry {\n return new PolyhedronGeometry(comp.vertices, comp.indices, comp.radius, comp.detail)\n}\n\nexport default geometryComponent('PolyhedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { RingGeometry } from 'three'\n\nexport const props = {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): RingGeometry {\n return new RingGeometry(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('RingGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { SphereGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI },\n} as const\n\nexport function createGeometry(comp: any): SphereGeometry {\n return new SphereGeometry(comp.radius, comp.widthSegments, comp.heightSegments, comp.phiStart, comp.phiLength, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('SphereGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { Shape, ShapeGeometry } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n curveSegments: { type: Number },\n} as const\n\nexport function createGeometry(comp: any): ShapeGeometry {\n return new ShapeGeometry(comp.shapes, comp.curveSegments)\n}\n\nexport default geometryComponent('ShapeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TetrahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): TetrahedronGeometry {\n return new TetrahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('TetrahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): TorusGeometry {\n return new TorusGeometry(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc)\n}\n\nexport default geometryComponent('TorusGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusKnotGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n} as const\n\nexport function createGeometry(comp: any): TorusKnotGeometry {\n return new TorusKnotGeometry(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q)\n}\n\nexport default geometryComponent('TorusKnotGeometry', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three'\nimport Geometry from './Geometry'\n\nexport const props = {\n points: Array,\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n} as const\n\nexport function createGeometry(comp: any): TubeGeometry {\n let curve\n if (comp.points) {\n curve = new CatmullRomCurve3(comp.points)\n } else if (comp.path) {\n curve = comp.path\n } else {\n console.error('Missing path curve or points.')\n }\n return new TubeGeometry(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed)\n}\n\nexport default defineComponent({\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n})\n\nexport function updateTubeGeometryPoints(tube: TubeGeometry, points: Vector3[]): void {\n const curve = new CatmullRomCurve3(points)\n const { radialSegments, radius, tubularSegments, closed } = tube.parameters\n const frames = curve.computeFrenetFrames(tubularSegments, closed)\n tube.tangents = frames.tangents\n tube.normals = frames.normals\n tube.binormals = frames.binormals\n tube.parameters.path = curve\n\n const pAttribute = tube.getAttribute('position')\n const nAttribute = tube.getAttribute('normal')\n\n const normal = new Vector3()\n const P = new Vector3()\n\n for (let i = 0; i < tubularSegments; i++) {\n updateSegment(i)\n }\n updateSegment(tubularSegments)\n\n tube.attributes.position.needsUpdate = true\n tube.attributes.normal.needsUpdate = true\n\n function updateSegment(i: number) {\n curve.getPointAt(i / tubularSegments, P)\n const N = frames.normals[i]\n const B = frames.binormals[i]\n for (let j = 0; j <= radialSegments; j++) {\n const v = j / radialSegments * Math.PI * 2\n const sin = Math.sin(v)\n const cos = -Math.cos(v)\n normal.x = (cos * N.x + sin * B.x)\n normal.y = (cos * N.y + sin * B.y)\n normal.z = (cos * N.z + sin * B.z)\n normal.normalize()\n const index = (i * (radialSegments + 1) + j)\n nAttribute.setXYZ(index, normal.x, normal.y, normal.z)\n pAttribute.setXYZ(index, P.x + radius * normal.x, P.y + radius * normal.y, P.z + radius * normal.z)\n }\n }\n}\n","import { DirectionalLight, Light, SpotLight } from 'three'\nimport { defineComponent, PropType, watch } from 'vue'\nimport Object3D, { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp, setFromProp } from '../tools'\n\nexport interface LightSetupInterface {\n light?: Light\n}\n\nexport default defineComponent({\n extends: Object3D,\n name: 'Light',\n props: {\n color: { type: String, default: '#ffffff' },\n intensity: { type: Number, default: 1 },\n castShadow: { type: Boolean, default: false },\n shadowMapSize: { type: Object as PropType, default: () => ({ x: 512, y: 512 }) },\n shadowCamera: { type: Object, default: () => ({}) },\n },\n setup(): LightSetupInterface {\n return {}\n },\n unmounted() {\n if (this.light instanceof SpotLight || this.light instanceof DirectionalLight) {\n this.removeFromParent(this.light.target)\n }\n },\n methods: {\n initLight(light: Light) {\n this.light = light\n\n if ((light as any).shadow) {\n light.castShadow = this.castShadow\n // @ts-ignore\n setFromProp(light.shadow.mapSize, this.shadowMapSize)\n // @ts-ignore\n setFromProp(light.shadow.camera, this.shadowCamera)\n }\n\n ['color', 'intensity', 'castShadow'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => {\n if (p === 'color') {\n light.color.set(value)\n } else {\n // @ts-ignore\n light[p] = value\n }\n })\n })\n\n this.initObject3D(light)\n\n if (light instanceof SpotLight || light instanceof DirectionalLight) {\n bindProp(this, 'target', light.target, 'position')\n this.addToParent(light.target)\n }\n },\n },\n __hmrId: 'Light',\n})\n","import { defineComponent } from 'vue'\nimport { AmbientLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n created() {\n this.initLight(new AmbientLight(this.color, this.intensity))\n },\n __hmrId: 'AmbientLight',\n})\n","import { defineComponent, PropType } from 'vue'\nimport { DirectionalLight } from 'three'\nimport { Vector3PropInterface } from '../core/Object3D'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n target: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n created() {\n this.initLight(new DirectionalLight(this.color, this.intensity))\n },\n __hmrId: 'DirectionalLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HemisphereLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n groundColor: { type: String, default: '#444444' },\n },\n created() {\n const light = new HemisphereLight(this.color, this.groundColor, this.intensity)\n watch(() => this.groundColor, (value) => { light.groundColor.set(value) })\n this.initLight(light)\n },\n __hmrId: 'HemisphereLight',\n})\n","import { defineComponent } from 'vue'\nimport { PointLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n distance: { type: Number, default: 0 },\n decay: { type: Number, default: 1 },\n },\n created() {\n this.initLight(new PointLight(this.color, this.intensity, this.distance, this.decay))\n },\n __hmrId: 'PointLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { RectAreaLight } from 'three'\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js'\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n width: { type: Number, default: 10 },\n height: { type: Number, default: 10 },\n helper: Boolean,\n },\n created() {\n RectAreaLightUniformsLib.init()\n const light = new RectAreaLight(this.color, this.intensity, this.width, this.height)\n\n const watchProps = ['width', 'height']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n if (this.helper) {\n const lightHelper = new RectAreaLightHelper(light)\n light.add(lightHelper)\n }\n\n this.initLight(light)\n },\n __hmrId: 'RectAreaLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { SpotLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n angle: { type: Number, default: Math.PI / 3 },\n decay: { type: Number, default: 1 },\n distance: { type: Number, default: 0 },\n penumbra: { type: Number, default: 0 },\n target: Object,\n },\n created() {\n const light = new SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay)\n\n const watchProps = ['angle', 'decay', 'distance', 'penumbra']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n this.initLight(light)\n },\n __hmrId: 'SpotLight',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, PropType, watch } from 'vue'\nimport { Color, Material, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, PointsMaterial as TPointsMaterial, Texture, ShadowMaterial as TShadowMaterial } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\nimport { bindObjectProp, propsValues } from '../tools'\nimport { BasicMaterialPropsInterface, LambertMaterialPropsInterface, MaterialPropsInterface, PhongMaterialPropsInterface, PhysicalMaterialPropsInterface, PointsMaterialPropsInterface, StandardMaterialPropsInterface, ToonMaterialPropsInterface } from './types'\n\nexport interface MaterialSetupInterface {\n mesh?: MeshInterface\n material?: Material\n createMaterial?(): Material\n}\n\nexport interface MaterialInterface extends MaterialSetupInterface {\n setTexture(texture: Texture | null, key: string): void\n}\n\nexport interface MaterialPublicInterface extends ComponentPublicInstance, MaterialInterface {}\n\nexport const MaterialInjectionKey: InjectionKey = Symbol('Material')\n\nconst BaseMaterial = defineComponent({\n emits: ['created'],\n props: {\n color: { type: String, default: '#ffffff' },\n props: { type: Object as PropType, default: () => ({}) },\n },\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): MaterialSetupInterface {\n return {}\n },\n provide() {\n return {\n [MaterialInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n if (this.createMaterial) {\n const material = this.material = this.createMaterial()\n // @ts-ignore\n watch(() => this.color, (value) => { material.color.set(value) })\n bindObjectProp(this, 'props', material, false, this.setProp)\n this.$emit('created', material)\n this.mesh.setMaterial(material)\n }\n },\n unmounted() {\n this.material?.dispose()\n },\n methods: {\n getMaterialParams() {\n return { ...propsValues(this.$props, ['props']), ...this.props }\n },\n setProp(material: any, key: string, value: any, needsUpdate = false) {\n const dstVal = material[key]\n if (dstVal instanceof Color) dstVal.set(value)\n else material[key] = value\n material.needsUpdate = needsUpdate\n },\n setTexture(texture: Texture | null, key = 'map') {\n this.setProp(this.material, key, texture, true)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Material',\n})\n\nexport default BaseMaterial\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function materialComponent

>(\n name: string,\n props: P,\n createMaterial: {(opts: any): Material}\n) {\n return defineComponent({\n name,\n extends: BaseMaterial,\n props,\n methods: {\n createMaterial() {\n return createMaterial(this.getMaterialParams())\n },\n },\n })\n}\n\n// TODO : proper\nexport const BasicMaterial = materialComponent('BasicMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshBasicMaterial(opts))\nexport const LambertMaterial = materialComponent('LambertMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshLambertMaterial(opts))\nexport const PhongMaterial = materialComponent('PhongMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhongMaterial(opts))\nexport const PhysicalMaterial = materialComponent('PhysicalMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhysicalMaterial(opts))\nexport const PointsMaterial = materialComponent('PointsMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TPointsMaterial(opts))\nexport const ShadowMaterial = materialComponent('ShadowMaterial', { color: { type: String, default: '#000000' }, props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TShadowMaterial(opts))\nexport const StandardMaterial = materialComponent('StandardMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshStandardMaterial(opts))\nexport const ToonMaterial = materialComponent('ToonMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshToonMaterial(opts))\n","import { MeshMatcapMaterial, TextureLoader } from 'three'\nimport { propsValues, getMatcapUrl } from '../tools'\nimport { materialComponent } from './Material'\n\nexport default materialComponent(\n 'MatcapMaterial',\n {\n src: String,\n name: { type: String, default: '0404E8_0404B5_0404CB_3333FC' },\n },\n (opts) => {\n const src = opts.src ? opts.src : getMatcapUrl(opts.name)\n const params = propsValues(opts, ['src', 'name'])\n params.matcap = new TextureLoader().load(src)\n return new MeshMatcapMaterial(params)\n }\n)\n","import { ShaderMaterial } from 'three'\nimport { materialComponent } from './Material'\nimport { propsValues } from '../tools'\n\nconst defaultVertexShader = `\n varying vec2 vUv;\n void main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n }\n`\n\nconst defaultFragmentShader = `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n }\n`\n\nexport default materialComponent(\n 'ShaderMaterial',\n {\n props: { type: Object, default: () => ({\n uniforms: {},\n vertexShader: defaultVertexShader,\n fragmentShader: defaultFragmentShader,\n }) },\n },\n (opts) => new ShaderMaterial(propsValues(opts, ['color']))\n)\n","/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on three/examples/jsm/shaders/SubsurfaceScatteringShader.js\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\nimport {\n Color,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n} from 'three'\n\nfunction replaceAll(string: string, find: string, replace: string) {\n return string.split(find).join(replace)\n}\n\nconst meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {'))\nconst meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {'))\n\nconst SubsurfaceScatteringShader = {\n\n uniforms: UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n thicknessColor: { value: new Color(0xffffff) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n}\n\nexport default SubsurfaceScatteringShader\n","import { defineComponent, PropType } from 'vue'\nimport { Color, ShaderMaterial, UniformsUtils } from 'three'\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader'\nimport Material from './Material'\nimport { bindObjectProp } from '../tools'\n\nexport interface SubSurfaceMaterialUniformsInterface {\n diffuse?: string | number\n thicknessColor?: string | number\n thicknessDistortion?: number\n thicknessAmbient?: number\n thicknessAttenuation?: number\n thicknessPower?: number\n thicknessScale?: number\n}\n\nexport default defineComponent({\n extends: Material,\n props: {\n uniforms: { type: Object as PropType, default: () => ({\n diffuse: '#ffffff',\n thicknessColor: '#ffffff',\n thicknessDistortion: 0.4,\n thicknessAmbient: 0.01,\n thicknessAttenuation: 0.7,\n thicknessPower: 2,\n thicknessScale: 4,\n }) },\n },\n methods: {\n createMaterial() {\n const params = SubsurfaceScatteringShader\n const uniforms = UniformsUtils.clone(params.uniforms)\n\n bindObjectProp(this, 'uniforms', uniforms, true, (dst: any, key: string, value: any) => {\n const dstVal = dst[key].value\n if (dstVal instanceof Color) dstVal.set(value)\n else dst[key].value = value\n })\n\n const material = new ShaderMaterial({\n ...params,\n lights: true,\n ...this.props,\n uniforms,\n })\n\n return material\n },\n },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { ShaderMaterial, Texture, TextureLoader } from 'three'\nimport { bindObjectProp } from '../tools'\nimport { MaterialInjectionKey, MaterialInterface } from './Material'\n\nexport interface TexureInterface {\n material?: MaterialInterface\n texture?: Texture\n}\n\nexport default defineComponent({\n inject: {\n material: MaterialInjectionKey as symbol,\n },\n props: {\n name: { type: String, default: 'map' },\n uniform: String,\n src: String,\n onLoad: Function as PropType<(t: Texture) => void>,\n onProgress: Function as PropType<(e: ProgressEvent) => void>,\n onError: Function as PropType<(e: ErrorEvent) => void>,\n props: { type: Object, default: () => ({}) },\n },\n setup(): TexureInterface {\n return {}\n },\n created() {\n this.refreshTexture()\n watch(() => this.src, this.refreshTexture)\n },\n unmounted() {\n this.material?.setTexture(null, this.name)\n this.texture?.dispose()\n },\n methods: {\n createTexture() {\n if (!this.src) return undefined\n return new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError)\n },\n initTexture() {\n if (!this.texture) return\n\n bindObjectProp(this, 'props', this.texture)\n if (!this.material) return\n\n this.material.setTexture(this.texture, this.name)\n if (this.material.material instanceof ShaderMaterial && this.uniform) {\n (this.material.material).uniforms[this.uniform] = { value: this.texture }\n }\n },\n refreshTexture() {\n this.texture?.dispose()\n this.texture = this.createTexture()\n this.initTexture()\n },\n onLoaded(t: Texture) {\n this.onLoad?.(t)\n },\n },\n render() { return [] },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { CubeReflectionMapping, CubeTextureLoader } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n name: { type: String, default: 'envMap' },\n path: { type: String, required: true },\n urls: {\n type: Array as PropType,\n default: () => ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n props: { type: Object, default: () => ({ mapping: CubeReflectionMapping }) },\n },\n created() {\n watch(() => this.path, this.refreshTexture)\n watch(() => this.urls, this.refreshTexture)\n },\n methods: {\n createTexture() {\n return new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError)\n },\n },\n})\n","import { defineComponent, watch } from 'vue'\nimport { VideoTexture } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n videoId: {\n type: String,\n required: true,\n },\n },\n created() {\n watch(() => this.videoId, this.refreshTexture)\n },\n methods: {\n createTexture() {\n const video = document.getElementById(this.videoId) as HTMLVideoElement\n return new VideoTexture(video)\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/BoxGeometry'\n\nexport default meshComponent('Box', props, createGeometry)\n\n// import { defineComponent } from 'vue'\n// import Mesh, { meshComponent } from './Mesh'\n//\n// export default defineComponent({\n// extends: Mesh,\n// props,\n// created() {\n// this.createGeometry()\n// this.addGeometryWatchers(props)\n// },\n// methods: {\n// createGeometry() {\n// this.geometry = createGeometry(this)\n// },\n// },\n// })\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CircleGeometry'\n\nexport default meshComponent('Circle', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/ConeGeometry'\n\nexport default meshComponent('Cone', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CylinderGeometry'\n\nexport default meshComponent('Cylinder', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/DodecahedronGeometry'\n\nexport default meshComponent('Dodecahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/IcosahedronGeometry'\n\nexport default meshComponent('Icosahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/LatheGeometry'\n\nexport default meshComponent('Lathe', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/OctahedronGeometry'\n\nexport default meshComponent('Octahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PlaneGeometry'\n\nexport default meshComponent('Plane', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PolyhedronGeometry'\n\nexport default meshComponent('Polyhedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/RingGeometry'\n\nexport default meshComponent('Ring', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/SphereGeometry'\n\nexport default meshComponent('Sphere', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TetrahedronGeometry'\n\nexport default meshComponent('Tetrahedron', props, createGeometry)\n","import { defineComponent, PropType, watch } from 'vue'\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'\nimport { Font, FontLoader } from 'three/examples/jsm/loaders/FontLoader.js'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface TextSetupInterface extends MeshSetupInterface {\n geometry?: TextGeometry\n font?: Font\n}\n\nconst props = {\n text: { type: String, required: true, default: 'Text' },\n fontSrc: { type: String, required: true },\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String] as PropType, default: false },\n} as const\n\nexport default defineComponent({\n extends: Mesh,\n props,\n setup(): TextSetupInterface {\n return {}\n },\n created() {\n if (!this.fontSrc) {\n console.error('Missing required prop: \"font-src\"')\n return\n }\n // if (!this.text) {\n // console.error('Missing required prop: \"text\"')\n // return\n // }\n\n // add watchers\n const watchProps = [\n 'text', 'size', 'height', 'curveSegments',\n 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments',\n 'align',\n ]\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], () => {\n if (this.font) this.refreshGeometry()\n })\n })\n\n const loader = new FontLoader()\n this.loading = true\n loader.load(this.fontSrc, (font) => {\n this.loading = false\n this.font = font\n this.createGeometry()\n this.initMesh()\n })\n },\n methods: {\n createGeometry() {\n this.geometry = new TextGeometry(this.text, {\n // @ts-ignore\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n })\n\n if (this.align === 'center') {\n this.geometry.center()\n }\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusGeometry'\n\nexport default meshComponent('Torus', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusKnotGeometry'\n\nexport default meshComponent('TorusKnot', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { TubeGeometry, Vector3 } from 'three'\nimport Mesh from './Mesh'\nimport { props, createGeometry, updateTubeGeometryPoints } from '../geometries/TubeGeometry'\n\nexport default defineComponent({\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update curve points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n __hmrId: 'Tube',\n})\n","import { defineComponent, watch } from 'vue'\nimport { DoubleSide, MeshBasicMaterial, PlaneGeometry, Texture, TextureLoader } from 'three'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface ImageSetupInterface extends MeshSetupInterface {\n material?: MeshBasicMaterial\n texture?: Texture\n}\n\nexport default defineComponent({\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: { type: String, required: true },\n width: Number,\n height: Number,\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n keepSize: Boolean,\n },\n setup(): ImageSetupInterface {\n return {}\n },\n created() {\n if (!this.renderer) return\n\n this.geometry = new PlaneGeometry(1, 1, this.widthSegments, this.heightSegments)\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() })\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.resize)\n })\n\n this.resize()\n if (this.keepSize) this.renderer.onResize(this.resize)\n },\n unmounted() {\n this.renderer?.offResize(this.resize)\n },\n methods: {\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded)\n },\n refreshTexture() {\n this.texture?.dispose()\n if (this.material) {\n this.material.map = this.loadTexture()\n this.material.needsUpdate = true\n }\n },\n onLoaded(texture: Texture) {\n this.texture = texture\n this.resize()\n this.$emit('loaded', texture)\n },\n resize() {\n if (!this.renderer || !this.texture) return\n const screen = this.renderer.size\n const iW = this.texture.image.width\n const iH = this.texture.image.height\n const iRatio = iW / iH\n let w = 1, h = 1\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width\n h = this.height * screen.wHeight / screen.height\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width\n h = w / iRatio\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height\n w = h * iRatio\n } else {\n if (iRatio > 1) w = h * iRatio\n else h = w / iRatio\n }\n if (this.mesh) {\n this.mesh.scale.x = w\n this.mesh.scale.y = h\n }\n },\n },\n __hmrId: 'Image',\n})\n","import { defineComponent } from 'vue'\nimport { InstancedMesh } from 'three'\nimport Mesh from './Mesh'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: Mesh,\n props: {\n count: { type: Number, required: true },\n },\n methods: {\n initMesh() {\n if (!this.renderer) return\n\n if (!this.geometry || !this.material) {\n console.error('Missing geometry and/or material')\n return false\n }\n\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count)\n this.mesh.userData.component = this\n\n bindProp(this, 'castShadow', this.mesh)\n bindProp(this, 'receiveShadow', this.mesh)\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n this.renderer.three.addIntersectObject(this.mesh)\n }\n\n this.initObject3D(this.mesh)\n },\n },\n __hmrId: 'InstancedMesh',\n})\n","import { defineComponent } from 'vue'\nimport { Sprite, SpriteMaterial, Texture, TextureLoader } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\n\ninterface SpriteSetupInterface extends Object3DSetupInterface {\n texture?: Texture\n material?: SpriteMaterial\n sprite?: Sprite\n}\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['loaded'],\n props: {\n src: { type: String, required: true },\n },\n setup(): SpriteSetupInterface {\n return {}\n },\n created() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded)\n this.material = new SpriteMaterial({ map: this.texture })\n this.sprite = new Sprite(this.material)\n this.initObject3D(this.sprite)\n },\n unmounted() {\n this.texture?.dispose()\n this.material?.dispose()\n },\n methods: {\n onLoaded() {\n this.updateUV()\n this.$emit('loaded')\n },\n updateUV() {\n if (!this.texture || !this.sprite) return\n\n const iWidth = this.texture.image.width\n const iHeight = this.texture.image.height\n const iRatio = iWidth / iHeight\n\n let x = 0.5, y = 0.5\n if (iRatio > 1) {\n x = 0.5 * iRatio\n } else {\n y = 0.5 / iRatio\n }\n\n const positions = this.sprite.geometry.attributes.position.array as Array\n positions[0] = -x; positions[1] = -y\n positions[5] = x; positions[6] = -y\n positions[10] = x; positions[11] = y\n positions[15] = -x; positions[16] = y\n this.sprite.geometry.attributes.position.needsUpdate = true\n },\n },\n __hmrId: 'Sprite',\n})\n","import { defineComponent } from 'vue'\nimport { BufferGeometry, Material, Points } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { MeshInjectionKey } from './Mesh'\n\nexport interface PointsSetupInterface extends Object3DSetupInterface {\n mesh?: Points\n points?: Points\n geometry?: BufferGeometry\n material?: Material\n}\n\nexport interface PointsInterface extends PointsSetupInterface {\n setGeometry(geometry: BufferGeometry): void\n setMaterial(material: Material): void\n}\n\n// not really a mesh, but allow us to easily get geometry/material support\nexport default defineComponent({\n extends: Object3D,\n setup(): PointsSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n this.mesh = this.points = new Points(this.geometry, this.material)\n this.initObject3D(this.mesh)\n },\n methods: {\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n },\n },\n})\n","import { Object3D as TObject3D } from 'three'\nimport { defineComponent } from 'vue'\nimport Object3D from '../core/Object3D'\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['before-load', 'load', 'progress', 'error'],\n props: {\n src: { type: String, required: true },\n },\n data() {\n return {\n progress: 0,\n }\n },\n methods: {\n onLoad(model: TObject3D) {\n this.$emit('load', model)\n },\n onProgress(progress: ProgressEvent) {\n this.progress = progress.loaded / progress.total\n this.$emit('progress', progress)\n },\n onError(error: ErrorEvent) {\n this.$emit('error', error)\n },\n },\n})\n","import { defineComponent } from 'vue'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new GLTFLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (gltf) => {\n this.onLoad(gltf)\n this.initObject3D(gltf.scene)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent } from 'vue'\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new FBXLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (fbx) => {\n this.onLoad(fbx)\n this.initObject3D(fbx)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent, inject, InjectionKey } from 'vue'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\n\ninterface EffectComposerSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposer\n}\n\nexport interface EffectComposerInterface extends EffectComposerSetupInterface {\n addPass(pass: Pass): void\n removePass(pass: Pass): void\n}\n\nexport const ComposerInjectionKey: InjectionKey = Symbol('Composer')\n\nexport default defineComponent({\n setup(): EffectComposerSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n provide() {\n return {\n [ComposerInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n const composer = new EffectComposer(this.renderer.renderer)\n this.composer = composer\n this.renderer.composer = composer\n\n // this.renderer.onInit(() => {\n renderer.addListener('init', () => {\n renderer.renderer.autoClear = false\n this.resize()\n renderer.addListener('resize', this.resize)\n })\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n addPass(pass: Pass) {\n this.composer?.addPass(pass)\n },\n removePass(pass: Pass) {\n this.composer?.removePass(pass)\n },\n resize() {\n if (this.composer && this.renderer) {\n this.composer.setSize(this.renderer.size.width, this.renderer.size.height)\n }\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'EffectComposer',\n})\n","import { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { defineComponent } from 'vue'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\nimport { ComposerInjectionKey, EffectComposerInterface } from './EffectComposer'\n\nexport interface EffectSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposerInterface\n pass?: Pass\n}\n\nexport default defineComponent({\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n composer: ComposerInjectionKey as symbol,\n },\n emits: ['ready'],\n setup(): EffectSetupInterface {\n return {}\n },\n created() {\n if (!this.composer) {\n console.error('Missing parent EffectComposer')\n }\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n },\n unmounted() {\n if (this.pass) {\n this.composer?.removePass(this.pass);\n (this.pass as any).dispose?.()\n }\n },\n methods: {\n initEffectPass(pass: Pass) {\n this.pass = pass\n this.composer?.addPass(pass)\n this.$emit('ready', pass)\n },\n },\n render() {\n return []\n },\n __hmrId: 'EffectPass',\n})\n","import { defineComponent } from 'vue'\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n const pass = new RenderPass(this.renderer.scene, this.renderer.camera)\n this.initEffectPass(pass)\n },\n __hmrId: 'RenderPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n focus: { type: Number, default: 1 },\n aperture: { type: Number, default: 0.025 },\n maxblur: { type: Number, default: 0.01 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.renderer.size.width,\n height: this.renderer.size.height,\n }\n\n const pass = new BokehPass(this.renderer.scene, this.renderer.camera, params)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'BokehPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n noiseIntensity: { type: Number, default: 0.5 },\n scanlinesIntensity: { type: Number, default: 0.05 },\n scanlinesCount: { type: Number, default: 4096 },\n grayscale: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'FilmPass',\n})\n","import { defineComponent } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'\nimport EffectPass from './EffectPass'\nimport { SizeInterface } from '../core/useThree'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n const pass = new ShaderPass(FXAAShader)\n\n // resize will be first called in renderer init\n this.renderer?.addListener('resize', this.resize)\n\n this.initEffectPass(pass)\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n resize({ size }: { size: SizeInterface }) {\n if (this.pass) {\n const { resolution } = (this.pass as ShaderPass).material.uniforms\n resolution.value.x = 1 / size.width\n resolution.value.y = 1 / size.height\n }\n },\n },\n __hmrId: 'FXAAPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const pass = new HalftonePass(this.renderer.size.width, this.renderer.size.height, {})\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n pass.uniforms[p].value = this[p]\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'HalftonePass',\n})\n","import { defineComponent } from 'vue'\nimport { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n const pass = new SMAAPass(this.renderer.size.width, this.renderer.size.height)\n this.initEffectPass(pass)\n },\n __hmrId: 'SMAAPass',\n})\n","import { defineComponent } from 'vue'\nimport { SSAOPass } from 'three/examples/jsm/postprocessing/SSAOPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n options: {\n type: Object,\n default: () => ({}),\n },\n },\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const pass = new SSAOPass(\n this.renderer.scene,\n this.renderer.camera,\n this.renderer.size.width,\n this.renderer.size.height\n )\n\n Object.keys(this.options).forEach(key => {\n // @ts-ignore\n pass[key] = this.options[key]\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'SSAOPass',\n})\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n}\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport TiltShift from '../shaders/TiltShift'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nconst props = {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object as PropType, default: () => ({ x: 0, y: 100 }) },\n end: { type: Object as PropType, default: () => ({ x: 10, y: 100 }) },\n} as const\n\ninterface TiltShiftPassSetupInterface {\n uniforms1: {[name: string]: { value: any }}\n uniforms2: {[name: string]: { value: any }}\n pass1?: ShaderPass\n pass2?: ShaderPass\n}\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n setup(): TiltShiftPassSetupInterface {\n return { uniforms1: {}, uniforms2: {} }\n },\n created() {\n if (!this.composer) return\n\n this.pass1 = new ShaderPass(TiltShift)\n this.pass2 = new ShaderPass(TiltShift)\n\n const uniforms1 = this.uniforms1 = this.pass1.uniforms\n const uniforms2 = this.uniforms2 = this.pass2.uniforms\n\n // shared uniforms\n uniforms2.blurRadius = uniforms1.blurRadius\n uniforms2.gradientRadius = uniforms1.gradientRadius\n uniforms2.start = uniforms1.start\n uniforms2.end = uniforms1.end\n uniforms2.texSize = uniforms1.texSize\n\n bindProp(this, 'blurRadius', uniforms1.blurRadius, 'value')\n bindProp(this, 'gradientRadius', uniforms1.gradientRadius, 'value')\n\n this.updateFocusLine();\n\n ['start', 'end'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.updateFocusLine, { deep: true })\n })\n\n this.pass1.setSize = (width: number, height: number) => {\n uniforms1.texSize.value.set(width, height)\n }\n\n this.initEffectPass(this.pass1)\n this.composer.addPass(this.pass2)\n },\n unmounted() {\n if (this.composer && this.pass2) this.composer.removePass(this.pass2)\n },\n methods: {\n updateFocusLine() {\n this.uniforms1.start.value.copy(this.start)\n this.uniforms1.end.value.copy(this.end)\n const dv = new Vector2().copy(this.end as Vector2).sub(this.start as Vector2).normalize()\n this.uniforms1.delta.value.copy(dv)\n this.uniforms2.delta.value.set(-dv.y, dv.x)\n },\n },\n __hmrId: 'TiltShiftPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const size = new Vector2(this.renderer.size.width, this.renderer.size.height)\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'UnrealBloomPass',\n})\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport ZoomBlur from '../shaders/ZoomBlur'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n center: { type: Object as PropType, default: () => ({ x: 0.5, y: 0.5 }) },\n strength: { type: Number, default: 0.5 },\n },\n created() {\n const pass = new ShaderPass(ZoomBlur)\n\n bindProp(this, 'center', pass.uniforms.center, 'value')\n bindProp(this, 'strength', pass.uniforms.strength, 'value')\n\n this.initEffectPass(pass)\n },\n __hmrId: 'ZoomBlurPass',\n})\n","import { App, createApp as _createApp } from 'vue'\nimport * as TROIS from './index'\n\nexport const TroisJSVuePlugin = {\n install(app: App): void {\n const comps = [\n 'Camera',\n 'OrthographicCamera',\n 'PerspectiveCamera',\n 'Raycaster',\n 'Renderer',\n 'Scene',\n 'Group',\n\n 'CubeCamera',\n\n 'AmbientLight',\n 'DirectionalLight',\n 'HemisphereLight',\n 'PointLight',\n 'RectAreaLight',\n 'SpotLight',\n\n 'BasicMaterial',\n 'LambertMaterial',\n 'MatcapMaterial',\n 'PhongMaterial',\n 'PhysicalMaterial',\n 'PointsMaterial',\n 'ShaderMaterial',\n 'StandardMaterial',\n 'SubSurfaceMaterial',\n 'ToonMaterial',\n\n 'Texture',\n 'CubeTexture',\n\n 'BufferGeometry',\n\n 'Mesh',\n\n 'Box', 'BoxGeometry',\n 'Circle', 'CircleGeometry',\n 'Cone', 'ConeGeometry',\n 'Cylinder', 'CylinderGeometry',\n 'Dodecahedron', 'DodecahedronGeometry',\n 'Icosahedron', 'IcosahedronGeometry',\n 'Lathe', 'LatheGeometry',\n 'Octahedron', 'OctahedronGeometry',\n 'Plane', 'PlaneGeometry',\n 'Polyhedron', 'PolyhedronGeometry',\n 'Ring', 'RingGeometry',\n 'Sphere', 'SphereGeometry',\n 'Tetrahedron', 'TetrahedronGeometry',\n 'Text',\n 'Torus', 'TorusGeometry',\n 'TorusKnot', 'TorusKnotGeometry',\n 'Tube', 'TubeGeometry',\n\n 'Image',\n 'InstancedMesh',\n 'Points',\n 'Sprite',\n\n 'FbxModel',\n 'GltfModel',\n\n 'BokehPass',\n 'EffectComposer',\n 'FilmPass',\n 'FXAAPass',\n 'HalftonePass',\n 'RenderPass',\n 'SAOPass',\n 'SMAAPass',\n 'SSAOPass',\n 'TiltShiftPass',\n 'UnrealBloomPass',\n 'ZoomBlurPass',\n ]\n\n comps.forEach(comp => {\n // @ts-ignore\n app.component(comp, TROIS[comp])\n })\n },\n}\n\nexport function createApp(params: any): App {\n return _createApp(params).use(TroisJSVuePlugin)\n}\n","import { Texture, TextureLoader } from 'three'\n\nexport interface TextureConfigInterface {\n src: string\n}\n\nexport interface TexturesInterface {\n loader: TextureLoader\n count: number\n textures: Texture[],\n loadProgress: number\n loadTextures(images: TextureConfigInterface[], cb: {() : void}): void\n dispose(): void\n}\n\nexport default function useTextures(): TexturesInterface {\n const obj: TexturesInterface = {\n loader: new TextureLoader(),\n count: 0,\n textures: [],\n loadProgress: 0,\n loadTextures,\n dispose,\n }\n return obj\n\n function loadTextures(images: TextureConfigInterface[], cb: {() : void}) {\n obj.count = images.length\n obj.textures.splice(0)\n obj.loadProgress = 0\n Promise.all(images.map(loadTexture)).then(cb)\n }\n\n function loadTexture(img: TextureConfigInterface, index: number) {\n return new Promise(resolve => {\n obj.loader.load(\n img.src,\n texture => {\n obj.loadProgress += 1 / obj.count\n obj.textures[index] = texture\n resolve(texture)\n }\n )\n })\n }\n\n function dispose() {\n obj.textures.forEach(t => t.dispose())\n }\n}\n"],"names":["toRef","watch","ref","Vector3","Raycaster","Plane","Vector2","intersect","InstancedMesh","event","renderer","WebGLRenderer","OrbitControls","defineComponent","watchEffect","inject","OrthographicCamera","PerspectiveCamera","_a","Scene","provide","Color","Texture","getCurrentInstance","Group","WebGLCubeRenderTarget","RGBAFormat","LinearMipmapLinearFilter","CubeCamera","onUnmounted","TMesh","BufferGeometry","BufferAttribute","props","createGeometry","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","ExtrudeGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PlaneGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","ShapeGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","Curve","CatmullRomCurve3","TubeGeometry","SpotLight","DirectionalLight","AmbientLight","HemisphereLight","PointLight","RectAreaLightUniformsLib","RectAreaLight","RectAreaLightHelper","MeshBasicMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshPhysicalMaterial","TPointsMaterial","TShadowMaterial","MeshStandardMaterial","MeshToonMaterial","TextureLoader","MeshMatcapMaterial","ShaderMaterial","ShaderChunk","UniformsUtils","ShaderLib","Material","CubeReflectionMapping","CubeTextureLoader","VideoTexture","FontLoader","TextGeometry","DoubleSide","SpriteMaterial","Sprite","Points","GLTFLoader","FBXLoader","EffectComposer","RenderPass","BokehPass","FilmPass","ShaderPass","FXAAShader","HalftonePass","SMAAPass","SSAOPass","UnrealBloomPass","_createApp"],"mappings":"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"} \ No newline at end of file diff --git a/build/trois.module.cdn.js b/build/trois.module.cdn.js new file mode 100644 index 0000000..f2578de --- /dev/null +++ b/build/trois.module.cdn.js @@ -0,0 +1,3010 @@ +import { toRef, watch, ref, defineComponent, watchEffect, inject, provide, getCurrentInstance, onUnmounted, createApp as createApp$1 } from 'https://unpkg.com/vue@3.2.20/dist/vue.esm-browser.prod.js'; +import { Vector3, Raycaster as Raycaster$1, Plane as Plane$1, Vector2, InstancedMesh as InstancedMesh$1, WebGLRenderer, OrthographicCamera as OrthographicCamera$1, PerspectiveCamera as PerspectiveCamera$1, Scene as Scene$1, Color, Texture as Texture$1, Group as Group$1, WebGLCubeRenderTarget, RGBAFormat, LinearMipmapLinearFilter, CubeCamera as CubeCamera$1, Mesh as Mesh$1, BufferGeometry, BufferAttribute, BoxGeometry as BoxGeometry$1, CircleGeometry as CircleGeometry$1, ConeGeometry as ConeGeometry$1, CylinderGeometry as CylinderGeometry$1, DodecahedronGeometry as DodecahedronGeometry$1, ExtrudeGeometry as ExtrudeGeometry$1, IcosahedronGeometry as IcosahedronGeometry$1, LatheGeometry as LatheGeometry$1, OctahedronGeometry as OctahedronGeometry$1, PlaneGeometry as PlaneGeometry$1, PolyhedronGeometry as PolyhedronGeometry$1, RingGeometry as RingGeometry$1, SphereGeometry as SphereGeometry$1, ShapeGeometry as ShapeGeometry$1, TetrahedronGeometry as TetrahedronGeometry$1, TorusGeometry as TorusGeometry$1, TorusKnotGeometry as TorusKnotGeometry$1, CatmullRomCurve3, Curve, TubeGeometry as TubeGeometry$1, SpotLight as SpotLight$1, DirectionalLight as DirectionalLight$1, AmbientLight as AmbientLight$1, HemisphereLight as HemisphereLight$1, PointLight as PointLight$1, RectAreaLight as RectAreaLight$1, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, MeshPhysicalMaterial, PointsMaterial as PointsMaterial$1, ShadowMaterial as ShadowMaterial$1, MeshStandardMaterial, MeshToonMaterial, TextureLoader, MeshMatcapMaterial, ShaderMaterial as ShaderMaterial$1, ShaderChunk, UniformsUtils, ShaderLib, CubeReflectionMapping, CubeTextureLoader, VideoTexture as VideoTexture$1, DoubleSide, SpriteMaterial, Sprite as Sprite$1, Points as Points$1 } from 'https://cdn.skypack.dev/three@0.136.0/build/three.module.js'; +import { OrbitControls } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/controls/OrbitControls.js'; +import { RectAreaLightUniformsLib } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/lights/RectAreaLightUniformsLib.js'; +import { RectAreaLightHelper } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/helpers/RectAreaLightHelper.js'; +import { TextGeometry } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/geometries/TextGeometry.js'; +import { FontLoader } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/loaders/FontLoader.js'; +import { GLTFLoader } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/loaders/GLTFLoader.js'; +import { FBXLoader } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/loaders/FBXLoader.js'; +import { EffectComposer as EffectComposer$1 } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/EffectComposer.js'; +import { RenderPass as RenderPass$1 } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/RenderPass.js'; +import { BokehPass as BokehPass$1 } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/BokehPass.js'; +import { FilmPass as FilmPass$1 } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/FilmPass.js'; +import { ShaderPass } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/ShaderPass.js'; +import { FXAAShader } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/shaders/FXAAShader.js'; +import { HalftonePass as HalftonePass$1 } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/HalftonePass.js'; +import { SMAAPass as SMAAPass$1 } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/SMAAPass.js'; +import { SSAOPass as SSAOPass$1 } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/SSAOPass.js'; +import { UnrealBloomPass as UnrealBloomPass$1 } from 'https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/UnrealBloomPass.js'; + +function applyObjectProps(dst, options, setter) { + if (options instanceof Object) { + Object.entries(options).forEach(([key, value]) => { + if (setter) + setter(dst, key, value); + else + dst[key] = value; + }); + } +} +function bindObjectProp(src, prop, dst, apply = true, setter) { + if (apply) + applyObjectProps(dst, src[prop], setter); + const r = toRef(src, prop); + return watch(r, (value) => { + applyObjectProps(dst, value, setter); + }); +} +function bindObjectProps(src, dst, apply = true, setter) { + if (apply) + applyObjectProps(dst, src, setter); + const r = ref(src); + return watch(r, (value) => { + applyObjectProps(dst, value, setter); + }, { deep: true }); +} +function setFromProp(o, prop) { + if (prop instanceof Object) { + Object.entries(prop).forEach(([key, value]) => { + o[key] = value; + }); + } +} +function bindProps(src, props, dst) { + props.forEach((prop) => { + bindProp(src, prop, dst, prop); + }); +} +function bindProp(src, srcProp, dst, dstProp) { + const _dstProp = dstProp || srcProp; + const ref2 = toRef(src, srcProp); + if (ref2.value instanceof Object) { + setFromProp(dst[_dstProp], ref2.value); + watch(ref2, (value) => { + setFromProp(dst[_dstProp], value); + }, { deep: true }); + } else { + if (ref2.value !== void 0) + dst[_dstProp] = src[srcProp]; + watch(ref2, (value) => { + dst[_dstProp] = value; + }); + } +} +function propsValues(props, exclude = []) { + const values = {}; + Object.entries(props).forEach(([key, value]) => { + if (!exclude || !exclude.includes(key)) { + values[key] = value; + } + }); + return values; +} +function lerp(value1, value2, amount) { + amount = amount < 0 ? 0 : amount; + amount = amount > 1 ? 1 : amount; + return value1 + (value2 - value1) * amount; +} +function limit(val, min, max) { + return val < min ? min : val > max ? max : val; +} +const MATCAP_ROOT = "https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d"; +const DEFAULT_MATCAP = "0404E8_0404B5_0404CB_3333FC"; +function getMatcapUrl(hash = DEFAULT_MATCAP, format = 1024) { + const fileName = `${hash}${getMatcapFormatString(format)}.png`; + return `${MATCAP_ROOT}/${format}/${fileName}`; +} +function getMatcapFormatString(format) { + switch (format) { + case 64: + return "-64px"; + case 128: + return "-128px"; + case 256: + return "-256px"; + case 512: + return "-512px"; + default: + return ""; + } +} + +function useRaycaster(options) { + const { + camera, + resetPosition = new Vector3(0, 0, 0) + } = options; + const raycaster = new Raycaster$1(); + const position = resetPosition.clone(); + const plane = new Plane$1(new Vector3(0, 0, 1), 0); + const updatePosition = (coords) => { + raycaster.setFromCamera(coords, camera); + camera.getWorldDirection(plane.normal); + raycaster.ray.intersectPlane(plane, position); + }; + const intersect = (coords, objects, recursive = false) => { + raycaster.setFromCamera(coords, camera); + return raycaster.intersectObjects(objects, recursive); + }; + return { + position, + updatePosition, + intersect + }; +} + +function usePointer(options) { + const { + camera, + domElement, + intersectObjects, + intersectRecursive = false, + touch = true, + resetOnEnd = false, + onEnter = () => { + }, + onMove = () => { + }, + onLeave = () => { + }, + onClick = () => { + }, + onIntersectEnter = () => { + }, + onIntersectOver = () => { + }, + onIntersectMove = () => { + }, + onIntersectLeave = () => { + }, + onIntersectClick = () => { + } + } = options; + const position = new Vector2(0, 0); + const positionN = new Vector2(0, 0); + const raycaster = useRaycaster({ camera }); + const positionV3 = raycaster.position; + const obj = { + position, + positionN, + positionV3, + intersectObjects, + listeners: false, + addListeners, + removeListeners, + intersect + }; + return obj; + function reset() { + position.set(0, 0); + positionN.set(0, 0); + positionV3.set(0, 0, 0); + } + function updatePosition(event) { + let x, y; + if (event.touches && event.touches.length > 0) { + x = event.touches[0].clientX; + y = event.touches[0].clientY; + } else { + x = event.clientX; + y = event.clientY; + } + const rect = domElement.getBoundingClientRect(); + position.x = x - rect.left; + position.y = y - rect.top; + positionN.x = position.x / rect.width * 2 - 1; + positionN.y = -(position.y / rect.height) * 2 + 1; + raycaster.updatePosition(positionN); + } + function intersect() { + const _intersectObjects = getIntersectObjects(); + if (_intersectObjects.length) { + const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive); + const offObjects = [..._intersectObjects]; + const iMeshes = []; + intersects.forEach((intersect2) => { + var _a, _b, _c; + const { object } = intersect2; + const component = getComponent(object); + if (object instanceof InstancedMesh$1) { + if (iMeshes.indexOf(object) !== -1) + return; + iMeshes.push(object); + } + if (!object.userData.over) { + object.userData.over = true; + const overEvent = { type: "pointerover", over: true, component, intersect: intersect2 }; + const enterEvent = { ...overEvent, type: "pointerenter" }; + onIntersectOver(overEvent); + onIntersectEnter(enterEvent); + (_a = component == null ? void 0 : component.onPointerOver) == null ? void 0 : _a.call(component, overEvent); + (_b = component == null ? void 0 : component.onPointerEnter) == null ? void 0 : _b.call(component, enterEvent); + } + const moveEvent = { type: "pointermove", component, intersect: intersect2 }; + onIntersectMove(moveEvent); + (_c = component == null ? void 0 : component.onPointerMove) == null ? void 0 : _c.call(component, moveEvent); + offObjects.splice(offObjects.indexOf(object), 1); + }); + offObjects.forEach((object) => { + var _a, _b; + const component = getComponent(object); + if (object.userData.over) { + object.userData.over = false; + const overEvent = { type: "pointerover", over: false, component }; + const leaveEvent = { ...overEvent, type: "pointerleave" }; + onIntersectOver(overEvent); + onIntersectLeave(leaveEvent); + (_a = component == null ? void 0 : component.onPointerOver) == null ? void 0 : _a.call(component, overEvent); + (_b = component == null ? void 0 : component.onPointerLeave) == null ? void 0 : _b.call(component, leaveEvent); + } + }); + } + } + function pointerEnter(event) { + updatePosition(event); + onEnter({ type: "pointerenter", position, positionN, positionV3 }); + } + function pointerMove(event) { + updatePosition(event); + onMove({ type: "pointermove", position, positionN, positionV3 }); + intersect(); + } + function pointerClick(event) { + updatePosition(event); + const _intersectObjects = getIntersectObjects(); + if (_intersectObjects.length) { + const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive); + const iMeshes = []; + intersects.forEach((intersect2) => { + var _a; + const { object } = intersect2; + const component = getComponent(object); + if (object instanceof InstancedMesh$1) { + if (iMeshes.indexOf(object) !== -1) + return; + iMeshes.push(object); + } + const event2 = { type: "click", component, intersect: intersect2 }; + onIntersectClick(event2); + (_a = component == null ? void 0 : component.onClick) == null ? void 0 : _a.call(component, event2); + }); + } + onClick({ type: "click", position, positionN, positionV3 }); + } + function pointerLeave() { + if (resetOnEnd) + reset(); + onLeave({ type: "pointerleave" }); + } + function getComponent(object) { + if (object.userData.component) + return object.userData.component; + let parent = object.parent; + while (parent) { + if (parent.userData.component) { + return parent.userData.component; + } + parent = parent.parent; + } + return void 0; + } + function getIntersectObjects() { + if (typeof intersectObjects === "function") { + return intersectObjects(); + } else + return intersectObjects; + } + function addListeners() { + domElement.addEventListener("mouseenter", pointerEnter); + domElement.addEventListener("mousemove", pointerMove); + domElement.addEventListener("mouseleave", pointerLeave); + domElement.addEventListener("click", pointerClick); + if (touch) { + domElement.addEventListener("touchstart", pointerEnter); + domElement.addEventListener("touchmove", pointerMove); + domElement.addEventListener("touchend", pointerLeave); + } + obj.listeners = true; + } + function removeListeners() { + domElement.removeEventListener("mouseenter", pointerEnter); + domElement.removeEventListener("mousemove", pointerMove); + domElement.removeEventListener("mouseleave", pointerLeave); + domElement.removeEventListener("click", pointerClick); + domElement.removeEventListener("touchstart", pointerEnter); + domElement.removeEventListener("touchmove", pointerMove); + domElement.removeEventListener("touchend", pointerLeave); + obj.listeners = false; + } +} + +function useThree(params) { + const config = { + antialias: true, + alpha: false, + autoClear: true, + orbitCtrl: false, + pointer: false, + resize: false, + width: 300, + height: 150 + }; + if (params) { + Object.entries(params).forEach(([key, value]) => { + config[key] = value; + }); + } + const size = { + width: 1, + height: 1, + wWidth: 1, + wHeight: 1, + ratio: 1 + }; + const beforeRenderCallbacks = []; + const intersectObjects = []; + const renderer = createRenderer(); + const obj = { + config, + renderer, + size, + init, + dispose, + render, + renderC, + setSize, + addIntersectObject, + removeIntersectObject + }; + return obj; + function createRenderer() { + const renderer2 = new WebGLRenderer({ canvas: config.canvas, antialias: config.antialias, alpha: config.alpha, ...config.params }); + renderer2.autoClear = config.autoClear; + return renderer2; + } + function init() { + if (!obj.scene) { + console.error("Missing Scene"); + return false; + } + if (!obj.camera) { + console.error("Missing Camera"); + return false; + } + if (config.resize) { + onResize(); + window.addEventListener("resize", onResize); + } else if (config.width && config.height) { + setSize(config.width, config.height); + } + initPointer(); + if (config.orbitCtrl) { + const cameraCtrl = new OrbitControls(obj.camera, obj.renderer.domElement); + if (config.orbitCtrl instanceof Object) { + Object.entries(config.orbitCtrl).forEach(([key, value]) => { + cameraCtrl[key] = value; + }); + } + onBeforeRender(() => { + cameraCtrl.update(); + }); + obj.cameraCtrl = cameraCtrl; + } + return true; + } + function initPointer() { + let pointerConf = { + camera: obj.camera, + domElement: obj.renderer.domElement, + intersectObjects + }; + if (config.pointer && config.pointer instanceof Object) { + pointerConf = { ...pointerConf, ...config.pointer }; + } + const pointer = obj.pointer = usePointer(pointerConf); + if (config.pointer || intersectObjects.length) { + pointer.addListeners(); + if (pointerConf.intersectMode === "frame") { + onBeforeRender(pointer.intersect); + } + } + } + function onBeforeRender(cb) { + beforeRenderCallbacks.push(cb); + } + function render() { + beforeRenderCallbacks.forEach((c) => c()); + obj.renderer.render(obj.scene, obj.camera); + } + function renderC() { + beforeRenderCallbacks.forEach((c) => c()); + obj.composer.render(); + } + function addIntersectObject(o) { + if (intersectObjects.indexOf(o) === -1) { + intersectObjects.push(o); + } + if (obj.pointer && !obj.pointer.listeners) { + obj.pointer.addListeners(); + } + } + function removeIntersectObject(o) { + const i = intersectObjects.indexOf(o); + if (i !== -1) { + intersectObjects.splice(i, 1); + } + if (obj.pointer && !config.pointer && intersectObjects.length === 0) { + obj.pointer.removeListeners(); + } + } + function dispose() { + window.removeEventListener("resize", onResize); + if (obj.pointer) + obj.pointer.removeListeners(); + if (obj.cameraCtrl) + obj.cameraCtrl.dispose(); + if (obj.renderer) + obj.renderer.dispose(); + } + function onResize() { + var _a; + if (config.resize === "window") { + setSize(window.innerWidth, window.innerHeight); + } else { + const elt = obj.renderer.domElement.parentNode; + if (elt) + setSize(elt.clientWidth, elt.clientHeight); + } + (_a = config.onResize) == null ? void 0 : _a.call(config, size); + } + function setSize(width, height) { + size.width = width; + size.height = height; + size.ratio = width / height; + obj.renderer.setSize(width, height, false); + const camera = obj.camera; + if (camera.type === "PerspectiveCamera") { + const pCamera = camera; + pCamera.aspect = size.ratio; + pCamera.updateProjectionMatrix(); + } + if (camera.type === "OrthographicCamera") { + const oCamera = camera; + size.wWidth = oCamera.right - oCamera.left; + size.wHeight = oCamera.top - oCamera.bottom; + } else { + const wsize = getCameraSize(); + size.wWidth = wsize[0]; + size.wHeight = wsize[1]; + } + } + function getCameraSize() { + const camera = obj.camera; + const vFOV = camera.fov * Math.PI / 180; + const h = 2 * Math.tan(vFOV / 2) * Math.abs(camera.position.z); + const w = h * camera.aspect; + return [w, h]; + } +} + +const RendererInjectionKey = Symbol("Renderer"); +var Renderer = defineComponent({ + name: "Renderer", + props: { + params: { type: Object, default: () => ({}) }, + antialias: Boolean, + alpha: Boolean, + autoClear: { type: Boolean, default: true }, + orbitCtrl: { type: [Boolean, Object], default: false }, + pointer: { type: [Boolean, Object], default: false }, + resize: { type: [Boolean, String], default: false }, + shadow: Boolean, + width: String, + height: String, + pixelRatio: Number, + xr: Boolean, + props: { type: Object, default: () => ({}) }, + onReady: Function + }, + inheritAttrs: false, + setup(props, { attrs }) { + const initCallbacks = []; + const mountedCallbacks = []; + const beforeRenderCallbacks = []; + const afterRenderCallbacks = []; + const resizeCallbacks = []; + const canvas = document.createElement("canvas"); + Object.entries(attrs).forEach(([key, value]) => { + const matches = key.match(/^on([A-Z][a-zA-Z]*)$/); + if (matches) { + canvas.addEventListener(matches[1].toLowerCase(), value); + } else { + canvas.setAttribute(key, value); + } + }); + const config = { + canvas, + params: props.params, + antialias: props.antialias, + alpha: props.alpha, + autoClear: props.autoClear, + orbitCtrl: props.orbitCtrl, + pointer: props.pointer, + resize: props.resize + }; + if (props.width) + config.width = parseInt(props.width); + if (props.height) + config.height = parseInt(props.height); + const three = useThree(config); + bindObjectProp(props, "props", three.renderer); + watchEffect(() => { + if (props.pixelRatio) + three.renderer.setPixelRatio(props.pixelRatio); + }); + const renderFn = () => { + }; + return { + canvas, + three, + renderer: three.renderer, + size: three.size, + renderFn, + raf: true, + initCallbacks, + mountedCallbacks, + beforeRenderCallbacks, + afterRenderCallbacks, + resizeCallbacks + }; + }, + computed: { + camera: { + get: function() { + return this.three.camera; + }, + set: function(camera) { + this.three.camera = camera; + } + }, + scene: { + get: function() { + return this.three.scene; + }, + set: function(scene) { + this.three.scene = scene; + } + }, + composer: { + get: function() { + return this.three.composer; + }, + set: function(composer) { + this.three.composer = composer; + } + } + }, + provide() { + return { + [RendererInjectionKey]: this + }; + }, + mounted() { + var _a; + this.$el.parentNode.insertBefore(this.canvas, this.$el); + if (this.three.init()) { + if (this.three.pointer) { + this.$pointer = this.three.pointer; + } + this.three.config.onResize = (size) => { + this.resizeCallbacks.forEach((e) => e({ type: "resize", renderer: this, size })); + }; + if (this.shadow) { + this.renderer.shadowMap.enabled = true; + } + this.renderFn = this.three.composer ? this.three.renderC : this.three.render; + this.initCallbacks.forEach((e) => e({ type: "init", renderer: this })); + (_a = this.onReady) == null ? void 0 : _a.call(this, this); + if (this.xr) { + this.renderer.xr.enabled = true; + this.renderer.setAnimationLoop(this.render); + } else { + requestAnimationFrame(this.renderLoop); + } + } + this.mountedCallbacks.forEach((e) => e({ type: "mounted", renderer: this })); + }, + beforeUnmount() { + this.canvas.remove(); + this.beforeRenderCallbacks = []; + this.afterRenderCallbacks = []; + this.raf = false; + this.three.dispose(); + }, + methods: { + onInit(cb) { + this.addListener("init", cb); + }, + onMounted(cb) { + this.addListener("mounted", cb); + }, + onBeforeRender(cb) { + this.addListener("beforerender", cb); + }, + offBeforeRender(cb) { + this.removeListener("beforerender", cb); + }, + onAfterRender(cb) { + this.addListener("afterrender", cb); + }, + offAfterRender(cb) { + this.removeListener("afterrender", cb); + }, + onResize(cb) { + this.addListener("resize", cb); + }, + offResize(cb) { + this.removeListener("resize", cb); + }, + addListener(type, cb) { + const callbacks = this.getCallbacks(type); + callbacks.push(cb); + }, + removeListener(type, cb) { + const callbacks = this.getCallbacks(type); + const index = callbacks.indexOf(cb); + if (index !== -1) + callbacks.splice(index, 1); + }, + getCallbacks(type) { + if (type === "init") { + return this.initCallbacks; + } else if (type === "mounted") { + return this.mountedCallbacks; + } else if (type === "beforerender") { + return this.beforeRenderCallbacks; + } else if (type === "afterrender") { + return this.afterRenderCallbacks; + } else { + return this.resizeCallbacks; + } + }, + render(time) { + this.beforeRenderCallbacks.forEach((e) => e({ type: "beforerender", renderer: this, time })); + this.renderFn({ renderer: this, time }); + this.afterRenderCallbacks.forEach((e) => e({ type: "afterrender", renderer: this, time })); + }, + renderLoop(time) { + if (this.raf) + requestAnimationFrame(this.renderLoop); + this.render(time); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Renderer" +}); + +var Camera = defineComponent({ + props: { + props: { type: Object, default: () => ({}) } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + } +}); +function cameraSetProp(camera, key, value, updateProjectionMatrix = true) { + camera[key] = value; + if (updateProjectionMatrix) + camera.updateProjectionMatrix(); +} + +var OrthographicCamera = defineComponent({ + extends: Camera, + name: "OrthographicCamera", + props: { + left: { type: Number, default: -1 }, + right: { type: Number, default: 1 }, + top: { type: Number, default: 1 }, + bottom: { type: Number, default: -1 }, + near: { type: Number, default: 0.1 }, + far: { type: Number, default: 2e3 }, + zoom: { type: Number, default: 1 }, + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) } + }, + setup(props) { + const renderer = inject(RendererInjectionKey); + if (!renderer) { + console.error("Renderer not found"); + return; + } + const camera = new OrthographicCamera$1(props.left, props.right, props.top, props.bottom, props.near, props.far); + renderer.camera = camera; + bindProp(props, "position", camera); + bindObjectProp(props, "props", camera, true, cameraSetProp); + ["left", "right", "top", "bottom", "near", "far", "zoom"].forEach((p) => { + watch(() => props[p], (value) => { + cameraSetProp(camera, p, value); + }); + }); + return { renderer, camera }; + }, + __hmrId: "OrthographicCamera" +}); + +var PerspectiveCamera = defineComponent({ + extends: Camera, + name: "PerspectiveCamera", + props: { + aspect: { type: Number, default: 1 }, + far: { type: Number, default: 2e3 }, + fov: { type: Number, default: 50 }, + near: { type: Number, default: 0.1 }, + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + lookAt: { type: Object, default: null } + }, + setup(props) { + var _a; + const renderer = inject(RendererInjectionKey); + if (!renderer) { + console.error("Renderer not found"); + return; + } + const camera = new PerspectiveCamera$1(props.fov, props.aspect, props.near, props.far); + renderer.camera = camera; + bindProp(props, "position", camera); + if (props.lookAt) + camera.lookAt((_a = props.lookAt.x) != null ? _a : 0, props.lookAt.y, props.lookAt.z); + watch(() => props.lookAt, (v) => { + var _a2; + camera.lookAt((_a2 = v.x) != null ? _a2 : 0, v.y, v.z); + }, { deep: true }); + bindObjectProp(props, "props", camera, true, cameraSetProp); + ["aspect", "far", "fov", "near"].forEach((p) => { + watch(() => props[p], (value) => { + cameraSetProp(camera, p, value); + }); + }); + return { renderer, camera }; + }, + __hmrId: "PerspectiveCamera" +}); + +const SceneInjectionKey = Symbol("Scene"); +var Scene = defineComponent({ + name: "Scene", + props: { + background: [String, Number, Object] + }, + setup(props) { + const renderer = inject(RendererInjectionKey); + const scene = new Scene$1(); + if (!renderer) { + console.error("Renderer not found"); + return; + } + renderer.scene = scene; + provide(SceneInjectionKey, scene); + const setBackground = (value) => { + if (!value) + return; + if (typeof value === "string" || typeof value === "number") { + if (scene.background instanceof Color) + scene.background.set(value); + else + scene.background = new Color(value); + } else if (value instanceof Texture$1) { + scene.background = value; + } + }; + setBackground(props.background); + watch(() => props.background, setBackground); + const add = (o) => { + scene.add(o); + }; + const remove = (o) => { + scene.remove(o); + }; + return { scene, add, remove }; + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Scene" +}); + +const pointerProps = { + onPointerEnter: Function, + onPointerOver: Function, + onPointerMove: Function, + onPointerLeave: Function, + onPointerDown: Function, + onPointerUp: Function, + onClick: Function +}; +var Object3D = defineComponent({ + name: "Object3D", + inject: { + renderer: RendererInjectionKey, + scene: SceneInjectionKey + }, + emits: ["created", "ready"], + props: { + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + rotation: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + scale: { type: Object, default: () => ({ x: 1, y: 1, z: 1, order: "XYZ" }) }, + lookAt: { type: Object, default: null }, + userData: { type: Object, default: () => ({}) }, + visible: { type: Boolean, default: true }, + props: { type: Object, default: () => ({}) }, + disableAdd: { type: Boolean, default: false }, + disableRemove: { type: Boolean, default: false }, + ...pointerProps + }, + setup() { + return {}; + }, + created() { + if (!this.renderer) { + console.error("Missing parent Renderer"); + } + if (!this.scene) { + console.error("Missing parent Scene"); + } + }, + unmounted() { + if (!this.disableRemove) + this.removeFromParent(); + if (this.o3d) { + if (this.renderer) + this.renderer.three.removeIntersectObject(this.o3d); + } + }, + methods: { + initObject3D(o3d) { + var _a; + this.o3d = o3d; + o3d.userData.component = this; + if (this.onPointerEnter || this.onPointerOver || this.onPointerMove || this.onPointerLeave || this.onPointerDown || this.onPointerUp || this.onClick) { + if (this.renderer) + this.renderer.three.addIntersectObject(o3d); + } + bindProp(this, "position", o3d); + bindProp(this, "rotation", o3d); + bindProp(this, "scale", o3d); + bindProp(this, "userData", o3d.userData); + bindProp(this, "visible", o3d); + bindObjectProp(this, "props", o3d); + this.$emit("created", o3d); + if (this.lookAt) + o3d.lookAt((_a = this.lookAt.x) != null ? _a : 0, this.lookAt.y, this.lookAt.z); + watch(() => this.lookAt, (v) => { + var _a2; + o3d.lookAt((_a2 = v.x) != null ? _a2 : 0, v.y, v.z); + }, { deep: true }); + this.parent = this.getParent(); + if (!this.disableAdd) { + if (this.addToParent()) + this.$emit("ready", this); + else + console.error("Missing parent (Scene, Group...)"); + } + }, + getParent() { + let parent = this.$parent; + if (!parent) { + const instance = getCurrentInstance(); + if (instance && instance.parent) + parent = instance.parent.ctx; + } + while (parent) { + if (parent.add) + return parent; + parent = parent.$parent; + } + return void 0; + }, + addToParent(o) { + const o3d = o || this.o3d; + if (this.parent) { + this.parent.add(o3d); + return true; + } + return false; + }, + removeFromParent(o) { + const o3d = o || this.o3d; + if (this.parent) { + this.parent.remove(o3d); + return true; + } + return false; + }, + add(o) { + var _a; + (_a = this.o3d) == null ? void 0 : _a.add(o); + }, + remove(o) { + var _a; + (_a = this.o3d) == null ? void 0 : _a.remove(o); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Object3D" +}); + +var Group = defineComponent({ + name: "Group", + extends: Object3D, + setup() { + return { + group: new Group$1() + }; + }, + created() { + this.initObject3D(this.group); + }, + __hmrId: "Group" +}); + +const emptyCallBack = () => { +}; +var Raycaster = defineComponent({ + name: "Raycaster", + props: { + onPointerEnter: { type: Function, default: emptyCallBack }, + onPointerOver: { type: Function, default: emptyCallBack }, + onPointerMove: { type: Function, default: emptyCallBack }, + onPointerLeave: { type: Function, default: emptyCallBack }, + onClick: { type: Function, default: emptyCallBack }, + intersectMode: { type: String, default: "move" }, + intersectRecursive: { type: Boolean, default: false } + }, + setup() { + const renderer = inject(RendererInjectionKey); + return { renderer }; + }, + mounted() { + if (!this.renderer) { + console.error("Renderer not found"); + return; + } + const renderer = this.renderer; + this.renderer.onMounted(() => { + if (!renderer.camera) + return; + this.pointer = usePointer({ + camera: renderer.camera, + domElement: renderer.canvas, + intersectObjects: () => renderer.scene ? renderer.scene.children : [], + intersectRecursive: this.intersectRecursive, + onIntersectEnter: this.onPointerEnter, + onIntersectOver: this.onPointerOver, + onIntersectMove: this.onPointerMove, + onIntersectLeave: this.onPointerLeave, + onIntersectClick: this.onClick + }); + this.pointer.addListeners(); + if (this.intersectMode === "frame") { + renderer.onBeforeRender(this.pointer.intersect); + } + }); + }, + unmounted() { + var _a; + if (this.pointer) { + this.pointer.removeListeners(); + (_a = this.renderer) == null ? void 0 : _a.offBeforeRender(this.pointer.intersect); + } + }, + render() { + return []; + }, + __hmrId: "Raycaster" +}); + +var CubeCamera = defineComponent({ + extends: Object3D, + props: { + cubeRTSize: { type: Number, default: 256 }, + cubeCameraNear: { type: Number, default: 0.1 }, + cubeCameraFar: { type: Number, default: 2e3 }, + autoUpdate: Boolean, + hideMeshes: { type: Array, default: () => [] } + }, + setup(props) { + const rendererC = inject(RendererInjectionKey); + if (!rendererC || !rendererC.scene) { + console.error("Missing Renderer / Scene"); + return {}; + } + const renderer = rendererC.renderer, scene = rendererC.scene; + const cubeRT = new WebGLCubeRenderTarget(props.cubeRTSize, { format: RGBAFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + const cubeCamera = new CubeCamera$1(props.cubeCameraNear, props.cubeCameraFar, cubeRT); + const updateRT = () => { + props.hideMeshes.forEach((m) => { + m.visible = false; + }); + cubeCamera.update(renderer, scene); + props.hideMeshes.forEach((m) => { + m.visible = true; + }); + }; + if (props.autoUpdate) { + rendererC.onBeforeRender(updateRT); + onUnmounted(() => { + rendererC.offBeforeRender(updateRT); + }); + } else { + rendererC.onMounted(updateRT); + } + return { cubeRT, cubeCamera, updateRT }; + }, + created() { + if (this.cubeCamera) + this.initObject3D(this.cubeCamera); + }, + render() { + return []; + }, + __hmrId: "CubeCamera" +}); + +const MeshInjectionKey = Symbol("Mesh"); +const Mesh = defineComponent({ + name: "Mesh", + extends: Object3D, + props: { + castShadow: Boolean, + receiveShadow: Boolean + }, + setup() { + return {}; + }, + provide() { + return { + [MeshInjectionKey]: this + }; + }, + mounted() { + if (!this.mesh && !this.loading) + this.initMesh(); + }, + methods: { + initMesh() { + const mesh = new Mesh$1(this.geometry, this.material); + bindProp(this, "castShadow", mesh); + bindProp(this, "receiveShadow", mesh); + this.mesh = mesh; + this.initObject3D(mesh); + }, + createGeometry() { + }, + addGeometryWatchers(props) { + Object.keys(props).forEach((prop) => { + watch(() => this[prop], () => { + this.refreshGeometry(); + }); + }); + }, + setGeometry(geometry) { + this.geometry = geometry; + if (this.mesh) + this.mesh.geometry = geometry; + }, + setMaterial(material) { + if (Array.isArray(material) || !this.material) { + this.material = material; + if (this.mesh) + this.mesh.material = material; + } else { + let prev = this.material; + if (Array.isArray(prev)) { + prev.push(material); + } else { + prev = [prev, material]; + } + this.material = prev; + if (this.mesh) + this.mesh.material = prev; + } + }, + refreshGeometry() { + const oldGeo = this.geometry; + this.createGeometry(); + if (this.mesh && this.geometry) + this.mesh.geometry = this.geometry; + oldGeo == null ? void 0 : oldGeo.dispose(); + } + }, + unmounted() { + if (this.geometry) + this.geometry.dispose(); + if (this.material) { + if (Array.isArray(this.material)) { + for (const m of this.material) + m.dispose(); + } else { + this.material.dispose(); + } + } + }, + __hmrId: "Mesh" +}); +function meshComponent(name, props, createGeometry) { + return defineComponent({ + name, + extends: Mesh, + props, + created() { + this.createGeometry(); + this.addGeometryWatchers(props); + }, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + } + } + }); +} + +const Geometry = defineComponent({ + emits: ["created"], + props: { + rotateX: Number, + rotateY: Number, + rotateZ: Number, + attributes: { type: Array, default: () => [] } + }, + inject: { + mesh: MeshInjectionKey + }, + setup() { + return {}; + }, + created() { + if (!this.mesh) { + console.error("Missing parent Mesh"); + return; + } + this.createGeometry(); + this.rotateGeometry(); + if (this.geometry) + this.mesh.setGeometry(this.geometry); + Object.keys(this.$props).forEach((prop) => { + watch(() => this[prop], this.refreshGeometry); + }); + }, + unmounted() { + var _a; + (_a = this.geometry) == null ? void 0 : _a.dispose(); + }, + methods: { + createGeometry() { + const bufferAttributes = {}; + const geometry = new BufferGeometry(); + this.attributes.forEach((attribute) => { + if (attribute.name && attribute.itemSize && attribute.array) { + const bufferAttribute = bufferAttributes[attribute.name] = new BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized); + geometry.setAttribute(attribute.name, bufferAttribute); + } + }); + geometry.computeBoundingBox(); + geometry.userData.component = this; + this.geometry = geometry; + this.$emit("created", geometry); + }, + rotateGeometry() { + if (!this.geometry) + return; + if (this.rotateX) + this.geometry.rotateX(this.rotateX); + if (this.rotateY) + this.geometry.rotateY(this.rotateY); + if (this.rotateZ) + this.geometry.rotateZ(this.rotateZ); + }, + refreshGeometry() { + const oldGeo = this.geometry; + this.createGeometry(); + this.rotateGeometry(); + if (this.geometry && this.mesh) + this.mesh.setGeometry(this.geometry); + oldGeo == null ? void 0 : oldGeo.dispose(); + } + }, + render() { + return []; + } +}); +function geometryComponent(name, props, createGeometry) { + return defineComponent({ + name, + extends: Geometry, + props, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + this.geometry.userData.component = this; + this.$emit("created", this.geometry); + } + } + }); +} + +const props$n = { + size: Number, + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + depth: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + depthSegments: { type: Number, default: 1 } +}; +function createGeometry$h(comp) { + if (comp.size) { + return new BoxGeometry$1(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } else { + return new BoxGeometry$1(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } +} +var BoxGeometry = geometryComponent("BoxGeometry", props$n, createGeometry$h); + +const props$m = { + radius: { type: Number, default: 1 }, + segments: { type: Number, default: 8 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$g(comp) { + return new CircleGeometry$1(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength); +} +var CircleGeometry = geometryComponent("CircleGeometry", props$m, createGeometry$g); + +const props$l = { + radius: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$f(comp) { + return new ConeGeometry$1(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var ConeGeometry = geometryComponent("ConeGeometry", props$l, createGeometry$f); + +const props$k = { + radiusTop: { type: Number, default: 1 }, + radiusBottom: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$e(comp) { + return new CylinderGeometry$1(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var CylinderGeometry = geometryComponent("CylinderGeometry", props$k, createGeometry$e); + +const props$j = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$d(comp) { + return new DodecahedronGeometry$1(comp.radius, comp.detail); +} +var DodecahedronGeometry = geometryComponent("DodecahedronGeometry", props$j, createGeometry$d); + +const props$i = { + shapes: { type: [Object, Array] }, + options: { type: Object } +}; +function createGeometry$c(comp) { + return new ExtrudeGeometry$1(comp.shapes, comp.options); +} +var ExtrudeGeometry = geometryComponent("ExtrudeGeometry", props$i, createGeometry$c); + +const props$h = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$b(comp) { + return new IcosahedronGeometry$1(comp.radius, comp.detail); +} +var IcosahedronGeometry = geometryComponent("IcosahedronGeometry", props$h, createGeometry$b); + +const props$g = { + points: Array, + segments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$a(comp) { + return new LatheGeometry$1(comp.points, comp.segments, comp.phiStart, comp.phiLength); +} +var LatheGeometry = geometryComponent("LatheGeometry", props$g, createGeometry$a); + +const props$f = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$9(comp) { + return new OctahedronGeometry$1(comp.radius, comp.detail); +} +var OctahedronGeometry = geometryComponent("OctahedronGeometry", props$f, createGeometry$9); + +const props$e = { + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 } +}; +function createGeometry$8(comp) { + return new PlaneGeometry$1(comp.width, comp.height, comp.widthSegments, comp.heightSegments); +} +var PlaneGeometry = geometryComponent("PlaneGeometry", props$e, createGeometry$8); + +const props$d = { + vertices: Array, + indices: Array, + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$7(comp) { + return new PolyhedronGeometry$1(comp.vertices, comp.indices, comp.radius, comp.detail); +} +var PolyhedronGeometry = geometryComponent("PolyhedronGeometry", props$d, createGeometry$7); + +const props$c = { + innerRadius: { type: Number, default: 0.5 }, + outerRadius: { type: Number, default: 1 }, + thetaSegments: { type: Number, default: 8 }, + phiSegments: { type: Number, default: 1 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$6(comp) { + return new RingGeometry$1(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength); +} +var RingGeometry = geometryComponent("RingGeometry", props$c, createGeometry$6); + +const props$b = { + radius: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 12 }, + heightSegments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI } +}; +function createGeometry$5(comp) { + return new SphereGeometry$1(comp.radius, comp.widthSegments, comp.heightSegments, comp.phiStart, comp.phiLength, comp.thetaStart, comp.thetaLength); +} +var SphereGeometry = geometryComponent("SphereGeometry", props$b, createGeometry$5); + +const props$a = { + shapes: { type: [Object, Array] }, + curveSegments: { type: Number } +}; +function createGeometry$4(comp) { + return new ShapeGeometry$1(comp.shapes, comp.curveSegments); +} +var ShapeGeometry = geometryComponent("ShapeGeometry", props$a, createGeometry$4); + +const props$9 = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$3(comp) { + return new TetrahedronGeometry$1(comp.radius, comp.detail); +} +var TetrahedronGeometry = geometryComponent("TetrahedronGeometry", props$9, createGeometry$3); + +const props$8 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + radialSegments: { type: Number, default: 8 }, + tubularSegments: { type: Number, default: 6 }, + arc: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$2(comp) { + return new TorusGeometry$1(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc); +} +var TorusGeometry = geometryComponent("TorusGeometry", props$8, createGeometry$2); + +const props$7 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + tubularSegments: { type: Number, default: 64 }, + radialSegments: { type: Number, default: 8 }, + p: { type: Number, default: 2 }, + q: { type: Number, default: 3 } +}; +function createGeometry$1(comp) { + return new TorusKnotGeometry$1(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q); +} +var TorusKnotGeometry = geometryComponent("TorusKnotGeometry", props$7, createGeometry$1); + +const props$6 = { + points: Array, + path: Curve, + tubularSegments: { type: Number, default: 64 }, + radius: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + closed: { type: Boolean, default: false } +}; +function createGeometry(comp) { + let curve; + if (comp.points) { + curve = new CatmullRomCurve3(comp.points); + } else if (comp.path) { + curve = comp.path; + } else { + console.error("Missing path curve or points."); + } + return new TubeGeometry$1(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed); +} +var TubeGeometry = defineComponent({ + extends: Geometry, + props: props$6, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); + } + } +}); +function updateTubeGeometryPoints(tube, points) { + const curve = new CatmullRomCurve3(points); + const { radialSegments, radius, tubularSegments, closed } = tube.parameters; + const frames = curve.computeFrenetFrames(tubularSegments, closed); + tube.tangents = frames.tangents; + tube.normals = frames.normals; + tube.binormals = frames.binormals; + tube.parameters.path = curve; + const pAttribute = tube.getAttribute("position"); + const nAttribute = tube.getAttribute("normal"); + const normal = new Vector3(); + const P = new Vector3(); + for (let i = 0; i < tubularSegments; i++) { + updateSegment(i); + } + updateSegment(tubularSegments); + tube.attributes.position.needsUpdate = true; + tube.attributes.normal.needsUpdate = true; + function updateSegment(i) { + curve.getPointAt(i / tubularSegments, P); + const N = frames.normals[i]; + const B = frames.binormals[i]; + for (let j = 0; j <= radialSegments; j++) { + const v = j / radialSegments * Math.PI * 2; + const sin = Math.sin(v); + const cos = -Math.cos(v); + normal.x = cos * N.x + sin * B.x; + normal.y = cos * N.y + sin * B.y; + normal.z = cos * N.z + sin * B.z; + normal.normalize(); + const index = i * (radialSegments + 1) + j; + nAttribute.setXYZ(index, normal.x, normal.y, normal.z); + pAttribute.setXYZ(index, P.x + radius * normal.x, P.y + radius * normal.y, P.z + radius * normal.z); + } + } +} + +var Light = defineComponent({ + extends: Object3D, + name: "Light", + props: { + color: { type: String, default: "#ffffff" }, + intensity: { type: Number, default: 1 }, + castShadow: { type: Boolean, default: false }, + shadowMapSize: { type: Object, default: () => ({ x: 512, y: 512 }) }, + shadowCamera: { type: Object, default: () => ({}) } + }, + setup() { + return {}; + }, + unmounted() { + if (this.light instanceof SpotLight$1 || this.light instanceof DirectionalLight$1) { + this.removeFromParent(this.light.target); + } + }, + methods: { + initLight(light) { + this.light = light; + if (light.shadow) { + light.castShadow = this.castShadow; + setFromProp(light.shadow.mapSize, this.shadowMapSize); + setFromProp(light.shadow.camera, this.shadowCamera); + } + ["color", "intensity", "castShadow"].forEach((p) => { + watch(() => this[p], (value) => { + if (p === "color") { + light.color.set(value); + } else { + light[p] = value; + } + }); + }); + this.initObject3D(light); + if (light instanceof SpotLight$1 || light instanceof DirectionalLight$1) { + bindProp(this, "target", light.target, "position"); + this.addToParent(light.target); + } + } + }, + __hmrId: "Light" +}); + +var AmbientLight = defineComponent({ + extends: Light, + created() { + this.initLight(new AmbientLight$1(this.color, this.intensity)); + }, + __hmrId: "AmbientLight" +}); + +var DirectionalLight = defineComponent({ + extends: Light, + props: { + target: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) } + }, + created() { + this.initLight(new DirectionalLight$1(this.color, this.intensity)); + }, + __hmrId: "DirectionalLight" +}); + +var HemisphereLight = defineComponent({ + extends: Light, + props: { + groundColor: { type: String, default: "#444444" } + }, + created() { + const light = new HemisphereLight$1(this.color, this.groundColor, this.intensity); + watch(() => this.groundColor, (value) => { + light.groundColor.set(value); + }); + this.initLight(light); + }, + __hmrId: "HemisphereLight" +}); + +var PointLight = defineComponent({ + extends: Light, + props: { + distance: { type: Number, default: 0 }, + decay: { type: Number, default: 1 } + }, + created() { + this.initLight(new PointLight$1(this.color, this.intensity, this.distance, this.decay)); + }, + __hmrId: "PointLight" +}); + +var RectAreaLight = defineComponent({ + extends: Light, + props: { + width: { type: Number, default: 10 }, + height: { type: Number, default: 10 }, + helper: Boolean + }, + created() { + RectAreaLightUniformsLib.init(); + const light = new RectAreaLight$1(this.color, this.intensity, this.width, this.height); + const watchProps = ["width", "height"]; + watchProps.forEach((p) => { + watch(() => this[p], (value) => { + light[p] = value; + }); + }); + if (this.helper) { + const lightHelper = new RectAreaLightHelper(light); + light.add(lightHelper); + } + this.initLight(light); + }, + __hmrId: "RectAreaLight" +}); + +var SpotLight = defineComponent({ + extends: Light, + props: { + angle: { type: Number, default: Math.PI / 3 }, + decay: { type: Number, default: 1 }, + distance: { type: Number, default: 0 }, + penumbra: { type: Number, default: 0 }, + target: Object + }, + created() { + const light = new SpotLight$1(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay); + const watchProps = ["angle", "decay", "distance", "penumbra"]; + watchProps.forEach((p) => { + watch(() => this[p], (value) => { + light[p] = value; + }); + }); + this.initLight(light); + }, + __hmrId: "SpotLight" +}); + +const MaterialInjectionKey = Symbol("Material"); +const BaseMaterial = defineComponent({ + emits: ["created"], + props: { + color: { type: String, default: "#ffffff" }, + props: { type: Object, default: () => ({}) } + }, + inject: { + mesh: MeshInjectionKey + }, + setup() { + return {}; + }, + provide() { + return { + [MaterialInjectionKey]: this + }; + }, + created() { + if (!this.mesh) { + console.error("Missing parent Mesh"); + return; + } + if (this.createMaterial) { + const material = this.material = this.createMaterial(); + watch(() => this.color, (value) => { + material.color.set(value); + }); + bindObjectProp(this, "props", material, false, this.setProp); + this.$emit("created", material); + this.mesh.setMaterial(material); + } + }, + unmounted() { + var _a; + (_a = this.material) == null ? void 0 : _a.dispose(); + }, + methods: { + getMaterialParams() { + return { ...propsValues(this.$props, ["props"]), ...this.props }; + }, + setProp(material, key, value, needsUpdate = false) { + const dstVal = material[key]; + if (dstVal instanceof Color) + dstVal.set(value); + else + material[key] = value; + material.needsUpdate = needsUpdate; + }, + setTexture(texture, key = "map") { + this.setProp(this.material, key, texture, true); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Material" +}); +function materialComponent(name, props, createMaterial) { + return defineComponent({ + name, + extends: BaseMaterial, + props, + methods: { + createMaterial() { + return createMaterial(this.getMaterialParams()); + } + } + }); +} +const BasicMaterial = materialComponent("BasicMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshBasicMaterial(opts)); +const LambertMaterial = materialComponent("LambertMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshLambertMaterial(opts)); +const PhongMaterial = materialComponent("PhongMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshPhongMaterial(opts)); +const PhysicalMaterial = materialComponent("PhysicalMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshPhysicalMaterial(opts)); +const PointsMaterial = materialComponent("PointsMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new PointsMaterial$1(opts)); +const ShadowMaterial = materialComponent("ShadowMaterial", { color: { type: String, default: "#000000" }, props: { type: Object, default: () => ({}) } }, (opts) => new ShadowMaterial$1(opts)); +const StandardMaterial = materialComponent("StandardMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshStandardMaterial(opts)); +const ToonMaterial = materialComponent("ToonMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshToonMaterial(opts)); + +var MatcapMaterial = materialComponent( + "MatcapMaterial", + { + src: String, + name: { type: String, default: "0404E8_0404B5_0404CB_3333FC" } + }, + (opts) => { + const src = opts.src ? opts.src : getMatcapUrl(opts.name); + const params = propsValues(opts, ["src", "name"]); + params.matcap = new TextureLoader().load(src); + return new MeshMatcapMaterial(params); + } +); + +const defaultVertexShader = ` + varying vec2 vUv; + void main(){ + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); + } +`; +const defaultFragmentShader = ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0); + } +`; +var ShaderMaterial = materialComponent( + "ShaderMaterial", + { + props: { type: Object, default: () => ({ + uniforms: {}, + vertexShader: defaultVertexShader, + fragmentShader: defaultFragmentShader + }) } + }, + (opts) => new ShaderMaterial$1(propsValues(opts, ["color"])) +); + +function replaceAll(string, find, replace) { + return string.split(find).join(replace); +} +const meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf("void main() {")); +const meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf("void main() {")); +const SubsurfaceScatteringShader = { + uniforms: UniformsUtils.merge([ + ShaderLib.phong.uniforms, + { + thicknessColor: { value: new Color(16777215) }, + thicknessDistortion: { value: 0.1 }, + thicknessAmbient: { value: 0 }, + thicknessAttenuation: { value: 0.1 }, + thicknessPower: { value: 2 }, + thicknessScale: { value: 10 } + } + ]), + vertexShader: ` + #define USE_UV + ${ShaderChunk.meshphong_vert} + `, + fragmentShader: ` + #define USE_UV + #define SUBSURFACE + + ${meshphongFragHead} + + uniform float thicknessPower; + uniform float thicknessScale; + uniform float thicknessDistortion; + uniform float thicknessAmbient; + uniform float thicknessAttenuation; + uniform vec3 thicknessColor; + + void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { + #ifdef USE_COLOR + vec3 thickness = vColor * thicknessColor; + #else + vec3 thickness = thicknessColor; + #endif + vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); + float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; + vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; + reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; + } + ` + meshphongFragBody.replace( + "#include ", + replaceAll( + ShaderChunk.lights_fragment_begin, + "RE_Direct( directLight, geometry, material, reflectedLight );", + ` + RE_Direct( directLight, geometry, material, reflectedLight ); + #if defined( SUBSURFACE ) && defined( USE_UV ) + RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); + #endif + ` + ) + ) +}; + +var SubSurfaceMaterial = defineComponent({ + extends: BaseMaterial, + props: { + uniforms: { type: Object, default: () => ({ + diffuse: "#ffffff", + thicknessColor: "#ffffff", + thicknessDistortion: 0.4, + thicknessAmbient: 0.01, + thicknessAttenuation: 0.7, + thicknessPower: 2, + thicknessScale: 4 + }) } + }, + methods: { + createMaterial() { + const params = SubsurfaceScatteringShader; + const uniforms = UniformsUtils.clone(params.uniforms); + bindObjectProp(this, "uniforms", uniforms, true, (dst, key, value) => { + const dstVal = dst[key].value; + if (dstVal instanceof Color) + dstVal.set(value); + else + dst[key].value = value; + }); + const material = new ShaderMaterial$1({ + ...params, + lights: true, + ...this.props, + uniforms + }); + return material; + } + } +}); + +var Texture = defineComponent({ + inject: { + material: MaterialInjectionKey + }, + props: { + name: { type: String, default: "map" }, + uniform: String, + src: String, + onLoad: Function, + onProgress: Function, + onError: Function, + props: { type: Object, default: () => ({}) } + }, + setup() { + return {}; + }, + created() { + this.refreshTexture(); + watch(() => this.src, this.refreshTexture); + }, + unmounted() { + var _a, _b; + (_a = this.material) == null ? void 0 : _a.setTexture(null, this.name); + (_b = this.texture) == null ? void 0 : _b.dispose(); + }, + methods: { + createTexture() { + if (!this.src) + return void 0; + return new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError); + }, + initTexture() { + if (!this.texture) + return; + bindObjectProp(this, "props", this.texture); + if (!this.material) + return; + this.material.setTexture(this.texture, this.name); + if (this.material.material instanceof ShaderMaterial$1 && this.uniform) { + this.material.material.uniforms[this.uniform] = { value: this.texture }; + } + }, + refreshTexture() { + var _a; + (_a = this.texture) == null ? void 0 : _a.dispose(); + this.texture = this.createTexture(); + this.initTexture(); + }, + onLoaded(t) { + var _a; + (_a = this.onLoad) == null ? void 0 : _a.call(this, t); + } + }, + render() { + return []; + } +}); + +var CubeTexture = defineComponent({ + extends: Texture, + props: { + name: { type: String, default: "envMap" }, + path: { type: String, required: true }, + urls: { + type: Array, + default: () => ["px.jpg", "nx.jpg", "py.jpg", "ny.jpg", "pz.jpg", "nz.jpg"] + }, + props: { type: Object, default: () => ({ mapping: CubeReflectionMapping }) } + }, + created() { + watch(() => this.path, this.refreshTexture); + watch(() => this.urls, this.refreshTexture); + }, + methods: { + createTexture() { + return new CubeTextureLoader().setPath(this.path).load(this.urls, this.onLoaded, this.onProgress, this.onError); + } + } +}); + +var VideoTexture = defineComponent({ + extends: Texture, + props: { + videoId: { + type: String, + required: true + } + }, + created() { + watch(() => this.videoId, this.refreshTexture); + }, + methods: { + createTexture() { + const video = document.getElementById(this.videoId); + return new VideoTexture$1(video); + } + } +}); + +var Box = meshComponent("Box", props$n, createGeometry$h); + +var Circle = meshComponent("Circle", props$m, createGeometry$g); + +var Cone = meshComponent("Cone", props$l, createGeometry$f); + +var Cylinder = meshComponent("Cylinder", props$k, createGeometry$e); + +var Dodecahedron = meshComponent("Dodecahedron", props$j, createGeometry$d); + +var Icosahedron = meshComponent("Icosahedron", props$h, createGeometry$b); + +var Lathe = meshComponent("Lathe", props$g, createGeometry$a); + +var Octahedron = meshComponent("Octahedron", props$f, createGeometry$9); + +var Plane = meshComponent("Plane", props$e, createGeometry$8); + +var Polyhedron = meshComponent("Polyhedron", props$d, createGeometry$7); + +var Ring = meshComponent("Ring", props$c, createGeometry$6); + +var Sphere = meshComponent("Sphere", props$b, createGeometry$5); + +var Tetrahedron = meshComponent("Tetrahedron", props$9, createGeometry$3); + +const props$5 = { + text: { type: String, required: true, default: "Text" }, + fontSrc: { type: String, required: true }, + size: { type: Number, default: 80 }, + height: { type: Number, default: 5 }, + depth: { type: Number, default: 1 }, + curveSegments: { type: Number, default: 12 }, + bevelEnabled: { type: Boolean, default: false }, + bevelThickness: { type: Number, default: 10 }, + bevelSize: { type: Number, default: 8 }, + bevelOffset: { type: Number, default: 0 }, + bevelSegments: { type: Number, default: 5 }, + align: { type: [Boolean, String], default: false } +}; +var Text = defineComponent({ + extends: Mesh, + props: props$5, + setup() { + return {}; + }, + created() { + if (!this.fontSrc) { + console.error('Missing required prop: "font-src"'); + return; + } + const watchProps = [ + "text", + "size", + "height", + "curveSegments", + "bevelEnabled", + "bevelThickness", + "bevelSize", + "bevelOffset", + "bevelSegments", + "align" + ]; + watchProps.forEach((p) => { + watch(() => this[p], () => { + if (this.font) + this.refreshGeometry(); + }); + }); + const loader = new FontLoader(); + this.loading = true; + loader.load(this.fontSrc, (font) => { + this.loading = false; + this.font = font; + this.createGeometry(); + this.initMesh(); + }); + }, + methods: { + createGeometry() { + this.geometry = new TextGeometry(this.text, { + font: this.font, + size: this.size, + height: this.height, + depth: this.depth, + curveSegments: this.curveSegments, + bevelEnabled: this.bevelEnabled, + bevelThickness: this.bevelThickness, + bevelSize: this.bevelSize, + bevelOffset: this.bevelOffset, + bevelSegments: this.bevelSegments + }); + if (this.align === "center") { + this.geometry.center(); + } + } + } +}); + +var Torus = meshComponent("Torus", props$8, createGeometry$2); + +var TorusKnot = meshComponent("TorusKnot", props$7, createGeometry$1); + +var Tube = defineComponent({ + extends: Mesh, + props: props$6, + created() { + this.createGeometry(); + this.addGeometryWatchers(props$6); + }, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); + } + }, + __hmrId: "Tube" +}); + +var Image = defineComponent({ + emits: ["loaded"], + extends: Mesh, + props: { + src: { type: String, required: true }, + width: Number, + height: Number, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + keepSize: Boolean + }, + setup() { + return {}; + }, + created() { + if (!this.renderer) + return; + this.geometry = new PlaneGeometry$1(1, 1, this.widthSegments, this.heightSegments); + this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() }); + watch(() => this.src, this.refreshTexture); + ["width", "height"].forEach((p) => { + watch(() => this[p], this.resize); + }); + this.resize(); + if (this.keepSize) + this.renderer.onResize(this.resize); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.offResize(this.resize); + }, + methods: { + loadTexture() { + return new TextureLoader().load(this.src, this.onLoaded); + }, + refreshTexture() { + var _a; + (_a = this.texture) == null ? void 0 : _a.dispose(); + if (this.material) { + this.material.map = this.loadTexture(); + this.material.needsUpdate = true; + } + }, + onLoaded(texture) { + this.texture = texture; + this.resize(); + this.$emit("loaded", texture); + }, + resize() { + if (!this.renderer || !this.texture) + return; + const screen = this.renderer.size; + const iW = this.texture.image.width; + const iH = this.texture.image.height; + const iRatio = iW / iH; + let w = 1, h = 1; + if (this.width && this.height) { + w = this.width * screen.wWidth / screen.width; + h = this.height * screen.wHeight / screen.height; + } else if (this.width) { + w = this.width * screen.wWidth / screen.width; + h = w / iRatio; + } else if (this.height) { + h = this.height * screen.wHeight / screen.height; + w = h * iRatio; + } else { + if (iRatio > 1) + w = h * iRatio; + else + h = w / iRatio; + } + if (this.mesh) { + this.mesh.scale.x = w; + this.mesh.scale.y = h; + } + } + }, + __hmrId: "Image" +}); + +var InstancedMesh = defineComponent({ + extends: Mesh, + props: { + count: { type: Number, required: true } + }, + methods: { + initMesh() { + if (!this.renderer) + return; + if (!this.geometry || !this.material) { + console.error("Missing geometry and/or material"); + return false; + } + this.mesh = new InstancedMesh$1(this.geometry, this.material, this.count); + this.mesh.userData.component = this; + bindProp(this, "castShadow", this.mesh); + bindProp(this, "receiveShadow", this.mesh); + if (this.onPointerEnter || this.onPointerOver || this.onPointerMove || this.onPointerLeave || this.onPointerDown || this.onPointerUp || this.onClick) { + this.renderer.three.addIntersectObject(this.mesh); + } + this.initObject3D(this.mesh); + } + }, + __hmrId: "InstancedMesh" +}); + +var Sprite = defineComponent({ + extends: Object3D, + emits: ["loaded"], + props: { + src: { type: String, required: true } + }, + setup() { + return {}; + }, + created() { + this.texture = new TextureLoader().load(this.src, this.onLoaded); + this.material = new SpriteMaterial({ map: this.texture }); + this.sprite = new Sprite$1(this.material); + this.initObject3D(this.sprite); + }, + unmounted() { + var _a, _b; + (_a = this.texture) == null ? void 0 : _a.dispose(); + (_b = this.material) == null ? void 0 : _b.dispose(); + }, + methods: { + onLoaded() { + this.updateUV(); + this.$emit("loaded"); + }, + updateUV() { + if (!this.texture || !this.sprite) + return; + const iWidth = this.texture.image.width; + const iHeight = this.texture.image.height; + const iRatio = iWidth / iHeight; + let x = 0.5, y = 0.5; + if (iRatio > 1) { + x = 0.5 * iRatio; + } else { + y = 0.5 / iRatio; + } + const positions = this.sprite.geometry.attributes.position.array; + positions[0] = -x; + positions[1] = -y; + positions[5] = x; + positions[6] = -y; + positions[10] = x; + positions[11] = y; + positions[15] = -x; + positions[16] = y; + this.sprite.geometry.attributes.position.needsUpdate = true; + } + }, + __hmrId: "Sprite" +}); + +var Points = defineComponent({ + extends: Object3D, + setup() { + return {}; + }, + provide() { + return { + [MeshInjectionKey]: this + }; + }, + mounted() { + this.mesh = this.points = new Points$1(this.geometry, this.material); + this.initObject3D(this.mesh); + }, + methods: { + setGeometry(geometry) { + this.geometry = geometry; + if (this.mesh) + this.mesh.geometry = geometry; + }, + setMaterial(material) { + this.material = material; + if (this.mesh) + this.mesh.material = material; + } + } +}); + +var Model = defineComponent({ + extends: Object3D, + emits: ["before-load", "load", "progress", "error"], + props: { + src: { type: String, required: true } + }, + data() { + return { + progress: 0 + }; + }, + methods: { + onLoad(model) { + this.$emit("load", model); + }, + onProgress(progress) { + this.progress = progress.loaded / progress.total; + this.$emit("progress", progress); + }, + onError(error) { + this.$emit("error", error); + } + } +}); + +var GLTF = defineComponent({ + extends: Model, + created() { + const loader = new GLTFLoader(); + this.$emit("before-load", loader); + loader.load(this.src, (gltf) => { + this.onLoad(gltf); + this.initObject3D(gltf.scene); + }, this.onProgress, this.onError); + } +}); + +var FBX = defineComponent({ + extends: Model, + created() { + const loader = new FBXLoader(); + this.$emit("before-load", loader); + loader.load(this.src, (fbx) => { + this.onLoad(fbx); + this.initObject3D(fbx); + }, this.onProgress, this.onError); + } +}); + +const ComposerInjectionKey = Symbol("Composer"); +var EffectComposer = defineComponent({ + setup() { + const renderer = inject(RendererInjectionKey); + return { renderer }; + }, + provide() { + return { + [ComposerInjectionKey]: this + }; + }, + created() { + if (!this.renderer) { + console.error("Renderer not found"); + return; + } + const renderer = this.renderer; + const composer = new EffectComposer$1(this.renderer.renderer); + this.composer = composer; + this.renderer.composer = composer; + renderer.addListener("init", () => { + renderer.renderer.autoClear = false; + this.resize(); + renderer.addListener("resize", this.resize); + }); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.removeListener("resize", this.resize); + }, + methods: { + addPass(pass) { + var _a; + (_a = this.composer) == null ? void 0 : _a.addPass(pass); + }, + removePass(pass) { + var _a; + (_a = this.composer) == null ? void 0 : _a.removePass(pass); + }, + resize() { + if (this.composer && this.renderer) { + this.composer.setSize(this.renderer.size.width, this.renderer.size.height); + } + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "EffectComposer" +}); + +var EffectPass = defineComponent({ + inject: { + renderer: RendererInjectionKey, + composer: ComposerInjectionKey + }, + emits: ["ready"], + setup() { + return {}; + }, + created() { + if (!this.composer) { + console.error("Missing parent EffectComposer"); + } + if (!this.renderer) { + console.error("Missing parent Renderer"); + } + }, + unmounted() { + var _a, _b, _c; + if (this.pass) { + (_a = this.composer) == null ? void 0 : _a.removePass(this.pass); + (_c = (_b = this.pass).dispose) == null ? void 0 : _c.call(_b); + } + }, + methods: { + initEffectPass(pass) { + var _a; + this.pass = pass; + (_a = this.composer) == null ? void 0 : _a.addPass(pass); + this.$emit("ready", pass); + } + }, + render() { + return []; + }, + __hmrId: "EffectPass" +}); + +var RenderPass = defineComponent({ + extends: EffectPass, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const pass = new RenderPass$1(this.renderer.scene, this.renderer.camera); + this.initEffectPass(pass); + }, + __hmrId: "RenderPass" +}); + +const props$4 = { + focus: { type: Number, default: 1 }, + aperture: { type: Number, default: 0.025 }, + maxblur: { type: Number, default: 0.01 } +}; +var BokehPass = defineComponent({ + extends: EffectPass, + props: props$4, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const params = { + focus: this.focus, + aperture: this.aperture, + maxblur: this.maxblur, + width: this.renderer.size.width, + height: this.renderer.size.height + }; + const pass = new BokehPass$1(this.renderer.scene, this.renderer.camera, params); + Object.keys(props$4).forEach((p) => { + watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "BokehPass" +}); + +const props$3 = { + noiseIntensity: { type: Number, default: 0.5 }, + scanlinesIntensity: { type: Number, default: 0.05 }, + scanlinesCount: { type: Number, default: 4096 }, + grayscale: { type: Number, default: 0 } +}; +var FilmPass = defineComponent({ + extends: EffectPass, + props: props$3, + created() { + const pass = new FilmPass$1(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); + Object.keys(props$3).forEach((p) => { + watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "FilmPass" +}); + +var FXAAPass = defineComponent({ + extends: EffectPass, + created() { + var _a; + const pass = new ShaderPass(FXAAShader); + (_a = this.renderer) == null ? void 0 : _a.addListener("resize", this.resize); + this.initEffectPass(pass); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.removeListener("resize", this.resize); + }, + methods: { + resize({ size }) { + if (this.pass) { + const { resolution } = this.pass.material.uniforms; + resolution.value.x = 1 / size.width; + resolution.value.y = 1 / size.height; + } + } + }, + __hmrId: "FXAAPass" +}); + +const props$2 = { + shape: { type: Number, default: 1 }, + radius: { type: Number, default: 4 }, + rotateR: { type: Number, default: Math.PI / 12 * 1 }, + rotateG: { type: Number, default: Math.PI / 12 * 2 }, + rotateB: { type: Number, default: Math.PI / 12 * 3 }, + scatter: { type: Number, default: 0 } +}; +var HalftonePass = defineComponent({ + extends: EffectPass, + props: props$2, + created() { + if (!this.renderer) + return; + const pass = new HalftonePass$1(this.renderer.size.width, this.renderer.size.height, {}); + Object.keys(props$2).forEach((p) => { + pass.uniforms[p].value = this[p]; + watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "HalftonePass" +}); + +var SMAAPass = defineComponent({ + extends: EffectPass, + created() { + if (!this.renderer) + return; + const pass = new SMAAPass$1(this.renderer.size.width, this.renderer.size.height); + this.initEffectPass(pass); + }, + __hmrId: "SMAAPass" +}); + +var SSAOPass = defineComponent({ + extends: EffectPass, + props: { + options: { + type: Object, + default: () => ({}) + } + }, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const pass = new SSAOPass$1( + this.renderer.scene, + this.renderer.camera, + this.renderer.size.width, + this.renderer.size.height + ); + Object.keys(this.options).forEach((key) => { + pass[key] = this.options[key]; + }); + this.initEffectPass(pass); + }, + __hmrId: "SSAOPass" +}); + +var DefaultShader = { + uniforms: {}, + vertexShader: ` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `, + fragmentShader: ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + ` +}; + +var TiltShift = { + uniforms: { + tDiffuse: { value: null }, + blurRadius: { value: 0 }, + gradientRadius: { value: 0 }, + start: { value: new Vector2() }, + end: { value: new Vector2() }, + delta: { value: new Vector2() }, + texSize: { value: new Vector2() } + }, + vertexShader: DefaultShader.vertexShader, + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform float blurRadius; + uniform float gradientRadius; + uniform vec2 start; + uniform vec2 end; + uniform vec2 delta; + uniform vec2 texSize; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x)); + float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius; + for (float t = -30.0; t <= 30.0; t++) { + float percent = (t + offset - 0.5) / 30.0; + float weight = 1.0 - abs(percent); + vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius); + // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + // texel2.rgb *= texel2.a; + + color += texel * weight; + total += 2.0 * weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + ` +}; + +const props$1 = { + blurRadius: { type: Number, default: 10 }, + gradientRadius: { type: Number, default: 100 }, + start: { type: Object, default: () => ({ x: 0, y: 100 }) }, + end: { type: Object, default: () => ({ x: 10, y: 100 }) } +}; +var TiltShiftPass = defineComponent({ + extends: EffectPass, + props: props$1, + setup() { + return { uniforms1: {}, uniforms2: {} }; + }, + created() { + if (!this.composer) + return; + this.pass1 = new ShaderPass(TiltShift); + this.pass2 = new ShaderPass(TiltShift); + const uniforms1 = this.uniforms1 = this.pass1.uniforms; + const uniforms2 = this.uniforms2 = this.pass2.uniforms; + uniforms2.blurRadius = uniforms1.blurRadius; + uniforms2.gradientRadius = uniforms1.gradientRadius; + uniforms2.start = uniforms1.start; + uniforms2.end = uniforms1.end; + uniforms2.texSize = uniforms1.texSize; + bindProp(this, "blurRadius", uniforms1.blurRadius, "value"); + bindProp(this, "gradientRadius", uniforms1.gradientRadius, "value"); + this.updateFocusLine(); + ["start", "end"].forEach((p) => { + watch(() => this[p], this.updateFocusLine, { deep: true }); + }); + this.pass1.setSize = (width, height) => { + uniforms1.texSize.value.set(width, height); + }; + this.initEffectPass(this.pass1); + this.composer.addPass(this.pass2); + }, + unmounted() { + if (this.composer && this.pass2) + this.composer.removePass(this.pass2); + }, + methods: { + updateFocusLine() { + this.uniforms1.start.value.copy(this.start); + this.uniforms1.end.value.copy(this.end); + const dv = new Vector2().copy(this.end).sub(this.start).normalize(); + this.uniforms1.delta.value.copy(dv); + this.uniforms2.delta.value.set(-dv.y, dv.x); + } + }, + __hmrId: "TiltShiftPass" +}); + +const props = { + strength: { type: Number, default: 1.5 }, + radius: { type: Number, default: 0 }, + threshold: { type: Number, default: 0 } +}; +var UnrealBloomPass = defineComponent({ + extends: EffectPass, + props, + created() { + if (!this.renderer) + return; + const size = new Vector2(this.renderer.size.width, this.renderer.size.height); + const pass = new UnrealBloomPass$1(size, this.strength, this.radius, this.threshold); + Object.keys(props).forEach((p) => { + watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "UnrealBloomPass" +}); + +var ZoomBlur = { + uniforms: { + tDiffuse: { value: null }, + center: { value: new Vector2(0.5, 0.5) }, + strength: { value: 0 } + }, + vertexShader: DefaultShader.vertexShader, + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform vec2 center; + uniform float strength; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + vec2 toCenter = center - vUv; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + for (float t = 0.0; t <= 40.0; t++) { + float percent = (t + offset) / 40.0; + float weight = 4.0 * (percent - percent * percent); + vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + + color += texel * weight; + total += weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + ` +}; + +var ZoomBlurPass = defineComponent({ + extends: EffectPass, + props: { + center: { type: Object, default: () => ({ x: 0.5, y: 0.5 }) }, + strength: { type: Number, default: 0.5 } + }, + created() { + const pass = new ShaderPass(ZoomBlur); + bindProp(this, "center", pass.uniforms.center, "value"); + bindProp(this, "strength", pass.uniforms.strength, "value"); + this.initEffectPass(pass); + }, + __hmrId: "ZoomBlurPass" +}); + +var TROIS = /*#__PURE__*/Object.freeze({ + __proto__: null, + Renderer: Renderer, + RendererInjectionKey: RendererInjectionKey, + OrthographicCamera: OrthographicCamera, + PerspectiveCamera: PerspectiveCamera, + Camera: PerspectiveCamera, + Group: Group, + Scene: Scene, + SceneInjectionKey: SceneInjectionKey, + Object3D: Object3D, + Raycaster: Raycaster, + CubeCamera: CubeCamera, + BufferGeometry: Geometry, + BoxGeometry: BoxGeometry, + CircleGeometry: CircleGeometry, + ConeGeometry: ConeGeometry, + CylinderGeometry: CylinderGeometry, + DodecahedronGeometry: DodecahedronGeometry, + ExtrudeGeometry: ExtrudeGeometry, + IcosahedronGeometry: IcosahedronGeometry, + LatheGeometry: LatheGeometry, + OctahedronGeometry: OctahedronGeometry, + PlaneGeometry: PlaneGeometry, + PolyhedronGeometry: PolyhedronGeometry, + RingGeometry: RingGeometry, + SphereGeometry: SphereGeometry, + ShapeGeometry: ShapeGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TorusGeometry: TorusGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TubeGeometry: TubeGeometry, + AmbientLight: AmbientLight, + DirectionalLight: DirectionalLight, + HemisphereLight: HemisphereLight, + PointLight: PointLight, + RectAreaLight: RectAreaLight, + SpotLight: SpotLight, + Material: BaseMaterial, + BasicMaterial: BasicMaterial, + LambertMaterial: LambertMaterial, + PhongMaterial: PhongMaterial, + PhysicalMaterial: PhysicalMaterial, + PointsMaterial: PointsMaterial, + ShadowMaterial: ShadowMaterial, + StandardMaterial: StandardMaterial, + ToonMaterial: ToonMaterial, + MaterialInjectionKey: MaterialInjectionKey, + MatcapMaterial: MatcapMaterial, + ShaderMaterial: ShaderMaterial, + SubSurfaceMaterial: SubSurfaceMaterial, + Texture: Texture, + CubeTexture: CubeTexture, + VideoTexture: VideoTexture, + Mesh: Mesh, + MeshInjectionKey: MeshInjectionKey, + Box: Box, + Circle: Circle, + Cone: Cone, + Cylinder: Cylinder, + Dodecahedron: Dodecahedron, + Icosahedron: Icosahedron, + Lathe: Lathe, + Octahedron: Octahedron, + Plane: Plane, + Polyhedron: Polyhedron, + Ring: Ring, + Sphere: Sphere, + Tetrahedron: Tetrahedron, + Text: Text, + Torus: Torus, + TorusKnot: TorusKnot, + Tube: Tube, + Image: Image, + InstancedMesh: InstancedMesh, + Sprite: Sprite, + Points: Points, + GltfModel: GLTF, + FbxModel: FBX, + EffectComposer: EffectComposer, + ComposerInjectionKey: ComposerInjectionKey, + RenderPass: RenderPass, + EffectPass: EffectPass, + BokehPass: BokehPass, + FilmPass: FilmPass, + FXAAPass: FXAAPass, + HalftonePass: HalftonePass, + SMAAPass: SMAAPass, + SSAOPass: SSAOPass, + TiltShiftPass: TiltShiftPass, + UnrealBloomPass: UnrealBloomPass, + ZoomBlurPass: ZoomBlurPass, + applyObjectProps: applyObjectProps, + bindObjectProp: bindObjectProp, + bindObjectProps: bindObjectProps, + setFromProp: setFromProp, + bindProps: bindProps, + bindProp: bindProp, + propsValues: propsValues, + lerp: lerp, + limit: limit, + getMatcapUrl: getMatcapUrl +}); + +const TroisJSVuePlugin = { + install(app) { + const comps = [ + "Camera", + "OrthographicCamera", + "PerspectiveCamera", + "Raycaster", + "Renderer", + "Scene", + "Group", + "CubeCamera", + "AmbientLight", + "DirectionalLight", + "HemisphereLight", + "PointLight", + "RectAreaLight", + "SpotLight", + "BasicMaterial", + "LambertMaterial", + "MatcapMaterial", + "PhongMaterial", + "PhysicalMaterial", + "PointsMaterial", + "ShaderMaterial", + "StandardMaterial", + "SubSurfaceMaterial", + "ToonMaterial", + "Texture", + "CubeTexture", + "BufferGeometry", + "Mesh", + "Box", + "BoxGeometry", + "Circle", + "CircleGeometry", + "Cone", + "ConeGeometry", + "Cylinder", + "CylinderGeometry", + "Dodecahedron", + "DodecahedronGeometry", + "Icosahedron", + "IcosahedronGeometry", + "Lathe", + "LatheGeometry", + "Octahedron", + "OctahedronGeometry", + "Plane", + "PlaneGeometry", + "Polyhedron", + "PolyhedronGeometry", + "Ring", + "RingGeometry", + "Sphere", + "SphereGeometry", + "Tetrahedron", + "TetrahedronGeometry", + "Text", + "Torus", + "TorusGeometry", + "TorusKnot", + "TorusKnotGeometry", + "Tube", + "TubeGeometry", + "Image", + "InstancedMesh", + "Points", + "Sprite", + "FbxModel", + "GltfModel", + "BokehPass", + "EffectComposer", + "FilmPass", + "FXAAPass", + "HalftonePass", + "RenderPass", + "SAOPass", + "SMAAPass", + "SSAOPass", + "TiltShiftPass", + "UnrealBloomPass", + "ZoomBlurPass" + ]; + comps.forEach((comp) => { + app.component(comp, TROIS[comp]); + }); + } +}; +function createApp(params) { + return createApp$1(params).use(TroisJSVuePlugin); +} + +function useTextures() { + const obj = { + loader: new TextureLoader(), + count: 0, + textures: [], + loadProgress: 0, + loadTextures, + dispose + }; + return obj; + function loadTextures(images, cb) { + obj.count = images.length; + obj.textures.splice(0); + obj.loadProgress = 0; + Promise.all(images.map(loadTexture)).then(cb); + } + function loadTexture(img, index) { + return new Promise((resolve) => { + obj.loader.load( + img.src, + (texture) => { + obj.loadProgress += 1 / obj.count; + obj.textures[index] = texture; + resolve(texture); + } + ); + }); + } + function dispose() { + obj.textures.forEach((t) => t.dispose()); + } +} + +export { AmbientLight, BasicMaterial, BokehPass, Box, BoxGeometry, Geometry as BufferGeometry, PerspectiveCamera as Camera, Circle, CircleGeometry, ComposerInjectionKey, Cone, ConeGeometry, CubeCamera, CubeTexture, Cylinder, CylinderGeometry, DirectionalLight, Dodecahedron, DodecahedronGeometry, EffectComposer, EffectPass, ExtrudeGeometry, FXAAPass, FBX as FbxModel, FilmPass, GLTF as GltfModel, Group, HalftonePass, HemisphereLight, Icosahedron, IcosahedronGeometry, Image, InstancedMesh, LambertMaterial, Lathe, LatheGeometry, MatcapMaterial, BaseMaterial as Material, MaterialInjectionKey, Mesh, MeshInjectionKey, Object3D, Octahedron, OctahedronGeometry, OrthographicCamera, PerspectiveCamera, PhongMaterial, PhysicalMaterial, Plane, PlaneGeometry, PointLight, Points, PointsMaterial, Polyhedron, PolyhedronGeometry, Raycaster, RectAreaLight, RenderPass, Renderer, RendererInjectionKey, Ring, RingGeometry, SMAAPass, SSAOPass, Scene, SceneInjectionKey, ShaderMaterial, ShadowMaterial, ShapeGeometry, Sphere, SphereGeometry, SpotLight, Sprite, StandardMaterial, SubSurfaceMaterial, Tetrahedron, TetrahedronGeometry, Text, Texture, TiltShiftPass, ToonMaterial, Torus, TorusGeometry, TorusKnot, TorusKnotGeometry, TroisJSVuePlugin, Tube, TubeGeometry, UnrealBloomPass, VideoTexture, ZoomBlurPass, applyObjectProps, bindObjectProp, bindObjectProps, bindProp, bindProps, createApp, getMatcapUrl, lerp, limit, propsValues, setFromProp, useTextures }; +//# sourceMappingURL=trois.module.cdn.js.map diff --git a/build/trois.module.cdn.js.map b/build/trois.module.cdn.js.map new file mode 100644 index 0000000..1350729 --- /dev/null +++ b/build/trois.module.cdn.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trois.module.cdn.js","sources":["../src/tools.ts","../src/core/useRaycaster.ts","../src/core/usePointer.ts","../src/core/useThree.ts","../src/core/Renderer.ts","../src/core/Camera.ts","../src/core/OrthographicCamera.ts","../src/core/PerspectiveCamera.ts","../src/core/Scene.ts","../src/core/Object3D.ts","../src/core/Group.ts","../src/core/Raycaster.ts","../src/core/CubeCamera.ts","../src/meshes/Mesh.ts","../src/geometries/Geometry.ts","../src/geometries/BoxGeometry.ts","../src/geometries/CircleGeometry.ts","../src/geometries/ConeGeometry.ts","../src/geometries/CylinderGeometry.ts","../src/geometries/DodecahedronGeometry.ts","../src/geometries/ExtrudeGeometry.ts","../src/geometries/IcosahedronGeometry.ts","../src/geometries/LatheGeometry.ts","../src/geometries/OctahedronGeometry.ts","../src/geometries/PlaneGeometry.ts","../src/geometries/PolyhedronGeometry.ts","../src/geometries/RingGeometry.ts","../src/geometries/SphereGeometry.ts","../src/geometries/ShapeGeometry.ts","../src/geometries/TetrahedronGeometry.ts","../src/geometries/TorusGeometry.ts","../src/geometries/TorusKnotGeometry.ts","../src/geometries/TubeGeometry.ts","../src/lights/Light.ts","../src/lights/AmbientLight.ts","../src/lights/DirectionalLight.ts","../src/lights/HemisphereLight.ts","../src/lights/PointLight.ts","../src/lights/RectAreaLight.ts","../src/lights/SpotLight.ts","../src/materials/Material.ts","../src/materials/MatcapMaterial.ts","../src/materials/ShaderMaterial.ts","../src/materials/SubsurfaceScatteringShader.ts","../src/materials/SubSurfaceMaterial.ts","../src/materials/Texture.ts","../src/materials/CubeTexture.ts","../src/materials/VideoTexture.ts","../src/meshes/Box.ts","../src/meshes/Circle.ts","../src/meshes/Cone.ts","../src/meshes/Cylinder.ts","../src/meshes/Dodecahedron.ts","../src/meshes/Icosahedron.ts","../src/meshes/Lathe.ts","../src/meshes/Octahedron.ts","../src/meshes/Plane.ts","../src/meshes/Polyhedron.ts","../src/meshes/Ring.ts","../src/meshes/Sphere.ts","../src/meshes/Tetrahedron.ts","../src/meshes/Text.ts","../src/meshes/Torus.ts","../src/meshes/TorusKnot.ts","../src/meshes/Tube.ts","../src/meshes/Image.ts","../src/meshes/InstancedMesh.ts","../src/meshes/Sprite.ts","../src/meshes/Points.ts","../src/models/Model.ts","../src/models/GLTF.ts","../src/models/FBX.ts","../src/effects/EffectComposer.ts","../src/effects/EffectPass.ts","../src/effects/RenderPass.ts","../src/effects/BokehPass.ts","../src/effects/FilmPass.ts","../src/effects/FXAAPass.ts","../src/effects/HalftonePass.ts","../src/effects/SMAAPass.ts","../src/effects/SSAOPass.ts","../src/shaders/default.ts","../src/shaders/TiltShift.ts","../src/effects/TiltShiftPass.ts","../src/effects/UnrealBloomPass.ts","../src/shaders/ZoomBlur.ts","../src/effects/ZoomBlurPass.ts","../src/plugin.ts","../src/use/useTextures.ts"],"sourcesContent":["import { ref, toRef, watch, WatchStopHandle } from 'vue'\n\ntype OptionSetter = (dst: any, key: string, value: any) => void\n\nexport function applyObjectProps(\n dst: any,\n options: Record,\n setter?: OptionSetter\n): void {\n if (options instanceof Object) {\n Object.entries(options).forEach(([key, value]) => {\n if (setter) setter(dst, key, value)\n else dst[key] = value\n })\n }\n}\n\nexport function bindObjectProp(\n src: any,\n prop: string,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src[prop], setter)\n const r = toRef(src, prop)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) })\n}\n\nexport function bindObjectProps(\n src: any,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src, setter)\n const r = ref(src)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) }, { deep: true })\n}\n\nexport function setFromProp(o: Record, prop: Record): void {\n if (prop instanceof Object) {\n Object.entries(prop).forEach(([key, value]) => {\n o[key] = value\n })\n }\n}\n\nexport function bindProps(src: any, props: string[], dst: any): void {\n props.forEach(prop => {\n bindProp(src, prop, dst, prop)\n })\n}\n\nexport function bindProp(src: any, srcProp: string, dst: any, dstProp?: string): void {\n const _dstProp = dstProp || srcProp\n const ref = toRef(src, srcProp)\n if (ref.value instanceof Object) {\n setFromProp(dst[_dstProp], ref.value)\n watch(ref, (value) => { setFromProp(dst[_dstProp], value) }, { deep: true })\n } else {\n if (ref.value !== undefined) dst[_dstProp] = src[srcProp]\n watch(ref, (value) => { dst[_dstProp] = value })\n }\n}\n\nexport function propsValues(props: Record, exclude: string[] = []): Record {\n const values: Record = {}\n Object.entries(props).forEach(([key, value]) => {\n if (!exclude || !exclude.includes(key)) {\n values[key] = value\n }\n })\n return values\n}\n\nexport function lerp(value1: number, value2: number, amount: number): number {\n amount = amount < 0 ? 0 : amount\n amount = amount > 1 ? 1 : amount\n return value1 + (value2 - value1) * amount\n}\n\nexport function limit(val: number, min: number, max: number): number {\n return val < min ? min : (val > max ? max : val)\n}\n\n// from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'\nconst DEFAULT_MATCAP = '0404E8_0404B5_0404CB_3333FC'\n\nexport function getMatcapUrl(hash = DEFAULT_MATCAP, format = 1024): string {\n const fileName = `${hash}${getMatcapFormatString(format)}.png`\n return `${MATCAP_ROOT}/${format}/${fileName}`\n}\n\nfunction getMatcapFormatString(format: number) {\n switch (format) {\n case 64:\n return '-64px'\n case 128:\n return '-128px'\n case 256:\n return '-256px'\n case 512:\n return '-512px'\n default:\n return ''\n }\n}\n","import { Camera, Intersection, Object3D, Plane, Raycaster, Vector2, Vector3 } from 'three'\n\nexport interface RaycasterInterface {\n position: Vector3\n updatePosition(coords: Vector2): void\n intersect(coords: Vector2, objects: Object3D[], recursive?: boolean): Intersection[],\n}\n\nexport interface RaycasterConfigInterface {\n camera: Camera\n resetPosition?: Vector3\n}\n\nexport default function useRaycaster(options: RaycasterConfigInterface): RaycasterInterface {\n const {\n camera,\n resetPosition = new Vector3(0, 0, 0),\n } = options\n\n const raycaster = new Raycaster()\n const position = resetPosition.clone()\n const plane = new Plane(new Vector3(0, 0, 1), 0)\n\n const updatePosition = (coords: Vector2) => {\n raycaster.setFromCamera(coords, camera)\n camera.getWorldDirection(plane.normal)\n raycaster.ray.intersectPlane(plane, position)\n }\n\n const intersect = (coords: Vector2, objects: Object3D[], recursive = false) => {\n raycaster.setFromCamera(coords, camera)\n return raycaster.intersectObjects(objects, recursive)\n }\n\n return {\n position,\n updatePosition,\n intersect,\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Camera, InstancedMesh, Intersection, Object3D, Vector2, Vector3 } from 'three'\nimport useRaycaster from './useRaycaster'\n\nexport interface PointerEventInterface {\n type: 'pointerenter' | 'pointermove' | 'pointerleave' | 'click'\n position?: Vector2\n positionN?: Vector2\n positionV3?: Vector3\n}\n\nexport interface PointerIntersectEventInterface {\n type: 'pointerenter' | 'pointerover' | 'pointermove' | 'pointerleave' | 'click'\n component: any\n over?: boolean\n intersect?: Intersection\n}\n\nexport type PointerCallbackType = (e: PointerEventInterface) => void\nexport type PointerIntersectCallbackType = (e: PointerIntersectEventInterface) => void\n\nexport interface PointerPublicConfigInterface {\n intersectMode?: 'frame'\n intersectRecursive?: boolean\n touch?: boolean\n resetOnEnd?: boolean\n onEnter?: PointerCallbackType\n onMove?: PointerCallbackType\n onLeave?: PointerCallbackType\n onClick?: PointerCallbackType\n onIntersectEnter?: PointerIntersectCallbackType\n onIntersectOver?: PointerIntersectCallbackType\n onIntersectMove?: PointerIntersectCallbackType\n onIntersectLeave?: PointerIntersectCallbackType\n onIntersectClick?: PointerIntersectCallbackType\n}\n\nexport interface PointerConfigInterface extends PointerPublicConfigInterface {\n camera: Camera\n domElement: HTMLCanvasElement\n intersectObjects: Object3D[] | (() => Object3D[])\n}\n\nexport interface PointerInterface {\n position: Vector2\n positionN: Vector2\n positionV3: Vector3\n intersectObjects: Object3D[] | (() => Object3D[])\n listeners: boolean\n addListeners(cb: void): void\n removeListeners(cb: void): void\n intersect(): void\n}\n\nexport default function usePointer(options: PointerConfigInterface): PointerInterface {\n const {\n camera,\n domElement,\n intersectObjects,\n intersectRecursive = false,\n touch = true,\n resetOnEnd = false,\n onEnter = () => {},\n onMove = () => {},\n onLeave = () => {},\n onClick = () => {},\n onIntersectEnter = () => {},\n onIntersectOver = () => {},\n onIntersectMove = () => {},\n onIntersectLeave = () => {},\n onIntersectClick = () => {},\n } = options\n\n const position = new Vector2(0, 0)\n const positionN = new Vector2(0, 0)\n\n const raycaster = useRaycaster({ camera })\n const positionV3 = raycaster.position\n\n const obj: PointerInterface = {\n position,\n positionN,\n positionV3,\n intersectObjects,\n listeners: false,\n addListeners,\n removeListeners,\n intersect,\n }\n\n return obj\n\n function reset() {\n position.set(0, 0)\n positionN.set(0, 0)\n positionV3.set(0, 0, 0)\n }\n\n function updatePosition(event: TouchEvent | MouseEvent) {\n let x, y\n // @ts-ignore\n if (event.touches && event.touches.length > 0) {\n x = (event).touches[0].clientX\n y = (event).touches[0].clientY\n } else {\n x = (event).clientX\n y = (event).clientY\n }\n\n const rect = domElement.getBoundingClientRect()\n position.x = x - rect.left\n position.y = y - rect.top\n positionN.x = (position.x / rect.width) * 2 - 1\n positionN.y = -(position.y / rect.height) * 2 + 1\n raycaster.updatePosition(positionN)\n }\n\n function intersect() {\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const offObjects: Object3D[] = [..._intersectObjects]\n const iMeshes: InstancedMesh[] = []\n\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n if (!object.userData.over) {\n object.userData.over = true\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: true, component, intersect }\n const enterEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerenter' }\n onIntersectOver(overEvent)\n onIntersectEnter(enterEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerEnter?.(enterEvent)\n }\n\n const moveEvent: PointerIntersectEventInterface = { type: 'pointermove', component, intersect }\n onIntersectMove(moveEvent)\n component?.onPointerMove?.(moveEvent)\n\n offObjects.splice(offObjects.indexOf((object)), 1)\n })\n\n offObjects.forEach(object => {\n const component = getComponent(object)\n if (object.userData.over) {\n object.userData.over = false\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: false, component }\n const leaveEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerleave' }\n onIntersectOver(overEvent)\n onIntersectLeave(leaveEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerLeave?.(leaveEvent)\n }\n })\n }\n }\n\n function pointerEnter(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onEnter({ type: 'pointerenter', position, positionN, positionV3 })\n }\n\n function pointerMove(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onMove({ type: 'pointermove', position, positionN, positionV3 })\n intersect()\n }\n\n function pointerClick(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const iMeshes: InstancedMesh[] = []\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n const event: PointerIntersectEventInterface = { type: 'click', component, intersect }\n onIntersectClick(event)\n component?.onClick?.(event)\n })\n }\n onClick({ type: 'click', position, positionN, positionV3 })\n }\n\n function pointerLeave() {\n if (resetOnEnd) reset()\n onLeave({ type: 'pointerleave' })\n }\n\n function getComponent(object: Object3D) {\n if (object.userData.component) return object.userData.component\n\n let parent = object.parent\n while (parent) {\n if (parent.userData.component) {\n return parent.userData.component\n }\n parent = parent.parent\n }\n\n return undefined\n }\n\n function getIntersectObjects() {\n if (typeof intersectObjects === 'function') {\n return intersectObjects()\n } else return intersectObjects\n }\n\n function addListeners() {\n domElement.addEventListener('mouseenter', pointerEnter)\n domElement.addEventListener('mousemove', pointerMove)\n domElement.addEventListener('mouseleave', pointerLeave)\n domElement.addEventListener('click', pointerClick)\n if (touch) {\n domElement.addEventListener('touchstart', pointerEnter)\n domElement.addEventListener('touchmove', pointerMove)\n domElement.addEventListener('touchend', pointerLeave)\n }\n obj.listeners = true\n }\n\n function removeListeners() {\n domElement.removeEventListener('mouseenter', pointerEnter)\n domElement.removeEventListener('mousemove', pointerMove)\n domElement.removeEventListener('mouseleave', pointerLeave)\n domElement.removeEventListener('click', pointerClick)\n\n domElement.removeEventListener('touchstart', pointerEnter)\n domElement.removeEventListener('touchmove', pointerMove)\n domElement.removeEventListener('touchend', pointerLeave)\n obj.listeners = false\n }\n}\n","import { Camera, Object3D, OrthographicCamera, PerspectiveCamera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport usePointer, { PointerConfigInterface, PointerPublicConfigInterface, PointerInterface } from './usePointer'\n\nexport interface SizeInterface {\n width: number\n height: number\n wWidth: number\n wHeight: number\n ratio: number\n}\n\nexport interface ThreeConfigInterface {\n params?: WebGLRendererParameters\n canvas?: HTMLCanvasElement\n antialias: boolean\n alpha: boolean\n autoClear: boolean\n orbitCtrl: boolean | Record\n pointer: boolean | PointerPublicConfigInterface\n resize: boolean | string\n width?: number\n height?: number\n onResize?(size: SizeInterface): void\n [index:string]: any\n}\n\nexport interface ThreeInterface {\n config: ThreeConfigInterface\n renderer: WebGLRenderer\n composer?: EffectComposer\n camera?: Camera\n cameraCtrl?: OrbitControls\n scene?: Scene\n pointer?: PointerInterface\n size: SizeInterface\n init(): boolean\n dispose(): void\n render(): void\n renderC(): void\n setSize(width: number, height: number): void\n addIntersectObject(o: Object3D): void\n removeIntersectObject(o: Object3D): void\n}\n\n/**\n * Three.js helper\n */\nexport default function useThree(params: ThreeConfigInterface): ThreeInterface {\n // default config\n const config: ThreeConfigInterface = {\n antialias: true,\n alpha: false,\n autoClear: true,\n orbitCtrl: false,\n pointer: false,\n resize: false,\n width: 300,\n height: 150,\n }\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n config[key] = value\n })\n }\n\n // size\n const size: SizeInterface = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n }\n\n const beforeRenderCallbacks: {(): void}[] = []\n\n const intersectObjects: Object3D[] = []\n\n const renderer = createRenderer()\n\n // returned object\n const obj: ThreeInterface = {\n config,\n renderer,\n size,\n init,\n dispose,\n render,\n renderC,\n setSize,\n addIntersectObject, removeIntersectObject,\n }\n\n return obj\n\n /**\n * create WebGLRenderer\n */\n function createRenderer(): WebGLRenderer {\n const renderer = new WebGLRenderer({ canvas: config.canvas, antialias: config.antialias, alpha: config.alpha, ...config.params })\n renderer.autoClear = config.autoClear\n return renderer\n }\n\n /**\n * init three\n */\n function init() {\n if (!obj.scene) {\n console.error('Missing Scene')\n return false\n }\n\n if (!obj.camera) {\n console.error('Missing Camera')\n return false\n }\n\n if (config.resize) {\n onResize()\n window.addEventListener('resize', onResize)\n } else if (config.width && config.height) {\n setSize(config.width, config.height)\n }\n\n initPointer()\n\n if (config.orbitCtrl) {\n const cameraCtrl = new OrbitControls(obj.camera, obj.renderer.domElement)\n if (config.orbitCtrl instanceof Object) {\n Object.entries(config.orbitCtrl).forEach(([key, value]) => {\n // @ts-ignore\n cameraCtrl[key] = value\n })\n }\n onBeforeRender(() => { cameraCtrl.update() })\n obj.cameraCtrl = cameraCtrl\n }\n\n return true\n }\n\n /**\n * init pointer\n */\n function initPointer() {\n let pointerConf: PointerConfigInterface = {\n camera: obj.camera!,\n domElement: obj.renderer!.domElement,\n intersectObjects,\n }\n\n if (config.pointer && config.pointer instanceof Object) {\n pointerConf = { ...pointerConf, ...config.pointer }\n }\n\n const pointer = obj.pointer = usePointer(pointerConf)\n if (config.pointer || intersectObjects.length) {\n pointer.addListeners()\n if (pointerConf.intersectMode === 'frame') {\n onBeforeRender(pointer.intersect)\n }\n }\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(cb: {(): void}) {\n beforeRenderCallbacks.push(cb)\n }\n\n /**\n * default render\n */\n function render() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.renderer!.render(obj.scene!, obj.camera!)\n }\n\n /**\n * composer render\n */\n function renderC() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.composer!.render()\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o: Object3D) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o)\n }\n // add listeners if needed\n if (obj.pointer && !obj.pointer.listeners) {\n obj.pointer.addListeners()\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o: Object3D) {\n const i = intersectObjects.indexOf(o)\n if (i !== -1) {\n intersectObjects.splice(i, 1)\n }\n // remove listeners if needed\n if (obj.pointer && !config.pointer && intersectObjects.length === 0) {\n obj.pointer.removeListeners()\n }\n }\n\n /**\n * remove listeners and dispose\n */\n function dispose() {\n // beforeRenderCallbacks = []\n window.removeEventListener('resize', onResize)\n if (obj.pointer) obj.pointer.removeListeners()\n if (obj.cameraCtrl) obj.cameraCtrl.dispose()\n if (obj.renderer) obj.renderer.dispose()\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (config.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight)\n } else {\n const elt = obj.renderer!.domElement.parentNode as Element\n if (elt) setSize(elt.clientWidth, elt.clientHeight)\n }\n config.onResize?.(size)\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width: number, height: number) {\n size.width = width\n size.height = height\n size.ratio = width / height\n\n obj.renderer!.setSize(width, height, false)\n\n // already done in EffectComposer\n // if (obj.composer) {\n // obj.composer.setSize(width, height)\n // }\n\n const camera = (obj.camera!)\n if (camera.type === 'PerspectiveCamera') {\n const pCamera = (camera)\n pCamera.aspect = size.ratio\n pCamera.updateProjectionMatrix()\n }\n\n if (camera.type === 'OrthographicCamera') {\n const oCamera = (camera)\n size.wWidth = oCamera.right - oCamera.left\n size.wHeight = oCamera.top - oCamera.bottom\n } else {\n const wsize = getCameraSize()\n size.wWidth = wsize[0]\n size.wHeight = wsize[1]\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const camera = (obj.camera!)\n const vFOV = (camera.fov * Math.PI) / 180\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(camera.position.z)\n const w = h * camera.aspect\n return [w, h]\n }\n}\n","/* eslint-disable no-use-before-define */\nimport { Camera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'\nimport { ComponentPublicInstance, defineComponent, InjectionKey, PropType, watchEffect } from 'vue'\nimport { bindObjectProp } from '../tools'\nimport { PointerInterface, PointerPublicConfigInterface } from './usePointer'\nimport useThree, { SizeInterface, ThreeConfigInterface, ThreeInterface } from './useThree'\n\ntype CallbackType = (event: T) => void\n\n// type EventType = 'init' | 'mounted' | 'beforerender' | 'afterrender' | 'resize'\n\nexport interface EventInterface {\n type: 'init' | 'mounted'\n renderer: RendererInterface\n}\n\nexport interface RenderEventInterface {\n type: 'beforerender' | 'afterrender'\n renderer: RendererInterface\n time: number\n}\n\nexport interface ResizeEventInterface {\n type: 'resize'\n renderer: RendererInterface\n size: SizeInterface\n}\n\ntype InitCallbackType = CallbackType\ntype MountedCallbackType = CallbackType\ntype RenderCallbackType = CallbackType\ntype ResizeCallbackType = CallbackType\n// type CallbackTypes = InitCallbackType | MountedCallbackType | RenderCallbackType | ResizeCallbackType\n\n// interface EventMap {\n// 'init': EventInterface;\n// 'mounted': EventInterface;\n// 'beforerender': RenderEventInterface;\n// 'afterrender': RenderEventInterface;\n// 'resize': ResizeEventInterface;\n// }\n\ninterface EventCallbackMap {\n 'init': InitCallbackType;\n 'mounted': MountedCallbackType;\n 'beforerender': RenderCallbackType;\n 'afterrender': RenderCallbackType;\n 'resize': ResizeCallbackType;\n}\n\ninterface RenderFunctionEventInterface {\n renderer: RendererInterface\n time: number\n}\n\ninterface RendererSetupInterface {\n canvas: HTMLCanvasElement\n three: ThreeInterface\n renderer: WebGLRenderer\n size: SizeInterface\n renderFn(e: RenderFunctionEventInterface): void\n raf: boolean\n\n $pointer?: PointerInterface\n\n initCallbacks: InitCallbackType[]\n mountedCallbacks: MountedCallbackType[]\n beforeRenderCallbacks: RenderCallbackType[]\n afterRenderCallbacks: RenderCallbackType[]\n resizeCallbacks: ResizeCallbackType[]\n}\n\nexport interface RendererInterface extends RendererSetupInterface {\n scene?: Scene\n camera?: Camera\n composer?: EffectComposer\n\n onInit(cb: InitCallbackType): void\n onMounted(cb: MountedCallbackType): void\n\n onBeforeRender(cb: RenderCallbackType): void\n offBeforeRender(cb: RenderCallbackType): void\n onAfterRender(cb: RenderCallbackType): void\n offAfterRender(cb: RenderCallbackType): void\n\n onResize(cb: ResizeCallbackType): void\n offResize(cb: ResizeCallbackType): void\n\n addListener(t: T, cb: EventCallbackMap[T]): void\n removeListener(t: T, cb: EventCallbackMap[T]): void\n}\n\nexport interface RendererPublicInterface extends ComponentPublicInstance, RendererInterface {}\n\nexport const RendererInjectionKey: InjectionKey = Symbol('Renderer')\n\nexport default defineComponent({\n name: 'Renderer',\n props: {\n params: { type: Object as PropType, default: () => ({}) },\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n orbitCtrl: { type: [Boolean, Object] as PropType>, default: false },\n pointer: { type: [Boolean, Object] as PropType, default: false },\n resize: { type: [Boolean, String] as PropType, default: false },\n shadow: Boolean,\n width: String,\n height: String,\n pixelRatio: Number,\n xr: Boolean,\n props: { type: Object, default: () => ({}) },\n onReady: Function as PropType<(r: RendererInterface) => void>,\n },\n inheritAttrs: false,\n setup(props, { attrs }): RendererSetupInterface {\n const initCallbacks: InitCallbackType[] = []\n const mountedCallbacks: MountedCallbackType[] = []\n const beforeRenderCallbacks: RenderCallbackType[] = []\n const afterRenderCallbacks: RenderCallbackType[] = []\n const resizeCallbacks: ResizeCallbackType[] = []\n\n const canvas = document.createElement('canvas')\n Object.entries(attrs).forEach(([key, value]) => {\n const matches = key.match(/^on([A-Z][a-zA-Z]*)$/)\n if (matches) {\n canvas.addEventListener(matches[1].toLowerCase(), value as {(): void })\n } else {\n canvas.setAttribute(key, value as string)\n }\n })\n\n const config: ThreeConfigInterface = {\n canvas,\n params: props.params,\n antialias: props.antialias,\n alpha: props.alpha,\n autoClear: props.autoClear,\n orbitCtrl: props.orbitCtrl,\n pointer: props.pointer,\n resize: props.resize,\n }\n\n if (props.width) config.width = parseInt(props.width)\n if (props.height) config.height = parseInt(props.height)\n\n const three = useThree(config)\n bindObjectProp(props, 'props', three.renderer)\n\n watchEffect(() => {\n if (props.pixelRatio) three.renderer.setPixelRatio(props.pixelRatio)\n })\n\n const renderFn: {(): void} = () => {}\n\n return {\n canvas,\n three,\n renderer: three.renderer,\n size: three.size,\n renderFn,\n raf: true,\n initCallbacks,\n mountedCallbacks,\n beforeRenderCallbacks,\n afterRenderCallbacks,\n resizeCallbacks,\n }\n },\n computed: {\n camera: {\n get: function(): Camera | undefined { return this.three.camera },\n set: function(camera: Camera): void { this.three.camera = camera },\n },\n scene: {\n get: function(): Scene | undefined { return this.three.scene },\n set: function(scene: Scene): void { this.three.scene = scene },\n },\n composer: {\n get: function(): EffectComposer | undefined { return this.three.composer },\n set: function(composer: EffectComposer): void { this.three.composer = composer },\n },\n },\n provide() {\n return {\n [RendererInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // appendChild won't work on reload\n this.$el.parentNode.insertBefore(this.canvas, this.$el)\n\n if (this.three.init()) {\n if (this.three.pointer) {\n this.$pointer = this.three.pointer\n }\n\n // TODO : don't use config\n this.three.config.onResize = (size) => {\n this.resizeCallbacks.forEach(e => e({ type: 'resize', renderer: this, size }))\n }\n\n if (this.shadow) {\n this.renderer.shadowMap.enabled = true\n }\n\n this.renderFn = this.three.composer ? this.three.renderC : this.three.render\n\n this.initCallbacks.forEach(e => e({ type: 'init', renderer: this }))\n this.onReady?.(this as RendererInterface)\n\n if (this.xr) {\n this.renderer.xr.enabled = true\n this.renderer.setAnimationLoop(this.render)\n } else {\n requestAnimationFrame(this.renderLoop)\n }\n }\n\n this.mountedCallbacks.forEach(e => e({ type: 'mounted', renderer: this }))\n },\n beforeUnmount() {\n this.canvas.remove()\n this.beforeRenderCallbacks = []\n this.afterRenderCallbacks = []\n this.raf = false\n this.three.dispose()\n },\n methods: {\n onInit(cb: InitCallbackType) { this.addListener('init', cb) },\n onMounted(cb: MountedCallbackType) { this.addListener('mounted', cb) },\n onBeforeRender(cb: RenderCallbackType) { this.addListener('beforerender', cb) },\n offBeforeRender(cb: RenderCallbackType) { this.removeListener('beforerender', cb) },\n onAfterRender(cb: RenderCallbackType) { this.addListener('afterrender', cb) },\n offAfterRender(cb: RenderCallbackType) { this.removeListener('afterrender', cb) },\n onResize(cb: ResizeCallbackType) { this.addListener('resize', cb) },\n offResize(cb: ResizeCallbackType) { this.removeListener('resize', cb) },\n\n addListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n callbacks.push(cb)\n },\n\n removeListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n const index = callbacks.indexOf(cb)\n if (index !== -1) callbacks.splice(index, 1)\n },\n\n getCallbacks(type: string) {\n if (type === 'init') {\n return this.initCallbacks\n } else if (type === 'mounted') {\n return this.mountedCallbacks\n } else if (type === 'beforerender') {\n return this.beforeRenderCallbacks\n } else if (type === 'afterrender') {\n return this.afterRenderCallbacks\n } else {\n return this.resizeCallbacks\n }\n },\n\n render(time: number) {\n this.beforeRenderCallbacks.forEach(e => e({ type: 'beforerender', renderer: this, time }))\n // this.onFrame?.(cbParams)\n this.renderFn({ renderer: this, time })\n this.afterRenderCallbacks.forEach(e => e({ type: 'afterrender', renderer: this, time }))\n },\n renderLoop(time: number) {\n if (this.raf) requestAnimationFrame(this.renderLoop)\n this.render(time)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Renderer',\n})\n","import { defineComponent } from 'vue'\n// import { Camera } from 'three'\n// import { RendererInjectionKey, RendererInterface } from './Renderer'\n// import Object3D from './Object3D'\n\n// export interface CameraSetupInterface {\n// renderer?: RendererInterface\n// camera: Camera\n// }\n\nexport default defineComponent({\n // TODO: eventually extend Object3D\n // extends: Object3D,\n\n props: {\n props: { type: Object, default: () => ({}) },\n },\n\n // inject: { renderer: RendererInjectionKey as symbol },\n\n // setup(): CameraSetupInterface {\n // return {}\n // },\n\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n})\n\nexport function cameraSetProp(camera: any, key: string, value: any, updateProjectionMatrix = true) {\n camera[key] = value\n if (updateProjectionMatrix) camera.updateProjectionMatrix()\n}\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { OrthographicCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'OrthographicCamera',\n props: {\n left: { type: Number, default: -1 },\n right: { type: Number, default: 1 },\n top: { type: Number, default: 1 },\n bottom: { type: Number, default: -1 },\n near: { type: Number, default: 0.1 },\n far: { type: Number, default: 2000 },\n zoom: { type: Number, default: 1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new OrthographicCamera(props.left, props.right, props.top, props.bottom, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'OrthographicCamera',\n})\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { PerspectiveCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'PerspectiveCamera',\n props: {\n aspect: { type: Number, default: 1 },\n far: { type: Number, default: 2000 },\n fov: { type: Number, default: 50 },\n near: { type: Number, default: 0.1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n lookAt: { type: Object as PropType, default: null },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new PerspectiveCamera(props.fov, props.aspect, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n\n if (props.lookAt) camera.lookAt(props.lookAt.x ?? 0, props.lookAt.y, props.lookAt.z)\n watch(() => props.lookAt, (v) => { camera.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'PerspectiveCamera',\n})\n","import { defineComponent, inject, InjectionKey, provide, watch } from 'vue'\nimport { Scene, Color, Object3D, Texture } from 'three'\nimport { RendererInjectionKey } from './Renderer'\n\nexport const SceneInjectionKey: InjectionKey = Symbol('Scene')\n\nexport default defineComponent({\n name: 'Scene',\n props: {\n background: [String, Number, Object],\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n const scene = new Scene()\n\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n renderer.scene = scene\n provide(SceneInjectionKey, scene)\n\n const setBackground = (value: any): void => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n if (scene.background instanceof Color) scene.background.set(value)\n else scene.background = new Color(value)\n } else if (value instanceof Texture) {\n scene.background = value\n }\n }\n\n setBackground(props.background)\n watch(() => props.background, setBackground)\n\n const add = (o: Object3D): void => { scene.add(o) }\n const remove = (o: Object3D): void => { scene.remove(o) }\n\n return { scene, add, remove }\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Scene',\n})\n","import { Object3D, Scene } from 'three'\nimport { ComponentPublicInstance, defineComponent, getCurrentInstance, PropType, watch } from 'vue'\nimport { bindObjectProp, bindProp } from '../tools'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\nimport { SceneInjectionKey } from './Scene'\n\nexport interface Object3DSetupInterface {\n renderer?: RendererInterface\n scene?: Scene\n o3d?: Object3D\n parent?: ComponentPublicInstance\n}\n\nexport interface Object3DInterface extends Object3DSetupInterface {\n addToParent(o?: Object3D): boolean\n removeFromParent(o?: Object3D): boolean\n add(o: Object3D): void\n remove(o: Object3D): void\n}\n\nexport interface Object3DPublicInterface extends ComponentPublicInstance, Object3DInterface {}\n\n// export function object3DSetup(): Object3DSetupInterface {\n// const renderer = inject(RendererInjectionKey)\n// const scene = inject(SceneInjectionKey)\n// return { scene, renderer }\n// }\n\nexport const pointerProps = {\n onPointerEnter: Function,\n onPointerOver: Function,\n onPointerMove: Function,\n onPointerLeave: Function,\n onPointerDown: Function,\n onPointerUp: Function,\n onClick: Function,\n}\n\nexport interface Vector2PropInterface {\n x?: number\n y?: number\n width?: number\n height?: number\n}\n\nexport interface Vector3PropInterface extends Vector2PropInterface {\n z?: number\n}\n\nexport interface EulerPropInterface extends Vector3PropInterface {\n order?: 'XYZ' | 'YZX' | 'ZXY' | 'XZY' | 'YXZ' | 'ZYX'\n}\n\nexport default defineComponent({\n name: 'Object3D',\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n scene: SceneInjectionKey as symbol,\n },\n emits: ['created', 'ready'],\n props: {\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n rotation: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n scale: { type: Object as PropType, default: () => ({ x: 1, y: 1, z: 1, order: 'XYZ' }) },\n lookAt: { type: Object as PropType, default: null },\n userData: { type: Object, default: () => ({}) },\n visible: { type: Boolean, default: true },\n props: { type: Object, default: () => ({}) },\n disableAdd: { type: Boolean, default: false },\n disableRemove: { type: Boolean, default: false },\n ...pointerProps,\n },\n setup(): Object3DSetupInterface {\n // return object3DSetup()\n return {}\n },\n created() {\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n if (!this.scene) {\n console.error('Missing parent Scene')\n }\n },\n unmounted() {\n if (!this.disableRemove) this.removeFromParent()\n if (this.o3d) {\n if (this.renderer) this.renderer.three.removeIntersectObject(this.o3d)\n }\n },\n methods: {\n initObject3D(o3d: Object3D) {\n this.o3d = o3d\n o3d.userData.component = this\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n if (this.renderer) this.renderer.three.addIntersectObject(o3d)\n }\n\n bindProp(this, 'position', o3d)\n bindProp(this, 'rotation', o3d)\n bindProp(this, 'scale', o3d)\n bindProp(this, 'userData', o3d.userData)\n bindProp(this, 'visible', o3d)\n\n bindObjectProp(this, 'props', o3d)\n\n this.$emit('created', o3d)\n\n if (this.lookAt) o3d.lookAt(this.lookAt.x ?? 0, this.lookAt.y, this.lookAt.z)\n watch(() => this.lookAt, (v) => { o3d.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n this.parent = this.getParent()\n if (!this.disableAdd) {\n if (this.addToParent()) this.$emit('ready', this)\n else console.error('Missing parent (Scene, Group...)')\n }\n },\n getParent(): undefined | ComponentPublicInstance {\n let parent = this.$parent\n\n if (!parent) {\n // for script setup\n const instance = getCurrentInstance() as any // ctx is internal\n if (instance && instance.parent) parent = instance.parent.ctx\n }\n\n while (parent) {\n if ((parent as any).add) return parent\n parent = parent.$parent\n }\n return undefined\n },\n addToParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).add(o3d)\n return true\n }\n return false\n },\n removeFromParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).remove(o3d)\n return true\n }\n return false\n },\n add(o: Object3D) { this.o3d?.add(o) },\n remove(o: Object3D) { this.o3d?.remove(o) },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Object3D',\n})\n","import { defineComponent } from 'vue'\nimport { Group } from 'three'\nimport Object3D from './Object3D'\n\nexport default defineComponent({\n name: 'Group',\n extends: Object3D,\n setup() {\n return {\n group: new Group(),\n }\n },\n created() {\n this.initObject3D(this.group)\n },\n __hmrId: 'Group',\n})\n","import { defineComponent, inject, PropType } from 'vue'\nimport usePointer, { PointerInterface, PointerIntersectCallbackType } from './usePointer'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst emptyCallBack: PointerIntersectCallbackType = () => {}\n\ninterface RaycasterSetupInterface {\n renderer?: RendererInterface\n pointer?: PointerInterface\n}\n\nexport default defineComponent({\n name: 'Raycaster',\n props: {\n onPointerEnter: { type: Function as PropType, default: emptyCallBack },\n onPointerOver: { type: Function as PropType, default: emptyCallBack },\n onPointerMove: { type: Function as PropType, default: emptyCallBack },\n onPointerLeave: { type: Function as PropType, default: emptyCallBack },\n onClick: { type: Function as PropType, default: emptyCallBack },\n intersectMode: { type: String, default: 'move' },\n intersectRecursive: { type: Boolean, default: false },\n },\n setup(): RaycasterSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n mounted() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n this.renderer.onMounted(() => {\n if (!renderer.camera) return\n\n this.pointer = usePointer({\n camera: renderer.camera,\n domElement: renderer.canvas,\n intersectObjects: () => renderer.scene ? renderer.scene.children : [],\n intersectRecursive: this.intersectRecursive,\n onIntersectEnter: this.onPointerEnter,\n onIntersectOver: this.onPointerOver,\n onIntersectMove: this.onPointerMove,\n onIntersectLeave: this.onPointerLeave,\n onIntersectClick: this.onClick,\n })\n this.pointer.addListeners()\n\n if (this.intersectMode === 'frame') {\n renderer.onBeforeRender(this.pointer.intersect)\n }\n })\n },\n unmounted() {\n if (this.pointer) {\n this.pointer.removeListeners()\n this.renderer?.offBeforeRender(this.pointer.intersect)\n }\n },\n render() {\n return []\n },\n __hmrId: 'Raycaster',\n})\n","import { defineComponent, inject, onUnmounted, PropType } from 'vue'\nimport { CubeCamera, LinearMipmapLinearFilter, Mesh, RGBAFormat, WebGLCubeRenderTarget } from 'three'\nimport Object3D from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\ninterface CubeCameraSetupInterface {\n cubeRT?: WebGLCubeRenderTarget\n cubeCamera?: CubeCamera\n updateRT?: {(): void}\n}\n\nexport default defineComponent({\n extends: Object3D,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n hideMeshes: { type: Array as PropType, default: () => ([]) },\n },\n setup(props): CubeCameraSetupInterface {\n const rendererC = inject(RendererInjectionKey)\n if (!rendererC || !rendererC.scene) {\n console.error('Missing Renderer / Scene')\n return {}\n }\n\n const renderer = rendererC.renderer, scene = rendererC.scene\n const cubeRT = new WebGLCubeRenderTarget(props.cubeRTSize, { format: RGBAFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter })\n const cubeCamera = new CubeCamera(props.cubeCameraNear, props.cubeCameraFar, cubeRT)\n const updateRT = () => {\n props.hideMeshes.forEach(m => { m.visible = false })\n cubeCamera.update(renderer, scene)\n props.hideMeshes.forEach(m => { m.visible = true })\n }\n\n if (props.autoUpdate) {\n rendererC.onBeforeRender(updateRT)\n onUnmounted(() => { rendererC.offBeforeRender(updateRT) })\n } else {\n rendererC.onMounted(updateRT)\n }\n\n return { cubeRT, cubeCamera, updateRT }\n },\n created() {\n if (this.cubeCamera) this.initObject3D(this.cubeCamera)\n },\n render() {\n return []\n },\n __hmrId: 'CubeCamera',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, watch } from 'vue'\nimport { BufferGeometry, Material, Mesh as TMesh } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport interface MeshSetupInterface extends Object3DSetupInterface {\n mesh?: TMesh\n geometry?: BufferGeometry\n material?: Material | Material[]\n loading?: boolean\n}\n\nexport interface MeshInterface extends MeshSetupInterface {\n setGeometry(g: BufferGeometry): void\n setMaterial(m: Material): void\n}\n\nexport interface MeshPublicInterface extends ComponentPublicInstance, MeshInterface {}\n\nexport const MeshInjectionKey: InjectionKey = Symbol('Mesh')\n\nconst Mesh = defineComponent({\n name: 'Mesh',\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n },\n setup(): MeshSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // TODO : proper ?\n if (!this.mesh && !this.loading) this.initMesh()\n },\n methods: {\n initMesh() {\n const mesh = new TMesh(this.geometry, this.material)\n\n bindProp(this, 'castShadow', mesh)\n bindProp(this, 'receiveShadow', mesh)\n\n this.mesh = mesh\n this.initObject3D(mesh)\n },\n createGeometry() {},\n addGeometryWatchers(props: Readonly) {\n Object.keys(props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], () => {\n this.refreshGeometry()\n })\n })\n },\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material | Material[]) {\n if (Array.isArray(material) || !this.material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n } else {\n let prev = this.material\n if (Array.isArray(prev)) {\n prev.push(material)\n } else {\n prev = [prev, material]\n }\n this.material = prev\n if (this.mesh) this.mesh.material = prev\n }\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n if (this.mesh && this.geometry) this.mesh.geometry = this.geometry\n oldGeo?.dispose()\n },\n },\n unmounted() {\n // for predefined mesh (geometry/material are not unmounted)\n if (this.geometry) this.geometry.dispose()\n if (this.material) {\n if (Array.isArray(this.material)) {\n for (const m of this.material) m.dispose()\n } else {\n this.material.dispose()\n }\n }\n },\n __hmrId: 'Mesh',\n})\n\nexport default Mesh\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function meshComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n },\n })\n}\n","import { ComponentPropsOptions, defineComponent, PropType, watch } from 'vue'\nimport { BufferAttribute, BufferGeometry } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\n\nexport interface GeometrySetupInterface {\n mesh?: MeshInterface\n geometry?: BufferGeometry\n watchProps?: string[]\n}\n\nexport interface GeometryAttributeInterface {\n name: string\n array: ArrayLike\n itemSize: number\n normalized?: boolean\n}\n\n// function defaultSetup(): GeometryInterface {\n// const mesh = inject('mesh') as MeshInterface\n// const watchProps: string[] = []\n// return { mesh, watchProps }\n// }\n\nconst Geometry = defineComponent({\n emits: ['created'],\n props: {\n rotateX: Number,\n rotateY: Number,\n rotateZ: Number,\n attributes: { type: Array as PropType>, default: () => ([]) },\n },\n // inject for sub components\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): GeometrySetupInterface {\n return {}\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry) this.mesh.setGeometry(this.geometry)\n\n Object.keys(this.$props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], this.refreshGeometry)\n })\n },\n unmounted() {\n this.geometry?.dispose()\n },\n methods: {\n createGeometry() {\n const bufferAttributes: Record = {}\n const geometry = new BufferGeometry()\n this.attributes.forEach(attribute => {\n if (attribute.name && attribute.itemSize && attribute.array) {\n const bufferAttribute = bufferAttributes[attribute.name] = new BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized)\n geometry.setAttribute(attribute.name, bufferAttribute)\n }\n })\n geometry.computeBoundingBox()\n geometry.userData.component = this\n this.geometry = geometry\n this.$emit('created', geometry)\n },\n rotateGeometry() {\n if (!this.geometry) return\n if (this.rotateX) this.geometry.rotateX(this.rotateX)\n if (this.rotateY) this.geometry.rotateY(this.rotateY)\n if (this.rotateZ) this.geometry.rotateZ(this.rotateZ)\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry && this.mesh) this.mesh.setGeometry(this.geometry)\n oldGeo?.dispose()\n },\n },\n render() { return [] },\n})\n\nexport default Geometry\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function geometryComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n this.geometry.userData.component = this\n this.$emit('created', this.geometry)\n },\n },\n })\n}\n","import { geometryComponent } from './Geometry'\nimport { BoxGeometry } from 'three'\n\nexport const props = {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): BoxGeometry {\n if (comp.size) {\n return new BoxGeometry(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n } else {\n return new BoxGeometry(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n }\n}\n\nexport default geometryComponent('BoxGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CircleGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CircleGeometry {\n return new CircleGeometry(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CircleGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { ConeGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): ConeGeometry {\n return new ConeGeometry(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('ConeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CylinderGeometry } from 'three'\n\nexport const props = {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CylinderGeometry {\n return new CylinderGeometry(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CylinderGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { DodecahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): DodecahedronGeometry {\n return new DodecahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('DodecahedronGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { ExtrudeGeometry, ExtrudeGeometryOptions, Shape } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n options: { type: Object as PropType },\n} as const\n\nexport function createGeometry(comp: any): ExtrudeGeometry {\n return new ExtrudeGeometry(comp.shapes, comp.options)\n}\n\nexport default geometryComponent('ExtrudeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { IcosahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): IcosahedronGeometry {\n return new IcosahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('IcosahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { LatheGeometry } from 'three'\n\nexport const props = {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): LatheGeometry {\n return new LatheGeometry(comp.points, comp.segments, comp.phiStart, comp.phiLength)\n}\n\nexport default geometryComponent('LatheGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { OctahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): OctahedronGeometry {\n return new OctahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('OctahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PlaneGeometry } from 'three'\n\nexport const props = {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): PlaneGeometry {\n return new PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments)\n}\n\nexport default geometryComponent('PlaneGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PolyhedronGeometry } from 'three'\n\nexport const props = {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): PolyhedronGeometry {\n return new PolyhedronGeometry(comp.vertices, comp.indices, comp.radius, comp.detail)\n}\n\nexport default geometryComponent('PolyhedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { RingGeometry } from 'three'\n\nexport const props = {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): RingGeometry {\n return new RingGeometry(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('RingGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { SphereGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI },\n} as const\n\nexport function createGeometry(comp: any): SphereGeometry {\n return new SphereGeometry(comp.radius, comp.widthSegments, comp.heightSegments, comp.phiStart, comp.phiLength, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('SphereGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { Shape, ShapeGeometry } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n curveSegments: { type: Number },\n} as const\n\nexport function createGeometry(comp: any): ShapeGeometry {\n return new ShapeGeometry(comp.shapes, comp.curveSegments)\n}\n\nexport default geometryComponent('ShapeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TetrahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): TetrahedronGeometry {\n return new TetrahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('TetrahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): TorusGeometry {\n return new TorusGeometry(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc)\n}\n\nexport default geometryComponent('TorusGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusKnotGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n} as const\n\nexport function createGeometry(comp: any): TorusKnotGeometry {\n return new TorusKnotGeometry(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q)\n}\n\nexport default geometryComponent('TorusKnotGeometry', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three'\nimport Geometry from './Geometry'\n\nexport const props = {\n points: Array,\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n} as const\n\nexport function createGeometry(comp: any): TubeGeometry {\n let curve\n if (comp.points) {\n curve = new CatmullRomCurve3(comp.points)\n } else if (comp.path) {\n curve = comp.path\n } else {\n console.error('Missing path curve or points.')\n }\n return new TubeGeometry(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed)\n}\n\nexport default defineComponent({\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n})\n\nexport function updateTubeGeometryPoints(tube: TubeGeometry, points: Vector3[]): void {\n const curve = new CatmullRomCurve3(points)\n const { radialSegments, radius, tubularSegments, closed } = tube.parameters\n const frames = curve.computeFrenetFrames(tubularSegments, closed)\n tube.tangents = frames.tangents\n tube.normals = frames.normals\n tube.binormals = frames.binormals\n tube.parameters.path = curve\n\n const pAttribute = tube.getAttribute('position')\n const nAttribute = tube.getAttribute('normal')\n\n const normal = new Vector3()\n const P = new Vector3()\n\n for (let i = 0; i < tubularSegments; i++) {\n updateSegment(i)\n }\n updateSegment(tubularSegments)\n\n tube.attributes.position.needsUpdate = true\n tube.attributes.normal.needsUpdate = true\n\n function updateSegment(i: number) {\n curve.getPointAt(i / tubularSegments, P)\n const N = frames.normals[i]\n const B = frames.binormals[i]\n for (let j = 0; j <= radialSegments; j++) {\n const v = j / radialSegments * Math.PI * 2\n const sin = Math.sin(v)\n const cos = -Math.cos(v)\n normal.x = (cos * N.x + sin * B.x)\n normal.y = (cos * N.y + sin * B.y)\n normal.z = (cos * N.z + sin * B.z)\n normal.normalize()\n const index = (i * (radialSegments + 1) + j)\n nAttribute.setXYZ(index, normal.x, normal.y, normal.z)\n pAttribute.setXYZ(index, P.x + radius * normal.x, P.y + radius * normal.y, P.z + radius * normal.z)\n }\n }\n}\n","import { DirectionalLight, Light, SpotLight } from 'three'\nimport { defineComponent, PropType, watch } from 'vue'\nimport Object3D, { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp, setFromProp } from '../tools'\n\nexport interface LightSetupInterface {\n light?: Light\n}\n\nexport default defineComponent({\n extends: Object3D,\n name: 'Light',\n props: {\n color: { type: String, default: '#ffffff' },\n intensity: { type: Number, default: 1 },\n castShadow: { type: Boolean, default: false },\n shadowMapSize: { type: Object as PropType, default: () => ({ x: 512, y: 512 }) },\n shadowCamera: { type: Object, default: () => ({}) },\n },\n setup(): LightSetupInterface {\n return {}\n },\n unmounted() {\n if (this.light instanceof SpotLight || this.light instanceof DirectionalLight) {\n this.removeFromParent(this.light.target)\n }\n },\n methods: {\n initLight(light: Light) {\n this.light = light\n\n if ((light as any).shadow) {\n light.castShadow = this.castShadow\n // @ts-ignore\n setFromProp(light.shadow.mapSize, this.shadowMapSize)\n // @ts-ignore\n setFromProp(light.shadow.camera, this.shadowCamera)\n }\n\n ['color', 'intensity', 'castShadow'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => {\n if (p === 'color') {\n light.color.set(value)\n } else {\n // @ts-ignore\n light[p] = value\n }\n })\n })\n\n this.initObject3D(light)\n\n if (light instanceof SpotLight || light instanceof DirectionalLight) {\n bindProp(this, 'target', light.target, 'position')\n this.addToParent(light.target)\n }\n },\n },\n __hmrId: 'Light',\n})\n","import { defineComponent } from 'vue'\nimport { AmbientLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n created() {\n this.initLight(new AmbientLight(this.color, this.intensity))\n },\n __hmrId: 'AmbientLight',\n})\n","import { defineComponent, PropType } from 'vue'\nimport { DirectionalLight } from 'three'\nimport { Vector3PropInterface } from '../core/Object3D'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n target: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n created() {\n this.initLight(new DirectionalLight(this.color, this.intensity))\n },\n __hmrId: 'DirectionalLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HemisphereLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n groundColor: { type: String, default: '#444444' },\n },\n created() {\n const light = new HemisphereLight(this.color, this.groundColor, this.intensity)\n watch(() => this.groundColor, (value) => { light.groundColor.set(value) })\n this.initLight(light)\n },\n __hmrId: 'HemisphereLight',\n})\n","import { defineComponent } from 'vue'\nimport { PointLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n distance: { type: Number, default: 0 },\n decay: { type: Number, default: 1 },\n },\n created() {\n this.initLight(new PointLight(this.color, this.intensity, this.distance, this.decay))\n },\n __hmrId: 'PointLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { RectAreaLight } from 'three'\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js'\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n width: { type: Number, default: 10 },\n height: { type: Number, default: 10 },\n helper: Boolean,\n },\n created() {\n RectAreaLightUniformsLib.init()\n const light = new RectAreaLight(this.color, this.intensity, this.width, this.height)\n\n const watchProps = ['width', 'height']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n if (this.helper) {\n const lightHelper = new RectAreaLightHelper(light)\n light.add(lightHelper)\n }\n\n this.initLight(light)\n },\n __hmrId: 'RectAreaLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { SpotLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n angle: { type: Number, default: Math.PI / 3 },\n decay: { type: Number, default: 1 },\n distance: { type: Number, default: 0 },\n penumbra: { type: Number, default: 0 },\n target: Object,\n },\n created() {\n const light = new SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay)\n\n const watchProps = ['angle', 'decay', 'distance', 'penumbra']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n this.initLight(light)\n },\n __hmrId: 'SpotLight',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, PropType, watch } from 'vue'\nimport { Color, Material, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, PointsMaterial as TPointsMaterial, Texture, ShadowMaterial as TShadowMaterial } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\nimport { bindObjectProp, propsValues } from '../tools'\nimport { BasicMaterialPropsInterface, LambertMaterialPropsInterface, MaterialPropsInterface, PhongMaterialPropsInterface, PhysicalMaterialPropsInterface, PointsMaterialPropsInterface, StandardMaterialPropsInterface, ToonMaterialPropsInterface } from './types'\n\nexport interface MaterialSetupInterface {\n mesh?: MeshInterface\n material?: Material\n createMaterial?(): Material\n}\n\nexport interface MaterialInterface extends MaterialSetupInterface {\n setTexture(texture: Texture | null, key: string): void\n}\n\nexport interface MaterialPublicInterface extends ComponentPublicInstance, MaterialInterface {}\n\nexport const MaterialInjectionKey: InjectionKey = Symbol('Material')\n\nconst BaseMaterial = defineComponent({\n emits: ['created'],\n props: {\n color: { type: String, default: '#ffffff' },\n props: { type: Object as PropType, default: () => ({}) },\n },\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): MaterialSetupInterface {\n return {}\n },\n provide() {\n return {\n [MaterialInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n if (this.createMaterial) {\n const material = this.material = this.createMaterial()\n // @ts-ignore\n watch(() => this.color, (value) => { material.color.set(value) })\n bindObjectProp(this, 'props', material, false, this.setProp)\n this.$emit('created', material)\n this.mesh.setMaterial(material)\n }\n },\n unmounted() {\n this.material?.dispose()\n },\n methods: {\n getMaterialParams() {\n return { ...propsValues(this.$props, ['props']), ...this.props }\n },\n setProp(material: any, key: string, value: any, needsUpdate = false) {\n const dstVal = material[key]\n if (dstVal instanceof Color) dstVal.set(value)\n else material[key] = value\n material.needsUpdate = needsUpdate\n },\n setTexture(texture: Texture | null, key = 'map') {\n this.setProp(this.material, key, texture, true)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Material',\n})\n\nexport default BaseMaterial\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function materialComponent

>(\n name: string,\n props: P,\n createMaterial: {(opts: any): Material}\n) {\n return defineComponent({\n name,\n extends: BaseMaterial,\n props,\n methods: {\n createMaterial() {\n return createMaterial(this.getMaterialParams())\n },\n },\n })\n}\n\n// TODO : proper\nexport const BasicMaterial = materialComponent('BasicMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshBasicMaterial(opts))\nexport const LambertMaterial = materialComponent('LambertMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshLambertMaterial(opts))\nexport const PhongMaterial = materialComponent('PhongMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhongMaterial(opts))\nexport const PhysicalMaterial = materialComponent('PhysicalMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhysicalMaterial(opts))\nexport const PointsMaterial = materialComponent('PointsMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TPointsMaterial(opts))\nexport const ShadowMaterial = materialComponent('ShadowMaterial', { color: { type: String, default: '#000000' }, props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TShadowMaterial(opts))\nexport const StandardMaterial = materialComponent('StandardMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshStandardMaterial(opts))\nexport const ToonMaterial = materialComponent('ToonMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshToonMaterial(opts))\n","import { MeshMatcapMaterial, TextureLoader } from 'three'\nimport { propsValues, getMatcapUrl } from '../tools'\nimport { materialComponent } from './Material'\n\nexport default materialComponent(\n 'MatcapMaterial',\n {\n src: String,\n name: { type: String, default: '0404E8_0404B5_0404CB_3333FC' },\n },\n (opts) => {\n const src = opts.src ? opts.src : getMatcapUrl(opts.name)\n const params = propsValues(opts, ['src', 'name'])\n params.matcap = new TextureLoader().load(src)\n return new MeshMatcapMaterial(params)\n }\n)\n","import { ShaderMaterial } from 'three'\nimport { materialComponent } from './Material'\nimport { propsValues } from '../tools'\n\nconst defaultVertexShader = `\n varying vec2 vUv;\n void main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n }\n`\n\nconst defaultFragmentShader = `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n }\n`\n\nexport default materialComponent(\n 'ShaderMaterial',\n {\n props: { type: Object, default: () => ({\n uniforms: {},\n vertexShader: defaultVertexShader,\n fragmentShader: defaultFragmentShader,\n }) },\n },\n (opts) => new ShaderMaterial(propsValues(opts, ['color']))\n)\n","/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on three/examples/jsm/shaders/SubsurfaceScatteringShader.js\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\nimport {\n Color,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n} from 'three'\n\nfunction replaceAll(string: string, find: string, replace: string) {\n return string.split(find).join(replace)\n}\n\nconst meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {'))\nconst meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {'))\n\nconst SubsurfaceScatteringShader = {\n\n uniforms: UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n thicknessColor: { value: new Color(0xffffff) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n}\n\nexport default SubsurfaceScatteringShader\n","import { defineComponent, PropType } from 'vue'\nimport { Color, ShaderMaterial, UniformsUtils } from 'three'\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader'\nimport Material from './Material'\nimport { bindObjectProp } from '../tools'\n\nexport interface SubSurfaceMaterialUniformsInterface {\n diffuse?: string | number\n thicknessColor?: string | number\n thicknessDistortion?: number\n thicknessAmbient?: number\n thicknessAttenuation?: number\n thicknessPower?: number\n thicknessScale?: number\n}\n\nexport default defineComponent({\n extends: Material,\n props: {\n uniforms: { type: Object as PropType, default: () => ({\n diffuse: '#ffffff',\n thicknessColor: '#ffffff',\n thicknessDistortion: 0.4,\n thicknessAmbient: 0.01,\n thicknessAttenuation: 0.7,\n thicknessPower: 2,\n thicknessScale: 4,\n }) },\n },\n methods: {\n createMaterial() {\n const params = SubsurfaceScatteringShader\n const uniforms = UniformsUtils.clone(params.uniforms)\n\n bindObjectProp(this, 'uniforms', uniforms, true, (dst: any, key: string, value: any) => {\n const dstVal = dst[key].value\n if (dstVal instanceof Color) dstVal.set(value)\n else dst[key].value = value\n })\n\n const material = new ShaderMaterial({\n ...params,\n lights: true,\n ...this.props,\n uniforms,\n })\n\n return material\n },\n },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { ShaderMaterial, Texture, TextureLoader } from 'three'\nimport { bindObjectProp } from '../tools'\nimport { MaterialInjectionKey, MaterialInterface } from './Material'\n\nexport interface TexureInterface {\n material?: MaterialInterface\n texture?: Texture\n}\n\nexport default defineComponent({\n inject: {\n material: MaterialInjectionKey as symbol,\n },\n props: {\n name: { type: String, default: 'map' },\n uniform: String,\n src: String,\n onLoad: Function as PropType<(t: Texture) => void>,\n onProgress: Function as PropType<(e: ProgressEvent) => void>,\n onError: Function as PropType<(e: ErrorEvent) => void>,\n props: { type: Object, default: () => ({}) },\n },\n setup(): TexureInterface {\n return {}\n },\n created() {\n this.refreshTexture()\n watch(() => this.src, this.refreshTexture)\n },\n unmounted() {\n this.material?.setTexture(null, this.name)\n this.texture?.dispose()\n },\n methods: {\n createTexture() {\n if (!this.src) return undefined\n return new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError)\n },\n initTexture() {\n if (!this.texture) return\n\n bindObjectProp(this, 'props', this.texture)\n if (!this.material) return\n\n this.material.setTexture(this.texture, this.name)\n if (this.material.material instanceof ShaderMaterial && this.uniform) {\n (this.material.material).uniforms[this.uniform] = { value: this.texture }\n }\n },\n refreshTexture() {\n this.texture?.dispose()\n this.texture = this.createTexture()\n this.initTexture()\n },\n onLoaded(t: Texture) {\n this.onLoad?.(t)\n },\n },\n render() { return [] },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { CubeReflectionMapping, CubeTextureLoader } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n name: { type: String, default: 'envMap' },\n path: { type: String, required: true },\n urls: {\n type: Array as PropType,\n default: () => ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n props: { type: Object, default: () => ({ mapping: CubeReflectionMapping }) },\n },\n created() {\n watch(() => this.path, this.refreshTexture)\n watch(() => this.urls, this.refreshTexture)\n },\n methods: {\n createTexture() {\n return new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError)\n },\n },\n})\n","import { defineComponent, watch } from 'vue'\nimport { VideoTexture } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n videoId: {\n type: String,\n required: true,\n },\n },\n created() {\n watch(() => this.videoId, this.refreshTexture)\n },\n methods: {\n createTexture() {\n const video = document.getElementById(this.videoId) as HTMLVideoElement\n return new VideoTexture(video)\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/BoxGeometry'\n\nexport default meshComponent('Box', props, createGeometry)\n\n// import { defineComponent } from 'vue'\n// import Mesh, { meshComponent } from './Mesh'\n//\n// export default defineComponent({\n// extends: Mesh,\n// props,\n// created() {\n// this.createGeometry()\n// this.addGeometryWatchers(props)\n// },\n// methods: {\n// createGeometry() {\n// this.geometry = createGeometry(this)\n// },\n// },\n// })\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CircleGeometry'\n\nexport default meshComponent('Circle', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/ConeGeometry'\n\nexport default meshComponent('Cone', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CylinderGeometry'\n\nexport default meshComponent('Cylinder', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/DodecahedronGeometry'\n\nexport default meshComponent('Dodecahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/IcosahedronGeometry'\n\nexport default meshComponent('Icosahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/LatheGeometry'\n\nexport default meshComponent('Lathe', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/OctahedronGeometry'\n\nexport default meshComponent('Octahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PlaneGeometry'\n\nexport default meshComponent('Plane', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PolyhedronGeometry'\n\nexport default meshComponent('Polyhedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/RingGeometry'\n\nexport default meshComponent('Ring', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/SphereGeometry'\n\nexport default meshComponent('Sphere', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TetrahedronGeometry'\n\nexport default meshComponent('Tetrahedron', props, createGeometry)\n","import { defineComponent, PropType, watch } from 'vue'\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'\nimport { Font, FontLoader } from 'three/examples/jsm/loaders/FontLoader.js'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface TextSetupInterface extends MeshSetupInterface {\n geometry?: TextGeometry\n font?: Font\n}\n\nconst props = {\n text: { type: String, required: true, default: 'Text' },\n fontSrc: { type: String, required: true },\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String] as PropType, default: false },\n} as const\n\nexport default defineComponent({\n extends: Mesh,\n props,\n setup(): TextSetupInterface {\n return {}\n },\n created() {\n if (!this.fontSrc) {\n console.error('Missing required prop: \"font-src\"')\n return\n }\n // if (!this.text) {\n // console.error('Missing required prop: \"text\"')\n // return\n // }\n\n // add watchers\n const watchProps = [\n 'text', 'size', 'height', 'curveSegments',\n 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments',\n 'align',\n ]\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], () => {\n if (this.font) this.refreshGeometry()\n })\n })\n\n const loader = new FontLoader()\n this.loading = true\n loader.load(this.fontSrc, (font) => {\n this.loading = false\n this.font = font\n this.createGeometry()\n this.initMesh()\n })\n },\n methods: {\n createGeometry() {\n this.geometry = new TextGeometry(this.text, {\n // @ts-ignore\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n })\n\n if (this.align === 'center') {\n this.geometry.center()\n }\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusGeometry'\n\nexport default meshComponent('Torus', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusKnotGeometry'\n\nexport default meshComponent('TorusKnot', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { TubeGeometry, Vector3 } from 'three'\nimport Mesh from './Mesh'\nimport { props, createGeometry, updateTubeGeometryPoints } from '../geometries/TubeGeometry'\n\nexport default defineComponent({\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update curve points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n __hmrId: 'Tube',\n})\n","import { defineComponent, watch } from 'vue'\nimport { DoubleSide, MeshBasicMaterial, PlaneGeometry, Texture, TextureLoader } from 'three'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface ImageSetupInterface extends MeshSetupInterface {\n material?: MeshBasicMaterial\n texture?: Texture\n}\n\nexport default defineComponent({\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: { type: String, required: true },\n width: Number,\n height: Number,\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n keepSize: Boolean,\n },\n setup(): ImageSetupInterface {\n return {}\n },\n created() {\n if (!this.renderer) return\n\n this.geometry = new PlaneGeometry(1, 1, this.widthSegments, this.heightSegments)\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() })\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.resize)\n })\n\n this.resize()\n if (this.keepSize) this.renderer.onResize(this.resize)\n },\n unmounted() {\n this.renderer?.offResize(this.resize)\n },\n methods: {\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded)\n },\n refreshTexture() {\n this.texture?.dispose()\n if (this.material) {\n this.material.map = this.loadTexture()\n this.material.needsUpdate = true\n }\n },\n onLoaded(texture: Texture) {\n this.texture = texture\n this.resize()\n this.$emit('loaded', texture)\n },\n resize() {\n if (!this.renderer || !this.texture) return\n const screen = this.renderer.size\n const iW = this.texture.image.width\n const iH = this.texture.image.height\n const iRatio = iW / iH\n let w = 1, h = 1\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width\n h = this.height * screen.wHeight / screen.height\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width\n h = w / iRatio\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height\n w = h * iRatio\n } else {\n if (iRatio > 1) w = h * iRatio\n else h = w / iRatio\n }\n if (this.mesh) {\n this.mesh.scale.x = w\n this.mesh.scale.y = h\n }\n },\n },\n __hmrId: 'Image',\n})\n","import { defineComponent } from 'vue'\nimport { InstancedMesh } from 'three'\nimport Mesh from './Mesh'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: Mesh,\n props: {\n count: { type: Number, required: true },\n },\n methods: {\n initMesh() {\n if (!this.renderer) return\n\n if (!this.geometry || !this.material) {\n console.error('Missing geometry and/or material')\n return false\n }\n\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count)\n this.mesh.userData.component = this\n\n bindProp(this, 'castShadow', this.mesh)\n bindProp(this, 'receiveShadow', this.mesh)\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n this.renderer.three.addIntersectObject(this.mesh)\n }\n\n this.initObject3D(this.mesh)\n },\n },\n __hmrId: 'InstancedMesh',\n})\n","import { defineComponent } from 'vue'\nimport { Sprite, SpriteMaterial, Texture, TextureLoader } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\n\ninterface SpriteSetupInterface extends Object3DSetupInterface {\n texture?: Texture\n material?: SpriteMaterial\n sprite?: Sprite\n}\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['loaded'],\n props: {\n src: { type: String, required: true },\n },\n setup(): SpriteSetupInterface {\n return {}\n },\n created() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded)\n this.material = new SpriteMaterial({ map: this.texture })\n this.sprite = new Sprite(this.material)\n this.initObject3D(this.sprite)\n },\n unmounted() {\n this.texture?.dispose()\n this.material?.dispose()\n },\n methods: {\n onLoaded() {\n this.updateUV()\n this.$emit('loaded')\n },\n updateUV() {\n if (!this.texture || !this.sprite) return\n\n const iWidth = this.texture.image.width\n const iHeight = this.texture.image.height\n const iRatio = iWidth / iHeight\n\n let x = 0.5, y = 0.5\n if (iRatio > 1) {\n x = 0.5 * iRatio\n } else {\n y = 0.5 / iRatio\n }\n\n const positions = this.sprite.geometry.attributes.position.array as Array\n positions[0] = -x; positions[1] = -y\n positions[5] = x; positions[6] = -y\n positions[10] = x; positions[11] = y\n positions[15] = -x; positions[16] = y\n this.sprite.geometry.attributes.position.needsUpdate = true\n },\n },\n __hmrId: 'Sprite',\n})\n","import { defineComponent } from 'vue'\nimport { BufferGeometry, Material, Points } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { MeshInjectionKey } from './Mesh'\n\nexport interface PointsSetupInterface extends Object3DSetupInterface {\n mesh?: Points\n points?: Points\n geometry?: BufferGeometry\n material?: Material\n}\n\nexport interface PointsInterface extends PointsSetupInterface {\n setGeometry(geometry: BufferGeometry): void\n setMaterial(material: Material): void\n}\n\n// not really a mesh, but allow us to easily get geometry/material support\nexport default defineComponent({\n extends: Object3D,\n setup(): PointsSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n this.mesh = this.points = new Points(this.geometry, this.material)\n this.initObject3D(this.mesh)\n },\n methods: {\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n },\n },\n})\n","import { Object3D as TObject3D } from 'three'\nimport { defineComponent } from 'vue'\nimport Object3D from '../core/Object3D'\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['before-load', 'load', 'progress', 'error'],\n props: {\n src: { type: String, required: true },\n },\n data() {\n return {\n progress: 0,\n }\n },\n methods: {\n onLoad(model: TObject3D) {\n this.$emit('load', model)\n },\n onProgress(progress: ProgressEvent) {\n this.progress = progress.loaded / progress.total\n this.$emit('progress', progress)\n },\n onError(error: ErrorEvent) {\n this.$emit('error', error)\n },\n },\n})\n","import { defineComponent } from 'vue'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new GLTFLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (gltf) => {\n this.onLoad(gltf)\n this.initObject3D(gltf.scene)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent } from 'vue'\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new FBXLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (fbx) => {\n this.onLoad(fbx)\n this.initObject3D(fbx)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent, inject, InjectionKey } from 'vue'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\n\ninterface EffectComposerSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposer\n}\n\nexport interface EffectComposerInterface extends EffectComposerSetupInterface {\n addPass(pass: Pass): void\n removePass(pass: Pass): void\n}\n\nexport const ComposerInjectionKey: InjectionKey = Symbol('Composer')\n\nexport default defineComponent({\n setup(): EffectComposerSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n provide() {\n return {\n [ComposerInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n const composer = new EffectComposer(this.renderer.renderer)\n this.composer = composer\n this.renderer.composer = composer\n\n // this.renderer.onInit(() => {\n renderer.addListener('init', () => {\n renderer.renderer.autoClear = false\n this.resize()\n renderer.addListener('resize', this.resize)\n })\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n addPass(pass: Pass) {\n this.composer?.addPass(pass)\n },\n removePass(pass: Pass) {\n this.composer?.removePass(pass)\n },\n resize() {\n if (this.composer && this.renderer) {\n this.composer.setSize(this.renderer.size.width, this.renderer.size.height)\n }\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'EffectComposer',\n})\n","import { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { defineComponent } from 'vue'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\nimport { ComposerInjectionKey, EffectComposerInterface } from './EffectComposer'\n\nexport interface EffectSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposerInterface\n pass?: Pass\n}\n\nexport default defineComponent({\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n composer: ComposerInjectionKey as symbol,\n },\n emits: ['ready'],\n setup(): EffectSetupInterface {\n return {}\n },\n created() {\n if (!this.composer) {\n console.error('Missing parent EffectComposer')\n }\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n },\n unmounted() {\n if (this.pass) {\n this.composer?.removePass(this.pass);\n (this.pass as any).dispose?.()\n }\n },\n methods: {\n initEffectPass(pass: Pass) {\n this.pass = pass\n this.composer?.addPass(pass)\n this.$emit('ready', pass)\n },\n },\n render() {\n return []\n },\n __hmrId: 'EffectPass',\n})\n","import { defineComponent } from 'vue'\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n const pass = new RenderPass(this.renderer.scene, this.renderer.camera)\n this.initEffectPass(pass)\n },\n __hmrId: 'RenderPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n focus: { type: Number, default: 1 },\n aperture: { type: Number, default: 0.025 },\n maxblur: { type: Number, default: 0.01 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.renderer.size.width,\n height: this.renderer.size.height,\n }\n\n const pass = new BokehPass(this.renderer.scene, this.renderer.camera, params)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'BokehPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n noiseIntensity: { type: Number, default: 0.5 },\n scanlinesIntensity: { type: Number, default: 0.05 },\n scanlinesCount: { type: Number, default: 4096 },\n grayscale: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'FilmPass',\n})\n","import { defineComponent } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'\nimport EffectPass from './EffectPass'\nimport { SizeInterface } from '../core/useThree'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n const pass = new ShaderPass(FXAAShader)\n\n // resize will be first called in renderer init\n this.renderer?.addListener('resize', this.resize)\n\n this.initEffectPass(pass)\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n resize({ size }: { size: SizeInterface }) {\n if (this.pass) {\n const { resolution } = (this.pass as ShaderPass).material.uniforms\n resolution.value.x = 1 / size.width\n resolution.value.y = 1 / size.height\n }\n },\n },\n __hmrId: 'FXAAPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const pass = new HalftonePass(this.renderer.size.width, this.renderer.size.height, {})\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n pass.uniforms[p].value = this[p]\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'HalftonePass',\n})\n","import { defineComponent } from 'vue'\nimport { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n const pass = new SMAAPass(this.renderer.size.width, this.renderer.size.height)\n this.initEffectPass(pass)\n },\n __hmrId: 'SMAAPass',\n})\n","import { defineComponent } from 'vue'\nimport { SSAOPass } from 'three/examples/jsm/postprocessing/SSAOPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n options: {\n type: Object,\n default: () => ({}),\n },\n },\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const pass = new SSAOPass(\n this.renderer.scene,\n this.renderer.camera,\n this.renderer.size.width,\n this.renderer.size.height\n )\n\n Object.keys(this.options).forEach(key => {\n // @ts-ignore\n pass[key] = this.options[key]\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'SSAOPass',\n})\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n}\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport TiltShift from '../shaders/TiltShift'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nconst props = {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object as PropType, default: () => ({ x: 0, y: 100 }) },\n end: { type: Object as PropType, default: () => ({ x: 10, y: 100 }) },\n} as const\n\ninterface TiltShiftPassSetupInterface {\n uniforms1: {[name: string]: { value: any }}\n uniforms2: {[name: string]: { value: any }}\n pass1?: ShaderPass\n pass2?: ShaderPass\n}\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n setup(): TiltShiftPassSetupInterface {\n return { uniforms1: {}, uniforms2: {} }\n },\n created() {\n if (!this.composer) return\n\n this.pass1 = new ShaderPass(TiltShift)\n this.pass2 = new ShaderPass(TiltShift)\n\n const uniforms1 = this.uniforms1 = this.pass1.uniforms\n const uniforms2 = this.uniforms2 = this.pass2.uniforms\n\n // shared uniforms\n uniforms2.blurRadius = uniforms1.blurRadius\n uniforms2.gradientRadius = uniforms1.gradientRadius\n uniforms2.start = uniforms1.start\n uniforms2.end = uniforms1.end\n uniforms2.texSize = uniforms1.texSize\n\n bindProp(this, 'blurRadius', uniforms1.blurRadius, 'value')\n bindProp(this, 'gradientRadius', uniforms1.gradientRadius, 'value')\n\n this.updateFocusLine();\n\n ['start', 'end'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.updateFocusLine, { deep: true })\n })\n\n this.pass1.setSize = (width: number, height: number) => {\n uniforms1.texSize.value.set(width, height)\n }\n\n this.initEffectPass(this.pass1)\n this.composer.addPass(this.pass2)\n },\n unmounted() {\n if (this.composer && this.pass2) this.composer.removePass(this.pass2)\n },\n methods: {\n updateFocusLine() {\n this.uniforms1.start.value.copy(this.start)\n this.uniforms1.end.value.copy(this.end)\n const dv = new Vector2().copy(this.end as Vector2).sub(this.start as Vector2).normalize()\n this.uniforms1.delta.value.copy(dv)\n this.uniforms2.delta.value.set(-dv.y, dv.x)\n },\n },\n __hmrId: 'TiltShiftPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const size = new Vector2(this.renderer.size.width, this.renderer.size.height)\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'UnrealBloomPass',\n})\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport ZoomBlur from '../shaders/ZoomBlur'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n center: { type: Object as PropType, default: () => ({ x: 0.5, y: 0.5 }) },\n strength: { type: Number, default: 0.5 },\n },\n created() {\n const pass = new ShaderPass(ZoomBlur)\n\n bindProp(this, 'center', pass.uniforms.center, 'value')\n bindProp(this, 'strength', pass.uniforms.strength, 'value')\n\n this.initEffectPass(pass)\n },\n __hmrId: 'ZoomBlurPass',\n})\n","import { App, createApp as _createApp } from 'vue'\nimport * as TROIS from './index'\n\nexport const TroisJSVuePlugin = {\n install(app: App): void {\n const comps = [\n 'Camera',\n 'OrthographicCamera',\n 'PerspectiveCamera',\n 'Raycaster',\n 'Renderer',\n 'Scene',\n 'Group',\n\n 'CubeCamera',\n\n 'AmbientLight',\n 'DirectionalLight',\n 'HemisphereLight',\n 'PointLight',\n 'RectAreaLight',\n 'SpotLight',\n\n 'BasicMaterial',\n 'LambertMaterial',\n 'MatcapMaterial',\n 'PhongMaterial',\n 'PhysicalMaterial',\n 'PointsMaterial',\n 'ShaderMaterial',\n 'StandardMaterial',\n 'SubSurfaceMaterial',\n 'ToonMaterial',\n\n 'Texture',\n 'CubeTexture',\n\n 'BufferGeometry',\n\n 'Mesh',\n\n 'Box', 'BoxGeometry',\n 'Circle', 'CircleGeometry',\n 'Cone', 'ConeGeometry',\n 'Cylinder', 'CylinderGeometry',\n 'Dodecahedron', 'DodecahedronGeometry',\n 'Icosahedron', 'IcosahedronGeometry',\n 'Lathe', 'LatheGeometry',\n 'Octahedron', 'OctahedronGeometry',\n 'Plane', 'PlaneGeometry',\n 'Polyhedron', 'PolyhedronGeometry',\n 'Ring', 'RingGeometry',\n 'Sphere', 'SphereGeometry',\n 'Tetrahedron', 'TetrahedronGeometry',\n 'Text',\n 'Torus', 'TorusGeometry',\n 'TorusKnot', 'TorusKnotGeometry',\n 'Tube', 'TubeGeometry',\n\n 'Image',\n 'InstancedMesh',\n 'Points',\n 'Sprite',\n\n 'FbxModel',\n 'GltfModel',\n\n 'BokehPass',\n 'EffectComposer',\n 'FilmPass',\n 'FXAAPass',\n 'HalftonePass',\n 'RenderPass',\n 'SAOPass',\n 'SMAAPass',\n 'SSAOPass',\n 'TiltShiftPass',\n 'UnrealBloomPass',\n 'ZoomBlurPass',\n ]\n\n comps.forEach(comp => {\n // @ts-ignore\n app.component(comp, TROIS[comp])\n })\n },\n}\n\nexport function createApp(params: any): App {\n return _createApp(params).use(TroisJSVuePlugin)\n}\n","import { Texture, TextureLoader } from 'three'\n\nexport interface TextureConfigInterface {\n src: string\n}\n\nexport interface TexturesInterface {\n loader: TextureLoader\n count: number\n textures: Texture[],\n loadProgress: number\n loadTextures(images: TextureConfigInterface[], cb: {() : void}): void\n dispose(): void\n}\n\nexport default function useTextures(): TexturesInterface {\n const obj: TexturesInterface = {\n loader: new TextureLoader(),\n count: 0,\n textures: [],\n loadProgress: 0,\n loadTextures,\n dispose,\n }\n return obj\n\n function loadTextures(images: TextureConfigInterface[], cb: {() : void}) {\n obj.count = images.length\n obj.textures.splice(0)\n obj.loadProgress = 0\n Promise.all(images.map(loadTexture)).then(cb)\n }\n\n function loadTexture(img: TextureConfigInterface, index: number) {\n return new Promise(resolve => {\n obj.loader.load(\n img.src,\n texture => {\n obj.loadProgress += 1 / obj.count\n obj.textures[index] = texture\n resolve(texture)\n }\n )\n })\n }\n\n function dispose() {\n obj.textures.forEach(t => t.dispose())\n }\n}\n"],"names":["ref","Raycaster","Plane","intersect","InstancedMesh","event","renderer","OrthographicCamera","PerspectiveCamera","_a","Scene","Texture","Group","CubeCamera","TMesh","props","createGeometry","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","ExtrudeGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PlaneGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","ShapeGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","TubeGeometry","SpotLight","DirectionalLight","AmbientLight","HemisphereLight","PointLight","RectAreaLight","TPointsMaterial","TShadowMaterial","ShaderMaterial","Material","VideoTexture","Sprite","Points","EffectComposer","RenderPass","BokehPass","FilmPass","HalftonePass","SMAAPass","SSAOPass","UnrealBloomPass","_createApp"],"mappings":"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"} \ No newline at end of file diff --git a/build/trois.module.cdn.min.js b/build/trois.module.cdn.min.js new file mode 100644 index 0000000..08b3175 --- /dev/null +++ b/build/trois.module.cdn.min.js @@ -0,0 +1,135 @@ +import{toRef as Le,watch as d,ref as Zr,defineComponent as a,watchEffect as Yr,inject as K,provide as Jr,getCurrentInstance as Qr,onUnmounted as es,createApp as ts}from"https://unpkg.com/vue@3.2.20/dist/vue.esm-browser.prod.js";import{Vector3 as ie,Raycaster as rs,Plane as ss,Vector2 as T,InstancedMesh as ye,WebGLRenderer as is,OrthographicCamera as ns,PerspectiveCamera as os,Scene as as,Color as Y,Texture as hs,Group as ds,WebGLCubeRenderTarget as us,RGBAFormat as cs,LinearMipmapLinearFilter as ls,CubeCamera as ms,Mesh as ps,BufferGeometry as fs,BufferAttribute as ys,BoxGeometry as Oe,CircleGeometry as gs,ConeGeometry as bs,CylinderGeometry as vs,DodecahedronGeometry as Ss,ExtrudeGeometry as Ps,IcosahedronGeometry as xs,LatheGeometry as ws,OctahedronGeometry as Cs,PlaneGeometry as Ne,PolyhedronGeometry as Ms,RingGeometry as Gs,SphereGeometry as Ls,ShapeGeometry as Os,TetrahedronGeometry as Ns,TorusGeometry as $s,TorusKnotGeometry as Es,CatmullRomCurve3 as $e,Curve as zs,TubeGeometry as Rs,SpotLight as ge,DirectionalLight as be,AmbientLight as js,HemisphereLight as ks,PointLight as Is,RectAreaLight as _s,MeshBasicMaterial as Ee,MeshLambertMaterial as Ts,MeshPhongMaterial as As,MeshPhysicalMaterial as Bs,PointsMaterial as Ds,ShadowMaterial as Fs,MeshStandardMaterial as Us,MeshToonMaterial as Hs,TextureLoader as J,MeshMatcapMaterial as Ks,ShaderMaterial as ve,ShaderChunk as V,UniformsUtils as ze,ShaderLib as Vs,CubeReflectionMapping as Xs,CubeTextureLoader as qs,VideoTexture as Ws,DoubleSide as Zs,SpriteMaterial as Ys,Sprite as Js,Points as Qs}from"https://cdn.skypack.dev/three@0.136.0/build/three.module.js";import{OrbitControls as ei}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/controls/OrbitControls.js";import{RectAreaLightUniformsLib as ti}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/lights/RectAreaLightUniformsLib.js";import{RectAreaLightHelper as ri}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/helpers/RectAreaLightHelper.js";import{TextGeometry as si}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/geometries/TextGeometry.js";import{FontLoader as ii}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/loaders/FontLoader.js";import{GLTFLoader as ni}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/loaders/GLTFLoader.js";import{FBXLoader as oi}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/loaders/FBXLoader.js";import{EffectComposer as ai}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as hi}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/RenderPass.js";import{BokehPass as di}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/BokehPass.js";import{FilmPass as ui}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/FilmPass.js";import{ShaderPass as ne}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/ShaderPass.js";import{FXAAShader as ci}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/shaders/FXAAShader.js";import{HalftonePass as li}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/HalftonePass.js";import{SMAAPass as mi}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/SMAAPass.js";import{SSAOPass as pi}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/SSAOPass.js";import{UnrealBloomPass as fi}from"https://cdn.skypack.dev/three@0.136.0/examples/jsm/postprocessing/UnrealBloomPass.js";function X(e,t,r){t instanceof Object&&Object.entries(t).forEach(([s,i])=>{r?r(e,s,i):e[s]=i})}function A(e,t,r,s=!0,i){s&&X(r,e[t],i);const n=Le(e,t);return d(n,o=>{X(r,o,i)})}function Re(e,t,r=!0,s){r&&X(t,e,s);const i=Zr(e);return d(i,n=>{X(t,n,s)},{deep:!0})}function q(e,t){t instanceof Object&&Object.entries(t).forEach(([r,s])=>{e[r]=s})}function je(e,t,r){t.forEach(s=>{m(e,s,r,s)})}function m(e,t,r,s){const i=s||t,n=Le(e,t);n.value instanceof Object?(q(r[i],n.value),d(n,o=>{q(r[i],o)},{deep:!0})):(n.value!==void 0&&(r[i]=e[t]),d(n,o=>{r[i]=o}))}function Q(e,t=[]){const r={};return Object.entries(e).forEach(([s,i])=>{(!t||!t.includes(s))&&(r[s]=i)}),r}function ke(e,t,r){return r=r<0?0:r,r=r>1?1:r,e+(t-e)*r}function Ie(e,t,r){return er?r:e}const yi="https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d",gi="0404E8_0404B5_0404CB_3333FC";function Se(e=gi,t=1024){const r=`${e}${bi(t)}.png`;return`${yi}/${t}/${r}`}function bi(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}function vi(e){const{camera:t,resetPosition:r=new ie(0,0,0)}=e,s=new rs,i=r.clone(),n=new ss(new ie(0,0,1),0);return{position:i,updatePosition:o=>{s.setFromCamera(o,t),t.getWorldDirection(n.normal),s.ray.intersectPlane(n,i)},intersect:(o,c,G=!1)=>(s.setFromCamera(o,t),s.intersectObjects(c,G))}}function _e(e){const{camera:t,domElement:r,intersectObjects:s,intersectRecursive:i=!1,touch:n=!0,resetOnEnd:o=!1,onEnter:c=()=>{},onMove:G=()=>{},onLeave:L=()=>{},onClick:y=()=>{},onIntersectEnter:O=()=>{},onIntersectOver:E=()=>{},onIntersectMove:b=()=>{},onIntersectLeave:F=()=>{},onIntersectClick:U=()=>{}}=e,p=new T(0,0),f=new T(0,0),z=vi({camera:t}),h=z.position,u={position:p,positionN:f,positionV3:h,intersectObjects:s,listeners:!1,addListeners:qr,removeListeners:Wr,intersect:xe};return u;function N(){p.set(0,0),f.set(0,0),h.set(0,0,0)}function P(l){let x,_;l.touches&&l.touches.length>0?(x=l.touches[0].clientX,_=l.touches[0].clientY):(x=l.clientX,_=l.clientY);const R=r.getBoundingClientRect();p.x=x-R.left,p.y=_-R.top,f.x=p.x/R.width*2-1,f.y=-(p.y/R.height)*2+1,z.updatePosition(f)}function xe(){const l=Ce();if(l.length){const x=z.intersect(f,l,i),_=[...l],R=[];x.forEach(j=>{var D,k,v;const{object:w}=j,C=pe(w);if(w instanceof ye){if(R.indexOf(w)!==-1)return;R.push(w)}if(!w.userData.over){w.userData.over=!0;const fe={type:"pointerover",over:!0,component:C,intersect:j},Ge={...fe,type:"pointerenter"};E(fe),O(Ge),(D=C==null?void 0:C.onPointerOver)==null||D.call(C,fe),(k=C==null?void 0:C.onPointerEnter)==null||k.call(C,Ge)}const Me={type:"pointermove",component:C,intersect:j};b(Me),(v=C==null?void 0:C.onPointerMove)==null||v.call(C,Me),_.splice(_.indexOf(w),1)}),_.forEach(j=>{var D,k;const v=pe(j);if(j.userData.over){j.userData.over=!1;const w={type:"pointerover",over:!1,component:v},C={...w,type:"pointerleave"};E(w),F(C),(D=v==null?void 0:v.onPointerOver)==null||D.call(v,w),(k=v==null?void 0:v.onPointerLeave)==null||k.call(v,C)}})}}function te(l){P(l),c({type:"pointerenter",position:p,positionN:f,positionV3:h})}function re(l){P(l),G({type:"pointermove",position:p,positionN:f,positionV3:h}),xe()}function we(l){P(l);const x=Ce();if(x.length){const _=z.intersect(f,x,i),R=[];_.forEach(j=>{var D;const{object:k}=j,v=pe(k);if(k instanceof ye){if(R.indexOf(k)!==-1)return;R.push(k)}const w={type:"click",component:v,intersect:j};U(w),(D=v==null?void 0:v.onClick)==null||D.call(v,w)})}y({type:"click",position:p,positionN:f,positionV3:h})}function se(){o&&N(),L({type:"pointerleave"})}function pe(l){if(l.userData.component)return l.userData.component;let x=l.parent;for(;x;){if(x.userData.component)return x.userData.component;x=x.parent}}function Ce(){return typeof s=="function"?s():s}function qr(){r.addEventListener("mouseenter",te),r.addEventListener("mousemove",re),r.addEventListener("mouseleave",se),r.addEventListener("click",we),n&&(r.addEventListener("touchstart",te),r.addEventListener("touchmove",re),r.addEventListener("touchend",se)),u.listeners=!0}function Wr(){r.removeEventListener("mouseenter",te),r.removeEventListener("mousemove",re),r.removeEventListener("mouseleave",se),r.removeEventListener("click",we),r.removeEventListener("touchstart",te),r.removeEventListener("touchmove",re),r.removeEventListener("touchend",se),u.listeners=!1}}function Si(e){const t={antialias:!0,alpha:!1,autoClear:!0,orbitCtrl:!1,pointer:!1,resize:!1,width:300,height:150};e&&Object.entries(e).forEach(([h,u])=>{t[h]=u});const r={width:1,height:1,wWidth:1,wHeight:1,ratio:1},s=[],i=[],n=c(),o={config:t,renderer:n,size:r,init:G,dispose:U,render:O,renderC:E,setSize:f,addIntersectObject:b,removeIntersectObject:F};return o;function c(){const h=new is({canvas:t.canvas,antialias:t.antialias,alpha:t.alpha,...t.params});return h.autoClear=t.autoClear,h}function G(){if(!o.scene)return console.error("Missing Scene"),!1;if(!o.camera)return console.error("Missing Camera"),!1;if(t.resize?(p(),window.addEventListener("resize",p)):t.width&&t.height&&f(t.width,t.height),L(),t.orbitCtrl){const h=new ei(o.camera,o.renderer.domElement);t.orbitCtrl instanceof Object&&Object.entries(t.orbitCtrl).forEach(([u,N])=>{h[u]=N}),y(()=>{h.update()}),o.cameraCtrl=h}return!0}function L(){let h={camera:o.camera,domElement:o.renderer.domElement,intersectObjects:i};t.pointer&&t.pointer instanceof Object&&(h={...h,...t.pointer});const u=o.pointer=_e(h);(t.pointer||i.length)&&(u.addListeners(),h.intersectMode==="frame"&&y(u.intersect))}function y(h){s.push(h)}function O(){s.forEach(h=>h()),o.renderer.render(o.scene,o.camera)}function E(){s.forEach(h=>h()),o.composer.render()}function b(h){i.indexOf(h)===-1&&i.push(h),o.pointer&&!o.pointer.listeners&&o.pointer.addListeners()}function F(h){const u=i.indexOf(h);u!==-1&&i.splice(u,1),o.pointer&&!t.pointer&&i.length===0&&o.pointer.removeListeners()}function U(){window.removeEventListener("resize",p),o.pointer&&o.pointer.removeListeners(),o.cameraCtrl&&o.cameraCtrl.dispose(),o.renderer&&o.renderer.dispose()}function p(){var h;if(t.resize==="window")f(window.innerWidth,window.innerHeight);else{const u=o.renderer.domElement.parentNode;u&&f(u.clientWidth,u.clientHeight)}(h=t.onResize)==null||h.call(t,r)}function f(h,u){r.width=h,r.height=u,r.ratio=h/u,o.renderer.setSize(h,u,!1);const N=o.camera;if(N.type==="PerspectiveCamera"){const P=N;P.aspect=r.ratio,P.updateProjectionMatrix()}if(N.type==="OrthographicCamera"){const P=N;r.wWidth=P.right-P.left,r.wHeight=P.top-P.bottom}else{const P=z();r.wWidth=P[0],r.wHeight=P[1]}}function z(){const h=o.camera,u=h.fov*Math.PI/180,N=2*Math.tan(u/2)*Math.abs(h.position.z);return[N*h.aspect,N]}}const $=Symbol("Renderer");var Te=a({name:"Renderer",props:{params:{type:Object,default:()=>({})},antialias:Boolean,alpha:Boolean,autoClear:{type:Boolean,default:!0},orbitCtrl:{type:[Boolean,Object],default:!1},pointer:{type:[Boolean,Object],default:!1},resize:{type:[Boolean,String],default:!1},shadow:Boolean,width:String,height:String,pixelRatio:Number,xr:Boolean,props:{type:Object,default:()=>({})},onReady:Function},inheritAttrs:!1,setup(e,{attrs:t}){const r=[],s=[],i=[],n=[],o=[],c=document.createElement("canvas");Object.entries(t).forEach(([O,E])=>{const b=O.match(/^on([A-Z][a-zA-Z]*)$/);b?c.addEventListener(b[1].toLowerCase(),E):c.setAttribute(O,E)});const G={canvas:c,params:e.params,antialias:e.antialias,alpha:e.alpha,autoClear:e.autoClear,orbitCtrl:e.orbitCtrl,pointer:e.pointer,resize:e.resize};e.width&&(G.width=parseInt(e.width)),e.height&&(G.height=parseInt(e.height));const L=Si(G);A(e,"props",L.renderer),Yr(()=>{e.pixelRatio&&L.renderer.setPixelRatio(e.pixelRatio)});const y=()=>{};return{canvas:c,three:L,renderer:L.renderer,size:L.size,renderFn:y,raf:!0,initCallbacks:r,mountedCallbacks:s,beforeRenderCallbacks:i,afterRenderCallbacks:n,resizeCallbacks:o}},computed:{camera:{get:function(){return this.three.camera},set:function(e){this.three.camera=e}},scene:{get:function(){return this.three.scene},set:function(e){this.three.scene=e}},composer:{get:function(){return this.three.composer},set:function(e){this.three.composer=e}}},provide(){return{[$]:this}},mounted(){var e;this.$el.parentNode.insertBefore(this.canvas,this.$el),this.three.init()&&(this.three.pointer&&(this.$pointer=this.three.pointer),this.three.config.onResize=t=>{this.resizeCallbacks.forEach(r=>r({type:"resize",renderer:this,size:t}))},this.shadow&&(this.renderer.shadowMap.enabled=!0),this.renderFn=this.three.composer?this.three.renderC:this.three.render,this.initCallbacks.forEach(t=>t({type:"init",renderer:this})),(e=this.onReady)==null||e.call(this,this),this.xr?(this.renderer.xr.enabled=!0,this.renderer.setAnimationLoop(this.render)):requestAnimationFrame(this.renderLoop)),this.mountedCallbacks.forEach(t=>t({type:"mounted",renderer:this}))},beforeUnmount(){this.canvas.remove(),this.beforeRenderCallbacks=[],this.afterRenderCallbacks=[],this.raf=!1,this.three.dispose()},methods:{onInit(e){this.addListener("init",e)},onMounted(e){this.addListener("mounted",e)},onBeforeRender(e){this.addListener("beforerender",e)},offBeforeRender(e){this.removeListener("beforerender",e)},onAfterRender(e){this.addListener("afterrender",e)},offAfterRender(e){this.removeListener("afterrender",e)},onResize(e){this.addListener("resize",e)},offResize(e){this.removeListener("resize",e)},addListener(e,t){this.getCallbacks(e).push(t)},removeListener(e,t){const r=this.getCallbacks(e),s=r.indexOf(t);s!==-1&&r.splice(s,1)},getCallbacks(e){return e==="init"?this.initCallbacks:e==="mounted"?this.mountedCallbacks:e==="beforerender"?this.beforeRenderCallbacks:e==="afterrender"?this.afterRenderCallbacks:this.resizeCallbacks},render(e){this.beforeRenderCallbacks.forEach(t=>t({type:"beforerender",renderer:this,time:e})),this.renderFn({renderer:this,time:e}),this.afterRenderCallbacks.forEach(t=>t({type:"afterrender",renderer:this,time:e}))},renderLoop(e){this.raf&&requestAnimationFrame(this.renderLoop),this.render(e)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Renderer"}),Ae=a({props:{props:{type:Object,default:()=>({})}},render(){return this.$slots.default?this.$slots.default():[]}});function oe(e,t,r,s=!0){e[t]=r,s&&e.updateProjectionMatrix()}var Be=a({extends:Ae,name:"OrthographicCamera",props:{left:{type:Number,default:-1},right:{type:Number,default:1},top:{type:Number,default:1},bottom:{type:Number,default:-1},near:{type:Number,default:.1},far:{type:Number,default:2e3},zoom:{type:Number,default:1},position:{type:Object,default:()=>({x:0,y:0,z:0})}},setup(e){const t=K($);if(!t){console.error("Renderer not found");return}const r=new ns(e.left,e.right,e.top,e.bottom,e.near,e.far);return t.camera=r,m(e,"position",r),A(e,"props",r,!0,oe),["left","right","top","bottom","near","far","zoom"].forEach(s=>{d(()=>e[s],i=>{oe(r,s,i)})}),{renderer:t,camera:r}},__hmrId:"OrthographicCamera"}),ae=a({extends:Ae,name:"PerspectiveCamera",props:{aspect:{type:Number,default:1},far:{type:Number,default:2e3},fov:{type:Number,default:50},near:{type:Number,default:.1},position:{type:Object,default:()=>({x:0,y:0,z:0})},lookAt:{type:Object,default:null}},setup(e){var t;const r=K($);if(!r){console.error("Renderer not found");return}const s=new os(e.fov,e.aspect,e.near,e.far);return r.camera=s,m(e,"position",s),e.lookAt&&s.lookAt((t=e.lookAt.x)!=null?t:0,e.lookAt.y,e.lookAt.z),d(()=>e.lookAt,i=>{var n;s.lookAt((n=i.x)!=null?n:0,i.y,i.z)},{deep:!0}),A(e,"props",s,!0,oe),["aspect","far","fov","near"].forEach(i=>{d(()=>e[i],n=>{oe(s,i,n)})}),{renderer:r,camera:s}},__hmrId:"PerspectiveCamera"});const he=Symbol("Scene");var De=a({name:"Scene",props:{background:[String,Number,Object]},setup(e){const t=K($),r=new as;if(!t){console.error("Renderer not found");return}t.scene=r,Jr(he,r);const s=i=>{!i||(typeof i=="string"||typeof i=="number"?r.background instanceof Y?r.background.set(i):r.background=new Y(i):i instanceof hs&&(r.background=i))};return s(e.background),d(()=>e.background,s),{scene:r,add:i=>{r.add(i)},remove:i=>{r.remove(i)}}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Scene"});const Pi={onPointerEnter:Function,onPointerOver:Function,onPointerMove:Function,onPointerLeave:Function,onPointerDown:Function,onPointerUp:Function,onClick:Function};var B=a({name:"Object3D",inject:{renderer:$,scene:he},emits:["created","ready"],props:{position:{type:Object,default:()=>({x:0,y:0,z:0})},rotation:{type:Object,default:()=>({x:0,y:0,z:0})},scale:{type:Object,default:()=>({x:1,y:1,z:1,order:"XYZ"})},lookAt:{type:Object,default:null},userData:{type:Object,default:()=>({})},visible:{type:Boolean,default:!0},props:{type:Object,default:()=>({})},disableAdd:{type:Boolean,default:!1},disableRemove:{type:Boolean,default:!1},...Pi},setup(){return{}},created(){this.renderer||console.error("Missing parent Renderer"),this.scene||console.error("Missing parent Scene")},unmounted(){this.disableRemove||this.removeFromParent(),this.o3d&&this.renderer&&this.renderer.three.removeIntersectObject(this.o3d)},methods:{initObject3D(e){var t;this.o3d=e,e.userData.component=this,(this.onPointerEnter||this.onPointerOver||this.onPointerMove||this.onPointerLeave||this.onPointerDown||this.onPointerUp||this.onClick)&&this.renderer&&this.renderer.three.addIntersectObject(e),m(this,"position",e),m(this,"rotation",e),m(this,"scale",e),m(this,"userData",e.userData),m(this,"visible",e),A(this,"props",e),this.$emit("created",e),this.lookAt&&e.lookAt((t=this.lookAt.x)!=null?t:0,this.lookAt.y,this.lookAt.z),d(()=>this.lookAt,r=>{var s;e.lookAt((s=r.x)!=null?s:0,r.y,r.z)},{deep:!0}),this.parent=this.getParent(),this.disableAdd||(this.addToParent()?this.$emit("ready",this):console.error("Missing parent (Scene, Group...)"))},getParent(){let e=this.$parent;if(!e){const t=Qr();t&&t.parent&&(e=t.parent.ctx)}for(;e;){if(e.add)return e;e=e.$parent}},addToParent(e){const t=e||this.o3d;return this.parent?(this.parent.add(t),!0):!1},removeFromParent(e){const t=e||this.o3d;return this.parent?(this.parent.remove(t),!0):!1},add(e){var t;(t=this.o3d)==null||t.add(e)},remove(e){var t;(t=this.o3d)==null||t.remove(e)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Object3D"}),Fe=a({name:"Group",extends:B,setup(){return{group:new ds}},created(){this.initObject3D(this.group)},__hmrId:"Group"});const ee=()=>{};var Ue=a({name:"Raycaster",props:{onPointerEnter:{type:Function,default:ee},onPointerOver:{type:Function,default:ee},onPointerMove:{type:Function,default:ee},onPointerLeave:{type:Function,default:ee},onClick:{type:Function,default:ee},intersectMode:{type:String,default:"move"},intersectRecursive:{type:Boolean,default:!1}},setup(){return{renderer:K($)}},mounted(){if(!this.renderer){console.error("Renderer not found");return}const e=this.renderer;this.renderer.onMounted(()=>{!e.camera||(this.pointer=_e({camera:e.camera,domElement:e.canvas,intersectObjects:()=>e.scene?e.scene.children:[],intersectRecursive:this.intersectRecursive,onIntersectEnter:this.onPointerEnter,onIntersectOver:this.onPointerOver,onIntersectMove:this.onPointerMove,onIntersectLeave:this.onPointerLeave,onIntersectClick:this.onClick}),this.pointer.addListeners(),this.intersectMode==="frame"&&e.onBeforeRender(this.pointer.intersect))})},unmounted(){var e;this.pointer&&(this.pointer.removeListeners(),(e=this.renderer)==null||e.offBeforeRender(this.pointer.intersect))},render(){return[]},__hmrId:"Raycaster"}),He=a({extends:B,props:{cubeRTSize:{type:Number,default:256},cubeCameraNear:{type:Number,default:.1},cubeCameraFar:{type:Number,default:2e3},autoUpdate:Boolean,hideMeshes:{type:Array,default:()=>[]}},setup(e){const t=K($);if(!t||!t.scene)return console.error("Missing Renderer / Scene"),{};const r=t.renderer,s=t.scene,i=new us(e.cubeRTSize,{format:cs,generateMipmaps:!0,minFilter:ls}),n=new ms(e.cubeCameraNear,e.cubeCameraFar,i),o=()=>{e.hideMeshes.forEach(c=>{c.visible=!1}),n.update(r,s),e.hideMeshes.forEach(c=>{c.visible=!0})};return e.autoUpdate?(t.onBeforeRender(o),es(()=>{t.offBeforeRender(o)})):t.onMounted(o),{cubeRT:i,cubeCamera:n,updateRT:o}},created(){this.cubeCamera&&this.initObject3D(this.cubeCamera)},render(){return[]},__hmrId:"CubeCamera"});const W=Symbol("Mesh"),H=a({name:"Mesh",extends:B,props:{castShadow:Boolean,receiveShadow:Boolean},setup(){return{}},provide(){return{[W]:this}},mounted(){!this.mesh&&!this.loading&&this.initMesh()},methods:{initMesh(){const e=new ps(this.geometry,this.material);m(this,"castShadow",e),m(this,"receiveShadow",e),this.mesh=e,this.initObject3D(e)},createGeometry(){},addGeometryWatchers(e){Object.keys(e).forEach(t=>{d(()=>this[t],()=>{this.refreshGeometry()})})},setGeometry(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial(e){if(Array.isArray(e)||!this.material)this.material=e,this.mesh&&(this.mesh.material=e);else{let t=this.material;Array.isArray(t)?t.push(e):t=[t,e],this.material=t,this.mesh&&(this.mesh.material=t)}},refreshGeometry(){const e=this.geometry;this.createGeometry(),this.mesh&&this.geometry&&(this.mesh.geometry=this.geometry),e==null||e.dispose()}},unmounted(){if(this.geometry&&this.geometry.dispose(),this.material)if(Array.isArray(this.material))for(const e of this.material)e.dispose();else this.material.dispose()},__hmrId:"Mesh"});function S(e,t,r){return a({name:e,extends:H,props:t,created(){this.createGeometry(),this.addGeometryWatchers(t)},methods:{createGeometry(){this.geometry=r(this)}}})}const de=a({emits:["created"],props:{rotateX:Number,rotateY:Number,rotateZ:Number,attributes:{type:Array,default:()=>[]}},inject:{mesh:W},setup(){return{}},created(){if(!this.mesh){console.error("Missing parent Mesh");return}this.createGeometry(),this.rotateGeometry(),this.geometry&&this.mesh.setGeometry(this.geometry),Object.keys(this.$props).forEach(e=>{d(()=>this[e],this.refreshGeometry)})},unmounted(){var e;(e=this.geometry)==null||e.dispose()},methods:{createGeometry(){const e={},t=new fs;this.attributes.forEach(r=>{if(r.name&&r.itemSize&&r.array){const s=e[r.name]=new ys(r.array,r.itemSize,r.normalized);t.setAttribute(r.name,s)}}),t.computeBoundingBox(),t.userData.component=this,this.geometry=t,this.$emit("created",t)},rotateGeometry(){!this.geometry||(this.rotateX&&this.geometry.rotateX(this.rotateX),this.rotateY&&this.geometry.rotateY(this.rotateY),this.rotateZ&&this.geometry.rotateZ(this.rotateZ))},refreshGeometry(){const e=this.geometry;this.createGeometry(),this.rotateGeometry(),this.geometry&&this.mesh&&this.mesh.setGeometry(this.geometry),e==null||e.dispose()}},render(){return[]}});function g(e,t,r){return a({name:e,extends:de,props:t,methods:{createGeometry(){this.geometry=r(this),this.geometry.userData.component=this,this.$emit("created",this.geometry)}}})}const Ke={size:Number,width:{type:Number,default:1},height:{type:Number,default:1},depth:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},depthSegments:{type:Number,default:1}};function Ve(e){return e.size?new Oe(e.size,e.size,e.size,e.widthSegments,e.heightSegments,e.depthSegments):new Oe(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}var Xe=g("BoxGeometry",Ke,Ve);const qe={radius:{type:Number,default:1},segments:{type:Number,default:8},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI*2}};function We(e){return new gs(e.radius,e.segments,e.thetaStart,e.thetaLength)}var Ze=g("CircleGeometry",qe,We);const Ye={radius:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI*2}};function Je(e){return new bs(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}var Qe=g("ConeGeometry",Ye,Je);const et={radiusTop:{type:Number,default:1},radiusBottom:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI*2}};function tt(e){return new vs(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}var rt=g("CylinderGeometry",et,tt);const st={radius:{type:Number,default:1},detail:{type:Number,default:0}};function it(e){return new Ss(e.radius,e.detail)}var nt=g("DodecahedronGeometry",st,it);const xi={shapes:{type:[Object,Array]},options:{type:Object}};function wi(e){return new Ps(e.shapes,e.options)}var ot=g("ExtrudeGeometry",xi,wi);const at={radius:{type:Number,default:1},detail:{type:Number,default:0}};function ht(e){return new xs(e.radius,e.detail)}var dt=g("IcosahedronGeometry",at,ht);const ut={points:Array,segments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:Math.PI*2}};function ct(e){return new ws(e.points,e.segments,e.phiStart,e.phiLength)}var lt=g("LatheGeometry",ut,ct);const mt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function pt(e){return new Cs(e.radius,e.detail)}var ft=g("OctahedronGeometry",mt,pt);const yt={width:{type:Number,default:1},height:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1}};function gt(e){return new Ne(e.width,e.height,e.widthSegments,e.heightSegments)}var bt=g("PlaneGeometry",yt,gt);const vt={vertices:Array,indices:Array,radius:{type:Number,default:1},detail:{type:Number,default:0}};function St(e){return new Ms(e.vertices,e.indices,e.radius,e.detail)}var Pt=g("PolyhedronGeometry",vt,St);const xt={innerRadius:{type:Number,default:.5},outerRadius:{type:Number,default:1},thetaSegments:{type:Number,default:8},phiSegments:{type:Number,default:1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI*2}};function wt(e){return new Gs(e.innerRadius,e.outerRadius,e.thetaSegments,e.phiSegments,e.thetaStart,e.thetaLength)}var Ct=g("RingGeometry",xt,wt);const Mt={radius:{type:Number,default:1},widthSegments:{type:Number,default:12},heightSegments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:Math.PI*2},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI}};function Gt(e){return new Ls(e.radius,e.widthSegments,e.heightSegments,e.phiStart,e.phiLength,e.thetaStart,e.thetaLength)}var Lt=g("SphereGeometry",Mt,Gt);const Ci={shapes:{type:[Object,Array]},curveSegments:{type:Number}};function Mi(e){return new Os(e.shapes,e.curveSegments)}var Ot=g("ShapeGeometry",Ci,Mi);const Nt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function $t(e){return new Ns(e.radius,e.detail)}var Et=g("TetrahedronGeometry",Nt,$t);const zt={radius:{type:Number,default:1},tube:{type:Number,default:.4},radialSegments:{type:Number,default:8},tubularSegments:{type:Number,default:6},arc:{type:Number,default:Math.PI*2}};function Rt(e){return new $s(e.radius,e.tube,e.radialSegments,e.tubularSegments,e.arc)}var jt=g("TorusGeometry",zt,Rt);const kt={radius:{type:Number,default:1},tube:{type:Number,default:.4},tubularSegments:{type:Number,default:64},radialSegments:{type:Number,default:8},p:{type:Number,default:2},q:{type:Number,default:3}};function It(e){return new Es(e.radius,e.tube,e.tubularSegments,e.radialSegments,e.p,e.q)}var _t=g("TorusKnotGeometry",kt,It);const Pe={points:Array,path:zs,tubularSegments:{type:Number,default:64},radius:{type:Number,default:1},radialSegments:{type:Number,default:8},closed:{type:Boolean,default:!1}};function Tt(e){let t;return e.points?t=new $e(e.points):e.path?t=e.path:console.error("Missing path curve or points."),new Rs(t,e.tubularSegments,e.radius,e.radiusSegments,e.closed)}var At=a({extends:de,props:Pe,methods:{createGeometry(){this.geometry=Tt(this)},updatePoints(e){Bt(this.geometry,e)}}});function Bt(e,t){const r=new $e(t),{radialSegments:s,radius:i,tubularSegments:n,closed:o}=e.parameters,c=r.computeFrenetFrames(n,o);e.tangents=c.tangents,e.normals=c.normals,e.binormals=c.binormals,e.parameters.path=r;const G=e.getAttribute("position"),L=e.getAttribute("normal"),y=new ie,O=new ie;for(let b=0;b({x:512,y:512})},shadowCamera:{type:Object,default:()=>({})}},setup(){return{}},unmounted(){(this.light instanceof ge||this.light instanceof be)&&this.removeFromParent(this.light.target)},methods:{initLight(e){this.light=e,e.shadow&&(e.castShadow=this.castShadow,q(e.shadow.mapSize,this.shadowMapSize),q(e.shadow.camera,this.shadowCamera)),["color","intensity","castShadow"].forEach(t=>{d(()=>this[t],r=>{t==="color"?e.color.set(r):e[t]=r})}),this.initObject3D(e),(e instanceof ge||e instanceof be)&&(m(this,"target",e.target,"position"),this.addToParent(e.target))}},__hmrId:"Light"}),Dt=a({extends:Z,created(){this.initLight(new js(this.color,this.intensity))},__hmrId:"AmbientLight"}),Ft=a({extends:Z,props:{target:{type:Object,default:()=>({x:0,y:0,z:0})}},created(){this.initLight(new be(this.color,this.intensity))},__hmrId:"DirectionalLight"}),Ut=a({extends:Z,props:{groundColor:{type:String,default:"#444444"}},created(){const e=new ks(this.color,this.groundColor,this.intensity);d(()=>this.groundColor,t=>{e.groundColor.set(t)}),this.initLight(e)},__hmrId:"HemisphereLight"}),Ht=a({extends:Z,props:{distance:{type:Number,default:0},decay:{type:Number,default:1}},created(){this.initLight(new Is(this.color,this.intensity,this.distance,this.decay))},__hmrId:"PointLight"}),Kt=a({extends:Z,props:{width:{type:Number,default:10},height:{type:Number,default:10},helper:Boolean},created(){ti.init();const e=new _s(this.color,this.intensity,this.width,this.height);if(["width","height"].forEach(t=>{d(()=>this[t],r=>{e[t]=r})}),this.helper){const t=new ri(e);e.add(t)}this.initLight(e)},__hmrId:"RectAreaLight"}),Vt=a({extends:Z,props:{angle:{type:Number,default:Math.PI/3},decay:{type:Number,default:1},distance:{type:Number,default:0},penumbra:{type:Number,default:0},target:Object},created(){const e=new ge(this.color,this.intensity,this.distance,this.angle,this.penumbra,this.decay);["angle","decay","distance","penumbra"].forEach(t=>{d(()=>this[t],r=>{e[t]=r})}),this.initLight(e)},__hmrId:"SpotLight"});const ue=Symbol("Material"),ce=a({emits:["created"],props:{color:{type:String,default:"#ffffff"},props:{type:Object,default:()=>({})}},inject:{mesh:W},setup(){return{}},provide(){return{[ue]:this}},created(){if(!this.mesh){console.error("Missing parent Mesh");return}if(this.createMaterial){const e=this.material=this.createMaterial();d(()=>this.color,t=>{e.color.set(t)}),A(this,"props",e,!1,this.setProp),this.$emit("created",e),this.mesh.setMaterial(e)}},unmounted(){var e;(e=this.material)==null||e.dispose()},methods:{getMaterialParams(){return{...Q(this.$props,["props"]),...this.props}},setProp(e,t,r,s=!1){const i=e[t];i instanceof Y?i.set(r):e[t]=r,e.needsUpdate=s},setTexture(e,t="map"){this.setProp(this.material,t,e,!0)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Material"});function I(e,t,r){return a({name:e,extends:ce,props:t,methods:{createMaterial(){return r(this.getMaterialParams())}}})}const Xt=I("BasicMaterial",{props:{type:Object,default:()=>({})}},e=>new Ee(e)),qt=I("LambertMaterial",{props:{type:Object,default:()=>({})}},e=>new Ts(e)),Wt=I("PhongMaterial",{props:{type:Object,default:()=>({})}},e=>new As(e)),Zt=I("PhysicalMaterial",{props:{type:Object,default:()=>({})}},e=>new Bs(e)),Yt=I("PointsMaterial",{props:{type:Object,default:()=>({})}},e=>new Ds(e)),Jt=I("ShadowMaterial",{color:{type:String,default:"#000000"},props:{type:Object,default:()=>({})}},e=>new Fs(e)),Qt=I("StandardMaterial",{props:{type:Object,default:()=>({})}},e=>new Us(e)),er=I("ToonMaterial",{props:{type:Object,default:()=>({})}},e=>new Hs(e));var tr=I("MatcapMaterial",{src:String,name:{type:String,default:"0404E8_0404B5_0404CB_3333FC"}},e=>{const t=e.src?e.src:Se(e.name),r=Q(e,["src","name"]);return r.matcap=new J().load(t),new Ks(r)});const Gi=` + varying vec2 vUv; + void main(){ + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); + } +`,Li=` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0); + } +`;var rr=I("ShaderMaterial",{props:{type:Object,default:()=>({uniforms:{},vertexShader:Gi,fragmentShader:Li})}},e=>new ve(Q(e,["color"])));function Oi(e,t,r){return e.split(t).join(r)}const Ni=V.meshphong_frag.slice(0,V.meshphong_frag.indexOf("void main() {")),$i=V.meshphong_frag.slice(V.meshphong_frag.indexOf("void main() {")),Ei={uniforms:ze.merge([Vs.phong.uniforms,{thicknessColor:{value:new Y(16777215)},thicknessDistortion:{value:.1},thicknessAmbient:{value:0},thicknessAttenuation:{value:.1},thicknessPower:{value:2},thicknessScale:{value:10}}]),vertexShader:` + #define USE_UV + ${V.meshphong_vert} + `,fragmentShader:` + #define USE_UV + #define SUBSURFACE + + ${Ni} + + uniform float thicknessPower; + uniform float thicknessScale; + uniform float thicknessDistortion; + uniform float thicknessAmbient; + uniform float thicknessAttenuation; + uniform vec3 thicknessColor; + + void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { + #ifdef USE_COLOR + vec3 thickness = vColor * thicknessColor; + #else + vec3 thickness = thicknessColor; + #endif + vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); + float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; + vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; + reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; + } + `+$i.replace("#include ",Oi(V.lights_fragment_begin,"RE_Direct( directLight, geometry, material, reflectedLight );",` + RE_Direct( directLight, geometry, material, reflectedLight ); + #if defined( SUBSURFACE ) && defined( USE_UV ) + RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); + #endif + `))};var sr=a({extends:ce,props:{uniforms:{type:Object,default:()=>({diffuse:"#ffffff",thicknessColor:"#ffffff",thicknessDistortion:.4,thicknessAmbient:.01,thicknessAttenuation:.7,thicknessPower:2,thicknessScale:4})}},methods:{createMaterial(){const e=Ei,t=ze.clone(e.uniforms);return A(this,"uniforms",t,!0,(r,s,i)=>{const n=r[s].value;n instanceof Y?n.set(i):r[s].value=i}),new ve({...e,lights:!0,...this.props,uniforms:t})}}}),le=a({inject:{material:ue},props:{name:{type:String,default:"map"},uniform:String,src:String,onLoad:Function,onProgress:Function,onError:Function,props:{type:Object,default:()=>({})}},setup(){return{}},created(){this.refreshTexture(),d(()=>this.src,this.refreshTexture)},unmounted(){var e,t;(e=this.material)==null||e.setTexture(null,this.name),(t=this.texture)==null||t.dispose()},methods:{createTexture(){if(this.src)return new J().load(this.src,this.onLoaded,this.onProgress,this.onError)},initTexture(){!this.texture||(A(this,"props",this.texture),this.material&&(this.material.setTexture(this.texture,this.name),this.material.material instanceof ve&&this.uniform&&(this.material.material.uniforms[this.uniform]={value:this.texture})))},refreshTexture(){var e;(e=this.texture)==null||e.dispose(),this.texture=this.createTexture(),this.initTexture()},onLoaded(e){var t;(t=this.onLoad)==null||t.call(this,e)}},render(){return[]}}),ir=a({extends:le,props:{name:{type:String,default:"envMap"},path:{type:String,required:!0},urls:{type:Array,default:()=>["px.jpg","nx.jpg","py.jpg","ny.jpg","pz.jpg","nz.jpg"]},props:{type:Object,default:()=>({mapping:Xs})}},created(){d(()=>this.path,this.refreshTexture),d(()=>this.urls,this.refreshTexture)},methods:{createTexture(){return new qs().setPath(this.path).load(this.urls,this.onLoaded,this.onProgress,this.onError)}}}),nr=a({extends:le,props:{videoId:{type:String,required:!0}},created(){d(()=>this.videoId,this.refreshTexture)},methods:{createTexture(){const e=document.getElementById(this.videoId);return new Ws(e)}}}),or=S("Box",Ke,Ve),ar=S("Circle",qe,We),hr=S("Cone",Ye,Je),dr=S("Cylinder",et,tt),ur=S("Dodecahedron",st,it),cr=S("Icosahedron",at,ht),lr=S("Lathe",ut,ct),mr=S("Octahedron",mt,pt),pr=S("Plane",yt,gt),fr=S("Polyhedron",vt,St),yr=S("Ring",xt,wt),gr=S("Sphere",Mt,Gt),br=S("Tetrahedron",Nt,$t);const zi={text:{type:String,required:!0,default:"Text"},fontSrc:{type:String,required:!0},size:{type:Number,default:80},height:{type:Number,default:5},depth:{type:Number,default:1},curveSegments:{type:Number,default:12},bevelEnabled:{type:Boolean,default:!1},bevelThickness:{type:Number,default:10},bevelSize:{type:Number,default:8},bevelOffset:{type:Number,default:0},bevelSegments:{type:Number,default:5},align:{type:[Boolean,String],default:!1}};var vr=a({extends:H,props:zi,setup(){return{}},created(){if(!this.fontSrc){console.error('Missing required prop: "font-src"');return}["text","size","height","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align"].forEach(t=>{d(()=>this[t],()=>{this.font&&this.refreshGeometry()})});const e=new ii;this.loading=!0,e.load(this.fontSrc,t=>{this.loading=!1,this.font=t,this.createGeometry(),this.initMesh()})},methods:{createGeometry(){this.geometry=new si(this.text,{font:this.font,size:this.size,height:this.height,depth:this.depth,curveSegments:this.curveSegments,bevelEnabled:this.bevelEnabled,bevelThickness:this.bevelThickness,bevelSize:this.bevelSize,bevelOffset:this.bevelOffset,bevelSegments:this.bevelSegments}),this.align==="center"&&this.geometry.center()}}}),Sr=S("Torus",zt,Rt),Pr=S("TorusKnot",kt,It),xr=a({extends:H,props:Pe,created(){this.createGeometry(),this.addGeometryWatchers(Pe)},methods:{createGeometry(){this.geometry=Tt(this)},updatePoints(e){Bt(this.geometry,e)}},__hmrId:"Tube"}),wr=a({emits:["loaded"],extends:H,props:{src:{type:String,required:!0},width:Number,height:Number,widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},keepSize:Boolean},setup(){return{}},created(){!this.renderer||(this.geometry=new Ne(1,1,this.widthSegments,this.heightSegments),this.material=new Ee({side:Zs,map:this.loadTexture()}),d(()=>this.src,this.refreshTexture),["width","height"].forEach(e=>{d(()=>this[e],this.resize)}),this.resize(),this.keepSize&&this.renderer.onResize(this.resize))},unmounted(){var e;(e=this.renderer)==null||e.offResize(this.resize)},methods:{loadTexture(){return new J().load(this.src,this.onLoaded)},refreshTexture(){var e;(e=this.texture)==null||e.dispose(),this.material&&(this.material.map=this.loadTexture(),this.material.needsUpdate=!0)},onLoaded(e){this.texture=e,this.resize(),this.$emit("loaded",e)},resize(){if(!this.renderer||!this.texture)return;const e=this.renderer.size,t=this.texture.image.width,r=this.texture.image.height,s=t/r;let i=1,n=1;this.width&&this.height?(i=this.width*e.wWidth/e.width,n=this.height*e.wHeight/e.height):this.width?(i=this.width*e.wWidth/e.width,n=i/s):this.height?(n=this.height*e.wHeight/e.height,i=n*s):s>1?i=n*s:n=i/s,this.mesh&&(this.mesh.scale.x=i,this.mesh.scale.y=n)}},__hmrId:"Image"}),Cr=a({extends:H,props:{count:{type:Number,required:!0}},methods:{initMesh(){if(this.renderer){if(!this.geometry||!this.material)return console.error("Missing geometry and/or material"),!1;this.mesh=new ye(this.geometry,this.material,this.count),this.mesh.userData.component=this,m(this,"castShadow",this.mesh),m(this,"receiveShadow",this.mesh),(this.onPointerEnter||this.onPointerOver||this.onPointerMove||this.onPointerLeave||this.onPointerDown||this.onPointerUp||this.onClick)&&this.renderer.three.addIntersectObject(this.mesh),this.initObject3D(this.mesh)}}},__hmrId:"InstancedMesh"}),Mr=a({extends:B,emits:["loaded"],props:{src:{type:String,required:!0}},setup(){return{}},created(){this.texture=new J().load(this.src,this.onLoaded),this.material=new Ys({map:this.texture}),this.sprite=new Js(this.material),this.initObject3D(this.sprite)},unmounted(){var e,t;(e=this.texture)==null||e.dispose(),(t=this.material)==null||t.dispose()},methods:{onLoaded(){this.updateUV(),this.$emit("loaded")},updateUV(){if(!this.texture||!this.sprite)return;const e=this.texture.image.width,t=this.texture.image.height,r=e/t;let s=.5,i=.5;r>1?s=.5*r:i=.5/r;const n=this.sprite.geometry.attributes.position.array;n[0]=-s,n[1]=-i,n[5]=s,n[6]=-i,n[10]=s,n[11]=i,n[15]=-s,n[16]=i,this.sprite.geometry.attributes.position.needsUpdate=!0}},__hmrId:"Sprite"}),Gr=a({extends:B,setup(){return{}},provide(){return{[W]:this}},mounted(){this.mesh=this.points=new Qs(this.geometry,this.material),this.initObject3D(this.mesh)},methods:{setGeometry(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial(e){this.material=e,this.mesh&&(this.mesh.material=e)}}}),Lr=a({extends:B,emits:["before-load","load","progress","error"],props:{src:{type:String,required:!0}},data(){return{progress:0}},methods:{onLoad(e){this.$emit("load",e)},onProgress(e){this.progress=e.loaded/e.total,this.$emit("progress",e)},onError(e){this.$emit("error",e)}}}),Or=a({extends:Lr,created(){const e=new ni;this.$emit("before-load",e),e.load(this.src,t=>{this.onLoad(t),this.initObject3D(t.scene)},this.onProgress,this.onError)}}),Nr=a({extends:Lr,created(){const e=new oi;this.$emit("before-load",e),e.load(this.src,t=>{this.onLoad(t),this.initObject3D(t)},this.onProgress,this.onError)}});const me=Symbol("Composer");var $r=a({setup(){return{renderer:K($)}},provide(){return{[me]:this}},created(){if(!this.renderer){console.error("Renderer not found");return}const e=this.renderer,t=new ai(this.renderer.renderer);this.composer=t,this.renderer.composer=t,e.addListener("init",()=>{e.renderer.autoClear=!1,this.resize(),e.addListener("resize",this.resize)})},unmounted(){var e;(e=this.renderer)==null||e.removeListener("resize",this.resize)},methods:{addPass(e){var t;(t=this.composer)==null||t.addPass(e)},removePass(e){var t;(t=this.composer)==null||t.removePass(e)},resize(){this.composer&&this.renderer&&this.composer.setSize(this.renderer.size.width,this.renderer.size.height)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"EffectComposer"}),M=a({inject:{renderer:$,composer:me},emits:["ready"],setup(){return{}},created(){this.composer||console.error("Missing parent EffectComposer"),this.renderer||console.error("Missing parent Renderer")},unmounted(){var e,t,r;this.pass&&((e=this.composer)==null||e.removePass(this.pass),(r=(t=this.pass).dispose)==null||r.call(t))},methods:{initEffectPass(e){var t;this.pass=e,(t=this.composer)==null||t.addPass(e),this.$emit("ready",e)}},render(){return[]},__hmrId:"EffectPass"}),Er=a({extends:M,created(){if(!this.renderer)return;if(!this.renderer.scene){console.error("Missing Scene");return}if(!this.renderer.camera){console.error("Missing Camera");return}const e=new hi(this.renderer.scene,this.renderer.camera);this.initEffectPass(e)},__hmrId:"RenderPass"});const zr={focus:{type:Number,default:1},aperture:{type:Number,default:.025},maxblur:{type:Number,default:.01}};var Rr=a({extends:M,props:zr,created(){if(!this.renderer)return;if(!this.renderer.scene){console.error("Missing Scene");return}if(!this.renderer.camera){console.error("Missing Camera");return}const e={focus:this.focus,aperture:this.aperture,maxblur:this.maxblur,width:this.renderer.size.width,height:this.renderer.size.height},t=new di(this.renderer.scene,this.renderer.camera,e);Object.keys(zr).forEach(r=>{d(()=>this[r],s=>{t.uniforms[r].value=s})}),this.initEffectPass(t)},__hmrId:"BokehPass"});const jr={noiseIntensity:{type:Number,default:.5},scanlinesIntensity:{type:Number,default:.05},scanlinesCount:{type:Number,default:4096},grayscale:{type:Number,default:0}};var kr=a({extends:M,props:jr,created(){const e=new ui(this.noiseIntensity,this.scanlinesIntensity,this.scanlinesCount,this.grayscale);Object.keys(jr).forEach(t=>{d(()=>this[t],r=>{e.uniforms[t].value=r})}),this.initEffectPass(e)},__hmrId:"FilmPass"}),Ir=a({extends:M,created(){var e;const t=new ne(ci);(e=this.renderer)==null||e.addListener("resize",this.resize),this.initEffectPass(t)},unmounted(){var e;(e=this.renderer)==null||e.removeListener("resize",this.resize)},methods:{resize({size:e}){if(this.pass){const{resolution:t}=this.pass.material.uniforms;t.value.x=1/e.width,t.value.y=1/e.height}}},__hmrId:"FXAAPass"});const _r={shape:{type:Number,default:1},radius:{type:Number,default:4},rotateR:{type:Number,default:Math.PI/12*1},rotateG:{type:Number,default:Math.PI/12*2},rotateB:{type:Number,default:Math.PI/12*3},scatter:{type:Number,default:0}};var Tr=a({extends:M,props:_r,created(){if(!this.renderer)return;const e=new li(this.renderer.size.width,this.renderer.size.height,{});Object.keys(_r).forEach(t=>{e.uniforms[t].value=this[t],d(()=>this[t],r=>{e.uniforms[t].value=r})}),this.initEffectPass(e)},__hmrId:"HalftonePass"}),Ar=a({extends:M,created(){if(!this.renderer)return;const e=new mi(this.renderer.size.width,this.renderer.size.height);this.initEffectPass(e)},__hmrId:"SMAAPass"}),Br=a({extends:M,props:{options:{type:Object,default:()=>({})}},created(){if(!this.renderer)return;if(!this.renderer.scene){console.error("Missing Scene");return}if(!this.renderer.camera){console.error("Missing Camera");return}const e=new pi(this.renderer.scene,this.renderer.camera,this.renderer.size.width,this.renderer.size.height);Object.keys(this.options).forEach(t=>{e[t]=this.options[t]}),this.initEffectPass(e)},__hmrId:"SSAOPass"}),Dr={uniforms:{},vertexShader:` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `,fragmentShader:` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + `},Fr={uniforms:{tDiffuse:{value:null},blurRadius:{value:0},gradientRadius:{value:0},start:{value:new T},end:{value:new T},delta:{value:new T},texSize:{value:new T}},vertexShader:Dr.vertexShader,fragmentShader:` + uniform sampler2D tDiffuse; + uniform float blurRadius; + uniform float gradientRadius; + uniform vec2 start; + uniform vec2 end; + uniform vec2 delta; + uniform vec2 texSize; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x)); + float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius; + for (float t = -30.0; t <= 30.0; t++) { + float percent = (t + offset - 0.5) / 30.0; + float weight = 1.0 - abs(percent); + vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius); + // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + // texel2.rgb *= texel2.a; + + color += texel * weight; + total += 2.0 * weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `};const Ri={blurRadius:{type:Number,default:10},gradientRadius:{type:Number,default:100},start:{type:Object,default:()=>({x:0,y:100})},end:{type:Object,default:()=>({x:10,y:100})}};var Ur=a({extends:M,props:Ri,setup(){return{uniforms1:{},uniforms2:{}}},created(){if(!this.composer)return;this.pass1=new ne(Fr),this.pass2=new ne(Fr);const e=this.uniforms1=this.pass1.uniforms,t=this.uniforms2=this.pass2.uniforms;t.blurRadius=e.blurRadius,t.gradientRadius=e.gradientRadius,t.start=e.start,t.end=e.end,t.texSize=e.texSize,m(this,"blurRadius",e.blurRadius,"value"),m(this,"gradientRadius",e.gradientRadius,"value"),this.updateFocusLine(),["start","end"].forEach(r=>{d(()=>this[r],this.updateFocusLine,{deep:!0})}),this.pass1.setSize=(r,s)=>{e.texSize.value.set(r,s)},this.initEffectPass(this.pass1),this.composer.addPass(this.pass2)},unmounted(){this.composer&&this.pass2&&this.composer.removePass(this.pass2)},methods:{updateFocusLine(){this.uniforms1.start.value.copy(this.start),this.uniforms1.end.value.copy(this.end);const e=new T().copy(this.end).sub(this.start).normalize();this.uniforms1.delta.value.copy(e),this.uniforms2.delta.value.set(-e.y,e.x)}},__hmrId:"TiltShiftPass"});const Hr={strength:{type:Number,default:1.5},radius:{type:Number,default:0},threshold:{type:Number,default:0}};var Kr=a({extends:M,props:Hr,created(){if(!this.renderer)return;const e=new T(this.renderer.size.width,this.renderer.size.height),t=new fi(e,this.strength,this.radius,this.threshold);Object.keys(Hr).forEach(r=>{d(()=>this[r],s=>{t.uniforms[r].value=s})}),this.initEffectPass(t)},__hmrId:"UnrealBloomPass"}),ji={uniforms:{tDiffuse:{value:null},center:{value:new T(.5,.5)},strength:{value:0}},vertexShader:Dr.vertexShader,fragmentShader:` + uniform sampler2D tDiffuse; + uniform vec2 center; + uniform float strength; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + vec2 toCenter = center - vUv; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + for (float t = 0.0; t <= 40.0; t++) { + float percent = (t + offset) / 40.0; + float weight = 4.0 * (percent - percent * percent); + vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + + color += texel * weight; + total += weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `},Vr=a({extends:M,props:{center:{type:Object,default:()=>({x:.5,y:.5})},strength:{type:Number,default:.5}},created(){const e=new ne(ji);m(this,"center",e.uniforms.center,"value"),m(this,"strength",e.uniforms.strength,"value"),this.initEffectPass(e)},__hmrId:"ZoomBlurPass"}),ki=Object.freeze({__proto__:null,Renderer:Te,RendererInjectionKey:$,OrthographicCamera:Be,PerspectiveCamera:ae,Camera:ae,Group:Fe,Scene:De,SceneInjectionKey:he,Object3D:B,Raycaster:Ue,CubeCamera:He,BufferGeometry:de,BoxGeometry:Xe,CircleGeometry:Ze,ConeGeometry:Qe,CylinderGeometry:rt,DodecahedronGeometry:nt,ExtrudeGeometry:ot,IcosahedronGeometry:dt,LatheGeometry:lt,OctahedronGeometry:ft,PlaneGeometry:bt,PolyhedronGeometry:Pt,RingGeometry:Ct,SphereGeometry:Lt,ShapeGeometry:Ot,TetrahedronGeometry:Et,TorusGeometry:jt,TorusKnotGeometry:_t,TubeGeometry:At,AmbientLight:Dt,DirectionalLight:Ft,HemisphereLight:Ut,PointLight:Ht,RectAreaLight:Kt,SpotLight:Vt,Material:ce,BasicMaterial:Xt,LambertMaterial:qt,PhongMaterial:Wt,PhysicalMaterial:Zt,PointsMaterial:Yt,ShadowMaterial:Jt,StandardMaterial:Qt,ToonMaterial:er,MaterialInjectionKey:ue,MatcapMaterial:tr,ShaderMaterial:rr,SubSurfaceMaterial:sr,Texture:le,CubeTexture:ir,VideoTexture:nr,Mesh:H,MeshInjectionKey:W,Box:or,Circle:ar,Cone:hr,Cylinder:dr,Dodecahedron:ur,Icosahedron:cr,Lathe:lr,Octahedron:mr,Plane:pr,Polyhedron:fr,Ring:yr,Sphere:gr,Tetrahedron:br,Text:vr,Torus:Sr,TorusKnot:Pr,Tube:xr,Image:wr,InstancedMesh:Cr,Sprite:Mr,Points:Gr,GltfModel:Or,FbxModel:Nr,EffectComposer:$r,ComposerInjectionKey:me,RenderPass:Er,EffectPass:M,BokehPass:Rr,FilmPass:kr,FXAAPass:Ir,HalftonePass:Tr,SMAAPass:Ar,SSAOPass:Br,TiltShiftPass:Ur,UnrealBloomPass:Kr,ZoomBlurPass:Vr,applyObjectProps:X,bindObjectProp:A,bindObjectProps:Re,setFromProp:q,bindProps:je,bindProp:m,propsValues:Q,lerp:ke,limit:Ie,getMatcapUrl:Se});const Xr={install(e){["Camera","OrthographicCamera","PerspectiveCamera","Raycaster","Renderer","Scene","Group","CubeCamera","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","BasicMaterial","LambertMaterial","MatcapMaterial","PhongMaterial","PhysicalMaterial","PointsMaterial","ShaderMaterial","StandardMaterial","SubSurfaceMaterial","ToonMaterial","Texture","CubeTexture","BufferGeometry","Mesh","Box","BoxGeometry","Circle","CircleGeometry","Cone","ConeGeometry","Cylinder","CylinderGeometry","Dodecahedron","DodecahedronGeometry","Icosahedron","IcosahedronGeometry","Lathe","LatheGeometry","Octahedron","OctahedronGeometry","Plane","PlaneGeometry","Polyhedron","PolyhedronGeometry","Ring","RingGeometry","Sphere","SphereGeometry","Tetrahedron","TetrahedronGeometry","Text","Torus","TorusGeometry","TorusKnot","TorusKnotGeometry","Tube","TubeGeometry","Image","InstancedMesh","Points","Sprite","FbxModel","GltfModel","BokehPass","EffectComposer","FilmPass","FXAAPass","HalftonePass","RenderPass","SAOPass","SMAAPass","SSAOPass","TiltShiftPass","UnrealBloomPass","ZoomBlurPass"].forEach(t=>{e.component(t,ki[t])})}};function Ii(e){return ts(e).use(Xr)}function _i(){const e={loader:new J,count:0,textures:[],loadProgress:0,loadTextures:t,dispose:s};return e;function t(i,n){e.count=i.length,e.textures.splice(0),e.loadProgress=0,Promise.all(i.map(r)).then(n)}function r(i,n){return new Promise(o=>{e.loader.load(i.src,c=>{e.loadProgress+=1/e.count,e.textures[n]=c,o(c)})})}function s(){e.textures.forEach(i=>i.dispose())}}export{Dt as AmbientLight,Xt as BasicMaterial,Rr as BokehPass,or as Box,Xe as BoxGeometry,de as BufferGeometry,ae as Camera,ar as Circle,Ze as CircleGeometry,me as ComposerInjectionKey,hr as Cone,Qe as ConeGeometry,He as CubeCamera,ir as CubeTexture,dr as Cylinder,rt as CylinderGeometry,Ft as DirectionalLight,ur as Dodecahedron,nt as DodecahedronGeometry,$r as EffectComposer,M as EffectPass,ot as ExtrudeGeometry,Ir as FXAAPass,Nr as FbxModel,kr as FilmPass,Or as GltfModel,Fe as Group,Tr as HalftonePass,Ut as HemisphereLight,cr as Icosahedron,dt as IcosahedronGeometry,wr as Image,Cr as InstancedMesh,qt as LambertMaterial,lr as Lathe,lt as LatheGeometry,tr as MatcapMaterial,ce as Material,ue as MaterialInjectionKey,H as Mesh,W as MeshInjectionKey,B as Object3D,mr as Octahedron,ft as OctahedronGeometry,Be as OrthographicCamera,ae as PerspectiveCamera,Wt as PhongMaterial,Zt as PhysicalMaterial,pr as Plane,bt as PlaneGeometry,Ht as PointLight,Gr as Points,Yt as PointsMaterial,fr as Polyhedron,Pt as PolyhedronGeometry,Ue as Raycaster,Kt as RectAreaLight,Er as RenderPass,Te as Renderer,$ as RendererInjectionKey,yr as Ring,Ct as RingGeometry,Ar as SMAAPass,Br as SSAOPass,De as Scene,he as SceneInjectionKey,rr as ShaderMaterial,Jt as ShadowMaterial,Ot as ShapeGeometry,gr as Sphere,Lt as SphereGeometry,Vt as SpotLight,Mr as Sprite,Qt as StandardMaterial,sr as SubSurfaceMaterial,br as Tetrahedron,Et as TetrahedronGeometry,vr as Text,le as Texture,Ur as TiltShiftPass,er as ToonMaterial,Sr as Torus,jt as TorusGeometry,Pr as TorusKnot,_t as TorusKnotGeometry,Xr as TroisJSVuePlugin,xr as Tube,At as TubeGeometry,Kr as UnrealBloomPass,nr as VideoTexture,Vr as ZoomBlurPass,X as applyObjectProps,A as bindObjectProp,Re as bindObjectProps,m as bindProp,je as bindProps,Ii as createApp,Se as getMatcapUrl,ke as lerp,Ie as limit,Q as propsValues,q as setFromProp,_i as useTextures}; +//# sourceMappingURL=trois.module.cdn.min.js.map diff --git a/build/trois.module.cdn.min.js.map b/build/trois.module.cdn.min.js.map new file mode 100644 index 0000000..4484d56 --- /dev/null +++ b/build/trois.module.cdn.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trois.module.cdn.min.js","sources":["../src/tools.ts","../src/core/useRaycaster.ts","../src/core/usePointer.ts","../src/core/useThree.ts","../src/core/Renderer.ts","../src/core/Camera.ts","../src/core/OrthographicCamera.ts","../src/core/PerspectiveCamera.ts","../src/core/Scene.ts","../src/core/Object3D.ts","../src/core/Group.ts","../src/core/Raycaster.ts","../src/core/CubeCamera.ts","../src/meshes/Mesh.ts","../src/geometries/Geometry.ts","../src/geometries/BoxGeometry.ts","../src/geometries/CircleGeometry.ts","../src/geometries/ConeGeometry.ts","../src/geometries/CylinderGeometry.ts","../src/geometries/DodecahedronGeometry.ts","../src/geometries/ExtrudeGeometry.ts","../src/geometries/IcosahedronGeometry.ts","../src/geometries/LatheGeometry.ts","../src/geometries/OctahedronGeometry.ts","../src/geometries/PlaneGeometry.ts","../src/geometries/PolyhedronGeometry.ts","../src/geometries/RingGeometry.ts","../src/geometries/SphereGeometry.ts","../src/geometries/ShapeGeometry.ts","../src/geometries/TetrahedronGeometry.ts","../src/geometries/TorusGeometry.ts","../src/geometries/TorusKnotGeometry.ts","../src/geometries/TubeGeometry.ts","../src/lights/Light.ts","../src/lights/AmbientLight.ts","../src/lights/DirectionalLight.ts","../src/lights/HemisphereLight.ts","../src/lights/PointLight.ts","../src/lights/RectAreaLight.ts","../src/lights/SpotLight.ts","../src/materials/Material.ts","../src/materials/MatcapMaterial.ts","../src/materials/ShaderMaterial.ts","../src/materials/SubsurfaceScatteringShader.ts","../src/materials/SubSurfaceMaterial.ts","../src/materials/Texture.ts","../src/materials/CubeTexture.ts","../src/materials/VideoTexture.ts","../src/meshes/Box.ts","../src/meshes/Circle.ts","../src/meshes/Cone.ts","../src/meshes/Cylinder.ts","../src/meshes/Dodecahedron.ts","../src/meshes/Icosahedron.ts","../src/meshes/Lathe.ts","../src/meshes/Octahedron.ts","../src/meshes/Plane.ts","../src/meshes/Polyhedron.ts","../src/meshes/Ring.ts","../src/meshes/Sphere.ts","../src/meshes/Tetrahedron.ts","../src/meshes/Text.ts","../src/meshes/Torus.ts","../src/meshes/TorusKnot.ts","../src/meshes/Tube.ts","../src/meshes/Image.ts","../src/meshes/InstancedMesh.ts","../src/meshes/Sprite.ts","../src/meshes/Points.ts","../src/models/Model.ts","../src/models/GLTF.ts","../src/models/FBX.ts","../src/effects/EffectComposer.ts","../src/effects/EffectPass.ts","../src/effects/RenderPass.ts","../src/effects/BokehPass.ts","../src/effects/FilmPass.ts","../src/effects/FXAAPass.ts","../src/effects/HalftonePass.ts","../src/effects/SMAAPass.ts","../src/effects/SSAOPass.ts","../src/shaders/default.ts","../src/shaders/TiltShift.ts","../src/effects/TiltShiftPass.ts","../src/effects/UnrealBloomPass.ts","../src/shaders/ZoomBlur.ts","../src/effects/ZoomBlurPass.ts","../src/plugin.ts","../src/use/useTextures.ts"],"sourcesContent":["import { ref, toRef, watch, WatchStopHandle } from 'vue'\n\ntype OptionSetter = (dst: any, key: string, value: any) => void\n\nexport function applyObjectProps(\n dst: any,\n options: Record,\n setter?: OptionSetter\n): void {\n if (options instanceof Object) {\n Object.entries(options).forEach(([key, value]) => {\n if (setter) setter(dst, key, value)\n else dst[key] = value\n })\n }\n}\n\nexport function bindObjectProp(\n src: any,\n prop: string,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src[prop], setter)\n const r = toRef(src, prop)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) })\n}\n\nexport function bindObjectProps(\n src: any,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src, setter)\n const r = ref(src)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) }, { deep: true })\n}\n\nexport function setFromProp(o: Record, prop: Record): void {\n if (prop instanceof Object) {\n Object.entries(prop).forEach(([key, value]) => {\n o[key] = value\n })\n }\n}\n\nexport function bindProps(src: any, props: string[], dst: any): void {\n props.forEach(prop => {\n bindProp(src, prop, dst, prop)\n })\n}\n\nexport function bindProp(src: any, srcProp: string, dst: any, dstProp?: string): void {\n const _dstProp = dstProp || srcProp\n const ref = toRef(src, srcProp)\n if (ref.value instanceof Object) {\n setFromProp(dst[_dstProp], ref.value)\n watch(ref, (value) => { setFromProp(dst[_dstProp], value) }, { deep: true })\n } else {\n if (ref.value !== undefined) dst[_dstProp] = src[srcProp]\n watch(ref, (value) => { dst[_dstProp] = value })\n }\n}\n\nexport function propsValues(props: Record, exclude: string[] = []): Record {\n const values: Record = {}\n Object.entries(props).forEach(([key, value]) => {\n if (!exclude || !exclude.includes(key)) {\n values[key] = value\n }\n })\n return values\n}\n\nexport function lerp(value1: number, value2: number, amount: number): number {\n amount = amount < 0 ? 0 : amount\n amount = amount > 1 ? 1 : amount\n return value1 + (value2 - value1) * amount\n}\n\nexport function limit(val: number, min: number, max: number): number {\n return val < min ? min : (val > max ? max : val)\n}\n\n// from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'\nconst DEFAULT_MATCAP = '0404E8_0404B5_0404CB_3333FC'\n\nexport function getMatcapUrl(hash = DEFAULT_MATCAP, format = 1024): string {\n const fileName = `${hash}${getMatcapFormatString(format)}.png`\n return `${MATCAP_ROOT}/${format}/${fileName}`\n}\n\nfunction getMatcapFormatString(format: number) {\n switch (format) {\n case 64:\n return '-64px'\n case 128:\n return '-128px'\n case 256:\n return '-256px'\n case 512:\n return '-512px'\n default:\n return ''\n }\n}\n","import { Camera, Intersection, Object3D, Plane, Raycaster, Vector2, Vector3 } from 'three'\n\nexport interface RaycasterInterface {\n position: Vector3\n updatePosition(coords: Vector2): void\n intersect(coords: Vector2, objects: Object3D[], recursive?: boolean): Intersection[],\n}\n\nexport interface RaycasterConfigInterface {\n camera: Camera\n resetPosition?: Vector3\n}\n\nexport default function useRaycaster(options: RaycasterConfigInterface): RaycasterInterface {\n const {\n camera,\n resetPosition = new Vector3(0, 0, 0),\n } = options\n\n const raycaster = new Raycaster()\n const position = resetPosition.clone()\n const plane = new Plane(new Vector3(0, 0, 1), 0)\n\n const updatePosition = (coords: Vector2) => {\n raycaster.setFromCamera(coords, camera)\n camera.getWorldDirection(plane.normal)\n raycaster.ray.intersectPlane(plane, position)\n }\n\n const intersect = (coords: Vector2, objects: Object3D[], recursive = false) => {\n raycaster.setFromCamera(coords, camera)\n return raycaster.intersectObjects(objects, recursive)\n }\n\n return {\n position,\n updatePosition,\n intersect,\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Camera, InstancedMesh, Intersection, Object3D, Vector2, Vector3 } from 'three'\nimport useRaycaster from './useRaycaster'\n\nexport interface PointerEventInterface {\n type: 'pointerenter' | 'pointermove' | 'pointerleave' | 'click'\n position?: Vector2\n positionN?: Vector2\n positionV3?: Vector3\n}\n\nexport interface PointerIntersectEventInterface {\n type: 'pointerenter' | 'pointerover' | 'pointermove' | 'pointerleave' | 'click'\n component: any\n over?: boolean\n intersect?: Intersection\n}\n\nexport type PointerCallbackType = (e: PointerEventInterface) => void\nexport type PointerIntersectCallbackType = (e: PointerIntersectEventInterface) => void\n\nexport interface PointerPublicConfigInterface {\n intersectMode?: 'frame'\n intersectRecursive?: boolean\n touch?: boolean\n resetOnEnd?: boolean\n onEnter?: PointerCallbackType\n onMove?: PointerCallbackType\n onLeave?: PointerCallbackType\n onClick?: PointerCallbackType\n onIntersectEnter?: PointerIntersectCallbackType\n onIntersectOver?: PointerIntersectCallbackType\n onIntersectMove?: PointerIntersectCallbackType\n onIntersectLeave?: PointerIntersectCallbackType\n onIntersectClick?: PointerIntersectCallbackType\n}\n\nexport interface PointerConfigInterface extends PointerPublicConfigInterface {\n camera: Camera\n domElement: HTMLCanvasElement\n intersectObjects: Object3D[] | (() => Object3D[])\n}\n\nexport interface PointerInterface {\n position: Vector2\n positionN: Vector2\n positionV3: Vector3\n intersectObjects: Object3D[] | (() => Object3D[])\n listeners: boolean\n addListeners(cb: void): void\n removeListeners(cb: void): void\n intersect(): void\n}\n\nexport default function usePointer(options: PointerConfigInterface): PointerInterface {\n const {\n camera,\n domElement,\n intersectObjects,\n intersectRecursive = false,\n touch = true,\n resetOnEnd = false,\n onEnter = () => {},\n onMove = () => {},\n onLeave = () => {},\n onClick = () => {},\n onIntersectEnter = () => {},\n onIntersectOver = () => {},\n onIntersectMove = () => {},\n onIntersectLeave = () => {},\n onIntersectClick = () => {},\n } = options\n\n const position = new Vector2(0, 0)\n const positionN = new Vector2(0, 0)\n\n const raycaster = useRaycaster({ camera })\n const positionV3 = raycaster.position\n\n const obj: PointerInterface = {\n position,\n positionN,\n positionV3,\n intersectObjects,\n listeners: false,\n addListeners,\n removeListeners,\n intersect,\n }\n\n return obj\n\n function reset() {\n position.set(0, 0)\n positionN.set(0, 0)\n positionV3.set(0, 0, 0)\n }\n\n function updatePosition(event: TouchEvent | MouseEvent) {\n let x, y\n // @ts-ignore\n if (event.touches && event.touches.length > 0) {\n x = (event).touches[0].clientX\n y = (event).touches[0].clientY\n } else {\n x = (event).clientX\n y = (event).clientY\n }\n\n const rect = domElement.getBoundingClientRect()\n position.x = x - rect.left\n position.y = y - rect.top\n positionN.x = (position.x / rect.width) * 2 - 1\n positionN.y = -(position.y / rect.height) * 2 + 1\n raycaster.updatePosition(positionN)\n }\n\n function intersect() {\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const offObjects: Object3D[] = [..._intersectObjects]\n const iMeshes: InstancedMesh[] = []\n\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n if (!object.userData.over) {\n object.userData.over = true\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: true, component, intersect }\n const enterEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerenter' }\n onIntersectOver(overEvent)\n onIntersectEnter(enterEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerEnter?.(enterEvent)\n }\n\n const moveEvent: PointerIntersectEventInterface = { type: 'pointermove', component, intersect }\n onIntersectMove(moveEvent)\n component?.onPointerMove?.(moveEvent)\n\n offObjects.splice(offObjects.indexOf((object)), 1)\n })\n\n offObjects.forEach(object => {\n const component = getComponent(object)\n if (object.userData.over) {\n object.userData.over = false\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: false, component }\n const leaveEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerleave' }\n onIntersectOver(overEvent)\n onIntersectLeave(leaveEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerLeave?.(leaveEvent)\n }\n })\n }\n }\n\n function pointerEnter(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onEnter({ type: 'pointerenter', position, positionN, positionV3 })\n }\n\n function pointerMove(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onMove({ type: 'pointermove', position, positionN, positionV3 })\n intersect()\n }\n\n function pointerClick(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const iMeshes: InstancedMesh[] = []\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n const event: PointerIntersectEventInterface = { type: 'click', component, intersect }\n onIntersectClick(event)\n component?.onClick?.(event)\n })\n }\n onClick({ type: 'click', position, positionN, positionV3 })\n }\n\n function pointerLeave() {\n if (resetOnEnd) reset()\n onLeave({ type: 'pointerleave' })\n }\n\n function getComponent(object: Object3D) {\n if (object.userData.component) return object.userData.component\n\n let parent = object.parent\n while (parent) {\n if (parent.userData.component) {\n return parent.userData.component\n }\n parent = parent.parent\n }\n\n return undefined\n }\n\n function getIntersectObjects() {\n if (typeof intersectObjects === 'function') {\n return intersectObjects()\n } else return intersectObjects\n }\n\n function addListeners() {\n domElement.addEventListener('mouseenter', pointerEnter)\n domElement.addEventListener('mousemove', pointerMove)\n domElement.addEventListener('mouseleave', pointerLeave)\n domElement.addEventListener('click', pointerClick)\n if (touch) {\n domElement.addEventListener('touchstart', pointerEnter)\n domElement.addEventListener('touchmove', pointerMove)\n domElement.addEventListener('touchend', pointerLeave)\n }\n obj.listeners = true\n }\n\n function removeListeners() {\n domElement.removeEventListener('mouseenter', pointerEnter)\n domElement.removeEventListener('mousemove', pointerMove)\n domElement.removeEventListener('mouseleave', pointerLeave)\n domElement.removeEventListener('click', pointerClick)\n\n domElement.removeEventListener('touchstart', pointerEnter)\n domElement.removeEventListener('touchmove', pointerMove)\n domElement.removeEventListener('touchend', pointerLeave)\n obj.listeners = false\n }\n}\n","import { Camera, Object3D, OrthographicCamera, PerspectiveCamera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport usePointer, { PointerConfigInterface, PointerPublicConfigInterface, PointerInterface } from './usePointer'\n\nexport interface SizeInterface {\n width: number\n height: number\n wWidth: number\n wHeight: number\n ratio: number\n}\n\nexport interface ThreeConfigInterface {\n params?: WebGLRendererParameters\n canvas?: HTMLCanvasElement\n antialias: boolean\n alpha: boolean\n autoClear: boolean\n orbitCtrl: boolean | Record\n pointer: boolean | PointerPublicConfigInterface\n resize: boolean | string\n width?: number\n height?: number\n onResize?(size: SizeInterface): void\n [index:string]: any\n}\n\nexport interface ThreeInterface {\n config: ThreeConfigInterface\n renderer: WebGLRenderer\n composer?: EffectComposer\n camera?: Camera\n cameraCtrl?: OrbitControls\n scene?: Scene\n pointer?: PointerInterface\n size: SizeInterface\n init(): boolean\n dispose(): void\n render(): void\n renderC(): void\n setSize(width: number, height: number): void\n addIntersectObject(o: Object3D): void\n removeIntersectObject(o: Object3D): void\n}\n\n/**\n * Three.js helper\n */\nexport default function useThree(params: ThreeConfigInterface): ThreeInterface {\n // default config\n const config: ThreeConfigInterface = {\n antialias: true,\n alpha: false,\n autoClear: true,\n orbitCtrl: false,\n pointer: false,\n resize: false,\n width: 300,\n height: 150,\n }\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n config[key] = value\n })\n }\n\n // size\n const size: SizeInterface = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n }\n\n const beforeRenderCallbacks: {(): void}[] = []\n\n const intersectObjects: Object3D[] = []\n\n const renderer = createRenderer()\n\n // returned object\n const obj: ThreeInterface = {\n config,\n renderer,\n size,\n init,\n dispose,\n render,\n renderC,\n setSize,\n addIntersectObject, removeIntersectObject,\n }\n\n return obj\n\n /**\n * create WebGLRenderer\n */\n function createRenderer(): WebGLRenderer {\n const renderer = new WebGLRenderer({ canvas: config.canvas, antialias: config.antialias, alpha: config.alpha, ...config.params })\n renderer.autoClear = config.autoClear\n return renderer\n }\n\n /**\n * init three\n */\n function init() {\n if (!obj.scene) {\n console.error('Missing Scene')\n return false\n }\n\n if (!obj.camera) {\n console.error('Missing Camera')\n return false\n }\n\n if (config.resize) {\n onResize()\n window.addEventListener('resize', onResize)\n } else if (config.width && config.height) {\n setSize(config.width, config.height)\n }\n\n initPointer()\n\n if (config.orbitCtrl) {\n const cameraCtrl = new OrbitControls(obj.camera, obj.renderer.domElement)\n if (config.orbitCtrl instanceof Object) {\n Object.entries(config.orbitCtrl).forEach(([key, value]) => {\n // @ts-ignore\n cameraCtrl[key] = value\n })\n }\n onBeforeRender(() => { cameraCtrl.update() })\n obj.cameraCtrl = cameraCtrl\n }\n\n return true\n }\n\n /**\n * init pointer\n */\n function initPointer() {\n let pointerConf: PointerConfigInterface = {\n camera: obj.camera!,\n domElement: obj.renderer!.domElement,\n intersectObjects,\n }\n\n if (config.pointer && config.pointer instanceof Object) {\n pointerConf = { ...pointerConf, ...config.pointer }\n }\n\n const pointer = obj.pointer = usePointer(pointerConf)\n if (config.pointer || intersectObjects.length) {\n pointer.addListeners()\n if (pointerConf.intersectMode === 'frame') {\n onBeforeRender(pointer.intersect)\n }\n }\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(cb: {(): void}) {\n beforeRenderCallbacks.push(cb)\n }\n\n /**\n * default render\n */\n function render() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.renderer!.render(obj.scene!, obj.camera!)\n }\n\n /**\n * composer render\n */\n function renderC() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.composer!.render()\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o: Object3D) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o)\n }\n // add listeners if needed\n if (obj.pointer && !obj.pointer.listeners) {\n obj.pointer.addListeners()\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o: Object3D) {\n const i = intersectObjects.indexOf(o)\n if (i !== -1) {\n intersectObjects.splice(i, 1)\n }\n // remove listeners if needed\n if (obj.pointer && !config.pointer && intersectObjects.length === 0) {\n obj.pointer.removeListeners()\n }\n }\n\n /**\n * remove listeners and dispose\n */\n function dispose() {\n // beforeRenderCallbacks = []\n window.removeEventListener('resize', onResize)\n if (obj.pointer) obj.pointer.removeListeners()\n if (obj.cameraCtrl) obj.cameraCtrl.dispose()\n if (obj.renderer) obj.renderer.dispose()\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (config.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight)\n } else {\n const elt = obj.renderer!.domElement.parentNode as Element\n if (elt) setSize(elt.clientWidth, elt.clientHeight)\n }\n config.onResize?.(size)\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width: number, height: number) {\n size.width = width\n size.height = height\n size.ratio = width / height\n\n obj.renderer!.setSize(width, height, false)\n\n // already done in EffectComposer\n // if (obj.composer) {\n // obj.composer.setSize(width, height)\n // }\n\n const camera = (obj.camera!)\n if (camera.type === 'PerspectiveCamera') {\n const pCamera = (camera)\n pCamera.aspect = size.ratio\n pCamera.updateProjectionMatrix()\n }\n\n if (camera.type === 'OrthographicCamera') {\n const oCamera = (camera)\n size.wWidth = oCamera.right - oCamera.left\n size.wHeight = oCamera.top - oCamera.bottom\n } else {\n const wsize = getCameraSize()\n size.wWidth = wsize[0]\n size.wHeight = wsize[1]\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const camera = (obj.camera!)\n const vFOV = (camera.fov * Math.PI) / 180\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(camera.position.z)\n const w = h * camera.aspect\n return [w, h]\n }\n}\n","/* eslint-disable no-use-before-define */\nimport { Camera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'\nimport { ComponentPublicInstance, defineComponent, InjectionKey, PropType, watchEffect } from 'vue'\nimport { bindObjectProp } from '../tools'\nimport { PointerInterface, PointerPublicConfigInterface } from './usePointer'\nimport useThree, { SizeInterface, ThreeConfigInterface, ThreeInterface } from './useThree'\n\ntype CallbackType = (event: T) => void\n\n// type EventType = 'init' | 'mounted' | 'beforerender' | 'afterrender' | 'resize'\n\nexport interface EventInterface {\n type: 'init' | 'mounted'\n renderer: RendererInterface\n}\n\nexport interface RenderEventInterface {\n type: 'beforerender' | 'afterrender'\n renderer: RendererInterface\n time: number\n}\n\nexport interface ResizeEventInterface {\n type: 'resize'\n renderer: RendererInterface\n size: SizeInterface\n}\n\ntype InitCallbackType = CallbackType\ntype MountedCallbackType = CallbackType\ntype RenderCallbackType = CallbackType\ntype ResizeCallbackType = CallbackType\n// type CallbackTypes = InitCallbackType | MountedCallbackType | RenderCallbackType | ResizeCallbackType\n\n// interface EventMap {\n// 'init': EventInterface;\n// 'mounted': EventInterface;\n// 'beforerender': RenderEventInterface;\n// 'afterrender': RenderEventInterface;\n// 'resize': ResizeEventInterface;\n// }\n\ninterface EventCallbackMap {\n 'init': InitCallbackType;\n 'mounted': MountedCallbackType;\n 'beforerender': RenderCallbackType;\n 'afterrender': RenderCallbackType;\n 'resize': ResizeCallbackType;\n}\n\ninterface RenderFunctionEventInterface {\n renderer: RendererInterface\n time: number\n}\n\ninterface RendererSetupInterface {\n canvas: HTMLCanvasElement\n three: ThreeInterface\n renderer: WebGLRenderer\n size: SizeInterface\n renderFn(e: RenderFunctionEventInterface): void\n raf: boolean\n\n $pointer?: PointerInterface\n\n initCallbacks: InitCallbackType[]\n mountedCallbacks: MountedCallbackType[]\n beforeRenderCallbacks: RenderCallbackType[]\n afterRenderCallbacks: RenderCallbackType[]\n resizeCallbacks: ResizeCallbackType[]\n}\n\nexport interface RendererInterface extends RendererSetupInterface {\n scene?: Scene\n camera?: Camera\n composer?: EffectComposer\n\n onInit(cb: InitCallbackType): void\n onMounted(cb: MountedCallbackType): void\n\n onBeforeRender(cb: RenderCallbackType): void\n offBeforeRender(cb: RenderCallbackType): void\n onAfterRender(cb: RenderCallbackType): void\n offAfterRender(cb: RenderCallbackType): void\n\n onResize(cb: ResizeCallbackType): void\n offResize(cb: ResizeCallbackType): void\n\n addListener(t: T, cb: EventCallbackMap[T]): void\n removeListener(t: T, cb: EventCallbackMap[T]): void\n}\n\nexport interface RendererPublicInterface extends ComponentPublicInstance, RendererInterface {}\n\nexport const RendererInjectionKey: InjectionKey = Symbol('Renderer')\n\nexport default defineComponent({\n name: 'Renderer',\n props: {\n params: { type: Object as PropType, default: () => ({}) },\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n orbitCtrl: { type: [Boolean, Object] as PropType>, default: false },\n pointer: { type: [Boolean, Object] as PropType, default: false },\n resize: { type: [Boolean, String] as PropType, default: false },\n shadow: Boolean,\n width: String,\n height: String,\n pixelRatio: Number,\n xr: Boolean,\n props: { type: Object, default: () => ({}) },\n onReady: Function as PropType<(r: RendererInterface) => void>,\n },\n inheritAttrs: false,\n setup(props, { attrs }): RendererSetupInterface {\n const initCallbacks: InitCallbackType[] = []\n const mountedCallbacks: MountedCallbackType[] = []\n const beforeRenderCallbacks: RenderCallbackType[] = []\n const afterRenderCallbacks: RenderCallbackType[] = []\n const resizeCallbacks: ResizeCallbackType[] = []\n\n const canvas = document.createElement('canvas')\n Object.entries(attrs).forEach(([key, value]) => {\n const matches = key.match(/^on([A-Z][a-zA-Z]*)$/)\n if (matches) {\n canvas.addEventListener(matches[1].toLowerCase(), value as {(): void })\n } else {\n canvas.setAttribute(key, value as string)\n }\n })\n\n const config: ThreeConfigInterface = {\n canvas,\n params: props.params,\n antialias: props.antialias,\n alpha: props.alpha,\n autoClear: props.autoClear,\n orbitCtrl: props.orbitCtrl,\n pointer: props.pointer,\n resize: props.resize,\n }\n\n if (props.width) config.width = parseInt(props.width)\n if (props.height) config.height = parseInt(props.height)\n\n const three = useThree(config)\n bindObjectProp(props, 'props', three.renderer)\n\n watchEffect(() => {\n if (props.pixelRatio) three.renderer.setPixelRatio(props.pixelRatio)\n })\n\n const renderFn: {(): void} = () => {}\n\n return {\n canvas,\n three,\n renderer: three.renderer,\n size: three.size,\n renderFn,\n raf: true,\n initCallbacks,\n mountedCallbacks,\n beforeRenderCallbacks,\n afterRenderCallbacks,\n resizeCallbacks,\n }\n },\n computed: {\n camera: {\n get: function(): Camera | undefined { return this.three.camera },\n set: function(camera: Camera): void { this.three.camera = camera },\n },\n scene: {\n get: function(): Scene | undefined { return this.three.scene },\n set: function(scene: Scene): void { this.three.scene = scene },\n },\n composer: {\n get: function(): EffectComposer | undefined { return this.three.composer },\n set: function(composer: EffectComposer): void { this.three.composer = composer },\n },\n },\n provide() {\n return {\n [RendererInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // appendChild won't work on reload\n this.$el.parentNode.insertBefore(this.canvas, this.$el)\n\n if (this.three.init()) {\n if (this.three.pointer) {\n this.$pointer = this.three.pointer\n }\n\n // TODO : don't use config\n this.three.config.onResize = (size) => {\n this.resizeCallbacks.forEach(e => e({ type: 'resize', renderer: this, size }))\n }\n\n if (this.shadow) {\n this.renderer.shadowMap.enabled = true\n }\n\n this.renderFn = this.three.composer ? this.three.renderC : this.three.render\n\n this.initCallbacks.forEach(e => e({ type: 'init', renderer: this }))\n this.onReady?.(this as RendererInterface)\n\n if (this.xr) {\n this.renderer.xr.enabled = true\n this.renderer.setAnimationLoop(this.render)\n } else {\n requestAnimationFrame(this.renderLoop)\n }\n }\n\n this.mountedCallbacks.forEach(e => e({ type: 'mounted', renderer: this }))\n },\n beforeUnmount() {\n this.canvas.remove()\n this.beforeRenderCallbacks = []\n this.afterRenderCallbacks = []\n this.raf = false\n this.three.dispose()\n },\n methods: {\n onInit(cb: InitCallbackType) { this.addListener('init', cb) },\n onMounted(cb: MountedCallbackType) { this.addListener('mounted', cb) },\n onBeforeRender(cb: RenderCallbackType) { this.addListener('beforerender', cb) },\n offBeforeRender(cb: RenderCallbackType) { this.removeListener('beforerender', cb) },\n onAfterRender(cb: RenderCallbackType) { this.addListener('afterrender', cb) },\n offAfterRender(cb: RenderCallbackType) { this.removeListener('afterrender', cb) },\n onResize(cb: ResizeCallbackType) { this.addListener('resize', cb) },\n offResize(cb: ResizeCallbackType) { this.removeListener('resize', cb) },\n\n addListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n callbacks.push(cb)\n },\n\n removeListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n const index = callbacks.indexOf(cb)\n if (index !== -1) callbacks.splice(index, 1)\n },\n\n getCallbacks(type: string) {\n if (type === 'init') {\n return this.initCallbacks\n } else if (type === 'mounted') {\n return this.mountedCallbacks\n } else if (type === 'beforerender') {\n return this.beforeRenderCallbacks\n } else if (type === 'afterrender') {\n return this.afterRenderCallbacks\n } else {\n return this.resizeCallbacks\n }\n },\n\n render(time: number) {\n this.beforeRenderCallbacks.forEach(e => e({ type: 'beforerender', renderer: this, time }))\n // this.onFrame?.(cbParams)\n this.renderFn({ renderer: this, time })\n this.afterRenderCallbacks.forEach(e => e({ type: 'afterrender', renderer: this, time }))\n },\n renderLoop(time: number) {\n if (this.raf) requestAnimationFrame(this.renderLoop)\n this.render(time)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Renderer',\n})\n","import { defineComponent } from 'vue'\n// import { Camera } from 'three'\n// import { RendererInjectionKey, RendererInterface } from './Renderer'\n// import Object3D from './Object3D'\n\n// export interface CameraSetupInterface {\n// renderer?: RendererInterface\n// camera: Camera\n// }\n\nexport default defineComponent({\n // TODO: eventually extend Object3D\n // extends: Object3D,\n\n props: {\n props: { type: Object, default: () => ({}) },\n },\n\n // inject: { renderer: RendererInjectionKey as symbol },\n\n // setup(): CameraSetupInterface {\n // return {}\n // },\n\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n})\n\nexport function cameraSetProp(camera: any, key: string, value: any, updateProjectionMatrix = true) {\n camera[key] = value\n if (updateProjectionMatrix) camera.updateProjectionMatrix()\n}\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { OrthographicCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'OrthographicCamera',\n props: {\n left: { type: Number, default: -1 },\n right: { type: Number, default: 1 },\n top: { type: Number, default: 1 },\n bottom: { type: Number, default: -1 },\n near: { type: Number, default: 0.1 },\n far: { type: Number, default: 2000 },\n zoom: { type: Number, default: 1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new OrthographicCamera(props.left, props.right, props.top, props.bottom, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'OrthographicCamera',\n})\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { PerspectiveCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'PerspectiveCamera',\n props: {\n aspect: { type: Number, default: 1 },\n far: { type: Number, default: 2000 },\n fov: { type: Number, default: 50 },\n near: { type: Number, default: 0.1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n lookAt: { type: Object as PropType, default: null },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new PerspectiveCamera(props.fov, props.aspect, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n\n if (props.lookAt) camera.lookAt(props.lookAt.x ?? 0, props.lookAt.y, props.lookAt.z)\n watch(() => props.lookAt, (v) => { camera.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'PerspectiveCamera',\n})\n","import { defineComponent, inject, InjectionKey, provide, watch } from 'vue'\nimport { Scene, Color, Object3D, Texture } from 'three'\nimport { RendererInjectionKey } from './Renderer'\n\nexport const SceneInjectionKey: InjectionKey = Symbol('Scene')\n\nexport default defineComponent({\n name: 'Scene',\n props: {\n background: [String, Number, Object],\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n const scene = new Scene()\n\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n renderer.scene = scene\n provide(SceneInjectionKey, scene)\n\n const setBackground = (value: any): void => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n if (scene.background instanceof Color) scene.background.set(value)\n else scene.background = new Color(value)\n } else if (value instanceof Texture) {\n scene.background = value\n }\n }\n\n setBackground(props.background)\n watch(() => props.background, setBackground)\n\n const add = (o: Object3D): void => { scene.add(o) }\n const remove = (o: Object3D): void => { scene.remove(o) }\n\n return { scene, add, remove }\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Scene',\n})\n","import { Object3D, Scene } from 'three'\nimport { ComponentPublicInstance, defineComponent, getCurrentInstance, PropType, watch } from 'vue'\nimport { bindObjectProp, bindProp } from '../tools'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\nimport { SceneInjectionKey } from './Scene'\n\nexport interface Object3DSetupInterface {\n renderer?: RendererInterface\n scene?: Scene\n o3d?: Object3D\n parent?: ComponentPublicInstance\n}\n\nexport interface Object3DInterface extends Object3DSetupInterface {\n addToParent(o?: Object3D): boolean\n removeFromParent(o?: Object3D): boolean\n add(o: Object3D): void\n remove(o: Object3D): void\n}\n\nexport interface Object3DPublicInterface extends ComponentPublicInstance, Object3DInterface {}\n\n// export function object3DSetup(): Object3DSetupInterface {\n// const renderer = inject(RendererInjectionKey)\n// const scene = inject(SceneInjectionKey)\n// return { scene, renderer }\n// }\n\nexport const pointerProps = {\n onPointerEnter: Function,\n onPointerOver: Function,\n onPointerMove: Function,\n onPointerLeave: Function,\n onPointerDown: Function,\n onPointerUp: Function,\n onClick: Function,\n}\n\nexport interface Vector2PropInterface {\n x?: number\n y?: number\n width?: number\n height?: number\n}\n\nexport interface Vector3PropInterface extends Vector2PropInterface {\n z?: number\n}\n\nexport interface EulerPropInterface extends Vector3PropInterface {\n order?: 'XYZ' | 'YZX' | 'ZXY' | 'XZY' | 'YXZ' | 'ZYX'\n}\n\nexport default defineComponent({\n name: 'Object3D',\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n scene: SceneInjectionKey as symbol,\n },\n emits: ['created', 'ready'],\n props: {\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n rotation: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n scale: { type: Object as PropType, default: () => ({ x: 1, y: 1, z: 1, order: 'XYZ' }) },\n lookAt: { type: Object as PropType, default: null },\n userData: { type: Object, default: () => ({}) },\n visible: { type: Boolean, default: true },\n props: { type: Object, default: () => ({}) },\n disableAdd: { type: Boolean, default: false },\n disableRemove: { type: Boolean, default: false },\n ...pointerProps,\n },\n setup(): Object3DSetupInterface {\n // return object3DSetup()\n return {}\n },\n created() {\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n if (!this.scene) {\n console.error('Missing parent Scene')\n }\n },\n unmounted() {\n if (!this.disableRemove) this.removeFromParent()\n if (this.o3d) {\n if (this.renderer) this.renderer.three.removeIntersectObject(this.o3d)\n }\n },\n methods: {\n initObject3D(o3d: Object3D) {\n this.o3d = o3d\n o3d.userData.component = this\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n if (this.renderer) this.renderer.three.addIntersectObject(o3d)\n }\n\n bindProp(this, 'position', o3d)\n bindProp(this, 'rotation', o3d)\n bindProp(this, 'scale', o3d)\n bindProp(this, 'userData', o3d.userData)\n bindProp(this, 'visible', o3d)\n\n bindObjectProp(this, 'props', o3d)\n\n this.$emit('created', o3d)\n\n if (this.lookAt) o3d.lookAt(this.lookAt.x ?? 0, this.lookAt.y, this.lookAt.z)\n watch(() => this.lookAt, (v) => { o3d.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n this.parent = this.getParent()\n if (!this.disableAdd) {\n if (this.addToParent()) this.$emit('ready', this)\n else console.error('Missing parent (Scene, Group...)')\n }\n },\n getParent(): undefined | ComponentPublicInstance {\n let parent = this.$parent\n\n if (!parent) {\n // for script setup\n const instance = getCurrentInstance() as any // ctx is internal\n if (instance && instance.parent) parent = instance.parent.ctx\n }\n\n while (parent) {\n if ((parent as any).add) return parent\n parent = parent.$parent\n }\n return undefined\n },\n addToParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).add(o3d)\n return true\n }\n return false\n },\n removeFromParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).remove(o3d)\n return true\n }\n return false\n },\n add(o: Object3D) { this.o3d?.add(o) },\n remove(o: Object3D) { this.o3d?.remove(o) },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Object3D',\n})\n","import { defineComponent } from 'vue'\nimport { Group } from 'three'\nimport Object3D from './Object3D'\n\nexport default defineComponent({\n name: 'Group',\n extends: Object3D,\n setup() {\n return {\n group: new Group(),\n }\n },\n created() {\n this.initObject3D(this.group)\n },\n __hmrId: 'Group',\n})\n","import { defineComponent, inject, PropType } from 'vue'\nimport usePointer, { PointerInterface, PointerIntersectCallbackType } from './usePointer'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst emptyCallBack: PointerIntersectCallbackType = () => {}\n\ninterface RaycasterSetupInterface {\n renderer?: RendererInterface\n pointer?: PointerInterface\n}\n\nexport default defineComponent({\n name: 'Raycaster',\n props: {\n onPointerEnter: { type: Function as PropType, default: emptyCallBack },\n onPointerOver: { type: Function as PropType, default: emptyCallBack },\n onPointerMove: { type: Function as PropType, default: emptyCallBack },\n onPointerLeave: { type: Function as PropType, default: emptyCallBack },\n onClick: { type: Function as PropType, default: emptyCallBack },\n intersectMode: { type: String, default: 'move' },\n intersectRecursive: { type: Boolean, default: false },\n },\n setup(): RaycasterSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n mounted() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n this.renderer.onMounted(() => {\n if (!renderer.camera) return\n\n this.pointer = usePointer({\n camera: renderer.camera,\n domElement: renderer.canvas,\n intersectObjects: () => renderer.scene ? renderer.scene.children : [],\n intersectRecursive: this.intersectRecursive,\n onIntersectEnter: this.onPointerEnter,\n onIntersectOver: this.onPointerOver,\n onIntersectMove: this.onPointerMove,\n onIntersectLeave: this.onPointerLeave,\n onIntersectClick: this.onClick,\n })\n this.pointer.addListeners()\n\n if (this.intersectMode === 'frame') {\n renderer.onBeforeRender(this.pointer.intersect)\n }\n })\n },\n unmounted() {\n if (this.pointer) {\n this.pointer.removeListeners()\n this.renderer?.offBeforeRender(this.pointer.intersect)\n }\n },\n render() {\n return []\n },\n __hmrId: 'Raycaster',\n})\n","import { defineComponent, inject, onUnmounted, PropType } from 'vue'\nimport { CubeCamera, LinearMipmapLinearFilter, Mesh, RGBAFormat, WebGLCubeRenderTarget } from 'three'\nimport Object3D from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\ninterface CubeCameraSetupInterface {\n cubeRT?: WebGLCubeRenderTarget\n cubeCamera?: CubeCamera\n updateRT?: {(): void}\n}\n\nexport default defineComponent({\n extends: Object3D,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n hideMeshes: { type: Array as PropType, default: () => ([]) },\n },\n setup(props): CubeCameraSetupInterface {\n const rendererC = inject(RendererInjectionKey)\n if (!rendererC || !rendererC.scene) {\n console.error('Missing Renderer / Scene')\n return {}\n }\n\n const renderer = rendererC.renderer, scene = rendererC.scene\n const cubeRT = new WebGLCubeRenderTarget(props.cubeRTSize, { format: RGBAFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter })\n const cubeCamera = new CubeCamera(props.cubeCameraNear, props.cubeCameraFar, cubeRT)\n const updateRT = () => {\n props.hideMeshes.forEach(m => { m.visible = false })\n cubeCamera.update(renderer, scene)\n props.hideMeshes.forEach(m => { m.visible = true })\n }\n\n if (props.autoUpdate) {\n rendererC.onBeforeRender(updateRT)\n onUnmounted(() => { rendererC.offBeforeRender(updateRT) })\n } else {\n rendererC.onMounted(updateRT)\n }\n\n return { cubeRT, cubeCamera, updateRT }\n },\n created() {\n if (this.cubeCamera) this.initObject3D(this.cubeCamera)\n },\n render() {\n return []\n },\n __hmrId: 'CubeCamera',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, watch } from 'vue'\nimport { BufferGeometry, Material, Mesh as TMesh } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport interface MeshSetupInterface extends Object3DSetupInterface {\n mesh?: TMesh\n geometry?: BufferGeometry\n material?: Material | Material[]\n loading?: boolean\n}\n\nexport interface MeshInterface extends MeshSetupInterface {\n setGeometry(g: BufferGeometry): void\n setMaterial(m: Material): void\n}\n\nexport interface MeshPublicInterface extends ComponentPublicInstance, MeshInterface {}\n\nexport const MeshInjectionKey: InjectionKey = Symbol('Mesh')\n\nconst Mesh = defineComponent({\n name: 'Mesh',\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n },\n setup(): MeshSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // TODO : proper ?\n if (!this.mesh && !this.loading) this.initMesh()\n },\n methods: {\n initMesh() {\n const mesh = new TMesh(this.geometry, this.material)\n\n bindProp(this, 'castShadow', mesh)\n bindProp(this, 'receiveShadow', mesh)\n\n this.mesh = mesh\n this.initObject3D(mesh)\n },\n createGeometry() {},\n addGeometryWatchers(props: Readonly) {\n Object.keys(props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], () => {\n this.refreshGeometry()\n })\n })\n },\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material | Material[]) {\n if (Array.isArray(material) || !this.material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n } else {\n let prev = this.material\n if (Array.isArray(prev)) {\n prev.push(material)\n } else {\n prev = [prev, material]\n }\n this.material = prev\n if (this.mesh) this.mesh.material = prev\n }\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n if (this.mesh && this.geometry) this.mesh.geometry = this.geometry\n oldGeo?.dispose()\n },\n },\n unmounted() {\n // for predefined mesh (geometry/material are not unmounted)\n if (this.geometry) this.geometry.dispose()\n if (this.material) {\n if (Array.isArray(this.material)) {\n for (const m of this.material) m.dispose()\n } else {\n this.material.dispose()\n }\n }\n },\n __hmrId: 'Mesh',\n})\n\nexport default Mesh\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function meshComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n },\n })\n}\n","import { ComponentPropsOptions, defineComponent, PropType, watch } from 'vue'\nimport { BufferAttribute, BufferGeometry } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\n\nexport interface GeometrySetupInterface {\n mesh?: MeshInterface\n geometry?: BufferGeometry\n watchProps?: string[]\n}\n\nexport interface GeometryAttributeInterface {\n name: string\n array: ArrayLike\n itemSize: number\n normalized?: boolean\n}\n\n// function defaultSetup(): GeometryInterface {\n// const mesh = inject('mesh') as MeshInterface\n// const watchProps: string[] = []\n// return { mesh, watchProps }\n// }\n\nconst Geometry = defineComponent({\n emits: ['created'],\n props: {\n rotateX: Number,\n rotateY: Number,\n rotateZ: Number,\n attributes: { type: Array as PropType>, default: () => ([]) },\n },\n // inject for sub components\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): GeometrySetupInterface {\n return {}\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry) this.mesh.setGeometry(this.geometry)\n\n Object.keys(this.$props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], this.refreshGeometry)\n })\n },\n unmounted() {\n this.geometry?.dispose()\n },\n methods: {\n createGeometry() {\n const bufferAttributes: Record = {}\n const geometry = new BufferGeometry()\n this.attributes.forEach(attribute => {\n if (attribute.name && attribute.itemSize && attribute.array) {\n const bufferAttribute = bufferAttributes[attribute.name] = new BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized)\n geometry.setAttribute(attribute.name, bufferAttribute)\n }\n })\n geometry.computeBoundingBox()\n geometry.userData.component = this\n this.geometry = geometry\n this.$emit('created', geometry)\n },\n rotateGeometry() {\n if (!this.geometry) return\n if (this.rotateX) this.geometry.rotateX(this.rotateX)\n if (this.rotateY) this.geometry.rotateY(this.rotateY)\n if (this.rotateZ) this.geometry.rotateZ(this.rotateZ)\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry && this.mesh) this.mesh.setGeometry(this.geometry)\n oldGeo?.dispose()\n },\n },\n render() { return [] },\n})\n\nexport default Geometry\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function geometryComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n this.geometry.userData.component = this\n this.$emit('created', this.geometry)\n },\n },\n })\n}\n","import { geometryComponent } from './Geometry'\nimport { BoxGeometry } from 'three'\n\nexport const props = {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): BoxGeometry {\n if (comp.size) {\n return new BoxGeometry(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n } else {\n return new BoxGeometry(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n }\n}\n\nexport default geometryComponent('BoxGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CircleGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CircleGeometry {\n return new CircleGeometry(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CircleGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { ConeGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): ConeGeometry {\n return new ConeGeometry(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('ConeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CylinderGeometry } from 'three'\n\nexport const props = {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CylinderGeometry {\n return new CylinderGeometry(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CylinderGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { DodecahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): DodecahedronGeometry {\n return new DodecahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('DodecahedronGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { ExtrudeGeometry, ExtrudeGeometryOptions, Shape } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n options: { type: Object as PropType },\n} as const\n\nexport function createGeometry(comp: any): ExtrudeGeometry {\n return new ExtrudeGeometry(comp.shapes, comp.options)\n}\n\nexport default geometryComponent('ExtrudeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { IcosahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): IcosahedronGeometry {\n return new IcosahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('IcosahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { LatheGeometry } from 'three'\n\nexport const props = {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): LatheGeometry {\n return new LatheGeometry(comp.points, comp.segments, comp.phiStart, comp.phiLength)\n}\n\nexport default geometryComponent('LatheGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { OctahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): OctahedronGeometry {\n return new OctahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('OctahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PlaneGeometry } from 'three'\n\nexport const props = {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): PlaneGeometry {\n return new PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments)\n}\n\nexport default geometryComponent('PlaneGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PolyhedronGeometry } from 'three'\n\nexport const props = {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): PolyhedronGeometry {\n return new PolyhedronGeometry(comp.vertices, comp.indices, comp.radius, comp.detail)\n}\n\nexport default geometryComponent('PolyhedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { RingGeometry } from 'three'\n\nexport const props = {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): RingGeometry {\n return new RingGeometry(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('RingGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { SphereGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI },\n} as const\n\nexport function createGeometry(comp: any): SphereGeometry {\n return new SphereGeometry(comp.radius, comp.widthSegments, comp.heightSegments, comp.phiStart, comp.phiLength, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('SphereGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { Shape, ShapeGeometry } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n curveSegments: { type: Number },\n} as const\n\nexport function createGeometry(comp: any): ShapeGeometry {\n return new ShapeGeometry(comp.shapes, comp.curveSegments)\n}\n\nexport default geometryComponent('ShapeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TetrahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): TetrahedronGeometry {\n return new TetrahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('TetrahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): TorusGeometry {\n return new TorusGeometry(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc)\n}\n\nexport default geometryComponent('TorusGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusKnotGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n} as const\n\nexport function createGeometry(comp: any): TorusKnotGeometry {\n return new TorusKnotGeometry(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q)\n}\n\nexport default geometryComponent('TorusKnotGeometry', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three'\nimport Geometry from './Geometry'\n\nexport const props = {\n points: Array,\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n} as const\n\nexport function createGeometry(comp: any): TubeGeometry {\n let curve\n if (comp.points) {\n curve = new CatmullRomCurve3(comp.points)\n } else if (comp.path) {\n curve = comp.path\n } else {\n console.error('Missing path curve or points.')\n }\n return new TubeGeometry(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed)\n}\n\nexport default defineComponent({\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n})\n\nexport function updateTubeGeometryPoints(tube: TubeGeometry, points: Vector3[]): void {\n const curve = new CatmullRomCurve3(points)\n const { radialSegments, radius, tubularSegments, closed } = tube.parameters\n const frames = curve.computeFrenetFrames(tubularSegments, closed)\n tube.tangents = frames.tangents\n tube.normals = frames.normals\n tube.binormals = frames.binormals\n tube.parameters.path = curve\n\n const pAttribute = tube.getAttribute('position')\n const nAttribute = tube.getAttribute('normal')\n\n const normal = new Vector3()\n const P = new Vector3()\n\n for (let i = 0; i < tubularSegments; i++) {\n updateSegment(i)\n }\n updateSegment(tubularSegments)\n\n tube.attributes.position.needsUpdate = true\n tube.attributes.normal.needsUpdate = true\n\n function updateSegment(i: number) {\n curve.getPointAt(i / tubularSegments, P)\n const N = frames.normals[i]\n const B = frames.binormals[i]\n for (let j = 0; j <= radialSegments; j++) {\n const v = j / radialSegments * Math.PI * 2\n const sin = Math.sin(v)\n const cos = -Math.cos(v)\n normal.x = (cos * N.x + sin * B.x)\n normal.y = (cos * N.y + sin * B.y)\n normal.z = (cos * N.z + sin * B.z)\n normal.normalize()\n const index = (i * (radialSegments + 1) + j)\n nAttribute.setXYZ(index, normal.x, normal.y, normal.z)\n pAttribute.setXYZ(index, P.x + radius * normal.x, P.y + radius * normal.y, P.z + radius * normal.z)\n }\n }\n}\n","import { DirectionalLight, Light, SpotLight } from 'three'\nimport { defineComponent, PropType, watch } from 'vue'\nimport Object3D, { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp, setFromProp } from '../tools'\n\nexport interface LightSetupInterface {\n light?: Light\n}\n\nexport default defineComponent({\n extends: Object3D,\n name: 'Light',\n props: {\n color: { type: String, default: '#ffffff' },\n intensity: { type: Number, default: 1 },\n castShadow: { type: Boolean, default: false },\n shadowMapSize: { type: Object as PropType, default: () => ({ x: 512, y: 512 }) },\n shadowCamera: { type: Object, default: () => ({}) },\n },\n setup(): LightSetupInterface {\n return {}\n },\n unmounted() {\n if (this.light instanceof SpotLight || this.light instanceof DirectionalLight) {\n this.removeFromParent(this.light.target)\n }\n },\n methods: {\n initLight(light: Light) {\n this.light = light\n\n if ((light as any).shadow) {\n light.castShadow = this.castShadow\n // @ts-ignore\n setFromProp(light.shadow.mapSize, this.shadowMapSize)\n // @ts-ignore\n setFromProp(light.shadow.camera, this.shadowCamera)\n }\n\n ['color', 'intensity', 'castShadow'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => {\n if (p === 'color') {\n light.color.set(value)\n } else {\n // @ts-ignore\n light[p] = value\n }\n })\n })\n\n this.initObject3D(light)\n\n if (light instanceof SpotLight || light instanceof DirectionalLight) {\n bindProp(this, 'target', light.target, 'position')\n this.addToParent(light.target)\n }\n },\n },\n __hmrId: 'Light',\n})\n","import { defineComponent } from 'vue'\nimport { AmbientLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n created() {\n this.initLight(new AmbientLight(this.color, this.intensity))\n },\n __hmrId: 'AmbientLight',\n})\n","import { defineComponent, PropType } from 'vue'\nimport { DirectionalLight } from 'three'\nimport { Vector3PropInterface } from '../core/Object3D'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n target: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n created() {\n this.initLight(new DirectionalLight(this.color, this.intensity))\n },\n __hmrId: 'DirectionalLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HemisphereLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n groundColor: { type: String, default: '#444444' },\n },\n created() {\n const light = new HemisphereLight(this.color, this.groundColor, this.intensity)\n watch(() => this.groundColor, (value) => { light.groundColor.set(value) })\n this.initLight(light)\n },\n __hmrId: 'HemisphereLight',\n})\n","import { defineComponent } from 'vue'\nimport { PointLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n distance: { type: Number, default: 0 },\n decay: { type: Number, default: 1 },\n },\n created() {\n this.initLight(new PointLight(this.color, this.intensity, this.distance, this.decay))\n },\n __hmrId: 'PointLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { RectAreaLight } from 'three'\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js'\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n width: { type: Number, default: 10 },\n height: { type: Number, default: 10 },\n helper: Boolean,\n },\n created() {\n RectAreaLightUniformsLib.init()\n const light = new RectAreaLight(this.color, this.intensity, this.width, this.height)\n\n const watchProps = ['width', 'height']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n if (this.helper) {\n const lightHelper = new RectAreaLightHelper(light)\n light.add(lightHelper)\n }\n\n this.initLight(light)\n },\n __hmrId: 'RectAreaLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { SpotLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n angle: { type: Number, default: Math.PI / 3 },\n decay: { type: Number, default: 1 },\n distance: { type: Number, default: 0 },\n penumbra: { type: Number, default: 0 },\n target: Object,\n },\n created() {\n const light = new SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay)\n\n const watchProps = ['angle', 'decay', 'distance', 'penumbra']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n this.initLight(light)\n },\n __hmrId: 'SpotLight',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, PropType, watch } from 'vue'\nimport { Color, Material, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, PointsMaterial as TPointsMaterial, Texture, ShadowMaterial as TShadowMaterial } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\nimport { bindObjectProp, propsValues } from '../tools'\nimport { BasicMaterialPropsInterface, LambertMaterialPropsInterface, MaterialPropsInterface, PhongMaterialPropsInterface, PhysicalMaterialPropsInterface, PointsMaterialPropsInterface, StandardMaterialPropsInterface, ToonMaterialPropsInterface } from './types'\n\nexport interface MaterialSetupInterface {\n mesh?: MeshInterface\n material?: Material\n createMaterial?(): Material\n}\n\nexport interface MaterialInterface extends MaterialSetupInterface {\n setTexture(texture: Texture | null, key: string): void\n}\n\nexport interface MaterialPublicInterface extends ComponentPublicInstance, MaterialInterface {}\n\nexport const MaterialInjectionKey: InjectionKey = Symbol('Material')\n\nconst BaseMaterial = defineComponent({\n emits: ['created'],\n props: {\n color: { type: String, default: '#ffffff' },\n props: { type: Object as PropType, default: () => ({}) },\n },\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): MaterialSetupInterface {\n return {}\n },\n provide() {\n return {\n [MaterialInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n if (this.createMaterial) {\n const material = this.material = this.createMaterial()\n // @ts-ignore\n watch(() => this.color, (value) => { material.color.set(value) })\n bindObjectProp(this, 'props', material, false, this.setProp)\n this.$emit('created', material)\n this.mesh.setMaterial(material)\n }\n },\n unmounted() {\n this.material?.dispose()\n },\n methods: {\n getMaterialParams() {\n return { ...propsValues(this.$props, ['props']), ...this.props }\n },\n setProp(material: any, key: string, value: any, needsUpdate = false) {\n const dstVal = material[key]\n if (dstVal instanceof Color) dstVal.set(value)\n else material[key] = value\n material.needsUpdate = needsUpdate\n },\n setTexture(texture: Texture | null, key = 'map') {\n this.setProp(this.material, key, texture, true)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Material',\n})\n\nexport default BaseMaterial\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function materialComponent

>(\n name: string,\n props: P,\n createMaterial: {(opts: any): Material}\n) {\n return defineComponent({\n name,\n extends: BaseMaterial,\n props,\n methods: {\n createMaterial() {\n return createMaterial(this.getMaterialParams())\n },\n },\n })\n}\n\n// TODO : proper\nexport const BasicMaterial = materialComponent('BasicMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshBasicMaterial(opts))\nexport const LambertMaterial = materialComponent('LambertMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshLambertMaterial(opts))\nexport const PhongMaterial = materialComponent('PhongMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhongMaterial(opts))\nexport const PhysicalMaterial = materialComponent('PhysicalMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhysicalMaterial(opts))\nexport const PointsMaterial = materialComponent('PointsMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TPointsMaterial(opts))\nexport const ShadowMaterial = materialComponent('ShadowMaterial', { color: { type: String, default: '#000000' }, props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TShadowMaterial(opts))\nexport const StandardMaterial = materialComponent('StandardMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshStandardMaterial(opts))\nexport const ToonMaterial = materialComponent('ToonMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshToonMaterial(opts))\n","import { MeshMatcapMaterial, TextureLoader } from 'three'\nimport { propsValues, getMatcapUrl } from '../tools'\nimport { materialComponent } from './Material'\n\nexport default materialComponent(\n 'MatcapMaterial',\n {\n src: String,\n name: { type: String, default: '0404E8_0404B5_0404CB_3333FC' },\n },\n (opts) => {\n const src = opts.src ? opts.src : getMatcapUrl(opts.name)\n const params = propsValues(opts, ['src', 'name'])\n params.matcap = new TextureLoader().load(src)\n return new MeshMatcapMaterial(params)\n }\n)\n","import { ShaderMaterial } from 'three'\nimport { materialComponent } from './Material'\nimport { propsValues } from '../tools'\n\nconst defaultVertexShader = `\n varying vec2 vUv;\n void main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n }\n`\n\nconst defaultFragmentShader = `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n }\n`\n\nexport default materialComponent(\n 'ShaderMaterial',\n {\n props: { type: Object, default: () => ({\n uniforms: {},\n vertexShader: defaultVertexShader,\n fragmentShader: defaultFragmentShader,\n }) },\n },\n (opts) => new ShaderMaterial(propsValues(opts, ['color']))\n)\n","/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on three/examples/jsm/shaders/SubsurfaceScatteringShader.js\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\nimport {\n Color,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n} from 'three'\n\nfunction replaceAll(string: string, find: string, replace: string) {\n return string.split(find).join(replace)\n}\n\nconst meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {'))\nconst meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {'))\n\nconst SubsurfaceScatteringShader = {\n\n uniforms: UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n thicknessColor: { value: new Color(0xffffff) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n}\n\nexport default SubsurfaceScatteringShader\n","import { defineComponent, PropType } from 'vue'\nimport { Color, ShaderMaterial, UniformsUtils } from 'three'\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader'\nimport Material from './Material'\nimport { bindObjectProp } from '../tools'\n\nexport interface SubSurfaceMaterialUniformsInterface {\n diffuse?: string | number\n thicknessColor?: string | number\n thicknessDistortion?: number\n thicknessAmbient?: number\n thicknessAttenuation?: number\n thicknessPower?: number\n thicknessScale?: number\n}\n\nexport default defineComponent({\n extends: Material,\n props: {\n uniforms: { type: Object as PropType, default: () => ({\n diffuse: '#ffffff',\n thicknessColor: '#ffffff',\n thicknessDistortion: 0.4,\n thicknessAmbient: 0.01,\n thicknessAttenuation: 0.7,\n thicknessPower: 2,\n thicknessScale: 4,\n }) },\n },\n methods: {\n createMaterial() {\n const params = SubsurfaceScatteringShader\n const uniforms = UniformsUtils.clone(params.uniforms)\n\n bindObjectProp(this, 'uniforms', uniforms, true, (dst: any, key: string, value: any) => {\n const dstVal = dst[key].value\n if (dstVal instanceof Color) dstVal.set(value)\n else dst[key].value = value\n })\n\n const material = new ShaderMaterial({\n ...params,\n lights: true,\n ...this.props,\n uniforms,\n })\n\n return material\n },\n },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { ShaderMaterial, Texture, TextureLoader } from 'three'\nimport { bindObjectProp } from '../tools'\nimport { MaterialInjectionKey, MaterialInterface } from './Material'\n\nexport interface TexureInterface {\n material?: MaterialInterface\n texture?: Texture\n}\n\nexport default defineComponent({\n inject: {\n material: MaterialInjectionKey as symbol,\n },\n props: {\n name: { type: String, default: 'map' },\n uniform: String,\n src: String,\n onLoad: Function as PropType<(t: Texture) => void>,\n onProgress: Function as PropType<(e: ProgressEvent) => void>,\n onError: Function as PropType<(e: ErrorEvent) => void>,\n props: { type: Object, default: () => ({}) },\n },\n setup(): TexureInterface {\n return {}\n },\n created() {\n this.refreshTexture()\n watch(() => this.src, this.refreshTexture)\n },\n unmounted() {\n this.material?.setTexture(null, this.name)\n this.texture?.dispose()\n },\n methods: {\n createTexture() {\n if (!this.src) return undefined\n return new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError)\n },\n initTexture() {\n if (!this.texture) return\n\n bindObjectProp(this, 'props', this.texture)\n if (!this.material) return\n\n this.material.setTexture(this.texture, this.name)\n if (this.material.material instanceof ShaderMaterial && this.uniform) {\n (this.material.material).uniforms[this.uniform] = { value: this.texture }\n }\n },\n refreshTexture() {\n this.texture?.dispose()\n this.texture = this.createTexture()\n this.initTexture()\n },\n onLoaded(t: Texture) {\n this.onLoad?.(t)\n },\n },\n render() { return [] },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { CubeReflectionMapping, CubeTextureLoader } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n name: { type: String, default: 'envMap' },\n path: { type: String, required: true },\n urls: {\n type: Array as PropType,\n default: () => ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n props: { type: Object, default: () => ({ mapping: CubeReflectionMapping }) },\n },\n created() {\n watch(() => this.path, this.refreshTexture)\n watch(() => this.urls, this.refreshTexture)\n },\n methods: {\n createTexture() {\n return new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError)\n },\n },\n})\n","import { defineComponent, watch } from 'vue'\nimport { VideoTexture } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n videoId: {\n type: String,\n required: true,\n },\n },\n created() {\n watch(() => this.videoId, this.refreshTexture)\n },\n methods: {\n createTexture() {\n const video = document.getElementById(this.videoId) as HTMLVideoElement\n return new VideoTexture(video)\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/BoxGeometry'\n\nexport default meshComponent('Box', props, createGeometry)\n\n// import { defineComponent } from 'vue'\n// import Mesh, { meshComponent } from './Mesh'\n//\n// export default defineComponent({\n// extends: Mesh,\n// props,\n// created() {\n// this.createGeometry()\n// this.addGeometryWatchers(props)\n// },\n// methods: {\n// createGeometry() {\n// this.geometry = createGeometry(this)\n// },\n// },\n// })\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CircleGeometry'\n\nexport default meshComponent('Circle', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/ConeGeometry'\n\nexport default meshComponent('Cone', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CylinderGeometry'\n\nexport default meshComponent('Cylinder', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/DodecahedronGeometry'\n\nexport default meshComponent('Dodecahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/IcosahedronGeometry'\n\nexport default meshComponent('Icosahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/LatheGeometry'\n\nexport default meshComponent('Lathe', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/OctahedronGeometry'\n\nexport default meshComponent('Octahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PlaneGeometry'\n\nexport default meshComponent('Plane', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PolyhedronGeometry'\n\nexport default meshComponent('Polyhedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/RingGeometry'\n\nexport default meshComponent('Ring', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/SphereGeometry'\n\nexport default meshComponent('Sphere', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TetrahedronGeometry'\n\nexport default meshComponent('Tetrahedron', props, createGeometry)\n","import { defineComponent, PropType, watch } from 'vue'\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'\nimport { Font, FontLoader } from 'three/examples/jsm/loaders/FontLoader.js'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface TextSetupInterface extends MeshSetupInterface {\n geometry?: TextGeometry\n font?: Font\n}\n\nconst props = {\n text: { type: String, required: true, default: 'Text' },\n fontSrc: { type: String, required: true },\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String] as PropType, default: false },\n} as const\n\nexport default defineComponent({\n extends: Mesh,\n props,\n setup(): TextSetupInterface {\n return {}\n },\n created() {\n if (!this.fontSrc) {\n console.error('Missing required prop: \"font-src\"')\n return\n }\n // if (!this.text) {\n // console.error('Missing required prop: \"text\"')\n // return\n // }\n\n // add watchers\n const watchProps = [\n 'text', 'size', 'height', 'curveSegments',\n 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments',\n 'align',\n ]\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], () => {\n if (this.font) this.refreshGeometry()\n })\n })\n\n const loader = new FontLoader()\n this.loading = true\n loader.load(this.fontSrc, (font) => {\n this.loading = false\n this.font = font\n this.createGeometry()\n this.initMesh()\n })\n },\n methods: {\n createGeometry() {\n this.geometry = new TextGeometry(this.text, {\n // @ts-ignore\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n })\n\n if (this.align === 'center') {\n this.geometry.center()\n }\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusGeometry'\n\nexport default meshComponent('Torus', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusKnotGeometry'\n\nexport default meshComponent('TorusKnot', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { TubeGeometry, Vector3 } from 'three'\nimport Mesh from './Mesh'\nimport { props, createGeometry, updateTubeGeometryPoints } from '../geometries/TubeGeometry'\n\nexport default defineComponent({\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update curve points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n __hmrId: 'Tube',\n})\n","import { defineComponent, watch } from 'vue'\nimport { DoubleSide, MeshBasicMaterial, PlaneGeometry, Texture, TextureLoader } from 'three'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface ImageSetupInterface extends MeshSetupInterface {\n material?: MeshBasicMaterial\n texture?: Texture\n}\n\nexport default defineComponent({\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: { type: String, required: true },\n width: Number,\n height: Number,\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n keepSize: Boolean,\n },\n setup(): ImageSetupInterface {\n return {}\n },\n created() {\n if (!this.renderer) return\n\n this.geometry = new PlaneGeometry(1, 1, this.widthSegments, this.heightSegments)\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() })\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.resize)\n })\n\n this.resize()\n if (this.keepSize) this.renderer.onResize(this.resize)\n },\n unmounted() {\n this.renderer?.offResize(this.resize)\n },\n methods: {\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded)\n },\n refreshTexture() {\n this.texture?.dispose()\n if (this.material) {\n this.material.map = this.loadTexture()\n this.material.needsUpdate = true\n }\n },\n onLoaded(texture: Texture) {\n this.texture = texture\n this.resize()\n this.$emit('loaded', texture)\n },\n resize() {\n if (!this.renderer || !this.texture) return\n const screen = this.renderer.size\n const iW = this.texture.image.width\n const iH = this.texture.image.height\n const iRatio = iW / iH\n let w = 1, h = 1\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width\n h = this.height * screen.wHeight / screen.height\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width\n h = w / iRatio\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height\n w = h * iRatio\n } else {\n if (iRatio > 1) w = h * iRatio\n else h = w / iRatio\n }\n if (this.mesh) {\n this.mesh.scale.x = w\n this.mesh.scale.y = h\n }\n },\n },\n __hmrId: 'Image',\n})\n","import { defineComponent } from 'vue'\nimport { InstancedMesh } from 'three'\nimport Mesh from './Mesh'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: Mesh,\n props: {\n count: { type: Number, required: true },\n },\n methods: {\n initMesh() {\n if (!this.renderer) return\n\n if (!this.geometry || !this.material) {\n console.error('Missing geometry and/or material')\n return false\n }\n\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count)\n this.mesh.userData.component = this\n\n bindProp(this, 'castShadow', this.mesh)\n bindProp(this, 'receiveShadow', this.mesh)\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n this.renderer.three.addIntersectObject(this.mesh)\n }\n\n this.initObject3D(this.mesh)\n },\n },\n __hmrId: 'InstancedMesh',\n})\n","import { defineComponent } from 'vue'\nimport { Sprite, SpriteMaterial, Texture, TextureLoader } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\n\ninterface SpriteSetupInterface extends Object3DSetupInterface {\n texture?: Texture\n material?: SpriteMaterial\n sprite?: Sprite\n}\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['loaded'],\n props: {\n src: { type: String, required: true },\n },\n setup(): SpriteSetupInterface {\n return {}\n },\n created() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded)\n this.material = new SpriteMaterial({ map: this.texture })\n this.sprite = new Sprite(this.material)\n this.initObject3D(this.sprite)\n },\n unmounted() {\n this.texture?.dispose()\n this.material?.dispose()\n },\n methods: {\n onLoaded() {\n this.updateUV()\n this.$emit('loaded')\n },\n updateUV() {\n if (!this.texture || !this.sprite) return\n\n const iWidth = this.texture.image.width\n const iHeight = this.texture.image.height\n const iRatio = iWidth / iHeight\n\n let x = 0.5, y = 0.5\n if (iRatio > 1) {\n x = 0.5 * iRatio\n } else {\n y = 0.5 / iRatio\n }\n\n const positions = this.sprite.geometry.attributes.position.array as Array\n positions[0] = -x; positions[1] = -y\n positions[5] = x; positions[6] = -y\n positions[10] = x; positions[11] = y\n positions[15] = -x; positions[16] = y\n this.sprite.geometry.attributes.position.needsUpdate = true\n },\n },\n __hmrId: 'Sprite',\n})\n","import { defineComponent } from 'vue'\nimport { BufferGeometry, Material, Points } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { MeshInjectionKey } from './Mesh'\n\nexport interface PointsSetupInterface extends Object3DSetupInterface {\n mesh?: Points\n points?: Points\n geometry?: BufferGeometry\n material?: Material\n}\n\nexport interface PointsInterface extends PointsSetupInterface {\n setGeometry(geometry: BufferGeometry): void\n setMaterial(material: Material): void\n}\n\n// not really a mesh, but allow us to easily get geometry/material support\nexport default defineComponent({\n extends: Object3D,\n setup(): PointsSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n this.mesh = this.points = new Points(this.geometry, this.material)\n this.initObject3D(this.mesh)\n },\n methods: {\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n },\n },\n})\n","import { Object3D as TObject3D } from 'three'\nimport { defineComponent } from 'vue'\nimport Object3D from '../core/Object3D'\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['before-load', 'load', 'progress', 'error'],\n props: {\n src: { type: String, required: true },\n },\n data() {\n return {\n progress: 0,\n }\n },\n methods: {\n onLoad(model: TObject3D) {\n this.$emit('load', model)\n },\n onProgress(progress: ProgressEvent) {\n this.progress = progress.loaded / progress.total\n this.$emit('progress', progress)\n },\n onError(error: ErrorEvent) {\n this.$emit('error', error)\n },\n },\n})\n","import { defineComponent } from 'vue'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new GLTFLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (gltf) => {\n this.onLoad(gltf)\n this.initObject3D(gltf.scene)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent } from 'vue'\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new FBXLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (fbx) => {\n this.onLoad(fbx)\n this.initObject3D(fbx)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent, inject, InjectionKey } from 'vue'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\n\ninterface EffectComposerSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposer\n}\n\nexport interface EffectComposerInterface extends EffectComposerSetupInterface {\n addPass(pass: Pass): void\n removePass(pass: Pass): void\n}\n\nexport const ComposerInjectionKey: InjectionKey = Symbol('Composer')\n\nexport default defineComponent({\n setup(): EffectComposerSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n provide() {\n return {\n [ComposerInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n const composer = new EffectComposer(this.renderer.renderer)\n this.composer = composer\n this.renderer.composer = composer\n\n // this.renderer.onInit(() => {\n renderer.addListener('init', () => {\n renderer.renderer.autoClear = false\n this.resize()\n renderer.addListener('resize', this.resize)\n })\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n addPass(pass: Pass) {\n this.composer?.addPass(pass)\n },\n removePass(pass: Pass) {\n this.composer?.removePass(pass)\n },\n resize() {\n if (this.composer && this.renderer) {\n this.composer.setSize(this.renderer.size.width, this.renderer.size.height)\n }\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'EffectComposer',\n})\n","import { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { defineComponent } from 'vue'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\nimport { ComposerInjectionKey, EffectComposerInterface } from './EffectComposer'\n\nexport interface EffectSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposerInterface\n pass?: Pass\n}\n\nexport default defineComponent({\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n composer: ComposerInjectionKey as symbol,\n },\n emits: ['ready'],\n setup(): EffectSetupInterface {\n return {}\n },\n created() {\n if (!this.composer) {\n console.error('Missing parent EffectComposer')\n }\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n },\n unmounted() {\n if (this.pass) {\n this.composer?.removePass(this.pass);\n (this.pass as any).dispose?.()\n }\n },\n methods: {\n initEffectPass(pass: Pass) {\n this.pass = pass\n this.composer?.addPass(pass)\n this.$emit('ready', pass)\n },\n },\n render() {\n return []\n },\n __hmrId: 'EffectPass',\n})\n","import { defineComponent } from 'vue'\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n const pass = new RenderPass(this.renderer.scene, this.renderer.camera)\n this.initEffectPass(pass)\n },\n __hmrId: 'RenderPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n focus: { type: Number, default: 1 },\n aperture: { type: Number, default: 0.025 },\n maxblur: { type: Number, default: 0.01 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.renderer.size.width,\n height: this.renderer.size.height,\n }\n\n const pass = new BokehPass(this.renderer.scene, this.renderer.camera, params)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'BokehPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n noiseIntensity: { type: Number, default: 0.5 },\n scanlinesIntensity: { type: Number, default: 0.05 },\n scanlinesCount: { type: Number, default: 4096 },\n grayscale: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'FilmPass',\n})\n","import { defineComponent } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'\nimport EffectPass from './EffectPass'\nimport { SizeInterface } from '../core/useThree'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n const pass = new ShaderPass(FXAAShader)\n\n // resize will be first called in renderer init\n this.renderer?.addListener('resize', this.resize)\n\n this.initEffectPass(pass)\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n resize({ size }: { size: SizeInterface }) {\n if (this.pass) {\n const { resolution } = (this.pass as ShaderPass).material.uniforms\n resolution.value.x = 1 / size.width\n resolution.value.y = 1 / size.height\n }\n },\n },\n __hmrId: 'FXAAPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const pass = new HalftonePass(this.renderer.size.width, this.renderer.size.height, {})\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n pass.uniforms[p].value = this[p]\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'HalftonePass',\n})\n","import { defineComponent } from 'vue'\nimport { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n const pass = new SMAAPass(this.renderer.size.width, this.renderer.size.height)\n this.initEffectPass(pass)\n },\n __hmrId: 'SMAAPass',\n})\n","import { defineComponent } from 'vue'\nimport { SSAOPass } from 'three/examples/jsm/postprocessing/SSAOPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n options: {\n type: Object,\n default: () => ({}),\n },\n },\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const pass = new SSAOPass(\n this.renderer.scene,\n this.renderer.camera,\n this.renderer.size.width,\n this.renderer.size.height\n )\n\n Object.keys(this.options).forEach(key => {\n // @ts-ignore\n pass[key] = this.options[key]\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'SSAOPass',\n})\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n}\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport TiltShift from '../shaders/TiltShift'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nconst props = {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object as PropType, default: () => ({ x: 0, y: 100 }) },\n end: { type: Object as PropType, default: () => ({ x: 10, y: 100 }) },\n} as const\n\ninterface TiltShiftPassSetupInterface {\n uniforms1: {[name: string]: { value: any }}\n uniforms2: {[name: string]: { value: any }}\n pass1?: ShaderPass\n pass2?: ShaderPass\n}\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n setup(): TiltShiftPassSetupInterface {\n return { uniforms1: {}, uniforms2: {} }\n },\n created() {\n if (!this.composer) return\n\n this.pass1 = new ShaderPass(TiltShift)\n this.pass2 = new ShaderPass(TiltShift)\n\n const uniforms1 = this.uniforms1 = this.pass1.uniforms\n const uniforms2 = this.uniforms2 = this.pass2.uniforms\n\n // shared uniforms\n uniforms2.blurRadius = uniforms1.blurRadius\n uniforms2.gradientRadius = uniforms1.gradientRadius\n uniforms2.start = uniforms1.start\n uniforms2.end = uniforms1.end\n uniforms2.texSize = uniforms1.texSize\n\n bindProp(this, 'blurRadius', uniforms1.blurRadius, 'value')\n bindProp(this, 'gradientRadius', uniforms1.gradientRadius, 'value')\n\n this.updateFocusLine();\n\n ['start', 'end'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.updateFocusLine, { deep: true })\n })\n\n this.pass1.setSize = (width: number, height: number) => {\n uniforms1.texSize.value.set(width, height)\n }\n\n this.initEffectPass(this.pass1)\n this.composer.addPass(this.pass2)\n },\n unmounted() {\n if (this.composer && this.pass2) this.composer.removePass(this.pass2)\n },\n methods: {\n updateFocusLine() {\n this.uniforms1.start.value.copy(this.start)\n this.uniforms1.end.value.copy(this.end)\n const dv = new Vector2().copy(this.end as Vector2).sub(this.start as Vector2).normalize()\n this.uniforms1.delta.value.copy(dv)\n this.uniforms2.delta.value.set(-dv.y, dv.x)\n },\n },\n __hmrId: 'TiltShiftPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const size = new Vector2(this.renderer.size.width, this.renderer.size.height)\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'UnrealBloomPass',\n})\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport ZoomBlur from '../shaders/ZoomBlur'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n center: { type: Object as PropType, default: () => ({ x: 0.5, y: 0.5 }) },\n strength: { type: Number, default: 0.5 },\n },\n created() {\n const pass = new ShaderPass(ZoomBlur)\n\n bindProp(this, 'center', pass.uniforms.center, 'value')\n bindProp(this, 'strength', pass.uniforms.strength, 'value')\n\n this.initEffectPass(pass)\n },\n __hmrId: 'ZoomBlurPass',\n})\n","import { App, createApp as _createApp } from 'vue'\nimport * as TROIS from './index'\n\nexport const TroisJSVuePlugin = {\n install(app: App): void {\n const comps = [\n 'Camera',\n 'OrthographicCamera',\n 'PerspectiveCamera',\n 'Raycaster',\n 'Renderer',\n 'Scene',\n 'Group',\n\n 'CubeCamera',\n\n 'AmbientLight',\n 'DirectionalLight',\n 'HemisphereLight',\n 'PointLight',\n 'RectAreaLight',\n 'SpotLight',\n\n 'BasicMaterial',\n 'LambertMaterial',\n 'MatcapMaterial',\n 'PhongMaterial',\n 'PhysicalMaterial',\n 'PointsMaterial',\n 'ShaderMaterial',\n 'StandardMaterial',\n 'SubSurfaceMaterial',\n 'ToonMaterial',\n\n 'Texture',\n 'CubeTexture',\n\n 'BufferGeometry',\n\n 'Mesh',\n\n 'Box', 'BoxGeometry',\n 'Circle', 'CircleGeometry',\n 'Cone', 'ConeGeometry',\n 'Cylinder', 'CylinderGeometry',\n 'Dodecahedron', 'DodecahedronGeometry',\n 'Icosahedron', 'IcosahedronGeometry',\n 'Lathe', 'LatheGeometry',\n 'Octahedron', 'OctahedronGeometry',\n 'Plane', 'PlaneGeometry',\n 'Polyhedron', 'PolyhedronGeometry',\n 'Ring', 'RingGeometry',\n 'Sphere', 'SphereGeometry',\n 'Tetrahedron', 'TetrahedronGeometry',\n 'Text',\n 'Torus', 'TorusGeometry',\n 'TorusKnot', 'TorusKnotGeometry',\n 'Tube', 'TubeGeometry',\n\n 'Image',\n 'InstancedMesh',\n 'Points',\n 'Sprite',\n\n 'FbxModel',\n 'GltfModel',\n\n 'BokehPass',\n 'EffectComposer',\n 'FilmPass',\n 'FXAAPass',\n 'HalftonePass',\n 'RenderPass',\n 'SAOPass',\n 'SMAAPass',\n 'SSAOPass',\n 'TiltShiftPass',\n 'UnrealBloomPass',\n 'ZoomBlurPass',\n ]\n\n comps.forEach(comp => {\n // @ts-ignore\n app.component(comp, TROIS[comp])\n })\n },\n}\n\nexport function createApp(params: any): App {\n return _createApp(params).use(TroisJSVuePlugin)\n}\n","import { Texture, TextureLoader } from 'three'\n\nexport interface TextureConfigInterface {\n src: string\n}\n\nexport interface TexturesInterface {\n loader: TextureLoader\n count: number\n textures: Texture[],\n loadProgress: number\n loadTextures(images: TextureConfigInterface[], cb: {() : void}): void\n dispose(): void\n}\n\nexport default function useTextures(): TexturesInterface {\n const obj: TexturesInterface = {\n loader: new TextureLoader(),\n count: 0,\n textures: [],\n loadProgress: 0,\n loadTextures,\n dispose,\n }\n return obj\n\n function loadTextures(images: TextureConfigInterface[], cb: {() : void}) {\n obj.count = images.length\n obj.textures.splice(0)\n obj.loadProgress = 0\n Promise.all(images.map(loadTexture)).then(cb)\n }\n\n function loadTexture(img: TextureConfigInterface, index: number) {\n return new Promise(resolve => {\n obj.loader.load(\n img.src,\n texture => {\n obj.loadProgress += 1 / obj.count\n obj.textures[index] = texture\n resolve(texture)\n }\n )\n })\n }\n\n function dispose() {\n obj.textures.forEach(t => t.dispose())\n }\n}\n"],"names":["applyObjectProps","dst","options","setter","key","value","bindObjectProp","src","prop","apply","r","toRef","watch","bindObjectProps","ref","setFromProp","o","bindProps","props","bindProp","srcProp","dstProp","_dstProp","propsValues","exclude","values","lerp","value1","value2","amount","limit","val","min","max","MATCAP_ROOT","DEFAULT_MATCAP","getMatcapUrl","hash","format","fileName","getMatcapFormatString","useRaycaster","camera","resetPosition","Vector3","raycaster","Raycaster","position","plane","Plane","coords","objects","recursive","usePointer","domElement","intersectObjects","intersectRecursive","touch","resetOnEnd","onEnter","onMove","onLeave","onClick","onIntersectEnter","onIntersectOver","onIntersectMove","onIntersectLeave","onIntersectClick","Vector2","positionN","positionV3","obj","addListeners","removeListeners","intersect","reset","updatePosition","event","x","y","rect","_intersectObjects","getIntersectObjects","intersects","offObjects","iMeshes","_a","_b","_c","object","component","getComponent","InstancedMesh","overEvent","enterEvent","moveEvent","leaveEvent","pointerEnter","pointerMove","pointerClick","pointerLeave","parent","useThree","params","config","size","beforeRenderCallbacks","renderer","createRenderer","init","dispose","render","renderC","setSize","addIntersectObject","removeIntersectObject","WebGLRenderer","onResize","initPointer","cameraCtrl","OrbitControls","onBeforeRender","pointerConf","pointer","cb","c","i","elt","width","height","pCamera","oCamera","wsize","getCameraSize","vFOV","h","RendererInjectionKey","defineComponent","attrs","initCallbacks","mountedCallbacks","afterRenderCallbacks","resizeCallbacks","canvas","matches","three","watchEffect","renderFn","scene","composer","e","type","callbacks","index","time","p$1","cameraSetProp","updateProjectionMatrix","OrthographicCamera","Camera","inject","p","PerspectiveCamera","v","SceneInjectionKey","Scene","provide","setBackground","Color","Texture","pointerProps","o3d","instance","getCurrentInstance","Group","Object3D","emptyCallBack","CubeCamera","rendererC","cubeRT","WebGLCubeRenderTarget","RGBAFormat","LinearMipmapLinearFilter","cubeCamera","updateRT","m","onUnmounted","MeshInjectionKey","Mesh","mesh","TMesh","geometry","material","prev","oldGeo","meshComponent","name","createGeometry","Geometry","bufferAttributes","BufferGeometry","attribute","bufferAttribute","BufferAttribute","geometryComponent","comp","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","ExtrudeGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PlaneGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","ShapeGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","Curve","curve","CatmullRomCurve3","TubeGeometry","points","updateTubeGeometryPoints","tube","radialSegments","radius","tubularSegments","closed","frames","pAttribute","nAttribute","normal","P","updateSegment","N","B","j","sin","cos","n","SpotLight","DirectionalLight","light","AmbientLight","Light","HemisphereLight","PointLight","RectAreaLight","RectAreaLightUniformsLib","lightHelper","RectAreaLightHelper","MaterialInjectionKey","BaseMaterial","needsUpdate","dstVal","texture","materialComponent","createMaterial","BasicMaterial","opts","MeshBasicMaterial","LambertMaterial","MeshLambertMaterial","PhongMaterial","MeshPhongMaterial","PhysicalMaterial","MeshPhysicalMaterial","PointsMaterial","TPointsMaterial","ShadowMaterial","TShadowMaterial","StandardMaterial","MeshStandardMaterial","ToonMaterial","MeshToonMaterial","MatcapMaterial","TextureLoader","MeshMatcapMaterial","defaultVertexShader","defaultFragmentShader","ShaderMaterial","replaceAll","string","find","replace","meshphongFragHead","ShaderChunk","meshphongFragBody","SubsurfaceScatteringShader","UniformsUtils","ShaderLib","SubSurfaceMaterial","Material","uniforms","d","t","CubeTexture","CubeReflectionMapping","CubeTextureLoader","VideoTexture","video","Box","Circle","Cone","Cylinder","Dodecahedron","Icosahedron","Lathe","Octahedron","Polyhedron","Ring","Sphere","Tetrahedron","Text","loader","FontLoader","font","TextGeometry","Torus","TorusKnot","Tube","DoubleSide","screen","iW","iH","iRatio","w","Sprite","SpriteMaterial","iWidth","iHeight","positions","Points","model","progress","error","GLTF","Model","GLTFLoader","gltf","FBX","FBXLoader","fbx","ComposerInjectionKey","EffectComposer","pass","s$1","RenderPass","EffectPass","BokehPass","FilmPass","FXAAPass","ShaderPass","FXAAShader","resolution","HalftonePass","SMAAPass","SSAOPass","r$1","DefaultShader","TiltShift","uniforms1","uniforms2","dv","UnrealBloomPass","ZoomBlur","TroisJSVuePlugin","app","TROIS","createApp","_createApp","useTextures","loadTextures","images","loadTexture","img","resolve"],"mappings":"y7GAIO,SAASA,EACdC,EACAC,EACAC,EACM,CACFD,aAAmB,QACrB,OAAO,QAAQA,CAAO,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAK,IAAM,CAC5CF,EAAQA,EAAOF,EAAKG,EAAKC,CAAK,EAC7BJ,EAAIG,GAAOC,CAClB,CAAC,CAEL,CAEO,SAASC,EACdC,EACAC,EACAP,EACAQ,EAAQ,GACRN,EACiB,CACbM,GAAOT,EAAiBC,EAAKM,EAAIC,GAAOL,CAAM,EAClD,MAAMO,EAAIC,GAAMJ,EAAKC,CAAI,EACzB,OAAOI,EAAMF,EAAIL,GAAU,CAAEL,EAAiBC,EAAKI,EAAOF,CAAM,CAAE,CAAC,CACrE,CAEO,SAASU,GACdN,EACAN,EACAQ,EAAQ,GACRN,EACiB,CACbM,GAAOT,EAAiBC,EAAKM,EAAKJ,CAAM,EAC5C,MAAMO,EAAII,GAAIP,CAAG,EACjB,OAAOK,EAAMF,EAAIL,GAAU,CAAEL,EAAiBC,EAAKI,EAAOF,CAAM,CAAE,EAAG,CAAE,KAAM,EAAK,CAAC,CACrF,CAEO,SAASY,EAAYC,EAA4BR,EAAqC,CACvFA,aAAgB,QAClB,OAAO,QAAQA,CAAI,EAAE,QAAQ,CAAC,CAACJ,EAAKC,CAAK,IAAM,CAC7CW,EAAEZ,GAAOC,CACX,CAAC,CAEL,UAEgBY,GAAUV,EAAUW,EAAiBjB,EAAgB,CACnEiB,EAAM,QAAQV,GAAQ,CACpBW,EAASZ,EAAKC,EAAMP,EAAKO,CAAI,CAC/B,CAAC,CACH,CAEgB,SAAAW,EAASZ,EAAUa,EAAiBnB,EAAUoB,EAAwB,CACpF,MAAMC,EAAWD,GAAWD,EACtBN,EAAMH,GAAMJ,EAAKa,CAAO,EAC1BN,EAAI,iBAAiB,QACvBC,EAAYd,EAAIqB,GAAWR,EAAI,KAAK,EACpCF,EAAME,EAAMT,GAAU,CAAEU,EAAYd,EAAIqB,GAAWjB,CAAK,CAAE,EAAG,CAAE,KAAM,EAAK,CAAC,IAEvES,EAAI,QAAU,SAAWb,EAAIqB,GAAYf,EAAIa,IACjDR,EAAME,EAAMT,GAAU,CAAEJ,EAAIqB,GAAYjB,CAAM,CAAC,EAEnD,CAEgB,SAAAkB,EAAYL,EAAgCM,EAAoB,CAAA,EAA6B,CAC3G,MAAMC,EAAkC,CAAA,EACxC,OAAA,OAAO,QAAQP,CAAK,EAAE,QAAQ,CAAC,CAACd,EAAKC,CAAK,IAAM,EAC1C,CAACmB,GAAW,CAACA,EAAQ,SAASpB,CAAG,KACnCqB,EAAOrB,GAAOC,EAElB,CAAC,EACMoB,CACT,CAEgB,SAAAC,GAAKC,EAAgBC,EAAgBC,EAAwB,CAC3E,OAAAA,EAASA,EAAS,EAAI,EAAIA,EAC1BA,EAASA,EAAS,EAAI,EAAIA,EACnBF,GAAUC,EAASD,GAAUE,CACtC,UAEgBC,GAAMC,EAAaC,EAAaC,EAAqB,CACnE,OAAOF,EAAMC,EAAMA,EAAOD,EAAME,EAAMA,EAAMF,CAC9C,CAGA,MAAMG,GAAc,yFACdC,GAAiB,8BAEhB,SAASC,GAAaC,EAAOF,GAAgBG,EAAS,KAAc,CACzE,MAAMC,EAAW,GAAGF,IAAOG,GAAsBF,CAAM,QACvD,MAAO,GAAGJ,MAAeI,KAAUC,GACrC,CAEA,SAASC,GAAsBF,EAAgB,CAC7C,OAAQA,OACD,IACH,MAAO,YACJ,KACH,MAAO,kBAEP,MAAO,kBAEP,MAAO,iBAEP,MAAO,GAEb,CC/FA,SAAwBG,GAAavC,EAAuD,CAC1F,KAAM,CACJ,OAAAwC,EACA,cAAAC,EAAgB,IAAIC,GAAQ,EAAG,EAAG,CAAC,CACrC,EAAI1C,EAEE2C,EAAY,IAAIC,GAChBC,EAAWJ,EAAc,MAAM,EAC/BK,EAAQ,IAAIC,GAAM,IAAIL,GAAQ,EAAG,EAAG,CAAC,EAAG,CAAC,EAa/C,MAAO,CACL,SAAAG,EACA,eAbsBG,GAAoB,CAC1CL,EAAU,cAAcK,EAAQR,CAAM,EACtCA,EAAO,kBAAkBM,EAAM,MAAM,EACrCH,EAAU,IAAI,eAAeG,EAAOD,CAAQ,CAC9C,EAUE,UARgB,CAACG,EAAiBC,EAAqBC,EAAY,MACnEP,EAAU,cAAcK,EAAQR,CAAM,EAC/BG,EAAU,iBAAiBM,EAASC,CAAS,EAOtD,CACF,CCeA,SAAwBC,GAAWnD,EAAmD,CACpF,KAAM,CACJ,OAAAwC,EACA,WAAAY,EACA,iBAAAC,EACA,mBAAAC,EAAqB,GACrB,MAAAC,EAAQ,GACR,WAAAC,EAAa,GACb,QAAAC,EAAU,IAAM,CAAA,EAChB,OAAAC,EAAS,IAAM,CAAC,EAChB,QAAAC,EAAU,IAAM,CAAA,EAChB,QAAAC,EAAU,IAAM,CAChB,EAAA,iBAAAC,EAAmB,IAAM,CACzB,EAAA,gBAAAC,EAAkB,IAAM,GACxB,gBAAAC,EAAkB,IAAM,CAAC,EACzB,iBAAAC,EAAmB,IAAM,CAAC,EAC1B,iBAAAC,EAAmB,IAAM,CAC3B,CAAA,EAAIjE,EAEE6C,EAAW,IAAIqB,EAAQ,EAAG,CAAC,EAC3BC,EAAY,IAAID,EAAQ,EAAG,CAAC,EAE5BvB,EAAYJ,GAAa,CAAE,OAAAC,CAAO,CAAC,EACnC4B,EAAazB,EAAU,SAEvB0B,EAAwB,CAC5B,SAAAxB,EACA,UAAAsB,EACA,WAAAC,EACA,iBAAAf,EACA,UAAW,GACX,aAAAiB,GACA,gBAAAC,GACA,UAAAC,EACF,EAEA,OAAOH,EAEP,SAASI,GAAQ,CACf5B,EAAS,IAAI,EAAG,CAAC,EACjBsB,EAAU,IAAI,EAAG,CAAC,EAClBC,EAAW,IAAI,EAAG,EAAG,CAAC,CACxB,CAEA,SAASM,EAAeC,EAAgC,CACtD,IAAIC,EAAGC,EAEHF,EAAM,SAAWA,EAAM,QAAQ,OAAS,GAC1CC,EAAiBD,EAAO,QAAQ,GAAG,QACnCE,EAAiBF,EAAO,QAAQ,GAAG,UAEnCC,EAAiBD,EAAO,QACxBE,EAAiBF,EAAO,SAG1B,MAAMG,EAAO1B,EAAW,wBACxBP,EAAS,EAAI+B,EAAIE,EAAK,KACtBjC,EAAS,EAAIgC,EAAIC,EAAK,IACtBX,EAAU,EAAKtB,EAAS,EAAIiC,EAAK,MAAS,EAAI,EAC9CX,EAAU,EAAI,EAAEtB,EAAS,EAAIiC,EAAK,QAAU,EAAI,EAChDnC,EAAU,eAAewB,CAAS,CACpC,CAEA,SAASK,IAAY,CACnB,MAAMO,EAAoBC,GAAoB,EAC9C,GAAID,EAAkB,OAAQ,CAC5B,MAAME,EAAatC,EAAU,UAAUwB,EAAWY,EAAmBzB,CAAkB,EACjF4B,EAAyB,CAAC,GAAGH,CAAiB,EAC9CI,EAA2B,GAEjCF,EAAW,QAAQT,GAAa,CA5HtC,IAAAY,EAAAC,EAAAC,EA6HQ,KAAM,CAAE,OAAAC,CAAO,EAAIf,EACbgB,EAAYC,GAAaF,CAAM,EAGrC,GAAIA,aAAkBG,GAAe,CACnC,GAAIP,EAAQ,QAAQI,CAAM,IAAM,GAAI,OACpCJ,EAAQ,KAAKI,CAAM,CACrB,CAEA,GAAI,CAACA,EAAO,SAAS,KAAM,CACzBA,EAAO,SAAS,KAAO,GACvB,MAAMI,GAA4C,CAAE,KAAM,cAAe,KAAM,GAAM,UAAAH,EAAW,UAAAhB,CAAU,EACpGoB,GAA6C,CAAE,GAAGD,GAAW,KAAM,cAAe,EACxF7B,EAAgB6B,EAAS,EACzB9B,EAAiB+B,EAAU,GAC3BR,EAAAI,GAAA,YAAAA,EAAW,gBAAX,MAAAJ,EAAA,KAAAI,EAA2BG,EAAAA,GAC3BN,EAAAG,GAAA,KAAA,OAAAA,EAAW,iBAAX,MAAAH,EAAA,KAAAG,EAA4BI,EAC9B,CAAA,CAEA,MAAMC,GAA4C,CAAE,KAAM,cAAe,UAAAL,EAAW,UAAAhB,CAAU,EAC9FT,EAAgB8B,EAAS,GACzBP,EAAAE,GAAA,KAAAA,OAAAA,EAAW,gBAAX,MAAAF,EAAA,KAAAE,EAA2BK,EAAAA,EAE3BX,EAAW,OAAOA,EAAW,QAAmBK,CAAO,EAAG,CAAC,CAC7D,CAAC,EAEDL,EAAW,QAAQK,GAAU,CAvJnC,IAAAH,EAAAC,EAwJQ,MAAMG,EAAYC,GAAaF,CAAM,EACrC,GAAIA,EAAO,SAAS,KAAM,CACxBA,EAAO,SAAS,KAAO,GACvB,MAAMI,EAA4C,CAAE,KAAM,cAAe,KAAM,GAAO,UAAAH,CAAU,EAC1FM,EAA6C,CAAE,GAAGH,EAAW,KAAM,cAAe,EACxF7B,EAAgB6B,CAAS,EACzB3B,EAAiB8B,CAAU,GAC3BV,EAAAI,GAAA,KAAAA,OAAAA,EAAW,gBAAX,MAAAJ,EAAA,KAAAI,EAA2BG,IAC3BN,EAAAG,GAAA,YAAAA,EAAW,iBAAX,MAAAH,EAAA,KAAAG,EAA4BM,CAAAA,CAC9B,CACF,CAAC,CACH,CACF,CAEA,SAASC,GAAapB,EAAgC,CACpDD,EAAeC,CAAK,EACpBlB,EAAQ,CAAE,KAAM,eAAgB,SAAAZ,EAAU,UAAAsB,EAAW,WAAAC,CAAW,CAAC,CACnE,CAEA,SAAS4B,GAAYrB,EAAgC,CACnDD,EAAeC,CAAK,EACpBjB,EAAO,CAAE,KAAM,cAAe,SAAAb,EAAU,UAAAsB,EAAW,WAAAC,CAAW,CAAC,EAC/DI,IACF,CAEA,SAASyB,GAAatB,EAAgC,CACpDD,EAAeC,CAAK,EACpB,MAAMI,EAAoBC,GAAoB,EAC9C,GAAID,EAAkB,OAAQ,CAC5B,MAAME,EAAatC,EAAU,UAAUwB,EAAWY,EAAmBzB,CAAkB,EACjF6B,EAA2B,GACjCF,EAAW,QAAQT,GAAa,CAvLtC,IAAAY,EAwLQ,KAAM,CAAE,OAAAG,CAAO,EAAIf,EACbgB,EAAYC,GAAaF,CAAM,EAGrC,GAAIA,aAAkBG,GAAe,CACnC,GAAIP,EAAQ,QAAQI,CAAM,IAAM,GAAI,OACpCJ,EAAQ,KAAKI,CAAM,CACrB,CAEA,MAAMZ,EAAwC,CAAE,KAAM,QAAS,UAAAa,EAAW,UAAAhB,CAAU,EACpFP,EAAiBU,CAAK,GACtBS,EAAAI,GAAA,KAAAA,OAAAA,EAAW,UAAX,MAAAJ,EAAA,KAAAI,EAAqBb,CAAAA,CACvB,CAAC,CACH,CACAf,EAAQ,CAAE,KAAM,QAAS,SAAAf,EAAU,UAAAsB,EAAW,WAAAC,CAAW,CAAC,CAC5D,CAEA,SAAS8B,IAAe,CAClB1C,GAAYiB,EAAM,EACtBd,EAAQ,CAAE,KAAM,cAAe,CAAC,CAClC,CAEA,SAAS8B,GAAaF,EAAkB,CACtC,GAAIA,EAAO,SAAS,UAAW,OAAOA,EAAO,SAAS,UAEtD,IAAIY,EAASZ,EAAO,OACpB,KAAOY,GAAQ,CACb,GAAIA,EAAO,SAAS,UAClB,OAAOA,EAAO,SAAS,UAEzBA,EAASA,EAAO,MAClB,CAGF,CAEA,SAASnB,IAAsB,CAC7B,OAAI,OAAO3B,GAAqB,WACvBA,EAAAA,EACKA,CAChB,CAEA,SAASiB,IAAe,CACtBlB,EAAW,iBAAiB,aAAc2C,EAAY,EACtD3C,EAAW,iBAAiB,YAAa4C,EAAW,EACpD5C,EAAW,iBAAiB,aAAc8C,EAAY,EACtD9C,EAAW,iBAAiB,QAAS6C,EAAY,EAC7C1C,IACFH,EAAW,iBAAiB,aAAc2C,EAAY,EACtD3C,EAAW,iBAAiB,YAAa4C,EAAW,EACpD5C,EAAW,iBAAiB,WAAY8C,EAAY,GAEtD7B,EAAI,UAAY,EAClB,CAEA,SAASE,IAAkB,CACzBnB,EAAW,oBAAoB,aAAc2C,EAAY,EACzD3C,EAAW,oBAAoB,YAAa4C,EAAW,EACvD5C,EAAW,oBAAoB,aAAc8C,EAAY,EACzD9C,EAAW,oBAAoB,QAAS6C,EAAY,EAEpD7C,EAAW,oBAAoB,aAAc2C,EAAY,EACzD3C,EAAW,oBAAoB,YAAa4C,EAAW,EACvD5C,EAAW,oBAAoB,WAAY8C,EAAY,EACvD7B,EAAI,UAAY,EAClB,CACF,CCzMwB+B,SAAAA,GAASC,EAA8C,CAE7E,MAAMC,EAA+B,CACnC,UAAW,GACX,MAAO,GACP,UAAW,GACX,UAAW,GACX,QAAS,GACT,OAAQ,GACR,MAAO,IACP,OAAQ,GACV,EAEID,GACF,OAAO,QAAQA,CAAM,EAAE,QAAQ,CAAC,CAACnG,EAAKC,CAAK,IAAM,CAC/CmG,EAAOpG,GAAOC,CAChB,CAAC,EAIH,MAAMoG,EAAsB,CAC1B,MAAO,EAAG,OAAQ,EAClB,OAAQ,EAAG,QAAS,EACpB,MAAO,CACT,EAEMC,EAAsC,CAAC,EAEvCnD,EAA+B,CAE/BoD,EAAAA,EAAWC,EAAe,EAG1BrC,EAAsB,CAC1B,OAAAiC,EACA,SAAAG,EACA,KAAAF,EACA,KAAAI,EACA,QAAAC,EACA,OAAAC,EACA,QAAAC,EACA,QAAAC,EACA,mBAAAC,EAAoB,sBAAAC,CACtB,EAEA,OAAO5C,EAKP,SAASqC,GAAgC,CACvC,MAAMD,EAAW,IAAIS,GAAc,CAAE,OAAQZ,EAAO,OAAQ,UAAWA,EAAO,UAAW,MAAOA,EAAO,MAAO,GAAGA,EAAO,MAAO,CAAC,EAChI,OAAAG,EAAS,UAAYH,EAAO,UACrBG,CACT,CAKA,SAASE,GAAO,CACd,GAAI,CAACtC,EAAI,MACP,OAAA,QAAQ,MAAM,eAAe,EACtB,GAGT,GAAI,CAACA,EAAI,OACP,OAAQ,QAAA,MAAM,gBAAgB,EACvB,GAYT,GATIiC,EAAO,QACTa,EACA,EAAA,OAAO,iBAAiB,SAAUA,CAAQ,GACjCb,EAAO,OAASA,EAAO,QAChCS,EAAQT,EAAO,MAAOA,EAAO,MAAM,EAGrCc,EAEId,EAAAA,EAAO,UAAW,CACpB,MAAMe,EAAa,IAAIC,GAAcjD,EAAI,OAAQA,EAAI,SAAS,UAAU,EACpEiC,EAAO,qBAAqB,QAC9B,OAAO,QAAQA,EAAO,SAAS,EAAE,QAAQ,CAAC,CAACpG,EAAKC,CAAK,IAAM,CAEzDkH,EAAWnH,GAAOC,CACpB,CAAC,EAEHoH,EAAe,IAAM,CAAEF,EAAW,OAAS,CAAA,CAAC,EAC5ChD,EAAI,WAAagD,CACnB,CAEA,MAAO,EACT,CAKA,SAASD,GAAc,CACrB,IAAII,EAAsC,CACxC,OAAQnD,EAAI,OACZ,WAAYA,EAAI,SAAU,WAC1B,iBAAAhB,CACF,EAEIiD,EAAO,SAAWA,EAAO,mBAAmB,SAC9CkB,EAAc,CAAE,GAAGA,EAAa,GAAGlB,EAAO,OAAQ,GAGpD,MAAMmB,EAAUpD,EAAI,QAAUlB,GAAWqE,CAAW,GAChDlB,EAAO,SAAWjD,EAAiB,UACrCoE,EAAQ,aAAa,EACjBD,EAAY,gBAAkB,SAChCD,EAAeE,EAAQ,SAAS,EAGtC,CAKA,SAASF,EAAeG,EAAgB,CACtClB,EAAsB,KAAKkB,CAAE,CAC/B,CAKA,SAASb,GAAS,CAEhBL,EAAsB,QAAQmB,GAAKA,EAAG,CAAA,EACtCtD,EAAI,SAAU,OAAOA,EAAI,MAAQA,EAAI,MAAO,CAC9C,CAKA,SAASyC,GAAU,CAEjBN,EAAsB,QAAQmB,GAAKA,EAAE,CAAC,EACtCtD,EAAI,SAAU,OAAA,CAChB,CAKA,SAAS2C,EAAmBlG,EAAa,CACnCuC,EAAiB,QAAQvC,CAAC,IAAM,IAClCuC,EAAiB,KAAKvC,CAAC,EAGrBuD,EAAI,SAAW,CAACA,EAAI,QAAQ,WAC9BA,EAAI,QAAQ,aAAa,CAE7B,CAKA,SAAS4C,EAAsBnG,EAAa,CAC1C,MAAM8G,EAAIvE,EAAiB,QAAQvC,CAAC,EAChC8G,IAAM,IACRvE,EAAiB,OAAOuE,EAAG,CAAC,EAG1BvD,EAAI,SAAW,CAACiC,EAAO,SAAWjD,EAAiB,SAAW,GAChEgB,EAAI,QAAQ,gBAEhB,CAAA,CAKA,SAASuC,GAAU,CAEjB,OAAO,oBAAoB,SAAUO,CAAQ,EACzC9C,EAAI,SAASA,EAAI,QAAQ,gBAAgB,EACzCA,EAAI,YAAYA,EAAI,WAAW,QAAQ,EACvCA,EAAI,UAAUA,EAAI,SAAS,QAAA,CACjC,CAKA,SAAS8C,GAAW,CAxOtB,IAAA/B,EAyOI,GAAIkB,EAAO,SAAW,SACpBS,EAAQ,OAAO,WAAY,OAAO,WAAW,MACxC,CACL,MAAMc,EAAMxD,EAAI,SAAU,WAAW,WACjCwD,GAAKd,EAAQc,EAAI,YAAaA,EAAI,YAAY,CACpD,EACAzC,EAAAkB,EAAO,WAAP,MAAAlB,EAAA,KAAAkB,EAAkBC,CAAAA,CACpB,CAKA,SAASQ,EAAQe,EAAeC,EAAgB,CAC9CxB,EAAK,MAAQuB,EACbvB,EAAK,OAASwB,EACdxB,EAAK,MAAQuB,EAAQC,EAErB1D,EAAI,SAAU,QAAQyD,EAAOC,EAAQ,EAAK,EAO1C,MAAMvF,EAAkB6B,EAAI,OAC5B,GAAI7B,EAAO,OAAS,oBAAqB,CACvC,MAAMwF,EAA8BxF,EACpCwF,EAAQ,OAASzB,EAAK,MACtByB,EAAQ,uBAAuB,CACjC,CAEA,GAAIxF,EAAO,OAAS,qBAAsB,CACxC,MAAMyF,EAA+BzF,EACrC+D,EAAK,OAAS0B,EAAQ,MAAQA,EAAQ,KACtC1B,EAAK,QAAU0B,EAAQ,IAAMA,EAAQ,MACvC,KAAO,CACL,MAAMC,EAAQC,IACd5B,EAAK,OAAS2B,EAAM,GACpB3B,EAAK,QAAU2B,EAAM,EACvB,CACF,CAKA,SAASC,GAAgB,CACvB,MAAM3F,EAA6B6B,EAAI,OACjC+D,EAAQ5F,EAAO,IAAM,KAAK,GAAM,IAChC6F,EAAI,EAAI,KAAK,IAAID,EAAO,CAAC,EAAI,KAAK,IAAI5F,EAAO,SAAS,CAAC,EAE7D,MAAO,CADG6F,EAAI7F,EAAO,OACV6F,CAAC,CACd,CACF,CC9LO,MAAMC,EAA8D,OAAO,UAAU,EAE5F,IAAeC,GAAAA,EAAgB,CAC7B,KAAM,WACN,MAAO,CACL,OAAQ,CAAE,KAAM,OAA6C,QAAS,KAAO,CAAA,EAAI,EACjF,UAAW,QACX,MAAO,QACP,UAAW,CAAE,KAAM,QAAS,QAAS,EAAK,EAC1C,UAAW,CAAE,KAAM,CAAC,QAAS,MAAM,EAAkD,QAAS,EAAM,EACpG,QAAS,CAAE,KAAM,CAAC,QAAS,MAAM,EAAuD,QAAS,EAAM,EACvG,OAAQ,CAAE,KAAM,CAAC,QAAS,MAAM,EAAiC,QAAS,EAAM,EAChF,OAAQ,QACR,MAAO,OACP,OAAQ,OACR,WAAY,OACZ,GAAI,QACJ,MAAO,CAAE,KAAM,OAAQ,QAAS,KAAO,CAAA,EAAI,EAC3C,QAAS,QACX,EACA,aAAc,GACd,MAAMvH,EAAO,CAAE,MAAAwH,CAAM,EAA2B,CAC9C,MAAMC,EAAoC,CAAA,EACpCC,EAA0C,CAC1ClC,EAAAA,EAA8C,CAAC,EAC/CmC,EAA6C,GAC7CC,EAAwC,CAAA,EAExCC,EAAS,SAAS,cAAc,QAAQ,EAC9C,OAAO,QAAQL,CAAK,EAAE,QAAQ,CAAC,CAACtI,EAAKC,CAAK,IAAM,CAC9C,MAAM2I,EAAU5I,EAAI,MAAM,sBAAsB,EAC5C4I,EACFD,EAAO,iBAAiBC,EAAQ,GAAG,cAAe3I,CAAoB,EAEtE0I,EAAO,aAAa3I,EAAKC,CAAe,CAE5C,CAAC,EAED,MAAMmG,EAA+B,CACnC,OAAAuC,EACA,OAAQ7H,EAAM,OACd,UAAWA,EAAM,UACjB,MAAOA,EAAM,MACb,UAAWA,EAAM,UACjB,UAAWA,EAAM,UACjB,QAASA,EAAM,QACf,OAAQA,EAAM,MAChB,EAEIA,EAAM,QAAOsF,EAAO,MAAQ,SAAStF,EAAM,KAAK,GAChDA,EAAM,SAAQsF,EAAO,OAAS,SAAStF,EAAM,MAAM,GAEvD,MAAM+H,EAAQ3C,GAASE,CAAM,EAC7BlG,EAAeY,EAAO,QAAS+H,EAAM,QAAQ,EAE7CC,GAAY,IAAM,CACZhI,EAAM,YAAY+H,EAAM,SAAS,cAAc/H,EAAM,UAAU,CACrE,CAAC,EAED,MAAMiI,EAAuB,IAAM,GAEnC,MAAO,CACL,OAAAJ,EACA,MAAAE,EACA,SAAUA,EAAM,SAChB,KAAMA,EAAM,KACZ,SAAAE,EACA,IAAK,GACL,cAAAR,EACA,iBAAAC,EACA,sBAAAlC,EACA,qBAAAmC,EACA,gBAAAC,CACF,CACF,EACA,SAAU,CACR,OAAQ,CACN,IAAK,UAA+B,CAAE,OAAO,KAAK,MAAM,MAAO,EAC/D,IAAK,SAASpG,EAAsB,CAAE,KAAK,MAAM,OAASA,CAAO,CACnE,EACA,MAAO,CACL,IAAK,UAA8B,CAAE,OAAO,KAAK,MAAM,KAAM,EAC7D,IAAK,SAAS0G,EAAoB,CAAE,KAAK,MAAM,MAAQA,CAAM,CAC/D,EACA,SAAU,CACR,IAAK,UAAuC,CAAE,OAAO,KAAK,MAAM,QAAS,EACzE,IAAK,SAASC,EAAgC,CAAE,KAAK,MAAM,SAAWA,CAAS,CACjF,CACF,EACA,SAAU,CACR,MAAO,CACL,CAACb,GAAiC,IACpC,CACF,EACA,SAAU,CA7LZ,IAAAlD,EA+LI,KAAK,IAAI,WAAW,aAAa,KAAK,OAAQ,KAAK,GAAG,EAElD,KAAK,MAAM,KAAA,IACT,KAAK,MAAM,UACb,KAAK,SAAW,KAAK,MAAM,SAI7B,KAAK,MAAM,OAAO,SAAYmB,GAAS,CACrC,KAAK,gBAAgB,QAAQ6C,GAAKA,EAAE,CAAE,KAAM,SAAU,SAAU,KAAM,KAAA7C,CAAK,CAAC,CAAC,CAC/E,EAEI,KAAK,SACP,KAAK,SAAS,UAAU,QAAU,IAGpC,KAAK,SAAW,KAAK,MAAM,SAAW,KAAK,MAAM,QAAU,KAAK,MAAM,OAEtE,KAAK,cAAc,QAAQ6C,GAAKA,EAAE,CAAE,KAAM,OAAQ,SAAU,IAAK,CAAC,CAAC,GACnEhE,EAAA,KAAK,UAAL,MAAAA,EAAA,KAAA,KAAe,MAEX,KAAK,IACP,KAAK,SAAS,GAAG,QAAU,GAC3B,KAAK,SAAS,iBAAiB,KAAK,MAAM,GAE1C,sBAAsB,KAAK,UAAU,GAIzC,KAAK,iBAAiB,QAAQgE,GAAKA,EAAE,CAAE,KAAM,UAAW,SAAU,IAAK,CAAC,CAAC,CAC3E,EACA,eAAgB,CACd,KAAK,OAAO,OAAA,EACZ,KAAK,sBAAwB,CAAC,EAC9B,KAAK,qBAAuB,CAAA,EAC5B,KAAK,IAAM,GACX,KAAK,MAAM,QACb,CAAA,EACA,QAAS,CACP,OAAO1B,EAAsB,CAAE,KAAK,YAAY,OAAQA,CAAE,CAAE,EAC5D,UAAUA,EAAyB,CAAE,KAAK,YAAY,UAAWA,CAAE,CAAE,EACrE,eAAeA,EAAwB,CAAE,KAAK,YAAY,eAAgBA,CAAE,CAAE,EAC9E,gBAAgBA,EAAwB,CAAE,KAAK,eAAe,eAAgBA,CAAE,CAAE,EAClF,cAAcA,EAAwB,CAAE,KAAK,YAAY,cAAeA,CAAE,CAAE,EAC5E,eAAeA,EAAwB,CAAE,KAAK,eAAe,cAAeA,CAAE,CAAE,EAChF,SAASA,EAAwB,CAAE,KAAK,YAAY,SAAUA,CAAE,CAAE,EAClE,UAAUA,EAAwB,CAAE,KAAK,eAAe,SAAUA,CAAE,CAAE,EAEtE,YAAY2B,EAAc3B,EAAuB,CAC7B,KAAK,aAAa2B,CAAI,EAC9B,KAAK3B,CAAE,CACnB,EAEA,eAAe2B,EAAc3B,EAAuB,CAClD,MAAM4B,EAAY,KAAK,aAAaD,CAAI,EAClCE,EAAQD,EAAU,QAAQ5B,CAAE,EAC9B6B,IAAU,IAAID,EAAU,OAAOC,EAAO,CAAC,CAC7C,EAEA,aAAaF,EAAc,CACzB,OAAIA,IAAS,OACJ,KAAK,cACHA,IAAS,UACX,KAAK,iBACHA,IAAS,eACX,KAAK,sBACHA,IAAS,cACX,KAAK,qBAEL,KAAK,eAEhB,EAEA,OAAOG,EAAc,CACnB,KAAK,sBAAsB,QAAQJ,GAAKA,EAAE,CAAE,KAAM,eAAgB,SAAU,KAAM,KAAAI,CAAK,CAAC,CAAC,EAEzF,KAAK,SAAS,CAAE,SAAU,KAAM,KAAAA,CAAK,CAAC,EACtC,KAAK,qBAAqB,QAAQJ,GAAKA,EAAE,CAAE,KAAM,cAAe,SAAU,KAAM,KAAAI,CAAK,CAAC,CAAC,CACzF,EACA,WAAWA,EAAc,CACnB,KAAK,KAAK,sBAAsB,KAAK,UAAU,EACnD,KAAK,OAAOA,CAAI,CAClB,CACF,EACA,QAAS,CACP,OAAO,KAAK,OAAO,QAAU,KAAK,OAAO,QAAY,EAAA,CACvD,CAAA,EACA,QAAS,UACX,CAAC,EC7QDC,GAAelB,EAAgB,CAI7B,MAAO,CACL,MAAO,CAAE,KAAM,OAAQ,QAAS,KAAO,CAAC,EAAG,CAC7C,EAQA,QAAS,CACP,OAAO,KAAK,OAAO,QAAU,KAAK,OAAO,UAAY,CAAA,CACvD,CACF,CAAC,EAEM,SAASmB,GAAclH,EAAatC,EAAaC,EAAYwJ,EAAyB,GAAM,CACjGnH,EAAOtC,GAAOC,EACVwJ,GAAwBnH,EAAO,uBACrC,CAAA,CCzBA,IAAAoH,GAAerB,EAAgB,CAC7B,QAASsB,GACT,KAAM,qBACN,MAAO,CACL,KAAM,CAAE,KAAM,OAAQ,QAAS,EAAG,EAClC,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,EAClC,IAAK,CAAE,KAAM,OAAQ,QAAS,CAAE,EAChC,OAAQ,CAAE,KAAM,OAAQ,QAAS,EAAG,EACpC,KAAM,CAAE,KAAM,OAAQ,QAAS,EAAI,EACnC,IAAK,CAAE,KAAM,OAAQ,QAAS,GAAK,EACnC,KAAM,CAAE,KAAM,OAAQ,QAAS,CAAE,EACjC,SAAU,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAG,CACpG,EACA,MAAM7I,EAAO,CACX,MAAMyF,EAAWqD,EAAOxB,CAAoB,EAC5C,GAAI,CAAC7B,EAAU,CACb,QAAQ,MAAM,oBAAoB,EAClC,MACF,CAEA,MAAMjE,EAAS,IAAIoH,GAAmB5I,EAAM,KAAMA,EAAM,MAAOA,EAAM,IAAKA,EAAM,OAAQA,EAAM,KAAMA,EAAM,GAAG,EAC7G,OAAAyF,EAAS,OAASjE,EAElBvB,EAASD,EAAO,WAAYwB,CAAM,EAClCpC,EAAeY,EAAO,QAASwB,EAAQ,GAAMkH,EAAa,EAE1D,CAAC,OAAQ,QAAS,MAAO,SAAU,OAAQ,MAAO,MAAM,EAAE,QAAQK,GAAK,CAErErJ,EAAM,IAAMM,EAAM+I,GAAK5J,GAAU,CAC/BuJ,GAAclH,EAAQuH,EAAG5J,CAAK,CAChC,CAAC,CACH,CAAC,EAEM,CAAE,SAAAsG,EAAU,OAAAjE,CAAO,CAC5B,EACA,QAAS,oBACX,CAAC,ECpCDwH,GAAezB,EAAgB,CAC7B,QAASsB,GACT,KAAM,oBACN,MAAO,CACL,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,IAAK,CAAE,KAAM,OAAQ,QAAS,GAAK,EACnC,IAAK,CAAE,KAAM,OAAQ,QAAS,EAAG,EACjC,KAAM,CAAE,KAAM,OAAQ,QAAS,EAAI,EACnC,SAAU,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAG,EAClG,OAAQ,CAAE,KAAM,OAA0C,QAAS,IAAK,CAC1E,EACA,MAAM7I,EAAO,CAlBf,IAAAoE,EAmBI,MAAMqB,EAAWqD,EAAOxB,CAAoB,EAC5C,GAAI,CAAC7B,EAAU,CACb,QAAQ,MAAM,oBAAoB,EAClC,MACF,CAEA,MAAMjE,EAAS,IAAIwH,GAAkBhJ,EAAM,IAAKA,EAAM,OAAQA,EAAM,KAAMA,EAAM,GAAG,EACnF,OAAAyF,EAAS,OAASjE,EAElBvB,EAASD,EAAO,WAAYwB,CAAM,EAE9BxB,EAAM,QAAQwB,EAAO,QAAO4C,EAAApE,EAAM,OAAO,IAAb,KAAAoE,EAAkB,EAAGpE,EAAM,OAAO,EAAGA,EAAM,OAAO,CAAC,EACnFN,EAAM,IAAMM,EAAM,OAASiJ,GAAM,CA/BrC,IAAA7E,EA+BuC5C,EAAO,QAAO4C,EAAA6E,EAAE,IAAF,KAAA7E,EAAO,EAAG6E,EAAE,EAAGA,EAAE,CAAC,CAAE,EAAG,CAAE,KAAM,EAAK,CAAC,EAEtF7J,EAAeY,EAAO,QAASwB,EAAQ,GAAMkH,EAAa,EAE1D,CAAC,SAAU,MAAO,MAAO,MAAM,EAAE,QAAQK,GAAK,CAE5CrJ,EAAM,IAAMM,EAAM+I,GAAK5J,GAAU,CAC/BuJ,GAAclH,EAAQuH,EAAG5J,CAAK,CAChC,CAAC,CACH,CAAC,EAEM,CAAE,SAAAsG,EAAU,OAAAjE,CAAO,CAC5B,EACA,QAAS,mBACX,CAAC,ECzCM,MAAM0H,GAAyC,OAAO,OAAO,EAEpE,IAAAC,GAAe5B,EAAgB,CAC7B,KAAM,QACN,MAAO,CACL,WAAY,CAAC,OAAQ,OAAQ,MAAM,CACrC,EACA,MAAMvH,EAAO,CACX,MAAMyF,EAAWqD,EAAOxB,CAAoB,EACtCY,EAAQ,IAAIiB,GAElB,GAAI,CAAC1D,EAAU,CACb,QAAQ,MAAM,oBAAoB,EAClC,MACF,CAEAA,EAAS,MAAQyC,EACjBkB,GAAQF,GAAmBhB,CAAK,EAEhC,MAAMmB,EAAiBlK,GAAqB,CACtC,CAACA,IACD,OAAOA,GAAU,UAAY,OAAOA,GAAU,SAC5C+I,EAAM,sBAAsBoB,EAAOpB,EAAM,WAAW,IAAI/I,CAAK,EAC5D+I,EAAM,WAAa,IAAIoB,EAAMnK,CAAK,EAC9BA,aAAiBoK,KAC1BrB,EAAM,WAAa/I,GAEvB,EAEA,OAAAkK,EAAcrJ,EAAM,UAAU,EAC9BN,EAAM,IAAMM,EAAM,WAAYqJ,CAAa,EAKpC,CAAE,MAAAnB,EAAO,IAHHpI,GAAsB,CAAEoI,EAAM,IAAIpI,CAAC,CAAE,EAG7B,OAFLA,GAAsB,CAAEoI,EAAM,OAAOpI,CAAC,CAAE,CAE5B,CAC9B,EACA,QAAS,CACP,OAAO,KAAK,OAAO,QAAU,KAAK,OAAO,UAAY,CACvD,CAAA,EACA,QAAS,OACX,CAAC,ECjBM,MAAM0J,GAAe,CAC1B,eAAgB,SAChB,cAAe,SACf,cAAe,SACf,eAAgB,SAChB,cAAe,SACf,YAAa,SACb,QAAS,QACX,EAiBA,IAAA1J,EAAeyH,EAAgB,CAC7B,KAAM,WAEN,OAAQ,CACN,SAAUD,EACV,MAAO4B,EACT,EACA,MAAO,CAAC,UAAW,OAAO,EAC1B,MAAO,CACL,SAAU,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAG,EAClG,SAAU,CAAE,KAAM,OAAwC,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAG,EAChG,MAAO,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,MAAO,KAAM,EAAG,EAC7G,OAAQ,CAAE,KAAM,OAA0C,QAAS,IAAK,EACxE,SAAU,CAAE,KAAM,OAAQ,QAAS,KAAO,CAAA,EAAI,EAC9C,QAAS,CAAE,KAAM,QAAS,QAAS,EAAK,EACxC,MAAO,CAAE,KAAM,OAAQ,QAAS,KAAO,GAAI,EAC3C,WAAY,CAAE,KAAM,QAAS,QAAS,EAAM,EAC5C,cAAe,CAAE,KAAM,QAAS,QAAS,EAAM,EAC/C,GAAGM,EACL,EACA,OAAgC,CAE9B,MAAO,CAAA,CACT,EACA,SAAU,CACH,KAAK,UACR,QAAQ,MAAM,yBAAyB,EAEpC,KAAK,OACR,QAAQ,MAAM,sBAAsB,CAExC,EACA,WAAY,CACL,KAAK,eAAe,KAAK,mBAC1B,KAAK,KACH,KAAK,UAAU,KAAK,SAAS,MAAM,sBAAsB,KAAK,GAAG,CAEzE,EACA,QAAS,CACP,aAAaC,EAAe,CA5FhC,IAAArF,EA6FM,KAAK,IAAMqF,EACXA,EAAI,SAAS,UAAY,MAErB,KAAK,gBACP,KAAK,eACL,KAAK,eACL,KAAK,gBACL,KAAK,eACL,KAAK,aACL,KAAK,UACD,KAAK,UAAU,KAAK,SAAS,MAAM,mBAAmBA,CAAG,EAG/DxJ,EAAS,KAAM,WAAYwJ,CAAG,EAC9BxJ,EAAS,KAAM,WAAYwJ,CAAG,EAC9BxJ,EAAS,KAAM,QAASwJ,CAAG,EAC3BxJ,EAAS,KAAM,WAAYwJ,EAAI,QAAQ,EACvCxJ,EAAS,KAAM,UAAWwJ,CAAG,EAE7BrK,EAAe,KAAM,QAASqK,CAAG,EAEjC,KAAK,MAAM,UAAWA,CAAG,EAErB,KAAK,QAAQA,EAAI,QAAOrF,EAAA,KAAK,OAAO,IAAZ,KAAAA,EAAiB,EAAG,KAAK,OAAO,EAAG,KAAK,OAAO,CAAC,EAC5E1E,EAAM,IAAM,KAAK,OAASuJ,GAAM,CArHtC,IAAA7E,EAqHwCqF,EAAI,QAAOrF,EAAA6E,EAAE,IAAF,KAAA7E,EAAO,EAAG6E,EAAE,EAAGA,EAAE,CAAC,CAAE,EAAG,CAAE,KAAM,EAAK,CAAC,EAElF,KAAK,OAAS,KAAK,YACd,KAAK,aACJ,KAAK,YAAY,EAAG,KAAK,MAAM,QAAS,IAAI,EAC3C,QAAQ,MAAM,kCAAkC,EAEzD,EACA,WAAiD,CAC/C,IAAI9D,EAAS,KAAK,QAElB,GAAI,CAACA,EAAQ,CAEX,MAAMuE,EAAWC,KACbD,GAAYA,EAAS,SAAQvE,EAASuE,EAAS,OAAO,IAC5D,CAEA,KAAOvE,GAAQ,CACb,GAAKA,EAAe,IAAK,OAAOA,EAChCA,EAASA,EAAO,OAClB,CAEF,EACA,YAAYrF,EAAc,CACxB,MAAM2J,EAAM3J,GAAK,KAAK,IACtB,OAAI,KAAK,QACN,KAAK,OAAe,IAAI2J,CAAG,EACrB,IAEF,EACT,EACA,iBAAiB3J,EAAc,CAC7B,MAAM2J,EAAM3J,GAAK,KAAK,IACtB,OAAI,KAAK,QACN,KAAK,OAAe,OAAO2J,CAAG,EACxB,IAEF,EACT,EACA,IAAI3J,EAAa,CA5JrB,IAAAsE,GA4JuBA,EAAA,KAAK,MAAL,MAAAA,EAAU,IAAItE,CAAG,CAAA,EACpC,OAAOA,EAAa,CA7JxB,IAAAsE,GA6J0BA,EAAA,KAAK,MAAL,MAAAA,EAAU,OAAOtE,CAAAA,CAAG,CAC5C,EACA,QAAS,CACP,OAAO,KAAK,OAAO,QAAU,KAAK,OAAO,QAAY,EAAA,EACvD,EACA,QAAS,UACX,CAAC,EC/JD8J,GAAerC,EAAgB,CAC7B,KAAM,QACN,QAASsC,EACT,OAAQ,CACN,MAAO,CACL,MAAO,IAAID,EACb,CACF,EACA,SAAU,CACR,KAAK,aAAa,KAAK,KAAK,CAC9B,EACA,QAAS,OACX,CAAC,ECXD,MAAME,GAA8C,IAAM,CAAA,EAO1D,IAAevC,GAAAA,EAAgB,CAC7B,KAAM,YACN,MAAO,CACL,eAAgB,CAAE,KAAM,SAAoD,QAASuC,EAAc,EACnG,cAAe,CAAE,KAAM,SAAoD,QAASA,EAAc,EAClG,cAAe,CAAE,KAAM,SAAoD,QAASA,EAAc,EAClG,eAAgB,CAAE,KAAM,SAAoD,QAASA,EAAc,EACnG,QAAS,CAAE,KAAM,SAAoD,QAASA,EAAc,EAC5F,cAAe,CAAE,KAAM,OAAQ,QAAS,MAAO,EAC/C,mBAAoB,CAAE,KAAM,QAAS,QAAS,EAAM,CACtD,EACA,OAAiC,CAE/B,MAAO,CAAE,SADQhB,EAAOxB,CAAoB,CAC1B,CACpB,EACA,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,CAClB,QAAQ,MAAM,oBAAoB,EAClC,MACF,CACA,MAAM7B,EAAW,KAAK,SAEtB,KAAK,SAAS,UAAU,IAAM,CACxB,CAACA,EAAS,SAEd,KAAK,QAAUtD,GAAW,CACxB,OAAQsD,EAAS,OACjB,WAAYA,EAAS,OACrB,iBAAkB,IAAMA,EAAS,MAAQA,EAAS,MAAM,SAAW,GACnE,mBAAoB,KAAK,mBACzB,iBAAkB,KAAK,eACvB,gBAAiB,KAAK,cACtB,gBAAiB,KAAK,cACtB,iBAAkB,KAAK,eACvB,iBAAkB,KAAK,OACzB,CAAC,EACD,KAAK,QAAQ,aAAA,EAET,KAAK,gBAAkB,SACzBA,EAAS,eAAe,KAAK,QAAQ,SAAS,EAElD,CAAC,CACH,EACA,WAAY,CAvDd,IAAArB,EAwDQ,KAAK,UACP,KAAK,QAAQ,gBACbA,GAAAA,EAAA,KAAK,WAAL,MAAAA,EAAe,gBAAgB,KAAK,QAAQ,SAEhD,EAAA,EACA,QAAS,CACP,MAAO,CAAA,CACT,EACA,QAAS,WACX,CAAC,ECtDD2F,GAAexC,EAAgB,CAC7B,QAASsC,EACT,MAAO,CACL,WAAY,CAAE,KAAM,OAAQ,QAAS,GAAI,EACzC,eAAgB,CAAE,KAAM,OAAQ,QAAS,EAAI,EAC7C,cAAe,CAAE,KAAM,OAAQ,QAAS,GAAK,EAC7C,WAAY,QACZ,WAAY,CAAE,KAAM,MAA2B,QAAS,IAAO,CAAI,CAAA,CACrE,EACA,MAAM7J,EAAiC,CACrC,MAAMgK,EAAYlB,EAAOxB,CAAoB,EAC7C,GAAI,CAAC0C,GAAa,CAACA,EAAU,MAC3B,OAAA,QAAQ,MAAM,0BAA0B,EACjC,CAAA,EAGT,MAAMvE,EAAWuE,EAAU,SAAU9B,EAAQ8B,EAAU,MACjDC,EAAS,IAAIC,GAAsBlK,EAAM,WAAY,CAAE,OAAQmK,GAAY,gBAAiB,GAAM,UAAWC,EAAyB,CAAC,EACvIC,EAAa,IAAIN,GAAW/J,EAAM,eAAgBA,EAAM,cAAeiK,CAAM,EAC7EK,EAAW,IAAM,CACrBtK,EAAM,WAAW,QAAQuK,GAAK,CAAEA,EAAE,QAAU,EAAM,CAAC,EACnDF,EAAW,OAAO5E,EAAUyC,CAAK,EACjClI,EAAM,WAAW,QAAQuK,GAAK,CAAEA,EAAE,QAAU,EAAK,CAAC,CACpD,EAEA,OAAIvK,EAAM,YACRgK,EAAU,eAAeM,CAAQ,EACjCE,GAAY,IAAM,CAAER,EAAU,gBAAgBM,CAAQ,CAAE,CAAC,GAEzDN,EAAU,UAAUM,CAAQ,EAGvB,CAAE,OAAAL,EAAQ,WAAAI,EAAY,SAAAC,CAAS,CACxC,EACA,SAAU,CACJ,KAAK,YAAY,KAAK,aAAa,KAAK,UAAU,CACxD,EACA,QAAS,CACP,MAAO,CACT,CAAA,EACA,QAAS,YACX,CAAC,ECjCM,MAAMG,EAAsD,OAAO,MAAM,EAE1EC,EAAOnD,EAAgB,CAC3B,KAAM,OACN,QAASsC,EACT,MAAO,CACL,WAAY,QACZ,cAAe,OACjB,EACA,OAA4B,CAC1B,MAAO,CAAA,CACT,EACA,SAAU,CACR,MAAO,CACL,CAACY,GAA6B,IAChC,CACF,EACA,SAAU,CAEJ,CAAC,KAAK,MAAQ,CAAC,KAAK,SAAS,KAAK,SACxC,CAAA,EACA,QAAS,CACP,UAAW,CACT,MAAME,EAAO,IAAIC,GAAM,KAAK,SAAU,KAAK,QAAQ,EAEnD3K,EAAS,KAAM,aAAc0K,CAAI,EACjC1K,EAAS,KAAM,gBAAiB0K,CAAI,EAEpC,KAAK,KAAOA,EACZ,KAAK,aAAaA,CAAI,CACxB,EACA,gBAAiB,CAAA,EACjB,oBAAoB3K,EAAwC,CAC1D,OAAO,KAAKA,CAAK,EAAE,QAAQV,GAAQ,CAEjCI,EAAM,IAAM,KAAKJ,GAAO,IAAM,CAC5B,KAAK,gBACP,CAAA,CAAC,CACH,CAAC,CACH,EACA,YAAYuL,EAA0B,CACpC,KAAK,SAAWA,EACZ,KAAK,OAAM,KAAK,KAAK,SAAWA,EACtC,EACA,YAAYC,EAAiC,CAC3C,GAAI,MAAM,QAAQA,CAAQ,GAAK,CAAC,KAAK,SACnC,KAAK,SAAWA,EACZ,KAAK,OAAM,KAAK,KAAK,SAAWA,OAC/B,CACL,IAAIC,EAAO,KAAK,SACZ,MAAM,QAAQA,CAAI,EACpBA,EAAK,KAAKD,CAAQ,EAElBC,EAAO,CAACA,EAAMD,CAAQ,EAExB,KAAK,SAAWC,EACZ,KAAK,OAAM,KAAK,KAAK,SAAWA,EACtC,CACF,EACA,iBAAkB,CAChB,MAAMC,EAAS,KAAK,SACpB,KAAK,eAAe,EAChB,KAAK,MAAQ,KAAK,WAAU,KAAK,KAAK,SAAW,KAAK,UAC1DA,GAAA,MAAAA,EAAQ,QAAA,CACV,CACF,EACA,WAAY,CAGV,GADI,KAAK,UAAU,KAAK,SAAS,QAAQ,EACrC,KAAK,SACP,GAAI,MAAM,QAAQ,KAAK,QAAQ,EAC7B,UAAWT,KAAK,KAAK,SAAUA,EAAE,eAEjC,KAAK,SAAS,QAGpB,CAAA,EACA,QAAS,MACX,CAAC,WAKeU,EACdC,EACAlL,EACAmL,EACA,CACA,OAAO5D,EAAgB,CACrB,KAAA2D,EACA,QAASR,EACT,MAAA1K,EACA,SAAU,CACR,KAAK,iBACL,KAAK,oBAAoBA,CAAK,CAChC,EACA,QAAS,CACP,gBAAiB,CACf,KAAK,SAAWmL,EAAe,IAAI,CACrC,CACF,CACF,CAAC,CACH,CClGMC,MAAAA,GAAW7D,EAAgB,CAC/B,MAAO,CAAC,SAAS,EACjB,MAAO,CACL,QAAS,OACT,QAAS,OACT,QAAS,OACT,WAAY,CAAE,KAAM,MAAsD,QAAS,IAAO,CAAI,CAAA,CAChG,EAEA,OAAQ,CACN,KAAMkD,CACR,EACA,OAAgC,CAC9B,MAAO,EACT,EACA,SAAU,CACR,GAAI,CAAC,KAAK,KAAM,CACd,QAAQ,MAAM,qBAAqB,EACnC,MACF,CAEA,KAAK,eAAe,EACpB,KAAK,eACD,EAAA,KAAK,UAAU,KAAK,KAAK,YAAY,KAAK,QAAQ,EAEtD,OAAO,KAAK,KAAK,MAAM,EAAE,QAAQnL,GAAQ,CAEvCI,EAAM,IAAM,KAAKJ,GAAO,KAAK,eAAe,CAC9C,CAAC,CACH,EACA,WAAY,CArDd,IAAA8E,GAsDIA,EAAA,KAAK,WAAL,MAAAA,EAAe,QAAA,CACjB,EACA,QAAS,CACP,gBAAiB,CACf,MAAMiH,EAA4C,CAAA,EAC5CR,EAAW,IAAIS,GACrB,KAAK,WAAW,QAAQC,GAAa,CACnC,GAAIA,EAAU,MAAQA,EAAU,UAAYA,EAAU,MAAO,CAC3D,MAAMC,EAAkBH,EAAiBE,EAAU,MAAQ,IAAIE,GAAgBF,EAAU,MAAOA,EAAU,SAAUA,EAAU,UAAU,EACxIV,EAAS,aAAaU,EAAU,KAAMC,CAAe,CACvD,CACF,CAAC,EACDX,EAAS,mBAAA,EACTA,EAAS,SAAS,UAAY,KAC9B,KAAK,SAAWA,EAChB,KAAK,MAAM,UAAWA,CAAQ,CAChC,EACA,gBAAiB,CACX,CAAC,KAAK,WACN,KAAK,SAAS,KAAK,SAAS,QAAQ,KAAK,OAAO,EAChD,KAAK,SAAS,KAAK,SAAS,QAAQ,KAAK,OAAO,EAChD,KAAK,SAAS,KAAK,SAAS,QAAQ,KAAK,OAAO,EACtD,EACA,iBAAkB,CAChB,MAAMG,EAAS,KAAK,SACpB,KAAK,eAAe,EACpB,KAAK,eACD,EAAA,KAAK,UAAY,KAAK,MAAM,KAAK,KAAK,YAAY,KAAK,QAAQ,EACnEA,GAAA,MAAAA,EAAQ,QACV,CAAA,CACF,EACA,QAAS,CAAE,MAAO,CAAA,CAAG,CACvB,CAAC,EAKM,SAASU,EACdR,EACAlL,EACAmL,EACA,CACA,OAAO5D,EAAgB,CACrB,KAAA2D,EACA,QAASE,GACT,MAAApL,EACA,QAAS,CACP,gBAAiB,CACf,KAAK,SAAWmL,EAAe,IAAI,EACnC,KAAK,SAAS,SAAS,UAAY,KACnC,KAAK,MAAM,UAAW,KAAK,QAAQ,CACrC,CACF,CACF,CAAC,CACH,OCzGanL,GAAQ,CACnB,KAAM,OACN,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,EAClC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,EAClC,cAAe,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC1C,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,cAAe,CAAE,KAAM,OAAQ,QAAS,CAAE,CAC5C,EAEgB,SAAAmL,GAAeQ,EAAwB,CACrD,OAAIA,EAAK,KACA,IAAIC,GAAYD,EAAK,KAAMA,EAAK,KAAMA,EAAK,KAAMA,EAAK,cAAeA,EAAK,eAAgBA,EAAK,aAAa,EAE5G,IAAIC,GAAYD,EAAK,MAAOA,EAAK,OAAQA,EAAK,MAAOA,EAAK,cAAeA,EAAK,eAAgBA,EAAK,aAAa,CAE3H,CAEA,IAAeD,GAAAA,EAAkB,cAAe1L,GAAOmL,EAAc,EClB9D,MAAMnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,SAAU,CAAE,KAAM,OAAQ,QAAS,CAAE,EACrC,WAAY,CAAE,KAAM,OAAQ,QAAS,CAAE,EACvC,YAAa,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,CAAE,CACpD,EAEgB,SAAAmL,GAAeQ,EAA2B,CACxD,OAAO,IAAIE,GAAeF,EAAK,OAAQA,EAAK,SAAUA,EAAK,WAAYA,EAAK,WAAW,CACzF,CAEA,IAAAE,GAAeH,EAAkB,iBAAkB1L,GAAOmL,EAAc,ECX3D,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,UAAW,CAAE,KAAM,QAAS,QAAS,EAAM,EAC3C,WAAY,CAAE,KAAM,OAAQ,QAAS,CAAE,EACvC,YAAa,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,CAAE,CACpD,EAEgB,SAAAmL,GAAeQ,EAAyB,CACtD,OAAO,IAAIG,GAAaH,EAAK,OAAQA,EAAK,OAAQA,EAAK,eAAgBA,EAAK,eAAgBA,EAAK,UAAWA,EAAK,WAAYA,EAAK,WAAW,CAC/I,CAEA,IAAAG,GAAeJ,EAAkB,eAAgB1L,GAAOmL,EAAc,QCdzDnL,GAAQ,CACnB,UAAW,CAAE,KAAM,OAAQ,QAAS,CAAE,EACtC,aAAc,CAAE,KAAM,OAAQ,QAAS,CAAE,EACzC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,UAAW,CAAE,KAAM,QAAS,QAAS,EAAM,EAC3C,WAAY,CAAE,KAAM,OAAQ,QAAS,CAAE,EACvC,YAAa,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,CAAE,CACpD,EAEO,SAASmL,GAAeQ,EAA6B,CAC1D,OAAO,IAAII,GAAiBJ,EAAK,UAAWA,EAAK,aAAcA,EAAK,OAAQA,EAAK,eAAgBA,EAAK,eAAgBA,EAAK,UAAWA,EAAK,WAAYA,EAAK,WAAW,CACzK,CAEA,IAAeD,GAAAA,EAAkB,mBAAoB1L,GAAOmL,EAAc,ECf7D,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,CACrC,EAEO,SAASmL,GAAeQ,EAAiC,CAC9D,OAAO,IAAIK,GAAqBL,EAAK,OAAQA,EAAK,MAAM,CAC1D,CAEA,IAAeD,GAAAA,EAAkB,uBAAwB1L,GAAOmL,EAAc,ECRjE,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,CAAC,OAAQ,KAAK,CAA+B,EAC7D,QAAS,CAAE,KAAM,MAA2C,CAC9D,EAEO,SAASmL,GAAeQ,EAA4B,CACzD,OAAO,IAAIM,GAAgBN,EAAK,OAAQA,EAAK,OAAO,CACtD,CAEA,IAAAM,GAAeP,EAAkB,kBAAmB1L,GAAOmL,EAAc,ECV5D,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,CACrC,EAEO,SAASmL,GAAeQ,EAAgC,CAC7D,OAAO,IAAIO,GAAoBP,EAAK,OAAQA,EAAK,MAAM,CACzD,CAEA,IAAeD,GAAAA,EAAkB,sBAAuB1L,GAAOmL,EAAc,ECThE,MAAAnL,GAAQ,CACnB,OAAQ,MACR,SAAU,CAAE,KAAM,OAAQ,QAAS,EAAG,EACtC,SAAU,CAAE,KAAM,OAAQ,QAAS,CAAE,EACrC,UAAW,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,CAAE,CAClD,EAEO,SAASmL,GAAeQ,EAA0B,CACvD,OAAO,IAAIQ,GAAcR,EAAK,OAAQA,EAAK,SAAUA,EAAK,SAAUA,EAAK,SAAS,CACpF,CAEA,IAAAQ,GAAeT,EAAkB,gBAAiB1L,GAAOmL,EAAc,ECX1D,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,CACrC,EAEO,SAASmL,GAAeQ,EAA+B,CAC5D,OAAO,IAAIS,GAAmBT,EAAK,OAAQA,EAAK,MAAM,CACxD,CAEA,IAAeD,GAAAA,EAAkB,qBAAsB1L,GAAOmL,EAAc,ECTrE,MAAMnL,GAAQ,CACnB,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,EAClC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,cAAe,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC1C,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,CAC7C,EAEO,SAASmL,GAAeQ,EAA0B,CACvD,OAAO,IAAIU,GAAcV,EAAK,MAAOA,EAAK,OAAQA,EAAK,cAAeA,EAAK,cAAc,CAC3F,CAEA,IAAAU,GAAeX,EAAkB,gBAAiB1L,GAAOmL,EAAc,ECX1D,MAAAnL,GAAQ,CACnB,SAAU,MACV,QAAS,MACT,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,CACrC,EAEgB,SAAAmL,GAAeQ,EAA+B,CAC5D,OAAO,IAAIW,GAAmBX,EAAK,SAAUA,EAAK,QAASA,EAAK,OAAQA,EAAK,MAAM,CACrF,CAEA,IAAeD,GAAAA,EAAkB,qBAAsB1L,GAAOmL,EAAc,ECXrE,MAAMnL,GAAQ,CACnB,YAAa,CAAE,KAAM,OAAQ,QAAS,EAAI,EAC1C,YAAa,CAAE,KAAM,OAAQ,QAAS,CAAE,EACxC,cAAe,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC1C,YAAa,CAAE,KAAM,OAAQ,QAAS,CAAE,EACxC,WAAY,CAAE,KAAM,OAAQ,QAAS,CAAE,EACvC,YAAa,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,CAAE,CACpD,WAEgBmL,GAAeQ,EAAyB,CACtD,OAAO,IAAIY,GAAaZ,EAAK,YAAaA,EAAK,YAAaA,EAAK,cAAeA,EAAK,YAAaA,EAAK,WAAYA,EAAK,WAAW,CACrI,CAEA,IAAeD,GAAAA,EAAkB,eAAgB1L,GAAOmL,EAAc,ECbzD,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,cAAe,CAAE,KAAM,OAAQ,QAAS,EAAG,EAC3C,eAAgB,CAAE,KAAM,OAAQ,QAAS,EAAG,EAC5C,SAAU,CAAE,KAAM,OAAQ,QAAS,CAAE,EACrC,UAAW,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,CAAE,EAChD,WAAY,CAAE,KAAM,OAAQ,QAAS,CAAE,EACvC,YAAa,CAAE,KAAM,OAAQ,QAAS,KAAK,EAAG,CAChD,EAEgB,SAAAmL,GAAeQ,EAA2B,CACxD,OAAO,IAAIa,GAAeb,EAAK,OAAQA,EAAK,cAAeA,EAAK,eAAgBA,EAAK,SAAUA,EAAK,UAAWA,EAAK,WAAYA,EAAK,WAAW,CAClJ,CAEA,IAAeD,GAAAA,EAAkB,iBAAkB1L,GAAOmL,EAAc,ECb3D,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,CAAC,OAAQ,KAAK,CAA+B,EAC7D,cAAe,CAAE,KAAM,MAAO,CAChC,EAEO,SAASmL,GAAeQ,EAA0B,CACvD,OAAO,IAAIc,GAAcd,EAAK,OAAQA,EAAK,aAAa,CAC1D,CAEA,IAAAc,GAAef,EAAkB,gBAAiB1L,GAAOmL,EAAc,ECV1D,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,CACrC,EAEO,SAASmL,GAAeQ,EAAgC,CAC7D,OAAO,IAAIe,GAAoBf,EAAK,OAAQA,EAAK,MAAM,CACzD,CAEA,IAAeD,GAAAA,EAAkB,sBAAuB1L,GAAOmL,EAAc,ECThE,MAAAnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,KAAM,CAAE,KAAM,OAAQ,QAAS,EAAI,EACnC,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,gBAAiB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC5C,IAAK,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,CAAE,CAC5C,EAEO,SAASmL,GAAeQ,EAA0B,CACvD,OAAO,IAAIgB,GAAchB,EAAK,OAAQA,EAAK,KAAMA,EAAK,eAAgBA,EAAK,gBAAiBA,EAAK,GAAG,CACtG,CAEA,IAAAgB,GAAejB,EAAkB,gBAAiB1L,GAAOmL,EAAc,ECZhE,MAAMnL,GAAQ,CACnB,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,KAAM,CAAE,KAAM,OAAQ,QAAS,EAAI,EACnC,gBAAiB,CAAE,KAAM,OAAQ,QAAS,EAAG,EAC7C,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,EAAG,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC9B,EAAG,CAAE,KAAM,OAAQ,QAAS,CAAE,CAChC,EAEO,SAASmL,GAAeQ,EAA8B,CAC3D,OAAO,IAAIiB,GAAkBjB,EAAK,OAAQA,EAAK,KAAMA,EAAK,gBAAiBA,EAAK,eAAgBA,EAAK,EAAGA,EAAK,CAAC,CAChH,CAEA,IAAeD,GAAAA,EAAkB,oBAAqB1L,GAAOmL,EAAc,ECZpE,MAAMnL,GAAQ,CACnB,OAAQ,MACR,KAAM6M,GACN,gBAAiB,CAAE,KAAM,OAAQ,QAAS,EAAG,EAC7C,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,OAAQ,CAAE,KAAM,QAAS,QAAS,EAAM,CAC1C,EAEO,SAAS1B,GAAeQ,EAAyB,CACtD,IAAImB,EACJ,OAAInB,EAAK,OACPmB,EAAQ,IAAIC,GAAiBpB,EAAK,MAAM,EAC/BA,EAAK,KACdmB,EAAQnB,EAAK,KAEb,QAAQ,MAAM,+BAA+B,EAExC,IAAIqB,GAAaF,EAAOnB,EAAK,gBAAiBA,EAAK,OAAQA,EAAK,eAAgBA,EAAK,MAAM,CACpG,CAEA,IAAAqB,GAAezF,EAAgB,CAC7B,QAAS6D,GACT,MAAApL,GACA,QAAS,CACP,gBAAiB,CACf,KAAK,SAAWmL,GAAe,IAAI,CACrC,EAEA,aAAa8B,EAAmB,CAC9BC,GAAyB,KAAK,SAA0BD,CAAM,CAChE,CACF,CACF,CAAC,EAEe,SAAAC,GAAyBC,EAAoBF,EAAyB,CACpF,MAAMH,EAAQ,IAAIC,GAAiBE,CAAM,EACnC,CAAE,eAAAG,EAAgB,OAAAC,EAAQ,gBAAAC,EAAiB,OAAAC,CAAO,EAAIJ,EAAK,WAC3DK,EAASV,EAAM,oBAAoBQ,EAAiBC,CAAM,EAChEJ,EAAK,SAAWK,EAAO,SACvBL,EAAK,QAAUK,EAAO,QACtBL,EAAK,UAAYK,EAAO,UACxBL,EAAK,WAAW,KAAOL,EAEvB,MAAMW,EAAaN,EAAK,aAAa,UAAU,EACzCO,EAAaP,EAAK,aAAa,QAAQ,EAEvCQ,EAAS,IAAIjM,GACbkM,EAAI,IAAIlM,GAEd,QAASkF,EAAI,EAAGA,EAAI0G,EAAiB1G,IACnCiH,EAAcjH,CAAC,EAEjBiH,EAAcP,CAAe,EAE7BH,EAAK,WAAW,SAAS,YAAc,GACvCA,EAAK,WAAW,OAAO,YAAc,GAErC,SAASU,EAAcjH,EAAW,CAChCkG,EAAM,WAAWlG,EAAI0G,EAAiBM,CAAC,EACvC,MAAME,EAAIN,EAAO,QAAQ5G,GACnBmH,EAAIP,EAAO,UAAU5G,GAC3B,QAASoH,EAAI,EAAGA,GAAKZ,EAAgBY,IAAK,CACxC,MAAM/E,EAAI+E,EAAIZ,EAAiB,KAAK,GAAK,EACnCa,EAAM,KAAK,IAAIhF,CAAC,EAChBiF,EAAM,CAAC,KAAK,IAAIjF,CAAC,EACvB0E,EAAO,EAAKO,EAAMJ,EAAE,EAAIG,EAAMF,EAAE,EAChCJ,EAAO,EAAKO,EAAMJ,EAAE,EAAIG,EAAMF,EAAE,EAChCJ,EAAO,EAAKO,EAAMJ,EAAE,EAAIG,EAAMF,EAAE,EAChCJ,EAAO,UACP,EAAA,MAAMpF,EAAS3B,GAAKwG,EAAiB,GAAKY,EAC1CN,EAAW,OAAOnF,EAAOoF,EAAO,EAAGA,EAAO,EAAGA,EAAO,CAAC,EACrDF,EAAW,OAAOlF,EAAOqF,EAAE,EAAIP,EAASM,EAAO,EAAGC,EAAE,EAAIP,EAASM,EAAO,EAAGC,EAAE,EAAIP,EAASM,EAAO,CAAC,CACpG,CACF,CACF,CCtEA,IAAAQ,EAAe5G,EAAgB,CAC7B,QAASsC,EACT,KAAM,QACN,MAAO,CACL,MAAO,CAAE,KAAM,OAAQ,QAAS,SAAU,EAC1C,UAAW,CAAE,KAAM,OAAQ,QAAS,CAAE,EACtC,WAAY,CAAE,KAAM,QAAS,QAAS,EAAM,EAC5C,cAAe,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,IAAK,EAAG,GAAI,EAAG,EACrG,aAAc,CAAE,KAAM,OAAQ,QAAS,KAAO,CAAI,EAAA,CACpD,EACA,OAA6B,CAC3B,MAAO,CAAA,CACT,EACA,WAAY,EACN,KAAK,iBAAiBuE,IAAa,KAAK,iBAAiBC,KAC3D,KAAK,iBAAiB,KAAK,MAAM,MAAM,CAE3C,EACA,QAAS,CACP,UAAUC,EAAc,CACtB,KAAK,MAAQA,EAERA,EAAc,SACjBA,EAAM,WAAa,KAAK,WAExBzO,EAAYyO,EAAM,OAAO,QAAS,KAAK,aAAa,EAEpDzO,EAAYyO,EAAM,OAAO,OAAQ,KAAK,YAAY,GAGpD,CAAC,QAAS,YAAa,YAAY,EAAE,QAAQvF,GAAK,CAEhDrJ,EAAM,IAAM,KAAKqJ,GAAK5J,GAAU,CAC1B4J,IAAM,QACRuF,EAAM,MAAM,IAAInP,CAAK,EAGrBmP,EAAMvF,GAAK5J,CAEf,CAAC,CACH,CAAC,EAED,KAAK,aAAamP,CAAK,GAEnBA,aAAiBF,IAAaE,aAAiBD,MACjDpO,EAAS,KAAM,SAAUqO,EAAM,OAAQ,UAAU,EACjD,KAAK,YAAYA,EAAM,MAAM,EAEjC,CACF,EACA,QAAS,OACX,CAAC,ECxDDC,GAAehH,EAAgB,CAC7B,QAASiH,EACT,SAAU,CACR,KAAK,UAAU,IAAID,GAAa,KAAK,MAAO,KAAK,SAAS,CAAC,CAC7D,EACA,QAAS,cACX,CAAC,ECLDF,GAAe9G,EAAgB,CAC7B,QAASiH,EACT,MAAO,CACL,OAAQ,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,EAAG,CAClG,EACA,SAAU,CACR,KAAK,UAAU,IAAIH,GAAiB,KAAK,MAAO,KAAK,SAAS,CAAC,CACjE,EACA,QAAS,kBACX,CAAC,ECVDI,GAAelH,EAAgB,CAC7B,QAASiH,EACT,MAAO,CACL,YAAa,CAAE,KAAM,OAAQ,QAAS,SAAU,CAClD,EACA,SAAU,CACR,MAAMF,EAAQ,IAAIG,GAAgB,KAAK,MAAO,KAAK,YAAa,KAAK,SAAS,EAC9E/O,EAAM,IAAM,KAAK,YAAcP,GAAU,CAAEmP,EAAM,YAAY,IAAInP,CAAK,CAAE,CAAC,EACzE,KAAK,UAAUmP,CAAK,CACtB,EACA,QAAS,iBACX,CAAC,ECXDI,GAAenH,EAAgB,CAC7B,QAASiH,EACT,MAAO,CACL,SAAU,CAAE,KAAM,OAAQ,QAAS,CAAE,EACrC,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,CACpC,EACA,SAAU,CACR,KAAK,UAAU,IAAIE,GAAW,KAAK,MAAO,KAAK,UAAW,KAAK,SAAU,KAAK,KAAK,CAAC,CACtF,EACA,QAAS,YACX,CAAC,ECRDC,GAAepH,EAAgB,CAC7B,QAASiH,EACT,MAAO,CACL,MAAO,CAAE,KAAM,OAAQ,QAAS,EAAG,EACnC,OAAQ,CAAE,KAAM,OAAQ,QAAS,EAAG,EACpC,OAAQ,OACV,EACA,SAAU,CACRI,GAAyB,KACzB,EAAA,MAAMN,EAAQ,IAAIK,GAAc,KAAK,MAAO,KAAK,UAAW,KAAK,MAAO,KAAK,MAAM,EAQnF,GANmB,CAAC,QAAS,QAAQ,EAC1B,QAAQ5F,GAAK,CAEtBrJ,EAAM,IAAM,KAAKqJ,GAAK5J,GAAU,CAAEmP,EAAMvF,GAAK5J,CAAM,CAAC,CACtD,CAAC,EAEG,KAAK,OAAQ,CACf,MAAM0P,EAAc,IAAIC,GAAoBR,CAAK,EACjDA,EAAM,IAAIO,CAAW,CACvB,CAEA,KAAK,UAAUP,CAAK,CACtB,EACA,QAAS,eACX,CAAC,EC3BDF,GAAe7G,EAAgB,CAC7B,QAASiH,EACT,MAAO,CACL,MAAO,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,CAAE,EAC5C,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,EAClC,SAAU,CAAE,KAAM,OAAQ,QAAS,CAAE,EACrC,SAAU,CAAE,KAAM,OAAQ,QAAS,CAAE,EACrC,OAAQ,MACV,EACA,SAAU,CACR,MAAMF,EAAQ,IAAIF,GAAU,KAAK,MAAO,KAAK,UAAW,KAAK,SAAU,KAAK,MAAO,KAAK,SAAU,KAAK,KAAK,EAEzF,CAAC,QAAS,QAAS,WAAY,UAAU,EACjD,QAAQrF,GAAK,CAEtBrJ,EAAM,IAAM,KAAKqJ,GAAK5J,GAAU,CAAEmP,EAAMvF,GAAK5J,CAAM,CAAC,CACtD,CAAC,EAED,KAAK,UAAUmP,CAAK,CACtB,EACA,QAAS,WACX,CAAC,ECPM,MAAMS,GAA8D,OAAO,UAAU,EAEtFC,GAAezH,EAAgB,CACnC,MAAO,CAAC,SAAS,EACjB,MAAO,CACL,MAAO,CAAE,KAAM,OAAQ,QAAS,SAAU,EAC1C,MAAO,CAAE,KAAM,OAA4C,QAAS,KAAO,CAAC,EAAG,CACjF,EACA,OAAQ,CACN,KAAMkD,CACR,EACA,OAAgC,CAC9B,MAAO,CACT,CAAA,EACA,SAAU,CACR,MAAO,CACL,CAACsE,IAAiC,IACpC,CACF,EACA,SAAU,CACR,GAAI,CAAC,KAAK,KAAM,CACd,QAAQ,MAAM,qBAAqB,EACnC,MACF,CAEA,GAAI,KAAK,eAAgB,CACvB,MAAMjE,EAAW,KAAK,SAAW,KAAK,iBAEtCpL,EAAM,IAAM,KAAK,MAAQP,GAAU,CAAE2L,EAAS,MAAM,IAAI3L,CAAK,CAAE,CAAC,EAChEC,EAAe,KAAM,QAAS0L,EAAU,GAAO,KAAK,OAAO,EAC3D,KAAK,MAAM,UAAWA,CAAQ,EAC9B,KAAK,KAAK,YAAYA,CAAQ,CAChC,CACF,EACA,WAAY,CApDd,IAAA1G,GAqDIA,EAAA,KAAK,WAAL,MAAAA,EAAe,QACjB,CAAA,EACA,QAAS,CACP,mBAAoB,CAClB,MAAO,CAAE,GAAG/D,EAAY,KAAK,OAAQ,CAAC,OAAO,CAAC,EAAG,GAAG,KAAK,KAAM,CACjE,EACA,QAAQyK,EAAe5L,EAAaC,EAAY8P,EAAc,GAAO,CACnE,MAAMC,EAASpE,EAAS5L,GACpBgQ,aAAkB5F,EAAO4F,EAAO,IAAI/P,CAAK,EACxC2L,EAAS5L,GAAOC,EACrB2L,EAAS,YAAcmE,CACzB,EACA,WAAWE,EAAyBjQ,EAAM,MAAO,CAC/C,KAAK,QAAQ,KAAK,SAAUA,EAAKiQ,EAAS,EAAI,CAChD,CACF,EACA,QAAS,CACP,OAAO,KAAK,OAAO,QAAU,KAAK,OAAO,UAAY,CAAA,CACvD,EACA,QAAS,UACX,CAAC,EAKe,SAAAC,EACdlE,EACAlL,EACAqP,EACA,CACA,OAAO9H,EAAgB,CACrB,KAAA2D,EACA,QAAS8D,GACT,MAAAhP,EACA,QAAS,CACP,gBAAiB,CACf,OAAOqP,EAAe,KAAK,mBAAmB,CAChD,CACF,CACF,CAAC,CACH,CAGa,MAAAC,GAAgBF,EAAkB,gBAAiB,CAAE,MAAO,CAAE,KAAM,OAAiD,QAAS,KAAO,GAAI,CAAE,EAAIG,GAAS,IAAIC,GAAkBD,CAAI,CAAC,EACnLE,GAAkBL,EAAkB,kBAAmB,CAAE,MAAO,CAAE,KAAM,OAAmD,QAAS,KAAO,CAAA,EAAI,CAAE,EAAIG,GAAS,IAAIG,GAAoBH,CAAI,CAAC,EAC3LI,GAAgBP,EAAkB,gBAAiB,CAAE,MAAO,CAAE,KAAM,OAAiD,QAAS,KAAO,CAAA,EAAI,CAAE,EAAIG,GAAS,IAAIK,GAAkBL,CAAI,CAAC,EACnLM,GAAmBT,EAAkB,mBAAoB,CAAE,MAAO,CAAE,KAAM,OAAoD,QAAS,KAAO,CAAC,EAAG,CAAE,EAAIG,GAAS,IAAIO,GAAqBP,CAAI,CAAC,EAC/LQ,GAAiBX,EAAkB,iBAAkB,CAAE,MAAO,CAAE,KAAM,OAAkD,QAAS,KAAO,CAAA,EAAI,CAAE,EAAIG,GAAS,IAAIS,GAAgBT,CAAI,CAAC,EACpLU,GAAiBb,EAAkB,iBAAkB,CAAE,MAAO,CAAE,KAAM,OAAQ,QAAS,SAAU,EAAG,MAAO,CAAE,KAAM,OAA4C,QAAS,KAAO,CAAA,EAAI,CAAE,EAAIG,GAAS,IAAIW,GAAgBX,CAAI,CAAC,EAC3NY,GAAmBf,EAAkB,mBAAoB,CAAE,MAAO,CAAE,KAAM,OAAoD,QAAS,KAAO,CAAI,EAAA,CAAE,EAAIG,GAAS,IAAIa,GAAqBb,CAAI,CAAC,EAC/Lc,GAAejB,EAAkB,eAAgB,CAAE,MAAO,CAAE,KAAM,OAAgD,QAAS,KAAO,GAAI,CAAE,EAAIG,GAAS,IAAIe,GAAiBf,CAAI,CAAC,ECnG5L,IAAAgB,GAAenB,EACb,iBACA,CACE,IAAK,OACL,KAAM,CAAE,KAAM,OAAQ,QAAS,6BAA8B,CAC/D,EACCG,GAAS,CACR,MAAMlQ,EAAMkQ,EAAK,IAAMA,EAAK,IAAMrO,GAAaqO,EAAK,IAAI,EAClDlK,EAAShF,EAAYkP,EAAM,CAAC,MAAO,MAAM,CAAC,EAChD,OAAAlK,EAAO,OAAS,IAAImL,EAAc,EAAE,KAAKnR,CAAG,EACrC,IAAIoR,GAAmBpL,CAAM,CACtC,CACF,ECZA,MAAMqL,GAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQtBC,GAAwB;AAAA;AAAA;AAAA;AAAA;AAAA,EAO9B,OAAevB,EACb,iBACA,CACE,MAAO,CAAE,KAAM,OAAQ,QAAS,KAAO,CACrC,SAAU,CACV,EAAA,aAAcsB,GACd,eAAgBC,EAClB,EAAG,CACL,EACCpB,GAAS,IAAIqB,GAAevQ,EAAYkP,EAAM,CAAC,OAAO,CAAC,CAAC,CAC3D,ECdA,SAASsB,GAAWC,EAAgBC,EAAcC,EAAiB,CACjE,OAAOF,EAAO,MAAMC,CAAI,EAAE,KAAKC,CAAO,CACxC,CAEA,MAAMC,GAAoBC,EAAY,eAAe,MAAM,EAAGA,EAAY,eAAe,QAAQ,eAAe,CAAC,EAC3GC,GAAoBD,EAAY,eAAe,MAAMA,EAAY,eAAe,QAAQ,eAAe,CAAC,EAExGE,GAA6B,CAEjC,SAAUC,GAAc,MAAM,CAC5BC,GAAU,MAAM,SAChB,CACE,eAAgB,CAAE,MAAO,IAAIhI,EAAM,QAAQ,CAAE,EAC7C,oBAAqB,CAAE,MAAO,EAAI,EAClC,iBAAkB,CAAE,MAAO,CAAI,EAC/B,qBAAsB,CAAE,MAAO,EAAI,EACnC,eAAgB,CAAE,MAAO,CAAI,EAC7B,eAAgB,CAAE,MAAO,EAAK,CAChC,CACF,CAAC,EAED,aAAc;AAAA;AAAA,MAEV4H,EAAY;AAAA,IAGhB,eAAgB;AAAA;AAAA;AAAA;AAAA,MAIZD;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,IAoBAE,GAAkB,QACpB,mCACAN,GACEK,EAAY,sBACZ,gEACA;AAAA;AAAA;AAAA;AAAA;AAAA,OAMF,CACF,CACF,EC9DA,IAAAK,GAAehK,EAAgB,CAC7B,QAASiK,GACT,MAAO,CACL,SAAU,CAAE,KAAM,OAAyD,QAAS,KAAO,CACzF,QAAS,UACT,eAAgB,UAChB,oBAAqB,GACrB,iBAAkB,IAClB,qBAAsB,GACtB,eAAgB,EAChB,eAAgB,CAClB,EAAG,CACL,EACA,QAAS,CACP,gBAAiB,CACf,MAAMnM,EAAS+L,GACTK,EAAWJ,GAAc,MAAMhM,EAAO,QAAQ,EAEpD,OAAAjG,EAAe,KAAM,WAAYqS,EAAU,GAAM,CAAC1S,EAAUG,EAAaC,IAAe,CACtF,MAAM+P,EAASnQ,EAAIG,GAAK,MACpBgQ,aAAkB5F,EAAO4F,EAAO,IAAI/P,CAAK,EACxCJ,EAAIG,GAAK,MAAQC,CACxB,CAAC,EAEgB,IAAIyR,GAAe,CAClC,GAAGvL,EACH,OAAQ,GACR,GAAG,KAAK,MACR,SAAAoM,CACF,CAAC,CAGH,CACF,CACF,CAAC,ECxCDC,GAAenK,EAAgB,CAC7B,OAAQ,CACN,SAAUwH,EACZ,EACA,MAAO,CACL,KAAM,CAAE,KAAM,OAAQ,QAAS,KAAM,EACrC,QAAS,OACT,IAAK,OACL,OAAQ,SACR,WAAY,SACZ,QAAS,SACT,MAAO,CAAE,KAAM,OAAQ,QAAS,KAAO,CAAA,EAAI,CAC7C,EACA,OAAyB,CACvB,MAAO,CACT,CAAA,EACA,SAAU,CACR,KAAK,iBACLrP,EAAM,IAAM,KAAK,IAAK,KAAK,cAAc,CAC3C,EACA,WAAY,CA9Bd,IAAA0E,EAAAC,GA+BID,EAAA,KAAK,WAAL,MAAAA,EAAe,WAAW,KAAM,KAAK,OACrCC,EAAA,KAAK,UAAL,MAAAA,EAAc,SAChB,EACA,QAAS,CACP,eAAgB,CACd,GAAK,KAAK,IACV,OAAO,IAAImM,EAAAA,EAAgB,KAAK,KAAK,IAAK,KAAK,SAAU,KAAK,WAAY,KAAK,OAAO,CACxF,EACA,aAAc,CACR,CAAC,KAAK,UAEVpR,EAAe,KAAM,QAAS,KAAK,OAAO,EACrC,KAAK,WAEV,KAAK,SAAS,WAAW,KAAK,QAAS,KAAK,IAAI,EAC5C,KAAK,SAAS,oBAAoBwR,IAAkB,KAAK,UAC1D,KAAK,SAAS,SAAU,SAAS,KAAK,SAAW,CAAE,MAAO,KAAK,OAAQ,IAE5E,EACA,gBAAiB,CAlDrB,IAAAxM,GAmDMA,EAAA,KAAK,UAAL,MAAAA,EAAc,QACd,EAAA,KAAK,QAAU,KAAK,cAAc,EAClC,KAAK,YACP,CAAA,EACA,SAASuN,EAAY,CAvDzB,IAAAvN,GAwDMA,EAAA,KAAK,SAAL,MAAAA,EAAA,KAAcuN,KAAAA,CAAAA,CAChB,CACF,EACA,QAAS,CAAE,MAAO,CAAG,CAAA,CACvB,CAAC,ECxDDC,GAAerK,EAAgB,CAC7B,QAASgC,GACT,MAAO,CACL,KAAM,CAAE,KAAM,OAAQ,QAAS,QAAS,EACxC,KAAM,CAAE,KAAM,OAAQ,SAAU,EAAK,EACrC,KAAM,CACJ,KAAM,MACN,QAAS,IAAM,CAAC,SAAU,SAAU,SAAU,SAAU,SAAU,QAAQ,CAC5E,EACA,MAAO,CAAE,KAAM,OAAQ,QAAS,KAAO,CAAE,QAASsI,EAAsB,EAAG,CAC7E,EACA,SAAU,CACRnS,EAAM,IAAM,KAAK,KAAM,KAAK,cAAc,EAC1CA,EAAM,IAAM,KAAK,KAAM,KAAK,cAAc,CAC5C,EACA,QAAS,CACP,eAAgB,CACd,OAAO,IAAIoS,KACR,QAAQ,KAAK,IAAI,EACjB,KAAK,KAAK,KAAM,KAAK,SAAU,KAAK,WAAY,KAAK,OAAO,CACjE,CACF,CACF,CAAC,ECtBDC,GAAexK,EAAgB,CAC7B,QAASgC,GACT,MAAO,CACL,QAAS,CACP,KAAM,OACN,SAAU,EACZ,CACF,EACA,SAAU,CACR7J,EAAM,IAAM,KAAK,QAAS,KAAK,cAAc,CAC/C,EACA,QAAS,CACP,eAAgB,CACd,MAAMsS,EAAQ,SAAS,eAAe,KAAK,OAAO,EAClD,OAAO,IAAID,GAAaC,CAAK,CAC/B,CACF,CACF,CAAC,EClBDC,GAAehH,EAAc,MAAOjL,GAAOmL,EAAc,ECAzD+G,GAAejH,EAAc,SAAUjL,GAAOmL,EAAc,ECA5DgH,GAAelH,EAAc,OAAQjL,GAAOmL,EAAc,ECA1DiH,GAAenH,EAAc,WAAYjL,GAAOmL,EAAc,ECA9DkH,GAAepH,EAAc,eAAgBjL,GAAOmL,EAAc,ECAlEmH,GAAerH,EAAc,cAAejL,GAAOmL,EAAc,ECAjEoH,GAAetH,EAAc,QAASjL,GAAOmL,EAAc,ECA3DqH,GAAevH,EAAc,aAAcjL,GAAOmL,EAAc,ECAhEpJ,GAAekJ,EAAc,QAASjL,GAAOmL,EAAc,ECA3DsH,GAAexH,EAAc,aAAcjL,GAAOmL,EAAc,ECAhEuH,GAAezH,EAAc,OAAQjL,GAAOmL,EAAc,ECA1DwH,GAAe1H,EAAc,SAAUjL,GAAOmL,EAAc,ECA5DyH,GAAe3H,EAAc,cAAejL,GAAOmL,EAAc,ECOjE,MAAMnL,GAAQ,CACZ,KAAM,CAAE,KAAM,OAAQ,SAAU,GAAM,QAAS,MAAO,EACtD,QAAS,CAAE,KAAM,OAAQ,SAAU,EAAK,EACxC,KAAM,CAAE,KAAM,OAAQ,QAAS,EAAG,EAClC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,EAClC,cAAe,CAAE,KAAM,OAAQ,QAAS,EAAG,EAC3C,aAAc,CAAE,KAAM,QAAS,QAAS,EAAM,EAC9C,eAAgB,CAAE,KAAM,OAAQ,QAAS,EAAG,EAC5C,UAAW,CAAE,KAAM,OAAQ,QAAS,CAAE,EACtC,YAAa,CAAE,KAAM,OAAQ,QAAS,CAAE,EACxC,cAAe,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC1C,MAAO,CAAE,KAAM,CAAC,QAAS,MAAM,EAAiC,QAAS,EAAM,CACjF,EAEA,IAAA6S,GAAetL,EAAgB,CAC7B,QAASmD,EACT,MAAA1K,GACA,OAA4B,CAC1B,MAAO,CAAA,CACT,EACA,SAAU,CACR,GAAI,CAAC,KAAK,QAAS,CACjB,QAAQ,MAAM,mCAAmC,EACjD,MACF,CAOmB,CACjB,OAAQ,OAAQ,SAAU,gBAC1B,eAAgB,iBAAkB,YAAa,cAAe,gBAC9D,OACF,EACW,QAAQ+I,GAAK,CAEtBrJ,EAAM,IAAM,KAAKqJ,GAAI,IAAM,CACrB,KAAK,MAAM,KAAK,gBAAA,CACtB,CAAC,CACH,CAAC,EAED,MAAM+J,EAAS,IAAIC,GACnB,KAAK,QAAU,GACfD,EAAO,KAAK,KAAK,QAAUE,GAAS,CAClC,KAAK,QAAU,GACf,KAAK,KAAOA,EACZ,KAAK,iBACL,KAAK,SACP,CAAA,CAAC,CACH,EACA,QAAS,CACP,gBAAiB,CACf,KAAK,SAAW,IAAIC,GAAa,KAAK,KAAM,CAE1C,KAAM,KAAK,KACX,KAAM,KAAK,KACX,OAAQ,KAAK,OACb,MAAO,KAAK,MACZ,cAAe,KAAK,cACpB,aAAc,KAAK,aACnB,eAAgB,KAAK,eACrB,UAAW,KAAK,UAChB,YAAa,KAAK,YAClB,cAAe,KAAK,aACtB,CAAC,EAEG,KAAK,QAAU,UACjB,KAAK,SAAS,OAElB,CAAA,CACF,CACF,CAAC,ECjFDC,GAAejI,EAAc,QAASjL,GAAOmL,EAAc,ECA3DgI,GAAelI,EAAc,YAAajL,GAAOmL,EAAc,ECE/DiI,GAAe7L,EAAgB,CAC7B,QAASmD,EACT,MAAA1K,GACA,SAAU,CACR,KAAK,eAAe,EACpB,KAAK,oBAAoBA,EAAK,CAChC,EACA,QAAS,CACP,gBAAiB,CACf,KAAK,SAAWmL,GAAe,IAAI,CACrC,EAEA,aAAa8B,EAAmB,CAC9BC,GAAyB,KAAK,SAA0BD,CAAM,CAChE,CACF,EACA,QAAS,MACX,CAAC,ECbc1F,GAAAA,EAAgB,CAC7B,MAAO,CAAC,QAAQ,EAChB,QAASmD,EACT,MAAO,CACL,IAAK,CAAE,KAAM,OAAQ,SAAU,EAAK,EACpC,MAAO,OACP,OAAQ,OACR,cAAe,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC1C,eAAgB,CAAE,KAAM,OAAQ,QAAS,CAAE,EAC3C,SAAU,OACZ,EACA,OAA6B,CAC3B,MAAO,CAAA,CACT,EACA,SAAU,CACJ,CAAC,KAAK,WAEV,KAAK,SAAW,IAAI2B,GAAc,EAAG,EAAG,KAAK,cAAe,KAAK,cAAc,EAC/E,KAAK,SAAW,IAAImD,GAAkB,CAAE,KAAM6D,GAAY,IAAK,KAAK,YAAc,CAAA,CAAC,EAEnF3T,EAAM,IAAM,KAAK,IAAK,KAAK,cAAc,EAEzC,CAAC,QAAS,QAAQ,EAAE,QAAQqJ,GAAK,CAE/BrJ,EAAM,IAAM,KAAKqJ,GAAI,KAAK,MAAM,CAClC,CAAC,EAED,KAAK,OAAO,EACR,KAAK,UAAU,KAAK,SAAS,SAAS,KAAK,MAAM,EACvD,EACA,WAAY,CAvCd,IAAA3E,GAwCIA,EAAA,KAAK,WAAL,MAAAA,EAAe,UAAU,KAAK,OAChC,EACA,QAAS,CACP,aAAc,CACZ,OAAO,IAAIoM,EAAc,EAAE,KAAK,KAAK,IAAK,KAAK,QAAQ,CACzD,EACA,gBAAiB,CA9CrB,IAAApM,GA+CMA,EAAA,KAAK,UAAL,MAAAA,EAAc,QACV,EAAA,KAAK,WACP,KAAK,SAAS,IAAM,KAAK,YAAY,EACrC,KAAK,SAAS,YAAc,GAEhC,EACA,SAAS+K,EAAkB,CACzB,KAAK,QAAUA,EACf,KAAK,OAAO,EACZ,KAAK,MAAM,SAAUA,CAAO,CAC9B,EACA,QAAS,CACP,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,QAAS,OACrC,MAAMmE,EAAS,KAAK,SAAS,KACvBC,EAAK,KAAK,QAAQ,MAAM,MACxBC,EAAK,KAAK,QAAQ,MAAM,OACxBC,EAASF,EAAKC,EACpB,IAAIE,EAAI,EAAGrM,EAAI,EACX,KAAK,OAAS,KAAK,QACrBqM,EAAI,KAAK,MAAQJ,EAAO,OAASA,EAAO,MACxCjM,EAAI,KAAK,OAASiM,EAAO,QAAUA,EAAO,QACjC,KAAK,OACdI,EAAI,KAAK,MAAQJ,EAAO,OAASA,EAAO,MACxCjM,EAAIqM,EAAID,GACC,KAAK,QACdpM,EAAI,KAAK,OAASiM,EAAO,QAAUA,EAAO,OAC1CI,EAAIrM,EAAIoM,GAEJA,EAAS,EAAGC,EAAIrM,EAAIoM,EACnBpM,EAAIqM,EAAID,EAEX,KAAK,OACP,KAAK,KAAK,MAAM,EAAIC,EACpB,KAAK,KAAK,MAAM,EAAIrM,EAExB,CACF,EACA,QAAS,OACX,CAAC,EChFD3C,GAAe6C,EAAgB,CAC7B,QAASmD,EACT,MAAO,CACL,MAAO,CAAE,KAAM,OAAQ,SAAU,EAAK,CACxC,EACA,QAAS,CACP,UAAW,CACT,GAAK,KAAK,SAEV,CAAI,GAAA,CAAC,KAAK,UAAY,CAAC,KAAK,SAC1B,OAAQ,QAAA,MAAM,kCAAkC,EACzC,GAGT,KAAK,KAAO,IAAIhG,GAAc,KAAK,SAAU,KAAK,SAAU,KAAK,KAAK,EACtE,KAAK,KAAK,SAAS,UAAY,KAE/BzE,EAAS,KAAM,aAAc,KAAK,IAAI,EACtCA,EAAS,KAAM,gBAAiB,KAAK,IAAI,GAErC,KAAK,gBACP,KAAK,eACL,KAAK,eACL,KAAK,gBACL,KAAK,eACL,KAAK,aACL,KAAK,UACL,KAAK,SAAS,MAAM,mBAAmB,KAAK,IAAI,EAGlD,KAAK,aAAa,KAAK,IAAI,EAC7B,CACF,EACA,QAAS,eACX,CAAC,EC7BD0T,GAAepM,EAAgB,CAC7B,QAASsC,EACT,MAAO,CAAC,QAAQ,EAChB,MAAO,CACL,IAAK,CAAE,KAAM,OAAQ,SAAU,EAAK,CACtC,EACA,OAA8B,CAC5B,MAAO,CAAA,CACT,EACA,SAAU,CACR,KAAK,QAAU,IAAI2G,EAAc,EAAE,KAAK,KAAK,IAAK,KAAK,QAAQ,EAC/D,KAAK,SAAW,IAAIoD,GAAe,CAAE,IAAK,KAAK,OAAQ,CAAC,EACxD,KAAK,OAAS,IAAID,GAAO,KAAK,QAAQ,EACtC,KAAK,aAAa,KAAK,MAAM,CAC/B,EACA,WAAY,CAzBd,IAAAvP,EAAAC,GA0BID,EAAA,KAAK,UAAL,MAAAA,EAAc,WACdC,EAAA,KAAK,WAAL,MAAAA,EAAe,QACjB,CAAA,EACA,QAAS,CACP,UAAW,CACT,KAAK,SAAS,EACd,KAAK,MAAM,QAAQ,CACrB,EACA,UAAW,CACT,GAAI,CAAC,KAAK,SAAW,CAAC,KAAK,OAAQ,OAEnC,MAAMwP,EAAS,KAAK,QAAQ,MAAM,MAC5BC,EAAU,KAAK,QAAQ,MAAM,OAC7BL,EAASI,EAASC,EAExB,IAAIlQ,EAAI,GAAKC,EAAI,GACb4P,EAAS,EACX7P,EAAI,GAAM6P,EAEV5P,EAAI,GAAM4P,EAGZ,MAAMM,EAAY,KAAK,OAAO,SAAS,WAAW,SAAS,MAC3DA,EAAU,GAAK,CAACnQ,EAAGmQ,EAAU,GAAK,CAAClQ,EACnCkQ,EAAU,GAAKnQ,EAAGmQ,EAAU,GAAK,CAAClQ,EAClCkQ,EAAU,IAAMnQ,EAAGmQ,EAAU,IAAMlQ,EACnCkQ,EAAU,IAAM,CAACnQ,EAAGmQ,EAAU,IAAMlQ,EACpC,KAAK,OAAO,SAAS,WAAW,SAAS,YAAc,EACzD,CACF,EACA,QAAS,QACX,CAAC,ECvCc0D,GAAAA,EAAgB,CAC7B,QAASsC,EACT,OAA8B,CAC5B,MAAO,CAAA,CACT,EACA,SAAU,CACR,MAAO,CACL,CAACY,GAA6B,IAChC,CACF,EACA,SAAU,CACR,KAAK,KAAO,KAAK,OAAS,IAAIuJ,GAAO,KAAK,SAAU,KAAK,QAAQ,EACjE,KAAK,aAAa,KAAK,IAAI,CAC7B,EACA,QAAS,CACP,YAAYnJ,EAA0B,CACpC,KAAK,SAAWA,EACZ,KAAK,OAAM,KAAK,KAAK,SAAWA,EACtC,EACA,YAAYC,EAAoB,CAC9B,KAAK,SAAWA,EACZ,KAAK,OAAM,KAAK,KAAK,SAAWA,EACtC,CACF,CACF,CAAC,ECtCcvD,GAAAA,EAAgB,CAC7B,QAASsC,EACT,MAAO,CAAC,cAAe,OAAQ,WAAY,OAAO,EAClD,MAAO,CACL,IAAK,CAAE,KAAM,OAAQ,SAAU,EAAK,CACtC,EACA,MAAO,CACL,MAAO,CACL,SAAU,CACZ,CACF,EACA,QAAS,CACP,OAAOoK,EAAkB,CACvB,KAAK,MAAM,OAAQA,CAAK,CAC1B,EACA,WAAWC,EAAyB,CAClC,KAAK,SAAWA,EAAS,OAASA,EAAS,MAC3C,KAAK,MAAM,WAAYA,CAAQ,CACjC,EACA,QAAQC,EAAmB,CACzB,KAAK,MAAM,QAASA,CAAK,CAC3B,CACF,CACF,CAAC,ECvBDC,GAAe7M,EAAgB,CAC7B,QAAS8M,GACT,SAAU,CACR,MAAMvB,EAAS,IAAIwB,GACnB,KAAK,MAAM,cAAexB,CAAM,EAChCA,EAAO,KAAK,KAAK,IAAMyB,GAAS,CAC9B,KAAK,OAAOA,CAAI,EAChB,KAAK,aAAaA,EAAK,KAAK,CAC9B,EAAG,KAAK,WAAY,KAAK,OAAO,CAClC,CACF,CAAC,ECVDC,GAAejN,EAAgB,CAC7B,QAAS8M,GACT,SAAU,CACR,MAAMvB,EAAS,IAAI2B,GACnB,KAAK,MAAM,cAAe3B,CAAM,EAChCA,EAAO,KAAK,KAAK,IAAM4B,GAAQ,CAC7B,KAAK,OAAOA,CAAG,EACf,KAAK,aAAaA,CAAG,CACvB,EAAG,KAAK,WAAY,KAAK,OAAO,CAClC,CACF,CAAC,QCCYC,GAA8D,OAAO,UAAU,EAE5F,IAAepN,GAAAA,EAAgB,CAC7B,OAAsC,CAEpC,MAAO,CAAE,SADQuB,EAAOxB,CAAoB,CAC1B,CACpB,EACA,SAAU,CACR,MAAO,CACL,CAACqN,IAAiC,IACpC,CACF,EACA,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,CAClB,QAAQ,MAAM,oBAAoB,EAClC,MACF,CACA,MAAMlP,EAAW,KAAK,SAEhB0C,EAAW,IAAIyM,GAAe,KAAK,SAAS,QAAQ,EAC1D,KAAK,SAAWzM,EAChB,KAAK,SAAS,SAAWA,EAGzB1C,EAAS,YAAY,OAAQ,IAAM,CACjCA,EAAS,SAAS,UAAY,GAC9B,KAAK,OACLA,EAAAA,EAAS,YAAY,SAAU,KAAK,MAAM,CAC5C,CAAC,CACH,EACA,WAAY,CA7Cd,IAAArB,GA8CIA,EAAA,KAAK,WAAL,MAAAA,EAAe,eAAe,SAAU,KAAK,MAAA,CAC/C,EACA,QAAS,CACP,QAAQyQ,EAAY,CAjDxB,IAAAzQ,GAkDMA,EAAA,KAAK,WAAL,MAAAA,EAAe,QAAQyQ,CACzB,CAAA,EACA,WAAWA,EAAY,CApD3B,IAAAzQ,GAqDMA,EAAA,KAAK,WAAL,MAAAA,EAAe,WAAWyQ,EAC5B,EACA,QAAS,CACH,KAAK,UAAY,KAAK,UACxB,KAAK,SAAS,QAAQ,KAAK,SAAS,KAAK,MAAO,KAAK,SAAS,KAAK,MAAM,CAE7E,CACF,EACA,QAAS,CACP,OAAO,KAAK,OAAO,QAAU,KAAK,OAAO,QAAY,EAAA,CACvD,CAAA,EACA,QAAS,gBACX,CAAC,ECtDDC,EAAevN,EAAgB,CAE7B,OAAQ,CACN,SAAUD,EACV,SAAUqN,EACZ,EACA,MAAO,CAAC,OAAO,EACf,OAA8B,CAC5B,MAAO,CAAA,CACT,EACA,SAAU,CACH,KAAK,UACR,QAAQ,MAAM,+BAA+B,EAE1C,KAAK,UACR,QAAQ,MAAM,yBAAyB,CAE3C,EACA,WAAY,CA7Bd,IAAAvQ,EAAAC,EAAAC,EA8BQ,KAAK,QACPF,EAAA,KAAK,WAAL,MAAAA,EAAe,WAAW,KAAK,IAC9BE,GAAAA,GAAAD,EAAA,KAAK,MAAa,UAAlB,MAAAC,EAAA,KAAAD,CAEL,EAAA,EACA,QAAS,CACP,eAAewQ,EAAY,CApC/B,IAAAzQ,EAqCM,KAAK,KAAOyQ,GACZzQ,EAAA,KAAK,WAAL,MAAAA,EAAe,QAAQyQ,CACvB,EAAA,KAAK,MAAM,QAASA,CAAI,CAC1B,CACF,EACA,QAAS,CACP,MAAO,EACT,EACA,QAAS,YACX,CAAC,EC1CDE,GAAexN,EAAgB,CAC7B,QAASyN,EACT,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,OAEpB,GAAI,CAAC,KAAK,SAAS,MAAO,CACxB,QAAQ,MAAM,eAAe,EAC7B,MACF,CACA,GAAI,CAAC,KAAK,SAAS,OAAQ,CACzB,QAAQ,MAAM,gBAAgB,EAC9B,MACF,CACA,MAAMH,EAAO,IAAIE,GAAW,KAAK,SAAS,MAAO,KAAK,SAAS,MAAM,EACrE,KAAK,eAAeF,CAAI,CAC1B,EACA,QAAS,YACX,CAAC,ECjBD,MAAM7U,GAAQ,CACZ,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,EAClC,SAAU,CAAE,KAAM,OAAQ,QAAS,IAAM,EACzC,QAAS,CAAE,KAAM,OAAQ,QAAS,GAAK,CACzC,EAEA,IAAeuH,GAAAA,EAAgB,CAC7B,QAASyN,EACT,MAAAhV,GACA,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,OAEpB,GAAI,CAAC,KAAK,SAAS,MAAO,CACxB,QAAQ,MAAM,eAAe,EAC7B,MACF,CACA,GAAI,CAAC,KAAK,SAAS,OAAQ,CACzB,QAAQ,MAAM,gBAAgB,EAC9B,MACF,CAEA,MAAMqF,EAAS,CACb,MAAO,KAAK,MACZ,SAAU,KAAK,SACf,QAAS,KAAK,QACd,MAAO,KAAK,SAAS,KAAK,MAC1B,OAAQ,KAAK,SAAS,KAAK,MAC7B,EAEMwP,EAAO,IAAII,GAAU,KAAK,SAAS,MAAO,KAAK,SAAS,OAAQ5P,CAAM,EAE5E,OAAO,KAAKrF,EAAK,EAAE,QAAQ+I,GAAK,CAE9BrJ,EAAM,IAAM,KAAKqJ,GAAK5J,GAAU,CAAE0V,EAAK,SAAS9L,GAAG,MAAQ5J,CAAM,CAAC,CACpE,CAAC,EAED,KAAK,eAAe0V,CAAI,CAC1B,EACA,QAAS,WACX,CAAC,ECvCD,MAAM7U,GAAQ,CACZ,eAAgB,CAAE,KAAM,OAAQ,QAAS,EAAI,EAC7C,mBAAoB,CAAE,KAAM,OAAQ,QAAS,GAAK,EAClD,eAAgB,CAAE,KAAM,OAAQ,QAAS,IAAK,EAC9C,UAAW,CAAE,KAAM,OAAQ,QAAS,CAAE,CACxC,EAEA,IAAeuH,GAAAA,EAAgB,CAC7B,QAASyN,EACT,MAAAhV,GACA,SAAU,CACR,MAAM6U,EAAO,IAAIK,GAAS,KAAK,eAAgB,KAAK,mBAAoB,KAAK,eAAgB,KAAK,SAAS,EAE3G,OAAO,KAAKlV,EAAK,EAAE,QAAQ+I,GAAK,CAE9BrJ,EAAM,IAAM,KAAKqJ,GAAK5J,GAAU,CAAE0V,EAAK,SAAS9L,GAAG,MAAQ5J,CAAM,CAAC,CACpE,CAAC,EAED,KAAK,eAAe0V,CAAI,CAC1B,EACA,QAAS,UACX,CAAC,ECnBDM,GAAe5N,EAAgB,CAC7B,QAASyN,EACT,SAAU,CARZ,IAAA5Q,EASI,MAAMyQ,EAAO,IAAIO,GAAWC,EAAU,GAGtCjR,EAAA,KAAK,WAAL,MAAAA,EAAe,YAAY,SAAU,KAAK,QAE1C,KAAK,eAAeyQ,CAAI,CAC1B,EACA,WAAY,CAhBd,IAAAzQ,GAiBIA,EAAA,KAAK,WAAL,MAAAA,EAAe,eAAe,SAAU,KAAK,MAAA,CAC/C,EACA,QAAS,CACP,OAAO,CAAE,KAAAmB,CAAK,EAA4B,CACxC,GAAI,KAAK,KAAM,CACb,KAAM,CAAE,WAAA+P,CAAW,EAAK,KAAK,KAAoB,SAAS,SAC1DA,EAAW,MAAM,EAAI,EAAI/P,EAAK,MAC9B+P,EAAW,MAAM,EAAI,EAAI/P,EAAK,MAChC,CACF,CACF,EACA,QAAS,UACX,CAAC,ECzBD,MAAMvF,GAAQ,CACZ,MAAO,CAAE,KAAM,OAAQ,QAAS,CAAE,EAClC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,QAAS,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,GAAK,CAAE,EACnD,QAAS,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,GAAK,CAAE,EACnD,QAAS,CAAE,KAAM,OAAQ,QAAS,KAAK,GAAK,GAAK,CAAE,EACnD,QAAS,CAAE,KAAM,OAAQ,QAAS,CAAE,CACtC,EAEA,IAAAuV,GAAehO,EAAgB,CAC7B,QAASyN,EACT,MAAAhV,GACA,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,OAEpB,MAAM6U,EAAO,IAAIU,GAAa,KAAK,SAAS,KAAK,MAAO,KAAK,SAAS,KAAK,OAAQ,CAAA,CAAE,EAErF,OAAO,KAAKvV,EAAK,EAAE,QAAQ+I,GAAK,CAE9B8L,EAAK,SAAS9L,GAAG,MAAQ,KAAKA,GAE9BrJ,EAAM,IAAM,KAAKqJ,GAAK5J,GAAU,CAAE0V,EAAK,SAAS9L,GAAG,MAAQ5J,CAAM,CAAC,CACpE,CAAC,EAED,KAAK,eAAe0V,CAAI,CAC1B,EACA,QAAS,cACX,CAAC,EC3BctN,GAAAA,EAAgB,CAC7B,QAASyN,EACT,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,OAEpB,MAAMH,EAAO,IAAIW,GAAS,KAAK,SAAS,KAAK,MAAO,KAAK,SAAS,KAAK,MAAM,EAC7E,KAAK,eAAeX,CAAI,CAC1B,EACA,QAAS,UACX,CAAC,ECTDY,GAAelO,EAAgB,CAC7B,QAASyN,EACT,MAAO,CACL,QAAS,CACP,KAAM,OACN,QAAS,KAAO,CAClB,EAAA,CACF,EACA,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,OAEpB,GAAI,CAAC,KAAK,SAAS,MAAO,CACxB,QAAQ,MAAM,eAAe,EAC7B,MACF,CACA,GAAI,CAAC,KAAK,SAAS,OAAQ,CACzB,QAAQ,MAAM,gBAAgB,EAC9B,MACF,CAEA,MAAMH,EAAO,IAAIY,GACf,KAAK,SAAS,MACd,KAAK,SAAS,OACd,KAAK,SAAS,KAAK,MACnB,KAAK,SAAS,KAAK,MACrB,EAEA,OAAO,KAAK,KAAK,OAAO,EAAE,QAAQvW,GAAO,CAEvC2V,EAAK3V,GAAO,KAAK,QAAQA,EAC3B,CAAC,EAED,KAAK,eAAe2V,CAAI,CAC1B,EACA,QAAS,UACX,CAAC,ECvCDlD,GAAe,CACb,SAAU,GACV,aAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOd,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,GAMlB,ECXA+D,GAAe,CACb,SAAU,CACR,SAAU,CAAE,MAAO,IAAK,EACxB,WAAY,CAAE,MAAO,CAAE,EACvB,eAAgB,CAAE,MAAO,CAAE,EAC3B,MAAO,CAAE,MAAO,IAAIxS,CAAU,EAC9B,IAAK,CAAE,MAAO,IAAIA,CAAU,EAC5B,MAAO,CAAE,MAAO,IAAIA,CAAU,EAC9B,QAAS,CAAE,MAAO,IAAIA,CAAU,CAClC,EACA,aAAcyS,GAAc,aAC5B,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4ClB,ECnDA,MAAM3V,GAAQ,CACZ,WAAY,CAAE,KAAM,OAAQ,QAAS,EAAG,EACxC,eAAgB,CAAE,KAAM,OAAQ,QAAS,GAAI,EAC7C,MAAO,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,EAAG,EAAG,GAAI,EAAG,EAC3F,IAAK,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,GAAI,EAAG,GAAI,EAAG,CAC5F,EASA,IAAeuH,GAAAA,EAAgB,CAC7B,QAASyN,EACT,MAAAhV,GACA,OAAqC,CACnC,MAAO,CAAE,UAAW,GAAI,UAAW,CAAA,CAAG,CACxC,EACA,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,OAEpB,KAAK,MAAQ,IAAIoV,GAAWQ,EAAS,EACrC,KAAK,MAAQ,IAAIR,GAAWQ,EAAS,EAErC,MAAMC,EAAY,KAAK,UAAY,KAAK,MAAM,SACxCC,EAAY,KAAK,UAAY,KAAK,MAAM,SAG9CA,EAAU,WAAaD,EAAU,WACjCC,EAAU,eAAiBD,EAAU,eACrCC,EAAU,MAAQD,EAAU,MAC5BC,EAAU,IAAMD,EAAU,IAC1BC,EAAU,QAAUD,EAAU,QAE9B5V,EAAS,KAAM,aAAc4V,EAAU,WAAY,OAAO,EAC1D5V,EAAS,KAAM,iBAAkB4V,EAAU,eAAgB,OAAO,EAElE,KAAK,gBAAgB,EAErB,CAAC,QAAS,KAAK,EAAE,QAAQ9M,GAAK,CAE5BrJ,EAAM,IAAM,KAAKqJ,GAAI,KAAK,gBAAiB,CAAE,KAAM,EAAK,CAAC,CAC3D,CAAC,EAED,KAAK,MAAM,QAAU,CAACjC,EAAeC,IAAmB,CACtD8O,EAAU,QAAQ,MAAM,IAAI/O,EAAOC,CAAM,CAC3C,EAEA,KAAK,eAAe,KAAK,KAAK,EAC9B,KAAK,SAAS,QAAQ,KAAK,KAAK,CAClC,EACA,WAAY,CACN,KAAK,UAAY,KAAK,OAAO,KAAK,SAAS,WAAW,KAAK,KAAK,CACtE,EACA,QAAS,CACP,iBAAkB,CAChB,KAAK,UAAU,MAAM,MAAM,KAAK,KAAK,KAAK,EAC1C,KAAK,UAAU,IAAI,MAAM,KAAK,KAAK,GAAG,EACtC,MAAMgP,EAAK,IAAI7S,EAAU,EAAA,KAAK,KAAK,GAAc,EAAE,IAAI,KAAK,KAAgB,EAAE,UAC9E,EAAA,KAAK,UAAU,MAAM,MAAM,KAAK6S,CAAE,EAClC,KAAK,UAAU,MAAM,MAAM,IAAI,CAACA,EAAG,EAAGA,EAAG,CAAC,CAC5C,CACF,EACA,QAAS,eACX,CAAC,ECrED,MAAM/V,GAAQ,CACZ,SAAU,CAAE,KAAM,OAAQ,QAAS,GAAI,EACvC,OAAQ,CAAE,KAAM,OAAQ,QAAS,CAAE,EACnC,UAAW,CAAE,KAAM,OAAQ,QAAS,CAAE,CACxC,EAEA,IAAeuH,GAAAA,EAAgB,CAC7B,QAASyN,EACT,MAAAhV,GACA,SAAU,CACR,GAAI,CAAC,KAAK,SAAU,OAEpB,MAAMuF,EAAO,IAAIrC,EAAQ,KAAK,SAAS,KAAK,MAAO,KAAK,SAAS,KAAK,MAAM,EACtE2R,EAAO,IAAImB,GAAgBzQ,EAAM,KAAK,SAAU,KAAK,OAAQ,KAAK,SAAS,EAEjF,OAAO,KAAKvF,EAAK,EAAE,QAAQ+I,GAAK,CAE9BrJ,EAAM,IAAM,KAAKqJ,GAAK5J,GAAU,CAAE0V,EAAK,SAAS9L,GAAG,MAAQ5J,CAAM,CAAC,CACpE,CAAC,EAED,KAAK,eAAe0V,CAAI,CAC1B,EACA,QAAS,iBACX,CAAC,ECxBD9L,GAAe,CACb,SAAU,CACR,SAAU,CAAE,MAAO,IAAK,EACxB,OAAQ,CAAE,MAAO,IAAI7F,EAAQ,GAAK,EAAG,CAAE,EACvC,SAAU,CAAE,MAAO,CAAE,CACvB,EACA,aAAcyS,GAAc,aAC5B,eAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAqClB,ECzCepO,GAAAA,EAAgB,CAC7B,QAASyN,EACT,MAAO,CACL,OAAQ,CAAE,KAAM,OAA0C,QAAS,KAAO,CAAE,EAAG,GAAK,EAAG,EAAI,EAAG,EAC9F,SAAU,CAAE,KAAM,OAAQ,QAAS,EAAI,CACzC,EACA,SAAU,CACR,MAAMH,EAAO,IAAIO,GAAWa,EAAQ,EAEpChW,EAAS,KAAM,SAAU4U,EAAK,SAAS,OAAQ,OAAO,EACtD5U,EAAS,KAAM,WAAY4U,EAAK,SAAS,SAAU,OAAO,EAE1D,KAAK,eAAeA,CAAI,CAC1B,EACA,QAAS,cACX,CAAC,yhDCnBM,MAAMqB,GAAmB,CAC9B,QAAQC,EAAgB,CACR,CACZ,SACA,qBACA,oBACA,YACA,WACA,QACA,QAEA,aAEA,eACA,mBACA,kBACA,aACA,gBACA,YAEA,gBACA,kBACA,iBACA,gBACA,mBACA,iBACA,iBACA,mBACA,qBACA,eAEA,UACA,cAEA,iBAEA,OAEA,MAAO,cACP,SAAU,iBACV,OAAQ,eACR,WAAY,mBACZ,eAAgB,uBAChB,cAAe,sBACf,QAAS,gBACT,aAAc,qBACd,QAAS,gBACT,aAAc,qBACd,OAAQ,eACR,SAAU,iBACV,cAAe,sBACf,OACA,QAAS,gBACT,YAAa,oBACb,OAAQ,eAER,QACA,gBACA,SACA,SAEA,WACA,YAEA,YACA,iBACA,WACA,WACA,eACA,aACA,UACA,WACA,WACA,gBACA,kBACA,cACF,EAEM,QAAQxK,GAAQ,CAEpBwK,EAAI,UAAUxK,EAAMyK,GAAMzK,EAAK,CACjC,CAAC,CACH,CACF,EAEgB,SAAA0K,GAAUhR,EAAkB,CAC1C,OAAOiR,GAAWjR,CAAM,EAAE,IAAI6Q,EAAgB,CAChD,CC3EA,SAAwBK,IAAiC,CACvD,MAAMlT,EAAyB,CAC7B,OAAQ,IAAImN,EACZ,MAAO,EACP,SAAU,GACV,aAAc,EACd,aAAAgG,EACA,QAAA5Q,CACF,EACA,OAAOvC,EAEP,SAASmT,EAAaC,EAAkC/P,EAAiB,CACvErD,EAAI,MAAQoT,EAAO,OACnBpT,EAAI,SAAS,OAAO,CAAC,EACrBA,EAAI,aAAe,EACnB,QAAQ,IAAIoT,EAAO,IAAIC,CAAW,CAAC,EAAE,KAAKhQ,CAAE,CAC9C,CAEA,SAASgQ,EAAYC,EAA6BpO,EAAe,CAC/D,OAAO,IAAI,QAAQqO,GAAW,CAC5BvT,EAAI,OAAO,KACTsT,EAAI,IACJxH,GAAW,CACT9L,EAAI,cAAgB,EAAIA,EAAI,MAC5BA,EAAI,SAASkF,GAAS4G,EACtByH,EAAQzH,CAAO,CACjB,CACF,CACF,CAAC,CACH,CAEA,SAASvJ,GAAU,CACjBvC,EAAI,SAAS,QAAQsO,GAAKA,EAAE,QAAA,CAAS,CACvC,CACF"} \ No newline at end of file diff --git a/build/trois.module.js b/build/trois.module.js new file mode 100644 index 0000000..2ea6562 --- /dev/null +++ b/build/trois.module.js @@ -0,0 +1,3010 @@ +import { toRef, watch, ref, defineComponent, watchEffect, inject, provide, getCurrentInstance, onUnmounted, createApp as createApp$1 } from 'vue'; +import { Vector3, Raycaster as Raycaster$1, Plane as Plane$1, Vector2, InstancedMesh as InstancedMesh$1, WebGLRenderer, OrthographicCamera as OrthographicCamera$1, PerspectiveCamera as PerspectiveCamera$1, Scene as Scene$1, Color, Texture as Texture$1, Group as Group$1, WebGLCubeRenderTarget, RGBAFormat, LinearMipmapLinearFilter, CubeCamera as CubeCamera$1, Mesh as Mesh$1, BufferGeometry, BufferAttribute, BoxGeometry as BoxGeometry$1, CircleGeometry as CircleGeometry$1, ConeGeometry as ConeGeometry$1, CylinderGeometry as CylinderGeometry$1, DodecahedronGeometry as DodecahedronGeometry$1, ExtrudeGeometry as ExtrudeGeometry$1, IcosahedronGeometry as IcosahedronGeometry$1, LatheGeometry as LatheGeometry$1, OctahedronGeometry as OctahedronGeometry$1, PlaneGeometry as PlaneGeometry$1, PolyhedronGeometry as PolyhedronGeometry$1, RingGeometry as RingGeometry$1, SphereGeometry as SphereGeometry$1, ShapeGeometry as ShapeGeometry$1, TetrahedronGeometry as TetrahedronGeometry$1, TorusGeometry as TorusGeometry$1, TorusKnotGeometry as TorusKnotGeometry$1, CatmullRomCurve3, Curve, TubeGeometry as TubeGeometry$1, SpotLight as SpotLight$1, DirectionalLight as DirectionalLight$1, AmbientLight as AmbientLight$1, HemisphereLight as HemisphereLight$1, PointLight as PointLight$1, RectAreaLight as RectAreaLight$1, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, MeshPhysicalMaterial, PointsMaterial as PointsMaterial$1, ShadowMaterial as ShadowMaterial$1, MeshStandardMaterial, MeshToonMaterial, TextureLoader, MeshMatcapMaterial, ShaderMaterial as ShaderMaterial$1, ShaderChunk, UniformsUtils, ShaderLib, CubeReflectionMapping, CubeTextureLoader, VideoTexture as VideoTexture$1, DoubleSide, SpriteMaterial, Sprite as Sprite$1, Points as Points$1 } from 'three'; +import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; +import { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js'; +import { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js'; +import { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'; +import { FontLoader } from 'three/examples/jsm/loaders/FontLoader.js'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; +import { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js'; +import { EffectComposer as EffectComposer$1 } from 'three/examples/jsm/postprocessing/EffectComposer.js'; +import { RenderPass as RenderPass$1 } from 'three/examples/jsm/postprocessing/RenderPass.js'; +import { BokehPass as BokehPass$1 } from 'three/examples/jsm/postprocessing/BokehPass.js'; +import { FilmPass as FilmPass$1 } from 'three/examples/jsm/postprocessing/FilmPass.js'; +import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'; +import { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'; +import { HalftonePass as HalftonePass$1 } from 'three/examples/jsm/postprocessing/HalftonePass.js'; +import { SMAAPass as SMAAPass$1 } from 'three/examples/jsm/postprocessing/SMAAPass.js'; +import { SSAOPass as SSAOPass$1 } from 'three/examples/jsm/postprocessing/SSAOPass.js'; +import { UnrealBloomPass as UnrealBloomPass$1 } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js'; + +function applyObjectProps(dst, options, setter) { + if (options instanceof Object) { + Object.entries(options).forEach(([key, value]) => { + if (setter) + setter(dst, key, value); + else + dst[key] = value; + }); + } +} +function bindObjectProp(src, prop, dst, apply = true, setter) { + if (apply) + applyObjectProps(dst, src[prop], setter); + const r = toRef(src, prop); + return watch(r, (value) => { + applyObjectProps(dst, value, setter); + }); +} +function bindObjectProps(src, dst, apply = true, setter) { + if (apply) + applyObjectProps(dst, src, setter); + const r = ref(src); + return watch(r, (value) => { + applyObjectProps(dst, value, setter); + }, { deep: true }); +} +function setFromProp(o, prop) { + if (prop instanceof Object) { + Object.entries(prop).forEach(([key, value]) => { + o[key] = value; + }); + } +} +function bindProps(src, props, dst) { + props.forEach((prop) => { + bindProp(src, prop, dst, prop); + }); +} +function bindProp(src, srcProp, dst, dstProp) { + const _dstProp = dstProp || srcProp; + const ref2 = toRef(src, srcProp); + if (ref2.value instanceof Object) { + setFromProp(dst[_dstProp], ref2.value); + watch(ref2, (value) => { + setFromProp(dst[_dstProp], value); + }, { deep: true }); + } else { + if (ref2.value !== void 0) + dst[_dstProp] = src[srcProp]; + watch(ref2, (value) => { + dst[_dstProp] = value; + }); + } +} +function propsValues(props, exclude = []) { + const values = {}; + Object.entries(props).forEach(([key, value]) => { + if (!exclude || !exclude.includes(key)) { + values[key] = value; + } + }); + return values; +} +function lerp(value1, value2, amount) { + amount = amount < 0 ? 0 : amount; + amount = amount > 1 ? 1 : amount; + return value1 + (value2 - value1) * amount; +} +function limit(val, min, max) { + return val < min ? min : val > max ? max : val; +} +const MATCAP_ROOT = "https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d"; +const DEFAULT_MATCAP = "0404E8_0404B5_0404CB_3333FC"; +function getMatcapUrl(hash = DEFAULT_MATCAP, format = 1024) { + const fileName = `${hash}${getMatcapFormatString(format)}.png`; + return `${MATCAP_ROOT}/${format}/${fileName}`; +} +function getMatcapFormatString(format) { + switch (format) { + case 64: + return "-64px"; + case 128: + return "-128px"; + case 256: + return "-256px"; + case 512: + return "-512px"; + default: + return ""; + } +} + +function useRaycaster(options) { + const { + camera, + resetPosition = new Vector3(0, 0, 0) + } = options; + const raycaster = new Raycaster$1(); + const position = resetPosition.clone(); + const plane = new Plane$1(new Vector3(0, 0, 1), 0); + const updatePosition = (coords) => { + raycaster.setFromCamera(coords, camera); + camera.getWorldDirection(plane.normal); + raycaster.ray.intersectPlane(plane, position); + }; + const intersect = (coords, objects, recursive = false) => { + raycaster.setFromCamera(coords, camera); + return raycaster.intersectObjects(objects, recursive); + }; + return { + position, + updatePosition, + intersect + }; +} + +function usePointer(options) { + const { + camera, + domElement, + intersectObjects, + intersectRecursive = false, + touch = true, + resetOnEnd = false, + onEnter = () => { + }, + onMove = () => { + }, + onLeave = () => { + }, + onClick = () => { + }, + onIntersectEnter = () => { + }, + onIntersectOver = () => { + }, + onIntersectMove = () => { + }, + onIntersectLeave = () => { + }, + onIntersectClick = () => { + } + } = options; + const position = new Vector2(0, 0); + const positionN = new Vector2(0, 0); + const raycaster = useRaycaster({ camera }); + const positionV3 = raycaster.position; + const obj = { + position, + positionN, + positionV3, + intersectObjects, + listeners: false, + addListeners, + removeListeners, + intersect + }; + return obj; + function reset() { + position.set(0, 0); + positionN.set(0, 0); + positionV3.set(0, 0, 0); + } + function updatePosition(event) { + let x, y; + if (event.touches && event.touches.length > 0) { + x = event.touches[0].clientX; + y = event.touches[0].clientY; + } else { + x = event.clientX; + y = event.clientY; + } + const rect = domElement.getBoundingClientRect(); + position.x = x - rect.left; + position.y = y - rect.top; + positionN.x = position.x / rect.width * 2 - 1; + positionN.y = -(position.y / rect.height) * 2 + 1; + raycaster.updatePosition(positionN); + } + function intersect() { + const _intersectObjects = getIntersectObjects(); + if (_intersectObjects.length) { + const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive); + const offObjects = [..._intersectObjects]; + const iMeshes = []; + intersects.forEach((intersect2) => { + var _a, _b, _c; + const { object } = intersect2; + const component = getComponent(object); + if (object instanceof InstancedMesh$1) { + if (iMeshes.indexOf(object) !== -1) + return; + iMeshes.push(object); + } + if (!object.userData.over) { + object.userData.over = true; + const overEvent = { type: "pointerover", over: true, component, intersect: intersect2 }; + const enterEvent = { ...overEvent, type: "pointerenter" }; + onIntersectOver(overEvent); + onIntersectEnter(enterEvent); + (_a = component == null ? void 0 : component.onPointerOver) == null ? void 0 : _a.call(component, overEvent); + (_b = component == null ? void 0 : component.onPointerEnter) == null ? void 0 : _b.call(component, enterEvent); + } + const moveEvent = { type: "pointermove", component, intersect: intersect2 }; + onIntersectMove(moveEvent); + (_c = component == null ? void 0 : component.onPointerMove) == null ? void 0 : _c.call(component, moveEvent); + offObjects.splice(offObjects.indexOf(object), 1); + }); + offObjects.forEach((object) => { + var _a, _b; + const component = getComponent(object); + if (object.userData.over) { + object.userData.over = false; + const overEvent = { type: "pointerover", over: false, component }; + const leaveEvent = { ...overEvent, type: "pointerleave" }; + onIntersectOver(overEvent); + onIntersectLeave(leaveEvent); + (_a = component == null ? void 0 : component.onPointerOver) == null ? void 0 : _a.call(component, overEvent); + (_b = component == null ? void 0 : component.onPointerLeave) == null ? void 0 : _b.call(component, leaveEvent); + } + }); + } + } + function pointerEnter(event) { + updatePosition(event); + onEnter({ type: "pointerenter", position, positionN, positionV3 }); + } + function pointerMove(event) { + updatePosition(event); + onMove({ type: "pointermove", position, positionN, positionV3 }); + intersect(); + } + function pointerClick(event) { + updatePosition(event); + const _intersectObjects = getIntersectObjects(); + if (_intersectObjects.length) { + const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive); + const iMeshes = []; + intersects.forEach((intersect2) => { + var _a; + const { object } = intersect2; + const component = getComponent(object); + if (object instanceof InstancedMesh$1) { + if (iMeshes.indexOf(object) !== -1) + return; + iMeshes.push(object); + } + const event2 = { type: "click", component, intersect: intersect2 }; + onIntersectClick(event2); + (_a = component == null ? void 0 : component.onClick) == null ? void 0 : _a.call(component, event2); + }); + } + onClick({ type: "click", position, positionN, positionV3 }); + } + function pointerLeave() { + if (resetOnEnd) + reset(); + onLeave({ type: "pointerleave" }); + } + function getComponent(object) { + if (object.userData.component) + return object.userData.component; + let parent = object.parent; + while (parent) { + if (parent.userData.component) { + return parent.userData.component; + } + parent = parent.parent; + } + return void 0; + } + function getIntersectObjects() { + if (typeof intersectObjects === "function") { + return intersectObjects(); + } else + return intersectObjects; + } + function addListeners() { + domElement.addEventListener("mouseenter", pointerEnter); + domElement.addEventListener("mousemove", pointerMove); + domElement.addEventListener("mouseleave", pointerLeave); + domElement.addEventListener("click", pointerClick); + if (touch) { + domElement.addEventListener("touchstart", pointerEnter); + domElement.addEventListener("touchmove", pointerMove); + domElement.addEventListener("touchend", pointerLeave); + } + obj.listeners = true; + } + function removeListeners() { + domElement.removeEventListener("mouseenter", pointerEnter); + domElement.removeEventListener("mousemove", pointerMove); + domElement.removeEventListener("mouseleave", pointerLeave); + domElement.removeEventListener("click", pointerClick); + domElement.removeEventListener("touchstart", pointerEnter); + domElement.removeEventListener("touchmove", pointerMove); + domElement.removeEventListener("touchend", pointerLeave); + obj.listeners = false; + } +} + +function useThree(params) { + const config = { + antialias: true, + alpha: false, + autoClear: true, + orbitCtrl: false, + pointer: false, + resize: false, + width: 300, + height: 150 + }; + if (params) { + Object.entries(params).forEach(([key, value]) => { + config[key] = value; + }); + } + const size = { + width: 1, + height: 1, + wWidth: 1, + wHeight: 1, + ratio: 1 + }; + const beforeRenderCallbacks = []; + const intersectObjects = []; + const renderer = createRenderer(); + const obj = { + config, + renderer, + size, + init, + dispose, + render, + renderC, + setSize, + addIntersectObject, + removeIntersectObject + }; + return obj; + function createRenderer() { + const renderer2 = new WebGLRenderer({ canvas: config.canvas, antialias: config.antialias, alpha: config.alpha, ...config.params }); + renderer2.autoClear = config.autoClear; + return renderer2; + } + function init() { + if (!obj.scene) { + console.error("Missing Scene"); + return false; + } + if (!obj.camera) { + console.error("Missing Camera"); + return false; + } + if (config.resize) { + onResize(); + window.addEventListener("resize", onResize); + } else if (config.width && config.height) { + setSize(config.width, config.height); + } + initPointer(); + if (config.orbitCtrl) { + const cameraCtrl = new OrbitControls(obj.camera, obj.renderer.domElement); + if (config.orbitCtrl instanceof Object) { + Object.entries(config.orbitCtrl).forEach(([key, value]) => { + cameraCtrl[key] = value; + }); + } + onBeforeRender(() => { + cameraCtrl.update(); + }); + obj.cameraCtrl = cameraCtrl; + } + return true; + } + function initPointer() { + let pointerConf = { + camera: obj.camera, + domElement: obj.renderer.domElement, + intersectObjects + }; + if (config.pointer && config.pointer instanceof Object) { + pointerConf = { ...pointerConf, ...config.pointer }; + } + const pointer = obj.pointer = usePointer(pointerConf); + if (config.pointer || intersectObjects.length) { + pointer.addListeners(); + if (pointerConf.intersectMode === "frame") { + onBeforeRender(pointer.intersect); + } + } + } + function onBeforeRender(cb) { + beforeRenderCallbacks.push(cb); + } + function render() { + beforeRenderCallbacks.forEach((c) => c()); + obj.renderer.render(obj.scene, obj.camera); + } + function renderC() { + beforeRenderCallbacks.forEach((c) => c()); + obj.composer.render(); + } + function addIntersectObject(o) { + if (intersectObjects.indexOf(o) === -1) { + intersectObjects.push(o); + } + if (obj.pointer && !obj.pointer.listeners) { + obj.pointer.addListeners(); + } + } + function removeIntersectObject(o) { + const i = intersectObjects.indexOf(o); + if (i !== -1) { + intersectObjects.splice(i, 1); + } + if (obj.pointer && !config.pointer && intersectObjects.length === 0) { + obj.pointer.removeListeners(); + } + } + function dispose() { + window.removeEventListener("resize", onResize); + if (obj.pointer) + obj.pointer.removeListeners(); + if (obj.cameraCtrl) + obj.cameraCtrl.dispose(); + if (obj.renderer) + obj.renderer.dispose(); + } + function onResize() { + var _a; + if (config.resize === "window") { + setSize(window.innerWidth, window.innerHeight); + } else { + const elt = obj.renderer.domElement.parentNode; + if (elt) + setSize(elt.clientWidth, elt.clientHeight); + } + (_a = config.onResize) == null ? void 0 : _a.call(config, size); + } + function setSize(width, height) { + size.width = width; + size.height = height; + size.ratio = width / height; + obj.renderer.setSize(width, height, false); + const camera = obj.camera; + if (camera.type === "PerspectiveCamera") { + const pCamera = camera; + pCamera.aspect = size.ratio; + pCamera.updateProjectionMatrix(); + } + if (camera.type === "OrthographicCamera") { + const oCamera = camera; + size.wWidth = oCamera.right - oCamera.left; + size.wHeight = oCamera.top - oCamera.bottom; + } else { + const wsize = getCameraSize(); + size.wWidth = wsize[0]; + size.wHeight = wsize[1]; + } + } + function getCameraSize() { + const camera = obj.camera; + const vFOV = camera.fov * Math.PI / 180; + const h = 2 * Math.tan(vFOV / 2) * Math.abs(camera.position.z); + const w = h * camera.aspect; + return [w, h]; + } +} + +const RendererInjectionKey = Symbol("Renderer"); +var Renderer = defineComponent({ + name: "Renderer", + props: { + params: { type: Object, default: () => ({}) }, + antialias: Boolean, + alpha: Boolean, + autoClear: { type: Boolean, default: true }, + orbitCtrl: { type: [Boolean, Object], default: false }, + pointer: { type: [Boolean, Object], default: false }, + resize: { type: [Boolean, String], default: false }, + shadow: Boolean, + width: String, + height: String, + pixelRatio: Number, + xr: Boolean, + props: { type: Object, default: () => ({}) }, + onReady: Function + }, + inheritAttrs: false, + setup(props, { attrs }) { + const initCallbacks = []; + const mountedCallbacks = []; + const beforeRenderCallbacks = []; + const afterRenderCallbacks = []; + const resizeCallbacks = []; + const canvas = document.createElement("canvas"); + Object.entries(attrs).forEach(([key, value]) => { + const matches = key.match(/^on([A-Z][a-zA-Z]*)$/); + if (matches) { + canvas.addEventListener(matches[1].toLowerCase(), value); + } else { + canvas.setAttribute(key, value); + } + }); + const config = { + canvas, + params: props.params, + antialias: props.antialias, + alpha: props.alpha, + autoClear: props.autoClear, + orbitCtrl: props.orbitCtrl, + pointer: props.pointer, + resize: props.resize + }; + if (props.width) + config.width = parseInt(props.width); + if (props.height) + config.height = parseInt(props.height); + const three = useThree(config); + bindObjectProp(props, "props", three.renderer); + watchEffect(() => { + if (props.pixelRatio) + three.renderer.setPixelRatio(props.pixelRatio); + }); + const renderFn = () => { + }; + return { + canvas, + three, + renderer: three.renderer, + size: three.size, + renderFn, + raf: true, + initCallbacks, + mountedCallbacks, + beforeRenderCallbacks, + afterRenderCallbacks, + resizeCallbacks + }; + }, + computed: { + camera: { + get: function() { + return this.three.camera; + }, + set: function(camera) { + this.three.camera = camera; + } + }, + scene: { + get: function() { + return this.three.scene; + }, + set: function(scene) { + this.three.scene = scene; + } + }, + composer: { + get: function() { + return this.three.composer; + }, + set: function(composer) { + this.three.composer = composer; + } + } + }, + provide() { + return { + [RendererInjectionKey]: this + }; + }, + mounted() { + var _a; + this.$el.parentNode.insertBefore(this.canvas, this.$el); + if (this.three.init()) { + if (this.three.pointer) { + this.$pointer = this.three.pointer; + } + this.three.config.onResize = (size) => { + this.resizeCallbacks.forEach((e) => e({ type: "resize", renderer: this, size })); + }; + if (this.shadow) { + this.renderer.shadowMap.enabled = true; + } + this.renderFn = this.three.composer ? this.three.renderC : this.three.render; + this.initCallbacks.forEach((e) => e({ type: "init", renderer: this })); + (_a = this.onReady) == null ? void 0 : _a.call(this, this); + if (this.xr) { + this.renderer.xr.enabled = true; + this.renderer.setAnimationLoop(this.render); + } else { + requestAnimationFrame(this.renderLoop); + } + } + this.mountedCallbacks.forEach((e) => e({ type: "mounted", renderer: this })); + }, + beforeUnmount() { + this.canvas.remove(); + this.beforeRenderCallbacks = []; + this.afterRenderCallbacks = []; + this.raf = false; + this.three.dispose(); + }, + methods: { + onInit(cb) { + this.addListener("init", cb); + }, + onMounted(cb) { + this.addListener("mounted", cb); + }, + onBeforeRender(cb) { + this.addListener("beforerender", cb); + }, + offBeforeRender(cb) { + this.removeListener("beforerender", cb); + }, + onAfterRender(cb) { + this.addListener("afterrender", cb); + }, + offAfterRender(cb) { + this.removeListener("afterrender", cb); + }, + onResize(cb) { + this.addListener("resize", cb); + }, + offResize(cb) { + this.removeListener("resize", cb); + }, + addListener(type, cb) { + const callbacks = this.getCallbacks(type); + callbacks.push(cb); + }, + removeListener(type, cb) { + const callbacks = this.getCallbacks(type); + const index = callbacks.indexOf(cb); + if (index !== -1) + callbacks.splice(index, 1); + }, + getCallbacks(type) { + if (type === "init") { + return this.initCallbacks; + } else if (type === "mounted") { + return this.mountedCallbacks; + } else if (type === "beforerender") { + return this.beforeRenderCallbacks; + } else if (type === "afterrender") { + return this.afterRenderCallbacks; + } else { + return this.resizeCallbacks; + } + }, + render(time) { + this.beforeRenderCallbacks.forEach((e) => e({ type: "beforerender", renderer: this, time })); + this.renderFn({ renderer: this, time }); + this.afterRenderCallbacks.forEach((e) => e({ type: "afterrender", renderer: this, time })); + }, + renderLoop(time) { + if (this.raf) + requestAnimationFrame(this.renderLoop); + this.render(time); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Renderer" +}); + +var Camera = defineComponent({ + props: { + props: { type: Object, default: () => ({}) } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + } +}); +function cameraSetProp(camera, key, value, updateProjectionMatrix = true) { + camera[key] = value; + if (updateProjectionMatrix) + camera.updateProjectionMatrix(); +} + +var OrthographicCamera = defineComponent({ + extends: Camera, + name: "OrthographicCamera", + props: { + left: { type: Number, default: -1 }, + right: { type: Number, default: 1 }, + top: { type: Number, default: 1 }, + bottom: { type: Number, default: -1 }, + near: { type: Number, default: 0.1 }, + far: { type: Number, default: 2e3 }, + zoom: { type: Number, default: 1 }, + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) } + }, + setup(props) { + const renderer = inject(RendererInjectionKey); + if (!renderer) { + console.error("Renderer not found"); + return; + } + const camera = new OrthographicCamera$1(props.left, props.right, props.top, props.bottom, props.near, props.far); + renderer.camera = camera; + bindProp(props, "position", camera); + bindObjectProp(props, "props", camera, true, cameraSetProp); + ["left", "right", "top", "bottom", "near", "far", "zoom"].forEach((p) => { + watch(() => props[p], (value) => { + cameraSetProp(camera, p, value); + }); + }); + return { renderer, camera }; + }, + __hmrId: "OrthographicCamera" +}); + +var PerspectiveCamera = defineComponent({ + extends: Camera, + name: "PerspectiveCamera", + props: { + aspect: { type: Number, default: 1 }, + far: { type: Number, default: 2e3 }, + fov: { type: Number, default: 50 }, + near: { type: Number, default: 0.1 }, + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + lookAt: { type: Object, default: null } + }, + setup(props) { + var _a; + const renderer = inject(RendererInjectionKey); + if (!renderer) { + console.error("Renderer not found"); + return; + } + const camera = new PerspectiveCamera$1(props.fov, props.aspect, props.near, props.far); + renderer.camera = camera; + bindProp(props, "position", camera); + if (props.lookAt) + camera.lookAt((_a = props.lookAt.x) != null ? _a : 0, props.lookAt.y, props.lookAt.z); + watch(() => props.lookAt, (v) => { + var _a2; + camera.lookAt((_a2 = v.x) != null ? _a2 : 0, v.y, v.z); + }, { deep: true }); + bindObjectProp(props, "props", camera, true, cameraSetProp); + ["aspect", "far", "fov", "near"].forEach((p) => { + watch(() => props[p], (value) => { + cameraSetProp(camera, p, value); + }); + }); + return { renderer, camera }; + }, + __hmrId: "PerspectiveCamera" +}); + +const SceneInjectionKey = Symbol("Scene"); +var Scene = defineComponent({ + name: "Scene", + props: { + background: [String, Number, Object] + }, + setup(props) { + const renderer = inject(RendererInjectionKey); + const scene = new Scene$1(); + if (!renderer) { + console.error("Renderer not found"); + return; + } + renderer.scene = scene; + provide(SceneInjectionKey, scene); + const setBackground = (value) => { + if (!value) + return; + if (typeof value === "string" || typeof value === "number") { + if (scene.background instanceof Color) + scene.background.set(value); + else + scene.background = new Color(value); + } else if (value instanceof Texture$1) { + scene.background = value; + } + }; + setBackground(props.background); + watch(() => props.background, setBackground); + const add = (o) => { + scene.add(o); + }; + const remove = (o) => { + scene.remove(o); + }; + return { scene, add, remove }; + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Scene" +}); + +const pointerProps = { + onPointerEnter: Function, + onPointerOver: Function, + onPointerMove: Function, + onPointerLeave: Function, + onPointerDown: Function, + onPointerUp: Function, + onClick: Function +}; +var Object3D = defineComponent({ + name: "Object3D", + inject: { + renderer: RendererInjectionKey, + scene: SceneInjectionKey + }, + emits: ["created", "ready"], + props: { + position: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + rotation: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) }, + scale: { type: Object, default: () => ({ x: 1, y: 1, z: 1, order: "XYZ" }) }, + lookAt: { type: Object, default: null }, + userData: { type: Object, default: () => ({}) }, + visible: { type: Boolean, default: true }, + props: { type: Object, default: () => ({}) }, + disableAdd: { type: Boolean, default: false }, + disableRemove: { type: Boolean, default: false }, + ...pointerProps + }, + setup() { + return {}; + }, + created() { + if (!this.renderer) { + console.error("Missing parent Renderer"); + } + if (!this.scene) { + console.error("Missing parent Scene"); + } + }, + unmounted() { + if (!this.disableRemove) + this.removeFromParent(); + if (this.o3d) { + if (this.renderer) + this.renderer.three.removeIntersectObject(this.o3d); + } + }, + methods: { + initObject3D(o3d) { + var _a; + this.o3d = o3d; + o3d.userData.component = this; + if (this.onPointerEnter || this.onPointerOver || this.onPointerMove || this.onPointerLeave || this.onPointerDown || this.onPointerUp || this.onClick) { + if (this.renderer) + this.renderer.three.addIntersectObject(o3d); + } + bindProp(this, "position", o3d); + bindProp(this, "rotation", o3d); + bindProp(this, "scale", o3d); + bindProp(this, "userData", o3d.userData); + bindProp(this, "visible", o3d); + bindObjectProp(this, "props", o3d); + this.$emit("created", o3d); + if (this.lookAt) + o3d.lookAt((_a = this.lookAt.x) != null ? _a : 0, this.lookAt.y, this.lookAt.z); + watch(() => this.lookAt, (v) => { + var _a2; + o3d.lookAt((_a2 = v.x) != null ? _a2 : 0, v.y, v.z); + }, { deep: true }); + this.parent = this.getParent(); + if (!this.disableAdd) { + if (this.addToParent()) + this.$emit("ready", this); + else + console.error("Missing parent (Scene, Group...)"); + } + }, + getParent() { + let parent = this.$parent; + if (!parent) { + const instance = getCurrentInstance(); + if (instance && instance.parent) + parent = instance.parent.ctx; + } + while (parent) { + if (parent.add) + return parent; + parent = parent.$parent; + } + return void 0; + }, + addToParent(o) { + const o3d = o || this.o3d; + if (this.parent) { + this.parent.add(o3d); + return true; + } + return false; + }, + removeFromParent(o) { + const o3d = o || this.o3d; + if (this.parent) { + this.parent.remove(o3d); + return true; + } + return false; + }, + add(o) { + var _a; + (_a = this.o3d) == null ? void 0 : _a.add(o); + }, + remove(o) { + var _a; + (_a = this.o3d) == null ? void 0 : _a.remove(o); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Object3D" +}); + +var Group = defineComponent({ + name: "Group", + extends: Object3D, + setup() { + return { + group: new Group$1() + }; + }, + created() { + this.initObject3D(this.group); + }, + __hmrId: "Group" +}); + +const emptyCallBack = () => { +}; +var Raycaster = defineComponent({ + name: "Raycaster", + props: { + onPointerEnter: { type: Function, default: emptyCallBack }, + onPointerOver: { type: Function, default: emptyCallBack }, + onPointerMove: { type: Function, default: emptyCallBack }, + onPointerLeave: { type: Function, default: emptyCallBack }, + onClick: { type: Function, default: emptyCallBack }, + intersectMode: { type: String, default: "move" }, + intersectRecursive: { type: Boolean, default: false } + }, + setup() { + const renderer = inject(RendererInjectionKey); + return { renderer }; + }, + mounted() { + if (!this.renderer) { + console.error("Renderer not found"); + return; + } + const renderer = this.renderer; + this.renderer.onMounted(() => { + if (!renderer.camera) + return; + this.pointer = usePointer({ + camera: renderer.camera, + domElement: renderer.canvas, + intersectObjects: () => renderer.scene ? renderer.scene.children : [], + intersectRecursive: this.intersectRecursive, + onIntersectEnter: this.onPointerEnter, + onIntersectOver: this.onPointerOver, + onIntersectMove: this.onPointerMove, + onIntersectLeave: this.onPointerLeave, + onIntersectClick: this.onClick + }); + this.pointer.addListeners(); + if (this.intersectMode === "frame") { + renderer.onBeforeRender(this.pointer.intersect); + } + }); + }, + unmounted() { + var _a; + if (this.pointer) { + this.pointer.removeListeners(); + (_a = this.renderer) == null ? void 0 : _a.offBeforeRender(this.pointer.intersect); + } + }, + render() { + return []; + }, + __hmrId: "Raycaster" +}); + +var CubeCamera = defineComponent({ + extends: Object3D, + props: { + cubeRTSize: { type: Number, default: 256 }, + cubeCameraNear: { type: Number, default: 0.1 }, + cubeCameraFar: { type: Number, default: 2e3 }, + autoUpdate: Boolean, + hideMeshes: { type: Array, default: () => [] } + }, + setup(props) { + const rendererC = inject(RendererInjectionKey); + if (!rendererC || !rendererC.scene) { + console.error("Missing Renderer / Scene"); + return {}; + } + const renderer = rendererC.renderer, scene = rendererC.scene; + const cubeRT = new WebGLCubeRenderTarget(props.cubeRTSize, { format: RGBAFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter }); + const cubeCamera = new CubeCamera$1(props.cubeCameraNear, props.cubeCameraFar, cubeRT); + const updateRT = () => { + props.hideMeshes.forEach((m) => { + m.visible = false; + }); + cubeCamera.update(renderer, scene); + props.hideMeshes.forEach((m) => { + m.visible = true; + }); + }; + if (props.autoUpdate) { + rendererC.onBeforeRender(updateRT); + onUnmounted(() => { + rendererC.offBeforeRender(updateRT); + }); + } else { + rendererC.onMounted(updateRT); + } + return { cubeRT, cubeCamera, updateRT }; + }, + created() { + if (this.cubeCamera) + this.initObject3D(this.cubeCamera); + }, + render() { + return []; + }, + __hmrId: "CubeCamera" +}); + +const MeshInjectionKey = Symbol("Mesh"); +const Mesh = defineComponent({ + name: "Mesh", + extends: Object3D, + props: { + castShadow: Boolean, + receiveShadow: Boolean + }, + setup() { + return {}; + }, + provide() { + return { + [MeshInjectionKey]: this + }; + }, + mounted() { + if (!this.mesh && !this.loading) + this.initMesh(); + }, + methods: { + initMesh() { + const mesh = new Mesh$1(this.geometry, this.material); + bindProp(this, "castShadow", mesh); + bindProp(this, "receiveShadow", mesh); + this.mesh = mesh; + this.initObject3D(mesh); + }, + createGeometry() { + }, + addGeometryWatchers(props) { + Object.keys(props).forEach((prop) => { + watch(() => this[prop], () => { + this.refreshGeometry(); + }); + }); + }, + setGeometry(geometry) { + this.geometry = geometry; + if (this.mesh) + this.mesh.geometry = geometry; + }, + setMaterial(material) { + if (Array.isArray(material) || !this.material) { + this.material = material; + if (this.mesh) + this.mesh.material = material; + } else { + let prev = this.material; + if (Array.isArray(prev)) { + prev.push(material); + } else { + prev = [prev, material]; + } + this.material = prev; + if (this.mesh) + this.mesh.material = prev; + } + }, + refreshGeometry() { + const oldGeo = this.geometry; + this.createGeometry(); + if (this.mesh && this.geometry) + this.mesh.geometry = this.geometry; + oldGeo == null ? void 0 : oldGeo.dispose(); + } + }, + unmounted() { + if (this.geometry) + this.geometry.dispose(); + if (this.material) { + if (Array.isArray(this.material)) { + for (const m of this.material) + m.dispose(); + } else { + this.material.dispose(); + } + } + }, + __hmrId: "Mesh" +}); +function meshComponent(name, props, createGeometry) { + return defineComponent({ + name, + extends: Mesh, + props, + created() { + this.createGeometry(); + this.addGeometryWatchers(props); + }, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + } + } + }); +} + +const Geometry = defineComponent({ + emits: ["created"], + props: { + rotateX: Number, + rotateY: Number, + rotateZ: Number, + attributes: { type: Array, default: () => [] } + }, + inject: { + mesh: MeshInjectionKey + }, + setup() { + return {}; + }, + created() { + if (!this.mesh) { + console.error("Missing parent Mesh"); + return; + } + this.createGeometry(); + this.rotateGeometry(); + if (this.geometry) + this.mesh.setGeometry(this.geometry); + Object.keys(this.$props).forEach((prop) => { + watch(() => this[prop], this.refreshGeometry); + }); + }, + unmounted() { + var _a; + (_a = this.geometry) == null ? void 0 : _a.dispose(); + }, + methods: { + createGeometry() { + const bufferAttributes = {}; + const geometry = new BufferGeometry(); + this.attributes.forEach((attribute) => { + if (attribute.name && attribute.itemSize && attribute.array) { + const bufferAttribute = bufferAttributes[attribute.name] = new BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized); + geometry.setAttribute(attribute.name, bufferAttribute); + } + }); + geometry.computeBoundingBox(); + geometry.userData.component = this; + this.geometry = geometry; + this.$emit("created", geometry); + }, + rotateGeometry() { + if (!this.geometry) + return; + if (this.rotateX) + this.geometry.rotateX(this.rotateX); + if (this.rotateY) + this.geometry.rotateY(this.rotateY); + if (this.rotateZ) + this.geometry.rotateZ(this.rotateZ); + }, + refreshGeometry() { + const oldGeo = this.geometry; + this.createGeometry(); + this.rotateGeometry(); + if (this.geometry && this.mesh) + this.mesh.setGeometry(this.geometry); + oldGeo == null ? void 0 : oldGeo.dispose(); + } + }, + render() { + return []; + } +}); +function geometryComponent(name, props, createGeometry) { + return defineComponent({ + name, + extends: Geometry, + props, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + this.geometry.userData.component = this; + this.$emit("created", this.geometry); + } + } + }); +} + +const props$n = { + size: Number, + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + depth: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + depthSegments: { type: Number, default: 1 } +}; +function createGeometry$h(comp) { + if (comp.size) { + return new BoxGeometry$1(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } else { + return new BoxGeometry$1(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments); + } +} +var BoxGeometry = geometryComponent("BoxGeometry", props$n, createGeometry$h); + +const props$m = { + radius: { type: Number, default: 1 }, + segments: { type: Number, default: 8 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$g(comp) { + return new CircleGeometry$1(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength); +} +var CircleGeometry = geometryComponent("CircleGeometry", props$m, createGeometry$g); + +const props$l = { + radius: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$f(comp) { + return new ConeGeometry$1(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var ConeGeometry = geometryComponent("ConeGeometry", props$l, createGeometry$f); + +const props$k = { + radiusTop: { type: Number, default: 1 }, + radiusBottom: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + heightSegments: { type: Number, default: 1 }, + openEnded: { type: Boolean, default: false }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$e(comp) { + return new CylinderGeometry$1(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength); +} +var CylinderGeometry = geometryComponent("CylinderGeometry", props$k, createGeometry$e); + +const props$j = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$d(comp) { + return new DodecahedronGeometry$1(comp.radius, comp.detail); +} +var DodecahedronGeometry = geometryComponent("DodecahedronGeometry", props$j, createGeometry$d); + +const props$i = { + shapes: { type: [Object, Array] }, + options: { type: Object } +}; +function createGeometry$c(comp) { + return new ExtrudeGeometry$1(comp.shapes, comp.options); +} +var ExtrudeGeometry = geometryComponent("ExtrudeGeometry", props$i, createGeometry$c); + +const props$h = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$b(comp) { + return new IcosahedronGeometry$1(comp.radius, comp.detail); +} +var IcosahedronGeometry = geometryComponent("IcosahedronGeometry", props$h, createGeometry$b); + +const props$g = { + points: Array, + segments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$a(comp) { + return new LatheGeometry$1(comp.points, comp.segments, comp.phiStart, comp.phiLength); +} +var LatheGeometry = geometryComponent("LatheGeometry", props$g, createGeometry$a); + +const props$f = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$9(comp) { + return new OctahedronGeometry$1(comp.radius, comp.detail); +} +var OctahedronGeometry = geometryComponent("OctahedronGeometry", props$f, createGeometry$9); + +const props$e = { + width: { type: Number, default: 1 }, + height: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 } +}; +function createGeometry$8(comp) { + return new PlaneGeometry$1(comp.width, comp.height, comp.widthSegments, comp.heightSegments); +} +var PlaneGeometry = geometryComponent("PlaneGeometry", props$e, createGeometry$8); + +const props$d = { + vertices: Array, + indices: Array, + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$7(comp) { + return new PolyhedronGeometry$1(comp.vertices, comp.indices, comp.radius, comp.detail); +} +var PolyhedronGeometry = geometryComponent("PolyhedronGeometry", props$d, createGeometry$7); + +const props$c = { + innerRadius: { type: Number, default: 0.5 }, + outerRadius: { type: Number, default: 1 }, + thetaSegments: { type: Number, default: 8 }, + phiSegments: { type: Number, default: 1 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$6(comp) { + return new RingGeometry$1(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength); +} +var RingGeometry = geometryComponent("RingGeometry", props$c, createGeometry$6); + +const props$b = { + radius: { type: Number, default: 1 }, + widthSegments: { type: Number, default: 12 }, + heightSegments: { type: Number, default: 12 }, + phiStart: { type: Number, default: 0 }, + phiLength: { type: Number, default: Math.PI * 2 }, + thetaStart: { type: Number, default: 0 }, + thetaLength: { type: Number, default: Math.PI } +}; +function createGeometry$5(comp) { + return new SphereGeometry$1(comp.radius, comp.widthSegments, comp.heightSegments, comp.phiStart, comp.phiLength, comp.thetaStart, comp.thetaLength); +} +var SphereGeometry = geometryComponent("SphereGeometry", props$b, createGeometry$5); + +const props$a = { + shapes: { type: [Object, Array] }, + curveSegments: { type: Number } +}; +function createGeometry$4(comp) { + return new ShapeGeometry$1(comp.shapes, comp.curveSegments); +} +var ShapeGeometry = geometryComponent("ShapeGeometry", props$a, createGeometry$4); + +const props$9 = { + radius: { type: Number, default: 1 }, + detail: { type: Number, default: 0 } +}; +function createGeometry$3(comp) { + return new TetrahedronGeometry$1(comp.radius, comp.detail); +} +var TetrahedronGeometry = geometryComponent("TetrahedronGeometry", props$9, createGeometry$3); + +const props$8 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + radialSegments: { type: Number, default: 8 }, + tubularSegments: { type: Number, default: 6 }, + arc: { type: Number, default: Math.PI * 2 } +}; +function createGeometry$2(comp) { + return new TorusGeometry$1(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc); +} +var TorusGeometry = geometryComponent("TorusGeometry", props$8, createGeometry$2); + +const props$7 = { + radius: { type: Number, default: 1 }, + tube: { type: Number, default: 0.4 }, + tubularSegments: { type: Number, default: 64 }, + radialSegments: { type: Number, default: 8 }, + p: { type: Number, default: 2 }, + q: { type: Number, default: 3 } +}; +function createGeometry$1(comp) { + return new TorusKnotGeometry$1(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q); +} +var TorusKnotGeometry = geometryComponent("TorusKnotGeometry", props$7, createGeometry$1); + +const props$6 = { + points: Array, + path: Curve, + tubularSegments: { type: Number, default: 64 }, + radius: { type: Number, default: 1 }, + radialSegments: { type: Number, default: 8 }, + closed: { type: Boolean, default: false } +}; +function createGeometry(comp) { + let curve; + if (comp.points) { + curve = new CatmullRomCurve3(comp.points); + } else if (comp.path) { + curve = comp.path; + } else { + console.error("Missing path curve or points."); + } + return new TubeGeometry$1(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed); +} +var TubeGeometry = defineComponent({ + extends: Geometry, + props: props$6, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); + } + } +}); +function updateTubeGeometryPoints(tube, points) { + const curve = new CatmullRomCurve3(points); + const { radialSegments, radius, tubularSegments, closed } = tube.parameters; + const frames = curve.computeFrenetFrames(tubularSegments, closed); + tube.tangents = frames.tangents; + tube.normals = frames.normals; + tube.binormals = frames.binormals; + tube.parameters.path = curve; + const pAttribute = tube.getAttribute("position"); + const nAttribute = tube.getAttribute("normal"); + const normal = new Vector3(); + const P = new Vector3(); + for (let i = 0; i < tubularSegments; i++) { + updateSegment(i); + } + updateSegment(tubularSegments); + tube.attributes.position.needsUpdate = true; + tube.attributes.normal.needsUpdate = true; + function updateSegment(i) { + curve.getPointAt(i / tubularSegments, P); + const N = frames.normals[i]; + const B = frames.binormals[i]; + for (let j = 0; j <= radialSegments; j++) { + const v = j / radialSegments * Math.PI * 2; + const sin = Math.sin(v); + const cos = -Math.cos(v); + normal.x = cos * N.x + sin * B.x; + normal.y = cos * N.y + sin * B.y; + normal.z = cos * N.z + sin * B.z; + normal.normalize(); + const index = i * (radialSegments + 1) + j; + nAttribute.setXYZ(index, normal.x, normal.y, normal.z); + pAttribute.setXYZ(index, P.x + radius * normal.x, P.y + radius * normal.y, P.z + radius * normal.z); + } + } +} + +var Light = defineComponent({ + extends: Object3D, + name: "Light", + props: { + color: { type: String, default: "#ffffff" }, + intensity: { type: Number, default: 1 }, + castShadow: { type: Boolean, default: false }, + shadowMapSize: { type: Object, default: () => ({ x: 512, y: 512 }) }, + shadowCamera: { type: Object, default: () => ({}) } + }, + setup() { + return {}; + }, + unmounted() { + if (this.light instanceof SpotLight$1 || this.light instanceof DirectionalLight$1) { + this.removeFromParent(this.light.target); + } + }, + methods: { + initLight(light) { + this.light = light; + if (light.shadow) { + light.castShadow = this.castShadow; + setFromProp(light.shadow.mapSize, this.shadowMapSize); + setFromProp(light.shadow.camera, this.shadowCamera); + } + ["color", "intensity", "castShadow"].forEach((p) => { + watch(() => this[p], (value) => { + if (p === "color") { + light.color.set(value); + } else { + light[p] = value; + } + }); + }); + this.initObject3D(light); + if (light instanceof SpotLight$1 || light instanceof DirectionalLight$1) { + bindProp(this, "target", light.target, "position"); + this.addToParent(light.target); + } + } + }, + __hmrId: "Light" +}); + +var AmbientLight = defineComponent({ + extends: Light, + created() { + this.initLight(new AmbientLight$1(this.color, this.intensity)); + }, + __hmrId: "AmbientLight" +}); + +var DirectionalLight = defineComponent({ + extends: Light, + props: { + target: { type: Object, default: () => ({ x: 0, y: 0, z: 0 }) } + }, + created() { + this.initLight(new DirectionalLight$1(this.color, this.intensity)); + }, + __hmrId: "DirectionalLight" +}); + +var HemisphereLight = defineComponent({ + extends: Light, + props: { + groundColor: { type: String, default: "#444444" } + }, + created() { + const light = new HemisphereLight$1(this.color, this.groundColor, this.intensity); + watch(() => this.groundColor, (value) => { + light.groundColor.set(value); + }); + this.initLight(light); + }, + __hmrId: "HemisphereLight" +}); + +var PointLight = defineComponent({ + extends: Light, + props: { + distance: { type: Number, default: 0 }, + decay: { type: Number, default: 1 } + }, + created() { + this.initLight(new PointLight$1(this.color, this.intensity, this.distance, this.decay)); + }, + __hmrId: "PointLight" +}); + +var RectAreaLight = defineComponent({ + extends: Light, + props: { + width: { type: Number, default: 10 }, + height: { type: Number, default: 10 }, + helper: Boolean + }, + created() { + RectAreaLightUniformsLib.init(); + const light = new RectAreaLight$1(this.color, this.intensity, this.width, this.height); + const watchProps = ["width", "height"]; + watchProps.forEach((p) => { + watch(() => this[p], (value) => { + light[p] = value; + }); + }); + if (this.helper) { + const lightHelper = new RectAreaLightHelper(light); + light.add(lightHelper); + } + this.initLight(light); + }, + __hmrId: "RectAreaLight" +}); + +var SpotLight = defineComponent({ + extends: Light, + props: { + angle: { type: Number, default: Math.PI / 3 }, + decay: { type: Number, default: 1 }, + distance: { type: Number, default: 0 }, + penumbra: { type: Number, default: 0 }, + target: Object + }, + created() { + const light = new SpotLight$1(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay); + const watchProps = ["angle", "decay", "distance", "penumbra"]; + watchProps.forEach((p) => { + watch(() => this[p], (value) => { + light[p] = value; + }); + }); + this.initLight(light); + }, + __hmrId: "SpotLight" +}); + +const MaterialInjectionKey = Symbol("Material"); +const BaseMaterial = defineComponent({ + emits: ["created"], + props: { + color: { type: String, default: "#ffffff" }, + props: { type: Object, default: () => ({}) } + }, + inject: { + mesh: MeshInjectionKey + }, + setup() { + return {}; + }, + provide() { + return { + [MaterialInjectionKey]: this + }; + }, + created() { + if (!this.mesh) { + console.error("Missing parent Mesh"); + return; + } + if (this.createMaterial) { + const material = this.material = this.createMaterial(); + watch(() => this.color, (value) => { + material.color.set(value); + }); + bindObjectProp(this, "props", material, false, this.setProp); + this.$emit("created", material); + this.mesh.setMaterial(material); + } + }, + unmounted() { + var _a; + (_a = this.material) == null ? void 0 : _a.dispose(); + }, + methods: { + getMaterialParams() { + return { ...propsValues(this.$props, ["props"]), ...this.props }; + }, + setProp(material, key, value, needsUpdate = false) { + const dstVal = material[key]; + if (dstVal instanceof Color) + dstVal.set(value); + else + material[key] = value; + material.needsUpdate = needsUpdate; + }, + setTexture(texture, key = "map") { + this.setProp(this.material, key, texture, true); + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "Material" +}); +function materialComponent(name, props, createMaterial) { + return defineComponent({ + name, + extends: BaseMaterial, + props, + methods: { + createMaterial() { + return createMaterial(this.getMaterialParams()); + } + } + }); +} +const BasicMaterial = materialComponent("BasicMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshBasicMaterial(opts)); +const LambertMaterial = materialComponent("LambertMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshLambertMaterial(opts)); +const PhongMaterial = materialComponent("PhongMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshPhongMaterial(opts)); +const PhysicalMaterial = materialComponent("PhysicalMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshPhysicalMaterial(opts)); +const PointsMaterial = materialComponent("PointsMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new PointsMaterial$1(opts)); +const ShadowMaterial = materialComponent("ShadowMaterial", { color: { type: String, default: "#000000" }, props: { type: Object, default: () => ({}) } }, (opts) => new ShadowMaterial$1(opts)); +const StandardMaterial = materialComponent("StandardMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshStandardMaterial(opts)); +const ToonMaterial = materialComponent("ToonMaterial", { props: { type: Object, default: () => ({}) } }, (opts) => new MeshToonMaterial(opts)); + +var MatcapMaterial = materialComponent( + "MatcapMaterial", + { + src: String, + name: { type: String, default: "0404E8_0404B5_0404CB_3333FC" } + }, + (opts) => { + const src = opts.src ? opts.src : getMatcapUrl(opts.name); + const params = propsValues(opts, ["src", "name"]); + params.matcap = new TextureLoader().load(src); + return new MeshMatcapMaterial(params); + } +); + +const defaultVertexShader = ` + varying vec2 vUv; + void main(){ + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); + } +`; +const defaultFragmentShader = ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0); + } +`; +var ShaderMaterial = materialComponent( + "ShaderMaterial", + { + props: { type: Object, default: () => ({ + uniforms: {}, + vertexShader: defaultVertexShader, + fragmentShader: defaultFragmentShader + }) } + }, + (opts) => new ShaderMaterial$1(propsValues(opts, ["color"])) +); + +function replaceAll(string, find, replace) { + return string.split(find).join(replace); +} +const meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf("void main() {")); +const meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf("void main() {")); +const SubsurfaceScatteringShader = { + uniforms: UniformsUtils.merge([ + ShaderLib.phong.uniforms, + { + thicknessColor: { value: new Color(16777215) }, + thicknessDistortion: { value: 0.1 }, + thicknessAmbient: { value: 0 }, + thicknessAttenuation: { value: 0.1 }, + thicknessPower: { value: 2 }, + thicknessScale: { value: 10 } + } + ]), + vertexShader: ` + #define USE_UV + ${ShaderChunk.meshphong_vert} + `, + fragmentShader: ` + #define USE_UV + #define SUBSURFACE + + ${meshphongFragHead} + + uniform float thicknessPower; + uniform float thicknessScale; + uniform float thicknessDistortion; + uniform float thicknessAmbient; + uniform float thicknessAttenuation; + uniform vec3 thicknessColor; + + void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { + #ifdef USE_COLOR + vec3 thickness = vColor * thicknessColor; + #else + vec3 thickness = thicknessColor; + #endif + vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); + float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; + vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; + reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; + } + ` + meshphongFragBody.replace( + "#include ", + replaceAll( + ShaderChunk.lights_fragment_begin, + "RE_Direct( directLight, geometry, material, reflectedLight );", + ` + RE_Direct( directLight, geometry, material, reflectedLight ); + #if defined( SUBSURFACE ) && defined( USE_UV ) + RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); + #endif + ` + ) + ) +}; + +var SubSurfaceMaterial = defineComponent({ + extends: BaseMaterial, + props: { + uniforms: { type: Object, default: () => ({ + diffuse: "#ffffff", + thicknessColor: "#ffffff", + thicknessDistortion: 0.4, + thicknessAmbient: 0.01, + thicknessAttenuation: 0.7, + thicknessPower: 2, + thicknessScale: 4 + }) } + }, + methods: { + createMaterial() { + const params = SubsurfaceScatteringShader; + const uniforms = UniformsUtils.clone(params.uniforms); + bindObjectProp(this, "uniforms", uniforms, true, (dst, key, value) => { + const dstVal = dst[key].value; + if (dstVal instanceof Color) + dstVal.set(value); + else + dst[key].value = value; + }); + const material = new ShaderMaterial$1({ + ...params, + lights: true, + ...this.props, + uniforms + }); + return material; + } + } +}); + +var Texture = defineComponent({ + inject: { + material: MaterialInjectionKey + }, + props: { + name: { type: String, default: "map" }, + uniform: String, + src: String, + onLoad: Function, + onProgress: Function, + onError: Function, + props: { type: Object, default: () => ({}) } + }, + setup() { + return {}; + }, + created() { + this.refreshTexture(); + watch(() => this.src, this.refreshTexture); + }, + unmounted() { + var _a, _b; + (_a = this.material) == null ? void 0 : _a.setTexture(null, this.name); + (_b = this.texture) == null ? void 0 : _b.dispose(); + }, + methods: { + createTexture() { + if (!this.src) + return void 0; + return new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError); + }, + initTexture() { + if (!this.texture) + return; + bindObjectProp(this, "props", this.texture); + if (!this.material) + return; + this.material.setTexture(this.texture, this.name); + if (this.material.material instanceof ShaderMaterial$1 && this.uniform) { + this.material.material.uniforms[this.uniform] = { value: this.texture }; + } + }, + refreshTexture() { + var _a; + (_a = this.texture) == null ? void 0 : _a.dispose(); + this.texture = this.createTexture(); + this.initTexture(); + }, + onLoaded(t) { + var _a; + (_a = this.onLoad) == null ? void 0 : _a.call(this, t); + } + }, + render() { + return []; + } +}); + +var CubeTexture = defineComponent({ + extends: Texture, + props: { + name: { type: String, default: "envMap" }, + path: { type: String, required: true }, + urls: { + type: Array, + default: () => ["px.jpg", "nx.jpg", "py.jpg", "ny.jpg", "pz.jpg", "nz.jpg"] + }, + props: { type: Object, default: () => ({ mapping: CubeReflectionMapping }) } + }, + created() { + watch(() => this.path, this.refreshTexture); + watch(() => this.urls, this.refreshTexture); + }, + methods: { + createTexture() { + return new CubeTextureLoader().setPath(this.path).load(this.urls, this.onLoaded, this.onProgress, this.onError); + } + } +}); + +var VideoTexture = defineComponent({ + extends: Texture, + props: { + videoId: { + type: String, + required: true + } + }, + created() { + watch(() => this.videoId, this.refreshTexture); + }, + methods: { + createTexture() { + const video = document.getElementById(this.videoId); + return new VideoTexture$1(video); + } + } +}); + +var Box = meshComponent("Box", props$n, createGeometry$h); + +var Circle = meshComponent("Circle", props$m, createGeometry$g); + +var Cone = meshComponent("Cone", props$l, createGeometry$f); + +var Cylinder = meshComponent("Cylinder", props$k, createGeometry$e); + +var Dodecahedron = meshComponent("Dodecahedron", props$j, createGeometry$d); + +var Icosahedron = meshComponent("Icosahedron", props$h, createGeometry$b); + +var Lathe = meshComponent("Lathe", props$g, createGeometry$a); + +var Octahedron = meshComponent("Octahedron", props$f, createGeometry$9); + +var Plane = meshComponent("Plane", props$e, createGeometry$8); + +var Polyhedron = meshComponent("Polyhedron", props$d, createGeometry$7); + +var Ring = meshComponent("Ring", props$c, createGeometry$6); + +var Sphere = meshComponent("Sphere", props$b, createGeometry$5); + +var Tetrahedron = meshComponent("Tetrahedron", props$9, createGeometry$3); + +const props$5 = { + text: { type: String, required: true, default: "Text" }, + fontSrc: { type: String, required: true }, + size: { type: Number, default: 80 }, + height: { type: Number, default: 5 }, + depth: { type: Number, default: 1 }, + curveSegments: { type: Number, default: 12 }, + bevelEnabled: { type: Boolean, default: false }, + bevelThickness: { type: Number, default: 10 }, + bevelSize: { type: Number, default: 8 }, + bevelOffset: { type: Number, default: 0 }, + bevelSegments: { type: Number, default: 5 }, + align: { type: [Boolean, String], default: false } +}; +var Text = defineComponent({ + extends: Mesh, + props: props$5, + setup() { + return {}; + }, + created() { + if (!this.fontSrc) { + console.error('Missing required prop: "font-src"'); + return; + } + const watchProps = [ + "text", + "size", + "height", + "curveSegments", + "bevelEnabled", + "bevelThickness", + "bevelSize", + "bevelOffset", + "bevelSegments", + "align" + ]; + watchProps.forEach((p) => { + watch(() => this[p], () => { + if (this.font) + this.refreshGeometry(); + }); + }); + const loader = new FontLoader(); + this.loading = true; + loader.load(this.fontSrc, (font) => { + this.loading = false; + this.font = font; + this.createGeometry(); + this.initMesh(); + }); + }, + methods: { + createGeometry() { + this.geometry = new TextGeometry(this.text, { + font: this.font, + size: this.size, + height: this.height, + depth: this.depth, + curveSegments: this.curveSegments, + bevelEnabled: this.bevelEnabled, + bevelThickness: this.bevelThickness, + bevelSize: this.bevelSize, + bevelOffset: this.bevelOffset, + bevelSegments: this.bevelSegments + }); + if (this.align === "center") { + this.geometry.center(); + } + } + } +}); + +var Torus = meshComponent("Torus", props$8, createGeometry$2); + +var TorusKnot = meshComponent("TorusKnot", props$7, createGeometry$1); + +var Tube = defineComponent({ + extends: Mesh, + props: props$6, + created() { + this.createGeometry(); + this.addGeometryWatchers(props$6); + }, + methods: { + createGeometry() { + this.geometry = createGeometry(this); + }, + updatePoints(points) { + updateTubeGeometryPoints(this.geometry, points); + } + }, + __hmrId: "Tube" +}); + +var Image = defineComponent({ + emits: ["loaded"], + extends: Mesh, + props: { + src: { type: String, required: true }, + width: Number, + height: Number, + widthSegments: { type: Number, default: 1 }, + heightSegments: { type: Number, default: 1 }, + keepSize: Boolean + }, + setup() { + return {}; + }, + created() { + if (!this.renderer) + return; + this.geometry = new PlaneGeometry$1(1, 1, this.widthSegments, this.heightSegments); + this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() }); + watch(() => this.src, this.refreshTexture); + ["width", "height"].forEach((p) => { + watch(() => this[p], this.resize); + }); + this.resize(); + if (this.keepSize) + this.renderer.onResize(this.resize); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.offResize(this.resize); + }, + methods: { + loadTexture() { + return new TextureLoader().load(this.src, this.onLoaded); + }, + refreshTexture() { + var _a; + (_a = this.texture) == null ? void 0 : _a.dispose(); + if (this.material) { + this.material.map = this.loadTexture(); + this.material.needsUpdate = true; + } + }, + onLoaded(texture) { + this.texture = texture; + this.resize(); + this.$emit("loaded", texture); + }, + resize() { + if (!this.renderer || !this.texture) + return; + const screen = this.renderer.size; + const iW = this.texture.image.width; + const iH = this.texture.image.height; + const iRatio = iW / iH; + let w = 1, h = 1; + if (this.width && this.height) { + w = this.width * screen.wWidth / screen.width; + h = this.height * screen.wHeight / screen.height; + } else if (this.width) { + w = this.width * screen.wWidth / screen.width; + h = w / iRatio; + } else if (this.height) { + h = this.height * screen.wHeight / screen.height; + w = h * iRatio; + } else { + if (iRatio > 1) + w = h * iRatio; + else + h = w / iRatio; + } + if (this.mesh) { + this.mesh.scale.x = w; + this.mesh.scale.y = h; + } + } + }, + __hmrId: "Image" +}); + +var InstancedMesh = defineComponent({ + extends: Mesh, + props: { + count: { type: Number, required: true } + }, + methods: { + initMesh() { + if (!this.renderer) + return; + if (!this.geometry || !this.material) { + console.error("Missing geometry and/or material"); + return false; + } + this.mesh = new InstancedMesh$1(this.geometry, this.material, this.count); + this.mesh.userData.component = this; + bindProp(this, "castShadow", this.mesh); + bindProp(this, "receiveShadow", this.mesh); + if (this.onPointerEnter || this.onPointerOver || this.onPointerMove || this.onPointerLeave || this.onPointerDown || this.onPointerUp || this.onClick) { + this.renderer.three.addIntersectObject(this.mesh); + } + this.initObject3D(this.mesh); + } + }, + __hmrId: "InstancedMesh" +}); + +var Sprite = defineComponent({ + extends: Object3D, + emits: ["loaded"], + props: { + src: { type: String, required: true } + }, + setup() { + return {}; + }, + created() { + this.texture = new TextureLoader().load(this.src, this.onLoaded); + this.material = new SpriteMaterial({ map: this.texture }); + this.sprite = new Sprite$1(this.material); + this.initObject3D(this.sprite); + }, + unmounted() { + var _a, _b; + (_a = this.texture) == null ? void 0 : _a.dispose(); + (_b = this.material) == null ? void 0 : _b.dispose(); + }, + methods: { + onLoaded() { + this.updateUV(); + this.$emit("loaded"); + }, + updateUV() { + if (!this.texture || !this.sprite) + return; + const iWidth = this.texture.image.width; + const iHeight = this.texture.image.height; + const iRatio = iWidth / iHeight; + let x = 0.5, y = 0.5; + if (iRatio > 1) { + x = 0.5 * iRatio; + } else { + y = 0.5 / iRatio; + } + const positions = this.sprite.geometry.attributes.position.array; + positions[0] = -x; + positions[1] = -y; + positions[5] = x; + positions[6] = -y; + positions[10] = x; + positions[11] = y; + positions[15] = -x; + positions[16] = y; + this.sprite.geometry.attributes.position.needsUpdate = true; + } + }, + __hmrId: "Sprite" +}); + +var Points = defineComponent({ + extends: Object3D, + setup() { + return {}; + }, + provide() { + return { + [MeshInjectionKey]: this + }; + }, + mounted() { + this.mesh = this.points = new Points$1(this.geometry, this.material); + this.initObject3D(this.mesh); + }, + methods: { + setGeometry(geometry) { + this.geometry = geometry; + if (this.mesh) + this.mesh.geometry = geometry; + }, + setMaterial(material) { + this.material = material; + if (this.mesh) + this.mesh.material = material; + } + } +}); + +var Model = defineComponent({ + extends: Object3D, + emits: ["before-load", "load", "progress", "error"], + props: { + src: { type: String, required: true } + }, + data() { + return { + progress: 0 + }; + }, + methods: { + onLoad(model) { + this.$emit("load", model); + }, + onProgress(progress) { + this.progress = progress.loaded / progress.total; + this.$emit("progress", progress); + }, + onError(error) { + this.$emit("error", error); + } + } +}); + +var GLTF = defineComponent({ + extends: Model, + created() { + const loader = new GLTFLoader(); + this.$emit("before-load", loader); + loader.load(this.src, (gltf) => { + this.onLoad(gltf); + this.initObject3D(gltf.scene); + }, this.onProgress, this.onError); + } +}); + +var FBX = defineComponent({ + extends: Model, + created() { + const loader = new FBXLoader(); + this.$emit("before-load", loader); + loader.load(this.src, (fbx) => { + this.onLoad(fbx); + this.initObject3D(fbx); + }, this.onProgress, this.onError); + } +}); + +const ComposerInjectionKey = Symbol("Composer"); +var EffectComposer = defineComponent({ + setup() { + const renderer = inject(RendererInjectionKey); + return { renderer }; + }, + provide() { + return { + [ComposerInjectionKey]: this + }; + }, + created() { + if (!this.renderer) { + console.error("Renderer not found"); + return; + } + const renderer = this.renderer; + const composer = new EffectComposer$1(this.renderer.renderer); + this.composer = composer; + this.renderer.composer = composer; + renderer.addListener("init", () => { + renderer.renderer.autoClear = false; + this.resize(); + renderer.addListener("resize", this.resize); + }); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.removeListener("resize", this.resize); + }, + methods: { + addPass(pass) { + var _a; + (_a = this.composer) == null ? void 0 : _a.addPass(pass); + }, + removePass(pass) { + var _a; + (_a = this.composer) == null ? void 0 : _a.removePass(pass); + }, + resize() { + if (this.composer && this.renderer) { + this.composer.setSize(this.renderer.size.width, this.renderer.size.height); + } + } + }, + render() { + return this.$slots.default ? this.$slots.default() : []; + }, + __hmrId: "EffectComposer" +}); + +var EffectPass = defineComponent({ + inject: { + renderer: RendererInjectionKey, + composer: ComposerInjectionKey + }, + emits: ["ready"], + setup() { + return {}; + }, + created() { + if (!this.composer) { + console.error("Missing parent EffectComposer"); + } + if (!this.renderer) { + console.error("Missing parent Renderer"); + } + }, + unmounted() { + var _a, _b, _c; + if (this.pass) { + (_a = this.composer) == null ? void 0 : _a.removePass(this.pass); + (_c = (_b = this.pass).dispose) == null ? void 0 : _c.call(_b); + } + }, + methods: { + initEffectPass(pass) { + var _a; + this.pass = pass; + (_a = this.composer) == null ? void 0 : _a.addPass(pass); + this.$emit("ready", pass); + } + }, + render() { + return []; + }, + __hmrId: "EffectPass" +}); + +var RenderPass = defineComponent({ + extends: EffectPass, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const pass = new RenderPass$1(this.renderer.scene, this.renderer.camera); + this.initEffectPass(pass); + }, + __hmrId: "RenderPass" +}); + +const props$4 = { + focus: { type: Number, default: 1 }, + aperture: { type: Number, default: 0.025 }, + maxblur: { type: Number, default: 0.01 } +}; +var BokehPass = defineComponent({ + extends: EffectPass, + props: props$4, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const params = { + focus: this.focus, + aperture: this.aperture, + maxblur: this.maxblur, + width: this.renderer.size.width, + height: this.renderer.size.height + }; + const pass = new BokehPass$1(this.renderer.scene, this.renderer.camera, params); + Object.keys(props$4).forEach((p) => { + watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "BokehPass" +}); + +const props$3 = { + noiseIntensity: { type: Number, default: 0.5 }, + scanlinesIntensity: { type: Number, default: 0.05 }, + scanlinesCount: { type: Number, default: 4096 }, + grayscale: { type: Number, default: 0 } +}; +var FilmPass = defineComponent({ + extends: EffectPass, + props: props$3, + created() { + const pass = new FilmPass$1(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale); + Object.keys(props$3).forEach((p) => { + watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "FilmPass" +}); + +var FXAAPass = defineComponent({ + extends: EffectPass, + created() { + var _a; + const pass = new ShaderPass(FXAAShader); + (_a = this.renderer) == null ? void 0 : _a.addListener("resize", this.resize); + this.initEffectPass(pass); + }, + unmounted() { + var _a; + (_a = this.renderer) == null ? void 0 : _a.removeListener("resize", this.resize); + }, + methods: { + resize({ size }) { + if (this.pass) { + const { resolution } = this.pass.material.uniforms; + resolution.value.x = 1 / size.width; + resolution.value.y = 1 / size.height; + } + } + }, + __hmrId: "FXAAPass" +}); + +const props$2 = { + shape: { type: Number, default: 1 }, + radius: { type: Number, default: 4 }, + rotateR: { type: Number, default: Math.PI / 12 * 1 }, + rotateG: { type: Number, default: Math.PI / 12 * 2 }, + rotateB: { type: Number, default: Math.PI / 12 * 3 }, + scatter: { type: Number, default: 0 } +}; +var HalftonePass = defineComponent({ + extends: EffectPass, + props: props$2, + created() { + if (!this.renderer) + return; + const pass = new HalftonePass$1(this.renderer.size.width, this.renderer.size.height, {}); + Object.keys(props$2).forEach((p) => { + pass.uniforms[p].value = this[p]; + watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "HalftonePass" +}); + +var SMAAPass = defineComponent({ + extends: EffectPass, + created() { + if (!this.renderer) + return; + const pass = new SMAAPass$1(this.renderer.size.width, this.renderer.size.height); + this.initEffectPass(pass); + }, + __hmrId: "SMAAPass" +}); + +var SSAOPass = defineComponent({ + extends: EffectPass, + props: { + options: { + type: Object, + default: () => ({}) + } + }, + created() { + if (!this.renderer) + return; + if (!this.renderer.scene) { + console.error("Missing Scene"); + return; + } + if (!this.renderer.camera) { + console.error("Missing Camera"); + return; + } + const pass = new SSAOPass$1( + this.renderer.scene, + this.renderer.camera, + this.renderer.size.width, + this.renderer.size.height + ); + Object.keys(this.options).forEach((key) => { + pass[key] = this.options[key]; + }); + this.initEffectPass(pass); + }, + __hmrId: "SSAOPass" +}); + +var DefaultShader = { + uniforms: {}, + vertexShader: ` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `, + fragmentShader: ` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + ` +}; + +var TiltShift = { + uniforms: { + tDiffuse: { value: null }, + blurRadius: { value: 0 }, + gradientRadius: { value: 0 }, + start: { value: new Vector2() }, + end: { value: new Vector2() }, + delta: { value: new Vector2() }, + texSize: { value: new Vector2() } + }, + vertexShader: DefaultShader.vertexShader, + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform float blurRadius; + uniform float gradientRadius; + uniform vec2 start; + uniform vec2 end; + uniform vec2 delta; + uniform vec2 texSize; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x)); + float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius; + for (float t = -30.0; t <= 30.0; t++) { + float percent = (t + offset - 0.5) / 30.0; + float weight = 1.0 - abs(percent); + vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius); + // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + // texel2.rgb *= texel2.a; + + color += texel * weight; + total += 2.0 * weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + ` +}; + +const props$1 = { + blurRadius: { type: Number, default: 10 }, + gradientRadius: { type: Number, default: 100 }, + start: { type: Object, default: () => ({ x: 0, y: 100 }) }, + end: { type: Object, default: () => ({ x: 10, y: 100 }) } +}; +var TiltShiftPass = defineComponent({ + extends: EffectPass, + props: props$1, + setup() { + return { uniforms1: {}, uniforms2: {} }; + }, + created() { + if (!this.composer) + return; + this.pass1 = new ShaderPass(TiltShift); + this.pass2 = new ShaderPass(TiltShift); + const uniforms1 = this.uniforms1 = this.pass1.uniforms; + const uniforms2 = this.uniforms2 = this.pass2.uniforms; + uniforms2.blurRadius = uniforms1.blurRadius; + uniforms2.gradientRadius = uniforms1.gradientRadius; + uniforms2.start = uniforms1.start; + uniforms2.end = uniforms1.end; + uniforms2.texSize = uniforms1.texSize; + bindProp(this, "blurRadius", uniforms1.blurRadius, "value"); + bindProp(this, "gradientRadius", uniforms1.gradientRadius, "value"); + this.updateFocusLine(); + ["start", "end"].forEach((p) => { + watch(() => this[p], this.updateFocusLine, { deep: true }); + }); + this.pass1.setSize = (width, height) => { + uniforms1.texSize.value.set(width, height); + }; + this.initEffectPass(this.pass1); + this.composer.addPass(this.pass2); + }, + unmounted() { + if (this.composer && this.pass2) + this.composer.removePass(this.pass2); + }, + methods: { + updateFocusLine() { + this.uniforms1.start.value.copy(this.start); + this.uniforms1.end.value.copy(this.end); + const dv = new Vector2().copy(this.end).sub(this.start).normalize(); + this.uniforms1.delta.value.copy(dv); + this.uniforms2.delta.value.set(-dv.y, dv.x); + } + }, + __hmrId: "TiltShiftPass" +}); + +const props = { + strength: { type: Number, default: 1.5 }, + radius: { type: Number, default: 0 }, + threshold: { type: Number, default: 0 } +}; +var UnrealBloomPass = defineComponent({ + extends: EffectPass, + props, + created() { + if (!this.renderer) + return; + const size = new Vector2(this.renderer.size.width, this.renderer.size.height); + const pass = new UnrealBloomPass$1(size, this.strength, this.radius, this.threshold); + Object.keys(props).forEach((p) => { + watch(() => this[p], (value) => { + pass.uniforms[p].value = value; + }); + }); + this.initEffectPass(pass); + }, + __hmrId: "UnrealBloomPass" +}); + +var ZoomBlur = { + uniforms: { + tDiffuse: { value: null }, + center: { value: new Vector2(0.5, 0.5) }, + strength: { value: 0 } + }, + vertexShader: DefaultShader.vertexShader, + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform vec2 center; + uniform float strength; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + vec2 toCenter = center - vUv; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + for (float t = 0.0; t <= 40.0; t++) { + float percent = (t + offset) / 40.0; + float weight = 4.0 * (percent - percent * percent); + vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + + color += texel * weight; + total += weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + ` +}; + +var ZoomBlurPass = defineComponent({ + extends: EffectPass, + props: { + center: { type: Object, default: () => ({ x: 0.5, y: 0.5 }) }, + strength: { type: Number, default: 0.5 } + }, + created() { + const pass = new ShaderPass(ZoomBlur); + bindProp(this, "center", pass.uniforms.center, "value"); + bindProp(this, "strength", pass.uniforms.strength, "value"); + this.initEffectPass(pass); + }, + __hmrId: "ZoomBlurPass" +}); + +var TROIS = /*#__PURE__*/Object.freeze({ + __proto__: null, + Renderer: Renderer, + RendererInjectionKey: RendererInjectionKey, + OrthographicCamera: OrthographicCamera, + PerspectiveCamera: PerspectiveCamera, + Camera: PerspectiveCamera, + Group: Group, + Scene: Scene, + SceneInjectionKey: SceneInjectionKey, + Object3D: Object3D, + Raycaster: Raycaster, + CubeCamera: CubeCamera, + BufferGeometry: Geometry, + BoxGeometry: BoxGeometry, + CircleGeometry: CircleGeometry, + ConeGeometry: ConeGeometry, + CylinderGeometry: CylinderGeometry, + DodecahedronGeometry: DodecahedronGeometry, + ExtrudeGeometry: ExtrudeGeometry, + IcosahedronGeometry: IcosahedronGeometry, + LatheGeometry: LatheGeometry, + OctahedronGeometry: OctahedronGeometry, + PlaneGeometry: PlaneGeometry, + PolyhedronGeometry: PolyhedronGeometry, + RingGeometry: RingGeometry, + SphereGeometry: SphereGeometry, + ShapeGeometry: ShapeGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TorusGeometry: TorusGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TubeGeometry: TubeGeometry, + AmbientLight: AmbientLight, + DirectionalLight: DirectionalLight, + HemisphereLight: HemisphereLight, + PointLight: PointLight, + RectAreaLight: RectAreaLight, + SpotLight: SpotLight, + Material: BaseMaterial, + BasicMaterial: BasicMaterial, + LambertMaterial: LambertMaterial, + PhongMaterial: PhongMaterial, + PhysicalMaterial: PhysicalMaterial, + PointsMaterial: PointsMaterial, + ShadowMaterial: ShadowMaterial, + StandardMaterial: StandardMaterial, + ToonMaterial: ToonMaterial, + MaterialInjectionKey: MaterialInjectionKey, + MatcapMaterial: MatcapMaterial, + ShaderMaterial: ShaderMaterial, + SubSurfaceMaterial: SubSurfaceMaterial, + Texture: Texture, + CubeTexture: CubeTexture, + VideoTexture: VideoTexture, + Mesh: Mesh, + MeshInjectionKey: MeshInjectionKey, + Box: Box, + Circle: Circle, + Cone: Cone, + Cylinder: Cylinder, + Dodecahedron: Dodecahedron, + Icosahedron: Icosahedron, + Lathe: Lathe, + Octahedron: Octahedron, + Plane: Plane, + Polyhedron: Polyhedron, + Ring: Ring, + Sphere: Sphere, + Tetrahedron: Tetrahedron, + Text: Text, + Torus: Torus, + TorusKnot: TorusKnot, + Tube: Tube, + Image: Image, + InstancedMesh: InstancedMesh, + Sprite: Sprite, + Points: Points, + GltfModel: GLTF, + FbxModel: FBX, + EffectComposer: EffectComposer, + ComposerInjectionKey: ComposerInjectionKey, + RenderPass: RenderPass, + EffectPass: EffectPass, + BokehPass: BokehPass, + FilmPass: FilmPass, + FXAAPass: FXAAPass, + HalftonePass: HalftonePass, + SMAAPass: SMAAPass, + SSAOPass: SSAOPass, + TiltShiftPass: TiltShiftPass, + UnrealBloomPass: UnrealBloomPass, + ZoomBlurPass: ZoomBlurPass, + applyObjectProps: applyObjectProps, + bindObjectProp: bindObjectProp, + bindObjectProps: bindObjectProps, + setFromProp: setFromProp, + bindProps: bindProps, + bindProp: bindProp, + propsValues: propsValues, + lerp: lerp, + limit: limit, + getMatcapUrl: getMatcapUrl +}); + +const TroisJSVuePlugin = { + install(app) { + const comps = [ + "Camera", + "OrthographicCamera", + "PerspectiveCamera", + "Raycaster", + "Renderer", + "Scene", + "Group", + "CubeCamera", + "AmbientLight", + "DirectionalLight", + "HemisphereLight", + "PointLight", + "RectAreaLight", + "SpotLight", + "BasicMaterial", + "LambertMaterial", + "MatcapMaterial", + "PhongMaterial", + "PhysicalMaterial", + "PointsMaterial", + "ShaderMaterial", + "StandardMaterial", + "SubSurfaceMaterial", + "ToonMaterial", + "Texture", + "CubeTexture", + "BufferGeometry", + "Mesh", + "Box", + "BoxGeometry", + "Circle", + "CircleGeometry", + "Cone", + "ConeGeometry", + "Cylinder", + "CylinderGeometry", + "Dodecahedron", + "DodecahedronGeometry", + "Icosahedron", + "IcosahedronGeometry", + "Lathe", + "LatheGeometry", + "Octahedron", + "OctahedronGeometry", + "Plane", + "PlaneGeometry", + "Polyhedron", + "PolyhedronGeometry", + "Ring", + "RingGeometry", + "Sphere", + "SphereGeometry", + "Tetrahedron", + "TetrahedronGeometry", + "Text", + "Torus", + "TorusGeometry", + "TorusKnot", + "TorusKnotGeometry", + "Tube", + "TubeGeometry", + "Image", + "InstancedMesh", + "Points", + "Sprite", + "FbxModel", + "GltfModel", + "BokehPass", + "EffectComposer", + "FilmPass", + "FXAAPass", + "HalftonePass", + "RenderPass", + "SAOPass", + "SMAAPass", + "SSAOPass", + "TiltShiftPass", + "UnrealBloomPass", + "ZoomBlurPass" + ]; + comps.forEach((comp) => { + app.component(comp, TROIS[comp]); + }); + } +}; +function createApp(params) { + return createApp$1(params).use(TroisJSVuePlugin); +} + +function useTextures() { + const obj = { + loader: new TextureLoader(), + count: 0, + textures: [], + loadProgress: 0, + loadTextures, + dispose + }; + return obj; + function loadTextures(images, cb) { + obj.count = images.length; + obj.textures.splice(0); + obj.loadProgress = 0; + Promise.all(images.map(loadTexture)).then(cb); + } + function loadTexture(img, index) { + return new Promise((resolve) => { + obj.loader.load( + img.src, + (texture) => { + obj.loadProgress += 1 / obj.count; + obj.textures[index] = texture; + resolve(texture); + } + ); + }); + } + function dispose() { + obj.textures.forEach((t) => t.dispose()); + } +} + +export { AmbientLight, BasicMaterial, BokehPass, Box, BoxGeometry, Geometry as BufferGeometry, PerspectiveCamera as Camera, Circle, CircleGeometry, ComposerInjectionKey, Cone, ConeGeometry, CubeCamera, CubeTexture, Cylinder, CylinderGeometry, DirectionalLight, Dodecahedron, DodecahedronGeometry, EffectComposer, EffectPass, ExtrudeGeometry, FXAAPass, FBX as FbxModel, FilmPass, GLTF as GltfModel, Group, HalftonePass, HemisphereLight, Icosahedron, IcosahedronGeometry, Image, InstancedMesh, LambertMaterial, Lathe, LatheGeometry, MatcapMaterial, BaseMaterial as Material, MaterialInjectionKey, Mesh, MeshInjectionKey, Object3D, Octahedron, OctahedronGeometry, OrthographicCamera, PerspectiveCamera, PhongMaterial, PhysicalMaterial, Plane, PlaneGeometry, PointLight, Points, PointsMaterial, Polyhedron, PolyhedronGeometry, Raycaster, RectAreaLight, RenderPass, Renderer, RendererInjectionKey, Ring, RingGeometry, SMAAPass, SSAOPass, Scene, SceneInjectionKey, ShaderMaterial, ShadowMaterial, ShapeGeometry, Sphere, SphereGeometry, SpotLight, Sprite, StandardMaterial, SubSurfaceMaterial, Tetrahedron, TetrahedronGeometry, Text, Texture, TiltShiftPass, ToonMaterial, Torus, TorusGeometry, TorusKnot, TorusKnotGeometry, TroisJSVuePlugin, Tube, TubeGeometry, UnrealBloomPass, VideoTexture, ZoomBlurPass, applyObjectProps, bindObjectProp, bindObjectProps, bindProp, bindProps, createApp, getMatcapUrl, lerp, limit, propsValues, setFromProp, useTextures }; +//# sourceMappingURL=trois.module.js.map diff --git a/build/trois.module.js.map b/build/trois.module.js.map new file mode 100644 index 0000000..d353050 --- /dev/null +++ b/build/trois.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trois.module.js","sources":["../src/tools.ts","../src/core/useRaycaster.ts","../src/core/usePointer.ts","../src/core/useThree.ts","../src/core/Renderer.ts","../src/core/Camera.ts","../src/core/OrthographicCamera.ts","../src/core/PerspectiveCamera.ts","../src/core/Scene.ts","../src/core/Object3D.ts","../src/core/Group.ts","../src/core/Raycaster.ts","../src/core/CubeCamera.ts","../src/meshes/Mesh.ts","../src/geometries/Geometry.ts","../src/geometries/BoxGeometry.ts","../src/geometries/CircleGeometry.ts","../src/geometries/ConeGeometry.ts","../src/geometries/CylinderGeometry.ts","../src/geometries/DodecahedronGeometry.ts","../src/geometries/ExtrudeGeometry.ts","../src/geometries/IcosahedronGeometry.ts","../src/geometries/LatheGeometry.ts","../src/geometries/OctahedronGeometry.ts","../src/geometries/PlaneGeometry.ts","../src/geometries/PolyhedronGeometry.ts","../src/geometries/RingGeometry.ts","../src/geometries/SphereGeometry.ts","../src/geometries/ShapeGeometry.ts","../src/geometries/TetrahedronGeometry.ts","../src/geometries/TorusGeometry.ts","../src/geometries/TorusKnotGeometry.ts","../src/geometries/TubeGeometry.ts","../src/lights/Light.ts","../src/lights/AmbientLight.ts","../src/lights/DirectionalLight.ts","../src/lights/HemisphereLight.ts","../src/lights/PointLight.ts","../src/lights/RectAreaLight.ts","../src/lights/SpotLight.ts","../src/materials/Material.ts","../src/materials/MatcapMaterial.ts","../src/materials/ShaderMaterial.ts","../src/materials/SubsurfaceScatteringShader.ts","../src/materials/SubSurfaceMaterial.ts","../src/materials/Texture.ts","../src/materials/CubeTexture.ts","../src/materials/VideoTexture.ts","../src/meshes/Box.ts","../src/meshes/Circle.ts","../src/meshes/Cone.ts","../src/meshes/Cylinder.ts","../src/meshes/Dodecahedron.ts","../src/meshes/Icosahedron.ts","../src/meshes/Lathe.ts","../src/meshes/Octahedron.ts","../src/meshes/Plane.ts","../src/meshes/Polyhedron.ts","../src/meshes/Ring.ts","../src/meshes/Sphere.ts","../src/meshes/Tetrahedron.ts","../src/meshes/Text.ts","../src/meshes/Torus.ts","../src/meshes/TorusKnot.ts","../src/meshes/Tube.ts","../src/meshes/Image.ts","../src/meshes/InstancedMesh.ts","../src/meshes/Sprite.ts","../src/meshes/Points.ts","../src/models/Model.ts","../src/models/GLTF.ts","../src/models/FBX.ts","../src/effects/EffectComposer.ts","../src/effects/EffectPass.ts","../src/effects/RenderPass.ts","../src/effects/BokehPass.ts","../src/effects/FilmPass.ts","../src/effects/FXAAPass.ts","../src/effects/HalftonePass.ts","../src/effects/SMAAPass.ts","../src/effects/SSAOPass.ts","../src/shaders/default.ts","../src/shaders/TiltShift.ts","../src/effects/TiltShiftPass.ts","../src/effects/UnrealBloomPass.ts","../src/shaders/ZoomBlur.ts","../src/effects/ZoomBlurPass.ts","../src/plugin.ts","../src/use/useTextures.ts"],"sourcesContent":["import { ref, toRef, watch, WatchStopHandle } from 'vue'\n\ntype OptionSetter = (dst: any, key: string, value: any) => void\n\nexport function applyObjectProps(\n dst: any,\n options: Record,\n setter?: OptionSetter\n): void {\n if (options instanceof Object) {\n Object.entries(options).forEach(([key, value]) => {\n if (setter) setter(dst, key, value)\n else dst[key] = value\n })\n }\n}\n\nexport function bindObjectProp(\n src: any,\n prop: string,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src[prop], setter)\n const r = toRef(src, prop)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) })\n}\n\nexport function bindObjectProps(\n src: any,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src, setter)\n const r = ref(src)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) }, { deep: true })\n}\n\nexport function setFromProp(o: Record, prop: Record): void {\n if (prop instanceof Object) {\n Object.entries(prop).forEach(([key, value]) => {\n o[key] = value\n })\n }\n}\n\nexport function bindProps(src: any, props: string[], dst: any): void {\n props.forEach(prop => {\n bindProp(src, prop, dst, prop)\n })\n}\n\nexport function bindProp(src: any, srcProp: string, dst: any, dstProp?: string): void {\n const _dstProp = dstProp || srcProp\n const ref = toRef(src, srcProp)\n if (ref.value instanceof Object) {\n setFromProp(dst[_dstProp], ref.value)\n watch(ref, (value) => { setFromProp(dst[_dstProp], value) }, { deep: true })\n } else {\n if (ref.value !== undefined) dst[_dstProp] = src[srcProp]\n watch(ref, (value) => { dst[_dstProp] = value })\n }\n}\n\nexport function propsValues(props: Record, exclude: string[] = []): Record {\n const values: Record = {}\n Object.entries(props).forEach(([key, value]) => {\n if (!exclude || !exclude.includes(key)) {\n values[key] = value\n }\n })\n return values\n}\n\nexport function lerp(value1: number, value2: number, amount: number): number {\n amount = amount < 0 ? 0 : amount\n amount = amount > 1 ? 1 : amount\n return value1 + (value2 - value1) * amount\n}\n\nexport function limit(val: number, min: number, max: number): number {\n return val < min ? min : (val > max ? max : val)\n}\n\n// from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'\nconst DEFAULT_MATCAP = '0404E8_0404B5_0404CB_3333FC'\n\nexport function getMatcapUrl(hash = DEFAULT_MATCAP, format = 1024): string {\n const fileName = `${hash}${getMatcapFormatString(format)}.png`\n return `${MATCAP_ROOT}/${format}/${fileName}`\n}\n\nfunction getMatcapFormatString(format: number) {\n switch (format) {\n case 64:\n return '-64px'\n case 128:\n return '-128px'\n case 256:\n return '-256px'\n case 512:\n return '-512px'\n default:\n return ''\n }\n}\n","import { Camera, Intersection, Object3D, Plane, Raycaster, Vector2, Vector3 } from 'three'\n\nexport interface RaycasterInterface {\n position: Vector3\n updatePosition(coords: Vector2): void\n intersect(coords: Vector2, objects: Object3D[], recursive?: boolean): Intersection[],\n}\n\nexport interface RaycasterConfigInterface {\n camera: Camera\n resetPosition?: Vector3\n}\n\nexport default function useRaycaster(options: RaycasterConfigInterface): RaycasterInterface {\n const {\n camera,\n resetPosition = new Vector3(0, 0, 0),\n } = options\n\n const raycaster = new Raycaster()\n const position = resetPosition.clone()\n const plane = new Plane(new Vector3(0, 0, 1), 0)\n\n const updatePosition = (coords: Vector2) => {\n raycaster.setFromCamera(coords, camera)\n camera.getWorldDirection(plane.normal)\n raycaster.ray.intersectPlane(plane, position)\n }\n\n const intersect = (coords: Vector2, objects: Object3D[], recursive = false) => {\n raycaster.setFromCamera(coords, camera)\n return raycaster.intersectObjects(objects, recursive)\n }\n\n return {\n position,\n updatePosition,\n intersect,\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Camera, InstancedMesh, Intersection, Object3D, Vector2, Vector3 } from 'three'\nimport useRaycaster from './useRaycaster'\n\nexport interface PointerEventInterface {\n type: 'pointerenter' | 'pointermove' | 'pointerleave' | 'click'\n position?: Vector2\n positionN?: Vector2\n positionV3?: Vector3\n}\n\nexport interface PointerIntersectEventInterface {\n type: 'pointerenter' | 'pointerover' | 'pointermove' | 'pointerleave' | 'click'\n component: any\n over?: boolean\n intersect?: Intersection\n}\n\nexport type PointerCallbackType = (e: PointerEventInterface) => void\nexport type PointerIntersectCallbackType = (e: PointerIntersectEventInterface) => void\n\nexport interface PointerPublicConfigInterface {\n intersectMode?: 'frame'\n intersectRecursive?: boolean\n touch?: boolean\n resetOnEnd?: boolean\n onEnter?: PointerCallbackType\n onMove?: PointerCallbackType\n onLeave?: PointerCallbackType\n onClick?: PointerCallbackType\n onIntersectEnter?: PointerIntersectCallbackType\n onIntersectOver?: PointerIntersectCallbackType\n onIntersectMove?: PointerIntersectCallbackType\n onIntersectLeave?: PointerIntersectCallbackType\n onIntersectClick?: PointerIntersectCallbackType\n}\n\nexport interface PointerConfigInterface extends PointerPublicConfigInterface {\n camera: Camera\n domElement: HTMLCanvasElement\n intersectObjects: Object3D[] | (() => Object3D[])\n}\n\nexport interface PointerInterface {\n position: Vector2\n positionN: Vector2\n positionV3: Vector3\n intersectObjects: Object3D[] | (() => Object3D[])\n listeners: boolean\n addListeners(cb: void): void\n removeListeners(cb: void): void\n intersect(): void\n}\n\nexport default function usePointer(options: PointerConfigInterface): PointerInterface {\n const {\n camera,\n domElement,\n intersectObjects,\n intersectRecursive = false,\n touch = true,\n resetOnEnd = false,\n onEnter = () => {},\n onMove = () => {},\n onLeave = () => {},\n onClick = () => {},\n onIntersectEnter = () => {},\n onIntersectOver = () => {},\n onIntersectMove = () => {},\n onIntersectLeave = () => {},\n onIntersectClick = () => {},\n } = options\n\n const position = new Vector2(0, 0)\n const positionN = new Vector2(0, 0)\n\n const raycaster = useRaycaster({ camera })\n const positionV3 = raycaster.position\n\n const obj: PointerInterface = {\n position,\n positionN,\n positionV3,\n intersectObjects,\n listeners: false,\n addListeners,\n removeListeners,\n intersect,\n }\n\n return obj\n\n function reset() {\n position.set(0, 0)\n positionN.set(0, 0)\n positionV3.set(0, 0, 0)\n }\n\n function updatePosition(event: TouchEvent | MouseEvent) {\n let x, y\n // @ts-ignore\n if (event.touches && event.touches.length > 0) {\n x = (event).touches[0].clientX\n y = (event).touches[0].clientY\n } else {\n x = (event).clientX\n y = (event).clientY\n }\n\n const rect = domElement.getBoundingClientRect()\n position.x = x - rect.left\n position.y = y - rect.top\n positionN.x = (position.x / rect.width) * 2 - 1\n positionN.y = -(position.y / rect.height) * 2 + 1\n raycaster.updatePosition(positionN)\n }\n\n function intersect() {\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const offObjects: Object3D[] = [..._intersectObjects]\n const iMeshes: InstancedMesh[] = []\n\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n if (!object.userData.over) {\n object.userData.over = true\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: true, component, intersect }\n const enterEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerenter' }\n onIntersectOver(overEvent)\n onIntersectEnter(enterEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerEnter?.(enterEvent)\n }\n\n const moveEvent: PointerIntersectEventInterface = { type: 'pointermove', component, intersect }\n onIntersectMove(moveEvent)\n component?.onPointerMove?.(moveEvent)\n\n offObjects.splice(offObjects.indexOf((object)), 1)\n })\n\n offObjects.forEach(object => {\n const component = getComponent(object)\n if (object.userData.over) {\n object.userData.over = false\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: false, component }\n const leaveEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerleave' }\n onIntersectOver(overEvent)\n onIntersectLeave(leaveEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerLeave?.(leaveEvent)\n }\n })\n }\n }\n\n function pointerEnter(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onEnter({ type: 'pointerenter', position, positionN, positionV3 })\n }\n\n function pointerMove(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onMove({ type: 'pointermove', position, positionN, positionV3 })\n intersect()\n }\n\n function pointerClick(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const iMeshes: InstancedMesh[] = []\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n const event: PointerIntersectEventInterface = { type: 'click', component, intersect }\n onIntersectClick(event)\n component?.onClick?.(event)\n })\n }\n onClick({ type: 'click', position, positionN, positionV3 })\n }\n\n function pointerLeave() {\n if (resetOnEnd) reset()\n onLeave({ type: 'pointerleave' })\n }\n\n function getComponent(object: Object3D) {\n if (object.userData.component) return object.userData.component\n\n let parent = object.parent\n while (parent) {\n if (parent.userData.component) {\n return parent.userData.component\n }\n parent = parent.parent\n }\n\n return undefined\n }\n\n function getIntersectObjects() {\n if (typeof intersectObjects === 'function') {\n return intersectObjects()\n } else return intersectObjects\n }\n\n function addListeners() {\n domElement.addEventListener('mouseenter', pointerEnter)\n domElement.addEventListener('mousemove', pointerMove)\n domElement.addEventListener('mouseleave', pointerLeave)\n domElement.addEventListener('click', pointerClick)\n if (touch) {\n domElement.addEventListener('touchstart', pointerEnter)\n domElement.addEventListener('touchmove', pointerMove)\n domElement.addEventListener('touchend', pointerLeave)\n }\n obj.listeners = true\n }\n\n function removeListeners() {\n domElement.removeEventListener('mouseenter', pointerEnter)\n domElement.removeEventListener('mousemove', pointerMove)\n domElement.removeEventListener('mouseleave', pointerLeave)\n domElement.removeEventListener('click', pointerClick)\n\n domElement.removeEventListener('touchstart', pointerEnter)\n domElement.removeEventListener('touchmove', pointerMove)\n domElement.removeEventListener('touchend', pointerLeave)\n obj.listeners = false\n }\n}\n","import { Camera, Object3D, OrthographicCamera, PerspectiveCamera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport usePointer, { PointerConfigInterface, PointerPublicConfigInterface, PointerInterface } from './usePointer'\n\nexport interface SizeInterface {\n width: number\n height: number\n wWidth: number\n wHeight: number\n ratio: number\n}\n\nexport interface ThreeConfigInterface {\n params?: WebGLRendererParameters\n canvas?: HTMLCanvasElement\n antialias: boolean\n alpha: boolean\n autoClear: boolean\n orbitCtrl: boolean | Record\n pointer: boolean | PointerPublicConfigInterface\n resize: boolean | string\n width?: number\n height?: number\n onResize?(size: SizeInterface): void\n [index:string]: any\n}\n\nexport interface ThreeInterface {\n config: ThreeConfigInterface\n renderer: WebGLRenderer\n composer?: EffectComposer\n camera?: Camera\n cameraCtrl?: OrbitControls\n scene?: Scene\n pointer?: PointerInterface\n size: SizeInterface\n init(): boolean\n dispose(): void\n render(): void\n renderC(): void\n setSize(width: number, height: number): void\n addIntersectObject(o: Object3D): void\n removeIntersectObject(o: Object3D): void\n}\n\n/**\n * Three.js helper\n */\nexport default function useThree(params: ThreeConfigInterface): ThreeInterface {\n // default config\n const config: ThreeConfigInterface = {\n antialias: true,\n alpha: false,\n autoClear: true,\n orbitCtrl: false,\n pointer: false,\n resize: false,\n width: 300,\n height: 150,\n }\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n config[key] = value\n })\n }\n\n // size\n const size: SizeInterface = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n }\n\n const beforeRenderCallbacks: {(): void}[] = []\n\n const intersectObjects: Object3D[] = []\n\n const renderer = createRenderer()\n\n // returned object\n const obj: ThreeInterface = {\n config,\n renderer,\n size,\n init,\n dispose,\n render,\n renderC,\n setSize,\n addIntersectObject, removeIntersectObject,\n }\n\n return obj\n\n /**\n * create WebGLRenderer\n */\n function createRenderer(): WebGLRenderer {\n const renderer = new WebGLRenderer({ canvas: config.canvas, antialias: config.antialias, alpha: config.alpha, ...config.params })\n renderer.autoClear = config.autoClear\n return renderer\n }\n\n /**\n * init three\n */\n function init() {\n if (!obj.scene) {\n console.error('Missing Scene')\n return false\n }\n\n if (!obj.camera) {\n console.error('Missing Camera')\n return false\n }\n\n if (config.resize) {\n onResize()\n window.addEventListener('resize', onResize)\n } else if (config.width && config.height) {\n setSize(config.width, config.height)\n }\n\n initPointer()\n\n if (config.orbitCtrl) {\n const cameraCtrl = new OrbitControls(obj.camera, obj.renderer.domElement)\n if (config.orbitCtrl instanceof Object) {\n Object.entries(config.orbitCtrl).forEach(([key, value]) => {\n // @ts-ignore\n cameraCtrl[key] = value\n })\n }\n onBeforeRender(() => { cameraCtrl.update() })\n obj.cameraCtrl = cameraCtrl\n }\n\n return true\n }\n\n /**\n * init pointer\n */\n function initPointer() {\n let pointerConf: PointerConfigInterface = {\n camera: obj.camera!,\n domElement: obj.renderer!.domElement,\n intersectObjects,\n }\n\n if (config.pointer && config.pointer instanceof Object) {\n pointerConf = { ...pointerConf, ...config.pointer }\n }\n\n const pointer = obj.pointer = usePointer(pointerConf)\n if (config.pointer || intersectObjects.length) {\n pointer.addListeners()\n if (pointerConf.intersectMode === 'frame') {\n onBeforeRender(pointer.intersect)\n }\n }\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(cb: {(): void}) {\n beforeRenderCallbacks.push(cb)\n }\n\n /**\n * default render\n */\n function render() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.renderer!.render(obj.scene!, obj.camera!)\n }\n\n /**\n * composer render\n */\n function renderC() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.composer!.render()\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o: Object3D) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o)\n }\n // add listeners if needed\n if (obj.pointer && !obj.pointer.listeners) {\n obj.pointer.addListeners()\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o: Object3D) {\n const i = intersectObjects.indexOf(o)\n if (i !== -1) {\n intersectObjects.splice(i, 1)\n }\n // remove listeners if needed\n if (obj.pointer && !config.pointer && intersectObjects.length === 0) {\n obj.pointer.removeListeners()\n }\n }\n\n /**\n * remove listeners and dispose\n */\n function dispose() {\n // beforeRenderCallbacks = []\n window.removeEventListener('resize', onResize)\n if (obj.pointer) obj.pointer.removeListeners()\n if (obj.cameraCtrl) obj.cameraCtrl.dispose()\n if (obj.renderer) obj.renderer.dispose()\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (config.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight)\n } else {\n const elt = obj.renderer!.domElement.parentNode as Element\n if (elt) setSize(elt.clientWidth, elt.clientHeight)\n }\n config.onResize?.(size)\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width: number, height: number) {\n size.width = width\n size.height = height\n size.ratio = width / height\n\n obj.renderer!.setSize(width, height, false)\n\n // already done in EffectComposer\n // if (obj.composer) {\n // obj.composer.setSize(width, height)\n // }\n\n const camera = (obj.camera!)\n if (camera.type === 'PerspectiveCamera') {\n const pCamera = (camera)\n pCamera.aspect = size.ratio\n pCamera.updateProjectionMatrix()\n }\n\n if (camera.type === 'OrthographicCamera') {\n const oCamera = (camera)\n size.wWidth = oCamera.right - oCamera.left\n size.wHeight = oCamera.top - oCamera.bottom\n } else {\n const wsize = getCameraSize()\n size.wWidth = wsize[0]\n size.wHeight = wsize[1]\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const camera = (obj.camera!)\n const vFOV = (camera.fov * Math.PI) / 180\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(camera.position.z)\n const w = h * camera.aspect\n return [w, h]\n }\n}\n","/* eslint-disable no-use-before-define */\nimport { Camera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'\nimport { ComponentPublicInstance, defineComponent, InjectionKey, PropType, watchEffect } from 'vue'\nimport { bindObjectProp } from '../tools'\nimport { PointerInterface, PointerPublicConfigInterface } from './usePointer'\nimport useThree, { SizeInterface, ThreeConfigInterface, ThreeInterface } from './useThree'\n\ntype CallbackType = (event: T) => void\n\n// type EventType = 'init' | 'mounted' | 'beforerender' | 'afterrender' | 'resize'\n\nexport interface EventInterface {\n type: 'init' | 'mounted'\n renderer: RendererInterface\n}\n\nexport interface RenderEventInterface {\n type: 'beforerender' | 'afterrender'\n renderer: RendererInterface\n time: number\n}\n\nexport interface ResizeEventInterface {\n type: 'resize'\n renderer: RendererInterface\n size: SizeInterface\n}\n\ntype InitCallbackType = CallbackType\ntype MountedCallbackType = CallbackType\ntype RenderCallbackType = CallbackType\ntype ResizeCallbackType = CallbackType\n// type CallbackTypes = InitCallbackType | MountedCallbackType | RenderCallbackType | ResizeCallbackType\n\n// interface EventMap {\n// 'init': EventInterface;\n// 'mounted': EventInterface;\n// 'beforerender': RenderEventInterface;\n// 'afterrender': RenderEventInterface;\n// 'resize': ResizeEventInterface;\n// }\n\ninterface EventCallbackMap {\n 'init': InitCallbackType;\n 'mounted': MountedCallbackType;\n 'beforerender': RenderCallbackType;\n 'afterrender': RenderCallbackType;\n 'resize': ResizeCallbackType;\n}\n\ninterface RenderFunctionEventInterface {\n renderer: RendererInterface\n time: number\n}\n\ninterface RendererSetupInterface {\n canvas: HTMLCanvasElement\n three: ThreeInterface\n renderer: WebGLRenderer\n size: SizeInterface\n renderFn(e: RenderFunctionEventInterface): void\n raf: boolean\n\n $pointer?: PointerInterface\n\n initCallbacks: InitCallbackType[]\n mountedCallbacks: MountedCallbackType[]\n beforeRenderCallbacks: RenderCallbackType[]\n afterRenderCallbacks: RenderCallbackType[]\n resizeCallbacks: ResizeCallbackType[]\n}\n\nexport interface RendererInterface extends RendererSetupInterface {\n scene?: Scene\n camera?: Camera\n composer?: EffectComposer\n\n onInit(cb: InitCallbackType): void\n onMounted(cb: MountedCallbackType): void\n\n onBeforeRender(cb: RenderCallbackType): void\n offBeforeRender(cb: RenderCallbackType): void\n onAfterRender(cb: RenderCallbackType): void\n offAfterRender(cb: RenderCallbackType): void\n\n onResize(cb: ResizeCallbackType): void\n offResize(cb: ResizeCallbackType): void\n\n addListener(t: T, cb: EventCallbackMap[T]): void\n removeListener(t: T, cb: EventCallbackMap[T]): void\n}\n\nexport interface RendererPublicInterface extends ComponentPublicInstance, RendererInterface {}\n\nexport const RendererInjectionKey: InjectionKey = Symbol('Renderer')\n\nexport default defineComponent({\n name: 'Renderer',\n props: {\n params: { type: Object as PropType, default: () => ({}) },\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n orbitCtrl: { type: [Boolean, Object] as PropType>, default: false },\n pointer: { type: [Boolean, Object] as PropType, default: false },\n resize: { type: [Boolean, String] as PropType, default: false },\n shadow: Boolean,\n width: String,\n height: String,\n pixelRatio: Number,\n xr: Boolean,\n props: { type: Object, default: () => ({}) },\n onReady: Function as PropType<(r: RendererInterface) => void>,\n },\n inheritAttrs: false,\n setup(props, { attrs }): RendererSetupInterface {\n const initCallbacks: InitCallbackType[] = []\n const mountedCallbacks: MountedCallbackType[] = []\n const beforeRenderCallbacks: RenderCallbackType[] = []\n const afterRenderCallbacks: RenderCallbackType[] = []\n const resizeCallbacks: ResizeCallbackType[] = []\n\n const canvas = document.createElement('canvas')\n Object.entries(attrs).forEach(([key, value]) => {\n const matches = key.match(/^on([A-Z][a-zA-Z]*)$/)\n if (matches) {\n canvas.addEventListener(matches[1].toLowerCase(), value as {(): void })\n } else {\n canvas.setAttribute(key, value as string)\n }\n })\n\n const config: ThreeConfigInterface = {\n canvas,\n params: props.params,\n antialias: props.antialias,\n alpha: props.alpha,\n autoClear: props.autoClear,\n orbitCtrl: props.orbitCtrl,\n pointer: props.pointer,\n resize: props.resize,\n }\n\n if (props.width) config.width = parseInt(props.width)\n if (props.height) config.height = parseInt(props.height)\n\n const three = useThree(config)\n bindObjectProp(props, 'props', three.renderer)\n\n watchEffect(() => {\n if (props.pixelRatio) three.renderer.setPixelRatio(props.pixelRatio)\n })\n\n const renderFn: {(): void} = () => {}\n\n return {\n canvas,\n three,\n renderer: three.renderer,\n size: three.size,\n renderFn,\n raf: true,\n initCallbacks,\n mountedCallbacks,\n beforeRenderCallbacks,\n afterRenderCallbacks,\n resizeCallbacks,\n }\n },\n computed: {\n camera: {\n get: function(): Camera | undefined { return this.three.camera },\n set: function(camera: Camera): void { this.three.camera = camera },\n },\n scene: {\n get: function(): Scene | undefined { return this.three.scene },\n set: function(scene: Scene): void { this.three.scene = scene },\n },\n composer: {\n get: function(): EffectComposer | undefined { return this.three.composer },\n set: function(composer: EffectComposer): void { this.three.composer = composer },\n },\n },\n provide() {\n return {\n [RendererInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // appendChild won't work on reload\n this.$el.parentNode.insertBefore(this.canvas, this.$el)\n\n if (this.three.init()) {\n if (this.three.pointer) {\n this.$pointer = this.three.pointer\n }\n\n // TODO : don't use config\n this.three.config.onResize = (size) => {\n this.resizeCallbacks.forEach(e => e({ type: 'resize', renderer: this, size }))\n }\n\n if (this.shadow) {\n this.renderer.shadowMap.enabled = true\n }\n\n this.renderFn = this.three.composer ? this.three.renderC : this.three.render\n\n this.initCallbacks.forEach(e => e({ type: 'init', renderer: this }))\n this.onReady?.(this as RendererInterface)\n\n if (this.xr) {\n this.renderer.xr.enabled = true\n this.renderer.setAnimationLoop(this.render)\n } else {\n requestAnimationFrame(this.renderLoop)\n }\n }\n\n this.mountedCallbacks.forEach(e => e({ type: 'mounted', renderer: this }))\n },\n beforeUnmount() {\n this.canvas.remove()\n this.beforeRenderCallbacks = []\n this.afterRenderCallbacks = []\n this.raf = false\n this.three.dispose()\n },\n methods: {\n onInit(cb: InitCallbackType) { this.addListener('init', cb) },\n onMounted(cb: MountedCallbackType) { this.addListener('mounted', cb) },\n onBeforeRender(cb: RenderCallbackType) { this.addListener('beforerender', cb) },\n offBeforeRender(cb: RenderCallbackType) { this.removeListener('beforerender', cb) },\n onAfterRender(cb: RenderCallbackType) { this.addListener('afterrender', cb) },\n offAfterRender(cb: RenderCallbackType) { this.removeListener('afterrender', cb) },\n onResize(cb: ResizeCallbackType) { this.addListener('resize', cb) },\n offResize(cb: ResizeCallbackType) { this.removeListener('resize', cb) },\n\n addListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n callbacks.push(cb)\n },\n\n removeListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n const index = callbacks.indexOf(cb)\n if (index !== -1) callbacks.splice(index, 1)\n },\n\n getCallbacks(type: string) {\n if (type === 'init') {\n return this.initCallbacks\n } else if (type === 'mounted') {\n return this.mountedCallbacks\n } else if (type === 'beforerender') {\n return this.beforeRenderCallbacks\n } else if (type === 'afterrender') {\n return this.afterRenderCallbacks\n } else {\n return this.resizeCallbacks\n }\n },\n\n render(time: number) {\n this.beforeRenderCallbacks.forEach(e => e({ type: 'beforerender', renderer: this, time }))\n // this.onFrame?.(cbParams)\n this.renderFn({ renderer: this, time })\n this.afterRenderCallbacks.forEach(e => e({ type: 'afterrender', renderer: this, time }))\n },\n renderLoop(time: number) {\n if (this.raf) requestAnimationFrame(this.renderLoop)\n this.render(time)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Renderer',\n})\n","import { defineComponent } from 'vue'\n// import { Camera } from 'three'\n// import { RendererInjectionKey, RendererInterface } from './Renderer'\n// import Object3D from './Object3D'\n\n// export interface CameraSetupInterface {\n// renderer?: RendererInterface\n// camera: Camera\n// }\n\nexport default defineComponent({\n // TODO: eventually extend Object3D\n // extends: Object3D,\n\n props: {\n props: { type: Object, default: () => ({}) },\n },\n\n // inject: { renderer: RendererInjectionKey as symbol },\n\n // setup(): CameraSetupInterface {\n // return {}\n // },\n\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n})\n\nexport function cameraSetProp(camera: any, key: string, value: any, updateProjectionMatrix = true) {\n camera[key] = value\n if (updateProjectionMatrix) camera.updateProjectionMatrix()\n}\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { OrthographicCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'OrthographicCamera',\n props: {\n left: { type: Number, default: -1 },\n right: { type: Number, default: 1 },\n top: { type: Number, default: 1 },\n bottom: { type: Number, default: -1 },\n near: { type: Number, default: 0.1 },\n far: { type: Number, default: 2000 },\n zoom: { type: Number, default: 1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new OrthographicCamera(props.left, props.right, props.top, props.bottom, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'OrthographicCamera',\n})\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { PerspectiveCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'PerspectiveCamera',\n props: {\n aspect: { type: Number, default: 1 },\n far: { type: Number, default: 2000 },\n fov: { type: Number, default: 50 },\n near: { type: Number, default: 0.1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n lookAt: { type: Object as PropType, default: null },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new PerspectiveCamera(props.fov, props.aspect, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n\n if (props.lookAt) camera.lookAt(props.lookAt.x ?? 0, props.lookAt.y, props.lookAt.z)\n watch(() => props.lookAt, (v) => { camera.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'PerspectiveCamera',\n})\n","import { defineComponent, inject, InjectionKey, provide, watch } from 'vue'\nimport { Scene, Color, Object3D, Texture } from 'three'\nimport { RendererInjectionKey } from './Renderer'\n\nexport const SceneInjectionKey: InjectionKey = Symbol('Scene')\n\nexport default defineComponent({\n name: 'Scene',\n props: {\n background: [String, Number, Object],\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n const scene = new Scene()\n\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n renderer.scene = scene\n provide(SceneInjectionKey, scene)\n\n const setBackground = (value: any): void => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n if (scene.background instanceof Color) scene.background.set(value)\n else scene.background = new Color(value)\n } else if (value instanceof Texture) {\n scene.background = value\n }\n }\n\n setBackground(props.background)\n watch(() => props.background, setBackground)\n\n const add = (o: Object3D): void => { scene.add(o) }\n const remove = (o: Object3D): void => { scene.remove(o) }\n\n return { scene, add, remove }\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Scene',\n})\n","import { Object3D, Scene } from 'three'\nimport { ComponentPublicInstance, defineComponent, getCurrentInstance, PropType, watch } from 'vue'\nimport { bindObjectProp, bindProp } from '../tools'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\nimport { SceneInjectionKey } from './Scene'\n\nexport interface Object3DSetupInterface {\n renderer?: RendererInterface\n scene?: Scene\n o3d?: Object3D\n parent?: ComponentPublicInstance\n}\n\nexport interface Object3DInterface extends Object3DSetupInterface {\n addToParent(o?: Object3D): boolean\n removeFromParent(o?: Object3D): boolean\n add(o: Object3D): void\n remove(o: Object3D): void\n}\n\nexport interface Object3DPublicInterface extends ComponentPublicInstance, Object3DInterface {}\n\n// export function object3DSetup(): Object3DSetupInterface {\n// const renderer = inject(RendererInjectionKey)\n// const scene = inject(SceneInjectionKey)\n// return { scene, renderer }\n// }\n\nexport const pointerProps = {\n onPointerEnter: Function,\n onPointerOver: Function,\n onPointerMove: Function,\n onPointerLeave: Function,\n onPointerDown: Function,\n onPointerUp: Function,\n onClick: Function,\n}\n\nexport interface Vector2PropInterface {\n x?: number\n y?: number\n width?: number\n height?: number\n}\n\nexport interface Vector3PropInterface extends Vector2PropInterface {\n z?: number\n}\n\nexport interface EulerPropInterface extends Vector3PropInterface {\n order?: 'XYZ' | 'YZX' | 'ZXY' | 'XZY' | 'YXZ' | 'ZYX'\n}\n\nexport default defineComponent({\n name: 'Object3D',\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n scene: SceneInjectionKey as symbol,\n },\n emits: ['created', 'ready'],\n props: {\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n rotation: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n scale: { type: Object as PropType, default: () => ({ x: 1, y: 1, z: 1, order: 'XYZ' }) },\n lookAt: { type: Object as PropType, default: null },\n userData: { type: Object, default: () => ({}) },\n visible: { type: Boolean, default: true },\n props: { type: Object, default: () => ({}) },\n disableAdd: { type: Boolean, default: false },\n disableRemove: { type: Boolean, default: false },\n ...pointerProps,\n },\n setup(): Object3DSetupInterface {\n // return object3DSetup()\n return {}\n },\n created() {\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n if (!this.scene) {\n console.error('Missing parent Scene')\n }\n },\n unmounted() {\n if (!this.disableRemove) this.removeFromParent()\n if (this.o3d) {\n if (this.renderer) this.renderer.three.removeIntersectObject(this.o3d)\n }\n },\n methods: {\n initObject3D(o3d: Object3D) {\n this.o3d = o3d\n o3d.userData.component = this\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n if (this.renderer) this.renderer.three.addIntersectObject(o3d)\n }\n\n bindProp(this, 'position', o3d)\n bindProp(this, 'rotation', o3d)\n bindProp(this, 'scale', o3d)\n bindProp(this, 'userData', o3d.userData)\n bindProp(this, 'visible', o3d)\n\n bindObjectProp(this, 'props', o3d)\n\n this.$emit('created', o3d)\n\n if (this.lookAt) o3d.lookAt(this.lookAt.x ?? 0, this.lookAt.y, this.lookAt.z)\n watch(() => this.lookAt, (v) => { o3d.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n this.parent = this.getParent()\n if (!this.disableAdd) {\n if (this.addToParent()) this.$emit('ready', this)\n else console.error('Missing parent (Scene, Group...)')\n }\n },\n getParent(): undefined | ComponentPublicInstance {\n let parent = this.$parent\n\n if (!parent) {\n // for script setup\n const instance = getCurrentInstance() as any // ctx is internal\n if (instance && instance.parent) parent = instance.parent.ctx\n }\n\n while (parent) {\n if ((parent as any).add) return parent\n parent = parent.$parent\n }\n return undefined\n },\n addToParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).add(o3d)\n return true\n }\n return false\n },\n removeFromParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).remove(o3d)\n return true\n }\n return false\n },\n add(o: Object3D) { this.o3d?.add(o) },\n remove(o: Object3D) { this.o3d?.remove(o) },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Object3D',\n})\n","import { defineComponent } from 'vue'\nimport { Group } from 'three'\nimport Object3D from './Object3D'\n\nexport default defineComponent({\n name: 'Group',\n extends: Object3D,\n setup() {\n return {\n group: new Group(),\n }\n },\n created() {\n this.initObject3D(this.group)\n },\n __hmrId: 'Group',\n})\n","import { defineComponent, inject, PropType } from 'vue'\nimport usePointer, { PointerInterface, PointerIntersectCallbackType } from './usePointer'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst emptyCallBack: PointerIntersectCallbackType = () => {}\n\ninterface RaycasterSetupInterface {\n renderer?: RendererInterface\n pointer?: PointerInterface\n}\n\nexport default defineComponent({\n name: 'Raycaster',\n props: {\n onPointerEnter: { type: Function as PropType, default: emptyCallBack },\n onPointerOver: { type: Function as PropType, default: emptyCallBack },\n onPointerMove: { type: Function as PropType, default: emptyCallBack },\n onPointerLeave: { type: Function as PropType, default: emptyCallBack },\n onClick: { type: Function as PropType, default: emptyCallBack },\n intersectMode: { type: String, default: 'move' },\n intersectRecursive: { type: Boolean, default: false },\n },\n setup(): RaycasterSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n mounted() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n this.renderer.onMounted(() => {\n if (!renderer.camera) return\n\n this.pointer = usePointer({\n camera: renderer.camera,\n domElement: renderer.canvas,\n intersectObjects: () => renderer.scene ? renderer.scene.children : [],\n intersectRecursive: this.intersectRecursive,\n onIntersectEnter: this.onPointerEnter,\n onIntersectOver: this.onPointerOver,\n onIntersectMove: this.onPointerMove,\n onIntersectLeave: this.onPointerLeave,\n onIntersectClick: this.onClick,\n })\n this.pointer.addListeners()\n\n if (this.intersectMode === 'frame') {\n renderer.onBeforeRender(this.pointer.intersect)\n }\n })\n },\n unmounted() {\n if (this.pointer) {\n this.pointer.removeListeners()\n this.renderer?.offBeforeRender(this.pointer.intersect)\n }\n },\n render() {\n return []\n },\n __hmrId: 'Raycaster',\n})\n","import { defineComponent, inject, onUnmounted, PropType } from 'vue'\nimport { CubeCamera, LinearMipmapLinearFilter, Mesh, RGBAFormat, WebGLCubeRenderTarget } from 'three'\nimport Object3D from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\ninterface CubeCameraSetupInterface {\n cubeRT?: WebGLCubeRenderTarget\n cubeCamera?: CubeCamera\n updateRT?: {(): void}\n}\n\nexport default defineComponent({\n extends: Object3D,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n hideMeshes: { type: Array as PropType, default: () => ([]) },\n },\n setup(props): CubeCameraSetupInterface {\n const rendererC = inject(RendererInjectionKey)\n if (!rendererC || !rendererC.scene) {\n console.error('Missing Renderer / Scene')\n return {}\n }\n\n const renderer = rendererC.renderer, scene = rendererC.scene\n const cubeRT = new WebGLCubeRenderTarget(props.cubeRTSize, { format: RGBAFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter })\n const cubeCamera = new CubeCamera(props.cubeCameraNear, props.cubeCameraFar, cubeRT)\n const updateRT = () => {\n props.hideMeshes.forEach(m => { m.visible = false })\n cubeCamera.update(renderer, scene)\n props.hideMeshes.forEach(m => { m.visible = true })\n }\n\n if (props.autoUpdate) {\n rendererC.onBeforeRender(updateRT)\n onUnmounted(() => { rendererC.offBeforeRender(updateRT) })\n } else {\n rendererC.onMounted(updateRT)\n }\n\n return { cubeRT, cubeCamera, updateRT }\n },\n created() {\n if (this.cubeCamera) this.initObject3D(this.cubeCamera)\n },\n render() {\n return []\n },\n __hmrId: 'CubeCamera',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, watch } from 'vue'\nimport { BufferGeometry, Material, Mesh as TMesh } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport interface MeshSetupInterface extends Object3DSetupInterface {\n mesh?: TMesh\n geometry?: BufferGeometry\n material?: Material | Material[]\n loading?: boolean\n}\n\nexport interface MeshInterface extends MeshSetupInterface {\n setGeometry(g: BufferGeometry): void\n setMaterial(m: Material): void\n}\n\nexport interface MeshPublicInterface extends ComponentPublicInstance, MeshInterface {}\n\nexport const MeshInjectionKey: InjectionKey = Symbol('Mesh')\n\nconst Mesh = defineComponent({\n name: 'Mesh',\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n },\n setup(): MeshSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // TODO : proper ?\n if (!this.mesh && !this.loading) this.initMesh()\n },\n methods: {\n initMesh() {\n const mesh = new TMesh(this.geometry, this.material)\n\n bindProp(this, 'castShadow', mesh)\n bindProp(this, 'receiveShadow', mesh)\n\n this.mesh = mesh\n this.initObject3D(mesh)\n },\n createGeometry() {},\n addGeometryWatchers(props: Readonly) {\n Object.keys(props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], () => {\n this.refreshGeometry()\n })\n })\n },\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material | Material[]) {\n if (Array.isArray(material) || !this.material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n } else {\n let prev = this.material\n if (Array.isArray(prev)) {\n prev.push(material)\n } else {\n prev = [prev, material]\n }\n this.material = prev\n if (this.mesh) this.mesh.material = prev\n }\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n if (this.mesh && this.geometry) this.mesh.geometry = this.geometry\n oldGeo?.dispose()\n },\n },\n unmounted() {\n // for predefined mesh (geometry/material are not unmounted)\n if (this.geometry) this.geometry.dispose()\n if (this.material) {\n if (Array.isArray(this.material)) {\n for (const m of this.material) m.dispose()\n } else {\n this.material.dispose()\n }\n }\n },\n __hmrId: 'Mesh',\n})\n\nexport default Mesh\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function meshComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n },\n })\n}\n","import { ComponentPropsOptions, defineComponent, PropType, watch } from 'vue'\nimport { BufferAttribute, BufferGeometry } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\n\nexport interface GeometrySetupInterface {\n mesh?: MeshInterface\n geometry?: BufferGeometry\n watchProps?: string[]\n}\n\nexport interface GeometryAttributeInterface {\n name: string\n array: ArrayLike\n itemSize: number\n normalized?: boolean\n}\n\n// function defaultSetup(): GeometryInterface {\n// const mesh = inject('mesh') as MeshInterface\n// const watchProps: string[] = []\n// return { mesh, watchProps }\n// }\n\nconst Geometry = defineComponent({\n emits: ['created'],\n props: {\n rotateX: Number,\n rotateY: Number,\n rotateZ: Number,\n attributes: { type: Array as PropType>, default: () => ([]) },\n },\n // inject for sub components\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): GeometrySetupInterface {\n return {}\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry) this.mesh.setGeometry(this.geometry)\n\n Object.keys(this.$props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], this.refreshGeometry)\n })\n },\n unmounted() {\n this.geometry?.dispose()\n },\n methods: {\n createGeometry() {\n const bufferAttributes: Record = {}\n const geometry = new BufferGeometry()\n this.attributes.forEach(attribute => {\n if (attribute.name && attribute.itemSize && attribute.array) {\n const bufferAttribute = bufferAttributes[attribute.name] = new BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized)\n geometry.setAttribute(attribute.name, bufferAttribute)\n }\n })\n geometry.computeBoundingBox()\n geometry.userData.component = this\n this.geometry = geometry\n this.$emit('created', geometry)\n },\n rotateGeometry() {\n if (!this.geometry) return\n if (this.rotateX) this.geometry.rotateX(this.rotateX)\n if (this.rotateY) this.geometry.rotateY(this.rotateY)\n if (this.rotateZ) this.geometry.rotateZ(this.rotateZ)\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry && this.mesh) this.mesh.setGeometry(this.geometry)\n oldGeo?.dispose()\n },\n },\n render() { return [] },\n})\n\nexport default Geometry\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function geometryComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n this.geometry.userData.component = this\n this.$emit('created', this.geometry)\n },\n },\n })\n}\n","import { geometryComponent } from './Geometry'\nimport { BoxGeometry } from 'three'\n\nexport const props = {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): BoxGeometry {\n if (comp.size) {\n return new BoxGeometry(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n } else {\n return new BoxGeometry(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n }\n}\n\nexport default geometryComponent('BoxGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CircleGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CircleGeometry {\n return new CircleGeometry(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CircleGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { ConeGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): ConeGeometry {\n return new ConeGeometry(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('ConeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CylinderGeometry } from 'three'\n\nexport const props = {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CylinderGeometry {\n return new CylinderGeometry(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CylinderGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { DodecahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): DodecahedronGeometry {\n return new DodecahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('DodecahedronGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { ExtrudeGeometry, ExtrudeGeometryOptions, Shape } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n options: { type: Object as PropType },\n} as const\n\nexport function createGeometry(comp: any): ExtrudeGeometry {\n return new ExtrudeGeometry(comp.shapes, comp.options)\n}\n\nexport default geometryComponent('ExtrudeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { IcosahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): IcosahedronGeometry {\n return new IcosahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('IcosahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { LatheGeometry } from 'three'\n\nexport const props = {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): LatheGeometry {\n return new LatheGeometry(comp.points, comp.segments, comp.phiStart, comp.phiLength)\n}\n\nexport default geometryComponent('LatheGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { OctahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): OctahedronGeometry {\n return new OctahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('OctahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PlaneGeometry } from 'three'\n\nexport const props = {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): PlaneGeometry {\n return new PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments)\n}\n\nexport default geometryComponent('PlaneGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PolyhedronGeometry } from 'three'\n\nexport const props = {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): PolyhedronGeometry {\n return new PolyhedronGeometry(comp.vertices, comp.indices, comp.radius, comp.detail)\n}\n\nexport default geometryComponent('PolyhedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { RingGeometry } from 'three'\n\nexport const props = {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): RingGeometry {\n return new RingGeometry(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('RingGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { SphereGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI },\n} as const\n\nexport function createGeometry(comp: any): SphereGeometry {\n return new SphereGeometry(comp.radius, comp.widthSegments, comp.heightSegments, comp.phiStart, comp.phiLength, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('SphereGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { Shape, ShapeGeometry } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n curveSegments: { type: Number },\n} as const\n\nexport function createGeometry(comp: any): ShapeGeometry {\n return new ShapeGeometry(comp.shapes, comp.curveSegments)\n}\n\nexport default geometryComponent('ShapeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TetrahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): TetrahedronGeometry {\n return new TetrahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('TetrahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): TorusGeometry {\n return new TorusGeometry(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc)\n}\n\nexport default geometryComponent('TorusGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusKnotGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n} as const\n\nexport function createGeometry(comp: any): TorusKnotGeometry {\n return new TorusKnotGeometry(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q)\n}\n\nexport default geometryComponent('TorusKnotGeometry', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three'\nimport Geometry from './Geometry'\n\nexport const props = {\n points: Array,\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n} as const\n\nexport function createGeometry(comp: any): TubeGeometry {\n let curve\n if (comp.points) {\n curve = new CatmullRomCurve3(comp.points)\n } else if (comp.path) {\n curve = comp.path\n } else {\n console.error('Missing path curve or points.')\n }\n return new TubeGeometry(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed)\n}\n\nexport default defineComponent({\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n})\n\nexport function updateTubeGeometryPoints(tube: TubeGeometry, points: Vector3[]): void {\n const curve = new CatmullRomCurve3(points)\n const { radialSegments, radius, tubularSegments, closed } = tube.parameters\n const frames = curve.computeFrenetFrames(tubularSegments, closed)\n tube.tangents = frames.tangents\n tube.normals = frames.normals\n tube.binormals = frames.binormals\n tube.parameters.path = curve\n\n const pAttribute = tube.getAttribute('position')\n const nAttribute = tube.getAttribute('normal')\n\n const normal = new Vector3()\n const P = new Vector3()\n\n for (let i = 0; i < tubularSegments; i++) {\n updateSegment(i)\n }\n updateSegment(tubularSegments)\n\n tube.attributes.position.needsUpdate = true\n tube.attributes.normal.needsUpdate = true\n\n function updateSegment(i: number) {\n curve.getPointAt(i / tubularSegments, P)\n const N = frames.normals[i]\n const B = frames.binormals[i]\n for (let j = 0; j <= radialSegments; j++) {\n const v = j / radialSegments * Math.PI * 2\n const sin = Math.sin(v)\n const cos = -Math.cos(v)\n normal.x = (cos * N.x + sin * B.x)\n normal.y = (cos * N.y + sin * B.y)\n normal.z = (cos * N.z + sin * B.z)\n normal.normalize()\n const index = (i * (radialSegments + 1) + j)\n nAttribute.setXYZ(index, normal.x, normal.y, normal.z)\n pAttribute.setXYZ(index, P.x + radius * normal.x, P.y + radius * normal.y, P.z + radius * normal.z)\n }\n }\n}\n","import { DirectionalLight, Light, SpotLight } from 'three'\nimport { defineComponent, PropType, watch } from 'vue'\nimport Object3D, { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp, setFromProp } from '../tools'\n\nexport interface LightSetupInterface {\n light?: Light\n}\n\nexport default defineComponent({\n extends: Object3D,\n name: 'Light',\n props: {\n color: { type: String, default: '#ffffff' },\n intensity: { type: Number, default: 1 },\n castShadow: { type: Boolean, default: false },\n shadowMapSize: { type: Object as PropType, default: () => ({ x: 512, y: 512 }) },\n shadowCamera: { type: Object, default: () => ({}) },\n },\n setup(): LightSetupInterface {\n return {}\n },\n unmounted() {\n if (this.light instanceof SpotLight || this.light instanceof DirectionalLight) {\n this.removeFromParent(this.light.target)\n }\n },\n methods: {\n initLight(light: Light) {\n this.light = light\n\n if ((light as any).shadow) {\n light.castShadow = this.castShadow\n // @ts-ignore\n setFromProp(light.shadow.mapSize, this.shadowMapSize)\n // @ts-ignore\n setFromProp(light.shadow.camera, this.shadowCamera)\n }\n\n ['color', 'intensity', 'castShadow'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => {\n if (p === 'color') {\n light.color.set(value)\n } else {\n // @ts-ignore\n light[p] = value\n }\n })\n })\n\n this.initObject3D(light)\n\n if (light instanceof SpotLight || light instanceof DirectionalLight) {\n bindProp(this, 'target', light.target, 'position')\n this.addToParent(light.target)\n }\n },\n },\n __hmrId: 'Light',\n})\n","import { defineComponent } from 'vue'\nimport { AmbientLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n created() {\n this.initLight(new AmbientLight(this.color, this.intensity))\n },\n __hmrId: 'AmbientLight',\n})\n","import { defineComponent, PropType } from 'vue'\nimport { DirectionalLight } from 'three'\nimport { Vector3PropInterface } from '../core/Object3D'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n target: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n created() {\n this.initLight(new DirectionalLight(this.color, this.intensity))\n },\n __hmrId: 'DirectionalLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HemisphereLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n groundColor: { type: String, default: '#444444' },\n },\n created() {\n const light = new HemisphereLight(this.color, this.groundColor, this.intensity)\n watch(() => this.groundColor, (value) => { light.groundColor.set(value) })\n this.initLight(light)\n },\n __hmrId: 'HemisphereLight',\n})\n","import { defineComponent } from 'vue'\nimport { PointLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n distance: { type: Number, default: 0 },\n decay: { type: Number, default: 1 },\n },\n created() {\n this.initLight(new PointLight(this.color, this.intensity, this.distance, this.decay))\n },\n __hmrId: 'PointLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { RectAreaLight } from 'three'\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js'\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n width: { type: Number, default: 10 },\n height: { type: Number, default: 10 },\n helper: Boolean,\n },\n created() {\n RectAreaLightUniformsLib.init()\n const light = new RectAreaLight(this.color, this.intensity, this.width, this.height)\n\n const watchProps = ['width', 'height']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n if (this.helper) {\n const lightHelper = new RectAreaLightHelper(light)\n light.add(lightHelper)\n }\n\n this.initLight(light)\n },\n __hmrId: 'RectAreaLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { SpotLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n angle: { type: Number, default: Math.PI / 3 },\n decay: { type: Number, default: 1 },\n distance: { type: Number, default: 0 },\n penumbra: { type: Number, default: 0 },\n target: Object,\n },\n created() {\n const light = new SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay)\n\n const watchProps = ['angle', 'decay', 'distance', 'penumbra']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n this.initLight(light)\n },\n __hmrId: 'SpotLight',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, PropType, watch } from 'vue'\nimport { Color, Material, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, PointsMaterial as TPointsMaterial, Texture, ShadowMaterial as TShadowMaterial } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\nimport { bindObjectProp, propsValues } from '../tools'\nimport { BasicMaterialPropsInterface, LambertMaterialPropsInterface, MaterialPropsInterface, PhongMaterialPropsInterface, PhysicalMaterialPropsInterface, PointsMaterialPropsInterface, StandardMaterialPropsInterface, ToonMaterialPropsInterface } from './types'\n\nexport interface MaterialSetupInterface {\n mesh?: MeshInterface\n material?: Material\n createMaterial?(): Material\n}\n\nexport interface MaterialInterface extends MaterialSetupInterface {\n setTexture(texture: Texture | null, key: string): void\n}\n\nexport interface MaterialPublicInterface extends ComponentPublicInstance, MaterialInterface {}\n\nexport const MaterialInjectionKey: InjectionKey = Symbol('Material')\n\nconst BaseMaterial = defineComponent({\n emits: ['created'],\n props: {\n color: { type: String, default: '#ffffff' },\n props: { type: Object as PropType, default: () => ({}) },\n },\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): MaterialSetupInterface {\n return {}\n },\n provide() {\n return {\n [MaterialInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n if (this.createMaterial) {\n const material = this.material = this.createMaterial()\n // @ts-ignore\n watch(() => this.color, (value) => { material.color.set(value) })\n bindObjectProp(this, 'props', material, false, this.setProp)\n this.$emit('created', material)\n this.mesh.setMaterial(material)\n }\n },\n unmounted() {\n this.material?.dispose()\n },\n methods: {\n getMaterialParams() {\n return { ...propsValues(this.$props, ['props']), ...this.props }\n },\n setProp(material: any, key: string, value: any, needsUpdate = false) {\n const dstVal = material[key]\n if (dstVal instanceof Color) dstVal.set(value)\n else material[key] = value\n material.needsUpdate = needsUpdate\n },\n setTexture(texture: Texture | null, key = 'map') {\n this.setProp(this.material, key, texture, true)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Material',\n})\n\nexport default BaseMaterial\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function materialComponent

>(\n name: string,\n props: P,\n createMaterial: {(opts: any): Material}\n) {\n return defineComponent({\n name,\n extends: BaseMaterial,\n props,\n methods: {\n createMaterial() {\n return createMaterial(this.getMaterialParams())\n },\n },\n })\n}\n\n// TODO : proper\nexport const BasicMaterial = materialComponent('BasicMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshBasicMaterial(opts))\nexport const LambertMaterial = materialComponent('LambertMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshLambertMaterial(opts))\nexport const PhongMaterial = materialComponent('PhongMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhongMaterial(opts))\nexport const PhysicalMaterial = materialComponent('PhysicalMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhysicalMaterial(opts))\nexport const PointsMaterial = materialComponent('PointsMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TPointsMaterial(opts))\nexport const ShadowMaterial = materialComponent('ShadowMaterial', { color: { type: String, default: '#000000' }, props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TShadowMaterial(opts))\nexport const StandardMaterial = materialComponent('StandardMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshStandardMaterial(opts))\nexport const ToonMaterial = materialComponent('ToonMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshToonMaterial(opts))\n","import { MeshMatcapMaterial, TextureLoader } from 'three'\nimport { propsValues, getMatcapUrl } from '../tools'\nimport { materialComponent } from './Material'\n\nexport default materialComponent(\n 'MatcapMaterial',\n {\n src: String,\n name: { type: String, default: '0404E8_0404B5_0404CB_3333FC' },\n },\n (opts) => {\n const src = opts.src ? opts.src : getMatcapUrl(opts.name)\n const params = propsValues(opts, ['src', 'name'])\n params.matcap = new TextureLoader().load(src)\n return new MeshMatcapMaterial(params)\n }\n)\n","import { ShaderMaterial } from 'three'\nimport { materialComponent } from './Material'\nimport { propsValues } from '../tools'\n\nconst defaultVertexShader = `\n varying vec2 vUv;\n void main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n }\n`\n\nconst defaultFragmentShader = `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n }\n`\n\nexport default materialComponent(\n 'ShaderMaterial',\n {\n props: { type: Object, default: () => ({\n uniforms: {},\n vertexShader: defaultVertexShader,\n fragmentShader: defaultFragmentShader,\n }) },\n },\n (opts) => new ShaderMaterial(propsValues(opts, ['color']))\n)\n","/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on three/examples/jsm/shaders/SubsurfaceScatteringShader.js\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\nimport {\n Color,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n} from 'three'\n\nfunction replaceAll(string: string, find: string, replace: string) {\n return string.split(find).join(replace)\n}\n\nconst meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {'))\nconst meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {'))\n\nconst SubsurfaceScatteringShader = {\n\n uniforms: UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n thicknessColor: { value: new Color(0xffffff) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n}\n\nexport default SubsurfaceScatteringShader\n","import { defineComponent, PropType } from 'vue'\nimport { Color, ShaderMaterial, UniformsUtils } from 'three'\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader'\nimport Material from './Material'\nimport { bindObjectProp } from '../tools'\n\nexport interface SubSurfaceMaterialUniformsInterface {\n diffuse?: string | number\n thicknessColor?: string | number\n thicknessDistortion?: number\n thicknessAmbient?: number\n thicknessAttenuation?: number\n thicknessPower?: number\n thicknessScale?: number\n}\n\nexport default defineComponent({\n extends: Material,\n props: {\n uniforms: { type: Object as PropType, default: () => ({\n diffuse: '#ffffff',\n thicknessColor: '#ffffff',\n thicknessDistortion: 0.4,\n thicknessAmbient: 0.01,\n thicknessAttenuation: 0.7,\n thicknessPower: 2,\n thicknessScale: 4,\n }) },\n },\n methods: {\n createMaterial() {\n const params = SubsurfaceScatteringShader\n const uniforms = UniformsUtils.clone(params.uniforms)\n\n bindObjectProp(this, 'uniforms', uniforms, true, (dst: any, key: string, value: any) => {\n const dstVal = dst[key].value\n if (dstVal instanceof Color) dstVal.set(value)\n else dst[key].value = value\n })\n\n const material = new ShaderMaterial({\n ...params,\n lights: true,\n ...this.props,\n uniforms,\n })\n\n return material\n },\n },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { ShaderMaterial, Texture, TextureLoader } from 'three'\nimport { bindObjectProp } from '../tools'\nimport { MaterialInjectionKey, MaterialInterface } from './Material'\n\nexport interface TexureInterface {\n material?: MaterialInterface\n texture?: Texture\n}\n\nexport default defineComponent({\n inject: {\n material: MaterialInjectionKey as symbol,\n },\n props: {\n name: { type: String, default: 'map' },\n uniform: String,\n src: String,\n onLoad: Function as PropType<(t: Texture) => void>,\n onProgress: Function as PropType<(e: ProgressEvent) => void>,\n onError: Function as PropType<(e: ErrorEvent) => void>,\n props: { type: Object, default: () => ({}) },\n },\n setup(): TexureInterface {\n return {}\n },\n created() {\n this.refreshTexture()\n watch(() => this.src, this.refreshTexture)\n },\n unmounted() {\n this.material?.setTexture(null, this.name)\n this.texture?.dispose()\n },\n methods: {\n createTexture() {\n if (!this.src) return undefined\n return new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError)\n },\n initTexture() {\n if (!this.texture) return\n\n bindObjectProp(this, 'props', this.texture)\n if (!this.material) return\n\n this.material.setTexture(this.texture, this.name)\n if (this.material.material instanceof ShaderMaterial && this.uniform) {\n (this.material.material).uniforms[this.uniform] = { value: this.texture }\n }\n },\n refreshTexture() {\n this.texture?.dispose()\n this.texture = this.createTexture()\n this.initTexture()\n },\n onLoaded(t: Texture) {\n this.onLoad?.(t)\n },\n },\n render() { return [] },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { CubeReflectionMapping, CubeTextureLoader } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n name: { type: String, default: 'envMap' },\n path: { type: String, required: true },\n urls: {\n type: Array as PropType,\n default: () => ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n props: { type: Object, default: () => ({ mapping: CubeReflectionMapping }) },\n },\n created() {\n watch(() => this.path, this.refreshTexture)\n watch(() => this.urls, this.refreshTexture)\n },\n methods: {\n createTexture() {\n return new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError)\n },\n },\n})\n","import { defineComponent, watch } from 'vue'\nimport { VideoTexture } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n videoId: {\n type: String,\n required: true,\n },\n },\n created() {\n watch(() => this.videoId, this.refreshTexture)\n },\n methods: {\n createTexture() {\n const video = document.getElementById(this.videoId) as HTMLVideoElement\n return new VideoTexture(video)\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/BoxGeometry'\n\nexport default meshComponent('Box', props, createGeometry)\n\n// import { defineComponent } from 'vue'\n// import Mesh, { meshComponent } from './Mesh'\n//\n// export default defineComponent({\n// extends: Mesh,\n// props,\n// created() {\n// this.createGeometry()\n// this.addGeometryWatchers(props)\n// },\n// methods: {\n// createGeometry() {\n// this.geometry = createGeometry(this)\n// },\n// },\n// })\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CircleGeometry'\n\nexport default meshComponent('Circle', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/ConeGeometry'\n\nexport default meshComponent('Cone', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CylinderGeometry'\n\nexport default meshComponent('Cylinder', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/DodecahedronGeometry'\n\nexport default meshComponent('Dodecahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/IcosahedronGeometry'\n\nexport default meshComponent('Icosahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/LatheGeometry'\n\nexport default meshComponent('Lathe', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/OctahedronGeometry'\n\nexport default meshComponent('Octahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PlaneGeometry'\n\nexport default meshComponent('Plane', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PolyhedronGeometry'\n\nexport default meshComponent('Polyhedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/RingGeometry'\n\nexport default meshComponent('Ring', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/SphereGeometry'\n\nexport default meshComponent('Sphere', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TetrahedronGeometry'\n\nexport default meshComponent('Tetrahedron', props, createGeometry)\n","import { defineComponent, PropType, watch } from 'vue'\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'\nimport { Font, FontLoader } from 'three/examples/jsm/loaders/FontLoader.js'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface TextSetupInterface extends MeshSetupInterface {\n geometry?: TextGeometry\n font?: Font\n}\n\nconst props = {\n text: { type: String, required: true, default: 'Text' },\n fontSrc: { type: String, required: true },\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String] as PropType, default: false },\n} as const\n\nexport default defineComponent({\n extends: Mesh,\n props,\n setup(): TextSetupInterface {\n return {}\n },\n created() {\n if (!this.fontSrc) {\n console.error('Missing required prop: \"font-src\"')\n return\n }\n // if (!this.text) {\n // console.error('Missing required prop: \"text\"')\n // return\n // }\n\n // add watchers\n const watchProps = [\n 'text', 'size', 'height', 'curveSegments',\n 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments',\n 'align',\n ]\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], () => {\n if (this.font) this.refreshGeometry()\n })\n })\n\n const loader = new FontLoader()\n this.loading = true\n loader.load(this.fontSrc, (font) => {\n this.loading = false\n this.font = font\n this.createGeometry()\n this.initMesh()\n })\n },\n methods: {\n createGeometry() {\n this.geometry = new TextGeometry(this.text, {\n // @ts-ignore\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n })\n\n if (this.align === 'center') {\n this.geometry.center()\n }\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusGeometry'\n\nexport default meshComponent('Torus', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusKnotGeometry'\n\nexport default meshComponent('TorusKnot', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { TubeGeometry, Vector3 } from 'three'\nimport Mesh from './Mesh'\nimport { props, createGeometry, updateTubeGeometryPoints } from '../geometries/TubeGeometry'\n\nexport default defineComponent({\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update curve points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n __hmrId: 'Tube',\n})\n","import { defineComponent, watch } from 'vue'\nimport { DoubleSide, MeshBasicMaterial, PlaneGeometry, Texture, TextureLoader } from 'three'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface ImageSetupInterface extends MeshSetupInterface {\n material?: MeshBasicMaterial\n texture?: Texture\n}\n\nexport default defineComponent({\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: { type: String, required: true },\n width: Number,\n height: Number,\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n keepSize: Boolean,\n },\n setup(): ImageSetupInterface {\n return {}\n },\n created() {\n if (!this.renderer) return\n\n this.geometry = new PlaneGeometry(1, 1, this.widthSegments, this.heightSegments)\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() })\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.resize)\n })\n\n this.resize()\n if (this.keepSize) this.renderer.onResize(this.resize)\n },\n unmounted() {\n this.renderer?.offResize(this.resize)\n },\n methods: {\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded)\n },\n refreshTexture() {\n this.texture?.dispose()\n if (this.material) {\n this.material.map = this.loadTexture()\n this.material.needsUpdate = true\n }\n },\n onLoaded(texture: Texture) {\n this.texture = texture\n this.resize()\n this.$emit('loaded', texture)\n },\n resize() {\n if (!this.renderer || !this.texture) return\n const screen = this.renderer.size\n const iW = this.texture.image.width\n const iH = this.texture.image.height\n const iRatio = iW / iH\n let w = 1, h = 1\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width\n h = this.height * screen.wHeight / screen.height\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width\n h = w / iRatio\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height\n w = h * iRatio\n } else {\n if (iRatio > 1) w = h * iRatio\n else h = w / iRatio\n }\n if (this.mesh) {\n this.mesh.scale.x = w\n this.mesh.scale.y = h\n }\n },\n },\n __hmrId: 'Image',\n})\n","import { defineComponent } from 'vue'\nimport { InstancedMesh } from 'three'\nimport Mesh from './Mesh'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: Mesh,\n props: {\n count: { type: Number, required: true },\n },\n methods: {\n initMesh() {\n if (!this.renderer) return\n\n if (!this.geometry || !this.material) {\n console.error('Missing geometry and/or material')\n return false\n }\n\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count)\n this.mesh.userData.component = this\n\n bindProp(this, 'castShadow', this.mesh)\n bindProp(this, 'receiveShadow', this.mesh)\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n this.renderer.three.addIntersectObject(this.mesh)\n }\n\n this.initObject3D(this.mesh)\n },\n },\n __hmrId: 'InstancedMesh',\n})\n","import { defineComponent } from 'vue'\nimport { Sprite, SpriteMaterial, Texture, TextureLoader } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\n\ninterface SpriteSetupInterface extends Object3DSetupInterface {\n texture?: Texture\n material?: SpriteMaterial\n sprite?: Sprite\n}\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['loaded'],\n props: {\n src: { type: String, required: true },\n },\n setup(): SpriteSetupInterface {\n return {}\n },\n created() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded)\n this.material = new SpriteMaterial({ map: this.texture })\n this.sprite = new Sprite(this.material)\n this.initObject3D(this.sprite)\n },\n unmounted() {\n this.texture?.dispose()\n this.material?.dispose()\n },\n methods: {\n onLoaded() {\n this.updateUV()\n this.$emit('loaded')\n },\n updateUV() {\n if (!this.texture || !this.sprite) return\n\n const iWidth = this.texture.image.width\n const iHeight = this.texture.image.height\n const iRatio = iWidth / iHeight\n\n let x = 0.5, y = 0.5\n if (iRatio > 1) {\n x = 0.5 * iRatio\n } else {\n y = 0.5 / iRatio\n }\n\n const positions = this.sprite.geometry.attributes.position.array as Array\n positions[0] = -x; positions[1] = -y\n positions[5] = x; positions[6] = -y\n positions[10] = x; positions[11] = y\n positions[15] = -x; positions[16] = y\n this.sprite.geometry.attributes.position.needsUpdate = true\n },\n },\n __hmrId: 'Sprite',\n})\n","import { defineComponent } from 'vue'\nimport { BufferGeometry, Material, Points } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { MeshInjectionKey } from './Mesh'\n\nexport interface PointsSetupInterface extends Object3DSetupInterface {\n mesh?: Points\n points?: Points\n geometry?: BufferGeometry\n material?: Material\n}\n\nexport interface PointsInterface extends PointsSetupInterface {\n setGeometry(geometry: BufferGeometry): void\n setMaterial(material: Material): void\n}\n\n// not really a mesh, but allow us to easily get geometry/material support\nexport default defineComponent({\n extends: Object3D,\n setup(): PointsSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n this.mesh = this.points = new Points(this.geometry, this.material)\n this.initObject3D(this.mesh)\n },\n methods: {\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n },\n },\n})\n","import { Object3D as TObject3D } from 'three'\nimport { defineComponent } from 'vue'\nimport Object3D from '../core/Object3D'\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['before-load', 'load', 'progress', 'error'],\n props: {\n src: { type: String, required: true },\n },\n data() {\n return {\n progress: 0,\n }\n },\n methods: {\n onLoad(model: TObject3D) {\n this.$emit('load', model)\n },\n onProgress(progress: ProgressEvent) {\n this.progress = progress.loaded / progress.total\n this.$emit('progress', progress)\n },\n onError(error: ErrorEvent) {\n this.$emit('error', error)\n },\n },\n})\n","import { defineComponent } from 'vue'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new GLTFLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (gltf) => {\n this.onLoad(gltf)\n this.initObject3D(gltf.scene)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent } from 'vue'\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new FBXLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (fbx) => {\n this.onLoad(fbx)\n this.initObject3D(fbx)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent, inject, InjectionKey } from 'vue'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\n\ninterface EffectComposerSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposer\n}\n\nexport interface EffectComposerInterface extends EffectComposerSetupInterface {\n addPass(pass: Pass): void\n removePass(pass: Pass): void\n}\n\nexport const ComposerInjectionKey: InjectionKey = Symbol('Composer')\n\nexport default defineComponent({\n setup(): EffectComposerSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n provide() {\n return {\n [ComposerInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n const composer = new EffectComposer(this.renderer.renderer)\n this.composer = composer\n this.renderer.composer = composer\n\n // this.renderer.onInit(() => {\n renderer.addListener('init', () => {\n renderer.renderer.autoClear = false\n this.resize()\n renderer.addListener('resize', this.resize)\n })\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n addPass(pass: Pass) {\n this.composer?.addPass(pass)\n },\n removePass(pass: Pass) {\n this.composer?.removePass(pass)\n },\n resize() {\n if (this.composer && this.renderer) {\n this.composer.setSize(this.renderer.size.width, this.renderer.size.height)\n }\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'EffectComposer',\n})\n","import { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { defineComponent } from 'vue'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\nimport { ComposerInjectionKey, EffectComposerInterface } from './EffectComposer'\n\nexport interface EffectSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposerInterface\n pass?: Pass\n}\n\nexport default defineComponent({\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n composer: ComposerInjectionKey as symbol,\n },\n emits: ['ready'],\n setup(): EffectSetupInterface {\n return {}\n },\n created() {\n if (!this.composer) {\n console.error('Missing parent EffectComposer')\n }\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n },\n unmounted() {\n if (this.pass) {\n this.composer?.removePass(this.pass);\n (this.pass as any).dispose?.()\n }\n },\n methods: {\n initEffectPass(pass: Pass) {\n this.pass = pass\n this.composer?.addPass(pass)\n this.$emit('ready', pass)\n },\n },\n render() {\n return []\n },\n __hmrId: 'EffectPass',\n})\n","import { defineComponent } from 'vue'\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n const pass = new RenderPass(this.renderer.scene, this.renderer.camera)\n this.initEffectPass(pass)\n },\n __hmrId: 'RenderPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n focus: { type: Number, default: 1 },\n aperture: { type: Number, default: 0.025 },\n maxblur: { type: Number, default: 0.01 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.renderer.size.width,\n height: this.renderer.size.height,\n }\n\n const pass = new BokehPass(this.renderer.scene, this.renderer.camera, params)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'BokehPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n noiseIntensity: { type: Number, default: 0.5 },\n scanlinesIntensity: { type: Number, default: 0.05 },\n scanlinesCount: { type: Number, default: 4096 },\n grayscale: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'FilmPass',\n})\n","import { defineComponent } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'\nimport EffectPass from './EffectPass'\nimport { SizeInterface } from '../core/useThree'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n const pass = new ShaderPass(FXAAShader)\n\n // resize will be first called in renderer init\n this.renderer?.addListener('resize', this.resize)\n\n this.initEffectPass(pass)\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n resize({ size }: { size: SizeInterface }) {\n if (this.pass) {\n const { resolution } = (this.pass as ShaderPass).material.uniforms\n resolution.value.x = 1 / size.width\n resolution.value.y = 1 / size.height\n }\n },\n },\n __hmrId: 'FXAAPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const pass = new HalftonePass(this.renderer.size.width, this.renderer.size.height, {})\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n pass.uniforms[p].value = this[p]\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'HalftonePass',\n})\n","import { defineComponent } from 'vue'\nimport { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n const pass = new SMAAPass(this.renderer.size.width, this.renderer.size.height)\n this.initEffectPass(pass)\n },\n __hmrId: 'SMAAPass',\n})\n","import { defineComponent } from 'vue'\nimport { SSAOPass } from 'three/examples/jsm/postprocessing/SSAOPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n options: {\n type: Object,\n default: () => ({}),\n },\n },\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const pass = new SSAOPass(\n this.renderer.scene,\n this.renderer.camera,\n this.renderer.size.width,\n this.renderer.size.height\n )\n\n Object.keys(this.options).forEach(key => {\n // @ts-ignore\n pass[key] = this.options[key]\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'SSAOPass',\n})\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n}\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport TiltShift from '../shaders/TiltShift'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nconst props = {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object as PropType, default: () => ({ x: 0, y: 100 }) },\n end: { type: Object as PropType, default: () => ({ x: 10, y: 100 }) },\n} as const\n\ninterface TiltShiftPassSetupInterface {\n uniforms1: {[name: string]: { value: any }}\n uniforms2: {[name: string]: { value: any }}\n pass1?: ShaderPass\n pass2?: ShaderPass\n}\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n setup(): TiltShiftPassSetupInterface {\n return { uniforms1: {}, uniforms2: {} }\n },\n created() {\n if (!this.composer) return\n\n this.pass1 = new ShaderPass(TiltShift)\n this.pass2 = new ShaderPass(TiltShift)\n\n const uniforms1 = this.uniforms1 = this.pass1.uniforms\n const uniforms2 = this.uniforms2 = this.pass2.uniforms\n\n // shared uniforms\n uniforms2.blurRadius = uniforms1.blurRadius\n uniforms2.gradientRadius = uniforms1.gradientRadius\n uniforms2.start = uniforms1.start\n uniforms2.end = uniforms1.end\n uniforms2.texSize = uniforms1.texSize\n\n bindProp(this, 'blurRadius', uniforms1.blurRadius, 'value')\n bindProp(this, 'gradientRadius', uniforms1.gradientRadius, 'value')\n\n this.updateFocusLine();\n\n ['start', 'end'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.updateFocusLine, { deep: true })\n })\n\n this.pass1.setSize = (width: number, height: number) => {\n uniforms1.texSize.value.set(width, height)\n }\n\n this.initEffectPass(this.pass1)\n this.composer.addPass(this.pass2)\n },\n unmounted() {\n if (this.composer && this.pass2) this.composer.removePass(this.pass2)\n },\n methods: {\n updateFocusLine() {\n this.uniforms1.start.value.copy(this.start)\n this.uniforms1.end.value.copy(this.end)\n const dv = new Vector2().copy(this.end as Vector2).sub(this.start as Vector2).normalize()\n this.uniforms1.delta.value.copy(dv)\n this.uniforms2.delta.value.set(-dv.y, dv.x)\n },\n },\n __hmrId: 'TiltShiftPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const size = new Vector2(this.renderer.size.width, this.renderer.size.height)\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'UnrealBloomPass',\n})\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport ZoomBlur from '../shaders/ZoomBlur'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n center: { type: Object as PropType, default: () => ({ x: 0.5, y: 0.5 }) },\n strength: { type: Number, default: 0.5 },\n },\n created() {\n const pass = new ShaderPass(ZoomBlur)\n\n bindProp(this, 'center', pass.uniforms.center, 'value')\n bindProp(this, 'strength', pass.uniforms.strength, 'value')\n\n this.initEffectPass(pass)\n },\n __hmrId: 'ZoomBlurPass',\n})\n","import { App, createApp as _createApp } from 'vue'\nimport * as TROIS from './index'\n\nexport const TroisJSVuePlugin = {\n install(app: App): void {\n const comps = [\n 'Camera',\n 'OrthographicCamera',\n 'PerspectiveCamera',\n 'Raycaster',\n 'Renderer',\n 'Scene',\n 'Group',\n\n 'CubeCamera',\n\n 'AmbientLight',\n 'DirectionalLight',\n 'HemisphereLight',\n 'PointLight',\n 'RectAreaLight',\n 'SpotLight',\n\n 'BasicMaterial',\n 'LambertMaterial',\n 'MatcapMaterial',\n 'PhongMaterial',\n 'PhysicalMaterial',\n 'PointsMaterial',\n 'ShaderMaterial',\n 'StandardMaterial',\n 'SubSurfaceMaterial',\n 'ToonMaterial',\n\n 'Texture',\n 'CubeTexture',\n\n 'BufferGeometry',\n\n 'Mesh',\n\n 'Box', 'BoxGeometry',\n 'Circle', 'CircleGeometry',\n 'Cone', 'ConeGeometry',\n 'Cylinder', 'CylinderGeometry',\n 'Dodecahedron', 'DodecahedronGeometry',\n 'Icosahedron', 'IcosahedronGeometry',\n 'Lathe', 'LatheGeometry',\n 'Octahedron', 'OctahedronGeometry',\n 'Plane', 'PlaneGeometry',\n 'Polyhedron', 'PolyhedronGeometry',\n 'Ring', 'RingGeometry',\n 'Sphere', 'SphereGeometry',\n 'Tetrahedron', 'TetrahedronGeometry',\n 'Text',\n 'Torus', 'TorusGeometry',\n 'TorusKnot', 'TorusKnotGeometry',\n 'Tube', 'TubeGeometry',\n\n 'Image',\n 'InstancedMesh',\n 'Points',\n 'Sprite',\n\n 'FbxModel',\n 'GltfModel',\n\n 'BokehPass',\n 'EffectComposer',\n 'FilmPass',\n 'FXAAPass',\n 'HalftonePass',\n 'RenderPass',\n 'SAOPass',\n 'SMAAPass',\n 'SSAOPass',\n 'TiltShiftPass',\n 'UnrealBloomPass',\n 'ZoomBlurPass',\n ]\n\n comps.forEach(comp => {\n // @ts-ignore\n app.component(comp, TROIS[comp])\n })\n },\n}\n\nexport function createApp(params: any): App {\n return _createApp(params).use(TroisJSVuePlugin)\n}\n","import { Texture, TextureLoader } from 'three'\n\nexport interface TextureConfigInterface {\n src: string\n}\n\nexport interface TexturesInterface {\n loader: TextureLoader\n count: number\n textures: Texture[],\n loadProgress: number\n loadTextures(images: TextureConfigInterface[], cb: {() : void}): void\n dispose(): void\n}\n\nexport default function useTextures(): TexturesInterface {\n const obj: TexturesInterface = {\n loader: new TextureLoader(),\n count: 0,\n textures: [],\n loadProgress: 0,\n loadTextures,\n dispose,\n }\n return obj\n\n function loadTextures(images: TextureConfigInterface[], cb: {() : void}) {\n obj.count = images.length\n obj.textures.splice(0)\n obj.loadProgress = 0\n Promise.all(images.map(loadTexture)).then(cb)\n }\n\n function loadTexture(img: TextureConfigInterface, index: number) {\n return new Promise(resolve => {\n obj.loader.load(\n img.src,\n texture => {\n obj.loadProgress += 1 / obj.count\n obj.textures[index] = texture\n resolve(texture)\n }\n )\n })\n }\n\n function dispose() {\n obj.textures.forEach(t => t.dispose())\n }\n}\n"],"names":["ref","Raycaster","Plane","intersect","InstancedMesh","event","renderer","OrthographicCamera","PerspectiveCamera","_a","Scene","Texture","Group","CubeCamera","TMesh","props","createGeometry","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","ExtrudeGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PlaneGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","ShapeGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","TubeGeometry","SpotLight","DirectionalLight","AmbientLight","HemisphereLight","PointLight","RectAreaLight","TPointsMaterial","TShadowMaterial","ShaderMaterial","Material","VideoTexture","Sprite","Points","EffectComposer","RenderPass","BokehPass","FilmPass","HalftonePass","SMAAPass","SSAOPass","UnrealBloomPass","_createApp"],"mappings":"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"} \ No newline at end of file diff --git a/build/trois.module.min.js b/build/trois.module.min.js new file mode 100644 index 0000000..4cb4149 --- /dev/null +++ b/build/trois.module.min.js @@ -0,0 +1,135 @@ +import{toRef as Le,watch as d,ref as Zr,defineComponent as a,watchEffect as Yr,inject as K,provide as Jr,getCurrentInstance as Qr,onUnmounted as es,createApp as ts}from"vue";import{Vector3 as ie,Raycaster as rs,Plane as ss,Vector2 as T,InstancedMesh as ye,WebGLRenderer as is,OrthographicCamera as ns,PerspectiveCamera as os,Scene as as,Color as Y,Texture as hs,Group as ds,WebGLCubeRenderTarget as us,RGBAFormat as cs,LinearMipmapLinearFilter as ls,CubeCamera as ms,Mesh as ps,BufferGeometry as fs,BufferAttribute as ys,BoxGeometry as Oe,CircleGeometry as gs,ConeGeometry as bs,CylinderGeometry as vs,DodecahedronGeometry as Ss,ExtrudeGeometry as Ps,IcosahedronGeometry as xs,LatheGeometry as ws,OctahedronGeometry as Cs,PlaneGeometry as Ne,PolyhedronGeometry as Ms,RingGeometry as Gs,SphereGeometry as Ls,ShapeGeometry as Os,TetrahedronGeometry as Ns,TorusGeometry as $s,TorusKnotGeometry as Es,CatmullRomCurve3 as $e,Curve as zs,TubeGeometry as Rs,SpotLight as ge,DirectionalLight as be,AmbientLight as js,HemisphereLight as ks,PointLight as Is,RectAreaLight as _s,MeshBasicMaterial as Ee,MeshLambertMaterial as Ts,MeshPhongMaterial as As,MeshPhysicalMaterial as Bs,PointsMaterial as Ds,ShadowMaterial as Fs,MeshStandardMaterial as Us,MeshToonMaterial as Hs,TextureLoader as J,MeshMatcapMaterial as Ks,ShaderMaterial as ve,ShaderChunk as V,UniformsUtils as ze,ShaderLib as Vs,CubeReflectionMapping as Xs,CubeTextureLoader as qs,VideoTexture as Ws,DoubleSide as Zs,SpriteMaterial as Ys,Sprite as Js,Points as Qs}from"three";import{OrbitControls as ei}from"three/examples/jsm/controls/OrbitControls.js";import{RectAreaLightUniformsLib as ti}from"three/examples/jsm/lights/RectAreaLightUniformsLib.js";import{RectAreaLightHelper as ri}from"three/examples/jsm/helpers/RectAreaLightHelper.js";import{TextGeometry as si}from"three/examples/jsm/geometries/TextGeometry.js";import{FontLoader as ii}from"three/examples/jsm/loaders/FontLoader.js";import{GLTFLoader as ni}from"three/examples/jsm/loaders/GLTFLoader.js";import{FBXLoader as oi}from"three/examples/jsm/loaders/FBXLoader.js";import{EffectComposer as ai}from"three/examples/jsm/postprocessing/EffectComposer.js";import{RenderPass as hi}from"three/examples/jsm/postprocessing/RenderPass.js";import{BokehPass as di}from"three/examples/jsm/postprocessing/BokehPass.js";import{FilmPass as ui}from"three/examples/jsm/postprocessing/FilmPass.js";import{ShaderPass as ne}from"three/examples/jsm/postprocessing/ShaderPass.js";import{FXAAShader as ci}from"three/examples/jsm/shaders/FXAAShader.js";import{HalftonePass as li}from"three/examples/jsm/postprocessing/HalftonePass.js";import{SMAAPass as mi}from"three/examples/jsm/postprocessing/SMAAPass.js";import{SSAOPass as pi}from"three/examples/jsm/postprocessing/SSAOPass.js";import{UnrealBloomPass as fi}from"three/examples/jsm/postprocessing/UnrealBloomPass.js";function X(e,t,r){t instanceof Object&&Object.entries(t).forEach(([s,i])=>{r?r(e,s,i):e[s]=i})}function A(e,t,r,s=!0,i){s&&X(r,e[t],i);const n=Le(e,t);return d(n,o=>{X(r,o,i)})}function Re(e,t,r=!0,s){r&&X(t,e,s);const i=Zr(e);return d(i,n=>{X(t,n,s)},{deep:!0})}function q(e,t){t instanceof Object&&Object.entries(t).forEach(([r,s])=>{e[r]=s})}function je(e,t,r){t.forEach(s=>{m(e,s,r,s)})}function m(e,t,r,s){const i=s||t,n=Le(e,t);n.value instanceof Object?(q(r[i],n.value),d(n,o=>{q(r[i],o)},{deep:!0})):(n.value!==void 0&&(r[i]=e[t]),d(n,o=>{r[i]=o}))}function Q(e,t=[]){const r={};return Object.entries(e).forEach(([s,i])=>{(!t||!t.includes(s))&&(r[s]=i)}),r}function ke(e,t,r){return r=r<0?0:r,r=r>1?1:r,e+(t-e)*r}function Ie(e,t,r){return er?r:e}const yi="https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d",gi="0404E8_0404B5_0404CB_3333FC";function Se(e=gi,t=1024){const r=`${e}${bi(t)}.png`;return`${yi}/${t}/${r}`}function bi(e){switch(e){case 64:return"-64px";case 128:return"-128px";case 256:return"-256px";case 512:return"-512px";default:return""}}function vi(e){const{camera:t,resetPosition:r=new ie(0,0,0)}=e,s=new rs,i=r.clone(),n=new ss(new ie(0,0,1),0);return{position:i,updatePosition:o=>{s.setFromCamera(o,t),t.getWorldDirection(n.normal),s.ray.intersectPlane(n,i)},intersect:(o,c,G=!1)=>(s.setFromCamera(o,t),s.intersectObjects(c,G))}}function _e(e){const{camera:t,domElement:r,intersectObjects:s,intersectRecursive:i=!1,touch:n=!0,resetOnEnd:o=!1,onEnter:c=()=>{},onMove:G=()=>{},onLeave:L=()=>{},onClick:y=()=>{},onIntersectEnter:O=()=>{},onIntersectOver:E=()=>{},onIntersectMove:b=()=>{},onIntersectLeave:F=()=>{},onIntersectClick:U=()=>{}}=e,p=new T(0,0),f=new T(0,0),z=vi({camera:t}),h=z.position,u={position:p,positionN:f,positionV3:h,intersectObjects:s,listeners:!1,addListeners:qr,removeListeners:Wr,intersect:xe};return u;function N(){p.set(0,0),f.set(0,0),h.set(0,0,0)}function P(l){let x,_;l.touches&&l.touches.length>0?(x=l.touches[0].clientX,_=l.touches[0].clientY):(x=l.clientX,_=l.clientY);const R=r.getBoundingClientRect();p.x=x-R.left,p.y=_-R.top,f.x=p.x/R.width*2-1,f.y=-(p.y/R.height)*2+1,z.updatePosition(f)}function xe(){const l=Ce();if(l.length){const x=z.intersect(f,l,i),_=[...l],R=[];x.forEach(j=>{var D,k,v;const{object:w}=j,C=pe(w);if(w instanceof ye){if(R.indexOf(w)!==-1)return;R.push(w)}if(!w.userData.over){w.userData.over=!0;const fe={type:"pointerover",over:!0,component:C,intersect:j},Ge={...fe,type:"pointerenter"};E(fe),O(Ge),(D=C==null?void 0:C.onPointerOver)==null||D.call(C,fe),(k=C==null?void 0:C.onPointerEnter)==null||k.call(C,Ge)}const Me={type:"pointermove",component:C,intersect:j};b(Me),(v=C==null?void 0:C.onPointerMove)==null||v.call(C,Me),_.splice(_.indexOf(w),1)}),_.forEach(j=>{var D,k;const v=pe(j);if(j.userData.over){j.userData.over=!1;const w={type:"pointerover",over:!1,component:v},C={...w,type:"pointerleave"};E(w),F(C),(D=v==null?void 0:v.onPointerOver)==null||D.call(v,w),(k=v==null?void 0:v.onPointerLeave)==null||k.call(v,C)}})}}function te(l){P(l),c({type:"pointerenter",position:p,positionN:f,positionV3:h})}function re(l){P(l),G({type:"pointermove",position:p,positionN:f,positionV3:h}),xe()}function we(l){P(l);const x=Ce();if(x.length){const _=z.intersect(f,x,i),R=[];_.forEach(j=>{var D;const{object:k}=j,v=pe(k);if(k instanceof ye){if(R.indexOf(k)!==-1)return;R.push(k)}const w={type:"click",component:v,intersect:j};U(w),(D=v==null?void 0:v.onClick)==null||D.call(v,w)})}y({type:"click",position:p,positionN:f,positionV3:h})}function se(){o&&N(),L({type:"pointerleave"})}function pe(l){if(l.userData.component)return l.userData.component;let x=l.parent;for(;x;){if(x.userData.component)return x.userData.component;x=x.parent}}function Ce(){return typeof s=="function"?s():s}function qr(){r.addEventListener("mouseenter",te),r.addEventListener("mousemove",re),r.addEventListener("mouseleave",se),r.addEventListener("click",we),n&&(r.addEventListener("touchstart",te),r.addEventListener("touchmove",re),r.addEventListener("touchend",se)),u.listeners=!0}function Wr(){r.removeEventListener("mouseenter",te),r.removeEventListener("mousemove",re),r.removeEventListener("mouseleave",se),r.removeEventListener("click",we),r.removeEventListener("touchstart",te),r.removeEventListener("touchmove",re),r.removeEventListener("touchend",se),u.listeners=!1}}function Si(e){const t={antialias:!0,alpha:!1,autoClear:!0,orbitCtrl:!1,pointer:!1,resize:!1,width:300,height:150};e&&Object.entries(e).forEach(([h,u])=>{t[h]=u});const r={width:1,height:1,wWidth:1,wHeight:1,ratio:1},s=[],i=[],n=c(),o={config:t,renderer:n,size:r,init:G,dispose:U,render:O,renderC:E,setSize:f,addIntersectObject:b,removeIntersectObject:F};return o;function c(){const h=new is({canvas:t.canvas,antialias:t.antialias,alpha:t.alpha,...t.params});return h.autoClear=t.autoClear,h}function G(){if(!o.scene)return console.error("Missing Scene"),!1;if(!o.camera)return console.error("Missing Camera"),!1;if(t.resize?(p(),window.addEventListener("resize",p)):t.width&&t.height&&f(t.width,t.height),L(),t.orbitCtrl){const h=new ei(o.camera,o.renderer.domElement);t.orbitCtrl instanceof Object&&Object.entries(t.orbitCtrl).forEach(([u,N])=>{h[u]=N}),y(()=>{h.update()}),o.cameraCtrl=h}return!0}function L(){let h={camera:o.camera,domElement:o.renderer.domElement,intersectObjects:i};t.pointer&&t.pointer instanceof Object&&(h={...h,...t.pointer});const u=o.pointer=_e(h);(t.pointer||i.length)&&(u.addListeners(),h.intersectMode==="frame"&&y(u.intersect))}function y(h){s.push(h)}function O(){s.forEach(h=>h()),o.renderer.render(o.scene,o.camera)}function E(){s.forEach(h=>h()),o.composer.render()}function b(h){i.indexOf(h)===-1&&i.push(h),o.pointer&&!o.pointer.listeners&&o.pointer.addListeners()}function F(h){const u=i.indexOf(h);u!==-1&&i.splice(u,1),o.pointer&&!t.pointer&&i.length===0&&o.pointer.removeListeners()}function U(){window.removeEventListener("resize",p),o.pointer&&o.pointer.removeListeners(),o.cameraCtrl&&o.cameraCtrl.dispose(),o.renderer&&o.renderer.dispose()}function p(){var h;if(t.resize==="window")f(window.innerWidth,window.innerHeight);else{const u=o.renderer.domElement.parentNode;u&&f(u.clientWidth,u.clientHeight)}(h=t.onResize)==null||h.call(t,r)}function f(h,u){r.width=h,r.height=u,r.ratio=h/u,o.renderer.setSize(h,u,!1);const N=o.camera;if(N.type==="PerspectiveCamera"){const P=N;P.aspect=r.ratio,P.updateProjectionMatrix()}if(N.type==="OrthographicCamera"){const P=N;r.wWidth=P.right-P.left,r.wHeight=P.top-P.bottom}else{const P=z();r.wWidth=P[0],r.wHeight=P[1]}}function z(){const h=o.camera,u=h.fov*Math.PI/180,N=2*Math.tan(u/2)*Math.abs(h.position.z);return[N*h.aspect,N]}}const $=Symbol("Renderer");var Te=a({name:"Renderer",props:{params:{type:Object,default:()=>({})},antialias:Boolean,alpha:Boolean,autoClear:{type:Boolean,default:!0},orbitCtrl:{type:[Boolean,Object],default:!1},pointer:{type:[Boolean,Object],default:!1},resize:{type:[Boolean,String],default:!1},shadow:Boolean,width:String,height:String,pixelRatio:Number,xr:Boolean,props:{type:Object,default:()=>({})},onReady:Function},inheritAttrs:!1,setup(e,{attrs:t}){const r=[],s=[],i=[],n=[],o=[],c=document.createElement("canvas");Object.entries(t).forEach(([O,E])=>{const b=O.match(/^on([A-Z][a-zA-Z]*)$/);b?c.addEventListener(b[1].toLowerCase(),E):c.setAttribute(O,E)});const G={canvas:c,params:e.params,antialias:e.antialias,alpha:e.alpha,autoClear:e.autoClear,orbitCtrl:e.orbitCtrl,pointer:e.pointer,resize:e.resize};e.width&&(G.width=parseInt(e.width)),e.height&&(G.height=parseInt(e.height));const L=Si(G);A(e,"props",L.renderer),Yr(()=>{e.pixelRatio&&L.renderer.setPixelRatio(e.pixelRatio)});const y=()=>{};return{canvas:c,three:L,renderer:L.renderer,size:L.size,renderFn:y,raf:!0,initCallbacks:r,mountedCallbacks:s,beforeRenderCallbacks:i,afterRenderCallbacks:n,resizeCallbacks:o}},computed:{camera:{get:function(){return this.three.camera},set:function(e){this.three.camera=e}},scene:{get:function(){return this.three.scene},set:function(e){this.three.scene=e}},composer:{get:function(){return this.three.composer},set:function(e){this.three.composer=e}}},provide(){return{[$]:this}},mounted(){var e;this.$el.parentNode.insertBefore(this.canvas,this.$el),this.three.init()&&(this.three.pointer&&(this.$pointer=this.three.pointer),this.three.config.onResize=t=>{this.resizeCallbacks.forEach(r=>r({type:"resize",renderer:this,size:t}))},this.shadow&&(this.renderer.shadowMap.enabled=!0),this.renderFn=this.three.composer?this.three.renderC:this.three.render,this.initCallbacks.forEach(t=>t({type:"init",renderer:this})),(e=this.onReady)==null||e.call(this,this),this.xr?(this.renderer.xr.enabled=!0,this.renderer.setAnimationLoop(this.render)):requestAnimationFrame(this.renderLoop)),this.mountedCallbacks.forEach(t=>t({type:"mounted",renderer:this}))},beforeUnmount(){this.canvas.remove(),this.beforeRenderCallbacks=[],this.afterRenderCallbacks=[],this.raf=!1,this.three.dispose()},methods:{onInit(e){this.addListener("init",e)},onMounted(e){this.addListener("mounted",e)},onBeforeRender(e){this.addListener("beforerender",e)},offBeforeRender(e){this.removeListener("beforerender",e)},onAfterRender(e){this.addListener("afterrender",e)},offAfterRender(e){this.removeListener("afterrender",e)},onResize(e){this.addListener("resize",e)},offResize(e){this.removeListener("resize",e)},addListener(e,t){this.getCallbacks(e).push(t)},removeListener(e,t){const r=this.getCallbacks(e),s=r.indexOf(t);s!==-1&&r.splice(s,1)},getCallbacks(e){return e==="init"?this.initCallbacks:e==="mounted"?this.mountedCallbacks:e==="beforerender"?this.beforeRenderCallbacks:e==="afterrender"?this.afterRenderCallbacks:this.resizeCallbacks},render(e){this.beforeRenderCallbacks.forEach(t=>t({type:"beforerender",renderer:this,time:e})),this.renderFn({renderer:this,time:e}),this.afterRenderCallbacks.forEach(t=>t({type:"afterrender",renderer:this,time:e}))},renderLoop(e){this.raf&&requestAnimationFrame(this.renderLoop),this.render(e)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Renderer"}),Ae=a({props:{props:{type:Object,default:()=>({})}},render(){return this.$slots.default?this.$slots.default():[]}});function oe(e,t,r,s=!0){e[t]=r,s&&e.updateProjectionMatrix()}var Be=a({extends:Ae,name:"OrthographicCamera",props:{left:{type:Number,default:-1},right:{type:Number,default:1},top:{type:Number,default:1},bottom:{type:Number,default:-1},near:{type:Number,default:.1},far:{type:Number,default:2e3},zoom:{type:Number,default:1},position:{type:Object,default:()=>({x:0,y:0,z:0})}},setup(e){const t=K($);if(!t){console.error("Renderer not found");return}const r=new ns(e.left,e.right,e.top,e.bottom,e.near,e.far);return t.camera=r,m(e,"position",r),A(e,"props",r,!0,oe),["left","right","top","bottom","near","far","zoom"].forEach(s=>{d(()=>e[s],i=>{oe(r,s,i)})}),{renderer:t,camera:r}},__hmrId:"OrthographicCamera"}),ae=a({extends:Ae,name:"PerspectiveCamera",props:{aspect:{type:Number,default:1},far:{type:Number,default:2e3},fov:{type:Number,default:50},near:{type:Number,default:.1},position:{type:Object,default:()=>({x:0,y:0,z:0})},lookAt:{type:Object,default:null}},setup(e){var t;const r=K($);if(!r){console.error("Renderer not found");return}const s=new os(e.fov,e.aspect,e.near,e.far);return r.camera=s,m(e,"position",s),e.lookAt&&s.lookAt((t=e.lookAt.x)!=null?t:0,e.lookAt.y,e.lookAt.z),d(()=>e.lookAt,i=>{var n;s.lookAt((n=i.x)!=null?n:0,i.y,i.z)},{deep:!0}),A(e,"props",s,!0,oe),["aspect","far","fov","near"].forEach(i=>{d(()=>e[i],n=>{oe(s,i,n)})}),{renderer:r,camera:s}},__hmrId:"PerspectiveCamera"});const he=Symbol("Scene");var De=a({name:"Scene",props:{background:[String,Number,Object]},setup(e){const t=K($),r=new as;if(!t){console.error("Renderer not found");return}t.scene=r,Jr(he,r);const s=i=>{!i||(typeof i=="string"||typeof i=="number"?r.background instanceof Y?r.background.set(i):r.background=new Y(i):i instanceof hs&&(r.background=i))};return s(e.background),d(()=>e.background,s),{scene:r,add:i=>{r.add(i)},remove:i=>{r.remove(i)}}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Scene"});const Pi={onPointerEnter:Function,onPointerOver:Function,onPointerMove:Function,onPointerLeave:Function,onPointerDown:Function,onPointerUp:Function,onClick:Function};var B=a({name:"Object3D",inject:{renderer:$,scene:he},emits:["created","ready"],props:{position:{type:Object,default:()=>({x:0,y:0,z:0})},rotation:{type:Object,default:()=>({x:0,y:0,z:0})},scale:{type:Object,default:()=>({x:1,y:1,z:1,order:"XYZ"})},lookAt:{type:Object,default:null},userData:{type:Object,default:()=>({})},visible:{type:Boolean,default:!0},props:{type:Object,default:()=>({})},disableAdd:{type:Boolean,default:!1},disableRemove:{type:Boolean,default:!1},...Pi},setup(){return{}},created(){this.renderer||console.error("Missing parent Renderer"),this.scene||console.error("Missing parent Scene")},unmounted(){this.disableRemove||this.removeFromParent(),this.o3d&&this.renderer&&this.renderer.three.removeIntersectObject(this.o3d)},methods:{initObject3D(e){var t;this.o3d=e,e.userData.component=this,(this.onPointerEnter||this.onPointerOver||this.onPointerMove||this.onPointerLeave||this.onPointerDown||this.onPointerUp||this.onClick)&&this.renderer&&this.renderer.three.addIntersectObject(e),m(this,"position",e),m(this,"rotation",e),m(this,"scale",e),m(this,"userData",e.userData),m(this,"visible",e),A(this,"props",e),this.$emit("created",e),this.lookAt&&e.lookAt((t=this.lookAt.x)!=null?t:0,this.lookAt.y,this.lookAt.z),d(()=>this.lookAt,r=>{var s;e.lookAt((s=r.x)!=null?s:0,r.y,r.z)},{deep:!0}),this.parent=this.getParent(),this.disableAdd||(this.addToParent()?this.$emit("ready",this):console.error("Missing parent (Scene, Group...)"))},getParent(){let e=this.$parent;if(!e){const t=Qr();t&&t.parent&&(e=t.parent.ctx)}for(;e;){if(e.add)return e;e=e.$parent}},addToParent(e){const t=e||this.o3d;return this.parent?(this.parent.add(t),!0):!1},removeFromParent(e){const t=e||this.o3d;return this.parent?(this.parent.remove(t),!0):!1},add(e){var t;(t=this.o3d)==null||t.add(e)},remove(e){var t;(t=this.o3d)==null||t.remove(e)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Object3D"}),Fe=a({name:"Group",extends:B,setup(){return{group:new ds}},created(){this.initObject3D(this.group)},__hmrId:"Group"});const ee=()=>{};var Ue=a({name:"Raycaster",props:{onPointerEnter:{type:Function,default:ee},onPointerOver:{type:Function,default:ee},onPointerMove:{type:Function,default:ee},onPointerLeave:{type:Function,default:ee},onClick:{type:Function,default:ee},intersectMode:{type:String,default:"move"},intersectRecursive:{type:Boolean,default:!1}},setup(){return{renderer:K($)}},mounted(){if(!this.renderer){console.error("Renderer not found");return}const e=this.renderer;this.renderer.onMounted(()=>{!e.camera||(this.pointer=_e({camera:e.camera,domElement:e.canvas,intersectObjects:()=>e.scene?e.scene.children:[],intersectRecursive:this.intersectRecursive,onIntersectEnter:this.onPointerEnter,onIntersectOver:this.onPointerOver,onIntersectMove:this.onPointerMove,onIntersectLeave:this.onPointerLeave,onIntersectClick:this.onClick}),this.pointer.addListeners(),this.intersectMode==="frame"&&e.onBeforeRender(this.pointer.intersect))})},unmounted(){var e;this.pointer&&(this.pointer.removeListeners(),(e=this.renderer)==null||e.offBeforeRender(this.pointer.intersect))},render(){return[]},__hmrId:"Raycaster"}),He=a({extends:B,props:{cubeRTSize:{type:Number,default:256},cubeCameraNear:{type:Number,default:.1},cubeCameraFar:{type:Number,default:2e3},autoUpdate:Boolean,hideMeshes:{type:Array,default:()=>[]}},setup(e){const t=K($);if(!t||!t.scene)return console.error("Missing Renderer / Scene"),{};const r=t.renderer,s=t.scene,i=new us(e.cubeRTSize,{format:cs,generateMipmaps:!0,minFilter:ls}),n=new ms(e.cubeCameraNear,e.cubeCameraFar,i),o=()=>{e.hideMeshes.forEach(c=>{c.visible=!1}),n.update(r,s),e.hideMeshes.forEach(c=>{c.visible=!0})};return e.autoUpdate?(t.onBeforeRender(o),es(()=>{t.offBeforeRender(o)})):t.onMounted(o),{cubeRT:i,cubeCamera:n,updateRT:o}},created(){this.cubeCamera&&this.initObject3D(this.cubeCamera)},render(){return[]},__hmrId:"CubeCamera"});const W=Symbol("Mesh"),H=a({name:"Mesh",extends:B,props:{castShadow:Boolean,receiveShadow:Boolean},setup(){return{}},provide(){return{[W]:this}},mounted(){!this.mesh&&!this.loading&&this.initMesh()},methods:{initMesh(){const e=new ps(this.geometry,this.material);m(this,"castShadow",e),m(this,"receiveShadow",e),this.mesh=e,this.initObject3D(e)},createGeometry(){},addGeometryWatchers(e){Object.keys(e).forEach(t=>{d(()=>this[t],()=>{this.refreshGeometry()})})},setGeometry(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial(e){if(Array.isArray(e)||!this.material)this.material=e,this.mesh&&(this.mesh.material=e);else{let t=this.material;Array.isArray(t)?t.push(e):t=[t,e],this.material=t,this.mesh&&(this.mesh.material=t)}},refreshGeometry(){const e=this.geometry;this.createGeometry(),this.mesh&&this.geometry&&(this.mesh.geometry=this.geometry),e==null||e.dispose()}},unmounted(){if(this.geometry&&this.geometry.dispose(),this.material)if(Array.isArray(this.material))for(const e of this.material)e.dispose();else this.material.dispose()},__hmrId:"Mesh"});function S(e,t,r){return a({name:e,extends:H,props:t,created(){this.createGeometry(),this.addGeometryWatchers(t)},methods:{createGeometry(){this.geometry=r(this)}}})}const de=a({emits:["created"],props:{rotateX:Number,rotateY:Number,rotateZ:Number,attributes:{type:Array,default:()=>[]}},inject:{mesh:W},setup(){return{}},created(){if(!this.mesh){console.error("Missing parent Mesh");return}this.createGeometry(),this.rotateGeometry(),this.geometry&&this.mesh.setGeometry(this.geometry),Object.keys(this.$props).forEach(e=>{d(()=>this[e],this.refreshGeometry)})},unmounted(){var e;(e=this.geometry)==null||e.dispose()},methods:{createGeometry(){const e={},t=new fs;this.attributes.forEach(r=>{if(r.name&&r.itemSize&&r.array){const s=e[r.name]=new ys(r.array,r.itemSize,r.normalized);t.setAttribute(r.name,s)}}),t.computeBoundingBox(),t.userData.component=this,this.geometry=t,this.$emit("created",t)},rotateGeometry(){!this.geometry||(this.rotateX&&this.geometry.rotateX(this.rotateX),this.rotateY&&this.geometry.rotateY(this.rotateY),this.rotateZ&&this.geometry.rotateZ(this.rotateZ))},refreshGeometry(){const e=this.geometry;this.createGeometry(),this.rotateGeometry(),this.geometry&&this.mesh&&this.mesh.setGeometry(this.geometry),e==null||e.dispose()}},render(){return[]}});function g(e,t,r){return a({name:e,extends:de,props:t,methods:{createGeometry(){this.geometry=r(this),this.geometry.userData.component=this,this.$emit("created",this.geometry)}}})}const Ke={size:Number,width:{type:Number,default:1},height:{type:Number,default:1},depth:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},depthSegments:{type:Number,default:1}};function Ve(e){return e.size?new Oe(e.size,e.size,e.size,e.widthSegments,e.heightSegments,e.depthSegments):new Oe(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}var Xe=g("BoxGeometry",Ke,Ve);const qe={radius:{type:Number,default:1},segments:{type:Number,default:8},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI*2}};function We(e){return new gs(e.radius,e.segments,e.thetaStart,e.thetaLength)}var Ze=g("CircleGeometry",qe,We);const Ye={radius:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI*2}};function Je(e){return new bs(e.radius,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}var Qe=g("ConeGeometry",Ye,Je);const et={radiusTop:{type:Number,default:1},radiusBottom:{type:Number,default:1},height:{type:Number,default:1},radialSegments:{type:Number,default:8},heightSegments:{type:Number,default:1},openEnded:{type:Boolean,default:!1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI*2}};function tt(e){return new vs(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}var rt=g("CylinderGeometry",et,tt);const st={radius:{type:Number,default:1},detail:{type:Number,default:0}};function it(e){return new Ss(e.radius,e.detail)}var nt=g("DodecahedronGeometry",st,it);const xi={shapes:{type:[Object,Array]},options:{type:Object}};function wi(e){return new Ps(e.shapes,e.options)}var ot=g("ExtrudeGeometry",xi,wi);const at={radius:{type:Number,default:1},detail:{type:Number,default:0}};function ht(e){return new xs(e.radius,e.detail)}var dt=g("IcosahedronGeometry",at,ht);const ut={points:Array,segments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:Math.PI*2}};function ct(e){return new ws(e.points,e.segments,e.phiStart,e.phiLength)}var lt=g("LatheGeometry",ut,ct);const mt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function pt(e){return new Cs(e.radius,e.detail)}var ft=g("OctahedronGeometry",mt,pt);const yt={width:{type:Number,default:1},height:{type:Number,default:1},widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1}};function gt(e){return new Ne(e.width,e.height,e.widthSegments,e.heightSegments)}var bt=g("PlaneGeometry",yt,gt);const vt={vertices:Array,indices:Array,radius:{type:Number,default:1},detail:{type:Number,default:0}};function St(e){return new Ms(e.vertices,e.indices,e.radius,e.detail)}var Pt=g("PolyhedronGeometry",vt,St);const xt={innerRadius:{type:Number,default:.5},outerRadius:{type:Number,default:1},thetaSegments:{type:Number,default:8},phiSegments:{type:Number,default:1},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI*2}};function wt(e){return new Gs(e.innerRadius,e.outerRadius,e.thetaSegments,e.phiSegments,e.thetaStart,e.thetaLength)}var Ct=g("RingGeometry",xt,wt);const Mt={radius:{type:Number,default:1},widthSegments:{type:Number,default:12},heightSegments:{type:Number,default:12},phiStart:{type:Number,default:0},phiLength:{type:Number,default:Math.PI*2},thetaStart:{type:Number,default:0},thetaLength:{type:Number,default:Math.PI}};function Gt(e){return new Ls(e.radius,e.widthSegments,e.heightSegments,e.phiStart,e.phiLength,e.thetaStart,e.thetaLength)}var Lt=g("SphereGeometry",Mt,Gt);const Ci={shapes:{type:[Object,Array]},curveSegments:{type:Number}};function Mi(e){return new Os(e.shapes,e.curveSegments)}var Ot=g("ShapeGeometry",Ci,Mi);const Nt={radius:{type:Number,default:1},detail:{type:Number,default:0}};function $t(e){return new Ns(e.radius,e.detail)}var Et=g("TetrahedronGeometry",Nt,$t);const zt={radius:{type:Number,default:1},tube:{type:Number,default:.4},radialSegments:{type:Number,default:8},tubularSegments:{type:Number,default:6},arc:{type:Number,default:Math.PI*2}};function Rt(e){return new $s(e.radius,e.tube,e.radialSegments,e.tubularSegments,e.arc)}var jt=g("TorusGeometry",zt,Rt);const kt={radius:{type:Number,default:1},tube:{type:Number,default:.4},tubularSegments:{type:Number,default:64},radialSegments:{type:Number,default:8},p:{type:Number,default:2},q:{type:Number,default:3}};function It(e){return new Es(e.radius,e.tube,e.tubularSegments,e.radialSegments,e.p,e.q)}var _t=g("TorusKnotGeometry",kt,It);const Pe={points:Array,path:zs,tubularSegments:{type:Number,default:64},radius:{type:Number,default:1},radialSegments:{type:Number,default:8},closed:{type:Boolean,default:!1}};function Tt(e){let t;return e.points?t=new $e(e.points):e.path?t=e.path:console.error("Missing path curve or points."),new Rs(t,e.tubularSegments,e.radius,e.radiusSegments,e.closed)}var At=a({extends:de,props:Pe,methods:{createGeometry(){this.geometry=Tt(this)},updatePoints(e){Bt(this.geometry,e)}}});function Bt(e,t){const r=new $e(t),{radialSegments:s,radius:i,tubularSegments:n,closed:o}=e.parameters,c=r.computeFrenetFrames(n,o);e.tangents=c.tangents,e.normals=c.normals,e.binormals=c.binormals,e.parameters.path=r;const G=e.getAttribute("position"),L=e.getAttribute("normal"),y=new ie,O=new ie;for(let b=0;b({x:512,y:512})},shadowCamera:{type:Object,default:()=>({})}},setup(){return{}},unmounted(){(this.light instanceof ge||this.light instanceof be)&&this.removeFromParent(this.light.target)},methods:{initLight(e){this.light=e,e.shadow&&(e.castShadow=this.castShadow,q(e.shadow.mapSize,this.shadowMapSize),q(e.shadow.camera,this.shadowCamera)),["color","intensity","castShadow"].forEach(t=>{d(()=>this[t],r=>{t==="color"?e.color.set(r):e[t]=r})}),this.initObject3D(e),(e instanceof ge||e instanceof be)&&(m(this,"target",e.target,"position"),this.addToParent(e.target))}},__hmrId:"Light"}),Dt=a({extends:Z,created(){this.initLight(new js(this.color,this.intensity))},__hmrId:"AmbientLight"}),Ft=a({extends:Z,props:{target:{type:Object,default:()=>({x:0,y:0,z:0})}},created(){this.initLight(new be(this.color,this.intensity))},__hmrId:"DirectionalLight"}),Ut=a({extends:Z,props:{groundColor:{type:String,default:"#444444"}},created(){const e=new ks(this.color,this.groundColor,this.intensity);d(()=>this.groundColor,t=>{e.groundColor.set(t)}),this.initLight(e)},__hmrId:"HemisphereLight"}),Ht=a({extends:Z,props:{distance:{type:Number,default:0},decay:{type:Number,default:1}},created(){this.initLight(new Is(this.color,this.intensity,this.distance,this.decay))},__hmrId:"PointLight"}),Kt=a({extends:Z,props:{width:{type:Number,default:10},height:{type:Number,default:10},helper:Boolean},created(){ti.init();const e=new _s(this.color,this.intensity,this.width,this.height);if(["width","height"].forEach(t=>{d(()=>this[t],r=>{e[t]=r})}),this.helper){const t=new ri(e);e.add(t)}this.initLight(e)},__hmrId:"RectAreaLight"}),Vt=a({extends:Z,props:{angle:{type:Number,default:Math.PI/3},decay:{type:Number,default:1},distance:{type:Number,default:0},penumbra:{type:Number,default:0},target:Object},created(){const e=new ge(this.color,this.intensity,this.distance,this.angle,this.penumbra,this.decay);["angle","decay","distance","penumbra"].forEach(t=>{d(()=>this[t],r=>{e[t]=r})}),this.initLight(e)},__hmrId:"SpotLight"});const ue=Symbol("Material"),ce=a({emits:["created"],props:{color:{type:String,default:"#ffffff"},props:{type:Object,default:()=>({})}},inject:{mesh:W},setup(){return{}},provide(){return{[ue]:this}},created(){if(!this.mesh){console.error("Missing parent Mesh");return}if(this.createMaterial){const e=this.material=this.createMaterial();d(()=>this.color,t=>{e.color.set(t)}),A(this,"props",e,!1,this.setProp),this.$emit("created",e),this.mesh.setMaterial(e)}},unmounted(){var e;(e=this.material)==null||e.dispose()},methods:{getMaterialParams(){return{...Q(this.$props,["props"]),...this.props}},setProp(e,t,r,s=!1){const i=e[t];i instanceof Y?i.set(r):e[t]=r,e.needsUpdate=s},setTexture(e,t="map"){this.setProp(this.material,t,e,!0)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"Material"});function I(e,t,r){return a({name:e,extends:ce,props:t,methods:{createMaterial(){return r(this.getMaterialParams())}}})}const Xt=I("BasicMaterial",{props:{type:Object,default:()=>({})}},e=>new Ee(e)),qt=I("LambertMaterial",{props:{type:Object,default:()=>({})}},e=>new Ts(e)),Wt=I("PhongMaterial",{props:{type:Object,default:()=>({})}},e=>new As(e)),Zt=I("PhysicalMaterial",{props:{type:Object,default:()=>({})}},e=>new Bs(e)),Yt=I("PointsMaterial",{props:{type:Object,default:()=>({})}},e=>new Ds(e)),Jt=I("ShadowMaterial",{color:{type:String,default:"#000000"},props:{type:Object,default:()=>({})}},e=>new Fs(e)),Qt=I("StandardMaterial",{props:{type:Object,default:()=>({})}},e=>new Us(e)),er=I("ToonMaterial",{props:{type:Object,default:()=>({})}},e=>new Hs(e));var tr=I("MatcapMaterial",{src:String,name:{type:String,default:"0404E8_0404B5_0404CB_3333FC"}},e=>{const t=e.src?e.src:Se(e.name),r=Q(e,["src","name"]);return r.matcap=new J().load(t),new Ks(r)});const Gi=` + varying vec2 vUv; + void main(){ + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); + } +`,Li=` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0); + } +`;var rr=I("ShaderMaterial",{props:{type:Object,default:()=>({uniforms:{},vertexShader:Gi,fragmentShader:Li})}},e=>new ve(Q(e,["color"])));function Oi(e,t,r){return e.split(t).join(r)}const Ni=V.meshphong_frag.slice(0,V.meshphong_frag.indexOf("void main() {")),$i=V.meshphong_frag.slice(V.meshphong_frag.indexOf("void main() {")),Ei={uniforms:ze.merge([Vs.phong.uniforms,{thicknessColor:{value:new Y(16777215)},thicknessDistortion:{value:.1},thicknessAmbient:{value:0},thicknessAttenuation:{value:.1},thicknessPower:{value:2},thicknessScale:{value:10}}]),vertexShader:` + #define USE_UV + ${V.meshphong_vert} + `,fragmentShader:` + #define USE_UV + #define SUBSURFACE + + ${Ni} + + uniform float thicknessPower; + uniform float thicknessScale; + uniform float thicknessDistortion; + uniform float thicknessAmbient; + uniform float thicknessAttenuation; + uniform vec3 thicknessColor; + + void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { + #ifdef USE_COLOR + vec3 thickness = vColor * thicknessColor; + #else + vec3 thickness = thicknessColor; + #endif + vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); + float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; + vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; + reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; + } + `+$i.replace("#include ",Oi(V.lights_fragment_begin,"RE_Direct( directLight, geometry, material, reflectedLight );",` + RE_Direct( directLight, geometry, material, reflectedLight ); + #if defined( SUBSURFACE ) && defined( USE_UV ) + RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); + #endif + `))};var sr=a({extends:ce,props:{uniforms:{type:Object,default:()=>({diffuse:"#ffffff",thicknessColor:"#ffffff",thicknessDistortion:.4,thicknessAmbient:.01,thicknessAttenuation:.7,thicknessPower:2,thicknessScale:4})}},methods:{createMaterial(){const e=Ei,t=ze.clone(e.uniforms);return A(this,"uniforms",t,!0,(r,s,i)=>{const n=r[s].value;n instanceof Y?n.set(i):r[s].value=i}),new ve({...e,lights:!0,...this.props,uniforms:t})}}}),le=a({inject:{material:ue},props:{name:{type:String,default:"map"},uniform:String,src:String,onLoad:Function,onProgress:Function,onError:Function,props:{type:Object,default:()=>({})}},setup(){return{}},created(){this.refreshTexture(),d(()=>this.src,this.refreshTexture)},unmounted(){var e,t;(e=this.material)==null||e.setTexture(null,this.name),(t=this.texture)==null||t.dispose()},methods:{createTexture(){if(this.src)return new J().load(this.src,this.onLoaded,this.onProgress,this.onError)},initTexture(){!this.texture||(A(this,"props",this.texture),this.material&&(this.material.setTexture(this.texture,this.name),this.material.material instanceof ve&&this.uniform&&(this.material.material.uniforms[this.uniform]={value:this.texture})))},refreshTexture(){var e;(e=this.texture)==null||e.dispose(),this.texture=this.createTexture(),this.initTexture()},onLoaded(e){var t;(t=this.onLoad)==null||t.call(this,e)}},render(){return[]}}),ir=a({extends:le,props:{name:{type:String,default:"envMap"},path:{type:String,required:!0},urls:{type:Array,default:()=>["px.jpg","nx.jpg","py.jpg","ny.jpg","pz.jpg","nz.jpg"]},props:{type:Object,default:()=>({mapping:Xs})}},created(){d(()=>this.path,this.refreshTexture),d(()=>this.urls,this.refreshTexture)},methods:{createTexture(){return new qs().setPath(this.path).load(this.urls,this.onLoaded,this.onProgress,this.onError)}}}),nr=a({extends:le,props:{videoId:{type:String,required:!0}},created(){d(()=>this.videoId,this.refreshTexture)},methods:{createTexture(){const e=document.getElementById(this.videoId);return new Ws(e)}}}),or=S("Box",Ke,Ve),ar=S("Circle",qe,We),hr=S("Cone",Ye,Je),dr=S("Cylinder",et,tt),ur=S("Dodecahedron",st,it),cr=S("Icosahedron",at,ht),lr=S("Lathe",ut,ct),mr=S("Octahedron",mt,pt),pr=S("Plane",yt,gt),fr=S("Polyhedron",vt,St),yr=S("Ring",xt,wt),gr=S("Sphere",Mt,Gt),br=S("Tetrahedron",Nt,$t);const zi={text:{type:String,required:!0,default:"Text"},fontSrc:{type:String,required:!0},size:{type:Number,default:80},height:{type:Number,default:5},depth:{type:Number,default:1},curveSegments:{type:Number,default:12},bevelEnabled:{type:Boolean,default:!1},bevelThickness:{type:Number,default:10},bevelSize:{type:Number,default:8},bevelOffset:{type:Number,default:0},bevelSegments:{type:Number,default:5},align:{type:[Boolean,String],default:!1}};var vr=a({extends:H,props:zi,setup(){return{}},created(){if(!this.fontSrc){console.error('Missing required prop: "font-src"');return}["text","size","height","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","align"].forEach(t=>{d(()=>this[t],()=>{this.font&&this.refreshGeometry()})});const e=new ii;this.loading=!0,e.load(this.fontSrc,t=>{this.loading=!1,this.font=t,this.createGeometry(),this.initMesh()})},methods:{createGeometry(){this.geometry=new si(this.text,{font:this.font,size:this.size,height:this.height,depth:this.depth,curveSegments:this.curveSegments,bevelEnabled:this.bevelEnabled,bevelThickness:this.bevelThickness,bevelSize:this.bevelSize,bevelOffset:this.bevelOffset,bevelSegments:this.bevelSegments}),this.align==="center"&&this.geometry.center()}}}),Sr=S("Torus",zt,Rt),Pr=S("TorusKnot",kt,It),xr=a({extends:H,props:Pe,created(){this.createGeometry(),this.addGeometryWatchers(Pe)},methods:{createGeometry(){this.geometry=Tt(this)},updatePoints(e){Bt(this.geometry,e)}},__hmrId:"Tube"}),wr=a({emits:["loaded"],extends:H,props:{src:{type:String,required:!0},width:Number,height:Number,widthSegments:{type:Number,default:1},heightSegments:{type:Number,default:1},keepSize:Boolean},setup(){return{}},created(){!this.renderer||(this.geometry=new Ne(1,1,this.widthSegments,this.heightSegments),this.material=new Ee({side:Zs,map:this.loadTexture()}),d(()=>this.src,this.refreshTexture),["width","height"].forEach(e=>{d(()=>this[e],this.resize)}),this.resize(),this.keepSize&&this.renderer.onResize(this.resize))},unmounted(){var e;(e=this.renderer)==null||e.offResize(this.resize)},methods:{loadTexture(){return new J().load(this.src,this.onLoaded)},refreshTexture(){var e;(e=this.texture)==null||e.dispose(),this.material&&(this.material.map=this.loadTexture(),this.material.needsUpdate=!0)},onLoaded(e){this.texture=e,this.resize(),this.$emit("loaded",e)},resize(){if(!this.renderer||!this.texture)return;const e=this.renderer.size,t=this.texture.image.width,r=this.texture.image.height,s=t/r;let i=1,n=1;this.width&&this.height?(i=this.width*e.wWidth/e.width,n=this.height*e.wHeight/e.height):this.width?(i=this.width*e.wWidth/e.width,n=i/s):this.height?(n=this.height*e.wHeight/e.height,i=n*s):s>1?i=n*s:n=i/s,this.mesh&&(this.mesh.scale.x=i,this.mesh.scale.y=n)}},__hmrId:"Image"}),Cr=a({extends:H,props:{count:{type:Number,required:!0}},methods:{initMesh(){if(this.renderer){if(!this.geometry||!this.material)return console.error("Missing geometry and/or material"),!1;this.mesh=new ye(this.geometry,this.material,this.count),this.mesh.userData.component=this,m(this,"castShadow",this.mesh),m(this,"receiveShadow",this.mesh),(this.onPointerEnter||this.onPointerOver||this.onPointerMove||this.onPointerLeave||this.onPointerDown||this.onPointerUp||this.onClick)&&this.renderer.three.addIntersectObject(this.mesh),this.initObject3D(this.mesh)}}},__hmrId:"InstancedMesh"}),Mr=a({extends:B,emits:["loaded"],props:{src:{type:String,required:!0}},setup(){return{}},created(){this.texture=new J().load(this.src,this.onLoaded),this.material=new Ys({map:this.texture}),this.sprite=new Js(this.material),this.initObject3D(this.sprite)},unmounted(){var e,t;(e=this.texture)==null||e.dispose(),(t=this.material)==null||t.dispose()},methods:{onLoaded(){this.updateUV(),this.$emit("loaded")},updateUV(){if(!this.texture||!this.sprite)return;const e=this.texture.image.width,t=this.texture.image.height,r=e/t;let s=.5,i=.5;r>1?s=.5*r:i=.5/r;const n=this.sprite.geometry.attributes.position.array;n[0]=-s,n[1]=-i,n[5]=s,n[6]=-i,n[10]=s,n[11]=i,n[15]=-s,n[16]=i,this.sprite.geometry.attributes.position.needsUpdate=!0}},__hmrId:"Sprite"}),Gr=a({extends:B,setup(){return{}},provide(){return{[W]:this}},mounted(){this.mesh=this.points=new Qs(this.geometry,this.material),this.initObject3D(this.mesh)},methods:{setGeometry(e){this.geometry=e,this.mesh&&(this.mesh.geometry=e)},setMaterial(e){this.material=e,this.mesh&&(this.mesh.material=e)}}}),Lr=a({extends:B,emits:["before-load","load","progress","error"],props:{src:{type:String,required:!0}},data(){return{progress:0}},methods:{onLoad(e){this.$emit("load",e)},onProgress(e){this.progress=e.loaded/e.total,this.$emit("progress",e)},onError(e){this.$emit("error",e)}}}),Or=a({extends:Lr,created(){const e=new ni;this.$emit("before-load",e),e.load(this.src,t=>{this.onLoad(t),this.initObject3D(t.scene)},this.onProgress,this.onError)}}),Nr=a({extends:Lr,created(){const e=new oi;this.$emit("before-load",e),e.load(this.src,t=>{this.onLoad(t),this.initObject3D(t)},this.onProgress,this.onError)}});const me=Symbol("Composer");var $r=a({setup(){return{renderer:K($)}},provide(){return{[me]:this}},created(){if(!this.renderer){console.error("Renderer not found");return}const e=this.renderer,t=new ai(this.renderer.renderer);this.composer=t,this.renderer.composer=t,e.addListener("init",()=>{e.renderer.autoClear=!1,this.resize(),e.addListener("resize",this.resize)})},unmounted(){var e;(e=this.renderer)==null||e.removeListener("resize",this.resize)},methods:{addPass(e){var t;(t=this.composer)==null||t.addPass(e)},removePass(e){var t;(t=this.composer)==null||t.removePass(e)},resize(){this.composer&&this.renderer&&this.composer.setSize(this.renderer.size.width,this.renderer.size.height)}},render(){return this.$slots.default?this.$slots.default():[]},__hmrId:"EffectComposer"}),M=a({inject:{renderer:$,composer:me},emits:["ready"],setup(){return{}},created(){this.composer||console.error("Missing parent EffectComposer"),this.renderer||console.error("Missing parent Renderer")},unmounted(){var e,t,r;this.pass&&((e=this.composer)==null||e.removePass(this.pass),(r=(t=this.pass).dispose)==null||r.call(t))},methods:{initEffectPass(e){var t;this.pass=e,(t=this.composer)==null||t.addPass(e),this.$emit("ready",e)}},render(){return[]},__hmrId:"EffectPass"}),Er=a({extends:M,created(){if(!this.renderer)return;if(!this.renderer.scene){console.error("Missing Scene");return}if(!this.renderer.camera){console.error("Missing Camera");return}const e=new hi(this.renderer.scene,this.renderer.camera);this.initEffectPass(e)},__hmrId:"RenderPass"});const zr={focus:{type:Number,default:1},aperture:{type:Number,default:.025},maxblur:{type:Number,default:.01}};var Rr=a({extends:M,props:zr,created(){if(!this.renderer)return;if(!this.renderer.scene){console.error("Missing Scene");return}if(!this.renderer.camera){console.error("Missing Camera");return}const e={focus:this.focus,aperture:this.aperture,maxblur:this.maxblur,width:this.renderer.size.width,height:this.renderer.size.height},t=new di(this.renderer.scene,this.renderer.camera,e);Object.keys(zr).forEach(r=>{d(()=>this[r],s=>{t.uniforms[r].value=s})}),this.initEffectPass(t)},__hmrId:"BokehPass"});const jr={noiseIntensity:{type:Number,default:.5},scanlinesIntensity:{type:Number,default:.05},scanlinesCount:{type:Number,default:4096},grayscale:{type:Number,default:0}};var kr=a({extends:M,props:jr,created(){const e=new ui(this.noiseIntensity,this.scanlinesIntensity,this.scanlinesCount,this.grayscale);Object.keys(jr).forEach(t=>{d(()=>this[t],r=>{e.uniforms[t].value=r})}),this.initEffectPass(e)},__hmrId:"FilmPass"}),Ir=a({extends:M,created(){var e;const t=new ne(ci);(e=this.renderer)==null||e.addListener("resize",this.resize),this.initEffectPass(t)},unmounted(){var e;(e=this.renderer)==null||e.removeListener("resize",this.resize)},methods:{resize({size:e}){if(this.pass){const{resolution:t}=this.pass.material.uniforms;t.value.x=1/e.width,t.value.y=1/e.height}}},__hmrId:"FXAAPass"});const _r={shape:{type:Number,default:1},radius:{type:Number,default:4},rotateR:{type:Number,default:Math.PI/12*1},rotateG:{type:Number,default:Math.PI/12*2},rotateB:{type:Number,default:Math.PI/12*3},scatter:{type:Number,default:0}};var Tr=a({extends:M,props:_r,created(){if(!this.renderer)return;const e=new li(this.renderer.size.width,this.renderer.size.height,{});Object.keys(_r).forEach(t=>{e.uniforms[t].value=this[t],d(()=>this[t],r=>{e.uniforms[t].value=r})}),this.initEffectPass(e)},__hmrId:"HalftonePass"}),Ar=a({extends:M,created(){if(!this.renderer)return;const e=new mi(this.renderer.size.width,this.renderer.size.height);this.initEffectPass(e)},__hmrId:"SMAAPass"}),Br=a({extends:M,props:{options:{type:Object,default:()=>({})}},created(){if(!this.renderer)return;if(!this.renderer.scene){console.error("Missing Scene");return}if(!this.renderer.camera){console.error("Missing Camera");return}const e=new pi(this.renderer.scene,this.renderer.camera,this.renderer.size.width,this.renderer.size.height);Object.keys(this.options).forEach(t=>{e[t]=this.options[t]}),this.initEffectPass(e)},__hmrId:"SSAOPass"}),Dr={uniforms:{},vertexShader:` + varying vec2 vUv; + void main() { + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); + } + `,fragmentShader:` + varying vec2 vUv; + void main() { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + `},Fr={uniforms:{tDiffuse:{value:null},blurRadius:{value:0},gradientRadius:{value:0},start:{value:new T},end:{value:new T},delta:{value:new T},texSize:{value:new T}},vertexShader:Dr.vertexShader,fragmentShader:` + uniform sampler2D tDiffuse; + uniform float blurRadius; + uniform float gradientRadius; + uniform vec2 start; + uniform vec2 end; + uniform vec2 delta; + uniform vec2 texSize; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x)); + float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius; + for (float t = -30.0; t <= 30.0; t++) { + float percent = (t + offset - 0.5) / 30.0; + float weight = 1.0 - abs(percent); + vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius); + // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + // texel2.rgb *= texel2.a; + + color += texel * weight; + total += 2.0 * weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `};const Ri={blurRadius:{type:Number,default:10},gradientRadius:{type:Number,default:100},start:{type:Object,default:()=>({x:0,y:100})},end:{type:Object,default:()=>({x:10,y:100})}};var Ur=a({extends:M,props:Ri,setup(){return{uniforms1:{},uniforms2:{}}},created(){if(!this.composer)return;this.pass1=new ne(Fr),this.pass2=new ne(Fr);const e=this.uniforms1=this.pass1.uniforms,t=this.uniforms2=this.pass2.uniforms;t.blurRadius=e.blurRadius,t.gradientRadius=e.gradientRadius,t.start=e.start,t.end=e.end,t.texSize=e.texSize,m(this,"blurRadius",e.blurRadius,"value"),m(this,"gradientRadius",e.gradientRadius,"value"),this.updateFocusLine(),["start","end"].forEach(r=>{d(()=>this[r],this.updateFocusLine,{deep:!0})}),this.pass1.setSize=(r,s)=>{e.texSize.value.set(r,s)},this.initEffectPass(this.pass1),this.composer.addPass(this.pass2)},unmounted(){this.composer&&this.pass2&&this.composer.removePass(this.pass2)},methods:{updateFocusLine(){this.uniforms1.start.value.copy(this.start),this.uniforms1.end.value.copy(this.end);const e=new T().copy(this.end).sub(this.start).normalize();this.uniforms1.delta.value.copy(e),this.uniforms2.delta.value.set(-e.y,e.x)}},__hmrId:"TiltShiftPass"});const Hr={strength:{type:Number,default:1.5},radius:{type:Number,default:0},threshold:{type:Number,default:0}};var Kr=a({extends:M,props:Hr,created(){if(!this.renderer)return;const e=new T(this.renderer.size.width,this.renderer.size.height),t=new fi(e,this.strength,this.radius,this.threshold);Object.keys(Hr).forEach(r=>{d(()=>this[r],s=>{t.uniforms[r].value=s})}),this.initEffectPass(t)},__hmrId:"UnrealBloomPass"}),ji={uniforms:{tDiffuse:{value:null},center:{value:new T(.5,.5)},strength:{value:0}},vertexShader:Dr.vertexShader,fragmentShader:` + uniform sampler2D tDiffuse; + uniform vec2 center; + uniform float strength; + varying vec2 vUv; + + float random(vec3 scale, float seed) { + /* use the fragment position for a different seed per-pixel */ + return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed); + } + + void main() { + vec4 color = vec4(0.0); + float total = 0.0; + vec2 toCenter = center - vUv; + + /* randomize the lookup values to hide the fixed number of samples */ + float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0); + + for (float t = 0.0; t <= 40.0; t++) { + float percent = (t + offset) / 40.0; + float weight = 4.0 * (percent - percent * percent); + vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength); + + /* switch to pre-multiplied alpha to correctly blur transparent images */ + texel.rgb *= texel.a; + + color += texel * weight; + total += weight; + } + + gl_FragColor = color / total; + + /* switch back from pre-multiplied alpha */ + gl_FragColor.rgb /= gl_FragColor.a + 0.00001; + } + `},Vr=a({extends:M,props:{center:{type:Object,default:()=>({x:.5,y:.5})},strength:{type:Number,default:.5}},created(){const e=new ne(ji);m(this,"center",e.uniforms.center,"value"),m(this,"strength",e.uniforms.strength,"value"),this.initEffectPass(e)},__hmrId:"ZoomBlurPass"}),ki=Object.freeze({__proto__:null,Renderer:Te,RendererInjectionKey:$,OrthographicCamera:Be,PerspectiveCamera:ae,Camera:ae,Group:Fe,Scene:De,SceneInjectionKey:he,Object3D:B,Raycaster:Ue,CubeCamera:He,BufferGeometry:de,BoxGeometry:Xe,CircleGeometry:Ze,ConeGeometry:Qe,CylinderGeometry:rt,DodecahedronGeometry:nt,ExtrudeGeometry:ot,IcosahedronGeometry:dt,LatheGeometry:lt,OctahedronGeometry:ft,PlaneGeometry:bt,PolyhedronGeometry:Pt,RingGeometry:Ct,SphereGeometry:Lt,ShapeGeometry:Ot,TetrahedronGeometry:Et,TorusGeometry:jt,TorusKnotGeometry:_t,TubeGeometry:At,AmbientLight:Dt,DirectionalLight:Ft,HemisphereLight:Ut,PointLight:Ht,RectAreaLight:Kt,SpotLight:Vt,Material:ce,BasicMaterial:Xt,LambertMaterial:qt,PhongMaterial:Wt,PhysicalMaterial:Zt,PointsMaterial:Yt,ShadowMaterial:Jt,StandardMaterial:Qt,ToonMaterial:er,MaterialInjectionKey:ue,MatcapMaterial:tr,ShaderMaterial:rr,SubSurfaceMaterial:sr,Texture:le,CubeTexture:ir,VideoTexture:nr,Mesh:H,MeshInjectionKey:W,Box:or,Circle:ar,Cone:hr,Cylinder:dr,Dodecahedron:ur,Icosahedron:cr,Lathe:lr,Octahedron:mr,Plane:pr,Polyhedron:fr,Ring:yr,Sphere:gr,Tetrahedron:br,Text:vr,Torus:Sr,TorusKnot:Pr,Tube:xr,Image:wr,InstancedMesh:Cr,Sprite:Mr,Points:Gr,GltfModel:Or,FbxModel:Nr,EffectComposer:$r,ComposerInjectionKey:me,RenderPass:Er,EffectPass:M,BokehPass:Rr,FilmPass:kr,FXAAPass:Ir,HalftonePass:Tr,SMAAPass:Ar,SSAOPass:Br,TiltShiftPass:Ur,UnrealBloomPass:Kr,ZoomBlurPass:Vr,applyObjectProps:X,bindObjectProp:A,bindObjectProps:Re,setFromProp:q,bindProps:je,bindProp:m,propsValues:Q,lerp:ke,limit:Ie,getMatcapUrl:Se});const Xr={install(e){["Camera","OrthographicCamera","PerspectiveCamera","Raycaster","Renderer","Scene","Group","CubeCamera","AmbientLight","DirectionalLight","HemisphereLight","PointLight","RectAreaLight","SpotLight","BasicMaterial","LambertMaterial","MatcapMaterial","PhongMaterial","PhysicalMaterial","PointsMaterial","ShaderMaterial","StandardMaterial","SubSurfaceMaterial","ToonMaterial","Texture","CubeTexture","BufferGeometry","Mesh","Box","BoxGeometry","Circle","CircleGeometry","Cone","ConeGeometry","Cylinder","CylinderGeometry","Dodecahedron","DodecahedronGeometry","Icosahedron","IcosahedronGeometry","Lathe","LatheGeometry","Octahedron","OctahedronGeometry","Plane","PlaneGeometry","Polyhedron","PolyhedronGeometry","Ring","RingGeometry","Sphere","SphereGeometry","Tetrahedron","TetrahedronGeometry","Text","Torus","TorusGeometry","TorusKnot","TorusKnotGeometry","Tube","TubeGeometry","Image","InstancedMesh","Points","Sprite","FbxModel","GltfModel","BokehPass","EffectComposer","FilmPass","FXAAPass","HalftonePass","RenderPass","SAOPass","SMAAPass","SSAOPass","TiltShiftPass","UnrealBloomPass","ZoomBlurPass"].forEach(t=>{e.component(t,ki[t])})}};function Ii(e){return ts(e).use(Xr)}function _i(){const e={loader:new J,count:0,textures:[],loadProgress:0,loadTextures:t,dispose:s};return e;function t(i,n){e.count=i.length,e.textures.splice(0),e.loadProgress=0,Promise.all(i.map(r)).then(n)}function r(i,n){return new Promise(o=>{e.loader.load(i.src,c=>{e.loadProgress+=1/e.count,e.textures[n]=c,o(c)})})}function s(){e.textures.forEach(i=>i.dispose())}}export{Dt as AmbientLight,Xt as BasicMaterial,Rr as BokehPass,or as Box,Xe as BoxGeometry,de as BufferGeometry,ae as Camera,ar as Circle,Ze as CircleGeometry,me as ComposerInjectionKey,hr as Cone,Qe as ConeGeometry,He as CubeCamera,ir as CubeTexture,dr as Cylinder,rt as CylinderGeometry,Ft as DirectionalLight,ur as Dodecahedron,nt as DodecahedronGeometry,$r as EffectComposer,M as EffectPass,ot as ExtrudeGeometry,Ir as FXAAPass,Nr as FbxModel,kr as FilmPass,Or as GltfModel,Fe as Group,Tr as HalftonePass,Ut as HemisphereLight,cr as Icosahedron,dt as IcosahedronGeometry,wr as Image,Cr as InstancedMesh,qt as LambertMaterial,lr as Lathe,lt as LatheGeometry,tr as MatcapMaterial,ce as Material,ue as MaterialInjectionKey,H as Mesh,W as MeshInjectionKey,B as Object3D,mr as Octahedron,ft as OctahedronGeometry,Be as OrthographicCamera,ae as PerspectiveCamera,Wt as PhongMaterial,Zt as PhysicalMaterial,pr as Plane,bt as PlaneGeometry,Ht as PointLight,Gr as Points,Yt as PointsMaterial,fr as Polyhedron,Pt as PolyhedronGeometry,Ue as Raycaster,Kt as RectAreaLight,Er as RenderPass,Te as Renderer,$ as RendererInjectionKey,yr as Ring,Ct as RingGeometry,Ar as SMAAPass,Br as SSAOPass,De as Scene,he as SceneInjectionKey,rr as ShaderMaterial,Jt as ShadowMaterial,Ot as ShapeGeometry,gr as Sphere,Lt as SphereGeometry,Vt as SpotLight,Mr as Sprite,Qt as StandardMaterial,sr as SubSurfaceMaterial,br as Tetrahedron,Et as TetrahedronGeometry,vr as Text,le as Texture,Ur as TiltShiftPass,er as ToonMaterial,Sr as Torus,jt as TorusGeometry,Pr as TorusKnot,_t as TorusKnotGeometry,Xr as TroisJSVuePlugin,xr as Tube,At as TubeGeometry,Kr as UnrealBloomPass,nr as VideoTexture,Vr as ZoomBlurPass,X as applyObjectProps,A as bindObjectProp,Re as bindObjectProps,m as bindProp,je as bindProps,Ii as createApp,Se as getMatcapUrl,ke as lerp,Ie as limit,Q as propsValues,q as setFromProp,_i as useTextures}; +//# sourceMappingURL=trois.module.min.js.map diff --git a/build/trois.module.min.js.map b/build/trois.module.min.js.map new file mode 100644 index 0000000..8b7107a --- /dev/null +++ b/build/trois.module.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"trois.module.min.js","sources":["../src/tools.ts","../src/core/useRaycaster.ts","../src/core/usePointer.ts","../src/core/useThree.ts","../src/core/Renderer.ts","../src/core/Camera.ts","../src/core/OrthographicCamera.ts","../src/core/PerspectiveCamera.ts","../src/core/Scene.ts","../src/core/Object3D.ts","../src/core/Group.ts","../src/core/Raycaster.ts","../src/core/CubeCamera.ts","../src/meshes/Mesh.ts","../src/geometries/Geometry.ts","../src/geometries/BoxGeometry.ts","../src/geometries/CircleGeometry.ts","../src/geometries/ConeGeometry.ts","../src/geometries/CylinderGeometry.ts","../src/geometries/DodecahedronGeometry.ts","../src/geometries/ExtrudeGeometry.ts","../src/geometries/IcosahedronGeometry.ts","../src/geometries/LatheGeometry.ts","../src/geometries/OctahedronGeometry.ts","../src/geometries/PlaneGeometry.ts","../src/geometries/PolyhedronGeometry.ts","../src/geometries/RingGeometry.ts","../src/geometries/SphereGeometry.ts","../src/geometries/ShapeGeometry.ts","../src/geometries/TetrahedronGeometry.ts","../src/geometries/TorusGeometry.ts","../src/geometries/TorusKnotGeometry.ts","../src/geometries/TubeGeometry.ts","../src/lights/Light.ts","../src/lights/AmbientLight.ts","../src/lights/DirectionalLight.ts","../src/lights/HemisphereLight.ts","../src/lights/PointLight.ts","../src/lights/RectAreaLight.ts","../src/lights/SpotLight.ts","../src/materials/Material.ts","../src/materials/MatcapMaterial.ts","../src/materials/ShaderMaterial.ts","../src/materials/SubsurfaceScatteringShader.ts","../src/materials/SubSurfaceMaterial.ts","../src/materials/Texture.ts","../src/materials/CubeTexture.ts","../src/materials/VideoTexture.ts","../src/meshes/Box.ts","../src/meshes/Circle.ts","../src/meshes/Cone.ts","../src/meshes/Cylinder.ts","../src/meshes/Dodecahedron.ts","../src/meshes/Icosahedron.ts","../src/meshes/Lathe.ts","../src/meshes/Octahedron.ts","../src/meshes/Plane.ts","../src/meshes/Polyhedron.ts","../src/meshes/Ring.ts","../src/meshes/Sphere.ts","../src/meshes/Tetrahedron.ts","../src/meshes/Text.ts","../src/meshes/Torus.ts","../src/meshes/TorusKnot.ts","../src/meshes/Tube.ts","../src/meshes/Image.ts","../src/meshes/InstancedMesh.ts","../src/meshes/Sprite.ts","../src/meshes/Points.ts","../src/models/Model.ts","../src/models/GLTF.ts","../src/models/FBX.ts","../src/effects/EffectComposer.ts","../src/effects/EffectPass.ts","../src/effects/RenderPass.ts","../src/effects/BokehPass.ts","../src/effects/FilmPass.ts","../src/effects/FXAAPass.ts","../src/effects/HalftonePass.ts","../src/effects/SMAAPass.ts","../src/effects/SSAOPass.ts","../src/shaders/default.ts","../src/shaders/TiltShift.ts","../src/effects/TiltShiftPass.ts","../src/effects/UnrealBloomPass.ts","../src/shaders/ZoomBlur.ts","../src/effects/ZoomBlurPass.ts","../src/plugin.ts","../src/use/useTextures.ts"],"sourcesContent":["import { ref, toRef, watch, WatchStopHandle } from 'vue'\n\ntype OptionSetter = (dst: any, key: string, value: any) => void\n\nexport function applyObjectProps(\n dst: any,\n options: Record,\n setter?: OptionSetter\n): void {\n if (options instanceof Object) {\n Object.entries(options).forEach(([key, value]) => {\n if (setter) setter(dst, key, value)\n else dst[key] = value\n })\n }\n}\n\nexport function bindObjectProp(\n src: any,\n prop: string,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src[prop], setter)\n const r = toRef(src, prop)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) })\n}\n\nexport function bindObjectProps(\n src: any,\n dst: any,\n apply = true,\n setter?: OptionSetter\n): WatchStopHandle {\n if (apply) applyObjectProps(dst, src, setter)\n const r = ref(src)\n return watch(r, (value) => { applyObjectProps(dst, value, setter) }, { deep: true })\n}\n\nexport function setFromProp(o: Record, prop: Record): void {\n if (prop instanceof Object) {\n Object.entries(prop).forEach(([key, value]) => {\n o[key] = value\n })\n }\n}\n\nexport function bindProps(src: any, props: string[], dst: any): void {\n props.forEach(prop => {\n bindProp(src, prop, dst, prop)\n })\n}\n\nexport function bindProp(src: any, srcProp: string, dst: any, dstProp?: string): void {\n const _dstProp = dstProp || srcProp\n const ref = toRef(src, srcProp)\n if (ref.value instanceof Object) {\n setFromProp(dst[_dstProp], ref.value)\n watch(ref, (value) => { setFromProp(dst[_dstProp], value) }, { deep: true })\n } else {\n if (ref.value !== undefined) dst[_dstProp] = src[srcProp]\n watch(ref, (value) => { dst[_dstProp] = value })\n }\n}\n\nexport function propsValues(props: Record, exclude: string[] = []): Record {\n const values: Record = {}\n Object.entries(props).forEach(([key, value]) => {\n if (!exclude || !exclude.includes(key)) {\n values[key] = value\n }\n })\n return values\n}\n\nexport function lerp(value1: number, value2: number, amount: number): number {\n amount = amount < 0 ? 0 : amount\n amount = amount > 1 ? 1 : amount\n return value1 + (value2 - value1) * amount\n}\n\nexport function limit(val: number, min: number, max: number): number {\n return val < min ? min : (val > max ? max : val)\n}\n\n// from https://github.com/pmndrs/drei/blob/master/src/useMatcapTexture.tsx\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d'\nconst DEFAULT_MATCAP = '0404E8_0404B5_0404CB_3333FC'\n\nexport function getMatcapUrl(hash = DEFAULT_MATCAP, format = 1024): string {\n const fileName = `${hash}${getMatcapFormatString(format)}.png`\n return `${MATCAP_ROOT}/${format}/${fileName}`\n}\n\nfunction getMatcapFormatString(format: number) {\n switch (format) {\n case 64:\n return '-64px'\n case 128:\n return '-128px'\n case 256:\n return '-256px'\n case 512:\n return '-512px'\n default:\n return ''\n }\n}\n","import { Camera, Intersection, Object3D, Plane, Raycaster, Vector2, Vector3 } from 'three'\n\nexport interface RaycasterInterface {\n position: Vector3\n updatePosition(coords: Vector2): void\n intersect(coords: Vector2, objects: Object3D[], recursive?: boolean): Intersection[],\n}\n\nexport interface RaycasterConfigInterface {\n camera: Camera\n resetPosition?: Vector3\n}\n\nexport default function useRaycaster(options: RaycasterConfigInterface): RaycasterInterface {\n const {\n camera,\n resetPosition = new Vector3(0, 0, 0),\n } = options\n\n const raycaster = new Raycaster()\n const position = resetPosition.clone()\n const plane = new Plane(new Vector3(0, 0, 1), 0)\n\n const updatePosition = (coords: Vector2) => {\n raycaster.setFromCamera(coords, camera)\n camera.getWorldDirection(plane.normal)\n raycaster.ray.intersectPlane(plane, position)\n }\n\n const intersect = (coords: Vector2, objects: Object3D[], recursive = false) => {\n raycaster.setFromCamera(coords, camera)\n return raycaster.intersectObjects(objects, recursive)\n }\n\n return {\n position,\n updatePosition,\n intersect,\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\nimport { Camera, InstancedMesh, Intersection, Object3D, Vector2, Vector3 } from 'three'\nimport useRaycaster from './useRaycaster'\n\nexport interface PointerEventInterface {\n type: 'pointerenter' | 'pointermove' | 'pointerleave' | 'click'\n position?: Vector2\n positionN?: Vector2\n positionV3?: Vector3\n}\n\nexport interface PointerIntersectEventInterface {\n type: 'pointerenter' | 'pointerover' | 'pointermove' | 'pointerleave' | 'click'\n component: any\n over?: boolean\n intersect?: Intersection\n}\n\nexport type PointerCallbackType = (e: PointerEventInterface) => void\nexport type PointerIntersectCallbackType = (e: PointerIntersectEventInterface) => void\n\nexport interface PointerPublicConfigInterface {\n intersectMode?: 'frame'\n intersectRecursive?: boolean\n touch?: boolean\n resetOnEnd?: boolean\n onEnter?: PointerCallbackType\n onMove?: PointerCallbackType\n onLeave?: PointerCallbackType\n onClick?: PointerCallbackType\n onIntersectEnter?: PointerIntersectCallbackType\n onIntersectOver?: PointerIntersectCallbackType\n onIntersectMove?: PointerIntersectCallbackType\n onIntersectLeave?: PointerIntersectCallbackType\n onIntersectClick?: PointerIntersectCallbackType\n}\n\nexport interface PointerConfigInterface extends PointerPublicConfigInterface {\n camera: Camera\n domElement: HTMLCanvasElement\n intersectObjects: Object3D[] | (() => Object3D[])\n}\n\nexport interface PointerInterface {\n position: Vector2\n positionN: Vector2\n positionV3: Vector3\n intersectObjects: Object3D[] | (() => Object3D[])\n listeners: boolean\n addListeners(cb: void): void\n removeListeners(cb: void): void\n intersect(): void\n}\n\nexport default function usePointer(options: PointerConfigInterface): PointerInterface {\n const {\n camera,\n domElement,\n intersectObjects,\n intersectRecursive = false,\n touch = true,\n resetOnEnd = false,\n onEnter = () => {},\n onMove = () => {},\n onLeave = () => {},\n onClick = () => {},\n onIntersectEnter = () => {},\n onIntersectOver = () => {},\n onIntersectMove = () => {},\n onIntersectLeave = () => {},\n onIntersectClick = () => {},\n } = options\n\n const position = new Vector2(0, 0)\n const positionN = new Vector2(0, 0)\n\n const raycaster = useRaycaster({ camera })\n const positionV3 = raycaster.position\n\n const obj: PointerInterface = {\n position,\n positionN,\n positionV3,\n intersectObjects,\n listeners: false,\n addListeners,\n removeListeners,\n intersect,\n }\n\n return obj\n\n function reset() {\n position.set(0, 0)\n positionN.set(0, 0)\n positionV3.set(0, 0, 0)\n }\n\n function updatePosition(event: TouchEvent | MouseEvent) {\n let x, y\n // @ts-ignore\n if (event.touches && event.touches.length > 0) {\n x = (event).touches[0].clientX\n y = (event).touches[0].clientY\n } else {\n x = (event).clientX\n y = (event).clientY\n }\n\n const rect = domElement.getBoundingClientRect()\n position.x = x - rect.left\n position.y = y - rect.top\n positionN.x = (position.x / rect.width) * 2 - 1\n positionN.y = -(position.y / rect.height) * 2 + 1\n raycaster.updatePosition(positionN)\n }\n\n function intersect() {\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const offObjects: Object3D[] = [..._intersectObjects]\n const iMeshes: InstancedMesh[] = []\n\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n if (!object.userData.over) {\n object.userData.over = true\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: true, component, intersect }\n const enterEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerenter' }\n onIntersectOver(overEvent)\n onIntersectEnter(enterEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerEnter?.(enterEvent)\n }\n\n const moveEvent: PointerIntersectEventInterface = { type: 'pointermove', component, intersect }\n onIntersectMove(moveEvent)\n component?.onPointerMove?.(moveEvent)\n\n offObjects.splice(offObjects.indexOf((object)), 1)\n })\n\n offObjects.forEach(object => {\n const component = getComponent(object)\n if (object.userData.over) {\n object.userData.over = false\n const overEvent: PointerIntersectEventInterface = { type: 'pointerover', over: false, component }\n const leaveEvent: PointerIntersectEventInterface = { ...overEvent, type: 'pointerleave' }\n onIntersectOver(overEvent)\n onIntersectLeave(leaveEvent)\n component?.onPointerOver?.(overEvent)\n component?.onPointerLeave?.(leaveEvent)\n }\n })\n }\n }\n\n function pointerEnter(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onEnter({ type: 'pointerenter', position, positionN, positionV3 })\n }\n\n function pointerMove(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n onMove({ type: 'pointermove', position, positionN, positionV3 })\n intersect()\n }\n\n function pointerClick(event: TouchEvent | MouseEvent) {\n updatePosition(event)\n const _intersectObjects = getIntersectObjects()\n if (_intersectObjects.length) {\n const intersects = raycaster.intersect(positionN, _intersectObjects, intersectRecursive)\n const iMeshes: InstancedMesh[] = []\n intersects.forEach(intersect => {\n const { object } = intersect\n const component = getComponent(object)\n\n // only once for InstancedMesh\n if (object instanceof InstancedMesh) {\n if (iMeshes.indexOf(object) !== -1) return\n iMeshes.push(object)\n }\n\n const event: PointerIntersectEventInterface = { type: 'click', component, intersect }\n onIntersectClick(event)\n component?.onClick?.(event)\n })\n }\n onClick({ type: 'click', position, positionN, positionV3 })\n }\n\n function pointerLeave() {\n if (resetOnEnd) reset()\n onLeave({ type: 'pointerleave' })\n }\n\n function getComponent(object: Object3D) {\n if (object.userData.component) return object.userData.component\n\n let parent = object.parent\n while (parent) {\n if (parent.userData.component) {\n return parent.userData.component\n }\n parent = parent.parent\n }\n\n return undefined\n }\n\n function getIntersectObjects() {\n if (typeof intersectObjects === 'function') {\n return intersectObjects()\n } else return intersectObjects\n }\n\n function addListeners() {\n domElement.addEventListener('mouseenter', pointerEnter)\n domElement.addEventListener('mousemove', pointerMove)\n domElement.addEventListener('mouseleave', pointerLeave)\n domElement.addEventListener('click', pointerClick)\n if (touch) {\n domElement.addEventListener('touchstart', pointerEnter)\n domElement.addEventListener('touchmove', pointerMove)\n domElement.addEventListener('touchend', pointerLeave)\n }\n obj.listeners = true\n }\n\n function removeListeners() {\n domElement.removeEventListener('mouseenter', pointerEnter)\n domElement.removeEventListener('mousemove', pointerMove)\n domElement.removeEventListener('mouseleave', pointerLeave)\n domElement.removeEventListener('click', pointerClick)\n\n domElement.removeEventListener('touchstart', pointerEnter)\n domElement.removeEventListener('touchmove', pointerMove)\n domElement.removeEventListener('touchend', pointerLeave)\n obj.listeners = false\n }\n}\n","import { Camera, Object3D, OrthographicCamera, PerspectiveCamera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport usePointer, { PointerConfigInterface, PointerPublicConfigInterface, PointerInterface } from './usePointer'\n\nexport interface SizeInterface {\n width: number\n height: number\n wWidth: number\n wHeight: number\n ratio: number\n}\n\nexport interface ThreeConfigInterface {\n params?: WebGLRendererParameters\n canvas?: HTMLCanvasElement\n antialias: boolean\n alpha: boolean\n autoClear: boolean\n orbitCtrl: boolean | Record\n pointer: boolean | PointerPublicConfigInterface\n resize: boolean | string\n width?: number\n height?: number\n onResize?(size: SizeInterface): void\n [index:string]: any\n}\n\nexport interface ThreeInterface {\n config: ThreeConfigInterface\n renderer: WebGLRenderer\n composer?: EffectComposer\n camera?: Camera\n cameraCtrl?: OrbitControls\n scene?: Scene\n pointer?: PointerInterface\n size: SizeInterface\n init(): boolean\n dispose(): void\n render(): void\n renderC(): void\n setSize(width: number, height: number): void\n addIntersectObject(o: Object3D): void\n removeIntersectObject(o: Object3D): void\n}\n\n/**\n * Three.js helper\n */\nexport default function useThree(params: ThreeConfigInterface): ThreeInterface {\n // default config\n const config: ThreeConfigInterface = {\n antialias: true,\n alpha: false,\n autoClear: true,\n orbitCtrl: false,\n pointer: false,\n resize: false,\n width: 300,\n height: 150,\n }\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n config[key] = value\n })\n }\n\n // size\n const size: SizeInterface = {\n width: 1, height: 1,\n wWidth: 1, wHeight: 1,\n ratio: 1,\n }\n\n const beforeRenderCallbacks: {(): void}[] = []\n\n const intersectObjects: Object3D[] = []\n\n const renderer = createRenderer()\n\n // returned object\n const obj: ThreeInterface = {\n config,\n renderer,\n size,\n init,\n dispose,\n render,\n renderC,\n setSize,\n addIntersectObject, removeIntersectObject,\n }\n\n return obj\n\n /**\n * create WebGLRenderer\n */\n function createRenderer(): WebGLRenderer {\n const renderer = new WebGLRenderer({ canvas: config.canvas, antialias: config.antialias, alpha: config.alpha, ...config.params })\n renderer.autoClear = config.autoClear\n return renderer\n }\n\n /**\n * init three\n */\n function init() {\n if (!obj.scene) {\n console.error('Missing Scene')\n return false\n }\n\n if (!obj.camera) {\n console.error('Missing Camera')\n return false\n }\n\n if (config.resize) {\n onResize()\n window.addEventListener('resize', onResize)\n } else if (config.width && config.height) {\n setSize(config.width, config.height)\n }\n\n initPointer()\n\n if (config.orbitCtrl) {\n const cameraCtrl = new OrbitControls(obj.camera, obj.renderer.domElement)\n if (config.orbitCtrl instanceof Object) {\n Object.entries(config.orbitCtrl).forEach(([key, value]) => {\n // @ts-ignore\n cameraCtrl[key] = value\n })\n }\n onBeforeRender(() => { cameraCtrl.update() })\n obj.cameraCtrl = cameraCtrl\n }\n\n return true\n }\n\n /**\n * init pointer\n */\n function initPointer() {\n let pointerConf: PointerConfigInterface = {\n camera: obj.camera!,\n domElement: obj.renderer!.domElement,\n intersectObjects,\n }\n\n if (config.pointer && config.pointer instanceof Object) {\n pointerConf = { ...pointerConf, ...config.pointer }\n }\n\n const pointer = obj.pointer = usePointer(pointerConf)\n if (config.pointer || intersectObjects.length) {\n pointer.addListeners()\n if (pointerConf.intersectMode === 'frame') {\n onBeforeRender(pointer.intersect)\n }\n }\n }\n\n /**\n * add before render callback\n */\n function onBeforeRender(cb: {(): void}) {\n beforeRenderCallbacks.push(cb)\n }\n\n /**\n * default render\n */\n function render() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.renderer!.render(obj.scene!, obj.camera!)\n }\n\n /**\n * composer render\n */\n function renderC() {\n // if (obj.cameraCtrl) obj.cameraCtrl.update()\n beforeRenderCallbacks.forEach(c => c())\n obj.composer!.render()\n }\n\n /**\n * add intersect object\n */\n function addIntersectObject(o: Object3D) {\n if (intersectObjects.indexOf(o) === -1) {\n intersectObjects.push(o)\n }\n // add listeners if needed\n if (obj.pointer && !obj.pointer.listeners) {\n obj.pointer.addListeners()\n }\n }\n\n /**\n * remove intersect object\n */\n function removeIntersectObject(o: Object3D) {\n const i = intersectObjects.indexOf(o)\n if (i !== -1) {\n intersectObjects.splice(i, 1)\n }\n // remove listeners if needed\n if (obj.pointer && !config.pointer && intersectObjects.length === 0) {\n obj.pointer.removeListeners()\n }\n }\n\n /**\n * remove listeners and dispose\n */\n function dispose() {\n // beforeRenderCallbacks = []\n window.removeEventListener('resize', onResize)\n if (obj.pointer) obj.pointer.removeListeners()\n if (obj.cameraCtrl) obj.cameraCtrl.dispose()\n if (obj.renderer) obj.renderer.dispose()\n }\n\n /**\n * resize listener\n */\n function onResize() {\n if (config.resize === 'window') {\n setSize(window.innerWidth, window.innerHeight)\n } else {\n const elt = obj.renderer!.domElement.parentNode as Element\n if (elt) setSize(elt.clientWidth, elt.clientHeight)\n }\n config.onResize?.(size)\n }\n\n /**\n * update renderer size and camera\n */\n function setSize(width: number, height: number) {\n size.width = width\n size.height = height\n size.ratio = width / height\n\n obj.renderer!.setSize(width, height, false)\n\n // already done in EffectComposer\n // if (obj.composer) {\n // obj.composer.setSize(width, height)\n // }\n\n const camera = (obj.camera!)\n if (camera.type === 'PerspectiveCamera') {\n const pCamera = (camera)\n pCamera.aspect = size.ratio\n pCamera.updateProjectionMatrix()\n }\n\n if (camera.type === 'OrthographicCamera') {\n const oCamera = (camera)\n size.wWidth = oCamera.right - oCamera.left\n size.wHeight = oCamera.top - oCamera.bottom\n } else {\n const wsize = getCameraSize()\n size.wWidth = wsize[0]\n size.wHeight = wsize[1]\n }\n }\n\n /**\n * calculate camera visible area size\n */\n function getCameraSize() {\n const camera = (obj.camera!)\n const vFOV = (camera.fov * Math.PI) / 180\n const h = 2 * Math.tan(vFOV / 2) * Math.abs(camera.position.z)\n const w = h * camera.aspect\n return [w, h]\n }\n}\n","/* eslint-disable no-use-before-define */\nimport { Camera, Scene, WebGLRenderer, WebGLRendererParameters } from 'three'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer'\nimport { ComponentPublicInstance, defineComponent, InjectionKey, PropType, watchEffect } from 'vue'\nimport { bindObjectProp } from '../tools'\nimport { PointerInterface, PointerPublicConfigInterface } from './usePointer'\nimport useThree, { SizeInterface, ThreeConfigInterface, ThreeInterface } from './useThree'\n\ntype CallbackType = (event: T) => void\n\n// type EventType = 'init' | 'mounted' | 'beforerender' | 'afterrender' | 'resize'\n\nexport interface EventInterface {\n type: 'init' | 'mounted'\n renderer: RendererInterface\n}\n\nexport interface RenderEventInterface {\n type: 'beforerender' | 'afterrender'\n renderer: RendererInterface\n time: number\n}\n\nexport interface ResizeEventInterface {\n type: 'resize'\n renderer: RendererInterface\n size: SizeInterface\n}\n\ntype InitCallbackType = CallbackType\ntype MountedCallbackType = CallbackType\ntype RenderCallbackType = CallbackType\ntype ResizeCallbackType = CallbackType\n// type CallbackTypes = InitCallbackType | MountedCallbackType | RenderCallbackType | ResizeCallbackType\n\n// interface EventMap {\n// 'init': EventInterface;\n// 'mounted': EventInterface;\n// 'beforerender': RenderEventInterface;\n// 'afterrender': RenderEventInterface;\n// 'resize': ResizeEventInterface;\n// }\n\ninterface EventCallbackMap {\n 'init': InitCallbackType;\n 'mounted': MountedCallbackType;\n 'beforerender': RenderCallbackType;\n 'afterrender': RenderCallbackType;\n 'resize': ResizeCallbackType;\n}\n\ninterface RenderFunctionEventInterface {\n renderer: RendererInterface\n time: number\n}\n\ninterface RendererSetupInterface {\n canvas: HTMLCanvasElement\n three: ThreeInterface\n renderer: WebGLRenderer\n size: SizeInterface\n renderFn(e: RenderFunctionEventInterface): void\n raf: boolean\n\n $pointer?: PointerInterface\n\n initCallbacks: InitCallbackType[]\n mountedCallbacks: MountedCallbackType[]\n beforeRenderCallbacks: RenderCallbackType[]\n afterRenderCallbacks: RenderCallbackType[]\n resizeCallbacks: ResizeCallbackType[]\n}\n\nexport interface RendererInterface extends RendererSetupInterface {\n scene?: Scene\n camera?: Camera\n composer?: EffectComposer\n\n onInit(cb: InitCallbackType): void\n onMounted(cb: MountedCallbackType): void\n\n onBeforeRender(cb: RenderCallbackType): void\n offBeforeRender(cb: RenderCallbackType): void\n onAfterRender(cb: RenderCallbackType): void\n offAfterRender(cb: RenderCallbackType): void\n\n onResize(cb: ResizeCallbackType): void\n offResize(cb: ResizeCallbackType): void\n\n addListener(t: T, cb: EventCallbackMap[T]): void\n removeListener(t: T, cb: EventCallbackMap[T]): void\n}\n\nexport interface RendererPublicInterface extends ComponentPublicInstance, RendererInterface {}\n\nexport const RendererInjectionKey: InjectionKey = Symbol('Renderer')\n\nexport default defineComponent({\n name: 'Renderer',\n props: {\n params: { type: Object as PropType, default: () => ({}) },\n antialias: Boolean,\n alpha: Boolean,\n autoClear: { type: Boolean, default: true },\n orbitCtrl: { type: [Boolean, Object] as PropType>, default: false },\n pointer: { type: [Boolean, Object] as PropType, default: false },\n resize: { type: [Boolean, String] as PropType, default: false },\n shadow: Boolean,\n width: String,\n height: String,\n pixelRatio: Number,\n xr: Boolean,\n props: { type: Object, default: () => ({}) },\n onReady: Function as PropType<(r: RendererInterface) => void>,\n },\n inheritAttrs: false,\n setup(props, { attrs }): RendererSetupInterface {\n const initCallbacks: InitCallbackType[] = []\n const mountedCallbacks: MountedCallbackType[] = []\n const beforeRenderCallbacks: RenderCallbackType[] = []\n const afterRenderCallbacks: RenderCallbackType[] = []\n const resizeCallbacks: ResizeCallbackType[] = []\n\n const canvas = document.createElement('canvas')\n Object.entries(attrs).forEach(([key, value]) => {\n const matches = key.match(/^on([A-Z][a-zA-Z]*)$/)\n if (matches) {\n canvas.addEventListener(matches[1].toLowerCase(), value as {(): void })\n } else {\n canvas.setAttribute(key, value as string)\n }\n })\n\n const config: ThreeConfigInterface = {\n canvas,\n params: props.params,\n antialias: props.antialias,\n alpha: props.alpha,\n autoClear: props.autoClear,\n orbitCtrl: props.orbitCtrl,\n pointer: props.pointer,\n resize: props.resize,\n }\n\n if (props.width) config.width = parseInt(props.width)\n if (props.height) config.height = parseInt(props.height)\n\n const three = useThree(config)\n bindObjectProp(props, 'props', three.renderer)\n\n watchEffect(() => {\n if (props.pixelRatio) three.renderer.setPixelRatio(props.pixelRatio)\n })\n\n const renderFn: {(): void} = () => {}\n\n return {\n canvas,\n three,\n renderer: three.renderer,\n size: three.size,\n renderFn,\n raf: true,\n initCallbacks,\n mountedCallbacks,\n beforeRenderCallbacks,\n afterRenderCallbacks,\n resizeCallbacks,\n }\n },\n computed: {\n camera: {\n get: function(): Camera | undefined { return this.three.camera },\n set: function(camera: Camera): void { this.three.camera = camera },\n },\n scene: {\n get: function(): Scene | undefined { return this.three.scene },\n set: function(scene: Scene): void { this.three.scene = scene },\n },\n composer: {\n get: function(): EffectComposer | undefined { return this.three.composer },\n set: function(composer: EffectComposer): void { this.three.composer = composer },\n },\n },\n provide() {\n return {\n [RendererInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // appendChild won't work on reload\n this.$el.parentNode.insertBefore(this.canvas, this.$el)\n\n if (this.three.init()) {\n if (this.three.pointer) {\n this.$pointer = this.three.pointer\n }\n\n // TODO : don't use config\n this.three.config.onResize = (size) => {\n this.resizeCallbacks.forEach(e => e({ type: 'resize', renderer: this, size }))\n }\n\n if (this.shadow) {\n this.renderer.shadowMap.enabled = true\n }\n\n this.renderFn = this.three.composer ? this.three.renderC : this.three.render\n\n this.initCallbacks.forEach(e => e({ type: 'init', renderer: this }))\n this.onReady?.(this as RendererInterface)\n\n if (this.xr) {\n this.renderer.xr.enabled = true\n this.renderer.setAnimationLoop(this.render)\n } else {\n requestAnimationFrame(this.renderLoop)\n }\n }\n\n this.mountedCallbacks.forEach(e => e({ type: 'mounted', renderer: this }))\n },\n beforeUnmount() {\n this.canvas.remove()\n this.beforeRenderCallbacks = []\n this.afterRenderCallbacks = []\n this.raf = false\n this.three.dispose()\n },\n methods: {\n onInit(cb: InitCallbackType) { this.addListener('init', cb) },\n onMounted(cb: MountedCallbackType) { this.addListener('mounted', cb) },\n onBeforeRender(cb: RenderCallbackType) { this.addListener('beforerender', cb) },\n offBeforeRender(cb: RenderCallbackType) { this.removeListener('beforerender', cb) },\n onAfterRender(cb: RenderCallbackType) { this.addListener('afterrender', cb) },\n offAfterRender(cb: RenderCallbackType) { this.removeListener('afterrender', cb) },\n onResize(cb: ResizeCallbackType) { this.addListener('resize', cb) },\n offResize(cb: ResizeCallbackType) { this.removeListener('resize', cb) },\n\n addListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n callbacks.push(cb)\n },\n\n removeListener(type: string, cb: {(e?: any): void}) {\n const callbacks = this.getCallbacks(type)\n const index = callbacks.indexOf(cb)\n if (index !== -1) callbacks.splice(index, 1)\n },\n\n getCallbacks(type: string) {\n if (type === 'init') {\n return this.initCallbacks\n } else if (type === 'mounted') {\n return this.mountedCallbacks\n } else if (type === 'beforerender') {\n return this.beforeRenderCallbacks\n } else if (type === 'afterrender') {\n return this.afterRenderCallbacks\n } else {\n return this.resizeCallbacks\n }\n },\n\n render(time: number) {\n this.beforeRenderCallbacks.forEach(e => e({ type: 'beforerender', renderer: this, time }))\n // this.onFrame?.(cbParams)\n this.renderFn({ renderer: this, time })\n this.afterRenderCallbacks.forEach(e => e({ type: 'afterrender', renderer: this, time }))\n },\n renderLoop(time: number) {\n if (this.raf) requestAnimationFrame(this.renderLoop)\n this.render(time)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Renderer',\n})\n","import { defineComponent } from 'vue'\n// import { Camera } from 'three'\n// import { RendererInjectionKey, RendererInterface } from './Renderer'\n// import Object3D from './Object3D'\n\n// export interface CameraSetupInterface {\n// renderer?: RendererInterface\n// camera: Camera\n// }\n\nexport default defineComponent({\n // TODO: eventually extend Object3D\n // extends: Object3D,\n\n props: {\n props: { type: Object, default: () => ({}) },\n },\n\n // inject: { renderer: RendererInjectionKey as symbol },\n\n // setup(): CameraSetupInterface {\n // return {}\n // },\n\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n})\n\nexport function cameraSetProp(camera: any, key: string, value: any, updateProjectionMatrix = true) {\n camera[key] = value\n if (updateProjectionMatrix) camera.updateProjectionMatrix()\n}\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { OrthographicCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'OrthographicCamera',\n props: {\n left: { type: Number, default: -1 },\n right: { type: Number, default: 1 },\n top: { type: Number, default: 1 },\n bottom: { type: Number, default: -1 },\n near: { type: Number, default: 0.1 },\n far: { type: Number, default: 2000 },\n zoom: { type: Number, default: 1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new OrthographicCamera(props.left, props.right, props.top, props.bottom, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['left', 'right', 'top', 'bottom', 'near', 'far', 'zoom'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'OrthographicCamera',\n})\n","import { defineComponent, inject, PropType, watch } from 'vue'\nimport { PerspectiveCamera } from 'three'\nimport { bindObjectProp, bindProp } from '../tools'\nimport Camera, { cameraSetProp } from './Camera'\nimport { Vector3PropInterface } from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\nexport default defineComponent({\n extends: Camera,\n name: 'PerspectiveCamera',\n props: {\n aspect: { type: Number, default: 1 },\n far: { type: Number, default: 2000 },\n fov: { type: Number, default: 50 },\n near: { type: Number, default: 0.1 },\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n lookAt: { type: Object as PropType, default: null },\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n const camera = new PerspectiveCamera(props.fov, props.aspect, props.near, props.far)\n renderer.camera = camera\n\n bindProp(props, 'position', camera)\n\n if (props.lookAt) camera.lookAt(props.lookAt.x ?? 0, props.lookAt.y, props.lookAt.z)\n watch(() => props.lookAt, (v) => { camera.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n bindObjectProp(props, 'props', camera, true, cameraSetProp);\n\n ['aspect', 'far', 'fov', 'near'].forEach(p => {\n // @ts-ignore\n watch(() => props[p], (value) => {\n cameraSetProp(camera, p, value)\n })\n })\n\n return { renderer, camera }\n },\n __hmrId: 'PerspectiveCamera',\n})\n","import { defineComponent, inject, InjectionKey, provide, watch } from 'vue'\nimport { Scene, Color, Object3D, Texture } from 'three'\nimport { RendererInjectionKey } from './Renderer'\n\nexport const SceneInjectionKey: InjectionKey = Symbol('Scene')\n\nexport default defineComponent({\n name: 'Scene',\n props: {\n background: [String, Number, Object],\n },\n setup(props) {\n const renderer = inject(RendererInjectionKey)\n const scene = new Scene()\n\n if (!renderer) {\n console.error('Renderer not found')\n return\n }\n\n renderer.scene = scene\n provide(SceneInjectionKey, scene)\n\n const setBackground = (value: any): void => {\n if (!value) return\n if (typeof value === 'string' || typeof value === 'number') {\n if (scene.background instanceof Color) scene.background.set(value)\n else scene.background = new Color(value)\n } else if (value instanceof Texture) {\n scene.background = value\n }\n }\n\n setBackground(props.background)\n watch(() => props.background, setBackground)\n\n const add = (o: Object3D): void => { scene.add(o) }\n const remove = (o: Object3D): void => { scene.remove(o) }\n\n return { scene, add, remove }\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Scene',\n})\n","import { Object3D, Scene } from 'three'\nimport { ComponentPublicInstance, defineComponent, getCurrentInstance, PropType, watch } from 'vue'\nimport { bindObjectProp, bindProp } from '../tools'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\nimport { SceneInjectionKey } from './Scene'\n\nexport interface Object3DSetupInterface {\n renderer?: RendererInterface\n scene?: Scene\n o3d?: Object3D\n parent?: ComponentPublicInstance\n}\n\nexport interface Object3DInterface extends Object3DSetupInterface {\n addToParent(o?: Object3D): boolean\n removeFromParent(o?: Object3D): boolean\n add(o: Object3D): void\n remove(o: Object3D): void\n}\n\nexport interface Object3DPublicInterface extends ComponentPublicInstance, Object3DInterface {}\n\n// export function object3DSetup(): Object3DSetupInterface {\n// const renderer = inject(RendererInjectionKey)\n// const scene = inject(SceneInjectionKey)\n// return { scene, renderer }\n// }\n\nexport const pointerProps = {\n onPointerEnter: Function,\n onPointerOver: Function,\n onPointerMove: Function,\n onPointerLeave: Function,\n onPointerDown: Function,\n onPointerUp: Function,\n onClick: Function,\n}\n\nexport interface Vector2PropInterface {\n x?: number\n y?: number\n width?: number\n height?: number\n}\n\nexport interface Vector3PropInterface extends Vector2PropInterface {\n z?: number\n}\n\nexport interface EulerPropInterface extends Vector3PropInterface {\n order?: 'XYZ' | 'YZX' | 'ZXY' | 'XZY' | 'YXZ' | 'ZYX'\n}\n\nexport default defineComponent({\n name: 'Object3D',\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n scene: SceneInjectionKey as symbol,\n },\n emits: ['created', 'ready'],\n props: {\n position: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n rotation: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n scale: { type: Object as PropType, default: () => ({ x: 1, y: 1, z: 1, order: 'XYZ' }) },\n lookAt: { type: Object as PropType, default: null },\n userData: { type: Object, default: () => ({}) },\n visible: { type: Boolean, default: true },\n props: { type: Object, default: () => ({}) },\n disableAdd: { type: Boolean, default: false },\n disableRemove: { type: Boolean, default: false },\n ...pointerProps,\n },\n setup(): Object3DSetupInterface {\n // return object3DSetup()\n return {}\n },\n created() {\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n if (!this.scene) {\n console.error('Missing parent Scene')\n }\n },\n unmounted() {\n if (!this.disableRemove) this.removeFromParent()\n if (this.o3d) {\n if (this.renderer) this.renderer.three.removeIntersectObject(this.o3d)\n }\n },\n methods: {\n initObject3D(o3d: Object3D) {\n this.o3d = o3d\n o3d.userData.component = this\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n if (this.renderer) this.renderer.three.addIntersectObject(o3d)\n }\n\n bindProp(this, 'position', o3d)\n bindProp(this, 'rotation', o3d)\n bindProp(this, 'scale', o3d)\n bindProp(this, 'userData', o3d.userData)\n bindProp(this, 'visible', o3d)\n\n bindObjectProp(this, 'props', o3d)\n\n this.$emit('created', o3d)\n\n if (this.lookAt) o3d.lookAt(this.lookAt.x ?? 0, this.lookAt.y, this.lookAt.z)\n watch(() => this.lookAt, (v) => { o3d.lookAt(v.x ?? 0, v.y, v.z) }, { deep: true })\n\n this.parent = this.getParent()\n if (!this.disableAdd) {\n if (this.addToParent()) this.$emit('ready', this)\n else console.error('Missing parent (Scene, Group...)')\n }\n },\n getParent(): undefined | ComponentPublicInstance {\n let parent = this.$parent\n\n if (!parent) {\n // for script setup\n const instance = getCurrentInstance() as any // ctx is internal\n if (instance && instance.parent) parent = instance.parent.ctx\n }\n\n while (parent) {\n if ((parent as any).add) return parent\n parent = parent.$parent\n }\n return undefined\n },\n addToParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).add(o3d)\n return true\n }\n return false\n },\n removeFromParent(o?: Object3D) {\n const o3d = o || this.o3d\n if (this.parent) {\n (this.parent as any).remove(o3d)\n return true\n }\n return false\n },\n add(o: Object3D) { this.o3d?.add(o) },\n remove(o: Object3D) { this.o3d?.remove(o) },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Object3D',\n})\n","import { defineComponent } from 'vue'\nimport { Group } from 'three'\nimport Object3D from './Object3D'\n\nexport default defineComponent({\n name: 'Group',\n extends: Object3D,\n setup() {\n return {\n group: new Group(),\n }\n },\n created() {\n this.initObject3D(this.group)\n },\n __hmrId: 'Group',\n})\n","import { defineComponent, inject, PropType } from 'vue'\nimport usePointer, { PointerInterface, PointerIntersectCallbackType } from './usePointer'\nimport { RendererInjectionKey, RendererInterface } from './Renderer'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst emptyCallBack: PointerIntersectCallbackType = () => {}\n\ninterface RaycasterSetupInterface {\n renderer?: RendererInterface\n pointer?: PointerInterface\n}\n\nexport default defineComponent({\n name: 'Raycaster',\n props: {\n onPointerEnter: { type: Function as PropType, default: emptyCallBack },\n onPointerOver: { type: Function as PropType, default: emptyCallBack },\n onPointerMove: { type: Function as PropType, default: emptyCallBack },\n onPointerLeave: { type: Function as PropType, default: emptyCallBack },\n onClick: { type: Function as PropType, default: emptyCallBack },\n intersectMode: { type: String, default: 'move' },\n intersectRecursive: { type: Boolean, default: false },\n },\n setup(): RaycasterSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n mounted() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n this.renderer.onMounted(() => {\n if (!renderer.camera) return\n\n this.pointer = usePointer({\n camera: renderer.camera,\n domElement: renderer.canvas,\n intersectObjects: () => renderer.scene ? renderer.scene.children : [],\n intersectRecursive: this.intersectRecursive,\n onIntersectEnter: this.onPointerEnter,\n onIntersectOver: this.onPointerOver,\n onIntersectMove: this.onPointerMove,\n onIntersectLeave: this.onPointerLeave,\n onIntersectClick: this.onClick,\n })\n this.pointer.addListeners()\n\n if (this.intersectMode === 'frame') {\n renderer.onBeforeRender(this.pointer.intersect)\n }\n })\n },\n unmounted() {\n if (this.pointer) {\n this.pointer.removeListeners()\n this.renderer?.offBeforeRender(this.pointer.intersect)\n }\n },\n render() {\n return []\n },\n __hmrId: 'Raycaster',\n})\n","import { defineComponent, inject, onUnmounted, PropType } from 'vue'\nimport { CubeCamera, LinearMipmapLinearFilter, Mesh, RGBAFormat, WebGLCubeRenderTarget } from 'three'\nimport Object3D from './Object3D'\nimport { RendererInjectionKey } from './Renderer'\n\ninterface CubeCameraSetupInterface {\n cubeRT?: WebGLCubeRenderTarget\n cubeCamera?: CubeCamera\n updateRT?: {(): void}\n}\n\nexport default defineComponent({\n extends: Object3D,\n props: {\n cubeRTSize: { type: Number, default: 256 },\n cubeCameraNear: { type: Number, default: 0.1 },\n cubeCameraFar: { type: Number, default: 2000 },\n autoUpdate: Boolean,\n hideMeshes: { type: Array as PropType, default: () => ([]) },\n },\n setup(props): CubeCameraSetupInterface {\n const rendererC = inject(RendererInjectionKey)\n if (!rendererC || !rendererC.scene) {\n console.error('Missing Renderer / Scene')\n return {}\n }\n\n const renderer = rendererC.renderer, scene = rendererC.scene\n const cubeRT = new WebGLCubeRenderTarget(props.cubeRTSize, { format: RGBAFormat, generateMipmaps: true, minFilter: LinearMipmapLinearFilter })\n const cubeCamera = new CubeCamera(props.cubeCameraNear, props.cubeCameraFar, cubeRT)\n const updateRT = () => {\n props.hideMeshes.forEach(m => { m.visible = false })\n cubeCamera.update(renderer, scene)\n props.hideMeshes.forEach(m => { m.visible = true })\n }\n\n if (props.autoUpdate) {\n rendererC.onBeforeRender(updateRT)\n onUnmounted(() => { rendererC.offBeforeRender(updateRT) })\n } else {\n rendererC.onMounted(updateRT)\n }\n\n return { cubeRT, cubeCamera, updateRT }\n },\n created() {\n if (this.cubeCamera) this.initObject3D(this.cubeCamera)\n },\n render() {\n return []\n },\n __hmrId: 'CubeCamera',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, watch } from 'vue'\nimport { BufferGeometry, Material, Mesh as TMesh } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport interface MeshSetupInterface extends Object3DSetupInterface {\n mesh?: TMesh\n geometry?: BufferGeometry\n material?: Material | Material[]\n loading?: boolean\n}\n\nexport interface MeshInterface extends MeshSetupInterface {\n setGeometry(g: BufferGeometry): void\n setMaterial(m: Material): void\n}\n\nexport interface MeshPublicInterface extends ComponentPublicInstance, MeshInterface {}\n\nexport const MeshInjectionKey: InjectionKey = Symbol('Mesh')\n\nconst Mesh = defineComponent({\n name: 'Mesh',\n extends: Object3D,\n props: {\n castShadow: Boolean,\n receiveShadow: Boolean,\n },\n setup(): MeshSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n // TODO : proper ?\n if (!this.mesh && !this.loading) this.initMesh()\n },\n methods: {\n initMesh() {\n const mesh = new TMesh(this.geometry, this.material)\n\n bindProp(this, 'castShadow', mesh)\n bindProp(this, 'receiveShadow', mesh)\n\n this.mesh = mesh\n this.initObject3D(mesh)\n },\n createGeometry() {},\n addGeometryWatchers(props: Readonly) {\n Object.keys(props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], () => {\n this.refreshGeometry()\n })\n })\n },\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material | Material[]) {\n if (Array.isArray(material) || !this.material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n } else {\n let prev = this.material\n if (Array.isArray(prev)) {\n prev.push(material)\n } else {\n prev = [prev, material]\n }\n this.material = prev\n if (this.mesh) this.mesh.material = prev\n }\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n if (this.mesh && this.geometry) this.mesh.geometry = this.geometry\n oldGeo?.dispose()\n },\n },\n unmounted() {\n // for predefined mesh (geometry/material are not unmounted)\n if (this.geometry) this.geometry.dispose()\n if (this.material) {\n if (Array.isArray(this.material)) {\n for (const m of this.material) m.dispose()\n } else {\n this.material.dispose()\n }\n }\n },\n __hmrId: 'Mesh',\n})\n\nexport default Mesh\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function meshComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n },\n })\n}\n","import { ComponentPropsOptions, defineComponent, PropType, watch } from 'vue'\nimport { BufferAttribute, BufferGeometry } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\n\nexport interface GeometrySetupInterface {\n mesh?: MeshInterface\n geometry?: BufferGeometry\n watchProps?: string[]\n}\n\nexport interface GeometryAttributeInterface {\n name: string\n array: ArrayLike\n itemSize: number\n normalized?: boolean\n}\n\n// function defaultSetup(): GeometryInterface {\n// const mesh = inject('mesh') as MeshInterface\n// const watchProps: string[] = []\n// return { mesh, watchProps }\n// }\n\nconst Geometry = defineComponent({\n emits: ['created'],\n props: {\n rotateX: Number,\n rotateY: Number,\n rotateZ: Number,\n attributes: { type: Array as PropType>, default: () => ([]) },\n },\n // inject for sub components\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): GeometrySetupInterface {\n return {}\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry) this.mesh.setGeometry(this.geometry)\n\n Object.keys(this.$props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], this.refreshGeometry)\n })\n },\n unmounted() {\n this.geometry?.dispose()\n },\n methods: {\n createGeometry() {\n const bufferAttributes: Record = {}\n const geometry = new BufferGeometry()\n this.attributes.forEach(attribute => {\n if (attribute.name && attribute.itemSize && attribute.array) {\n const bufferAttribute = bufferAttributes[attribute.name] = new BufferAttribute(attribute.array, attribute.itemSize, attribute.normalized)\n geometry.setAttribute(attribute.name, bufferAttribute)\n }\n })\n geometry.computeBoundingBox()\n geometry.userData.component = this\n this.geometry = geometry\n this.$emit('created', geometry)\n },\n rotateGeometry() {\n if (!this.geometry) return\n if (this.rotateX) this.geometry.rotateX(this.rotateX)\n if (this.rotateY) this.geometry.rotateY(this.rotateY)\n if (this.rotateZ) this.geometry.rotateZ(this.rotateZ)\n },\n refreshGeometry() {\n const oldGeo = this.geometry\n this.createGeometry()\n this.rotateGeometry()\n if (this.geometry && this.mesh) this.mesh.setGeometry(this.geometry)\n oldGeo?.dispose()\n },\n },\n render() { return [] },\n})\n\nexport default Geometry\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function geometryComponent

>(\n name: string,\n props: P,\n createGeometry: {(c: any): BufferGeometry}\n) {\n return defineComponent({\n name,\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n this.geometry.userData.component = this\n this.$emit('created', this.geometry)\n },\n },\n })\n}\n","import { geometryComponent } from './Geometry'\nimport { BoxGeometry } from 'three'\n\nexport const props = {\n size: Number,\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n depth: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n depthSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): BoxGeometry {\n if (comp.size) {\n return new BoxGeometry(comp.size, comp.size, comp.size, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n } else {\n return new BoxGeometry(comp.width, comp.height, comp.depth, comp.widthSegments, comp.heightSegments, comp.depthSegments)\n }\n}\n\nexport default geometryComponent('BoxGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CircleGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n segments: { type: Number, default: 8 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CircleGeometry {\n return new CircleGeometry(comp.radius, comp.segments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CircleGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { ConeGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): ConeGeometry {\n return new ConeGeometry(comp.radius, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('ConeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { CylinderGeometry } from 'three'\n\nexport const props = {\n radiusTop: { type: Number, default: 1 },\n radiusBottom: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n heightSegments: { type: Number, default: 1 },\n openEnded: { type: Boolean, default: false },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): CylinderGeometry {\n return new CylinderGeometry(comp.radiusTop, comp.radiusBottom, comp.height, comp.radialSegments, comp.heightSegments, comp.openEnded, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('CylinderGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { DodecahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): DodecahedronGeometry {\n return new DodecahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('DodecahedronGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { ExtrudeGeometry, ExtrudeGeometryOptions, Shape } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n options: { type: Object as PropType },\n} as const\n\nexport function createGeometry(comp: any): ExtrudeGeometry {\n return new ExtrudeGeometry(comp.shapes, comp.options)\n}\n\nexport default geometryComponent('ExtrudeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { IcosahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): IcosahedronGeometry {\n return new IcosahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('IcosahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { LatheGeometry } from 'three'\n\nexport const props = {\n points: Array,\n segments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): LatheGeometry {\n return new LatheGeometry(comp.points, comp.segments, comp.phiStart, comp.phiLength)\n}\n\nexport default geometryComponent('LatheGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { OctahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): OctahedronGeometry {\n return new OctahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('OctahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PlaneGeometry } from 'three'\n\nexport const props = {\n width: { type: Number, default: 1 },\n height: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n} as const\n\nexport function createGeometry(comp: any): PlaneGeometry {\n return new PlaneGeometry(comp.width, comp.height, comp.widthSegments, comp.heightSegments)\n}\n\nexport default geometryComponent('PlaneGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { PolyhedronGeometry } from 'three'\n\nexport const props = {\n vertices: Array,\n indices: Array,\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): PolyhedronGeometry {\n return new PolyhedronGeometry(comp.vertices, comp.indices, comp.radius, comp.detail)\n}\n\nexport default geometryComponent('PolyhedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { RingGeometry } from 'three'\n\nexport const props = {\n innerRadius: { type: Number, default: 0.5 },\n outerRadius: { type: Number, default: 1 },\n thetaSegments: { type: Number, default: 8 },\n phiSegments: { type: Number, default: 1 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): RingGeometry {\n return new RingGeometry(comp.innerRadius, comp.outerRadius, comp.thetaSegments, comp.phiSegments, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('RingGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { SphereGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n widthSegments: { type: Number, default: 12 },\n heightSegments: { type: Number, default: 12 },\n phiStart: { type: Number, default: 0 },\n phiLength: { type: Number, default: Math.PI * 2 },\n thetaStart: { type: Number, default: 0 },\n thetaLength: { type: Number, default: Math.PI },\n} as const\n\nexport function createGeometry(comp: any): SphereGeometry {\n return new SphereGeometry(comp.radius, comp.widthSegments, comp.heightSegments, comp.phiStart, comp.phiLength, comp.thetaStart, comp.thetaLength)\n}\n\nexport default geometryComponent('SphereGeometry', props, createGeometry)\n","import { PropType } from 'vue'\nimport { geometryComponent } from './Geometry'\nimport { Shape, ShapeGeometry } from 'three'\n\nexport const props = {\n shapes: { type: [Object, Array] as PropType },\n curveSegments: { type: Number },\n} as const\n\nexport function createGeometry(comp: any): ShapeGeometry {\n return new ShapeGeometry(comp.shapes, comp.curveSegments)\n}\n\nexport default geometryComponent('ShapeGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TetrahedronGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n detail: { type: Number, default: 0 },\n} as const\n\nexport function createGeometry(comp: any): TetrahedronGeometry {\n return new TetrahedronGeometry(comp.radius, comp.detail)\n}\n\nexport default geometryComponent('TetrahedronGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n radialSegments: { type: Number, default: 8 },\n tubularSegments: { type: Number, default: 6 },\n arc: { type: Number, default: Math.PI * 2 },\n} as const\n\nexport function createGeometry(comp: any): TorusGeometry {\n return new TorusGeometry(comp.radius, comp.tube, comp.radialSegments, comp.tubularSegments, comp.arc)\n}\n\nexport default geometryComponent('TorusGeometry', props, createGeometry)\n","import { geometryComponent } from './Geometry'\nimport { TorusKnotGeometry } from 'three'\n\nexport const props = {\n radius: { type: Number, default: 1 },\n tube: { type: Number, default: 0.4 },\n tubularSegments: { type: Number, default: 64 },\n radialSegments: { type: Number, default: 8 },\n p: { type: Number, default: 2 },\n q: { type: Number, default: 3 },\n} as const\n\nexport function createGeometry(comp: any): TorusKnotGeometry {\n return new TorusKnotGeometry(comp.radius, comp.tube, comp.tubularSegments, comp.radialSegments, comp.p, comp.q)\n}\n\nexport default geometryComponent('TorusKnotGeometry', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { CatmullRomCurve3, Curve, TubeGeometry, Vector3 } from 'three'\nimport Geometry from './Geometry'\n\nexport const props = {\n points: Array,\n path: Curve,\n tubularSegments: { type: Number, default: 64 },\n radius: { type: Number, default: 1 },\n radialSegments: { type: Number, default: 8 },\n closed: { type: Boolean, default: false },\n} as const\n\nexport function createGeometry(comp: any): TubeGeometry {\n let curve\n if (comp.points) {\n curve = new CatmullRomCurve3(comp.points)\n } else if (comp.path) {\n curve = comp.path\n } else {\n console.error('Missing path curve or points.')\n }\n return new TubeGeometry(curve, comp.tubularSegments, comp.radius, comp.radiusSegments, comp.closed)\n}\n\nexport default defineComponent({\n extends: Geometry,\n props,\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n})\n\nexport function updateTubeGeometryPoints(tube: TubeGeometry, points: Vector3[]): void {\n const curve = new CatmullRomCurve3(points)\n const { radialSegments, radius, tubularSegments, closed } = tube.parameters\n const frames = curve.computeFrenetFrames(tubularSegments, closed)\n tube.tangents = frames.tangents\n tube.normals = frames.normals\n tube.binormals = frames.binormals\n tube.parameters.path = curve\n\n const pAttribute = tube.getAttribute('position')\n const nAttribute = tube.getAttribute('normal')\n\n const normal = new Vector3()\n const P = new Vector3()\n\n for (let i = 0; i < tubularSegments; i++) {\n updateSegment(i)\n }\n updateSegment(tubularSegments)\n\n tube.attributes.position.needsUpdate = true\n tube.attributes.normal.needsUpdate = true\n\n function updateSegment(i: number) {\n curve.getPointAt(i / tubularSegments, P)\n const N = frames.normals[i]\n const B = frames.binormals[i]\n for (let j = 0; j <= radialSegments; j++) {\n const v = j / radialSegments * Math.PI * 2\n const sin = Math.sin(v)\n const cos = -Math.cos(v)\n normal.x = (cos * N.x + sin * B.x)\n normal.y = (cos * N.y + sin * B.y)\n normal.z = (cos * N.z + sin * B.z)\n normal.normalize()\n const index = (i * (radialSegments + 1) + j)\n nAttribute.setXYZ(index, normal.x, normal.y, normal.z)\n pAttribute.setXYZ(index, P.x + radius * normal.x, P.y + radius * normal.y, P.z + radius * normal.z)\n }\n }\n}\n","import { DirectionalLight, Light, SpotLight } from 'three'\nimport { defineComponent, PropType, watch } from 'vue'\nimport Object3D, { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp, setFromProp } from '../tools'\n\nexport interface LightSetupInterface {\n light?: Light\n}\n\nexport default defineComponent({\n extends: Object3D,\n name: 'Light',\n props: {\n color: { type: String, default: '#ffffff' },\n intensity: { type: Number, default: 1 },\n castShadow: { type: Boolean, default: false },\n shadowMapSize: { type: Object as PropType, default: () => ({ x: 512, y: 512 }) },\n shadowCamera: { type: Object, default: () => ({}) },\n },\n setup(): LightSetupInterface {\n return {}\n },\n unmounted() {\n if (this.light instanceof SpotLight || this.light instanceof DirectionalLight) {\n this.removeFromParent(this.light.target)\n }\n },\n methods: {\n initLight(light: Light) {\n this.light = light\n\n if ((light as any).shadow) {\n light.castShadow = this.castShadow\n // @ts-ignore\n setFromProp(light.shadow.mapSize, this.shadowMapSize)\n // @ts-ignore\n setFromProp(light.shadow.camera, this.shadowCamera)\n }\n\n ['color', 'intensity', 'castShadow'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => {\n if (p === 'color') {\n light.color.set(value)\n } else {\n // @ts-ignore\n light[p] = value\n }\n })\n })\n\n this.initObject3D(light)\n\n if (light instanceof SpotLight || light instanceof DirectionalLight) {\n bindProp(this, 'target', light.target, 'position')\n this.addToParent(light.target)\n }\n },\n },\n __hmrId: 'Light',\n})\n","import { defineComponent } from 'vue'\nimport { AmbientLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n created() {\n this.initLight(new AmbientLight(this.color, this.intensity))\n },\n __hmrId: 'AmbientLight',\n})\n","import { defineComponent, PropType } from 'vue'\nimport { DirectionalLight } from 'three'\nimport { Vector3PropInterface } from '../core/Object3D'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n target: { type: Object as PropType, default: () => ({ x: 0, y: 0, z: 0 }) },\n },\n created() {\n this.initLight(new DirectionalLight(this.color, this.intensity))\n },\n __hmrId: 'DirectionalLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HemisphereLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n groundColor: { type: String, default: '#444444' },\n },\n created() {\n const light = new HemisphereLight(this.color, this.groundColor, this.intensity)\n watch(() => this.groundColor, (value) => { light.groundColor.set(value) })\n this.initLight(light)\n },\n __hmrId: 'HemisphereLight',\n})\n","import { defineComponent } from 'vue'\nimport { PointLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n distance: { type: Number, default: 0 },\n decay: { type: Number, default: 1 },\n },\n created() {\n this.initLight(new PointLight(this.color, this.intensity, this.distance, this.decay))\n },\n __hmrId: 'PointLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { RectAreaLight } from 'three'\nimport { RectAreaLightUniformsLib } from 'three/examples/jsm/lights/RectAreaLightUniformsLib.js'\nimport { RectAreaLightHelper } from 'three/examples/jsm/helpers/RectAreaLightHelper.js'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n width: { type: Number, default: 10 },\n height: { type: Number, default: 10 },\n helper: Boolean,\n },\n created() {\n RectAreaLightUniformsLib.init()\n const light = new RectAreaLight(this.color, this.intensity, this.width, this.height)\n\n const watchProps = ['width', 'height']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n if (this.helper) {\n const lightHelper = new RectAreaLightHelper(light)\n light.add(lightHelper)\n }\n\n this.initLight(light)\n },\n __hmrId: 'RectAreaLight',\n})\n","import { defineComponent, watch } from 'vue'\nimport { SpotLight } from 'three'\nimport Light from './Light'\n\nexport default defineComponent({\n extends: Light,\n props: {\n angle: { type: Number, default: Math.PI / 3 },\n decay: { type: Number, default: 1 },\n distance: { type: Number, default: 0 },\n penumbra: { type: Number, default: 0 },\n target: Object,\n },\n created() {\n const light = new SpotLight(this.color, this.intensity, this.distance, this.angle, this.penumbra, this.decay)\n\n const watchProps = ['angle', 'decay', 'distance', 'penumbra']\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { light[p] = value })\n })\n\n this.initLight(light)\n },\n __hmrId: 'SpotLight',\n})\n","import { ComponentPropsOptions, ComponentPublicInstance, defineComponent, InjectionKey, PropType, watch } from 'vue'\nimport { Color, Material, MeshBasicMaterial, MeshLambertMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, PointsMaterial as TPointsMaterial, Texture, ShadowMaterial as TShadowMaterial } from 'three'\nimport { MeshInjectionKey, MeshInterface } from '../meshes/Mesh'\nimport { bindObjectProp, propsValues } from '../tools'\nimport { BasicMaterialPropsInterface, LambertMaterialPropsInterface, MaterialPropsInterface, PhongMaterialPropsInterface, PhysicalMaterialPropsInterface, PointsMaterialPropsInterface, StandardMaterialPropsInterface, ToonMaterialPropsInterface } from './types'\n\nexport interface MaterialSetupInterface {\n mesh?: MeshInterface\n material?: Material\n createMaterial?(): Material\n}\n\nexport interface MaterialInterface extends MaterialSetupInterface {\n setTexture(texture: Texture | null, key: string): void\n}\n\nexport interface MaterialPublicInterface extends ComponentPublicInstance, MaterialInterface {}\n\nexport const MaterialInjectionKey: InjectionKey = Symbol('Material')\n\nconst BaseMaterial = defineComponent({\n emits: ['created'],\n props: {\n color: { type: String, default: '#ffffff' },\n props: { type: Object as PropType, default: () => ({}) },\n },\n inject: {\n mesh: MeshInjectionKey as symbol,\n },\n setup(): MaterialSetupInterface {\n return {}\n },\n provide() {\n return {\n [MaterialInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.mesh) {\n console.error('Missing parent Mesh')\n return\n }\n\n if (this.createMaterial) {\n const material = this.material = this.createMaterial()\n // @ts-ignore\n watch(() => this.color, (value) => { material.color.set(value) })\n bindObjectProp(this, 'props', material, false, this.setProp)\n this.$emit('created', material)\n this.mesh.setMaterial(material)\n }\n },\n unmounted() {\n this.material?.dispose()\n },\n methods: {\n getMaterialParams() {\n return { ...propsValues(this.$props, ['props']), ...this.props }\n },\n setProp(material: any, key: string, value: any, needsUpdate = false) {\n const dstVal = material[key]\n if (dstVal instanceof Color) dstVal.set(value)\n else material[key] = value\n material.needsUpdate = needsUpdate\n },\n setTexture(texture: Texture | null, key = 'map') {\n this.setProp(this.material, key, texture, true)\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'Material',\n})\n\nexport default BaseMaterial\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function materialComponent

>(\n name: string,\n props: P,\n createMaterial: {(opts: any): Material}\n) {\n return defineComponent({\n name,\n extends: BaseMaterial,\n props,\n methods: {\n createMaterial() {\n return createMaterial(this.getMaterialParams())\n },\n },\n })\n}\n\n// TODO : proper\nexport const BasicMaterial = materialComponent('BasicMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshBasicMaterial(opts))\nexport const LambertMaterial = materialComponent('LambertMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshLambertMaterial(opts))\nexport const PhongMaterial = materialComponent('PhongMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhongMaterial(opts))\nexport const PhysicalMaterial = materialComponent('PhysicalMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshPhysicalMaterial(opts))\nexport const PointsMaterial = materialComponent('PointsMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TPointsMaterial(opts))\nexport const ShadowMaterial = materialComponent('ShadowMaterial', { color: { type: String, default: '#000000' }, props: { type: Object as PropType, default: () => ({}) } }, (opts) => new TShadowMaterial(opts))\nexport const StandardMaterial = materialComponent('StandardMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshStandardMaterial(opts))\nexport const ToonMaterial = materialComponent('ToonMaterial', { props: { type: Object as PropType, default: () => ({}) } }, (opts) => new MeshToonMaterial(opts))\n","import { MeshMatcapMaterial, TextureLoader } from 'three'\nimport { propsValues, getMatcapUrl } from '../tools'\nimport { materialComponent } from './Material'\n\nexport default materialComponent(\n 'MatcapMaterial',\n {\n src: String,\n name: { type: String, default: '0404E8_0404B5_0404CB_3333FC' },\n },\n (opts) => {\n const src = opts.src ? opts.src : getMatcapUrl(opts.name)\n const params = propsValues(opts, ['src', 'name'])\n params.matcap = new TextureLoader().load(src)\n return new MeshMatcapMaterial(params)\n }\n)\n","import { ShaderMaterial } from 'three'\nimport { materialComponent } from './Material'\nimport { propsValues } from '../tools'\n\nconst defaultVertexShader = `\n varying vec2 vUv;\n void main(){\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0);\n }\n`\n\nconst defaultFragmentShader = `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(vUv.x, vUv.y, 0., 1.0);\n }\n`\n\nexport default materialComponent(\n 'ShaderMaterial',\n {\n props: { type: Object, default: () => ({\n uniforms: {},\n vertexShader: defaultVertexShader,\n fragmentShader: defaultFragmentShader,\n }) },\n },\n (opts) => new ShaderMaterial(propsValues(opts, ['color']))\n)\n","/**\n * ------------------------------------------------------------------------------------------\n * Subsurface Scattering shader\n * Based on three/examples/jsm/shaders/SubsurfaceScatteringShader.js\n * Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look\n * https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/\n *------------------------------------------------------------------------------------------\n */\nimport {\n Color,\n ShaderChunk,\n ShaderLib,\n UniformsUtils,\n} from 'three'\n\nfunction replaceAll(string: string, find: string, replace: string) {\n return string.split(find).join(replace)\n}\n\nconst meshphongFragHead = ShaderChunk.meshphong_frag.slice(0, ShaderChunk.meshphong_frag.indexOf('void main() {'))\nconst meshphongFragBody = ShaderChunk.meshphong_frag.slice(ShaderChunk.meshphong_frag.indexOf('void main() {'))\n\nconst SubsurfaceScatteringShader = {\n\n uniforms: UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n thicknessColor: { value: new Color(0xffffff) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0.0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2.0 },\n thicknessScale: { value: 10.0 },\n },\n ]),\n\n vertexShader: `\n #define USE_UV\n ${ShaderChunk.meshphong_vert}\n `,\n\n fragmentShader: `\n #define USE_UV\n #define SUBSURFACE\n\n ${meshphongFragHead}\n\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n #ifdef USE_COLOR\n vec3 thickness = vColor * thicknessColor;\n #else\n vec3 thickness = thicknessColor;\n #endif\n vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n ` + meshphongFragBody.replace(\n '#include ',\n replaceAll(\n ShaderChunk.lights_fragment_begin,\n 'RE_Direct( directLight, geometry, material, reflectedLight );',\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n ),\n}\n\nexport default SubsurfaceScatteringShader\n","import { defineComponent, PropType } from 'vue'\nimport { Color, ShaderMaterial, UniformsUtils } from 'three'\nimport SubsurfaceScatteringShader from './SubsurfaceScatteringShader'\nimport Material from './Material'\nimport { bindObjectProp } from '../tools'\n\nexport interface SubSurfaceMaterialUniformsInterface {\n diffuse?: string | number\n thicknessColor?: string | number\n thicknessDistortion?: number\n thicknessAmbient?: number\n thicknessAttenuation?: number\n thicknessPower?: number\n thicknessScale?: number\n}\n\nexport default defineComponent({\n extends: Material,\n props: {\n uniforms: { type: Object as PropType, default: () => ({\n diffuse: '#ffffff',\n thicknessColor: '#ffffff',\n thicknessDistortion: 0.4,\n thicknessAmbient: 0.01,\n thicknessAttenuation: 0.7,\n thicknessPower: 2,\n thicknessScale: 4,\n }) },\n },\n methods: {\n createMaterial() {\n const params = SubsurfaceScatteringShader\n const uniforms = UniformsUtils.clone(params.uniforms)\n\n bindObjectProp(this, 'uniforms', uniforms, true, (dst: any, key: string, value: any) => {\n const dstVal = dst[key].value\n if (dstVal instanceof Color) dstVal.set(value)\n else dst[key].value = value\n })\n\n const material = new ShaderMaterial({\n ...params,\n lights: true,\n ...this.props,\n uniforms,\n })\n\n return material\n },\n },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { ShaderMaterial, Texture, TextureLoader } from 'three'\nimport { bindObjectProp } from '../tools'\nimport { MaterialInjectionKey, MaterialInterface } from './Material'\n\nexport interface TexureInterface {\n material?: MaterialInterface\n texture?: Texture\n}\n\nexport default defineComponent({\n inject: {\n material: MaterialInjectionKey as symbol,\n },\n props: {\n name: { type: String, default: 'map' },\n uniform: String,\n src: String,\n onLoad: Function as PropType<(t: Texture) => void>,\n onProgress: Function as PropType<(e: ProgressEvent) => void>,\n onError: Function as PropType<(e: ErrorEvent) => void>,\n props: { type: Object, default: () => ({}) },\n },\n setup(): TexureInterface {\n return {}\n },\n created() {\n this.refreshTexture()\n watch(() => this.src, this.refreshTexture)\n },\n unmounted() {\n this.material?.setTexture(null, this.name)\n this.texture?.dispose()\n },\n methods: {\n createTexture() {\n if (!this.src) return undefined\n return new TextureLoader().load(this.src, this.onLoaded, this.onProgress, this.onError)\n },\n initTexture() {\n if (!this.texture) return\n\n bindObjectProp(this, 'props', this.texture)\n if (!this.material) return\n\n this.material.setTexture(this.texture, this.name)\n if (this.material.material instanceof ShaderMaterial && this.uniform) {\n (this.material.material).uniforms[this.uniform] = { value: this.texture }\n }\n },\n refreshTexture() {\n this.texture?.dispose()\n this.texture = this.createTexture()\n this.initTexture()\n },\n onLoaded(t: Texture) {\n this.onLoad?.(t)\n },\n },\n render() { return [] },\n})\n","import { defineComponent, PropType, watch } from 'vue'\nimport { CubeReflectionMapping, CubeTextureLoader } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n name: { type: String, default: 'envMap' },\n path: { type: String, required: true },\n urls: {\n type: Array as PropType,\n default: () => ['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg'],\n },\n props: { type: Object, default: () => ({ mapping: CubeReflectionMapping }) },\n },\n created() {\n watch(() => this.path, this.refreshTexture)\n watch(() => this.urls, this.refreshTexture)\n },\n methods: {\n createTexture() {\n return new CubeTextureLoader()\n .setPath(this.path)\n .load(this.urls, this.onLoaded, this.onProgress, this.onError)\n },\n },\n})\n","import { defineComponent, watch } from 'vue'\nimport { VideoTexture } from 'three'\nimport Texture from './Texture'\n\nexport default defineComponent({\n extends: Texture,\n props: {\n videoId: {\n type: String,\n required: true,\n },\n },\n created() {\n watch(() => this.videoId, this.refreshTexture)\n },\n methods: {\n createTexture() {\n const video = document.getElementById(this.videoId) as HTMLVideoElement\n return new VideoTexture(video)\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/BoxGeometry'\n\nexport default meshComponent('Box', props, createGeometry)\n\n// import { defineComponent } from 'vue'\n// import Mesh, { meshComponent } from './Mesh'\n//\n// export default defineComponent({\n// extends: Mesh,\n// props,\n// created() {\n// this.createGeometry()\n// this.addGeometryWatchers(props)\n// },\n// methods: {\n// createGeometry() {\n// this.geometry = createGeometry(this)\n// },\n// },\n// })\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CircleGeometry'\n\nexport default meshComponent('Circle', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/ConeGeometry'\n\nexport default meshComponent('Cone', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/CylinderGeometry'\n\nexport default meshComponent('Cylinder', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/DodecahedronGeometry'\n\nexport default meshComponent('Dodecahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/IcosahedronGeometry'\n\nexport default meshComponent('Icosahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/LatheGeometry'\n\nexport default meshComponent('Lathe', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/OctahedronGeometry'\n\nexport default meshComponent('Octahedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PlaneGeometry'\n\nexport default meshComponent('Plane', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/PolyhedronGeometry'\n\nexport default meshComponent('Polyhedron', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/RingGeometry'\n\nexport default meshComponent('Ring', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/SphereGeometry'\n\nexport default meshComponent('Sphere', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TetrahedronGeometry'\n\nexport default meshComponent('Tetrahedron', props, createGeometry)\n","import { defineComponent, PropType, watch } from 'vue'\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js'\nimport { Font, FontLoader } from 'three/examples/jsm/loaders/FontLoader.js'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface TextSetupInterface extends MeshSetupInterface {\n geometry?: TextGeometry\n font?: Font\n}\n\nconst props = {\n text: { type: String, required: true, default: 'Text' },\n fontSrc: { type: String, required: true },\n size: { type: Number, default: 80 },\n height: { type: Number, default: 5 },\n depth: { type: Number, default: 1 },\n curveSegments: { type: Number, default: 12 },\n bevelEnabled: { type: Boolean, default: false },\n bevelThickness: { type: Number, default: 10 },\n bevelSize: { type: Number, default: 8 },\n bevelOffset: { type: Number, default: 0 },\n bevelSegments: { type: Number, default: 5 },\n align: { type: [Boolean, String] as PropType, default: false },\n} as const\n\nexport default defineComponent({\n extends: Mesh,\n props,\n setup(): TextSetupInterface {\n return {}\n },\n created() {\n if (!this.fontSrc) {\n console.error('Missing required prop: \"font-src\"')\n return\n }\n // if (!this.text) {\n // console.error('Missing required prop: \"text\"')\n // return\n // }\n\n // add watchers\n const watchProps = [\n 'text', 'size', 'height', 'curveSegments',\n 'bevelEnabled', 'bevelThickness', 'bevelSize', 'bevelOffset', 'bevelSegments',\n 'align',\n ]\n watchProps.forEach(p => {\n // @ts-ignore\n watch(() => this[p], () => {\n if (this.font) this.refreshGeometry()\n })\n })\n\n const loader = new FontLoader()\n this.loading = true\n loader.load(this.fontSrc, (font) => {\n this.loading = false\n this.font = font\n this.createGeometry()\n this.initMesh()\n })\n },\n methods: {\n createGeometry() {\n this.geometry = new TextGeometry(this.text, {\n // @ts-ignore\n font: this.font,\n size: this.size,\n height: this.height,\n depth: this.depth,\n curveSegments: this.curveSegments,\n bevelEnabled: this.bevelEnabled,\n bevelThickness: this.bevelThickness,\n bevelSize: this.bevelSize,\n bevelOffset: this.bevelOffset,\n bevelSegments: this.bevelSegments,\n })\n\n if (this.align === 'center') {\n this.geometry.center()\n }\n },\n },\n})\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusGeometry'\n\nexport default meshComponent('Torus', props, createGeometry)\n","import { meshComponent } from './Mesh'\nimport { props, createGeometry } from '../geometries/TorusKnotGeometry'\n\nexport default meshComponent('TorusKnot', props, createGeometry)\n","import { defineComponent } from 'vue'\nimport { TubeGeometry, Vector3 } from 'three'\nimport Mesh from './Mesh'\nimport { props, createGeometry, updateTubeGeometryPoints } from '../geometries/TubeGeometry'\n\nexport default defineComponent({\n extends: Mesh,\n props,\n created() {\n this.createGeometry()\n this.addGeometryWatchers(props)\n },\n methods: {\n createGeometry() {\n this.geometry = createGeometry(this)\n },\n // update curve points (without using prop, faster)\n updatePoints(points: Vector3[]) {\n updateTubeGeometryPoints(this.geometry as TubeGeometry, points)\n },\n },\n __hmrId: 'Tube',\n})\n","import { defineComponent, watch } from 'vue'\nimport { DoubleSide, MeshBasicMaterial, PlaneGeometry, Texture, TextureLoader } from 'three'\nimport Mesh, { MeshSetupInterface } from './Mesh'\n\ninterface ImageSetupInterface extends MeshSetupInterface {\n material?: MeshBasicMaterial\n texture?: Texture\n}\n\nexport default defineComponent({\n emits: ['loaded'],\n extends: Mesh,\n props: {\n src: { type: String, required: true },\n width: Number,\n height: Number,\n widthSegments: { type: Number, default: 1 },\n heightSegments: { type: Number, default: 1 },\n keepSize: Boolean,\n },\n setup(): ImageSetupInterface {\n return {}\n },\n created() {\n if (!this.renderer) return\n\n this.geometry = new PlaneGeometry(1, 1, this.widthSegments, this.heightSegments)\n this.material = new MeshBasicMaterial({ side: DoubleSide, map: this.loadTexture() })\n\n watch(() => this.src, this.refreshTexture);\n\n ['width', 'height'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.resize)\n })\n\n this.resize()\n if (this.keepSize) this.renderer.onResize(this.resize)\n },\n unmounted() {\n this.renderer?.offResize(this.resize)\n },\n methods: {\n loadTexture() {\n return new TextureLoader().load(this.src, this.onLoaded)\n },\n refreshTexture() {\n this.texture?.dispose()\n if (this.material) {\n this.material.map = this.loadTexture()\n this.material.needsUpdate = true\n }\n },\n onLoaded(texture: Texture) {\n this.texture = texture\n this.resize()\n this.$emit('loaded', texture)\n },\n resize() {\n if (!this.renderer || !this.texture) return\n const screen = this.renderer.size\n const iW = this.texture.image.width\n const iH = this.texture.image.height\n const iRatio = iW / iH\n let w = 1, h = 1\n if (this.width && this.height) {\n w = this.width * screen.wWidth / screen.width\n h = this.height * screen.wHeight / screen.height\n } else if (this.width) {\n w = this.width * screen.wWidth / screen.width\n h = w / iRatio\n } else if (this.height) {\n h = this.height * screen.wHeight / screen.height\n w = h * iRatio\n } else {\n if (iRatio > 1) w = h * iRatio\n else h = w / iRatio\n }\n if (this.mesh) {\n this.mesh.scale.x = w\n this.mesh.scale.y = h\n }\n },\n },\n __hmrId: 'Image',\n})\n","import { defineComponent } from 'vue'\nimport { InstancedMesh } from 'three'\nimport Mesh from './Mesh'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: Mesh,\n props: {\n count: { type: Number, required: true },\n },\n methods: {\n initMesh() {\n if (!this.renderer) return\n\n if (!this.geometry || !this.material) {\n console.error('Missing geometry and/or material')\n return false\n }\n\n this.mesh = new InstancedMesh(this.geometry, this.material, this.count)\n this.mesh.userData.component = this\n\n bindProp(this, 'castShadow', this.mesh)\n bindProp(this, 'receiveShadow', this.mesh)\n\n if (this.onPointerEnter ||\n this.onPointerOver ||\n this.onPointerMove ||\n this.onPointerLeave ||\n this.onPointerDown ||\n this.onPointerUp ||\n this.onClick) {\n this.renderer.three.addIntersectObject(this.mesh)\n }\n\n this.initObject3D(this.mesh)\n },\n },\n __hmrId: 'InstancedMesh',\n})\n","import { defineComponent } from 'vue'\nimport { Sprite, SpriteMaterial, Texture, TextureLoader } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\n\ninterface SpriteSetupInterface extends Object3DSetupInterface {\n texture?: Texture\n material?: SpriteMaterial\n sprite?: Sprite\n}\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['loaded'],\n props: {\n src: { type: String, required: true },\n },\n setup(): SpriteSetupInterface {\n return {}\n },\n created() {\n this.texture = new TextureLoader().load(this.src, this.onLoaded)\n this.material = new SpriteMaterial({ map: this.texture })\n this.sprite = new Sprite(this.material)\n this.initObject3D(this.sprite)\n },\n unmounted() {\n this.texture?.dispose()\n this.material?.dispose()\n },\n methods: {\n onLoaded() {\n this.updateUV()\n this.$emit('loaded')\n },\n updateUV() {\n if (!this.texture || !this.sprite) return\n\n const iWidth = this.texture.image.width\n const iHeight = this.texture.image.height\n const iRatio = iWidth / iHeight\n\n let x = 0.5, y = 0.5\n if (iRatio > 1) {\n x = 0.5 * iRatio\n } else {\n y = 0.5 / iRatio\n }\n\n const positions = this.sprite.geometry.attributes.position.array as Array\n positions[0] = -x; positions[1] = -y\n positions[5] = x; positions[6] = -y\n positions[10] = x; positions[11] = y\n positions[15] = -x; positions[16] = y\n this.sprite.geometry.attributes.position.needsUpdate = true\n },\n },\n __hmrId: 'Sprite',\n})\n","import { defineComponent } from 'vue'\nimport { BufferGeometry, Material, Points } from 'three'\nimport Object3D, { Object3DSetupInterface } from '../core/Object3D'\nimport { MeshInjectionKey } from './Mesh'\n\nexport interface PointsSetupInterface extends Object3DSetupInterface {\n mesh?: Points\n points?: Points\n geometry?: BufferGeometry\n material?: Material\n}\n\nexport interface PointsInterface extends PointsSetupInterface {\n setGeometry(geometry: BufferGeometry): void\n setMaterial(material: Material): void\n}\n\n// not really a mesh, but allow us to easily get geometry/material support\nexport default defineComponent({\n extends: Object3D,\n setup(): PointsSetupInterface {\n return {}\n },\n provide() {\n return {\n [MeshInjectionKey as symbol]: this,\n }\n },\n mounted() {\n this.mesh = this.points = new Points(this.geometry, this.material)\n this.initObject3D(this.mesh)\n },\n methods: {\n setGeometry(geometry: BufferGeometry) {\n this.geometry = geometry\n if (this.mesh) this.mesh.geometry = geometry\n },\n setMaterial(material: Material) {\n this.material = material\n if (this.mesh) this.mesh.material = material\n },\n },\n})\n","import { Object3D as TObject3D } from 'three'\nimport { defineComponent } from 'vue'\nimport Object3D from '../core/Object3D'\n\nexport default defineComponent({\n extends: Object3D,\n emits: ['before-load', 'load', 'progress', 'error'],\n props: {\n src: { type: String, required: true },\n },\n data() {\n return {\n progress: 0,\n }\n },\n methods: {\n onLoad(model: TObject3D) {\n this.$emit('load', model)\n },\n onProgress(progress: ProgressEvent) {\n this.progress = progress.loaded / progress.total\n this.$emit('progress', progress)\n },\n onError(error: ErrorEvent) {\n this.$emit('error', error)\n },\n },\n})\n","import { defineComponent } from 'vue'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new GLTFLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (gltf) => {\n this.onLoad(gltf)\n this.initObject3D(gltf.scene)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent } from 'vue'\nimport { FBXLoader } from 'three/examples/jsm/loaders/FBXLoader.js'\nimport Model from './Model'\n\nexport default defineComponent({\n extends: Model,\n created() {\n const loader = new FBXLoader()\n this.$emit('before-load', loader)\n loader.load(this.src, (fbx) => {\n this.onLoad(fbx)\n this.initObject3D(fbx)\n }, this.onProgress, this.onError)\n },\n})\n","import { defineComponent, inject, InjectionKey } from 'vue'\nimport { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'\nimport { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\n\ninterface EffectComposerSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposer\n}\n\nexport interface EffectComposerInterface extends EffectComposerSetupInterface {\n addPass(pass: Pass): void\n removePass(pass: Pass): void\n}\n\nexport const ComposerInjectionKey: InjectionKey = Symbol('Composer')\n\nexport default defineComponent({\n setup(): EffectComposerSetupInterface {\n const renderer = inject(RendererInjectionKey)\n return { renderer }\n },\n provide() {\n return {\n [ComposerInjectionKey as symbol]: this,\n }\n },\n created() {\n if (!this.renderer) {\n console.error('Renderer not found')\n return\n }\n const renderer = this.renderer\n\n const composer = new EffectComposer(this.renderer.renderer)\n this.composer = composer\n this.renderer.composer = composer\n\n // this.renderer.onInit(() => {\n renderer.addListener('init', () => {\n renderer.renderer.autoClear = false\n this.resize()\n renderer.addListener('resize', this.resize)\n })\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n addPass(pass: Pass) {\n this.composer?.addPass(pass)\n },\n removePass(pass: Pass) {\n this.composer?.removePass(pass)\n },\n resize() {\n if (this.composer && this.renderer) {\n this.composer.setSize(this.renderer.size.width, this.renderer.size.height)\n }\n },\n },\n render() {\n return this.$slots.default ? this.$slots.default() : []\n },\n __hmrId: 'EffectComposer',\n})\n","import { Pass } from 'three/examples/jsm/postprocessing/Pass'\nimport { defineComponent } from 'vue'\nimport { RendererInjectionKey, RendererInterface } from '../core/Renderer'\nimport { ComposerInjectionKey, EffectComposerInterface } from './EffectComposer'\n\nexport interface EffectSetupInterface {\n renderer?: RendererInterface\n composer?: EffectComposerInterface\n pass?: Pass\n}\n\nexport default defineComponent({\n // inject for sub components\n inject: {\n renderer: RendererInjectionKey as symbol,\n composer: ComposerInjectionKey as symbol,\n },\n emits: ['ready'],\n setup(): EffectSetupInterface {\n return {}\n },\n created() {\n if (!this.composer) {\n console.error('Missing parent EffectComposer')\n }\n if (!this.renderer) {\n console.error('Missing parent Renderer')\n }\n },\n unmounted() {\n if (this.pass) {\n this.composer?.removePass(this.pass);\n (this.pass as any).dispose?.()\n }\n },\n methods: {\n initEffectPass(pass: Pass) {\n this.pass = pass\n this.composer?.addPass(pass)\n this.$emit('ready', pass)\n },\n },\n render() {\n return []\n },\n __hmrId: 'EffectPass',\n})\n","import { defineComponent } from 'vue'\nimport { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n const pass = new RenderPass(this.renderer.scene, this.renderer.camera)\n this.initEffectPass(pass)\n },\n __hmrId: 'RenderPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n focus: { type: Number, default: 1 },\n aperture: { type: Number, default: 0.025 },\n maxblur: { type: Number, default: 0.01 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const params = {\n focus: this.focus,\n aperture: this.aperture,\n maxblur: this.maxblur,\n width: this.renderer.size.width,\n height: this.renderer.size.height,\n }\n\n const pass = new BokehPass(this.renderer.scene, this.renderer.camera, params)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'BokehPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n noiseIntensity: { type: Number, default: 0.5 },\n scanlinesIntensity: { type: Number, default: 0.05 },\n scanlinesCount: { type: Number, default: 4096 },\n grayscale: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n const pass = new FilmPass(this.noiseIntensity, this.scanlinesIntensity, this.scanlinesCount, this.grayscale)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'FilmPass',\n})\n","import { defineComponent } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport { FXAAShader } from 'three/examples/jsm/shaders/FXAAShader.js'\nimport EffectPass from './EffectPass'\nimport { SizeInterface } from '../core/useThree'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n const pass = new ShaderPass(FXAAShader)\n\n // resize will be first called in renderer init\n this.renderer?.addListener('resize', this.resize)\n\n this.initEffectPass(pass)\n },\n unmounted() {\n this.renderer?.removeListener('resize', this.resize)\n },\n methods: {\n resize({ size }: { size: SizeInterface }) {\n if (this.pass) {\n const { resolution } = (this.pass as ShaderPass).material.uniforms\n resolution.value.x = 1 / size.width\n resolution.value.y = 1 / size.height\n }\n },\n },\n __hmrId: 'FXAAPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { HalftonePass } from 'three/examples/jsm/postprocessing/HalftonePass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n shape: { type: Number, default: 1 },\n radius: { type: Number, default: 4 },\n rotateR: { type: Number, default: Math.PI / 12 * 1 },\n rotateG: { type: Number, default: Math.PI / 12 * 2 },\n rotateB: { type: Number, default: Math.PI / 12 * 3 },\n scatter: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const pass = new HalftonePass(this.renderer.size.width, this.renderer.size.height, {})\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n pass.uniforms[p].value = this[p]\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'HalftonePass',\n})\n","import { defineComponent } from 'vue'\nimport { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n created() {\n if (!this.renderer) return\n\n const pass = new SMAAPass(this.renderer.size.width, this.renderer.size.height)\n this.initEffectPass(pass)\n },\n __hmrId: 'SMAAPass',\n})\n","import { defineComponent } from 'vue'\nimport { SSAOPass } from 'three/examples/jsm/postprocessing/SSAOPass.js'\nimport EffectPass from './EffectPass'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n options: {\n type: Object,\n default: () => ({}),\n },\n },\n created() {\n if (!this.renderer) return\n\n if (!this.renderer.scene) {\n console.error('Missing Scene')\n return\n }\n if (!this.renderer.camera) {\n console.error('Missing Camera')\n return\n }\n\n const pass = new SSAOPass(\n this.renderer.scene,\n this.renderer.camera,\n this.renderer.size.width,\n this.renderer.size.height\n )\n\n Object.keys(this.options).forEach(key => {\n // @ts-ignore\n pass[key] = this.options[key]\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'SSAOPass',\n})\n","export default {\n uniforms: {},\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n varying vec2 vUv;\n void main() {\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n }\n `,\n}\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n blurRadius: { value: 0 },\n gradientRadius: { value: 0 },\n start: { value: new Vector2() },\n end: { value: new Vector2() },\n delta: { value: new Vector2() },\n texSize: { value: new Vector2() },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform float blurRadius;\n uniform float gradientRadius;\n uniform vec2 start;\n uniform vec2 end;\n uniform vec2 delta;\n uniform vec2 texSize;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n\n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vUv * texSize - start, normal)) / gradientRadius) * blurRadius;\n for (float t = -30.0; t <= 30.0; t++) {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 texel = texture2D(tDiffuse, vUv + delta / texSize * percent * radius);\n // vec4 texel2 = texture2D(tDiffuse, vUv + vec2(-delta.y, delta.x) / texSize * percent * radius);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n // texel2.rgb *= texel2.a;\n\n color += texel * weight;\n total += 2.0 * weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport TiltShift from '../shaders/TiltShift'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nconst props = {\n blurRadius: { type: Number, default: 10 },\n gradientRadius: { type: Number, default: 100 },\n start: { type: Object as PropType, default: () => ({ x: 0, y: 100 }) },\n end: { type: Object as PropType, default: () => ({ x: 10, y: 100 }) },\n} as const\n\ninterface TiltShiftPassSetupInterface {\n uniforms1: {[name: string]: { value: any }}\n uniforms2: {[name: string]: { value: any }}\n pass1?: ShaderPass\n pass2?: ShaderPass\n}\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n setup(): TiltShiftPassSetupInterface {\n return { uniforms1: {}, uniforms2: {} }\n },\n created() {\n if (!this.composer) return\n\n this.pass1 = new ShaderPass(TiltShift)\n this.pass2 = new ShaderPass(TiltShift)\n\n const uniforms1 = this.uniforms1 = this.pass1.uniforms\n const uniforms2 = this.uniforms2 = this.pass2.uniforms\n\n // shared uniforms\n uniforms2.blurRadius = uniforms1.blurRadius\n uniforms2.gradientRadius = uniforms1.gradientRadius\n uniforms2.start = uniforms1.start\n uniforms2.end = uniforms1.end\n uniforms2.texSize = uniforms1.texSize\n\n bindProp(this, 'blurRadius', uniforms1.blurRadius, 'value')\n bindProp(this, 'gradientRadius', uniforms1.gradientRadius, 'value')\n\n this.updateFocusLine();\n\n ['start', 'end'].forEach(p => {\n // @ts-ignore\n watch(() => this[p], this.updateFocusLine, { deep: true })\n })\n\n this.pass1.setSize = (width: number, height: number) => {\n uniforms1.texSize.value.set(width, height)\n }\n\n this.initEffectPass(this.pass1)\n this.composer.addPass(this.pass2)\n },\n unmounted() {\n if (this.composer && this.pass2) this.composer.removePass(this.pass2)\n },\n methods: {\n updateFocusLine() {\n this.uniforms1.start.value.copy(this.start)\n this.uniforms1.end.value.copy(this.end)\n const dv = new Vector2().copy(this.end as Vector2).sub(this.start as Vector2).normalize()\n this.uniforms1.delta.value.copy(dv)\n this.uniforms2.delta.value.set(-dv.y, dv.x)\n },\n },\n __hmrId: 'TiltShiftPass',\n})\n","import { defineComponent, watch } from 'vue'\nimport { Vector2 } from 'three'\nimport { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js'\nimport EffectPass from './EffectPass'\n\nconst props = {\n strength: { type: Number, default: 1.5 },\n radius: { type: Number, default: 0 },\n threshold: { type: Number, default: 0 },\n} as const\n\nexport default defineComponent({\n extends: EffectPass,\n props,\n created() {\n if (!this.renderer) return\n\n const size = new Vector2(this.renderer.size.width, this.renderer.size.height)\n const pass = new UnrealBloomPass(size, this.strength, this.radius, this.threshold)\n\n Object.keys(props).forEach(p => {\n // @ts-ignore\n watch(() => this[p], (value) => { pass.uniforms[p].value = value })\n })\n\n this.initEffectPass(pass)\n },\n __hmrId: 'UnrealBloomPass',\n})\n","// From https://github.com/evanw/glfx.js\nimport { Vector2 } from 'three'\nimport DefaultShader from './default'\n\nexport default {\n uniforms: {\n tDiffuse: { value: null },\n center: { value: new Vector2(0.5, 0.5) },\n strength: { value: 0 },\n },\n vertexShader: DefaultShader.vertexShader,\n fragmentShader: `\n uniform sampler2D tDiffuse;\n uniform vec2 center;\n uniform float strength;\n varying vec2 vUv;\n\n float random(vec3 scale, float seed) {\n /* use the fragment position for a different seed per-pixel */\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n }\n \n void main() {\n vec4 color = vec4(0.0);\n float total = 0.0;\n vec2 toCenter = center - vUv;\n \n /* randomize the lookup values to hide the fixed number of samples */\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n \n for (float t = 0.0; t <= 40.0; t++) {\n float percent = (t + offset) / 40.0;\n float weight = 4.0 * (percent - percent * percent);\n vec4 texel = texture2D(tDiffuse, vUv + toCenter * percent * strength);\n\n /* switch to pre-multiplied alpha to correctly blur transparent images */\n texel.rgb *= texel.a;\n\n color += texel * weight;\n total += weight;\n }\n\n gl_FragColor = color / total;\n\n /* switch back from pre-multiplied alpha */\n gl_FragColor.rgb /= gl_FragColor.a + 0.00001;\n }\n `,\n}\n","import { defineComponent, PropType } from 'vue'\nimport { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js'\nimport EffectPass from './EffectPass'\nimport ZoomBlur from '../shaders/ZoomBlur'\nimport { Vector2PropInterface } from '../core/Object3D'\nimport { bindProp } from '../tools'\n\nexport default defineComponent({\n extends: EffectPass,\n props: {\n center: { type: Object as PropType, default: () => ({ x: 0.5, y: 0.5 }) },\n strength: { type: Number, default: 0.5 },\n },\n created() {\n const pass = new ShaderPass(ZoomBlur)\n\n bindProp(this, 'center', pass.uniforms.center, 'value')\n bindProp(this, 'strength', pass.uniforms.strength, 'value')\n\n this.initEffectPass(pass)\n },\n __hmrId: 'ZoomBlurPass',\n})\n","import { App, createApp as _createApp } from 'vue'\nimport * as TROIS from './index'\n\nexport const TroisJSVuePlugin = {\n install(app: App): void {\n const comps = [\n 'Camera',\n 'OrthographicCamera',\n 'PerspectiveCamera',\n 'Raycaster',\n 'Renderer',\n 'Scene',\n 'Group',\n\n 'CubeCamera',\n\n 'AmbientLight',\n 'DirectionalLight',\n 'HemisphereLight',\n 'PointLight',\n 'RectAreaLight',\n 'SpotLight',\n\n 'BasicMaterial',\n 'LambertMaterial',\n 'MatcapMaterial',\n 'PhongMaterial',\n 'PhysicalMaterial',\n 'PointsMaterial',\n 'ShaderMaterial',\n 'StandardMaterial',\n 'SubSurfaceMaterial',\n 'ToonMaterial',\n\n 'Texture',\n 'CubeTexture',\n\n 'BufferGeometry',\n\n 'Mesh',\n\n 'Box', 'BoxGeometry',\n 'Circle', 'CircleGeometry',\n 'Cone', 'ConeGeometry',\n 'Cylinder', 'CylinderGeometry',\n 'Dodecahedron', 'DodecahedronGeometry',\n 'Icosahedron', 'IcosahedronGeometry',\n 'Lathe', 'LatheGeometry',\n 'Octahedron', 'OctahedronGeometry',\n 'Plane', 'PlaneGeometry',\n 'Polyhedron', 'PolyhedronGeometry',\n 'Ring', 'RingGeometry',\n 'Sphere', 'SphereGeometry',\n 'Tetrahedron', 'TetrahedronGeometry',\n 'Text',\n 'Torus', 'TorusGeometry',\n 'TorusKnot', 'TorusKnotGeometry',\n 'Tube', 'TubeGeometry',\n\n 'Image',\n 'InstancedMesh',\n 'Points',\n 'Sprite',\n\n 'FbxModel',\n 'GltfModel',\n\n 'BokehPass',\n 'EffectComposer',\n 'FilmPass',\n 'FXAAPass',\n 'HalftonePass',\n 'RenderPass',\n 'SAOPass',\n 'SMAAPass',\n 'SSAOPass',\n 'TiltShiftPass',\n 'UnrealBloomPass',\n 'ZoomBlurPass',\n ]\n\n comps.forEach(comp => {\n // @ts-ignore\n app.component(comp, TROIS[comp])\n })\n },\n}\n\nexport function createApp(params: any): App {\n return _createApp(params).use(TroisJSVuePlugin)\n}\n","import { Texture, TextureLoader } from 'three'\n\nexport interface TextureConfigInterface {\n src: string\n}\n\nexport interface TexturesInterface {\n loader: TextureLoader\n count: number\n textures: Texture[],\n loadProgress: number\n loadTextures(images: TextureConfigInterface[], cb: {() : void}): void\n dispose(): void\n}\n\nexport default function useTextures(): TexturesInterface {\n const obj: TexturesInterface = {\n loader: new TextureLoader(),\n count: 0,\n textures: [],\n loadProgress: 0,\n loadTextures,\n dispose,\n }\n return obj\n\n function loadTextures(images: TextureConfigInterface[], cb: {() : void}) {\n obj.count = images.length\n obj.textures.splice(0)\n obj.loadProgress = 0\n Promise.all(images.map(loadTexture)).then(cb)\n }\n\n function loadTexture(img: TextureConfigInterface, index: number) {\n return new Promise(resolve => {\n obj.loader.load(\n img.src,\n texture => {\n obj.loadProgress += 1 / obj.count\n obj.textures[index] = texture\n resolve(texture)\n }\n )\n })\n }\n\n function dispose() {\n obj.textures.forEach(t => t.dispose())\n }\n}\n"],"names":["applyObjectProps","dst","options","setter","key","value","bindObjectProp","src","prop","apply","r","toRef","watch","bindObjectProps","ref","setFromProp","o","bindProps","props","bindProp","srcProp","dstProp","_dstProp","propsValues","exclude","values","lerp","value1","value2","amount","limit","val","min","max","MATCAP_ROOT","DEFAULT_MATCAP","getMatcapUrl","hash","format","fileName","getMatcapFormatString","useRaycaster","camera","resetPosition","Vector3","raycaster","Raycaster","position","plane","Plane","coords","objects","recursive","usePointer","domElement","intersectObjects","intersectRecursive","touch","resetOnEnd","onEnter","onMove","onLeave","onClick","onIntersectEnter","onIntersectOver","onIntersectMove","onIntersectLeave","onIntersectClick","Vector2","positionN","positionV3","obj","addListeners","removeListeners","intersect","reset","updatePosition","event","x","y","rect","_intersectObjects","getIntersectObjects","intersects","offObjects","iMeshes","_a","_b","_c","object","component","getComponent","InstancedMesh","overEvent","enterEvent","moveEvent","leaveEvent","pointerEnter","pointerMove","pointerClick","pointerLeave","parent","useThree","params","config","size","beforeRenderCallbacks","renderer","createRenderer","init","dispose","render","renderC","setSize","addIntersectObject","removeIntersectObject","WebGLRenderer","onResize","initPointer","cameraCtrl","OrbitControls","onBeforeRender","pointerConf","pointer","cb","c","i","elt","width","height","pCamera","oCamera","wsize","getCameraSize","vFOV","h","RendererInjectionKey","defineComponent","attrs","initCallbacks","mountedCallbacks","afterRenderCallbacks","resizeCallbacks","canvas","matches","three","watchEffect","renderFn","scene","composer","e","type","callbacks","index","time","p$1","cameraSetProp","updateProjectionMatrix","OrthographicCamera","Camera","inject","p","PerspectiveCamera","v","SceneInjectionKey","Scene","provide","setBackground","Color","Texture","pointerProps","o3d","instance","getCurrentInstance","Group","Object3D","emptyCallBack","CubeCamera","rendererC","cubeRT","WebGLCubeRenderTarget","RGBAFormat","LinearMipmapLinearFilter","cubeCamera","updateRT","m","onUnmounted","MeshInjectionKey","Mesh","mesh","TMesh","geometry","material","prev","oldGeo","meshComponent","name","createGeometry","Geometry","bufferAttributes","BufferGeometry","attribute","bufferAttribute","BufferAttribute","geometryComponent","comp","BoxGeometry","CircleGeometry","ConeGeometry","CylinderGeometry","DodecahedronGeometry","ExtrudeGeometry","IcosahedronGeometry","LatheGeometry","OctahedronGeometry","PlaneGeometry","PolyhedronGeometry","RingGeometry","SphereGeometry","ShapeGeometry","TetrahedronGeometry","TorusGeometry","TorusKnotGeometry","Curve","curve","CatmullRomCurve3","TubeGeometry","points","updateTubeGeometryPoints","tube","radialSegments","radius","tubularSegments","closed","frames","pAttribute","nAttribute","normal","P","updateSegment","N","B","j","sin","cos","n","SpotLight","DirectionalLight","light","AmbientLight","Light","HemisphereLight","PointLight","RectAreaLight","RectAreaLightUniformsLib","lightHelper","RectAreaLightHelper","MaterialInjectionKey","BaseMaterial","needsUpdate","dstVal","texture","materialComponent","createMaterial","BasicMaterial","opts","MeshBasicMaterial","LambertMaterial","MeshLambertMaterial","PhongMaterial","MeshPhongMaterial","PhysicalMaterial","MeshPhysicalMaterial","PointsMaterial","TPointsMaterial","ShadowMaterial","TShadowMaterial","StandardMaterial","MeshStandardMaterial","ToonMaterial","MeshToonMaterial","MatcapMaterial","TextureLoader","MeshMatcapMaterial","defaultVertexShader","defaultFragmentShader","ShaderMaterial","replaceAll","string","find","replace","meshphongFragHead","ShaderChunk","meshphongFragBody","SubsurfaceScatteringShader","UniformsUtils","ShaderLib","SubSurfaceMaterial","Material","uniforms","d","t","CubeTexture","CubeReflectionMapping","CubeTextureLoader","VideoTexture","video","Box","Circle","Cone","Cylinder","Dodecahedron","Icosahedron","Lathe","Octahedron","Polyhedron","Ring","Sphere","Tetrahedron","Text","loader","FontLoader","font","TextGeometry","Torus","TorusKnot","Tube","DoubleSide","screen","iW","iH","iRatio","w","Sprite","SpriteMaterial","iWidth","iHeight","positions","Points","model","progress","error","GLTF","Model","GLTFLoader","gltf","FBX","FBXLoader","fbx","ComposerInjectionKey","EffectComposer","pass","s$1","RenderPass","EffectPass","BokehPass","FilmPass","FXAAPass","ShaderPass","FXAAShader","resolution","HalftonePass","SMAAPass","SSAOPass","r$1","DefaultShader","TiltShift","uniforms1","uniforms2","dv","UnrealBloomPass","ZoomBlur","TroisJSVuePlugin","app","TROIS","createApp","_createApp","useTextures","loadTextures","images","loadTexture","img","resolve"],"mappings":"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"} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..0131948 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2657 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.16.4", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== + +"@babel/types@^7.6.1", "@babel/types@^7.9.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@emmetio/abbreviation@^2.3.1": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@emmetio/abbreviation/-/abbreviation-2.3.1.tgz#b5ec06b9629ec63292f3a378e716dcb3071924ea" + integrity sha512-QXgYlXZGprqb6aCBJPPWVBN/Jb69khJF73GGJkOk//PoMgSbPGuaHn1hCRolctnzlBHjCIC6Om97Pw46/1A23g== + dependencies: + "@emmetio/scanner" "^1.0.2" + +"@emmetio/css-abbreviation@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.6.tgz#f37f7ffb8d76efc40d3629739758531bbe810d7b" + integrity sha512-bvuPogt0OvwcILRg+ZD/oej1H72xwOhUDPWOmhCWLJrZZ8bMTazsWnvw8a8noaaVqUhOE9PsC0tYgGVv5N7fsw== + dependencies: + "@emmetio/scanner" "^1.0.2" + +"@emmetio/scanner@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emmetio/scanner/-/scanner-1.0.2.tgz#ee96ecb9f9cfa5f7a876a13011ae74ee06e9100d" + integrity sha512-1ESCGgXRgn1r29hRmz8K0G4Ywr5jDWezMgRnICComBCWmg3znLWU8+tmakuM1og1Vn4W/sauvlABl/oq2pve8w== + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" + integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== + +"@eslint/eslintrc@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" + integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.1" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.37.0": + version "8.37.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.37.0.tgz#cf1b5fa24217fe007f6487a26d765274925efa7d" + integrity sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A== + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@rollup/plugin-replace@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-3.1.0.tgz#d31e3a90c6b47064f3c9f2ce0ded5bcf0d3b82f6" + integrity sha512-pA3XRUrSKybVYqmH5TqWNZpGxF+VV+1GrYchKgCNIj2vsSOX7CVm2RCtx8p2nrC7xvkziYyK+lSi74T93MU3YA== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@rollup/pluginutils@^4.1.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" + integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + +"@types/three@^0.138.0": + version "0.138.0" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.138.0.tgz#ec9f1d1fd8dffea2e0572f9d815ff5a35cf4dc6b" + integrity sha512-D8AoV7h2kbCfrv/DcebHOFh1WDwyus3HdooBkAwcBikXArdqnsQ38PQ85JCunnvun160oA9jz53GszF3zch3tg== + +"@typescript-eslint/eslint-plugin@^5.0.0", "@typescript-eslint/eslint-plugin@^5.2.0": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.1.tgz#d1ab162a3cd2671b8a1c9ddf6e2db73b14439735" + integrity sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.57.1" + "@typescript-eslint/type-utils" "5.57.1" + "@typescript-eslint/utils" "5.57.1" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.2.0": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.1.tgz#af911234bd4401d09668c5faf708a0570a17a748" + integrity sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA== + dependencies: + "@typescript-eslint/scope-manager" "5.57.1" + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/typescript-estree" "5.57.1" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz#5d28799c0fc8b501a29ba1749d827800ef22d710" + integrity sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw== + dependencies: + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/visitor-keys" "5.57.1" + +"@typescript-eslint/type-utils@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.57.1.tgz#235daba621d3f882b8488040597b33777c74bbe9" + integrity sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw== + dependencies: + "@typescript-eslint/typescript-estree" "5.57.1" + "@typescript-eslint/utils" "5.57.1" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603" + integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA== + +"@typescript-eslint/typescript-estree@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71" + integrity sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw== + dependencies: + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/visitor-keys" "5.57.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.1.tgz#0f97b0bbd88c2d5e2036869f26466be5f4c69475" + integrity sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.57.1" + "@typescript-eslint/types" "5.57.1" + "@typescript-eslint/typescript-estree" "5.57.1" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.57.1": + version "5.57.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e" + integrity sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA== + dependencies: + "@typescript-eslint/types" "5.57.1" + eslint-visitor-keys "^3.3.0" + +"@vitejs/plugin-vue@^2.2.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz#966a6279060eb2d9d1a02ea1a331af071afdcf9e" + integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg== + +"@volar/code-gen@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@volar/code-gen/-/code-gen-0.31.4.tgz#df4157b0eb59193a0b5c8352aeeb29a5d651556c" + integrity sha512-ngivMEbBNd19v+EHdLyCJoIGRaoD9J4P20ZgdCEGf2voztja59u3Tilpf9r9ENy/731nG7XncToYm4+c1t/LhA== + dependencies: + "@volar/shared" "0.31.4" + "@volar/source-map" "0.31.4" + +"@volar/html2pug@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@volar/html2pug/-/html2pug-0.31.4.tgz#711c71bd3cbe91cae6806e06a8e41d806b39cf2a" + integrity sha512-+whoP4C34kbCIRyoojZE6luqs7Ep/0YDBD9yEWu82G1ECLIFoujtkZXHbAHiQH8MIs/GwjUmozd85pUGAVQf1w== + dependencies: + domelementtype "^2.2.0" + domhandler "^4.3.0" + htmlparser2 "^7.2.0" + pug "^3.0.2" + +"@volar/shared@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@volar/shared/-/shared-0.31.4.tgz#aa5cdcd0a58fd12b7b767e014042c88ad78d19ed" + integrity sha512-mKSH4GKFde2t3GVEGibBu84jbCk7O1sccELxTgCGHX7ue4nJqgHup8lXhwyfUOfdJ7eyx9luyDsVuJ4BY3gfeg== + dependencies: + upath "^2.0.1" + vscode-html-languageservice "^4.2.1" + vscode-jsonrpc "^8.0.0-next.5" + vscode-uri "^3.0.3" + +"@volar/source-map@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-0.31.4.tgz#c0ae071b007e560507e28db5ca382a6645f64c85" + integrity sha512-lX/XKKc3ESNt6QArq1T54LSxXvu7ARDctQfkt6qUSNLVR/ccUXwzM+4qiOj39WBbmoDzET33riVYnMXMeGJMvg== + dependencies: + "@volar/shared" "0.31.4" + vscode-languageserver-textdocument "^1.0.3" + +"@volar/transforms@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@volar/transforms/-/transforms-0.31.4.tgz#085c40adce8730929f27b41c60dfca4d286a8b0c" + integrity sha512-081QI2zBvdja4XN3eAtIWmBqDkAyDuuK3xP5mD04T9vMrVfy+WKrzB7n3/Zru7z4DiM70Qo5PoTapQ3Xnz9NzQ== + dependencies: + "@volar/shared" "0.31.4" + vscode-languageserver-types "^3.17.0-next.6" + +"@volar/vue-code-gen@0.31.4": + version "0.31.4" + resolved "https://registry.yarnpkg.com/@volar/vue-code-gen/-/vue-code-gen-0.31.4.tgz#69124ded85513035beeb752a79f860212d78875c" + integrity sha512-1ypZfzQfH+lV8JcOOKfYMTAmD6OUeBQSDwu7YRHQkuvoSQzPiXXrjupi0DvHrcWR0hQfh4yRnme6I+ChutW69w== + dependencies: + "@volar/code-gen" "0.31.4" + "@volar/shared" "0.31.4" + "@volar/source-map" "0.31.4" + "@vue/compiler-core" "^3.2.27" + "@vue/compiler-dom" "^3.2.27" + "@vue/shared" "^3.2.27" + upath "^2.0.1" + +"@vscode/emmet-helper@^2.8.3": + version "2.8.6" + resolved "https://registry.yarnpkg.com/@vscode/emmet-helper/-/emmet-helper-2.8.6.tgz#ee2fa52321d6af8a40310fd9d37b8590a4dabb18" + integrity sha512-IIB8jbiKy37zN8bAIHx59YmnIelY78CGHtThnibD/d3tQOKRY83bYVi9blwmZVUZh6l9nfkYH3tvReaiNxY9EQ== + dependencies: + emmet "^2.3.0" + jsonc-parser "^2.3.0" + vscode-languageserver-textdocument "^1.0.1" + vscode-languageserver-types "^3.15.1" + vscode-uri "^2.1.2" + +"@vue/compiler-core@3.2.47", "@vue/compiler-core@^3.2.27": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz#3e07c684d74897ac9aa5922c520741f3029267f8" + integrity sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + source-map "^0.6.1" + +"@vue/compiler-dom@3.2.47", "@vue/compiler-dom@^3.2.27": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz#a0b06caf7ef7056939e563dcaa9cbde30794f305" + integrity sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ== + dependencies: + "@vue/compiler-core" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/compiler-sfc@3.2.47", "@vue/compiler-sfc@^3.2.20": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz#1bdc36f6cdc1643f72e2c397eb1a398f5004ad3d" + integrity sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.47" + "@vue/compiler-dom" "3.2.47" + "@vue/compiler-ssr" "3.2.47" + "@vue/reactivity-transform" "3.2.47" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + magic-string "^0.25.7" + postcss "^8.1.10" + source-map "^0.6.1" + +"@vue/compiler-ssr@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz#35872c01a273aac4d6070ab9d8da918ab13057ee" + integrity sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw== + dependencies: + "@vue/compiler-dom" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/eslint-config-standard@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz#b362ba67c86caa4e7b44481c2303c9dccc2dc037" + integrity sha512-9+hrEyflDzsGdlBDl9jPV5DIYUx1TOU5OSQqRDKCrNumrxRj5HRWKuk+ocXWnha6uoNRtLC24mY7d/MwqvBCNw== + dependencies: + eslint-config-standard "^16.0.3" + eslint-import-resolver-node "^0.3.4" + eslint-import-resolver-webpack "^0.13.1" + +"@vue/eslint-config-typescript@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-10.0.0.tgz#3b63c8cf276962cb89414857581b9b424acf2820" + integrity sha512-F94cL8ug3FaYXlCfU5/wiGjk1qeadmoBpRGAOBq+qre3Smdupa59dd6ZJrsfRODpsMPyTG7330juMDsUvpZ3Rw== + dependencies: + "@typescript-eslint/eslint-plugin" "^5.0.0" + "@typescript-eslint/parser" "^5.0.0" + vue-eslint-parser "^8.0.0" + +"@vue/reactivity-transform@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz#e45df4d06370f8abf29081a16afd25cffba6d84e" + integrity sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA== + dependencies: + "@babel/parser" "^7.16.4" + "@vue/compiler-core" "3.2.47" + "@vue/shared" "3.2.47" + estree-walker "^2.0.2" + magic-string "^0.25.7" + +"@vue/reactivity@3.2.47", "@vue/reactivity@^3.2.27": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.47.tgz#1d6399074eadfc3ed35c727e2fd707d6881140b6" + integrity sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ== + dependencies: + "@vue/shared" "3.2.47" + +"@vue/runtime-core@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz#406ebade3d5551c00fc6409bbc1eeb10f32e121d" + integrity sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA== + dependencies: + "@vue/reactivity" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/runtime-dom@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz#93e760eeaeab84dedfb7c3eaf3ed58d776299382" + integrity sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA== + dependencies: + "@vue/runtime-core" "3.2.47" + "@vue/shared" "3.2.47" + csstype "^2.6.8" + +"@vue/server-renderer@3.2.47": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz#8aa1d1871fc4eb5a7851aa7f741f8f700e6de3c0" + integrity sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA== + dependencies: + "@vue/compiler-ssr" "3.2.47" + "@vue/shared" "3.2.47" + +"@vue/shared@3.2.47", "@vue/shared@^3.2.27": + version "3.2.47" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.47.tgz#e597ef75086c6e896ff5478a6bfc0a7aa4bbd14c" + integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-find@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" + integrity sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ== + +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assert-never@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.2.1.tgz#11f0e363bf146205fb08193b5c7b90f4d1cf44fe" + integrity sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +babel-walk@3.0.0-canary-5: + version "3.0.0-canary-5" + resolved "https://registry.yarnpkg.com/babel-walk/-/babel-walk-3.0.0-canary-5.tgz#f66ecd7298357aee44955f235a6ef54219104b11" + integrity sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw== + dependencies: + "@babel/types" "^7.9.6" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +cannon@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/cannon/-/cannon-0.6.2.tgz#1e7bc72dd5841982f3c104c2bc578bfa4fb1c572" + integrity sha512-n/7wWSXr8KOSvjad2x0fJHgpMepKjOKi+NdSnjfYyijoDBZnp4JQKgPcpv28jlXoWM+N9zVYU09J0A6Qxx+Y7w== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== + dependencies: + is-regex "^1.0.3" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +constantinople@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" + integrity sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw== + dependencies: + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.1" + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^2.6.8: + version "2.6.21" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" + integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +emmet@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/emmet/-/emmet-2.4.2.tgz#686983e7b8623ad582fc9fbb6515b17d195c0394" + integrity sha512-YgmsMkhUgzhJMgH5noGudfxqrQn1bapvF0y7C1e7A0jWFImsRrrvVslzyZz0919NED/cjFOpVWx7c973V+2S/w== + dependencies: + "@emmetio/abbreviation" "^2.3.1" + "@emmetio/css-abbreviation" "^2.1.6" + +enhanced-resolve@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" + integrity sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.2.0" + tapable "^0.1.8" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-module-lexer@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== + +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== + +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== + +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== + +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== + +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== + +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== + +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== + +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== + +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== + +esbuild@^0.14.21, esbuild@^0.14.27: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== + optionalDependencies: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-standard@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516" + integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== + +eslint-import-resolver-node@^0.3.4, eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" + +eslint-import-resolver-webpack@^0.13.1: + version "0.13.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.2.tgz#fc813df0d08b9265cc7072d22393bda5198bdc1e" + integrity sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg== + dependencies: + array-find "^1.0.0" + debug "^3.2.7" + enhanced-resolve "^0.9.1" + find-root "^1.1.0" + has "^1.0.3" + interpret "^1.4.0" + is-core-module "^2.7.0" + is-regex "^1.1.4" + lodash "^4.17.21" + resolve "^1.20.0" + semver "^5.7.1" + +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.22.0: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-plugin-vue@^8.0.3: + version "8.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz#f13c53547a0c9d64588a675cc5ecc6ccaf63703f" + integrity sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg== + dependencies: + eslint-utils "^3.0.0" + natural-compare "^1.4.0" + nth-check "^2.0.1" + postcss-selector-parser "^6.0.9" + semver "^7.3.5" + vue-eslint-parser "^8.0.1" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.0.0, eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.1.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== + +eslint@^8.1.0: + version "8.37.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.37.0.tgz#1f660ef2ce49a0bfdec0b0d698e0b8b627287412" + integrity sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.2" + "@eslint/js" "8.37.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-visitor-keys "^3.4.0" + espree "^9.5.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.0.0, espree@^9.5.1: + version "9.5.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" + integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.0" + +esquery@^1.4.0, esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1, estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +gsap@^3.5.1: + version "3.11.5" + resolved "https://registry.yarnpkg.com/gsap/-/gsap-3.11.5.tgz#97ef65091f43868be387803f9db277e8cd5bd041" + integrity sha512-Q89nKCLgoX5xUjznh9LcaIUkz54k1voNucT1Rpf9SJNFIQznBwFqt5qUUQbeVInFyN/n18OUJkpeI6CNEDt74w== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +htmlparser2@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" + integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + +ignore@^5.1.1, ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.7.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-expression@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-4.0.0.tgz#c33155962abf21d0afd2552514d67d2ec16fd2ab" + integrity sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== + dependencies: + acorn "^7.1.1" + object-assign "^4.1.1" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-promise@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-regex@^1.0.3, is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +joycon@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== + +js-sdsl@^4.1.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== + +js-stringify@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonc-parser@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" + integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== + +jsonc-parser@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.26.6: + version "0.26.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.26.7.tgz#caf7daf61b34e9982f8228c4527474dac8981d6f" + integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow== + dependencies: + sourcemap-codec "^1.4.8" + +memory-fs@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" + integrity sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.4: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +postcss-selector-parser@^6.0.9: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss@^8.1.10, postcss@^8.4.13: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +promise@^7.0.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +pug-attrs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-3.0.0.tgz#b10451e0348165e31fad1cc23ebddd9dc7347c41" + integrity sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA== + dependencies: + constantinople "^4.0.1" + js-stringify "^1.0.2" + pug-runtime "^3.0.0" + +pug-code-gen@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-3.0.2.tgz#ad190f4943133bf186b60b80de483100e132e2ce" + integrity sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg== + dependencies: + constantinople "^4.0.1" + doctypes "^1.1.0" + js-stringify "^1.0.2" + pug-attrs "^3.0.0" + pug-error "^2.0.0" + pug-runtime "^3.0.0" + void-elements "^3.1.0" + with "^7.0.0" + +pug-error@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-2.0.0.tgz#5c62173cb09c34de2a2ce04f17b8adfec74d8ca5" + integrity sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ== + +pug-filters@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-4.0.0.tgz#d3e49af5ba8472e9b7a66d980e707ce9d2cc9b5e" + integrity sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A== + dependencies: + constantinople "^4.0.1" + jstransformer "1.0.0" + pug-error "^2.0.0" + pug-walk "^2.0.0" + resolve "^1.15.1" + +pug-lexer@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-5.0.1.tgz#ae44628c5bef9b190b665683b288ca9024b8b0d5" + integrity sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w== + dependencies: + character-parser "^2.2.0" + is-expression "^4.0.0" + pug-error "^2.0.0" + +pug-linker@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-4.0.0.tgz#12cbc0594fc5a3e06b9fc59e6f93c146962a7708" + integrity sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw== + dependencies: + pug-error "^2.0.0" + pug-walk "^2.0.0" + +pug-load@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-3.0.0.tgz#9fd9cda52202b08adb11d25681fb9f34bd41b662" + integrity sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ== + dependencies: + object-assign "^4.1.1" + pug-walk "^2.0.0" + +pug-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-6.0.0.tgz#a8fdc035863a95b2c1dc5ebf4ecf80b4e76a1260" + integrity sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw== + dependencies: + pug-error "^2.0.0" + token-stream "1.0.0" + +pug-runtime@^3.0.0, pug-runtime@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-3.0.1.tgz#f636976204723f35a8c5f6fad6acda2a191b83d7" + integrity sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg== + +pug-strip-comments@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz#f94b07fd6b495523330f490a7f554b4ff876303e" + integrity sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ== + dependencies: + pug-error "^2.0.0" + +pug-walk@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-2.0.0.tgz#417aabc29232bb4499b5b5069a2b2d2a24d5f5fe" + integrity sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ== + +pug@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pug/-/pug-3.0.2.tgz#f35c7107343454e43bc27ae0ff76c731b78ea535" + integrity sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw== + dependencies: + pug-code-gen "^3.0.2" + pug-filters "^4.0.0" + pug-lexer "^5.0.1" + pug-linker "^4.0.0" + pug-load "^3.0.0" + pug-parser "^6.0.0" + pug-runtime "^3.0.1" + pug-strip-comments "^2.0.0" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.1, resolve@^1.15.1, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + dependencies: + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-dts@^4.0.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-4.2.3.tgz#04c3615df1ffab4228aa9d540697eaca61e01f47" + integrity sha512-jlcpItqM2efqfIiKzDB/IKOS9E9fDvbkJSGw5GtK/PqPGS9eC3R3JKyw2VvpTktZA+TNgJRMu1NTv244aTUzzQ== + dependencies: + magic-string "^0.26.6" + optionalDependencies: + "@babel/code-frame" "^7.18.6" + +rollup-plugin-esbuild@^4.1.0: + version "4.10.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-4.10.3.tgz#caa66a99b53b21d4939beffc611d76f57191c4cb" + integrity sha512-RILwUCgnCL5vo8vyZ/ZpwcqRuE5KmLizEv6BujBQfgXFZ6ggcS0FiYvQN+gsTJfWCMaU37l0Fosh4eEufyO97Q== + dependencies: + "@rollup/pluginutils" "^4.1.1" + debug "^4.3.3" + es-module-lexer "^0.9.3" + joycon "^3.0.1" + jsonc-parser "^3.0.0" + +"rollup@>=2.59.0 <2.78.0": + version "2.77.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12" + integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.1.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5, semver@^7.3.7: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +stats.js@0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/stats.js/-/stats.js-0.17.0.tgz#b1c3dc46d94498b578b7fd3985b81ace7131cc7d" + integrity sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw== + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tapable@^0.1.8: + version "0.1.10" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + integrity sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +three@^0.138.3: + version "0.138.3" + resolved "https://registry.yarnpkg.com/three/-/three-0.138.3.tgz#7be5153d79dcbf9e9baad82e7faf8c29edda4ed0" + integrity sha512-4t1cKC8gimNyJChJbaklg8W/qj3PpsLJUIFm5LIuAy/hVxxNm1ru2FGTSfbTSsuHmC/7ipsyuGKqrSAKLNtkzg== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +token-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-1.0.0.tgz#cc200eab2613f4166d27ff9afc7ca56d49df6eb4" + integrity sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg== + +tsconfig-paths@^3.14.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^4.1.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +upath@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" + integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vite@^2.6.13: + version "2.9.15" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.15.tgz#2858dd5b2be26aa394a283e62324281892546f0b" + integrity sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup ">=2.59.0 <2.78.0" + optionalDependencies: + fsevents "~2.3.2" + +void-elements@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +vscode-css-languageservice@^5.1.9: + version "5.4.2" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.4.2.tgz#69ea74c000bd653dfc8e458a1720d28b9ffa5cfb" + integrity sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg== + dependencies: + vscode-languageserver-textdocument "^1.0.4" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-html-languageservice@^4.2.1: + version "4.2.5" + resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-4.2.5.tgz#c0cc8ff3d824d16388bbac187e1828749eccf006" + integrity sha512-dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw== + dependencies: + vscode-languageserver-textdocument "^1.0.4" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-json-languageservice@^4.1.10: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4" + integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA== + dependencies: + jsonc-parser "^3.0.0" + vscode-languageserver-textdocument "^1.0.3" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.3" + +vscode-jsonrpc@8.1.0, vscode-jsonrpc@^8.0.0-next.5: + version "8.1.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz#cb9989c65e219e18533cc38e767611272d274c94" + integrity sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw== + +vscode-languageserver-protocol@^3.17.0-next.12: + version "3.17.3" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz#6d0d54da093f0c0ee3060b81612cce0f11060d57" + integrity sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA== + dependencies: + vscode-jsonrpc "8.1.0" + vscode-languageserver-types "3.17.3" + +vscode-languageserver-textdocument@^1.0.1, vscode-languageserver-textdocument@^1.0.3, vscode-languageserver-textdocument@^1.0.4: + version "1.0.8" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz#9eae94509cbd945ea44bca8dcfe4bb0c15bb3ac0" + integrity sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q== + +vscode-languageserver-types@3.17.3, vscode-languageserver-types@^3.15.1, vscode-languageserver-types@^3.16.0, vscode-languageserver-types@^3.17.0-next.6: + version "3.17.3" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64" + integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA== + +vscode-nls@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.2.0.tgz#3cb6893dd9bd695244d8a024bdf746eea665cc3f" + integrity sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng== + +vscode-pug-languageservice@0.31.4: + version "0.31.4" + resolved "https://registry.yarnpkg.com/vscode-pug-languageservice/-/vscode-pug-languageservice-0.31.4.tgz#4679a961607e5f9692bd14156842c9f13582ef61" + integrity sha512-StQWV+v1v+an/pGKNPg4YkODFyKeYpUEzaSAoXIUsIoh7O4Nuv6zjd1M/fPxaMSD6Kk+OH/JGE36hbXsKXOz5A== + dependencies: + "@volar/code-gen" "0.31.4" + "@volar/shared" "0.31.4" + "@volar/source-map" "0.31.4" + "@volar/transforms" "0.31.4" + pug-lexer "^5.0.1" + pug-parser "^6.0.0" + vscode-languageserver-textdocument "^1.0.3" + vscode-languageserver-types "^3.17.0-next.6" + +vscode-typescript-languageservice@0.31.4: + version "0.31.4" + resolved "https://registry.yarnpkg.com/vscode-typescript-languageservice/-/vscode-typescript-languageservice-0.31.4.tgz#b71819c52dc8dfdb3153a398c24661f62886a4ae" + integrity sha512-nsnRPEfg9t3oDlwzm3WTAv0p83vceqCuxvRo/+N7hXbmtaO7WMGCMvJx0xyIuUDS4NgaEK31oMR9FnX9JNcEQQ== + dependencies: + "@volar/shared" "0.31.4" + semver "^7.3.5" + upath "^2.0.1" + vscode-languageserver-protocol "^3.17.0-next.12" + vscode-languageserver-textdocument "^1.0.3" + vscode-nls "^5.0.0" + +vscode-uri@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c" + integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A== + +vscode-uri@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.7.tgz#6d19fef387ee6b46c479e5fb00870e15e58c1eb8" + integrity sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA== + +vscode-vue-languageservice@0.31.4: + version "0.31.4" + resolved "https://registry.yarnpkg.com/vscode-vue-languageservice/-/vscode-vue-languageservice-0.31.4.tgz#ad4fd65e9ed7d8bb6f14cd4e235cb3969b3055f9" + integrity sha512-Pyvtj5iokBilGDH8KY6bocJh8NcIGoFmUksPOOZKBb+4usEHTBtWw/uoH4hjxWwLszMRQuStkXLMaSKtBIv3gQ== + dependencies: + "@volar/code-gen" "0.31.4" + "@volar/html2pug" "0.31.4" + "@volar/shared" "0.31.4" + "@volar/source-map" "0.31.4" + "@volar/transforms" "0.31.4" + "@volar/vue-code-gen" "0.31.4" + "@vscode/emmet-helper" "^2.8.3" + "@vue/reactivity" "^3.2.27" + "@vue/shared" "^3.2.27" + upath "^2.0.1" + vscode-css-languageservice "^5.1.9" + vscode-html-languageservice "^4.2.1" + vscode-json-languageservice "^4.1.10" + vscode-languageserver-protocol "^3.17.0-next.12" + vscode-languageserver-textdocument "^1.0.3" + vscode-pug-languageservice "0.31.4" + vscode-typescript-languageservice "0.31.4" + +vue-eslint-parser@^8.0.0, vue-eslint-parser@^8.0.1: + version "8.3.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz#5d31129a1b3dd89c0069ca0a1c88f970c360bd0d" + integrity sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g== + dependencies: + debug "^4.3.2" + eslint-scope "^7.0.0" + eslint-visitor-keys "^3.1.0" + espree "^9.0.0" + esquery "^1.4.0" + lodash "^4.17.21" + semver "^7.3.5" + +vue-tsc@^0.31.4: + version "0.31.4" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-0.31.4.tgz#cf17f7bca225e6bc0fa577392c07de7b4e1f733a" + integrity sha512-8RnKGmQRo/0rbXkyZmKCOdT62fNWyEaMdS/BDAPE+saGNAniUZsjpOSOjAiLwsQc5qgeI9/mY1W3o4tX7H/7MA== + dependencies: + "@volar/shared" "0.31.4" + vscode-vue-languageservice "0.31.4" + +vue@^3.2.20: + version "3.2.47" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.47.tgz#3eb736cbc606fc87038dbba6a154707c8a34cff0" + integrity sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ== + dependencies: + "@vue/compiler-dom" "3.2.47" + "@vue/compiler-sfc" "3.2.47" + "@vue/runtime-dom" "3.2.47" + "@vue/server-renderer" "3.2.47" + "@vue/shared" "3.2.47" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +with@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/with/-/with-7.0.2.tgz#ccee3ad542d25538a7a7a80aad212b9828495bac" + integrity sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w== + dependencies: + "@babel/parser" "^7.9.6" + "@babel/types" "^7.9.6" + assert-never "^1.2.1" + babel-walk "3.0.0-canary-5" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==