@webspatial/core-sdk 0.1.17 → 0.1.19

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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @webspatial/core-sdk
2
2
 
3
+ ## 0.1.19
4
+
5
+ ## 0.1.18
6
+
3
7
  ## 0.1.17
4
8
 
5
9
  ## 0.1.16
package/README.md CHANGED
@@ -1,7 +1,5 @@
1
- <div align="left">
2
- <img src="../../docs/assets/logo.png" alt="WebSpatial Logo" width="400"/>
3
- </div>
4
- <br/>
1
+ > [!NOTE]
2
+ > This library is still in development. APIs may change as we enable additional platforms/features
5
3
 
6
4
  # Core SDK for WebSpatial
7
5
 
@@ -9,17 +7,10 @@ WebSpatial SDK is implemented on top of the Core SDK, which is a framework-agnos
9
7
 
10
8
  The core-sdk library is responsible for interacting with the target platforms native APIs to expose behavior not commonly found on the web.
11
9
 
12
- ## Documentation
13
-
14
- For Core SDK:
15
- * [API Docs](https://github.com/webspatial/webspatial.github.io/blob/main/docs/globals.md)
16
-
17
- For WebSpatial:
18
- - [Table of Contents](../../docs/en/README.md)
19
- - [Introduction](../../docs/en/introduction/README.md)
20
- - [Quick Start](../../docs/en/quick-start/README.md)
21
- - [Core Concepts](../../docs/en/core-concepts/README.md)
22
- - [Development Guide](../../docs/en/development-guide/README.md)
10
+ # How to use
11
+ To run a WebSpatial website you currently need to package it within a native app.
12
+
13
+ See docs on our [github](https://github.com/webspatial/webspatial-sd) for more information.
23
14
 
24
15
  ## Hello World Example
25
16
 
@@ -109,9 +100,6 @@ await windowContainer.setRootEntity(entity)
109
100
  ```
110
101
 
111
102
  Entity maps to an object that will be displayed. Components tell how that object should be displayed.
112
- You can find more examples here when you run the server locally:
113
-
114
- * http://localhost:5173/src/docsWebsite/index.html?examplePath=webElement
115
103
 
116
104
  # **Helper**
117
105
 
@@ -2,10 +2,10 @@
2
2
  (function(){
3
3
  if(typeof window === 'undefined') return;
4
4
  if(!window.__webspatialsdk__) window.__webspatialsdk__ = {}
5
- window.__webspatialsdk__['core-sdk-version'] = "0.1.17"
5
+ window.__webspatialsdk__['core-sdk-version'] = "0.1.19"
6
6
  })()
7
7
 
8
8
  "use strict";var webspatialCore=(()=>{var B=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var j=(i,e)=>{for(var t in e)B(i,t,{get:e[t],enumerable:!0})},q=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of k(e))!N.call(i,r)&&r!==t&&B(i,r,{get:()=>e[r],enumerable:!(n=A(e,r))||n.enumerable});return i};var z=i=>q(B({},"__esModule",{value:!0}),i);var F={};j(F,{Spatial:()=>P,SpatialComponent:()=>l,SpatialEntity:()=>w,SpatialHelper:()=>M,SpatialInputComponent:()=>I,SpatialMeshResource:()=>W,SpatialModel3DComponent:()=>x,SpatialModelComponent:()=>E,SpatialPhysicallyBasedMaterialResource:()=>D,SpatialSession:()=>_,SpatialTransform:()=>R,SpatialViewComponent:()=>S,SpatialWindowComponent:()=>h,SpatialWindowContainer:()=>g,Vec3:()=>v,Vec4:()=>O});var d=class i{static requestCounter=0;command;data;requestID;constructor(e,t){this.command=e,this.data=t,this.requestID=++i.requestCounter}};var L=class{id=""},m=class{id="";windowContainerId="";data={};receiveEvent(){}},a=class i{static eventPromises={};static transactionStarted=!1;static transactionCommands=Array();static eventReceivers={};static registerEventReceiver(e,t){this.eventReceivers[e]=t}static unregisterEventReceiver(e){delete this.eventReceivers[e]}static init(){window.__SpatialWebEvent=e=>{if(e.resourceId){var t=i.eventReceivers[e.resourceId];t(e.data)}else{var n=i.eventPromises[e.requestID];n&&(e.success?n.res(e):n.rej(e))}}}static startTransaction(){i.transactionStarted=!0,i.transactionCommands=[]}static async sendTransaction(){i.transactionStarted=!1;var e=new d("multiCommand",{commandList:i.transactionCommands}),t=await new Promise((n,r)=>{i.eventPromises[e.requestID]={res:n,rej:r},i.sendCommand(e)});return t}static getBackend(){return window.webkit?"AVP":"UNKNOWN"}static async sendCommand(e){if(!window.__WebSpatialUnloaded){if(i.transactionStarted){i.transactionCommands.push(e);return}var t=JSON.stringify(e);if(i.getBackend()=="AVP"){window.webkit.messageHandlers.bridge.postMessage(t);return}else{window.__WebSpatialData.androidNativeMessage(t);return}}}static getImmersiveWindowContainer(){var e=new L;return e.id="Immersive",e}static getCurrentWindowContainer(){var e=new L;return e.id="current",e}static getCurrentWebPanel(){var e=new m;return e.id="current",e.windowContainerId=i.getCurrentWindowContainer().id,e}static async createScene(e="Plain",t){let{window:n,...r}=t.sceneData,o={...r,windowID:n._webSpatialID,windowContainerID:n._webSpatialGroupID};var s=new d("createScene",{windowStyle:e,sceneData:o,windowContainerID:window._webSpatialParentGroupID});try{return await new Promise((c,u)=>{i.eventPromises[s.requestID]={res:c,rej:u},i.sendCommand(s)}),!0}catch{return!1}}static async createWindowContainer(e="Plain",t,n){var r=new d("createWindowContainer",{windowStyle:e,windowContainerID:t?t.id:void 0,resourceID:n?n.id:void 0}),o=await new Promise((c,u)=>{i.eventPromises[r.requestID]={res:c,rej:u},i.sendCommand(r)}),s=new L;return s.id=o.data.createdID,s}static async destroyResource(e){let t={};var n=new d("destroyResource",{windowContainerID:e.windowContainerId,resourceID:e.id});i.sendCommand(n)}static async ping(e){var t=new d("ping",{windowContainerID:this.getCurrentWindowContainer().id,resourceID:this.getCurrentWebPanel().id,message:e});if(i.transactionStarted)return i.sendCommand(t),null;var n=await new Promise((r,o)=>{i.eventPromises[t.requestID]={res:r,rej:o},i.sendCommand(t)});return n}static async getStats(){var e=new d("getStats",{windowContainerID:this.getCurrentWindowContainer().id,resourceID:this.getCurrentWebPanel().id}),t=await new Promise((n,r)=>{i.eventPromises[e.requestID]={res:n,rej:r},i.sendCommand(e)});return t.data}static async inspect(e){var t=new d("inspect",{resourceID:e}),n=await new Promise((r,o)=>{i.eventPromises[t.requestID]={res:r,rej:o},i.sendCommand(t)});return n.data}static async inspectRootWindowContainer(){return this.inspect("root")}static async setComponent(e,t){var n=new d("setComponent",{windowContainerID:e.windowContainerId,resourceID:t.id,entityID:e.id});i.sendCommand(n)}static async removeComponent(e,t){var n=new d("removeComponent",{windowContainerID:e.windowContainerId,resourceID:t.id,entityID:e.id});i.sendCommand(n)}static async createResource(e,t,n,r={}){var o=new d("createResource",{windowContainerID:t?t.id:void 0,resourceID:n?n.id:void 0,type:e,params:r}),s=await new Promise((u,p)=>{i.eventPromises[o.requestID]={res:u,rej:p},i.sendCommand(o)}),c=new m;return c.id=s.data.createdID,c.windowContainerId=o.data.windowContainerID,c}static async updateWindowContainer(e,t){var n=new d("updateWindowContainer",{windowContainerID:e.id,update:t}),r=await new Promise((o,s)=>{i.eventPromises[n.requestID]={res:o,rej:s},i.sendCommand(n)});return r}static async updateResource(e,t=null){var n=new d("updateResource",{windowContainerID:e.windowContainerId,resourceID:e.id,update:t||e.data}),r=await new Promise((o,s)=>{i.eventPromises[n.requestID]={res:o,rej:s},i.sendCommand(n)});return r}static async setLoading(e,t){var n=new d("setLoading",{windowContainerID:window._webSpatialParentGroupID,loading:{method:e,style:t}}),r=await new Promise((o,s)=>{i.eventPromises[n.requestID]={res:o,rej:s},i.sendCommand(n)});return r}static async openImmersiveSpace(){var e=new d("openImmersiveSpace");await i.sendCommand(e)}static async dismissImmersiveSpace(){var e=new d("dismissImmersiveSpace");await i.sendCommand(e)}static onFrame(e){var t=0,n=async()=>{var r=window.performance.now();await e(r);var o=window.performance.now()-r;setTimeout(()=>{n()},Math.max(1e3/60-o,0))};n()}};a.init();var y=class{constructor(e){this._resource=e}async destroy(){await a.destroyResource(this._resource),await this.onDestroy()}name="";async onDestroy(){}};var v=class{constructor(e=0,t=0,n=0){this.x=e;this.y=t;this.z=n}},O=class{constructor(e=0,t=0,n=0,r=1){this.x=e;this.y=t;this.z=n;this.w=r}},R=class{position=new v(0,0,0);orientation=new O(0,0,0,1);scale=new v(1,1,1)};var w=class extends y{transform=new R;_destroyed=!1;get _entity(){return this._resource}async updateTransform(){await a.updateResource(this._entity,this.transform)}async updateZIndex(e){await a.updateResource(this._entity,{zIndex:e})}components=new Map;async setComponent(e){await a.setComponent(this._entity,e._resource),this.components.set(e.constructor,e)}async removeComponent(e){var t=this.getComponent(e);t!=null&&(await a.removeComponent(this._entity,t._resource),this.components.delete(t.constructor))}getComponent(e){return this.components.get(e)}async _setParentWindowContainer(e){await a.updateResource(this._entity,{setParentWindowContainerID:e._wg.id})}async setParent(e){await a.updateResource(this._entity,{setParent:e?e._entity.id:""})}async setCoordinateSpace(e){await a.updateResource(this._entity,{setCoordinateSpace:e})}async getBoundingBox(){var e=await a.updateResource(this._entity,{getBoundingBox:!0});return e.data}async setVisible(e){await a.updateResource(this._entity,{visible:e})}async destroy(){this._destroyed=!0,await a.destroyResource(this._entity)}isDestroyed(){return this._destroyed}async _setName(e){return this.name=e,a.updateResource(this._entity,{name:e})}};var l=class extends y{async getEntity(){let e=await a.updateResource(a.getCurrentWebPanel(),{getEntityID:""});if(e.data.parentID==="")return new Promise((n,r)=>{n(null)});var t=new m;return t.id=e.data.parentID,new w(t)}};var g=class{constructor(e){this._wg=e}async _setOpenSettings(e){await a.updateWindowContainer(this._wg,{nextOpenSettings:e})}async getRootEntity(){let e=await a.updateWindowContainer(this._wg,{getRootEntityID:""});if(e.data.rootEntId==="")return null;var t=new m;return t.id=e.data.rootEntId,new w(t)}async setRootEntity(e){await e._setParentWindowContainer(this)}async close(){await a.updateWindowContainer(this._wg,{close:!0})}};var W=class extends y{};var D=class extends y{baseColor={r:0,g:.7,b:.7,a:1};metallic={value:.5};roughness={value:.5};_modelComponentAttachedTo={};_addToComponent(e){this._modelComponentAttachedTo[e._resource.id]=e}async update(){await a.updateResource(this._resource,{baseColor:this.baseColor,metallic:this.metallic,roughness:this.roughness});for(var e in this._modelComponentAttachedTo)await this._modelComponentAttachedTo[e]._syncMaterials()}};function C(i){var e=null;i?.windowContainer!==null&&(e=i?.windowContainer?i?.windowContainer._wg:a.getCurrentWindowContainer());var t=null;return i?.windowComponent!==null&&(t=i?.windowComponent?i?.windowComponent._resource:a.getCurrentWebPanel()),[e,t]}var _=class i{_engineUpdateListeners=Array();_frameLoopStarted=!1;addOnEngineUpdateEventListener(e){this._engineUpdateListeners.push(e),this._frameLoopStarted||(this._frameLoopStarted=!0,a.onFrame(async t=>{await Promise.all(this._engineUpdateListeners.map(n=>n(t)))}))}async createEntity(e){var[t,n]=C(e);let r=await a.createResource("Entity",t,n);return new w(r)}async createWindowComponent(e){var[t,n]=C(e);let r=await a.createResource("SpatialWebView",t,n);return new h(r)}async createViewComponent(e){var[t,n]=C(e);let r=await a.createResource("SpatialView",t,n);return new S(r)}async createModelComponent(e){var[t,n]=C(e),r=void 0;e&&(r={modelURL:e.url});let o=await a.createResource("ModelComponent",t,n,r);return new E(o)}async createModel3DComponent(e){var[t,n]=C(e),r=void 0;e&&(r={modelURL:e.url});let o=await a.createResource("Model3DComponent",t,n,r);return new x(o)}async createInputComponent(e){var[t,n]=C(e);let r=await a.createResource("InputComponent",t,n);return new I(r)}async createMeshResource(e){var[t,n]=C(e);let r=await a.createResource("MeshResource",t,n,e);return new W(r)}async createPhysicallyBasedMaterialResource(e){var[t,n]=C(e);let r=await a.createResource("PhysicallyBasedMaterial",t,n,e);return new D(r)}async createWindowContainer(e){var t=e?.style?e?.style:"Plain",[n,r]=C(e);return new g(await a.createWindowContainer(t,n,r))}async _createScene(e="Plain",t){return await a.createScene(e,t)}getCurrentWindowComponent(){return new h(a.getCurrentWebPanel())}async getParentWindowComponent(){let e=await a.updateResource(a.getCurrentWebPanel(),{getParentID:""});if(e.data.parentID==="")return new Promise((n,r)=>{n(null)});var t=new m;return t.id=e.data.parentID,new h(t)}async log(...e){await a.sendCommand(new d("log",{logString:e.map(t=>JSON.stringify(t))}))}async _ping(e){return await a.ping(e)}async _getStats(){return await a.getStats()}async _inspect(e=a.getCurrentWebPanel().id){return a.inspect(e)}async _inspectRootWindowContainer(){return a.inspectRootWindowContainer()}async openImmersiveSpace(){return await a.openImmersiveSpace()}async dismissImmersiveSpace(){return await a.dismissImmersiveSpace()}static _immersiveWindowContainer=null;async getImmersiveWindowContainer(){return i._immersiveWindowContainer||(i._immersiveWindowContainer=new g(a.getImmersiveWindowContainer())),i._immersiveWindowContainer}static _currentWindowContainer=null;getCurrentWindowContainer(){return i._currentWindowContainer||(i._currentWindowContainer=new g(a.getCurrentWindowContainer())),i._currentWindowContainer}transaction(e){return a.startTransaction(),e(),a.sendTransaction()}async createWindowContext(){let e=window.open("webspatial://createWindowContext");if(a.getBackend()!="AVP"){for(var t=0;e.window.testAPI==null;){t>15&&(e?.close(),e=window.open("about:blank"),t=0,this.log("unexpected error when trying to open new window, retrying."));var n="about:blank?x"+t;e.location.href=n,t++,await new Promise(r=>setTimeout(r,10))}e._webSpatialID=e.window.testAPI.getWindowID()}else for(;e.window._webSpatialID==null;)await new Promise(r=>setTimeout(r,10));return e.document.head.innerHTML=`<meta name="viewport" content="width=device-width, initial-scale=1">
9
9
  <base href="${document.baseURI}">
10
- `,e}async _getEntity(e){let t=await a.inspect(e),[n,r,o,s]=t.position.match(/(\d+\.?\d*)/g),[c,u,p,V]=t.scale.match(/(\d+\.?\d*)/g);var b=new m;b.id=e,b.windowContainerId=a.getCurrentWindowContainer().id;let f=new w(b);return f.transform.position.x=parseFloat(r),f.transform.position.y=parseFloat(o),f.transform.position.z=parseFloat(s),f.transform.scale.x=parseFloat(u),f.transform.scale.y=parseFloat(p),f.transform.scale.z=parseFloat(V),f}async setLoading(e,t){return a.setLoading(e,t)}};var P=class{requestSession(){return this.isSupported()&&this.getNativeVersion()===this.getClientVersion()?new _:null}isSupported(){return this.getNativeVersion()===this.getClientVersion()}getNativeVersion(){return window.__WebSpatialData&&window.__WebSpatialData.getNativeVersion?window.__WebSpatialData.getNativeVersion():window.WebSpatailNativeVersion}getClientVersion(){return"0.1.17"}};var M=class i{constructor(e){this.session=e}static _instance=null;static get instance(){if(this._instance)return this._instance;{let e=new P;if(e.isSupported()){let t=e.requestSession();if(t)return this._instance=new i(t),this._instance}}return null}shape={createShapeEntity:async(e="box")=>{var t=await this.session.createMeshResource({shape:e}),n=await this.session.createPhysicallyBasedMaterialResource();await n.update();var r=await this.session.createModelComponent();r.setMaterials([n]),r.setMesh(t);var o=await this.session.createEntity();return await o.setComponent(r),o.transform.position.z=0,o.transform.scale=new v(.5,.5,.5),await o.updateTransform(),o},createModelEntity:async e=>{var t=await this.session.createModelComponent({url:e}),n=await this.session.createEntity();return await n.setComponent(t),await n.updateTransform(),n},wrapInBoundingBoxEntity:async e=>{var t=await e.getBoundingBox(),n=1,r=n/Math.max(t.extents.x,t.extents.y,t.extents.z);e.transform.scale.x=r,e.transform.scale.y=r,e.transform.scale.z=r,e.transform.position.x=-t.center.x*r,e.transform.position.y=-t.center.y*r,e.transform.position.z=-t.center.z*r,await e.updateTransform();var o=await i.instance?.session.createEntity();return await e.setParent(o),o}};navigation={openPanel:async(e,t)=>{t?.resolution&&await this.session.getCurrentWindowContainer()._setOpenSettings({resolution:t.resolution});var n=await this.session.createWindowContainer({style:"Plain",windowComponent:null,windowContainer:null}),r=await this.session.createEntity({windowComponent:null,windowContainer:n}),o=await this.session.createWindowComponent({windowComponent:null,windowContainer:n});return await o.loadURL(e),await r.setCoordinateSpace("Root"),await r.setComponent(o),await n.setRootEntity(r),await this.session.getCurrentWindowContainer()._setOpenSettings({resolution:{width:900,height:700}}),{windowContainer:n}},openVolume:async(e,t)=>{var n=await this.session.createWindowContainer({style:"Volumetric",windowComponent:null,windowContainer:null}),r=await this.session.createEntity({windowComponent:null,windowContainer:n});await r.setComponent(await this.session.createViewComponent({windowComponent:null,windowContainer:n})),await r.setCoordinateSpace("Root"),await n.setRootEntity(r);var o=await this.session.createEntity({windowComponent:null,windowContainer:n}),s=await this.session.createWindowComponent({windowComponent:null,windowContainer:n});await s.loadURL(e),t?.resolution?await s.setResolution(t.resolution.width,t.resolution.height):await s.setResolution(1e3,1e3),o.transform.position.z=-.49,await o.updateTransform(),await o.setCoordinateSpace("App"),await o.setComponent(s),await o.setParent(r)}};dom={attachSpatialView:async e=>{var t=await this.session.createEntity();await t.setCoordinateSpace("Dom"),await t.setComponent(await this.session.createViewComponent());var n=await this.session.getCurrentWindowComponent(),r=await n.getEntity();await t.setParent(r);var o=()=>{var p=e.getBoundingClientRect();t.transform.position.x=p.x+p.width/2,t.transform.position.y=p.y+p.height/2+window.scrollY,t.updateTransform(),t.getComponent(S).setResolution(p.width,p.height)},s=new MutationObserver(o);s.observe(e,{attributes:!0});var c=new ResizeObserver(o);return c.observe(e),new MutationObserver(p=>{p.forEach(V=>{V.removedNodes.forEach(b=>{b instanceof HTMLElement&&o()}),V.addedNodes.forEach(b=>{b instanceof HTMLElement&&o()})})}).observe(document.body,{childList:!0,subtree:!0}),o(),{entity:t}}};setBackgroundStyle=async(e,t="#00000000")=>{document.documentElement.style.backgroundColor=t,await this.session.getCurrentWindowComponent().setStyle(e)}};var h=class extends l{async loadURL(e){await a.updateResource(this._resource,{url:e})}async setFromWindow(e){e._webSpatialID?await a.updateResource(this._resource,{windowID:e._webSpatialID}):await console.warn("failed to call setFromWindow, window provided is not valid")}async setResolution(e,t){await a.updateResource(this._resource,{resolution:{x:e,y:t}})}async setRotationAnchor(e){await a.updateResource(this._resource,{rotationAnchor:e})}async setOpacity(e){await a.updateResource(this._resource,{opacity:e})}async setStyle(e){let n=M.instance?.session.getCurrentWindowComponent()?._resource.id==this._resource.id,{material:r,cornerRadius:o}=e,s={};if(r?.type&&(s.backgroundMaterial=r.type),o!==void 0&&(typeof o=="number"?s.cornerRadius={topLeading:o,bottomLeading:o,topTrailing:o,bottomTrailing:o}:s.cornerRadius={...o}),n&&document&&document.readyState=="loading"){var c=encodeURIComponent(JSON.stringify(s));let u=document.createElement("a");u.href="forcestyle://mystyle.css?style="+c,document.body.appendChild(u),u.click(),u.remove()}else await a.updateResource(this._resource,{style:s})}async setScrollEdgeInsets(e){await a.updateResource(this._resource,{setScrollEdgeInsets:e})}async setScrollEnabled(e){await a.updateResource(this._resource,{scrollEnabled:e})}async setScrollWithParent(e){await a.updateResource(this._resource,{scrollWithParent:e})}};var T=class extends l{constructor(e){super(e),a.registerEventReceiver(e.id,t=>{this.onRecvEvent(t)})}async onDestroy(){a.unregisterEventReceiver(this._resource.id)}};var I=class extends T{onRecvEvent(e){this.onTranslate(e)}onTranslate(e){}};var E=class extends l{cachedMaterials=new Array;async setMesh(e){await a.updateResource(this._resource,{meshResource:e._resource.id})}async setMaterials(e){this.cachedMaterials=e,await a.updateResource(this._resource,{materials:e.map(t=>(t._addToComponent(this),t._resource.id))})}async _syncMaterials(){await this.setMaterials(this.cachedMaterials)}};var S=class extends l{async setResolution(e,t){await a.updateResource(this._resource,{resolution:{x:e,y:t}})}async setIsPortal(e){await a.updateResource(this._resource,{isPortal:e})}};var x=class extends T{onRecvEvent(e){let{eventType:t,value:n,error:r}=e;switch(t){case"phase":n==="success"?this.onSuccess?.():this.onFailure?.(r);break;case"dragstart":this._onDragStart?.(n);break;case"dragend":this._onDragEnd?.(n);break;case"drag":this._onDrag?.(n);break;case"tap":this._onTap?.();break;case"doubletap":this._onDoubleTap?.();break;case"longpress":this._onLongPress?.();break;default:break}}async setResolution(e,t){await a.updateResource(this._resource,{resolution:{x:e,y:t}})}async setRotationAnchor(e){await a.updateResource(this._resource,{rotationAnchor:e})}async setOpacity(e){await a.updateResource(this._resource,{opacity:e})}async setContentMode(e){await a.updateResource(this._resource,{contentMode:e})}async setAspectRatio(e){await a.updateResource(this._resource,{aspectRatio:e})}async setScrollWithParent(e){await a.updateResource(this._resource,{scrollWithParent:e})}async setResizable(e){await a.updateResource(this._resource,{resizable:e})}onSuccess;onFailure;_onDragStart;set onDragStart(e){this._onDragStart!==e&&(this._onDragStart=e,a.updateResource(this._resource,{enableDragEvent:this.enableDragEvent}))}_onDrag;set onDrag(e){this._onDrag!==e&&(this._onDrag=e,a.updateResource(this._resource,{enableDragEvent:this.enableDragEvent}))}_onDragEnd;set onDragEnd(e){this._onDragEnd!==e&&(this._onDragEnd=e,a.updateResource(this._resource,{enableDragEvent:this.enableDragEvent}))}get enableDragEvent(){return this._onDrag!==void 0||this._onDragStart!==void 0||this._onDragEnd!==void 0}_onTap;set onTap(e){this._onTap!==e&&(this._onTap=e,a.updateResource(this._resource,{enableTapEvent:e!==void 0}))}_onDoubleTap;set onDoubleTap(e){this._onDoubleTap!==e&&(this._onDoubleTap=e,a.updateResource(this._resource,{enableDoubleTapEvent:e!==void 0}))}_onLongPress;set onLongPress(e){this._onLongPress!==e&&(this._onLongPress=e,a.updateResource(this._resource,{enableLongPressEvent:e!==void 0}))}};return z(F);})();
10
+ `,e}async _getEntity(e){let t=await a.inspect(e),[n,r,o,s]=t.position.match(/(\d+\.?\d*)/g),[c,u,p,V]=t.scale.match(/(\d+\.?\d*)/g);var b=new m;b.id=e,b.windowContainerId=a.getCurrentWindowContainer().id;let f=new w(b);return f.transform.position.x=parseFloat(r),f.transform.position.y=parseFloat(o),f.transform.position.z=parseFloat(s),f.transform.scale.x=parseFloat(u),f.transform.scale.y=parseFloat(p),f.transform.scale.z=parseFloat(V),f}async setLoading(e,t){return a.setLoading(e,t)}};var P=class{requestSession(){return this.isSupported()&&this.getNativeVersion()===this.getClientVersion()?new _:null}isSupported(){return this.getNativeVersion()===this.getClientVersion()}getNativeVersion(){return window.__WebSpatialData&&window.__WebSpatialData.getNativeVersion?window.__WebSpatialData.getNativeVersion():window.WebSpatailNativeVersion}getClientVersion(){return"0.1.19"}};var M=class i{constructor(e){this.session=e}static _instance=null;static get instance(){if(this._instance)return this._instance;{let e=new P;if(e.isSupported()){let t=e.requestSession();if(t)return this._instance=new i(t),this._instance}}return null}shape={createShapeEntity:async(e="box")=>{var t=await this.session.createMeshResource({shape:e}),n=await this.session.createPhysicallyBasedMaterialResource();await n.update();var r=await this.session.createModelComponent();r.setMaterials([n]),r.setMesh(t);var o=await this.session.createEntity();return await o.setComponent(r),o.transform.position.z=0,o.transform.scale=new v(.5,.5,.5),await o.updateTransform(),o},createModelEntity:async e=>{var t=await this.session.createModelComponent({url:e}),n=await this.session.createEntity();return await n.setComponent(t),await n.updateTransform(),n},wrapInBoundingBoxEntity:async e=>{var t=await e.getBoundingBox(),n=1,r=n/Math.max(t.extents.x,t.extents.y,t.extents.z);e.transform.scale.x=r,e.transform.scale.y=r,e.transform.scale.z=r,e.transform.position.x=-t.center.x*r,e.transform.position.y=-t.center.y*r,e.transform.position.z=-t.center.z*r,await e.updateTransform();var o=await i.instance?.session.createEntity();return await e.setParent(o),o}};navigation={openPanel:async(e,t)=>{t?.resolution&&await this.session.getCurrentWindowContainer()._setOpenSettings({resolution:t.resolution});var n=await this.session.createWindowContainer({style:"Plain",windowComponent:null,windowContainer:null}),r=await this.session.createEntity({windowComponent:null,windowContainer:n}),o=await this.session.createWindowComponent({windowComponent:null,windowContainer:n});return await o.loadURL(e),await r.setCoordinateSpace("Root"),await r.setComponent(o),await n.setRootEntity(r),await this.session.getCurrentWindowContainer()._setOpenSettings({resolution:{width:900,height:700}}),{windowContainer:n}},openVolume:async(e,t)=>{var n=await this.session.createWindowContainer({style:"Volumetric",windowComponent:null,windowContainer:null}),r=await this.session.createEntity({windowComponent:null,windowContainer:n});await r.setComponent(await this.session.createViewComponent({windowComponent:null,windowContainer:n})),await r.setCoordinateSpace("Root"),await n.setRootEntity(r);var o=await this.session.createEntity({windowComponent:null,windowContainer:n}),s=await this.session.createWindowComponent({windowComponent:null,windowContainer:n});await s.loadURL(e),t?.resolution?await s.setResolution(t.resolution.width,t.resolution.height):await s.setResolution(1e3,1e3),o.transform.position.z=-.49,await o.updateTransform(),await o.setCoordinateSpace("App"),await o.setComponent(s),await o.setParent(r)}};dom={attachSpatialView:async e=>{var t=await this.session.createEntity();await t.setCoordinateSpace("Dom"),await t.setComponent(await this.session.createViewComponent());var n=await this.session.getCurrentWindowComponent(),r=await n.getEntity();await t.setParent(r);var o=()=>{var p=e.getBoundingClientRect();t.transform.position.x=p.x+p.width/2,t.transform.position.y=p.y+p.height/2+window.scrollY,t.updateTransform(),t.getComponent(S).setResolution(p.width,p.height)},s=new MutationObserver(o);s.observe(e,{attributes:!0});var c=new ResizeObserver(o);return c.observe(e),new MutationObserver(p=>{p.forEach(V=>{V.removedNodes.forEach(b=>{b instanceof HTMLElement&&o()}),V.addedNodes.forEach(b=>{b instanceof HTMLElement&&o()})})}).observe(document.body,{childList:!0,subtree:!0}),o(),{entity:t}}};setBackgroundStyle=async(e,t="#00000000")=>{document.documentElement.style.backgroundColor=t,await this.session.getCurrentWindowComponent().setStyle(e)}};var h=class extends l{async loadURL(e){await a.updateResource(this._resource,{url:e})}async setFromWindow(e){e._webSpatialID?await a.updateResource(this._resource,{windowID:e._webSpatialID}):await console.warn("failed to call setFromWindow, window provided is not valid")}async setResolution(e,t){await a.updateResource(this._resource,{resolution:{x:e,y:t}})}async setRotationAnchor(e){await a.updateResource(this._resource,{rotationAnchor:e})}async setOpacity(e){await a.updateResource(this._resource,{opacity:e})}async setStyle(e){let n=M.instance?.session.getCurrentWindowComponent()?._resource.id==this._resource.id,{material:r,cornerRadius:o}=e,s={};if(r?.type&&(s.backgroundMaterial=r.type),o!==void 0&&(typeof o=="number"?s.cornerRadius={topLeading:o,bottomLeading:o,topTrailing:o,bottomTrailing:o}:s.cornerRadius={...o}),n&&document&&document.readyState=="loading"){var c=encodeURIComponent(JSON.stringify(s));let u=document.createElement("a");u.href="forcestyle://mystyle.css?style="+c,document.body.appendChild(u),u.click(),u.remove()}else await a.updateResource(this._resource,{style:s})}async setScrollEdgeInsets(e){await a.updateResource(this._resource,{setScrollEdgeInsets:e})}async setScrollEnabled(e){await a.updateResource(this._resource,{scrollEnabled:e})}async setScrollWithParent(e){await a.updateResource(this._resource,{scrollWithParent:e})}};var T=class extends l{constructor(e){super(e),a.registerEventReceiver(e.id,t=>{this.onRecvEvent(t)})}async onDestroy(){a.unregisterEventReceiver(this._resource.id)}};var I=class extends T{onRecvEvent(e){this.onTranslate(e)}onTranslate(e){}};var E=class extends l{cachedMaterials=new Array;async setMesh(e){await a.updateResource(this._resource,{meshResource:e._resource.id})}async setMaterials(e){this.cachedMaterials=e,await a.updateResource(this._resource,{materials:e.map(t=>(t._addToComponent(this),t._resource.id))})}async _syncMaterials(){await this.setMaterials(this.cachedMaterials)}};var S=class extends l{async setResolution(e,t){await a.updateResource(this._resource,{resolution:{x:e,y:t}})}async setIsPortal(e){await a.updateResource(this._resource,{isPortal:e})}};var x=class extends T{onRecvEvent(e){let{eventType:t,value:n,error:r}=e;switch(t){case"phase":n==="success"?this.onSuccess?.():this.onFailure?.(r);break;case"dragstart":this._onDragStart?.(n);break;case"dragend":this._onDragEnd?.(n);break;case"drag":this._onDrag?.(n);break;case"tap":this._onTap?.();break;case"doubletap":this._onDoubleTap?.();break;case"longpress":this._onLongPress?.();break;default:break}}async setResolution(e,t){await a.updateResource(this._resource,{resolution:{x:e,y:t}})}async setRotationAnchor(e){await a.updateResource(this._resource,{rotationAnchor:e})}async setOpacity(e){await a.updateResource(this._resource,{opacity:e})}async setContentMode(e){await a.updateResource(this._resource,{contentMode:e})}async setAspectRatio(e){await a.updateResource(this._resource,{aspectRatio:e})}async setScrollWithParent(e){await a.updateResource(this._resource,{scrollWithParent:e})}async setResizable(e){await a.updateResource(this._resource,{resizable:e})}onSuccess;onFailure;_onDragStart;set onDragStart(e){this._onDragStart!==e&&(this._onDragStart=e,a.updateResource(this._resource,{enableDragEvent:this.enableDragEvent}))}_onDrag;set onDrag(e){this._onDrag!==e&&(this._onDrag=e,a.updateResource(this._resource,{enableDragEvent:this.enableDragEvent}))}_onDragEnd;set onDragEnd(e){this._onDragEnd!==e&&(this._onDragEnd=e,a.updateResource(this._resource,{enableDragEvent:this.enableDragEvent}))}get enableDragEvent(){return this._onDrag!==void 0||this._onDragStart!==void 0||this._onDragEnd!==void 0}_onTap;set onTap(e){this._onTap!==e&&(this._onTap=e,a.updateResource(this._resource,{enableTapEvent:e!==void 0}))}_onDoubleTap;set onDoubleTap(e){this._onDoubleTap!==e&&(this._onDoubleTap=e,a.updateResource(this._resource,{enableDoubleTapEvent:e!==void 0}))}_onLongPress;set onLongPress(e){this._onLongPress!==e&&(this._onLongPress=e,a.updateResource(this._resource,{enableLongPressEvent:e!==void 0}))}};return z(F);})();
11
11
  //# sourceMappingURL=index.global.js.map
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  (function(){
3
3
  if(typeof window === 'undefined') return;
4
4
  if(!window.__webspatialsdk__) window.__webspatialsdk__ = {}
5
- window.__webspatialsdk__['core-sdk-version'] = "0.1.17"
5
+ window.__webspatialsdk__['core-sdk-version'] = "0.1.19"
6
6
  })()
7
7
 
8
8
 
@@ -949,7 +949,7 @@ var Spatial = class {
949
949
  * @returns client version string
950
950
  */
951
951
  getClientVersion() {
952
- return "0.1.17";
952
+ return "0.1.19";
953
953
  }
954
954
  };
955
955
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webspatial/core-sdk",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "this is the core js API for webspatial",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -15,7 +15,8 @@
15
15
  "sideEffects": false,
16
16
  "repository": {
17
17
  "type": "git",
18
- "url": "git+https://github.com/webspatial/webspatial-sdk.git"
18
+ "url": "git+https://github.com/webspatial/webspatial-sdk.git",
19
+ "directory": "packages/core"
19
20
  },
20
21
  "author": "",
21
22
  "license": "ISC",
@@ -29,9 +30,7 @@
29
30
  "typedoc-plugin-markdown": "^4.2.2",
30
31
  "typescript": "^5.6.3"
31
32
  },
32
- "dependencies": {
33
- "loglevel": "^1.9.2"
34
- },
33
+ "dependencies": {},
35
34
  "scripts": {
36
35
  "test": "tsc -p ./tsconfig.json",
37
36
  "build": "tsup",