@gui-chat-plugin/present3d 0.0.3 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.cjs +1 -1
- package/dist/core.js +2 -11
- package/dist/index.cjs +1 -1
- package/dist/index.js +3 -11
- package/dist/style.css +3 -1
- package/dist/toThreeJS-Cmz9VcXY.js +16571 -0
- package/dist/toThreeJS-MSLJncuP.cjs +4175 -0
- package/dist/vue.cjs +2 -2
- package/dist/vue.js +626 -720
- package/package.json +17 -17
- package/dist/index-B8W7aPbA.js +0 -27687
- package/dist/index-CIaq2DFf.cjs +0 -4175
package/dist/vue.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("./index-CIaq2DFf.cjs"),o=require("vue"),j={type:"change"},L={type:"start"},V={type:"end"},O=new i.Ray,z=new i.Plane,tt=Math.cos(70*i.MathUtils.DEG2RAD),m=new i.Vector3,g=2*Math.PI,c={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},x=1e-6;class et extends i.Controls{constructor(t,e=null){super(t,e),this.state=c.NONE,this.target=new i.Vector3,this.cursor=new i.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"},this.mouseButtons={LEFT:i.MOUSE.ROTATE,MIDDLE:i.MOUSE.DOLLY,RIGHT:i.MOUSE.PAN},this.touches={ONE:i.TOUCH.ROTATE,TWO:i.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new i.Vector3,this._lastQuaternion=new i.Quaternion,this._lastTargetPosition=new i.Vector3,this._quat=new i.Quaternion().setFromUnitVectors(t.up,new i.Vector3(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new i.Spherical,this._sphericalDelta=new i.Spherical,this._scale=1,this._panOffset=new i.Vector3,this._rotateStart=new i.Vector2,this._rotateEnd=new i.Vector2,this._rotateDelta=new i.Vector2,this._panStart=new i.Vector2,this._panEnd=new i.Vector2,this._panDelta=new i.Vector2,this._dollyStart=new i.Vector2,this._dollyEnd=new i.Vector2,this._dollyDelta=new i.Vector2,this._dollyDirection=new i.Vector3,this._mouse=new i.Vector2,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=st.bind(this),this._onPointerDown=it.bind(this),this._onPointerUp=ot.bind(this),this._onContextMenu=pt.bind(this),this._onMouseWheel=rt.bind(this),this._onKeyDown=lt.bind(this),this._onTouchStart=ht.bind(this),this._onTouchMove=ct.bind(this),this._onMouseDown=nt.bind(this),this._onMouseMove=at.bind(this),this._interceptControlDown=dt.bind(this),this._interceptControlUp=ut.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(t){super.connect(t),this.domElement.addEventListener("pointerdown",this._onPointerDown),this.domElement.addEventListener("pointercancel",this._onPointerUp),this.domElement.addEventListener("contextmenu",this._onContextMenu),this.domElement.addEventListener("wheel",this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener("keydown",this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction="none"}disconnect(){this.domElement.removeEventListener("pointerdown",this._onPointerDown),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.domElement.removeEventListener("pointercancel",this._onPointerUp),this.domElement.removeEventListener("wheel",this._onMouseWheel),this.domElement.removeEventListener("contextmenu",this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener("keydown",this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction="auto"}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(t){t.addEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=t}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener("keydown",this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(j),this.update(),this.state=c.NONE}update(t=null){const e=this.object.position;m.copy(e).sub(this.target),m.applyQuaternion(this._quat),this._spherical.setFromVector3(m),this.autoRotate&&this.state===c.NONE&&this._rotateLeft(this._getAutoRotationAngle(t)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let n=this.minAzimuthAngle,a=this.maxAzimuthAngle;isFinite(n)&&isFinite(a)&&(n<-Math.PI?n+=g:n>Math.PI&&(n-=g),a<-Math.PI?a+=g:a>Math.PI&&(a-=g),n<=a?this._spherical.theta=Math.max(n,Math.min(a,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(n+a)/2?Math.max(n,this._spherical.theta):Math.min(a,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let l=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const p=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),l=p!=this._spherical.radius}if(m.setFromSpherical(this._spherical),m.applyQuaternion(this._quatInverse),e.copy(this.target).add(m),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let p=null;if(this.object.isPerspectiveCamera){const u=m.length();p=this._clampDistance(u*this._scale);const _=u-p;this.object.position.addScaledVector(this._dollyDirection,_),this.object.updateMatrixWorld(),l=!!_}else if(this.object.isOrthographicCamera){const u=new i.Vector3(this._mouse.x,this._mouse.y,0);u.unproject(this.object);const _=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),l=_!==this.object.zoom;const S=new i.Vector3(this._mouse.x,this._mouse.y,0);S.unproject(this.object),this.object.position.sub(S).add(u),this.object.updateMatrixWorld(),p=m.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;p!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(p).add(this.object.position):(O.origin.copy(this.object.position),O.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(O.direction))<tt?this.object.lookAt(this.target):(z.setFromNormalAndCoplanarPoint(this.object.up,this.target),O.intersectPlane(z,this.target))))}else if(this.object.isOrthographicCamera){const p=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),p!==this.object.zoom&&(this.object.updateProjectionMatrix(),l=!0)}return this._scale=1,this._performCursorZoom=!1,l||this._lastPosition.distanceToSquared(this.object.position)>x||8*(1-this._lastQuaternion.dot(this.object.quaternion))>x||this._lastTargetPosition.distanceToSquared(this.target)>x?(this.dispatchEvent(j),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(t){return t!==null?g/60*this.autoRotateSpeed*t:g/60/60*this.autoRotateSpeed}_getZoomScale(t){const e=Math.abs(t*.01);return Math.pow(.95,this.zoomSpeed*e)}_rotateLeft(t){this._sphericalDelta.theta-=t}_rotateUp(t){this._sphericalDelta.phi-=t}_panLeft(t,e){m.setFromMatrixColumn(e,0),m.multiplyScalar(-t),this._panOffset.add(m)}_panUp(t,e){this.screenSpacePanning===!0?m.setFromMatrixColumn(e,1):(m.setFromMatrixColumn(e,0),m.crossVectors(this.object.up,m)),m.multiplyScalar(t),this._panOffset.add(m)}_pan(t,e){const n=this.domElement;if(this.object.isPerspectiveCamera){const a=this.object.position;m.copy(a).sub(this.target);let l=m.length();l*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*t*l/n.clientHeight,this.object.matrix),this._panUp(2*e*l/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(t*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(e*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(t,e){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const n=this.domElement.getBoundingClientRect(),a=t-n.left,l=e-n.top,p=n.width,u=n.height;this._mouse.x=a/p*2-1,this._mouse.y=-(l/u)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(t){return Math.max(this.minDistance,Math.min(this.maxDistance,t))}_handleMouseDownRotate(t){this._rotateStart.set(t.clientX,t.clientY)}_handleMouseDownDolly(t){this._updateZoomParameters(t.clientX,t.clientX),this._dollyStart.set(t.clientX,t.clientY)}_handleMouseDownPan(t){this._panStart.set(t.clientX,t.clientY)}_handleMouseMoveRotate(t){this._rotateEnd.set(t.clientX,t.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(g*this._rotateDelta.x/e.clientHeight),this._rotateUp(g*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(t){this._dollyEnd.set(t.clientX,t.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(t){this._panEnd.set(t.clientX,t.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(t){this._updateZoomParameters(t.clientX,t.clientY),t.deltaY<0?this._dollyIn(this._getZoomScale(t.deltaY)):t.deltaY>0&&this._dollyOut(this._getZoomScale(t.deltaY)),this.update()}_handleKeyDown(t){let e=!1;switch(t.code){case this.keys.UP:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(g*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),e=!0;break;case this.keys.BOTTOM:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(-g*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),e=!0;break;case this.keys.LEFT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(g*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),e=!0;break;case this.keys.RIGHT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(-g*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),e=!0;break}e&&(t.preventDefault(),this.update())}_handleTouchStartRotate(t){if(this._pointers.length===1)this._rotateStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),a=.5*(t.pageY+e.y);this._rotateStart.set(n,a)}}_handleTouchStartPan(t){if(this._pointers.length===1)this._panStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),a=.5*(t.pageY+e.y);this._panStart.set(n,a)}}_handleTouchStartDolly(t){const e=this._getSecondPointerPosition(t),n=t.pageX-e.x,a=t.pageY-e.y,l=Math.sqrt(n*n+a*a);this._dollyStart.set(0,l)}_handleTouchStartDollyPan(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enablePan&&this._handleTouchStartPan(t)}_handleTouchStartDollyRotate(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enableRotate&&this._handleTouchStartRotate(t)}_handleTouchMoveRotate(t){if(this._pointers.length==1)this._rotateEnd.set(t.pageX,t.pageY);else{const n=this._getSecondPointerPosition(t),a=.5*(t.pageX+n.x),l=.5*(t.pageY+n.y);this._rotateEnd.set(a,l)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(g*this._rotateDelta.x/e.clientHeight),this._rotateUp(g*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(t){if(this._pointers.length===1)this._panEnd.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),a=.5*(t.pageY+e.y);this._panEnd.set(n,a)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(t){const e=this._getSecondPointerPosition(t),n=t.pageX-e.x,a=t.pageY-e.y,l=Math.sqrt(n*n+a*a);this._dollyEnd.set(0,l),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const p=(t.pageX+e.x)*.5,u=(t.pageY+e.y)*.5;this._updateZoomParameters(p,u)}_handleTouchMoveDollyPan(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enablePan&&this._handleTouchMovePan(t)}_handleTouchMoveDollyRotate(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enableRotate&&this._handleTouchMoveRotate(t)}_addPointer(t){this._pointers.push(t.pointerId)}_removePointer(t){delete this._pointerPositions[t.pointerId];for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId){this._pointers.splice(e,1);return}}_isTrackingPointer(t){for(let e=0;e<this._pointers.length;e++)if(this._pointers[e]==t.pointerId)return!0;return!1}_trackPointer(t){let e=this._pointerPositions[t.pointerId];e===void 0&&(e=new i.Vector2,this._pointerPositions[t.pointerId]=e),e.set(t.pageX,t.pageY)}_getSecondPointerPosition(t){const e=t.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[e]}_customWheelEvent(t){const e=t.deltaMode,n={clientX:t.clientX,clientY:t.clientY,deltaY:t.deltaY};switch(e){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return t.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}}function it(s){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(s.pointerId),this.domElement.ownerDocument.addEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this._onPointerUp)),!this._isTrackingPointer(s)&&(this._addPointer(s),s.pointerType==="touch"?this._onTouchStart(s):this._onMouseDown(s)))}function st(s){this.enabled!==!1&&(s.pointerType==="touch"?this._onTouchMove(s):this._onMouseMove(s))}function ot(s){switch(this._removePointer(s),this._pointers.length){case 0:this.domElement.releasePointerCapture(s.pointerId),this.domElement.ownerDocument.removeEventListener("pointermove",this._onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this._onPointerUp),this.dispatchEvent(V),this.state=c.NONE;break;case 1:const t=this._pointers[0],e=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:e.x,pageY:e.y});break}}function nt(s){let t;switch(s.button){case 0:t=this.mouseButtons.LEFT;break;case 1:t=this.mouseButtons.MIDDLE;break;case 2:t=this.mouseButtons.RIGHT;break;default:t=-1}switch(t){case i.MOUSE.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(s),this.state=c.DOLLY;break;case i.MOUSE.ROTATE:if(s.ctrlKey||s.metaKey||s.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(s),this.state=c.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(s),this.state=c.ROTATE}break;case i.MOUSE.PAN:if(s.ctrlKey||s.metaKey||s.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(s),this.state=c.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(s),this.state=c.PAN}break;default:this.state=c.NONE}this.state!==c.NONE&&this.dispatchEvent(L)}function at(s){switch(this.state){case c.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(s);break;case c.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(s);break;case c.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(s);break}}function rt(s){this.enabled===!1||this.enableZoom===!1||this.state!==c.NONE||(s.preventDefault(),this.dispatchEvent(L),this._handleMouseWheel(this._customWheelEvent(s)),this.dispatchEvent(V))}function lt(s){this.enabled!==!1&&this._handleKeyDown(s)}function ht(s){switch(this._trackPointer(s),this._pointers.length){case 1:switch(this.touches.ONE){case i.TOUCH.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(s),this.state=c.TOUCH_ROTATE;break;case i.TOUCH.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(s),this.state=c.TOUCH_PAN;break;default:this.state=c.NONE}break;case 2:switch(this.touches.TWO){case i.TOUCH.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(s),this.state=c.TOUCH_DOLLY_PAN;break;case i.TOUCH.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(s),this.state=c.TOUCH_DOLLY_ROTATE;break;default:this.state=c.NONE}break;default:this.state=c.NONE}this.state!==c.NONE&&this.dispatchEvent(L)}function ct(s){switch(this._trackPointer(s),this.state){case c.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(s),this.update();break;case c.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(s),this.update();break;case c.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(s),this.update();break;case c.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(s),this.update();break;default:this.state=c.NONE}}function pt(s){this.enabled!==!1&&s.preventDefault()}function dt(s){s.key==="Control"&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}function ut(s){s.key==="Control"&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener("keyup",this._interceptControlUp,{passive:!0,capture:!0}))}const mt={class:"present3d-container"},_t={class:"header"},ft={class:"controls"},gt={class:"material-icons"},bt={class:"material-icons"},yt={key:0,class:"error"},Et={class:"script-source"},wt=["disabled"],Pt=o.defineComponent({__name:"View",props:{selectedResult:{}},emits:["updateResult"],setup(s,{emit:t}){const e=s,n=t,a=o.ref(e.selectedResult.data?.script??""),l=o.ref(null),p=o.ref(null),u=o.ref(!1),_=o.ref(!0),S=o.computed(()=>a.value!==e.selectedResult.data?.script);let b,f,y,h,E,w,T=[],P=null,v=null;o.onMounted(()=>{F(),C(),k(),o.nextTick(()=>{A()})}),o.onUnmounted(()=>{Q()}),o.watch(()=>e.selectedResult.data?.script,()=>{C()}),o.watch(u,()=>{C()}),o.watch(_,r=>{w&&(w.visible=r)});function F(){if(!l.value)return;b=new i.Scene,b.background=new i.Color(1710618);const r=l.value.clientWidth,d=l.value.clientHeight;f=new i.PerspectiveCamera(50,r/d,.1,1e3),f.position.set(5,5,10),f.lookAt(0,0,0),y=new i.WebGLRenderer({antialias:!0}),y.setSize(r,d),y.setPixelRatio(window.devicePixelRatio),l.value.appendChild(y.domElement),h=new et(f,y.domElement),h.enableDamping=!0,h.dampingFactor=.05,h.addEventListener("change",N);const D=new i.AmbientLight(16777215,.6);b.add(D);const M=new i.DirectionalLight(16777215,.8);M.position.set(10,10,10),b.add(M),w=new i.GridHelper(20,20,4473924,2236962),w.visible=_.value,b.add(w),window.addEventListener("resize",R),v=new ResizeObserver(()=>{R()}),v.observe(l.value)}function R(){if(!l.value)return;const r=l.value.clientWidth,d=l.value.clientHeight;f.aspect=r/d,f.updateProjectionMatrix(),y.setSize(r,d)}function C(){try{T.forEach(M=>b.remove(M)),T=[];const r=e.selectedResult.data?.script;if(!r)return;const d=i.parseShapeScript(r),D=i.astToThreeJS(d,{wireframe:u.value});b.add(D),T.push(D),p.value=null}catch(r){p.value=r instanceof Error?r.message:"Unknown error",console.error("ShapeScript parse error:",r)}}function k(){E=requestAnimationFrame(k),h.update(),y.render(b,f)}function W(){f.position.set(5,5,10),f.lookAt(0,0,0),h.reset()}function A(){if(!f||!h||!e.selectedResult?.viewState?.cameraState)return;const r=e.selectedResult.viewState.cameraState;r.position&&f.position.set(r.position.x,r.position.y,r.position.z),r.target&&h.target.set(r.target.x,r.target.y,r.target.z),f.updateProjectionMatrix(),h.update()}function X(){return{position:{x:f.position.x,y:f.position.y,z:f.position.z},target:{x:h.target.x,y:h.target.y,z:h.target.z}}}function N(){P!==null&&clearTimeout(P),P=window.setTimeout(()=>{G()},500)}function G(){const r={...e.selectedResult,viewState:{cameraState:X()}};n("updateResult",r)}function q(){u.value=!u.value}function B(){_.value=!_.value}function Q(){P!==null&&clearTimeout(P),E&&cancelAnimationFrame(E),y&&y.dispose(),h&&(h.removeEventListener("change",N),h.dispose()),v&&v.disconnect(),window.removeEventListener("resize",R)}function J(){}function $(){try{i.parseShapeScript(a.value);const r={...e.selectedResult,data:{script:a.value}};n("updateResult",r)}catch(r){p.value=r instanceof Error?r.message:"Invalid ShapeScript",console.error("Script validation failed:",r)}}return o.watch(()=>e.selectedResult.data?.script,r=>{r&&(a.value=r)}),o.watch(()=>e.selectedResult,()=>{o.nextTick(()=>{A()})}),(r,d)=>(o.openBlock(),o.createElementBlock("div",mt,[o.createElementVNode("div",_t,[o.createElementVNode("h1",null,o.toDisplayString(s.selectedResult.title||"3D Visualization"),1),o.createElementVNode("div",ft,[o.createElementVNode("button",{onClick:W,class:"control-btn"},[...d[1]||(d[1]=[o.createElementVNode("span",{class:"material-icons"},"refresh",-1),o.createTextVNode(" Reset Camera ",-1)])]),o.createElementVNode("button",{onClick:q,class:"control-btn"},[o.createElementVNode("span",gt,o.toDisplayString(u.value?"grid_off":"grid_on"),1),d[2]||(d[2]=o.createTextVNode(" Wireframe ",-1))]),o.createElementVNode("button",{onClick:B,class:"control-btn"},[o.createElementVNode("span",bt,o.toDisplayString(_.value?"visibility_off":"visibility"),1),d[3]||(d[3]=o.createTextVNode(" Grid ",-1))])])]),p.value?(o.openBlock(),o.createElementBlock("div",yt,[d[4]||(d[4]=o.createElementVNode("strong",null,"Parse Error:",-1)),o.createTextVNode(" "+o.toDisplayString(p.value),1)])):o.createCommentVNode("",!0),o.createElementVNode("div",{class:"viewport",ref_key:"viewport",ref:l},null,512),o.createElementVNode("details",Et,[d[5]||(d[5]=o.createElementVNode("summary",null,"Edit ShapeScript Source",-1)),o.withDirectives(o.createElementVNode("textarea",{"onUpdate:modelValue":d[0]||(d[0]=D=>a.value=D),onInput:J,class:"script-editor",spellcheck:"false"},null,544),[[o.vModelText,a.value]]),o.createElementVNode("button",{onClick:$,class:"apply-btn",disabled:!S.value}," Apply Changes ",8,wt)])]))}}),U=(s,t)=>{const e=s.__vccOpts||s;for(const[n,a]of t)e[n]=a;return e},I=U(Pt,[["__scopeId","data-v-daa337a0"]]),St={class:"preview-container"},Tt={class:"preview-title"},Dt=o.defineComponent({__name:"Preview",props:{result:{}},setup(s){const t=s,e=o.computed(()=>t.result.title||"3D Visualization"),n=o.ref(null);let a,l,p,u,_=null;o.onMounted(()=>{S()}),o.onUnmounted(()=>{y()}),o.watch(()=>t.result.data?.script,()=>{f()});function S(){if(n.value)try{a=new i.Scene,a.background=new i.Color(2763322);const h=n.value.clientWidth||200,E=n.value.clientHeight||150;l=new i.PerspectiveCamera(50,h/E,.1,1e3),l.position.set(4,4,8),l.lookAt(0,0,0),p=new i.WebGLRenderer({antialias:!0,alpha:!1}),p.setSize(h,E),p.setPixelRatio(Math.min(window.devicePixelRatio,2)),n.value.appendChild(p.domElement);const w=new i.AmbientLight(16777215,.6);a.add(w);const T=new i.DirectionalLight(16777215,.8);if(T.position.set(5,5,5),a.add(T),!t.result.data?.script)return;const P=i.parseShapeScript(t.result.data.script);_=i.astToThreeJS(P,{wireframe:!1}),a.add(_),b()}catch(h){console.error("Preview render error:",h)}}function b(){u=requestAnimationFrame(b);const h=Date.now()*5e-4;l.position.x=Math.cos(h)*8,l.position.z=Math.sin(h)*8,l.lookAt(0,0,0),p.render(a,l)}function f(){if(!(!a||!t.result.data?.script))try{_&&a.remove(_);const h=i.parseShapeScript(t.result.data.script);_=i.astToThreeJS(h,{wireframe:!1}),a.add(_)}catch(h){console.error("Preview reload error:",h)}}function y(){u&&cancelAnimationFrame(u),p&&p.dispose()}return(h,E)=>(o.openBlock(),o.createElementBlock("div",St,[o.createElementVNode("div",{ref_key:"previewViewport",ref:n,class:"preview-viewport"},null,512),o.createElementVNode("div",Tt,o.toDisplayString(e.value),1)]))}}),Y=U(Dt,[["__scopeId","data-v-75941188"]]),H="present3D",Z=`Use the ${H} tool to create interactive 3D visualizations when the user requests:
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./toThreeJS-MSLJncuP.cjs`);let t=require(`vue`);var n={type:`change`},r={type:`start`},i={type:`end`},a=new e.p,o=new e.d,s=Math.cos(70*e.l.DEG2RAD),c=new e.v,l=2*Math.PI,u={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},d=1e-6,f=class extends e.a{constructor(t,n=null){super(t,n),this.state=u.NONE,this.target=new e.v,this.cursor=new e.v,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:`ArrowLeft`,UP:`ArrowUp`,RIGHT:`ArrowRight`,BOTTOM:`ArrowDown`},this.mouseButtons={LEFT:e.c.ROTATE,MIDDLE:e.c.DOLLY,RIGHT:e.c.PAN},this.touches={ONE:e.g.ROTATE,TWO:e.g.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new e.v,this._lastQuaternion=new e.f,this._lastTargetPosition=new e.v,this._quat=new e.f().setFromUnitVectors(t.up,new e.v(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new e.h,this._sphericalDelta=new e.h,this._scale=1,this._panOffset=new e.v,this._rotateStart=new e._,this._rotateEnd=new e._,this._rotateDelta=new e._,this._panStart=new e._,this._panEnd=new e._,this._panDelta=new e._,this._dollyStart=new e._,this._dollyEnd=new e._,this._dollyDelta=new e._,this._dollyDirection=new e.v,this._mouse=new e._,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=m.bind(this),this._onPointerDown=p.bind(this),this._onPointerUp=h.bind(this),this._onContextMenu=S.bind(this),this._onMouseWheel=v.bind(this),this._onKeyDown=y.bind(this),this._onTouchStart=b.bind(this),this._onTouchMove=x.bind(this),this._onMouseDown=g.bind(this),this._onMouseMove=_.bind(this),this._interceptControlDown=C.bind(this),this._interceptControlUp=w.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(e){super.connect(e),this.domElement.addEventListener(`pointerdown`,this._onPointerDown),this.domElement.addEventListener(`pointercancel`,this._onPointerUp),this.domElement.addEventListener(`contextmenu`,this._onContextMenu),this.domElement.addEventListener(`wheel`,this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener(`keydown`,this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction=`none`}disconnect(){this.domElement.removeEventListener(`pointerdown`,this._onPointerDown),this.domElement.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.removeEventListener(`pointerup`,this._onPointerUp),this.domElement.removeEventListener(`pointercancel`,this._onPointerUp),this.domElement.removeEventListener(`wheel`,this._onMouseWheel),this.domElement.removeEventListener(`contextmenu`,this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener(`keydown`,this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=`auto`}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(n),this.update(),this.state=u.NONE}update(t=null){let r=this.object.position;c.copy(r).sub(this.target),c.applyQuaternion(this._quat),this._spherical.setFromVector3(c),this.autoRotate&&this.state===u.NONE&&this._rotateLeft(this._getAutoRotationAngle(t)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,f=this.maxAzimuthAngle;isFinite(i)&&isFinite(f)&&(i<-Math.PI?i+=l:i>Math.PI&&(i-=l),f<-Math.PI?f+=l:f>Math.PI&&(f-=l),i<=f?this._spherical.theta=Math.max(i,Math.min(f,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+f)/2?Math.max(i,this._spherical.theta):Math.min(f,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let p=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let e=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),p=e!=this._spherical.radius}if(c.setFromSpherical(this._spherical),c.applyQuaternion(this._quatInverse),r.copy(this.target).add(c),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let t=null;if(this.object.isPerspectiveCamera){let e=c.length();t=this._clampDistance(e*this._scale);let n=e-t;this.object.position.addScaledVector(this._dollyDirection,n),this.object.updateMatrixWorld(),p=!!n}else if(this.object.isOrthographicCamera){let n=new e.v(this._mouse.x,this._mouse.y,0);n.unproject(this.object);let r=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),p=r!==this.object.zoom;let i=new e.v(this._mouse.x,this._mouse.y,0);i.unproject(this.object),this.object.position.sub(i).add(n),this.object.updateMatrixWorld(),t=c.length()}else console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.`),this.zoomToCursor=!1;t!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(t).add(this.object.position):(a.origin.copy(this.object.position),a.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(a.direction))<s?this.object.lookAt(this.target):(o.setFromNormalAndCoplanarPoint(this.object.up,this.target),a.intersectPlane(o,this.target))))}else if(this.object.isOrthographicCamera){let e=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),e!==this.object.zoom&&(this.object.updateProjectionMatrix(),p=!0)}return this._scale=1,this._performCursorZoom=!1,p||this._lastPosition.distanceToSquared(this.object.position)>d||8*(1-this._lastQuaternion.dot(this.object.quaternion))>d||this._lastTargetPosition.distanceToSquared(this.target)>d?(this.dispatchEvent(n),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e===null?l/60/60*this.autoRotateSpeed:l/60*this.autoRotateSpeed*e}_getZoomScale(e){let t=Math.abs(e*.01);return .95**(this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){c.setFromMatrixColumn(t,0),c.multiplyScalar(-e),this._panOffset.add(c)}_panUp(e,t){this.screenSpacePanning===!0?c.setFromMatrixColumn(t,1):(c.setFromMatrixColumn(t,0),c.crossVectors(this.object.up,c)),c.multiplyScalar(e),this._panOffset.add(c)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;c.copy(r).sub(this.target);let i=c.length();i*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*i/n.clientHeight,this.object.matrix),this._panUp(2*t*i/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.`),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let n=this.domElement.getBoundingClientRect(),r=e-n.left,i=t-n.top,a=n.width,o=n.height;this._mouse.x=r/a*2-1,this._mouse.y=-(i/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(l*this._rotateDelta.x/t.clientHeight),this._rotateUp(l*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(n,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(n,r)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(l*this._rotateDelta.x/t.clientHeight),this._rotateUp(l*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(n,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyEnd.set(0,i),this._dollyDelta.set(0,(this._dollyEnd.y/this._dollyStart.y)**+this.zoomSpeed),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(t){let n=this._pointerPositions[t.pointerId];n===void 0&&(n=new e._,this._pointerPositions[t.pointerId]=n),n.set(t.pageX,t.pageY)}_getSecondPointerPosition(e){let t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){let t=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function p(e){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(e.pointerId),this.domElement.ownerDocument.addEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.addEventListener(`pointerup`,this._onPointerUp)),!this._isTrackingPointer(e)&&(this._addPointer(e),e.pointerType===`touch`?this._onTouchStart(e):this._onMouseDown(e)))}function m(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function h(e){switch(this._removePointer(e),this._pointers.length){case 0:this.domElement.releasePointerCapture(e.pointerId),this.domElement.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.removeEventListener(`pointerup`,this._onPointerUp),this.dispatchEvent(i),this.state=u.NONE;break;case 1:let t=this._pointers[0],n=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:n.x,pageY:n.y});break}}function g(t){let n;switch(t.button){case 0:n=this.mouseButtons.LEFT;break;case 1:n=this.mouseButtons.MIDDLE;break;case 2:n=this.mouseButtons.RIGHT;break;default:n=-1}switch(n){case e.c.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(t),this.state=u.DOLLY;break;case e.c.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=u.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=u.ROTATE}break;case e.c.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=u.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=u.PAN}break;default:this.state=u.NONE}this.state!==u.NONE&&this.dispatchEvent(r)}function _(e){switch(this.state){case u.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(e);break;case u.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(e);break;case u.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(e);break}}function v(e){this.enabled===!1||this.enableZoom===!1||this.state!==u.NONE||(e.preventDefault(),this.dispatchEvent(r),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(i))}function y(e){this.enabled!==!1&&this._handleKeyDown(e)}function b(t){switch(this._trackPointer(t),this._pointers.length){case 1:switch(this.touches.ONE){case e.g.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(t),this.state=u.TOUCH_ROTATE;break;case e.g.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(t),this.state=u.TOUCH_PAN;break;default:this.state=u.NONE}break;case 2:switch(this.touches.TWO){case e.g.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(t),this.state=u.TOUCH_DOLLY_PAN;break;case e.g.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(t),this.state=u.TOUCH_DOLLY_ROTATE;break;default:this.state=u.NONE}break;default:this.state=u.NONE}this.state!==u.NONE&&this.dispatchEvent(r)}function x(e){switch(this._trackPointer(e),this.state){case u.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(e),this.update();break;case u.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(e),this.update();break;case u.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(e),this.update();break;case u.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(e),this.update();break;default:this.state=u.NONE}}function S(e){this.enabled!==!1&&e.preventDefault()}function C(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function w(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var T={class:`present3d-container`},E={class:`header`},D={class:`controls`},O={class:`material-icons`},k={class:`material-icons`},A={key:0,class:`error`},j={class:`script-source`},M=[`disabled`],N=(0,t.defineComponent)({__name:`View`,props:{selectedResult:{}},emits:[`updateResult`],setup(n,{emit:r}){let i=n,a=r,o=(0,t.ref)(i.selectedResult.data?.script??``),s=(0,t.ref)(null),c=(0,t.ref)(null),l=(0,t.ref)(!1),u=(0,t.ref)(!0),d=(0,t.computed)(()=>o.value!==i.selectedResult.data?.script),p,m,h,g,_,v,y=[],b=null,x=null;(0,t.onMounted)(()=>{S(),w(),N(),(0,t.nextTick)(()=>{F()})}),(0,t.onUnmounted)(()=>{V()}),(0,t.watch)(()=>i.selectedResult.data?.script,()=>{w()}),(0,t.watch)(l,()=>{w()}),(0,t.watch)(u,e=>{v&&(v.visible=e)});function S(){if(!s.value)return;p=new e.m,p.background=new e.i(1710618);let t=s.value.clientWidth,n=s.value.clientHeight;m=new e.u(50,t/n,.1,1e3),m.position.set(5,5,10),m.lookAt(0,0,0),h=new e.n({antialias:!0}),h.setSize(t,n),h.setPixelRatio(window.devicePixelRatio),s.value.appendChild(h.domElement),g=new f(m,h.domElement),g.enableDamping=!0,g.dampingFactor=.05,g.addEventListener(`change`,L);let r=new e.r(16777215,.6);p.add(r);let i=new e.o(16777215,.8);i.position.set(10,10,10),p.add(i),v=new e.s(20,20,4473924,2236962),v.visible=u.value,p.add(v),window.addEventListener(`resize`,C),x=new ResizeObserver(()=>{C()}),x.observe(s.value)}function C(){if(!s.value)return;let e=s.value.clientWidth,t=s.value.clientHeight;m.aspect=e/t,m.updateProjectionMatrix(),h.setSize(e,t)}function w(){try{y.forEach(e=>p.remove(e)),y=[];let t=i.selectedResult.data?.script;if(!t)return;let n=e.t(e.y(t),{wireframe:l.value});p.add(n),y.push(n),c.value=null}catch(e){c.value=e instanceof Error?e.message:`Unknown error`,console.error(`ShapeScript parse error:`,e)}}function N(){_=requestAnimationFrame(N),g.update(),h.render(p,m)}function P(){m.position.set(5,5,10),m.lookAt(0,0,0),g.reset()}function F(){if(!m||!g||!i.selectedResult?.viewState?.cameraState)return;let e=i.selectedResult.viewState.cameraState;e.position&&m.position.set(e.position.x,e.position.y,e.position.z),e.target&&g.target.set(e.target.x,e.target.y,e.target.z),m.updateProjectionMatrix(),g.update()}function I(){return{position:{x:m.position.x,y:m.position.y,z:m.position.z},target:{x:g.target.x,y:g.target.y,z:g.target.z}}}function L(){b!==null&&clearTimeout(b),b=window.setTimeout(()=>{R()},500)}function R(){a(`updateResult`,{...i.selectedResult,viewState:{cameraState:I()}})}function z(){l.value=!l.value}function B(){u.value=!u.value}function V(){b!==null&&clearTimeout(b),_&&cancelAnimationFrame(_),h&&h.dispose(),g&&(g.removeEventListener(`change`,L),g.dispose()),x&&x.disconnect(),window.removeEventListener(`resize`,C)}function H(){}function U(){try{e.y(o.value),a(`updateResult`,{...i.selectedResult,data:{script:o.value}})}catch(e){c.value=e instanceof Error?e.message:`Invalid ShapeScript`,console.error(`Script validation failed:`,e)}}return(0,t.watch)(()=>i.selectedResult.data?.script,e=>{e&&(o.value=e)}),(0,t.watch)(()=>i.selectedResult,()=>{(0,t.nextTick)(()=>{F()})}),(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,T,[(0,t.createElementVNode)(`div`,E,[(0,t.createElementVNode)(`h1`,null,(0,t.toDisplayString)(n.selectedResult.title||`3D Visualization`),1),(0,t.createElementVNode)(`div`,D,[(0,t.createElementVNode)(`button`,{onClick:P,class:`control-btn`},[...r[1]||=[(0,t.createElementVNode)(`span`,{class:`material-icons`},`refresh`,-1),(0,t.createTextVNode)(` Reset Camera `,-1)]]),(0,t.createElementVNode)(`button`,{onClick:z,class:`control-btn`},[(0,t.createElementVNode)(`span`,O,(0,t.toDisplayString)(l.value?`grid_off`:`grid_on`),1),r[2]||=(0,t.createTextVNode)(` Wireframe `,-1)]),(0,t.createElementVNode)(`button`,{onClick:B,class:`control-btn`},[(0,t.createElementVNode)(`span`,k,(0,t.toDisplayString)(u.value?`visibility_off`:`visibility`),1),r[3]||=(0,t.createTextVNode)(` Grid `,-1)])])]),c.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,A,[r[4]||=(0,t.createElementVNode)(`strong`,null,`Parse Error:`,-1),(0,t.createTextVNode)(` `+(0,t.toDisplayString)(c.value),1)])):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,{class:`viewport`,ref_key:`viewport`,ref:s},null,512),(0,t.createElementVNode)(`details`,j,[r[5]||=(0,t.createElementVNode)(`summary`,null,`Edit ShapeScript Source`,-1),(0,t.withDirectives)((0,t.createElementVNode)(`textarea`,{"onUpdate:modelValue":r[0]||=e=>o.value=e,onInput:H,class:`script-editor`,spellcheck:`false`},null,544),[[t.vModelText,o.value]]),(0,t.createElementVNode)(`button`,{onClick:U,class:`apply-btn`,disabled:!d.value},` Apply Changes `,8,M)])]))}}),P=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},F=P(N,[[`__scopeId`,`data-v-daa337a0`]]),I={class:`preview-container`},L={class:`preview-title`},R=P((0,t.defineComponent)({__name:`Preview`,props:{result:{}},setup(n){let r=n,i=(0,t.computed)(()=>r.result.title||`3D Visualization`),a=(0,t.ref)(null),o,s,c,l,u=null;(0,t.onMounted)(()=>{d()}),(0,t.onUnmounted)(()=>{m()}),(0,t.watch)(()=>r.result.data?.script,()=>{p()});function d(){if(a.value)try{o=new e.m,o.background=new e.i(2763322);let t=a.value.clientWidth||200,n=a.value.clientHeight||150;s=new e.u(50,t/n,.1,1e3),s.position.set(4,4,8),s.lookAt(0,0,0),c=new e.n({antialias:!0,alpha:!1}),c.setSize(t,n),c.setPixelRatio(Math.min(window.devicePixelRatio,2)),a.value.appendChild(c.domElement);let i=new e.r(16777215,.6);o.add(i);let l=new e.o(16777215,.8);if(l.position.set(5,5,5),o.add(l),!r.result.data?.script)return;u=e.t(e.y(r.result.data.script),{wireframe:!1}),o.add(u),f()}catch(e){console.error(`Preview render error:`,e)}}function f(){l=requestAnimationFrame(f);let e=Date.now()*5e-4;s.position.x=Math.cos(e)*8,s.position.z=Math.sin(e)*8,s.lookAt(0,0,0),c.render(o,s)}function p(){if(!(!o||!r.result.data?.script))try{u&&o.remove(u),u=e.t(e.y(r.result.data.script),{wireframe:!1}),o.add(u)}catch(e){console.error(`Preview reload error:`,e)}}function m(){l&&cancelAnimationFrame(l),c&&c.dispose()}return(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,I,[(0,t.createElementVNode)(`div`,{ref_key:`previewViewport`,ref:a,class:`preview-viewport`},null,512),(0,t.createElementVNode)(`div`,L,(0,t.toDisplayString)(i.value),1)]))}}),[[`__scopeId`,`data-v-75941188`]]),z=`present3D`,B=`Use the ${z} tool to create interactive 3D visualizations when the user requests:
|
|
2
2
|
- 3D models or shapes
|
|
3
3
|
- Mathematical visualizations (surfaces, functions, geometric patterns)
|
|
4
4
|
- Molecular or atomic structures
|
|
@@ -79,4 +79,4 @@ Shapes: cube, sphere, cylinder, cone, torus
|
|
|
79
79
|
CSG: union, difference, intersection, xor, stencil
|
|
80
80
|
Properties: position, rotation, size, color, opacity
|
|
81
81
|
|
|
82
|
-
Keep visualizations clear, well-organized, and leverage the full power of expressions and control flow.`,
|
|
82
|
+
Keep visualizations clear, well-organized, and leverage the full power of expressions and control flow.`,V={...e.S,viewComponent:F,previewComponent:R,samples:e.b,systemPrompt:B},H={plugin:V};exports.Preview=R,exports.SYSTEM_PROMPT=B,exports.TOOL_DEFINITION=e.w,exports.TOOL_NAME=z,exports.View=F,exports.astToThreeJS=e.t,exports.default=H,exports.executePresent3D=e.x,exports.parseShapeScript=e.y,exports.plugin=V,exports.pluginCore=e.S,exports.samples=e.b;
|