@epigraph/solutions 0.27.0-canary.1 → 0.27.0-canary.3

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.
@@ -4165,7 +4165,7 @@ ${l.join(`
4165
4165
  ${b.fragmentShader.replace("gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );","gl_FragColor = vec4( vec3( 0.0 ), ( 1.0 - fragCoordZ ) * darkness );")}
4166
4166
  `},this.__depthMaterial.depthTest=!1,this.__depthMaterial.depthWrite=!1,this.__horizontalBlurMaterial=new Ni(fC),this.__horizontalBlurMaterial.depthTest=!1,this.__verticalBlurMaterial=new Ni(pC),this.__verticalBlurMaterial.depthTest=!1}reCalculate(){const e=this.__scene.background;this.__scene.background=null,this.__scene.overrideMaterial=this.__depthMaterial;const t=this.__targetRenderer.getClearAlpha();this.__targetRenderer.setClearAlpha(0),this.__targetRenderer.setRenderTarget(this.__renderTarget),this.__targetRenderer.render(this.__scene,this.__shadowCamera),this.__scene.overrideMaterial=null,this.__blurShadow(this.__shadowState.shadow.blur),this.__blurShadow(this.__shadowState.shadow.blur*.4),this.__targetRenderer.setRenderTarget(null),this.__targetRenderer.setClearAlpha(t),this.__scene.background=e}}class Et{static isTouchDevice(){try{return document.createEvent("TouchEvent"),!0}catch{return!1}}static async wait(e){return new Promise(t=>{setTimeout(()=>{t()},e)})}static generateStylesDomElem(e,t=""){const i=document.createElement("style");return i.setAttribute("id",e),i.innerHTML=t,i}static generateHtmlDivElem(e,t=""){const i=document.createElement("div");return i.setAttribute("id",e),i.innerHTML=t,i}static getRandomIntegerInRange(e,t){return e=Math.ceil(e),t=Math.floor(t),Math.floor(Math.random()*(t-e+1))+e}static getUrlParameterByName(e,t=window.location.search){const i=new URLSearchParams(t);return Object.fromEntries(i.entries())[e]}static getBaseUrl(){const e=Et.getUrlParameterByName("parentUrl");return e||window.location.href}static normalizeRadian(e){return Math.atan2(Math.sin(e),Math.cos(e))}static isBetweenOnCircle(e,t,i){return e=Et.normalizeRadian(e),t=Et.normalizeRadian(t),i=Et.normalizeRadian(i),t<=i?e>=t&&e<=i:e>=t||e<=i}static getPointInBetweenByPercentage(e,t,i){let a=t.clone().sub(e);const l=a.length();return a=a.normalize().multiplyScalar(l*i),e.clone().add(a)}static clampAzimuth(e,t,i){if(Math.abs(t)==1/0||i==1/0)return e;const a=Et.normalizeRadian(e),l=Et.normalizeRadian(t),h=Et.normalizeRadian(i);if(Et.isBetweenOnCircle(a,l,h))return a;const d=Math.abs(Et.normalizeRadian(a-l)),p=Math.abs(Et.normalizeRadian(a-h));return d<p?l:h}static resolveNexusEndpoint(e){let t=Cd.PRODUCTION;return e=="local"?t=Cd.LOCAL:e==="staging"&&(t=Cd.STAGING),t}static parseUrlForEpigraphParams(e){const t=new Map,i=new Xm(e);t.set(Ii.epigraphSessionId,i.getParameterInUrl(Ii.epigraphSessionId)),t.set(Ii.identifier,i.getParameterInUrl(Ii.identifier)),t.set(Ii.identifierType,i.getParameterInUrl(Ii.identifierType)),t.set(Ii.type,i.getParameterInUrl(Ii.type));const a=i.getParameterInUrl(Ii.action);return a&&t.set(oh.AR,JSON.parse(a)[oh.AR]),t}static generateShareableUrl({baseUrl:e,identifier:t,identifierType:i,sharedConfig:a,arCompatible:l=!1}){const h=new Map;return h.set(Ii.epigraphSessionId,window.epigraph.epigraphSessionId),h.set(Ii.identifier,t),h.set(Ii.identifierType,i),a&&h.set(Ii.sharedConfig,a),l&&h.set(Ii.action,`{"${oh.AR}":true}`),new Xm(e).generateQrCodeUrl(Object.fromEntries(h.entries()),!1)}static _dispose3(e){e instanceof ot&&e.geometry.dispose(),e instanceof ot&&(Array.isArray(e.material)?e.material.forEach(t=>t.dispose()):e.material.dispose(),e.material?.map?.dispose())}static dispose3(e){e.traverse(t=>{t instanceof ot&&Et._dispose3(t)}),(e instanceof ot||e instanceof Dn)&&Et._dispose3(e)}static animateValue(e,t,i,a){const l=performance.now();function h(d){const p=d-l,g=Math.min(p/i,1),A=e+(t-e)*g;a(A),g<1&&requestAnimationFrame(h)}requestAnimationFrame(h)}static getCustomStylesTemplate(){const t=document.querySelector("#epigraphCustomStyles")?.content?.cloneNode(!0);return t||$e}}class mC{constructor(e){this._success=e}get success(){return this._success}set success(e){this._success=e}get failed(){return!this._success}}class LU extends mC{constructor(e=!1,t=void 0){super(e),this.__payload=t}get payload(){return this.__payload}set payload(e){this.__payload=e}}var AC=(o=>(o.Empty="entity-empty",o.Gltf="entity-mesh",o.Render="entity-render",o.Proxy="entity-proxy",o.Collider="entity-collider",o.Asset="entity-asset",o))(AC||{});class DU extends li{constructor(){super(),this._entityType=AC.Empty}get entityType(){return this._entityType}destroy(){let e;const t=new LU(!1,e);return e=void 0,t.success=!0,t.payload=e,t}}class Tv{constructor(e){this.__name=e}getName(){return this.__name}}class Jr extends Lt{constructor(e){super(),this.epgType="PLUG",this.__connectionId="",this.__isPrimary=!1,this.__receiver=null,this.__debugGeo=null,this.__config=e,this.name=e.name,this.__connectionId=e.connectionId,this.__isPrimary=e.isPrimary;const t=e.position;this.position.set(t.x,t.y,t.z);const i=e.rotation;this.rotation.set(i.x,i.y,i.z)}get config(){return this.__config}get connectionId(){return this.__connectionId}get isPrimary(){return this.__isPrimary}get isOpen(){return this.__receiver===null}get receiver(){return this.__receiver}connect(e){this.__receiver=e.receiver}disconnect(){this.__receiver=null}clone(e){return new Jr(this.__config).copy(this,e)}showDebug(){const e=new se().setFromEuler(this.rotation).normalize(),t=this.position,i=.2,a=16711680;this.__debugGeo=new t1(e,t,i,a,.06,.06);const l=document.createElement("div");l.textContent=this.name;const h=new x_(l);l.style.pointerEvents="none";const d=new se;this.getWorldDirection(d),d.normalize();const p=this.position.clone().addScaledVector(d,Math.random());h.position.set(p.x,p.y,p.z),this.__debugGeo.add(h),this.add(this.__debugGeo)}hideDebug(){this.__debugGeo&&(this.__debugGeo.clear(),this.__debugGeo?.removeFromParent(),Et.dispose3(this.__debugGeo))}}class ur extends Lt{constructor(e){super(),this.epgType="RECEIVER",this.__connectionId="",this.__plug=null,this.__debugGeo=null,this.__config=e,this.name=e.name,this.__connectionId=e.connectionId;const t=e.position;this.position.set(t.x,t.y,t.z);const i=e.rotation;this.rotation.set(i.x,i.y,i.z)}get config(){return this.__config}get connectionId(){return this.__connectionId}get isOpen(){return this.__plug===null}get plug(){return this.__plug}connect(e){this.__plug=e.plug}disconnect(){this.__plug=null}clone(e){return new ur(this.__config).copy(this,e)}showDebug(){const e=new se().setFromEuler(this.rotation.clone()).normalize(),t=this.position,i=.1,a=65280;this.__debugGeo=new t1(e,t,i,a,.01,.08);const l=document.createElement("div");l.textContent=this.name,l.style.color="green";const h=new x_(l);l.style.pointerEvents="none",this.__debugGeo.add(h),this.add(this.__debugGeo)}hideDebug(){this.__debugGeo&&(this.__debugGeo.clear(),this.__debugGeo?.removeFromParent(),Et.dispose3(this.__debugGeo))}}var S_=(o=>(o.Gltf="media-asset-gltf",o.Proxy="media-asset-proxy",o.Render="media-asset-render",o))(S_||{}),JA=(o=>(o.Plug="plug",o.Receiver="receiver",o))(JA||{});class _C{constructor({id:e,uri:t,appWcRef:i}){this._type="media-asset-gltf",this._id=crypto.randomUUID(),this._loadingProgress=0,this._state="declared",this._resource=null,e&&(this._id=e),this._appWcRef=i,this._uri=t}get id(){return this._id}get uri(){return this._uri}get loadingProgress(){return this._loadingProgress}get state(){return this._state}get isLoaded(){return this._state==="loaded"}get type(){return this._type}get resource(){return this._resource}highlight(){}updateLoadingProgress(e){this._loadingProgress=e,this._appWcRef.eventsManager.assetLoadProgress.fire({progress:e})}async load(){if(this._state==="loaded"||this._state==="loading")return Promise.resolve(!0);this._state="loading";const e=await this._appWcRef.loaders.gltfLoader.loadAsync(this._uri,t=>{this.updateLoadingProgress(t.loaded/t.total*100)}).catch(t=>(window.epigraph.logger.groupCollapsed({title:""}),window.epigraph.logger.error({title:"An error occurred while trying to load an asset!",details:t}),this._state="failed",Promise.reject()));return e===void 0?Promise.reject(!1):(this._resource=e,await this._parseLoadedGltf(),this._state="loaded",Promise.resolve(!0))}async _parseLoadedGltf(){window.epigraph.logger.info({title:"Parsing GLTF data",details:this._resource})}unload(){return this._resource={},Promise.resolve(!0)}}class NU extends _C{constructor({id:e,uri:t,appWcRef:i}){super({id:e,uri:t,appWcRef:i}),this._type=S_.Proxy,this.__plugs=[],this.__receivers=[]}get plugs(){return this.__plugs}get receivers(){return this.__receivers}async _parseLoadedGltf(){if(!this._resource?.scene)return;const e=[];this._resource.scene.traverse(t=>{if(t.userData.epgType===JA.Receiver){const i=new ur({name:t.name,connectionId:t.userData.connectionId,position:t.position.clone(),rotation:t.rotation.clone()});this.__receivers.push(i),e.push(t)}else if(t.userData.epgType===JA.Plug){const i=new Jr({name:t.name,isPrimary:t.userData.isPrimary,connectionId:t.userData.connectionId,position:t.position.clone(),rotation:t.rotation.clone()});this.__plugs.push(i),e.push(t)}});for(const t of this.__receivers)this._resource.scene.add(t);for(const t of this.__plugs)this._resource.scene.add(t);for(const t of e)t.removeFromParent(),Et.dispose3(t)}unload(){return this._resource={},this.__plugs=[],this.__receivers=[],Promise.resolve(!0)}}class OU extends _C{constructor({id:e,uri:t,appWcRef:i}){super({id:e,uri:t,appWcRef:i}),this._type=S_.Render,this.__variantsExtensionName="KHR_materials_variants",this.__finishNamesFromAsset=[]}get khrVariantsExtensionName(){return this.__variantsExtensionName}get khrVariantsExtension(){return this.__variantsExtension}get finishNamesFromAsset(){return this.__finishNamesFromAsset}async _parseLoadedGltf(){const e=this._resource?.userData?.gltfExtensions;if(!e){this.__variantsExtension=null,this.__finishNamesFromAsset=["default"];return}if(this.__variantsExtension=e[this.__variantsExtensionName],this.__variantsExtension?.variants)for(const t of this.__variantsExtension.variants)this.__finishNamesFromAsset.push(t.name);this._resource?.scene.traverse(t=>{t instanceof ot&&(t.castShadow=!0)})}unload(){return this._resource={},this.__variantsExtension={},this.__finishNamesFromAsset=[],Promise.resolve(!0)}}class yC{constructor(e,t){this._loggerContext="ASSET",this.__autoGenerateProxyEntity=!1,this.__finishes=new Map,this.__hotspots=[],this.__id=e.id,this.__name=e.name,this.__appWcRef=t,this.__proxyGltf=new NU({id:String(e.id),uri:e.proxyGeo,appWcRef:this.__appWcRef}),this.__autoGenerateProxyEntity=e.autoGenerateProxyEntity,this.__renderGltf=new OU({id:String(e.id),uri:e.renderGeo,appWcRef:this.__appWcRef});for(const i in e.finishes)this.__finishes.set(i,new Tv(i));e.hotspots&&(this.__hotspots=e.hotspots)}get id(){return this.__id}get name(){return this.__name}get proxyGltf(){return this.__proxyGltf}get autoGenerateProxyEntity(){return this.__autoGenerateProxyEntity}get renderGltf(){return this.__renderGltf}get finishes(){return this.__finishes}get hotspots(){return this.__hotspots}get allFinishIds(){const e=[];for(const t of this.__finishes.keys())e.push(t);return e}async loadProxyGltf(){return this.__proxyGltf?await this.__proxyGltf.load():Promise.resolve(!0)}pullFinishesFromRenderGltf(){this.__renderGltf.finishNamesFromAsset.forEach(e=>{this.__finishes.has(e)||this.__finishes.set(e,new Tv(e))})}async loadRenderGltf(e=!1){return await this.__renderGltf.load().catch(t=>(window.epigraph.logger.error({title:`Failed to load asset: ${this.__id}`,details:t,contextOverride:this._loggerContext}),Promise.reject(!1))),e&&this.pullFinishesFromRenderGltf(),Promise.resolve(!0)}async load(e=!1){return Promise.all([this.loadRenderGltf(e),this.loadProxyGltf()])}}var kU=Object.defineProperty,bC=(o,e,t,i)=>{for(var a=void 0,l=o.length-1,h;l>=0;l--)(h=o[l])&&(a=h(e,t,a)||a);return a&&kU(e,t,a),a};class vC{constructor({appWcRef:e}){this._loggerContext="SOLUTION MANAGER",this._appWcRef=e}initialize(){window.epigraph.logger.info({title:"Initializing...",contextOverride:this._loggerContext})}}const C_=class Dd extends ul{constructor(){super(),this._loggerContext="SOLUTION MANAGER",this.enabled=!1}static{this.webComponentName="solution-manager"}connectedCallback(){super.connectedCallback(),window.epigraph.logger.info({title:"Initializing...",contextOverride:this._loggerContext})}firstUpdated(e){super.firstUpdated(e)}static setupWebComponent(){window.customElements.get(Dd.webComponentName)||window.customElements.define(Dd.webComponentName,Dd)}render(){return Ee`
4167
4167
  ${Et.getCustomStylesTemplate()}
4168
- `}};bC([ue({type:Boolean,attribute:"enabled"})],C_.prototype,"enabled");bC([ue({attribute:!1})],C_.prototype,"appWcRef");let Yf=C_;class UU{constructor({id:e,name:t,receiver:i,plug:a}){this.__name=t,this.__plug=a,this.__receiver=i,e?this.__id=e:this.__id=`${this.__receiver.uuid}-${this.__plug.uuid}`}get id(){return this.__id}get name(){return this.__name}get plug(){return this.__plug}isPrimary(){return this.__plug?.isPrimary}get receiver(){return this.__receiver}connect(){this.__receiver.connect(this),this.__plug.connect(this)}disconnect(){this.__plug&&this.__plug.disconnect(),this.__receiver&&this.__receiver.disconnect()}}class FU{constructor({id:e,receiver:t,plug:i}){this.__id=e,this.__plug=i,this.__receiver=t}get id(){return this.__id}get plug(){return this.__plug}set plug(e){this.__plug=e}get receiver(){return this.__receiver}set receiver(e){this.__receiver=e}disconnect(){this.__receiver.disconnect(),this.__plug.disconnect()}}class $U extends li{constructor(e){super(),this.name="ENTITIES",this._loggerContext="SCENE STRUCTURE",this.__appWcRef=e,this.__eventsManager=this.__appWcRef.eventsManager}async setupRootEntity(e,t){const i=await new yC({id:0,name:"Root",proxyGeo:e??"https://asset.myepigraph.com/configurator-assets/epigraph-solution-assets/staging-assets/pipeline-assets/3d-assets/proxies/root-proxy.glb",autoGenerateProxyEntity:!1,renderGeo:t??"https://asset.myepigraph.com/configurator-assets/epigraph-solution-assets/staging-assets/pipeline-assets/3d-assets/render/root-render.glb",finishes:{},hotspots:[]},this.__appWcRef);await i.load().catch(()=>Promise.reject(!1));const a=new Va(i);await a.initialize(),this.add(a),this.__rootEntity=a}get rootEntity(){return this.__rootEntity}isEmpty(){return this.__rootEntity===void 0||this.__rootEntity.children.length===0}isNotEmpty(){return!this.isEmpty()}addEntity(e){this.__rootEntity.add(e),this.__eventsManager.structureNodeAddedEvent.fire({node:e})}getFirstEntity(){return this.isEmpty()?null:this.getSceneEntities()[0]}getEntityForAssetId(e){const t=this.getSceneEntities();let i;for(const a of t)if(a.asset.id===e){i=a;break}return i}getSceneEntities(e=!1){const t=[];return this.__rootEntity.traverse(i=>{!e&&i.uuid===this.__rootEntity.uuid||i instanceof Va&&t.push(i)}),t}getPossibleConnectionsForAssetInScene(e){const t=[];window.epigraph.logger.info({title:"Getting connections for asset in scene:",details:e,contextOverride:this._loggerContext});for(const i of this.getSceneEntities(!0)){const a=i.findPossibleConnectionsForAsset(e);a.length>0&&t.push(...a)}return window.epigraph.logger.table({title:"Possible Connections",details:t}),t}getAllConnectionsInScene(){const e=new Map;return this.traverse(t=>{if(t instanceof ur||t instanceof Jr){if(t.connectionId===""||e.has(t.connectionId))return;let a=null,l=null;if(t instanceof ur?(a=t,l=t.plug):t instanceof Jr&&(a=t.receiver,l=t),a!==null&&l!==null){const h=new FU({id:t.connectionId,receiver:a,plug:l});e.set(t.connectionId,h)}}}),e}}class zU extends vC{constructor(e){super({appWcRef:e}),this._loggerContext="SCENE MANAGER",this.__currentSceneBounds=new vi,this.__sceneStructure=new $U(this._appWcRef)}get sceneStructure(){return this.__sceneStructure}get currentSceneBounds(){return this.__currentSceneBounds}recalculateSceneBounds(){this.currentSceneBounds.setFromPoints([new se]),this.__sceneStructure.isNotEmpty()&&this.__sceneStructure.rootEntity.traverse(e=>{e instanceof ot&&e.userData.isProxyMesh&&this.currentSceneBounds.expandByObject(e)}),this._appWcRef.eventsManager.sceneBoundsChanged.fire()}}class Va extends DU{constructor(e){super(),this.epgType="ENTITY_ASSET",this.__autoGeneratedProxy=new li,this.__proxyEntity=new li,this.__renderEntity=new li,this.__activeFinish="",this.__hotspots=new li,this.__renderEntityBoundsBox=new vi,this.__renderEntityBoundsSize=new se,this.__animationMixer=null,this.__animations=[],this.__animationNames=[],this.name=e.name,this.__proxyEntity.name="PROXY",this.add(this.__proxyEntity),this.__renderEntity.name="RENDER",this.add(this.__renderEntity),this.__hotspots.name="HOTSPOTS",this.add(this.__hotspots),this.__asset=e}get asset(){return this.__asset}get isRoot(){return this.name.toLowerCase()==="root"}get proxy(){return this.__proxyEntity}get render(){return this.__renderEntity}get activeFinish(){return this.__activeFinish}get allAssetFinishes(){return this.__asset.finishes}get allFinishIds(){return this.__asset.allFinishIds}highlight(){this.__renderEntity.traverseVisible(e=>{const t=e;if(t.isMesh){const i=t.material;(i.emissive.r>0||i.emissive.g>0||i.emissive.b>0)&&(i.userData.epgData={orignalEmissive:i.emissive.clone()}),i.emissive.r=1,i.emissive.g=1,i.emissive.b=1}})}unhighlight(){this.__renderEntity.traverseVisible(e=>{const t=e;if(t.isMesh){const i=t.material,a=i?.userData?.epgData?.orignalEmissive;a?(i.emissive.r=a.r,i.emissive.g=a.g,i.emissive.b=a.b):(i.emissive.r=0,i.emissive.g=0,i.emissive.b=0)}})}addHotspot(e){e.entity.name=`HOTSPOT-${this.asset.name}-${crypto.randomUUID()}`,e.entity.userData.epgId=e.hotspotId,e.entity.position.set(e.config.position.x,e.config.position.y,e.config.position.z),this.__hotspots.add(e.entity)}removeHotspot(e){let t;this.__hotspots.traverse(i=>{i.userData.epgId===e&&(t=i)}),t&&(t.removeFromParent(),Et.dispose3(t))}async selectAssetFinish(e,t=this.__renderEntity){window.epigraph.logger.info({title:`Switching to asset finish: ${e}`});const i=new mC(!1),a=this.__asset.renderGltf;if(!a)return Promise.reject(i);const l=a.khrVariantsExtension,h=a.khrVariantsExtensionName;if(!l?.variants||h===void 0)return window.epigraph.logger.warn({title:"No Variants found in asset. Using default material."}),i.success=!0,Promise.resolve(i);const d=l.variants.findIndex(p=>p.name===e);return t.traverse(async p=>{if(!(p instanceof ot)||!p.isMesh||!p.userData.gltfExtensions)return;const g=p.userData.gltfExtensions[h];if(!g)return window.epigraph.logger.error({title:"No Variants found in asset. Using default material."}),Promise.reject(i);p.userData.originalMaterial||(p.userData.originalMaterial=p.material);const A=g.mappings.find(_=>_.variants.includes(d));if(A&&a.resource){const _=a.resource.parser;p.material=await _.getDependency("material",A.material),_.assignFinalMaterial(p)}else window.epigraph.logger.warn({title:`Variant not found. Missing Variant ID: ${e}`,details:{message:"Available Variants",variants:l.variants}}),p.material=p.userData.originalMaterial;i.success=!0}),this.__activeFinish=e,Promise.resolve(i)}findPossibleConnectionsForAsset(e){const t=[];return window.epigraph.logger.info({title:"Getting connections for asset in scene:",details:e}),this.__proxyEntity.traverse(i=>{if(!(i instanceof ur))return;const a=i;for(const l of e.proxyGltf?.plugs??[])l.connectionId===a.connectionId&&t.push(new UU({name:l.connectionId,receiver:a,plug:l}))}),t}getAnimationMixer(){return this.__animationMixer}getAllAnimations(){return this.__animations}getAllAnimationNames(){return this.__animationNames}async initialize(){this.__asset.autoGenerateProxyEntity?(await this.__initializeRenderEntity(),await this.__initializeProxyEntity()):(await this.__initializeProxyEntity(),await this.__initializeRenderEntity())}async __initializeRenderEntity(){const e=this.__asset?.renderGltf?.resource?.scene?.clone(!0);if(!e)return Promise.reject();this.__renderEntity.add(e),this.__renderEntityBoundsBox.setFromObject(e,!0),this.__renderEntityBoundsBox.getSize(this.__renderEntityBoundsSize);const t=new se;if(this.__renderEntityBoundsBox.getCenter(t),!this.__asset.proxyGltf){window.epigraph.logger.warn({title:"Attempted to place render geo at the grid for AssetEntity...",details:this});const i=new li;i.name="rendergeopivot";const a=new Wn(.01,.01,.01),l=new wi({color:65280,depthTest:!1}),h=new ot(a,l);i.add(h),this.__renderEntity.add(i),i.position.set(t.x,this.__renderEntityBoundsBox.min.y,t.z),i.attach(e),i.position.set(0,0,0),this.__renderEntity.attach(e),i.removeFromParent(),Et.dispose3(i)}this.__updateAnimations()}async __initializeProxyEntity(){let e=this.__asset.proxyGltf.resource?.scene.clone();if((!e||this.__asset.autoGenerateProxyEntity)&&(this.__autoGenerateProxyScene(),e=this.__autoGeneratedProxy),!e)return window.epigraph.logger.error({title:"Failed to load OR auto generate proxy asset",details:this.__asset,contextOverride:"ASSET ENTITY"}),Promise.reject();this.__proxyEntity.add(e),this.__proxyEntity.traverse(t=>{t instanceof ot&&(t.userData.isProxyMesh=!0,t.visible=!1)})}__autoGenerateProxyScene(){window.epigraph.logger.info({title:"Attempting to auto generate proxy for asset...",details:this.__asset,contextOverride:"ASSET ENTITY"});const e=new Wn,t=new wi({color:65280,opacity:.5,transparent:!0}),i=new ot(e,t);i.name="AutoGeneratedProxyMesh",i.scale.set(this.__renderEntityBoundsSize.x,this.__renderEntityBoundsSize.y,this.__renderEntityBoundsSize.z);const a=new se;this.__renderEntityBoundsBox.getCenter(a);const l=new li;l.name="proxygeopivot";const h=new zf(.01,10,10),d=new wi({color:255,depthTest:!1}),p=new ot(h,d);l.add(p),this.__proxyEntity.add(l),l.translateY(-this.__renderEntityBoundsSize.y*.5),l.attach(i),l.position.set(0,0,0),this.__proxyEntity.add(i),l.removeFromParent(),Et.dispose3(l),this.__autoGeneratedProxy.add(i)}__updateAnimations(){if(this.__animationMixer=null,this.__animations=[],this.__renderEntity.animations&&this.__asset.renderGltf.resource&&this.__asset.renderGltf.resource.animations.length>0){this.__animationMixer=new ZS(this.__renderEntity.children[0]);for(const e of this.__asset.renderGltf.resource.animations)this.__animations.push(this.__animationMixer.clipAction(e)),this.__animationNames.push(e.name)}}}function wC(o,e,t,i){const a=Object.entries(o);class l extends Ni{static key=Is.generateUUID();constructor(d){super({uniforms:a.reduce((p,[g,A])=>{const _=Y0.clone({[g]:{value:A}});return{...p,..._}},{}),vertexShader:e,fragmentShader:t});for(const[p]of a)Object.defineProperty(this,p,{get:()=>this.uniforms[p].value,set:g=>this.uniforms[p].value=g});Object.assign(this,d)}}return l}const GU=wC({},"void main() { }","void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); discard; }");function HU(o){return o.isLight}function VU(o){return!!o.geometry}const QU=wC({color:new je(0),blend:2,alphaTest:.75,opacity:0,map:null},`varying vec2 vUv;
4168
+ `}};bC([ue({type:Boolean,attribute:"enabled"})],C_.prototype,"enabled");bC([ue({attribute:!1})],C_.prototype,"appWcRef");let Yf=C_;class UU{constructor({id:e,name:t,receiver:i,plug:a}){this.__name=t,this.__plug=a,this.__receiver=i,e?this.__id=e:this.__id=`${this.__receiver.uuid}-${this.__plug.uuid}`}get id(){return this.__id}get name(){return this.__name}get plug(){return this.__plug}isPrimary(){return this.__plug?.isPrimary}get receiver(){return this.__receiver}connect(){this.__receiver.connect(this),this.__plug.connect(this)}disconnect(){this.__plug&&this.__plug.disconnect(),this.__receiver&&this.__receiver.disconnect()}}class FU{constructor({id:e,receiver:t,plug:i}){this.__id=e,this.__plug=i,this.__receiver=t}get id(){return this.__id}get plug(){return this.__plug}set plug(e){this.__plug=e}get receiver(){return this.__receiver}set receiver(e){this.__receiver=e}disconnect(){this.__receiver.disconnect(),this.__plug.disconnect()}}class $U extends li{constructor(e){super(),this.name="ENTITIES",this._loggerContext="SCENE STRUCTURE",this.__appWcRef=e,this.__eventsManager=this.__appWcRef.eventsManager}async setupRootEntity(e,t){const i=await new yC({id:0,name:"Root",proxyGeo:e??"https://asset.myepigraph.com/configurator-assets/epigraph-solution-assets/staging-assets/pipeline-assets/3d-assets/proxies/root-proxy.glb",autoGenerateProxyEntity:!1,renderGeo:t??"https://asset.myepigraph.com/configurator-assets/epigraph-solution-assets/staging-assets/pipeline-assets/3d-assets/render/root-render.glb",finishes:{},hotspots:[]},this.__appWcRef);await i.load().catch(()=>Promise.reject(!1));const a=new Va(i);await a.initialize(),this.add(a),this.__rootEntity=a}get rootEntity(){return this.__rootEntity}isEmpty(){return this.__rootEntity===void 0||this.__rootEntity.children.length===0}isNotEmpty(){return!this.isEmpty()}addEntity(e){this.__rootEntity.add(e),this.__eventsManager.structureNodeAddedEvent.fire({node:e})}getFirstEntity(){return this.isEmpty()?null:this.getSceneEntities()[0]}getEntityForAssetId(e){const t=this.getSceneEntities();let i;for(const a of t)if(a.asset.id===e){i=a;break}return i}getSceneEntities(e=!1){const t=[];return this.__rootEntity.traverse(i=>{!e&&i.uuid===this.__rootEntity.uuid||i instanceof Va&&t.push(i)}),t}getPossibleConnectionsForAssetInScene(e){const t=[];window.epigraph.logger.info({title:"Getting connections for asset in scene:",details:e,contextOverride:this._loggerContext});for(const i of this.getSceneEntities(!0)){const a=i.findPossibleConnectionsForAsset(e);a.length>0&&t.push(...a)}return window.epigraph.logger.table({title:"Possible Connections",details:t}),t}getAllConnectionsInScene(){const e=new Map;return this.traverse(t=>{if(t instanceof ur||t instanceof Jr){if(t.connectionId===""||e.has(t.connectionId))return;let a=null,l=null;if(t instanceof ur?(a=t,l=t.plug):t instanceof Jr&&(a=t.receiver,l=t),a!==null&&l!==null){const h=new FU({id:t.connectionId,receiver:a,plug:l});e.set(t.connectionId,h)}}}),e}}class zU extends vC{constructor(e){super({appWcRef:e}),this._loggerContext="SCENE MANAGER",this.__currentSceneBounds=new vi,this.__sceneStructure=new $U(this._appWcRef)}get sceneStructure(){return this.__sceneStructure}get currentSceneBounds(){return this.__currentSceneBounds}recalculateSceneBounds(){this.currentSceneBounds.setFromPoints([new se]),this.__sceneStructure.isNotEmpty()&&this.__sceneStructure.rootEntity.traverse(e=>{e instanceof ot&&e.userData.isProxyMesh&&this.currentSceneBounds.expandByObject(e)}),this._appWcRef.eventsManager.sceneBoundsChanged.fire()}}class Va extends DU{constructor(e){super(),this.epgType="ENTITY_ASSET",this.__autoGeneratedProxy=new li,this.__proxyEntity=new li,this.__renderEntity=new li,this.__activeFinish="",this.__hotspots=new li,this.__renderEntityBoundsBox=new vi,this.__renderEntityBoundsSize=new se,this.__animationMixer=null,this.__animations=[],this.__animationNames=[],this.name=e.name,this.__proxyEntity.name="PROXY",this.add(this.__proxyEntity),this.__renderEntity.name="RENDER",this.add(this.__renderEntity),this.__hotspots.name="HOTSPOTS",this.add(this.__hotspots),this.__asset=e}get asset(){return this.__asset}get isRoot(){return this.name.toLowerCase()==="root"}get proxy(){return this.__proxyEntity}get render(){return this.__renderEntity}get activeFinish(){return this.__activeFinish}get allAssetFinishes(){return this.__asset.finishes}get allFinishIds(){return this.__asset.allFinishIds}highlight(){this.__renderEntity.traverseVisible(e=>{const t=e;if(t.isMesh){const i=t.material;(i.emissive.r>0||i.emissive.g>0||i.emissive.b>0)&&(i.userData.epgData={orignalEmissive:i.emissive.clone()}),i.emissive.r=1,i.emissive.g=1,i.emissive.b=1}})}unhighlight(){this.__renderEntity.traverseVisible(e=>{const t=e;if(t.isMesh){const i=t.material,a=i?.userData?.epgData?.orignalEmissive;a?(i.emissive.r=a.r,i.emissive.g=a.g,i.emissive.b=a.b):(i.emissive.r=0,i.emissive.g=0,i.emissive.b=0)}})}addHotspot(e){e.entity.name=`HOTSPOT-${this.asset.name}-${crypto.randomUUID()}`,e.entity.userData.epgId=e.hotspotId,e.entity.position.set(e.config.position.x,e.config.position.y,e.config.position.z),this.__hotspots.add(e.entity)}removeHotspot(e){let t;this.__hotspots.traverse(i=>{i.userData.epgId===e&&(t=i)}),t&&(t.removeFromParent(),Et.dispose3(t))}async selectAssetFinish(e,t=this.__renderEntity){window.epigraph.logger.info({title:`Switching to asset finish: ${e}`});const i=new mC(!1),a=this.__asset.renderGltf;if(!a)return Promise.reject(i);const l=a.khrVariantsExtension,h=a.khrVariantsExtensionName;if(!l?.variants||h===void 0)return window.epigraph.logger.warn({title:"No Variants found in asset. Using default material."}),i.success=!0,Promise.resolve(i);const d=l.variants.findIndex(p=>p.name===e);return t.traverse(async p=>{if(!(p instanceof ot)||!p.isMesh||!p.userData.gltfExtensions)return;const g=p.userData.gltfExtensions[h];if(!g)return window.epigraph.logger.error({title:"No Variants found in asset. Using default material."}),Promise.reject(i);p.userData.originalMaterial||(p.userData.originalMaterial=p.material);const A=g.mappings.find(_=>_.variants.includes(d));if(A&&a.resource){const _=a.resource.parser;p.material=await _.getDependency("material",A.material),_.assignFinalMaterial(p)}else window.epigraph.logger.warn({title:`Variant not found. Missing Variant ID: ${e}`,details:{message:"Available Variants",variants:l.variants}}),p.material=p.userData.originalMaterial;i.success=!0}),this.__activeFinish=e,Promise.resolve(i)}findPossibleConnectionsForAsset(e){const t=[];return window.epigraph.logger.info({title:"Getting connections for asset in scene:",details:e}),this.__proxyEntity.traverse(i=>{if(!(i instanceof ur))return;const a=i,l=e.proxyGltf?.plugs??[];for(const h of l)h.connectionId===a.connectionId&&t.push(new UU({name:h.connectionId,receiver:a,plug:h}))}),t}getAnimationMixer(){return this.__animationMixer}getAllAnimations(){return this.__animations}getAllAnimationNames(){return this.__animationNames}async initialize(){this.__asset.autoGenerateProxyEntity?(await this.__initializeRenderEntity(),await this.__initializeProxyEntity()):(await this.__initializeProxyEntity(),await this.__initializeRenderEntity())}async __initializeRenderEntity(){const e=this.__asset?.renderGltf?.resource?.scene?.clone(!0);if(!e)return Promise.reject();this.__renderEntity.add(e),this.__renderEntityBoundsBox.setFromObject(e,!0),this.__renderEntityBoundsBox.getSize(this.__renderEntityBoundsSize);const t=new se;if(this.__renderEntityBoundsBox.getCenter(t),!this.__asset.proxyGltf){window.epigraph.logger.warn({title:"Attempted to place render geo at the grid for AssetEntity...",details:this});const i=new li;i.name="rendergeopivot";const a=new Wn(.01,.01,.01),l=new wi({color:65280,depthTest:!1}),h=new ot(a,l);i.add(h),this.__renderEntity.add(i),i.position.set(t.x,this.__renderEntityBoundsBox.min.y,t.z),i.attach(e),i.position.set(0,0,0),this.__renderEntity.attach(e),i.removeFromParent(),Et.dispose3(i)}this.__updateAnimations()}async __initializeProxyEntity(){let e=this.__asset.proxyGltf.resource?.scene.clone();if((!e||this.__asset.autoGenerateProxyEntity)&&(this.__autoGenerateProxyScene(),e=this.__autoGeneratedProxy),!e)return window.epigraph.logger.error({title:"Failed to load OR auto generate proxy asset",details:this.__asset,contextOverride:"ASSET ENTITY"}),Promise.reject();this.__proxyEntity.add(e),this.__proxyEntity.traverse(t=>{t instanceof ot&&(t.userData.isProxyMesh=!0,t.visible=!1)})}__autoGenerateProxyScene(){window.epigraph.logger.info({title:"Attempting to auto generate proxy for asset...",details:this.__asset,contextOverride:"ASSET ENTITY"});const e=new Wn,t=new wi({color:65280,opacity:.5,transparent:!0}),i=new ot(e,t);i.name="AutoGeneratedProxyMesh",i.scale.set(this.__renderEntityBoundsSize.x,this.__renderEntityBoundsSize.y,this.__renderEntityBoundsSize.z);const a=new se;this.__renderEntityBoundsBox.getCenter(a);const l=new li;l.name="proxygeopivot";const h=new zf(.01,10,10),d=new wi({color:255,depthTest:!1}),p=new ot(h,d);l.add(p),this.__proxyEntity.add(l),l.translateY(-this.__renderEntityBoundsSize.y*.5),l.attach(i),l.position.set(0,0,0),this.__proxyEntity.add(i),l.removeFromParent(),Et.dispose3(l),this.__autoGeneratedProxy.add(i)}__updateAnimations(){if(this.__animationMixer=null,this.__animations=[],this.__renderEntity.animations&&this.__asset.renderGltf.resource&&this.__asset.renderGltf.resource.animations.length>0){this.__animationMixer=new ZS(this.__renderEntity.children[0]);for(const e of this.__asset.renderGltf.resource.animations)this.__animations.push(this.__animationMixer.clipAction(e)),this.__animationNames.push(e.name)}}}function wC(o,e,t,i){const a=Object.entries(o);class l extends Ni{static key=Is.generateUUID();constructor(d){super({uniforms:a.reduce((p,[g,A])=>{const _=Y0.clone({[g]:{value:A}});return{...p,..._}},{}),vertexShader:e,fragmentShader:t});for(const[p]of a)Object.defineProperty(this,p,{get:()=>this.uniforms[p].value,set:g=>this.uniforms[p].value=g});Object.assign(this,d)}}return l}const GU=wC({},"void main() { }","void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); discard; }");function HU(o){return o.isLight}function VU(o){return!!o.geometry}const QU=wC({color:new je(0),blend:2,alphaTest:.75,opacity:0,map:null},`varying vec2 vUv;
4169
4169
  void main() {
4170
4170
  gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
4171
4171
  vUv = uv;
@@ -4343,7 +4343,7 @@ vec3 texelOld = texture2D(previousShadowMap, vUv).rgb;
4343
4343
  style="left: ${this.__currentDimensionsIndicatorState.height.midPoint.screenPos.x}px; top: ${this.__currentDimensionsIndicatorState.height.midPoint.screenPos.y}px;"
4344
4344
  ></epg-dimension-label>
4345
4345
  </div>
4346
- `:$e}};jl([ue({type:Boolean,attribute:"enabled"})],so.prototype,"enabled");jl([ue({type:String,attribute:"dimensions-unit"})],so.prototype,"dimensionsUnit");jl([ue({type:String,attribute:"dimensions-unit-symbol"})],so.prototype,"dimensionsUnitSymbol");jl([Hi()],so.prototype,"__dimensionsInDisplayUnit");jl([Hi()],so.prototype,"__currentDimensionsState");jl([Hi()],so.prototype,"__currentDimensionsIndicatorState");let gF=so;var Wi=(o=>(o.expanded="expanded",o.collapsed="collapsed",o))(Wi||{});class Uv{constructor({config:e,appWcRef:t,hotspotManagerRef:i}){this.__cameraDirection=new se,this.details="",this.__localPosition=new se,this.__worldPosition=new se,this.__normals=new se,this.screenPosition=new He,this.__camera={position:new se,target:new se,focalLength:35},this.entity=new Lt,this.visited=!1,this.__config=e,this.appWcRef=t,this.hotspotsManager=i,this.updateHotspotConfig(e)}static{this.styles=ct`
4346
+ `:$e}};jl([ue({type:Boolean,attribute:"enabled"})],so.prototype,"enabled");jl([ue({type:String,attribute:"dimensions-unit"})],so.prototype,"dimensionsUnit");jl([ue({type:String,attribute:"dimensions-unit-symbol"})],so.prototype,"dimensionsUnitSymbol");jl([Hi()],so.prototype,"__dimensionsInDisplayUnit");jl([Hi()],so.prototype,"__currentDimensionsState");jl([Hi()],so.prototype,"__currentDimensionsIndicatorState");let gF=so;var Wi=(o=>(o.expanded="expanded",o.collapsed="collapsed",o))(Wi||{});class Uv{constructor({config:e,appWcRef:t,hotspotManagerRef:i}){this.__cameraDirection=new se,this.__localPosition=new se,this.__worldPosition=new se,this.__normals=new se,this.__screenPosition=new He,this.__camera={position:new se,target:new se,focalLength:35},this.entity=new Lt,this.visited=!1,this.__config=e,this.__appWcRef=t,this.__hotspotsManager=i,this.updateConfig(e)}static{this.styles=ct`
4347
4347
  .hotspot-indicator {
4348
4348
  position: absolute;
4349
4349
  transform: translate(-50%, -50%);
@@ -4363,10 +4363,10 @@ vec3 texelOld = texture2D(previousShadowMap, vUv).rgb;
4363
4363
  .hotspot-indicator.occluded {
4364
4364
  opacity: 0.3;
4365
4365
  }
4366
- `}get hidden(){const e=this.appWcRef.sceneManager.sceneStructure.getEntityForAssetId(this.assetId);if(!e)return!1;const t=e.activeFinish;return!this.finishes.includes(t)}get config(){return this.__config}get assetId(){return this.__config.assetId}get name(){return this.__config.name}get hotspotId(){return this.__config.hotspotId}get position(){return this.entity.getWorldPosition(this.__worldPosition),this.__worldPosition}get normals(){return this.__normals}get camera(){return this.__camera}get header(){return this.__config.header}get carousel(){return this.__config.carousel}get finishes(){return this.__config.finishes}get animation(){return this.__config.animation}get desktopPlacement(){return this.__config.desktopPlacement}__updateHotspotPosition(){this.__localPosition.set(this.__config.position.x,this.__config.position.y,this.__config.position.z),this.entity.position.set(this.__localPosition.x,this.__localPosition.y,this.__localPosition.z)}__updateHotspotNormals(){if(this.__config.normals!==null){const{x:t,y:i,z:a}=this.__config.normals;this.__normals.set(t,i,a);return}const e=new se;this.appWcRef.sceneManager.currentSceneBounds.getCenter(e),this.__normals.subVectors(this.position,e)}__updateCamera(){this.__camera.position.set(this.__config.camera.position.x,this.__config.camera.position.y,this.__config.camera.position.z),this.__camera.target.set(this.__config.camera.target.x,this.__config.camera.target.y,this.__config.camera.target.z),this.__camera.focalLength=this.__config.camera.focalLength}updateHotspotConfig(e){this.__config=e,this.details=this.__config.details,this.__updateHotspotPosition(),this.__updateHotspotNormals(),this.__updateCamera()}_onHotspotClick(){this.hotspotsManager.activeHotspot||(this.visited=!0,this.appWcRef.eventsManager.hotspotClickedEvent.fire({hotspot:this}))}__isFacingCamera(){return this.appWcRef.cameraManager.getCameras().main.getWorldDirection(this.__cameraDirection),this.__normals.angleTo(this.__cameraDirection)>Math.PI/2.2}renderAnnotationTemplate(e){const t=e!==void 0&&e===this.hotspotId;if(this.hotspotsManager.activeHotspot&&!t||this.hidden)return $e;this.screenPosition=this.appWcRef.getScreenPositionFromWorld(this.position);const i=e!==void 0&&e!==this.hotspotId;let a="top-left";return this.screenPosition.y>this.appWcRef.canvasSize.height*.12?a="top":a="bottom",this.screenPosition.x>this.appWcRef.canvasSize.width*.5?a+="-right":a+="-left",Ee`
4366
+ `}get config(){return this.__config}get assetId(){return this.__config.assetId}get name(){return this.__config.name}get hotspotId(){return this.__config.hotspotId}get position(){return this.entity.getWorldPosition(this.__worldPosition),this.__worldPosition}get normals(){return this.__normals}get camera(){return this.__camera}get header(){return this.__config.header}get details(){return this.__config.details}get carousel(){return this.__config.carousel}get finishes(){return this.__config.finishes}get animation(){return this.__config.animation}get desktopPlacement(){return this.__config.desktopPlacement}get hidden(){const e=this.__appWcRef.sceneManager.sceneStructure.getEntityForAssetId(this.assetId);if(!e)return!1;const t=e.activeFinish;return!this.finishes.includes(t)}__updateHotspotPosition(){this.__localPosition.set(this.__config.position.x,this.__config.position.y,this.__config.position.z),this.entity.position.set(this.__localPosition.x,this.__localPosition.y,this.__localPosition.z)}__updateHotspotNormals(){if(!this.__config.normals){const a=new se;this.__appWcRef.sceneManager.currentSceneBounds.getCenter(a),this.__normals.subVectors(this.position,a);return}const{x:e,y:t,z:i}=this.__config.normals;this.__normals.set(e,t,i)}__updateCamera(){this.__camera.position.set(this.__config.camera.position.x,this.__config.camera.position.y,this.__config.camera.position.z),this.__camera.target.set(this.__config.camera.target.x,this.__config.camera.target.y,this.__config.camera.target.z),this.__camera.focalLength=this.__config.camera.focalLength}updateConfig(e){this.__config=e,this.__updateHotspotPosition(),this.__updateHotspotNormals(),this.__updateCamera()}_onHotspotClick(){this.__hotspotsManager.activeHotspot||(this.visited=!0,this.__appWcRef.eventsManager.hotspotClickedEvent.fire({hotspot:this}))}__isFacingCamera(){return this.__appWcRef.cameraManager.getCameras().main.getWorldDirection(this.__cameraDirection),this.__normals.angleTo(this.__cameraDirection)>Math.PI/2.2}renderAnnotationTemplate(e){const t=e!==void 0&&e===this.hotspotId;if(this.__hotspotsManager.activeHotspot&&!t||this.hidden)return $e;this.__screenPosition=this.__appWcRef.getScreenPositionFromWorld(this.position);const i=e!==void 0&&e!==this.hotspotId;let a="top-left";return this.__screenPosition.y>this.__appWcRef.canvasSize.height*.12?a="top":a="bottom",this.__screenPosition.x>this.__appWcRef.canvasSize.width*.5?a+="-right":a+="-left",Ee`
4367
4367
  <epg-tool-hotspot
4368
4368
  class="hotspot-indicator ${i?"inactive":""} ${this.__isFacingCamera()?"":"occluded"}"
4369
- style="left: ${this.screenPosition.x}px; top: ${this.screenPosition.y}px"
4369
+ style="left: ${this.__screenPosition.x}px; top: ${this.__screenPosition.y}px"
4370
4370
  hotspot-id=${this.hotspotId}
4371
4371
  tooltip-label=${this.name}
4372
4372
  tooltip-placement=${a}
@@ -4379,8 +4379,8 @@ vec3 texelOld = texture2D(previousShadowMap, vUv).rgb;
4379
4379
  <epg-card
4380
4380
  class="hotspot-card"
4381
4381
  .data=${l}
4382
- .onNextHotspotButtonClick=${this.hotspotsManager.nextHotspot.bind(this.hotspotsManager)}
4383
- .onPrevHotspotButtonClick=${this.hotspotsManager.previousHotspot.bind(this.hotspotsManager)}
4382
+ .onNextHotspotButtonClick=${this.__hotspotsManager.nextHotspot.bind(this.__hotspotsManager)}
4383
+ .onPrevHotspotButtonClick=${this.__hotspotsManager.previousHotspot.bind(this.__hotspotsManager)}
4384
4384
  ?show-previous-button=${i}
4385
4385
  ?show-next-button=${a}
4386
4386
  ?is-first-hotspot=${e}
@@ -7059,7 +7059,7 @@ Arguments: [`+B+"]"}},s.fz.prototype={k(n){return"Unsupported operation: "+this.
7059
7059
  }
7060
7060
  }
7061
7061
  }
7062
- `]}updateActiveHotspotIndex(){this.activeHotspot&&(this.activeHotspotIndex=this.hotspotsOrder.indexOf(this.activeHotspot?.hotspotId))}static setupWebComponent(){window.customElements.get(Gd.webComponentName)||window.customElements.define(Gd.webComponentName,Gd)}firstUpdated(e){super.firstUpdated(e),this.__setupEventListeners()}updated(e){if(e.has("__cardsState")){const i=this.__currentCardsPerView,a=this.__cardsState===Wi.collapsed?1.2:1.03;if(Et.animateValue(i,a,500,l=>{this.__currentCardsPerView=l}),this?.cardsCarouselSwiperContainer?.swiper!==void 0){this.cardsCarouselSwiperContainer.swiper.allowTouchMove=this.__cardsState===Wi.collapsed;const l=this.cardsCarouselSwiperContainer.querySelectorAll("epg-card");for(const h of l)h.showPreviousButton=this.__cardsState===Wi.expanded&&!h.hasAttribute("is-first-hotspot"),h.showNextButton=this.__cardsState===Wi.expanded&&!h.hasAttribute("is-last-hotspot")}}e.get("activeHotspotIndex")>=0&&this.cardsCarouselSwiperContainer.swiper.slideTo(this.activeHotspotIndex,400)}addHotspot(e,t=!0){const i=new Uv({config:e,appWcRef:this.appWcRef,hotspotManagerRef:this});this.hotspots.set(i.hotspotId,i);const a=this.appWcRef.sceneManager.sceneStructure.getEntityForAssetId(e.assetId);a&&a.addHotspot(i),t&&this.updateHotspotsOrder(Array.from(this.hotspots.keys()))}updateHotspot(e,t){const i=this.hotspots.get(e);if(!i){window.epigraph.logger.error({title:`Invalid hotspot ID: ${e}`});return}i.updateHotspotConfig(t),this.__resolveHotspotCardContents()}removeHotspot(e,t=!0){this.hotspots.delete(e),t&&this.updateHotspotsOrder(Array.from(this.hotspots.keys()))}stepHotspots(e){const t=this.activeHotspotIndex;if(t===null)return;const i=this.hotspotsOrder.length;let a=t;e==="next"?(a=t+1,a>=i&&(a=0)):e==="prev"&&(a=t-1,a<0&&(a=i-1));const l=this.hotspotsOrder[a];this.setActiveHotspot({hotspotId:l})}nextHotspot(){return this.stepHotspots("next"),this.appWcRef.eventsManager.hotspotNextEvent.fire({hotspot:this.activeHotspot}),this.activeHotspot}previousHotspot(){return this.stepHotspots("prev"),this.appWcRef.eventsManager.hotspotPreviousEvent.fire({hotspot:this.activeHotspot}),this.activeHotspot}openHotspot({hotspotId:e,state:t,skipHotspotOpenEvent:i=!1}){this.appWcRef.playInteractionPrompt=!1,this.setActiveHotspot({hotspotId:e,state:t}),i||this.appWcRef.eventsManager.hotspotOpenEvent.fire({hotspot:this.activeHotspot});const a=new ir(!0,ir.PANEL_TYPE.HOTSPOT_PANEL,ir.TRIGGER_SOURCE.HOTSPOT,[]);this.appWcRef.epigraphAnalytics.sendEvent(a)}closeActiveHotspot(){const e=this.activeHotspot?.hotspotId;this.setActiveHotspot({hotspotId:null}),this.appWcRef.eventsManager.hotspotClosedEvent.fire({hotspotId:e});const t=new nr(!0,nr.PANEL_TYPE.HOTSPOT_PANEL,nr.TRIGGER_SOURCE.BUTTON,[]);this.appWcRef.epigraphAnalytics.sendEvent(t)}updateHotspotsOrder(e){this.hotspotsOrder=e}removeAllHotspots(){for(const e of this.hotspots.keys())this.removeHotspot(e)}setActiveHotspotByIndex(e){const t=this.hotspotsOrder[e];this.setActiveHotspot({hotspotId:t,state:this.__cardsState})}setActiveHotspot({hotspotId:e,state:t=this.__cardsState}){if(this.activeHotspot?.hotspotId===e)return;if(e===null){const a=!!this.activeHotspot;this.activeHotspot=void 0,this.updateActiveHotspotIndex(),a&&this.appWcRef.cameraManager.resetCurrentCameraTransformsToLastSavedState();return}this.enabled===!1&&(this.enabled=!0);const i=!this.activeHotspot;if(this.activeHotspot=this.hotspots.get(e),this.updateActiveHotspotIndex(),this.setActiveHotspotState(t),this.__resolveHotspotCardContents(),this.appWcRef.eventsManager.cameraMoveToTransform.fire({cameraTransforms:this.activeHotspot?.camera,saveFirst:i}),this.appWcRef.isPortraitOrientation){const a=this.appWcRef.cameraManager.mainCameraControls,l=new se;a.getTarget(l,!0);const h=new se;a.getPosition(h,!0),a.setLookAt(h.x-l.x,h.y,h.z-l.z,0,l.y,0,!0),a.setFocalOffset(0,.1,0,!0)}window.addEventListener("keydown",a=>{a.key==="Escape"&&this.closeActiveHotspot()},{once:!0})}expandCards(){this.__cardsState=Wi.expanded}collapseCards(){this.__cardsState=Wi.collapsed}setActiveHotspotState(e=Wi.collapsed){if(this.activeHotspot)switch(this.appWcRef.clientHeight<420&&(e=Wi.expanded),e){case Wi.collapsed:this.collapseCards();break;case Wi.expanded:this.expandCards();break}}__resolveHotspotCardContents(){this.__allCards=[];let e=0;const t=this.hotspots.size-1,i=this.hotspots.size>1;for(const a of this.hotspots.values()){const l=e===0,h=e===t,d=Ee`
7062
+ `]}updateActiveHotspotIndex(){this.activeHotspot&&(this.activeHotspotIndex=this.hotspotsOrder.indexOf(this.activeHotspot?.hotspotId))}static setupWebComponent(){window.customElements.get(Gd.webComponentName)||window.customElements.define(Gd.webComponentName,Gd)}firstUpdated(e){super.firstUpdated(e),this.__setupEventListeners()}updated(e){if(e.has("__cardsState")){const i=this.__currentCardsPerView,a=this.__cardsState===Wi.collapsed?1.2:1.03;if(Et.animateValue(i,a,500,l=>{this.__currentCardsPerView=l}),this?.cardsCarouselSwiperContainer?.swiper!==void 0){this.cardsCarouselSwiperContainer.swiper.allowTouchMove=this.__cardsState===Wi.collapsed;const l=this.cardsCarouselSwiperContainer.querySelectorAll("epg-card");for(const h of l)h.showPreviousButton=this.__cardsState===Wi.expanded&&!h.hasAttribute("is-first-hotspot"),h.showNextButton=this.__cardsState===Wi.expanded&&!h.hasAttribute("is-last-hotspot")}}e.get("activeHotspotIndex")>=0&&this.cardsCarouselSwiperContainer.swiper.slideTo(this.activeHotspotIndex,400)}addHotspot(e,t=!0){const i=new Uv({config:e,appWcRef:this.appWcRef,hotspotManagerRef:this});this.hotspots.set(i.hotspotId,i);const a=this.appWcRef.sceneManager.sceneStructure.getEntityForAssetId(e.assetId);a&&a.addHotspot(i),t&&this.updateHotspotsOrder(Array.from(this.hotspots.keys()))}updateHotspot(e,t){const i=this.hotspots.get(e);if(!i){window.epigraph.logger.error({title:`Invalid hotspot ID: ${e}`});return}i.updateConfig(t),this.__resolveHotspotCardContents()}removeHotspot(e,t=!0){this.hotspots.delete(e),t&&this.updateHotspotsOrder(Array.from(this.hotspots.keys()))}stepHotspots(e){const t=this.activeHotspotIndex;if(t===null)return;const i=this.hotspotsOrder.length;let a=t;e==="next"?(a=t+1,a>=i&&(a=0)):e==="prev"&&(a=t-1,a<0&&(a=i-1));const l=this.hotspotsOrder[a];this.setActiveHotspot({hotspotId:l})}nextHotspot(){return this.stepHotspots("next"),this.appWcRef.eventsManager.hotspotNextEvent.fire({hotspot:this.activeHotspot}),this.activeHotspot}previousHotspot(){return this.stepHotspots("prev"),this.appWcRef.eventsManager.hotspotPreviousEvent.fire({hotspot:this.activeHotspot}),this.activeHotspot}openHotspot({hotspotId:e,state:t,skipHotspotOpenEvent:i=!1}){this.appWcRef.playInteractionPrompt=!1,this.setActiveHotspot({hotspotId:e,state:t}),i||this.appWcRef.eventsManager.hotspotOpenEvent.fire({hotspot:this.activeHotspot});const a=new ir(!0,ir.PANEL_TYPE.HOTSPOT_PANEL,ir.TRIGGER_SOURCE.HOTSPOT,[]);this.appWcRef.epigraphAnalytics.sendEvent(a)}closeActiveHotspot(){const e=this.activeHotspot?.hotspotId;this.setActiveHotspot({hotspotId:null}),this.appWcRef.eventsManager.hotspotClosedEvent.fire({hotspotId:e});const t=new nr(!0,nr.PANEL_TYPE.HOTSPOT_PANEL,nr.TRIGGER_SOURCE.BUTTON,[]);this.appWcRef.epigraphAnalytics.sendEvent(t)}updateHotspotsOrder(e){this.hotspotsOrder=e}removeAllHotspots(){for(const e of this.hotspots.keys())this.removeHotspot(e)}setActiveHotspotByIndex(e){const t=this.hotspotsOrder[e];this.setActiveHotspot({hotspotId:t,state:this.__cardsState})}setActiveHotspot({hotspotId:e,state:t=this.__cardsState}){if(this.activeHotspot?.hotspotId===e)return;if(e===null){const a=!!this.activeHotspot;this.activeHotspot=void 0,this.updateActiveHotspotIndex(),a&&this.appWcRef.cameraManager.resetCurrentCameraTransformsToLastSavedState();return}this.enabled===!1&&(this.enabled=!0);const i=!this.activeHotspot;if(this.activeHotspot=this.hotspots.get(e),this.updateActiveHotspotIndex(),this.setActiveHotspotState(t),this.__resolveHotspotCardContents(),this.appWcRef.eventsManager.cameraMoveToTransform.fire({cameraTransforms:this.activeHotspot?.camera,saveFirst:i}),this.appWcRef.isPortraitOrientation){const a=this.appWcRef.cameraManager.mainCameraControls,l=new se;a.getTarget(l,!0);const h=new se;a.getPosition(h,!0),a.setLookAt(h.x-l.x,h.y,h.z-l.z,0,l.y,0,!0),a.setFocalOffset(0,.1,0,!0)}window.addEventListener("keydown",a=>{a.key==="Escape"&&this.closeActiveHotspot()},{once:!0})}expandCards(){this.__cardsState=Wi.expanded}collapseCards(){this.__cardsState=Wi.collapsed}setActiveHotspotState(e=Wi.collapsed){if(this.activeHotspot)switch(this.appWcRef.clientHeight<420&&(e=Wi.expanded),e){case Wi.collapsed:this.collapseCards();break;case Wi.expanded:this.expandCards();break}}__resolveHotspotCardContents(){this.__allCards=[];let e=0;const t=this.hotspots.size-1,i=this.hotspots.size>1;for(const a of this.hotspots.values()){const l=e===0,h=e===t,d=Ee`
7063
7063
  <swiper-slide part="swiper-slide">
7064
7064
  <style>
7065
7065
  .expand-button {
@@ -8351,7 +8351,7 @@ void main() {
8351
8351
  `:Ee`
8352
8352
  ${super.render()}
8353
8353
  ${this.__renderQrModal()}
8354
- `}};co([Ut("#modelViewer")],ia.prototype,"modelViewerElem");co([Ut("#arModal")],ia.prototype,"arModalElem");co([Ut("#qrModal")],ia.prototype,"qrModalElem");co([ue({attribute:!1})],ia.prototype,"appWcRef");co([ue({type:String,attribute:"glb-src"})],ia.prototype,"glbSrc");co([ue({type:String,attribute:"usdz-src"})],ia.prototype,"usdzSrc");co([ue({type:Boolean,attribute:"debug"})],ia.prototype,"debug");let SH=ia;class wt{constructor(e,t,i=""){this.__name="app:generic:event",this.__eventsManager=e,this.__name=t,this.__detail=i}get name(){return this.__name}get detail(){return this.__detail}fire(e){const t=new CustomEvent(this.__name,{detail:e??this.__detail});this.__eventsManager.eventHubRef.dispatchEvent(t)}}class CH extends EventTarget{constructor(e){super(),this._loggerContext="EVENTS MANAGER",window.epigraph.logger.info({title:"Initializing...",contextOverride:this._loggerContext}),e?this.eventHubRef=e:this.eventHubRef=this,this.assetLoadProgress=new wt(this,"assetLoadProgress",""),this.experienceUpdatedEvent=new wt(this,"experienceUpdated",""),this.appReadyEvent=new wt(this,"appReady",""),this.appFailedEvent=new wt(this,"appFailed",""),this.productClassChangedEvent=new wt(this,"productClassChanged",""),this.productChangedEvent=new wt(this,"productChanged",""),this.variantChangedEvent=new wt(this,"variantChanged",""),this.structureNodeAddedEvent=new wt(this,"structureNodeAdded",""),this.structureNodeRemovedEvent=new wt(this,"structureNodeRemoved",""),this.structureChangedEvent=new wt(this,"structureChanged",""),this.showNodeLoadingIcon=new wt(this,"nodeLoadingShow",""),this.hideNodeLoadingIcon=new wt(this,"nodeLoadingHide",""),this.cameraFitEvent=new wt(this,"cameraFit",""),this.hotspotsUpdatedEvent=new wt(this,"hotspotsUpdated",""),this.hotspotsVisibilityChanged=new wt(this,"hotspotsVisibilityChanged",""),this.hotspotClickedEvent=new wt(this,"hotspotClicked",""),this.hotspotOpenEvent=new wt(this,"hotspotOpen",""),this.hotspotClosedEvent=new wt(this,"hotspotClosed",""),this.hotspotNextEvent=new wt(this,"hotspotNext",""),this.hotspotPreviousEvent=new wt(this,"hotspotPrevious",""),this.sceneBoundsChanged=new wt(this,"sceneBoundsChanged",""),this.dimensionsPositionChanged=new wt(this,"dimensionsPositionChanged",""),this.dimensionsValueChanged=new wt(this,"dimensionsValueChanged",""),this.dimensionsVisibilityChanged=new wt(this,"dimensionsVisibilityChanged",""),this.arModelReadyEvent=new wt(this,"arGlbReady",""),this.cartChangedEvent=new wt(this,"cartChanged",""),this.sceneRestartedEvent=new wt(this,"sceneRestarted",""),this.pickerFoundPosition=new wt(this,"pickerFoundPosition",""),this.frameUpdated=new wt(this,"frameUpdated",""),this.cameraControlsStart=new wt(this,"cameraControlsStart",""),this.inputStart=new wt(this,"inputStart",""),this.inputMove=new wt(this,"inputMove",""),this.inputEnd=new wt(this,"inputEnd",""),this.cameraMoveToTransform=new wt(this,"cameraMoveToTransform",""),this.debugChanged=new wt(this,"debugChanged","")}}class TH{constructor(e,t){this.__assets=new Map,this.__appWcRef=t,this.__config=e}async initialize(){for(const e in this.__config){const t=new yC(this.__config[e],this.__appWcRef);await t.load(),this.__assets.set(e,t)}}async loadAllProxies(){for(const e of this.__assets.values())await e.loadProxyGltf()}async loadAllRenderAssets(){for(const e of this.__assets.values())await e.loadRenderGltf(!0)}getAssetByName(e){return this.__assets.get(e)}getFirstAsset(){return this.__assets.values().next().value}}class IH{constructor(e){this.__assetClass=e.assetClass,this.__asset=e.asset,this.__assetId=e.assetId,this.__finish=e.finish,this.__productOptionValue=e.productOptionValue}get assetClass(){return this.__assetClass}get asset(){return this.__asset}get assetId(){return this.__assetId}get finish(){return this.__finish}get productOptionValue(){return this.__productOptionValue}}class MH{constructor(e,t){this.__productParts=[],this.__id=e.id,this.__name=e.name,this.__productId=t,this.__sku=e.sku,this.__upc=e.upc,this.__asin=e.asin,this.__shopifyVariantId=e.shopifyVariantId,this.__uuid=e.uuid,this.parseProductParts(e.productParts)}get id(){return this.__id}get name(){return this.__name}get productId(){return this.__productId}get sku(){return this.__sku}get upc(){return this.__upc}get asin(){return this.__asin}get shopifyVariantId(){return this.__shopifyVariantId}get uuid(){return this.__uuid}get productParts(){return this.__productParts}parseProductParts(e){for(const t of e){const i=new IH(t);this.__productParts.push(i)}}}class RH{constructor(e,t){this.__productVariants=new Map,this.__productVariantNames=new Map,this.__productVariantSkus=new Map,this.__productVariantUpcs=new Map,this.__productVariantAsins=new Map,this.__productVariantShopifyVariantIds=new Map,this.__productVariantUuids=new Map,this.__productId=t;for(const i of e){const a=new MH(i,this.__productId);a&&this.addProductVariant(a)}}addProductVariant(e){this.__productVariants.set(e.id,e),this.__productVariantNames.set(e.name,e),e.sku&&this.__productVariantSkus.set(e.sku,e),e.upc&&this.__productVariantUpcs.set(e.upc,e),e.asin&&this.__productVariantAsins.set(e.asin,e),e.shopifyVariantId&&this.__productVariantShopifyVariantIds.set(e.shopifyVariantId,e),e.uuid&&this.__productVariantUuids.set(e.uuid,e)}removeProductVariant(e){e.sku&&this.__productVariantSkus.delete(e.sku),e.upc&&this.__productVariantUpcs.delete(e.upc),e.asin&&this.__productVariantAsins.delete(e.asin),e.shopifyVariantId&&this.__productVariantShopifyVariantIds.delete(e.shopifyVariantId),this.__productVariantNames.delete(e.name),this.__productVariants.delete(e.id)}getAllProductVariants(){return Array.from(this.__productVariants.values())}getAllProductVariantIds(){return Array.from(this.__productVariants.keys())}getAllProductVariantNames(){return Array.from(this.__productVariantNames.keys())}getProductVariantById(e){return this.__productVariants.get(e)}getProductVariantByName(e){return this.__productVariantNames.get(e)}getProductVariantBySku(e){return this.__productVariantSkus.get(e)}getProductVariantByUpc(e){return this.__productVariantUpcs.get(e)}getProductVariantByAsin(e){return this.__productVariantAsins.get(e)}getProductVariantByShopifyVariantId(e){return this.__productVariantShopifyVariantIds.get(e)}getProductVariantByUuid(e){return this.__productVariantUuids.get(e)}getProductVariantByIdentifierAndType(e,t){switch(t){case Ta.SKU:return this.getProductVariantBySku(e);case Ta.SHOPIFY_VARIANT_ID:return this.getProductVariantByShopifyVariantId(e);case Ta.ASIN:return this.getProductVariantByAsin(e);case Ta.UPC:return this.getProductVariantByUpc(e);case Ta.EXPERIENCE_ID:return;case Ta.PRODUCT_VARIANT_UUID:return this.getProductVariantByUuid(e);default:return}}}class FT{constructor(){this.productSettings={hotspots:{enabled:!1},dimensions:{enabled:!1},postEffect:{ao:!1},camera:{clearColor:"#ffffff",focalLength:35,canPan:!0,canZoom:!0,minDistance:2,maxDistance:8,minPolarAngle:0,maxPolarAngle:1.5,minAzimuthAngle:-1/0,maxAzimuthAngle:1/0},renderQuality:{antiAlias:!0},screenshots:{enabled:!1},shadows:{shadowType:EC.NONE,accumulativeShadows:{shadowMaterial:{opacity:.8,alphaTest:.75,color:"#000000",blend:1},shadowParams:{frames:30,scale:10,radius:.8,ambient:.5},light:{direction:{x:3,y:5,z:3}}},contactShadows:{planeLength:3,planeWidth:3,cameraHeight:1,intensity:1,softness:1}}}}_deepCopyProductSettings(e){const t=this.productSettings;e.camera&&(t.camera=e.camera),e.dimensions&&(t.dimensions=e.dimensions),e.hotspots&&(t.hotspots=e.hotspots),e.postEffect&&(t.postEffect=e.postEffect),e.renderQuality&&(t.renderQuality=e.renderQuality),e.screenshots&&(t.screenshots=e.screenshots),e.shadows.shadowType&&(t.shadows.shadowType=e.shadows.shadowType),e.shadows.accumulativeShadows&&(t.shadows.accumulativeShadows=e.shadows.accumulativeShadows),e.shadows.contactShadows&&(e.shadows.contactShadows.cameraHeight&&(t.shadows.contactShadows.cameraHeight=e.shadows.contactShadows.cameraHeight),e.shadows.contactShadows.intensity&&(t.shadows.contactShadows.intensity=e.shadows.contactShadows.intensity),e.shadows.contactShadows.planeLength&&(t.shadows.contactShadows.planeLength=e.shadows.contactShadows.planeLength),e.shadows.contactShadows.planeWidth&&(t.shadows.contactShadows.planeWidth=e.shadows.contactShadows.planeWidth),e.shadows.contactShadows.softness&&(t.shadows.contactShadows.softness=e.shadows.contactShadows.softness))}}class BH extends FT{constructor({nexusApiResultPayload:e,appWcRef:t}){super(),this.__needsRootPlug=!1,window.epigraph.logger.info({title:"nexusApiPayload",details:e}),this._appWcRef=t,this._data=e,this._data.product_data.settings&&this._deepCopyProductSettings(this._data.product_data.settings);const i=this._data.product_data.assets;if(Object.values(i).length===1){const a=Object.values(i)[0];a?.proxyGeo?window.epigraph.logger.warn({title:"Single asset experience detected and a proxy was provided. Please ensure that the proxy provided has a root plug in it. Expand for the asset config used...",details:a,contextOverride:"ASSET COLLECTION"}):(a.proxyGeo="https://asset.myepigraph.com/configurator-assets/epigraph-solution-assets/staging-assets/pipeline-assets/3d-assets/proxies/null-proxy.glb",this.__needsRootPlug=!0,a.autoGenerateProxyEntity=!0)}}async __parseAssets(){return this.__assetCollection=new TH(this._data.product_data.assets,this._appWcRef),await this.__assetCollection.initialize(),this.__needsRootPlug&&this.__assetCollection.getFirstAsset()?.proxyGltf?.plugs.push(new Jr({name:"root@plug",isPrimary:!0,connectionId:"root",position:new se,rotation:new bn})),this.__assetCollection}getAssetCollection(){return this.__assetCollection}__parseProductVariants(){this.__productVariantCollection=new RH(this._data.product_data.product.productVariants,this._data.product_data.product.id)}get productVariantCollection(){return this.__productVariantCollection}async initialize(){await this.__parseAssets(),await this.__parseProductVariants()}getExperienceDataSettings(){return{}}}var wh=function(){var o=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(A){A.preventDefault(),i(++o%e.children.length)},!1);function t(A){return e.appendChild(A.dom),A}function i(A){for(var _=0;_<e.children.length;_++)e.children[_].style.display=_===A?"block":"none";o=A}var a=(performance||Date).now(),l=a,h=0,d=t(new wh.Panel("FPS","#0ff","#002")),p=t(new wh.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var g=t(new wh.Panel("MB","#f08","#201"));return i(0),{REVISION:16,dom:e,addPanel:t,showPanel:i,begin:function(){a=(performance||Date).now()},end:function(){h++;var A=(performance||Date).now();if(p.update(A-a,200),A>=l+1e3&&(d.update(h*1e3/(A-l),100),l=A,h=0,g)){var _=performance.memory;g.update(_.usedJSHeapSize/1048576,_.jsHeapSizeLimit/1048576)}return A},update:function(){a=this.end()},domElement:e,setMode:i}};wh.Panel=function(o,e,t){var i=1/0,a=0,l=Math.round,h=l(window.devicePixelRatio||1),d=80*h,p=48*h,g=3*h,A=2*h,_=3*h,b=15*h,w=74*h,E=30*h,C=document.createElement("canvas");C.width=d,C.height=p,C.style.cssText="width:80px;height:48px";var T=C.getContext("2d");return T.font="bold "+9*h+"px Helvetica,Arial,sans-serif",T.textBaseline="top",T.fillStyle=t,T.fillRect(0,0,d,p),T.fillStyle=e,T.fillText(o,g,A),T.fillRect(_,b,w,E),T.fillStyle=t,T.globalAlpha=.9,T.fillRect(_,b,w,E),{dom:C,update:function(x,P){i=Math.min(i,x),a=Math.max(a,x),T.fillStyle=t,T.globalAlpha=1,T.fillRect(0,0,d,b),T.fillStyle=e,T.fillText(l(x)+" "+o+" ("+l(i)+"-"+l(a)+")",g,A),T.drawImage(C,_+h,b,w-h,E,_,b,w-h,E),T.fillRect(_+w-h,b,h,E),T.fillStyle=t,T.globalAlpha=.9,T.fillRect(_+w-h,b,h,l((1-x/P)*E))}}};class as extends Yf{constructor(){super(),this._loggerContext="DEBUG MANAGER",this.stats=new wh}static{this.webComponentName="debug-manager"}static setupWebComponent(){window.customElements.get(as.webComponentName)||window.customElements.define(as.webComponentName,as)}static{this.styles=ct`
8354
+ `}};co([Ut("#modelViewer")],ia.prototype,"modelViewerElem");co([Ut("#arModal")],ia.prototype,"arModalElem");co([Ut("#qrModal")],ia.prototype,"qrModalElem");co([ue({attribute:!1})],ia.prototype,"appWcRef");co([ue({type:String,attribute:"glb-src"})],ia.prototype,"glbSrc");co([ue({type:String,attribute:"usdz-src"})],ia.prototype,"usdzSrc");co([ue({type:Boolean,attribute:"debug"})],ia.prototype,"debug");let SH=ia;class wt{constructor(e,t,i=""){this.__name="app:generic:event",this.__eventsManager=e,this.__name=t,this.__detail=i}get name(){return this.__name}get detail(){return this.__detail}fire(e){const t=new CustomEvent(this.__name,{detail:e??this.__detail});this.__eventsManager.eventHubRef.dispatchEvent(t)}}class CH extends EventTarget{constructor(e){super(),this._loggerContext="EVENTS MANAGER",window.epigraph.logger.info({title:"Initializing...",contextOverride:this._loggerContext}),e?this.eventHubRef=e:this.eventHubRef=this,this.assetLoadProgress=new wt(this,"assetLoadProgress",""),this.experienceUpdatedEvent=new wt(this,"experienceUpdated",""),this.appReadyEvent=new wt(this,"appReady",""),this.appFailedEvent=new wt(this,"appFailed",""),this.productClassChangedEvent=new wt(this,"productClassChanged",""),this.productChangedEvent=new wt(this,"productChanged",""),this.variantChangedEvent=new wt(this,"variantChanged",""),this.structureNodeAddedEvent=new wt(this,"structureNodeAdded",""),this.structureNodeRemovedEvent=new wt(this,"structureNodeRemoved",""),this.structureChangedEvent=new wt(this,"structureChanged",""),this.showNodeLoadingIcon=new wt(this,"nodeLoadingShow",""),this.hideNodeLoadingIcon=new wt(this,"nodeLoadingHide",""),this.cameraFitEvent=new wt(this,"cameraFit",""),this.hotspotsUpdatedEvent=new wt(this,"hotspotsUpdated",""),this.hotspotsVisibilityChanged=new wt(this,"hotspotsVisibilityChanged",""),this.hotspotClickedEvent=new wt(this,"hotspotClicked",""),this.hotspotOpenEvent=new wt(this,"hotspotOpen",""),this.hotspotClosedEvent=new wt(this,"hotspotClosed",""),this.hotspotNextEvent=new wt(this,"hotspotNext",""),this.hotspotPreviousEvent=new wt(this,"hotspotPrevious",""),this.sceneBoundsChanged=new wt(this,"sceneBoundsChanged",""),this.dimensionsPositionChanged=new wt(this,"dimensionsPositionChanged",""),this.dimensionsValueChanged=new wt(this,"dimensionsValueChanged",""),this.dimensionsVisibilityChanged=new wt(this,"dimensionsVisibilityChanged",""),this.arModelReadyEvent=new wt(this,"arGlbReady",""),this.cartChangedEvent=new wt(this,"cartChanged",""),this.sceneRestartedEvent=new wt(this,"sceneRestarted",""),this.pickerFoundPosition=new wt(this,"pickerFoundPosition",""),this.frameUpdated=new wt(this,"frameUpdated",""),this.cameraControlsStart=new wt(this,"cameraControlsStart",""),this.inputStart=new wt(this,"inputStart",""),this.inputMove=new wt(this,"inputMove",""),this.inputEnd=new wt(this,"inputEnd",""),this.cameraMoveToTransform=new wt(this,"cameraMoveToTransform",""),this.debugChanged=new wt(this,"debugChanged","")}}class TH{constructor(e,t){this.__assets=new Map,this.__appWcRef=t,this.__config=e}async initialize(){for(const e in this.__config){const t=new yC(this.__config[e],this.__appWcRef);await t.load(),this.__assets.set(e,t)}}async loadAllProxies(){for(const e of this.__assets.values())await e.loadProxyGltf()}async loadAllRenderAssets(){for(const e of this.__assets.values())await e.loadRenderGltf(!0)}getAssetByName(e){return this.__assets.get(e)}getFirstAsset(){return this.__assets.values().next().value}}class IH{constructor(e){this.__assetClass=e.assetClass,this.__asset=e.asset,this.__assetId=e.assetId,this.__finish=e.finish,this.__productOptionValue=e.productOptionValue}get assetClass(){return this.__assetClass}get asset(){return this.__asset}get assetId(){return this.__assetId}get finish(){return this.__finish}get productOptionValue(){return this.__productOptionValue}}class MH{constructor(e,t){this.__productParts=[],this.__id=e.id,this.__name=e.name,this.__productId=t,this.__sku=e.sku,this.__upc=e.upc,this.__asin=e.asin,this.__shopifyVariantId=e.shopifyVariantId,this.__uuid=e.uuid,this.parseProductParts(e.productParts)}get id(){return this.__id}get name(){return this.__name}get productId(){return this.__productId}get sku(){return this.__sku}get upc(){return this.__upc}get asin(){return this.__asin}get shopifyVariantId(){return this.__shopifyVariantId}get uuid(){return this.__uuid}get productParts(){return this.__productParts}parseProductParts(e){for(const t of e){const i=new IH(t);this.__productParts.push(i)}}}class RH{constructor(e,t){this.__productVariants=new Map,this.__productVariantNames=new Map,this.__productVariantSkus=new Map,this.__productVariantUpcs=new Map,this.__productVariantAsins=new Map,this.__productVariantShopifyVariantIds=new Map,this.__productVariantUuids=new Map,this.__productId=t;for(const i of e){const a=new MH(i,this.__productId);a&&this.addProductVariant(a)}}addProductVariant(e){this.__productVariants.set(e.id,e),this.__productVariantNames.set(e.name,e),e.sku&&this.__productVariantSkus.set(e.sku,e),e.upc&&this.__productVariantUpcs.set(e.upc,e),e.asin&&this.__productVariantAsins.set(e.asin,e),e.shopifyVariantId&&this.__productVariantShopifyVariantIds.set(e.shopifyVariantId,e),e.uuid&&this.__productVariantUuids.set(e.uuid,e)}removeProductVariant(e){e.sku&&this.__productVariantSkus.delete(e.sku),e.upc&&this.__productVariantUpcs.delete(e.upc),e.asin&&this.__productVariantAsins.delete(e.asin),e.shopifyVariantId&&this.__productVariantShopifyVariantIds.delete(e.shopifyVariantId),this.__productVariantNames.delete(e.name),this.__productVariants.delete(e.id)}getAllProductVariants(){return Array.from(this.__productVariants.values())}getAllProductVariantIds(){return Array.from(this.__productVariants.keys())}getAllProductVariantNames(){return Array.from(this.__productVariantNames.keys())}getProductVariantById(e){return this.__productVariants.get(e)}getProductVariantByName(e){return this.__productVariantNames.get(e)}getProductVariantBySku(e){return this.__productVariantSkus.get(e)}getProductVariantByUpc(e){return this.__productVariantUpcs.get(e)}getProductVariantByAsin(e){return this.__productVariantAsins.get(e)}getProductVariantByShopifyVariantId(e){return this.__productVariantShopifyVariantIds.get(e)}getProductVariantByUuid(e){return this.__productVariantUuids.get(e)}getProductVariantByIdentifierAndType(e,t){switch(t){case Ta.SKU:return this.getProductVariantBySku(e);case Ta.SHOPIFY_VARIANT_ID:return this.getProductVariantByShopifyVariantId(e);case Ta.ASIN:return this.getProductVariantByAsin(e);case Ta.UPC:return this.getProductVariantByUpc(e);case Ta.EXPERIENCE_ID:return;case Ta.PRODUCT_VARIANT_UUID:return this.getProductVariantByUuid(e);default:return}}}class FT{constructor(){this.productSettings={hotspots:{enabled:!1},dimensions:{enabled:!1},postEffect:{ao:!1},camera:{clearColor:"#ffffff",focalLength:35,canPan:!0,canZoom:!0,minDistance:2,maxDistance:8,minPolarAngle:0,maxPolarAngle:1.5,minAzimuthAngle:-1/0,maxAzimuthAngle:1/0},renderQuality:{antiAlias:!0},screenshots:{enabled:!1},shadows:{shadowType:EC.NONE,accumulativeShadows:{shadowMaterial:{opacity:.8,alphaTest:.75,color:"#000000",blend:1},shadowParams:{frames:30,scale:10,radius:.8,ambient:.5},light:{direction:{x:3,y:5,z:3}}},contactShadows:{planeLength:3,planeWidth:3,cameraHeight:1,intensity:1,softness:1}}}}_deepCopyProductSettings(e){const t=this.productSettings;e.camera&&(t.camera=e.camera),e.dimensions&&(t.dimensions=e.dimensions),e.hotspots&&(t.hotspots=e.hotspots),e.postEffect&&(t.postEffect=e.postEffect),e.renderQuality&&(t.renderQuality=e.renderQuality),e.screenshots&&(t.screenshots=e.screenshots),e.shadows?.shadowType&&(t.shadows.shadowType=e.shadows.shadowType),e.shadows?.accumulativeShadows&&(t.shadows.accumulativeShadows=e.shadows.accumulativeShadows),e.shadows?.contactShadows&&(e.shadows.contactShadows.cameraHeight&&(t.shadows.contactShadows.cameraHeight=e.shadows.contactShadows.cameraHeight),e.shadows.contactShadows.intensity&&(t.shadows.contactShadows.intensity=e.shadows.contactShadows.intensity),e.shadows.contactShadows.planeLength&&(t.shadows.contactShadows.planeLength=e.shadows.contactShadows.planeLength),e.shadows.contactShadows.planeWidth&&(t.shadows.contactShadows.planeWidth=e.shadows.contactShadows.planeWidth),e.shadows.contactShadows.softness&&(t.shadows.contactShadows.softness=e.shadows.contactShadows.softness))}}class BH extends FT{constructor({nexusApiResultPayload:e,appWcRef:t}){super(),this.__needsRootPlug=!1,window.epigraph.logger.info({title:"nexusApiPayload",details:e}),this._appWcRef=t,this._data=e,this._data.product_data.settings&&this._deepCopyProductSettings(this._data.product_data.settings);const i=this._data.product_data.assets;if(Object.values(i).length===1){const a=Object.values(i)[0];a?.proxyGeo?window.epigraph.logger.warn({title:"Single asset experience detected and a proxy was provided. Please ensure that the proxy provided has a root plug in it. Expand for the asset config used...",details:a,contextOverride:"ASSET COLLECTION"}):(a.proxyGeo="https://asset.myepigraph.com/configurator-assets/epigraph-solution-assets/staging-assets/pipeline-assets/3d-assets/proxies/null-proxy.glb",this.__needsRootPlug=!0,a.autoGenerateProxyEntity=!0)}}async __parseAssets(){return this.__assetCollection=new TH(this._data.product_data.assets,this._appWcRef),await this.__assetCollection.initialize(),this.__needsRootPlug&&this.__assetCollection.getFirstAsset()?.proxyGltf?.plugs.push(new Jr({name:"root@plug",isPrimary:!0,connectionId:"root",position:new se,rotation:new bn})),this.__assetCollection}getAssetCollection(){return this.__assetCollection}__parseProductVariants(){this.__productVariantCollection=new RH(this._data.product_data.product.productVariants,this._data.product_data.product.id)}get productVariantCollection(){return this.__productVariantCollection}async initialize(){await this.__parseAssets(),await this.__parseProductVariants()}getExperienceDataSettings(){return{}}}var wh=function(){var o=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(A){A.preventDefault(),i(++o%e.children.length)},!1);function t(A){return e.appendChild(A.dom),A}function i(A){for(var _=0;_<e.children.length;_++)e.children[_].style.display=_===A?"block":"none";o=A}var a=(performance||Date).now(),l=a,h=0,d=t(new wh.Panel("FPS","#0ff","#002")),p=t(new wh.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var g=t(new wh.Panel("MB","#f08","#201"));return i(0),{REVISION:16,dom:e,addPanel:t,showPanel:i,begin:function(){a=(performance||Date).now()},end:function(){h++;var A=(performance||Date).now();if(p.update(A-a,200),A>=l+1e3&&(d.update(h*1e3/(A-l),100),l=A,h=0,g)){var _=performance.memory;g.update(_.usedJSHeapSize/1048576,_.jsHeapSizeLimit/1048576)}return A},update:function(){a=this.end()},domElement:e,setMode:i}};wh.Panel=function(o,e,t){var i=1/0,a=0,l=Math.round,h=l(window.devicePixelRatio||1),d=80*h,p=48*h,g=3*h,A=2*h,_=3*h,b=15*h,w=74*h,E=30*h,C=document.createElement("canvas");C.width=d,C.height=p,C.style.cssText="width:80px;height:48px";var T=C.getContext("2d");return T.font="bold "+9*h+"px Helvetica,Arial,sans-serif",T.textBaseline="top",T.fillStyle=t,T.fillRect(0,0,d,p),T.fillStyle=e,T.fillText(o,g,A),T.fillRect(_,b,w,E),T.fillStyle=t,T.globalAlpha=.9,T.fillRect(_,b,w,E),{dom:C,update:function(x,P){i=Math.min(i,x),a=Math.max(a,x),T.fillStyle=t,T.globalAlpha=1,T.fillRect(0,0,d,b),T.fillStyle=e,T.fillText(l(x)+" "+o+" ("+l(i)+"-"+l(a)+")",g,A),T.drawImage(C,_+h,b,w-h,E,_,b,w-h,E),T.fillRect(_+w-h,b,h,E),T.fillStyle=t,T.globalAlpha=.9,T.fillRect(_+w-h,b,h,l((1-x/P)*E))}}};class as extends Yf{constructor(){super(),this._loggerContext="DEBUG MANAGER",this.stats=new wh}static{this.webComponentName="debug-manager"}static setupWebComponent(){window.customElements.get(as.webComponentName)||window.customElements.define(as.webComponentName,as)}static{this.styles=ct`
8355
8355
  .debug-label {
8356
8356
  position: absolute;
8357
8357
  top: 0%;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epigraph/solutions",
3
- "version": "0.27.0-canary.1",
3
+ "version": "0.27.0-canary.3",
4
4
  "type": "module",
5
5
  "main": "./dist/epigraph-solutions.js",
6
6
  "files": [