sceneview-web 3.6.0 → 3.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,31 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sceneview-web",
|
|
3
|
-
"version": "3.6.
|
|
4
|
-
"description": "SceneView for Web
|
|
5
|
-
"main": "
|
|
6
|
-
"
|
|
7
|
-
"build/dist/js/productionExecutable/sceneview-web.js",
|
|
8
|
-
"build/dist/js/productionExecutable/sceneview-web.js.map"
|
|
9
|
-
],
|
|
10
|
-
"keywords": [
|
|
11
|
-
"3d",
|
|
12
|
-
"webgl",
|
|
13
|
-
"filament",
|
|
14
|
-
"sceneview",
|
|
15
|
-
"gltf",
|
|
16
|
-
"wasm",
|
|
17
|
-
"pbr",
|
|
18
|
-
"rendering",
|
|
19
|
-
"kotlin"
|
|
20
|
-
],
|
|
3
|
+
"version": "3.6.1",
|
|
4
|
+
"description": "SceneView for Web — 3D rendering with Filament.js (WebGL2/WASM)",
|
|
5
|
+
"main": "sceneview-web.js",
|
|
6
|
+
"keywords": ["3d", "webgl", "filament", "sceneview", "gltf", "wasm"],
|
|
21
7
|
"homepage": "https://github.com/sceneview/sceneview",
|
|
22
8
|
"repository": {
|
|
23
9
|
"type": "git",
|
|
24
10
|
"url": "https://github.com/sceneview/sceneview.git",
|
|
25
11
|
"directory": "sceneview-web"
|
|
26
12
|
},
|
|
27
|
-
"license": "Apache-2.0"
|
|
28
|
-
"peerDependencies": {
|
|
29
|
-
"filament": ">=1.52.0"
|
|
30
|
-
}
|
|
13
|
+
"license": "Apache-2.0"
|
|
31
14
|
}
|
package/sceneview-web.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("Filament")):"function"==typeof define&&define.amd?define(["Filament"],n):"object"==typeof exports?exports["sceneview-web"]=n(require("Filament")):t["sceneview-web"]=n(t.Filament)}(globalThis,t=>{return n={36(t,n){var i,e;"object"!=typeof globalThis&&(Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__),void 0===Math.imul&&(Math.imul=function(t,n){return(4294901760&t)*(65535&n)+(65535&t)*(0|n)|0}),void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(t){return null!=t&&null!=t.__proto__&&t.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===(e="function"==typeof(i=function(t){"use strict";var n,i,e,r,o,u,s,c,a,h,_,f,l,v,p,d,w,m,g,y,b=Math.imul,x=ArrayBuffer.isView;function $(){}function z(){}function j(t,n,i,e,r,o,u){return n=n===h?", ":n,i=i===h?"":i,e=e===h?"":e,r=r===h?-1:r,o=o===h?"...":o,u=u===h?null:u,function(t,n,i,e,r,o,u,s){i=i===h?", ":i,e=e===h?"":e,r=r===h?"":r,o=o===h?-1:o,u=u===h?"...":u,s=s===h?null:s,n.c(e);var c=0,a=0,_=t.length;t:for(;a<_;){var f=t[a];if(a=a+1|0,(c=c+1|0)>1&&n.c(i),!(o<0||c<=o))break t;gn(n,f,s)}return o>=0&&c>o&&n.c(u),n.c(r),n}(t,_n(),n,i,e,r,o,u).toString()}function E(t,n,i,e,r,o,u){return n=n===h?", ":n,i=i===h?"":i,e=e===h?"":e,r=r===h?-1:r,o=o===h?"...":o,u=u===h?null:u,function(t,n,i,e,r,o,u,s){i=i===h?", ":i,e=e===h?"":e,r=r===h?"":r,o=o===h?-1:o,u=u===h?"...":u,s=s===h?null:s,n.c(e);var c=0,a=t.d();t:for(;a.e();){var _=a.f();if((c=c+1|0)>1&&n.c(i),!(o<0||c<=o))break t;gn(n,_,s)}return o>=0&&c>o&&n.c(u),n.c(r),n}(t,_n(),n,i,e,r,o,u).toString()}function S(t,n){return t-n|0}function k(t){return String.fromCharCode(t)}function C(){}function A(){}function M(t,n){this.g_1=t,this.h_1=n}function L(t){var n=null==t?null:pt(t);return null==n?"null":n}function V(){n=this,this.k_1=new O(0,-2147483648),this.l_1=new O(-1,2147483647),this.m_1=8,this.n_1=64}function O(t,i){null==n&&new V,z.call(this),this.o_1=t,this.p_1=i}function q(){return ot(),i}function I(){return ot(),e}function F(){return ot(),r}function B(){return ot(),u}function N(){return ot(),s}function T(t,n){if(ot(),Y(t,n))return 0;var i=W(t),e=W(n);return i&&!e?-1:!i&&e?1:W(K(t,n))?-1:1}function P(t){return ot(),t.o_1}function R(t){return ot(),4294967296*t.p_1+function(t){return ot(),t.o_1>=0?t.o_1:4294967296+t.o_1}(t)}function D(t,n){if(ot(),U(t))return"0";if(W(t)){if(Y(t,B())){var i=X(n),e=nt(t,i),r=P(K(H(e,i),t));return D(e,n)+r.toString(n)}return"-"+D(J(t),n)}for(var o=2===n?31:n<=10?9:n<=21?7:n<=35?6:5,u=Z(Math.pow(n,o)),s=t,c="";;){var a=nt(s,u),h=P(K(s,H(a,u))).toString(n);if(U(s=a))return h+c;for(;h.length<o;)h="0"+h;c=h+c}}function Y(t,n){return ot(),t.p_1===n.p_1&&t.o_1===n.o_1}function X(t){return ot(),new O(t,t<0?-1:0)}function W(t){return ot(),t.p_1<0}function K(t,n){return ot(),G(t,J(n))}function U(t){return ot(),0===t.p_1&&0===t.o_1}function H(t,n){if(ot(),U(t))return q();if(U(n))return q();if(Y(t,B()))return Q(n)?B():q();if(Y(n,B()))return Q(t)?B():q();if(W(t))return W(n)?H(J(t),J(n)):J(H(J(t),n));if(W(n))return J(H(t,J(n)));if(tt(t,N())&&tt(n,N()))return Z(R(t)*R(n));var i=t.p_1>>>16|0,e=65535&t.p_1,r=t.o_1>>>16|0,o=65535&t.o_1,u=n.p_1>>>16|0,s=65535&n.p_1,c=n.o_1>>>16|0,a=65535&n.o_1,h=0,_=0,f=0,l=0;return f=f+((l=l+b(o,a)|0)>>>16|0)|0,l&=65535,_=(_=_+((f=f+b(r,a)|0)>>>16|0)|0)+((f=(f&=65535)+b(o,c)|0)>>>16|0)|0,f&=65535,h=(h=(h=h+((_=_+b(e,a)|0)>>>16|0)|0)+((_=(_&=65535)+b(r,c)|0)>>>16|0)|0)+((_=(_&=65535)+b(o,s)|0)>>>16|0)|0,_&=65535,h=h+(((b(i,a)+b(e,c)|0)+b(r,s)|0)+b(o,u)|0)|0,new O(f<<16|l,(h&=65535)<<16|_)}function J(t){return ot(),G(function(t){return ot(),new O(~t.o_1,~t.p_1)}(t),new O(1,0))}function Z(t){if(ot(),(n=t)!=n)return q();var n;if(t<=-0x8000000000000000)return B();if(t+1>=0x8000000000000000)return ot(),o;if(t<0)return J(Z(-t));var i=4294967296;return new O(t%i|0,t/i|0)}function G(t,n){ot();var i=t.p_1>>>16|0,e=65535&t.p_1,r=t.o_1>>>16|0,o=65535&t.o_1,u=n.p_1>>>16|0,s=65535&n.p_1,c=n.o_1>>>16|0,a=0,h=0,_=0,f=0;return a=(a=a+((h=(h=h+((_=(_=_+((f=f+(o+(65535&n.o_1)|0)|0)>>>16|0)|0)+(r+c|0)|0)>>>16|0)|0)+(e+s|0)|0)>>>16|0)|0)+(i+u|0)|0,new O((_&=65535)<<16|(f&=65535),(a&=65535)<<16|(h&=65535))}function Q(t){return ot(),!(1&~t.o_1)}function tt(t,n){return ot(),T(t,n)<0}function nt(t,n){if(ot(),U(n))throw Ht("division by zero");if(U(t))return q();if(Y(t,B())){if(Y(n,I())||Y(n,F()))return B();if(Y(n,B()))return I();var i=function(t,n){ot();var i=63&n;return 0===i?t:i<32?new O(t.o_1<<i,t.p_1<<i|t.o_1>>>(32-i|0)):new O(0,t.o_1<<(i-32|0))}(nt(function(t,n){ot();var i=63&n;return 0===i?t:i<32?new O(t.o_1>>>i|t.p_1<<(32-i|0),t.p_1>>i):new O(t.p_1>>(i-32|0),t.p_1>=0?0:-1)}(t,1),n),1);return Y(i,q())?W(n)?I():F():G(i,nt(K(t,H(n,i)),n))}if(Y(n,B()))return q();if(W(t))return W(n)?nt(J(t),J(n)):J(nt(J(t),n));if(W(n))return J(nt(t,J(n)));for(var e=q(),r=t;et(r,n);){for(var o=R(r)/R(n),u=Math.max(1,Math.floor(o)),s=Math.ceil(Math.log(u)/Math.LN2),c=s<=48?1:Math.pow(2,s-48),a=Z(u),h=H(a,n);W(h)||it(h,r);)h=H(a=Z(u-=c),n);U(a)&&(a=I()),e=G(e,a),r=K(r,h)}return e}function it(t,n){return ot(),T(t,n)>0}function et(t,n){return ot(),T(t,n)>=0}function rt(t){return ot(),null!=t&&(n=t,ot(),St(n)&&"LongArray"===n.$type$);var n}function ot(){c||(c=!0,i=X(0),e=X(1),r=X(-1),o=new O(-1,2147483647),u=new O(0,-2147483648),s=X(16777216),new an(Array,"LongArray",rt))}function ut(t,n){return st(t)?ct(t,n):t.b(n)}function st(t){return"string"==typeof t}function ct(t,n){return t.charCodeAt(n)}function at(t){return st(t)?t.length:t.a()}function ht(t){return pt(t)}function _t(t,n){var i;switch(typeof t){case"number":i="number"==typeof n?ft(t,n):n instanceof O?ft(t,R(n)):lt(t,n);break;case"string":case"boolean":case"bigint":i=lt(t,n);break;default:i=function(t,n){return t.j(n)}(t,n)}return i}function ft(t,n){var i;if(t<n)i=-1;else if(t>n)i=1;else if(t===n){var e;if(0!==t)e=0;else{var r=1/t;e=r===1/n?0:r<0?-1:1}i=e}else i=t!=t?n!=n?0:1:-1;return i}function lt(t,n){return t<n?-1:t>n?1:0}function vt(t){return t=t===h?null:t,Object.create(t)}function pt(t){return null==t?"null":function(t){return St(t)||x(t)}(t)?"[...]":"function"!=typeof t.toString?function(t){return Object.prototype.toString.call(t)}(t):t.toString()}function dt(t,n){null!=Error.captureStackTrace?Error.captureStackTrace(t,n):t.stack=(new Error).stack}function wt(t){return t.prototype}function mt(t,n){var i;if(gt(t)){var e;if(gt(n))e=t;else{var r=null==n?null:n.toString();e=null==r?h:r}i=e}else i=null==t?h:t;return i}function gt(t){return t===h}function yt(t,n,i){bt(t,"message",mt(n,i)),bt(t,"cause",i),bt(t,"name",Object.getPrototypeOf(t).constructor.name)}function bt(t,n,i){Object.defineProperty(t,n,{configurable:!0,writable:!0,value:i})}function xt(){throw sn()}function $t(t,n,i,e,r,o,u,s){zt("class",t,n,i,e,r,o,u,s)}function zt(t,n,i,e,r,o,u,s,c){null!=r&&(n.prototype=Object.create(r.prototype),n.prototype.constructor=n);var _=function(t,n,i,e,r,o){return{kind:t,simpleName:n,associatedObjectKey:e,associatedObjects:r,suspendArity:o,$kClass$:h,defaultConstructor:i}}(t,i,e,s,c,u);n.$metadata$=_;var f=n.prototype;if(null!=o)for(var l=0,v=o.length;l<v;){var p=o[l];l=l+1|0,Object.assign(f,p.prototype),f[p.Symbol]=!0}"interface"===t&&(n.Symbol="#__interface_"+(a===h&&(a=0),a=a+1|0))}function jt(t,n,i,e,r,o,u,s){zt("object",t,n,i,e,r,o,u,s)}function Et(t,n,i,e){jt(t,"Companion",h,n,i,e,h,h)}function St(t){return Array.isArray(t)}function kt(){}function Ct(t){return function(t){if(t.t())return[];for(var n=t.s(),i=Array(n),e=t.d(),r=0;e.e();){var o=r;r=o+1|0,i[o]=e.f()}return i}(t)}function At(){wn.call(this)}function Mt(t){this.w_1=t,this.u_1=0,this.v_1=-1}function Lt(t,n){this.e1_1=t,Mt.call(this,t),v.g1(n,this.e1_1.s()),this.u_1=n}function Vt(){At.call(this),this.z_1=0}function Ot(){f=this;var t=function(t,n){var i=[];if(Ft.call(n,i),!(t>=0))throw Rt(pt("Negative initial capacity: "+t));return n}(0,vt(wt(Ft)));t.o1_1=!0,this.p1_1=t}function qt(){return t=vt(wt(Ft)),Ft.call(t,[]),t;var t}function It(t,n){return v.q1(n,t.s()),n}function Ft(t){null==f&&new Ot,Vt.call(this),this.n1_1=t,this.o1_1=!1}function Bt(){var t,n=(Yt(t=vt(wt(Nt))),Nt.call(t),t);return dt(n,Bt),n}function Nt(){dt(this,Nt)}function Tt(t){var n=function(t,n){return Xt(t,n),Pt.call(n),n}(t,vt(wt(Pt)));return dt(n,Tt),n}function Pt(){dt(this,Pt)}function Rt(t){var n=function(t,n){return Xt(t,n),Dt.call(n),n}(t,vt(wt(Dt)));return dt(n,Rt),n}function Dt(){dt(this,Dt)}function Yt(t){return Kt(t),Wt.call(t),t}function Xt(t,n){return Ut(t,n),Wt.call(n),n}function Wt(){dt(this,Wt)}function Kt(t){return yt(t),Jt.call(t),t}function Ut(t,n){return yt(n,t),Jt.call(n),n}function Ht(t){var n=Ut(t,vt(wt(Jt)));return dt(n,Ht),n}function Jt(){dt(this,Jt)}function Zt(){var t,n=(Yt(t=vt(wt(Qt))),Qt.call(t),t);return dt(n,Zt),n}function Gt(t){var n=function(t,n){return Xt(t,n),Qt.call(n),n}(t,vt(wt(Qt)));return dt(n,Gt),n}function Qt(){dt(this,Qt)}function tn(t){var n=function(t,n){return Xt(t,n),nn.call(n),n}(t,vt(wt(nn)));return dt(n,tn),n}function nn(){dt(this,nn)}function en(){var t,n=(Yt(t=vt(wt(rn))),rn.call(t),t);return dt(n,en),n}function rn(){dt(this,rn)}function on(){var t,n=(Yt(t=vt(wt(un))),un.call(t),t);return dt(n,on),n}function un(){dt(this,un)}function sn(){var t,n=(Yt(t=vt(wt(cn))),cn.call(t),t);return dt(n,sn),n}function cn(){dt(this,cn)}function an(t,n,i){hn.call(this),this.u1_1=t,this.v1_1=n,this.w1_1=i}function hn(){}function _n(){return t=vt(wt(fn)),fn.call(t,""),t;var t}function fn(t){this.y1_1=t}function ln(t){var n=k(t).toUpperCase();return n.length>1?t:ct(n,0)}function vn(t){this.a2_1=t}function pn(t,n){return dn(),function(t,n,i){if(i=i!==h&&i,dn(),i){var e=t.length,r=n.length,o=Math.min(e,r);if(0===o)return e-r|0;var u=0;if(u<o)do{var s=u;u=u+1|0;var c=ct(t,s),a=ct(n,s);if(c!==a&&(c=ln(c))!==(a=ln(a))&&(c=ct(k(c).toLowerCase(),0))!==(a=ct(k(a).toLowerCase(),0)))return S(c,a)}while(u<o);return e-r|0}return _t(t,n)}(t,n,!0)}function dn(){l||(l=!0,new vn(pn))}function wn(){}function mn(){this.f1_1=2147483639}function gn(t,n,i){var e;null!=i?t.c(i(n)):null==n||("string"==typeof(e=n)||!0===e[$.Symbol])?t.c(n):n instanceof C?t.z1(n.c2_1):t.c(pt(n))}function yn(t,n,i){if(t===n)return!0;if(!(i=i!==h&&i))return!1;var e=ln(t),r=ln(n);return e===r||ct(k(e).toLowerCase(),0)===ct(k(r).toLowerCase(),0)}function bn(t){return at(t)-1|0}return zt("interface",$,"CharSequence",p,d,w,m,g,y),$t(z,"Number"),$t(C,"Char"),Et(A),$t(M,"Enum"),Et(V),$t(O,"Long",h,z),jt(kt,"Unit"),$t(wn,"AbstractCollection"),$t(At,"AbstractMutableCollection",h,wn),$t(Mt,"IteratorImpl"),$t(Lt,"ListIteratorImpl",h,Mt),$t(Vt,"AbstractMutableList",h,At),Et(Ot),$t(Ft,"ArrayList",qt,Vt),$t(Jt,"Exception",function t(){var n=Kt(vt(wt(Jt)));return dt(n,t),n},Error),$t(Wt,"RuntimeException",function t(){var n=Yt(vt(wt(Wt)));return dt(n,t),n},Jt),$t(Nt,"UnsupportedOperationException",Bt,Wt),$t(Pt,"IllegalStateException",function t(){var n,i=(Yt(n=vt(wt(Pt))),Pt.call(n),n);return dt(i,t),i},Wt),$t(Dt,"IllegalArgumentException",function t(){var n,i=(Yt(n=vt(wt(Dt))),Dt.call(n),n);return dt(i,t),i},Wt),$t(Qt,"NoSuchElementException",Zt,Wt),$t(nn,"IndexOutOfBoundsException",function t(){var n,i=(Yt(n=vt(wt(nn))),nn.call(n),n);return dt(i,t),i},Wt),$t(rn,"NoWhenBranchMatchedException",en,Wt),$t(un,"NullPointerException",on,Wt),$t(cn,"ClassCastException",sn,Wt),$t(hn,"KClassImpl"),$t(an,"PrimitiveKClassImpl",h,hn),$t(fn,"StringBuilder",_n,h,[$]),$t(vn,"sam$kotlin_Comparator$0"),Et(mn),wt(M).i=function(t){return _t(this.h_1,t.h_1)},wt(M).j=function(t){return this.i(t instanceof M?t:xt())},wt(M).equals=function(t){return this===t},wt(M).toString=function(){return this.g_1},wt(O).q=function(t){return T(this,t)},wt(O).j=function(t){return this.q(t instanceof O?t:xt())},wt(O).toString=function(){return D(this,10)},wt(O).valueOf=function(){return R(this)},wt(kt).toString=function(){return"kotlin.Unit"},wt(At).toJSON=function(){return this.toArray()},wt(At).r=function(){},wt(Mt).e=function(){return this.u_1<this.w_1.s()},wt(Mt).f=function(){if(!this.e())throw Zt();var t=this.u_1;return this.u_1=t+1|0,this.v_1=t,this.w_1.x(this.v_1)},wt(Mt).y=function(){if(-1===this.v_1)throw Tt(pt("Call next() or previous() before removing element from the iterator."));this.w_1.a1(this.v_1),this.u_1=this.v_1,this.v_1=-1},wt(Vt).i1=function(t){return this.r(),this.h1(this.s(),t),!0},wt(Vt).j1=function(){this.r(),this.k1(0,this.s())},wt(Vt).d=function(){return new Mt(this)},wt(Vt).l1=function(t){return new Lt(this,t)},wt(Vt).k1=function(t,n){var i=this.l1(t),e=n-t|0,r=0;if(r<e)do{r=r+1|0,i.f(),i.y()}while(r<e)},wt(Ft).s=function(){return this.n1_1.length},wt(Ft).x=function(t){return this.n1_1[It(this,t)]},wt(Ft).i1=function(t){return this.r(),this.n1_1.push(t),this.z_1=this.z_1+1|0,!0},wt(Ft).h1=function(t,n){this.r(),this.n1_1.splice(function(t,n){return v.g1(n,t.s()),n}(this,t),0,n),this.z_1=this.z_1+1|0},wt(Ft).a1=function(t){return this.r(),It(this,t),this.z_1=this.z_1+1|0,t===(this.s()-1|0)?this.n1_1.pop():this.n1_1.splice(t,1)[0]},wt(Ft).k1=function(t,n){this.r(),this.z_1=this.z_1+1|0,this.n1_1.splice(t,n-t|0)},wt(Ft).j1=function(){this.r(),this.n1_1=[],this.z_1=this.z_1+1|0},wt(Ft).toString=function(){return j(this.n1_1,", ","[","]",h,h,ht)},wt(Ft).r1=function(){return[].slice.call(this.n1_1)},wt(Ft).toArray=function(){return this.r1()},wt(Ft).r=function(){if(this.o1_1)throw Bt()},wt(an).x1=function(){return this.v1_1},wt(hn).toString=function(){return"class "+this.x1()},wt(fn).a=function(){return this.y1_1.length},wt(fn).b=function(t){var n=this.y1_1;if(!(0<=t&&t<=(at(n)-1|0)))throw tn("index: "+t+", length: "+this.a()+"}");return ut(n,t)},wt(fn).z1=function(t){return this.y1_1=this.y1_1+k(t),this},wt(fn).c=function(t){return this.y1_1=this.y1_1+L(t),this},wt(fn).toString=function(){return this.y1_1},wt(vn).b2=function(t,n){return this.a2_1(t,n)},wt(vn).compare=function(t,n){return this.b2(t,n)},wt(wn).t=function(){return 0===this.s()},wt(wn).toString=function(){return E(this,", ","[","]",h,h,(t=this,function(n){return n===t?"(this Collection)":L(n)}));var t},wt(wn).toArray=function(){return Ct(this)},wt(mn).q1=function(t,n){if(t<0||t>=n)throw tn("index: "+t+", size: "+n)},wt(mn).g1=function(t,n){if(t<0||t>n)throw tn("index: "+t+", size: "+n)},new A,_=new kt,v=new mn,t.$_$=t.$_$||{},t.$_$.a=h,t.$_$.b=_,t.$_$.c=qt,t.$_$.d=function(t){return t},t.$_$.e=$t,t.$_$.f=Et,t.$_$.g=function(t){return"number"==typeof t||t instanceof O},t.$_$.h=function(t,n){var i=new Error;return i.message=mt(t,n),i.cause=n,i.name="Throwable",i},t.$_$.i=function(t){return Number(t)},t.$_$.j=wt,t.$_$.k=function(t,n,i){i=i===h?t:i;var e=function(t,n,i,e){var r;if(i=i===h?bn(t):i,(e=e!==h&&e)||"string"!=typeof t)r=function(t,n,i,e){if(i=i===h?bn(t):i,!(e=e!==h&&e)&&1===n.length&&"string"==typeof t){var r=k(function(t){var n;switch(t.length){case 0:throw Gt("Array is empty.");case 1:n=t[0];break;default:throw Rt("Array has more than one element.")}return n}(n));return t.lastIndexOf(r,i)}var o=function(t,n){return t>n?n:t}(i,bn(t));if(0<=o)do{var u=o;o=o+-1|0;var s,c=ut(t,u);t:{for(var a=0,_=n.length;a<_;){var f=n[a];if(a=a+1|0,yn(f,c,e)){s=!0;break t}}s=!1}if(s)return u}while(0<=o);return-1}(t,(u=[n],s=new Uint16Array(u),s.$type$="CharArray",s),i,e);else{var o=k(n);r=t.lastIndexOf(o,i)}var u,s;return r}(t,n);return-1===e?i:function(t,n,i){return dn(),t.substring(n,i)}(t,0,e)},t.$_$.l=M,t.$_$.m=xt,t.$_$.n=function(t){var n;return null==t?function(){throw on()}():n=t,n},t.$_$.o=function(){throw en()},t})?i.apply(n,[n]):i)||(t.exports=e)},607(t,n,i){var e,r,o;r=[n,i(650),i(36)],void 0===(o="function"==typeof(e=function(t,n,i){"use strict";var e,r,o,u=n.Entity,s=n.init,c=n.LightManager,a=i.$_$.b,h=i.$_$.a,_=i.$_$.h,f=i.$_$.m,l=i.$_$.g,v=i.$_$.i,p=i.$_$.j,d=i.$_$.e,w=i.$_$.f,m=i.$_$.c,g=i.$_$.d,y=i.$_$.k,b=i.$_$.o,x=i.$_$.n,$=i.$_$.l;function z(){var t,n={version:"3.6.0"};n.createViewer=((t=function(t){return j(t,!0,!0)}).callableName="jsCreateViewer",t),n.createViewerAutoRotate=function(){var t=function(t,n){return j(t,n,!0)};return t.callableName="jsCreateViewerAutoRotate",t}(),n.createViewerFull=function(){var t=function(t,n,i,e,r,o,u,s){return j(t,n,i,e,r,o,u,s)};return t.callableName="jsCreateViewerFull",t}(),n.modelViewer=function(){var t=function(t,n){return i=n,j(t,!0,!0).then((e=i,function(t){return t.loadModel(e),t}));var i,e};return t.callableName="jsModelViewer",t}(),n.modelViewerAutoRotate=function(){var t=function(t,n,i){return e=n,j(t,i,!0).then((r=e,function(t){return t.loadModel(r),t}));var e,r};return t.callableName="jsModelViewerAutoRotate",t}(),window.sceneview=n,console.log("SceneView Web v3.6.0 loaded")}function j(t,n,i,r,o,u,s,c){r=r===h?0:r,o=o===h?1.5:o,u=u===h?5:u,s=s===h?45:s,c=c===h?5e4:c;var f=document.getElementById(t),l=f instanceof HTMLCanvasElement?f:null;if(null==l)return Promise.reject(_("Canvas element '"+t+"' not found"));var v,p,d,w,m,g,y,b,x=l;return 0!==x.width&&0!==x.height||(x.width=x.clientWidth,x.height=x.clientHeight),new Promise((v=x,p=n,d=i,w=r,m=o,g=u,y=s,b=c,function(t,n){try{var i=e,r=function(t,n,i,e,r,o,u){return function(s){return s.u3(function(t,n,i,e){return function(r){return r.u2(t,n,i),r.v2(0,0,0),r.w2(e),a}}(i,e,r,o)),s.v3(function(t){return function(n){return n.i3(),n.j3(t),n.k3(.6,-1,-.8),a}}(u)),s.w3(t),s.x3(n),a}}(p,d,w,m,g,y,b);i.u4(v,h,r,function(t,n){return function(i){i.o4(),window.addEventListener("resize",function(t){return function(n){return t.width=t.clientWidth,t.height=t.clientHeight,a}}(n));var e=new T;return e.r4(i),t(e),a}}(t,v))}catch(t){if(!(t instanceof Error))throw t;n(t)}return a}))}function E(t){var n;t.v4_1.addEventListener("mousedown",(n=t,function(t){var i=t instanceof MouseEvent?t:f(),e=i.button;return 0===e?n.q5_1=!0:2===e&&(n.r5_1=!0),n.s5_1=i.clientX,n.t5_1=i.clientY,i.preventDefault(),a})),t.v4_1.addEventListener("mousemove",function(t){return function(n){var i=n instanceof MouseEvent?n:f(),e=i.clientX-t.s5_1,r=i.clientY-t.t5_1;return t.s5_1=i.clientX,t.t5_1=i.clientY,t.q5_1?t.m5_1?(t.o5_1=-e*t.h5_1,t.p5_1=-r*t.h5_1):(t.x4_1=t.x4_1-e*t.h5_1,t.y4_1=t.y4_1-r*t.h5_1):t.r5_1&&(t.a5_1=t.a5_1+e*t.j5_1*t.z4_1,t.b5_1=t.b5_1-r*t.j5_1*t.z4_1),a}}(t)),t.v4_1.addEventListener("mouseup",function(t){return function(n){return t.q5_1=!1,t.r5_1=!1,a}}(t)),t.v4_1.addEventListener("mouseleave",function(t){return function(n){return t.q5_1=!1,t.r5_1=!1,a}}(t)),t.v4_1.addEventListener("wheel",function(t){return function(n){var i=n instanceof WheelEvent?n:f(),e=i.deltaY>0?1:-1;t.z4_1=t.z4_1*(1+e*t.i5_1);var r=t,o=t.d5_1,u=t.e5_1,s=t.z4_1,c=Math.min(u,s);return r.z4_1=Math.max(o,c),i.preventDefault(),a}}(t),{passive:!1}),t.v4_1.addEventListener("contextmenu",S),t.v4_1.addEventListener("touchstart",function(t){return function(n){var i=n;if(1==i.touches.length){t.q5_1=!0;var e=t,r=i.touches[0].clientX;e.s5_1=v(l(r)?r:f());var o=t,u=i.touches[0].clientY;o.t5_1=v(l(u)?u:f())}return n.preventDefault(),a}}(t),{passive:!1}),t.v4_1.addEventListener("touchmove",function(t){return function(n){var i=n;if(t.q5_1&&1==i.touches.length){var e=i.touches[0].clientX,r=v(l(e)?e:f())-t.s5_1,o=i.touches[0].clientY,u=v(l(o)?o:f())-t.t5_1,s=t,c=i.touches[0].clientX;s.s5_1=v(l(c)?c:f());var h=t,_=i.touches[0].clientY;h.t5_1=v(l(_)?_:f()),t.m5_1?(t.o5_1=-r*t.h5_1,t.p5_1=-u*t.h5_1):(t.x4_1=t.x4_1-r*t.h5_1,t.y4_1=t.y4_1-u*t.h5_1)}else if(2==i.touches.length){var p=i.touches[0].clientX,d=v(l(p)?p:f()),w=i.touches[1].clientX,m=d-v(l(w)?w:f()),g=i.touches[0].clientY,y=v(l(g)?g:f()),b=i.touches[1].clientY,x=y-v(l(b)?b:f()),$=m*m+x*x,z=Math.sqrt($);if(t.u5_1>0){var j=t.u5_1-z;t.z4_1=t.z4_1*(1+.005*j);var E=t,S=t.d5_1,k=t.e5_1,C=t.z4_1,A=Math.min(k,C);E.z4_1=Math.max(S,A)}t.u5_1=z}return n.preventDefault(),a}}(t),{passive:!1}),t.v4_1.addEventListener("touchend",function(t){return function(n){return t.q5_1=!1,t.u5_1=-1,a}}(t))}function S(t){return t.preventDefault(),a}function k(t,n){this.v4_1=t,this.w4_1=n,this.x4_1=.7853981633974483,this.y4_1=1.2217304763960306,this.z4_1=5,this.a5_1=0,this.b5_1=0,this.c5_1=0,this.d5_1=.5,this.e5_1=50,this.f5_1=.1,this.g5_1=3.041592653589793,this.h5_1=.005,this.i5_1=.1,this.j5_1=.003,this.k5_1=!1,this.l5_1=.008726646259971648,this.m5_1=!0,this.n5_1=.95,this.o5_1=0,this.p5_1=0,this.q5_1=!1,this.r5_1=!1,this.s5_1=0,this.t5_1=0,E(this),this.u5_1=-1}function C(t){return a}function A(t,n,i){i=i===h?0:i,this.y5_1=t,this.z5_1=n,this.a6_1=i}function M(){this.s4_1="https://sceneview.github.io/assets/environments/neutral_ibl.ktx",this.t4_1="https://sceneview.github.io/assets/environments/neutral_skybox.ktx"}function L(t,n){if(!t.h4_1)return a;if(t.n4_1){var i=t.y3_1.clientWidth,e=t.y3_1.clientHeight;i>0&&e>0&&(i!==t.y3_1.width||e!==t.y3_1.height)&&t.c6(i,e)}var r=t.m4_1;null==r||r.v5();var o=t.i4_1>0?(n-t.i4_1)/1e3:0;t.i4_1=n;for(var u=t.j4_1.d();u.e();){var s=u.f(),c=s.z5_1;if(null==c);else if(c.getAnimationCount()>0){s.a6_1=s.a6_1+o;var h=c.getAnimationDuration(0);h>0&&(s.a6_1=s.a6_1%h),c.applyAnimation(0),c.updateBoneMatrices()}}t.z3_1.execute(),t.a4_1.beginFrame(t.e4_1)&&(t.a4_1.renderView(t.c4_1),t.a4_1.endFrame());var _,f,l=window;t.g4_1=l.requestAnimationFrame((_=t,(f=function(t){return L(_,t),a}).callableName="renderLoop",f))}function V(t){return t.arrayBuffer()}function O(t,n,i,e,r){return function(o){var u=t.createAsset(o);if(null!=u){var s,c=u.getEntities();n.b4_1.addEntities(c);try{s=u.getInstance().getAnimator()}catch(t){if(!(t instanceof Error))throw t;s=null}var h=new A(u,s);n.j4_1.i1(h),u.loadResources(function(t,n,i,e){return function(){return t.releaseSourceData(),console.log("SceneView: Model loaded from "+n+" ("+i.length+" entities)"),null==e||e(t),a}}(u,e,c,r),null,i,null)}else console.error("SceneView: AssetLoader failed to parse model from "+e);return a}}function q(t){return t.arrayBuffer()}function I(t){return t.arrayBuffer()}function F(t,n,i,e,r,o,u,s){this.y3_1=t,this.z3_1=n,this.a4_1=i,this.b4_1=e,this.c4_1=r,this.d4_1=o,this.e4_1=u,this.f4_1=s,this.g4_1=null,this.h4_1=!1,this.i4_1=0,this.j4_1=m(),this.k4_1=null,this.l4_1=m(),this.m4_1=null,this.n4_1=!0}function B(t){this.l3_1=t,this.m3_1=null,this.n3_1=null,this.o3_1=m(),this.p3_1=null,this.q3_1=null,this.r3_1=!0,this.s3_1=!1,this.t3_1=!0}function N(t,n){return function(i,e){try{t.f6(n,function(t,n){return function(i){return t(n),a}}(i,n))}catch(t){if(!(t instanceof Error))throw t;e(t)}return a}}function T(){this.p4_1=null,this.q4_1=!1}function P(t,n,i){var e=[];return e.push(t,n,i),e}function R(t,n,i,e){var r=[];return r.push(t,n,i,e),r}function D(){this.d2_1=0,this.e2_1=1.5,this.f2_1=5,this.g2_1=0,this.h2_1=0,this.i2_1=0,this.j2_1=0,this.k2_1=1,this.l2_1=0,this.m2_1=45,this.n2_1=.1,this.o2_1=1e3,this.p2_1=16,this.q2_1=.008,this.r2_1=100,this.s2_1=1.1,this.t2_1=!0}function Y(){this.x2_1=W(),this.y2_1=1e5,this.z2_1=1,this.a3_1=1,this.b3_1=1,this.c3_1=0,this.d3_1=-1,this.e3_1=-.5,this.f3_1=0,this.g3_1=3,this.h3_1=0}function X(t,n){$.call(this,t,n)}function W(){return function(){if(o)return a;o=!0,r=new X("DIRECTIONAL",0),new X("POINT",1),new X("SPOT",2)}(),r}return d(k,"OrbitCameraController"),d(A,"LoadedModel"),w(M),d(F,"SceneView"),d(B,"SceneViewBuilder"),d(T,"SceneViewJS",T),d(D,"CameraConfig",D),d(Y,"LightConfig",Y),d(X,"LightType",h,$),p(k).v2=function(t,n,i){this.a5_1=t,this.b5_1=n,this.c5_1=i},p(k).v5=function(){this.k5_1&&!this.q5_1&&(this.x4_1=this.x4_1+this.l5_1),this.m5_1&&(this.x4_1=this.x4_1+this.o5_1,this.y4_1=this.y4_1+this.p5_1,this.o5_1=this.o5_1*this.n5_1,this.p5_1=this.p5_1*this.n5_1);var t=this.f5_1,n=this.g5_1,i=this.y4_1,e=Math.min(n,i);this.y4_1=Math.max(t,e);var r=this.d5_1,o=this.e5_1,u=this.z4_1,s=Math.min(o,u);this.z4_1=Math.max(r,s);var c=this.a5_1,a=this.z4_1,h=this.y4_1,_=a*Math.sin(h),f=this.x4_1,l=c+_*Math.sin(f),v=this.b5_1,p=this.z4_1,d=this.y4_1,w=v+p*Math.cos(d),m=this.c5_1,g=this.z4_1,y=this.y4_1,b=g*Math.sin(y),x=this.x4_1,$=m+b*Math.cos(x);this.w4_1.lookAt(P(l,w,$),P(this.a5_1,this.b5_1,this.c5_1),P(0,1,0))},p(k).w5=function(){},p(M).b6=function(t,n,i,e){var r,o,c;s(n,(r=t,o=i,c=e,function(){try{var t=Filament.Engine.create(r),n=t.createRenderer(),i=t.createScene(),e=t.createSwapChain(),s=t.createView(),h=Filament.EntityManager.get().create(),_=h instanceof u?h:f(),l=t.createCamera(_);s.setCamera(l),s.setScene(i);var v=r.width,p=r.height;s.setViewport(R(0,0,v,p));var d=p>0?v/p:1;l.setProjectionFov(45,d,.1,1e3),l.lookAt(P(0,1.5,5),P(0,0,0),P(0,1,0)),l.setExposureDirect(1.1),n.setClearOptions({clearColor:[.05,.05,.07,1],clear:!0}),s.setAmbientOcclusionOptions({enabled:!0,radius:.3,bias:5e-4,intensity:1,quality:1}),s.setBloomOptions({enabled:!0,strength:.1,threshold:!0,levels:4}),s.setTemporalAntiAliasingOptions({enabled:!0});var w=new F(r,t,n,i,s,l,e,_),m=new B(w);o(m),m.x5(),c(w)}catch(t){if(!(t instanceof Error))throw t;var g=t;console.error("SceneView: Failed to initialize Filament engine",g)}return a}))},p(M).u4=function(t,n,i,e,r){var o;return n=n===h?[]:n,i=i===h?C:i,r===h?(this.b6(t,n,i,e),o=a):o=r.b6.call(this,t,n,i,e),o},p(F).d6=function(t,n,i,e,r){var o=new k(this.y3_1,this.d4_1);o.z4_1=t,o.v2(n,i,e),o.k5_1=r;var u=o;return this.m4_1=u,u},p(F).c6=function(t,n){if(t<=0||n<=0)return a;this.y3_1.width=t,this.y3_1.height=n,this.c4_1.setViewport(R(0,0,t,n)),this.d4_1.setProjectionFov(45,t/n,.1,1e3)},p(F).o4=function(){if(this.h4_1)return a;this.h4_1=!0,this.i4_1=0,L(this,0)},p(F).e6=function(){this.h4_1=!1;var t=this.g4_1;null==t||window.cancelAnimationFrame(t),this.g4_1=null},p(F).f6=function(t,n){var i,e=this.k4_1;if(null==e){var r=this.z3_1.createAssetLoader();this.k4_1=r,i=r}else i=e;var o,u=i,s=y(t,g(47))+"/",c=window.fetch(t).then(V),h=O(u,this,s,t,n);c.then(h).catch((o=t,function(t){return console.error("SceneView: Error fetching model from "+o,t),a}))},p(F).g6=function(){this.h6("https://sceneview.github.io/assets/environments/neutral_ibl.ktx")},p(F).i6=function(t,n){var i,e,r,o=window.fetch(t).then(q),u=(i=this,e=t,function(t){var n=i.z3_1.createIblFromKtx1(t);return i.b4_1.setIndirectLight(n),console.log("SceneView: IBL loaded from "+e),a});if(o.then(u).catch(function(t){return function(n){return console.error("SceneView: Error loading IBL from "+t,n),a}}(t)),null==n);else{var s=window.fetch(n).then(I),c=function(t,n){return function(i){var e=t.z3_1.createSkyFromKtx1(i);return t.b4_1.setSkybox(e),console.log("SceneView: Skybox loaded from "+n),a}}(this,n);s.then(c).catch((r=n,function(t){return console.error("SceneView: Error loading skybox from "+r,t),a}))}},p(F).h6=function(t,n,i){var e;return n=n===h?null:n,i===h?(this.i6(t,n),e=a):e=i.i6.call(this,t,n),e},p(F).j6=function(t){var n,i=Filament.EntityManager.get().create(),e=i instanceof u?i:f();switch(t.x2_1.h_1){case 0:n=1;break;case 1:n=2;break;case 2:n=4;break;default:b()}var r=n,o=c.Builder(r);o.intensity(t.y2_1),o.color(P(t.z2_1,t.a3_1,t.b3_1)),o.castShadows(!0),t.x2_1.equals(W())?o.direction(P(t.c3_1,t.d3_1,t.e3_1)):(o.position(P(t.f3_1,t.g3_1,t.h3_1)),o.falloff(10)),o.build(this.z3_1,e),this.b4_1.addEntity(e),this.l4_1.i1(e)},p(F).k6=function(){if(this.j4_1.t())return a;var t=this.m4_1;if(null==t)return a;for(var n=t,i=17976931348623157e292,e=17976931348623157e292,r=17976931348623157e292,o=-17976931348623157e292,u=-17976931348623157e292,s=-17976931348623157e292,c=this.j4_1.d();c.e();){var h=c.f().y5_1.getBoundingBox(),_=h.min,p=h.max,d=_[0];if(v(l(d)?d:f())<i){var w=_[0];i=v(l(w)?w:f())}var m=_[1];if(v(l(m)?m:f())<e){var g=_[1];e=v(l(g)?g:f())}var y=_[2];if(v(l(y)?y:f())<r){var b=_[2];r=v(l(b)?b:f())}var x=p[0];if(v(l(x)?x:f())>o){var $=p[0];o=v(l($)?$:f())}var z=p[1];if(v(l(z)?z:f())>u){var j=p[1];u=v(l(j)?j:f())}var E=p[2];if(v(l(E)?E:f())>s){var S=p[2];s=v(l(S)?S:f())}}var k=(i+o)/2,C=(e+u)/2,A=(r+s)/2,M=o-i,L=u-e,V=s-r,O=M*M+L*L+V*V,q=Math.sqrt(O)/2;n.v2(k,C,A),n.z4_1=2.5*q,n.d5_1=.5*q,n.e5_1=10*q},p(F).l6=function(){this.e6();var t=this.m4_1;null==t||t.w5();var n=this.k4_1;if(null==n);else{for(var i=this.j4_1.d();i.e();){var e=i.f();n.destroyAsset(e.y5_1)}n.delete()}this.j4_1.j1();for(var r=this.l4_1.d();r.e();){var o=r.f();this.z3_1.destroyEntity(o)}this.l4_1.j1(),this.z3_1.destroyRenderer(this.a4_1),this.z3_1.destroyView(this.c4_1),this.z3_1.destroyScene(this.b4_1),this.z3_1.destroyCameraComponent(this.f4_1),this.z3_1.destroySwapChain(this.e4_1),Filament.Engine.destroy(this.z3_1)},p(B).u3=function(t){var n=new D;t(n),this.m3_1=n},p(B).v3=function(t){var n=new Y;t(n),this.n3_1=n},p(B).x3=function(t){this.r3_1=t},p(B).w3=function(t){this.s3_1=t},p(B).x5=function(){var t=this.m3_1;if(null==t||t.m6(this.l3_1.d4_1),null!=this.n3_1)this.l3_1.j6(x(this.n3_1));else{var n=new Y;n.i3(),n.j3(5e4),n.k3(.6,-1,-.8);var i=n;this.l3_1.j6(i);var e=new Y;e.i3(),e.j3(25e3),e.k3(-.6,-.5,.8);var r=e;this.l3_1.j6(r);var o=new Y;o.i3(),o.j3(3e4),o.n6(.85,.9,1),o.k3(0,-.3,1);var u=o;this.l3_1.j6(u)}null!=this.p3_1?this.l3_1.i6(x(this.p3_1),this.q3_1):this.t3_1&&this.l3_1.g6();for(var s=this.o3_1.d();s.e();){var c=s.f();this.l3_1.f6(c.o6_1,c.p6_1)}if(this.r3_1){var a=this.m3_1,h=null==a?null:a.f2_1,_=null==h?5:h,f=null==a?null:a.g2_1,l=null==f?0:f,v=null==a?null:a.h2_1,p=null==v?0:v,d=null==a?null:a.i2_1;this.l3_1.d6(_,l,p,null==d?0:d,this.s3_1)}},p(T).r4=function(t){this.p4_1=t},p(T).loadModel=function(t){var n=this.p4_1;return null==n?Promise.reject(_("SceneViewer not initialized")):new Promise(N(n,t))},p(T).setEnvironment=function(t){var n=this.p4_1;null==n||n.i6(t,null)},p(T).setEnvironmentWithSkybox=function(t,n){var i=this.p4_1;null==i||i.i6(t,n)},p(T).setCameraOrbit=function(t,n,i){var e=this.p4_1,r=null==e?null:e.m4_1;null==r||(r.x4_1=t,r.y4_1=n,r.z4_1=i)},p(T).setCameraTarget=function(t,n,i){var e=this.p4_1,r=null==e?null:e.m4_1;null==r||r.v2(t,n,i)},p(T).setAutoRotate=function(t){var n=this.p4_1,i=null==n?null:n.m4_1;null==i||(i.k5_1=t)},p(T).setAutoRotateSpeed=function(t){var n=this.p4_1,i=null==n?null:n.m4_1;null==i||(i.l5_1=t)},p(T).setZoomLimits=function(t,n){var i=this.p4_1,e=null==i?null:i.m4_1;null==e||(e.d5_1=t,e.e5_1=n)},p(T).startRendering=function(){var t=this.p4_1;null==t||t.o4()},p(T).stopRendering=function(){var t=this.p4_1;null==t||t.e6()},p(T).resize=function(t,n){var i=this.p4_1;null==i||i.c6(t,n)},p(T).setBackgroundColor=function(t,n,i,e){var r=this.p4_1;if(null==r)return a;var o=r,u={},s=[];s.push(t,n,i,e),u.clearColor=s,u.clear=!0,o.a4_1.setClearOptions(u)},p(T).fitToModels=function(){var t=this.p4_1;null==t||t.k6()},p(T).dispose=function(){if(!this.q4_1){this.q4_1=!0;var t=this.p4_1;null==t||t.l6(),this.p4_1=null}},p(D).u2=function(t,n,i){this.d2_1=t,this.e2_1=n,this.f2_1=i},p(D).v2=function(t,n,i){this.g2_1=t,this.h2_1=n,this.i2_1=i},p(D).w2=function(t){this.m2_1=t},p(D).m6=function(t){t.lookAt(P(this.d2_1,this.e2_1,this.f2_1),P(this.g2_1,this.h2_1,this.i2_1),P(this.j2_1,this.k2_1,this.l2_1)),this.t2_1&&null!=this.s2_1?t.setExposureDirect(x(this.s2_1)):t.setExposure(this.p2_1,this.q2_1,this.r2_1)},p(Y).i3=function(){this.x2_1=W()},p(Y).j3=function(t){this.y2_1=t},p(Y).n6=function(t,n,i){this.z2_1=t,this.a3_1=n,this.b3_1=i},p(Y).k3=function(t,n,i){this.c3_1=t,this.d3_1=n,this.e3_1=i},e=new M,function(t){var n=t.io||(t.io={}),i=n.github||(n.github={}),e=i.sceneview||(i.sceneview={});(e.web||(e.web={})).SceneViewer=T}(t),z(),t})?e.apply(n,r):e)||(t.exports=o)},650(n){"use strict";n.exports=t}},i={},function t(e){var r=i[e];if(void 0!==r)return r.exports;var o=i[e]={exports:{}};return n[e](o,o.exports,t),o.exports}(607);var n,i});
|
|
2
|
+
//# sourceMappingURL=sceneview-web.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneview-web.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,aACR,mBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,CAAC,YAAaJ,GACK,iBAAZC,QACdA,QAAQ,iBAAmBD,EAAQG,QAAQ,aAE3CJ,EAAK,iBAAmBC,EAAQD,EAAe,SAChD,CATD,CASGO,WAAaC,IAChB,O,mBCD8B,iBAAf,aACX,OAAO,eAAe,OAAO,UAAW,YAAa,CACjD,IADiD,WAE7C,OAAO,I,EAEX,cAAc,IAElB,UAAU,WAAa,iBAChB,OAAO,UAAU,gBCPM,IAAvB,YAAY,SACnB,YAAY,OAAO,SAAWC,GAC1B,OAAY,MAAL,GAA4B,MAAf,EAAE,WAAqB,EAAE,UAAU,YAAc,UAAU,UAAU,S,uIC0qwBlFC,EAA0BC,EAAgCC,EAA2BC,EAA4BC,EAAiBC,EAAiCC,GAC9K,O,QAD+D,K,UAA6B,G,UAA4B,G,WAAiB,E,UAA8B,M,UAA2C,K,WA9NvLN,EAAoBO,EAAWN,EAAgCC,EAA2BC,EAA4BC,EAAiBC,EAAiCC,G,QAA/G,K,UAA6B,G,UAA4B,G,WAAiB,E,UAA8B,M,UAA2C,K,EACvO,EAAO,EAAO,G,IACdE,EAAY,EACI,e,OAAhB,EAAgB,GAAhB,C,IAAKC,EAAW,KAER,GAFQ,SACN,IAAF,EAAE,GAAQ,GAAG,EAAO,EAAO,KAC3B,EAAQ,GAAK,GAAS,GAEnB,QADI,GAAP,EAAqB,EAAS,E,CAKtC,OAFI,GAAS,GAAK,EAAQ,GAAO,EAAO,EAAO,GAC/C,EAAO,EAAO,GACP,CACX,CAmNW,GAAO,KAAiB,EAAW,EAAQ,EAAS,EAAO,EAAW,GAAW,UAC5F,C,WClppBeT,EAAyBC,EAAgCC,EAA2BC,EAA4BC,EAAiBC,EAAiCC,GAC7K,O,QAD8D,K,UAA6B,G,UAA4B,G,WAAiB,E,UAA8B,M,UAA2C,K,WAtBtLN,EAAmBO,EAAWN,EAAgCC,EAA2BC,EAA4BC,EAAiBC,EAAiCC,G,QAA/G,K,UAA6B,G,UAA4B,G,WAAiB,E,UAA8B,M,UAA2C,K,EACtO,EAAO,EAAO,G,IACdE,EAAY,EACI,Q,OAAA,OAAM,C,IAAjBC,EAAW,MAER,IADE,IAAF,EAAE,GAAQ,GAAG,EAAO,EAAO,KAC3B,EAAQ,GAAK,GAAS,GAEnB,QADI,GAAP,EAAqB,EAAS,EAEtC,CAGA,OAFI,GAAS,GAAK,EAAQ,GAAO,EAAO,EAAO,GAC/C,EAAO,EAAO,GACP,CACX,CAWW,GAAO,KAAiB,EAAW,EAAQ,EAAS,EAAO,EAAW,GAAW,UAC5F,C,WCvhHqBC,GADrB,Q,YA6GI,GAII,OAAO,OAAa,aAAa,E,0CC9GrC,C,WAV8DC,EAA0EC,GAA1E,WAA0E,UAA7F,C,WCM7BZ,G,IAA0B,EAAM,MAAN,EAAM,OAAN,GAA0B,OAA1B,QAAoB,OAApB,CAAyB,C,yBCuB9Ca,G,QACnBC,EAAc,EACdC,EAAY,GAEF,eAAV,EAAU,GAAV,C,IAAKC,EAAK,a,IACNC,EAAkB,EACI,IAAE,UAAU,QAAlCC,EAAsB,QAAyB,EAAE,QAA3B,EAET,MAAT,IACA,EAAM,KAAK,GACX,EAAc,EAAM,Q,IAGxBC,EAAgB,EAAE,WAAa,IAC/BC,EAA8B,MAAL,EAAK,KAAM,EAAX,GAET,MAAZ,IACA,EAAM,KAAK,GACX,EAAc,KAAO,IAAI,EAAa,EAAS,SAG/C,EAAc,IACd,EAAU,E,CAIlB,O,SAtCyBC,EAAeN,G,QACjC,qBAAS,GAAT,EAAS,GAAT,C,QAAA,IACHO,EAAa,EACA,eAAb,EAAa,GAAb,C,IAAKC,EAAQ,aACL,EAAI,EAAK,SACT,GAAmB,EAAK,G,CAJ7B,KAOH,EAPG,OAQP,CARA,OAAO,CASX,CA4BW,CAAiB,EAAS,EACrC,C,WAxDwBC,G,IACpBC,EAAkB,GAAc,EAChCC,EAAe,eAAS,EAAc,EAAvB,GAEfC,EAA2B,IADU,GAAd,GAGvB,OADA,EAAS,GAAe,EAAS,GAAgB,EAC1C,CACX,C,WCL6B5B,EAAiB6B,GAC1C,OAAW,EAAS,G,SCiBE7B,GAA6C,OLThD8B,E,SKHF9B,GAA0F,OAApC,GAAK,IAAM,EAAwB,CCuXvD,C,SD7X9BA,GAA+D,OAAxC,eAAa,M,SAYpCA,GAIxB,OAHG,EAAI,WAAc,WAClB,GAAI,YAAe,WACI,EAAH,CACxB,CAhB0E,CAAY,EAAC,CAkB1C,CAAY,ICwQH,MNnRlD,E,IAEmB8B,CKS+C,CDhBZ,CAAlD,EAAc,WAAW,IAEzB,IAAE,EAEV,C,WAuBsB9B,GAA8B,uBAAX,CAAU,C,WAnBnBA,GAC5B,OAAW,EAAS,GAChB,EAAqB,OAErB,EAAE,GAEV,C,WGlBiF+B,GAAc,OAAZ,EAAS,EAAI,C,WC0MlEC,GACA,O,QADY,K,EACnC,OAAO,OAAO,EAAQ,C,WAvLPC,GAKrB,OAJQ,MAAL,EAAa,O,SCiDOA,GAAkD,OARpDC,EAQ0B,EAPrC,MAAY,QAAQ,IAOuB,EAAkB,G,IARlDA,CAQmD,CDhDrE,CAAW,GAAM,QACO,mBAAf,EAAE,S,SAIUD,GAA6D,OAAvC,OAAa,UAAU,SAAS,KAAK,EAAC,CAJ3C,CAAY,GACzC,EAAE,UACf,C,WA3BoBE,EAAeC,GAC3B,OAAQ,MAAR,EACe,MAAR,EAEC,MAAR,IAIkB,iBAAT,GAA8C,mBAAhB,EAAK,OACpC,EAAK,OAAQ,GAGrB,GAAS,EACF,GAAS,EAGE,iBAAT,GAAuC,iBAAT,EAChC,IAAS,IAAkB,IAAT,GAAc,EAAgB,GAAS,EAAgB,GAE7E,IAAS,EACpB,C,WAoH0BC,EAAqBC,GACN,MAAjC,MAAY,kBACZ,MAAY,kBAAkB,EAAU,GAExC,aAAoC,OAAW,KAEvD,C,WA0DqBC,GACU,OAAxB,EAAY,SAAW,C,WAPL5B,GAAyC,OAAd,IAAU,CAAG,C,WAxCpC6B,EAAgBC,EAAkBC,GAC3D,MAAY,KAAK,G,SAIyBF,EAAgBC,EAAkBC,G,IAC5EC,EAAgB,EAAmB,OAAS,eAAe,IACvD,KAAe,EAAd,GAAyB,C,MAEN,GAAW,MAAX,E,OAEZ,GAAY,OAAZ,E,KAEA,EAAO,MAAP,EAAO,KAAP,EAAO,W,EAAP,QAAqB,EAArB,C,QAGA,E,WAED,EATP,WAUJ,CACmB,EAAd,IACD,QAAc,GAElB,OAAa,OAAS,eAAe,GAAO,YAAY,IAC5D,CAtBI,CAAiC,EAAO,EAAS,EACrD,C,aE9II,MAAM,IACV,C,WCEIC,EACAC,EACAjC,EACAkC,EACAC,EACAjC,EACAkC,EACAC,EACAC,GAEc,MAAV,IAEE,EAAK,UAAY,OAAO,OAAO,EAAO,WAAtC,EACK,UAAU,YADf,G,IAKNC,E,SAsEAP,EACAhC,EACAkC,EACAG,EACAC,EACAF,GAIA,MAAO,CACP,KAAM,EACN,WAAY,EACZ,oBAAqB,EACrB,kBAAmB,EACnB,aAAc,EACd,SARY,EASZ,mBAAoB,EACpB,IATsB,cAAR,GA3GV,IAAsB,IACtB,EAAoB,GAExB,EAAsC,EAAoB,EAA1D,GAwG0E,EAW9E,CAzFmB,CAAe,EAAM,EAAM,EAAoB,EAAqB,EAAmB,GACtG,EAAK,WAAe,EAEF,MAAd,KACmB,IAAS,IAAO,GAAgB,EAAK,UAAf,GACzC,QAAqB,EAAU,GAEvC,C,WAGIH,EACAjC,EACAkC,EACAC,EACAjC,EACAkC,EACAC,EACAC,GAGA,EADW,QACW,EAAM,EAAM,EAAoB,EAAQ,EAAY,EAAc,EAAqB,EACjH,C,WAGIL,EACAjC,EACAkC,EACAC,EACAjC,EACAkC,EACAC,EACAC,GAGA,EADW,SACW,EAAM,EAAM,EAAoB,EAAQ,EAAY,EAAc,EAAqB,EACjH,C,WAGIL,EACAjC,EACAkC,EACAC,EACAjC,EACAkC,EACAC,EACAC,GAGA,EADW,YACW,EAAM,EAAM,EAAoB,EAAQ,EAAY,EAAc,EAAqB,EACjH,C,WAcsCL,EAAYE,EAAejC,EAA6BkC,GAC1F,EAAsB,EAAM,YAAa,EAAM,EAAQ,EAAY,EAAc,EAAM,EAC3F,C,WF7DyBd,EAAckB,GACnC,O,SANwBlB,EAAckB,G,IAClB,IAAc,QAAd,gB,SNxBXnD,EAAiBoD,G,IAC1B3B,EAAkB,GAAsB,EACpC,KAAc,SAAM,OAAO,E,IAE/BE,EAA2B,IADkB,GAAtB,GAEvB,QAAoD,KAA7C,EAAI,GAAiB,GAChC,CMmBgB,CADQ,EACC,EACzB,CAGW,CAAgB,EAAK,EAAM,WAAa,IACnD,C,WAhCgCI,G,IACI,EAAN,EAAM,YAAhCmB,EAA6C,aAAnB,EAAmB,WAEnC,QAAV,EAAU,KAAV,EAAU,UAAW,WGCd,OHDP,E,IAoBuBjB,EAlBvBX,EAAa,EAIT,GAHA,EAAQ,EAAO,aAAY,GAAmB,GAC9C,EAAQ,EAAO,WAAU,GAAmB,GAElC,IAAV,EAAe,C,IACf+B,GAamBpB,EAbc,EAaE,OAAS,eAAe,IAZvD,GAAe,MAAY,YAC3B,GAAmB,EAAmB,GAE9C,CAMA,OAJgB,MAAZ,IACA,EAAS,UAAY,GAGlB,CACX,C,WAvBoBF,EAAgBuB,GAA2D,OAA9B,EAAM,eAAe,EAAQ,C,aIJ9F,C,WC2BsCC,GAAiF,O,SCic9EA,GACjC,KAAW,IAAW,MC3dwB,G,UD6dd,EAAW,IAA/CC,Eb7c8D,MAAU,Ga+cxEC,EAAe,EAAW,IAC1B7B,EAAY,EACL,EAAS,KAAW,C,IACX,QAAK,EAAL,EAAZ,EAAY,GAAW,EAAS,GACpC,CAEA,OAAO,CACX,CD7cgF,CAA4B,EAAU,C,aGvB3B,aAAjC,C,cC8GtD,WAE0B,WAKD,WAPzB,C,aA6BqCA,GAAD,WAAe,eAG9B,IAAmB,EAAO,SAAyB,KAChE,KAAK,IAAQ,CAJe,C,aAtI6C,aAW5C,UAXW,C,mCCuBtB8B,E,SH9BwB,GIuB9C,GDO8C,SAAK,KAC3C,GAAmB,GCN3B,MAAM,EAAiC,EDMN,8BAA4B,I,UAvBtB,E,SP6ErC,EO7EkD,MAAa,EAAvB,UP8EvC,CO/EP,C,8BAS8B,SHhBoB,I,mBGmLlD,EAAuB9B,GAEtB,OADgB,KAAkB,EAAO,OADL,CAErC,C,WA/KuD+B,G,eAAkC,aAAlC,YAKrB,YALA,C,qBEHJ,KAA9B,U,wBADJ,C,WAgB8BnB,G,eAAAA,E,UAAoB,GAAM,EAAN,GAA9C,W,uDAFJ,C,YAS8BA,G,eAAAA,E,UAAoB,GAAM,EAAN,GAA9C,W,wDAFJ,C,uBAoBkC,G,YAA9B,W,4CADJ,C,sBAhCkC,KAA9B,W,cAC0BA,E,mBAPAA,E,GAAoB,IAAM,GAApD,S,CAO8C,CAAM,EAAN,GAA9C,W,0BAFJ,C,uBAkEkC,G,YAA9B,W,gCAC0BA,G,eAAAA,E,UAAoB,GAAM,EAAN,GAA9C,W,wDAFJ,C,YA1C8BA,G,eAAAA,E,UAAoB,GAAM,EAAN,GAA9C,W,wDAFJ,C,uBA2BkC,G,YAA9B,W,4CADJ,C,uBA8BkC,G,YAA9B,W,4CADJ,C,uBAvBkC,G,YAA9B,W,4CADJ,C,gCChDkC,UAAK,I,oBAbqBoB,GAe3B,WAfC,C,YCmDhB5D,G,IACd6D,EAiBgD,EAjBhC,GAiBuD,cAhBvE,OAAW,EAAU,OAAS,EAAG,EAAU,IAAU,EACzD,C,cCpDgD,C,cC8HP,mBA/BrC,C,YC5Ba7D,EAAyBS,EAAYH,G,IjBqD1BI,EiBnDP,MAAb,EAAqB,IAAO,EAAU,IACtC,UjBmDe,iBADKA,EiBlDpB,IjBmD2B,EAAY,EAAO,IiBnDlB,IAAO,GACnC,eAAmB,KAAO,EAAP,MACX,IAAe,EAAR,GAEvB,C,YCgJWV,EAAY8D,EAAaC,GAC5B,OAAQ,EAAO,OAAO,EACtB,K,YAAa,OAAO,E,IAExBC,EAAqB,GAAL,GAChBC,EAAuB,GAAN,GAEjB,OAAO,IAAa,GJpN8B,EAeF,EIqMd,GJrMqC,cAfT,KAAZ,EAeF,EIqMe,GJrMQ,cAfT,EIqNlE,C,YCqJWjE,GACgB,OAAV,EAAL,GAAc,EAAC,CAAD,C,4ePzWQ,G,YAA9B,W,2EAO8B,G,YAA9B,W,gKAO8B,G,YAA9B,W,iMpB9BiC8D,GAAsC,OAAd,OAAS,CAAI,E,yBAIzB,OAAJ,QAAG,E,kB4B6jDrC,OAAH,QAAE,E,yBhBnkDyC,MAAb,aAAY,E,uBIiDF,OAAd,KAAK,SAAQ,E,kBAOA,E,kBCkEO,OAAZ,SAAQ,YAAG,E,kBAGrC,IAAC,SAAW,MAAM,K,IACf,WACP,OADO,WAAK,EAAL,EAAP,SAAO,EACA,WAAI,SACf,E,kBE1CA,IF6CkB,IAAR,SE3CV,MAAM,GAA8B,EF2CZ,yEAEpB,WAAS,UACT,SAAQ,SACR,UAAO,CACX,E,iBA1GoBrD,GAGpB,OAFA,SACA,QAAI,SAAM,IACH,CACX,E,mBAgBI,SACA,QAAY,EAAG,SACnB,E,kBAamE,OAAd,WAAa,E,iBASjCmB,GAA6D,OAAvB,WAAiB,EAAK,E,iBAQvDsC,EAAgBC,G,IAClDV,EAAe,QAAa,G,EACrB,EAAU,E,EN4DP,IAAd,KAAsB,E,GAAR,QM3DN,EAAS,IACT,EAAS,UN0DjB,EAAsB,EMxDtB,E,qBAYoBK,GACZ,WAAU,QACV,mBAEgB,KAAc,KAAM,EAC5C,E,kBClDgD,OAAV,UAAM,MAAG,E,gBAEvBlC,G,MAAiB,UAAM,OAAW,IAAY,wBAA7B,EAA6B,GAAD,E,iBAQ7CnB,GAIpB,OAHA,SACA,UAAkB,KAAK,GACvB,kBAAQ,EAAR,GACO,CACX,E,iBAEwBmB,EAAYnB,GAChC,SACA,UAAkB,O,SA8GtB,EAAgCmB,GAE/B,OADgB,IAAmB,EAAO,OADG,CAE9C,CAhH6B,MAAoB,GAAQ,EAAG,GACxD,kBAAQ,EAAR,CACJ,E,gBAuC6BA,GAIzB,OAHA,SACA,OAAW,GACX,kBAAQ,EAAR,EACW,KAAS,KJyGX,IAAO,EAAC,GIxGb,UAAkB,MAElB,UAAkB,OAAO,EAAO,GAAG,EAC3C,E,iBAcyBsC,EAAgBC,GACrC,SACA,kBAAQ,EAAR,EACA,UAAkB,OAAO,EAAW,EAAU,EAA5B,EACtB,E,mBAGI,SACA,UHhJ8C,GGiJ9C,kBAAQ,EAAR,CACJ,E,yBAOsD,OZ5JN,EY4JA,UZ5Ja,KAAM,IAAK,IAAxB,IAA6B,EY4JxB,E,mBAcjD,MAAO,GAAS,MAAM,KAAK,UAC/B,E,4DAQQ,aAAY,MAAM,IAC1B,E,mBG/JqC,OAAzB,UAAmB,MAAK,E,iBAEZvC,G,MACpB,UQ4GO,KAAS,GR5GC,OQ4GD,OAAT,IA1GoC,MAAM,GAIjD,UAAQ,EAAK,aAAW,SAAM,KRNgE,OQ4GrE,IR5GR,EAA4E,E,kBAItElB,GAEvB,OADA,sBAAU,GACH,IACX,E,iBAE2BA,GAEvB,OADA,oBAAgB,EAAN,GACH,IACX,E,0BAmawC,OAAN,SAAK,E,mBEzbI,OAAD,IAAR,QAAQ,E,0BAIzC,OAFiC,OAAa,KAAM,IAAK,IAAxB,KAAlC,EAA+D,K,SAAAoB,GACJ,OAAnD,IAAO,EAAM,oBAA4B,EAAH,EAC9C,I,IAFA,CAEA,E,yBAMmE,OAAvB,EAAkB,KAAI,E,kBC6E/BF,EAAYwC,GACnC,KAAQ,GAAK,GAAS,EACtB,MAAM,GAA2B,UAAQ,EAAK,WAAS,EAE/D,E,iBAEgCxC,EAAYwC,GACpC,KAAQ,GAAK,EAAQ,EACrB,MAAM,GAA2B,UAAQ,EAAK,WAAS,EAE/D,E,kBAyC2BC,EAAkBP,GACrC,KAAE,MAAQ,EAAM,IAAM,OAAO,E,QAEjCQ,EAAoB,EAAM,IACb,eAEL,MAFK,MACO,EAAc,KAE1B,OAAO,EAGf,OAAO,CACX,E,oHhBnDcvE,GAAkD,MAArB,iBAAN,GAAkB,a,CAAQ,E,iBD8B7CyC,EAAkBC,G,MACxC8B,EAAgB,IAAO,MACC,KAAY,G,OAC5B,KAAY,G,EAAQ,M,KAAa,EAAO,MAAP,EAAO,KAAP,EAAO,W,EAAP,QAAqB,EAArB,C,YAClC,QAAW,EAAX,EAGP,OALA,YAGA,QAAkB,EAClB,OAAiB,YACA,CACrB,E,iBHtJ4BxE,GAAiF,OAAzB,CAAwB,E,2BuBmdjGC,EAA2BwE,EAAiBC,G,QAAgC,E,MACnF7C,E,SA6pBO5B,EAAyB0E,EAAYC,EAA6BZ,G,MAC9D,G,QADmD,M,iCACrC,E,WAlKlB/D,EAA4B4E,EAAkBD,EAA6BZ,GAC9E,G,QADmE,M,iBACtC,IAAd,EAAM,Q,iBAAa,EAAgB,C,MG78BgD,E,SjCu2F/F/D,G,MACA,OAAM,U,KACT,EAAK,MAAM,GAAuB,mB,KAClC,E,EAAK,EAAK,G,cACF,MAAM,EAAyB,oCAH3C,QAKJ,C8B/5DyB,CAAN,IACX,OAAO,EI/uBqF,YAAY,EJ+uBzE,EACnC,C,IAGyB,E,SK0WlBA,EAAiB6E,GACxB,OAAW,EAAO,EAAc,EAAkB,CACtD,CL5W6B,CAAX,EAAwB,OAAtC,GAAwD,GAAxD,E,EAAA,C,IAAKjD,EAAS,W,MACVkD,EAAkB,IAAI,G,W9B28WV,M8B18WR,E9B08WQ,OAAhB,EAAgB,GAAhB,C,IAAKrE,E8B18WG,E9B08WQ,GAAU,GAAV,Q8B18WO,G9B08Wa,E8B18WN,EAAa,G,C9B08WG,GAAO,E,SACrD,GAAO,C,C8B38WC,GAAM,EACN,OAAO,C,OAHyC,GAAxD,GAMA,OAAO,CACX,CAqJQ,IMplCiBsE,ENolCU,I,EMplC8C,IAAI,YAAY,GCe7F,SDf6D,YCgBtD,GPokC+B,EAAY,O,OG/mCoD,EHinChF,G,EAAlB,EIj5B4F,YAAY,EJi5BhF,E,KMtlCPA,E,ENmlCrB,QAIJ,CAlqBgB,GAAY,GACxB,OAAoB,IAAT,EAAa,EAA2B,EI5MyC,UJ4M/B,EAAG,EACpE,E,qClB9bmCC,G,MAA6C,OAAxB,MAAL,E,WAP/C,MAAM,IACV,CAM8D,G,EAAiB,EAAC,CAAD,E,mBAlBxB,MAAM,IAA6B,E,oW0BQtFC,EAAmB,CAEnBA,QAAiB,SACjBA,EAAA,e,qBAeOC,E,GAAwC,GAAuB,EAfjC,G,iCACrCD,EAAA,uB,sCAkBOC,E,KAAqE,EAlBnB,E,mDAAzB,GAChCD,EAAA,iB,kDA8BOC,E,gBA9BsC,E,6CAAnB,GAC1BD,EAAA,Y,sCAgCgCE,E,EACzBD,E,GAAwC,GAAuB,GAAME,MAD5CC,EACiD,E,SAAEC,GAEzE,OADNA,EAAOC,UAAU,GACjBD,CACJ,I,IAJgCH,EAAAE,CAhCG,E,wCAAd,GACrBJ,EAAA,sB,wCAsC0CE,E,EACnCD,E,KAAqE,GAAME,MADxCC,EAC6C,E,SAAEC,GAE/E,OADNA,EAAOC,UAAU,GACjBD,CACJ,I,IAJ0CH,EAAAE,CAtCa,E,kDAAxB,GAE/B,iBAA4BJ,EAE5BO,QAAQC,IAAI,8BAChB,C,WA2CIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,G,QAJkB,E,UACA,I,UACA,E,UACJ,G,UACW,I,QAEZC,SAASC,eAAeT,GAAxB,mDACN,OAAOU,QAAQC,OAAO,EAAW,mBAAiBX,EAAQ,gB,IADjEY,EARAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAEAC,EAAa,EASb,OALoB,IAAhBA,EAAOC,OAA+B,IAAjBD,EAAOE,SAC5BF,EAAOC,MAAQD,EAAOG,YACtBH,EAAOE,OAASF,EAAOI,cAGpB,IAAAd,SATPE,EASe,EAjBfC,EAiBe,EAhBfC,EAgBe,EAffC,EAee,EAdfC,EAce,EAbfC,EAae,EAZfC,EAYe,EAXfC,EAWe,E,SAAEM,EAASd,GACtB,I,mBAlBJE,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,G,gBAewBO,GAaZ,OAZI,K,SApBhBX,EACAC,EACAC,EACAC,G,gBAiBuBS,GAIP,OAHI,KAAI,EAAS,EAAS,GACtB,KAAO,EAAK,EAAK,GACjB,KAAI,GACR,E,CAJO,WAKP,K,SArBhBR,G,gBAqBsBS,GAIN,OAHI,OACA,KAAU,GACV,KAAU,IAAO,GAAO,IAC5B,E,CAJM,KAKN,KAAW,GACX,KAAe,GACnB,E,CAbY,gBAFN,KACG,EADH,I,SAFDC,EATjBjB,G,gBA2BwBkB,GACRA,EAAU,KAGVC,OAAOC,iBAAiB,S,SA/BxCpB,G,gBA+BkDxE,GAGlC,OAFI,EAAOiF,MAAQ,EAAOE,YACtB,EAAOD,OAAS,EAAOE,aAC3B,E,CAHkC,K,IAKlC5B,EAAa,MAGjB,OAFIA,EAAO,GAAOkC,GACd,EAAQlC,GACZ,E,CAZU,M,2CAede,EADKsB,E,CAGb,WACJ,C,WCZI,G,IAAA,EAEI,OAAOD,iBAAiB,aAF5B,EAEyC,E,SAAEE,G,IACnCD,EAAQC,aAARD,WAAQC,EAARD,IACe,EAATA,EAAEE,OAOZ,OANQ,MAAO,QAAa,EACpB,QAAO,QAAkB,GAE7B,OAAQF,EAAEG,QACV,OAAQH,EAAEI,QACVJ,EAAEK,iBACN,KAGA,OAAON,iBAAiB,Y,SAd5B,G,gBAc2CE,G,IACnCD,EAAQC,aAARD,WAAQC,EAARD,IACAM,EAASN,EAAEG,QAAqB,OAChCI,EAASP,EAAEI,QAAqB,OAkBpC,OAjBI,OAAQJ,EAAEG,QACV,OAAQH,EAAEI,QAEN,OAEI,QACA,QAAiBE,EAAK,OACtB,QAAeC,EAAK,SAEpB,cAASD,EAAK,OACd,cAAOC,EAAK,QAET,SAEP,cAAWD,EAAK,OAAiB,OACjC,cAAWC,EAAK,OAAiB,QAEzC,E,CArBqC,KAwBrC,OAAOR,iBAAiB,U,SAtC5B,G,gBAsCuC5F,GAGnC,OAFI,QAAa,EACb,QAAkB,EACtB,E,CAHmC,KAKnC,OAAO4F,iBAAiB,a,SA3C5B,G,gBA2C0C5F,GAGtC,OAFI,QAAa,EACb,QAAkB,EACtB,E,CAHsC,KAMtC,OAAO4F,iBAAiB,Q,SAjD5B,G,gBAiDuCE,G,IAC/BD,EAAQC,aAARD,WAAQC,EAARD,IACAQ,EAAgBR,EAAES,OAAS,EAAG,GAAU,EACxC,eAAY,EAAMD,EAAQ,Q,MAC1B,E,EAAe,O,EAAiB,O,EAAa,O,ECsMI,KAAW,MAAO,GDpMvE,OAFI,OC+MiD,KAAW,MAAO,GD9MnER,EAAEK,iBACN,E,CANiC,IAM9B,CAAI,SAAS,IAGhB,OAAON,iBAAiB,cAAe,GAKvC,OAAOA,iBAAiB,a,SA/D5B,G,gBA+D4CE,G,IACpCD,EAAQC,EACJ,GAAoB,GAApBD,EAAEU,QAAQC,O,CACV,QAAa,E,MACb,E,EAASX,EAAEU,QAAQ,GAAGP,QAAtB,OAAyC,OAAhC,EAAgC,K,MACzC,E,EAASH,EAAEU,QAAQ,GAAGN,QAAtB,OAAyC,OAAhC,EAAgC,I,CAGjD,OADIH,EAAMI,iBACV,E,CARsC,IAQnC,CAAI,SAAS,IAEhB,OAAON,iBAAiB,Y,SAzE5B,G,gBAyE2CE,G,IACnCD,EAAQC,EACJ,WAAkC,GAApBD,EAAEU,QAAQC,O,OACdX,EAAEU,QAAQ,GAAGP,QAAvBG,EAA0C,OAAhC,EAAgC,KAAa,O,EAC7CN,EAAEU,QAAQ,GAAGN,QAAvBG,EAA0C,OAAhC,EAAgC,KAAa,O,EACvD,E,EAASP,EAAEU,QAAQ,GAAGP,QAAtB,OAAyC,OAAhC,EAAgC,K,MACzC,E,EAASH,EAAEU,QAAQ,GAAGN,QAAtB,OAAyC,OAAhC,EAAgC,KAErC,QACA,QAAiBE,EAAK,OACtB,QAAeC,EAAK,SAEpB,cAASD,EAAK,OACd,cAAOC,EAAK,O,MAET,GAAoB,GAApBP,EAAEU,QAAQC,O,OAEPX,EAAEU,QAAQ,GAAGP,Q,EAAmB,OAAhC,EAAgC,K,EAAcH,EAAEU,QAAQ,GAAGP,QAArEG,EAAS,EAA+E,OAAhC,EAAgC,K,EAC9EN,EAAEU,QAAQ,GAAGN,Q,EAAmB,OAAhC,EAAgC,K,EAAcJ,EAAEU,QAAQ,GAAGN,QAArEG,EAAS,EAA+E,OAAhC,EAAgC,K,EACnD,EAAK,EAAK,EAAK,EAApDK,ECtBmC,KAAW,KAAK,GDwB/C,UAAoB,EAAG,C,IACvBJ,EAAY,OAAoBI,EAChC,eAAY,EAAc,KAARJ,G,MAClB,E,EAAe,O,EAAiB,O,EAAa,O,EC0JJ,KAAW,MAAO,GD1J3D,OCmKyC,KAAW,MAAO,EDlK/D,CACA,OAAoBI,C,CAG5B,OADIX,EAAMI,iBACV,E,CA7BqC,IA6BlC,CAAI,SAAS,IAEhB,OAAON,iBAAiB,W,SAxG5B,G,gBAwGwC5F,GAGpC,OAFI,QAAa,EACb,QAAqB,EACzB,E,CAHoC,IAIxC,C,WAlD6C8F,GAEzC,OADIA,EAAMI,iBACV,E,WAvJJlB,EACA0B,GADA,YACA,YAGY,4BACF,6BACK,YAGD,YACA,YACA,YAGI,aACA,aACL,aACA,4BAGW,eACF,aACD,eAGJ,aACK,8BAGF,aACA,cACQ,YACF,YAGD,aACK,aACV,YACA,YAGhBC,EAAoB,MAgKQ,WAAC,CA1MV,C,WE2E0BzI,GAAE,QAAD,C,WAjD9C0I,EACAC,EACAC,G,QAA4B,E,EAF5B,YACA,YACA,WAHqB,C,aA6BO,4EACG,8EAHnC,C,WA0WA,EAAuBC,GACf,IAAC,OAAW,SAGZ,UAAY,C,IACZC,EAAQ,OAAO7B,YACf8B,EAAQ,OAAO7B,aACX4B,EAAI,GAAKC,EAAI,IAAMD,IAAK,OAAO/B,OAASgC,IAAK,OAAO/B,SACpD,KAAO8B,EAAGC,EAElB,C,IAGA,SAAkB,SAAlB,EAAkB,K,IAGlBC,EAAuB,OAAgB,GAAIH,EAAY,QAAiB,IAAY,EACpF,OAAgBA,E,QxCi4CJ,EwC93CZ,OxC83CY,WAAM,C,IAAjBpI,EAAW,MwC73CF,ExC63Ce,EwC73Cf,KAAU,iBAER,GAFR,EACyBwI,oBACT,EAAG,CxC23CE,EwC13CP,KxC03CO,EwC13CP,KAAiBD,E,IACvBE,EAJR,EAIgCC,qBAAqB,GACzCD,EAAW,IxCw3CF,EwCt3CH,KxCs3CG,EwCt3CmB,KAAgBA,GAPxD,EAgBiBE,eAAe,GAhBhC,EAiBiBC,oBACb,CxC22CwB,CwCt2ChC,OAAOC,UAGH,OAASC,WAAW,UACpB,OAASC,WAAW,QACpB,OAASC,Y,UAGMhC,OAAnB,OAA0B,EAAAiC,uB,EAAsB,G,6BAAW,G,6BAC/D,C,WAtP6BC,GACC,OAAtBA,EAASC,aACb,C,WAPAC,EAJJ,EAOIC,EANAC,EACAC,G,gBASSzJ,G,IACLmI,EAAY,EAAOuB,YAAY1J,GAC3B,GAAS,MAATmI,E,OAEAwB,EAAexB,EAAMyB,cACrB,OAAMC,YAAYF,GAGH,I,EACXxB,EAAM2B,cAAcC,a,6CAEpB,I,KAGJC,EAAkB,IAAAC,EAAY9B,EAN9BC,GAOA,OAAO,GAAI4B,GAIX7B,EAAM+B,c,SAlBVC,EAXJX,EAcQY,EAbRX,G,kBAkCY,OAHI,EAAMY,oBACNpF,QAAQC,IAAK,gCAA8B,EAAG,KAAI,EAAS,OAAK,cACtD,MAAV,KAAiB,GACrB,E,CALS,UAMG,KACD,EACK,K,MAGpBD,QAAQqF,MAAO,qDAAmD,GAE1E,S,YAiB0B/I,GAAkB,OAAhBA,EAAG8H,aAAc,C,WAUlB9H,GAAkB,OAAhBA,EAAG8H,aAAc,C,WApRlD9C,EACAgE,EACAC,EACAC,EACAC,EACAzC,EACA0C,EACAC,GAPA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YAEqC,eACb,aACI,YAEP,UxBsD+B,IwBrDZ,eACZ,UxBoDwB,IwB1CL,eAsJ9B,YAhLL,C,WAmdO3D,GAAA,YACuB,eACF,eACb,UxBlZyB,IwBmZtB,eACG,eACG,aACJ,aACI,YARlB,C,WCpdd4D,EADUrB,G,gBAEO5C,EAASd,GACtB,IACI,EAAG,GAAU,E,SAFJkB,EAFPwC,G,gBAIgBjI,GAElB,OADI,EAAQ,GACZ,E,CAFkB,M,2CAIlBuE,EADKsB,E,CAGb,S,cAtBiC,eACd,YAJ3B,C,WCAW0D,EAAWC,EAAWC,G,IAC7BxG,EAAU,GAEV,OADAA,EAAIyG,KAAKH,EAAGC,EAAGC,GACRxG,CACX,C,WAgBasG,EAAQC,EAAQvE,EAAYC,G,IACrCjC,EAAU,GAEV,OADAA,EAAIyG,KAAKH,EAAGC,EAAGvE,EAAOC,GACfjC,CACX,C,aCrBe,YACA,cACA,YACG,YACA,YACA,YACJ,YACA,YACA,YACO,aACD,aACD,cAEA,aACI,eACD,cACY,cACN,YAlB5B,C,aCJyB,cACL,cACH,YACA,YACA,YACI,YACA,WAAC,EACD,WAAC,GACF,YACA,YACA,WAXpB,C,gCAgCA,C,oDACI,MA/CJ,iBAgDI,MAhDJ,WAiDI,MAjDJ,S,iNNyEesG,EAAWC,EAAWC,GAC7B,UAAUF,EAAG,UAAUC,EAAG,UAAUC,CACxC,E,mBAWQ,YAAe,YACf,oBAAS,WAIT,YACA,oBAAS,UACT,oBAAO,UACP,oBAAiB,UACjB,oBAAe,W,MAIT,U,EAAY,U,EAAQ,U,ECgRuB,KAAW,MAAO,GDhRvE,UCyRqD,KAAW,MAAO,G,MDxRxD,U,EAAiB,U,EAAa,U,EC+QQ,KAAW,MAAO,GD/QvE,UCwRqD,KAAW,MAAO,G,MDrR5D,U,EAAU,U,EAAe,U,EAAf,ECnFqB,KAAW,IAAI,G,EDmFV,UAA/CE,EAAW,EAAU,ECnFqB,KAAW,IAAI,G,EDoF9C,U,EAAU,U,EAAe,UAApCC,EAAW,EAAU,EC3EqB,KAAW,IAAI,G,ED4E9C,U,EAAU,U,EAAe,U,EAAf,ECrFqB,KAAW,IAAI,G,EDqFV,UAA/CC,EAAW,EAAU,EC5EqB,KAAW,IAAI,GD+EzD,UAAOC,OACHC,EAAOJ,EAAMC,EAAMC,GACnBE,EAAO,UAAS,UAAS,WACzBA,EAAO,EAAK,EAAK,GAEzB,E,mBAKA,E,iBEjBQ/E,EACAgF,EACAC,EACAC,G,IAHA1F,EAEA2F,EACAC,EAGAC,EAAKL,GANLxF,EAMa,EAJb2F,EAIa,EAHbC,EAGa,E,WACT,I,IAKIpB,EADwB,SACMsB,OAAOC,OAAO,GAC5CtB,EAAeD,EAAOwB,iBACtBtB,EAAYF,EAAOyB,cACnBrB,EAAgBJ,EAAO0B,kBACvBvB,EAAWH,EAAO2B,a,EAGK,SAAS,cAAc,MAAM,SAApDtB,EAAAA,aAAAA,EAAoB,EAApBA,IACA3C,EAAasC,EAAO4B,aAAavB,GAGjCF,EAAK0B,UAAUnE,GACfyC,EAAK2B,SAAS5B,G,IAGdjE,EAAY,EAAOA,MACnBC,EAAa,EAAOA,OACpBiE,EAAK4B,YAAYC,EAAS,EAAG,EAAG/F,EAAOC,I,IAGvC+F,EAAiB/F,EAAS,EAAGD,EAAmBC,EAAuB,EACvEwB,EAAOwE,iBACY,GACND,EACF,GACD,KAIVvE,EAAOoD,OACHC,EAAO,EAAK,IAAK,GACjBA,EAAO,EAAK,EAAK,GACjBA,EAAO,EAAK,EAAK,IAKrBrD,EAAOyE,kBAAkB,KAGzBlC,EAASmC,gBAAgB,CAAK,WAAY,CAAC,IAAM,IAAM,IAAM,GAAM,OAAO,IAI1EjC,EAAKkC,2BAA2B,CAC5BC,SAAS,EACTC,OAAQ,GACRC,KAAM,KACNC,UAAW,EACXC,QAAS,IAIbvC,EAAKwC,gBAAgB,CACjBL,SAAS,EACTM,SAAU,GACVC,WAAW,EACXC,OAAQ,IAIZ3C,EAAK4C,+BAA+B,CAChCT,SAAS,I,IAGb5F,EAAgB,IAAAsG,EACZ,EAAQhD,EAAQC,EAAUC,EAAOC,EAAMzC,EAAQ0C,EAAWC,GAI9D4C,EAAc,IAAAC,EAAiBxG,GACvB,EAARuG,GACAA,EAAQ,KAER,EAAQvG,E,+CACHG,EAAAA,EACLnC,QAAQqF,MAAM,kDAAmDlD,E,CAEzE,WACJ,E,iBA3FIb,EACAgF,EACAC,EACAC,E,wBvB5F0C,G,UuB2FD,E,6EAtC7CiC,EACAC,EACAC,EACAC,EACAzI,G,MAEiB,IAAA0I,EAAsB,UAAQ,WACtC,OAAWJ,EAChB,KAAOC,EAASC,EAASC,GACpB,OAAazI,E,IAHtB2I,E3BYG,E2BNH,OADA,UAAmBA,EACZA,CACX,E,iBAsHWvH,EAAiCC,GACpC,GAAAD,GAAS,GAAKC,GAAU,EAAG,SAC/B,UAAOD,MAAQA,EACf,UAAOC,OAASA,EAChB,UAAK6F,YAAYC,EAAS,EAAG,EAAG/F,EAAOC,IACvC,UAAOgG,iBACY,GACNjG,EAAmBC,EACrB,GACD,IAEd,E,mBAOQ,aAAW,SACf,WAAY,EACZ,UAAgB,EAChBuH,EAAW,OACf,E,mBAII,WAAY,E,IACZ,YAAkB,SAAM9G,OAAO+G,qBAA/B,GACA,UAAmB,IACvB,E,iBAgBIC,EACAC,G,MAEa,uB,OAAe,UAAOC,oBAA2B,U3BnJ5D,E,EACC,C,Q2BkJU,E,IAHb5E,EAGA6E,EAAAA,EAGAC,EAAmBC,EAAJL,EAAwB,OAAO,I,EAE9ChH,OAAOsH,MAAMN,GAAKrJ,KAAK,G,EAEhB,gBKlN0B,OAAK,GLmPpC4J,OA3CFjF,EA2CQ,E,SAAEc,GAEV,OADIrF,QAAQqF,MAAO,wCAAsC,EAAMA,GAC/D,IACJ,E,mBAQI,QAAgB,kEACpB,E,iBAGoBoE,EAAgBC,G,IAApC,EAAoBC,E,IAEhB1H,OAAOsH,MAAME,GAAQ7J,KAAK,G,GAF9B,EAEwD,KAFpC+J,EAEoC,E,SAAE5O,G,IAClD6O,EAAU,OAAOC,kBAAkB9O,GAGvC,OAFI,OAAM+O,iBAAiBF,GACvB5J,QAAQC,IAAK,8BAA4B,GAC7C,IAKW,GK7QsB,OAAK,GLwQpCuJ,M,SANcG,G,gBAMNtE,GAEV,OADIrF,QAAQqF,MAAO,qCAAmC,EAASA,GAC/D,E,CAFQ,KAKG,MAAXqE,OAAW,C,MACPzH,OAAOsH,MADXG,GACsB9J,KAAK,G,WAZ/B,E,mBAY2D7E,G,IAC/CgP,EAAa,OAAOC,kBAAkBjP,GAG1C,OAFI,OAAMkP,UAAUF,GAChB/J,QAAQC,IAAK,iCAA+B,GAChD,E,CAJiD,MADrDyJ,GK7QiC,OAAK,GLkRhCF,O,EALNE,E,SAKcrE,GAEV,OADIrF,QAAQqF,MAAO,wCAAsC,EAAMA,GAC/D,IACJ,CACJ,E,iBApBoBoE,EAAgBC,E,wBAAqB,K,qEA4B5CQ,G,QACQ,SAAS,cAAc,MAAM,SAA9CC,EAAAA,aAAAA,EAAc,EAAdA,IAIgB,OAAMD,EAAO,U,KACf,E,EAAe,E,WACf,E,EAAS,E,WACT,E,EAAQ,E,cAHN,I,IAAhBE,EAAAA,EAOA7B,EAAc8B,EAAaC,QAAQF,GACnC7B,EAAQR,UAAUmC,EAAO,MACzB3B,EAAQgC,MAAMlE,EACV6D,EAAO,KACPA,EAAO,KACPA,EAAO,OAEX3B,EAAQiC,aAAY,GAEhBN,EAAO,KAAP,OAAyB,KACzB3B,EAAQkC,UAAUpE,EACd6D,EAAO,KACPA,EAAO,KACPA,EAAO,QAGX3B,EAAQmC,SAASrE,EACb6D,EAAO,KACPA,EAAO,KACPA,EAAO,OAEX3B,EAAQoC,QAAQ,KAGpBpC,EAAQqC,MAAM,UAAQT,GACtB,UAAMU,UAAUV,GAChB,UAAc,GAAIA,EACtB,E,mBAOQ,aAAO,IAAW,S,IACL,uBAAoB,S,QAArCrB,EAAiB,EAGjBgC,EAAkB,sBAAWC,EAAkB,sBAAWC,EAAkB,sBAC5EC,GAAmB,sBAAWC,GAAmB,sBAAWC,GAAmB,sBAEjE,uBAAQ,C,IAClBC,EADU,MACO,KAAMC,iBACvBC,EAAkBF,EAAKG,IACvBC,EAAkBJ,EAAKK,I,EAClBH,EAAG,GAAJ,GAAkB,OAAjB,EAAiB,KAAaR,EAA+B,C,MAAjBQ,EAAG,GAAXR,EAAyB,OAAjB,EAAiB,I,OAC7DQ,EAAG,GAAJ,GAAkB,OAAjB,EAAiB,KAAaP,EAA+B,C,MAAjBO,EAAG,GAAXP,EAAyB,OAAjB,EAAiB,I,OAC7DO,EAAG,GAAJ,GAAkB,OAAjB,EAAiB,KAAaN,EAA+B,C,MAAjBM,EAAG,GAAXN,EAAyB,OAAjB,EAAiB,I,OAC7DQ,EAAG,GAAJ,GAAkB,OAAjB,EAAiB,KAAaP,EAA+B,C,MAAjBO,EAAG,GAAXP,EAAyB,OAAjB,EAAiB,I,OAC7DO,EAAG,GAAJ,GAAkB,OAAjB,EAAiB,KAAaN,EAA+B,C,MAAjBM,EAAG,GAAXN,EAAyB,OAAjB,EAAiB,I,OAC7DM,EAAG,GAAJ,GAAkB,OAAjB,EAAiB,KAAaL,EAA+B,C,MAAjBK,EAAG,GAAXL,EAAyB,OAAjB,EAAiB,I,CACtE,C,IAEAO,GAAUZ,EAAOG,GAAQ,EACzBU,GAAUZ,EAAOG,GAAQ,EACzBU,GAAUZ,EAAOG,GAAQ,EACzB1I,EAASwI,EAAOH,EAChBpI,EAASwI,EAAOH,EAChBc,EAASV,EAAOH,E,EACcvI,EAAKA,EAAKC,EAAKA,EAAKmJ,EAAKA,EAAvDhE,EDhN2C,KAAW,KAAK,GCgNE,EAE7DiB,EAAW,GAAO4C,EAAIC,EAAIC,GAC1B9C,EAAW,KAAoB,IAATjB,EACtBiB,EAAW,KAAuB,GAATjB,EACzBiB,EAAW,KAAuB,GAATjB,CAC7B,E,mBAII,U,IACA,YAAkB,SAAlB,EAAkB,K,IAGlB,YAAa,gB,SxCg7CD,EwC/6CR,UxC+6CQ,WAAM,C,IAAjB5M,EAAW,MwCh7CZ,EAC4B6Q,axC+6CH,EwC/6CmB,KxC+6CZ,CwCh7ChC,EAEWC,Q,CAEX,UAAO,K,QxC46CK,EwCz6CZ,UxCy6CY,WAAM,C,IAAjB9Q,EAAW,MwCz6CY,UAAO+Q,cxCy6CN,EAAO,CwCx6ChC,UAAc,KAGd,UAAOC,gBAAgB,WACvB,UAAOC,YAAY,WACnB,UAAOC,aAAa,WACpB,UAAOC,uBAAuB,WAC9B,UAAOC,iBAAiB,WACA,SACfzF,OAAO0F,QAAQ,UAC5B,E,iBAkFWC,G,MACQ,IAAAC,E3B/anB,K2B+aI,U3B9aG,C2B+aP,E,iBAGUD,G,MACQ,IAAAE,E3BpblB,K2BobI,U3BnbG,C2BobP,E,iBAoBmB7E,GACf,UAAwBA,CAC5B,E,iBAGeA,GACX,UAAoBA,CACxB,E,uBAGI,YAGI,GAHU,SAAd,EAAc,GAAQ,UAAU,MAGb,MAAf,UACA,UAAU,GAAS,kBAChB,C,MAEY,IAAA6E,EACX,OACA,KAAU,KACV,KAAU,IAAO,GAAO,I,IAH5BC,E3BzdD,E2B8dC,UAAU,GAASA,G,MAGH,IAAAD,EACZ,OACA,KAAU,MACV,MAAW,IAAO,GAAM,I,IAH5BE,E3BjeD,E2BseC,UAAU,GAASA,G,MAGJ,IAAAF,EACX,OACA,KAAU,KACV,KAAM,IAAO,GAAM,GACnB,KAAU,GAAO,GAAM,G,IAJ3BG,E3BzeD,E2B+eC,UAAU,GAASA,EACvB,CAGc,MAAV,UACA,UAAU,GAAgB,aAAU,WAC7B,WAEP,UAAU,K,QxCkwCF,EwC/vCZ,UxC+vCY,WAAM,C,IAAjB3R,EAAW,MwC9vCR,UAAU,GxC8vCW,EwC9vCM,KxC8vCN,EwC9vCkB,KxC8vCX,CwC5vC5B,aAAuB,C,IACvB4R,EAAU,UAEK,EAAK,MAALA,EAAK,KAALA,EAAK,K,EAAL,QAAa,EAAb,EACD,EAAK,MAALA,EAAK,KAALA,EAAK,K,EAAL,QAAgB,EAAhB,EACA,EAAK,MAALA,EAAK,KAALA,EAAK,K,EAAL,QAAgB,EAAhB,EACA,EAAK,MAALA,EAAK,KAALA,EAAK,KAJnB,UAAU,SAII,QAAgB,EAAhB,EACG,U,CAGzB,E,iBCnkBoBC,GAChB,UAAaA,CACjB,E,wBAOc7D,G,IACD,2BAAqBrI,QAAQC,OAAO,EAAU,gCAChD,IAAAD,QAAQ,EADN,EACM,GASnB,E,6BAMmB6I,G,IACf,YAAY,SAAZ,EAAY,GAAgBA,EAAQ,KACxC,E,uCAM6BA,EAAgBC,G,IACzC,YAAY,SAAZ,EAAY,GAAgBD,EAAQC,EACxC,E,6BASmBqD,EAAeC,EAAavE,G,IAC3C,YAAY,eAAZ,EAAY,KAAkB,UAA9B,EACO,KAAQsE,EADf,EAEO,KAAMC,EAFb,EAGO,KAAWvE,EAEtB,E,8BAMoB5C,EAAWC,EAAWC,G,IACtC,YAAY,eAAZ,EAAY,KAAkB,SAA9B,EAA8B,GAAOF,EAAGC,EAAGC,EAC/C,E,4BAMkB6B,G,IACd,YAAY,eAAZ,EAAY,KAAkB,UAA9B,EAA8B,KAAaA,EAC/C,E,iCAMuBqF,G,IACnB,YAAY,eAAZ,EAAY,KAAkB,UAA9B,EAA8B,KAAkBA,EACpD,E,4BAMkB1B,EAAaE,G,IAC3B,YAAY,eAAZ,EAAY,KAAkB,UAA9B,EACO,KAAcF,EADrB,EAEO,KAAcE,EAEzB,E,mCAOI,YAAY,SAAZ,EAAY,IAChB,E,kCAOI,YAAY,SAAZ,EAAY,IAChB,E,qBAMWlK,EAAYC,G,IACnB,YAAY,SAAZ,EAAY,GAAOD,EAAOC,EAC9B,E,iCAOuB0L,EAAWC,EAAWC,EAAW7S,G,IAC3C,uBAAc,S,IAAvBuS,EAAS,EACTO,EAAW,GACX9C,EAAY,GACZA,EAAMvE,KAAKkH,EAAGC,EAAGC,EAAG7S,GACpB8S,EAAA,WAAqB9C,EACrB8C,EAAA,OAAgB,EAChBP,EAAG,KAASpF,gBAAgB2F,EAChC,E,gCAOI,YAAY,SAAZ,EAAY,IAChB,E,wBAOQ,IAAC,UAAU,CACX,WAAW,E,IACX,YAAY,SAAZ,EAAY,KACZ,UAAa,IACjB,CACJ,E,iBEjIQxH,EAAWC,EAAWC,GAC1B,UAAOF,EAAG,UAAOC,EAAG,UAAOC,CAC/B,E,iBAEWF,EAAWC,EAAWC,GAC7B,UAAUF,EAAG,UAAUC,EAAG,UAAUC,CACxC,E,iBAMQuH,GAAmB,UAAaA,CAAQ,E,iBAkBpCtK,GACRA,EAAOoD,OACHC,EAAO,UAAM,UAAM,WACnBA,EAAO,UAAS,UAAS,WACzBA,EAAO,UAAK,UAAK,YAEjB,WAAuC,MAAlB,UACrBrD,EAAOyE,kBAAkB,cAEzBzE,EAAOuK,YAAY,UAAU,UAAc,UAEnD,E,mBCrDoB,UAAiB,GAAY,E,iBAInCrS,GAAiB,UAAYA,CAAM,E,iBAEvCgS,EAAUC,EAAUC,GAC1B,UAASF,EAAG,UAASC,EAAG,UAASC,CACrC,E,iBAEcvH,EAAUC,EAAUC,GAC9B,UAAaF,EAAG,UAAaC,EAAG,UAAaC,CACjD,E,sMEvCJ9L,EAAOD,QAAUM,C,GCCbkT,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAa3T,QAGrB,IAAIC,EAASuT,EAAyBE,GAAY,CAGjD1T,QAAS,CAAC,GAOX,OAHA6T,EAAoBH,GAAUzT,EAAQA,EAAOD,QAASyT,GAG/CxT,EAAOD,OACf,CCnB0ByT,CAAoB,K,MDF1CD","sources":["webpack://sceneview-web/webpack/universalModuleDefinition","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/globalThis.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/ArrayBuffer.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Arrays.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Collections.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Char.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Enum.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Library.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/BitMask.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/charSequenceJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/numberConversion.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/unsigned/src/kotlin/UShort.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/collectionsHacks.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/coreRuntime.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/typeCheckUtils.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/hacks.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/metadataUtils.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/util/Standard.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/Unit.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collectionJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/Collections.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/kotlin.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/AbstractMutableCollection.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/AbstractMutableList.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/ArrayList.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/util/Preconditions.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/exceptions.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/StringBuilderJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/charJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/AbstractCollection.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/AbstractList.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Appendable.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Char.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Strings.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Primitives.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Strings.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/stringsCode.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/stringJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Ranges.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/arrays.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/noPackageHacks.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/Main.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/OrbitCameraController.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/math.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/SceneView.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/SceneViewJS.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/bindings/FilamentHelpers.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/nodes/CameraConfig.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/nodes/LightConfig.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/promise.kt","webpack://sceneview-web/external umd \"Filament\"","webpack://sceneview-web/webpack/bootstrap","webpack://sceneview-web/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Filament\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Filament\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sceneview-web\"] = factory(require(\"Filament\"));\n\telse\n\t\troot[\"sceneview-web\"] = factory(root[\"Filament\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__650__) => {\nreturn ",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"package io.github.sceneview.web\n\nimport kotlinx.browser.document\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\nimport kotlin.js.Promise\n\n/**\n * Entry point for the SceneView Web library.\n *\n * Registers the SceneView API on `window.sceneview` so it can be used\n * from plain JavaScript after loading via `<script>` tag.\n *\n * Usage:\n * ```html\n * <script src=\"sceneview-web.js\"></script>\n * <script>\n * sceneview.createViewer(\"canvas\").then(sv => sv.loadModel(\"model.glb\"));\n * </script>\n * ```\n */\nfun main() {\n // Register the API on the global window object\n val api: dynamic = js(\"{}\")\n\n api[\"version\"] = SCENEVIEW_VERSION\n api[\"createViewer\"] = ::jsCreateViewer\n api[\"createViewerAutoRotate\"] = ::jsCreateViewerAutoRotate\n api[\"createViewerFull\"] = ::jsCreateViewerFull\n api[\"modelViewer\"] = ::jsModelViewer\n api[\"modelViewerAutoRotate\"] = ::jsModelViewerAutoRotate\n\n js(\"window\")[\"sceneview\"] = api\n\n console.log(\"SceneView Web v$SCENEVIEW_VERSION loaded\")\n}\n\n// --- JS-callable bridge functions ---\n// These use explicit types that map cleanly to JavaScript\n\nfun jsCreateViewer(canvasId: String): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = true, cameraControls = true)\n}\n\nfun jsCreateViewerAutoRotate(canvasId: String, autoRotate: Boolean): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = autoRotate, cameraControls = true)\n}\n\nfun jsCreateViewerFull(\n canvasId: String,\n autoRotate: Boolean,\n cameraControls: Boolean,\n cameraX: Double,\n cameraY: Double,\n cameraZ: Double,\n fov: Double,\n lightIntensity: Double\n): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate, cameraControls, cameraX, cameraY, cameraZ, fov, lightIntensity)\n}\n\nfun jsModelViewer(canvasId: String, modelUrl: String): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = true, cameraControls = true).then { viewer ->\n viewer.loadModel(modelUrl)\n viewer\n }\n}\n\nfun jsModelViewerAutoRotate(canvasId: String, modelUrl: String, autoRotate: Boolean): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = autoRotate, cameraControls = true).then { viewer ->\n viewer.loadModel(modelUrl)\n viewer\n }\n}\n\n// --- Internal implementation ---\n\ninternal fun createViewerImpl(\n canvasId: String,\n autoRotate: Boolean,\n cameraControls: Boolean,\n cameraX: Double = 0.0,\n cameraY: Double = 1.5,\n cameraZ: Double = 5.0,\n fov: Double = 45.0,\n lightIntensity: Double = 50_000.0\n): Promise<SceneViewJS> {\n val canvas = document.getElementById(canvasId) as? HTMLCanvasElement\n ?: return Promise.reject(Throwable(\"Canvas element '$canvasId' not found\"))\n\n // Ensure canvas has physical pixel dimensions\n if (canvas.width == 0 || canvas.height == 0) {\n canvas.width = canvas.clientWidth\n canvas.height = canvas.clientHeight\n }\n\n return Promise { resolve, reject ->\n try {\n SceneView.create(\n canvas = canvas,\n configure = {\n camera {\n eye(cameraX, cameraY, cameraZ)\n target(0.0, 0.0, 0.0)\n fov(fov)\n }\n light {\n directional()\n intensity(lightIntensity)\n direction(0.6f, -1.0f, -0.8f)\n }\n autoRotate(autoRotate)\n cameraControls(cameraControls)\n },\n onReady = { sceneView ->\n sceneView.startRendering()\n\n // Auto-resize on window resize\n window.addEventListener(\"resize\", {\n canvas.width = canvas.clientWidth\n canvas.height = canvas.clientHeight\n })\n\n val viewer = SceneViewJS()\n viewer.attach(sceneView)\n resolve(viewer)\n }\n )\n } catch (e: Throwable) {\n reject(e)\n }\n }\n}\n","package io.github.sceneview.web\n\nimport io.github.sceneview.web.bindings.Camera\nimport io.github.sceneview.web.bindings.float3\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\nimport org.w3c.dom.events.MouseEvent\nimport org.w3c.dom.events.WheelEvent\nimport kotlin.math.PI\nimport kotlin.math.cos\nimport kotlin.math.max\nimport kotlin.math.min\nimport kotlin.math.sin\n\n/**\n * Orbit camera controller for SceneView Web.\n *\n * Provides mouse/touch-based orbit, zoom, and pan controls similar to\n * three.js OrbitControls or Google model-viewer's camera-controls.\n *\n * Usage:\n * ```kotlin\n * val controller = OrbitCameraController(canvas, sceneView.camera)\n * controller.target(0.0, 0.0, 0.0)\n * controller.distance = 5.0\n * // Call update() each frame in the render loop\n * ```\n */\nclass OrbitCameraController(\n private val canvas: HTMLCanvasElement,\n private val camera: Camera\n) {\n // Spherical coordinates — defaults match model-viewer's \"45deg 70deg 2.5m\"\n var theta = 45.0 * PI / 180.0 // horizontal angle (radians) — 45° like model-viewer\n var phi = 70.0 * PI / 180.0 // vertical angle (radians) — 70° like model-viewer\n var distance = 5.0 // distance from target\n\n // Target point (orbit center)\n var targetX = 0.0\n var targetY = 0.0\n var targetZ = 0.0\n\n // Limits\n var minDistance = 0.5\n var maxDistance = 50.0\n var minPhi = 0.1 // prevent looking straight down\n var maxPhi = PI - 0.1 // prevent looking straight up\n\n // Sensitivity\n var rotateSensitivity = 0.005\n var zoomSensitivity = 0.1\n var panSensitivity = 0.003\n\n // Auto-rotation — default speed matches model-viewer's 30deg/sec at 60fps\n var autoRotate = false\n var autoRotateSpeed = 30.0 * PI / 180.0 / 60.0 // 30°/sec ÷ 60fps ≈ 0.00873 rad/frame\n\n // Damping (inertia) — higher factor = smoother, more model-viewer-like\n var enableDamping = true\n var dampingFactor = 0.95\n private var velocityTheta = 0.0\n private var velocityPhi = 0.0\n\n // Mouse state\n private var isDragging = false\n private var isRightDragging = false\n private var lastX = 0.0\n private var lastY = 0.0\n\n init {\n setupEventListeners()\n }\n\n fun target(x: Double, y: Double, z: Double) {\n targetX = x; targetY = y; targetZ = z\n }\n\n /**\n * Update camera position from spherical coordinates.\n * Call this every frame in the render loop.\n *\n * Converts spherical coordinates (theta, phi, distance) to Cartesian\n * and calls camera.lookAt() with float3 arrays as required by Filament.js.\n */\n fun update() {\n // Apply auto-rotation\n if (autoRotate && !isDragging) {\n theta += autoRotateSpeed\n }\n\n // Apply damping\n if (enableDamping) {\n theta += velocityTheta\n phi += velocityPhi\n velocityTheta *= dampingFactor\n velocityPhi *= dampingFactor\n }\n\n // Clamp phi\n phi = max(minPhi, min(maxPhi, phi))\n distance = max(minDistance, min(maxDistance, distance))\n\n // Convert spherical to cartesian\n val eyeX = targetX + distance * sin(phi) * sin(theta)\n val eyeY = targetY + distance * cos(phi)\n val eyeZ = targetZ + distance * sin(phi) * cos(theta)\n\n // Filament.js Camera.lookAt takes float3 arrays, not 9 separate doubles\n camera.lookAt(\n float3(eyeX, eyeY, eyeZ), // eye\n float3(targetX, targetY, targetZ), // center\n float3(0.0, 1.0, 0.0) // up\n )\n }\n\n /** Remove all event listeners. Call when destroying the SceneView. */\n fun dispose() {\n // Event listeners are attached to the canvas and will be GC'd with it\n }\n\n private fun setupEventListeners() {\n // Mouse down\n canvas.addEventListener(\"mousedown\", { event ->\n val e = event as MouseEvent\n when (e.button.toInt()) {\n 0 -> { isDragging = true } // Left button = orbit\n 2 -> { isRightDragging = true } // Right button = pan\n }\n lastX = e.clientX.toDouble()\n lastY = e.clientY.toDouble()\n e.preventDefault()\n })\n\n // Mouse move\n canvas.addEventListener(\"mousemove\", { event ->\n val e = event as MouseEvent\n val dx = e.clientX.toDouble() - lastX\n val dy = e.clientY.toDouble() - lastY\n lastX = e.clientX.toDouble()\n lastY = e.clientY.toDouble()\n\n if (isDragging) {\n // Orbit\n if (enableDamping) {\n velocityTheta = -dx * rotateSensitivity\n velocityPhi = -dy * rotateSensitivity\n } else {\n theta -= dx * rotateSensitivity\n phi -= dy * rotateSensitivity\n }\n } else if (isRightDragging) {\n // Pan\n targetX += dx * panSensitivity * distance\n targetY -= dy * panSensitivity * distance\n }\n })\n\n // Mouse up\n canvas.addEventListener(\"mouseup\", {\n isDragging = false\n isRightDragging = false\n })\n\n canvas.addEventListener(\"mouseleave\", {\n isDragging = false\n isRightDragging = false\n })\n\n // Scroll wheel = zoom\n canvas.addEventListener(\"wheel\", { event ->\n val e = event as WheelEvent\n val delta = if (e.deltaY > 0) 1.0 else -1.0\n distance *= 1.0 + delta * zoomSensitivity\n distance = max(minDistance, min(maxDistance, distance))\n e.preventDefault()\n }, js(\"{passive: false}\"))\n\n // Prevent context menu on right-click\n canvas.addEventListener(\"contextmenu\", { event ->\n event.preventDefault()\n })\n\n // Touch support\n canvas.addEventListener(\"touchstart\", { event ->\n val e = event.asDynamic()\n if (e.touches.length == 1) {\n isDragging = true\n lastX = (e.touches[0].clientX as Number).toDouble()\n lastY = (e.touches[0].clientY as Number).toDouble()\n }\n event.preventDefault()\n }, js(\"{passive: false}\"))\n\n canvas.addEventListener(\"touchmove\", { event ->\n val e = event.asDynamic()\n if (isDragging && e.touches.length == 1) {\n val dx = (e.touches[0].clientX as Number).toDouble() - lastX\n val dy = (e.touches[0].clientY as Number).toDouble() - lastY\n lastX = (e.touches[0].clientX as Number).toDouble()\n lastY = (e.touches[0].clientY as Number).toDouble()\n\n if (enableDamping) {\n velocityTheta = -dx * rotateSensitivity\n velocityPhi = -dy * rotateSensitivity\n } else {\n theta -= dx * rotateSensitivity\n phi -= dy * rotateSensitivity\n }\n } else if (e.touches.length == 2) {\n // Pinch-to-zoom\n val dx = (e.touches[0].clientX as Number).toDouble() - (e.touches[1].clientX as Number).toDouble()\n val dy = (e.touches[0].clientY as Number).toDouble() - (e.touches[1].clientY as Number).toDouble()\n val pinchDistance = kotlin.math.sqrt(dx * dx + dy * dy)\n\n if (lastPinchDistance > 0) {\n val delta = lastPinchDistance - pinchDistance\n distance *= 1.0 + delta * 0.005\n distance = max(minDistance, min(maxDistance, distance))\n }\n lastPinchDistance = pinchDistance\n }\n event.preventDefault()\n }, js(\"{passive: false}\"))\n\n canvas.addEventListener(\"touchend\", {\n isDragging = false\n lastPinchDistance = -1.0\n })\n }\n\n private var lastPinchDistance = -1.0\n}\n",null,"package io.github.sceneview.web\n\nimport io.github.sceneview.web.bindings.*\nimport io.github.sceneview.web.nodes.CameraConfig\nimport io.github.sceneview.web.nodes.LightConfig\nimport io.github.sceneview.web.nodes.LightType\nimport io.github.sceneview.web.nodes.ModelConfig\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\n\n/**\n * SceneView for Web -- Filament.js based 3D viewer.\n *\n * Uses the same Filament rendering engine as SceneView Android,\n * compiled to WebAssembly for browser execution.\n *\n * This class actually initializes the Filament WASM module, creates a real\n * WebGL2 rendering context, and renders 3D content using the GPU.\n *\n * Basic usage:\n * ```kotlin\n * SceneView.create(canvas) {\n * camera {\n * eye(0.0, 1.5, 5.0)\n * target(0.0, 0.0, 0.0)\n * }\n * light {\n * directional()\n * intensity(100_000.0)\n * }\n * model(\"models/damaged_helmet.glb\")\n * }\n * ```\n */\nclass SceneView private constructor(\n val canvas: HTMLCanvasElement,\n val engine: Engine,\n val renderer: Renderer,\n val scene: Scene,\n val view: View,\n val camera: Camera,\n val swapChain: SwapChain,\n private val cameraEntity: Entity\n) {\n private var animationFrameId: Int? = null\n private var isRunning = false\n private var lastTimestamp = 0.0\n\n private val models = mutableListOf<LoadedModel>()\n private var assetLoader: AssetLoader? = null\n private val lightEntities = mutableListOf<Entity>()\n\n /** Tracks a loaded glTF asset with its animation state. */\n private class LoadedModel(\n val asset: FilamentAsset,\n val animator: Animator?,\n var animationTime: Double = 0.0\n )\n\n /** Orbit camera controller -- initialized when cameraControls is enabled. */\n var cameraController: OrbitCameraController? = null\n private set\n\n /** Enable orbit camera controls (mouse drag to orbit, scroll to zoom, touch support). */\n fun enableCameraControls(\n distance: Double = 5.0,\n targetX: Double = 0.0,\n targetY: Double = 0.0,\n targetZ: Double = 0.0,\n autoRotate: Boolean = false\n ): OrbitCameraController {\n val controller = OrbitCameraController(canvas, camera).apply {\n this.distance = distance\n target(targetX, targetY, targetZ)\n this.autoRotate = autoRotate\n }\n cameraController = controller\n return controller\n }\n\n companion object {\n /** Default IBL URL — same \"neutral\" environment as SceneView Android. */\n const val DEFAULT_IBL_URL = \"https://sceneview.github.io/assets/environments/neutral_ibl.ktx\"\n const val DEFAULT_SKYBOX_URL = \"https://sceneview.github.io/assets/environments/neutral_skybox.ktx\"\n\n /**\n * Initialize Filament WASM and create a SceneView instance.\n *\n * This is the main entry point. It:\n * 1. Calls Filament.init() to load and compile the WASM module\n * 2. Creates a Filament Engine with a WebGL2 context on the canvas\n * 3. Sets up Scene, View, Camera, Renderer, and SwapChain\n * 4. Applies the user's configuration (camera, lights, models)\n * 5. Calls onReady with the fully initialized SceneView\n *\n * @param canvas The HTML canvas element to render into\n * @param assets List of asset URLs to preload (IBL, skybox KTX files)\n * @param configure DSL block to configure the scene\n * @param onReady Callback when the SceneView is fully initialized\n */\n fun create(\n canvas: HTMLCanvasElement,\n assets: Array<String> = emptyArray(),\n configure: SceneViewBuilder.() -> Unit = {},\n onReady: (SceneView) -> Unit\n ) {\n // Step 1: Initialize Filament WASM module and preload any assets\n init(assets) {\n try {\n // Step 2: Create the Filament engine with WebGL2 context\n // Use dynamic call because webpack externals + Kotlin companion objects\n // don't resolve correctly for Filament's static Engine.create()\n val filament: dynamic = js(\"Filament\")\n val engine: Engine = filament.Engine.create(canvas).unsafeCast<Engine>()\n val renderer = engine.createRenderer()\n val scene = engine.createScene()\n val swapChain = engine.createSwapChain()\n val view = engine.createView()\n\n // Step 3: Create camera entity and camera\n val cameraEntity = (js(\"Filament.EntityManager.get().create()\") as Entity)\n val camera = engine.createCamera(cameraEntity)\n\n // Step 4: Connect view to camera and scene\n view.setCamera(camera)\n view.setScene(scene)\n\n // Step 5: Set viewport to canvas pixel dimensions\n val width = canvas.width\n val height = canvas.height\n view.setViewport(viewport(0, 0, width, height))\n\n // Step 6: Default camera setup -- perspective projection\n val aspect = if (height > 0) width.toDouble() / height.toDouble() else 1.0\n camera.setProjectionFov(\n fovInDegrees = 45.0,\n aspect = aspect,\n near = 0.1,\n far = 1000.0\n )\n\n // Default camera position: slightly above and back, looking at origin\n camera.lookAt(\n float3(0.0, 1.5, 5.0), // eye\n float3(0.0, 0.0, 0.0), // center\n float3(0.0, 1.0, 0.0) // up\n )\n\n // Default exposure matching model-viewer's exposure=1.1\n // This makes IBL-lit models look bright and vibrant\n camera.setExposureDirect(1.1)\n\n // Set clear color to near-black (clean dark background)\n renderer.setClearOptions(js(\"({clearColor: [0.05, 0.05, 0.07, 1.0], clear: true})\"))\n\n // --- Quality defaults for PBR rendering ---\n // Screen-space ambient occlusion (soft contact shadows)\n view.setAmbientOcclusionOptions(js(\"\"\"({\n enabled: true,\n radius: 0.3,\n bias: 0.0005,\n intensity: 1.0,\n quality: 1\n })\"\"\"))\n\n // Subtle bloom for emissive/bright highlights\n view.setBloomOptions(js(\"\"\"({\n enabled: true,\n strength: 0.1,\n threshold: true,\n levels: 4\n })\"\"\"))\n\n // Temporal anti-aliasing for smooth edges\n view.setTemporalAntiAliasingOptions(js(\"\"\"({\n enabled: true\n })\"\"\"))\n\n val sceneView = SceneView(\n canvas, engine, renderer, scene, view, camera, swapChain, cameraEntity\n )\n\n // Step 7: Apply user configuration (camera, lights, models, environment)\n val builder = SceneViewBuilder(sceneView)\n builder.configure()\n builder.apply()\n\n onReady(sceneView)\n } catch (e: Throwable) {\n console.error(\"SceneView: Failed to initialize Filament engine\", e)\n }\n }\n }\n }\n\n /** Resize the viewport to match the canvas dimensions. Call on window resize. */\n fun resize(width: Int = canvas.clientWidth, height: Int = canvas.clientHeight) {\n if (width <= 0 || height <= 0) return\n canvas.width = width\n canvas.height = height\n view.setViewport(viewport(0, 0, width, height))\n camera.setProjectionFov(\n fovInDegrees = 45.0,\n aspect = width.toDouble() / height.toDouble(),\n near = 0.1,\n far = 1000.0\n )\n }\n\n /** Enable automatic viewport resizing when the canvas CSS size changes. */\n var autoResize = true\n\n /** Start the render loop using requestAnimationFrame. */\n fun startRendering() {\n if (isRunning) return\n isRunning = true\n lastTimestamp = 0.0\n renderLoop(0.0)\n }\n\n /** Stop the render loop. */\n fun stopRendering() {\n isRunning = false\n animationFrameId?.let { window.cancelAnimationFrame(it) }\n animationFrameId = null\n }\n\n /**\n * Load a glTF/GLB model from a URL and add it to the scene.\n *\n * This performs the full loading pipeline:\n * 1. Fetch the .glb/.gltf file as an ArrayBuffer\n * 2. Create a FilamentAsset via the AssetLoader\n * 3. Add all renderable entities to the scene\n * 4. Call loadResources() to fetch external textures/buffers\n * 5. Release source data to free memory\n *\n * @param url URL to the .glb or .gltf file\n * @param onLoaded Optional callback when the model is fully loaded (with resources)\n */\n fun loadModel(\n url: String,\n onLoaded: ((FilamentAsset) -> Unit)? = null\n ) {\n val loader = assetLoader ?: engine.createAssetLoader().also { assetLoader = it }\n\n // Derive the base path for resolving relative resource URIs\n val basePath = url.substringBeforeLast('/') + \"/\"\n\n window.fetch(url).then { response ->\n response.arrayBuffer()\n }.then { buffer ->\n val asset = loader.createAsset(buffer)\n if (asset != null) {\n // Add all entities to the scene so they become visible\n val entities = asset.getEntities()\n scene.addEntities(entities)\n\n // Get the animator from the asset instance for animation playback\n val animator = try {\n asset.getInstance().getAnimator()\n } catch (e: Throwable) {\n null\n }\n\n val loadedModel = LoadedModel(asset, animator)\n models.add(loadedModel)\n\n // Load external resources (textures, buffers) referenced by the glTF.\n // This is REQUIRED for models to render with correct materials.\n asset.loadResources(\n onDone = {\n // Release the source glTF data now that resources are loaded\n asset.releaseSourceData()\n console.log(\"SceneView: Model loaded from $url (${entities.size} entities)\")\n onLoaded?.invoke(asset)\n },\n onFetched = null,\n basePath = basePath,\n asyncInterval = null\n )\n } else {\n console.error(\"SceneView: AssetLoader failed to parse model from $url\")\n }\n }.catch { error ->\n console.error(\"SceneView: Error fetching model from $url\", error)\n }\n }\n\n /**\n * Load the default neutral IBL environment.\n * Provides physically-correct PBR reflections without a visible skybox —\n * models look like they're in a photography studio.\n */\n fun loadDefaultEnvironment() {\n loadEnvironment(DEFAULT_IBL_URL)\n }\n\n /** Load an IBL (Image-Based Lighting) from a KTX file URL. */\n fun loadEnvironment(iblUrl: String, skyboxUrl: String? = null) {\n // Fetch and create IBL (indirect lighting) from a KTX1 file\n window.fetch(iblUrl).then { it.arrayBuffer() }.then { buffer ->\n val ibl = engine.createIblFromKtx1(buffer)\n scene.setIndirectLight(ibl)\n console.log(\"SceneView: IBL loaded from $iblUrl\")\n }.catch { error ->\n console.error(\"SceneView: Error loading IBL from $iblUrl\", error)\n }\n\n // Optionally load a skybox from a separate KTX file\n skyboxUrl?.let { url ->\n window.fetch(url).then { it.arrayBuffer() }.then { buffer ->\n val skybox = engine.createSkyFromKtx1(buffer)\n scene.setSkybox(skybox)\n console.log(\"SceneView: Skybox loaded from $url\")\n }.catch { error ->\n console.error(\"SceneView: Error loading skybox from $url\", error)\n }\n }\n }\n\n /**\n * Add a light to the scene using the Filament LightManager Builder API.\n *\n * The Filament.js LightManager.Builder is accessed via:\n * Filament.LightManager.Builder(type).intensity(n).direction([x,y,z]).build(engine, entity)\n */\n fun addLight(config: LightConfig) {\n val entity = (js(\"Filament.EntityManager.get().create()\") as Entity)\n\n // Map our LightType enum to Filament's numeric type constants\n // In Filament.js: 0 = SUN, 1 = DIRECTIONAL, 2 = POINT, 3 = FOCUSED_SPOT, 4 = SPOT\n val lightType = when (config.type) {\n LightType.DIRECTIONAL -> 1\n LightType.POINT -> 2\n LightType.SPOT -> 4\n }\n\n // Use the Builder pattern: LightManager.Builder(type).intensity(...).build(engine, entity)\n val builder = LightManager.Builder(lightType)\n builder.intensity(config.intensity)\n builder.color(float3(\n config.colorR.toDouble(),\n config.colorG.toDouble(),\n config.colorB.toDouble()\n ))\n builder.castShadows(true)\n\n if (config.type == LightType.DIRECTIONAL) {\n builder.direction(float3(\n config.directionX.toDouble(),\n config.directionY.toDouble(),\n config.directionZ.toDouble()\n ))\n } else {\n builder.position(float3(\n config.positionX.toDouble(),\n config.positionY.toDouble(),\n config.positionZ.toDouble()\n ))\n builder.falloff(10.0)\n }\n\n builder.build(engine, entity)\n scene.addEntity(entity)\n lightEntities.add(entity)\n }\n\n /**\n * Auto-fit the camera to frame all loaded models.\n * Computes the bounding box of all assets and adjusts the orbit controller distance.\n */\n fun fitToModels() {\n if (models.isEmpty()) return\n val controller = cameraController ?: return\n\n // Compute the union bounding box of all loaded models\n var minX = Double.MAX_VALUE; var minY = Double.MAX_VALUE; var minZ = Double.MAX_VALUE\n var maxX = -Double.MAX_VALUE; var maxY = -Double.MAX_VALUE; var maxZ = -Double.MAX_VALUE\n\n for (model in models) {\n val aabb = model.asset.getBoundingBox()\n val mn: dynamic = aabb.min\n val mx: dynamic = aabb.max\n if ((mn[0] as Number).toDouble() < minX) minX = (mn[0] as Number).toDouble()\n if ((mn[1] as Number).toDouble() < minY) minY = (mn[1] as Number).toDouble()\n if ((mn[2] as Number).toDouble() < minZ) minZ = (mn[2] as Number).toDouble()\n if ((mx[0] as Number).toDouble() > maxX) maxX = (mx[0] as Number).toDouble()\n if ((mx[1] as Number).toDouble() > maxY) maxY = (mx[1] as Number).toDouble()\n if ((mx[2] as Number).toDouble() > maxZ) maxZ = (mx[2] as Number).toDouble()\n }\n\n val cx = (minX + maxX) / 2.0\n val cy = (minY + maxY) / 2.0\n val cz = (minZ + maxZ) / 2.0\n val dx = maxX - minX\n val dy = maxY - minY\n val dz = maxZ - minZ\n val radius = kotlin.math.sqrt(dx * dx + dy * dy + dz * dz) / 2.0\n\n controller.target(cx, cy, cz)\n controller.distance = radius * 2.5\n controller.minDistance = radius * 0.5\n controller.maxDistance = radius * 10.0\n }\n\n /** Clean up all Filament resources. */\n fun destroy() {\n stopRendering()\n cameraController?.dispose()\n\n // Destroy loaded assets\n assetLoader?.let { loader ->\n models.forEach { loader.destroyAsset(it.asset) }\n loader.delete()\n }\n models.clear()\n\n // Destroy light entities\n lightEntities.forEach { engine.destroyEntity(it) }\n lightEntities.clear()\n\n // Destroy core Filament objects\n engine.destroyRenderer(renderer)\n engine.destroyView(view)\n engine.destroyScene(scene)\n engine.destroyCameraComponent(cameraEntity)\n engine.destroySwapChain(swapChain)\n val filament: dynamic = js(\"Filament\")\n filament.Engine.destroy(engine)\n }\n\n /**\n * The render loop -- called every frame via requestAnimationFrame.\n *\n * Each frame:\n * 1. Auto-resizes viewport if CSS size changed\n * 2. Updates orbit camera controller (rotation, damping)\n * 3. Advances glTF animations\n * 4. Calls engine.execute() to process pending async operations\n * 5. Renders the frame via beginFrame/renderView/endFrame\n */\n private fun renderLoop(timestamp: Double) {\n if (!isRunning) return\n\n // Auto-resize viewport if canvas CSS size changed\n if (autoResize) {\n val w = canvas.clientWidth\n val h = canvas.clientHeight\n if (w > 0 && h > 0 && (w != canvas.width || h != canvas.height)) {\n resize(w, h)\n }\n }\n\n // Update orbit camera\n cameraController?.update()\n\n // Track animation time\n val deltaSeconds = if (lastTimestamp > 0) (timestamp - lastTimestamp) / 1000.0 else 0.0\n lastTimestamp = timestamp\n\n // Update glTF animations for all loaded models\n models.forEach { model ->\n model.animator?.let { animator ->\n val count = animator.getAnimationCount()\n if (count > 0) {\n model.animationTime += deltaSeconds\n val duration = animator.getAnimationDuration(0)\n if (duration > 0) {\n // Loop the animation\n model.animationTime = model.animationTime % duration\n }\n // In Filament.js, applyAnimation only takes the index.\n // The animation time is set by calling the animator at the right moment.\n // Actually, the gltfio$Animator.applyAnimation(index) applies the animation\n // at the CURRENT time set internally -- we need to advance it.\n // The proper way is: animator.applyAnimation(index) after setting time\n // via the asset's animation system.\n // For Filament.js, we use the asset instance animator which tracks time internally.\n animator.applyAnimation(0)\n animator.updateBoneMatrices()\n }\n }\n }\n\n // Process any pending async Filament operations (texture uploads, etc.)\n engine.execute()\n\n // Render frame\n if (renderer.beginFrame(swapChain)) {\n renderer.renderView(view)\n renderer.endFrame()\n }\n\n animationFrameId = window.requestAnimationFrame(::renderLoop)\n }\n}\n\n/**\n * DSL builder for SceneView configuration.\n */\nclass SceneViewBuilder(private val sceneView: SceneView) {\n private var cameraConfig: CameraConfig? = null\n private var lightConfig: LightConfig? = null\n private val modelConfigs = mutableListOf<ModelConfig>()\n private var iblUrl: String? = null\n private var skyboxUrl: String? = null\n private var cameraControlsEnabled = true\n private var autoRotateEnabled = false\n private var useDefaultEnvironment = true\n\n /** Configure the camera. */\n fun camera(block: CameraConfig.() -> Unit) {\n cameraConfig = CameraConfig().apply(block)\n }\n\n /** Configure a directional light. */\n fun light(block: LightConfig.() -> Unit) {\n lightConfig = LightConfig().apply(block)\n }\n\n /** Add a glTF/GLB model by URL. */\n fun model(url: String, block: ModelConfig.() -> Unit = {}) {\n modelConfigs.add(ModelConfig(url).apply(block))\n }\n\n /** Set environment lighting from KTX IBL files. */\n fun environment(iblUrl: String, skyboxUrl: String? = null) {\n this.iblUrl = iblUrl\n this.skyboxUrl = skyboxUrl\n this.useDefaultEnvironment = false\n }\n\n /** Disable the default neutral IBL environment. */\n fun noEnvironment() {\n this.useDefaultEnvironment = false\n }\n\n /** Enable orbit camera controls (drag to orbit, scroll to zoom, touch). Enabled by default. */\n fun cameraControls(enabled: Boolean = true) {\n cameraControlsEnabled = enabled\n }\n\n /** Enable auto-rotation of the camera around the target. */\n fun autoRotate(enabled: Boolean = true) {\n autoRotateEnabled = enabled\n }\n\n internal fun apply() {\n cameraConfig?.applyTo(sceneView.camera)\n\n // If no explicit light was configured, add model-viewer-like 3-point lighting\n if (lightConfig != null) {\n sceneView.addLight(lightConfig!!)\n } else {\n // Key light — main directional, slightly warm\n val keyLight = LightConfig().apply {\n directional()\n intensity(50_000.0)\n direction(0.6f, -1.0f, -0.8f)\n }\n sceneView.addLight(keyLight)\n\n // Fill light — softer, from the opposite side\n val fillLight = LightConfig().apply {\n directional()\n intensity(25_000.0)\n direction(-0.6f, -0.5f, 0.8f)\n }\n sceneView.addLight(fillLight)\n\n // Rim/back light — highlights edges, cool tint\n val rimLight = LightConfig().apply {\n directional()\n intensity(30_000.0)\n color(0.85f, 0.9f, 1.0f) // slight cool tint\n direction(0.0f, -0.3f, 1.0f)\n }\n sceneView.addLight(rimLight)\n }\n\n // Load IBL environment for physically-correct PBR reflections\n if (iblUrl != null) {\n sceneView.loadEnvironment(iblUrl!!, skyboxUrl)\n } else if (useDefaultEnvironment) {\n // Load the bundled neutral IBL — same as Android SceneView default\n sceneView.loadDefaultEnvironment()\n }\n\n modelConfigs.forEach { config ->\n sceneView.loadModel(config.url, config.onLoaded)\n }\n if (cameraControlsEnabled) {\n val cam = cameraConfig\n sceneView.enableCameraControls(\n distance = cam?.eyeZ ?: 5.0,\n targetX = cam?.targetX ?: 0.0,\n targetY = cam?.targetY ?: 0.0,\n targetZ = cam?.targetZ ?: 0.0,\n autoRotate = autoRotateEnabled\n )\n }\n }\n}\n","package io.github.sceneview.web\n\nimport kotlin.js.Promise\n\n/**\n * SceneViewer — the JavaScript-facing 3D viewer class.\n *\n * Instances are created via `sceneview.createViewer()` or `sceneview.modelViewer()`.\n * All methods use `@JsName` to ensure stable, unmangled names in compiled JS.\n *\n * ```js\n * sceneview.createViewer(\"canvas\").then(function(sv) {\n * sv.loadModel(\"model.glb\");\n * sv.setAutoRotate(true);\n * });\n * ```\n */\n@JsExport\n@JsName(\"SceneViewer\")\nclass SceneViewJS {\n private var _sceneView: SceneView? = null\n private var disposed = false\n\n internal fun attach(sv: SceneView) {\n _sceneView = sv\n }\n\n /**\n * Load a glTF/GLB model from a URL.\n * Returns a Promise that resolves with the URL when loaded.\n */\n @JsName(\"loadModel\")\n fun loadModel(url: String): Promise<String> {\n val sv = _sceneView ?: return Promise.reject(Throwable(\"SceneViewer not initialized\"))\n return Promise { resolve, reject ->\n try {\n sv.loadModel(url) {\n resolve(url)\n }\n } catch (e: Throwable) {\n reject(e)\n }\n }\n }\n\n /**\n * Load environment lighting from a KTX IBL file URL.\n */\n @JsName(\"setEnvironment\")\n fun setEnvironment(iblUrl: String) {\n _sceneView?.loadEnvironment(iblUrl, null)\n }\n\n /**\n * Load environment lighting with skybox.\n */\n @JsName(\"setEnvironmentWithSkybox\")\n fun setEnvironmentWithSkybox(iblUrl: String, skyboxUrl: String) {\n _sceneView?.loadEnvironment(iblUrl, skyboxUrl)\n }\n\n /**\n * Set the camera orbit position in spherical coordinates.\n * @param theta Horizontal angle in radians\n * @param phi Vertical angle in radians\n * @param distance Distance from target\n */\n @JsName(\"setCameraOrbit\")\n fun setCameraOrbit(theta: Double, phi: Double, distance: Double) {\n _sceneView?.cameraController?.let {\n it.theta = theta\n it.phi = phi\n it.distance = distance\n }\n }\n\n /**\n * Set the camera orbit target (look-at point).\n */\n @JsName(\"setCameraTarget\")\n fun setCameraTarget(x: Double, y: Double, z: Double) {\n _sceneView?.cameraController?.target(x, y, z)\n }\n\n /**\n * Enable or disable auto-rotation.\n */\n @JsName(\"setAutoRotate\")\n fun setAutoRotate(enabled: Boolean) {\n _sceneView?.cameraController?.autoRotate = enabled\n }\n\n /**\n * Set auto-rotation speed in radians per frame.\n */\n @JsName(\"setAutoRotateSpeed\")\n fun setAutoRotateSpeed(speed: Double) {\n _sceneView?.cameraController?.autoRotateSpeed = speed\n }\n\n /**\n * Set minimum and maximum zoom distances.\n */\n @JsName(\"setZoomLimits\")\n fun setZoomLimits(min: Double, max: Double) {\n _sceneView?.cameraController?.let {\n it.minDistance = min\n it.maxDistance = max\n }\n }\n\n /**\n * Start the render loop. Called automatically by createViewer().\n */\n @JsName(\"startRendering\")\n fun startRendering() {\n _sceneView?.startRendering()\n }\n\n /**\n * Stop the render loop.\n */\n @JsName(\"stopRendering\")\n fun stopRendering() {\n _sceneView?.stopRendering()\n }\n\n /**\n * Resize the viewport. Normally handled automatically.\n */\n @JsName(\"resize\")\n fun resize(width: Int, height: Int) {\n _sceneView?.resize(width, height)\n }\n\n /**\n * Set the background clear color (RGBA, 0-1 range).\n * Use this to sync the 3D canvas background with your page theme.\n */\n @JsName(\"setBackgroundColor\")\n fun setBackgroundColor(r: Double, g: Double, b: Double, a: Double) {\n val sv = _sceneView ?: return\n val opts = js(\"{}\")\n val color = js(\"[]\")\n color.push(r, g, b, a)\n opts[\"clearColor\"] = color\n opts[\"clear\"] = true\n sv.renderer.setClearOptions(opts)\n }\n\n /**\n * Fit the camera to frame all loaded models.\n */\n @JsName(\"fitToModels\")\n fun fitToModels() {\n _sceneView?.fitToModels()\n }\n\n /**\n * Clean up all GPU resources. Call when removing the viewer.\n */\n @JsName(\"dispose\")\n fun dispose() {\n if (!disposed) {\n disposed = true\n _sceneView?.destroy()\n _sceneView = null\n }\n }\n}\n\n/**\n * Library version.\n */\nconst val SCENEVIEW_VERSION = \"1.3.0\"\n","package io.github.sceneview.web.bindings\n\n// -----------------------------------------------------------------------\n// Helper functions for creating Filament.js array types.\n//\n// Filament.js uses number[] (JavaScript arrays) for float3, float4, mat4, etc.\n// These helpers create the arrays in a Kotlin/JS-friendly way.\n//\n// NOTE: These MUST NOT be in the @JsModule(\"filament\") file (Filament.kt)\n// because non-external declarations are not allowed in @JsModule files.\n// -----------------------------------------------------------------------\n\n/**\n * Create a float3 array [x, y, z] for Filament.js API calls.\n *\n * Used by Camera.lookAt, LightManager.Builder.direction/position/color, etc.\n */\nfun float3(x: Double, y: Double, z: Double): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, z)\n return arr\n}\n\n/**\n * Create a float4 array [x, y, z, w] for Filament.js API calls.\n *\n * Used by Renderer.setClearOptions, Skybox.setColor, etc.\n */\nfun float4(x: Double, y: Double, z: Double, w: Double): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, z, w)\n return arr\n}\n\n/**\n * Create a viewport array [x, y, width, height] for View.setViewport().\n */\nfun viewport(x: Int, y: Int, width: Int, height: Int): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, width, height)\n return arr\n}\n","package io.github.sceneview.web.nodes\n\nimport io.github.sceneview.web.bindings.Camera\nimport io.github.sceneview.web.bindings.float3\n\n/**\n * Camera configuration for SceneView web.\n *\n * ```kotlin\n * camera {\n * eye(0.0, 1.5, 5.0)\n * target(0.0, 0.0, 0.0)\n * up(0.0, 1.0, 0.0)\n * fov(45.0)\n * near(0.1)\n * far(1000.0)\n * }\n * ```\n */\nclass CameraConfig {\n var eyeX = 0.0; private set\n var eyeY = 1.5; private set\n var eyeZ = 5.0; private set\n var targetX = 0.0; private set\n var targetY = 0.0; private set\n var targetZ = 0.0; private set\n var upX = 0.0; private set\n var upY = 1.0; private set\n var upZ = 0.0; private set\n var fovDegrees = 45.0; private set\n var nearPlane = 0.1; private set\n var farPlane = 1000.0; private set\n // Exposure defaults — matching model-viewer's exposure=1.1\n var aperture = 16.0; private set\n var shutterSpeed = 1.0 / 125.0; private set\n var sensitivity = 100.0; private set\n var directExposure: Double? = 1.1; private set\n var useDirectExposure = true; private set\n\n fun eye(x: Double, y: Double, z: Double) {\n eyeX = x; eyeY = y; eyeZ = z\n }\n\n fun target(x: Double, y: Double, z: Double) {\n targetX = x; targetY = y; targetZ = z\n }\n\n fun up(x: Double, y: Double, z: Double) {\n upX = x; upY = y; upZ = z\n }\n\n fun fov(degrees: Double) { fovDegrees = degrees }\n fun near(value: Double) { nearPlane = value }\n fun far(value: Double) { farPlane = value }\n\n fun exposure(aperture: Double, shutterSpeed: Double, sensitivity: Double) {\n this.aperture = aperture\n this.shutterSpeed = shutterSpeed\n this.sensitivity = sensitivity\n this.useDirectExposure = false\n }\n\n /** Set exposure directly (model-viewer-style, default 1.1). Higher = brighter. */\n fun exposure(value: Double) {\n this.directExposure = value\n this.useDirectExposure = true\n }\n\n /** Apply this config to a Filament.js Camera using float3 arrays for lookAt. */\n fun applyTo(camera: Camera) {\n camera.lookAt(\n float3(eyeX, eyeY, eyeZ),\n float3(targetX, targetY, targetZ),\n float3(upX, upY, upZ)\n )\n if (useDirectExposure && directExposure != null) {\n camera.setExposureDirect(directExposure!!)\n } else {\n camera.setExposure(aperture, shutterSpeed, sensitivity)\n }\n }\n}\n","package io.github.sceneview.web.nodes\n\n/**\n * Light configuration for SceneView web.\n *\n * ```kotlin\n * light {\n * directional()\n * intensity(100_000.0)\n * color(1.0f, 1.0f, 1.0f)\n * direction(0.0f, -1.0f, -0.5f)\n * }\n * ```\n */\nclass LightConfig {\n var type = LightType.DIRECTIONAL; private set\n var intensity = 100_000.0; private set\n var colorR = 1.0f; private set\n var colorG = 1.0f; private set\n var colorB = 1.0f; private set\n var directionX = 0.0f; private set\n var directionY = -1.0f; private set\n var directionZ = -0.5f; private set\n var positionX = 0.0f; private set\n var positionY = 3.0f; private set\n var positionZ = 0.0f; private set\n\n fun directional() { type = LightType.DIRECTIONAL }\n fun point() { type = LightType.POINT }\n fun spot() { type = LightType.SPOT }\n\n fun intensity(value: Double) { intensity = value }\n\n fun color(r: Float, g: Float, b: Float) {\n colorR = r; colorG = g; colorB = b\n }\n\n fun direction(x: Float, y: Float, z: Float) {\n directionX = x; directionY = y; directionZ = z\n }\n\n fun position(x: Float, y: Float, z: Float) {\n positionX = x; positionY = y; positionZ = z\n }\n}\n\nenum class LightType {\n DIRECTIONAL,\n POINT,\n SPOT\n}\n",null,"module.exports = __WEBPACK_EXTERNAL_MODULE__650__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(607);\n"],"names":["root","factory","exports","module","require","define","amd","globalThis","__WEBPACK_EXTERNAL_MODULE__650__","a","<this>","separator","prefix","postfix","limit","truncated","transform","buffer","count","element","value","name","ordinal","interfaces","maxSize","masks","i","currentSize","imask","iid","iidImask","capacity","result","mask","activeBit","numberIndex","intArray","numberWithSettledBit","index","code","it","proto","o","obj","obj1","obj2","instance","constructorFunction","constructor","this_","message","cause","errorInfo","kind","ctor","defaultConstructor","parent","suspendArity","associatedObjectKey","associatedObjects","metadata","iface","possibleActiveBit","parentProto","propName","collection","destination","iterator","initialCapacity","array","content","uppercase","other","ignoreCase","thisUpper","otherUpper","fromIndex","toIndex","size","c","otherIterator","throwable","delimiter","missingDelimiterValue","char","startIndex","chars","maximumValue","charAtIndex","arr","v","api","createViewerImpl","modelUrl","then","$modelUrl","viewer","loadModel","console","log","canvasId","autoRotate","cameraControls","cameraX","cameraY","cameraZ","fov","lightIntensity","document","getElementById","Promise","reject","$canvas","$autoRotate","$cameraControls","$cameraX","$cameraY","$cameraZ","$fov","$lightIntensity","canvas","width","height","clientWidth","clientHeight","resolve","$this$create","$this$camera","$this$light","$resolve","sceneView","window","addEventListener","e","event","button","clientX","clientY","preventDefault","dx","dy","delta","deltaY","touches","length","pinchDistance","camera","setupEventListeners","asset","animator","animationTime","timestamp","w","h","deltaSeconds","getAnimationCount","duration","getAnimationDuration","applyAnimation","updateBoneMatrices","execute","beginFrame","renderView","endFrame","requestAnimationFrame","response","arrayBuffer","$loader","$basePath","$url","$onLoaded","createAsset","entities","getEntities","addEntities","getInstance","getAnimator","loadedModel","LoadedModel","loadResources","$asset","$entities","releaseSourceData","error","engine","renderer","scene","view","swapChain","cameraEntity","$sv","x","y","z","push","eyeX","eyeY","eyeZ","lookAt","float3","assets","configure","onReady","$configure","$onReady","init","Engine","create","createRenderer","createScene","createSwapChain","createView","createCamera","setCamera","setScene","setViewport","viewport","aspect","setProjectionFov","setExposureDirect","setClearOptions","setAmbientOcclusionOptions","enabled","radius","bias","intensity","quality","setBloomOptions","strength","threshold","levels","setTemporalAntiAliasingOptions","SceneView","builder","SceneViewBuilder","distance","targetX","targetY","targetZ","OrbitCameraController","controller","renderLoop","cancelAnimationFrame","url","onLoaded","createAssetLoader","loader","basePath","substringBeforeLast","fetch","catch","iblUrl","skyboxUrl","$iblUrl","ibl","createIblFromKtx1","setIndirectLight","skybox","createSkyFromKtx1","setSkybox","config","entity","lightType","LightManager","Builder","color","castShadows","direction","position","falloff","build","addEntity","minX","minY","minZ","maxX","maxY","maxZ","aabb","getBoundingBox","mn","min","mx","max","cx","cy","cz","dz","destroyAsset","delete","destroyEntity","destroyRenderer","destroyView","destroyScene","destroyCameraComponent","destroySwapChain","destroy","block","CameraConfig","LightConfig","keyLight","fillLight","rimLight","cam","sv","theta","phi","speed","r","g","b","opts","degrees","setExposure","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"sceneview-web.js","mappings":"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","sources":["webpack://sceneview-web/webpack/universalModuleDefinition","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/globalThis.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/math.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/ArrayBuffer.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/metadataUtils.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/js-builtin-sources/libraries/stdlib/jvm/builtins/Number.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Arrays.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Collections.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Char.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Enum.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Library.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/builtins/Primitives.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/boxedLong.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/NumbersJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/charSequenceJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/collectionsHacks.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/compareTo.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/coreRuntime.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/coreRuntime.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/typeCheckUtils.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/hacks.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/metadataUtils.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/Unit.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collectionJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/Collections.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/kotlin.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/AbstractMutableCollection.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/AbstractMutableList.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/collections/ArrayList.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/util/Preconditions.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/util/Standard.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/exceptions.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/reflect/KClassImpl.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/StringBuilderJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/charJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/stringJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/generated/_ComparisonsJs.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/AbstractCollection.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/collections/AbstractList.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Appendable.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Char.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/src/kotlin/text/Strings.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Strings.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/numberConversion.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/numberConversion.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/text/stringsCode.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/common/src/generated/_Ranges.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/arrays.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/arrays.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/runtime/noPackageHacks.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/Main.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/OrbitCameraController.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/math.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/SceneView.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/SceneViewJS.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/bindings/FilamentHelpers.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/nodes/CameraConfig.kt","webpack://sceneview-web/../../../../sceneview-web/src/jsMain/kotlin/io/github/sceneview/web/nodes/LightConfig.kt","webpack://sceneview-web/../../../../../sceneview-web/build/compileSync/js/main/productionExecutable/kotlin/js/src/kotlin/Promise.kt","webpack://sceneview-web/external umd \"Filament\"","webpack://sceneview-web/webpack/bootstrap","webpack://sceneview-web/webpack/startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"Filament\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"Filament\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sceneview-web\"] = factory(require(\"Filament\"));\n\telse\n\t\troot[\"sceneview-web\"] = factory(root[\"Filament\"]);\n})(globalThis, (__WEBPACK_EXTERNAL_MODULE__650__) => {\nreturn ",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"package io.github.sceneview.web\n\nimport kotlinx.browser.document\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\nimport kotlin.js.Promise\n\n/**\n * Entry point for the SceneView Web library.\n *\n * Registers the SceneView API on `window.sceneview` so it can be used\n * from plain JavaScript after loading via `<script>` tag.\n *\n * Usage:\n * ```html\n * <script src=\"sceneview-web.js\"></script>\n * <script>\n * sceneview.createViewer(\"canvas\").then(sv => sv.loadModel(\"model.glb\"));\n * </script>\n * ```\n */\nfun main() {\n // Register the API on the global window object\n val api: dynamic = js(\"{}\")\n\n api[\"version\"] = SCENEVIEW_VERSION\n api[\"createViewer\"] = ::jsCreateViewer\n api[\"createViewerAutoRotate\"] = ::jsCreateViewerAutoRotate\n api[\"createViewerFull\"] = ::jsCreateViewerFull\n api[\"modelViewer\"] = ::jsModelViewer\n api[\"modelViewerAutoRotate\"] = ::jsModelViewerAutoRotate\n\n js(\"window\")[\"sceneview\"] = api\n\n console.log(\"SceneView Web v$SCENEVIEW_VERSION loaded\")\n}\n\n// --- JS-callable bridge functions ---\n// These use explicit types that map cleanly to JavaScript\n\nfun jsCreateViewer(canvasId: String): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = true, cameraControls = true)\n}\n\nfun jsCreateViewerAutoRotate(canvasId: String, autoRotate: Boolean): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = autoRotate, cameraControls = true)\n}\n\nfun jsCreateViewerFull(\n canvasId: String,\n autoRotate: Boolean,\n cameraControls: Boolean,\n cameraX: Double,\n cameraY: Double,\n cameraZ: Double,\n fov: Double,\n lightIntensity: Double\n): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate, cameraControls, cameraX, cameraY, cameraZ, fov, lightIntensity)\n}\n\nfun jsModelViewer(canvasId: String, modelUrl: String): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = true, cameraControls = true).then { viewer ->\n viewer.loadModel(modelUrl)\n viewer\n }\n}\n\nfun jsModelViewerAutoRotate(canvasId: String, modelUrl: String, autoRotate: Boolean): Promise<SceneViewJS> {\n return createViewerImpl(canvasId, autoRotate = autoRotate, cameraControls = true).then { viewer ->\n viewer.loadModel(modelUrl)\n viewer\n }\n}\n\n// --- Internal implementation ---\n\ninternal fun createViewerImpl(\n canvasId: String,\n autoRotate: Boolean,\n cameraControls: Boolean,\n cameraX: Double = 0.0,\n cameraY: Double = 1.5,\n cameraZ: Double = 5.0,\n fov: Double = 45.0,\n lightIntensity: Double = 50_000.0\n): Promise<SceneViewJS> {\n val canvas = document.getElementById(canvasId) as? HTMLCanvasElement\n ?: return Promise.reject(Throwable(\"Canvas element '$canvasId' not found\"))\n\n // Ensure canvas has physical pixel dimensions\n if (canvas.width == 0 || canvas.height == 0) {\n canvas.width = canvas.clientWidth\n canvas.height = canvas.clientHeight\n }\n\n return Promise { resolve, reject ->\n try {\n SceneView.create(\n canvas = canvas,\n configure = {\n camera {\n eye(cameraX, cameraY, cameraZ)\n target(0.0, 0.0, 0.0)\n fov(fov)\n }\n light {\n directional()\n intensity(lightIntensity)\n direction(0.6f, -1.0f, -0.8f)\n }\n autoRotate(autoRotate)\n cameraControls(cameraControls)\n },\n onReady = { sceneView ->\n sceneView.startRendering()\n\n // Auto-resize on window resize\n window.addEventListener(\"resize\", {\n canvas.width = canvas.clientWidth\n canvas.height = canvas.clientHeight\n })\n\n val viewer = SceneViewJS()\n viewer.attach(sceneView)\n resolve(viewer)\n }\n )\n } catch (e: Throwable) {\n reject(e)\n }\n }\n}\n","package io.github.sceneview.web\n\nimport io.github.sceneview.web.bindings.Camera\nimport io.github.sceneview.web.bindings.float3\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\nimport org.w3c.dom.events.MouseEvent\nimport org.w3c.dom.events.WheelEvent\nimport kotlin.math.PI\nimport kotlin.math.cos\nimport kotlin.math.max\nimport kotlin.math.min\nimport kotlin.math.sin\n\n/**\n * Orbit camera controller for SceneView Web.\n *\n * Provides mouse/touch-based orbit, zoom, and pan controls similar to\n * three.js OrbitControls or Google model-viewer's camera-controls.\n *\n * Usage:\n * ```kotlin\n * val controller = OrbitCameraController(canvas, sceneView.camera)\n * controller.target(0.0, 0.0, 0.0)\n * controller.distance = 5.0\n * // Call update() each frame in the render loop\n * ```\n */\nclass OrbitCameraController(\n private val canvas: HTMLCanvasElement,\n private val camera: Camera\n) {\n // Spherical coordinates — defaults match model-viewer's \"45deg 70deg 2.5m\"\n var theta = 45.0 * PI / 180.0 // horizontal angle (radians) — 45° like model-viewer\n var phi = 70.0 * PI / 180.0 // vertical angle (radians) — 70° like model-viewer\n var distance = 5.0 // distance from target\n\n // Target point (orbit center)\n var targetX = 0.0\n var targetY = 0.0\n var targetZ = 0.0\n\n // Limits\n var minDistance = 0.5\n var maxDistance = 50.0\n var minPhi = 0.1 // prevent looking straight down\n var maxPhi = PI - 0.1 // prevent looking straight up\n\n // Sensitivity\n var rotateSensitivity = 0.005\n var zoomSensitivity = 0.1\n var panSensitivity = 0.003\n\n // Auto-rotation — default speed matches model-viewer's 30deg/sec at 60fps\n var autoRotate = false\n var autoRotateSpeed = 30.0 * PI / 180.0 / 60.0 // 30°/sec ÷ 60fps ≈ 0.00873 rad/frame\n\n // Damping (inertia) — higher factor = smoother, more model-viewer-like\n var enableDamping = true\n var dampingFactor = 0.95\n private var velocityTheta = 0.0\n private var velocityPhi = 0.0\n\n // Mouse state\n private var isDragging = false\n private var isRightDragging = false\n private var lastX = 0.0\n private var lastY = 0.0\n\n init {\n setupEventListeners()\n }\n\n fun target(x: Double, y: Double, z: Double) {\n targetX = x; targetY = y; targetZ = z\n }\n\n /**\n * Update camera position from spherical coordinates.\n * Call this every frame in the render loop.\n *\n * Converts spherical coordinates (theta, phi, distance) to Cartesian\n * and calls camera.lookAt() with float3 arrays as required by Filament.js.\n */\n fun update() {\n // Apply auto-rotation\n if (autoRotate && !isDragging) {\n theta += autoRotateSpeed\n }\n\n // Apply damping\n if (enableDamping) {\n theta += velocityTheta\n phi += velocityPhi\n velocityTheta *= dampingFactor\n velocityPhi *= dampingFactor\n }\n\n // Clamp phi\n phi = max(minPhi, min(maxPhi, phi))\n distance = max(minDistance, min(maxDistance, distance))\n\n // Convert spherical to cartesian\n val eyeX = targetX + distance * sin(phi) * sin(theta)\n val eyeY = targetY + distance * cos(phi)\n val eyeZ = targetZ + distance * sin(phi) * cos(theta)\n\n // Filament.js Camera.lookAt takes float3 arrays, not 9 separate doubles\n camera.lookAt(\n float3(eyeX, eyeY, eyeZ), // eye\n float3(targetX, targetY, targetZ), // center\n float3(0.0, 1.0, 0.0) // up\n )\n }\n\n /** Remove all event listeners. Call when destroying the SceneView. */\n fun dispose() {\n // Event listeners are attached to the canvas and will be GC'd with it\n }\n\n private fun setupEventListeners() {\n // Mouse down\n canvas.addEventListener(\"mousedown\", { event ->\n val e = event as MouseEvent\n when (e.button.toInt()) {\n 0 -> { isDragging = true } // Left button = orbit\n 2 -> { isRightDragging = true } // Right button = pan\n }\n lastX = e.clientX.toDouble()\n lastY = e.clientY.toDouble()\n e.preventDefault()\n })\n\n // Mouse move\n canvas.addEventListener(\"mousemove\", { event ->\n val e = event as MouseEvent\n val dx = e.clientX.toDouble() - lastX\n val dy = e.clientY.toDouble() - lastY\n lastX = e.clientX.toDouble()\n lastY = e.clientY.toDouble()\n\n if (isDragging) {\n // Orbit\n if (enableDamping) {\n velocityTheta = -dx * rotateSensitivity\n velocityPhi = -dy * rotateSensitivity\n } else {\n theta -= dx * rotateSensitivity\n phi -= dy * rotateSensitivity\n }\n } else if (isRightDragging) {\n // Pan\n targetX += dx * panSensitivity * distance\n targetY -= dy * panSensitivity * distance\n }\n })\n\n // Mouse up\n canvas.addEventListener(\"mouseup\", {\n isDragging = false\n isRightDragging = false\n })\n\n canvas.addEventListener(\"mouseleave\", {\n isDragging = false\n isRightDragging = false\n })\n\n // Scroll wheel = zoom\n canvas.addEventListener(\"wheel\", { event ->\n val e = event as WheelEvent\n val delta = if (e.deltaY > 0) 1.0 else -1.0\n distance *= 1.0 + delta * zoomSensitivity\n distance = max(minDistance, min(maxDistance, distance))\n e.preventDefault()\n }, js(\"{passive: false}\"))\n\n // Prevent context menu on right-click\n canvas.addEventListener(\"contextmenu\", { event ->\n event.preventDefault()\n })\n\n // Touch support\n canvas.addEventListener(\"touchstart\", { event ->\n val e = event.asDynamic()\n if (e.touches.length == 1) {\n isDragging = true\n lastX = (e.touches[0].clientX as Number).toDouble()\n lastY = (e.touches[0].clientY as Number).toDouble()\n }\n event.preventDefault()\n }, js(\"{passive: false}\"))\n\n canvas.addEventListener(\"touchmove\", { event ->\n val e = event.asDynamic()\n if (isDragging && e.touches.length == 1) {\n val dx = (e.touches[0].clientX as Number).toDouble() - lastX\n val dy = (e.touches[0].clientY as Number).toDouble() - lastY\n lastX = (e.touches[0].clientX as Number).toDouble()\n lastY = (e.touches[0].clientY as Number).toDouble()\n\n if (enableDamping) {\n velocityTheta = -dx * rotateSensitivity\n velocityPhi = -dy * rotateSensitivity\n } else {\n theta -= dx * rotateSensitivity\n phi -= dy * rotateSensitivity\n }\n } else if (e.touches.length == 2) {\n // Pinch-to-zoom\n val dx = (e.touches[0].clientX as Number).toDouble() - (e.touches[1].clientX as Number).toDouble()\n val dy = (e.touches[0].clientY as Number).toDouble() - (e.touches[1].clientY as Number).toDouble()\n val pinchDistance = kotlin.math.sqrt(dx * dx + dy * dy)\n\n if (lastPinchDistance > 0) {\n val delta = lastPinchDistance - pinchDistance\n distance *= 1.0 + delta * 0.005\n distance = max(minDistance, min(maxDistance, distance))\n }\n lastPinchDistance = pinchDistance\n }\n event.preventDefault()\n }, js(\"{passive: false}\"))\n\n canvas.addEventListener(\"touchend\", {\n isDragging = false\n lastPinchDistance = -1.0\n })\n }\n\n private var lastPinchDistance = -1.0\n}\n",null,"package io.github.sceneview.web\n\nimport io.github.sceneview.web.bindings.*\nimport io.github.sceneview.web.nodes.CameraConfig\nimport io.github.sceneview.web.nodes.LightConfig\nimport io.github.sceneview.web.nodes.LightType\nimport io.github.sceneview.web.nodes.ModelConfig\nimport kotlinx.browser.window\nimport org.w3c.dom.HTMLCanvasElement\n\n/**\n * SceneView for Web -- Filament.js based 3D viewer.\n *\n * Uses the same Filament rendering engine as SceneView Android,\n * compiled to WebAssembly for browser execution.\n *\n * This class actually initializes the Filament WASM module, creates a real\n * WebGL2 rendering context, and renders 3D content using the GPU.\n *\n * Basic usage:\n * ```kotlin\n * SceneView.create(canvas) {\n * camera {\n * eye(0.0, 1.5, 5.0)\n * target(0.0, 0.0, 0.0)\n * }\n * light {\n * directional()\n * intensity(100_000.0)\n * }\n * model(\"models/damaged_helmet.glb\")\n * }\n * ```\n */\nclass SceneView private constructor(\n val canvas: HTMLCanvasElement,\n val engine: Engine,\n val renderer: Renderer,\n val scene: Scene,\n val view: View,\n val camera: Camera,\n val swapChain: SwapChain,\n private val cameraEntity: Entity\n) {\n private var animationFrameId: Int? = null\n private var isRunning = false\n private var lastTimestamp = 0.0\n\n private val models = mutableListOf<LoadedModel>()\n private var assetLoader: AssetLoader? = null\n private val lightEntities = mutableListOf<Entity>()\n\n /** Tracks a loaded glTF asset with its animation state. */\n private class LoadedModel(\n val asset: FilamentAsset,\n val animator: Animator?,\n var animationTime: Double = 0.0\n )\n\n /** Orbit camera controller -- initialized when cameraControls is enabled. */\n var cameraController: OrbitCameraController? = null\n private set\n\n /** Enable orbit camera controls (mouse drag to orbit, scroll to zoom, touch support). */\n fun enableCameraControls(\n distance: Double = 5.0,\n targetX: Double = 0.0,\n targetY: Double = 0.0,\n targetZ: Double = 0.0,\n autoRotate: Boolean = false\n ): OrbitCameraController {\n val controller = OrbitCameraController(canvas, camera).apply {\n this.distance = distance\n target(targetX, targetY, targetZ)\n this.autoRotate = autoRotate\n }\n cameraController = controller\n return controller\n }\n\n companion object {\n /** Default IBL URL — same \"neutral\" environment as SceneView Android. */\n const val DEFAULT_IBL_URL = \"https://sceneview.github.io/assets/environments/neutral_ibl.ktx\"\n const val DEFAULT_SKYBOX_URL = \"https://sceneview.github.io/assets/environments/neutral_skybox.ktx\"\n\n /**\n * Initialize Filament WASM and create a SceneView instance.\n *\n * This is the main entry point. It:\n * 1. Calls Filament.init() to load and compile the WASM module\n * 2. Creates a Filament Engine with a WebGL2 context on the canvas\n * 3. Sets up Scene, View, Camera, Renderer, and SwapChain\n * 4. Applies the user's configuration (camera, lights, models)\n * 5. Calls onReady with the fully initialized SceneView\n *\n * @param canvas The HTML canvas element to render into\n * @param assets List of asset URLs to preload (IBL, skybox KTX files)\n * @param configure DSL block to configure the scene\n * @param onReady Callback when the SceneView is fully initialized\n */\n fun create(\n canvas: HTMLCanvasElement,\n assets: Array<String> = emptyArray(),\n configure: SceneViewBuilder.() -> Unit = {},\n onReady: (SceneView) -> Unit\n ) {\n // Step 1: Initialize Filament WASM module and preload any assets\n init(assets) {\n try {\n // Step 2: Create the Filament engine with WebGL2 context\n // Use dynamic call because webpack externals + Kotlin companion objects\n // don't resolve correctly for Filament's static Engine.create()\n val filament: dynamic = js(\"Filament\")\n val engine: Engine = filament.Engine.create(canvas).unsafeCast<Engine>()\n val renderer = engine.createRenderer()\n val scene = engine.createScene()\n val swapChain = engine.createSwapChain()\n val view = engine.createView()\n\n // Step 3: Create camera entity and camera\n val cameraEntity = (js(\"Filament.EntityManager.get().create()\") as Entity)\n val camera = engine.createCamera(cameraEntity)\n\n // Step 4: Connect view to camera and scene\n view.setCamera(camera)\n view.setScene(scene)\n\n // Step 5: Set viewport to canvas pixel dimensions\n val width = canvas.width\n val height = canvas.height\n view.setViewport(viewport(0, 0, width, height))\n\n // Step 6: Default camera setup -- perspective projection\n val aspect = if (height > 0) width.toDouble() / height.toDouble() else 1.0\n camera.setProjectionFov(\n fovInDegrees = 45.0,\n aspect = aspect,\n near = 0.1,\n far = 1000.0\n )\n\n // Default camera position: slightly above and back, looking at origin\n camera.lookAt(\n float3(0.0, 1.5, 5.0), // eye\n float3(0.0, 0.0, 0.0), // center\n float3(0.0, 1.0, 0.0) // up\n )\n\n // Default exposure matching model-viewer's exposure=1.1\n // This makes IBL-lit models look bright and vibrant\n camera.setExposureDirect(1.1)\n\n // Set clear color to near-black (clean dark background)\n renderer.setClearOptions(js(\"({clearColor: [0.05, 0.05, 0.07, 1.0], clear: true})\"))\n\n // --- Quality defaults for PBR rendering ---\n // Screen-space ambient occlusion (soft contact shadows)\n view.setAmbientOcclusionOptions(js(\"\"\"({\n enabled: true,\n radius: 0.3,\n bias: 0.0005,\n intensity: 1.0,\n quality: 1\n })\"\"\"))\n\n // Subtle bloom for emissive/bright highlights\n view.setBloomOptions(js(\"\"\"({\n enabled: true,\n strength: 0.1,\n threshold: true,\n levels: 4\n })\"\"\"))\n\n // Temporal anti-aliasing for smooth edges\n view.setTemporalAntiAliasingOptions(js(\"\"\"({\n enabled: true\n })\"\"\"))\n\n val sceneView = SceneView(\n canvas, engine, renderer, scene, view, camera, swapChain, cameraEntity\n )\n\n // Step 7: Apply user configuration (camera, lights, models, environment)\n val builder = SceneViewBuilder(sceneView)\n builder.configure()\n builder.apply()\n\n onReady(sceneView)\n } catch (e: Throwable) {\n console.error(\"SceneView: Failed to initialize Filament engine\", e)\n }\n }\n }\n }\n\n /** Resize the viewport to match the canvas dimensions. Call on window resize. */\n fun resize(width: Int = canvas.clientWidth, height: Int = canvas.clientHeight) {\n if (width <= 0 || height <= 0) return\n canvas.width = width\n canvas.height = height\n view.setViewport(viewport(0, 0, width, height))\n camera.setProjectionFov(\n fovInDegrees = 45.0,\n aspect = width.toDouble() / height.toDouble(),\n near = 0.1,\n far = 1000.0\n )\n }\n\n /** Enable automatic viewport resizing when the canvas CSS size changes. */\n var autoResize = true\n\n /** Start the render loop using requestAnimationFrame. */\n fun startRendering() {\n if (isRunning) return\n isRunning = true\n lastTimestamp = 0.0\n renderLoop(0.0)\n }\n\n /** Stop the render loop. */\n fun stopRendering() {\n isRunning = false\n animationFrameId?.let { window.cancelAnimationFrame(it) }\n animationFrameId = null\n }\n\n /**\n * Load a glTF/GLB model from a URL and add it to the scene.\n *\n * This performs the full loading pipeline:\n * 1. Fetch the .glb/.gltf file as an ArrayBuffer\n * 2. Create a FilamentAsset via the AssetLoader\n * 3. Add all renderable entities to the scene\n * 4. Call loadResources() to fetch external textures/buffers\n * 5. Release source data to free memory\n *\n * @param url URL to the .glb or .gltf file\n * @param onLoaded Optional callback when the model is fully loaded (with resources)\n */\n fun loadModel(\n url: String,\n onLoaded: ((FilamentAsset) -> Unit)? = null\n ) {\n val loader = assetLoader ?: engine.createAssetLoader().also { assetLoader = it }\n\n // Derive the base path for resolving relative resource URIs\n val basePath = url.substringBeforeLast('/') + \"/\"\n\n window.fetch(url).then { response ->\n response.arrayBuffer()\n }.then { buffer ->\n val asset = loader.createAsset(buffer)\n if (asset != null) {\n // Add all entities to the scene so they become visible\n val entities = asset.getEntities()\n scene.addEntities(entities)\n\n // Get the animator from the asset instance for animation playback\n val animator = try {\n asset.getInstance().getAnimator()\n } catch (e: Throwable) {\n null\n }\n\n val loadedModel = LoadedModel(asset, animator)\n models.add(loadedModel)\n\n // Load external resources (textures, buffers) referenced by the glTF.\n // This is REQUIRED for models to render with correct materials.\n asset.loadResources(\n onDone = {\n // Release the source glTF data now that resources are loaded\n asset.releaseSourceData()\n console.log(\"SceneView: Model loaded from $url (${entities.size} entities)\")\n onLoaded?.invoke(asset)\n },\n onFetched = null,\n basePath = basePath,\n asyncInterval = null\n )\n } else {\n console.error(\"SceneView: AssetLoader failed to parse model from $url\")\n }\n }.catch { error ->\n console.error(\"SceneView: Error fetching model from $url\", error)\n }\n }\n\n /**\n * Load the default neutral IBL environment.\n * Provides physically-correct PBR reflections without a visible skybox —\n * models look like they're in a photography studio.\n */\n fun loadDefaultEnvironment() {\n loadEnvironment(DEFAULT_IBL_URL)\n }\n\n /** Load an IBL (Image-Based Lighting) from a KTX file URL. */\n fun loadEnvironment(iblUrl: String, skyboxUrl: String? = null) {\n // Fetch and create IBL (indirect lighting) from a KTX1 file\n window.fetch(iblUrl).then { it.arrayBuffer() }.then { buffer ->\n val ibl = engine.createIblFromKtx1(buffer)\n scene.setIndirectLight(ibl)\n console.log(\"SceneView: IBL loaded from $iblUrl\")\n }.catch { error ->\n console.error(\"SceneView: Error loading IBL from $iblUrl\", error)\n }\n\n // Optionally load a skybox from a separate KTX file\n skyboxUrl?.let { url ->\n window.fetch(url).then { it.arrayBuffer() }.then { buffer ->\n val skybox = engine.createSkyFromKtx1(buffer)\n scene.setSkybox(skybox)\n console.log(\"SceneView: Skybox loaded from $url\")\n }.catch { error ->\n console.error(\"SceneView: Error loading skybox from $url\", error)\n }\n }\n }\n\n /**\n * Add a light to the scene using the Filament LightManager Builder API.\n *\n * The Filament.js LightManager.Builder is accessed via:\n * Filament.LightManager.Builder(type).intensity(n).direction([x,y,z]).build(engine, entity)\n */\n fun addLight(config: LightConfig) {\n val entity = (js(\"Filament.EntityManager.get().create()\") as Entity)\n\n // Map our LightType enum to Filament's numeric type constants\n // In Filament.js: 0 = SUN, 1 = DIRECTIONAL, 2 = POINT, 3 = FOCUSED_SPOT, 4 = SPOT\n val lightType = when (config.type) {\n LightType.DIRECTIONAL -> 1\n LightType.POINT -> 2\n LightType.SPOT -> 4\n }\n\n // Use the Builder pattern: LightManager.Builder(type).intensity(...).build(engine, entity)\n val builder = LightManager.Builder(lightType)\n builder.intensity(config.intensity)\n builder.color(float3(\n config.colorR.toDouble(),\n config.colorG.toDouble(),\n config.colorB.toDouble()\n ))\n builder.castShadows(true)\n\n if (config.type == LightType.DIRECTIONAL) {\n builder.direction(float3(\n config.directionX.toDouble(),\n config.directionY.toDouble(),\n config.directionZ.toDouble()\n ))\n } else {\n builder.position(float3(\n config.positionX.toDouble(),\n config.positionY.toDouble(),\n config.positionZ.toDouble()\n ))\n builder.falloff(10.0)\n }\n\n builder.build(engine, entity)\n scene.addEntity(entity)\n lightEntities.add(entity)\n }\n\n /**\n * Auto-fit the camera to frame all loaded models.\n * Computes the bounding box of all assets and adjusts the orbit controller distance.\n */\n fun fitToModels() {\n if (models.isEmpty()) return\n val controller = cameraController ?: return\n\n // Compute the union bounding box of all loaded models\n var minX = Double.MAX_VALUE; var minY = Double.MAX_VALUE; var minZ = Double.MAX_VALUE\n var maxX = -Double.MAX_VALUE; var maxY = -Double.MAX_VALUE; var maxZ = -Double.MAX_VALUE\n\n for (model in models) {\n val aabb = model.asset.getBoundingBox()\n val mn: dynamic = aabb.min\n val mx: dynamic = aabb.max\n if ((mn[0] as Number).toDouble() < minX) minX = (mn[0] as Number).toDouble()\n if ((mn[1] as Number).toDouble() < minY) minY = (mn[1] as Number).toDouble()\n if ((mn[2] as Number).toDouble() < minZ) minZ = (mn[2] as Number).toDouble()\n if ((mx[0] as Number).toDouble() > maxX) maxX = (mx[0] as Number).toDouble()\n if ((mx[1] as Number).toDouble() > maxY) maxY = (mx[1] as Number).toDouble()\n if ((mx[2] as Number).toDouble() > maxZ) maxZ = (mx[2] as Number).toDouble()\n }\n\n val cx = (minX + maxX) / 2.0\n val cy = (minY + maxY) / 2.0\n val cz = (minZ + maxZ) / 2.0\n val dx = maxX - minX\n val dy = maxY - minY\n val dz = maxZ - minZ\n val radius = kotlin.math.sqrt(dx * dx + dy * dy + dz * dz) / 2.0\n\n controller.target(cx, cy, cz)\n controller.distance = radius * 2.5\n controller.minDistance = radius * 0.5\n controller.maxDistance = radius * 10.0\n }\n\n /** Clean up all Filament resources. */\n fun destroy() {\n stopRendering()\n cameraController?.dispose()\n\n // Destroy loaded assets\n assetLoader?.let { loader ->\n models.forEach { loader.destroyAsset(it.asset) }\n loader.delete()\n }\n models.clear()\n\n // Destroy light entities\n lightEntities.forEach { engine.destroyEntity(it) }\n lightEntities.clear()\n\n // Destroy core Filament objects\n engine.destroyRenderer(renderer)\n engine.destroyView(view)\n engine.destroyScene(scene)\n engine.destroyCameraComponent(cameraEntity)\n engine.destroySwapChain(swapChain)\n val filament: dynamic = js(\"Filament\")\n filament.Engine.destroy(engine)\n }\n\n /**\n * The render loop -- called every frame via requestAnimationFrame.\n *\n * Each frame:\n * 1. Auto-resizes viewport if CSS size changed\n * 2. Updates orbit camera controller (rotation, damping)\n * 3. Advances glTF animations\n * 4. Calls engine.execute() to process pending async operations\n * 5. Renders the frame via beginFrame/renderView/endFrame\n */\n private fun renderLoop(timestamp: Double) {\n if (!isRunning) return\n\n // Auto-resize viewport if canvas CSS size changed\n if (autoResize) {\n val w = canvas.clientWidth\n val h = canvas.clientHeight\n if (w > 0 && h > 0 && (w != canvas.width || h != canvas.height)) {\n resize(w, h)\n }\n }\n\n // Update orbit camera\n cameraController?.update()\n\n // Track animation time\n val deltaSeconds = if (lastTimestamp > 0) (timestamp - lastTimestamp) / 1000.0 else 0.0\n lastTimestamp = timestamp\n\n // Update glTF animations for all loaded models\n models.forEach { model ->\n model.animator?.let { animator ->\n val count = animator.getAnimationCount()\n if (count > 0) {\n model.animationTime += deltaSeconds\n val duration = animator.getAnimationDuration(0)\n if (duration > 0) {\n // Loop the animation\n model.animationTime = model.animationTime % duration\n }\n // In Filament.js, applyAnimation only takes the index.\n // The animation time is set by calling the animator at the right moment.\n // Actually, the gltfio$Animator.applyAnimation(index) applies the animation\n // at the CURRENT time set internally -- we need to advance it.\n // The proper way is: animator.applyAnimation(index) after setting time\n // via the asset's animation system.\n // For Filament.js, we use the asset instance animator which tracks time internally.\n animator.applyAnimation(0)\n animator.updateBoneMatrices()\n }\n }\n }\n\n // Process any pending async Filament operations (texture uploads, etc.)\n engine.execute()\n\n // Render frame\n if (renderer.beginFrame(swapChain)) {\n renderer.renderView(view)\n renderer.endFrame()\n }\n\n animationFrameId = window.requestAnimationFrame(::renderLoop)\n }\n}\n\n/**\n * DSL builder for SceneView configuration.\n */\nclass SceneViewBuilder(private val sceneView: SceneView) {\n private var cameraConfig: CameraConfig? = null\n private var lightConfig: LightConfig? = null\n private val modelConfigs = mutableListOf<ModelConfig>()\n private var iblUrl: String? = null\n private var skyboxUrl: String? = null\n private var cameraControlsEnabled = true\n private var autoRotateEnabled = false\n private var useDefaultEnvironment = true\n\n /** Configure the camera. */\n fun camera(block: CameraConfig.() -> Unit) {\n cameraConfig = CameraConfig().apply(block)\n }\n\n /** Configure a directional light. */\n fun light(block: LightConfig.() -> Unit) {\n lightConfig = LightConfig().apply(block)\n }\n\n /** Add a glTF/GLB model by URL. */\n fun model(url: String, block: ModelConfig.() -> Unit = {}) {\n modelConfigs.add(ModelConfig(url).apply(block))\n }\n\n /** Set environment lighting from KTX IBL files. */\n fun environment(iblUrl: String, skyboxUrl: String? = null) {\n this.iblUrl = iblUrl\n this.skyboxUrl = skyboxUrl\n this.useDefaultEnvironment = false\n }\n\n /** Disable the default neutral IBL environment. */\n fun noEnvironment() {\n this.useDefaultEnvironment = false\n }\n\n /** Enable orbit camera controls (drag to orbit, scroll to zoom, touch). Enabled by default. */\n fun cameraControls(enabled: Boolean = true) {\n cameraControlsEnabled = enabled\n }\n\n /** Enable auto-rotation of the camera around the target. */\n fun autoRotate(enabled: Boolean = true) {\n autoRotateEnabled = enabled\n }\n\n internal fun apply() {\n cameraConfig?.applyTo(sceneView.camera)\n\n // If no explicit light was configured, add model-viewer-like 3-point lighting\n if (lightConfig != null) {\n sceneView.addLight(lightConfig!!)\n } else {\n // Key light — main directional, slightly warm\n val keyLight = LightConfig().apply {\n directional()\n intensity(50_000.0)\n direction(0.6f, -1.0f, -0.8f)\n }\n sceneView.addLight(keyLight)\n\n // Fill light — softer, from the opposite side\n val fillLight = LightConfig().apply {\n directional()\n intensity(25_000.0)\n direction(-0.6f, -0.5f, 0.8f)\n }\n sceneView.addLight(fillLight)\n\n // Rim/back light — highlights edges, cool tint\n val rimLight = LightConfig().apply {\n directional()\n intensity(30_000.0)\n color(0.85f, 0.9f, 1.0f) // slight cool tint\n direction(0.0f, -0.3f, 1.0f)\n }\n sceneView.addLight(rimLight)\n }\n\n // Load IBL environment for physically-correct PBR reflections\n if (iblUrl != null) {\n sceneView.loadEnvironment(iblUrl!!, skyboxUrl)\n } else if (useDefaultEnvironment) {\n // Load the bundled neutral IBL — same as Android SceneView default\n sceneView.loadDefaultEnvironment()\n }\n\n modelConfigs.forEach { config ->\n sceneView.loadModel(config.url, config.onLoaded)\n }\n if (cameraControlsEnabled) {\n val cam = cameraConfig\n sceneView.enableCameraControls(\n distance = cam?.eyeZ ?: 5.0,\n targetX = cam?.targetX ?: 0.0,\n targetY = cam?.targetY ?: 0.0,\n targetZ = cam?.targetZ ?: 0.0,\n autoRotate = autoRotateEnabled\n )\n }\n }\n}\n","package io.github.sceneview.web\n\nimport kotlin.js.Promise\n\n/**\n * SceneViewer — the JavaScript-facing 3D viewer class.\n *\n * Instances are created via `sceneview.createViewer()` or `sceneview.modelViewer()`.\n * All methods use `@JsName` to ensure stable, unmangled names in compiled JS.\n *\n * ```js\n * sceneview.createViewer(\"canvas\").then(function(sv) {\n * sv.loadModel(\"model.glb\");\n * sv.setAutoRotate(true);\n * });\n * ```\n */\n@JsExport\n@JsName(\"SceneViewer\")\nclass SceneViewJS {\n private var _sceneView: SceneView? = null\n private var disposed = false\n\n internal fun attach(sv: SceneView) {\n _sceneView = sv\n }\n\n /**\n * Load a glTF/GLB model from a URL.\n * Returns a Promise that resolves with the URL when loaded.\n */\n @JsName(\"loadModel\")\n fun loadModel(url: String): Promise<String> {\n val sv = _sceneView ?: return Promise.reject(Throwable(\"SceneViewer not initialized\"))\n return Promise { resolve, reject ->\n try {\n sv.loadModel(url) {\n resolve(url)\n }\n } catch (e: Throwable) {\n reject(e)\n }\n }\n }\n\n /**\n * Load environment lighting from a KTX IBL file URL.\n */\n @JsName(\"setEnvironment\")\n fun setEnvironment(iblUrl: String) {\n _sceneView?.loadEnvironment(iblUrl, null)\n }\n\n /**\n * Load environment lighting with skybox.\n */\n @JsName(\"setEnvironmentWithSkybox\")\n fun setEnvironmentWithSkybox(iblUrl: String, skyboxUrl: String) {\n _sceneView?.loadEnvironment(iblUrl, skyboxUrl)\n }\n\n /**\n * Set the camera orbit position in spherical coordinates.\n * @param theta Horizontal angle in radians\n * @param phi Vertical angle in radians\n * @param distance Distance from target\n */\n @JsName(\"setCameraOrbit\")\n fun setCameraOrbit(theta: Double, phi: Double, distance: Double) {\n _sceneView?.cameraController?.let {\n it.theta = theta\n it.phi = phi\n it.distance = distance\n }\n }\n\n /**\n * Set the camera orbit target (look-at point).\n */\n @JsName(\"setCameraTarget\")\n fun setCameraTarget(x: Double, y: Double, z: Double) {\n _sceneView?.cameraController?.target(x, y, z)\n }\n\n /**\n * Enable or disable auto-rotation.\n */\n @JsName(\"setAutoRotate\")\n fun setAutoRotate(enabled: Boolean) {\n _sceneView?.cameraController?.autoRotate = enabled\n }\n\n /**\n * Set auto-rotation speed in radians per frame.\n */\n @JsName(\"setAutoRotateSpeed\")\n fun setAutoRotateSpeed(speed: Double) {\n _sceneView?.cameraController?.autoRotateSpeed = speed\n }\n\n /**\n * Set minimum and maximum zoom distances.\n */\n @JsName(\"setZoomLimits\")\n fun setZoomLimits(min: Double, max: Double) {\n _sceneView?.cameraController?.let {\n it.minDistance = min\n it.maxDistance = max\n }\n }\n\n /**\n * Start the render loop. Called automatically by createViewer().\n */\n @JsName(\"startRendering\")\n fun startRendering() {\n _sceneView?.startRendering()\n }\n\n /**\n * Stop the render loop.\n */\n @JsName(\"stopRendering\")\n fun stopRendering() {\n _sceneView?.stopRendering()\n }\n\n /**\n * Resize the viewport. Normally handled automatically.\n */\n @JsName(\"resize\")\n fun resize(width: Int, height: Int) {\n _sceneView?.resize(width, height)\n }\n\n /**\n * Set the background clear color (RGBA, 0-1 range).\n * Use this to sync the 3D canvas background with your page theme.\n */\n @JsName(\"setBackgroundColor\")\n fun setBackgroundColor(r: Double, g: Double, b: Double, a: Double) {\n val sv = _sceneView ?: return\n val opts = js(\"{}\")\n val color = js(\"[]\")\n color.push(r, g, b, a)\n opts[\"clearColor\"] = color\n opts[\"clear\"] = true\n sv.renderer.setClearOptions(opts)\n }\n\n /**\n * Fit the camera to frame all loaded models.\n */\n @JsName(\"fitToModels\")\n fun fitToModels() {\n _sceneView?.fitToModels()\n }\n\n /**\n * Clean up all GPU resources. Call when removing the viewer.\n */\n @JsName(\"dispose\")\n fun dispose() {\n if (!disposed) {\n disposed = true\n _sceneView?.destroy()\n _sceneView = null\n }\n }\n}\n\n/**\n * Library version.\n */\nconst val SCENEVIEW_VERSION = \"3.6.0\"\n","package io.github.sceneview.web.bindings\n\n// -----------------------------------------------------------------------\n// Helper functions for creating Filament.js array types.\n//\n// Filament.js uses number[] (JavaScript arrays) for float3, float4, mat4, etc.\n// These helpers create the arrays in a Kotlin/JS-friendly way.\n//\n// NOTE: These MUST NOT be in the @JsModule(\"filament\") file (Filament.kt)\n// because non-external declarations are not allowed in @JsModule files.\n// -----------------------------------------------------------------------\n\n/**\n * Create a float3 array [x, y, z] for Filament.js API calls.\n *\n * Used by Camera.lookAt, LightManager.Builder.direction/position/color, etc.\n */\nfun float3(x: Double, y: Double, z: Double): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, z)\n return arr\n}\n\n/**\n * Create a float4 array [x, y, z, w] for Filament.js API calls.\n *\n * Used by Renderer.setClearOptions, Skybox.setColor, etc.\n */\nfun float4(x: Double, y: Double, z: Double, w: Double): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, z, w)\n return arr\n}\n\n/**\n * Create a viewport array [x, y, width, height] for View.setViewport().\n */\nfun viewport(x: Int, y: Int, width: Int, height: Int): dynamic {\n val arr = js(\"[]\")\n arr.push(x, y, width, height)\n return arr\n}\n","package io.github.sceneview.web.nodes\n\nimport io.github.sceneview.web.bindings.Camera\nimport io.github.sceneview.web.bindings.float3\n\n/**\n * Camera configuration for SceneView web.\n *\n * ```kotlin\n * camera {\n * eye(0.0, 1.5, 5.0)\n * target(0.0, 0.0, 0.0)\n * up(0.0, 1.0, 0.0)\n * fov(45.0)\n * near(0.1)\n * far(1000.0)\n * }\n * ```\n */\nclass CameraConfig {\n var eyeX = 0.0; private set\n var eyeY = 1.5; private set\n var eyeZ = 5.0; private set\n var targetX = 0.0; private set\n var targetY = 0.0; private set\n var targetZ = 0.0; private set\n var upX = 0.0; private set\n var upY = 1.0; private set\n var upZ = 0.0; private set\n var fovDegrees = 45.0; private set\n var nearPlane = 0.1; private set\n var farPlane = 1000.0; private set\n // Exposure defaults — matching model-viewer's exposure=1.1\n var aperture = 16.0; private set\n var shutterSpeed = 1.0 / 125.0; private set\n var sensitivity = 100.0; private set\n var directExposure: Double? = 1.1; private set\n var useDirectExposure = true; private set\n\n fun eye(x: Double, y: Double, z: Double) {\n eyeX = x; eyeY = y; eyeZ = z\n }\n\n fun target(x: Double, y: Double, z: Double) {\n targetX = x; targetY = y; targetZ = z\n }\n\n fun up(x: Double, y: Double, z: Double) {\n upX = x; upY = y; upZ = z\n }\n\n fun fov(degrees: Double) { fovDegrees = degrees }\n fun near(value: Double) { nearPlane = value }\n fun far(value: Double) { farPlane = value }\n\n fun exposure(aperture: Double, shutterSpeed: Double, sensitivity: Double) {\n this.aperture = aperture\n this.shutterSpeed = shutterSpeed\n this.sensitivity = sensitivity\n this.useDirectExposure = false\n }\n\n /** Set exposure directly (model-viewer-style, default 1.1). Higher = brighter. */\n fun exposure(value: Double) {\n this.directExposure = value\n this.useDirectExposure = true\n }\n\n /** Apply this config to a Filament.js Camera using float3 arrays for lookAt. */\n fun applyTo(camera: Camera) {\n camera.lookAt(\n float3(eyeX, eyeY, eyeZ),\n float3(targetX, targetY, targetZ),\n float3(upX, upY, upZ)\n )\n if (useDirectExposure && directExposure != null) {\n camera.setExposureDirect(directExposure!!)\n } else {\n camera.setExposure(aperture, shutterSpeed, sensitivity)\n }\n }\n}\n","package io.github.sceneview.web.nodes\n\n/**\n * Light configuration for SceneView web.\n *\n * ```kotlin\n * light {\n * directional()\n * intensity(100_000.0)\n * color(1.0f, 1.0f, 1.0f)\n * direction(0.0f, -1.0f, -0.5f)\n * }\n * ```\n */\nclass LightConfig {\n var type = LightType.DIRECTIONAL; private set\n var intensity = 100_000.0; private set\n var colorR = 1.0f; private set\n var colorG = 1.0f; private set\n var colorB = 1.0f; private set\n var directionX = 0.0f; private set\n var directionY = -1.0f; private set\n var directionZ = -0.5f; private set\n var positionX = 0.0f; private set\n var positionY = 3.0f; private set\n var positionZ = 0.0f; private set\n\n fun directional() { type = LightType.DIRECTIONAL }\n fun point() { type = LightType.POINT }\n fun spot() { type = LightType.SPOT }\n\n fun intensity(value: Double) { intensity = value }\n\n fun color(r: Float, g: Float, b: Float) {\n colorR = r; colorG = g; colorB = b\n }\n\n fun direction(x: Float, y: Float, z: Float) {\n directionX = x; directionY = y; directionZ = z\n }\n\n fun position(x: Float, y: Float, z: Float) {\n positionX = x; positionY = y; positionZ = z\n }\n}\n\nenum class LightType {\n DIRECTIONAL,\n POINT,\n SPOT\n}\n",null,"module.exports = __WEBPACK_EXTERNAL_MODULE__650__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module used 'module' so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(607);\n"],"names":["root","factory","exports","module","require","define","amd","globalThis","__WEBPACK_EXTERNAL_MODULE__650__","a","b","defaultConstructor","parent","interfaces","suspendArity","associatedObjectKey","associatedObjects","<this>","separator","prefix","postfix","limit","truncated","transform","buffer","count","element","other","name","ordinal","low","high","thisNeg","otherNeg","radix","radixLong","div","rem","digitsPerTime","radixToPower","result","remDiv","digits","value","a48","a32","a16","a00","b48","b32","b16","b00","c48","c32","c16","c00","twoPwr32","approx","numBits","res","approxDouble","approx2","log2","delta","approxRes","approxRem","index","ia","proto","o","instance","constructorFunction","constructor","message","cause","this_","ctor","kind","metadata","prototype","i","obj","collection","destination","iterator","initialCapacity","$this","array","jClass","givenSimpleName","isInstanceFunction","content","uppercase","ignoreCase","n1","n2","min","thisChar","otherChar","thisUpper","otherUpper","fromIndex","toIndex","size","throwable","delimiter","missingDelimiterValue","char","startIndex","chars","maximumValue","charAtIndex","arr","endIndex","v","api","createViewerImpl","modelUrl","then","viewer","loadModel","console","log","canvasId","autoRotate","cameraControls","cameraX","cameraY","cameraZ","fov","lightIntensity","document","getElementById","Promise","reject","canvas","width","height","clientWidth","clientHeight","resolve","sceneView","window","addEventListener","e","event","button","clientX","clientY","preventDefault","dx","dy","deltaY","touches","length","pinchDistance","camera","setupEventListeners","asset","animator","animationTime","timestamp","w","h","deltaSeconds","getAnimationCount","duration","getAnimationDuration","applyAnimation","updateBoneMatrices","execute","beginFrame","renderView","endFrame","p0","requestAnimationFrame","response","arrayBuffer","createAsset","entities","getEntities","addEntities","getInstance","getAnimator","loadedModel","LoadedModel","loadResources","releaseSourceData","error","it","engine","renderer","scene","view","swapChain","cameraEntity","x","y","z","push","eyeX","eyeY","eyeZ","lookAt","float3","assets","configure","onReady","init","Engine","create","createRenderer","createScene","createSwapChain","createView","createCamera","setCamera","setScene","setViewport","viewport","aspect","setProjectionFov","setExposureDirect","setClearOptions","setAmbientOcclusionOptions","setBloomOptions","setTemporalAntiAliasingOptions","SceneView","builder","SceneViewBuilder","distance","targetX","targetY","targetZ","OrbitCameraController","controller","renderLoop","cancelAnimationFrame","url","onLoaded","createAssetLoader","loader","basePath","substringBeforeLast","fetch","catch","iblUrl","skyboxUrl","ibl","createIblFromKtx1","setIndirectLight","skybox","createSkyFromKtx1","setSkybox","config","entity","lightType","LightManager","Builder","intensity","color","castShadows","direction","position","falloff","build","addEntity","minX","minY","minZ","maxX","maxY","maxZ","aabb","getBoundingBox","mn","mx","max","cx","cy","cz","dz","radius","destroyAsset","delete","destroyEntity","destroyRenderer","destroyView","destroyScene","destroyCameraComponent","destroySwapChain","destroy","block","CameraConfig","LightConfig","enabled","keyLight","fillLight","rimLight","cam","sv","theta","phi","speed","r","g","opts","degrees","setExposure","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__"],"sourceRoot":""}
|
package/README.md
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# SceneView Web
|
|
2
|
-
|
|
3
|
-
3D rendering for browsers using **Filament.js** (WebGL2/WASM) — the same rendering engine as SceneView Android.
|
|
4
|
-
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @sceneview/sceneview-web
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Quick Start
|
|
12
|
-
|
|
13
|
-
```html
|
|
14
|
-
<canvas id="scene-canvas" style="width:100%;height:100vh"></canvas>
|
|
15
|
-
<script src="sceneview-web.js"></script>
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
```kotlin
|
|
19
|
-
SceneView.create(
|
|
20
|
-
canvas = document.getElementById("scene-canvas") as HTMLCanvasElement,
|
|
21
|
-
configure = {
|
|
22
|
-
camera {
|
|
23
|
-
eye(0.0, 1.5, 5.0)
|
|
24
|
-
target(0.0, 0.0, 0.0)
|
|
25
|
-
}
|
|
26
|
-
model("models/DamagedHelmet.glb")
|
|
27
|
-
},
|
|
28
|
-
onReady = { it.startRendering() }
|
|
29
|
-
)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## JavaScript API (sceneview.js v1.5.0)
|
|
33
|
-
|
|
34
|
-
For browser usage without Kotlin, use `sceneview.js` directly:
|
|
35
|
-
|
|
36
|
-
```html
|
|
37
|
-
<script src="https://cdn.jsdelivr.net/npm/sceneview-web@3.6.0/sceneview.js"></script>
|
|
38
|
-
<script>
|
|
39
|
-
SceneView.modelViewer("canvas", "model.glb", {
|
|
40
|
-
backgroundColor: [0.05, 0.05, 0.08, 1],
|
|
41
|
-
lightIntensity: 150000,
|
|
42
|
-
fov: 35
|
|
43
|
-
});
|
|
44
|
-
</script>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Full API
|
|
48
|
-
|
|
49
|
-
| Method | Description |
|
|
50
|
-
|---|---|
|
|
51
|
-
| `SceneView.modelViewer(canvas, url, options?)` | One-line 3D model viewer |
|
|
52
|
-
| `SceneView.create(canvas, options?)` | Create instance for full API |
|
|
53
|
-
| `instance.loadModel(url)` | Load glTF/GLB model |
|
|
54
|
-
| `instance.setAutoRotate(enabled)` | Toggle auto-rotation |
|
|
55
|
-
| `instance.setCameraDistance(d)` | Set orbit camera distance |
|
|
56
|
-
| `instance.setBackgroundColor(r, g, b, a?)` | Set clear color |
|
|
57
|
-
| `instance.setQuality('low'\|'medium'\|'high')` | AO + anti-aliasing quality |
|
|
58
|
-
| `instance.setBloom(true\|false\|options)` | Bloom post-processing |
|
|
59
|
-
| `instance.addLight(options)` | Add directional/point/spot light |
|
|
60
|
-
| `instance.createText(options)` | Render text as 3D quad |
|
|
61
|
-
| `instance.createImage(options)` | Render image as 3D quad |
|
|
62
|
-
| `instance.createVideo(options)` | Stream video to 3D quad |
|
|
63
|
-
| `instance.removeNode(entity)` | Remove node from scene |
|
|
64
|
-
| `instance.dispose()` | Clean up resources |
|
|
65
|
-
|
|
66
|
-
## Features
|
|
67
|
-
|
|
68
|
-
- Same Filament PBR renderer as Android (compiled to WASM)
|
|
69
|
-
- glTF 2.0 / GLB model loading
|
|
70
|
-
- IBL environment lighting (KTX)
|
|
71
|
-
- Camera configuration (FOV, position, exposure)
|
|
72
|
-
- Directional, point, and spot lights
|
|
73
|
-
- Animation playback
|
|
74
|
-
- Quality presets (low/medium/high)
|
|
75
|
-
- Bloom post-processing
|
|
76
|
-
- Text, image, and video nodes
|
|
77
|
-
- Billboard mode (always face camera)
|
|
78
|
-
- Kotlin/JS DSL API + vanilla JavaScript API
|
|
79
|
-
|
|
80
|
-
## Requirements
|
|
81
|
-
|
|
82
|
-
- WebGL2 browser (~95% coverage)
|
|
83
|
-
- No AR support (requires native sensors)
|
|
84
|
-
|
|
85
|
-
## Part of SceneView
|
|
86
|
-
|
|
87
|
-
SceneView is a declarative 3D/AR SDK for Android, iOS, macOS, visionOS, Web, and Desktop.
|
|
88
|
-
|
|
89
|
-
- [GitHub](https://github.com/sceneview/sceneview)
|
|
90
|
-
- [Documentation](https://sceneview.github.io)
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
!function(t,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("Filament")):"function"==typeof define&&define.amd?define(["Filament"],n):"object"==typeof exports?exports["sceneview-web"]=n(require("Filament")):t["sceneview-web"]=n(t.Filament)}(globalThis,t=>{return n={36(t,n){var i,e;"object"!=typeof globalThis&&(Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__),void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(t){return null!=t&&null!=t.__proto__&&t.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===(e="function"==typeof(i=function(t){"use strict";var n,i,e,r,o,u=ArrayBuffer.isView;function s(){}function a(){}function c(t,n,e,r,o,u,s){return n=n===i?", ":n,e=e===i?"":e,r=r===i?"":r,o=o===i?-1:o,u=u===i?"...":u,s=s===i?null:s,function(t,n,e,r,o,u,s,a){e=e===i?", ":e,r=r===i?"":r,o=o===i?"":o,u=u===i?-1:u,s=s===i?"...":s,a=a===i?null:a,n.c(r);var c=0,l=0,h=t.length;t:for(;l<h;){var _=t[l];if(l=l+1|0,(c=c+1|0)>1&&n.c(e),!(u<0||c<=u))break t;Et(n,_,a)}return u>=0&&c>u&&n.c(s),n.c(o),n}(t,gt(),n,e,r,o,u,s).toString()}function l(t,n,e,r,o,u,s){return n=n===i?", ":n,e=e===i?"":e,r=r===i?"":r,o=o===i?-1:o,u=u===i?"...":u,s=s===i?null:s,function(t,n,e,r,o,u,s,a){e=e===i?", ":e,r=r===i?"":r,o=o===i?"":o,u=u===i?-1:u,s=s===i?"...":s,a=a===i?null:a,n.c(r);var c=0,l=t.d();t:for(;l.e();){var h=l.f();if((c=c+1|0)>1&&n.c(e),!(u<0||c<=u))break t;Et(n,h,a)}return u>=0&&c>u&&n.c(s),n.c(o),n}(t,gt(),n,e,r,o,u,s).toString()}function h(t){return t}function _(t){return String.fromCharCode(t)}function f(){}function v(){}function d(){}function p(t,n){this.j_1=t,this.k_1=n}function m(t){var n=null==t?null:S(t);return null==n?"null":n}function w(){}function g(t){for(var n=1,i=[],e=0,r=t.length;e<r;){var o=t[e];e=e+1|0;var u=n,s=o.prototype.$imask$,a=null==s?o.$imask$:s;null!=a&&(i.push(a),u=a.length);var c=o.$metadata$.iid,l=null==c?null:y(c);null!=l&&(i.push(l),u=Math.max(u,l.length)),u>n&&(n=u)}return function(t,n){for(var i=0,e=new Int32Array(t);i<t;){for(var r=i,o=0,u=0,s=n.length;u<s;){var a=n[u];u=u+1|0,r<a.length&&(o|=a[r])}e[r]=o,i=i+1|0}return e}(n,i)}function y(t){var n=t>>5,i=new Int32Array(n+1|0),e=1<<(31&t);return i[n]=i[n]|e,i}function b(t,n){return $(t)?function(t){return n=function(t){return t<<16>>16}(function(t){return t instanceof w?t.m():function(t){return t>2147483647?2147483647:t<-2147483648?-2147483648:0|t}(t)}(t)),65535&n;var n}(t.charCodeAt(n)):t.b(n)}function $(t){return"string"==typeof t}function x(t){return $(t)?t.length:t.a()}function E(t){return S(t)}function j(t){return t=t===i?null:t,Object.create(t)}function S(t){return null==t?"null":function(t){return n=t,Array.isArray(n)||u(t);var n}(t)?"[...]":"function"!=typeof t.toString?function(t){return Object.prototype.toString.call(t)}(t):t.toString()}function A(t,n){return null==t?null==n:null!=n&&("object"==typeof t&&"function"==typeof t.equals?t.equals(n):t!=t?n!=n:"number"==typeof t&&"number"==typeof n?t===n&&(0!==t||1/t==1/n):t===n)}function k(t,n){null!=Error.captureStackTrace?Error.captureStackTrace(t,n):t.stack=(new Error).stack}function C(t){return t.prototype}function M(t){return t===i}function O(t,n,e){Error.call(t),function(t,n,e){var r=N(Object.getPrototypeOf(t));if(!(1&r)){var o;if(null==n){var u;if(null!==n){var s=null==e?null:e.toString();u=null==s?i:s}else u=i;o=u}else o=n;t.message=o}2&r||(t.cause=e),t.name=Object.getPrototypeOf(t).constructor.name}(t,n,e)}function V(){throw mt()}function q(t,e,r,o,u,s,a,c,l){null!=u&&(e.prototype=Object.create(u.prototype),e.prototype.constructor=e);var h=function(t,e,r,o,u,s){return{kind:t,simpleName:e,associatedObjectKey:o,associatedObjects:u,suspendArity:s,$kClass$:i,defaultConstructor:r,iid:"interface"===t?(n===i&&(n=0),n=n+1|0):i}}(t,r,o,c,l,a);e.$metadata$=h,null!=s&&((A(h.iid,i)?e.prototype:e).$imask$=g(s))}function z(t,n,i,e,r,o,u,s){q("class",t,n,i,e,r,o,u,s)}function L(t,n,i,e,r,o,u,s){q("object",t,n,i,e,r,o,u,s)}function I(t,n,i,e,r,o,u,s){q("interface",t,n,i,e,r,o,u,s)}function F(t,n,e,r){L(t,"Companion",i,n,e,r,i,i)}function B(t,n){return function(t,n){var i=t.$imask$;return null!=i&&function(t,n){var i=n>>5;if(i>t.length)return!1;var e=1<<(31&n);return!(0===(t[i]&e))}(i,n)}(t,n.$metadata$.iid)}function N(t){var n=t.constructor,i=null==n?null:n.$metadata$,e=null==i?null:i.errorInfo;if(null!=e)return e;var r,o=0;if(P(t,"message")&&(o|=1),P(t,"cause")&&(o|=2),3!==o){var u=(r=t,Object.getPrototypeOf(r));u!=Error.prototype&&(o|=N(u))}return null!=i&&(i.errorInfo=o),o}function P(t,n){return t.hasOwnProperty(n)}function T(){}function R(t){return function(t){if(t.h())return[];for(var n=t.g(),i=Array(n),e=t.d(),r=0;e.e();){var o=r;r=o+1|0,i[o]=e.f()}return i}(t)}function D(){$t.call(this)}function Y(t){this.q_1=t,this.o_1=0,this.p_1=-1}function X(t,n){this.x_1=t,Y.call(this,t),o.z(n,this.x_1.g()),this.o_1=n}function W(){D.call(this),this.s_1=0}function U(){r=this;var t=function(t,n){var i=[];if(J.call(n,i),!(t>=0))throw Q(S("Negative initial capacity: "+t));return n}(0,j(C(J)));t.i1_1=!0,this.j1_1=t}function H(){return t=j(C(J)),J.call(t,[]),t;var t}function K(t,n){return o.k1(n,t.g()),n}function J(t){null==r&&new U,W.call(this),this.h1_1=t,this.i1_1=!1}function Z(t){return O(t),G.call(t),t}function G(){k(this,G)}function Q(t){var n=function(t,n){return ut(t,n),tt.call(n),n}(t,j(C(tt)));return k(n,Q),n}function tt(){k(this,tt)}function nt(t){var n=function(t,n){return ut(t,n),it.call(n),n}(t,j(C(it)));return k(n,nt),n}function it(){k(this,it)}function et(){var t,n=(ot(t=j(C(rt))),rt.call(t),t);return k(n,et),n}function rt(){k(this,rt)}function ot(t){return Z(t),st.call(t),t}function ut(t,n){return function(t,n){O(n,t),G.call(n)}(t,n),st.call(n),n}function st(){k(this,st)}function at(){var t,n=(ot(t=j(C(lt))),lt.call(t),t);return k(n,at),n}function ct(t){var n=function(t,n){return ut(t,n),lt.call(n),n}(t,j(C(lt)));return k(n,ct),n}function lt(){k(this,lt)}function ht(t){var n=function(t,n){return ut(t,n),_t.call(n),n}(t,j(C(_t)));return k(n,ht),n}function _t(){k(this,_t)}function ft(){var t,n=(ot(t=j(C(vt))),vt.call(t),t);return k(n,ft),n}function vt(){k(this,vt)}function dt(){var t,n=(ot(t=j(C(pt))),pt.call(t),t);return k(n,dt),n}function pt(){k(this,pt)}function mt(){var t,n=(ot(t=j(C(wt))),wt.call(t),t);return k(n,mt),n}function wt(){k(this,wt)}function gt(){return t=j(C(yt)),yt.call(t,""),t;var t}function yt(t){this.o1_1=t}function bt(t){var n=_(t).toUpperCase();return n.length>1?t:b(n,0)}function $t(){}function xt(){this.y_1=2147483639}function Et(t,n,i){var e;null!=i?t.c(i(n)):null==n||("string"==typeof(e=n)||B(e,s))?t.c(n):n instanceof f?t.p1(n.q1_1):t.c(S(n))}function jt(t,n,e){if(t===n)return!0;if(!(e=e!==i&&e))return!1;var r=bt(t),o=bt(n);return r===o||b(_(r).toLowerCase(),0)===b(_(o).toLowerCase(),0)}function St(t){return x(t)-1|0}return I(s,"CharSequence"),z(a,"Number"),z(f,"Char"),I(v,"List"),F(d),z(p,"Enum"),z(w,"Long",i,a),L(T,"Unit"),z($t,"AbstractCollection"),z(D,"AbstractMutableCollection",i,$t),z(Y,"IteratorImpl"),z(X,"ListIteratorImpl",i,Y),z(W,"AbstractMutableList",i,D,[D,v]),F(U),z(J,"ArrayList",H,W,[W,v]),z(G,"Exception",function t(){var n=Z(j(C(G)));return k(n,t),n},Error),z(st,"RuntimeException",function t(){var n=ot(j(C(st)));return k(n,t),n},G),z(tt,"IllegalArgumentException",function t(){var n,i=(ot(n=j(C(tt))),tt.call(n),n);return k(i,t),i},st),z(it,"IllegalStateException",function t(){var n,i=(ot(n=j(C(it))),it.call(n),n);return k(i,t),i},st),z(rt,"UnsupportedOperationException",et,st),z(lt,"NoSuchElementException",at,st),z(_t,"IndexOutOfBoundsException",function t(){var n,i=(ot(n=j(C(_t))),_t.call(n),n);return k(i,t),i},st),z(vt,"NullPointerException",ft,st),z(pt,"NoWhenBranchMatchedException",dt,st),z(wt,"ClassCastException",mt,st),z(yt,"StringBuilder",gt,i,[s]),F(xt),C(p).equals=function(t){return this===t},C(p).toString=function(){return this.j_1},C(w).m=function(){return this.l_1},C(T).toString=function(){return"kotlin.Unit"},C(D).toJSON=function(){return this.toArray()},C(D).n=function(){},C(Y).e=function(){return this.o_1<this.q_1.g()},C(Y).f=function(){if(!this.e())throw at();var t=this.o_1;return this.o_1=t+1|0,this.p_1=t,this.q_1.i(this.p_1)},C(Y).r=function(){if(-1===this.p_1)throw nt(S("Call next() or previous() before removing element from the iterator."));this.q_1.t(this.p_1),this.o_1=this.p_1,this.p_1=-1},C(W).b1=function(t){return this.n(),this.a1(this.g(),t),!0},C(W).c1=function(){this.n(),this.d1(0,this.g())},C(W).d=function(){return new Y(this)},C(W).e1=function(t){return new X(this,t)},C(W).d1=function(t,n){var i=this.e1(t),e=n-t|0,r=0;if(r<e)do{r=r+1|0,i.f(),i.r()}while(r<e)},C(W).equals=function(t){return t===this||!(null==t||!B(t,v))&&o.f1(this,t)},C(J).g=function(){return this.h1_1.length},C(J).i=function(t){var n=this.h1_1[K(this,t)];return null==n||null!=n?n:V()},C(J).b1=function(t){return this.n(),this.h1_1.push(t),this.s_1=this.s_1+1|0,!0},C(J).a1=function(t,n){this.n(),this.h1_1.splice(function(t,n){return o.z(n,t.g()),n}(this,t),0,n),this.s_1=this.s_1+1|0},C(J).t=function(t){return this.n(),K(this,t),this.s_1=this.s_1+1|0,t===(this.g()-1|0)?this.h1_1.pop():this.h1_1.splice(t,1)[0]},C(J).d1=function(t,n){this.n(),this.s_1=this.s_1+1|0,this.h1_1.splice(t,n-t|0)},C(J).c1=function(){this.n(),this.h1_1=[],this.s_1=this.s_1+1|0},C(J).toString=function(){return c(this.h1_1,", ","[","]",i,i,E)},C(J).l1=function(){return[].slice.call(this.h1_1)},C(J).toArray=function(){return this.l1()},C(J).n=function(){if(this.i1_1)throw et()},C(yt).a=function(){return this.o1_1.length},C(yt).b=function(t){var n=this.o1_1;if(!(0<=t&&t<=(x(n)-1|0)))throw ht("index: "+t+", length: "+this.a()+"}");return b(n,t)},C(yt).p1=function(t){return this.o1_1=this.o1_1+_(t),this},C(yt).c=function(t){return this.o1_1=this.o1_1+m(t),this},C(yt).toString=function(){return this.o1_1},C($t).h=function(){return 0===this.g()},C($t).toString=function(){return l(this,", ","[","]",i,i,(t=this,function(n){return n===t?"(this Collection)":m(n)}));var t},C($t).toArray=function(){return R(this)},C(xt).k1=function(t,n){if(t<0||t>=n)throw ht("index: "+t+", size: "+n)},C(xt).z=function(t,n){if(t<0||t>n)throw ht("index: "+t+", size: "+n)},C(xt).f1=function(t,n){if(t.g()!==n.g())return!1;for(var i=n.d(),e=t.d();e.e();)if(!A(e.f(),i.f()))return!1;return!0},new d,e=new T,o=new xt,t.$_$=t.$_$||{},t.$_$.a=i,t.$_$.b=H,t.$_$.c=h,t.$_$.d=e,t.$_$.e=z,t.$_$.f=F,t.$_$.g=function(t){return"number"==typeof t||t instanceof w},t.$_$.h=function(t,n){var e,r=new Error;if(M(t)){var o;if(M(n))o=t;else{var u=null==n?null:n.toString();o=null==u?i:u}e=o}else e=null==t?i:t;return r.message=e,r.cause=n,r.name="Throwable",r},t.$_$.i=function(t){return+t},t.$_$.j=C,t.$_$.k=function(t,n,e){e=e===i?t:e;var r=function(t,n,e,r){var o;if(e=e===i?St(t):e,(r=r!==i&&r)||"string"!=typeof t)o=function(t,n,e,r){if(e=e===i?St(t):e,!(r=r!==i&&r)&&1===n.length&&"string"==typeof t){var o=_(function(t){var n;switch(t.length){case 0:throw ct("Array is empty.");case 1:n=t[0];break;default:throw Q("Array has more than one element.")}return n}(n));return t.lastIndexOf(o,e)}var u=function(t,n){return t>n?n:t}(e,St(t));if(0<=u)do{var s=u;u=u+-1|0;var a,c=b(t,s);t:{for(var l=0,h=n.length;l<h;){var f=n[l];if(l=l+1|0,jt(f,c,r)){a=!0;break t}}a=!1}if(a)return s}while(0<=u);return-1}(t,(s=[n],a=new Uint16Array(s),a.$type$="CharArray",a),e,r);else{var u=_(n);o=t.lastIndexOf(u,e)}var s,a;return o}(t,n);return-1===r?e:t.substring(0,r)},t.$_$.l=p,t.$_$.m=V,t.$_$.n=function(t){var n;return null==t?function(){throw ft()}():n=t,n},t.$_$.o=function(){throw dt()},t})?i.apply(n,[n]):i)||(t.exports=e)},607(t,n,i){var e,r,o;r=[n,i(650),i(36)],void 0===(o="function"==typeof(e=function(t,n,i){"use strict";var e,r,o,u=n.Entity,s=n.init,a=n.LightManager,c=i.$_$.d,l=i.$_$.a,h=i.$_$.h,_=i.$_$.m,f=i.$_$.g,v=i.$_$.i,d=i.$_$.j,p=i.$_$.e,m=i.$_$.f,w=i.$_$.b,g=i.$_$.c,y=i.$_$.k,b=i.$_$.o,$=i.$_$.n,x=i.$_$.l;function E(){var t,n={version:"1.3.0"};n.createViewer=((t=function(t){return j(t,!0,!0)}).callableName="jsCreateViewer",t),n.createViewerAutoRotate=function(){var t=function(t,n){return j(t,n,!0)};return t.callableName="jsCreateViewerAutoRotate",t}(),n.createViewerFull=function(){var t=function(t,n,i,e,r,o,u,s){return j(t,n,i,e,r,o,u,s)};return t.callableName="jsCreateViewerFull",t}(),n.modelViewer=function(){var t=function(t,n){return i=n,j(t,!0,!0).then((e=i,function(t){return t.loadModel(e),t}));var i,e};return t.callableName="jsModelViewer",t}(),n.modelViewerAutoRotate=function(){var t=function(t,n,i){return e=n,j(t,i,!0).then((r=e,function(t){return t.loadModel(r),t}));var e,r};return t.callableName="jsModelViewerAutoRotate",t}(),window.sceneview=n,console.log("SceneView Web v1.3.0 loaded")}function j(t,n,i,r,o,u,s,a){r=r===l?0:r,o=o===l?1.5:o,u=u===l?5:u,s=s===l?45:s,a=a===l?5e4:a;var _=document.getElementById(t),f=_ instanceof HTMLCanvasElement?_:null;if(null==f)return Promise.reject(h("Canvas element '"+t+"' not found"));var v,d,p,m,w,g,y,b,$=f;return 0!==$.width&&0!==$.height||($.width=$.clientWidth,$.height=$.clientHeight),new Promise((v=$,d=n,p=i,m=r,w=o,g=u,y=s,b=a,function(t,n){try{var i=e,r=function(t,n,i,e,r,o,u){return function(s){return s.i3(function(t,n,i,e){return function(r){return r.i2(t,n,i),r.j2(0,0,0),r.k2(e),c}}(i,e,r,o)),s.j3(function(t){return function(n){return n.w2(),n.x2(t),n.y2(.6,-1,-.8),c}}(u)),s.k3(t),s.l3(n),c}}(d,p,m,w,g,y,b);i.i4(v,l,r,function(t,n){return function(i){i.c4(),window.addEventListener("resize",function(t){return function(n){return t.width=t.clientWidth,t.height=t.clientHeight,c}}(n));var e=new P;return e.f4(i),t(e),c}}(t,v))}catch(t){if(!(t instanceof Error))throw t;n(t)}return c}))}function S(t){var n;t.j4_1.addEventListener("mousedown",(n=t,function(t){var i=t instanceof MouseEvent?t:_(),e=i.button;return 0===e?n.e5_1=!0:2===e&&(n.f5_1=!0),n.g5_1=i.clientX,n.h5_1=i.clientY,i.preventDefault(),c})),t.j4_1.addEventListener("mousemove",function(t){return function(n){var i=n instanceof MouseEvent?n:_(),e=i.clientX-t.g5_1,r=i.clientY-t.h5_1;return t.g5_1=i.clientX,t.h5_1=i.clientY,t.e5_1?t.a5_1?(t.c5_1=-e*t.v4_1,t.d5_1=-r*t.v4_1):(t.l4_1=t.l4_1-e*t.v4_1,t.m4_1=t.m4_1-r*t.v4_1):t.f5_1&&(t.o4_1=t.o4_1+e*t.x4_1*t.n4_1,t.p4_1=t.p4_1-r*t.x4_1*t.n4_1),c}}(t)),t.j4_1.addEventListener("mouseup",function(t){return function(n){return t.e5_1=!1,t.f5_1=!1,c}}(t)),t.j4_1.addEventListener("mouseleave",function(t){return function(n){return t.e5_1=!1,t.f5_1=!1,c}}(t)),t.j4_1.addEventListener("wheel",function(t){return function(n){var i=n instanceof WheelEvent?n:_(),e=i.deltaY>0?1:-1;t.n4_1=t.n4_1*(1+e*t.w4_1);var r=t,o=t.r4_1,u=t.s4_1,s=t.n4_1,a=Math.min(u,s);return r.n4_1=Math.max(o,a),i.preventDefault(),c}}(t),{passive:!1}),t.j4_1.addEventListener("contextmenu",A),t.j4_1.addEventListener("touchstart",function(t){return function(n){var i=n;if(1==i.touches.length){t.e5_1=!0;var e=t,r=i.touches[0].clientX;e.g5_1=v(f(r)?r:_());var o=t,u=i.touches[0].clientY;o.h5_1=v(f(u)?u:_())}return n.preventDefault(),c}}(t),{passive:!1}),t.j4_1.addEventListener("touchmove",function(t){return function(n){var i=n;if(t.e5_1&&1==i.touches.length){var e=i.touches[0].clientX,r=v(f(e)?e:_())-t.g5_1,o=i.touches[0].clientY,u=v(f(o)?o:_())-t.h5_1,s=t,a=i.touches[0].clientX;s.g5_1=v(f(a)?a:_());var l=t,h=i.touches[0].clientY;l.h5_1=v(f(h)?h:_()),t.a5_1?(t.c5_1=-r*t.v4_1,t.d5_1=-u*t.v4_1):(t.l4_1=t.l4_1-r*t.v4_1,t.m4_1=t.m4_1-u*t.v4_1)}else if(2==i.touches.length){var d=i.touches[0].clientX,p=v(f(d)?d:_()),m=i.touches[1].clientX,w=p-v(f(m)?m:_()),g=i.touches[0].clientY,y=v(f(g)?g:_()),b=i.touches[1].clientY,$=y-v(f(b)?b:_()),x=w*w+$*$,E=Math.sqrt(x);if(t.i5_1>0){var j=t.i5_1-E;t.n4_1=t.n4_1*(1+.005*j);var S=t,A=t.r4_1,k=t.s4_1,C=t.n4_1,M=Math.min(k,C);S.n4_1=Math.max(A,M)}t.i5_1=E}return n.preventDefault(),c}}(t),{passive:!1}),t.j4_1.addEventListener("touchend",function(t){return function(n){return t.e5_1=!1,t.i5_1=-1,c}}(t))}function A(t){return t.preventDefault(),c}function k(t,n){this.j4_1=t,this.k4_1=n,this.l4_1=.7853981633974483,this.m4_1=1.2217304763960306,this.n4_1=5,this.o4_1=0,this.p4_1=0,this.q4_1=0,this.r4_1=.5,this.s4_1=50,this.t4_1=.1,this.u4_1=3.041592653589793,this.v4_1=.005,this.w4_1=.1,this.x4_1=.003,this.y4_1=!1,this.z4_1=.008726646259971648,this.a5_1=!0,this.b5_1=.95,this.c5_1=0,this.d5_1=0,this.e5_1=!1,this.f5_1=!1,this.g5_1=0,this.h5_1=0,S(this),this.i5_1=-1}function C(t){return c}function M(t,n,i){i=i===l?0:i,this.m5_1=t,this.n5_1=n,this.o5_1=i}function O(){this.g4_1="https://sceneview.github.io/assets/environments/neutral_ibl.ktx",this.h4_1="https://sceneview.github.io/assets/environments/neutral_skybox.ktx"}function V(t,n){if(!t.v3_1)return c;if(t.b4_1){var i=t.m3_1.clientWidth,e=t.m3_1.clientHeight;i>0&&e>0&&(i!==t.m3_1.width||e!==t.m3_1.height)&&t.q5(i,e)}var r=t.a4_1;null==r||r.j5();var o=t.w3_1>0?(n-t.w3_1)/1e3:0;t.w3_1=n;for(var u=t.x3_1.d();u.e();){var s=u.f(),a=s.n5_1;if(null==a);else if(a.getAnimationCount()>0){s.o5_1=s.o5_1+o;var l=a.getAnimationDuration(0);l>0&&(s.o5_1=s.o5_1%l),a.applyAnimation(0),a.updateBoneMatrices()}}t.n3_1.execute(),t.o3_1.beginFrame(t.s3_1)&&(t.o3_1.renderView(t.q3_1),t.o3_1.endFrame());var h,_,f=window;t.u3_1=f.requestAnimationFrame((h=t,(_=function(t){return V(h,t),c}).callableName="renderLoop",_))}function q(t){return t.arrayBuffer()}function z(t,n,i,e,r){return function(o){var u=t.createAsset(o);if(null!=u){var s,a=u.getEntities();n.p3_1.addEntities(a);try{s=u.getInstance().getAnimator()}catch(t){if(!(t instanceof Error))throw t;s=null}var l=new M(u,s);n.x3_1.b1(l),u.loadResources(function(t,n,i,e){return function(){return t.releaseSourceData(),console.log("SceneView: Model loaded from "+n+" ("+i.length+" entities)"),null==e||e(t),c}}(u,e,a,r),null,i,null)}else console.error("SceneView: AssetLoader failed to parse model from "+e);return c}}function L(t){return t.arrayBuffer()}function I(t){return t.arrayBuffer()}function F(t,n,i,e,r,o,u,s){this.m3_1=t,this.n3_1=n,this.o3_1=i,this.p3_1=e,this.q3_1=r,this.r3_1=o,this.s3_1=u,this.t3_1=s,this.u3_1=null,this.v3_1=!1,this.w3_1=0,this.x3_1=w(),this.y3_1=null,this.z3_1=w(),this.a4_1=null,this.b4_1=!0}function B(t){this.z2_1=t,this.a3_1=null,this.b3_1=null,this.c3_1=w(),this.d3_1=null,this.e3_1=null,this.f3_1=!0,this.g3_1=!1,this.h3_1=!0}function N(t,n){return function(i,e){try{t.t5(n,function(t,n){return function(i){return t(n),c}}(i,n))}catch(t){if(!(t instanceof Error))throw t;e(t)}return c}}function P(){this.d4_1=null,this.e4_1=!1}function T(t,n,i){var e=[];return e.push(t,n,i),e}function R(t,n,i,e){var r=[];return r.push(t,n,i,e),r}function D(){this.r1_1=0,this.s1_1=1.5,this.t1_1=5,this.u1_1=0,this.v1_1=0,this.w1_1=0,this.x1_1=0,this.y1_1=1,this.z1_1=0,this.a2_1=45,this.b2_1=.1,this.c2_1=1e3,this.d2_1=16,this.e2_1=.008,this.f2_1=100,this.g2_1=1.1,this.h2_1=!0}function Y(){this.l2_1=W(),this.m2_1=1e5,this.n2_1=1,this.o2_1=1,this.p2_1=1,this.q2_1=0,this.r2_1=-1,this.s2_1=-.5,this.t2_1=0,this.u2_1=3,this.v2_1=0}function X(t,n){x.call(this,t,n)}function W(){return function(){if(o)return c;o=!0,r=new X("DIRECTIONAL",0),new X("POINT",1),new X("SPOT",2)}(),r}return p(k,"OrbitCameraController"),p(M,"LoadedModel"),m(O),p(F,"SceneView"),p(B,"SceneViewBuilder"),p(P,"SceneViewJS",P),p(D,"CameraConfig",D),p(Y,"LightConfig",Y),p(X,"LightType",l,x),d(k).j2=function(t,n,i){this.o4_1=t,this.p4_1=n,this.q4_1=i},d(k).j5=function(){this.y4_1&&!this.e5_1&&(this.l4_1=this.l4_1+this.z4_1),this.a5_1&&(this.l4_1=this.l4_1+this.c5_1,this.m4_1=this.m4_1+this.d5_1,this.c5_1=this.c5_1*this.b5_1,this.d5_1=this.d5_1*this.b5_1);var t=this.t4_1,n=this.u4_1,i=this.m4_1,e=Math.min(n,i);this.m4_1=Math.max(t,e);var r=this.r4_1,o=this.s4_1,u=this.n4_1,s=Math.min(o,u);this.n4_1=Math.max(r,s);var a=this.o4_1,c=this.n4_1,l=this.m4_1,h=c*Math.sin(l),_=this.l4_1,f=a+h*Math.sin(_),v=this.p4_1,d=this.n4_1,p=this.m4_1,m=v+d*Math.cos(p),w=this.q4_1,g=this.n4_1,y=this.m4_1,b=g*Math.sin(y),$=this.l4_1,x=w+b*Math.cos($);this.k4_1.lookAt(T(f,m,x),T(this.o4_1,this.p4_1,this.q4_1),T(0,1,0))},d(k).k5=function(){},d(O).p5=function(t,n,i,e){var r,o,a;s(n,(r=t,o=i,a=e,function(){try{var t=Filament.Engine.create(r),n=t.createRenderer(),i=t.createScene(),e=t.createSwapChain(),s=t.createView(),l=Filament.EntityManager.get().create(),h=l instanceof u?l:_(),f=t.createCamera(h);s.setCamera(f),s.setScene(i);var v=r.width,d=r.height;s.setViewport(R(0,0,v,d));var p=d>0?v/d:1;f.setProjectionFov(45,p,.1,1e3),f.lookAt(T(0,1.5,5),T(0,0,0),T(0,1,0)),f.setExposureDirect(1.1),n.setClearOptions({clearColor:[.05,.05,.07,1],clear:!0}),s.setAmbientOcclusionOptions({enabled:!0,radius:.3,bias:5e-4,intensity:1,quality:1}),s.setBloomOptions({enabled:!0,strength:.1,threshold:!0,levels:4}),s.setTemporalAntiAliasingOptions({enabled:!0});var m=new F(r,t,n,i,s,f,e,h),w=new B(m);o(w),w.l5(),a(m)}catch(t){if(!(t instanceof Error))throw t;var g=t;console.error("SceneView: Failed to initialize Filament engine",g)}return c}))},d(O).i4=function(t,n,i,e,r){var o;return n=n===l?[]:n,i=i===l?C:i,r===l?(this.p5(t,n,i,e),o=c):o=r.p5.call(this,t,n,i,e),o},d(F).r5=function(t,n,i,e,r){var o=new k(this.m3_1,this.r3_1);o.n4_1=t,o.j2(n,i,e),o.y4_1=r;var u=o;return this.a4_1=u,u},d(F).q5=function(t,n){if(t<=0||n<=0)return c;this.m3_1.width=t,this.m3_1.height=n,this.q3_1.setViewport(R(0,0,t,n)),this.r3_1.setProjectionFov(45,t/n,.1,1e3)},d(F).c4=function(){if(this.v3_1)return c;this.v3_1=!0,this.w3_1=0,V(this,0)},d(F).s5=function(){this.v3_1=!1;var t=this.u3_1;null==t||window.cancelAnimationFrame(t),this.u3_1=null},d(F).t5=function(t,n){var i,e=this.y3_1;if(null==e){var r=this.n3_1.createAssetLoader();this.y3_1=r,i=r}else i=e;var o,u=i,s=y(t,g(47))+"/",a=window.fetch(t).then(q),l=z(u,this,s,t,n);a.then(l).catch((o=t,function(t){return console.error("SceneView: Error fetching model from "+o,t),c}))},d(F).u5=function(){this.v5("https://sceneview.github.io/assets/environments/neutral_ibl.ktx")},d(F).w5=function(t,n){var i,e,r,o=window.fetch(t).then(L),u=(i=this,e=t,function(t){var n=i.n3_1.createIblFromKtx1(t);return i.p3_1.setIndirectLight(n),console.log("SceneView: IBL loaded from "+e),c});if(o.then(u).catch(function(t){return function(n){return console.error("SceneView: Error loading IBL from "+t,n),c}}(t)),null==n);else{var s=window.fetch(n).then(I),a=function(t,n){return function(i){var e=t.n3_1.createSkyFromKtx1(i);return t.p3_1.setSkybox(e),console.log("SceneView: Skybox loaded from "+n),c}}(this,n);s.then(a).catch((r=n,function(t){return console.error("SceneView: Error loading skybox from "+r,t),c}))}},d(F).v5=function(t,n,i){var e;return n=n===l?null:n,i===l?(this.w5(t,n),e=c):e=i.w5.call(this,t,n),e},d(F).x5=function(t){var n,i=Filament.EntityManager.get().create(),e=i instanceof u?i:_();switch(t.l2_1.k_1){case 0:n=1;break;case 1:n=2;break;case 2:n=4;break;default:b()}var r=n,o=a.Builder(r);o.intensity(t.m2_1),o.color(T(t.n2_1,t.o2_1,t.p2_1)),o.castShadows(!0),t.l2_1.equals(W())?o.direction(T(t.q2_1,t.r2_1,t.s2_1)):(o.position(T(t.t2_1,t.u2_1,t.v2_1)),o.falloff(10)),o.build(this.n3_1,e),this.p3_1.addEntity(e),this.z3_1.b1(e)},d(F).y5=function(){if(this.x3_1.h())return c;var t=this.a4_1;if(null==t)return c;for(var n=t,i=17976931348623157e292,e=17976931348623157e292,r=17976931348623157e292,o=-17976931348623157e292,u=-17976931348623157e292,s=-17976931348623157e292,a=this.x3_1.d();a.e();){var l=a.f().m5_1.getBoundingBox(),h=l.min,d=l.max,p=h[0];if(v(f(p)?p:_())<i){var m=h[0];i=v(f(m)?m:_())}var w=h[1];if(v(f(w)?w:_())<e){var g=h[1];e=v(f(g)?g:_())}var y=h[2];if(v(f(y)?y:_())<r){var b=h[2];r=v(f(b)?b:_())}var $=d[0];if(v(f($)?$:_())>o){var x=d[0];o=v(f(x)?x:_())}var E=d[1];if(v(f(E)?E:_())>u){var j=d[1];u=v(f(j)?j:_())}var S=d[2];if(v(f(S)?S:_())>s){var A=d[2];s=v(f(A)?A:_())}}var k=(i+o)/2,C=(e+u)/2,M=(r+s)/2,O=o-i,V=u-e,q=s-r,z=O*O+V*V+q*q,L=Math.sqrt(z)/2;n.j2(k,C,M),n.n4_1=2.5*L,n.r4_1=.5*L,n.s4_1=10*L},d(F).z5=function(){this.s5();var t=this.a4_1;null==t||t.k5();var n=this.y3_1;if(null==n);else{for(var i=this.x3_1.d();i.e();){var e=i.f();n.destroyAsset(e.m5_1)}n.delete()}this.x3_1.c1();for(var r=this.z3_1.d();r.e();){var o=r.f();this.n3_1.destroyEntity(o)}this.z3_1.c1(),this.n3_1.destroyRenderer(this.o3_1),this.n3_1.destroyView(this.q3_1),this.n3_1.destroyScene(this.p3_1),this.n3_1.destroyCameraComponent(this.t3_1),this.n3_1.destroySwapChain(this.s3_1),Filament.Engine.destroy(this.n3_1)},d(B).i3=function(t){var n=new D;t(n),this.a3_1=n},d(B).j3=function(t){var n=new Y;t(n),this.b3_1=n},d(B).l3=function(t){this.f3_1=t},d(B).k3=function(t){this.g3_1=t},d(B).l5=function(){var t=this.a3_1;if(null==t||t.a6(this.z2_1.r3_1),null!=this.b3_1)this.z2_1.x5($(this.b3_1));else{var n=new Y;n.w2(),n.x2(5e4),n.y2(.6,-1,-.8);var i=n;this.z2_1.x5(i);var e=new Y;e.w2(),e.x2(25e3),e.y2(-.6,-.5,.8);var r=e;this.z2_1.x5(r);var o=new Y;o.w2(),o.x2(3e4),o.b6(.85,.9,1),o.y2(0,-.3,1);var u=o;this.z2_1.x5(u)}null!=this.d3_1?this.z2_1.w5($(this.d3_1),this.e3_1):this.h3_1&&this.z2_1.u5();for(var s=this.c3_1.d();s.e();){var a=s.f();this.z2_1.t5(a.c6_1,a.d6_1)}if(this.f3_1){var c=this.a3_1,l=null==c?null:c.t1_1,h=null==l?5:l,_=null==c?null:c.u1_1,f=null==_?0:_,v=null==c?null:c.v1_1,d=null==v?0:v,p=null==c?null:c.w1_1;this.z2_1.r5(h,f,d,null==p?0:p,this.g3_1)}},d(P).f4=function(t){this.d4_1=t},d(P).loadModel=function(t){var n=this.d4_1;return null==n?Promise.reject(h("SceneViewer not initialized")):new Promise(N(n,t))},d(P).setEnvironment=function(t){var n=this.d4_1;null==n||n.w5(t,null)},d(P).setEnvironmentWithSkybox=function(t,n){var i=this.d4_1;null==i||i.w5(t,n)},d(P).setCameraOrbit=function(t,n,i){var e=this.d4_1,r=null==e?null:e.a4_1;null==r||(r.l4_1=t,r.m4_1=n,r.n4_1=i)},d(P).setCameraTarget=function(t,n,i){var e=this.d4_1,r=null==e?null:e.a4_1;null==r||r.j2(t,n,i)},d(P).setAutoRotate=function(t){var n=this.d4_1,i=null==n?null:n.a4_1;null==i||(i.y4_1=t)},d(P).setAutoRotateSpeed=function(t){var n=this.d4_1,i=null==n?null:n.a4_1;null==i||(i.z4_1=t)},d(P).setZoomLimits=function(t,n){var i=this.d4_1,e=null==i?null:i.a4_1;null==e||(e.r4_1=t,e.s4_1=n)},d(P).startRendering=function(){var t=this.d4_1;null==t||t.c4()},d(P).stopRendering=function(){var t=this.d4_1;null==t||t.s5()},d(P).resize=function(t,n){var i=this.d4_1;null==i||i.q5(t,n)},d(P).setBackgroundColor=function(t,n,i,e){var r=this.d4_1;if(null==r)return c;var o=r,u={},s=[];s.push(t,n,i,e),u.clearColor=s,u.clear=!0,o.o3_1.setClearOptions(u)},d(P).fitToModels=function(){var t=this.d4_1;null==t||t.y5()},d(P).dispose=function(){if(!this.e4_1){this.e4_1=!0;var t=this.d4_1;null==t||t.z5(),this.d4_1=null}},d(D).i2=function(t,n,i){this.r1_1=t,this.s1_1=n,this.t1_1=i},d(D).j2=function(t,n,i){this.u1_1=t,this.v1_1=n,this.w1_1=i},d(D).k2=function(t){this.a2_1=t},d(D).a6=function(t){t.lookAt(T(this.r1_1,this.s1_1,this.t1_1),T(this.u1_1,this.v1_1,this.w1_1),T(this.x1_1,this.y1_1,this.z1_1)),this.h2_1&&null!=this.g2_1?t.setExposureDirect($(this.g2_1)):t.setExposure(this.d2_1,this.e2_1,this.f2_1)},d(Y).w2=function(){this.l2_1=W()},d(Y).x2=function(t){this.m2_1=t},d(Y).b6=function(t,n,i){this.n2_1=t,this.o2_1=n,this.p2_1=i},d(Y).y2=function(t,n,i){this.q2_1=t,this.r2_1=n,this.s2_1=i},e=new O,function(t){var n=t.io||(t.io={}),i=n.github||(n.github={}),e=i.sceneview||(i.sceneview={});(e.web||(e.web={})).SceneViewer=P}(t),E(),t})?e.apply(n,r):e)||(t.exports=o)},650(n){"use strict";n.exports=t}},i={},function t(e){var r=i[e];if(void 0!==r)return r.exports;var o=i[e]={exports:{}};return n[e](o,o.exports,t),o.exports}(607);var n,i});
|
|
2
|
-
//# sourceMappingURL=sceneview-web.js.map
|