@glyphcss/vue 0.0.1 → 0.0.2

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/README.md CHANGED
@@ -16,48 +16,59 @@ Requires Vue 3 as a peer dependency.
16
16
 
17
17
  ```vue
18
18
  <template>
19
- <GlyphcssScene :cols="80" :rows="40">
20
- <GlyphcssCamera :rot-x="65" :rot-y="45">
21
- <GlyphcssOrbitControls />
22
- <GlyphcssMesh src="/cottage.glb" />
23
- </GlyphcssCamera>
24
- </GlyphcssScene>
19
+ <GlyphCamera :rot-x="0.4" :zoom="0.32">
20
+ <GlyphScene :cols="80" :rows="40">
21
+ <GlyphOrbitControls />
22
+ <GlyphMesh src="/cottage.glb" />
23
+ </GlyphScene>
24
+ </GlyphCamera>
25
25
  </template>
26
26
 
27
27
  <script setup lang="ts">
28
28
  import {
29
- GlyphcssScene,
30
- GlyphcssCamera,
31
- GlyphcssMesh,
32
- GlyphcssOrbitControls,
29
+ GlyphCamera,
30
+ GlyphScene,
31
+ GlyphMesh,
32
+ GlyphOrbitControls,
33
33
  } from "@glyphcss/vue";
34
34
  </script>
35
35
  ```
36
36
 
37
37
  ## Component reference
38
38
 
39
- ### `<GlyphcssScene>`
39
+ ### `<GlyphCamera>` / `<GlyphOrthographicCamera>`
40
40
 
41
- Root of every Vue glyphcss render tree. Owns the `<pre>` output element and rasterizes all meshes on camera or state change.
41
+ Orthographic camera. `GlyphCamera` is the ergonomic default alias. Wraps
42
+ `<GlyphScene>` — the camera is always the outermost element.
42
43
 
43
44
  | Prop | Type | Default | Description |
44
45
  |---|---|---|---|
45
- | `cols` | `number` | `80` | Grid width in character cells |
46
- | `rows` | `number` | `40` | Grid height in character cells |
47
- | `mode` | `"wireframe" \| "solid" \| "voxel"` | `"solid"` | Render mode |
46
+ | `rot-x` | `number` | `0` | Tilt in radians |
47
+ | `rot-y` | `number` | `0` | Azimuth in radians |
48
+ | `zoom` | `number` | `0.4` | Mesh fraction of min(cols, rows) |
48
49
 
49
- ### `<GlyphcssCamera>` / `<GlyphcssPerspectiveCamera>`
50
+ ### `<GlyphPerspectiveCamera>`
50
51
 
51
- Perspective camera. `GlyphcssCamera` is the ergonomic alias.
52
+ Perspective (foreshortened) camera. Required for `<GlyphFirstPersonControls>`.
52
53
 
53
54
  | Prop | Type | Default | Description |
54
55
  |---|---|---|---|
55
- | `fov` | `number` | `60` | Vertical field of view in degrees |
56
- | `rot-x` | `number` | `35` | Tilt in degrees |
57
- | `rot-y` | `number` | `45` | Azimuth in degrees |
58
- | `zoom` | `number` | `1` | Zoom multiplier |
56
+ | `rot-x` | `number` | `0` | Tilt in radians |
57
+ | `rot-y` | `number` | `0` | Azimuth in radians |
58
+ | `distance` | `number` | `3` | Perspective distance in world units |
59
+ | `zoom` | `number` | `0.4` | Mesh fraction of min(cols, rows) |
60
+
61
+ ### `<GlyphScene>`
62
+
63
+ Root of every Vue glyphcss render tree. Owns the `<pre>` output element and rasterizes all meshes on camera or state change. Must be a child of a camera component.
64
+
65
+ | Prop | Type | Default | Description |
66
+ |---|---|---|---|
67
+ | `cols` | `number` | `80` | Grid width in character cells |
68
+ | `rows` | `number` | `40` | Grid height in character cells |
69
+ | `mode` | `"wireframe" \| "solid" \| "voxel"` | `"solid"` | Render mode |
59
70
 
60
- ### `<GlyphcssMesh>`
71
+ ### `<GlyphMesh>`
61
72
 
62
73
  Loads and displays a 3D mesh. Supports `.obj`, `.glb`, `.gltf`, `.vox`.
63
74
 
@@ -66,15 +77,15 @@ Loads and displays a 3D mesh. Supports `.obj`, `.glb`, `.gltf`, `.vox`.
66
77
  | `src` | `string` | URL of the mesh file |
67
78
  | `color` | `string` | Override mesh color |
68
79
 
69
- ### `<GlyphcssOrbitControls>` / `<GlyphcssMapControls>`
80
+ ### `<GlyphOrbitControls>` / `<GlyphMapControls>`
70
81
 
71
82
  Mouse/touch/keyboard camera controls.
72
83
 
73
84
  ### Composables
74
85
 
75
- - `useGlyphcssCamera()` — access the camera context
76
- - `useGlyphcssSceneContext()` — access scene state
77
- - `useGlyphcssAnimation(clips, controller)` — three.js-style animation mixer
86
+ - `useGlyphCamera()` — access the camera context
87
+ - `useGlyphSceneContext()` — access scene state
88
+ - `useGlyphAnimation(clips, controller)` — three.js-style animation mixer
78
89
 
79
90
  ## License
80
91
 
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";var U=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var ce=Object.prototype.hasOwnProperty;var ie=(e,a)=>{for(var c in a)U(e,c,{get:a[c],enumerable:!0})},pe=(e,a,c,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of ae(a))!ce.call(e,o)&&o!==c&&U(e,o,{get:()=>a[o],enumerable:!(r=le(a,o))||r.enumerable});return e};var ue=e=>pe(U({},"__esModule",{value:!0}),e);var he={};ie(he,{BASE_TILE:()=>t.BASE_TILE,CAMERA_BACKFACE_CULL_EPS:()=>t.CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE:()=>t.DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION:()=>t.DEFAULT_PROJECTION,GlyphcssAxesHelper:()=>X,GlyphcssCamera:()=>M,GlyphcssCameraContextKey:()=>w,GlyphcssDirectionalLightHelper:()=>Y,GlyphcssFirstPersonControls:()=>K,GlyphcssHotspot:()=>j,GlyphcssMapControls:()=>z,GlyphcssMesh:()=>k,GlyphcssOrbitControls:()=>N,GlyphcssOrthographicCamera:()=>E,GlyphcssPerspectiveCamera:()=>M,GlyphcssScene:()=>V,GlyphcssSceneContextKey:()=>p,LoopOnce:()=>t.LoopOnce,LoopPingPong:()=>t.LoopPingPong,LoopRepeat:()=>t.LoopRepeat,VOXEL_CAMERA_CULL_AXIS_EPS:()=>t.VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT:()=>t.VOXEL_CAMERA_CULL_NORMAL_LIMIT,arrowPolygons:()=>t.arrowPolygons,axesHelperPolygons:()=>t.axesHelperPolygons,bakeSolidTextureSampledPolygons:()=>t.bakeSolidTextureSampledPolygons,bakeSolidTextureSamples:()=>t.bakeSolidTextureSamples,buildSceneContext:()=>t.buildSceneContext,cameraCullNormalGroups:()=>t.cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons:()=>t.cameraCullNormalGroupsFromPolygons,cameraCullNormalKey:()=>t.cameraCullNormalKey,cameraCullVisibleSignature:()=>t.cameraCullVisibleSignature,cameraFacingDepth:()=>t.cameraFacingDepth,clampChannel:()=>t.clampChannel,computeSceneBbox:()=>t.computeSceneBbox,computeShapeLighting:()=>t.computeShapeLighting,coverPlanarPolygons:()=>t.coverPlanarPolygons,createGlyphcssAnimationMixer:()=>t.createGlyphcssAnimationMixer,createIsometricCamera:()=>t.createIsometricCamera,cullInteriorPolygons:()=>t.cullInteriorPolygons,formatColor:()=>t.formatColor,injectGlyphcssBaseStyles:()=>_.injectGlyphcssBaseStyles,inverseRotateVec3:()=>t.inverseRotateVec3,isAxisAlignedSurfaceNormal:()=>t.isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups:()=>t.isVoxelCameraCullableNormalGroups,loadMesh:()=>t.loadMesh,mergePolygons:()=>t.mergePolygons,normalFacesCamera:()=>t.normalFacesCamera,normalizeInvertMultiplier:()=>t.normalizeInvertMultiplier,normalizePolygons:()=>t.normalizePolygons,octahedronPolygons:()=>t.octahedronPolygons,optimizeMeshPolygons:()=>t.optimizeMeshPolygons,parseColor:()=>t.parseColor,parseGltf:()=>t.parseGltf,parseHexColor:()=>t.parseHexColor,parseMtl:()=>t.parseMtl,parseObj:()=>t.parseObj,parsePureColor:()=>t.parsePureColor,parseRgbColor:()=>t.parseRgbColor,parseVox:()=>t.parseVox,polygonCssSurfaceNormal:()=>t.polygonCssSurfaceNormal,polygonFaces:()=>t.polygonFaces,polygonFacesCamera:()=>t.polygonFacesCamera,ringPolygons:()=>t.ringPolygons,rotateVec3:()=>t.rotateVec3,shadeColor:()=>t.shadeColor,useGlyphcssAnimation:()=>D,useGlyphcssCamera:()=>F,useGlyphcssSceneContext:()=>B});module.exports=ue(he);var t=require("@glyphcss/core");var u=require("vue"),H=require("glyphcss");var p=Symbol("glyphcss-scene");var V=(0,u.defineComponent)({name:"GlyphcssScene",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},class:{type:String,default:void 0}},setup(e,{slots:a,attrs:c}){let r=(0,u.shallowRef)(null),o=(0,u.shallowRef)(null);return(0,u.provide)(p,{sceneRef:o}),(0,u.onMounted)(()=>{let n=r.value;if(!n)return;(0,H.injectGlyphcssBaseStyles)(n.ownerDocument??void 0);let s={};e.mode!==void 0&&(s.mode=e.mode),e.glyphPalette!==void 0&&(s.glyphPalette=e.glyphPalette),e.useColors!==void 0&&(s.useColors=e.useColors),e.cols!==void 0&&(s.cols=e.cols),e.rows!==void 0&&(s.rows=e.rows),e.cellAspect!==void 0&&(s.cellAspect=e.cellAspect),e.directionalLight!==void 0&&(s.directionalLight=e.directionalLight),e.ambientLight!==void 0&&(s.ambientLight=e.ambientLight),o.value=(0,H.createGlyphcssScene)(n,s)}),(0,u.onBeforeUnmount)(()=>{o.value?.destroy(),o.value=null}),(0,u.watch)(()=>({mode:e.mode,glyphPalette:e.glyphPalette,useColors:e.useColors,cols:e.cols,rows:e.rows,cellAspect:e.cellAspect,directionalLight:e.directionalLight,ambientLight:e.ambientLight}),n=>{let s=o.value;if(!s)return;let l={};n.mode!==void 0&&(l.mode=n.mode),n.glyphPalette!==void 0&&(l.glyphPalette=n.glyphPalette),n.useColors!==void 0&&(l.useColors=n.useColors),n.cols!==void 0&&(l.cols=n.cols),n.rows!==void 0&&(l.rows=n.rows),n.cellAspect!==void 0&&(l.cellAspect=n.cellAspect),n.directionalLight!==void 0&&(l.directionalLight=n.directionalLight),n.ambientLight!==void 0&&(l.ambientLight=n.ambientLight),Object.keys(l).length>0&&s.setOptions(l)},{deep:!1}),()=>{let n=`glyphcss-host${e.class?` ${e.class}`:""}`;return(0,u.h)("div",{ref:r,class:n,...Object.fromEntries(Object.entries(c).filter(([s])=>s!=="class"))},a.default?.())}}});var m=require("vue");var k=(0,m.defineComponent)({name:"GlyphcssMesh",props:{id:{type:String,default:void 0},triangles:{type:Array,default:()=>[]},position:{type:Array,default:void 0},scale:{type:[Number,Array],default:void 0},rotation:{type:Array,default:void 0},class:{type:String,default:void 0}},setup(e,{slots:a}){let c=(0,m.inject)(p);if(!c)throw new Error("glyphcss: GlyphcssMesh must be used inside a GlyphcssScene.");let{sceneRef:r}=c,o=(0,m.shallowRef)(null);function n(){let i={};return e.position&&(i.position=e.position),e.scale!==void 0&&(i.scale=e.scale),e.rotation&&(i.rotation=e.rotation),i}function s(){let i=r.value;if(!i)return;let A=i.add(e.triangles??[],n());o.value=A}function l(){o.value?.dispose(),o.value=null}return(0,m.onMounted)(s),(0,m.onBeforeUnmount)(l),(0,m.watch)(()=>e.triangles,()=>{l(),s()}),(0,m.watch)(()=>({position:e.position,scale:e.scale,rotation:e.rotation}),()=>{let i=o.value;i&&(i.setTransform(n()),r.value?.rerender())},{deep:!1}),()=>{let i=`glyphcss-mesh${e.class?` ${e.class}`:""}`;return(0,m.h)("div",{"data-glyphcss-mesh-id":e.id,class:i},a.default?.())}}});var d=require("vue");var j=(0,d.defineComponent)({name:"GlyphcssHotspot",props:{id:{type:String,required:!0},at:{type:Array,required:!0},size:{type:Array,default:void 0}},emits:["click"],setup(e,{emit:a}){let c=(0,d.inject)(p);if(!c)throw new Error("glyphcss: GlyphcssHotspot must be used inside a GlyphcssScene.");let{sceneRef:r}=c,o=(0,d.shallowRef)(null);function n(){let l=r.value;if(!l)return;let i=l.addHotspot({id:e.id,at:e.at,size:e.size},()=>a("click"));o.value=i}function s(){o.value?.remove(),o.value=null}return(0,d.onMounted)(n),(0,d.onBeforeUnmount)(s),(0,d.watch)(()=>({id:e.id,at:e.at,size:e.size}),()=>{s(),n()},{deep:!1}),()=>null}});var q=require("vue");function B(){let e=(0,q.inject)(p);if(!e)throw new Error("glyphcss: must be used inside a GlyphcssScene.");return e}var G=require("vue"),$=require("glyphcss");var w=Symbol("glyphcss-camera");var M=(0,G.defineComponent)({name:"GlyphcssPerspectiveCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},distance:{type:Number,default:void 0},scale:{type:Number,default:void 0},stretch:{type:Number,default:void 0},center:{type:Array,default:void 0}},setup(e,{slots:a}){let c=(0,G.inject)(p);if(!c)throw new Error("glyphcss: GlyphcssPerspectiveCamera must be used inside a GlyphcssScene.");let{sceneRef:r}=c,o=(0,G.shallowRef)(null);function n(){r.value?.rerender()}return(0,G.provide)(w,{cameraRef:o,rerender:n}),(0,G.onMounted)(()=>{let s={};e.rotX!==void 0&&(s.rotX=e.rotX),e.rotY!==void 0&&(s.rotY=e.rotY),e.distance!==void 0&&(s.distance=e.distance),e.scale!==void 0&&(s.scale=e.scale),e.stretch!==void 0&&(s.stretch=e.stretch),e.center!==void 0&&(s.center=e.center);let l=(0,$.createGlyphcssPerspectiveCamera)(s);o.value=l;let i=r.value;i&&(i.setOptions({camera:l}),i.rerender())}),(0,G.watch)(()=>({rotX:e.rotX,rotY:e.rotY,distance:e.distance,scale:e.scale,stretch:e.stretch}),s=>{let l=o.value;if(!l)return;let i=!1;s.rotX!==void 0&&l.rotX!==s.rotX&&(l.rotX=s.rotX,i=!0),s.rotY!==void 0&&l.rotY!==s.rotY&&(l.rotY=s.rotY,i=!0),s.distance!==void 0&&l.distance!==s.distance&&(l.distance=s.distance,i=!0),s.scale!==void 0&&l.scale!==s.scale&&(l.scale=s.scale,i=!0),s.stretch!==void 0&&l.stretch!==s.stretch&&(l.stretch=s.stretch,i=!0),i&&r.value?.rerender()}),()=>a.default?.()??null}});var C=require("vue"),J=require("glyphcss");var E=(0,C.defineComponent)({name:"GlyphcssOrthographicCamera",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}},setup(e,{slots:a}){let c=(0,C.inject)(p);if(!c)throw new Error("glyphcss: GlyphcssOrthographicCamera must be used inside a GlyphcssScene.");let{sceneRef:r}=c,o=(0,C.shallowRef)(null);function n(){r.value?.rerender()}return(0,C.provide)(w,{cameraRef:o,rerender:n}),(0,C.onMounted)(()=>{let s={};e.rotX!==void 0&&(s.rotX=e.rotX),e.rotY!==void 0&&(s.rotY=e.rotY),e.zoom!==void 0&&(s.zoom=e.zoom),e.center!==void 0&&(s.center=e.center);let l=(0,J.createGlyphcssOrthographicCamera)(s);o.value=l;let i=r.value;i&&(i.setOptions({camera:l}),i.rerender())}),(0,C.watch)(()=>({rotX:e.rotX,rotY:e.rotY,zoom:e.zoom}),s=>{let l=o.value;if(!l)return;let i=!1;s.rotX!==void 0&&l.rotX!==s.rotX&&(l.rotX=s.rotX,i=!0),s.rotY!==void 0&&l.rotY!==s.rotY&&(l.rotY=s.rotY,i=!0),s.zoom!==void 0&&l.scale!==s.zoom&&(l.scale=s.zoom,i=!0),i&&r.value?.rerender()}),()=>a.default?.()??null}});var W=require("vue");function F(){let e=(0,W.inject)(w);if(!e)throw new Error("glyphcss: useGlyphcssCamera must be used inside a GlyphcssCamera component.");return e}var g=require("vue"),Q=require("glyphcss");var N=(0,g.defineComponent)({name:"GlyphcssOrbitControls",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 a=(0,g.inject)(p);if(!a)throw new Error("glyphcss: GlyphcssOrbitControls must be used inside a GlyphcssScene.");let{sceneRef:c}=a,r=(0,g.shallowRef)(null);return(0,g.onMounted)(()=>{let o=c.value;if(!o)return;let n={drag:e.drag,wheel:e.wheel,invert:e.invert,animate:e.animate===!1?!1:e.animate};r.value=(0,Q.createGlyphcssOrbitControls)(o,n)}),(0,g.onBeforeUnmount)(()=>{r.value?.destroy(),r.value=null}),(0,g.watch)(()=>({drag:e.drag,wheel:e.wheel,invert:e.invert,animate:e.animate}),o=>{r.value?.update({drag:o.drag,wheel:o.wheel,invert:o.invert,animate:o.animate===!1?!1:o.animate})}),()=>null}});var v=require("vue"),Z=require("glyphcss");var z=(0,v.defineComponent)({name:"GlyphcssMapControls",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 a=(0,v.inject)(p);if(!a)throw new Error("glyphcss: GlyphcssMapControls must be used inside a GlyphcssScene.");let{sceneRef:c}=a,r=(0,v.shallowRef)(null);return(0,v.onMounted)(()=>{let o=c.value;if(!o)return;let n={drag:e.drag,wheel:e.wheel,invert:e.invert,animate:e.animate===!1?!1:e.animate};r.value=(0,Z.createGlyphcssMapControls)(o,n)}),(0,v.onBeforeUnmount)(()=>{r.value?.destroy(),r.value=null}),(0,v.watch)(()=>({drag:e.drag,wheel:e.wheel,invert:e.invert,animate:e.animate}),o=>{r.value?.update({drag:o.drag,wheel:o.wheel,invert:o.invert,animate:o.animate===!1?!1:o.animate})}),()=>null}});var b=require("vue"),ee=require("glyphcss");var K=(0,b.defineComponent)({name:"GlyphcssFirstPersonControls",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 a=(0,b.inject)(p);if(!a)throw new Error("glyphcss: GlyphcssFirstPersonControls must be used inside a GlyphcssScene.");let{sceneRef:c}=a,r=(0,b.shallowRef)(null);return(0,b.onMounted)(()=>{let o=c.value;if(!o)return;let n={drag:e.drag,keyboard:e.keyboard,moveSpeed:e.moveSpeed,lookSpeed:e.lookSpeed,invert:e.invert};r.value=(0,ee.createGlyphcssFirstPersonControls)(o,n)}),(0,b.onBeforeUnmount)(()=>{r.value?.destroy(),r.value=null}),(0,b.watch)(()=>({drag:e.drag,keyboard:e.keyboard,moveSpeed:e.moveSpeed,lookSpeed:e.lookSpeed,invert:e.invert}),o=>{r.value?.update(o)}),()=>null}});var h=require("vue");function me(e){let a=e,c=a*.05,r=[];function o(n,s,l){let i=[n[0]-c,n[1]-c,n[2]],A=[s[0]-c,s[1]-c,s[2]],S=[s[0]+c,s[1]+c,s[2]],O=[n[0]+c,n[1]+c,n[2]];r.push({vertices:[i,A,S],color:l}),r.push({vertices:[i,S,O],color:l})}return o([0,0,0],[a,0,0],"#ff0000"),o([0,0,0],[0,a,0],"#00ff00"),o([0,0,0],[0,0,a],"#0000ff"),r}var X=(0,h.defineComponent)({name:"GlyphcssAxesHelper",props:{size:{type:Number,default:1}},setup(e){let a=(0,h.inject)(p);if(!a)throw new Error("glyphcss: GlyphcssAxesHelper must be used inside a GlyphcssScene.");let{sceneRef:c}=a,r=(0,h.shallowRef)(null),o=(0,h.computed)(()=>me(e.size??1));function n(){let s=c.value;s&&(r.value=s.add(o.value))}return(0,h.onMounted)(n),(0,h.onBeforeUnmount)(()=>{r.value?.dispose(),r.value=null}),(0,h.watch)(o,()=>{r.value?.dispose(),r.value=null,n()}),()=>null}});var f=require("vue");function ye(e,a,c){let[r,o,n]=e,s=c,l=[r,o,n+s],i=[r,o,n-s],A=[r+s,o,n],S=[r-s,o,n],O=[r,o+s,n],T=[r,o-s,n];return[{vertices:[l,A,O],color:a},{vertices:[l,O,S],color:a},{vertices:[l,S,T],color:a},{vertices:[l,T,A],color:a},{vertices:[i,O,A],color:a},{vertices:[i,S,O],color:a},{vertices:[i,T,S],color:a},{vertices:[i,A,T],color:a}]}var Y=(0,f.defineComponent)({name:"GlyphcssDirectionalLightHelper",props:{position:{type:Array,default:()=>[1,1,1]},color:{type:String,default:"#ffff00"},size:{type:Number,default:.1}},setup(e){let a=(0,f.inject)(p);if(!a)throw new Error("glyphcss: GlyphcssDirectionalLightHelper must be used inside a GlyphcssScene.");let{sceneRef:c}=a,r=(0,f.shallowRef)(null),o=(0,f.computed)(()=>ye(e.position??[1,1,1],e.color??"#ffff00",e.size??.1));function n(){let s=c.value;s&&(r.value=s.add(o.value))}return(0,f.onMounted)(n),(0,f.onBeforeUnmount)(()=>{r.value?.dispose(),r.value=null}),(0,f.watch)(o,()=>{r.value?.dispose(),r.value=null,n()}),()=>null}});var _=require("glyphcss");var x=require("vue"),te=require("@glyphcss/core");function L(e){return e&&typeof e=="object"&&"value"in e?e.value:e}function D(e,a,c){let r=(0,x.ref)(null),o=null,n=null,s=null,l=(0,x.ref)(0);function i(){return c==null?r.value:L(c)??r.value}function A(){n!==null&&(cancelAnimationFrame(n),n=null),s=null}function S(){A(),o&&(o.stopAllAction(),o.uncacheRoot(),o=null,l.value++)}function O(){if(n!==null)return;function y(P){if(s===null){s=P,n=requestAnimationFrame(y);return}let R=(P-s)/1e3;s=P,o?.update(R),n=requestAnimationFrame(y)}n=requestAnimationFrame(y)}function T(){S();let y=L(e),P=L(a);if(!y||y.length===0||!P)return;let R=i();R&&(o=(0,te.createGlyphcssAnimationMixer)(R,P),l.value++,O())}let se=(0,x.watch)(()=>{let y=L(e),P=L(a),R=c!=null?L(c):r.value;return{c:y,ctrl:P,r:R}},()=>T(),{immediate:!0,deep:!1});(0,x.onUnmounted)(()=>{se(),S()});let I=(0,x.computed)(()=>L(e)??[]),oe=(0,x.computed)(()=>I.value.map(y=>y.name)),ne=(0,x.computed)(()=>(l.value,o)),re=(0,x.computed)(()=>{l.value;let y=I.value,P={};for(let R of y)Object.defineProperty(P,R.name,{enumerable:!0,get(){if(!o)return null;try{return o.clipAction(R.name)}catch{return null}}});return P});return{ref:r,mixer:ne,clips:I,names:oe,actions:re}}0&&(module.exports={BASE_TILE,CAMERA_BACKFACE_CULL_EPS,DEFAULT_CAMERA_STATE,DEFAULT_PROJECTION,GlyphcssAxesHelper,GlyphcssCamera,GlyphcssCameraContextKey,GlyphcssDirectionalLightHelper,GlyphcssFirstPersonControls,GlyphcssHotspot,GlyphcssMapControls,GlyphcssMesh,GlyphcssOrbitControls,GlyphcssOrthographicCamera,GlyphcssPerspectiveCamera,GlyphcssScene,GlyphcssSceneContextKey,LoopOnce,LoopPingPong,LoopRepeat,VOXEL_CAMERA_CULL_AXIS_EPS,VOXEL_CAMERA_CULL_NORMAL_LIMIT,arrowPolygons,axesHelperPolygons,bakeSolidTextureSampledPolygons,bakeSolidTextureSamples,buildSceneContext,cameraCullNormalGroups,cameraCullNormalGroupsFromPolygons,cameraCullNormalKey,cameraCullVisibleSignature,cameraFacingDepth,clampChannel,computeSceneBbox,computeShapeLighting,coverPlanarPolygons,createGlyphcssAnimationMixer,createIsometricCamera,cullInteriorPolygons,formatColor,injectGlyphcssBaseStyles,inverseRotateVec3,isAxisAlignedSurfaceNormal,isVoxelCameraCullableNormalGroups,loadMesh,mergePolygons,normalFacesCamera,normalizeInvertMultiplier,normalizePolygons,octahedronPolygons,optimizeMeshPolygons,parseColor,parseGltf,parseHexColor,parseMtl,parseObj,parsePureColor,parseRgbColor,parseVox,polygonCssSurfaceNormal,polygonFaces,polygonFacesCamera,ringPolygons,rotateVec3,shadeColor,useGlyphcssAnimation,useGlyphcssCamera,useGlyphcssSceneContext});
1
+ "use strict";var J=Object.defineProperty;var he=Object.getOwnPropertyDescriptor;var me=Object.getOwnPropertyNames;var de=Object.prototype.hasOwnProperty;var fe=(o,i)=>{for(var s in i)J(o,s,{get:i[s],enumerable:!0})},Ge=(o,i,s,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let a of me(i))!de.call(o,a)&&a!==s&&J(o,a,{get:()=>i[a],enumerable:!(r=he(i,a))||r.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:()=>w,GlyphDirectionalLightHelper:()=>_,GlyphFirstPersonControls:()=>U,GlyphGround:()=>N,GlyphHotspot:()=>j,GlyphMapControls:()=>K,GlyphMesh:()=>L,GlyphOrbitControls:()=>X,GlyphOrthographicCamera:()=>T,GlyphPerspectiveCamera:()=>D,GlyphScene:()=>F,GlyphSceneContextKey:()=>c,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:()=>B});module.exports=ge(ve);var e=require("@glyphcss/core");var f=require("vue"),k=require("glyphcss");var Q=require("vue"),w=Symbol("glyph-camera");function E(){let o=(0,Q.inject)(w);if(!o)throw new Error("glyphcss: GlyphScene must be placed inside a GlyphPerspectiveCamera or GlyphOrthographicCamera.");return o}var c=Symbol("glyph-scene");var F=(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},class:{type:String,default:void 0}},setup(o,{slots:i,attrs:s}){let{cameraRef:r,sceneRerenderRef:a}=E(),n=(0,f.shallowRef)(null),t=(0,f.shallowRef)(null);return(0,f.provide)(c,{sceneRef:t}),(0,f.onMounted)(()=>{let l=n.value;if(!l)return;(0,k.injectGlyphBaseStyles)(l.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),r.value!==null&&(p.camera=r.value),t.value=(0,k.createGlyphScene)(l,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}),l=>{let p=t.value;if(!p)return;let y={};l.mode!==void 0&&(y.mode=l.mode),l.glyphPalette!==void 0&&(y.glyphPalette=l.glyphPalette),l.useColors!==void 0&&(y.useColors=l.useColors),l.cols!==void 0&&(y.cols=l.cols),l.rows!==void 0&&(y.rows=l.rows),l.cellAspect!==void 0&&(y.cellAspect=l.cellAspect),l.directionalLight!==void 0&&(y.directionalLight=l.directionalLight),l.ambientLight!==void 0&&(y.ambientLight=l.ambientLight),l.autoSize!==void 0&&(y.autoSize=l.autoSize),Object.keys(y).length>0&&p.setOptions(y)},{deep:!1}),()=>{let l=`glyph-host${o.class?` ${o.class}`:""}`;return(0,f.h)("div",{ref:n,class:l,...Object.fromEntries(Object.entries(s).filter(([p])=>p!=="class"))},i.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},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:i}){let s=(0,h.inject)(c);if(!s)throw new Error("glyphcss: GlyphMesh must be used inside a GlyphScene.");let{sceneRef:r}=s,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 u={};return o.id&&(u.id=o.id),o.position&&(u.position=o.position),o.scale!==void 0&&(u.scale=o.scale),o.rotation&&(u.rotation=o.rotation),u}function l(){let u=r.value;if(!u)return;let d=u.add(n.value,t());a.value=d}function p(){a.value?.dispose(),a.value=null}let y=(0,h.watchEffect)(()=>{!r.value||a.value||l()});return(0,h.onBeforeUnmount)(()=>{y(),p()}),(0,h.watch)(n,()=>{p(),l()}),(0,h.watch)(()=>({id:o.id,position:o.position,scale:o.scale,rotation:o.rotation}),()=>{let u=a.value;u&&(u.setTransform(t()),r.value?.rerender())},{deep:!1}),()=>{let u=`glyph-mesh${o.class?` ${o.class}`:""}`;return(0,h.h)("div",{"data-glyph-mesh-id":o.id,class:u},i.default?.())}}});var z=require("vue"),ee=require("@glyphcss/core");var N=(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},class:{type:String,default:void 0}},setup(o,{slots:i}){let s=(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:s.value,position:o.position,rotation:o.rotation??void 0,class:o.class},i)}});var m=require("vue");var j=(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(o,{emit:i,slots:s}){let r=(0,m.inject)(c);if(!r)throw new Error("glyphcss: GlyphHotspot must be used inside a GlyphScene.");let{sceneRef:a}=r,n=(0,m.shallowRef)(null),t=(0,m.shallowRef)(null);function l(){let u=a.value;if(!u)return;let d=u.addHotspot({id:o.id,at:o.at,size:o.size},()=>i("click"));n.value=d,t.value=d.el}function p(){n.value?.remove(),n.value=null,t.value=null}let y=(0,m.watchEffect)(()=>{!a.value||n.value||l()});return(0,m.onBeforeUnmount)(()=>{y(),p()}),(0,m.watch)(()=>({id:o.id,at:o.at,size:o.size}),()=>{p(),l()},{deep:!1}),()=>{let u=t.value,d=s.default?.();return u&&d?(0,m.h)(m.Teleport,{to:u},d):null}}});var oe=require("vue");function B(){let o=(0,oe.inject)(c);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:i}){let s={};o.rotX!==void 0&&(s.rotX=o.rotX),o.rotY!==void 0&&(s.rotY=o.rotY),o.zoom!==void 0&&(s.zoom=o.zoom),o.center!==void 0&&(s.center=o.center);let r=(0,R.shallowRef)((0,te.createGlyphOrthographicCamera)(s)),a=(0,R.shallowRef)(null);function n(){a.value?.()}return(0,R.provide)(w,{cameraRef:r,rerender:n,sceneRerenderRef:a}),(0,R.watch)(()=>({rotX:o.rotX,rotY:o.rotY,zoom:o.zoom}),t=>{let l=r.value;if(!l)return;let p=!1;t.rotX!==void 0&&l.rotX!==t.rotX&&(l.rotX=t.rotX,p=!0),t.rotY!==void 0&&l.rotY!==t.rotY&&(l.rotY=t.rotY,p=!0),t.zoom!==void 0&&l.zoom!==t.zoom&&(l.zoom=t.zoom,p=!0),p&&a.value?.()}),()=>(0,R.h)("div",{class:o.class,style:o.style},i.default?.()??[])}});var M=require("vue"),ne=require("glyphcss");var D=(0,M.defineComponent)({name:"GlyphPerspectiveCamera",props:{rotX:{type:Number,default:void 0},rotY:{type:Number,default:void 0},distance:{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:i}){let s={};o.rotX!==void 0&&(s.rotX=o.rotX),o.rotY!==void 0&&(s.rotY=o.rotY),o.distance!==void 0&&(s.distance=o.distance),o.zoom!==void 0&&(s.zoom=o.zoom),o.stretch!==void 0&&(s.stretch=o.stretch),o.center!==void 0&&(s.center=o.center);let r=(0,M.shallowRef)((0,ne.createGlyphPerspectiveCamera)(s)),a=(0,M.shallowRef)(null);function n(){a.value?.()}return(0,M.provide)(w,{cameraRef:r,rerender:n,sceneRerenderRef:a}),(0,M.watch)(()=>({rotX:o.rotX,rotY:o.rotY,distance:o.distance,zoom:o.zoom,stretch:o.stretch}),t=>{let l=r.value;if(!l)return;let p=!1;t.rotX!==void 0&&l.rotX!==t.rotX&&(l.rotX=t.rotX,p=!0),t.rotY!==void 0&&l.rotY!==t.rotY&&(l.rotY=t.rotY,p=!0),t.distance!==void 0&&l.distance!==t.distance&&(l.distance=t.distance,p=!0),t.zoom!==void 0&&l.zoom!==t.zoom&&(l.zoom=t.zoom,p=!0),t.stretch!==void 0&&l.stretch!==t.stretch&&(l.stretch=t.stretch,p=!0),p&&a.value?.()}),()=>(0,M.h)("div",{class:o.class,style:o.style},i.default?.()??[])}});var re=require("vue");function I(){let o=(0,re.inject)(w);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},animate:{type:[Boolean,Object],default:!1}},setup(o){let i=(0,v.inject)(c);if(!i)throw new Error("glyphcss: GlyphOrbitControls must be used inside a GlyphScene.");let{sceneRef:s}=i,r=(0,v.shallowRef)(null),a=(0,v.watchEffect)(()=>{let n=s.value;if(!n||r.value)return;let t={drag:o.drag,wheel:o.wheel,invert:o.invert,animate:o.animate===!1?!1:o.animate};r.value=(0,le.createGlyphOrbitControls)(n,t)});return(0,v.onBeforeUnmount)(()=>{a(),r.value?.destroy(),r.value=null}),(0,v.watch)(()=>({drag:o.drag,wheel:o.wheel,invert:o.invert,animate:o.animate}),n=>{r.value?.update({drag:n.drag,wheel:n.wheel,invert:n.invert,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 i=(0,b.inject)(c);if(!i)throw new Error("glyphcss: GlyphMapControls must be used inside a GlyphScene.");let{sceneRef:s}=i,r=(0,b.shallowRef)(null),a=(0,b.watchEffect)(()=>{let n=s.value;if(!n||r.value)return;let t={drag:o.drag,wheel:o.wheel,invert:o.invert,animate:o.animate===!1?!1:o.animate};r.value=(0,ae.createGlyphMapControls)(n,t)});return(0,b.onBeforeUnmount)(()=>{a(),r.value?.destroy(),r.value=null}),(0,b.watch)(()=>({drag:o.drag,wheel:o.wheel,invert:o.invert,animate:o.animate}),n=>{r.value?.update({drag:n.drag,wheel:n.wheel,invert:n.invert,animate:n.animate===!1?!1:n.animate})}),()=>null}});var x=require("vue"),ie=require("glyphcss");var U=(0,x.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 i=(0,x.inject)(c);if(!i)throw new Error("glyphcss: GlyphFirstPersonControls must be used inside a GlyphScene.");let{sceneRef:s}=i,r=(0,x.shallowRef)(null),a=(0,x.watchEffect)(()=>{let n=s.value;if(!n||r.value)return;let t={drag:o.drag,keyboard:o.keyboard,moveSpeed:o.moveSpeed,lookSpeed:o.lookSpeed,invert:o.invert};r.value=(0,ie.createGlyphFirstPersonControls)(n,t)});return(0,x.onBeforeUnmount)(()=>{a(),r.value?.destroy(),r.value=null}),(0,x.watch)(()=>({drag:o.drag,keyboard:o.keyboard,moveSpeed:o.moveSpeed,lookSpeed:o.lookSpeed,invert:o.invert}),n=>{r.value?.update(n)}),()=>null}});var g=require("vue");function Ce(o){let i=o,s=i*.05,r=[];function a(n,t,l){let p=[n[0]-s,n[1]-s,n[2]],y=[t[0]-s,t[1]-s,t[2]],u=[t[0]+s,t[1]+s,t[2]],d=[n[0]+s,n[1]+s,n[2]];r.push({vertices:[p,y,u],color:l}),r.push({vertices:[p,u,d],color:l})}return a([0,0,0],[i,0,0],"#ff0000"),a([0,0,0],[0,i,0],"#00ff00"),a([0,0,0],[0,0,i],"#0000ff"),r}var Y=(0,g.defineComponent)({name:"GlyphAxesHelper",props:{size:{type:Number,default:1}},setup(o){let i=(0,g.inject)(c);if(!i)throw new Error("glyphcss: GlyphAxesHelper must be used inside a GlyphScene.");let{sceneRef:s}=i,r=(0,g.shallowRef)(null),a=(0,g.computed)(()=>Ce(o.size??1));function n(){let t=s.value;t&&(r.value=t.add(a.value))}return(0,g.onMounted)(n),(0,g.onBeforeUnmount)(()=>{r.value?.dispose(),r.value=null}),(0,g.watch)(a,()=>{r.value?.dispose(),r.value=null,n()}),()=>null}});var C=require("vue");function Pe(o,i,s){let[r,a,n]=o,t=s,l=[r,a,n+t],p=[r,a,n-t],y=[r+t,a,n],u=[r-t,a,n],d=[r,a+t,n],V=[r,a-t,n];return[{vertices:[l,y,d],color:i},{vertices:[l,d,u],color:i},{vertices:[l,u,V],color:i},{vertices:[l,V,y],color:i},{vertices:[p,d,y],color:i},{vertices:[p,u,d],color:i},{vertices:[p,V,u],color:i},{vertices:[p,y,V],color:i}]}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 i=(0,C.inject)(c);if(!i)throw new Error("glyphcss: GlyphDirectionalLightHelper must be used inside a GlyphScene.");let{sceneRef:s}=i,r=(0,C.shallowRef)(null),a=(0,C.computed)(()=>Pe(o.position??[1,1,1],o.color??"#ffff00",o.size??.1));function n(){let t=s.value;t&&(r.value=t.add(a.value))}return(0,C.onMounted)(n),(0,C.onBeforeUnmount)(()=>{r.value?.dispose(),r.value=null}),(0,C.watch)(a,()=>{r.value?.dispose(),r.value=null,n()}),()=>null}});var W=require("glyphcss");var S=require("vue"),se=require("@glyphcss/core");function H(o){return o&&typeof o=="object"&&"value"in o?o.value:o}function q(o,i,s){let r=(0,S.ref)(null),a=null,n=null,t=null,l=(0,S.ref)(0);function p(){return s==null?r.value:H(s)??r.value}function y(){n!==null&&(cancelAnimationFrame(n),n=null),t=null}function u(){y(),a&&(a.stopAllAction(),a.uncacheRoot(),a=null,l.value++)}function d(){if(n!==null)return;function G(A){if(t===null){t=A,n=requestAnimationFrame(G);return}let O=(A-t)/1e3;t=A,a?.update(O),n=requestAnimationFrame(G)}n=requestAnimationFrame(G)}function V(){u();let G=H(o),A=H(i);if(!G||G.length===0||!A)return;let O=p();O&&(a=(0,se.createGlyphAnimationMixer)(O,A),l.value++,d())}let pe=(0,S.watch)(()=>{let G=H(o),A=H(i),O=s!=null?H(s):r.value;return{c:G,ctrl:A,r:O}},()=>V(),{immediate:!0,deep:!1});(0,S.onUnmounted)(()=>{pe(),u()});let $=(0,S.computed)(()=>H(o)??[]),ue=(0,S.computed)(()=>$.value.map(G=>G.name)),ye=(0,S.computed)(()=>(l.value,a)),ce=(0,S.computed)(()=>{l.value;let G=$.value,A={};for(let O of G)Object.defineProperty(A,O.name,{enumerable:!0,get(){if(!a)return null;try{return a.clipAction(O.name)}catch{return null}}});return A});return{ref:r,mixer:ye,clips:$,names:ue,actions:ce}}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});