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