@polarfront-lab/ionian 1.0.3 → 1.0.5

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.
@@ -1,7 +0,0 @@
1
- var ionian=function(e,t){"use strict";var i=Object.defineProperty,s=(e,t,s)=>((e,t,s)=>t in e?i(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,"symbol"!=typeof t?t+"":t,s),n="undefined"!=typeof document?document.currentScript:null;function r(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const i in e)if("default"!==i){const s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:()=>e[i]})}return t.default=e,Object.freeze(t)}const o=r(t),a=e=>e;class c{constructor(){var e;s(this,"emitter",{all:e=e||new Map,on:function(t,i){var s=e.get(t);s?s.push(i):e.set(t,[i])},off:function(t,i){var s=e.get(t);s&&(i?s.splice(s.indexOf(i)>>>0,1):e.set(t,[]))},emit:function(t,i){var s=e.get(t);s&&s.slice().map((function(e){e(i)})),(s=e.get("*"))&&s.slice().map((function(e){e(t,i)}))}})}emit(e,t){this.emitter.emit(e,t)}off(e,t){this.emitter.off(e,t)}on(e,t){this.emitter.on(e,t)}once(e,t){this.emitter.on(e,(i=>{this.emitter.off(e,t),t(i)}))}dispose(){this.emitter.all.clear()}}
2
- /**
3
- * @license
4
- * Copyright 2019 Google LLC
5
- * SPDX-License-Identifier: Apache-2.0
6
- */const u=Symbol("Comlink.proxy"),h=Symbol("Comlink.endpoint"),l=Symbol("Comlink.releaseProxy"),d=Symbol("Comlink.finalizer"),m=Symbol("Comlink.thrown"),p=e=>"object"==typeof e&&null!==e||"function"==typeof e,g=new Map([["proxy",{canHandle:e=>p(e)&&e[u],serialize(e){const{port1:t,port2:i}=new MessageChannel;return v(e,t),[i,[i]]},deserialize:e=>(e.start(),y(e))}],["throw",{canHandle:e=>p(e)&&m in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function v(e,t=globalThis,i=["*"]){t.addEventListener("message",(function s(n){if(!n||!n.data)return;if(!function(e,t){for(const i of e){if(t===i||"*"===i)return!0;if(i instanceof RegExp&&i.test(t))return!0}return!1}(i,n.origin))return void console.warn(`Invalid origin '${n.origin}' for comlink proxy`);const{id:r,type:o,path:a}=Object.assign({path:[]},n.data),c=(n.data.argumentList||[]).map(P);let h;try{const t=a.slice(0,-1).reduce(((e,t)=>e[t]),e),i=a.reduce(((e,t)=>e[t]),e);switch(o){case"GET":h=i;break;case"SET":t[a.slice(-1)[0]]=P(n.data.value),h=!0;break;case"APPLY":h=i.apply(t,c);break;case"CONSTRUCT":h=function(e){return Object.assign(e,{[u]:!0})}(new i(...c));break;case"ENDPOINT":{const{port1:t,port2:i}=new MessageChannel;v(e,i),h=function(e,t){return S.set(e,t),e}(t,[t])}break;case"RELEASE":h=void 0;break;default:return}}catch(l){h={value:l,[m]:0}}Promise.resolve(h).catch((e=>({value:e,[m]:0}))).then((i=>{const[n,a]=R(i);t.postMessage(Object.assign(Object.assign({},n),{id:r}),a),"RELEASE"===o&&(t.removeEventListener("message",s),f(t),d in e&&"function"==typeof e[d]&&e[d]())})).catch((e=>{const[i,s]=R({value:new TypeError("Unserializable return value"),[m]:0});t.postMessage(Object.assign(Object.assign({},i),{id:r}),s)}))})),t.start&&t.start()}function f(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function y(e,t){const i=new Map;return e.addEventListener("message",(function(e){const{data:t}=e;if(!t||!t.id)return;const s=i.get(t.id);if(s)try{s(t)}finally{i.delete(t.id)}})),M(e,i,[],t)}function x(e){if(e)throw new Error("Proxy has been released and is not useable")}function T(e){return D(e,new Map,{type:"RELEASE"}).then((()=>{f(e)}))}const _=new WeakMap,w="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const t=(_.get(e)||0)-1;_.set(e,t),0===t&&T(e)}));function M(e,t,i=[],s=function(){}){let n=!1;const r=new Proxy(s,{get(s,o){if(x(n),o===l)return()=>{!function(e){w&&w.unregister(e)}(r),T(e),t.clear(),n=!0};if("then"===o){if(0===i.length)return{then:()=>r};const s=D(e,t,{type:"GET",path:i.map((e=>e.toString()))}).then(P);return s.then.bind(s)}return M(e,t,[...i,o])},set(s,r,o){x(n);const[a,c]=R(o);return D(e,t,{type:"SET",path:[...i,r].map((e=>e.toString())),value:a},c).then(P)},apply(s,r,o){x(n);const a=i[i.length-1];if(a===h)return D(e,t,{type:"ENDPOINT"}).then(P);if("bind"===a)return M(e,t,i.slice(0,-1));const[c,u]=b(o);return D(e,t,{type:"APPLY",path:i.map((e=>e.toString())),argumentList:c},u).then(P)},construct(s,r){x(n);const[o,a]=b(r);return D(e,t,{type:"CONSTRUCT",path:i.map((e=>e.toString())),argumentList:o},a).then(P)}});return function(e,t){const i=(_.get(t)||0)+1;_.set(t,i),w&&w.register(e,t,e)}(r,e),r}function b(e){const t=e.map(R);return[t.map((e=>e[0])),(i=t.map((e=>e[1])),Array.prototype.concat.apply([],i))];var i}const S=new WeakMap;function R(e){for(const[t,i]of g)if(i.canHandle(e)){const[s,n]=i.serialize(e);return[{type:"HANDLER",name:t,value:s},n]}return[{type:"RAW",value:e},S.get(e)||[]]}function P(e){switch(e.type){case"HANDLER":return g.get(e.name).deserialize(e.value);case"RAW":return e.value}}function D(e,t,i,s){return new Promise((n=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");t.set(r,n),e.start&&e.start(),e.postMessage(Object.assign({id:r},i),s)}))}function E(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var I,C,V,G,z,O,A,F,L,N,j,B,k,K,U,X,W,Z,Y,q,Q,J,H,$,ee,te,ie,se,ne,re,oe,ae,ce,ue={exports:{}};function he(){if(I)return ue.exports;I=1;var e,t="object"==typeof Reflect?Reflect:null,i=t&&"function"==typeof t.apply?t.apply:function(e,t,i){return Function.prototype.apply.call(e,t,i)};e=t&&"function"==typeof t.ownKeys?t.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var s=Number.isNaN||function(e){return e!=e};function n(){n.init.call(this)}ue.exports=n,ue.exports.once=function(e,t){return new Promise((function(i,s){function n(i){e.removeListener(t,r),s(i)}function r(){"function"==typeof e.removeListener&&e.removeListener("error",n),i([].slice.call(arguments))}p(e,t,r,{once:!0}),"error"!==t&&function(e,t,i){"function"==typeof e.on&&p(e,"error",t,i)}(e,n,{once:!0})}))},n.EventEmitter=n,n.prototype._events=void 0,n.prototype._eventsCount=0,n.prototype._maxListeners=void 0;var r=10;function o(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function a(e){return void 0===e._maxListeners?n.defaultMaxListeners:e._maxListeners}function c(e,t,i,s){var n,r,c,u;if(o(i),void 0===(r=e._events)?(r=e._events=Object.create(null),e._eventsCount=0):(void 0!==r.newListener&&(e.emit("newListener",t,i.listener?i.listener:i),r=e._events),c=r[t]),void 0===c)c=r[t]=i,++e._eventsCount;else if("function"==typeof c?c=r[t]=s?[i,c]:[c,i]:s?c.unshift(i):c.push(i),(n=a(e))>0&&c.length>n&&!c.warned){c.warned=!0;var h=new Error("Possible EventEmitter memory leak detected. "+c.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");h.name="MaxListenersExceededWarning",h.emitter=e,h.type=t,h.count=c.length,u=h,console&&console.warn&&console.warn(u)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(e,t,i){var s={fired:!1,wrapFn:void 0,target:e,type:t,listener:i},n=u.bind(s);return n.listener=i,s.wrapFn=n,n}function l(e,t,i){var s=e._events;if(void 0===s)return[];var n=s[t];return void 0===n?[]:"function"==typeof n?i?[n.listener||n]:[n]:i?function(e){for(var t=new Array(e.length),i=0;i<t.length;++i)t[i]=e[i].listener||e[i];return t}(n):m(n,n.length)}function d(e){var t=this._events;if(void 0!==t){var i=t[e];if("function"==typeof i)return 1;if(void 0!==i)return i.length}return 0}function m(e,t){for(var i=new Array(t),s=0;s<t;++s)i[s]=e[s];return i}function p(e,t,i,s){if("function"==typeof e.on)s.once?e.once(t,i):e.on(t,i);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function n(r){s.once&&e.removeEventListener(t,n),i(r)}))}}return Object.defineProperty(n,"defaultMaxListeners",{enumerable:!0,get:function(){return r},set:function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");r=e}}),n.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},n.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||s(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},n.prototype.getMaxListeners=function(){return a(this)},n.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var n="error"===e,r=this._events;if(void 0!==r)n=n&&void 0===r.error;else if(!n)return!1;if(n){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=r[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var u=c.length,h=m(c,u);for(s=0;s<u;++s)i(h[s],this,t)}return!0},n.prototype.addListener=function(e,t){return c(this,e,t,!1)},n.prototype.on=n.prototype.addListener,n.prototype.prependListener=function(e,t){return c(this,e,t,!0)},n.prototype.once=function(e,t){return o(t),this.on(e,h(this,e,t)),this},n.prototype.prependOnceListener=function(e,t){return o(t),this.prependListener(e,h(this,e,t)),this},n.prototype.removeListener=function(e,t){var i,s,n,r,a;if(o(t),void 0===(s=this._events))return this;if(void 0===(i=s[e]))return this;if(i===t||i.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,i.listener||t));else if("function"!=typeof i){for(n=-1,r=i.length-1;r>=0;r--)if(i[r]===t||i[r].listener===t){a=i[r].listener,n=r;break}if(n<0)return this;0===n?i.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(i,n),1===i.length&&(s[e]=i[0]),void 0!==s.removeListener&&this.emit("removeListener",e,a||t)}return this},n.prototype.off=n.prototype.removeListener,n.prototype.removeAllListeners=function(e){var t,i,s;if(void 0===(i=this._events))return this;if(void 0===i.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==i[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete i[e]),this;if(0===arguments.length){var n,r=Object.keys(i);for(s=0;s<r.length;++s)"removeListener"!==(n=r[s])&&this.removeAllListeners(n);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=i[e]))this.removeListener(e,t);else if(void 0!==t)for(s=t.length-1;s>=0;s--)this.removeListener(e,t[s]);return this},n.prototype.listeners=function(e){return l(this,e,!0)},n.prototype.rawListeners=function(e){return l(this,e,!1)},n.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):d.call(e,t)},n.prototype.listenerCount=d,n.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]},ue.exports}function le(){if(A)return O;A=1;const e=z?G:(z=1,G=class{constructor(){this.fifo=!0,this.priorityRange=1,this.testOnBorrow=!1,this.testOnReturn=!1,this.autostart=!0,this.evictionRunIntervalMillis=0,this.numTestsPerEvictionRun=3,this.softIdleTimeoutMillis=-1,this.idleTimeoutMillis=3e4,this.acquireTimeoutMillis=null,this.destroyTimeoutMillis=null,this.maxWaitingClients=null,this.min=null,this.max=null,this.Promise=Promise}});return O=class{constructor(t){const i=new e;t=t||{},this.fifo="boolean"==typeof t.fifo?t.fifo:i.fifo,this.priorityRange=t.priorityRange||i.priorityRange,this.testOnBorrow="boolean"==typeof t.testOnBorrow?t.testOnBorrow:i.testOnBorrow,this.testOnReturn="boolean"==typeof t.testOnReturn?t.testOnReturn:i.testOnReturn,this.autostart="boolean"==typeof t.autostart?t.autostart:i.autostart,t.acquireTimeoutMillis&&(this.acquireTimeoutMillis=parseInt(t.acquireTimeoutMillis,10)),t.destroyTimeoutMillis&&(this.destroyTimeoutMillis=parseInt(t.destroyTimeoutMillis,10)),void 0!==t.maxWaitingClients&&(this.maxWaitingClients=parseInt(t.maxWaitingClients,10)),this.max=parseInt(t.max,10),this.min=parseInt(t.min,10),this.max=Math.max(isNaN(this.max)?1:this.max,1),this.min=Math.min(isNaN(this.min)?0:this.min,this.max),this.evictionRunIntervalMillis=t.evictionRunIntervalMillis||i.evictionRunIntervalMillis,this.numTestsPerEvictionRun=t.numTestsPerEvictionRun||i.numTestsPerEvictionRun,this.softIdleTimeoutMillis=t.softIdleTimeoutMillis||i.softIdleTimeoutMillis,this.idleTimeoutMillis=t.idleTimeoutMillis||i.idleTimeoutMillis,this.Promise=null!=t.Promise?t.Promise:i.Promise}}}function de(){if(L)return F;L=1;class e{constructor(t){this._state=e.PENDING,this._resolve=void 0,this._reject=void 0,this._promise=new t(((e,t)=>{this._resolve=e,this._reject=t}))}get state(){return this._state}get promise(){return this._promise}reject(t){this._state===e.PENDING&&(this._state=e.REJECTED,this._reject(t))}resolve(t){this._state===e.PENDING&&(this._state=e.FULFILLED,this._resolve(t))}}return e.PENDING="PENDING",e.FULFILLED="FULFILLED",e.REJECTED="REJECTED",F=e}function me(){if(k)return B;k=1;const e=de(),t=function(){if(j)return N;j=1;class e extends Error{constructor(e){super(e),this.name=this.constructor.name,this.message=e,"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}}return N={TimeoutError:class extends e{constructor(e){super(e)}}}}();class i extends e{constructor(e,t){super(t),this._creationTimestamp=Date.now(),this._timeout=null,void 0!==e&&this.setTimeout(e)}setTimeout(e){if(this._state!==i.PENDING)return;const t=parseInt(e,10);if(isNaN(t)||t<=0)throw new Error("delay must be a positive int");const s=Date.now()-this._creationTimestamp;var n,r;this._timeout&&this.removeTimeout(),this._timeout=setTimeout((n=this._fireTimeout,r=this,function(){return n.apply(r,arguments)}),Math.max(t-s,0))}removeTimeout(){this._timeout&&clearTimeout(this._timeout),this._timeout=null}_fireTimeout(){this.reject(new t.TimeoutError("ResourceRequest timed out"))}reject(e){this.removeTimeout(),super.reject(e)}resolve(e){this.removeTimeout(),super.resolve(e)}}return B=i}function pe(){if(Y)return Z;Y=1;const e=W?X:(W=1,X={ALLOCATED:"ALLOCATED",IDLE:"IDLE",INVALID:"INVALID",RETURNING:"RETURNING",VALIDATION:"VALIDATION"});return Z=class{constructor(t){this.creationTime=Date.now(),this.lastReturnTime=null,this.lastBorrowTime=null,this.lastIdleTime=null,this.obj=t,this.state=e.IDLE}allocate(){this.lastBorrowTime=Date.now(),this.state=e.ALLOCATED}deallocate(){this.lastReturnTime=Date.now(),this.state=e.IDLE}invalidate(){this.state=e.INVALID}test(){this.state=e.VALIDATION}idle(){this.lastIdleTime=Date.now(),this.state=e.IDLE}returning(){this.state=e.RETURNING}}}function ge(){if(Q)return q;Q=1;return q=class{evict(e,t,i){const s=Date.now()-t.lastIdleTime;return e.softIdleTimeoutMillis>0&&e.softIdleTimeoutMillis<s&&e.min<i||e.idleTimeoutMillis<s}}}function ve(){if(H)return J;H=1;return J=class{constructor(){this.head=null,this.tail=null,this.length=0}insertBeginning(e){null===this.head?(this.head=e,this.tail=e,e.prev=null,e.next=null,this.length++):this.insertBefore(this.head,e)}insertEnd(e){null===this.tail?this.insertBeginning(e):this.insertAfter(this.tail,e)}insertAfter(e,t){t.prev=e,t.next=e.next,null===e.next?this.tail=t:e.next.prev=t,e.next=t,this.length++}insertBefore(e,t){t.prev=e.prev,t.next=e,null===e.prev?this.head=t:e.prev.next=t,e.prev=t,this.length++}remove(e){null===e.prev?this.head=e.next:e.prev.next=e.next,null===e.next?this.tail=e.prev:e.next.prev=e.prev,e.prev=null,e.next=null,this.length--}static createNode(e){return{prev:null,next:null,data:e}}}}function fe(){if(ie)return te;ie=1;const e=ee?$:(ee=1,$=class{constructor(e,t){this._list=e,this._direction=!0===t?"prev":"next",this._startPosition=!0===t?"tail":"head",this._started=!1,this._cursor=null,this._done=!1}_start(){this._cursor=this._list[this._startPosition],this._started=!0}_advanceCursor(){if(!1===this._started)return this._started=!0,void(this._cursor=this._list[this._startPosition]);this._cursor=this._cursor[this._direction]}reset(){this._done=!1,this._started=!1,this._cursor=null}remove(){if(!1===this._started||!0===this._done||this._isCursorDetached())return!1;this._list.remove(this._cursor)}next(){return!0===this._done?{done:!0}:(this._advanceCursor(),null===this._cursor||this._isCursorDetached()?(this._done=!0,{done:!0}):{value:this._cursor,done:!1})}_isCursorDetached(){return null===this._cursor.prev&&null===this._cursor.next&&this._list.tail!==this._cursor&&this._list.head!==this._cursor}});return te=class extends e{next(){const e=super.next();return e.value&&(e.value=e.value.data),e}}}function ye(){if(ne)return se;ne=1;const e=ve(),t=fe();class i{constructor(){this._list=new e}shift(){if(0===this.length)return;const e=this._list.head;return this._list.remove(e),e.data}unshift(t){const i=e.createNode(t);this._list.insertBeginning(i)}push(t){const i=e.createNode(t);this._list.insertEnd(i)}pop(){if(0===this.length)return;const e=this._list.tail;return this._list.remove(e),e.data}[Symbol.iterator](){return new t(this._list)}iterator(){return new t(this._list)}reverseIterator(){return new t(this._list,!0)}get head(){if(0===this.length)return;return this._list.head.data}get tail(){if(0===this.length)return;return this._list.tail.data}get length(){return this._list.length}}return se=i}function xe(){if(ce)return ae;ce=1;const e=function(){if(oe)return re;oe=1;const e=ve(),t=ye();return re=class extends t{push(t){const i=e.createNode(t);t.promise.catch(this._createTimeoutRejectionHandler(i)),this._list.insertEnd(i)}_createTimeoutRejectionHandler(e){return t=>{"TimeoutError"===t.name&&this._list.remove(e)}}}}();return ae=class{constructor(t){this._size=Math.max(0|+t,1),this._slots=[];for(let i=0;i<this._size;i++)this._slots.push(new e)}get length(){let e=0;for(let t=0,i=this._slots.length;t<i;t++)e+=this._slots[t].length;return e}enqueue(e,t){(t=t&&0|+t||0)&&(t<0||t>=this._size)&&(t=this._size-1),this._slots[t].push(e)}dequeue(){for(let e=0,t=this._slots.length;e<t;e+=1)if(this._slots[e].length)return this._slots[e].shift()}get head(){for(let e=0,t=this._slots.length;e<t;e+=1)if(this._slots[e].length>0)return this._slots[e].head}get tail(){for(let e=this._slots.length-1;e>=0;e--)if(this._slots[e].length>0)return this._slots[e].tail}}}var Te,_e,we,Me,be,Se={};function Re(){if(we)return _e;we=1;const e=he().EventEmitter,t=V?C:(V=1,C=function(e){if("function"!=typeof e.create)throw new TypeError("factory.create must be a function");if("function"!=typeof e.destroy)throw new TypeError("factory.destroy must be a function");if(void 0!==e.validate&&"function"!=typeof e.validate)throw new TypeError("factory.validate must be a function")}),i=le(),s=me(),n=function(){if(U)return K;U=1;const e=de();return K=class extends e{constructor(e,t){super(t),this._creationTimestamp=Date.now(),this.pooledResource=e}reject(){}}}(),r=pe();ge(),ye();const o=de();xe(),fe();const a=function(){if(Te)return Se;function e(){}return Te=1,Se.reflector=function(t){return t.then(e,e)},Se}().reflector;return _e=class extends e{constructor(e,s,n,r,o){super(),t(r),this._config=new i(o),this._Promise=this._config.Promise,this._factory=r,this._draining=!1,this._started=!1,this._waitingClientsQueue=new n(this._config.priorityRange),this._factoryCreateOperations=new Set,this._factoryDestroyOperations=new Set,this._availableObjects=new s,this._testOnBorrowResources=new Set,this._testOnReturnResources=new Set,this._validationOperations=new Set,this._allObjects=new Set,this._resourceLoans=new Map,this._evictionIterator=this._availableObjects.iterator(),this._evictor=new e,this._scheduledEviction=null,!0===this._config.autostart&&this.start()}_destroy(e){e.invalidate(),this._allObjects.delete(e);const t=this._factory.destroy(e.obj),i=this._config.destroyTimeoutMillis?this._Promise.resolve(this._applyDestroyTimeout(t)):this._Promise.resolve(t);this._trackOperation(i,this._factoryDestroyOperations).catch((e=>{this.emit("factoryDestroyError",e)})),this._ensureMinimum()}_applyDestroyTimeout(e){const t=new this._Promise(((e,t)=>{setTimeout((()=>{t(new Error("destroy timed out"))}),this._config.destroyTimeoutMillis).unref()}));return this._Promise.race([t,e])}_testOnBorrow(){if(this._availableObjects.length<1)return!1;const e=this._availableObjects.shift();e.test(),this._testOnBorrowResources.add(e);const t=this._factory.validate(e.obj),i=this._Promise.resolve(t);return this._trackOperation(i,this._validationOperations).then((t=>{if(this._testOnBorrowResources.delete(e),!1===t)return e.invalidate(),this._destroy(e),void this._dispense();this._dispatchPooledResourceToNextWaitingClient(e)})),!0}_dispatchResource(){if(this._availableObjects.length<1)return!1;const e=this._availableObjects.shift();return this._dispatchPooledResourceToNextWaitingClient(e),!1}_dispense(){const e=this._waitingClientsQueue.length;if(e<1)return;const t=e-this._potentiallyAllocableResourceCount,i=Math.min(this.spareResourceCapacity,t);for(let s=0;i>s;s++)this._createResource();if(!0===this._config.testOnBorrow){const t=e-this._testOnBorrowResources.size,i=Math.min(this._availableObjects.length,t);for(let e=0;i>e;e++)this._testOnBorrow()}if(!1===this._config.testOnBorrow){const t=Math.min(this._availableObjects.length,e);for(let e=0;t>e;e++)this._dispatchResource()}}_dispatchPooledResourceToNextWaitingClient(e){const t=this._waitingClientsQueue.dequeue();if(void 0===t||t.state!==o.PENDING)return this._addPooledResourceToAvailableObjects(e),!1;const i=new n(e,this._Promise);return this._resourceLoans.set(e.obj,i),e.allocate(),t.resolve(e.obj),!0}_trackOperation(e,t){return t.add(e),e.then((i=>(t.delete(e),this._Promise.resolve(i))),(i=>(t.delete(e),this._Promise.reject(i))))}_createResource(){const e=this._factory.create(),t=this._Promise.resolve(e).then((e=>{const t=new r(e);this._allObjects.add(t),this._addPooledResourceToAvailableObjects(t)}));this._trackOperation(t,this._factoryCreateOperations).then((()=>(this._dispense(),null))).catch((e=>{this.emit("factoryCreateError",e),this._dispense()}))}_ensureMinimum(){if(!0===this._draining)return;const e=this._config.min-this._count;for(let t=0;t<e;t++)this._createResource()}_evict(){const e=Math.min(this._config.numTestsPerEvictionRun,this._availableObjects.length),t={softIdleTimeoutMillis:this._config.softIdleTimeoutMillis,idleTimeoutMillis:this._config.idleTimeoutMillis,min:this._config.min};for(let i=0;i<e;){const e=this._evictionIterator.next();if(!0===e.done&&this._availableObjects.length<1)return void this._evictionIterator.reset();if(!0===e.done&&this._availableObjects.length>0){this._evictionIterator.reset();continue}const s=e.value;i++,!0===this._evictor.evict(t,s,this._availableObjects.length)&&(this._evictionIterator.remove(),this._destroy(s))}}_scheduleEvictorRun(){this._config.evictionRunIntervalMillis>0&&(this._scheduledEviction=setTimeout((()=>{this._evict(),this._scheduleEvictorRun()}),this._config.evictionRunIntervalMillis).unref())}_descheduleEvictorRun(){this._scheduledEviction&&clearTimeout(this._scheduledEviction),this._scheduledEviction=null}start(){!0!==this._draining&&!0!==this._started&&(this._started=!0,this._scheduleEvictorRun(),this._ensureMinimum())}acquire(e){if(!1===this._started&&!1===this._config.autostart&&this.start(),this._draining)return this._Promise.reject(new Error("pool is draining and cannot accept work"));if(this.spareResourceCapacity<1&&this._availableObjects.length<1&&void 0!==this._config.maxWaitingClients&&this._waitingClientsQueue.length>=this._config.maxWaitingClients)return this._Promise.reject(new Error("max waitingClients count exceeded"));const t=new s(this._config.acquireTimeoutMillis,this._Promise);return this._waitingClientsQueue.enqueue(t,e),this._dispense(),t.promise}use(e,t){return this.acquire(t).then((t=>e(t).then((e=>(this.release(t),e)),(e=>{throw this.destroy(t),e}))))}isBorrowedResource(e){return this._resourceLoans.has(e)}release(e){const t=this._resourceLoans.get(e);if(void 0===t)return this._Promise.reject(new Error("Resource not currently part of this pool"));this._resourceLoans.delete(e),t.resolve();const i=t.pooledResource;return i.deallocate(),this._addPooledResourceToAvailableObjects(i),this._dispense(),this._Promise.resolve()}destroy(e){const t=this._resourceLoans.get(e);if(void 0===t)return this._Promise.reject(new Error("Resource not currently part of this pool"));this._resourceLoans.delete(e),t.resolve();const i=t.pooledResource;return i.deallocate(),this._destroy(i),this._dispense(),this._Promise.resolve()}_addPooledResourceToAvailableObjects(e){e.idle(),!0===this._config.fifo?this._availableObjects.push(e):this._availableObjects.unshift(e)}drain(){return this._draining=!0,this.__allResourceRequestsSettled().then((()=>this.__allResourcesReturned())).then((()=>{this._descheduleEvictorRun()}))}__allResourceRequestsSettled(){return this._waitingClientsQueue.length>0?a(this._waitingClientsQueue.tail.promise):this._Promise.resolve()}__allResourcesReturned(){const e=Array.from(this._resourceLoans.values()).map((e=>e.promise)).map(a);return this._Promise.all(e)}clear(){const e=Array.from(this._factoryCreateOperations).map(a);return this._Promise.all(e).then((()=>{for(const t of this._availableObjects)this._destroy(t);const e=Array.from(this._factoryDestroyOperations).map(a);return a(this._Promise.all(e))}))}ready(){return new this._Promise((e=>{const t=()=>{this.available>=this.min?e():setTimeout(t,100)};t()}))}get _potentiallyAllocableResourceCount(){return this._availableObjects.length+this._testOnBorrowResources.size+this._testOnReturnResources.size+this._factoryCreateOperations.size}get _count(){return this._allObjects.size+this._factoryCreateOperations.size}get spareResourceCapacity(){return this._config.max-(this._allObjects.size+this._factoryCreateOperations.size)}get size(){return this._count}get available(){return this._availableObjects.length}get borrowed(){return this._resourceLoans.size}get pending(){return this._waitingClientsQueue.length}get max(){return this._config.max}get min(){return this._config.min}}}const Pe={create:async()=>{const e=new URL("data:video/mp2t;base64,aW1wb3J0IHsgTWVzaERhdGEgfSBmcm9tICdAL3R5cGVzJzsKaW1wb3J0ICogYXMgQ29tbGluayBmcm9tICdjb21saW5rJzsKaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnOwppbXBvcnQgeyBNZXNoU3VyZmFjZVNhbXBsZXIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbWF0aC9NZXNoU3VyZmFjZVNhbXBsZXIuanMnOwoKZXhwb3J0IGludGVyZmFjZSBNZXNoU2FtcGxlckFQSSB7CiAgc2FtcGxlTWVzaDogKG1lc2hEYXRhOiBNZXNoRGF0YSwgc2l6ZTogbnVtYmVyKSA9PiBQcm9taXNlPEZsb2F0MzJBcnJheT47Cn0KCmNvbnN0IGFwaSA9IHsKICBzYW1wbGVNZXNoOiAobWVzaERhdGE6IE1lc2hEYXRhLCBzaXplOiBudW1iZXIpOiBGbG9hdDMyQXJyYXkgPT4gewogICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkoKTsKICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKG5ldyBGbG9hdDMyQXJyYXkobWVzaERhdGEucG9zaXRpb24pLCAzKSk7CiAgICBpZiAobWVzaERhdGEubm9ybWFsKSB7CiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZShuZXcgRmxvYXQzMkFycmF5KG1lc2hEYXRhLm5vcm1hbCksIDMpKTsKICAgIH0KICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCk7CiAgICBjb25zdCBtZXNoID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTsKICAgIG1lc2guc2NhbGUuc2V0KG1lc2hEYXRhLnNjYWxlLngsIG1lc2hEYXRhLnNjYWxlLnksIG1lc2hEYXRhLnNjYWxlLnopOwoKICAgIGNvbnN0IHNhbXBsZXIgPSBuZXcgTWVzaFN1cmZhY2VTYW1wbGVyKG1lc2gpLmJ1aWxkKCk7CiAgICBjb25zdCBkYXRhID0gbmV3IEZsb2F0MzJBcnJheShzaXplICogc2l6ZSAqIDQpOwogICAgY29uc3QgcG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpOwoKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7CiAgICAgICAgY29uc3QgaW5kZXggPSBpICogc2l6ZSArIGo7CiAgICAgICAgc2FtcGxlci5zYW1wbGUocG9zaXRpb24pOwogICAgICAgIGRhdGFbNCAqIGluZGV4XSA9IHBvc2l0aW9uLnggKiBtZXNoRGF0YS5zY2FsZS54OwogICAgICAgIGRhdGFbNCAqIGluZGV4ICsgMV0gPSBwb3NpdGlvbi55ICogbWVzaERhdGEuc2NhbGUueTsKICAgICAgICBkYXRhWzQgKiBpbmRleCArIDJdID0gcG9zaXRpb24ueiAqIG1lc2hEYXRhLnNjYWxlLno7CiAgICAgICAgZGF0YVs0ICogaW5kZXggKyAzXSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuMDE7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGF0YTsKICB9LAp9OwoKQ29tbGluay5leHBvc2UoYXBpKTsK",n&&"SCRIPT"===n.tagName.toUpperCase()&&n.src||new URL("index.iife.js",document.baseURI).href);return y(new Worker(e,{type:"module"}))},destroy:async e=>e[l]()},De=E(function(){if(be)return Me;be=1;const e=Re(),t=ye(),i=xe(),s=ge();return Me={Pool:e,Deque:t,PriorityQueue:i,DefaultEvictor:s,createPool:function(n,r){return new e(s,t,i,n,r)}}}()).createPool(Pe,{max:navigator.hardwareConcurrency||4,min:2});function Ee(e,t){const i=new o.DataTexture(e,t,t,o.RGBAFormat,o.FloatType);return i.needsUpdate=!0,i}function Ie(e,t,i){return e=Math.min(e,i),e=Math.max(e,t)}class Ce{constructor(e,t,i){s(this,"textureSize"),s(this,"meshes"),s(this,"dataTextures"),s(this,"eventEmitter"),this.eventEmitter=e,this.textureSize=t,this.meshes=function(e){const t=new Map;return e&&(Array.isArray(e)?e.forEach((({id:e,item:i})=>t.set(e,i))):t.set(e.id,e.item)),t}(i),this.dataTextures=new Map,this.updateServiceState("ready")}async register(e,t){this.meshes.set(e,t)}setTextureSize(e){this.textureSize!==e&&(this.textureSize=e,this.dataTextures.forEach((e=>e.dispose())),this.dataTextures.clear())}getMesh(e){return this.meshes.get(e)}async getDataTexture(e){return await this.prepareMesh(e)}async prepareMesh(e){if(!this.meshes.has(e))throw new Error(`Mesh with id "${e}" does not exist.`);const t=this.dataTextures.get(e);if(t)return t;const i=function(e){var t;return{position:e.geometry.attributes.position.array,normal:null==(t=e.geometry.attributes.normal)?void 0:t.array,scale:{x:e.scale.x,y:e.scale.y,z:e.scale.z}}}(this.meshes.get(e)),s=await De.acquire();try{const t=Ee(await s.sampleMesh(i,this.textureSize),this.textureSize);return t.name=e,t}finally{await De.release(s)}}async dispose(){this.meshes.clear(),this.dataTextures.clear(),this.updateServiceState("disposed")}updateServiceState(e){this.eventEmitter.emit("serviceStateUpdated",{type:"data-texture",state:e})}}class Ve{constructor(e){s(this,"size"),s(this,"mesh"),s(this,"matcapMaterial"),s(this,"fallbackMaterial"),s(this,"fallbackGeometry"),s(this,"materials"),s(this,"geometries"),s(this,"uvRefsCache"),s(this,"previousScale"),this.size=e,this.materials=new Map,this.geometries=new Map,this.uvRefsCache=new Map,this.previousScale={x:1,y:1,z:1},this.matcapMaterial=new o.ShaderMaterial({uniforms:{uTime:{value:0},uProgress:{value:0},uTexture:{value:null},uVelocity:{value:null},uSourceMatcap:{value:null},uTargetMatcap:{value:null}},vertexShader:"\nvarying vec2 vUv;\nuniform sampler2D uTexture;\nuniform sampler2D uVelocity;\nuniform float uTime;\nvarying vec3 vNormal;\nattribute vec2 uvRef;\nvarying vec3 vViewPosition;\n\nvec3 rotate3D(vec3 v, vec3 vel) {\n vec3 pos = v;\n vec3 up = vec3(0, 1, 0);\n vec3 axis = normalize(cross(up, vel));\n float angle = acos(dot(up, normalize(vel)));\n pos = pos * cos(angle) + cross(axis, pos) * sin(angle) + axis * dot(axis, pos) * (1. - cos(angle));\n return pos;\n}\n\nvoid main() {\n vUv = uv;\n vNormal = normal;\n\n vec4 color = texture2D(uTexture, uvRef);\n vec4 velocity = texture2D(uVelocity, uvRef);\n vec3 pos = color.xyz;// apply the texture to the vertex distribution.\n\n vec3 localPosition = position.xyz;\n if (length (velocity.xyz) < 0.0001) {\n velocity.xyz = vec3(0.0, 0.0001, 0.0001);\n }\n localPosition.y *= max(1.0, length(velocity.xyz) * 1000.0);\n localPosition = rotate3D(localPosition, velocity.xyz);\n vNormal = rotate3D(normal, velocity.xyz);\n\n mat4 instanceMat = instanceMatrix;\n instanceMat[3].xyz = pos.xyz;\n\n // unlike the traditional mvMatrix * position, we need to additional multiplication with the instance matrix.\n vec4 modelViewPosition = modelViewMatrix * instanceMat * vec4(localPosition, 1.0);\n\n vViewPosition = - modelViewPosition.xyz;\n\n gl_Position = projectionMatrix * modelViewPosition;\n}\n",fragmentShader:"\nvarying vec2 vUv;\nuniform sampler2D uTexture;\n\nuniform sampler2D uSourceMatcap;\nuniform sampler2D uTargetMatcap;\n\nuniform float uProgress;\nvarying vec3 vNormal;\nvarying vec3 vViewPosition;\nvoid main() {\n vec3 viewDir = normalize( vViewPosition );\n vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n vec3 y = cross( viewDir, x );\n vec2 uv = vec2( dot( x, vNormal ), dot( y, vNormal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks\n\n vec4 sourceMatcap = texture2D( uSourceMatcap, uv );\n vec4 targetMatcap = texture2D( uTargetMatcap, uv );\n\n vec4 matcap = mix(sourceMatcap, targetMatcap, uProgress);\n gl_FragColor = matcap;\n}\n"}),this.fallbackMaterial=new o.MeshBasicMaterial({color:16777215}),this.fallbackGeometry=new o.BoxGeometry(.001,.001,.001),this.mesh=this.createInstancedMesh(e,this.fallbackGeometry,this.fallbackMaterial)}getMesh(){return this.mesh}update(e){const t=this.mesh.material;(t instanceof o.ShaderMaterial||t instanceof o.RawShaderMaterial)&&(t.uniforms.uTime.value=e)}setOriginMatcap(e){console.log("set source matcap",e),this.matcapMaterial.uniforms.uSourceMatcap.value=e}setDestinationMatcap(e){console.log("set target matcap",e),this.matcapMaterial.uniforms.uTargetMatcap.value=e}setProgress(e){e=Math.max(0,e),e=Math.min(1,e),this.matcapMaterial.uniforms.uProgress.value=e}setGeometrySize(e){this.mesh.geometry.scale(1/this.previousScale.x,1/this.previousScale.y,1/this.previousScale.z),this.mesh.geometry.scale(e.x,e.y,e.z),this.previousScale=e}useMatcapMaterial(){console.log("Using matcap material"),this.mesh.material=this.matcapMaterial}useMaterial(e){const t=this.materials.get(e);t?this.mesh.material=t:console.warn(`material with id "${e}" not found`)}useGeometry(e){const t=this.geometries.get(e);t?this.mesh.geometry=t:console.warn(`geometry with id "${e}" not found`)}updateVelocityTexture(e){this.matcapMaterial.uniforms.uVelocity.value=e}updatePositionTexture(e){this.matcapMaterial.uniforms.uTexture.value=e}resize(e){if(this.size===e)return{current:this.mesh,previous:this.mesh};this.size=e;const t=this.mesh;return this.mesh=this.createInstancedMesh(e,t.geometry,t.material),{current:this.mesh,previous:t}}dispose(){this.mesh.dispose(),this.geometries.forEach((e=>e.dispose())),this.materials.forEach((e=>e.dispose())),this.uvRefsCache.clear(),this.geometries.clear(),this.materials.clear()}registerGeometry(e,t){const i=this.geometries.get(e);if(i){if(i===t)return;console.log(`geometry with id "${e}" already exists. replacing...`)}const s=this.getUVRefs(this.size);t.setAttribute("uvRef",s),this.geometries.set(e,t),this.mesh.geometry===i&&(this.mesh.geometry=t),null==i||i.dispose()}registerMaterial(e,t){const i=this.materials.get(e);if(i){if(i===t)return;console.log(`material with id "${e}" already exists. replacing...`)}this.mesh.material===i&&(this.mesh.material=t),this.materials.set(e,t),null==i||i.dispose()}getUVRefs(e){const t=this.uvRefsCache.get(e);if(t)return t;const i=new Float32Array(e*e*2);for(let n=0;n<e;n++)for(let t=0;t<e;t++){const s=n*e+t;i[2*s]=t/(e-1),i[2*s+1]=n/(e-1)}const s=new o.InstancedBufferAttribute(i,2);return this.uvRefsCache.set(e,s),s}createInstancedMesh(e,t,i){(t=t||this.fallbackGeometry).setAttribute("uvRef",this.getUVRefs(e));const s=e*e;return new o.InstancedMesh(t,i,s)}}class Ge{constructor(e,t,i,n){s(this,"raycaster",new o.Raycaster),s(this,"mousePosition",new o.Vector2),s(this,"mouseEntered",!1),s(this,"mousePositionChanged",!1),s(this,"camera"),s(this,"originGeometry"),s(this,"destinationGeometry"),s(this,"progress",0),s(this,"intersectionMesh",new o.Mesh),s(this,"geometryNeedsUpdate"),s(this,"eventEmitter"),s(this,"blendedGeometry"),s(this,"intersection"),s(this,"lastKnownOriginMeshID"),s(this,"lastKnownDestinationMeshID"),this.camera=t,this.originGeometry=i,this.eventEmitter=e,this.destinationGeometry=n,this.geometryNeedsUpdate=!0}setCamera(e){this.camera=e}setOriginGeometry(e){this.lastKnownOriginMeshID!==e.uuid&&(this.originGeometry&&this.originGeometry.dispose(),this.lastKnownOriginMeshID=e.uuid,this.originGeometry=e.geometry.clone(),this.originGeometry.applyMatrix4(e.matrixWorld),this.geometryNeedsUpdate=!0)}setDestinationGeometry(e){this.lastKnownDestinationMeshID!==e.uuid&&(this.destinationGeometry&&this.destinationGeometry.dispose(),this.lastKnownDestinationMeshID=e.uuid,this.destinationGeometry=e.geometry.clone(),this.destinationGeometry.applyMatrix4(e.matrixWorld),this.geometryNeedsUpdate=!0)}setProgress(e){this.progress=e,this.geometryNeedsUpdate=!0}setMousePosition(e){e?(this.mousePosition.equals(e)||(this.mousePosition.copy(e),this.mousePositionChanged=!0),this.mouseEntered=!0):(this.mouseEntered=!1,this.mousePositionChanged=!1)}calculate(){if(this.camera&&this.mouseEntered)return this.geometryNeedsUpdate&&(this.geometryNeedsUpdate=!1,this.blendedGeometry=this.getBlendedGeometry(),this.mousePositionChanged=!0),this.mousePositionChanged&&(this.mousePositionChanged=!1,this.blendedGeometry?this.intersection=this.getFirstIntersection(this.blendedGeometry,this.camera):this.intersection=void 0),this.intersection?this.eventEmitter.emit("interactionPositionUpdated",{position:this.intersection}):this.eventEmitter.emit("interactionPositionUpdated",{position:{x:0,y:0,z:0,w:0}}),this.intersection}dispose(){var e;null==(e=this.blendedGeometry)||e.dispose(),this.intersectionMesh.geometry.dispose()}getFirstIntersection(e,t){this.raycaster.setFromCamera(this.mousePosition,t),this.intersectionMesh.geometry=e;const i=this.raycaster.intersectObject(this.intersectionMesh,!1)[0];if(i)return new o.Vector4(i.point.x,i.point.y,i.point.z,1)}getBlendedGeometry(){return 0===this.progress?this.originGeometry:1===this.progress?this.destinationGeometry:this.originGeometry&&this.destinationGeometry?this.originGeometry===this.destinationGeometry?this.originGeometry:this.blendGeometry(this.originGeometry,this.destinationGeometry,this.progress):void 0}blendGeometry(e,t,i){const s=new o.BufferGeometry,n=e.attributes.position.array,r=t.attributes.position.array,a=new Float32Array(n.length);for(let c=0;c<n.length;c+=3){const e=new o.Vector3(n[c],n[c+1],n[c+2]),t=new o.Vector3(r[c],r[c+1],r[c+2]),s=(new o.Vector3).lerpVectors(e,t,i);a[c]=s.x,a[c+1]=s.y,a[c+2]=s.z}return s.setAttribute("position",new o.BufferAttribute(a,3)),e.attributes.normal&&s.setAttribute("normal",e.attributes.normal.clone()),e.attributes.uv&&s.setAttribute("uv",e.attributes.uv.clone()),e.index&&s.setIndex(e.index.clone()),s}}class ze{constructor(e,t){s(this,"matcaps",new Map),s(this,"eventEmitter"),s(this,"fallbackMatcap",new o.DataTexture(new Uint8Array([127,127,127,255]),1,1,o.RGBAFormat)),this.eventEmitter=e,t&&t.forEach((({id:e,item:t})=>this.setMatcap(e,t))),this.updateServiceState("ready")}getMatcap(e){const t=this.matcaps.get(e);return t||(this.eventEmitter.emit("invalidRequest",{message:`invalid matcap request: ${e}`}),this.fallbackMatcap)}setMatcap(e,t){const i=this.matcaps.get(e);i!==t&&(this.matcaps.set(e,t),i?(this.eventEmitter.emit("matcapReplaced",{id:e}),i.dispose()):this.eventEmitter.emit("matcapRegistered",{id:e}))}dispose(){this.updateServiceState("disposed"),this.matcaps.forEach((e=>e.dispose())),this.matcaps.clear()}updateServiceState(e){this.eventEmitter.emit("serviceStateUpdated",{type:"matcap",state:e})}}const Oe=new t.OrthographicCamera(-1,1,1,-1,0,1);class Ae extends t.BufferGeometry{constructor(){super(),this.setAttribute("position",new t.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new t.Float32BufferAttribute([0,2,0,0,2,0],2))}}const Fe=new Ae;class Le{constructor(e){this._mesh=new t.Mesh(Fe,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,Oe)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}}class Ne{constructor(e,i,s){this.variables=[],this.currentTextureIndex=0;let n=t.FloatType;const r={passThruTexture:{value:null}},o=u("uniform sampler2D passThruTexture;\n\nvoid main() {\n\n\tvec2 uv = gl_FragCoord.xy / resolution.xy;\n\n\tgl_FragColor = texture2D( passThruTexture, uv );\n\n}\n",r),a=new Le(o);function c(t){t.defines.resolution="vec2( "+e.toFixed(1)+", "+i.toFixed(1)+" )"}function u(e,i){i=i||{};const s=new t.ShaderMaterial({name:"GPUComputationShader",uniforms:i,vertexShader:"void main()\t{\n\n\tgl_Position = vec4( position, 1.0 );\n\n}\n",fragmentShader:e});return c(s),s}this.setDataType=function(e){return n=e,this},this.addVariable=function(e,i,s){const n={name:e,initialValueTexture:s,material:this.createShaderMaterial(i),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:t.NearestFilter,magFilter:t.NearestFilter};return this.variables.push(n),n},this.setVariableDependencies=function(e,t){e.dependencies=t},this.init=function(){if(0===s.capabilities.maxVertexTextures)return"No support for vertex shader textures.";for(let t=0;t<this.variables.length;t++){const s=this.variables[t];s.renderTargets[0]=this.createRenderTarget(e,i,s.wrapS,s.wrapT,s.minFilter,s.magFilter),s.renderTargets[1]=this.createRenderTarget(e,i,s.wrapS,s.wrapT,s.minFilter,s.magFilter),this.renderTexture(s.initialValueTexture,s.renderTargets[0]),this.renderTexture(s.initialValueTexture,s.renderTargets[1]);const n=s.material,r=n.uniforms;if(null!==s.dependencies)for(let e=0;e<s.dependencies.length;e++){const t=s.dependencies[e];if(t.name!==s.name){let e=!1;for(let i=0;i<this.variables.length;i++)if(t.name===this.variables[i].name){e=!0;break}if(!e)return"Variable dependency not found. Variable="+s.name+", dependency="+t.name}r[t.name]={value:null},n.fragmentShader="\nuniform sampler2D "+t.name+";\n"+n.fragmentShader}}return this.currentTextureIndex=0,null},this.compute=function(){const e=this.currentTextureIndex,t=0===this.currentTextureIndex?1:0;for(let i=0,s=this.variables.length;i<s;i++){const s=this.variables[i];if(null!==s.dependencies){const t=s.material.uniforms;for(let i=0,n=s.dependencies.length;i<n;i++){const n=s.dependencies[i];t[n.name].value=n.renderTargets[e].texture}}this.doRenderTarget(s.material,s.renderTargets[t])}this.currentTextureIndex=t},this.getCurrentRenderTarget=function(e){return e.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(e){return e.renderTargets[0===this.currentTextureIndex?1:0]},this.dispose=function(){a.dispose();const e=this.variables;for(let t=0;t<e.length;t++){const i=e[t];i.initialValueTexture&&i.initialValueTexture.dispose();const s=i.renderTargets;for(let e=0;e<s.length;e++){s[e].dispose()}}},this.addResolutionDefine=c,this.createShaderMaterial=u,this.createRenderTarget=function(s,r,o,a,c,u){s=s||e,r=r||i,o=o||t.ClampToEdgeWrapping,a=a||t.ClampToEdgeWrapping,c=c||t.NearestFilter,u=u||t.NearestFilter;return new t.WebGLRenderTarget(s,r,{wrapS:o,wrapT:a,minFilter:c,magFilter:u,format:t.RGBAFormat,type:n,depthBuffer:!1})},this.createTexture=function(){const s=new Float32Array(e*i*4),n=new t.DataTexture(s,e,i,t.RGBAFormat,t.FloatType);return n.needsUpdate=!0,n},this.renderTexture=function(e,t){r.passThruTexture.value=e,this.doRenderTarget(o,t),r.passThruTexture.value=null},this.doRenderTarget=function(e,t){const i=s.getRenderTarget(),n=s.xr.enabled,r=s.shadowMap.autoUpdate;s.xr.enabled=!1,s.shadowMap.autoUpdate=!1,a.material=e,s.setRenderTarget(t),a.render(s),a.material=o,s.xr.enabled=n,s.shadowMap.autoUpdate=r,s.setRenderTarget(i)}}}class je{constructor(e,t,i){s(this,"gpuComputationRenderer"),s(this,"webGLRenderer"),s(this,"positionDataTexture"),s(this,"velocityDataTexture"),s(this,"mixPositionsVar"),s(this,"velocityVar"),s(this,"positionVar"),s(this,"interactionPosition"),s(this,"lastKnownPositionDataTexture"),s(this,"lastKnownVelocityDataTexture"),s(this,"lastKnownMixProgress"),s(this,"initialDataTexture"),this.initialDataTexture=i??function(e){const t=new Float32Array(e*e*4);for(let i=0;i<e;i++)for(let s=0;s<e;s++){const n=i*e+s;let r=Math.random()*Math.PI*2,o=Math.acos(2*Math.random()-1),a=Math.sin(o)*Math.cos(r),c=Math.sin(o)*Math.sin(r),u=Math.cos(o);t[4*n]=a,t[4*n+1]=c,t[4*n+2]=u,t[4*n+3]=.01*(Math.random()-.5)}return Ee(t,e)}(e),this.positionDataTexture=this.initialDataTexture,this.webGLRenderer=t,this.gpuComputationRenderer=new Ne(e,e,this.webGLRenderer),this.lastKnownMixProgress=0,t.capabilities.isWebGL2||this.gpuComputationRenderer.setDataType(o.HalfFloatType),this.velocityDataTexture=function(e){return Ee(new Float32Array(4*e*e),e)}(e),this.interactionPosition=new o.Vector4(0,0,0,0),this.mixPositionsVar=this.gpuComputationRenderer.addVariable("uMixedPosition","\nuniform sampler2D uPositionA;\nuniform sampler2D uPositionB;\nuniform float uProgress;\n\nvoid main() {\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec3 positionA = texture2D(uPositionA, uv).xyz;\n vec3 positionB = texture2D(uPositionB, uv).xyz;\n vec3 mixedPosition = mix(positionA, positionB, uProgress);\n gl_FragColor = vec4(mixedPosition, 1.0);\n}\n",this.positionDataTexture),this.velocityVar=this.gpuComputationRenderer.addVariable("uCurrentVelocity","\nuniform float uProgress;\nuniform vec4 uInteractionPosition;\nuniform float uTime;\nuniform float uTractionForce;\nuniform float uMaxRepelDistance;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main() {\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n float offset = rand(uv);\n\n vec3 position = texture2D(uCurrentPosition, uv).xyz;\n vec3 velocity = texture2D(uCurrentVelocity, uv).xyz;\n vec3 mixedPosition = texture2D(uMixedPosition, uv).xyz;\n\n velocity *= 0.9;\n\n // particle traction\n vec3 direction = normalize(mixedPosition - position); // direction vector\n float dist = length ( mixedPosition - position ); // distance from where it was supposed to be, and currently are.\n if (dist > 0.01) {\n position += direction * 0.1 * uTractionForce; // uTractionForce defaults to 0.1\n }\n\n // mouse repel force\n float pointerDistance = distance(position, uInteractionPosition.xyz);\n float mouseRepelModifier = clamp(uMaxRepelDistance - pointerDistance, 0.0, 1.0);\n float normalizedDistance = pointerDistance / uMaxRepelDistance;\n float repulsionStrength = (1.0 - normalizedDistance) * uInteractionPosition.w;\n direction = normalize(position - uInteractionPosition.xyz);\n velocity += (direction * 0.01 * repulsionStrength) * mouseRepelModifier;\n\n float lifespan = 20.0;\n float age = mod(uTime + lifespan * offset, lifespan);\n\n if (age < 0.1) {\n position.xyz = mixedPosition;\n }\n\n gl_FragColor = vec4(velocity, 1.0);\n}\n",this.velocityDataTexture),this.positionVar=this.gpuComputationRenderer.addVariable("uCurrentPosition","\nuniform float uProgress;\nuniform vec4 uInteractionPosition;\nuniform float uTime;\nuniform float uTractionForce;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main() {\n\n // in GPGPU, we calculate the uv on each fragment shader, not using the static varying passed over from the v shader.\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n float offset = rand(uv);\n\n vec3 position = texture2D(uCurrentPosition, uv).xyz;\n vec3 velocity = texture2D(uCurrentVelocity, uv).xyz;\n vec3 mixedPosition = texture2D(uMixedPosition, uv).xyz;\n\n // particle attraction to original position.\n vec3 direction = normalize(mixedPosition - position); // direction vector\n float dist = length ( mixedPosition - position ); // distance from where it was supposed to be, and currently are.\n\n if (dist > 0.01) {\n position = mix(position, mixedPosition, 0.1 * uTractionForce); // 0.1 ~ 0.001 (faster, slower)\n }\n\n position += velocity;\n gl_FragColor = vec4(position, 1.0);\n}\n",this.positionDataTexture),this.mixPositionsVar.material.uniforms.uProgress={value:0},this.mixPositionsVar.material.uniforms.uPositionA={value:this.initialDataTexture},this.mixPositionsVar.material.uniforms.uPositionB={value:this.initialDataTexture},this.velocityVar.material.uniforms.uTime={value:0},this.velocityVar.material.uniforms.uInteractionPosition={value:this.interactionPosition},this.velocityVar.material.uniforms.uCurrentPosition={value:this.positionDataTexture},this.velocityVar.material.uniforms.uTractionForce={value:.1},this.velocityVar.material.uniforms.uMaxRepelDistance={value:.3},this.positionVar.material.uniforms.uTime={value:0},this.positionVar.material.uniforms.uProgress={value:0},this.positionVar.material.uniforms.uTractionForce={value:.1},this.positionVar.material.uniforms.uInteractionPosition={value:this.interactionPosition},this.positionVar.material.uniforms.uCurrentPosition={value:this.positionDataTexture},this.gpuComputationRenderer.setVariableDependencies(this.positionVar,[this.velocityVar,this.positionVar,this.mixPositionsVar]),this.gpuComputationRenderer.setVariableDependencies(this.velocityVar,[this.velocityVar,this.positionVar,this.mixPositionsVar]);const n=this.gpuComputationRenderer.init();if(n)throw new Error("failed to initialize SimulationRenderer: "+n);this.lastKnownVelocityDataTexture=this.getVelocityTexture(),this.lastKnownPositionDataTexture=this.getPositionTexture()}setMorphSourceDataTexture(e){this.mixPositionsVar.material.uniforms.uPositionA.value=e}setMorphDestinationDataTexture(e){this.mixPositionsVar.material.uniforms.uPositionB.value=e}setMaxRepelDistance(e){this.velocityVar.material.uniforms.uMaxRepelDistance.value=e}setProgress(e){this.lastKnownMixProgress=Ie(e,0,1),this.mixPositionsVar.material.uniforms.uProgress.value=this.lastKnownMixProgress}setVelocityTractionForce(e){this.velocityVar.material.uniforms.uTractionForce.value=e}setPositionalTractionForce(e){this.positionVar.material.uniforms.uTractionForce.value=e}setInteractionPosition(e){this.interactionPosition.copy(e)}dispose(){this.mixPositionsVar.renderTargets.forEach((e=>e.dispose())),this.positionVar.renderTargets.forEach((e=>e.dispose())),this.velocityVar.renderTargets.forEach((e=>e.dispose())),this.positionDataTexture.dispose(),this.velocityDataTexture.dispose(),this.gpuComputationRenderer.dispose()}compute(e){this.velocityVar.material.uniforms.uTime.value=e,this.positionVar.material.uniforms.uTime.value=e,this.gpuComputationRenderer.compute()}getVelocityTexture(){return this.lastKnownVelocityDataTexture=this.gpuComputationRenderer.getCurrentRenderTarget(this.velocityVar).texture,this.lastKnownVelocityDataTexture}getPositionTexture(){return this.lastKnownPositionDataTexture=this.gpuComputationRenderer.getCurrentRenderTarget(this.positionVar).texture,this.lastKnownPositionDataTexture}}class Be{constructor(e,t,i){s(this,"state"),s(this,"textureSize"),s(this,"dataTextureTransitionProgress"),s(this,"velocityTractionForce"),s(this,"positionalTractionForce"),s(this,"simulationRenderer"),s(this,"webGLRenderer"),s(this,"eventEmitter"),s(this,"lastKnownVelocityDataTexture"),s(this,"lastKnownPositionDataTexture"),this.eventEmitter=e,this.webGLRenderer=i,this.textureSize=t,this.dataTextureTransitionProgress=0,this.velocityTractionForce=.1,this.positionalTractionForce=.1,this.updateServiceState("initializing"),this.simulationRenderer=new je(this.textureSize,this.webGLRenderer),this.lastKnownVelocityDataTexture=this.simulationRenderer.getVelocityTexture(),this.lastKnownPositionDataTexture=this.simulationRenderer.getPositionTexture(),this.updateServiceState("ready")}setTextureSize(e){this.updateServiceState("initializing"),this.simulationRenderer.dispose(),this.textureSize=e,this.simulationRenderer=new je(e,this.webGLRenderer),this.updateServiceState("ready")}setOriginDataTexture(e){this.textureSize!==e.textureSize?this.eventEmitter.emit("invalidRequest",{message:`Texture size mismatch: ${e.textureSize} vs ${this.textureSize}`}):this.simulationRenderer.setMorphSourceDataTexture(e.dataTexture)}setDestinationDataTexture(e){this.textureSize!==e.textureSize?this.eventEmitter.emit("invalidRequest",{message:`Texture size mismatch: ${e.textureSize} vs ${this.textureSize}`}):this.simulationRenderer.setMorphDestinationDataTexture(e.dataTexture)}setDataTextureTransitionProgress(e){this.dataTextureTransitionProgress=e,this.simulationRenderer.setProgress(this.dataTextureTransitionProgress)}setVelocityTractionForce(e){this.velocityTractionForce=e,this.simulationRenderer.setVelocityTractionForce(this.velocityTractionForce)}setPositionalTractionForce(e){this.positionalTractionForce=e,this.simulationRenderer.setPositionalTractionForce(this.positionalTractionForce)}compute(e){this.simulationRenderer.compute(e)}getVelocityTexture(){return"ready"===this.state&&(this.lastKnownVelocityDataTexture=this.simulationRenderer.getVelocityTexture()),this.lastKnownVelocityDataTexture}getPositionTexture(){return"ready"===this.state&&(this.lastKnownPositionDataTexture=this.simulationRenderer.getPositionTexture()),this.lastKnownPositionDataTexture}dispose(){this.updateServiceState("disposed"),this.simulationRenderer.dispose(),this.lastKnownVelocityDataTexture.dispose(),this.lastKnownPositionDataTexture.dispose()}updateServiceState(e){this.state=e,this.eventEmitter.emit("serviceStateUpdated",{type:"simulation",state:e})}setInteractionPosition(e){this.simulationRenderer.setInteractionPosition(e)}setMaxRepelDistance(e){this.simulationRenderer.setMaxRepelDistance(e)}}class ke{constructor(){s(this,"execStatus",new Map)}get(e){const t=this.execStatus.get(e);return t||(this.execStatus.set(e,"idle"),"idle")}set(e,t){this.execStatus.set(e,t)}}class Ke{constructor(e){s(this,"eventEmitter"),s(this,"transitions",new Map),s(this,"execStatus"),s(this,"ongoingTransitions",new Map),this.eventEmitter=e,this.execStatus=new ke,this.eventEmitter.on("transitionCancelled",this.handleTransitionCancelledEvent.bind(this))}enqueue(e,t,i={}){const s={...t,...i,cancelled:!1,duration:.001*t.duration};this.getQueue(e).push(s)}compute(e){this.transitions.forEach(((t,i)=>{var s;if(t.length&&!this.ongoingTransitions.has(i)){const n=t.shift();n&&(this.ongoingTransitions.set(i,{...n,startTime:e}),null==(s=n.onTransitionBegin)||s.call(n))}})),this.ongoingTransitions.forEach(((t,i)=>{var s,n,r;if(t.cancelled)return null==(s=t.onTransitionCancelled)||s.call(t),void this.ongoingTransitions.delete(i);const{startTime:o,duration:a,easing:c}=t,u=e-o,h=Ie(c(Math.min(1,u/a)),0,1);this.emitTransitionProgress(i,h),null==(n=t.onTransitionProgress)||n.call(t,h),h>=1&&(this.emitTransitionFinished(i),null==(r=t.onTransitionFinished)||r.call(t),this.ongoingTransitions.delete(i))}))}getQueue(e){const t=this.transitions.get(e);return t||(this.transitions.set(e,[]),this.transitions.get(e)??[])}handleTransitionCancelledEvent({type:e}){var t;const i=this.getQueue(e);for(;i.length;)i.pop();const s=this.ongoingTransitions.get(e);s&&(s.cancelled=!0,null==(t=s.onTransitionCancelled)||t.call(s))}emitTransitionProgress(e,t){this.eventEmitter.emit("transitionProgressed",{type:e,progress:t})}emitTransitionFinished(e){this.eventEmitter.emit("transitionFinished",{type:e})}}return e.ParticlesEngine=class{constructor(e){s(this,"simulationRendererService"),s(this,"eventEmitter"),s(this,"renderer"),s(this,"scene"),s(this,"serviceStates"),s(this,"dataTextureManager"),s(this,"matcapService"),s(this,"instancedMeshManager"),s(this,"transitionService"),s(this,"engineState"),s(this,"intersectionService"),this.eventEmitter=new c,this.serviceStates=this.initialServiceStates(),this.eventEmitter.on("serviceStateUpdated",this.handleServiceStateUpdated.bind(this)),this.scene=e.scene,this.renderer=e.renderer,this.engineState=this.initialEngineState(e.textureSize),this.transitionService=new Ke(this.eventEmitter),this.dataTextureManager=new Ce(this.eventEmitter,e.textureSize,e.meshes),this.matcapService=new ze(this.eventEmitter,e.matcaps),this.simulationRendererService=new Be(this.eventEmitter,e.textureSize,this.renderer),this.instancedMeshManager=new Ve(e.textureSize),this.instancedMeshManager.useMatcapMaterial(),this.scene.add(this.instancedMeshManager.getMesh()),this.intersectionService=new Ge(this.eventEmitter,e.camera),this.eventEmitter.on("transitionProgressed",this.handleTransitionProgress.bind(this)),this.eventEmitter.on("interactionPositionUpdated",this.handleInteractionPositionUpdated.bind(this))}render(e){this.intersectionService.calculate(),this.transitionService.compute(e),this.simulationRendererService.compute(e),this.instancedMeshManager.update(e),this.instancedMeshManager.updateVelocityTexture(this.simulationRendererService.getVelocityTexture()),this.instancedMeshManager.updatePositionTexture(this.simulationRendererService.getPositionTexture())}setOriginDataTexture(e,t=!1){t&&this.eventEmitter.emit("transitionCancelled",{type:"data-texture"}),this.dataTextureManager.getDataTexture(e).then((t=>{this.engineState.originMeshID=e,this.simulationRendererService.setOriginDataTexture({dataTexture:t,textureSize:this.engineState.textureSize}),this.intersectionService.setOriginGeometry(this.dataTextureManager.getMesh(e))}))}setDestinationDataTexture(e,t=!1){t&&this.eventEmitter.emit("transitionCancelled",{type:"data-texture"}),this.dataTextureManager.getDataTexture(e).then((t=>{this.engineState.destinationMeshID=e,this.simulationRendererService.setDestinationDataTexture({dataTexture:t,textureSize:this.engineState.textureSize}),this.intersectionService.setDestinationGeometry(this.dataTextureManager.getMesh(e))}))}setDataTextureTransitionProgress(e,t=!1){t&&this.eventEmitter.emit("transitionCancelled",{type:"data-texture"}),this.engineState.dataTextureTransitionProgress=e,this.simulationRendererService.setDataTextureTransitionProgress(e),this.intersectionService.setProgress(e)}setOriginMatcap(e,t=!1){t&&this.eventEmitter.emit("transitionCancelled",{type:"matcap"}),this.engineState.originMatcapID=e,this.instancedMeshManager.setOriginMatcap(this.matcapService.getMatcap(e))}setDestinationMatcap(e,t=!1){t&&this.eventEmitter.emit("transitionCancelled",{type:"matcap"}),this.engineState.destinationMatcapID=e,this.instancedMeshManager.setDestinationMatcap(this.matcapService.getMatcap(e))}setMatcapProgress(e,t=!1){t&&this.eventEmitter.emit("transitionCancelled",{type:"matcap"}),this.engineState.matcapTransitionProgress=e,this.instancedMeshManager.setProgress(e)}async setTextureSize(e){this.engineState.textureSize=e,this.dataTextureManager.setTextureSize(e),this.simulationRendererService.setTextureSize(e),this.instancedMeshManager.resize(e),this.dataTextureManager.getDataTexture(this.engineState.originMeshID).then((t=>this.simulationRendererService.setOriginDataTexture({dataTexture:t,textureSize:e}))),this.dataTextureManager.getDataTexture(this.engineState.destinationMeshID).then((t=>this.simulationRendererService.setDestinationDataTexture({dataTexture:t,textureSize:e}))),this.simulationRendererService.setDataTextureTransitionProgress(this.engineState.dataTextureTransitionProgress),this.simulationRendererService.setVelocityTractionForce(this.engineState.velocityTractionForce),this.simulationRendererService.setPositionalTractionForce(this.engineState.positionalTractionForce),this.instancedMeshManager.setOriginMatcap(this.matcapService.getMatcap(this.engineState.originMatcapID)),this.instancedMeshManager.setDestinationMatcap(this.matcapService.getMatcap(this.engineState.destinationMatcapID)),this.instancedMeshManager.setProgress(this.engineState.matcapTransitionProgress),this.instancedMeshManager.setGeometrySize(this.engineState.instanceGeometryScale)}setPointerPosition(e){this.engineState.pointerPosition=e,this.intersectionService.setMousePosition(e)}setGeometrySize(e){this.engineState.instanceGeometryScale=e,this.instancedMeshManager.setGeometrySize(e)}setVelocityTractionForce(e){this.engineState.velocityTractionForce=e,this.simulationRendererService.setVelocityTractionForce(e)}setPositionalTractionForce(e){this.engineState.positionalTractionForce=e,this.simulationRendererService.setPositionalTractionForce(e)}setMaxRepelDistance(e){this.engineState.maxRepelDistance=e,this.simulationRendererService.setMaxRepelDistance(e)}scheduleMeshTransition(e,t,i=a,s=1e3,n=!1){this.transitionService.enqueue("data-texture",{easing:i,duration:s},{onTransitionBegin:()=>{this.setOriginDataTexture(e,n),this.setDestinationDataTexture(t,n),this.setDataTextureTransitionProgress(0)}})}scheduleMatcapTransition(e,t,i=a,s=1e3,n=!1){this.transitionService.enqueue("matcap",{easing:i,duration:s},{onTransitionBegin:()=>{this.setOriginMatcap(e,n),this.setDestinationMatcap(t,n),this.setMatcapProgress(0)}})}handleServiceStateUpdated({type:e,state:t}){console.log("service state updated",e,t),this.serviceStates[e]=t}dispose(){this.scene.remove(this.instancedMeshManager.getMesh()),this.matcapService.dispose(),this.simulationRendererService.dispose(),this.instancedMeshManager.dispose(),this.intersectionService.dispose(),this.dataTextureManager.dispose().then((()=>console.log("engine disposed")))}initialEngineState(e){return{textureSize:e,originMeshID:"",destinationMeshID:"",dataTextureTransitionProgress:0,originMatcapID:"",destinationMatcapID:"",matcapTransitionProgress:0,velocityTractionForce:.1,positionalTractionForce:.1,maxRepelDistance:.3,pointerPosition:{x:0,y:0},instanceGeometryScale:{x:1,y:1,z:1}}}initialServiceStates(){return{"data-texture":"created","instanced-mesh":"created",matcap:"created",simulation:"created"}}handleTransitionProgress({type:e,progress:t}){switch(e){case"data-texture":this.setDataTextureTransitionProgress(t);break;case"matcap":this.setMatcapProgress(t)}}handleInteractionPositionUpdated({position:e}){this.simulationRendererService.setInteractionPosition(e)}},Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),e}({},THREE);
7
- //# sourceMappingURL=index.iife.js.map