@glyphcss/vue 0.0.5 → 0.0.7

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/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var J=Object.defineProperty;var he=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var me=Object.prototype.hasOwnProperty;var fe=(o,s)=>{for(var i in s)J(o,i,{get:s[i],enumerable:!0})},Ge=(o,s,i,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of de(s))!me.call(o,a)&&a!==i&&J(o,a,{get:()=>s[a],enumerable:!(l=he(s,a))||l.enumerable});return o};var ge=o=>Ge(J({},"__esModule",{value:!0}),o);var ve={};fe(ve,{BASE_TILE:()=>e.BASE_TILE,CAMERA_BACKFACE_CULL_EPS:()=>e.CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE:()=>e.DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION:()=>e.DEFAULT_PROJECTION,GlyphAxesHelper:()=>Y,GlyphCamera:()=>T,GlyphCameraContextKey:()=>A,GlyphDirectionalLightHelper:()=>_,GlyphFirstPersonControls:()=>U,GlyphGround:()=>F,GlyphHotspot:()=>N,GlyphMapControls:()=>K,GlyphMesh:()=>L,GlyphOrbitControls:()=>X,GlyphOrthographicCamera:()=>T,GlyphPerspectiveCamera:()=>D,GlyphScene:()=>B,GlyphSceneContextKey:()=>y,LoopOnce:()=>e.LoopOnce,LoopPingPong:()=>e.LoopPingPong,LoopRepeat:()=>e.LoopRepeat,VOXEL_CAMERA_CULL_AXIS_EPS:()=>e.VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT:()=>e.VOXEL_CAMERA_CULL_NORMAL_LIMIT,antiprismPolygons:()=>e.antiprismPolygons,arrowPolygons:()=>e.arrowPolygons,axesHelperPolygons:()=>e.axesHelperPolygons,bakeSolidTextureSampledPolygons:()=>e.bakeSolidTextureSampledPolygons,bakeSolidTextureSamples:()=>e.bakeSolidTextureSamples,bipyramidPolygons:()=>e.bipyramidPolygons,buildSceneContext:()=>e.buildSceneContext,cameraCullNormalGroups:()=>e.cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons:()=>e.cameraCullNormalGroupsFromPolygons,cameraCullNormalKey:()=>e.cameraCullNormalKey,cameraCullVisibleSignature:()=>e.cameraCullVisibleSignature,cameraFacingDepth:()=>e.cameraFacingDepth,clampChannel:()=>e.clampChannel,computeSceneBbox:()=>e.computeSceneBbox,computeShapeLighting:()=>e.computeShapeLighting,conePolygons:()=>e.conePolygons,coverPlanarPolygons:()=>e.coverPlanarPolygons,createGlyphAnimationMixer:()=>e.createGlyphAnimationMixer,createIsometricCamera:()=>e.createIsometricCamera,cubePolygons:()=>e.cubePolygons,cuboctahedronPolygons:()=>e.cuboctahedronPolygons,cullInteriorPolygons:()=>e.cullInteriorPolygons,cylinderPolygons:()=>e.cylinderPolygons,deltoidalHexecontahedronPolygons:()=>e.deltoidalHexecontahedronPolygons,deltoidalIcositetrahedronPolygons:()=>e.deltoidalIcositetrahedronPolygons,disdyakisDodecahedronPolygons:()=>e.disdyakisDodecahedronPolygons,disdyakisTriacontahedronPolygons:()=>e.disdyakisTriacontahedronPolygons,dodecahedronPolygons:()=>e.dodecahedronPolygons,findGlyphMeshHandle:()=>P.findGlyphMeshHandle,findMeshUnderPoint:()=>P.findMeshUnderPoint,formatColor:()=>e.formatColor,greatDodecahedronPolygons:()=>e.greatDodecahedronPolygons,greatIcosahedronPolygons:()=>e.greatIcosahedronPolygons,greatStellatedDodecahedronPolygons:()=>e.greatStellatedDodecahedronPolygons,icosahedronPolygons:()=>e.icosahedronPolygons,icosidodecahedronPolygons:()=>e.icosidodecahedronPolygons,injectGlyphBaseStyles:()=>W.injectGlyphBaseStyles,inverseRotateVec3:()=>e.inverseRotateVec3,isAxisAlignedSurfaceNormal:()=>e.isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups:()=>e.isVoxelCameraCullableNormalGroups,loadMesh:()=>e.loadMesh,mergePolygons:()=>e.mergePolygons,normalFacesCamera:()=>e.normalFacesCamera,normalizeInvertMultiplier:()=>e.normalizeInvertMultiplier,normalizePolygons:()=>e.normalizePolygons,octahedronPolygons:()=>e.octahedronPolygons,optimizeMeshPolygons:()=>e.optimizeMeshPolygons,parseColor:()=>e.parseColor,parseGltf:()=>e.parseGltf,parseHexColor:()=>e.parseHexColor,parseMtl:()=>e.parseMtl,parseObj:()=>e.parseObj,parsePureColor:()=>e.parsePureColor,parseRgbColor:()=>e.parseRgbColor,parseVox:()=>e.parseVox,pentagonalHexecontahedronPolygons:()=>e.pentagonalHexecontahedronPolygons,pentagonalIcositetrahedronPolygons:()=>e.pentagonalIcositetrahedronPolygons,pentakisDodecahedronPolygons:()=>e.pentakisDodecahedronPolygons,planePolygons:()=>e.planePolygons,pointInMeshElement:()=>P.pointInMeshElement,polygonCssSurfaceNormal:()=>e.polygonCssSurfaceNormal,polygonFaces:()=>e.polygonFaces,polygonFacesCamera:()=>e.polygonFacesCamera,prismPolygons:()=>e.prismPolygons,pyramidPolygons:()=>e.pyramidPolygons,resolveGeometry:()=>e.resolveGeometry,rhombicDodecahedronPolygons:()=>e.rhombicDodecahedronPolygons,rhombicTriacontahedronPolygons:()=>e.rhombicTriacontahedronPolygons,rhombicosidodecahedronPolygons:()=>e.rhombicosidodecahedronPolygons,rhombicuboctahedronPolygons:()=>e.rhombicuboctahedronPolygons,ringPolygons:()=>e.ringPolygons,ringQuadPolygons:()=>e.ringQuadPolygons,rotateVec3:()=>e.rotateVec3,shadeColor:()=>e.shadeColor,smallStellatedDodecahedronPolygons:()=>e.smallStellatedDodecahedronPolygons,snubCubePolygons:()=>e.snubCubePolygons,snubDodecahedronPolygons:()=>e.snubDodecahedronPolygons,spherePolygons:()=>e.spherePolygons,tetrahedronPolygons:()=>e.tetrahedronPolygons,tetrakisHexahedronPolygons:()=>e.tetrakisHexahedronPolygons,torusPolygons:()=>e.torusPolygons,trapezohedronPolygons:()=>e.trapezohedronPolygons,triakisIcosahedronPolygons:()=>e.triakisIcosahedronPolygons,triakisOctahedronPolygons:()=>e.triakisOctahedronPolygons,triakisTetrahedronPolygons:()=>e.triakisTetrahedronPolygons,truncatedCubePolygons:()=>e.truncatedCubePolygons,truncatedCuboctahedronPolygons:()=>e.truncatedCuboctahedronPolygons,truncatedDodecahedronPolygons:()=>e.truncatedDodecahedronPolygons,truncatedIcosahedronPolygons:()=>e.truncatedIcosahedronPolygons,truncatedIcosidodecahedronPolygons:()=>e.truncatedIcosidodecahedronPolygons,truncatedOctahedronPolygons:()=>e.truncatedOctahedronPolygons,truncatedTetrahedronPolygons:()=>e.truncatedTetrahedronPolygons,useGlyphAnimation:()=>q,useGlyphCamera:()=>I,useGlyphSceneContext:()=>j});module.exports=ge(ve);var e=require("@glyphcss/core");var f=require("vue"),k=require("glyphcss");var Q=require("vue"),A=Symbol("glyph-camera");function E(){let o=(0,Q.inject)(A);if(!o)throw new Error("glyphcss: GlyphScene must be placed inside a GlyphPerspectiveCamera or GlyphOrthographicCamera.");return o}var y=Symbol("glyph-scene");var B=(0,f.defineComponent)({name:"GlyphScene",inheritAttrs:!1,props:{mode:{type:String,default:void 0},glyphPalette:{type:String,default:void 0},useColors:{type:Boolean,default:void 0},cols:{type:Number,default:void 0},rows:{type:Number,default:void 0},cellAspect:{type:Number,default:void 0},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},autoSize:{type:Boolean,default:void 0},shadow:{type:Object,default:void 0},class:{type:String,default:void 0}},setup(o,{slots:s,attrs:i}){let{cameraRef:l,sceneRerenderRef:a}=E(),n=(0,f.shallowRef)(null),t=(0,f.shallowRef)(null);return(0,f.provide)(y,{sceneRef:t}),(0,f.onMounted)(()=>{let r=n.value;if(!r)return;(0,k.injectGlyphBaseStyles)(r.ownerDocument??void 0);let p={};o.mode!==void 0&&(p.mode=o.mode),o.glyphPalette!==void 0&&(p.glyphPalette=o.glyphPalette),o.useColors!==void 0&&(p.useColors=o.useColors),o.cols!==void 0&&(p.cols=o.cols),o.rows!==void 0&&(p.rows=o.rows),o.cellAspect!==void 0&&(p.cellAspect=o.cellAspect),o.directionalLight!==void 0&&(p.directionalLight=o.directionalLight),o.ambientLight!==void 0&&(p.ambientLight=o.ambientLight),o.autoSize!==void 0&&(p.autoSize=o.autoSize),o.shadow!==void 0&&(p.shadow=o.shadow),l.value!==null&&(p.camera=l.value),t.value=(0,k.createGlyphScene)(r,p),a.value=()=>t.value?.rerender()}),(0,f.onBeforeUnmount)(()=>{t.value?.destroy(),t.value=null,a.value=null}),(0,f.watch)(()=>({mode:o.mode,glyphPalette:o.glyphPalette,useColors:o.useColors,cols:o.cols,rows:o.rows,cellAspect:o.cellAspect,directionalLight:o.directionalLight,ambientLight:o.ambientLight,autoSize:o.autoSize,shadow:o.shadow}),r=>{let p=t.value;if(!p)return;let u={};r.mode!==void 0&&(u.mode=r.mode),r.glyphPalette!==void 0&&(u.glyphPalette=r.glyphPalette),r.useColors!==void 0&&(u.useColors=r.useColors),r.cols!==void 0&&(u.cols=r.cols),r.rows!==void 0&&(u.rows=r.rows),r.cellAspect!==void 0&&(u.cellAspect=r.cellAspect),r.directionalLight!==void 0&&(u.directionalLight=r.directionalLight),r.ambientLight!==void 0&&(u.ambientLight=r.ambientLight),r.autoSize!==void 0&&(u.autoSize=r.autoSize),u.shadow=r.shadow,Object.keys(u).length>0&&p.setOptions(u)},{deep:!1}),()=>{let r=`glyph-host${o.class?` ${o.class}`:""}`;return(0,f.h)("div",{ref:n,class:r,...Object.fromEntries(Object.entries(i).filter(([p])=>p!=="class"))},s.default?.())}}});var h=require("vue"),Z=require("@glyphcss/core");var L=(0,h.defineComponent)({name:"GlyphMesh",props:{id:{type:String,default:void 0},polygons:{type:Array,default:void 0},geometry:{type:String,default:void 0},size:{type:Number,default:1},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},class:{type:String,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0}},setup(o,{slots:s}){let i=(0,h.inject)(y);if(!i)throw new Error("glyphcss: GlyphMesh must be used inside a GlyphScene.");let{sceneRef:l}=i,a=(0,h.shallowRef)(null),n=(0,h.computed)(()=>o.polygons!==void 0?o.polygons:o.geometry!==void 0?(0,Z.resolveGeometry)(o.geometry,{size:o.size,color:o.color}):[]);function t(){let c={};return o.id&&(c.id=o.id),o.position&&(c.position=o.position),o.scale!==void 0&&(c.scale=o.scale),o.rotation&&(c.rotation=o.rotation),c.castShadow=o.castShadow,c.receiveShadow=o.receiveShadow,c}function r(){let c=l.value;if(!c)return;let m=c.add(n.value,t());a.value=m}function p(){a.value?.dispose(),a.value=null}let u=(0,h.watchEffect)(()=>{!l.value||a.value||r()});return(0,h.onBeforeUnmount)(()=>{u(),p()}),(0,h.watch)(n,()=>{p(),r()}),(0,h.watch)(()=>({id:o.id,position:o.position,scale:o.scale,rotation:o.rotation,castShadow:o.castShadow,receiveShadow:o.receiveShadow}),()=>{let c=a.value;c&&(c.setTransform(t()),l.value?.rerender())},{deep:!1}),()=>{let c=`glyph-mesh${o.class?` ${o.class}`:""}`;return(0,h.h)("div",{"data-glyph-mesh-id":o.id,class:c},s.default?.())}}});var z=require("vue"),ee=require("@glyphcss/core");var F=(0,z.defineComponent)({name:"GlyphGround",props:{size:{type:Number,default:5},color:{type:String,default:"#444444"},position:{type:Array,default:()=>[0,-.5,0]},rotation:{type:Array,default:void 0},id:{type:String,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!0},class:{type:String,default:void 0}},setup(o,{slots:s}){let i=(0,z.computed)(()=>(0,ee.planePolygons)({axis:1,size:o.size,offset:0,color:o.color}));return()=>(0,z.h)(L,{id:o.id,polygons:i.value,position:o.position,rotation:o.rotation??void 0,castShadow:o.castShadow,receiveShadow:o.receiveShadow,class:o.class},s)}});var d=require("vue");var N=(0,d.defineComponent)({name:"GlyphHotspot",props:{id:{type:String,required:!0},at:{type:Array,required:!0},size:{type:Array,default:void 0}},emits:["click"],setup(o,{emit:s,slots:i}){let l=(0,d.inject)(y);if(!l)throw new Error("glyphcss: GlyphHotspot must be used inside a GlyphScene.");let{sceneRef:a}=l,n=(0,d.shallowRef)(null),t=(0,d.shallowRef)(null);function r(){let c=a.value;if(!c)return;let m=c.addHotspot({id:o.id,at:o.at,size:o.size},()=>s("click"));n.value=m,t.value=m.el}function p(){n.value?.remove(),n.value=null,t.value=null}let u=(0,d.watchEffect)(()=>{!a.value||n.value||r()});return(0,d.onBeforeUnmount)(()=>{u(),p()}),(0,d.watch)(()=>({id:o.id,at:o.at,size:o.size}),()=>{p(),r()},{deep:!1}),()=>{let c=t.value,m=i.default?.();return c&&m?(0,d.h)(d.Teleport,{to:c},m):null}}});var oe=require("vue");function j(){let o=(0,oe.inject)(y);if(!o)throw new Error("glyphcss: must be used inside a GlyphScene.");return o}var P=require("glyphcss");var R=require("vue"),te=require("glyphcss");var T=(0,R.defineComponent)({name:"GlyphOrthographicCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},zoom:{type:Number,default:void 0},center:{type:Array,default:void 0},class:{type:String,default:void 0},style:{type:[Object,String],default:void 0}},setup(o,{slots:s}){let i={};o.rotX!==void 0&&(i.rotX=o.rotX),o.rotY!==void 0&&(i.rotY=o.rotY),o.zoom!==void 0&&(i.zoom=o.zoom),o.center!==void 0&&(i.center=o.center);let l=(0,R.shallowRef)((0,te.createGlyphOrthographicCamera)(i)),a=(0,R.shallowRef)(null);function n(){a.value?.()}return(0,R.provide)(A,{cameraRef:l,rerender:n,sceneRerenderRef:a}),(0,R.watch)(()=>({rotX:o.rotX,rotY:o.rotY,zoom:o.zoom}),t=>{let r=l.value;if(!r)return;let p=!1;t.rotX!==void 0&&r.rotX!==t.rotX&&(r.rotX=t.rotX,p=!0),t.rotY!==void 0&&r.rotY!==t.rotY&&(r.rotY=t.rotY,p=!0),t.zoom!==void 0&&r.zoom!==t.zoom&&(r.zoom=t.zoom,p=!0),p&&a.value?.()}),()=>(0,R.h)("div",{class:o.class,style:o.style},s.default?.()??[])}});var O=require("vue"),ne=require("glyphcss");var D=(0,O.defineComponent)({name:"GlyphPerspectiveCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},distance:{type:Number,default:void 0},perspective:{type:Number,default:void 0},zoom:{type:Number,default:void 0},stretch:{type:Number,default:void 0},center:{type:Array,default:void 0},class:{type:String,default:void 0},style:{type:[Object,String],default:void 0}},setup(o,{slots:s}){let i={};o.rotX!==void 0&&(i.rotX=o.rotX),o.rotY!==void 0&&(i.rotY=o.rotY),o.distance!==void 0&&(i.distance=o.distance),o.perspective!==void 0&&(i.perspective=o.perspective),o.zoom!==void 0&&(i.zoom=o.zoom),o.stretch!==void 0&&(i.stretch=o.stretch),o.center!==void 0&&(i.center=o.center);let l=(0,O.shallowRef)((0,ne.createGlyphPerspectiveCamera)(i)),a=(0,O.shallowRef)(null);function n(){a.value?.()}return(0,O.provide)(A,{cameraRef:l,rerender:n,sceneRerenderRef:a}),(0,O.watch)(()=>({rotX:o.rotX,rotY:o.rotY,distance:o.distance,perspective:o.perspective,zoom:o.zoom,stretch:o.stretch}),t=>{let r=l.value;if(!r)return;let p=!1;t.rotX!==void 0&&r.rotX!==t.rotX&&(r.rotX=t.rotX,p=!0),t.rotY!==void 0&&r.rotY!==t.rotY&&(r.rotY=t.rotY,p=!0),t.distance!==void 0&&r.distance!==t.distance&&(r.distance=t.distance,p=!0),t.perspective!==void 0&&r.perspective!==t.perspective&&(r.perspective=t.perspective,p=!0),t.zoom!==void 0&&r.zoom!==t.zoom&&(r.zoom=t.zoom,p=!0),t.stretch!==void 0&&r.stretch!==t.stretch&&(r.stretch=t.stretch,p=!0),p&&a.value?.()}),()=>(0,O.h)("div",{class:o.class,style:o.style},s.default?.()??[])}});var re=require("vue");function I(){let o=(0,re.inject)(A);if(!o)throw new Error("glyphcss: useGlyphCamera must be used inside a GlyphCamera component.");return o}var v=require("vue"),le=require("glyphcss");var X=(0,v.defineComponent)({name:"GlyphOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},invert:{type:[Boolean,Number],default:!1},clampPitch:{type:Boolean,default:!0},animate:{type:[Boolean,Object],default:!1}},setup(o){let s=(0,v.inject)(y);if(!s)throw new Error("glyphcss: GlyphOrbitControls must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,v.shallowRef)(null),a=(0,v.watchEffect)(()=>{let n=i.value;if(!n||l.value)return;let t={drag:o.drag,wheel:o.wheel,invert:o.invert,clampPitch:o.clampPitch,animate:o.animate===!1?!1:o.animate};l.value=(0,le.createGlyphOrbitControls)(n,t)});return(0,v.onBeforeUnmount)(()=>{a(),l.value?.destroy(),l.value=null}),(0,v.watch)(()=>({drag:o.drag,wheel:o.wheel,invert:o.invert,clampPitch:o.clampPitch,animate:o.animate}),n=>{l.value?.update({drag:n.drag,wheel:n.wheel,invert:n.invert,clampPitch:n.clampPitch,animate:n.animate===!1?!1:n.animate})}),()=>null}});var b=require("vue"),ae=require("glyphcss");var K=(0,b.defineComponent)({name:"GlyphMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},invert:{type:[Boolean,Number],default:!1},animate:{type:[Boolean,Object],default:!1}},setup(o){let s=(0,b.inject)(y);if(!s)throw new Error("glyphcss: GlyphMapControls must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,b.shallowRef)(null),a=(0,b.watchEffect)(()=>{let n=i.value;if(!n||l.value)return;let t={drag:o.drag,wheel:o.wheel,invert:o.invert,animate:o.animate===!1?!1:o.animate};l.value=(0,ae.createGlyphMapControls)(n,t)});return(0,b.onBeforeUnmount)(()=>{a(),l.value?.destroy(),l.value=null}),(0,b.watch)(()=>({drag:o.drag,wheel:o.wheel,invert:o.invert,animate:o.animate}),n=>{l.value?.update({drag:n.drag,wheel:n.wheel,invert:n.invert,animate:n.animate===!1?!1:n.animate})}),()=>null}});var S=require("vue"),ie=require("glyphcss");var U=(0,S.defineComponent)({name:"GlyphFirstPersonControls",props:{drag:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},moveSpeed:{type:Number,default:.05},lookSpeed:{type:Number,default:.004},invert:{type:[Boolean,Number],default:!1}},setup(o){let s=(0,S.inject)(y);if(!s)throw new Error("glyphcss: GlyphFirstPersonControls must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,S.shallowRef)(null),a=(0,S.watchEffect)(()=>{let n=i.value;if(!n||l.value)return;let t={drag:o.drag,keyboard:o.keyboard,moveSpeed:o.moveSpeed,lookSpeed:o.lookSpeed,invert:o.invert};l.value=(0,ie.createGlyphFirstPersonControls)(n,t)});return(0,S.onBeforeUnmount)(()=>{a(),l.value?.destroy(),l.value=null}),(0,S.watch)(()=>({drag:o.drag,keyboard:o.keyboard,moveSpeed:o.moveSpeed,lookSpeed:o.lookSpeed,invert:o.invert}),n=>{l.value?.update(n)}),()=>null}});var g=require("vue");function Ce(o){let s=o,i=s*.05,l=[];function a(n,t,r){let p=[n[0]-i,n[1]-i,n[2]],u=[t[0]-i,t[1]-i,t[2]],c=[t[0]+i,t[1]+i,t[2]],m=[n[0]+i,n[1]+i,n[2]];l.push({vertices:[p,u,c],color:r}),l.push({vertices:[p,c,m],color:r})}return a([0,0,0],[s,0,0],"#ff0000"),a([0,0,0],[0,s,0],"#00ff00"),a([0,0,0],[0,0,s],"#0000ff"),l}var Y=(0,g.defineComponent)({name:"GlyphAxesHelper",props:{size:{type:Number,default:1}},setup(o){let s=(0,g.inject)(y);if(!s)throw new Error("glyphcss: GlyphAxesHelper must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,g.shallowRef)(null),a=(0,g.computed)(()=>Ce(o.size??1));function n(){let t=i.value;t&&(l.value=t.add(a.value))}return(0,g.onMounted)(n),(0,g.onBeforeUnmount)(()=>{l.value?.dispose(),l.value=null}),(0,g.watch)(a,()=>{l.value?.dispose(),l.value=null,n()}),()=>null}});var C=require("vue");function Pe(o,s,i){let[l,a,n]=o,t=i,r=[l,a,n+t],p=[l,a,n-t],u=[l+t,a,n],c=[l-t,a,n],m=[l,a+t,n],V=[l,a-t,n];return[{vertices:[r,u,m],color:s},{vertices:[r,m,c],color:s},{vertices:[r,c,V],color:s},{vertices:[r,V,u],color:s},{vertices:[p,m,u],color:s},{vertices:[p,c,m],color:s},{vertices:[p,V,c],color:s},{vertices:[p,u,V],color:s}]}var _=(0,C.defineComponent)({name:"GlyphDirectionalLightHelper",props:{position:{type:Array,default:()=>[1,1,1]},color:{type:String,default:"#ffff00"},size:{type:Number,default:.1}},setup(o){let s=(0,C.inject)(y);if(!s)throw new Error("glyphcss: GlyphDirectionalLightHelper must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,C.shallowRef)(null),a=(0,C.computed)(()=>Pe(o.position??[1,1,1],o.color??"#ffff00",o.size??.1));function n(){let t=i.value;t&&(l.value=t.add(a.value))}return(0,C.onMounted)(n),(0,C.onBeforeUnmount)(()=>{l.value?.dispose(),l.value=null}),(0,C.watch)(a,()=>{l.value?.dispose(),l.value=null,n()}),()=>null}});var W=require("glyphcss");var x=require("vue"),se=require("@glyphcss/core");function H(o){return o&&typeof o=="object"&&"value"in o?o.value:o}function q(o,s,i){let l=(0,x.ref)(null),a=null,n=null,t=null,r=(0,x.ref)(0);function p(){return i==null?l.value:H(i)??l.value}function u(){n!==null&&(cancelAnimationFrame(n),n=null),t=null}function c(){u(),a&&(a.stopAllAction(),a.uncacheRoot(),a=null,r.value++)}function m(){if(n!==null)return;function G(w){if(t===null){t=w,n=requestAnimationFrame(G);return}let M=(w-t)/1e3;t=w,a?.update(M),n=requestAnimationFrame(G)}n=requestAnimationFrame(G)}function V(){c();let G=H(o),w=H(s);if(!G||G.length===0||!w)return;let M=p();M&&(a=(0,se.createGlyphAnimationMixer)(M,w),r.value++,m())}let pe=(0,x.watch)(()=>{let G=H(o),w=H(s),M=i!=null?H(i):l.value;return{c:G,ctrl:w,r:M}},()=>V(),{immediate:!0,deep:!1});(0,x.onUnmounted)(()=>{pe(),c()});let $=(0,x.computed)(()=>H(o)??[]),ce=(0,x.computed)(()=>$.value.map(G=>G.name)),ue=(0,x.computed)(()=>(r.value,a)),ye=(0,x.computed)(()=>{r.value;let G=$.value,w={};for(let M of G)Object.defineProperty(w,M.name,{enumerable:!0,get(){if(!a)return null;try{return a.clipAction(M.name)}catch{return null}}});return w});return{ref:l,mixer:ue,clips:$,names:ce,actions:ye}}0&&(module.exports={BASE_TILE,CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION,GlyphAxesHelper,GlyphCamera,GlyphCameraContextKey,GlyphDirectionalLightHelper,GlyphFirstPersonControls,GlyphGround,GlyphHotspot,GlyphMapControls,GlyphMesh,GlyphOrbitControls,GlyphOrthographicCamera,GlyphPerspectiveCamera,GlyphScene,GlyphSceneContextKey,LoopOnce,LoopPingPong,LoopRepeat,VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT,antiprismPolygons,arrowPolygons,axesHelperPolygons,bakeSolidTextureSampledPolygons,bakeSolidTextureSamples,bipyramidPolygons,buildSceneContext,cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons,cameraCullNormalKey,cameraCullVisibleSignature,cameraFacingDepth,clampChannel,computeSceneBbox,computeShapeLighting,conePolygons,coverPlanarPolygons,createGlyphAnimationMixer,createIsometricCamera,cubePolygons,cuboctahedronPolygons,cullInteriorPolygons,cylinderPolygons,deltoidalHexecontahedronPolygons,deltoidalIcositetrahedronPolygons,disdyakisDodecahedronPolygons,disdyakisTriacontahedronPolygons,dodecahedronPolygons,findGlyphMeshHandle,findMeshUnderPoint,formatColor,greatDodecahedronPolygons,greatIcosahedronPolygons,greatStellatedDodecahedronPolygons,icosahedronPolygons,icosidodecahedronPolygons,injectGlyphBaseStyles,inverseRotateVec3,isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups,loadMesh,mergePolygons,normalFacesCamera,normalizeInvertMultiplier,normalizePolygons,octahedronPolygons,optimizeMeshPolygons,parseColor,parseGltf,parseHexColor,parseMtl,parseObj,parsePureColor,parseRgbColor,parseVox,pentagonalHexecontahedronPolygons,pentagonalIcositetrahedronPolygons,pentakisDodecahedronPolygons,planePolygons,pointInMeshElement,polygonCssSurfaceNormal,polygonFaces,polygonFacesCamera,prismPolygons,pyramidPolygons,resolveGeometry,rhombicDodecahedronPolygons,rhombicTriacontahedronPolygons,rhombicosidodecahedronPolygons,rhombicuboctahedronPolygons,ringPolygons,ringQuadPolygons,rotateVec3,shadeColor,smallStellatedDodecahedronPolygons,snubCubePolygons,snubDodecahedronPolygons,spherePolygons,tetrahedronPolygons,tetrakisHexahedronPolygons,torusPolygons,trapezohedronPolygons,triakisIcosahedronPolygons,triakisOctahedronPolygons,triakisTetrahedronPolygons,truncatedCubePolygons,truncatedCuboctahedronPolygons,truncatedDodecahedronPolygons,truncatedIcosahedronPolygons,truncatedIcosidodecahedronPolygons,truncatedOctahedronPolygons,truncatedTetrahedronPolygons,useGlyphAnimation,useGlyphCamera,useGlyphSceneContext});
1
+ "use strict";var ee=Object.defineProperty;var de=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var me=Object.prototype.hasOwnProperty;var fe=(t,s)=>{for(var i in s)ee(t,i,{get:s[i],enumerable:!0})},Ge=(t,s,i,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of he(s))!me.call(t,a)&&a!==i&&ee(t,a,{get:()=>s[a],enumerable:!(l=de(s,a))||l.enumerable});return t};var ge=t=>Ge(ee({},"__esModule",{value:!0}),t);var ve={};fe(ve,{BASE_TILE:()=>e.BASE_TILE,CAMERA_BACKFACE_CULL_EPS:()=>e.CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE:()=>e.DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION:()=>e.DEFAULT_PROJECTION,GlyphAxesHelper:()=>W,GlyphCamera:()=>H,GlyphCameraContextKey:()=>A,GlyphDirectionalLightHelper:()=>q,GlyphFirstPersonControls:()=>_,GlyphGround:()=>F,GlyphHotspot:()=>D,GlyphMapControls:()=>U,GlyphMesh:()=>z,GlyphOrbitControls:()=>K,GlyphOrthographicCamera:()=>H,GlyphPerspectiveCamera:()=>Y,GlyphScene:()=>B,GlyphSceneContextKey:()=>y,LoopOnce:()=>e.LoopOnce,LoopPingPong:()=>e.LoopPingPong,LoopRepeat:()=>e.LoopRepeat,VOXEL_CAMERA_CULL_AXIS_EPS:()=>e.VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT:()=>e.VOXEL_CAMERA_CULL_NORMAL_LIMIT,antiprismPolygons:()=>e.antiprismPolygons,arrowPolygons:()=>e.arrowPolygons,axesHelperPolygons:()=>e.axesHelperPolygons,bakeSolidTextureSampledPolygons:()=>e.bakeSolidTextureSampledPolygons,bakeSolidTextureSamples:()=>e.bakeSolidTextureSamples,bipyramidPolygons:()=>e.bipyramidPolygons,buildSceneContext:()=>e.buildSceneContext,cameraCullNormalGroups:()=>e.cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons:()=>e.cameraCullNormalGroupsFromPolygons,cameraCullNormalKey:()=>e.cameraCullNormalKey,cameraCullVisibleSignature:()=>e.cameraCullVisibleSignature,cameraFacingDepth:()=>e.cameraFacingDepth,clampChannel:()=>e.clampChannel,computeSceneBbox:()=>e.computeSceneBbox,computeShapeLighting:()=>e.computeShapeLighting,conePolygons:()=>e.conePolygons,coverPlanarPolygons:()=>e.coverPlanarPolygons,createGlyphAnimationMixer:()=>e.createGlyphAnimationMixer,createIsometricCamera:()=>e.createIsometricCamera,cubePolygons:()=>e.cubePolygons,cuboctahedronPolygons:()=>e.cuboctahedronPolygons,cullInteriorPolygons:()=>e.cullInteriorPolygons,cylinderPolygons:()=>e.cylinderPolygons,deltoidalHexecontahedronPolygons:()=>e.deltoidalHexecontahedronPolygons,deltoidalIcositetrahedronPolygons:()=>e.deltoidalIcositetrahedronPolygons,disdyakisDodecahedronPolygons:()=>e.disdyakisDodecahedronPolygons,disdyakisTriacontahedronPolygons:()=>e.disdyakisTriacontahedronPolygons,dodecahedronPolygons:()=>e.dodecahedronPolygons,findGlyphMeshHandle:()=>P.findGlyphMeshHandle,findMeshUnderPoint:()=>P.findMeshUnderPoint,formatColor:()=>e.formatColor,greatDodecahedronPolygons:()=>e.greatDodecahedronPolygons,greatIcosahedronPolygons:()=>e.greatIcosahedronPolygons,greatStellatedDodecahedronPolygons:()=>e.greatStellatedDodecahedronPolygons,icosahedronPolygons:()=>e.icosahedronPolygons,icosidodecahedronPolygons:()=>e.icosidodecahedronPolygons,injectGlyphBaseStyles:()=>Z.injectGlyphBaseStyles,inverseRotateVec3:()=>e.inverseRotateVec3,isAxisAlignedSurfaceNormal:()=>e.isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups:()=>e.isVoxelCameraCullableNormalGroups,loadMesh:()=>e.loadMesh,mergePolygons:()=>e.mergePolygons,normalFacesCamera:()=>e.normalFacesCamera,normalizeInvertMultiplier:()=>e.normalizeInvertMultiplier,normalizePolygons:()=>e.normalizePolygons,octahedronPolygons:()=>e.octahedronPolygons,optimizeMeshPolygons:()=>e.optimizeMeshPolygons,parseColor:()=>e.parseColor,parseGltf:()=>e.parseGltf,parseHexColor:()=>e.parseHexColor,parseMtl:()=>e.parseMtl,parseObj:()=>e.parseObj,parsePureColor:()=>e.parsePureColor,parseRgbColor:()=>e.parseRgbColor,parseVox:()=>e.parseVox,pentagonalHexecontahedronPolygons:()=>e.pentagonalHexecontahedronPolygons,pentagonalIcositetrahedronPolygons:()=>e.pentagonalIcositetrahedronPolygons,pentakisDodecahedronPolygons:()=>e.pentakisDodecahedronPolygons,planePolygons:()=>e.planePolygons,pointInMeshElement:()=>P.pointInMeshElement,polygonCssSurfaceNormal:()=>e.polygonCssSurfaceNormal,polygonFaces:()=>e.polygonFaces,polygonFacesCamera:()=>e.polygonFacesCamera,prismPolygons:()=>e.prismPolygons,pyramidPolygons:()=>e.pyramidPolygons,resolveGeometry:()=>e.resolveGeometry,rhombicDodecahedronPolygons:()=>e.rhombicDodecahedronPolygons,rhombicTriacontahedronPolygons:()=>e.rhombicTriacontahedronPolygons,rhombicosidodecahedronPolygons:()=>e.rhombicosidodecahedronPolygons,rhombicuboctahedronPolygons:()=>e.rhombicuboctahedronPolygons,ringPolygons:()=>e.ringPolygons,ringQuadPolygons:()=>e.ringQuadPolygons,rotateVec3:()=>e.rotateVec3,shadeColor:()=>e.shadeColor,smallStellatedDodecahedronPolygons:()=>e.smallStellatedDodecahedronPolygons,snubCubePolygons:()=>e.snubCubePolygons,snubDodecahedronPolygons:()=>e.snubDodecahedronPolygons,spherePolygons:()=>e.spherePolygons,tetrahedronPolygons:()=>e.tetrahedronPolygons,tetrakisHexahedronPolygons:()=>e.tetrakisHexahedronPolygons,torusPolygons:()=>e.torusPolygons,trapezohedronPolygons:()=>e.trapezohedronPolygons,triakisIcosahedronPolygons:()=>e.triakisIcosahedronPolygons,triakisOctahedronPolygons:()=>e.triakisOctahedronPolygons,triakisTetrahedronPolygons:()=>e.triakisTetrahedronPolygons,truncatedCubePolygons:()=>e.truncatedCubePolygons,truncatedCuboctahedronPolygons:()=>e.truncatedCuboctahedronPolygons,truncatedDodecahedronPolygons:()=>e.truncatedDodecahedronPolygons,truncatedIcosahedronPolygons:()=>e.truncatedIcosahedronPolygons,truncatedIcosidodecahedronPolygons:()=>e.truncatedIcosidodecahedronPolygons,truncatedOctahedronPolygons:()=>e.truncatedOctahedronPolygons,truncatedTetrahedronPolygons:()=>e.truncatedTetrahedronPolygons,useGlyphAnimation:()=>$,useGlyphCamera:()=>X,useGlyphSceneContext:()=>I});module.exports=ge(ve);var e=require("@glyphcss/core");var f=require("vue"),k=require("glyphcss");var te=require("vue"),A=Symbol("glyph-camera");function j(){let t=(0,te.inject)(A);if(!t)throw new Error("glyphcss: GlyphScene must be placed inside a GlyphPerspectiveCamera or GlyphOrthographicCamera.");return t}var y=Symbol("glyph-scene");var B=(0,f.defineComponent)({name:"GlyphScene",inheritAttrs:!1,props:{mode:{type:String,default:void 0},glyphPalette:{type:String,default:void 0},useColors:{type:Boolean,default:void 0},cols:{type:Number,default:void 0},rows:{type:Number,default:void 0},cellAspect:{type:Number,default:void 0},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},autoSize:{type:Boolean,default:void 0},shadow:{type:Object,default:void 0},class:{type:String,default:void 0}},setup(t,{slots:s,attrs:i}){let{cameraRef:l,sceneRerenderRef:a}=j(),r=(0,f.shallowRef)(null),o=(0,f.shallowRef)(null);return(0,f.provide)(y,{sceneRef:o}),(0,f.onMounted)(()=>{let n=r.value;if(!n)return;(0,k.injectGlyphBaseStyles)(n.ownerDocument??void 0);let p={};t.mode!==void 0&&(p.mode=t.mode),t.glyphPalette!==void 0&&(p.glyphPalette=t.glyphPalette),t.useColors!==void 0&&(p.useColors=t.useColors),t.cols!==void 0&&(p.cols=t.cols),t.rows!==void 0&&(p.rows=t.rows),t.cellAspect!==void 0&&(p.cellAspect=t.cellAspect),t.directionalLight!==void 0&&(p.directionalLight=t.directionalLight),t.ambientLight!==void 0&&(p.ambientLight=t.ambientLight),t.autoSize!==void 0&&(p.autoSize=t.autoSize),t.shadow!==void 0&&(p.shadow=t.shadow),l.value!==null&&(p.camera=l.value),o.value=(0,k.createGlyphScene)(n,p),a.value=()=>o.value?.rerender()}),(0,f.onBeforeUnmount)(()=>{o.value?.destroy(),o.value=null,a.value=null}),(0,f.watch)(()=>({mode:t.mode,glyphPalette:t.glyphPalette,useColors:t.useColors,cols:t.cols,rows:t.rows,cellAspect:t.cellAspect,directionalLight:t.directionalLight,ambientLight:t.ambientLight,autoSize:t.autoSize,shadow:t.shadow}),n=>{let p=o.value;if(!p)return;let c={};n.mode!==void 0&&(c.mode=n.mode),n.glyphPalette!==void 0&&(c.glyphPalette=n.glyphPalette),n.useColors!==void 0&&(c.useColors=n.useColors),n.cols!==void 0&&(c.cols=n.cols),n.rows!==void 0&&(c.rows=n.rows),n.cellAspect!==void 0&&(c.cellAspect=n.cellAspect),n.directionalLight!==void 0&&(c.directionalLight=n.directionalLight),n.ambientLight!==void 0&&(c.ambientLight=n.ambientLight),n.autoSize!==void 0&&(c.autoSize=n.autoSize),c.shadow=n.shadow,Object.keys(c).length>0&&p.setOptions(c)},{deep:!1}),()=>{let n=`glyph-host${t.class?` ${t.class}`:""}`;return(0,f.h)("div",{ref:r,class:n,...Object.fromEntries(Object.entries(i).filter(([p])=>p!=="class"))},s.default?.())}}});var d=require("vue"),L=require("@glyphcss/core");var z=(0,d.defineComponent)({name:"GlyphMesh",props:{id:{type:String,default:void 0},polygons:{type:Array,default:void 0},src:{type:String,default:void 0},geometry:{type:String,default:void 0},size:{type:Number,default:1},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},class:{type:String,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0}},setup(t,{slots:s}){let i=(0,d.inject)(y);if(!i)throw new Error("glyphcss: GlyphMesh must be used inside a GlyphScene.");let{sceneRef:l}=i,a=(0,d.shallowRef)(null),r=(0,d.shallowRef)(null);(0,d.watch)(()=>t.src,(u,M,J)=>{if(!u){r.value=null;return}let T=!1;J(()=>{T=!0}),(0,L.loadMesh)(u).then(Q=>{T||(r.value=Q.polygons)}).catch(()=>{T||(r.value=[])})},{immediate:!0});let o=(0,d.computed)(()=>{let u=t.polygons!==void 0?t.polygons:t.src!==void 0?r.value??[]:t.geometry!==void 0?(0,L.resolveGeometry)(t.geometry,{size:t.size,color:t.color}):[];return t.autoCenter?(0,L.recenterPolygons)(u):u});function n(){let u={};return t.id&&(u.id=t.id),t.position&&(u.position=t.position),t.scale!==void 0&&(u.scale=t.scale),t.rotation&&(u.rotation=t.rotation),u.castShadow=t.castShadow,u.receiveShadow=t.receiveShadow,u}function p(){let u=l.value;if(!u)return;let M=u.add(o.value,n());a.value=M}function c(){a.value?.dispose(),a.value=null}let h=(0,d.watchEffect)(()=>{!l.value||a.value||p()});return(0,d.onBeforeUnmount)(()=>{h(),c()}),(0,d.watch)(o,()=>{c(),p()}),(0,d.watch)(()=>({id:t.id,position:t.position,scale:t.scale,rotation:t.rotation,castShadow:t.castShadow,receiveShadow:t.receiveShadow}),()=>{let u=a.value;u&&(u.setTransform(n()),l.value?.rerender())},{deep:!1}),()=>{let u=`glyph-mesh${t.class?` ${t.class}`:""}`;return(0,d.h)("div",{"data-glyph-mesh-id":t.id,class:u},s.default?.())}}});var N=require("vue"),oe=require("@glyphcss/core");var F=(0,N.defineComponent)({name:"GlyphGround",props:{size:{type:Number,default:5},color:{type:String,default:"#444444"},position:{type:Array,default:()=>[0,-.5,0]},rotation:{type:Array,default:void 0},id:{type:String,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!0},class:{type:String,default:void 0}},setup(t,{slots:s}){let i=(0,N.computed)(()=>(0,oe.planePolygons)({axis:1,size:t.size,offset:0,color:t.color}));return()=>(0,N.h)(z,{id:t.id,polygons:i.value,position:t.position,rotation:t.rotation??void 0,castShadow:t.castShadow,receiveShadow:t.receiveShadow,class:t.class},s)}});var m=require("vue");var D=(0,m.defineComponent)({name:"GlyphHotspot",props:{id:{type:String,required:!0},at:{type:Array,required:!0},size:{type:Array,default:void 0}},emits:["click"],setup(t,{emit:s,slots:i}){let l=(0,m.inject)(y);if(!l)throw new Error("glyphcss: GlyphHotspot must be used inside a GlyphScene.");let{sceneRef:a}=l,r=(0,m.shallowRef)(null),o=(0,m.shallowRef)(null);function n(){let h=a.value;if(!h)return;let u=h.addHotspot({id:t.id,at:t.at,size:t.size},()=>s("click"));r.value=u,o.value=u.el}function p(){r.value?.remove(),r.value=null,o.value=null}let c=(0,m.watchEffect)(()=>{!a.value||r.value||n()});return(0,m.onBeforeUnmount)(()=>{c(),p()}),(0,m.watch)(()=>({id:t.id,at:t.at,size:t.size}),()=>{p(),n()},{deep:!1}),()=>{let h=o.value,u=i.default?.();return h&&u?(0,m.h)(m.Teleport,{to:h},u):null}}});var ne=require("vue");function I(){let t=(0,ne.inject)(y);if(!t)throw new Error("glyphcss: must be used inside a GlyphScene.");return t}var P=require("glyphcss");var R=require("vue"),re=require("glyphcss");var H=(0,R.defineComponent)({name:"GlyphOrthographicCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},zoom:{type:Number,default:void 0},center:{type:Array,default:void 0},class:{type:String,default:void 0},style:{type:[Object,String],default:void 0}},setup(t,{slots:s}){let i={};t.rotX!==void 0&&(i.rotX=t.rotX),t.rotY!==void 0&&(i.rotY=t.rotY),t.zoom!==void 0&&(i.zoom=t.zoom),t.center!==void 0&&(i.center=t.center);let l=(0,R.shallowRef)((0,re.createGlyphOrthographicCamera)(i)),a=(0,R.shallowRef)(null);function r(){a.value?.()}return(0,R.provide)(A,{cameraRef:l,rerender:r,sceneRerenderRef:a}),(0,R.watch)(()=>({rotX:t.rotX,rotY:t.rotY,zoom:t.zoom}),o=>{let n=l.value;if(!n)return;let p=!1;o.rotX!==void 0&&n.rotX!==o.rotX&&(n.rotX=o.rotX,p=!0),o.rotY!==void 0&&n.rotY!==o.rotY&&(n.rotY=o.rotY,p=!0),o.zoom!==void 0&&n.zoom!==o.zoom&&(n.zoom=o.zoom,p=!0),p&&a.value?.()}),()=>(0,R.h)("div",{class:t.class,style:t.style},s.default?.()??[])}});var O=require("vue"),le=require("glyphcss");var Y=(0,O.defineComponent)({name:"GlyphPerspectiveCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},distance:{type:Number,default:void 0},perspective:{type:Number,default:void 0},zoom:{type:Number,default:void 0},stretch:{type:Number,default:void 0},center:{type:Array,default:void 0},class:{type:String,default:void 0},style:{type:[Object,String],default:void 0}},setup(t,{slots:s}){let i={};t.rotX!==void 0&&(i.rotX=t.rotX),t.rotY!==void 0&&(i.rotY=t.rotY),t.distance!==void 0&&(i.distance=t.distance),t.perspective!==void 0&&(i.perspective=t.perspective),t.zoom!==void 0&&(i.zoom=t.zoom),t.stretch!==void 0&&(i.stretch=t.stretch),t.center!==void 0&&(i.center=t.center);let l=(0,O.shallowRef)((0,le.createGlyphPerspectiveCamera)(i)),a=(0,O.shallowRef)(null);function r(){a.value?.()}return(0,O.provide)(A,{cameraRef:l,rerender:r,sceneRerenderRef:a}),(0,O.watch)(()=>({rotX:t.rotX,rotY:t.rotY,distance:t.distance,perspective:t.perspective,zoom:t.zoom,stretch:t.stretch}),o=>{let n=l.value;if(!n)return;let p=!1;o.rotX!==void 0&&n.rotX!==o.rotX&&(n.rotX=o.rotX,p=!0),o.rotY!==void 0&&n.rotY!==o.rotY&&(n.rotY=o.rotY,p=!0),o.distance!==void 0&&n.distance!==o.distance&&(n.distance=o.distance,p=!0),o.perspective!==void 0&&n.perspective!==o.perspective&&(n.perspective=o.perspective,p=!0),o.zoom!==void 0&&n.zoom!==o.zoom&&(n.zoom=o.zoom,p=!0),o.stretch!==void 0&&n.stretch!==o.stretch&&(n.stretch=o.stretch,p=!0),p&&a.value?.()}),()=>(0,O.h)("div",{class:t.class,style:t.style},s.default?.()??[])}});var ae=require("vue");function X(){let t=(0,ae.inject)(A);if(!t)throw new Error("glyphcss: useGlyphCamera must be used inside a GlyphCamera component.");return t}var v=require("vue"),ie=require("glyphcss");var K=(0,v.defineComponent)({name:"GlyphOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},invert:{type:[Boolean,Number],default:!1},clampPitch:{type:Boolean,default:!0},animate:{type:[Boolean,Object],default:!1}},setup(t){let s=(0,v.inject)(y);if(!s)throw new Error("glyphcss: GlyphOrbitControls must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,v.shallowRef)(null),a=(0,v.watchEffect)(()=>{let r=i.value;if(!r||l.value)return;let o={drag:t.drag,wheel:t.wheel,invert:t.invert,clampPitch:t.clampPitch,animate:t.animate===!1?!1:t.animate};l.value=(0,ie.createGlyphOrbitControls)(r,o)});return(0,v.onBeforeUnmount)(()=>{a(),l.value?.destroy(),l.value=null}),(0,v.watch)(()=>({drag:t.drag,wheel:t.wheel,invert:t.invert,clampPitch:t.clampPitch,animate:t.animate}),r=>{l.value?.update({drag:r.drag,wheel:r.wheel,invert:r.invert,clampPitch:r.clampPitch,animate:r.animate===!1?!1:r.animate})}),()=>null}});var b=require("vue"),se=require("glyphcss");var U=(0,b.defineComponent)({name:"GlyphMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},invert:{type:[Boolean,Number],default:!1},animate:{type:[Boolean,Object],default:!1}},setup(t){let s=(0,b.inject)(y);if(!s)throw new Error("glyphcss: GlyphMapControls must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,b.shallowRef)(null),a=(0,b.watchEffect)(()=>{let r=i.value;if(!r||l.value)return;let o={drag:t.drag,wheel:t.wheel,invert:t.invert,animate:t.animate===!1?!1:t.animate};l.value=(0,se.createGlyphMapControls)(r,o)});return(0,b.onBeforeUnmount)(()=>{a(),l.value?.destroy(),l.value=null}),(0,b.watch)(()=>({drag:t.drag,wheel:t.wheel,invert:t.invert,animate:t.animate}),r=>{l.value?.update({drag:r.drag,wheel:r.wheel,invert:r.invert,animate:r.animate===!1?!1:r.animate})}),()=>null}});var S=require("vue"),pe=require("glyphcss");var _=(0,S.defineComponent)({name:"GlyphFirstPersonControls",props:{enabled:{type:Boolean,default:void 0},lookEnabled:{type:Boolean,default:void 0},moveEnabled:{type:Boolean,default:void 0},jumpEnabled:{type:Boolean,default:void 0},crouchEnabled:{type:Boolean,default:void 0},lookSensitivity:{type:Number,default:void 0},invertY:{type:Boolean,default:void 0},moveSpeed:{type:Number,default:void 0},jumpVelocity:{type:Number,default:void 0},gravity:{type:Number,default:void 0},eyeHeight:{type:Number,default:void 0},crouchHeight:{type:Number,default:void 0},groundZ:{type:Number,default:void 0},minPitch:{type:Number,default:void 0},maxPitch:{type:Number,default:void 0}},setup(t){let s=(0,S.inject)(y);if(!s)throw new Error("glyphcss: GlyphFirstPersonControls must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,S.shallowRef)(null),a=()=>({enabled:t.enabled,lookEnabled:t.lookEnabled,moveEnabled:t.moveEnabled,jumpEnabled:t.jumpEnabled,crouchEnabled:t.crouchEnabled,lookSensitivity:t.lookSensitivity,invertY:t.invertY,moveSpeed:t.moveSpeed,jumpVelocity:t.jumpVelocity,gravity:t.gravity,eyeHeight:t.eyeHeight,crouchHeight:t.crouchHeight,groundZ:t.groundZ,minPitch:t.minPitch,maxPitch:t.maxPitch}),r=(0,S.watchEffect)(()=>{let o=i.value;!o||l.value||(l.value=(0,pe.createGlyphFirstPersonControls)(o,a()))});return(0,S.onBeforeUnmount)(()=>{r(),l.value?.destroy(),l.value=null}),(0,S.watch)(a,o=>{l.value?.update(o)}),()=>null}});var g=require("vue");function Ce(t){let s=t,i=s*.05,l=[];function a(r,o,n){let p=[r[0]-i,r[1]-i,r[2]],c=[o[0]-i,o[1]-i,o[2]],h=[o[0]+i,o[1]+i,o[2]],u=[r[0]+i,r[1]+i,r[2]];l.push({vertices:[p,c,h],color:n}),l.push({vertices:[p,h,u],color:n})}return a([0,0,0],[s,0,0],"#ff0000"),a([0,0,0],[0,s,0],"#00ff00"),a([0,0,0],[0,0,s],"#0000ff"),l}var W=(0,g.defineComponent)({name:"GlyphAxesHelper",props:{size:{type:Number,default:1}},setup(t){let s=(0,g.inject)(y);if(!s)throw new Error("glyphcss: GlyphAxesHelper must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,g.shallowRef)(null),a=(0,g.computed)(()=>Ce(t.size??1));function r(){let o=i.value;o&&(l.value=o.add(a.value))}return(0,g.onMounted)(r),(0,g.onBeforeUnmount)(()=>{l.value?.dispose(),l.value=null}),(0,g.watch)(a,()=>{l.value?.dispose(),l.value=null,r()}),()=>null}});var C=require("vue");function Pe(t,s,i){let[l,a,r]=t,o=i,n=[l,a,r+o],p=[l,a,r-o],c=[l+o,a,r],h=[l-o,a,r],u=[l,a+o,r],M=[l,a-o,r];return[{vertices:[n,c,u],color:s},{vertices:[n,u,h],color:s},{vertices:[n,h,M],color:s},{vertices:[n,M,c],color:s},{vertices:[p,u,c],color:s},{vertices:[p,h,u],color:s},{vertices:[p,M,h],color:s},{vertices:[p,c,M],color:s}]}var q=(0,C.defineComponent)({name:"GlyphDirectionalLightHelper",props:{position:{type:Array,default:()=>[1,1,1]},color:{type:String,default:"#ffff00"},size:{type:Number,default:.1}},setup(t){let s=(0,C.inject)(y);if(!s)throw new Error("glyphcss: GlyphDirectionalLightHelper must be used inside a GlyphScene.");let{sceneRef:i}=s,l=(0,C.shallowRef)(null),a=(0,C.computed)(()=>Pe(t.position??[1,1,1],t.color??"#ffff00",t.size??.1));function r(){let o=i.value;o&&(l.value=o.add(a.value))}return(0,C.onMounted)(r),(0,C.onBeforeUnmount)(()=>{l.value?.dispose(),l.value=null}),(0,C.watch)(a,()=>{l.value?.dispose(),l.value=null,r()}),()=>null}});var Z=require("glyphcss");var x=require("vue"),ue=require("@glyphcss/core");function V(t){return t&&typeof t=="object"&&"value"in t?t.value:t}function $(t,s,i){let l=(0,x.ref)(null),a=null,r=null,o=null,n=(0,x.ref)(0);function p(){return i==null?l.value:V(i)??l.value}function c(){r!==null&&(cancelAnimationFrame(r),r=null),o=null}function h(){c(),a&&(a.stopAllAction(),a.uncacheRoot(),a=null,n.value++)}function u(){if(r!==null)return;function G(w){if(o===null){o=w,r=requestAnimationFrame(G);return}let E=(w-o)/1e3;o=w,a?.update(E),r=requestAnimationFrame(G)}r=requestAnimationFrame(G)}function M(){h();let G=V(t),w=V(s);if(!G||G.length===0||!w)return;let E=p();E&&(a=(0,ue.createGlyphAnimationMixer)(E,w),n.value++,u())}let J=(0,x.watch)(()=>{let G=V(t),w=V(s),E=i!=null?V(i):l.value;return{c:G,ctrl:w,r:E}},()=>M(),{immediate:!0,deep:!1});(0,x.onUnmounted)(()=>{J(),h()});let T=(0,x.computed)(()=>V(t)??[]),Q=(0,x.computed)(()=>T.value.map(G=>G.name)),ce=(0,x.computed)(()=>(n.value,a)),ye=(0,x.computed)(()=>{n.value;let G=T.value,w={};for(let E of G)Object.defineProperty(w,E.name,{enumerable:!0,get(){if(!a)return null;try{return a.clipAction(E.name)}catch{return null}}});return w});return{ref:l,mixer:ce,clips:T,names:Q,actions:ye}}0&&(module.exports={BASE_TILE,CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION,GlyphAxesHelper,GlyphCamera,GlyphCameraContextKey,GlyphDirectionalLightHelper,GlyphFirstPersonControls,GlyphGround,GlyphHotspot,GlyphMapControls,GlyphMesh,GlyphOrbitControls,GlyphOrthographicCamera,GlyphPerspectiveCamera,GlyphScene,GlyphSceneContextKey,LoopOnce,LoopPingPong,LoopRepeat,VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT,antiprismPolygons,arrowPolygons,axesHelperPolygons,bakeSolidTextureSampledPolygons,bakeSolidTextureSamples,bipyramidPolygons,buildSceneContext,cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons,cameraCullNormalKey,cameraCullVisibleSignature,cameraFacingDepth,clampChannel,computeSceneBbox,computeShapeLighting,conePolygons,coverPlanarPolygons,createGlyphAnimationMixer,createIsometricCamera,cubePolygons,cuboctahedronPolygons,cullInteriorPolygons,cylinderPolygons,deltoidalHexecontahedronPolygons,deltoidalIcositetrahedronPolygons,disdyakisDodecahedronPolygons,disdyakisTriacontahedronPolygons,dodecahedronPolygons,findGlyphMeshHandle,findMeshUnderPoint,formatColor,greatDodecahedronPolygons,greatIcosahedronPolygons,greatStellatedDodecahedronPolygons,icosahedronPolygons,icosidodecahedronPolygons,injectGlyphBaseStyles,inverseRotateVec3,isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups,loadMesh,mergePolygons,normalFacesCamera,normalizeInvertMultiplier,normalizePolygons,octahedronPolygons,optimizeMeshPolygons,parseColor,parseGltf,parseHexColor,parseMtl,parseObj,parsePureColor,parseRgbColor,parseVox,pentagonalHexecontahedronPolygons,pentagonalIcositetrahedronPolygons,pentakisDodecahedronPolygons,planePolygons,pointInMeshElement,polygonCssSurfaceNormal,polygonFaces,polygonFacesCamera,prismPolygons,pyramidPolygons,resolveGeometry,rhombicDodecahedronPolygons,rhombicTriacontahedronPolygons,rhombicosidodecahedronPolygons,rhombicuboctahedronPolygons,ringPolygons,ringQuadPolygons,rotateVec3,shadeColor,smallStellatedDodecahedronPolygons,snubCubePolygons,snubDodecahedronPolygons,spherePolygons,tetrahedronPolygons,tetrakisHexahedronPolygons,torusPolygons,trapezohedronPolygons,triakisIcosahedronPolygons,triakisOctahedronPolygons,triakisTetrahedronPolygons,truncatedCubePolygons,truncatedCuboctahedronPolygons,truncatedDodecahedronPolygons,truncatedIcosahedronPolygons,truncatedIcosidodecahedronPolygons,truncatedOctahedronPolygons,truncatedTetrahedronPolygons,useGlyphAnimation,useGlyphCamera,useGlyphSceneContext});
package/dist/index.d.cts CHANGED
@@ -132,6 +132,8 @@ declare const GlyphScene: vue.DefineComponent<vue.ExtractPropTypes<{
132
132
  interface GlyphMeshProps {
133
133
  id?: string;
134
134
  polygons?: Polygon[];
135
+ /** URL of an OBJ / GLB / glTF / VOX / STL mesh, fetched + parsed via `loadMesh`. */
136
+ src?: string;
135
137
  /**
136
138
  * Built-in geometry name. Resolved via `resolveGeometry` when neither
137
139
  * `polygons` nor `src` is provided.
@@ -146,6 +148,11 @@ interface GlyphMeshProps {
146
148
  position?: Vec3;
147
149
  scale?: number | Vec3;
148
150
  rotation?: Vec3;
151
+ /**
152
+ * Recenter the mesh's bounding-box center to the origin so it pivots around
153
+ * its own center (center only, no scaling — matches voxcss). Default false.
154
+ */
155
+ autoCenter?: boolean;
149
156
  /**
150
157
  * This mesh casts shadows onto `receiveShadow` surfaces.
151
158
  * Default false — opt-in, matching PolyMesh behaviour.
@@ -175,6 +182,10 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
175
182
  type: PropType<Polygon[]>;
176
183
  default: undefined;
177
184
  };
185
+ src: {
186
+ type: StringConstructor;
187
+ default: undefined;
188
+ };
178
189
  geometry: {
179
190
  type: PropType<GlyphGeometryName>;
180
191
  default: undefined;
@@ -199,6 +210,10 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
199
210
  type: PropType<Vec3>;
200
211
  default: undefined;
201
212
  };
213
+ autoCenter: {
214
+ type: BooleanConstructor;
215
+ default: boolean;
216
+ };
202
217
  castShadow: {
203
218
  type: BooleanConstructor;
204
219
  default: boolean;
@@ -250,6 +265,10 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
250
265
  type: PropType<Polygon[]>;
251
266
  default: undefined;
252
267
  };
268
+ src: {
269
+ type: StringConstructor;
270
+ default: undefined;
271
+ };
253
272
  geometry: {
254
273
  type: PropType<GlyphGeometryName>;
255
274
  default: undefined;
@@ -274,6 +293,10 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
274
293
  type: PropType<Vec3>;
275
294
  default: undefined;
276
295
  };
296
+ autoCenter: {
297
+ type: BooleanConstructor;
298
+ default: boolean;
299
+ };
277
300
  castShadow: {
278
301
  type: BooleanConstructor;
279
302
  default: boolean;
@@ -320,12 +343,14 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
320
343
  onWheel: (e: GlyphWheelEvent) => void;
321
344
  id: string;
322
345
  polygons: Polygon[];
346
+ src: string;
323
347
  geometry: GlyphGeometryName;
324
348
  size: number;
325
349
  color: string;
326
350
  position: Vec3;
327
351
  scale: number | Vec3;
328
352
  rotation: Vec3;
353
+ autoCenter: boolean;
329
354
  castShadow: boolean;
330
355
  receiveShadow: boolean;
331
356
  onPointerDown: (e: GlyphPointerEvent) => void;
@@ -807,60 +832,160 @@ declare const GlyphMapControls: vue.DefineComponent<vue.ExtractPropTypes<{
807
832
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
808
833
 
809
834
  interface GlyphFirstPersonControlsProps {
810
- drag?: boolean;
811
- keyboard?: boolean;
835
+ enabled?: boolean;
836
+ lookEnabled?: boolean;
837
+ moveEnabled?: boolean;
838
+ jumpEnabled?: boolean;
839
+ crouchEnabled?: boolean;
840
+ lookSensitivity?: number;
841
+ invertY?: boolean;
812
842
  moveSpeed?: number;
813
- lookSpeed?: number;
814
- invert?: boolean | number;
843
+ jumpVelocity?: number;
844
+ gravity?: number;
845
+ eyeHeight?: number;
846
+ crouchHeight?: number;
847
+ groundZ?: number;
848
+ minPitch?: number;
849
+ maxPitch?: number;
815
850
  }
816
851
  declare const GlyphFirstPersonControls: vue.DefineComponent<vue.ExtractPropTypes<{
817
- drag: {
852
+ enabled: {
818
853
  type: BooleanConstructor;
819
- default: boolean;
854
+ default: undefined;
820
855
  };
821
- keyboard: {
856
+ lookEnabled: {
822
857
  type: BooleanConstructor;
823
- default: boolean;
858
+ default: undefined;
859
+ };
860
+ moveEnabled: {
861
+ type: BooleanConstructor;
862
+ default: undefined;
863
+ };
864
+ jumpEnabled: {
865
+ type: BooleanConstructor;
866
+ default: undefined;
867
+ };
868
+ crouchEnabled: {
869
+ type: BooleanConstructor;
870
+ default: undefined;
871
+ };
872
+ lookSensitivity: {
873
+ type: NumberConstructor;
874
+ default: undefined;
875
+ };
876
+ invertY: {
877
+ type: BooleanConstructor;
878
+ default: undefined;
824
879
  };
825
880
  moveSpeed: {
826
881
  type: NumberConstructor;
827
- default: number;
882
+ default: undefined;
828
883
  };
829
- lookSpeed: {
884
+ jumpVelocity: {
830
885
  type: NumberConstructor;
831
- default: number;
886
+ default: undefined;
832
887
  };
833
- invert: {
834
- type: () => boolean | number;
835
- default: boolean;
888
+ gravity: {
889
+ type: NumberConstructor;
890
+ default: undefined;
891
+ };
892
+ eyeHeight: {
893
+ type: NumberConstructor;
894
+ default: undefined;
895
+ };
896
+ crouchHeight: {
897
+ type: NumberConstructor;
898
+ default: undefined;
899
+ };
900
+ groundZ: {
901
+ type: NumberConstructor;
902
+ default: undefined;
903
+ };
904
+ minPitch: {
905
+ type: NumberConstructor;
906
+ default: undefined;
907
+ };
908
+ maxPitch: {
909
+ type: NumberConstructor;
910
+ default: undefined;
836
911
  };
837
912
  }>, () => null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
838
- drag: {
913
+ enabled: {
839
914
  type: BooleanConstructor;
840
- default: boolean;
915
+ default: undefined;
841
916
  };
842
- keyboard: {
917
+ lookEnabled: {
843
918
  type: BooleanConstructor;
844
- default: boolean;
919
+ default: undefined;
920
+ };
921
+ moveEnabled: {
922
+ type: BooleanConstructor;
923
+ default: undefined;
924
+ };
925
+ jumpEnabled: {
926
+ type: BooleanConstructor;
927
+ default: undefined;
928
+ };
929
+ crouchEnabled: {
930
+ type: BooleanConstructor;
931
+ default: undefined;
932
+ };
933
+ lookSensitivity: {
934
+ type: NumberConstructor;
935
+ default: undefined;
936
+ };
937
+ invertY: {
938
+ type: BooleanConstructor;
939
+ default: undefined;
845
940
  };
846
941
  moveSpeed: {
847
942
  type: NumberConstructor;
848
- default: number;
943
+ default: undefined;
849
944
  };
850
- lookSpeed: {
945
+ jumpVelocity: {
851
946
  type: NumberConstructor;
852
- default: number;
947
+ default: undefined;
853
948
  };
854
- invert: {
855
- type: () => boolean | number;
856
- default: boolean;
949
+ gravity: {
950
+ type: NumberConstructor;
951
+ default: undefined;
952
+ };
953
+ eyeHeight: {
954
+ type: NumberConstructor;
955
+ default: undefined;
956
+ };
957
+ crouchHeight: {
958
+ type: NumberConstructor;
959
+ default: undefined;
960
+ };
961
+ groundZ: {
962
+ type: NumberConstructor;
963
+ default: undefined;
964
+ };
965
+ minPitch: {
966
+ type: NumberConstructor;
967
+ default: undefined;
968
+ };
969
+ maxPitch: {
970
+ type: NumberConstructor;
971
+ default: undefined;
857
972
  };
858
973
  }>> & Readonly<{}>, {
859
- drag: boolean;
860
- invert: number | boolean;
861
- keyboard: boolean;
974
+ enabled: boolean;
975
+ lookEnabled: boolean;
976
+ moveEnabled: boolean;
977
+ jumpEnabled: boolean;
978
+ crouchEnabled: boolean;
979
+ lookSensitivity: number;
980
+ invertY: boolean;
862
981
  moveSpeed: number;
863
- lookSpeed: number;
982
+ jumpVelocity: number;
983
+ gravity: number;
984
+ eyeHeight: number;
985
+ crouchHeight: number;
986
+ groundZ: number;
987
+ minPitch: number;
988
+ maxPitch: number;
864
989
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
865
990
 
866
991
  interface GlyphAxesHelperProps {
package/dist/index.d.ts CHANGED
@@ -132,6 +132,8 @@ declare const GlyphScene: vue.DefineComponent<vue.ExtractPropTypes<{
132
132
  interface GlyphMeshProps {
133
133
  id?: string;
134
134
  polygons?: Polygon[];
135
+ /** URL of an OBJ / GLB / glTF / VOX / STL mesh, fetched + parsed via `loadMesh`. */
136
+ src?: string;
135
137
  /**
136
138
  * Built-in geometry name. Resolved via `resolveGeometry` when neither
137
139
  * `polygons` nor `src` is provided.
@@ -146,6 +148,11 @@ interface GlyphMeshProps {
146
148
  position?: Vec3;
147
149
  scale?: number | Vec3;
148
150
  rotation?: Vec3;
151
+ /**
152
+ * Recenter the mesh's bounding-box center to the origin so it pivots around
153
+ * its own center (center only, no scaling — matches voxcss). Default false.
154
+ */
155
+ autoCenter?: boolean;
149
156
  /**
150
157
  * This mesh casts shadows onto `receiveShadow` surfaces.
151
158
  * Default false — opt-in, matching PolyMesh behaviour.
@@ -175,6 +182,10 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
175
182
  type: PropType<Polygon[]>;
176
183
  default: undefined;
177
184
  };
185
+ src: {
186
+ type: StringConstructor;
187
+ default: undefined;
188
+ };
178
189
  geometry: {
179
190
  type: PropType<GlyphGeometryName>;
180
191
  default: undefined;
@@ -199,6 +210,10 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
199
210
  type: PropType<Vec3>;
200
211
  default: undefined;
201
212
  };
213
+ autoCenter: {
214
+ type: BooleanConstructor;
215
+ default: boolean;
216
+ };
202
217
  castShadow: {
203
218
  type: BooleanConstructor;
204
219
  default: boolean;
@@ -250,6 +265,10 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
250
265
  type: PropType<Polygon[]>;
251
266
  default: undefined;
252
267
  };
268
+ src: {
269
+ type: StringConstructor;
270
+ default: undefined;
271
+ };
253
272
  geometry: {
254
273
  type: PropType<GlyphGeometryName>;
255
274
  default: undefined;
@@ -274,6 +293,10 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
274
293
  type: PropType<Vec3>;
275
294
  default: undefined;
276
295
  };
296
+ autoCenter: {
297
+ type: BooleanConstructor;
298
+ default: boolean;
299
+ };
277
300
  castShadow: {
278
301
  type: BooleanConstructor;
279
302
  default: boolean;
@@ -320,12 +343,14 @@ declare const GlyphMesh: vue.DefineComponent<vue.ExtractPropTypes<{
320
343
  onWheel: (e: GlyphWheelEvent) => void;
321
344
  id: string;
322
345
  polygons: Polygon[];
346
+ src: string;
323
347
  geometry: GlyphGeometryName;
324
348
  size: number;
325
349
  color: string;
326
350
  position: Vec3;
327
351
  scale: number | Vec3;
328
352
  rotation: Vec3;
353
+ autoCenter: boolean;
329
354
  castShadow: boolean;
330
355
  receiveShadow: boolean;
331
356
  onPointerDown: (e: GlyphPointerEvent) => void;
@@ -807,60 +832,160 @@ declare const GlyphMapControls: vue.DefineComponent<vue.ExtractPropTypes<{
807
832
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
808
833
 
809
834
  interface GlyphFirstPersonControlsProps {
810
- drag?: boolean;
811
- keyboard?: boolean;
835
+ enabled?: boolean;
836
+ lookEnabled?: boolean;
837
+ moveEnabled?: boolean;
838
+ jumpEnabled?: boolean;
839
+ crouchEnabled?: boolean;
840
+ lookSensitivity?: number;
841
+ invertY?: boolean;
812
842
  moveSpeed?: number;
813
- lookSpeed?: number;
814
- invert?: boolean | number;
843
+ jumpVelocity?: number;
844
+ gravity?: number;
845
+ eyeHeight?: number;
846
+ crouchHeight?: number;
847
+ groundZ?: number;
848
+ minPitch?: number;
849
+ maxPitch?: number;
815
850
  }
816
851
  declare const GlyphFirstPersonControls: vue.DefineComponent<vue.ExtractPropTypes<{
817
- drag: {
852
+ enabled: {
818
853
  type: BooleanConstructor;
819
- default: boolean;
854
+ default: undefined;
820
855
  };
821
- keyboard: {
856
+ lookEnabled: {
822
857
  type: BooleanConstructor;
823
- default: boolean;
858
+ default: undefined;
859
+ };
860
+ moveEnabled: {
861
+ type: BooleanConstructor;
862
+ default: undefined;
863
+ };
864
+ jumpEnabled: {
865
+ type: BooleanConstructor;
866
+ default: undefined;
867
+ };
868
+ crouchEnabled: {
869
+ type: BooleanConstructor;
870
+ default: undefined;
871
+ };
872
+ lookSensitivity: {
873
+ type: NumberConstructor;
874
+ default: undefined;
875
+ };
876
+ invertY: {
877
+ type: BooleanConstructor;
878
+ default: undefined;
824
879
  };
825
880
  moveSpeed: {
826
881
  type: NumberConstructor;
827
- default: number;
882
+ default: undefined;
828
883
  };
829
- lookSpeed: {
884
+ jumpVelocity: {
830
885
  type: NumberConstructor;
831
- default: number;
886
+ default: undefined;
832
887
  };
833
- invert: {
834
- type: () => boolean | number;
835
- default: boolean;
888
+ gravity: {
889
+ type: NumberConstructor;
890
+ default: undefined;
891
+ };
892
+ eyeHeight: {
893
+ type: NumberConstructor;
894
+ default: undefined;
895
+ };
896
+ crouchHeight: {
897
+ type: NumberConstructor;
898
+ default: undefined;
899
+ };
900
+ groundZ: {
901
+ type: NumberConstructor;
902
+ default: undefined;
903
+ };
904
+ minPitch: {
905
+ type: NumberConstructor;
906
+ default: undefined;
907
+ };
908
+ maxPitch: {
909
+ type: NumberConstructor;
910
+ default: undefined;
836
911
  };
837
912
  }>, () => null, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
838
- drag: {
913
+ enabled: {
839
914
  type: BooleanConstructor;
840
- default: boolean;
915
+ default: undefined;
841
916
  };
842
- keyboard: {
917
+ lookEnabled: {
843
918
  type: BooleanConstructor;
844
- default: boolean;
919
+ default: undefined;
920
+ };
921
+ moveEnabled: {
922
+ type: BooleanConstructor;
923
+ default: undefined;
924
+ };
925
+ jumpEnabled: {
926
+ type: BooleanConstructor;
927
+ default: undefined;
928
+ };
929
+ crouchEnabled: {
930
+ type: BooleanConstructor;
931
+ default: undefined;
932
+ };
933
+ lookSensitivity: {
934
+ type: NumberConstructor;
935
+ default: undefined;
936
+ };
937
+ invertY: {
938
+ type: BooleanConstructor;
939
+ default: undefined;
845
940
  };
846
941
  moveSpeed: {
847
942
  type: NumberConstructor;
848
- default: number;
943
+ default: undefined;
849
944
  };
850
- lookSpeed: {
945
+ jumpVelocity: {
851
946
  type: NumberConstructor;
852
- default: number;
947
+ default: undefined;
853
948
  };
854
- invert: {
855
- type: () => boolean | number;
856
- default: boolean;
949
+ gravity: {
950
+ type: NumberConstructor;
951
+ default: undefined;
952
+ };
953
+ eyeHeight: {
954
+ type: NumberConstructor;
955
+ default: undefined;
956
+ };
957
+ crouchHeight: {
958
+ type: NumberConstructor;
959
+ default: undefined;
960
+ };
961
+ groundZ: {
962
+ type: NumberConstructor;
963
+ default: undefined;
964
+ };
965
+ minPitch: {
966
+ type: NumberConstructor;
967
+ default: undefined;
968
+ };
969
+ maxPitch: {
970
+ type: NumberConstructor;
971
+ default: undefined;
857
972
  };
858
973
  }>> & Readonly<{}>, {
859
- drag: boolean;
860
- invert: number | boolean;
861
- keyboard: boolean;
974
+ enabled: boolean;
975
+ lookEnabled: boolean;
976
+ moveEnabled: boolean;
977
+ jumpEnabled: boolean;
978
+ crouchEnabled: boolean;
979
+ lookSensitivity: number;
980
+ invertY: boolean;
862
981
  moveSpeed: number;
863
- lookSpeed: number;
982
+ jumpVelocity: number;
983
+ gravity: number;
984
+ eyeHeight: number;
985
+ crouchHeight: number;
986
+ groundZ: number;
987
+ minPitch: number;
988
+ maxPitch: number;
864
989
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
865
990
 
866
991
  interface GlyphAxesHelperProps {
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{CAMERA_BACKFACE_CULL_EPS as an,VOXEL_CAMERA_CULL_AXIS_EPS as sn,VOXEL_CAMERA_CULL_NORMAL_LIMIT as pn,normalizePolygons as cn,mergePolygons as un,coverPlanarPolygons as yn,optimizeMeshPolygons as hn,cullInteriorPolygons as dn,cameraCullNormalGroups as mn,cameraCullNormalGroupsFromPolygons as fn,cameraCullNormalKey as Gn,cameraCullVisibleSignature as gn,cameraFacingDepth as Cn,isAxisAlignedSurfaceNormal as Pn,isVoxelCameraCullableNormalGroups as vn,normalFacesCamera as bn,polygonCssSurfaceNormal as Sn,polygonFacesCamera as xn,parseObj as wn,parseMtl as An,parseGltf as Rn,bakeSolidTextureSamples as On,bakeSolidTextureSampledPolygons as Mn,loadMesh as Tn,createIsometricCamera as Hn,parseVox as Vn,polygonFaces as Ln,computeShapeLighting as zn,parseColor as En,parsePureColor as kn,parseHexColor as Bn,parseRgbColor as Fn,formatColor as Nn,clampChannel as jn,shadeColor as Dn,rotateVec3 as In,inverseRotateVec3 as Xn,resolveGeometry as Kn,tetrahedronPolygons as Un,cubePolygons as Yn,octahedronPolygons as _n,dodecahedronPolygons as Wn,icosahedronPolygons as qn,smallStellatedDodecahedronPolygons as $n,greatDodecahedronPolygons as Jn,greatStellatedDodecahedronPolygons as Qn,greatIcosahedronPolygons as Zn,cuboctahedronPolygons as er,icosidodecahedronPolygons as or,truncatedTetrahedronPolygons as tr,truncatedCubePolygons as nr,truncatedOctahedronPolygons as rr,truncatedDodecahedronPolygons as lr,truncatedIcosahedronPolygons as ar,truncatedCuboctahedronPolygons as ir,truncatedIcosidodecahedronPolygons as sr,rhombicuboctahedronPolygons as pr,rhombicosidodecahedronPolygons as cr,snubCubePolygons as ur,snubDodecahedronPolygons as yr,rhombicDodecahedronPolygons as hr,rhombicTriacontahedronPolygons as dr,triakisTetrahedronPolygons as mr,triakisOctahedronPolygons as fr,triakisIcosahedronPolygons as Gr,tetrakisHexahedronPolygons as gr,pentakisDodecahedronPolygons as Cr,disdyakisDodecahedronPolygons as Pr,disdyakisTriacontahedronPolygons as vr,deltoidalIcositetrahedronPolygons as br,deltoidalHexecontahedronPolygons as Sr,pentagonalIcositetrahedronPolygons as xr,pentagonalHexecontahedronPolygons as wr,prismPolygons as Ar,antiprismPolygons as Rr,bipyramidPolygons as Or,trapezohedronPolygons as Mr,spherePolygons as Tr,cylinderPolygons as Hr,conePolygons as Vr,torusPolygons as Lr,pyramidPolygons as zr,planePolygons as Er,ringPolygons as kr,ringQuadPolygons as Br,arrowPolygons as Fr,axesHelperPolygons as Nr,buildSceneContext as jr,computeSceneBbox as Dr,BASE_TILE as Ir,DEFAULT_CAMERA_STATE as Xr,DEFAULT_PROJECTION as Kr,normalizeInvertMultiplier as Ur,createGlyphAnimationMixer as Yr,LoopOnce as _r,LoopRepeat as Wr,LoopPingPong as qr}from"@glyphcss/core";import{defineComponent as J,h as Q,provide as Z,shallowRef as k,onMounted as ee,onBeforeUnmount as oe,watch as te}from"vue";import{createGlyphScene as ne,injectGlyphBaseStyles as re}from"glyphcss";import{inject as $}from"vue";var m=Symbol("glyph-camera");function v(){let e=$(m);if(!e)throw new Error("glyphcss: GlyphScene must be placed inside a GlyphPerspectiveCamera or GlyphOrthographicCamera.");return e}var u=Symbol("glyph-scene");var x=J({name:"GlyphScene",inheritAttrs:!1,props:{mode:{type:String,default:void 0},glyphPalette:{type:String,default:void 0},useColors:{type:Boolean,default:void 0},cols:{type:Number,default:void 0},rows:{type:Number,default:void 0},cellAspect:{type:Number,default:void 0},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},autoSize:{type:Boolean,default:void 0},shadow:{type:Object,default:void 0},class:{type:String,default:void 0}},setup(e,{slots:s,attrs:a}){let{cameraRef:r,sceneRerenderRef:l}=v(),t=k(null),o=k(null);return Z(u,{sceneRef:o}),ee(()=>{let n=t.value;if(!n)return;re(n.ownerDocument??void 0);let i={};e.mode!==void 0&&(i.mode=e.mode),e.glyphPalette!==void 0&&(i.glyphPalette=e.glyphPalette),e.useColors!==void 0&&(i.useColors=e.useColors),e.cols!==void 0&&(i.cols=e.cols),e.rows!==void 0&&(i.rows=e.rows),e.cellAspect!==void 0&&(i.cellAspect=e.cellAspect),e.directionalLight!==void 0&&(i.directionalLight=e.directionalLight),e.ambientLight!==void 0&&(i.ambientLight=e.ambientLight),e.autoSize!==void 0&&(i.autoSize=e.autoSize),e.shadow!==void 0&&(i.shadow=e.shadow),r.value!==null&&(i.camera=r.value),o.value=ne(n,i),l.value=()=>o.value?.rerender()}),oe(()=>{o.value?.destroy(),o.value=null,l.value=null}),te(()=>({mode:e.mode,glyphPalette:e.glyphPalette,useColors:e.useColors,cols:e.cols,rows:e.rows,cellAspect:e.cellAspect,directionalLight:e.directionalLight,ambientLight:e.ambientLight,autoSize:e.autoSize,shadow:e.shadow}),n=>{let i=o.value;if(!i)return;let c={};n.mode!==void 0&&(c.mode=n.mode),n.glyphPalette!==void 0&&(c.glyphPalette=n.glyphPalette),n.useColors!==void 0&&(c.useColors=n.useColors),n.cols!==void 0&&(c.cols=n.cols),n.rows!==void 0&&(c.rows=n.rows),n.cellAspect!==void 0&&(c.cellAspect=n.cellAspect),n.directionalLight!==void 0&&(c.directionalLight=n.directionalLight),n.ambientLight!==void 0&&(c.ambientLight=n.ambientLight),n.autoSize!==void 0&&(c.autoSize=n.autoSize),c.shadow=n.shadow,Object.keys(c).length>0&&i.setOptions(c)},{deep:!1}),()=>{let n=`glyph-host${e.class?` ${e.class}`:""}`;return Q("div",{ref:t,class:n,...Object.fromEntries(Object.entries(a).filter(([i])=>i!=="class"))},s.default?.())}}});import{defineComponent as le,h as ae,inject as ie,onBeforeUnmount as se,watch as B,shallowRef as pe,computed as ce,watchEffect as ue}from"vue";import{resolveGeometry as ye}from"@glyphcss/core";var P=le({name:"GlyphMesh",props:{id:{type:String,default:void 0},polygons:{type:Array,default:void 0},geometry:{type:String,default:void 0},size:{type:Number,default:1},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},class:{type:String,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0}},setup(e,{slots:s}){let a=ie(u);if(!a)throw new Error("glyphcss: GlyphMesh must be used inside a GlyphScene.");let{sceneRef:r}=a,l=pe(null),t=ce(()=>e.polygons!==void 0?e.polygons:e.geometry!==void 0?ye(e.geometry,{size:e.size,color:e.color}):[]);function o(){let p={};return e.id&&(p.id=e.id),e.position&&(p.position=e.position),e.scale!==void 0&&(p.scale=e.scale),e.rotation&&(p.rotation=e.rotation),p.castShadow=e.castShadow,p.receiveShadow=e.receiveShadow,p}function n(){let p=r.value;if(!p)return;let y=p.add(t.value,o());l.value=y}function i(){l.value?.dispose(),l.value=null}let c=ue(()=>{!r.value||l.value||n()});return se(()=>{c(),i()}),B(t,()=>{i(),n()}),B(()=>({id:e.id,position:e.position,scale:e.scale,rotation:e.rotation,castShadow:e.castShadow,receiveShadow:e.receiveShadow}),()=>{let p=l.value;p&&(p.setTransform(o()),r.value?.rerender())},{deep:!1}),()=>{let p=`glyph-mesh${e.class?` ${e.class}`:""}`;return ae("div",{"data-glyph-mesh-id":e.id,class:p},s.default?.())}}});import{defineComponent as he,h as de,computed as me}from"vue";import{planePolygons as fe}from"@glyphcss/core";var w=he({name:"GlyphGround",props:{size:{type:Number,default:5},color:{type:String,default:"#444444"},position:{type:Array,default:()=>[0,-.5,0]},rotation:{type:Array,default:void 0},id:{type:String,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!0},class:{type:String,default:void 0}},setup(e,{slots:s}){let a=me(()=>fe({axis:1,size:e.size,offset:0,color:e.color}));return()=>de(P,{id:e.id,polygons:a.value,position:e.position,rotation:e.rotation??void 0,castShadow:e.castShadow,receiveShadow:e.receiveShadow,class:e.class},s)}});import{defineComponent as Ge,inject as ge,onBeforeUnmount as Ce,watch as Pe,shallowRef as F,watchEffect as ve,h as be,Teleport as Se}from"vue";var A=Ge({name:"GlyphHotspot",props:{id:{type:String,required:!0},at:{type:Array,required:!0},size:{type:Array,default:void 0}},emits:["click"],setup(e,{emit:s,slots:a}){let r=ge(u);if(!r)throw new Error("glyphcss: GlyphHotspot must be used inside a GlyphScene.");let{sceneRef:l}=r,t=F(null),o=F(null);function n(){let p=l.value;if(!p)return;let y=p.addHotspot({id:e.id,at:e.at,size:e.size},()=>s("click"));t.value=y,o.value=y.el}function i(){t.value?.remove(),t.value=null,o.value=null}let c=ve(()=>{!l.value||t.value||n()});return Ce(()=>{c(),i()}),Pe(()=>({id:e.id,at:e.at,size:e.size}),()=>{i(),n()},{deep:!1}),()=>{let p=o.value,y=a.default?.();return p&&y?be(Se,{to:p},y):null}}});import{inject as xe}from"vue";function R(){let e=xe(u);if(!e)throw new Error("glyphcss: must be used inside a GlyphScene.");return e}import{findGlyphMeshHandle as N,pointInMeshElement as j,findMeshUnderPoint as D}from"glyphcss";import{defineComponent as we,h as Ae,provide as Re,shallowRef as I,watch as Oe}from"vue";import{createGlyphOrthographicCamera as Me}from"glyphcss";var G=we({name:"GlyphOrthographicCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},zoom:{type:Number,default:void 0},center:{type:Array,default:void 0},class:{type:String,default:void 0},style:{type:[Object,String],default:void 0}},setup(e,{slots:s}){let a={};e.rotX!==void 0&&(a.rotX=e.rotX),e.rotY!==void 0&&(a.rotY=e.rotY),e.zoom!==void 0&&(a.zoom=e.zoom),e.center!==void 0&&(a.center=e.center);let r=I(Me(a)),l=I(null);function t(){l.value?.()}return Re(m,{cameraRef:r,rerender:t,sceneRerenderRef:l}),Oe(()=>({rotX:e.rotX,rotY:e.rotY,zoom:e.zoom}),o=>{let n=r.value;if(!n)return;let i=!1;o.rotX!==void 0&&n.rotX!==o.rotX&&(n.rotX=o.rotX,i=!0),o.rotY!==void 0&&n.rotY!==o.rotY&&(n.rotY=o.rotY,i=!0),o.zoom!==void 0&&n.zoom!==o.zoom&&(n.zoom=o.zoom,i=!0),i&&l.value?.()}),()=>Ae("div",{class:e.class,style:e.style},s.default?.()??[])}});import{defineComponent as Te,h as He,provide as Ve,shallowRef as X,watch as Le}from"vue";import{createGlyphPerspectiveCamera as ze}from"glyphcss";var O=Te({name:"GlyphPerspectiveCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},distance:{type:Number,default:void 0},perspective:{type:Number,default:void 0},zoom:{type:Number,default:void 0},stretch:{type:Number,default:void 0},center:{type:Array,default:void 0},class:{type:String,default:void 0},style:{type:[Object,String],default:void 0}},setup(e,{slots:s}){let a={};e.rotX!==void 0&&(a.rotX=e.rotX),e.rotY!==void 0&&(a.rotY=e.rotY),e.distance!==void 0&&(a.distance=e.distance),e.perspective!==void 0&&(a.perspective=e.perspective),e.zoom!==void 0&&(a.zoom=e.zoom),e.stretch!==void 0&&(a.stretch=e.stretch),e.center!==void 0&&(a.center=e.center);let r=X(ze(a)),l=X(null);function t(){l.value?.()}return Ve(m,{cameraRef:r,rerender:t,sceneRerenderRef:l}),Le(()=>({rotX:e.rotX,rotY:e.rotY,distance:e.distance,perspective:e.perspective,zoom:e.zoom,stretch:e.stretch}),o=>{let n=r.value;if(!n)return;let i=!1;o.rotX!==void 0&&n.rotX!==o.rotX&&(n.rotX=o.rotX,i=!0),o.rotY!==void 0&&n.rotY!==o.rotY&&(n.rotY=o.rotY,i=!0),o.distance!==void 0&&n.distance!==o.distance&&(n.distance=o.distance,i=!0),o.perspective!==void 0&&n.perspective!==o.perspective&&(n.perspective=o.perspective,i=!0),o.zoom!==void 0&&n.zoom!==o.zoom&&(n.zoom=o.zoom,i=!0),o.stretch!==void 0&&n.stretch!==o.stretch&&(n.stretch=o.stretch,i=!0),i&&l.value?.()}),()=>He("div",{class:e.class,style:e.style},s.default?.()??[])}});import{inject as Ee}from"vue";function M(){let e=Ee(m);if(!e)throw new Error("glyphcss: useGlyphCamera must be used inside a GlyphCamera component.");return e}import{defineComponent as ke,inject as Be,onBeforeUnmount as Fe,watch as Ne,shallowRef as je,watchEffect as De}from"vue";import{createGlyphOrbitControls as Ie}from"glyphcss";var T=ke({name:"GlyphOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},invert:{type:[Boolean,Number],default:!1},clampPitch:{type:Boolean,default:!0},animate:{type:[Boolean,Object],default:!1}},setup(e){let s=Be(u);if(!s)throw new Error("glyphcss: GlyphOrbitControls must be used inside a GlyphScene.");let{sceneRef:a}=s,r=je(null),l=De(()=>{let t=a.value;if(!t||r.value)return;let o={drag:e.drag,wheel:e.wheel,invert:e.invert,clampPitch:e.clampPitch,animate:e.animate===!1?!1:e.animate};r.value=Ie(t,o)});return Fe(()=>{l(),r.value?.destroy(),r.value=null}),Ne(()=>({drag:e.drag,wheel:e.wheel,invert:e.invert,clampPitch:e.clampPitch,animate:e.animate}),t=>{r.value?.update({drag:t.drag,wheel:t.wheel,invert:t.invert,clampPitch:t.clampPitch,animate:t.animate===!1?!1:t.animate})}),()=>null}});import{defineComponent as Xe,inject as Ke,onBeforeUnmount as Ue,watch as Ye,shallowRef as _e,watchEffect as We}from"vue";import{createGlyphMapControls as qe}from"glyphcss";var H=Xe({name:"GlyphMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},invert:{type:[Boolean,Number],default:!1},animate:{type:[Boolean,Object],default:!1}},setup(e){let s=Ke(u);if(!s)throw new Error("glyphcss: GlyphMapControls must be used inside a GlyphScene.");let{sceneRef:a}=s,r=_e(null),l=We(()=>{let t=a.value;if(!t||r.value)return;let o={drag:e.drag,wheel:e.wheel,invert:e.invert,animate:e.animate===!1?!1:e.animate};r.value=qe(t,o)});return Ue(()=>{l(),r.value?.destroy(),r.value=null}),Ye(()=>({drag:e.drag,wheel:e.wheel,invert:e.invert,animate:e.animate}),t=>{r.value?.update({drag:t.drag,wheel:t.wheel,invert:t.invert,animate:t.animate===!1?!1:t.animate})}),()=>null}});import{defineComponent as $e,inject as Je,onBeforeUnmount as Qe,watch as Ze,shallowRef as eo,watchEffect as oo}from"vue";import{createGlyphFirstPersonControls as to}from"glyphcss";var V=$e({name:"GlyphFirstPersonControls",props:{drag:{type:Boolean,default:!0},keyboard:{type:Boolean,default:!0},moveSpeed:{type:Number,default:.05},lookSpeed:{type:Number,default:.004},invert:{type:[Boolean,Number],default:!1}},setup(e){let s=Je(u);if(!s)throw new Error("glyphcss: GlyphFirstPersonControls must be used inside a GlyphScene.");let{sceneRef:a}=s,r=eo(null),l=oo(()=>{let t=a.value;if(!t||r.value)return;let o={drag:e.drag,keyboard:e.keyboard,moveSpeed:e.moveSpeed,lookSpeed:e.lookSpeed,invert:e.invert};r.value=to(t,o)});return Qe(()=>{l(),r.value?.destroy(),r.value=null}),Ze(()=>({drag:e.drag,keyboard:e.keyboard,moveSpeed:e.moveSpeed,lookSpeed:e.lookSpeed,invert:e.invert}),t=>{r.value?.update(t)}),()=>null}});import{defineComponent as no,inject as ro,onMounted as lo,onBeforeUnmount as ao,watch as io,computed as so,shallowRef as po}from"vue";function co(e){let s=e,a=s*.05,r=[];function l(t,o,n){let i=[t[0]-a,t[1]-a,t[2]],c=[o[0]-a,o[1]-a,o[2]],p=[o[0]+a,o[1]+a,o[2]],y=[t[0]+a,t[1]+a,t[2]];r.push({vertices:[i,c,p],color:n}),r.push({vertices:[i,p,y],color:n})}return l([0,0,0],[s,0,0],"#ff0000"),l([0,0,0],[0,s,0],"#00ff00"),l([0,0,0],[0,0,s],"#0000ff"),r}var L=no({name:"GlyphAxesHelper",props:{size:{type:Number,default:1}},setup(e){let s=ro(u);if(!s)throw new Error("glyphcss: GlyphAxesHelper must be used inside a GlyphScene.");let{sceneRef:a}=s,r=po(null),l=so(()=>co(e.size??1));function t(){let o=a.value;o&&(r.value=o.add(l.value))}return lo(t),ao(()=>{r.value?.dispose(),r.value=null}),io(l,()=>{r.value?.dispose(),r.value=null,t()}),()=>null}});import{defineComponent as uo,inject as yo,onMounted as ho,onBeforeUnmount as mo,watch as fo,computed as Go,shallowRef as go}from"vue";function Co(e,s,a){let[r,l,t]=e,o=a,n=[r,l,t+o],i=[r,l,t-o],c=[r+o,l,t],p=[r-o,l,t],y=[r,l+o,t],C=[r,l-o,t];return[{vertices:[n,c,y],color:s},{vertices:[n,y,p],color:s},{vertices:[n,p,C],color:s},{vertices:[n,C,c],color:s},{vertices:[i,y,c],color:s},{vertices:[i,p,y],color:s},{vertices:[i,C,p],color:s},{vertices:[i,c,C],color:s}]}var z=uo({name:"GlyphDirectionalLightHelper",props:{position:{type:Array,default:()=>[1,1,1]},color:{type:String,default:"#ffff00"},size:{type:Number,default:.1}},setup(e){let s=yo(u);if(!s)throw new Error("glyphcss: GlyphDirectionalLightHelper must be used inside a GlyphScene.");let{sceneRef:a}=s,r=go(null),l=Go(()=>Co(e.position??[1,1,1],e.color??"#ffff00",e.size??.1));function t(){let o=a.value;o&&(r.value=o.add(l.value))}return ho(t),mo(()=>{r.value?.dispose(),r.value=null}),fo(l,()=>{r.value?.dispose(),r.value=null,t()}),()=>null}});import{injectGlyphBaseStyles as K}from"glyphcss";import{ref as U,watch as Po,onUnmounted as vo,computed as b}from"vue";import{createGlyphAnimationMixer as bo}from"@glyphcss/core";function g(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function E(e,s,a){let r=U(null),l=null,t=null,o=null,n=U(0);function i(){return a==null?r.value:g(a)??r.value}function c(){t!==null&&(cancelAnimationFrame(t),t=null),o=null}function p(){c(),l&&(l.stopAllAction(),l.uncacheRoot(),l=null,n.value++)}function y(){if(t!==null)return;function h(d){if(o===null){o=d,t=requestAnimationFrame(h);return}let f=(d-o)/1e3;o=d,l?.update(f),t=requestAnimationFrame(h)}t=requestAnimationFrame(h)}function C(){p();let h=g(e),d=g(s);if(!h||h.length===0||!d)return;let f=i();f&&(l=bo(f,d),n.value++,y())}let Y=Po(()=>{let h=g(e),d=g(s),f=a!=null?g(a):r.value;return{c:h,ctrl:d,r:f}},()=>C(),{immediate:!0,deep:!1});vo(()=>{Y(),p()});let S=b(()=>g(e)??[]),_=b(()=>S.value.map(h=>h.name)),W=b(()=>(n.value,l)),q=b(()=>{n.value;let h=S.value,d={};for(let f of h)Object.defineProperty(d,f.name,{enumerable:!0,get(){if(!l)return null;try{return l.clipAction(f.name)}catch{return null}}});return d});return{ref:r,mixer:W,clips:S,names:_,actions:q}}export{Ir as BASE_TILE,an as CAMERA_BACKFACE_CULL_EPS,Xr as DEFAULT_CAMERA_STATE,Kr as DEFAULT_PROJECTION,L as GlyphAxesHelper,G as GlyphCamera,m as GlyphCameraContextKey,z as GlyphDirectionalLightHelper,V as GlyphFirstPersonControls,w as GlyphGround,A as GlyphHotspot,H as GlyphMapControls,P as GlyphMesh,T as GlyphOrbitControls,G as GlyphOrthographicCamera,O as GlyphPerspectiveCamera,x as GlyphScene,u as GlyphSceneContextKey,_r as LoopOnce,qr as LoopPingPong,Wr as LoopRepeat,sn as VOXEL_CAMERA_CULL_AXIS_EPS,pn as VOXEL_CAMERA_CULL_NORMAL_LIMIT,Rr as antiprismPolygons,Fr as arrowPolygons,Nr as axesHelperPolygons,Mn as bakeSolidTextureSampledPolygons,On as bakeSolidTextureSamples,Or as bipyramidPolygons,jr as buildSceneContext,mn as cameraCullNormalGroups,fn as cameraCullNormalGroupsFromPolygons,Gn as cameraCullNormalKey,gn as cameraCullVisibleSignature,Cn as cameraFacingDepth,jn as clampChannel,Dr as computeSceneBbox,zn as computeShapeLighting,Vr as conePolygons,yn as coverPlanarPolygons,Yr as createGlyphAnimationMixer,Hn as createIsometricCamera,Yn as cubePolygons,er as cuboctahedronPolygons,dn as cullInteriorPolygons,Hr as cylinderPolygons,Sr as deltoidalHexecontahedronPolygons,br as deltoidalIcositetrahedronPolygons,Pr as disdyakisDodecahedronPolygons,vr as disdyakisTriacontahedronPolygons,Wn as dodecahedronPolygons,N as findGlyphMeshHandle,D as findMeshUnderPoint,Nn as formatColor,Jn as greatDodecahedronPolygons,Zn as greatIcosahedronPolygons,Qn as greatStellatedDodecahedronPolygons,qn as icosahedronPolygons,or as icosidodecahedronPolygons,K as injectGlyphBaseStyles,Xn as inverseRotateVec3,Pn as isAxisAlignedSurfaceNormal,vn as isVoxelCameraCullableNormalGroups,Tn as loadMesh,un as mergePolygons,bn as normalFacesCamera,Ur as normalizeInvertMultiplier,cn as normalizePolygons,_n as octahedronPolygons,hn as optimizeMeshPolygons,En as parseColor,Rn as parseGltf,Bn as parseHexColor,An as parseMtl,wn as parseObj,kn as parsePureColor,Fn as parseRgbColor,Vn as parseVox,wr as pentagonalHexecontahedronPolygons,xr as pentagonalIcositetrahedronPolygons,Cr as pentakisDodecahedronPolygons,Er as planePolygons,j as pointInMeshElement,Sn as polygonCssSurfaceNormal,Ln as polygonFaces,xn as polygonFacesCamera,Ar as prismPolygons,zr as pyramidPolygons,Kn as resolveGeometry,hr as rhombicDodecahedronPolygons,dr as rhombicTriacontahedronPolygons,cr as rhombicosidodecahedronPolygons,pr as rhombicuboctahedronPolygons,kr as ringPolygons,Br as ringQuadPolygons,In as rotateVec3,Dn as shadeColor,$n as smallStellatedDodecahedronPolygons,ur as snubCubePolygons,yr as snubDodecahedronPolygons,Tr as spherePolygons,Un as tetrahedronPolygons,gr as tetrakisHexahedronPolygons,Lr as torusPolygons,Mr as trapezohedronPolygons,Gr as triakisIcosahedronPolygons,fr as triakisOctahedronPolygons,mr as triakisTetrahedronPolygons,nr as truncatedCubePolygons,ir as truncatedCuboctahedronPolygons,lr as truncatedDodecahedronPolygons,ar as truncatedIcosahedronPolygons,sr as truncatedIcosidodecahedronPolygons,rr as truncatedOctahedronPolygons,tr as truncatedTetrahedronPolygons,E as useGlyphAnimation,M as useGlyphCamera,R as useGlyphSceneContext};
1
+ import{CAMERA_BACKFACE_CULL_EPS as pn,VOXEL_CAMERA_CULL_AXIS_EPS as un,VOXEL_CAMERA_CULL_NORMAL_LIMIT as cn,normalizePolygons as yn,mergePolygons as dn,coverPlanarPolygons as hn,optimizeMeshPolygons as mn,cullInteriorPolygons as fn,cameraCullNormalGroups as Gn,cameraCullNormalGroupsFromPolygons as gn,cameraCullNormalKey as Cn,cameraCullVisibleSignature as Pn,cameraFacingDepth as vn,isAxisAlignedSurfaceNormal as bn,isVoxelCameraCullableNormalGroups as Sn,normalFacesCamera as xn,polygonCssSurfaceNormal as wn,polygonFacesCamera as An,parseObj as Rn,parseMtl as On,parseGltf as Mn,bakeSolidTextureSamples as En,bakeSolidTextureSampledPolygons as Hn,loadMesh as Tn,createIsometricCamera as Vn,parseVox as Ln,polygonFaces as zn,computeShapeLighting as Nn,parseColor as jn,parsePureColor as kn,parseHexColor as Bn,parseRgbColor as Fn,formatColor as Dn,clampChannel as In,shadeColor as Yn,rotateVec3 as Xn,inverseRotateVec3 as Kn,resolveGeometry as Un,tetrahedronPolygons as _n,cubePolygons as Wn,octahedronPolygons as qn,dodecahedronPolygons as Zn,icosahedronPolygons as $n,smallStellatedDodecahedronPolygons as Jn,greatDodecahedronPolygons as Qn,greatStellatedDodecahedronPolygons as er,greatIcosahedronPolygons as tr,cuboctahedronPolygons as or,icosidodecahedronPolygons as nr,truncatedTetrahedronPolygons as rr,truncatedCubePolygons as lr,truncatedOctahedronPolygons as ar,truncatedDodecahedronPolygons as ir,truncatedIcosahedronPolygons as sr,truncatedCuboctahedronPolygons as pr,truncatedIcosidodecahedronPolygons as ur,rhombicuboctahedronPolygons as cr,rhombicosidodecahedronPolygons as yr,snubCubePolygons as dr,snubDodecahedronPolygons as hr,rhombicDodecahedronPolygons as mr,rhombicTriacontahedronPolygons as fr,triakisTetrahedronPolygons as Gr,triakisOctahedronPolygons as gr,triakisIcosahedronPolygons as Cr,tetrakisHexahedronPolygons as Pr,pentakisDodecahedronPolygons as vr,disdyakisDodecahedronPolygons as br,disdyakisTriacontahedronPolygons as Sr,deltoidalIcositetrahedronPolygons as xr,deltoidalHexecontahedronPolygons as wr,pentagonalIcositetrahedronPolygons as Ar,pentagonalHexecontahedronPolygons as Rr,prismPolygons as Or,antiprismPolygons as Mr,bipyramidPolygons as Er,trapezohedronPolygons as Hr,spherePolygons as Tr,cylinderPolygons as Vr,conePolygons as Lr,torusPolygons as zr,pyramidPolygons as Nr,planePolygons as jr,ringPolygons as kr,ringQuadPolygons as Br,arrowPolygons as Fr,axesHelperPolygons as Dr,buildSceneContext as Ir,computeSceneBbox as Yr,BASE_TILE as Xr,DEFAULT_CAMERA_STATE as Kr,DEFAULT_PROJECTION as Ur,normalizeInvertMultiplier as _r,createGlyphAnimationMixer as Wr,LoopOnce as qr,LoopRepeat as Zr,LoopPingPong as $r}from"@glyphcss/core";import{defineComponent as J,h as Q,provide as ee,shallowRef as B,onMounted as te,onBeforeUnmount as oe,watch as ne}from"vue";import{createGlyphScene as re,injectGlyphBaseStyles as le}from"glyphcss";import{inject as $}from"vue";var m=Symbol("glyph-camera");function b(){let e=$(m);if(!e)throw new Error("glyphcss: GlyphScene must be placed inside a GlyphPerspectiveCamera or GlyphOrthographicCamera.");return e}var c=Symbol("glyph-scene");var A=J({name:"GlyphScene",inheritAttrs:!1,props:{mode:{type:String,default:void 0},glyphPalette:{type:String,default:void 0},useColors:{type:Boolean,default:void 0},cols:{type:Number,default:void 0},rows:{type:Number,default:void 0},cellAspect:{type:Number,default:void 0},directionalLight:{type:Object,default:void 0},ambientLight:{type:Object,default:void 0},autoSize:{type:Boolean,default:void 0},shadow:{type:Object,default:void 0},class:{type:String,default:void 0}},setup(e,{slots:s,attrs:a}){let{cameraRef:r,sceneRerenderRef:l}=b(),n=B(null),t=B(null);return ee(c,{sceneRef:t}),te(()=>{let o=n.value;if(!o)return;le(o.ownerDocument??void 0);let i={};e.mode!==void 0&&(i.mode=e.mode),e.glyphPalette!==void 0&&(i.glyphPalette=e.glyphPalette),e.useColors!==void 0&&(i.useColors=e.useColors),e.cols!==void 0&&(i.cols=e.cols),e.rows!==void 0&&(i.rows=e.rows),e.cellAspect!==void 0&&(i.cellAspect=e.cellAspect),e.directionalLight!==void 0&&(i.directionalLight=e.directionalLight),e.ambientLight!==void 0&&(i.ambientLight=e.ambientLight),e.autoSize!==void 0&&(i.autoSize=e.autoSize),e.shadow!==void 0&&(i.shadow=e.shadow),r.value!==null&&(i.camera=r.value),t.value=re(o,i),l.value=()=>t.value?.rerender()}),oe(()=>{t.value?.destroy(),t.value=null,l.value=null}),ne(()=>({mode:e.mode,glyphPalette:e.glyphPalette,useColors:e.useColors,cols:e.cols,rows:e.rows,cellAspect:e.cellAspect,directionalLight:e.directionalLight,ambientLight:e.ambientLight,autoSize:e.autoSize,shadow:e.shadow}),o=>{let i=t.value;if(!i)return;let u={};o.mode!==void 0&&(u.mode=o.mode),o.glyphPalette!==void 0&&(u.glyphPalette=o.glyphPalette),o.useColors!==void 0&&(u.useColors=o.useColors),o.cols!==void 0&&(u.cols=o.cols),o.rows!==void 0&&(u.rows=o.rows),o.cellAspect!==void 0&&(u.cellAspect=o.cellAspect),o.directionalLight!==void 0&&(u.directionalLight=o.directionalLight),o.ambientLight!==void 0&&(u.ambientLight=o.ambientLight),o.autoSize!==void 0&&(u.autoSize=o.autoSize),u.shadow=o.shadow,Object.keys(u).length>0&&i.setOptions(u)},{deep:!1}),()=>{let o=`glyph-host${e.class?` ${e.class}`:""}`;return Q("div",{ref:n,class:o,...Object.fromEntries(Object.entries(a).filter(([i])=>i!=="class"))},s.default?.())}}});import{defineComponent as ae,h as ie,inject as se,onBeforeUnmount as pe,watch as R,shallowRef as F,computed as ue,watchEffect as ce}from"vue";import{resolveGeometry as ye,recenterPolygons as de,loadMesh as he}from"@glyphcss/core";var v=ae({name:"GlyphMesh",props:{id:{type:String,default:void 0},polygons:{type:Array,default:void 0},src:{type:String,default:void 0},geometry:{type:String,default:void 0},size:{type:Number,default:1},color:{type:String,default:void 0},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},autoCenter:{type:Boolean,default:!1},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!1},class:{type:String,default:void 0},onPointerDown:{type:Function,default:void 0},onPointerUp:{type:Function,default:void 0},onPointerMove:{type:Function,default:void 0},onPointerEnter:{type:Function,default:void 0},onPointerLeave:{type:Function,default:void 0},onClick:{type:Function,default:void 0},onWheel:{type:Function,default:void 0}},setup(e,{slots:s}){let a=se(c);if(!a)throw new Error("glyphcss: GlyphMesh must be used inside a GlyphScene.");let{sceneRef:r}=a,l=F(null),n=F(null);R(()=>e.src,(p,f,x)=>{if(!p){n.value=null;return}let g=!1;x(()=>{g=!0}),he(p).then(w=>{g||(n.value=w.polygons)}).catch(()=>{g||(n.value=[])})},{immediate:!0});let t=ue(()=>{let p=e.polygons!==void 0?e.polygons:e.src!==void 0?n.value??[]:e.geometry!==void 0?ye(e.geometry,{size:e.size,color:e.color}):[];return e.autoCenter?de(p):p});function o(){let p={};return e.id&&(p.id=e.id),e.position&&(p.position=e.position),e.scale!==void 0&&(p.scale=e.scale),e.rotation&&(p.rotation=e.rotation),p.castShadow=e.castShadow,p.receiveShadow=e.receiveShadow,p}function i(){let p=r.value;if(!p)return;let f=p.add(t.value,o());l.value=f}function u(){l.value?.dispose(),l.value=null}let y=ce(()=>{!r.value||l.value||i()});return pe(()=>{y(),u()}),R(t,()=>{u(),i()}),R(()=>({id:e.id,position:e.position,scale:e.scale,rotation:e.rotation,castShadow:e.castShadow,receiveShadow:e.receiveShadow}),()=>{let p=l.value;p&&(p.setTransform(o()),r.value?.rerender())},{deep:!1}),()=>{let p=`glyph-mesh${e.class?` ${e.class}`:""}`;return ie("div",{"data-glyph-mesh-id":e.id,class:p},s.default?.())}}});import{defineComponent as me,h as fe,computed as Ge}from"vue";import{planePolygons as ge}from"@glyphcss/core";var O=me({name:"GlyphGround",props:{size:{type:Number,default:5},color:{type:String,default:"#444444"},position:{type:Array,default:()=>[0,-.5,0]},rotation:{type:Array,default:void 0},id:{type:String,default:void 0},castShadow:{type:Boolean,default:!1},receiveShadow:{type:Boolean,default:!0},class:{type:String,default:void 0}},setup(e,{slots:s}){let a=Ge(()=>ge({axis:1,size:e.size,offset:0,color:e.color}));return()=>fe(v,{id:e.id,polygons:a.value,position:e.position,rotation:e.rotation??void 0,castShadow:e.castShadow,receiveShadow:e.receiveShadow,class:e.class},s)}});import{defineComponent as Ce,inject as Pe,onBeforeUnmount as ve,watch as be,shallowRef as D,watchEffect as Se,h as xe,Teleport as we}from"vue";var M=Ce({name:"GlyphHotspot",props:{id:{type:String,required:!0},at:{type:Array,required:!0},size:{type:Array,default:void 0}},emits:["click"],setup(e,{emit:s,slots:a}){let r=Pe(c);if(!r)throw new Error("glyphcss: GlyphHotspot must be used inside a GlyphScene.");let{sceneRef:l}=r,n=D(null),t=D(null);function o(){let y=l.value;if(!y)return;let p=y.addHotspot({id:e.id,at:e.at,size:e.size},()=>s("click"));n.value=p,t.value=p.el}function i(){n.value?.remove(),n.value=null,t.value=null}let u=Se(()=>{!l.value||n.value||o()});return ve(()=>{u(),i()}),be(()=>({id:e.id,at:e.at,size:e.size}),()=>{i(),o()},{deep:!1}),()=>{let y=t.value,p=a.default?.();return y&&p?xe(we,{to:y},p):null}}});import{inject as Ae}from"vue";function E(){let e=Ae(c);if(!e)throw new Error("glyphcss: must be used inside a GlyphScene.");return e}import{findGlyphMeshHandle as I,pointInMeshElement as Y,findMeshUnderPoint as X}from"glyphcss";import{defineComponent as Re,h as Oe,provide as Me,shallowRef as K,watch as Ee}from"vue";import{createGlyphOrthographicCamera as He}from"glyphcss";var C=Re({name:"GlyphOrthographicCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},zoom:{type:Number,default:void 0},center:{type:Array,default:void 0},class:{type:String,default:void 0},style:{type:[Object,String],default:void 0}},setup(e,{slots:s}){let a={};e.rotX!==void 0&&(a.rotX=e.rotX),e.rotY!==void 0&&(a.rotY=e.rotY),e.zoom!==void 0&&(a.zoom=e.zoom),e.center!==void 0&&(a.center=e.center);let r=K(He(a)),l=K(null);function n(){l.value?.()}return Me(m,{cameraRef:r,rerender:n,sceneRerenderRef:l}),Ee(()=>({rotX:e.rotX,rotY:e.rotY,zoom:e.zoom}),t=>{let o=r.value;if(!o)return;let i=!1;t.rotX!==void 0&&o.rotX!==t.rotX&&(o.rotX=t.rotX,i=!0),t.rotY!==void 0&&o.rotY!==t.rotY&&(o.rotY=t.rotY,i=!0),t.zoom!==void 0&&o.zoom!==t.zoom&&(o.zoom=t.zoom,i=!0),i&&l.value?.()}),()=>Oe("div",{class:e.class,style:e.style},s.default?.()??[])}});import{defineComponent as Te,h as Ve,provide as Le,shallowRef as U,watch as ze}from"vue";import{createGlyphPerspectiveCamera as Ne}from"glyphcss";var H=Te({name:"GlyphPerspectiveCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},distance:{type:Number,default:void 0},perspective:{type:Number,default:void 0},zoom:{type:Number,default:void 0},stretch:{type:Number,default:void 0},center:{type:Array,default:void 0},class:{type:String,default:void 0},style:{type:[Object,String],default:void 0}},setup(e,{slots:s}){let a={};e.rotX!==void 0&&(a.rotX=e.rotX),e.rotY!==void 0&&(a.rotY=e.rotY),e.distance!==void 0&&(a.distance=e.distance),e.perspective!==void 0&&(a.perspective=e.perspective),e.zoom!==void 0&&(a.zoom=e.zoom),e.stretch!==void 0&&(a.stretch=e.stretch),e.center!==void 0&&(a.center=e.center);let r=U(Ne(a)),l=U(null);function n(){l.value?.()}return Le(m,{cameraRef:r,rerender:n,sceneRerenderRef:l}),ze(()=>({rotX:e.rotX,rotY:e.rotY,distance:e.distance,perspective:e.perspective,zoom:e.zoom,stretch:e.stretch}),t=>{let o=r.value;if(!o)return;let i=!1;t.rotX!==void 0&&o.rotX!==t.rotX&&(o.rotX=t.rotX,i=!0),t.rotY!==void 0&&o.rotY!==t.rotY&&(o.rotY=t.rotY,i=!0),t.distance!==void 0&&o.distance!==t.distance&&(o.distance=t.distance,i=!0),t.perspective!==void 0&&o.perspective!==t.perspective&&(o.perspective=t.perspective,i=!0),t.zoom!==void 0&&o.zoom!==t.zoom&&(o.zoom=t.zoom,i=!0),t.stretch!==void 0&&o.stretch!==t.stretch&&(o.stretch=t.stretch,i=!0),i&&l.value?.()}),()=>Ve("div",{class:e.class,style:e.style},s.default?.()??[])}});import{inject as je}from"vue";function T(){let e=je(m);if(!e)throw new Error("glyphcss: useGlyphCamera must be used inside a GlyphCamera component.");return e}import{defineComponent as ke,inject as Be,onBeforeUnmount as Fe,watch as De,shallowRef as Ie,watchEffect as Ye}from"vue";import{createGlyphOrbitControls as Xe}from"glyphcss";var V=ke({name:"GlyphOrbitControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},invert:{type:[Boolean,Number],default:!1},clampPitch:{type:Boolean,default:!0},animate:{type:[Boolean,Object],default:!1}},setup(e){let s=Be(c);if(!s)throw new Error("glyphcss: GlyphOrbitControls must be used inside a GlyphScene.");let{sceneRef:a}=s,r=Ie(null),l=Ye(()=>{let n=a.value;if(!n||r.value)return;let t={drag:e.drag,wheel:e.wheel,invert:e.invert,clampPitch:e.clampPitch,animate:e.animate===!1?!1:e.animate};r.value=Xe(n,t)});return Fe(()=>{l(),r.value?.destroy(),r.value=null}),De(()=>({drag:e.drag,wheel:e.wheel,invert:e.invert,clampPitch:e.clampPitch,animate:e.animate}),n=>{r.value?.update({drag:n.drag,wheel:n.wheel,invert:n.invert,clampPitch:n.clampPitch,animate:n.animate===!1?!1:n.animate})}),()=>null}});import{defineComponent as Ke,inject as Ue,onBeforeUnmount as _e,watch as We,shallowRef as qe,watchEffect as Ze}from"vue";import{createGlyphMapControls as $e}from"glyphcss";var L=Ke({name:"GlyphMapControls",props:{drag:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},invert:{type:[Boolean,Number],default:!1},animate:{type:[Boolean,Object],default:!1}},setup(e){let s=Ue(c);if(!s)throw new Error("glyphcss: GlyphMapControls must be used inside a GlyphScene.");let{sceneRef:a}=s,r=qe(null),l=Ze(()=>{let n=a.value;if(!n||r.value)return;let t={drag:e.drag,wheel:e.wheel,invert:e.invert,animate:e.animate===!1?!1:e.animate};r.value=$e(n,t)});return _e(()=>{l(),r.value?.destroy(),r.value=null}),We(()=>({drag:e.drag,wheel:e.wheel,invert:e.invert,animate:e.animate}),n=>{r.value?.update({drag:n.drag,wheel:n.wheel,invert:n.invert,animate:n.animate===!1?!1:n.animate})}),()=>null}});import{defineComponent as Je,inject as Qe,onBeforeUnmount as et,watch as tt,shallowRef as ot,watchEffect as nt}from"vue";import{createGlyphFirstPersonControls as rt}from"glyphcss";var z=Je({name:"GlyphFirstPersonControls",props:{enabled:{type:Boolean,default:void 0},lookEnabled:{type:Boolean,default:void 0},moveEnabled:{type:Boolean,default:void 0},jumpEnabled:{type:Boolean,default:void 0},crouchEnabled:{type:Boolean,default:void 0},lookSensitivity:{type:Number,default:void 0},invertY:{type:Boolean,default:void 0},moveSpeed:{type:Number,default:void 0},jumpVelocity:{type:Number,default:void 0},gravity:{type:Number,default:void 0},eyeHeight:{type:Number,default:void 0},crouchHeight:{type:Number,default:void 0},groundZ:{type:Number,default:void 0},minPitch:{type:Number,default:void 0},maxPitch:{type:Number,default:void 0}},setup(e){let s=Qe(c);if(!s)throw new Error("glyphcss: GlyphFirstPersonControls must be used inside a GlyphScene.");let{sceneRef:a}=s,r=ot(null),l=()=>({enabled:e.enabled,lookEnabled:e.lookEnabled,moveEnabled:e.moveEnabled,jumpEnabled:e.jumpEnabled,crouchEnabled:e.crouchEnabled,lookSensitivity:e.lookSensitivity,invertY:e.invertY,moveSpeed:e.moveSpeed,jumpVelocity:e.jumpVelocity,gravity:e.gravity,eyeHeight:e.eyeHeight,crouchHeight:e.crouchHeight,groundZ:e.groundZ,minPitch:e.minPitch,maxPitch:e.maxPitch}),n=nt(()=>{let t=a.value;!t||r.value||(r.value=rt(t,l()))});return et(()=>{n(),r.value?.destroy(),r.value=null}),tt(l,t=>{r.value?.update(t)}),()=>null}});import{defineComponent as lt,inject as at,onMounted as it,onBeforeUnmount as st,watch as pt,computed as ut,shallowRef as ct}from"vue";function yt(e){let s=e,a=s*.05,r=[];function l(n,t,o){let i=[n[0]-a,n[1]-a,n[2]],u=[t[0]-a,t[1]-a,t[2]],y=[t[0]+a,t[1]+a,t[2]],p=[n[0]+a,n[1]+a,n[2]];r.push({vertices:[i,u,y],color:o}),r.push({vertices:[i,y,p],color:o})}return l([0,0,0],[s,0,0],"#ff0000"),l([0,0,0],[0,s,0],"#00ff00"),l([0,0,0],[0,0,s],"#0000ff"),r}var N=lt({name:"GlyphAxesHelper",props:{size:{type:Number,default:1}},setup(e){let s=at(c);if(!s)throw new Error("glyphcss: GlyphAxesHelper must be used inside a GlyphScene.");let{sceneRef:a}=s,r=ct(null),l=ut(()=>yt(e.size??1));function n(){let t=a.value;t&&(r.value=t.add(l.value))}return it(n),st(()=>{r.value?.dispose(),r.value=null}),pt(l,()=>{r.value?.dispose(),r.value=null,n()}),()=>null}});import{defineComponent as dt,inject as ht,onMounted as mt,onBeforeUnmount as ft,watch as Gt,computed as gt,shallowRef as Ct}from"vue";function Pt(e,s,a){let[r,l,n]=e,t=a,o=[r,l,n+t],i=[r,l,n-t],u=[r+t,l,n],y=[r-t,l,n],p=[r,l+t,n],f=[r,l-t,n];return[{vertices:[o,u,p],color:s},{vertices:[o,p,y],color:s},{vertices:[o,y,f],color:s},{vertices:[o,f,u],color:s},{vertices:[i,p,u],color:s},{vertices:[i,y,p],color:s},{vertices:[i,f,y],color:s},{vertices:[i,u,f],color:s}]}var j=dt({name:"GlyphDirectionalLightHelper",props:{position:{type:Array,default:()=>[1,1,1]},color:{type:String,default:"#ffff00"},size:{type:Number,default:.1}},setup(e){let s=ht(c);if(!s)throw new Error("glyphcss: GlyphDirectionalLightHelper must be used inside a GlyphScene.");let{sceneRef:a}=s,r=Ct(null),l=gt(()=>Pt(e.position??[1,1,1],e.color??"#ffff00",e.size??.1));function n(){let t=a.value;t&&(r.value=t.add(l.value))}return mt(n),ft(()=>{r.value?.dispose(),r.value=null}),Gt(l,()=>{r.value?.dispose(),r.value=null,n()}),()=>null}});import{injectGlyphBaseStyles as _}from"glyphcss";import{ref as W,watch as vt,onUnmounted as bt,computed as S}from"vue";import{createGlyphAnimationMixer as St}from"@glyphcss/core";function P(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function k(e,s,a){let r=W(null),l=null,n=null,t=null,o=W(0);function i(){return a==null?r.value:P(a)??r.value}function u(){n!==null&&(cancelAnimationFrame(n),n=null),t=null}function y(){u(),l&&(l.stopAllAction(),l.uncacheRoot(),l=null,o.value++)}function p(){if(n!==null)return;function d(h){if(t===null){t=h,n=requestAnimationFrame(d);return}let G=(h-t)/1e3;t=h,l?.update(G),n=requestAnimationFrame(d)}n=requestAnimationFrame(d)}function f(){y();let d=P(e),h=P(s);if(!d||d.length===0||!h)return;let G=i();G&&(l=St(G,h),o.value++,p())}let x=vt(()=>{let d=P(e),h=P(s),G=a!=null?P(a):r.value;return{c:d,ctrl:h,r:G}},()=>f(),{immediate:!0,deep:!1});bt(()=>{x(),y()});let g=S(()=>P(e)??[]),w=S(()=>g.value.map(d=>d.name)),q=S(()=>(o.value,l)),Z=S(()=>{o.value;let d=g.value,h={};for(let G of d)Object.defineProperty(h,G.name,{enumerable:!0,get(){if(!l)return null;try{return l.clipAction(G.name)}catch{return null}}});return h});return{ref:r,mixer:q,clips:g,names:w,actions:Z}}export{Xr as BASE_TILE,pn as CAMERA_BACKFACE_CULL_EPS,Kr as DEFAULT_CAMERA_STATE,Ur as DEFAULT_PROJECTION,N as GlyphAxesHelper,C as GlyphCamera,m as GlyphCameraContextKey,j as GlyphDirectionalLightHelper,z as GlyphFirstPersonControls,O as GlyphGround,M as GlyphHotspot,L as GlyphMapControls,v as GlyphMesh,V as GlyphOrbitControls,C as GlyphOrthographicCamera,H as GlyphPerspectiveCamera,A as GlyphScene,c as GlyphSceneContextKey,qr as LoopOnce,$r as LoopPingPong,Zr as LoopRepeat,un as VOXEL_CAMERA_CULL_AXIS_EPS,cn as VOXEL_CAMERA_CULL_NORMAL_LIMIT,Mr as antiprismPolygons,Fr as arrowPolygons,Dr as axesHelperPolygons,Hn as bakeSolidTextureSampledPolygons,En as bakeSolidTextureSamples,Er as bipyramidPolygons,Ir as buildSceneContext,Gn as cameraCullNormalGroups,gn as cameraCullNormalGroupsFromPolygons,Cn as cameraCullNormalKey,Pn as cameraCullVisibleSignature,vn as cameraFacingDepth,In as clampChannel,Yr as computeSceneBbox,Nn as computeShapeLighting,Lr as conePolygons,hn as coverPlanarPolygons,Wr as createGlyphAnimationMixer,Vn as createIsometricCamera,Wn as cubePolygons,or as cuboctahedronPolygons,fn as cullInteriorPolygons,Vr as cylinderPolygons,wr as deltoidalHexecontahedronPolygons,xr as deltoidalIcositetrahedronPolygons,br as disdyakisDodecahedronPolygons,Sr as disdyakisTriacontahedronPolygons,Zn as dodecahedronPolygons,I as findGlyphMeshHandle,X as findMeshUnderPoint,Dn as formatColor,Qn as greatDodecahedronPolygons,tr as greatIcosahedronPolygons,er as greatStellatedDodecahedronPolygons,$n as icosahedronPolygons,nr as icosidodecahedronPolygons,_ as injectGlyphBaseStyles,Kn as inverseRotateVec3,bn as isAxisAlignedSurfaceNormal,Sn as isVoxelCameraCullableNormalGroups,Tn as loadMesh,dn as mergePolygons,xn as normalFacesCamera,_r as normalizeInvertMultiplier,yn as normalizePolygons,qn as octahedronPolygons,mn as optimizeMeshPolygons,jn as parseColor,Mn as parseGltf,Bn as parseHexColor,On as parseMtl,Rn as parseObj,kn as parsePureColor,Fn as parseRgbColor,Ln as parseVox,Rr as pentagonalHexecontahedronPolygons,Ar as pentagonalIcositetrahedronPolygons,vr as pentakisDodecahedronPolygons,jr as planePolygons,Y as pointInMeshElement,wn as polygonCssSurfaceNormal,zn as polygonFaces,An as polygonFacesCamera,Or as prismPolygons,Nr as pyramidPolygons,Un as resolveGeometry,mr as rhombicDodecahedronPolygons,fr as rhombicTriacontahedronPolygons,yr as rhombicosidodecahedronPolygons,cr as rhombicuboctahedronPolygons,kr as ringPolygons,Br as ringQuadPolygons,Xn as rotateVec3,Yn as shadeColor,Jn as smallStellatedDodecahedronPolygons,dr as snubCubePolygons,hr as snubDodecahedronPolygons,Tr as spherePolygons,_n as tetrahedronPolygons,Pr as tetrakisHexahedronPolygons,zr as torusPolygons,Hr as trapezohedronPolygons,Cr as triakisIcosahedronPolygons,gr as triakisOctahedronPolygons,Gr as triakisTetrahedronPolygons,lr as truncatedCubePolygons,pr as truncatedCuboctahedronPolygons,ir as truncatedDodecahedronPolygons,sr as truncatedIcosahedronPolygons,ur as truncatedIcosidodecahedronPolygons,ar as truncatedOctahedronPolygons,rr as truncatedTetrahedronPolygons,k as useGlyphAnimation,T as useGlyphCamera,E as useGlyphSceneContext};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@glyphcss/vue",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "Native Vue 3 components for the glyphcss ASCII polygon mesh rendering engine.",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
@@ -41,8 +41,8 @@
41
41
  "access": "public"
42
42
  },
43
43
  "dependencies": {
44
- "glyphcss": "^0.0.5",
45
- "@glyphcss/core": "^0.0.5"
44
+ "@glyphcss/core": "^0.0.7",
45
+ "glyphcss": "^0.0.7"
46
46
  },
47
47
  "peerDependencies": {
48
48
  "vue": "^3.0.0"