UNPKG

@google/model-viewer

Version:

Easily display interactive 3D models on the web and in AR!

523 lines (475 loc) 407 kB
import{Quaternion as e,Matrix4 as t,RGBAFormat as i,RGBA_ASTC_4x4_Format as s,RGBA_BPTC_Format as n,RGBA_ETC2_EAC_Format as r,RGBA_PVRTC_4BPPV1_Format as o,RGBA_S3TC_DXT5_Format as a,RGB_ETC1_Format as A,RGB_ETC2_Format as l,RGB_PVRTC_4BPPV1_Format as h,RGB_S3TC_DXT1_Format as c,Texture as u,Vector3 as g,Color as d,Vector2 as p,PerspectiveCamera as m,MeshBasicMaterial as f,PlaneGeometry as I,RepeatWrapping as C,ClampToEdgeWrapping as E,MirroredRepeatWrapping as B,NearestFilter as y,LinearFilter as w,NearestMipmapNearestFilter as v,LinearMipmapNearestFilter as Q,NearestMipmapLinearFilter as b,LinearMipmapLinearFilter as x,Matrix3 as S,Triangle as M,Raycaster as R,Loader as T,FileLoader as D,SRGBColorSpace as L,LinearSRGBColorSpace as F,BufferGeometry as _,BufferAttribute as k,CompressedCubeTexture as U,UnsignedByteType as N,CompressedArrayTexture as G,CompressedTexture as P,FloatType as O,HalfFloatType as H,DataTexture as q,Data3DTexture as V,DisplayP3ColorSpace as $,LinearDisplayP3ColorSpace as J,NoColorSpace as K,EventDispatcher as Y,NeutralToneMapping as z,AgXToneMapping as j,ACESFilmicToneMapping as W,LoaderUtils as X,SpotLight as Z,PointLight as ee,DirectionalLight as te,MeshPhysicalMaterial as ie,InstancedMesh as se,InstancedBufferAttribute as ne,Object3D as re,TextureLoader as oe,ImageBitmapLoader as ae,InterleavedBuffer as Ae,InterleavedBufferAttribute as le,PointsMaterial as he,Material as ce,LineBasicMaterial as ue,MeshStandardMaterial as ge,DoubleSide as de,PropertyBinding as pe,SkinnedMesh as me,Mesh as fe,LineSegments as Ie,Line as Ce,LineLoop as Ee,Points as Be,Group as ye,MathUtils as we,OrthographicCamera as ve,Skeleton as Qe,AnimationClip as be,Bone as xe,InterpolateLinear as Se,ColorManagement as Me,RGFormat as Re,RedFormat as Te,RGBA_ASTC_6x6_Format as De,Spherical as Le,Euler as Fe,WebGLRenderer as _e,VideoTexture as ke,CanvasTexture as Ue,Scene as Ne,Box3 as Ge,Sphere as Pe,AnimationMixer as Oe,LoopPingPong as He,LoopRepeat as qe,LoopOnce as Ve,TrianglesDrawMode as $e,TriangleFanDrawMode as Je,TriangleStripDrawMode as Ke,InterpolateDiscrete as Ye,FrontSide as ze,VectorKeyframeTrack as je,NumberKeyframeTrack as We,QuaternionKeyframeTrack as Xe,EquirectangularReflectionMapping as Ze,WebGLCubeRenderTarget as et,CubeCamera as tt,NoToneMapping as it,BoxGeometry as st,ShaderMaterial as nt,NoBlending as rt,BackSide as ot,SphereGeometry as at,MeshDepthMaterial as At,WebGLRenderTarget as lt,Interpolant as ht,Source as ct,LightProbe as ut,Float32BufferAttribute as gt,DataTextureLoader as dt,Uniform as pt,LoadingManager as mt,UVMapping as ft,LinearMipMapLinearFilter as It,DataUtils as Ct,IntType as Et,ShortType as Bt,ByteType as yt,UnsignedIntType as wt}from"three";export{CanvasTexture,FileLoader,Loader,NearestFilter}from"three"; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */const vt=(e,t)=>"method"===t.kind&&t.descriptor&&!("value"in t.descriptor)?{...t,finisher(i){i.createProperty(t.key,e)}}:{kind:"field",key:Symbol(),placement:"own",descriptor:{},originalKey:t.key,initializer(){"function"==typeof t.initializer&&(this[t.key]=t.initializer.call(this))},finisher(i){i.createProperty(t.key,e)}};function Qt(e){return(t,i)=>void 0!==i?((e,t,i)=>{t.constructor.createProperty(i,e)})(e,t,i):vt(e,t) /** * @license * Copyright 2021 Google LLC * SPDX-License-Identifier: BSD-3-Clause */}var bt;null===(bt=window.HTMLSlotElement)||void 0===bt||bt.prototype.assignedElements; /** * @license * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const xt=window,St=xt.ShadowRoot&&(void 0===xt.ShadyCSS||xt.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Mt=Symbol(),Rt=new WeakMap;class Tt{constructor(e,t,i){if(this._$cssResult$=!0,i!==Mt)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(St&&void 0===e){const i=void 0!==t&&1===t.length;i&&(e=Rt.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&Rt.set(t,e))}return e}toString(){return this.cssText}}const Dt=St?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new Tt("string"==typeof e?e:e+"",void 0,Mt))(t)})(e):e /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */;var Lt;const Ft=window,_t=Ft.trustedTypes,kt=_t?_t.emptyScript:"",Ut=Ft.reactiveElementPolyfillSupport,Nt={toAttribute(e,t){switch(t){case Boolean:e=e?kt:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},Gt=(e,t)=>t!==e&&(t==t||e==e),Pt={attribute:!0,type:String,converter:Nt,reflect:!1,hasChanged:Gt},Ot="finalized";class Ht extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(e){var t;this.finalize(),(null!==(t=this.h)&&void 0!==t?t:this.h=[]).push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,i)=>{const s=this._$Ep(i,t);void 0!==s&&(this._$Ev.set(s,i),e.push(s))})),e}static createProperty(e,t=Pt){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const i="symbol"==typeof e?Symbol():"__"+e,s=this.getPropertyDescriptor(e,i,t);void 0!==s&&Object.defineProperty(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){return{get(){return this[t]},set(s){const n=this[e];this[t]=s,this.requestUpdate(e,n,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||Pt}static finalize(){if(this.hasOwnProperty(Ot))return!1;this[Ot]=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),void 0!==e.h&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const i of t)this.createProperty(i,e[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(Dt(e))}else void 0!==e&&t.push(Dt(e));return t}static _$Ep(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}_$Eu(){var e;this._$E_=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,i;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(i=e.hostConnected)||void 0===i||i.call(e))}removeController(e){var t;null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.set(t,this[t]),delete this[t])}))}createRenderRoot(){var e;const t=null!==(e=this.shadowRoot)&&void 0!==e?e:this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{St?e.adoptedStyleSheets=t.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):t.forEach((t=>{const i=document.createElement("style"),s=xt.litNonce;void 0!==s&&i.setAttribute("nonce",s),i.textContent=t.cssText,e.appendChild(i)}))})(t,this.constructor.elementStyles),t}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$EO(e,t,i=Pt){var s;const n=this.constructor._$Ep(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==(null===(s=i.converter)||void 0===s?void 0:s.toAttribute)?i.converter:Nt).toAttribute(t,i.type);this._$El=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$El=null}}_$AK(e,t){var i;const s=this.constructor,n=s._$Ev.get(e);if(void 0!==n&&this._$El!==n){const e=s.getPropertyOptions(n),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==(null===(i=e.converter)||void 0===i?void 0:i.fromAttribute)?e.converter:Nt;this._$El=n,this[n]=r.fromAttribute(t,e.type),this._$El=null}}requestUpdate(e,t,i){let s=!0;void 0!==e&&(((i=i||this.constructor.getPropertyOptions(e)).hasChanged||Gt)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===i.reflect&&this._$El!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,i))):s=!1),!this.isUpdatePending&&s&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((e,t)=>this[t]=e)),this._$Ei=void 0);let t=!1;const i=this._$AL;try{t=this.shouldUpdate(i),t?(this.willUpdate(i),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(i)):this._$Ek()}catch(e){throw t=!1,this._$Ek(),e}t&&this._$AE(i)}willUpdate(e){}_$AE(e){var t;null===(t=this._$ES)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$EO(t,this[t],e))),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}} /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ var qt;Ht[Ot]=!0,Ht.elementProperties=new Map,Ht.elementStyles=[],Ht.shadowRootOptions={mode:"open"},null==Ut||Ut({ReactiveElement:Ht}),(null!==(Lt=Ft.reactiveElementVersions)&&void 0!==Lt?Lt:Ft.reactiveElementVersions=[]).push("1.6.3");const Vt=window,$t=Vt.trustedTypes,Jt=$t?$t.createPolicy("lit-html",{createHTML:e=>e}):void 0,Kt="$lit$",Yt=`lit$${(Math.random()+"").slice(9)}$`,zt="?"+Yt,jt=`<${zt}>`,Wt=document,Xt=()=>Wt.createComment(""),Zt=e=>null===e||"object"!=typeof e&&"function"!=typeof e,ei=Array.isArray,ti="[ \t\n\f\r]",ii=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,si=/-->/g,ni=/>/g,ri=RegExp(`>|${ti}(?:([^\\s"'>=/]+)(${ti}*=${ti}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),oi=/'/g,ai=/"/g,Ai=/^(?:script|style|textarea|title)$/i,li=(e=>(t,...i)=>({_$litType$:e,strings:t,values:i}))(1),hi=Symbol.for("lit-noChange"),ci=Symbol.for("lit-nothing"),ui=new WeakMap,gi=Wt.createTreeWalker(Wt,129,null,!1);function di(e,t){if(!Array.isArray(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==Jt?Jt.createHTML(t):t}const pi=(e,t)=>{const i=e.length-1,s=[];let n,r=2===t?"<svg>":"",o=ii;for(let t=0;t<i;t++){const i=e[t];let a,A,l=-1,h=0;for(;h<i.length&&(o.lastIndex=h,A=o.exec(i),null!==A);)h=o.lastIndex,o===ii?"!--"===A[1]?o=si:void 0!==A[1]?o=ni:void 0!==A[2]?(Ai.test(A[2])&&(n=RegExp("</"+A[2],"g")),o=ri):void 0!==A[3]&&(o=ri):o===ri?">"===A[0]?(o=null!=n?n:ii,l=-1):void 0===A[1]?l=-2:(l=o.lastIndex-A[2].length,a=A[1],o=void 0===A[3]?ri:'"'===A[3]?ai:oi):o===ai||o===oi?o=ri:o===si||o===ni?o=ii:(o=ri,n=void 0);const c=o===ri&&e[t+1].startsWith("/>")?" ":"";r+=o===ii?i+jt:l>=0?(s.push(a),i.slice(0,l)+Kt+i.slice(l)+Yt+c):i+Yt+(-2===l?(s.push(void 0),t):c)}return[di(e,r+(e[i]||"<?>")+(2===t?"</svg>":"")),s]};class mi{constructor({strings:e,_$litType$:t},i){let s;this.parts=[];let n=0,r=0;const o=e.length-1,a=this.parts,[A,l]=pi(e,t);if(this.el=mi.createElement(A,i),gi.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(s=gi.nextNode())&&a.length<o;){if(1===s.nodeType){if(s.hasAttributes()){const e=[];for(const t of s.getAttributeNames())if(t.endsWith(Kt)||t.startsWith(Yt)){const i=l[r++];if(e.push(t),void 0!==i){const e=s.getAttribute(i.toLowerCase()+Kt).split(Yt),t=/([.?@])?(.*)/.exec(i);a.push({type:1,index:n,name:t[2],strings:e,ctor:"."===t[1]?Bi:"?"===t[1]?wi:"@"===t[1]?vi:Ei})}else a.push({type:6,index:n})}for(const t of e)s.removeAttribute(t)}if(Ai.test(s.tagName)){const e=s.textContent.split(Yt),t=e.length-1;if(t>0){s.textContent=$t?$t.emptyScript:"";for(let i=0;i<t;i++)s.append(e[i],Xt()),gi.nextNode(),a.push({type:2,index:++n});s.append(e[t],Xt())}}}else if(8===s.nodeType)if(s.data===zt)a.push({type:2,index:n});else{let e=-1;for(;-1!==(e=s.data.indexOf(Yt,e+1));)a.push({type:7,index:n}),e+=Yt.length-1}n++}}static createElement(e,t){const i=Wt.createElement("template");return i.innerHTML=e,i}}function fi(e,t,i=e,s){var n,r,o,a;if(t===hi)return t;let A=void 0!==s?null===(n=i._$Co)||void 0===n?void 0:n[s]:i._$Cl;const l=Zt(t)?void 0:t._$litDirective$;return(null==A?void 0:A.constructor)!==l&&(null===(r=null==A?void 0:A._$AO)||void 0===r||r.call(A,!1),void 0===l?A=void 0:(A=new l(e),A._$AT(e,i,s)),void 0!==s?(null!==(o=(a=i)._$Co)&&void 0!==o?o:a._$Co=[])[s]=A:i._$Cl=A),void 0!==A&&(t=fi(e,A._$AS(e,t.values),A,s)),t}class Ii{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){var t;const{el:{content:i},parts:s}=this._$AD,n=(null!==(t=null==e?void 0:e.creationScope)&&void 0!==t?t:Wt).importNode(i,!0);gi.currentNode=n;let r=gi.nextNode(),o=0,a=0,A=s[0];for(;void 0!==A;){if(o===A.index){let t;2===A.type?t=new Ci(r,r.nextSibling,this,e):1===A.type?t=new A.ctor(r,A.name,A.strings,this,e):6===A.type&&(t=new Qi(r,this,e)),this._$AV.push(t),A=s[++a]}o!==(null==A?void 0:A.index)&&(r=gi.nextNode(),o++)}return gi.currentNode=Wt,n}v(e){let t=0;for(const i of this._$AV)void 0!==i&&(void 0!==i.strings?(i._$AI(e,i,t),t+=i.strings.length-2):i._$AI(e[t])),t++}}class Ci{constructor(e,t,i,s){var n;this.type=2,this._$AH=ci,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=i,this.options=s,this._$Cp=null===(n=null==s?void 0:s.isConnected)||void 0===n||n}get _$AU(){var e,t;return null!==(t=null===(e=this._$AM)||void 0===e?void 0:e._$AU)&&void 0!==t?t:this._$Cp}get parentNode(){let e=this._$AA.parentNode;const t=this._$AM;return void 0!==t&&11===(null==e?void 0:e.nodeType)&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=fi(this,e,t),Zt(e)?e===ci||null==e||""===e?(this._$AH!==ci&&this._$AR(),this._$AH=ci):e!==this._$AH&&e!==hi&&this._(e):void 0!==e._$litType$?this.g(e):void 0!==e.nodeType?this.$(e):(e=>ei(e)||"function"==typeof(null==e?void 0:e[Symbol.iterator]))(e)?this.T(e):this._(e)}k(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}$(e){this._$AH!==e&&(this._$AR(),this._$AH=this.k(e))}_(e){this._$AH!==ci&&Zt(this._$AH)?this._$AA.nextSibling.data=e:this.$(Wt.createTextNode(e)),this._$AH=e}g(e){var t;const{values:i,_$litType$:s}=e,n="number"==typeof s?this._$AC(e):(void 0===s.el&&(s.el=mi.createElement(di(s.h,s.h[0]),this.options)),s);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===n)this._$AH.v(i);else{const e=new Ii(n,this),t=e.u(this.options);e.v(i),this.$(t),this._$AH=e}}_$AC(e){let t=ui.get(e.strings);return void 0===t&&ui.set(e.strings,t=new mi(e)),t}T(e){ei(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let i,s=0;for(const n of e)s===t.length?t.push(i=new Ci(this.k(Xt()),this.k(Xt()),this,this.options)):i=t[s],i._$AI(n),s++;s<t.length&&(this._$AR(i&&i._$AB.nextSibling,s),t.length=s)}_$AR(e=this._$AA.nextSibling,t){var i;for(null===(i=this._$AP)||void 0===i||i.call(this,!1,!0,t);e&&e!==this._$AB;){const t=e.nextSibling;e.remove(),e=t}}setConnected(e){var t;void 0===this._$AM&&(this._$Cp=e,null===(t=this._$AP)||void 0===t||t.call(this,e))}}class Ei{constructor(e,t,i,s,n){this.type=1,this._$AH=ci,this._$AN=void 0,this.element=e,this.name=t,this._$AM=s,this.options=n,i.length>2||""!==i[0]||""!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=ci}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,i,s){const n=this.strings;let r=!1;if(void 0===n)e=fi(this,e,t,0),r=!Zt(e)||e!==this._$AH&&e!==hi,r&&(this._$AH=e);else{const s=e;let o,a;for(e=n[0],o=0;o<n.length-1;o++)a=fi(this,s[i+o],t,o),a===hi&&(a=this._$AH[o]),r||(r=!Zt(a)||a!==this._$AH[o]),a===ci?e=ci:e!==ci&&(e+=(null!=a?a:"")+n[o+1]),this._$AH[o]=a}r&&!s&&this.j(e)}j(e){e===ci?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=e?e:"")}}class Bi extends Ei{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===ci?void 0:e}}const yi=$t?$t.emptyScript:"";class wi extends Ei{constructor(){super(...arguments),this.type=4}j(e){e&&e!==ci?this.element.setAttribute(this.name,yi):this.element.removeAttribute(this.name)}}class vi extends Ei{constructor(e,t,i,s,n){super(e,t,i,s,n),this.type=5}_$AI(e,t=this){var i;if((e=null!==(i=fi(this,e,t,0))&&void 0!==i?i:ci)===hi)return;const s=this._$AH,n=e===ci&&s!==ci||e.capture!==s.capture||e.once!==s.once||e.passive!==s.passive,r=e!==ci&&(s===ci||n);n&&this.element.removeEventListener(this.name,this,s),r&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var t,i;"function"==typeof this._$AH?this._$AH.call(null!==(i=null===(t=this.options)||void 0===t?void 0:t.host)&&void 0!==i?i:this.element,e):this._$AH.handleEvent(e)}}class Qi{constructor(e,t,i){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(e){fi(this,e)}}const bi=Vt.litHtmlPolyfillSupport;null==bi||bi(mi,Ci),(null!==(qt=Vt.litHtmlVersions)&&void 0!==qt?qt:Vt.litHtmlVersions=[]).push("2.8.0");const xi=(e,t,i)=>{var s,n;const r=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:t;let o=r._$litPart$;if(void 0===o){const e=null!==(n=null==i?void 0:i.renderBefore)&&void 0!==n?n:null;r._$litPart$=o=new Ci(t.insertBefore(Xt(),e),e,void 0,null!=i?i:{})}return o._$AI(e),o /** * @license * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */},Si=window,Mi=Si.ShadowRoot&&(void 0===Si.ShadyCSS||Si.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Ri=Symbol(),Ti=new WeakMap;class Di{constructor(e,t,i){if(this._$cssResult$=!0,i!==Ri)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(Mi&&void 0===e){const i=void 0!==t&&1===t.length;i&&(e=Ti.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&Ti.set(t,e))}return e}toString(){return this.cssText}}const Li=Mi?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return(e=>new Di("string"==typeof e?e:e+"",void 0,Ri))(t)})(e):e /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */;var Fi;const _i=window,ki=_i.trustedTypes,Ui=ki?ki.emptyScript:"",Ni=_i.reactiveElementPolyfillSupport,Gi={toAttribute(e,t){switch(t){case Boolean:e=e?Ui:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let i=e;switch(t){case Boolean:i=null!==e;break;case Number:i=null===e?null:Number(e);break;case Object:case Array:try{i=JSON.parse(e)}catch(e){i=null}}return i}},Pi=(e,t)=>t!==e&&(t==t||e==e),Oi={attribute:!0,type:String,converter:Gi,reflect:!1,hasChanged:Pi},Hi="finalized";class qi extends HTMLElement{constructor(){super(),this._$Ei=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$El=null,this._$Eu()}static addInitializer(e){var t;this.finalize(),(null!==(t=this.h)&&void 0!==t?t:this.h=[]).push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,i)=>{const s=this._$Ep(i,t);void 0!==s&&(this._$Ev.set(s,i),e.push(s))})),e}static createProperty(e,t=Oi){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const i="symbol"==typeof e?Symbol():"__"+e,s=this.getPropertyDescriptor(e,i,t);void 0!==s&&Object.defineProperty(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){return{get(){return this[t]},set(s){const n=this[e];this[t]=s,this.requestUpdate(e,n,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||Oi}static finalize(){if(this.hasOwnProperty(Hi))return!1;this[Hi]=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),void 0!==e.h&&(this.h=[...e.h]),this.elementProperties=new Map(e.elementProperties),this._$Ev=new Map,this.hasOwnProperty("properties")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const i of t)this.createProperty(i,e[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const e of i)t.unshift(Li(e))}else void 0!==e&&t.push(Li(e));return t}static _$Ep(e,t){const i=t.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof e?e.toLowerCase():void 0}_$Eu(){var e;this._$E_=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Eg(),this.requestUpdate(),null===(e=this.constructor.h)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,i;(null!==(t=this._$ES)&&void 0!==t?t:this._$ES=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(i=e.hostConnected)||void 0===i||i.call(e))}removeController(e){var t;null===(t=this._$ES)||void 0===t||t.splice(this._$ES.indexOf(e)>>>0,1)}_$Eg(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Ei.set(t,this[t]),delete this[t])}))}createRenderRoot(){var e;const t=null!==(e=this.shadowRoot)&&void 0!==e?e:this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{Mi?e.adoptedStyleSheets=t.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):t.forEach((t=>{const i=document.createElement("style"),s=Si.litNonce;void 0!==s&&i.setAttribute("nonce",s),i.textContent=t.cssText,e.appendChild(i)}))})(t,this.constructor.elementStyles),t}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$EO(e,t,i=Oi){var s;const n=this.constructor._$Ep(e,i);if(void 0!==n&&!0===i.reflect){const r=(void 0!==(null===(s=i.converter)||void 0===s?void 0:s.toAttribute)?i.converter:Gi).toAttribute(t,i.type);this._$El=e,null==r?this.removeAttribute(n):this.setAttribute(n,r),this._$El=null}}_$AK(e,t){var i;const s=this.constructor,n=s._$Ev.get(e);if(void 0!==n&&this._$El!==n){const e=s.getPropertyOptions(n),r="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==(null===(i=e.converter)||void 0===i?void 0:i.fromAttribute)?e.converter:Gi;this._$El=n,this[n]=r.fromAttribute(t,e.type),this._$El=null}}requestUpdate(e,t,i){let s=!0;void 0!==e&&(((i=i||this.constructor.getPropertyOptions(e)).hasChanged||Pi)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===i.reflect&&this._$El!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,i))):s=!1),!this.isUpdatePending&&s&&(this._$E_=this._$Ej())}async _$Ej(){this.isUpdatePending=!0;try{await this._$E_}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Ei&&(this._$Ei.forEach(((e,t)=>this[t]=e)),this._$Ei=void 0);let t=!1;const i=this._$AL;try{t=this.shouldUpdate(i),t?(this.willUpdate(i),null===(e=this._$ES)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(i)):this._$Ek()}catch(e){throw t=!1,this._$Ek(),e}t&&this._$AE(i)}willUpdate(e){}_$AE(e){var t;null===(t=this._$ES)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ek(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$E_}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$EO(t,this[t],e))),this._$EC=void 0),this._$Ek()}updated(e){}firstUpdated(e){}} /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ var Vi,$i;qi[Hi]=!0,qi.elementProperties=new Map,qi.elementStyles=[],qi.shadowRootOptions={mode:"open"},null==Ni||Ni({ReactiveElement:qi}),(null!==(Fi=_i.reactiveElementVersions)&&void 0!==Fi?Fi:_i.reactiveElementVersions=[]).push("1.6.3");class Ji extends qi{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var e,t;const i=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=i.firstChild),i}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=xi(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Do)||void 0===e||e.setConnected(!1)}render(){return hi}}Ji.finalized=!0,Ji._$litElement$=!0,null===(Vi=globalThis.litElementHydrateSupport)||void 0===Vi||Vi.call(globalThis,{LitElement:Ji});const Ki=globalThis.litElementPolyfillSupport;null==Ki||Ki({LitElement:Ji}),(null!==($i=globalThis.litElementVersions)&&void 0!==$i?$i:globalThis.litElementVersions=[]).push("3.3.3"); /* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const Yi=null!=navigator.xr&&null!=self.XRSession&&null!=navigator.xr.isSessionSupported,zi=Yi&&null!=self.XRSession.prototype.requestHitTestSource,ji=null!=self.ResizeObserver,Wi=null!=self.IntersectionObserver,Xi=zi;(()=>{const e=navigator.userAgent||navigator.vendor||self.opera;let t=!1;(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(t=!0)})(),/\bCrOS\b/.test(navigator.userAgent);const Zi=/android/i.test(navigator.userAgent),es=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!self.MSStream||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1;/Safari\//.test(navigator.userAgent);const ts=/firefox/i.test(navigator.userAgent),is=/OculusBrowser/.test(navigator.userAgent);es&&/CriOS\//.test(navigator.userAgent);const ss=Zi&&!ts&&!is,ns=Boolean(window.webkit&&window.webkit.messageHandlers),rs=(()=>{if(es){if(ns)return Boolean(/CriOS\/|EdgiOS\/|FxiOS\/|GSA\/|DuckDuckGo\//.test(navigator.userAgent));{const e=document.createElement("a");return Boolean(e.relList&&e.relList.supports&&e.relList.supports("ar"))}}return!1})(),os=e=>e&&"null"!==e?As(e):null,as=()=>{if(Xi)return;const e=[];throw Yi||e.push("WebXR Device API"),zi||e.push("WebXR Hit Test API"),new Error(`The following APIs are required for AR, but are missing in this browser: ${e.join(", ")}`)},As=e=>new URL(e,window.location.toString()).toString(),ls=(e,t)=>{let i=null;return(...s)=>{null!=i&&self.clearTimeout(i),i=self.setTimeout((()=>{i=null,e(...s)}),t)}},hs=(e,t,i)=>Math.max(t,Math.min(i,e)),cs=(()=>{const e=(()=>{var e;if(null===(e=document.documentElement.getAttribute("itemtype"))||void 0===e?void 0:e.includes("schema.org/SearchResultsPage"))return!0;if(window.self!==window.top)return!0;const t=null!=document.head?Array.from(document.head.querySelectorAll("meta")):[];for(const e of t)if("viewport"===e.name)return!0;return!1})();return e||console.warn('No <meta name="viewport"> detected; <model-viewer> will cap pixel density at 1.'),()=>e?window.devicePixelRatio:1})(),us=(()=>{const e=new RegExp("[?&]model-viewer-debug-mode(&|$)");return()=>self.ModelViewerElement&&self.ModelViewerElement.debugMode||self.location&&self.location.search&&self.location.search.match(e)})(); /* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var gs=function(e,t,i,s){for(var n,r=arguments.length,o=r<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,i):s,a=e.length-1;a>=0;a--)(n=e[a])&&(o=(r<3?n(o):r>3?n(t,i,o):n(t,i))||o);return r>3&&o&&Object.defineProperty(t,i,o),o};const ds=Symbol("currentEnvironmentMap"),ps=Symbol("currentBackground"),ms=Symbol("updateEnvironment"),fs=Symbol("cancelEnvironmentUpdate"); /* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ const Is=li` <style> :host { display: block; position: relative; contain: strict; width: 300px; height: 150px; } .container { position: relative; overflow: hidden; } .userInput { width: 100%; height: 100%; display: none; position: relative; outline-offset: -1px; outline-width: 1px; } canvas { position: absolute; display: none; pointer-events: none; /* NOTE(cdata): Chrome 76 and below apparently have a bug * that causes our canvas not to display pixels unless it is * on its own render layer * @see https://github.com/google/model-viewer/pull/755#issuecomment-536597893 */ transform: translateZ(0); } .show { display: block; } /* Adapted from HTML5 Boilerplate * * @see https://github.com/h5bp/html5-boilerplate/blob/ceb4620c78fc82e13534fc44202a3f168754873f/dist/css/main.css#L122-L133 */ .screen-reader-only { border: 0; left: 0; top: 0; clip: rect(0, 0, 0, 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; white-space: nowrap; width: 1px; pointer-events: none; } .slot { position: absolute; pointer-events: none; top: 0; left: 0; width: 100%; height: 100%; } .slot > * { pointer-events: initial; } .annotation-wrapper ::slotted(*) { opacity: var(--max-hotspot-opacity, 1); transition: opacity 0.3s; } .pointer-tumbling .annotation-wrapper ::slotted(*) { pointer-events: none; } .annotation-wrapper ::slotted(*) { pointer-events: initial; } .annotation-wrapper.hide ::slotted(*) { opacity: var(--min-hotspot-opacity, 0.25); } .slot.poster { display: none; background-color: inherit; } .slot.poster.show { display: inherit; } .slot.poster > * { pointer-events: initial; } .slot.poster:not(.show) > * { pointer-events: none; } #default-poster { width: 100%; height: 100%; /* The default poster is a <button> so we need to set display * to prevent it from being affected by text-align: */ display: block; position: absolute; border: none; padding: 0; background-size: contain; background-repeat: no-repeat; background-position: center; background-color: #fff0; } #default-progress-bar { display: block; position: relative; width: 100%; height: 100%; pointer-events: none; overflow: hidden; } #default-progress-bar > .bar { position: absolute; top: 0; left: 0; width: 100%; height: var(--progress-bar-height, 5px); background-color: var(--progress-bar-color, rgba(0, 0, 0, 0.4)); transition: transform 0.09s; transform-origin: top left; transform: scaleX(0); overflow: hidden; } #default-progress-bar > .bar.hide { transition: opacity 0.3s 1s; opacity: 0; } .centered { align-items: center; justify-content: center; } .cover { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } .slot.interaction-prompt { display: var(--interaction-prompt-display, flex); overflow: hidden; opacity: 0; will-change: opacity; transition: opacity 0.3s; } .slot.interaction-prompt.visible { opacity: 1; } .animated-container { will-change: transform, opacity; opacity: 0; transition: opacity 0.3s; } .slot.interaction-prompt > * { pointer-events: none; } .slot.ar-button { -moz-user-select: none; -webkit-tap-highlight-color: transparent; user-select: none; display: var(--ar-button-display, block); } .slot.ar-button:not(.enabled) { display: none; } .fab { display: flex; align-items: center; justify-content: center; box-sizing: border-box; width: 40px; height: 40px; cursor: pointer; background-color: #fff; box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.15); border-radius: 100px; } .fab > * { opacity: 0.87; } #default-ar-button { position: absolute; bottom: 16px; right: 16px; transform: scale(var(--ar-button-scale, 1)); transform-origin: bottom right; } .slot.pan-target { display: block; position: absolute; width: 0; height: 0; left: 50%; top: 50%; transform: translate3d(-50%, -50%, 0); background-color: transparent; opacity: 0; transition: opacity 0.3s; } #default-pan-target { width: 6px; height: 6px; border-radius: 6px; border: 1px solid white; box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 0.8); } .slot.default { pointer-events: none; } .slot.progress-bar { pointer-events: none; } .slot.exit-webxr-ar-button { pointer-events: none; } .slot.exit-webxr-ar-button:not(.enabled) { display: none; } #default-exit-webxr-ar-button { display: flex; align-items: center; justify-content: center; position: absolute; top: env(safe-area-inset-top, 16px); right: 16px; width: 40px; height: 40px; box-sizing: border-box; } #default-exit-webxr-ar-button > svg { fill: #fff; } </style> <div class="container"> <div class="userInput" tabindex="0" role="img" aria-label="3D model"> <div class="slot canvas"> <slot name="canvas"> <canvas></canvas> </slot> </div> </div> <!-- NOTE(cdata): We need to wrap slots because browsers without ShadowDOM will have their <slot> elements removed by ShadyCSS --> <div class="slot poster"> <slot name="poster"> <button type="button" id="default-poster" aria-hidden="true" aria-label="Loading 3D model"></button> </slot> </div> <div class="slot ar-button"> <slot name="ar-button"> <a id="default-ar-button" part="default-ar-button" class="fab" tabindex="2" role="button" href="javascript:void(0);" aria-label="View in your space"> ${li` <svg version="1.1" id="view_x5F_in_x5F_AR_x5F_icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve"> <rect id="Bounding_Box" x="0" y="0" fill="none" width="24" height="24"/> <g id="Art_layer"> <path d="M3,4c0-0.55,0.45-1,1-1h2V1H4C2.35,1,1,2.35,1,4v2h2V4z"/> <path d="M20,3c0.55,0,1,0.45,1,1v2h2V4c0-1.65-1.35-3-3-3h-2v2H20z"/> <path d="M4,21c-0.55,0-1-0.45-1-1v-2H1v2c0,1.65,1.35,3,3,3h2v-2H4z"/> <path d="M20,21c0.55,0,1-0.45,1-1v-2h2v2c0,1.65-1.35,3-3,3h-2v-2H20z"/> <g> <path d="M18.25,7.6l-5.5-3.18c-0.46-0.27-1.04-0.27-1.5,0L5.75,7.6C5.29,7.87,5,8.36,5,8.9v6.35c0,0.54,0.29,1.03,0.75,1.3 l5.5,3.18c0.46,0.27,1.04,0.27,1.5,0l5.5-3.18c0.46-0.27,0.75-0.76,0.75-1.3V8.9C19,8.36,18.71,7.87,18.25,7.6z M7,14.96v-4.62 l4,2.32v4.61L7,14.96z M12,10.93L8,8.61l4-2.31l4,2.31L12,10.93z M13,17.27v-4.61l4-2.32v4.62L13,17.27z"/> </g> </g> </svg>`} </a> </slot> </div> <div class="slot pan-target"> <slot name="pan-target"> <div id="default-pan-target"> </div> </slot> </div> <div class="slot interaction-prompt cover centered"> <div id="prompt" class="animated-container"> <slot name="interaction-prompt" aria-hidden="true"> ${li` <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="25" height="36"> <defs> <path id="A" d="M.001.232h24.997V36H.001z" /> </defs> <g transform="translate(-11 -4)" fill="none" fill-rule="evenodd"> <path fill-opacity="0" fill="#fff" d="M0 0h44v44H0z" /> <g transform="translate(11 3)"> <path d="M8.733 11.165c.04-1.108.766-2.027 1.743-2.307a2.54 2.54 0 0 1 .628-.089c.16 0 .314.017.463.044 1.088.2 1.9 1.092 1.9 2.16v8.88h1.26c2.943-1.39 5-4.45 5-8.025a9.01 9.01 0 0 0-1.9-5.56l-.43-.5c-.765-.838-1.683-1.522-2.712-2-1.057-.49-2.226-.77-3.46-.77s-2.4.278-3.46.77c-1.03.478-1.947 1.162-2.71 2l-.43.5a9.01 9.01 0 0 0-1.9 5.56 9.04 9.04 0 0 0 .094 1.305c.03.21.088.41.13.617l.136.624c.083.286.196.56.305.832l.124.333a8.78 8.78 0 0 0 .509.953l.065.122a8.69 8.69 0 0 0 3.521 3.191l1.11.537v-9.178z" fill-opacity=".5" fill="#e4e4e4" /> <path d="M22.94 26.218l-2.76 7.74c-.172.485-.676.8-1.253.8H12.24c-1.606 0-3.092-.68-3.98-1.82-1.592-2.048-3.647-3.822-6.11-5.27-.095-.055-.15-.137-.152-.23-.004-.1.046-.196.193-.297.56-.393 1.234-.6 1.926-.6a3.43 3.43 0 0 1 .691.069l4.922.994V10.972c0-.663.615-1.203 1.37-1.203s1.373.54 1.373 1.203v9.882h2.953c.273 0 .533.073.757.21l6.257 3.874c.027.017.045.042.07.06.41.296.586.77.426 1.22M4.1 16.614c-.024-.04-.042-.083-.065-.122a8.69 8.69 0 0 1-.509-.953c-.048-.107-.08-.223-.124-.333l-.305-.832c-.058-.202-.09-.416-.136-.624l-.13-.617a9.03 9.03 0 0 1-.094-1.305c0-2.107.714-4.04 1.9-5.56l.43-.5c.764-.84 1.682-1.523 2.71-2 1.058-.49 2.226-.77 3.46-.77s2.402.28 3.46.77c1.03.477 1.947 1.16 2.712 2l.428.5a9 9 0 0 1 1.901 5.559c0 3.577-2.056 6.636-5 8.026h-1.26v-8.882c0-1.067-.822-1.96-1.9-2.16-.15-.028-.304-.044-.463-.044-.22 0-.427.037-.628.09-.977.28-1.703 1.198-1.743 2.306v9.178l-1.11-.537C6.18 19.098 4.96 18 4.1 16.614M22.97 24.09l-6.256-3.874c-.102-.063-.218-.098-.33-.144 2.683-1.8 4.354-4.855 4.354-8.243 0-.486-.037-.964-.104-1.43a9.97 9.97 0 0 0-1.57-4.128l-.295-.408-.066-.092a10.05 10.05 0 0 0-.949-1.078c-.342-.334-.708-.643-1.094-.922-1.155-.834-2.492-1.412-3.94-1.65l-.732-.088-.748-.03a9.29 9.29 0 0 0-1.482.119c-1.447.238-2.786.816-3.94 1.65a9.33 9.33 0 0 0-.813.686 9.59 9.59 0 0 0-.845.877l-.385.437-.36.5-.288.468-.418.778-.04.09c-.593 1.28-.93 2.71-.93 4.222 0 3.832 2.182 7.342 5.56 8.938l1.437.68v4.946L5 25.64a4.44 4.44 0 0 0-.888-.086c-.017 0-.034.003-.05.003-.252.004-.503.033-.75.08a5.08 5.08 0 0 0-.237.056c-.193.046-.382.107-.568.18-.075.03-.15.057-.225.1-.25.114-.494.244-.723.405a1.31 1.31 0 0 0-.566 1.122 1.28 1.28 0 0 0 .645 1.051C4 29.925 5.96 31.614 7.473 33.563a5.06 5.06 0 0 0 .434.491c1.086 1.082 2.656 1.713 4.326 1.715h6.697c.748-.001 1.43-.333 1.858-.872.142-.18.256-.38.336-.602l2.757-7.74c.094-.26.13-.53.112-.794s-.088-.52-.203-.76a2.19 2.19 0 0 0-.821-.91" fill-opacity=".6" fill="#000" /> <path d="M22.444 24.94l-6.257-3.874a1.45 1.45 0 0 0-.757-.211h-2.953v-9.88c0-.663-.616-1.203-1.373-1.203s-1.37.54-1.37 1.203v16.643l-4.922-.994a3.44 3.44 0 0 0-.692-.069 3.35 3.35 0 0 0-1.925.598c-.147.102-.198.198-.194.298.004.094.058.176.153.23 2.462 1.448 4.517 3.22 6.11 5.27.887 1.14 2.373 1.82 3.98 1.82h6.686c.577 0 1.08-.326 1.253-.8l2.76-7.74c.16-.448-.017-.923-.426-1.22-.025-.02-.043-.043-.07-.06z" fill="#fff" /> <g transform="translate(0 .769)"> <mask id="B" fill="#fff"> <use xlink:href="#A" /> </mask> <path d="M23.993 24.992a1.96 1.96 0 0 1-.111.794l-2.758 7.74c-.08.22-.194.423-.336.602-.427.54-1.11.87-1.857.872h-6.698c-1.67-.002-3.24-.633-4.326-1.715-.154-.154-.3-.318-.434-.49C5.96 30.846 4 29.157 1.646 27.773c-.385-.225-.626-.618-.645-1.05a1.31 1.31 0 0 1 .566-1.122 4.56 4.56 0 0 1 .723-.405l.225-.1a4.3 4.3 0 0 1 .568-.18l.237-.056c.248-.046.5-.075.75-.08.018 0 .034-.003.05-.003.303-.001.597.027.89.086l3.722.752V20.68l-1.436-.68c-3.377-1.596-5.56-5.106-5.56-8.938 0-1.51.336-2.94.93-4.222.015-.03.025-.06.04-.09.127-.267.268-.525.418-.778.093-.16.186-.316.288-.468.063-.095.133-.186.2-.277L3.773 5c.118-.155.26-.29.385-.437.266-.3.544-.604.845-.877a9.33 9.33 0 0 1 .813-.686C6.97 2.167 8.31 1.59 9.757 1.35a9.27 9.27 0 0 1 1.481-.119 8.82 8.82 0 0 1 .748.031c.247.02.49.05.733.088 1.448.238 2.786.816 3.94 1.65.387.28.752.588 1.094.922a9.94 9.94 0 0 1 .949 1.078l.066.092c.102.133.203.268.295.408a9.97 9.97 0 0 1 1.571 4.128c.066.467.103.945.103 1.43 0 3.388-1.67 6.453-4.353 8.243.11.046.227.08.33.144l6.256 3.874c.37.23.645.55.82.9.115.24.185.498.203.76m.697-1.195c-.265-.55-.677-1.007-1.194-1.326l-5.323-3.297c2.255-2.037 3.564-4.97 3.564-8.114 0-2.19-.637-4.304-1.84-6.114-.126-.188-.26-.37-.4-.552-.645-.848-1.402-1.6-2.252-2.204C15.472.91 13.393.232 11.238.232A10.21 10.21 0 0 0 5.23 2.19c-.848.614-1.606 1.356-2.253 2.205-.136.18-.272.363-.398.55C1.374 6.756.737 8.87.737 11.06c0 4.218 2.407 8.08 6.133 9.842l.863.41v3.092l-2.525-.51c-.356-.07-.717-.106-1.076-.106a5.45 5.45 0 0 0-3.14.996c-.653.46-1.022 1.202-.99 1.983a2.28 2.28 0 0 0 1.138 1.872c2.24 1.318 4.106 2.923 5.543 4.772 1.26 1.62 3.333 2.59 5.55 2.592h6.698c1.42-.001 2.68-.86 3.134-2.138l2.76-7.74c.272-.757.224-1.584-.134-2.325" fill-opacity=".05" fill="#000" mask="url(#B)" /> </g> </g> </g> </svg>` /* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */} </slot> </div> </div> <div id="finger0" class="animated-container cover"> <slot name="finger0" aria-hidden="true"> </slot> </div> <div id="finger1" class="animated-container cover"> <slot name="finger1" aria-hidden="true"> </slot> </div> <div class="slot default"> <slot></slot> <div class="slot progress-bar"> <slot name="progress-bar"> <div id="default-progress-bar" aria-hidden="true"> <div class="bar" part="default-progress-bar"></div> </div> </slot> </div> <div class="slot exit-webxr-ar-button"> <slot name="exit-webxr-ar-button"> <a id="default-exit-webxr-ar-button" part="default-exit-webxr-ar-button" tabindex="3" aria-label="Exit AR" aria-hidden="true"> ${li` <svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="#000000"> <!-- NOTE(cdata): This SVG filter is a stop-gap until we can implement support for dynamic re-coloring of UI components --> <defs> <filter id="drop-shadow" x="-100%" y="-100%" width="300%" height="300%"> <feGaussianBlur in="SourceAlpha" stdDeviation="1"/> <feOffset dx="0" dy="0" result="offsetblur"/> <feFlood flood-color="#000000"/> <feComposite in2="offsetblur" operator="in"/> <feMerge> <feMergeNode/> <feMergeNode in="SourceGraphic"/> </feMerge> </filter> </defs> <path filter="url(#drop-shadow)" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/> <path d="M0 0h24v24H0z" fill="none"/> </svg>` /* @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the 'License'); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an 'AS IS' BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */} </a> </slot> </div> </div> </div> <div class="screen-reader-only" role="region" aria-label="Live announcements"> <span id="status" role="status"></span> </div>`,Cs=new WeakMap;function Es(){let e,t;function i(e,t,i,s,n,r){const o=r.num_components(),a=i.num_points()*o,A=a*n.BYTES_PER_ELEMENT,l=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,n),h=e._malloc(A);t.GetAttributeDataArrayForAllPoints(i,r,l,A,h);const c=new n(e.HEAPF32.buffer,h,a).slice();return e._free(h),{name:s,array:c,itemSize:o}}onmessage=function(s){const n=s.data;switch(n.type){case"init":e=n.decoderConfig,t=new Promise((function(t){e.onModuleLoaded=function(e){t({draco:e})},DracoDecoderModule(e)}));break;case"decode":const s=n.buffer,r=n.taskConfig;t.then((e=>{const t=e.draco,o=new t.Decoder;try{const e=function(e,t,s,n){const r=n.attributeIDs,o=n.attributeTypes;let a,A;const l=t.GetEncodedGeometryType(s);if(l===e.TRIANGULAR_MESH)a=new e.Mesh,A=t.DecodeArrayToMesh(s,s.byteLength,a);else{if(l!==e.POINT_CLOUD)throw new Error("THREE.DRACOLoader: Unexpected geometry type.");a=new e.PointCloud,A=t.DecodeArrayToPointCloud(s,s.byteLength,a)}if(!A.ok()||0===a.ptr)throw new Error("THREE.DRACOLoader: Decoding failed: "+A.error_msg());const h={index:null,attributes:[]};for(const s in r){const A=self[o[s]];let l,c;if(n.useUniqueIDs)c=r[s],l=t.GetAttributeByUniqueId(a,c);else{if(c=t.GetAttributeId(a,e[r[s]]),-1===c)continue;l=t.GetAttribute(a,c)}const u=i(e,t,a,s,A,l);"color"===s&&(u.vertexColorSpace=n.vertexColorSpace),h.attributes.push(u)}l===e.TRIANGULAR_MESH&&(h.index=function(e,t,i){const s=i.num_faces(),n=3*s,r=4*n,o=e._malloc(r);t.GetTrianglesUInt32Array(i,r,o);const a=new Uint32Array(e.HEAPF32.buffer,o,n).slice();return e._free(o),{array:a,itemSize:1}}(e,t,a));return e.destroy(a),h}(t,o,new Int8Array(s),r),a=e.attributes.map((e=>e.array.buffer));e.index&