@polarfront-lab/ionian 1.0.0 → 1.0.2

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,6 +1,6 @@
1
1
  {
2
2
  "name": "@polarfront-lab/ionian",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "ThreeJS Collection Set",
5
5
  "main": "./dist/index.umd.js",
6
6
  "module": "./dist/index.es.js",
@@ -66,7 +66,6 @@
66
66
  "@types/jest": "^29.5.14",
67
67
  "@types/node": "^22.13.4",
68
68
  "@types/three": "^0.173.0",
69
- "esbuild-plugin-copy": "^2.1.1",
70
69
  "eslint": "^9.20.1",
71
70
  "eslint-config-prettier": "^10.0.1",
72
71
  "eslint-plugin-prettier": "^5.2.3",
package/dist/index.cjs.js DELETED
@@ -1,7 +0,0 @@
1
- "use strict";var e=Object.defineProperty,t=(t,i,s)=>((t,i,s)=>i in t?e(t,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[i]=s)(t,"symbol"!=typeof i?i+"":i,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("three");var s="undefined"!=typeof document?document.currentScript:null;function n(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 r=n(i),o=e=>e;class a{constructor(){var e;t(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 c=Symbol("Comlink.proxy"),u=Symbol("Comlink.endpoint"),h=Symbol("Comlink.releaseProxy"),l=Symbol("Comlink.finalizer"),d=Symbol("Comlink.thrown"),m=e=>"object"==typeof e&&null!==e||"function"==typeof e,p=new Map([["proxy",{canHandle:e=>m(e)&&e[c],serialize(e){const{port1:t,port2:i}=new MessageChannel;return g(e,t),[i,[i]]},deserialize:e=>(e.start(),f(e))}],["throw",{canHandle:e=>m(e)&&d 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 g(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),u=(n.data.argumentList||[]).map(R);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]]=R(n.data.value),h=!0;break;case"APPLY":h=i.apply(t,u);break;case"CONSTRUCT":h=function(e){return Object.assign(e,{[c]:!0})}(new i(...u));break;case"ENDPOINT":{const{port1:t,port2:i}=new MessageChannel;g(e,i),h=function(e,t){return b.set(e,t),e}(t,[t])}break;case"RELEASE":h=void 0;break;default:return}}catch(m){h={value:m,[d]:0}}Promise.resolve(h).catch((e=>({value:e,[d]:0}))).then((i=>{const[n,a]=S(i);t.postMessage(Object.assign(Object.assign({},n),{id:r}),a),"RELEASE"===o&&(t.removeEventListener("message",s),v(t),l in e&&"function"==typeof e[l]&&e[l]())})).catch((e=>{const[i,s]=S({value:new TypeError("Unserializable return value"),[d]:0});t.postMessage(Object.assign(Object.assign({},i),{id:r}),s)}))})),t.start&&t.start()}function v(e){(function(e){return"MessagePort"===e.constructor.name})(e)&&e.close()}function f(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)}})),w(e,i,[],t)}function y(e){if(e)throw new Error("Proxy has been released and is not useable")}function x(e){return P(e,new Map,{type:"RELEASE"}).then((()=>{v(e)}))}const T=new WeakMap,_="FinalizationRegistry"in globalThis&&new FinalizationRegistry((e=>{const t=(T.get(e)||0)-1;T.set(e,t),0===t&&x(e)}));function w(e,t,i=[],s=function(){}){let n=!1;const r=new Proxy(s,{get(s,o){if(y(n),o===h)return()=>{!function(e){_&&_.unregister(e)}(r),x(e),t.clear(),n=!0};if("then"===o){if(0===i.length)return{then:()=>r};const s=P(e,t,{type:"GET",path:i.map((e=>e.toString()))}).then(R);return s.then.bind(s)}return w(e,t,[...i,o])},set(s,r,o){y(n);const[a,c]=S(o);return P(e,t,{type:"SET",path:[...i,r].map((e=>e.toString())),value:a},c).then(R)},apply(s,r,o){y(n);const a=i[i.length-1];if(a===u)return P(e,t,{type:"ENDPOINT"}).then(R);if("bind"===a)return w(e,t,i.slice(0,-1));const[c,h]=M(o);return P(e,t,{type:"APPLY",path:i.map((e=>e.toString())),argumentList:c},h).then(R)},construct(s,r){y(n);const[o,a]=M(r);return P(e,t,{type:"CONSTRUCT",path:i.map((e=>e.toString())),argumentList:o},a).then(R)}});return function(e,t){const i=(T.get(t)||0)+1;T.set(t,i),_&&_.register(e,t,e)}(r,e),r}function M(e){const t=e.map(S);return[t.map((e=>e[0])),(i=t.map((e=>e[1])),Array.prototype.concat.apply([],i))];var i}const b=new WeakMap;function S(e){for(const[t,i]of p)if(i.canHandle(e)){const[s,n]=i.serialize(e);return[{type:"HANDLER",name:t,value:s},n]}return[{type:"RAW",value:e},b.get(e)||[]]}function R(e){switch(e.type){case"HANDLER":return p.get(e.name).deserialize(e.value);case"RAW":return e.value}}function P(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 D(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var E,I,C,V,G,z,O,A,F,L,N,j,B,U,k,K,X,W,Z,Y,q,Q,J,H,$,ee,te,ie,se,ne,re,oe,ae,ce={exports:{}};function ue(){if(E)return ce.exports;E=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)}ce.exports=n,ce.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):[]},ce.exports}function he(){if(O)return z;O=1;const e=G?V:(G=1,V=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 z=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 le(){if(F)return A;F=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",A=e}function de(){if(B)return j;B=1;const e=le(),t=function(){if(N)return L;N=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 L={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 j=i}function me(){if(Z)return W;Z=1;const e=X?K:(X=1,K={ALLOCATED:"ALLOCATED",IDLE:"IDLE",INVALID:"INVALID",RETURNING:"RETURNING",VALIDATION:"VALIDATION"});return W=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 pe(){if(q)return Y;q=1;return Y=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 ge(){if(J)return Q;J=1;return Q=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 ve(){if(te)return ee;te=1;const e=$?H:($=1,H=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 ee=class extends e{next(){const e=super.next();return e.value&&(e.value=e.value.data),e}}}function fe(){if(se)return ie;se=1;const e=ge(),t=ve();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 ie=i}function ye(){if(ae)return oe;ae=1;const e=function(){if(re)return ne;re=1;const e=ge(),t=fe();return ne=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 oe=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 xe,Te,_e,we,Me,be={};function Se(){if(_e)return Te;_e=1;const e=ue().EventEmitter,t=C?I:(C=1,I=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=he(),s=de(),n=function(){if(k)return U;k=1;const e=le();return U=class extends e{constructor(e,t){super(t),this._creationTimestamp=Date.now(),this.pooledResource=e}reject(){}}}(),r=me();pe(),fe();const o=le();ye(),ve();const a=function(){if(xe)return be;function e(){}return xe=1,be.reflector=function(t){return t.then(e,e)},be}().reflector;return Te=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 Re={create:async()=>{const e=new URL("data:video/mp2t;base64,aW1wb3J0IHsgTWVzaERhdGEgfSBmcm9tICdAL3R5cGVzJzsKaW1wb3J0ICogYXMgQ29tbGluayBmcm9tICdjb21saW5rJzsKaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnOwppbXBvcnQgeyBNZXNoU3VyZmFjZVNhbXBsZXIgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbWF0aC9NZXNoU3VyZmFjZVNhbXBsZXInOwoKZXhwb3J0IGludGVyZmFjZSBNZXNoU2FtcGxlckFQSSB7CiAgc2FtcGxlTWVzaDogKG1lc2hEYXRhOiBNZXNoRGF0YSwgc2l6ZTogbnVtYmVyKSA9PiBQcm9taXNlPEZsb2F0MzJBcnJheT47Cn0KCmNvbnN0IGFwaSA9IHsKICBzYW1wbGVNZXNoOiAobWVzaERhdGE6IE1lc2hEYXRhLCBzaXplOiBudW1iZXIpOiBGbG9hdDMyQXJyYXkgPT4gewogICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkoKTsKICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKG5ldyBGbG9hdDMyQXJyYXkobWVzaERhdGEucG9zaXRpb24pLCAzKSk7CiAgICBpZiAobWVzaERhdGEubm9ybWFsKSB7CiAgICAgIGdlb21ldHJ5LnNldEF0dHJpYnV0ZSgnbm9ybWFsJywgbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZShuZXcgRmxvYXQzMkFycmF5KG1lc2hEYXRhLm5vcm1hbCksIDMpKTsKICAgIH0KICAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCk7CiAgICBjb25zdCBtZXNoID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKTsKICAgIG1lc2guc2NhbGUuc2V0KG1lc2hEYXRhLnNjYWxlLngsIG1lc2hEYXRhLnNjYWxlLnksIG1lc2hEYXRhLnNjYWxlLnopOwoKICAgIGNvbnN0IHNhbXBsZXIgPSBuZXcgTWVzaFN1cmZhY2VTYW1wbGVyKG1lc2gpLmJ1aWxkKCk7CiAgICBjb25zdCBkYXRhID0gbmV3IEZsb2F0MzJBcnJheShzaXplICogc2l6ZSAqIDQpOwogICAgY29uc3QgcG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpOwoKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7CiAgICAgICAgY29uc3QgaW5kZXggPSBpICogc2l6ZSArIGo7CiAgICAgICAgc2FtcGxlci5zYW1wbGUocG9zaXRpb24pOwogICAgICAgIGRhdGFbNCAqIGluZGV4XSA9IHBvc2l0aW9uLnggKiBtZXNoRGF0YS5zY2FsZS54OwogICAgICAgIGRhdGFbNCAqIGluZGV4ICsgMV0gPSBwb3NpdGlvbi55ICogbWVzaERhdGEuc2NhbGUueTsKICAgICAgICBkYXRhWzQgKiBpbmRleCArIDJdID0gcG9zaXRpb24ueiAqIG1lc2hEYXRhLnNjYWxlLno7CiAgICAgICAgZGF0YVs0ICogaW5kZXggKyAzXSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDAuMDE7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGF0YTsKICB9LAp9OwoKQ29tbGluay5leHBvc2UoYXBpKTsK","undefined"==typeof document?require("url").pathToFileURL(__filename).href:s&&"SCRIPT"===s.tagName.toUpperCase()&&s.src||new URL("index.cjs.js",document.baseURI).href);return f(new Worker(e,{type:"module"}))},destroy:async e=>e[h]()},Pe=D(function(){if(Me)return we;Me=1;const e=Se(),t=fe(),i=ye(),s=pe();return we={Pool:e,Deque:t,PriorityQueue:i,DefaultEvictor:s,createPool:function(n,r){return new e(s,t,i,n,r)}}}()).createPool(Re,{max:navigator.hardwareConcurrency||4,min:2});function De(e,t){const i=new r.DataTexture(e,t,t,r.RGBAFormat,r.FloatType);return i.needsUpdate=!0,i}function Ee(e,t,i){return e=Math.min(e,i),e=Math.max(e,t)}class Ie{constructor(e,i,s){t(this,"textureSize"),t(this,"meshes"),t(this,"dataTextures"),t(this,"eventEmitter"),this.eventEmitter=e,this.textureSize=i,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}(s),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 Pe.acquire();try{const t=De(await s.sampleMesh(i,this.textureSize),this.textureSize);return t.name=e,t}finally{await Pe.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 Ce{constructor(e){t(this,"size"),t(this,"mesh"),t(this,"matcapMaterial"),t(this,"fallbackMaterial"),t(this,"fallbackGeometry"),t(this,"materials"),t(this,"geometries"),t(this,"uvRefsCache"),t(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 r.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 r.MeshBasicMaterial({color:16777215}),this.fallbackGeometry=new r.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 r.ShaderMaterial||t instanceof r.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 r.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 r.InstancedMesh(t,i,s)}}class Ve{constructor(e,i,s,n){t(this,"raycaster",new r.Raycaster),t(this,"mousePosition",new r.Vector2),t(this,"mouseEntered",!1),t(this,"mousePositionChanged",!1),t(this,"camera"),t(this,"originGeometry"),t(this,"destinationGeometry"),t(this,"progress",0),t(this,"intersectionMesh",new r.Mesh),t(this,"geometryNeedsUpdate"),t(this,"eventEmitter"),t(this,"blendedGeometry"),t(this,"intersection"),t(this,"lastKnownOriginMeshID"),t(this,"lastKnownDestinationMeshID"),this.camera=i,this.originGeometry=s,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 r.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 r.BufferGeometry,n=e.attributes.position.array,o=t.attributes.position.array,a=new Float32Array(n.length);for(let c=0;c<n.length;c+=3){const e=new r.Vector3(n[c],n[c+1],n[c+2]),t=new r.Vector3(o[c],o[c+1],o[c+2]),s=(new r.Vector3).lerpVectors(e,t,i);a[c]=s.x,a[c+1]=s.y,a[c+2]=s.z}return s.setAttribute("position",new r.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 Ge{constructor(e,i){t(this,"matcaps",new Map),t(this,"eventEmitter"),t(this,"fallbackMatcap",new r.DataTexture(new Uint8Array([127,127,127,255]),1,1,r.RGBAFormat)),this.eventEmitter=e,i&&i.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 ze=new i.OrthographicCamera(-1,1,1,-1,0,1);class Oe extends i.BufferGeometry{constructor(){super(),this.setAttribute("position",new i.Float32BufferAttribute([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new i.Float32BufferAttribute([0,2,0,0,2,0],2))}}const Ae=new Oe;class Fe{constructor(e){this._mesh=new i.Mesh(Ae,e)}dispose(){this._mesh.geometry.dispose()}render(e){e.render(this._mesh,ze)}get material(){return this._mesh.material}set material(e){this._mesh.material=e}}class Le{constructor(e,t,s){this.variables=[],this.currentTextureIndex=0;let n=i.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 Fe(o);function c(i){i.defines.resolution="vec2( "+e.toFixed(1)+", "+t.toFixed(1)+" )"}function u(e,t){t=t||{};const s=new i.ShaderMaterial({name:"GPUComputationShader",uniforms:t,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,t,s){const n={name:e,initialValueTexture:s,material:this.createShaderMaterial(t),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:i.NearestFilter,magFilter:i.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 i=0;i<this.variables.length;i++){const s=this.variables[i];s.renderTargets[0]=this.createRenderTarget(e,t,s.wrapS,s.wrapT,s.minFilter,s.magFilter),s.renderTargets[1]=this.createRenderTarget(e,t,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||t,o=o||i.ClampToEdgeWrapping,a=a||i.ClampToEdgeWrapping,c=c||i.NearestFilter,u=u||i.NearestFilter;return new i.WebGLRenderTarget(s,r,{wrapS:o,wrapT:a,minFilter:c,magFilter:u,format:i.RGBAFormat,type:n,depthBuffer:!1})},this.createTexture=function(){const s=new Float32Array(e*t*4),n=new i.DataTexture(s,e,t,i.RGBAFormat,i.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 Ne{constructor(e,i,s){t(this,"gpuComputationRenderer"),t(this,"webGLRenderer"),t(this,"positionDataTexture"),t(this,"velocityDataTexture"),t(this,"mixPositionsVar"),t(this,"velocityVar"),t(this,"positionVar"),t(this,"interactionPosition"),t(this,"lastKnownPositionDataTexture"),t(this,"lastKnownVelocityDataTexture"),t(this,"lastKnownMixProgress"),t(this,"initialDataTexture"),this.initialDataTexture=s??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 De(t,e)}(e),this.positionDataTexture=this.initialDataTexture,this.webGLRenderer=i,this.gpuComputationRenderer=new Le(e,e,this.webGLRenderer),this.lastKnownMixProgress=0,i.capabilities.isWebGL2||this.gpuComputationRenderer.setDataType(r.HalfFloatType),this.velocityDataTexture=function(e){return De(new Float32Array(4*e*e),e)}(e),this.interactionPosition=new r.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=Ee(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 je{constructor(e,i,s){t(this,"state"),t(this,"textureSize"),t(this,"dataTextureTransitionProgress"),t(this,"velocityTractionForce"),t(this,"positionalTractionForce"),t(this,"simulationRenderer"),t(this,"webGLRenderer"),t(this,"eventEmitter"),t(this,"lastKnownVelocityDataTexture"),t(this,"lastKnownPositionDataTexture"),this.eventEmitter=e,this.webGLRenderer=s,this.textureSize=i,this.dataTextureTransitionProgress=0,this.velocityTractionForce=.1,this.positionalTractionForce=.1,this.updateServiceState("initializing"),this.simulationRenderer=new Ne(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 Ne(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 Be{constructor(){t(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 Ue{constructor(e){t(this,"eventEmitter"),t(this,"transitions",new Map),t(this,"execStatus"),t(this,"ongoingTransitions",new Map),this.eventEmitter=e,this.execStatus=new Be,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=Ee(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})}}exports.ParticlesEngine=class{constructor(e){t(this,"simulationRendererService"),t(this,"eventEmitter"),t(this,"renderer"),t(this,"scene"),t(this,"serviceStates"),t(this,"dataTextureManager"),t(this,"matcapService"),t(this,"instancedMeshManager"),t(this,"transitionService"),t(this,"engineState"),t(this,"intersectionService"),this.eventEmitter=new a,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 Ue(this.eventEmitter),this.dataTextureManager=new Ie(this.eventEmitter,e.textureSize,e.meshes),this.matcapService=new Ge(this.eventEmitter,e.matcaps),this.simulationRendererService=new je(this.eventEmitter,e.textureSize,this.renderer),this.instancedMeshManager=new Ce(e.textureSize),this.instancedMeshManager.useMatcapMaterial(),this.scene.add(this.instancedMeshManager.getMesh()),this.intersectionService=new Ve(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=o,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=o,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)}};
7
- //# sourceMappingURL=index.cjs.js.map