@playcanvas/web-components 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/pwc.js CHANGED
@@ -17,11 +17,11 @@
17
17
  }
18
18
  get closestApp() {
19
19
  var _a;
20
- return (_a = this.parentElement) === null || _a === undefined ? undefined : _a.closest('pc-app');
20
+ return (_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.closest('pc-app');
21
21
  }
22
22
  get closestEntity() {
23
23
  var _a;
24
- return (_a = this.parentElement) === null || _a === undefined ? undefined : _a.closest('pc-entity');
24
+ return (_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.closest('pc-entity');
25
25
  }
26
26
  /**
27
27
  * Called when the element is fully initialized and ready.
@@ -103,7 +103,7 @@
103
103
  this._antialias = true;
104
104
  this._depth = true;
105
105
  this._stencil = true;
106
- this._highResolution = false;
106
+ this._highResolution = true;
107
107
  this._hierarchyReady = false;
108
108
  this._picker = null;
109
109
  this._hasPointerListeners = {
@@ -230,15 +230,26 @@
230
230
  pointerup: null
231
231
  };
232
232
  }
233
+ // New helper to convert CSS coordinates to canvas (picker) coordinates
234
+ _getPickerCoordinates(event) {
235
+ // Get the canvas' bounding rectangle in CSS pixels.
236
+ const canvasRect = this._canvas.getBoundingClientRect();
237
+ // Compute scale factors based on canvas actual resolution vs. its CSS display size.
238
+ const scaleX = this._canvas.width / canvasRect.width;
239
+ const scaleY = this._canvas.height / canvasRect.height;
240
+ // Convert the client coordinates accordingly.
241
+ const x = (event.clientX - canvasRect.left) * scaleX;
242
+ const y = (event.clientY - canvasRect.top) * scaleY;
243
+ return { x, y };
244
+ }
233
245
  _onPointerMove(event) {
234
246
  if (!this._picker || !this.app)
235
247
  return;
236
248
  const camera = this.app.root.findComponent('camera');
237
249
  if (!camera)
238
250
  return;
239
- const canvasRect = this._canvas.getBoundingClientRect();
240
- const x = event.clientX - canvasRect.left;
241
- const y = event.clientY - canvasRect.top;
251
+ // Use the helper to convert event coordinates into canvas/picker coordinates.
252
+ const { x, y } = this._getPickerCoordinates(event);
242
253
  this._picker.prepare(camera, this.app.scene);
243
254
  const selection = this._picker.getSelection(x, y);
244
255
  // Get the currently hovered entity by walking up the hierarchy
@@ -276,9 +287,8 @@
276
287
  const camera = this.app.root.findComponent('camera');
277
288
  if (!camera)
278
289
  return;
279
- const canvasRect = this._canvas.getBoundingClientRect();
280
- const x = event.clientX - canvasRect.left;
281
- const y = event.clientY - canvasRect.top;
290
+ // Convert the event's pointer coordinates
291
+ const { x, y } = this._getPickerCoordinates(event);
282
292
  this._picker.prepare(camera, this.app.scene);
283
293
  const selection = this._picker.getSelection(x, y);
284
294
  if (selection.length > 0) {
@@ -299,9 +309,8 @@
299
309
  const camera = this.app.root.findComponent('camera');
300
310
  if (!camera)
301
311
  return;
302
- const canvasRect = this._canvas.getBoundingClientRect();
303
- const x = event.clientX - canvasRect.left;
304
- const y = event.clientY - canvasRect.top;
312
+ // Convert CSS coordinates to picker coordinates
313
+ const { x, y } = this._getPickerCoordinates(event);
305
314
  this._picker.prepare(camera, this.app.scene);
306
315
  const selection = this._picker.getSelection(x, y);
307
316
  if (selection.length > 0) {
@@ -750,7 +759,7 @@
750
759
  if (!this.entity)
751
760
  return;
752
761
  const closestEntity = this.closestEntity;
753
- if (closestEntity === null || closestEntity === undefined ? undefined : closestEntity.entity) {
762
+ if (closestEntity === null || closestEntity === void 0 ? void 0 : closestEntity.entity) {
754
763
  closestEntity.entity.addChild(this.entity);
755
764
  }
756
765
  else {
@@ -972,11 +981,187 @@
972
981
  }
973
982
  hasListeners(type) {
974
983
  var _a;
975
- return Boolean((_a = this._listeners[type]) === null || _a === undefined ? undefined : _a.length);
984
+ return Boolean((_a = this._listeners[type]) === null || _a === void 0 ? void 0 : _a.length);
976
985
  }
977
986
  }
978
987
  customElements.define('pc-entity', EntityElement);
979
988
 
989
+ // This file is part of meshoptimizer library and is distributed under the terms of MIT License.
990
+ // Copyright (C) 2016-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
991
+ var MeshoptDecoder = (function() {
992
+
993
+ // Built with clang version 14.0.4
994
+ // Built from meshoptimizer 0.18
995
+ var wasm_base = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb";
996
+ var wasm_simd = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb";
997
+
998
+ var detector = new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]);
999
+ var wasmpack = new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);
1000
+
1001
+ if (typeof WebAssembly !== 'object') {
1002
+ return {
1003
+ supported: false,
1004
+ };
1005
+ }
1006
+
1007
+ var wasm = WebAssembly.validate(detector) ? wasm_simd : wasm_base;
1008
+
1009
+ var instance;
1010
+
1011
+ var ready =
1012
+ WebAssembly.instantiate(unpack(wasm), {})
1013
+ .then(function(result) {
1014
+ instance = result.instance;
1015
+ instance.exports.__wasm_call_ctors();
1016
+ });
1017
+
1018
+ function unpack(data) {
1019
+ var result = new Uint8Array(data.length);
1020
+ for (var i = 0; i < data.length; ++i) {
1021
+ var ch = data.charCodeAt(i);
1022
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
1023
+ }
1024
+ var write = 0;
1025
+ for (var i = 0; i < data.length; ++i) {
1026
+ result[write++] = (result[i] < 60) ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
1027
+ }
1028
+ return result.buffer.slice(0, write);
1029
+ }
1030
+
1031
+ function decode(fun, target, count, size, source, filter) {
1032
+ var sbrk = instance.exports.sbrk;
1033
+ var count4 = (count + 3) & -4;
1034
+ var tp = sbrk(count4 * size);
1035
+ var sp = sbrk(source.length);
1036
+ var heap = new Uint8Array(instance.exports.memory.buffer);
1037
+ heap.set(source, sp);
1038
+ var res = fun(tp, count, size, sp, source.length);
1039
+ if (res == 0 && filter) {
1040
+ filter(tp, count4, size);
1041
+ }
1042
+ target.set(heap.subarray(tp, tp + count * size));
1043
+ sbrk(tp - sbrk(0));
1044
+ if (res != 0) {
1045
+ throw new Error("Malformed buffer data: " + res);
1046
+ }
1047
+ }
1048
+
1049
+ var filters = {
1050
+ NONE: "",
1051
+ OCTAHEDRAL: "meshopt_decodeFilterOct",
1052
+ QUATERNION: "meshopt_decodeFilterQuat",
1053
+ EXPONENTIAL: "meshopt_decodeFilterExp",
1054
+ };
1055
+
1056
+ var decoders = {
1057
+ ATTRIBUTES: "meshopt_decodeVertexBuffer",
1058
+ TRIANGLES: "meshopt_decodeIndexBuffer",
1059
+ INDICES: "meshopt_decodeIndexSequence",
1060
+ };
1061
+
1062
+ var workers = [];
1063
+ var requestId = 0;
1064
+
1065
+ function createWorker(url) {
1066
+ var worker = {
1067
+ object: new Worker(url),
1068
+ pending: 0,
1069
+ requests: {}
1070
+ };
1071
+
1072
+ worker.object.onmessage = function(event) {
1073
+ var data = event.data;
1074
+
1075
+ worker.pending -= data.count;
1076
+ worker.requests[data.id][data.action](data.value);
1077
+
1078
+ delete worker.requests[data.id];
1079
+ };
1080
+
1081
+ return worker;
1082
+ }
1083
+
1084
+ function initWorkers(count) {
1085
+ var source =
1086
+ "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" +
1087
+ ".then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });" +
1088
+ "self.onmessage = workerProcess;" +
1089
+ decode.toString() + workerProcess.toString();
1090
+
1091
+ var blob = new Blob([source], {type: 'text/javascript'});
1092
+ var url = URL.createObjectURL(blob);
1093
+
1094
+ for (var i = 0; i < count; ++i) {
1095
+ workers[i] = createWorker(url);
1096
+ }
1097
+
1098
+ URL.revokeObjectURL(url);
1099
+ }
1100
+
1101
+ function decodeWorker(count, size, source, mode, filter) {
1102
+ var worker = workers[0];
1103
+
1104
+ for (var i = 1; i < workers.length; ++i) {
1105
+ if (workers[i].pending < worker.pending) {
1106
+ worker = workers[i];
1107
+ }
1108
+ }
1109
+
1110
+ return new Promise(function (resolve, reject) {
1111
+ var data = new Uint8Array(source);
1112
+ var id = requestId++;
1113
+
1114
+ worker.pending += count;
1115
+ worker.requests[id] = { resolve: resolve, reject: reject };
1116
+ worker.object.postMessage({ id: id, count: count, size: size, source: data, mode: mode, filter: filter }, [ data.buffer ]);
1117
+ });
1118
+ }
1119
+
1120
+ function workerProcess(event) {
1121
+ ready.then(function() {
1122
+ var data = event.data;
1123
+ try {
1124
+ var target = new Uint8Array(data.count * data.size);
1125
+ decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);
1126
+ self.postMessage({ id: data.id, count: data.count, action: "resolve", value: target }, [ target.buffer ]);
1127
+ } catch (error) {
1128
+ self.postMessage({ id: data.id, count: data.count, action: "reject", value: error });
1129
+ }
1130
+ });
1131
+ }
1132
+
1133
+ return {
1134
+ ready: ready,
1135
+ supported: true,
1136
+ useWorkers: function(count) {
1137
+ initWorkers(count);
1138
+ },
1139
+ decodeVertexBuffer: function(target, count, size, source, filter) {
1140
+ decode(instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[filters[filter]]);
1141
+ },
1142
+ decodeIndexBuffer: function(target, count, size, source) {
1143
+ decode(instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);
1144
+ },
1145
+ decodeIndexSequence: function(target, count, size, source) {
1146
+ decode(instance.exports.meshopt_decodeIndexSequence, target, count, size, source);
1147
+ },
1148
+ decodeGltfBuffer: function(target, count, size, source, mode, filter) {
1149
+ decode(instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);
1150
+ },
1151
+ decodeGltfBufferAsync: function(count, size, source, mode, filter) {
1152
+ if (workers.length > 0) {
1153
+ return decodeWorker(count, size, source, decoders[mode], filters[filter]);
1154
+ }
1155
+
1156
+ return ready.then(function() {
1157
+ var target = new Uint8Array(count * size);
1158
+ decode(instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);
1159
+ return target;
1160
+ });
1161
+ }
1162
+ };
1163
+ })();
1164
+
980
1165
  const extToType = new Map([
981
1166
  ['bin', 'binary'],
982
1167
  ['css', 'css'],
@@ -996,6 +1181,27 @@
996
1181
  ['vert', 'shader'],
997
1182
  ['webp', 'texture']
998
1183
  ]);
1184
+ // provide buffer view callback so we can handle models compressed with MeshOptimizer
1185
+ // https://github.com/zeux/meshoptimizer
1186
+ const processBufferView = (gltfBuffer, buffers, continuation) => {
1187
+ if (gltfBuffer.extensions && gltfBuffer.extensions.EXT_meshopt_compression) {
1188
+ const extensionDef = gltfBuffer.extensions.EXT_meshopt_compression;
1189
+ Promise.all([MeshoptDecoder.ready, buffers[extensionDef.buffer]]).then((promiseResult) => {
1190
+ const buffer = promiseResult[1];
1191
+ const byteOffset = extensionDef.byteOffset || 0;
1192
+ const byteLength = extensionDef.byteLength || 0;
1193
+ const count = extensionDef.count;
1194
+ const stride = extensionDef.byteStride;
1195
+ const result = new Uint8Array(count * stride);
1196
+ const source = new Uint8Array(buffer.buffer, buffer.byteOffset + byteOffset, byteLength);
1197
+ MeshoptDecoder.decodeGltfBuffer(result, count, stride, source, extensionDef.mode, extensionDef.filter);
1198
+ continuation(null, result);
1199
+ });
1200
+ }
1201
+ else {
1202
+ continuation(null, null);
1203
+ }
1204
+ };
999
1205
  /**
1000
1206
  * The AssetElement interface provides properties and methods for manipulating
1001
1207
  * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-asset/ | `<pc-asset>`} elements.
@@ -1022,13 +1228,23 @@
1022
1228
  // If no type is specified, try to infer it from the file extension.
1023
1229
  if (!type) {
1024
1230
  const ext = src.split('.').pop();
1025
- type = (_a = extToType.get(ext || '')) !== null && _a !== undefined ? _a : null;
1231
+ type = (_a = extToType.get(ext || '')) !== null && _a !== void 0 ? _a : null;
1026
1232
  }
1027
1233
  if (!type) {
1028
1234
  console.warn(`Unsupported asset type: ${src}`);
1029
1235
  return;
1030
1236
  }
1031
- this.asset = new playcanvas.Asset(id, type, { url: src });
1237
+ if (type === 'container') {
1238
+ this.asset = new playcanvas.Asset(id, type, { url: src }, undefined, {
1239
+ // @ts-ignore TODO no definition in pc
1240
+ bufferView: {
1241
+ processAsync: processBufferView.bind(this)
1242
+ }
1243
+ });
1244
+ }
1245
+ else {
1246
+ this.asset = new playcanvas.Asset(id, type, { url: src });
1247
+ }
1032
1248
  this.asset.preload = !this._lazy;
1033
1249
  }
1034
1250
  destroyAsset() {
@@ -1056,7 +1272,7 @@
1056
1272
  }
1057
1273
  static get(id) {
1058
1274
  const assetElement = document.querySelector(`pc-asset[id="${id}"]`);
1059
- return assetElement === null || assetElement === undefined ? undefined : assetElement.asset;
1275
+ return assetElement === null || assetElement === void 0 ? void 0 : assetElement.asset;
1060
1276
  }
1061
1277
  static get observedAttributes() {
1062
1278
  return ['lazy'];
@@ -1103,7 +1319,7 @@
1103
1319
  initComponent() { }
1104
1320
  async connectedCallback() {
1105
1321
  var _a;
1106
- await ((_a = this.closestApp) === null || _a === undefined ? undefined : _a.ready());
1322
+ await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
1107
1323
  await this.addComponent();
1108
1324
  this.initComponent();
1109
1325
  this._onReady();
@@ -1234,7 +1450,7 @@
1234
1450
  }
1235
1451
  get xrAvailable() {
1236
1452
  var _a;
1237
- const xrManager = (_a = this.component) === null || _a === undefined ? undefined : _a.system.app.xr;
1453
+ const xrManager = (_a = this.component) === null || _a === void 0 ? void 0 : _a.system.app.xr;
1238
1454
  return xrManager && xrManager.supported && xrManager.isAvailable(playcanvas.XRTYPE_VR);
1239
1455
  }
1240
1456
  /**
@@ -1565,7 +1781,7 @@
1565
1781
  var _a;
1566
1782
  this._tonemap = value;
1567
1783
  if (this.component) {
1568
- this.component.toneMapping = (_a = tonemaps.get(value)) !== null && _a !== undefined ? _a : playcanvas.TONEMAP_NONE;
1784
+ this.component.toneMapping = (_a = tonemaps.get(value)) !== null && _a !== void 0 ? _a : playcanvas.TONEMAP_NONE;
1569
1785
  }
1570
1786
  }
1571
1787
  /**
@@ -2101,64 +2317,6 @@
2101
2317
  }
2102
2318
  customElements.define('pc-element', ElementComponentElement);
2103
2319
 
2104
- /**
2105
- * The SplatComponentElement interface provides properties and methods for manipulating
2106
- * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-splat/ | `<pc-splat>`} elements.
2107
- * The SplatComponentElement interface also inherits the properties and methods of the
2108
- * {@link HTMLElement} interface.
2109
- *
2110
- * @category Components
2111
- */
2112
- class SplatComponentElement extends ComponentElement {
2113
- /** @ignore */
2114
- constructor() {
2115
- super('gsplat');
2116
- this._asset = '';
2117
- }
2118
- getInitialComponentData() {
2119
- return {
2120
- asset: AssetElement.get(this._asset)
2121
- };
2122
- }
2123
- /**
2124
- * Gets the underlying PlayCanvas splat component.
2125
- * @returns The splat component.
2126
- */
2127
- get component() {
2128
- return super.component;
2129
- }
2130
- /**
2131
- * Sets id of the `pc-asset` to use for the splat.
2132
- * @param value - The asset ID.
2133
- */
2134
- set asset(value) {
2135
- this._asset = value;
2136
- const asset = AssetElement.get(value);
2137
- if (this.component && asset) {
2138
- this.component.asset = asset;
2139
- }
2140
- }
2141
- /**
2142
- * Gets the id of the `pc-asset` to use for the splat.
2143
- * @returns The asset ID.
2144
- */
2145
- get asset() {
2146
- return this._asset;
2147
- }
2148
- static get observedAttributes() {
2149
- return [...super.observedAttributes, 'asset'];
2150
- }
2151
- attributeChangedCallback(name, _oldValue, newValue) {
2152
- super.attributeChangedCallback(name, _oldValue, newValue);
2153
- switch (name) {
2154
- case 'asset':
2155
- this.asset = newValue;
2156
- break;
2157
- }
2158
- }
2159
- }
2160
- customElements.define('pc-splat', SplatComponentElement);
2161
-
2162
2320
  const shadowTypes = new Map([
2163
2321
  ['pcf1-16f', playcanvas.SHADOW_PCF1_16F],
2164
2322
  ['pcf1-32f', playcanvas.SHADOW_PCF1_32F],
@@ -2427,7 +2585,7 @@
2427
2585
  var _a;
2428
2586
  this._shadowType = value;
2429
2587
  if (this.component) {
2430
- this.component.shadowType = (_a = shadowTypes.get(value)) !== null && _a !== undefined ? _a : playcanvas.SHADOW_PCF3_32F;
2588
+ this.component.shadowType = (_a = shadowTypes.get(value)) !== null && _a !== void 0 ? _a : playcanvas.SHADOW_PCF3_32F;
2431
2589
  }
2432
2590
  }
2433
2591
  /**
@@ -2544,6 +2702,138 @@
2544
2702
  }
2545
2703
  customElements.define('pc-light', LightComponentElement);
2546
2704
 
2705
+ /**
2706
+ * The ParticleSystemComponentElement interface provides properties and methods for manipulating
2707
+ * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-particles/ | `<pc-particles>`} elements.
2708
+ * The ParticleSystemComponentElement interface also inherits the properties and methods of the
2709
+ * {@link HTMLElement} interface.
2710
+ *
2711
+ * @category Components
2712
+ */
2713
+ class ParticleSystemComponentElement extends ComponentElement {
2714
+ /** @ignore */
2715
+ constructor() {
2716
+ super('particlesystem');
2717
+ this._asset = '';
2718
+ }
2719
+ getInitialComponentData() {
2720
+ var _a;
2721
+ const asset = AssetElement.get(this._asset);
2722
+ if (!asset) {
2723
+ return {};
2724
+ }
2725
+ if (asset.resource.colorMapAsset) {
2726
+ const id = asset.resource.colorMapAsset;
2727
+ const colorMapAsset = (_a = AssetElement.get(id)) === null || _a === void 0 ? void 0 : _a.id;
2728
+ if (colorMapAsset) {
2729
+ asset.resource.colorMapAsset = colorMapAsset;
2730
+ }
2731
+ }
2732
+ return asset.resource;
2733
+ }
2734
+ /**
2735
+ * Gets the underlying PlayCanvas particle system component.
2736
+ * @returns The particle system component.
2737
+ */
2738
+ get component() {
2739
+ return super.component;
2740
+ }
2741
+ applyConfig(resource) {
2742
+ if (!this.component) {
2743
+ return;
2744
+ }
2745
+ // Set all the config properties on the component
2746
+ for (const key in resource) {
2747
+ if (resource.hasOwnProperty(key)) {
2748
+ this.component[key] = resource[key];
2749
+ }
2750
+ }
2751
+ }
2752
+ async _loadAsset() {
2753
+ var _a;
2754
+ const appElement = await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
2755
+ const app = appElement === null || appElement === void 0 ? void 0 : appElement.app;
2756
+ const asset = AssetElement.get(this._asset);
2757
+ if (!asset) {
2758
+ return;
2759
+ }
2760
+ if (asset.loaded) {
2761
+ this.applyConfig(asset.resource);
2762
+ }
2763
+ else {
2764
+ asset.once('load', () => {
2765
+ this.applyConfig(asset.resource);
2766
+ });
2767
+ app.assets.load(asset);
2768
+ }
2769
+ }
2770
+ /**
2771
+ * Sets the id of the `pc-asset` to use for the model.
2772
+ * @param value - The asset ID.
2773
+ */
2774
+ set asset(value) {
2775
+ this._asset = value;
2776
+ if (this.isConnected) {
2777
+ this._loadAsset();
2778
+ }
2779
+ }
2780
+ /**
2781
+ * Gets the id of the `pc-asset` to use for the model.
2782
+ * @returns The asset ID.
2783
+ */
2784
+ get asset() {
2785
+ return this._asset;
2786
+ }
2787
+ // Control methods
2788
+ /**
2789
+ * Starts playing the particle system
2790
+ */
2791
+ play() {
2792
+ if (this.component) {
2793
+ this.component.play();
2794
+ }
2795
+ }
2796
+ /**
2797
+ * Pauses the particle system
2798
+ */
2799
+ pause() {
2800
+ if (this.component) {
2801
+ this.component.pause();
2802
+ }
2803
+ }
2804
+ /**
2805
+ * Resets the particle system
2806
+ */
2807
+ reset() {
2808
+ if (this.component) {
2809
+ this.component.reset();
2810
+ }
2811
+ }
2812
+ /**
2813
+ * Stops the particle system
2814
+ */
2815
+ stop() {
2816
+ if (this.component) {
2817
+ this.component.stop();
2818
+ }
2819
+ }
2820
+ static get observedAttributes() {
2821
+ return [
2822
+ ...super.observedAttributes,
2823
+ 'asset'
2824
+ ];
2825
+ }
2826
+ attributeChangedCallback(name, _oldValue, newValue) {
2827
+ super.attributeChangedCallback(name, _oldValue, newValue);
2828
+ switch (name) {
2829
+ case 'asset':
2830
+ this.asset = newValue;
2831
+ break;
2832
+ }
2833
+ }
2834
+ }
2835
+ customElements.define('pc-particles', ParticleSystemComponentElement);
2836
+
2547
2837
  /**
2548
2838
  * The MaterialElement interface provides properties and methods for manipulating
2549
2839
  * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-material/ | `<pc-material>`} elements.
@@ -2634,7 +2924,7 @@
2634
2924
  }
2635
2925
  static get(id) {
2636
2926
  const materialElement = document.querySelector(`pc-material[id="${id}"]`);
2637
- return materialElement === null || materialElement === undefined ? undefined : materialElement.material;
2927
+ return materialElement === null || materialElement === void 0 ? void 0 : materialElement.material;
2638
2928
  }
2639
2929
  static get observedAttributes() {
2640
2930
  return ['diffuse', 'diffuse-map', 'metalness-map', 'normal-map', 'roughness-map'];
@@ -3314,7 +3604,7 @@
3314
3604
  disconnectedCallback() {
3315
3605
  var _a;
3316
3606
  this.observer.disconnect();
3317
- (_a = super.disconnectedCallback) === null || _a === undefined ? undefined : _a.call(this);
3607
+ (_a = super.disconnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
3318
3608
  }
3319
3609
  /**
3320
3610
  * Gets the underlying PlayCanvas script component.
@@ -3629,7 +3919,7 @@
3629
3919
  }
3630
3920
  async connectedCallback() {
3631
3921
  var _a;
3632
- await ((_a = this.soundElement) === null || _a === undefined ? undefined : _a.ready());
3922
+ await ((_a = this.soundElement) === null || _a === void 0 ? void 0 : _a.ready());
3633
3923
  const options = {
3634
3924
  autoPlay: this._autoPlay,
3635
3925
  loop: this._loop,
@@ -3665,7 +3955,7 @@
3665
3955
  var _a;
3666
3956
  this._asset = value;
3667
3957
  if (this.soundSlot) {
3668
- const id = (_a = AssetElement.get(value)) === null || _a === undefined ? undefined : _a.id;
3958
+ const id = (_a = AssetElement.get(value)) === null || _a === void 0 ? void 0 : _a.id;
3669
3959
  if (id) {
3670
3960
  this.soundSlot.asset = id;
3671
3961
  }
@@ -3848,6 +4138,64 @@
3848
4138
  }
3849
4139
  customElements.define('pc-sound', SoundSlotElement);
3850
4140
 
4141
+ /**
4142
+ * The SplatComponentElement interface provides properties and methods for manipulating
4143
+ * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-splat/ | `<pc-splat>`} elements.
4144
+ * The SplatComponentElement interface also inherits the properties and methods of the
4145
+ * {@link HTMLElement} interface.
4146
+ *
4147
+ * @category Components
4148
+ */
4149
+ class SplatComponentElement extends ComponentElement {
4150
+ /** @ignore */
4151
+ constructor() {
4152
+ super('gsplat');
4153
+ this._asset = '';
4154
+ }
4155
+ getInitialComponentData() {
4156
+ return {
4157
+ asset: AssetElement.get(this._asset)
4158
+ };
4159
+ }
4160
+ /**
4161
+ * Gets the underlying PlayCanvas splat component.
4162
+ * @returns The splat component.
4163
+ */
4164
+ get component() {
4165
+ return super.component;
4166
+ }
4167
+ /**
4168
+ * Sets id of the `pc-asset` to use for the splat.
4169
+ * @param value - The asset ID.
4170
+ */
4171
+ set asset(value) {
4172
+ this._asset = value;
4173
+ const asset = AssetElement.get(value);
4174
+ if (this.component && asset) {
4175
+ this.component.asset = asset;
4176
+ }
4177
+ }
4178
+ /**
4179
+ * Gets the id of the `pc-asset` to use for the splat.
4180
+ * @returns The asset ID.
4181
+ */
4182
+ get asset() {
4183
+ return this._asset;
4184
+ }
4185
+ static get observedAttributes() {
4186
+ return [...super.observedAttributes, 'asset'];
4187
+ }
4188
+ attributeChangedCallback(name, _oldValue, newValue) {
4189
+ super.attributeChangedCallback(name, _oldValue, newValue);
4190
+ switch (name) {
4191
+ case 'asset':
4192
+ this.asset = newValue;
4193
+ break;
4194
+ }
4195
+ }
4196
+ }
4197
+ customElements.define('pc-splat', SplatComponentElement);
4198
+
3851
4199
  /**
3852
4200
  * The ModelElement interface provides properties and methods for manipulating
3853
4201
  * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-model/ | `<pc-model>`} elements.
@@ -3893,8 +4241,8 @@
3893
4241
  async _loadModel() {
3894
4242
  var _a;
3895
4243
  this._unloadModel();
3896
- const appElement = await ((_a = this.closestApp) === null || _a === undefined ? undefined : _a.ready());
3897
- const app = appElement === null || appElement === undefined ? undefined : appElement.app;
4244
+ const appElement = await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
4245
+ const app = appElement === null || appElement === void 0 ? void 0 : appElement.app;
3898
4246
  const asset = AssetElement.get(this._asset);
3899
4247
  if (!asset) {
3900
4248
  return;
@@ -3911,7 +4259,7 @@
3911
4259
  }
3912
4260
  _unloadModel() {
3913
4261
  var _a;
3914
- (_a = this._entity) === null || _a === undefined ? undefined : _a.destroy();
4262
+ (_a = this._entity) === null || _a === void 0 ? void 0 : _a.destroy();
3915
4263
  this._entity = null;
3916
4264
  }
3917
4265
  /**
@@ -3973,6 +4321,10 @@
3973
4321
  * The end distance of the fog.
3974
4322
  */
3975
4323
  this._fogEnd = 1000;
4324
+ /**
4325
+ * The gravity of the scene.
4326
+ */
4327
+ this._gravity = new playcanvas.Vec3(0, -9.81, 0);
3976
4328
  /**
3977
4329
  * The PlayCanvas scene instance.
3978
4330
  */
@@ -3980,7 +4332,7 @@
3980
4332
  }
3981
4333
  async connectedCallback() {
3982
4334
  var _a;
3983
- await ((_a = this.closestApp) === null || _a === undefined ? undefined : _a.ready());
4335
+ await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
3984
4336
  this.scene = this.closestApp.app.scene;
3985
4337
  this.updateSceneSettings();
3986
4338
  this._onReady();
@@ -3992,7 +4344,8 @@
3992
4344
  this.scene.fog.density = this._fogDensity;
3993
4345
  this.scene.fog.start = this._fogStart;
3994
4346
  this.scene.fog.end = this._fogEnd;
3995
- // ... set other properties on the scene as well
4347
+ const appElement = this.parentElement;
4348
+ appElement.app.systems.rigidbody.gravity.copy(this._gravity);
3996
4349
  }
3997
4350
  }
3998
4351
  /**
@@ -4080,8 +4433,26 @@
4080
4433
  get fogEnd() {
4081
4434
  return this._fogEnd;
4082
4435
  }
4436
+ /**
4437
+ * Sets the gravity of the scene.
4438
+ * @param value - The gravity.
4439
+ */
4440
+ set gravity(value) {
4441
+ this._gravity = value;
4442
+ if (this.scene) {
4443
+ const appElement = this.parentElement;
4444
+ appElement.app.systems.rigidbody.gravity.copy(value);
4445
+ }
4446
+ }
4447
+ /**
4448
+ * Gets the gravity of the scene.
4449
+ * @returns The gravity.
4450
+ */
4451
+ get gravity() {
4452
+ return this._gravity;
4453
+ }
4083
4454
  static get observedAttributes() {
4084
- return ['fog', 'fog-color', 'fog-density', 'fog-start', 'fog-end'];
4455
+ return ['fog', 'fog-color', 'fog-density', 'fog-start', 'fog-end', 'gravity'];
4085
4456
  }
4086
4457
  attributeChangedCallback(name, _oldValue, newValue) {
4087
4458
  switch (name) {
@@ -4100,6 +4471,9 @@
4100
4471
  case 'fog-end':
4101
4472
  this.fogEnd = parseFloat(newValue);
4102
4473
  break;
4474
+ case 'gravity':
4475
+ this.gravity = parseVec3(newValue);
4476
+ break;
4103
4477
  // ... handle other attributes as well
4104
4478
  }
4105
4479
  }
@@ -4154,8 +4528,8 @@
4154
4528
  }
4155
4529
  async _loadSkybox() {
4156
4530
  var _a;
4157
- const appElement = await ((_a = this.closestApp) === null || _a === undefined ? undefined : _a.ready());
4158
- const app = appElement === null || appElement === undefined ? undefined : appElement.app;
4531
+ const appElement = await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
4532
+ const app = appElement === null || appElement === void 0 ? void 0 : appElement.app;
4159
4533
  if (!app) {
4160
4534
  return;
4161
4535
  }
@@ -4178,10 +4552,10 @@
4178
4552
  var _a, _b;
4179
4553
  if (!this._scene)
4180
4554
  return;
4181
- (_a = this._scene.skybox) === null || _a === undefined ? undefined : _a.destroy();
4555
+ (_a = this._scene.skybox) === null || _a === void 0 ? void 0 : _a.destroy();
4182
4556
  // @ts-ignore
4183
4557
  this._scene.skybox = null;
4184
- (_b = this._scene.envAtlas) === null || _b === undefined ? undefined : _b.destroy();
4558
+ (_b = this._scene.envAtlas) === null || _b === void 0 ? void 0 : _b.destroy();
4185
4559
  // @ts-ignore
4186
4560
  this._scene.envAtlas = null;
4187
4561
  this._scene = null;
@@ -4370,6 +4744,7 @@
4370
4744
  exports.MaterialElement = MaterialElement;
4371
4745
  exports.ModelElement = ModelElement;
4372
4746
  exports.ModuleElement = ModuleElement;
4747
+ exports.ParticleSystemComponentElement = ParticleSystemComponentElement;
4373
4748
  exports.RenderComponentElement = RenderComponentElement;
4374
4749
  exports.RigidBodyComponentElement = RigidBodyComponentElement;
4375
4750
  exports.SceneElement = SceneElement;