@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.cjs CHANGED
@@ -15,11 +15,11 @@ class AsyncElement extends HTMLElement {
15
15
  }
16
16
  get closestApp() {
17
17
  var _a;
18
- return (_a = this.parentElement) === null || _a === undefined ? undefined : _a.closest('pc-app');
18
+ return (_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.closest('pc-app');
19
19
  }
20
20
  get closestEntity() {
21
21
  var _a;
22
- return (_a = this.parentElement) === null || _a === undefined ? undefined : _a.closest('pc-entity');
22
+ return (_a = this.parentElement) === null || _a === void 0 ? void 0 : _a.closest('pc-entity');
23
23
  }
24
24
  /**
25
25
  * Called when the element is fully initialized and ready.
@@ -101,7 +101,7 @@ class AppElement extends AsyncElement {
101
101
  this._antialias = true;
102
102
  this._depth = true;
103
103
  this._stencil = true;
104
- this._highResolution = false;
104
+ this._highResolution = true;
105
105
  this._hierarchyReady = false;
106
106
  this._picker = null;
107
107
  this._hasPointerListeners = {
@@ -228,15 +228,26 @@ class AppElement extends AsyncElement {
228
228
  pointerup: null
229
229
  };
230
230
  }
231
+ // New helper to convert CSS coordinates to canvas (picker) coordinates
232
+ _getPickerCoordinates(event) {
233
+ // Get the canvas' bounding rectangle in CSS pixels.
234
+ const canvasRect = this._canvas.getBoundingClientRect();
235
+ // Compute scale factors based on canvas actual resolution vs. its CSS display size.
236
+ const scaleX = this._canvas.width / canvasRect.width;
237
+ const scaleY = this._canvas.height / canvasRect.height;
238
+ // Convert the client coordinates accordingly.
239
+ const x = (event.clientX - canvasRect.left) * scaleX;
240
+ const y = (event.clientY - canvasRect.top) * scaleY;
241
+ return { x, y };
242
+ }
231
243
  _onPointerMove(event) {
232
244
  if (!this._picker || !this.app)
233
245
  return;
234
246
  const camera = this.app.root.findComponent('camera');
235
247
  if (!camera)
236
248
  return;
237
- const canvasRect = this._canvas.getBoundingClientRect();
238
- const x = event.clientX - canvasRect.left;
239
- const y = event.clientY - canvasRect.top;
249
+ // Use the helper to convert event coordinates into canvas/picker coordinates.
250
+ const { x, y } = this._getPickerCoordinates(event);
240
251
  this._picker.prepare(camera, this.app.scene);
241
252
  const selection = this._picker.getSelection(x, y);
242
253
  // Get the currently hovered entity by walking up the hierarchy
@@ -274,9 +285,8 @@ class AppElement extends AsyncElement {
274
285
  const camera = this.app.root.findComponent('camera');
275
286
  if (!camera)
276
287
  return;
277
- const canvasRect = this._canvas.getBoundingClientRect();
278
- const x = event.clientX - canvasRect.left;
279
- const y = event.clientY - canvasRect.top;
288
+ // Convert the event's pointer coordinates
289
+ const { x, y } = this._getPickerCoordinates(event);
280
290
  this._picker.prepare(camera, this.app.scene);
281
291
  const selection = this._picker.getSelection(x, y);
282
292
  if (selection.length > 0) {
@@ -297,9 +307,8 @@ class AppElement extends AsyncElement {
297
307
  const camera = this.app.root.findComponent('camera');
298
308
  if (!camera)
299
309
  return;
300
- const canvasRect = this._canvas.getBoundingClientRect();
301
- const x = event.clientX - canvasRect.left;
302
- const y = event.clientY - canvasRect.top;
310
+ // Convert CSS coordinates to picker coordinates
311
+ const { x, y } = this._getPickerCoordinates(event);
303
312
  this._picker.prepare(camera, this.app.scene);
304
313
  const selection = this._picker.getSelection(x, y);
305
314
  if (selection.length > 0) {
@@ -748,7 +757,7 @@ class EntityElement extends AsyncElement {
748
757
  if (!this.entity)
749
758
  return;
750
759
  const closestEntity = this.closestEntity;
751
- if (closestEntity === null || closestEntity === undefined ? undefined : closestEntity.entity) {
760
+ if (closestEntity === null || closestEntity === void 0 ? void 0 : closestEntity.entity) {
752
761
  closestEntity.entity.addChild(this.entity);
753
762
  }
754
763
  else {
@@ -970,11 +979,187 @@ class EntityElement extends AsyncElement {
970
979
  }
971
980
  hasListeners(type) {
972
981
  var _a;
973
- return Boolean((_a = this._listeners[type]) === null || _a === undefined ? undefined : _a.length);
982
+ return Boolean((_a = this._listeners[type]) === null || _a === void 0 ? void 0 : _a.length);
974
983
  }
975
984
  }
976
985
  customElements.define('pc-entity', EntityElement);
977
986
 
987
+ // This file is part of meshoptimizer library and is distributed under the terms of MIT License.
988
+ // Copyright (C) 2016-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
989
+ var MeshoptDecoder = (function() {
990
+
991
+ // Built with clang version 14.0.4
992
+ // Built from meshoptimizer 0.18
993
+ 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";
994
+ 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";
995
+
996
+ 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]);
997
+ 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]);
998
+
999
+ if (typeof WebAssembly !== 'object') {
1000
+ return {
1001
+ supported: false,
1002
+ };
1003
+ }
1004
+
1005
+ var wasm = WebAssembly.validate(detector) ? wasm_simd : wasm_base;
1006
+
1007
+ var instance;
1008
+
1009
+ var ready =
1010
+ WebAssembly.instantiate(unpack(wasm), {})
1011
+ .then(function(result) {
1012
+ instance = result.instance;
1013
+ instance.exports.__wasm_call_ctors();
1014
+ });
1015
+
1016
+ function unpack(data) {
1017
+ var result = new Uint8Array(data.length);
1018
+ for (var i = 0; i < data.length; ++i) {
1019
+ var ch = data.charCodeAt(i);
1020
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
1021
+ }
1022
+ var write = 0;
1023
+ for (var i = 0; i < data.length; ++i) {
1024
+ result[write++] = (result[i] < 60) ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
1025
+ }
1026
+ return result.buffer.slice(0, write);
1027
+ }
1028
+
1029
+ function decode(fun, target, count, size, source, filter) {
1030
+ var sbrk = instance.exports.sbrk;
1031
+ var count4 = (count + 3) & -4;
1032
+ var tp = sbrk(count4 * size);
1033
+ var sp = sbrk(source.length);
1034
+ var heap = new Uint8Array(instance.exports.memory.buffer);
1035
+ heap.set(source, sp);
1036
+ var res = fun(tp, count, size, sp, source.length);
1037
+ if (res == 0 && filter) {
1038
+ filter(tp, count4, size);
1039
+ }
1040
+ target.set(heap.subarray(tp, tp + count * size));
1041
+ sbrk(tp - sbrk(0));
1042
+ if (res != 0) {
1043
+ throw new Error("Malformed buffer data: " + res);
1044
+ }
1045
+ }
1046
+
1047
+ var filters = {
1048
+ NONE: "",
1049
+ OCTAHEDRAL: "meshopt_decodeFilterOct",
1050
+ QUATERNION: "meshopt_decodeFilterQuat",
1051
+ EXPONENTIAL: "meshopt_decodeFilterExp",
1052
+ };
1053
+
1054
+ var decoders = {
1055
+ ATTRIBUTES: "meshopt_decodeVertexBuffer",
1056
+ TRIANGLES: "meshopt_decodeIndexBuffer",
1057
+ INDICES: "meshopt_decodeIndexSequence",
1058
+ };
1059
+
1060
+ var workers = [];
1061
+ var requestId = 0;
1062
+
1063
+ function createWorker(url) {
1064
+ var worker = {
1065
+ object: new Worker(url),
1066
+ pending: 0,
1067
+ requests: {}
1068
+ };
1069
+
1070
+ worker.object.onmessage = function(event) {
1071
+ var data = event.data;
1072
+
1073
+ worker.pending -= data.count;
1074
+ worker.requests[data.id][data.action](data.value);
1075
+
1076
+ delete worker.requests[data.id];
1077
+ };
1078
+
1079
+ return worker;
1080
+ }
1081
+
1082
+ function initWorkers(count) {
1083
+ var source =
1084
+ "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(unpack(wasm)) + "]), {})" +
1085
+ ".then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });" +
1086
+ "self.onmessage = workerProcess;" +
1087
+ decode.toString() + workerProcess.toString();
1088
+
1089
+ var blob = new Blob([source], {type: 'text/javascript'});
1090
+ var url = URL.createObjectURL(blob);
1091
+
1092
+ for (var i = 0; i < count; ++i) {
1093
+ workers[i] = createWorker(url);
1094
+ }
1095
+
1096
+ URL.revokeObjectURL(url);
1097
+ }
1098
+
1099
+ function decodeWorker(count, size, source, mode, filter) {
1100
+ var worker = workers[0];
1101
+
1102
+ for (var i = 1; i < workers.length; ++i) {
1103
+ if (workers[i].pending < worker.pending) {
1104
+ worker = workers[i];
1105
+ }
1106
+ }
1107
+
1108
+ return new Promise(function (resolve, reject) {
1109
+ var data = new Uint8Array(source);
1110
+ var id = requestId++;
1111
+
1112
+ worker.pending += count;
1113
+ worker.requests[id] = { resolve: resolve, reject: reject };
1114
+ worker.object.postMessage({ id: id, count: count, size: size, source: data, mode: mode, filter: filter }, [ data.buffer ]);
1115
+ });
1116
+ }
1117
+
1118
+ function workerProcess(event) {
1119
+ ready.then(function() {
1120
+ var data = event.data;
1121
+ try {
1122
+ var target = new Uint8Array(data.count * data.size);
1123
+ decode(instance.exports[data.mode], target, data.count, data.size, data.source, instance.exports[data.filter]);
1124
+ self.postMessage({ id: data.id, count: data.count, action: "resolve", value: target }, [ target.buffer ]);
1125
+ } catch (error) {
1126
+ self.postMessage({ id: data.id, count: data.count, action: "reject", value: error });
1127
+ }
1128
+ });
1129
+ }
1130
+
1131
+ return {
1132
+ ready: ready,
1133
+ supported: true,
1134
+ useWorkers: function(count) {
1135
+ initWorkers(count);
1136
+ },
1137
+ decodeVertexBuffer: function(target, count, size, source, filter) {
1138
+ decode(instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[filters[filter]]);
1139
+ },
1140
+ decodeIndexBuffer: function(target, count, size, source) {
1141
+ decode(instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);
1142
+ },
1143
+ decodeIndexSequence: function(target, count, size, source) {
1144
+ decode(instance.exports.meshopt_decodeIndexSequence, target, count, size, source);
1145
+ },
1146
+ decodeGltfBuffer: function(target, count, size, source, mode, filter) {
1147
+ decode(instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);
1148
+ },
1149
+ decodeGltfBufferAsync: function(count, size, source, mode, filter) {
1150
+ if (workers.length > 0) {
1151
+ return decodeWorker(count, size, source, decoders[mode], filters[filter]);
1152
+ }
1153
+
1154
+ return ready.then(function() {
1155
+ var target = new Uint8Array(count * size);
1156
+ decode(instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]);
1157
+ return target;
1158
+ });
1159
+ }
1160
+ };
1161
+ })();
1162
+
978
1163
  const extToType = new Map([
979
1164
  ['bin', 'binary'],
980
1165
  ['css', 'css'],
@@ -994,6 +1179,27 @@ const extToType = new Map([
994
1179
  ['vert', 'shader'],
995
1180
  ['webp', 'texture']
996
1181
  ]);
1182
+ // provide buffer view callback so we can handle models compressed with MeshOptimizer
1183
+ // https://github.com/zeux/meshoptimizer
1184
+ const processBufferView = (gltfBuffer, buffers, continuation) => {
1185
+ if (gltfBuffer.extensions && gltfBuffer.extensions.EXT_meshopt_compression) {
1186
+ const extensionDef = gltfBuffer.extensions.EXT_meshopt_compression;
1187
+ Promise.all([MeshoptDecoder.ready, buffers[extensionDef.buffer]]).then((promiseResult) => {
1188
+ const buffer = promiseResult[1];
1189
+ const byteOffset = extensionDef.byteOffset || 0;
1190
+ const byteLength = extensionDef.byteLength || 0;
1191
+ const count = extensionDef.count;
1192
+ const stride = extensionDef.byteStride;
1193
+ const result = new Uint8Array(count * stride);
1194
+ const source = new Uint8Array(buffer.buffer, buffer.byteOffset + byteOffset, byteLength);
1195
+ MeshoptDecoder.decodeGltfBuffer(result, count, stride, source, extensionDef.mode, extensionDef.filter);
1196
+ continuation(null, result);
1197
+ });
1198
+ }
1199
+ else {
1200
+ continuation(null, null);
1201
+ }
1202
+ };
997
1203
  /**
998
1204
  * The AssetElement interface provides properties and methods for manipulating
999
1205
  * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-asset/ | `<pc-asset>`} elements.
@@ -1020,13 +1226,23 @@ class AssetElement extends HTMLElement {
1020
1226
  // If no type is specified, try to infer it from the file extension.
1021
1227
  if (!type) {
1022
1228
  const ext = src.split('.').pop();
1023
- type = (_a = extToType.get(ext || '')) !== null && _a !== undefined ? _a : null;
1229
+ type = (_a = extToType.get(ext || '')) !== null && _a !== void 0 ? _a : null;
1024
1230
  }
1025
1231
  if (!type) {
1026
1232
  console.warn(`Unsupported asset type: ${src}`);
1027
1233
  return;
1028
1234
  }
1029
- this.asset = new playcanvas.Asset(id, type, { url: src });
1235
+ if (type === 'container') {
1236
+ this.asset = new playcanvas.Asset(id, type, { url: src }, undefined, {
1237
+ // @ts-ignore TODO no definition in pc
1238
+ bufferView: {
1239
+ processAsync: processBufferView.bind(this)
1240
+ }
1241
+ });
1242
+ }
1243
+ else {
1244
+ this.asset = new playcanvas.Asset(id, type, { url: src });
1245
+ }
1030
1246
  this.asset.preload = !this._lazy;
1031
1247
  }
1032
1248
  destroyAsset() {
@@ -1054,7 +1270,7 @@ class AssetElement extends HTMLElement {
1054
1270
  }
1055
1271
  static get(id) {
1056
1272
  const assetElement = document.querySelector(`pc-asset[id="${id}"]`);
1057
- return assetElement === null || assetElement === undefined ? undefined : assetElement.asset;
1273
+ return assetElement === null || assetElement === void 0 ? void 0 : assetElement.asset;
1058
1274
  }
1059
1275
  static get observedAttributes() {
1060
1276
  return ['lazy'];
@@ -1101,7 +1317,7 @@ class ComponentElement extends AsyncElement {
1101
1317
  initComponent() { }
1102
1318
  async connectedCallback() {
1103
1319
  var _a;
1104
- await ((_a = this.closestApp) === null || _a === undefined ? undefined : _a.ready());
1320
+ await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
1105
1321
  await this.addComponent();
1106
1322
  this.initComponent();
1107
1323
  this._onReady();
@@ -1232,7 +1448,7 @@ class CameraComponentElement extends ComponentElement {
1232
1448
  }
1233
1449
  get xrAvailable() {
1234
1450
  var _a;
1235
- const xrManager = (_a = this.component) === null || _a === undefined ? undefined : _a.system.app.xr;
1451
+ const xrManager = (_a = this.component) === null || _a === void 0 ? void 0 : _a.system.app.xr;
1236
1452
  return xrManager && xrManager.supported && xrManager.isAvailable(playcanvas.XRTYPE_VR);
1237
1453
  }
1238
1454
  /**
@@ -1563,7 +1779,7 @@ class CameraComponentElement extends ComponentElement {
1563
1779
  var _a;
1564
1780
  this._tonemap = value;
1565
1781
  if (this.component) {
1566
- this.component.toneMapping = (_a = tonemaps.get(value)) !== null && _a !== undefined ? _a : playcanvas.TONEMAP_NONE;
1782
+ this.component.toneMapping = (_a = tonemaps.get(value)) !== null && _a !== void 0 ? _a : playcanvas.TONEMAP_NONE;
1567
1783
  }
1568
1784
  }
1569
1785
  /**
@@ -2099,64 +2315,6 @@ class ElementComponentElement extends ComponentElement {
2099
2315
  }
2100
2316
  customElements.define('pc-element', ElementComponentElement);
2101
2317
 
2102
- /**
2103
- * The SplatComponentElement interface provides properties and methods for manipulating
2104
- * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-splat/ | `<pc-splat>`} elements.
2105
- * The SplatComponentElement interface also inherits the properties and methods of the
2106
- * {@link HTMLElement} interface.
2107
- *
2108
- * @category Components
2109
- */
2110
- class SplatComponentElement extends ComponentElement {
2111
- /** @ignore */
2112
- constructor() {
2113
- super('gsplat');
2114
- this._asset = '';
2115
- }
2116
- getInitialComponentData() {
2117
- return {
2118
- asset: AssetElement.get(this._asset)
2119
- };
2120
- }
2121
- /**
2122
- * Gets the underlying PlayCanvas splat component.
2123
- * @returns The splat component.
2124
- */
2125
- get component() {
2126
- return super.component;
2127
- }
2128
- /**
2129
- * Sets id of the `pc-asset` to use for the splat.
2130
- * @param value - The asset ID.
2131
- */
2132
- set asset(value) {
2133
- this._asset = value;
2134
- const asset = AssetElement.get(value);
2135
- if (this.component && asset) {
2136
- this.component.asset = asset;
2137
- }
2138
- }
2139
- /**
2140
- * Gets the id of the `pc-asset` to use for the splat.
2141
- * @returns The asset ID.
2142
- */
2143
- get asset() {
2144
- return this._asset;
2145
- }
2146
- static get observedAttributes() {
2147
- return [...super.observedAttributes, 'asset'];
2148
- }
2149
- attributeChangedCallback(name, _oldValue, newValue) {
2150
- super.attributeChangedCallback(name, _oldValue, newValue);
2151
- switch (name) {
2152
- case 'asset':
2153
- this.asset = newValue;
2154
- break;
2155
- }
2156
- }
2157
- }
2158
- customElements.define('pc-splat', SplatComponentElement);
2159
-
2160
2318
  const shadowTypes = new Map([
2161
2319
  ['pcf1-16f', playcanvas.SHADOW_PCF1_16F],
2162
2320
  ['pcf1-32f', playcanvas.SHADOW_PCF1_32F],
@@ -2425,7 +2583,7 @@ class LightComponentElement extends ComponentElement {
2425
2583
  var _a;
2426
2584
  this._shadowType = value;
2427
2585
  if (this.component) {
2428
- this.component.shadowType = (_a = shadowTypes.get(value)) !== null && _a !== undefined ? _a : playcanvas.SHADOW_PCF3_32F;
2586
+ this.component.shadowType = (_a = shadowTypes.get(value)) !== null && _a !== void 0 ? _a : playcanvas.SHADOW_PCF3_32F;
2429
2587
  }
2430
2588
  }
2431
2589
  /**
@@ -2542,6 +2700,138 @@ class LightComponentElement extends ComponentElement {
2542
2700
  }
2543
2701
  customElements.define('pc-light', LightComponentElement);
2544
2702
 
2703
+ /**
2704
+ * The ParticleSystemComponentElement interface provides properties and methods for manipulating
2705
+ * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-particles/ | `<pc-particles>`} elements.
2706
+ * The ParticleSystemComponentElement interface also inherits the properties and methods of the
2707
+ * {@link HTMLElement} interface.
2708
+ *
2709
+ * @category Components
2710
+ */
2711
+ class ParticleSystemComponentElement extends ComponentElement {
2712
+ /** @ignore */
2713
+ constructor() {
2714
+ super('particlesystem');
2715
+ this._asset = '';
2716
+ }
2717
+ getInitialComponentData() {
2718
+ var _a;
2719
+ const asset = AssetElement.get(this._asset);
2720
+ if (!asset) {
2721
+ return {};
2722
+ }
2723
+ if (asset.resource.colorMapAsset) {
2724
+ const id = asset.resource.colorMapAsset;
2725
+ const colorMapAsset = (_a = AssetElement.get(id)) === null || _a === void 0 ? void 0 : _a.id;
2726
+ if (colorMapAsset) {
2727
+ asset.resource.colorMapAsset = colorMapAsset;
2728
+ }
2729
+ }
2730
+ return asset.resource;
2731
+ }
2732
+ /**
2733
+ * Gets the underlying PlayCanvas particle system component.
2734
+ * @returns The particle system component.
2735
+ */
2736
+ get component() {
2737
+ return super.component;
2738
+ }
2739
+ applyConfig(resource) {
2740
+ if (!this.component) {
2741
+ return;
2742
+ }
2743
+ // Set all the config properties on the component
2744
+ for (const key in resource) {
2745
+ if (resource.hasOwnProperty(key)) {
2746
+ this.component[key] = resource[key];
2747
+ }
2748
+ }
2749
+ }
2750
+ async _loadAsset() {
2751
+ var _a;
2752
+ const appElement = await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
2753
+ const app = appElement === null || appElement === void 0 ? void 0 : appElement.app;
2754
+ const asset = AssetElement.get(this._asset);
2755
+ if (!asset) {
2756
+ return;
2757
+ }
2758
+ if (asset.loaded) {
2759
+ this.applyConfig(asset.resource);
2760
+ }
2761
+ else {
2762
+ asset.once('load', () => {
2763
+ this.applyConfig(asset.resource);
2764
+ });
2765
+ app.assets.load(asset);
2766
+ }
2767
+ }
2768
+ /**
2769
+ * Sets the id of the `pc-asset` to use for the model.
2770
+ * @param value - The asset ID.
2771
+ */
2772
+ set asset(value) {
2773
+ this._asset = value;
2774
+ if (this.isConnected) {
2775
+ this._loadAsset();
2776
+ }
2777
+ }
2778
+ /**
2779
+ * Gets the id of the `pc-asset` to use for the model.
2780
+ * @returns The asset ID.
2781
+ */
2782
+ get asset() {
2783
+ return this._asset;
2784
+ }
2785
+ // Control methods
2786
+ /**
2787
+ * Starts playing the particle system
2788
+ */
2789
+ play() {
2790
+ if (this.component) {
2791
+ this.component.play();
2792
+ }
2793
+ }
2794
+ /**
2795
+ * Pauses the particle system
2796
+ */
2797
+ pause() {
2798
+ if (this.component) {
2799
+ this.component.pause();
2800
+ }
2801
+ }
2802
+ /**
2803
+ * Resets the particle system
2804
+ */
2805
+ reset() {
2806
+ if (this.component) {
2807
+ this.component.reset();
2808
+ }
2809
+ }
2810
+ /**
2811
+ * Stops the particle system
2812
+ */
2813
+ stop() {
2814
+ if (this.component) {
2815
+ this.component.stop();
2816
+ }
2817
+ }
2818
+ static get observedAttributes() {
2819
+ return [
2820
+ ...super.observedAttributes,
2821
+ 'asset'
2822
+ ];
2823
+ }
2824
+ attributeChangedCallback(name, _oldValue, newValue) {
2825
+ super.attributeChangedCallback(name, _oldValue, newValue);
2826
+ switch (name) {
2827
+ case 'asset':
2828
+ this.asset = newValue;
2829
+ break;
2830
+ }
2831
+ }
2832
+ }
2833
+ customElements.define('pc-particles', ParticleSystemComponentElement);
2834
+
2545
2835
  /**
2546
2836
  * The MaterialElement interface provides properties and methods for manipulating
2547
2837
  * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-material/ | `<pc-material>`} elements.
@@ -2632,7 +2922,7 @@ class MaterialElement extends HTMLElement {
2632
2922
  }
2633
2923
  static get(id) {
2634
2924
  const materialElement = document.querySelector(`pc-material[id="${id}"]`);
2635
- return materialElement === null || materialElement === undefined ? undefined : materialElement.material;
2925
+ return materialElement === null || materialElement === void 0 ? void 0 : materialElement.material;
2636
2926
  }
2637
2927
  static get observedAttributes() {
2638
2928
  return ['diffuse', 'diffuse-map', 'metalness-map', 'normal-map', 'roughness-map'];
@@ -3312,7 +3602,7 @@ class ScriptComponentElement extends ComponentElement {
3312
3602
  disconnectedCallback() {
3313
3603
  var _a;
3314
3604
  this.observer.disconnect();
3315
- (_a = super.disconnectedCallback) === null || _a === undefined ? undefined : _a.call(this);
3605
+ (_a = super.disconnectedCallback) === null || _a === void 0 ? void 0 : _a.call(this);
3316
3606
  }
3317
3607
  /**
3318
3608
  * Gets the underlying PlayCanvas script component.
@@ -3627,7 +3917,7 @@ class SoundSlotElement extends AsyncElement {
3627
3917
  }
3628
3918
  async connectedCallback() {
3629
3919
  var _a;
3630
- await ((_a = this.soundElement) === null || _a === undefined ? undefined : _a.ready());
3920
+ await ((_a = this.soundElement) === null || _a === void 0 ? void 0 : _a.ready());
3631
3921
  const options = {
3632
3922
  autoPlay: this._autoPlay,
3633
3923
  loop: this._loop,
@@ -3663,7 +3953,7 @@ class SoundSlotElement extends AsyncElement {
3663
3953
  var _a;
3664
3954
  this._asset = value;
3665
3955
  if (this.soundSlot) {
3666
- const id = (_a = AssetElement.get(value)) === null || _a === undefined ? undefined : _a.id;
3956
+ const id = (_a = AssetElement.get(value)) === null || _a === void 0 ? void 0 : _a.id;
3667
3957
  if (id) {
3668
3958
  this.soundSlot.asset = id;
3669
3959
  }
@@ -3846,6 +4136,64 @@ class SoundSlotElement extends AsyncElement {
3846
4136
  }
3847
4137
  customElements.define('pc-sound', SoundSlotElement);
3848
4138
 
4139
+ /**
4140
+ * The SplatComponentElement interface provides properties and methods for manipulating
4141
+ * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-splat/ | `<pc-splat>`} elements.
4142
+ * The SplatComponentElement interface also inherits the properties and methods of the
4143
+ * {@link HTMLElement} interface.
4144
+ *
4145
+ * @category Components
4146
+ */
4147
+ class SplatComponentElement extends ComponentElement {
4148
+ /** @ignore */
4149
+ constructor() {
4150
+ super('gsplat');
4151
+ this._asset = '';
4152
+ }
4153
+ getInitialComponentData() {
4154
+ return {
4155
+ asset: AssetElement.get(this._asset)
4156
+ };
4157
+ }
4158
+ /**
4159
+ * Gets the underlying PlayCanvas splat component.
4160
+ * @returns The splat component.
4161
+ */
4162
+ get component() {
4163
+ return super.component;
4164
+ }
4165
+ /**
4166
+ * Sets id of the `pc-asset` to use for the splat.
4167
+ * @param value - The asset ID.
4168
+ */
4169
+ set asset(value) {
4170
+ this._asset = value;
4171
+ const asset = AssetElement.get(value);
4172
+ if (this.component && asset) {
4173
+ this.component.asset = asset;
4174
+ }
4175
+ }
4176
+ /**
4177
+ * Gets the id of the `pc-asset` to use for the splat.
4178
+ * @returns The asset ID.
4179
+ */
4180
+ get asset() {
4181
+ return this._asset;
4182
+ }
4183
+ static get observedAttributes() {
4184
+ return [...super.observedAttributes, 'asset'];
4185
+ }
4186
+ attributeChangedCallback(name, _oldValue, newValue) {
4187
+ super.attributeChangedCallback(name, _oldValue, newValue);
4188
+ switch (name) {
4189
+ case 'asset':
4190
+ this.asset = newValue;
4191
+ break;
4192
+ }
4193
+ }
4194
+ }
4195
+ customElements.define('pc-splat', SplatComponentElement);
4196
+
3849
4197
  /**
3850
4198
  * The ModelElement interface provides properties and methods for manipulating
3851
4199
  * {@link https://developer.playcanvas.com/user-manual/engine/web-components/tags/pc-model/ | `<pc-model>`} elements.
@@ -3891,8 +4239,8 @@ class ModelElement extends AsyncElement {
3891
4239
  async _loadModel() {
3892
4240
  var _a;
3893
4241
  this._unloadModel();
3894
- const appElement = await ((_a = this.closestApp) === null || _a === undefined ? undefined : _a.ready());
3895
- const app = appElement === null || appElement === undefined ? undefined : appElement.app;
4242
+ const appElement = await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
4243
+ const app = appElement === null || appElement === void 0 ? void 0 : appElement.app;
3896
4244
  const asset = AssetElement.get(this._asset);
3897
4245
  if (!asset) {
3898
4246
  return;
@@ -3909,7 +4257,7 @@ class ModelElement extends AsyncElement {
3909
4257
  }
3910
4258
  _unloadModel() {
3911
4259
  var _a;
3912
- (_a = this._entity) === null || _a === undefined ? undefined : _a.destroy();
4260
+ (_a = this._entity) === null || _a === void 0 ? void 0 : _a.destroy();
3913
4261
  this._entity = null;
3914
4262
  }
3915
4263
  /**
@@ -3971,6 +4319,10 @@ class SceneElement extends AsyncElement {
3971
4319
  * The end distance of the fog.
3972
4320
  */
3973
4321
  this._fogEnd = 1000;
4322
+ /**
4323
+ * The gravity of the scene.
4324
+ */
4325
+ this._gravity = new playcanvas.Vec3(0, -9.81, 0);
3974
4326
  /**
3975
4327
  * The PlayCanvas scene instance.
3976
4328
  */
@@ -3978,7 +4330,7 @@ class SceneElement extends AsyncElement {
3978
4330
  }
3979
4331
  async connectedCallback() {
3980
4332
  var _a;
3981
- await ((_a = this.closestApp) === null || _a === undefined ? undefined : _a.ready());
4333
+ await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
3982
4334
  this.scene = this.closestApp.app.scene;
3983
4335
  this.updateSceneSettings();
3984
4336
  this._onReady();
@@ -3990,7 +4342,8 @@ class SceneElement extends AsyncElement {
3990
4342
  this.scene.fog.density = this._fogDensity;
3991
4343
  this.scene.fog.start = this._fogStart;
3992
4344
  this.scene.fog.end = this._fogEnd;
3993
- // ... set other properties on the scene as well
4345
+ const appElement = this.parentElement;
4346
+ appElement.app.systems.rigidbody.gravity.copy(this._gravity);
3994
4347
  }
3995
4348
  }
3996
4349
  /**
@@ -4078,8 +4431,26 @@ class SceneElement extends AsyncElement {
4078
4431
  get fogEnd() {
4079
4432
  return this._fogEnd;
4080
4433
  }
4434
+ /**
4435
+ * Sets the gravity of the scene.
4436
+ * @param value - The gravity.
4437
+ */
4438
+ set gravity(value) {
4439
+ this._gravity = value;
4440
+ if (this.scene) {
4441
+ const appElement = this.parentElement;
4442
+ appElement.app.systems.rigidbody.gravity.copy(value);
4443
+ }
4444
+ }
4445
+ /**
4446
+ * Gets the gravity of the scene.
4447
+ * @returns The gravity.
4448
+ */
4449
+ get gravity() {
4450
+ return this._gravity;
4451
+ }
4081
4452
  static get observedAttributes() {
4082
- return ['fog', 'fog-color', 'fog-density', 'fog-start', 'fog-end'];
4453
+ return ['fog', 'fog-color', 'fog-density', 'fog-start', 'fog-end', 'gravity'];
4083
4454
  }
4084
4455
  attributeChangedCallback(name, _oldValue, newValue) {
4085
4456
  switch (name) {
@@ -4098,6 +4469,9 @@ class SceneElement extends AsyncElement {
4098
4469
  case 'fog-end':
4099
4470
  this.fogEnd = parseFloat(newValue);
4100
4471
  break;
4472
+ case 'gravity':
4473
+ this.gravity = parseVec3(newValue);
4474
+ break;
4101
4475
  // ... handle other attributes as well
4102
4476
  }
4103
4477
  }
@@ -4152,8 +4526,8 @@ class SkyElement extends AsyncElement {
4152
4526
  }
4153
4527
  async _loadSkybox() {
4154
4528
  var _a;
4155
- const appElement = await ((_a = this.closestApp) === null || _a === undefined ? undefined : _a.ready());
4156
- const app = appElement === null || appElement === undefined ? undefined : appElement.app;
4529
+ const appElement = await ((_a = this.closestApp) === null || _a === void 0 ? void 0 : _a.ready());
4530
+ const app = appElement === null || appElement === void 0 ? void 0 : appElement.app;
4157
4531
  if (!app) {
4158
4532
  return;
4159
4533
  }
@@ -4176,10 +4550,10 @@ class SkyElement extends AsyncElement {
4176
4550
  var _a, _b;
4177
4551
  if (!this._scene)
4178
4552
  return;
4179
- (_a = this._scene.skybox) === null || _a === undefined ? undefined : _a.destroy();
4553
+ (_a = this._scene.skybox) === null || _a === void 0 ? void 0 : _a.destroy();
4180
4554
  // @ts-ignore
4181
4555
  this._scene.skybox = null;
4182
- (_b = this._scene.envAtlas) === null || _b === undefined ? undefined : _b.destroy();
4556
+ (_b = this._scene.envAtlas) === null || _b === void 0 ? void 0 : _b.destroy();
4183
4557
  // @ts-ignore
4184
4558
  this._scene.envAtlas = null;
4185
4559
  this._scene = null;
@@ -4368,6 +4742,7 @@ exports.ListenerComponentElement = ListenerComponentElement;
4368
4742
  exports.MaterialElement = MaterialElement;
4369
4743
  exports.ModelElement = ModelElement;
4370
4744
  exports.ModuleElement = ModuleElement;
4745
+ exports.ParticleSystemComponentElement = ParticleSystemComponentElement;
4371
4746
  exports.RenderComponentElement = RenderComponentElement;
4372
4747
  exports.RigidBodyComponentElement = RigidBodyComponentElement;
4373
4748
  exports.SceneElement = SceneElement;