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