x_ite 16.3.0 → 16.4.0

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.
Files changed (59) hide show
  1. package/README.md +6 -6
  2. package/dist/assets/components/AnnotationComponent.js +1 -1
  3. package/dist/assets/components/AnnotationComponent.min.js +1 -1
  4. package/dist/assets/components/CADGeometryComponent.js +1 -1
  5. package/dist/assets/components/CADGeometryComponent.min.js +1 -1
  6. package/dist/assets/components/CubeMapTexturingComponent.js +1 -1
  7. package/dist/assets/components/CubeMapTexturingComponent.min.js +1 -1
  8. package/dist/assets/components/DISComponent.js +1 -1
  9. package/dist/assets/components/DISComponent.min.js +1 -1
  10. package/dist/assets/components/EventUtilitiesComponent.js +9 -6
  11. package/dist/assets/components/EventUtilitiesComponent.min.js +2 -2
  12. package/dist/assets/components/GaussianSplatsComponent.js +1 -1
  13. package/dist/assets/components/GaussianSplatsComponent.min.js +1 -1
  14. package/dist/assets/components/Geometry2DComponent.js +1 -1
  15. package/dist/assets/components/Geometry2DComponent.min.js +1 -1
  16. package/dist/assets/components/Geometry3DComponent.js +1 -1
  17. package/dist/assets/components/Geometry3DComponent.min.js +1 -1
  18. package/dist/assets/components/GeospatialComponent.js +1 -1
  19. package/dist/assets/components/GeospatialComponent.min.js +1 -1
  20. package/dist/assets/components/HAnimComponent.js +1 -1
  21. package/dist/assets/components/HAnimComponent.min.js +1 -1
  22. package/dist/assets/components/KeyDeviceSensorComponent.js +1 -1
  23. package/dist/assets/components/KeyDeviceSensorComponent.min.js +1 -1
  24. package/dist/assets/components/LayoutComponent.js +1 -1
  25. package/dist/assets/components/LayoutComponent.min.js +1 -1
  26. package/dist/assets/components/NURBSComponent.js +1 -1
  27. package/dist/assets/components/NURBSComponent.min.js +1 -1
  28. package/dist/assets/components/ParticleSystemsComponent.js +1 -1
  29. package/dist/assets/components/ParticleSystemsComponent.min.js +1 -1
  30. package/dist/assets/components/PickingComponent.js +1 -1
  31. package/dist/assets/components/PickingComponent.min.js +1 -1
  32. package/dist/assets/components/RigidBodyPhysicsComponent.js +1 -1
  33. package/dist/assets/components/RigidBodyPhysicsComponent.min.js +1 -1
  34. package/dist/assets/components/ScriptingComponent.js +1 -1
  35. package/dist/assets/components/ScriptingComponent.min.js +1 -1
  36. package/dist/assets/components/TextComponent.js +1 -1
  37. package/dist/assets/components/TextComponent.min.js +1 -1
  38. package/dist/assets/components/TextureProjectionComponent.js +1 -1
  39. package/dist/assets/components/TextureProjectionComponent.min.js +1 -1
  40. package/dist/assets/components/Texturing3DComponent.js +10 -10
  41. package/dist/assets/components/Texturing3DComponent.min.js +2 -2
  42. package/dist/assets/components/VolumeRenderingComponent.js +1 -1
  43. package/dist/assets/components/VolumeRenderingComponent.min.js +1 -1
  44. package/dist/assets/components/WebXRComponent.js +5 -3
  45. package/dist/assets/components/WebXRComponent.min.js +2 -2
  46. package/dist/assets/components/X_ITEComponent.js +1 -1
  47. package/dist/assets/components/X_ITEComponent.min.js +1 -1
  48. package/dist/assets/images/background-light.svg +1 -1
  49. package/dist/assets/images/head_mounted_device.svg +1 -0
  50. package/dist/assets/images/no_sound.svg +1 -1
  51. package/dist/example.html +1 -1
  52. package/dist/x_ite.css +1 -1
  53. package/dist/x_ite.js +323 -278
  54. package/dist/x_ite.min.js +2 -2
  55. package/dist/x_ite.min.mjs +2 -2
  56. package/dist/x_ite.mjs +323 -278
  57. package/dist/x_ite.zip +0 -0
  58. package/package.json +5 -4
  59. package/dist/assets/images/xr.svg +0 -1
package/dist/x_ite.js CHANGED
@@ -1,4 +1,4 @@
1
- /* X_ITE v16.3.0 */
1
+ /* X_ITE v16.4.0 */
2
2
  (function webpackUniversalModuleDefinition(root, factory) {
3
3
  if(typeof exports === 'object' && typeof module === 'object')
4
4
  module.exports = factory();
@@ -12,7 +12,7 @@
12
12
  return /******/ (() => { // webpackBootstrap
13
13
  /******/ var __webpack_modules__ = ({
14
14
 
15
- /***/ 133
15
+ /***/ 530
16
16
  (module, exports) {
17
17
 
18
18
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*
@@ -1017,7 +1017,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
1017
1017
 
1018
1018
  /***/ },
1019
1019
 
1020
- /***/ 991
1020
+ /***/ 504
1021
1021
  (module) {
1022
1022
 
1023
1023
  (function webpackUniversalModuleDefinition(root, factory) {
@@ -2013,7 +2013,7 @@ return /******/ (function(modules) { // webpackBootstrap
2013
2013
 
2014
2014
  /***/ },
2015
2015
 
2016
- /***/ 643
2016
+ /***/ 780
2017
2017
  (module) {
2018
2018
 
2019
2019
  /**
@@ -14572,12 +14572,11 @@ Object .assign (Object .setPrototypeOf (SFNode .prototype, Base_X3DField .protot
14572
14572
  },
14573
14573
  getFieldDefinition (name)
14574
14574
  {
14575
- const fieldDefinition = this .getFieldDefinitions () .get (name);
14576
-
14577
- if (fieldDefinition)
14578
- return fieldDefinition;
14575
+ const
14576
+ target = this [_target],
14577
+ node = target .getValue ();
14579
14578
 
14580
- throw new Error (`Unknown field '${name}' in node class ${this .getNodeTypeName ()}.`);
14579
+ return node .getFieldDefinition (name);
14581
14580
  },
14582
14581
  getFieldDefinitions ()
14583
14582
  {
@@ -14607,7 +14606,7 @@ Object .assign (Object .setPrototypeOf (SFNode .prototype, Base_X3DField .protot
14607
14606
 
14608
14607
  Error .captureStackTrace (target, this .getField);
14609
14608
 
14610
- console .warn ("The use of sfnode.getField(name) is deprecated. Future versions of X_ITE may remove this feature. Instead, use the sfnode.{fieldName} syntax or sfnode.addFieldCallback(key, fieldName, callback).", target .stack);
14609
+ console .warn ("The use of sfnode.getField(name) is deprecated. Future versions of X_ITE may remove this feature. Instead, use the sfnode.{fieldName} property syntax or sfnode.addFieldCallback(key, fieldName, callback).", target .stack);
14611
14610
  }
14612
14611
 
14613
14612
  const
@@ -18450,7 +18449,12 @@ Object .assign (Object .setPrototypeOf (X3DBaseNode .prototype, Base_X3DChildObj
18450
18449
  },
18451
18450
  getFieldDefinition (name)
18452
18451
  {
18453
- return this [_fieldDefinitions] .get (name);
18452
+ const fieldDefinition = this [_fieldDefinitions] .get (name);
18453
+
18454
+ if (fieldDefinition)
18455
+ return fieldDefinition;
18456
+
18457
+ throw new Error (`Unknown field '${name}' in node class ${this .getTypeName ()}.`);
18454
18458
  },
18455
18459
  getFieldDefinitions ()
18456
18460
  {
@@ -18885,7 +18889,7 @@ const Legacy_default_ = Legacy;
18885
18889
 
18886
18890
  /* harmony default export */ const Browser_Legacy = (x_ite_Namespace .add ("Legacy", Legacy_default_));
18887
18891
  ;// ./src/x_ite/BROWSER_VERSION.js
18888
- const BROWSER_VERSION_default_ = "16.3.0";
18892
+ const BROWSER_VERSION_default_ = "16.4.0";
18889
18893
  ;
18890
18894
 
18891
18895
  /* harmony default export */ const BROWSER_VERSION = (x_ite_Namespace .add ("BROWSER_VERSION", BROWSER_VERSION_default_));
@@ -19342,7 +19346,7 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
19342
19346
  // HTML
19343
19347
 
19344
19348
  const html = /* html */ `
19345
- <div class="x_ite-private-browser-timings x_ite-private-hidden"><table>
19349
+ <div class="x_ite-private-browser-timings x_ite-private-fade x_ite-private-hidden"><table>
19346
19350
  <thead>
19347
19351
  <tr>
19348
19352
  <th colspan="2">${gettext("Browser Timings")}</th>
@@ -19445,8 +19449,7 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
19445
19449
 
19446
19450
  if (this .getBrowser () .getBrowserOption ("Timings"))
19447
19451
  {
19448
- element .classList .remove ("x_ite-private-fade-out-300", "x_ite-private-hidden");
19449
- element .classList .add ("x_ite-private-fade-in-300");
19452
+ element .classList .remove ("x_ite-private-hidden");
19450
19453
 
19451
19454
  this .getBrowser () .addBrowserCallback (this, Base_X3DConstants .INITIALIZED_EVENT, () => this .reset ());
19452
19455
  this .getBrowser () .prepareEvents () .addInterest ("update", this);
@@ -19454,8 +19457,7 @@ Object .assign (Object .setPrototypeOf (BrowserTimings .prototype, Base_X3DBaseN
19454
19457
  }
19455
19458
  else
19456
19459
  {
19457
- element .classList .remove ("x_ite-private-fade-in-300");
19458
- element .classList .add ("x_ite-private-fade-out-300");
19460
+ element .classList .add ("x_ite-private-hidden");
19459
19461
 
19460
19462
  this .getBrowser () .removeBrowserCallback (this, Base_X3DConstants .INITIALIZED_EVENT);
19461
19463
  this .getBrowser () .prepareEvents () .removeInterest ("update", this);
@@ -20360,19 +20362,18 @@ Object .assign (Object .setPrototypeOf (Notification .prototype, Base_X3DBaseNod
20360
20362
  {
20361
20363
  Base_X3DBaseNode .prototype .initialize .call (this);
20362
20364
 
20363
- this .element = (() =>
20364
- {
20365
- const element = document .createElement ("div");
20365
+ const
20366
+ element = document .createElement ("div"),
20367
+ span = document .createElement ("span");
20366
20368
 
20367
- element .style .visibility = "hidden";
20369
+ element .classList .add ("x_ite-private-notification");
20368
20370
 
20369
- element .append (document .createElement ("span"));
20370
- element .classList .add ("x_ite-private-notification");
20371
+ element .append (span);
20371
20372
 
20372
- this .getBrowser () .getSurface () .append (element);
20373
+ this .getBrowser () .getSurface () .append (element);
20373
20374
 
20374
- return element;
20375
- })();
20375
+ this .element = element;
20376
+ this .span = span;
20376
20377
 
20377
20378
  this ._string .addInterest ("set_string__", this);
20378
20379
  },
@@ -20386,12 +20387,12 @@ Object .assign (Object .setPrototypeOf (Notification .prototype, Base_X3DBaseNod
20386
20387
 
20387
20388
  clearTimeout (this .timeoutId);
20388
20389
 
20389
- this .element .querySelector ("span") .textContent = this ._string .getValue ();
20390
+ this .span .textContent = this ._string .getValue ();
20390
20391
 
20391
20392
  Object .assign (this .element .style,
20392
20393
  {
20393
20394
  visibility: "visible",
20394
- width: `${this .textWidth (this .element)}px`,
20395
+ width: `${this .span .clientWidth}px`,
20395
20396
  transition: "width 300ms ease-in-out",
20396
20397
  });
20397
20398
 
@@ -20406,22 +20407,6 @@ Object .assign (Object .setPrototypeOf (Notification .prototype, Base_X3DBaseNod
20406
20407
  },
20407
20408
  5000);
20408
20409
  },
20409
- textWidth (element)
20410
- {
20411
- const
20412
- children = Array .from (element .children),
20413
- span = document .createElement ("span");
20414
-
20415
- span .textContent = element .textContent;
20416
-
20417
- element .replaceChildren (span);
20418
-
20419
- const width = span .clientWidth;
20420
-
20421
- element .replaceChildren (... children);
20422
-
20423
- return width;
20424
- },
20425
20410
  });
20426
20411
 
20427
20412
  Object .defineProperties (Notification,
@@ -20524,12 +20509,9 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
20524
20509
  layer .remove ();
20525
20510
 
20526
20511
  for (const child of ul .children)
20527
- {
20528
- child .classList .remove ("x_ite-private-fade-in-300");
20529
- child .classList .add ("x_ite-private-fade-out-300");
20530
- }
20512
+ child .classList .add ("x_ite-private-hidden");
20531
20513
 
20532
- setTimeout (() => ul .remove (), 1000);
20514
+ setTimeout (() => ul .remove (), 1_000);
20533
20515
 
20534
20516
  return false;
20535
20517
  };
@@ -20540,8 +20522,6 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
20540
20522
 
20541
20523
  ul .classList .add ("context-menu-root", "context-menu-list", menu .className);
20542
20524
 
20543
- ul .style .display = "none";
20544
-
20545
20525
  ul .addEventListener ("contextmenu", () => this .hide ());
20546
20526
 
20547
20527
  root .append (ul);
@@ -20559,15 +20539,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
20559
20539
  // Must animate children because of blurish background.
20560
20540
 
20561
20541
  for (const child of ul .children)
20562
- child .classList .add ("x_ite-private-hidden");
20542
+ child .classList .add ("x_ite-private-fade", "x_ite-private-hidden");
20563
20543
 
20564
20544
  ul .style .display = "block";
20565
20545
 
20566
20546
  for (const child of ul .children)
20567
- {
20568
20547
  child .classList .remove ("x_ite-private-hidden");
20569
- child .classList .add ("x_ite-private-fade-in-300");
20570
- }
20571
20548
 
20572
20549
  // Reposition menu if to right or to low.
20573
20550
 
@@ -20761,7 +20738,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
20761
20738
  className: "x_ite-private-menu",
20762
20739
  items: {
20763
20740
  "title": {
20764
- name: `${browser .getName ()} Browser v${browser .getVersion ()}`,
20741
+ name: `${browser .getName ()} v${browser .getVersion ()}`,
20765
20742
  className: "context-menu-title context-menu-icon x_ite-private-icon-logo context-menu-not-selectable",
20766
20743
  },
20767
20744
  "separator0": "--------",
@@ -20996,8 +20973,7 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
20996
20973
  overlay .classList .add ("x_ite-private-world-info-overlay");
20997
20974
  priv .append (overlay);
20998
20975
 
20999
- div .style .display = "none";
21000
- div .classList .add ("x_ite-private-world-info", "x_ite-private-hidden");
20976
+ div .classList .add ("x_ite-private-world-info", "x_ite-private-fade", "x_ite-private-hidden");
21001
20977
  overlay .append (div);
21002
20978
 
21003
20979
  const buttons = document .createElement ("div");
@@ -21128,13 +21104,12 @@ Object .assign (Object .setPrototypeOf (ContextMenu .prototype, Base_X3DBaseNode
21128
21104
 
21129
21105
  div .append (content);
21130
21106
 
21131
- div .style .display = "block";
21132
21107
  div .classList .remove ("x_ite-private-hidden");
21133
- div .classList .add ("x_ite-private-fade-in-300");
21134
21108
 
21135
21109
  overlay .addEventListener ("click", () =>
21136
21110
  {
21137
- div .classList .add ("x_ite-private-fade-out-300");
21111
+ div .classList .add ("x_ite-private-hidden");
21112
+
21138
21113
  setTimeout (() => overlay .remove (), 300);
21139
21114
  });
21140
21115
  },
@@ -21458,6 +21433,8 @@ Object .assign (Object .setPrototypeOf (X3DNode .prototype, Base_X3DBaseNode .pr
21458
21433
  {
21459
21434
  if (instance ?.getType () .includes (Base_X3DConstants .X3DExecutionContext) ?? true)
21460
21435
  {
21436
+ // Make flat copy:
21437
+
21461
21438
  const copy = this .create (instance);
21462
21439
 
21463
21440
  for (const field of this .getPredefinedFields ())
@@ -21473,6 +21450,8 @@ Object .assign (Object .setPrototypeOf (X3DNode .prototype, Base_X3DBaseNode .pr
21473
21450
  }
21474
21451
  else
21475
21452
  {
21453
+ // Make a copy for a X3DPrototypeInstance.
21454
+
21476
21455
  const executionContext = instance .getBody ();
21477
21456
 
21478
21457
  // First try to get a named node with the node's name.
@@ -26143,7 +26122,7 @@ Object .assign (X3DParser .prototype,
26143
26122
  if (!this .isInsideProtoDeclaration ())
26144
26123
  nodes .forEach (node => node .setup ());
26145
26124
 
26146
- nodes .length = 0;;
26125
+ nodes .length = 0;
26147
26126
  },
26148
26127
  rotateAxes90 (array)
26149
26128
  {
@@ -27467,9 +27446,7 @@ Object .assign (Object .setPrototypeOf (VRMLParser .prototype, Parser_X3DParser
27467
27446
  {
27468
27447
  if (this .nodeNameId ())
27469
27448
  {
27470
- const
27471
- fromNodeId = this .result [0],
27472
- fromNode = this .getExecutionContext () .getLocalNode (fromNodeId);
27449
+ const fromNodeId = this .result [0];
27473
27450
 
27474
27451
  this .comments ();
27475
27452
 
@@ -27485,9 +27462,7 @@ Object .assign (Object .setPrototypeOf (VRMLParser .prototype, Parser_X3DParser
27485
27462
  {
27486
27463
  if (this .nodeNameId ())
27487
27464
  {
27488
- const
27489
- toNodeId = this .result [0],
27490
- toNode = this .getExecutionContext () .getLocalNode (toNodeId);
27465
+ const toNodeId = this .result [0];
27491
27466
 
27492
27467
  this .comments ();
27493
27468
 
@@ -27497,7 +27472,10 @@ Object .assign (Object .setPrototypeOf (VRMLParser .prototype, Parser_X3DParser
27497
27472
  {
27498
27473
  try
27499
27474
  {
27500
- const eventInId = this .result [0];
27475
+ const
27476
+ eventInId = this .result [0],
27477
+ fromNode = this .getExecutionContext () .getLocalNode (fromNodeId),
27478
+ toNode = this .getExecutionContext () .getLocalNode (toNodeId);
27501
27479
 
27502
27480
  this .getExecutionContext () .addRoute (fromNode, eventOutId, toNode, eventInId);
27503
27481
  return true;
@@ -29782,16 +29760,16 @@ Object .assign (Object .setPrototypeOf (XMLParser .prototype, Parser_X3DParser .
29782
29760
  destinationField = xmlElement .getAttribute ("toField");
29783
29761
 
29784
29762
  if (sourceNodeName === null)
29785
- throw new Error ("Bad ROUTE statement: Expected fromNode attribute.");
29763
+ throw new Error ("Bad ROUTE specification: Expected fromNode attribute.");
29786
29764
 
29787
29765
  if (sourceField === null)
29788
- throw new Error ("Bad ROUTE statement: Expected fromField attribute.");
29766
+ throw new Error ("Bad ROUTE specification: Expected fromField attribute.");
29789
29767
 
29790
29768
  if (destinationNodeName === null)
29791
- throw new Error ("Bad ROUTE statement: Expected toNode attribute.");
29769
+ throw new Error ("Bad ROUTE specification: Expected toNode attribute.");
29792
29770
 
29793
29771
  if (destinationField === null)
29794
- throw new Error ("Bad ROUTE statement: Expected toField attribute.");
29772
+ throw new Error ("Bad ROUTE specification: Expected toField attribute.");
29795
29773
 
29796
29774
  const
29797
29775
  executionContext = this .getExecutionContext (),
@@ -31212,7 +31190,7 @@ const Plane3_default_ = Plane3;
31212
31190
 
31213
31191
  /* harmony default export */ const Geometry_Plane3 = (x_ite_Namespace .add ("Plane3", Plane3_default_));
31214
31192
  ;// ./src/standard/Math/Geometry/Triangle3.js
31215
- /* provided dependency */ var libtess = __webpack_require__(643);
31193
+ /* provided dependency */ var libtess = __webpack_require__(780);
31216
31194
 
31217
31195
 
31218
31196
  const Triangle3 =
@@ -38681,7 +38659,7 @@ const X3DSensorNode_default_ = X3DSensorNode;
38681
38659
 
38682
38660
 
38683
38661
 
38684
- function X3DTimeDependentNode (executionContext)
38662
+ function X3DTimeDependentNode (/* executionContext */)
38685
38663
  {
38686
38664
  this .addType (Base_X3DConstants .X3DTimeDependentNode);
38687
38665
 
@@ -38733,8 +38711,10 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38733
38711
  },
38734
38712
  resetElapsedTime ()
38735
38713
  {
38736
- this .start = this .getBrowser () .getCurrentTime ();
38737
- this .pause = this .getBrowser () .getCurrentTime ();
38714
+ const time = this .getBrowser () .getCurrentTime ();
38715
+
38716
+ this .start = time;
38717
+ this .pause = time;
38738
38718
  this .pauseInterval = 0;
38739
38719
  },
38740
38720
  set_live__ ()
@@ -38860,14 +38840,14 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38860
38840
 
38861
38841
  // The event order below is very important.
38862
38842
 
38863
- this ._isActive = true;
38864
- this ._elapsedTime = 0;
38843
+ this ._isActive = true;
38865
38844
 
38866
38845
  this .set_start ();
38867
38846
 
38868
38847
  if (this .getLive () .getValue ())
38869
38848
  {
38870
- this .getBrowser () .timeEvents () .addInterest ("set_time" ,this);
38849
+ this .getBrowser () .timeEvents () .addInterest ("set_time", this);
38850
+ this .getBrowser () .addBrowserEvent ();
38871
38851
  }
38872
38852
  else
38873
38853
  {
@@ -38892,7 +38872,7 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38892
38872
 
38893
38873
  this .set_pause ();
38894
38874
 
38895
- this .getBrowser () .timeEvents () .removeInterest ("set_time" ,this);
38875
+ this .getBrowser () .timeEvents () .removeInterest ("set_time", this);
38896
38876
  },
38897
38877
  do_resume ()
38898
38878
  {
@@ -38927,14 +38907,12 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38927
38907
 
38928
38908
  this .set_stop ();
38929
38909
 
38930
- this ._elapsedTime = this .getElapsedTime ();
38931
-
38932
38910
  if (this ._isPaused .getValue ())
38933
38911
  this ._isPaused = false;
38934
38912
 
38935
38913
  this ._isActive = false;
38936
38914
 
38937
- this .getBrowser () .timeEvents () .removeInterest ("set_time" ,this);
38915
+ this .getBrowser () .timeEvents () .removeInterest ("set_time", this);
38938
38916
  }
38939
38917
  },
38940
38918
  addTimeout (name, callback, startTime)
@@ -38956,19 +38934,16 @@ Object .assign (Object .setPrototypeOf (X3DTimeDependentNode .prototype, Core_X3
38956
38934
  if (!this ._enabled .getValue ())
38957
38935
  return;
38958
38936
 
38959
- if (!(this .getLive () .getValue ()))
38960
- return;
38961
-
38962
38937
  this .getBrowser () .advanceOnlyTime ();
38963
38938
 
38964
38939
  this [callback] ();
38965
38940
  },
38966
- set_loop: Function .prototype,
38967
- set_start: Function .prototype,
38968
- set_pause: Function .prototype,
38969
- set_resume: Function .prototype,
38970
- set_stop: Function .prototype,
38971
- set_time: Function .prototype,
38941
+ set_loop () { },
38942
+ set_start () { },
38943
+ set_pause () { },
38944
+ set_resume () { },
38945
+ set_stop () { },
38946
+ set_time () { },
38972
38947
  dispose ()
38973
38948
  {
38974
38949
  for (const name of [... this .timeouts .keys ()])
@@ -38999,7 +38974,9 @@ function TimeSensor (executionContext)
38999
38974
 
39000
38975
  this .addType (Base_X3DConstants .TimeSensor);
39001
38976
 
39002
- this .addChildObjects (Base_X3DConstants .inputOutput, "range", new x_ite_Fields .MFFloat (0, 0, 1)); // current, first, last (in fractions) - play range starting at current
38977
+ // Special non-public field:
38978
+ // rangeFraction, rangeStart, rangeEnd (in fractions) - play range starting at rangeFraction
38979
+ this .addChildObjects (Base_X3DConstants .inputOutput, "range", new x_ite_Fields .MFFloat (0, 0, 1));
39003
38980
 
39004
38981
  this .cycle = 0;
39005
38982
  this .interval = 0;
@@ -39035,6 +39012,10 @@ Object .assign (Object .setPrototypeOf (TimeSensor .prototype, Core_X3DSensorNod
39035
39012
  this .fraction = Math_Algorithm .fract (fraction + this .offset);
39036
39013
  this .cycle = currentTime - (this .fraction - this .first) * cycleInterval;
39037
39014
  },
39015
+ getFraction (time)
39016
+ {
39017
+ return this .first + (this .interval ? Math_Algorithm .fract ((time - this .cycle) / this .interval) : 0) * this .scale;
39018
+ },
39038
39019
  set_cycleInterval__ ()
39039
39020
  {
39040
39021
  if (!this ._isActive .getValue ())
@@ -39052,28 +39033,56 @@ Object .assign (Object .setPrototypeOf (TimeSensor .prototype, Core_X3DSensorNod
39052
39033
  if (this ._isPaused .getValue ())
39053
39034
  return;
39054
39035
 
39055
- this .set_fraction (this .getBrowser () .getCurrentTime ());
39036
+ this ._fraction_changed = this .fraction = this .getFraction (this .getBrowser () .getCurrentTime ());
39056
39037
  },
39057
39038
  set_start ()
39058
39039
  {
39040
+ const browser = this .getBrowser ();
39041
+
39042
+ browser .timePrepareEvents () .addInterest ("set_prepare", this);
39043
+ browser .addBrowserEvent ();
39044
+
39059
39045
  this .setRange (this ._range [0], this ._range [1], this ._range [2], true);
39060
39046
 
39061
- const time = this .getBrowser () .getCurrentTime ();
39047
+ const time = browser .getCurrentTime ();
39062
39048
 
39063
39049
  this ._time = time;
39050
+ this ._elapsedTime = 0;
39064
39051
  this ._cycleTime = time;
39065
39052
  this ._fraction_changed = this .fraction;
39053
+ this ._cycleCount = 0;
39054
+ },
39055
+ set_pause ()
39056
+ {
39057
+ this .getBrowser () .timePrepareEvents () .removeInterest ("set_prepare", this);
39066
39058
  },
39067
39059
  set_resume (/* pauseInterval */)
39068
39060
  {
39061
+ const browser = this .getBrowser ();
39062
+
39063
+ browser .timePrepareEvents () .addInterest ("set_prepare", this);
39064
+ browser .addBrowserEvent ();
39065
+
39069
39066
  this .setRange (this .fraction, this ._range [1], this ._range [2], false);
39070
39067
  },
39071
- set_fraction (time)
39068
+ set_stop ()
39069
+ {
39070
+ this .getBrowser () .timePrepareEvents () .removeInterest ("set_prepare", this);
39071
+ },
39072
+ set_prepare ()
39072
39073
  {
39073
- const fraction = this .first + (this .interval ? Math_Algorithm .fract ((time - this .cycle) / this .interval) : 0) * this .scale;
39074
+ const time = this .getBrowser () .getCurrentTime ();
39075
+
39076
+ this ._time = time;
39077
+ this ._elapsedTime = this .getElapsedTime ();
39074
39078
 
39075
- this .fraction = fraction;
39076
- this ._fraction_changed = fraction;
39079
+ if (time - this .cycle < this .interval)
39080
+ return;
39081
+
39082
+ this ._fraction_changed = this .last;
39083
+ this ._cycleCount = this ._cycleCount .getValue () + 1;
39084
+ this ._cycleComplete = true;
39085
+ this ._cycleCompleteTime = time;
39077
39086
  },
39078
39087
  set_time ()
39079
39088
  {
@@ -39081,8 +39090,6 @@ Object .assign (Object .setPrototypeOf (TimeSensor .prototype, Core_X3DSensorNod
39081
39090
 
39082
39091
  const time = this .getBrowser () .getCurrentTime ();
39083
39092
 
39084
- this ._time = time;
39085
-
39086
39093
  if (time - this .cycle >= this .interval)
39087
39094
  {
39088
39095
  if (this ._loop .getValue ())
@@ -39091,27 +39098,18 @@ Object .assign (Object .setPrototypeOf (TimeSensor .prototype, Core_X3DSensorNod
39091
39098
  {
39092
39099
  this .cycle += this .interval * Math .floor ((time - this .cycle) / this .interval);
39093
39100
 
39094
- this ._elapsedTime = this .getElapsedTime ();
39095
- this ._cycleComplete = time;
39096
- this ._cycleTime = time;
39097
-
39098
- this .set_fraction (time);
39101
+ this ._cycleTime = time;
39102
+ this ._fraction_changed = this .fraction = this .getFraction (time);
39099
39103
  }
39100
39104
  }
39101
39105
  else
39102
39106
  {
39103
- this ._elapsedTime = this .getElapsedTime ();
39104
- this ._cycleComplete = time;
39105
- this ._fraction_changed = this .fraction = this .last;
39106
-
39107
39107
  this .stop ();
39108
39108
  }
39109
39109
  }
39110
39110
  else
39111
39111
  {
39112
- this ._elapsedTime = this .getElapsedTime ();
39113
-
39114
- this .set_fraction (time);
39112
+ this ._fraction_changed = this .fraction = this .getFraction (time);
39115
39113
  }
39116
39114
  },
39117
39115
  dispose ()
@@ -39127,22 +39125,24 @@ Object .defineProperties (TimeSensor,
39127
39125
  fieldDefinitions:
39128
39126
  {
39129
39127
  value: new Base_FieldDefinitionArray ([
39130
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
39131
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
39132
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
39133
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "cycleInterval", new x_ite_Fields .SFTime (1)),
39134
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ()),
39135
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime (0)),
39136
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime (0)),
39137
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "pauseTime", new x_ite_Fields .SFTime (0)),
39138
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "stopTime", new x_ite_Fields .SFTime (0)),
39139
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isPaused", new x_ite_Fields .SFBool ()),
39140
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isActive", new x_ite_Fields .SFBool ()),
39141
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleTime", new x_ite_Fields .SFTime ()),
39142
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleComplete", new x_ite_Fields .SFTime ()),
39143
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "elapsedTime", new x_ite_Fields .SFTime ()),
39144
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "fraction_changed", new x_ite_Fields .SFFloat ()),
39145
- new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "time", new x_ite_Fields .SFTime ()),
39128
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "metadata", new x_ite_Fields .SFNode ()),
39129
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "description", new x_ite_Fields .SFString ()),
39130
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "enabled", new x_ite_Fields .SFBool (true)),
39131
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "cycleInterval", new x_ite_Fields .SFTime (1)),
39132
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ()),
39133
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime (0)),
39134
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime (0)),
39135
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "pauseTime", new x_ite_Fields .SFTime (0)),
39136
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "stopTime", new x_ite_Fields .SFTime (0)),
39137
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isPaused", new x_ite_Fields .SFBool ()),
39138
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "isActive", new x_ite_Fields .SFBool ()),
39139
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleTime", new x_ite_Fields .SFTime ()),
39140
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleComplete", new x_ite_Fields .SFBool ()), // experimental
39141
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleCompleteTime", new x_ite_Fields .SFTime ()), // experimental
39142
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "cycleCount", new x_ite_Fields .SFInt32 ()), // experimental
39143
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "fraction_changed", new x_ite_Fields .SFFloat ()),
39144
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "elapsedTime", new x_ite_Fields .SFTime ()),
39145
+ new Base_X3DFieldDefinition (Base_X3DConstants .outputOnly, "time", new x_ite_Fields .SFTime ()),
39146
39146
  ]),
39147
39147
  enumerable: true,
39148
39148
  },
@@ -46540,7 +46540,7 @@ Object .assign (Object .setPrototypeOf (STLBParser .prototype, Parser_X3DParser
46540
46540
  },
46541
46541
  header ()
46542
46542
  {
46543
- const header = helper.decodeText (this .arrayBuffer .slice (0, 80)) .trim ();
46543
+ const header = helper.decodeText (this .arrayBuffer .slice (0, 80)) .replace (/\u0000.*$/, "") .trim ();
46544
46544
 
46545
46545
  if (!header)
46546
46546
  return;
@@ -46724,7 +46724,8 @@ Object .assign (Object .setPrototypeOf (PLYAParser .prototype, Parser_X3DParser
46724
46724
  {
46725
46725
  const value = this .result [0] .trim ();
46726
46726
 
46727
- this .comments .push (value);
46727
+ if (value)
46728
+ this .comments .push (value);
46728
46729
 
46729
46730
  this .mustRotateAxes ||= !! value .match (/\b(?:Blender|Artec|Polycam)\b/i);
46730
46731
 
@@ -47936,7 +47937,7 @@ const Bezier_default_ = Bezier;
47936
47937
 
47937
47938
  /* harmony default export */ const Algorithms_Bezier = (x_ite_Namespace .add ("Bezier", Bezier_default_));
47938
47939
  ;// ./src/x_ite/Parser/SVGParser.js
47939
- /* provided dependency */ var SVGParser_libtess = __webpack_require__(643);
47940
+ /* provided dependency */ var SVGParser_libtess = __webpack_require__(780);
47940
47941
 
47941
47942
 
47942
47943
 
@@ -50719,11 +50720,6 @@ class GoldenGate extends Parser_X3DParser
50719
50720
  return this .#parsers .slice ();
50720
50721
  }
50721
50722
 
50722
- /**
50723
- * @deprecated Use `GoldenGate.add/remove/getParsers`.
50724
- */
50725
- static get Parser () { return this .#parsers; }
50726
-
50727
50723
  parseIntoScene (x3dSyntax, resolve, reject)
50728
50724
  {
50729
50725
  for (const Parser of GoldenGate .#parsers)
@@ -50771,14 +50767,7 @@ class GoldenGate extends Parser_X3DParser
50771
50767
  }
50772
50768
  else
50773
50769
  {
50774
- if (this .#inputs .has (encoding))
50775
- return this .#inputs .get (encoding);
50776
-
50777
- const input = this .createInput (encoding, x3dSyntax);
50778
-
50779
- this .#inputs .set (encoding, input);
50780
-
50781
- return input;
50770
+ return this .#inputs .getOrInsertComputed (encoding, () => this .createInput (encoding, x3dSyntax));
50782
50771
  }
50783
50772
  }
50784
50773
 
@@ -50790,7 +50779,7 @@ class GoldenGate extends Parser_X3DParser
50790
50779
  {
50791
50780
  case "STRING":
50792
50781
  {
50793
- const string = helper.decodeText (x3dSyntax);;
50782
+ const string = helper.decodeText (x3dSyntax);
50794
50783
 
50795
50784
  if (x3dSyntax instanceof ArrayBuffer)
50796
50785
  {
@@ -52058,7 +52047,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52058
52047
  if (this [_disposed])
52059
52048
  return;
52060
52049
 
52061
- let firstError, secondError;
52050
+ const errors = [ ];
52062
52051
 
52063
52052
  try
52064
52053
  {
@@ -52070,7 +52059,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52070
52059
  }
52071
52060
  catch (error)
52072
52061
  {
52073
- firstError = error;
52062
+ errors .push (error);
52074
52063
  }
52075
52064
 
52076
52065
  try
@@ -52083,19 +52072,12 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52083
52072
  }
52084
52073
  catch (error)
52085
52074
  {
52086
- secondError = error;
52075
+ errors .push (error);
52087
52076
  }
52088
52077
 
52089
52078
  if (this [_sourceField] && this [_destinationField])
52090
52079
  {
52091
- if (this [_sourceField] .getType () !== this [_destinationField] .getType ())
52092
- throw new Error (`Bad ROUTE statement: Source field type must match destination field type of fields named "${this [_sourceField] .getName ()}" and "${this [_destinationField] .getName ()}".`);
52093
-
52094
- if (!this [_sourceField] .isOutput ())
52095
- throw new Error (`Bad ROUTE statement: Source field "${this [_sourceField] .getName ()}" must be an output.`);
52096
-
52097
- if (!this [_destinationField] .isInput ())
52098
- throw new Error (`Bad ROUTE statement: Destination field "${this [_destinationField] .getName ()}" must be an input.`);
52080
+ X3DRoute .checkFields (this [_sourceField], this [_destinationField]);
52099
52081
 
52100
52082
  this [_sourceField] .addOutputRoute (this);
52101
52083
  this [_destinationField] .addInputRoute (this);
@@ -52103,7 +52085,7 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52103
52085
  }
52104
52086
  else
52105
52087
  {
52106
- throw firstError ?? secondError;
52088
+ throw new AggregateError (errors, "Couldn't connect route.");
52107
52089
  }
52108
52090
  },
52109
52091
  disconnect ()
@@ -52111,8 +52093,8 @@ Object .assign (Object .setPrototypeOf (X3DRoute .prototype, Base_X3DObject .pro
52111
52093
  this [_sourceField] ?.removeOutputRoute (this);
52112
52094
  this [_destinationField] ?.removeInputRoute (this);
52113
52095
 
52114
- if (this [_sourceField] && this [_destinationField])
52115
- this [_sourceField] .removeFieldInterest (this [_destinationField]);
52096
+ if (this [_destinationField])
52097
+ this [_sourceField] ?.removeFieldInterest (this [_destinationField]);
52116
52098
 
52117
52099
  this [_sourceField] = null;
52118
52100
  this [_destinationField] = null;
@@ -52273,6 +52255,8 @@ Object .assign (X3DRoute,
52273
52255
  ? destinationNode .getField (destinationFieldName)
52274
52256
  : helper.try (() => destinationNode .getExportedNode () .getField (destinationFieldName));
52275
52257
 
52258
+ X3DRoute .checkFields (sourceField, destinationField);
52259
+
52276
52260
  if (sourceField)
52277
52261
  {
52278
52262
  sourceFieldName = sourceField .getName ();
@@ -52291,6 +52275,26 @@ Object .assign (X3DRoute,
52291
52275
 
52292
52276
  return `${sourceNode .getId ()}.${sourceFieldName}.${destinationNode .getId ()}.${destinationFieldName}`;
52293
52277
  },
52278
+ checkFields (sourceField, destinationField)
52279
+ {
52280
+ if (sourceField && destinationField)
52281
+ {
52282
+ if (sourceField .getType () !== destinationField .getType ())
52283
+ throw new Error (`Bad ROUTE specification: source field type must match destination field type of fields named "${sourceField .getName ()}" and "${destinationField .getName ()}".`);
52284
+ }
52285
+
52286
+ if (sourceField)
52287
+ {
52288
+ if (!sourceField .isOutput ())
52289
+ throw new Error (`Bad ROUTE specification: source field "${sourceField .getName ()}" must be an output.`);
52290
+ }
52291
+
52292
+ if (destinationField)
52293
+ {
52294
+ if (!destinationField .isInput ())
52295
+ throw new Error (`Bad ROUTE specification: destination field "${destinationField .getName ()}" must be an input.`);
52296
+ }
52297
+ },
52294
52298
  });
52295
52299
 
52296
52300
  const X3DRoute_default_ = X3DRoute;
@@ -52939,54 +52943,47 @@ Object .assign (Object .setPrototypeOf (X3DExecutionContext .prototype, Base_X3D
52939
52943
  },
52940
52944
  addRoute (sourceNode, sourceField, destinationNode, destinationField)
52941
52945
  {
52942
- try
52943
- {
52944
- // Normalize arguments.
52945
-
52946
- const
52947
- importedSourceNode = sourceNode instanceof Execution_X3DImportedNode ? sourceNode : null,
52948
- importedDestinationNode = destinationNode instanceof Execution_X3DImportedNode ? destinationNode : null;
52949
-
52950
- sourceNode = Base_X3DCast (Base_X3DConstants .X3DNode, sourceNode, false) ?? importedSourceNode;
52951
- sourceField = String (sourceField);
52952
- destinationNode = Base_X3DCast (Base_X3DConstants .X3DNode, destinationNode, false) ?? importedDestinationNode;
52953
- destinationField = String (destinationField);
52946
+ // Normalize arguments.
52954
52947
 
52955
- // Check nodes.
52948
+ const
52949
+ importedSourceNode = sourceNode instanceof Execution_X3DImportedNode ? sourceNode : null,
52950
+ importedDestinationNode = destinationNode instanceof Execution_X3DImportedNode ? destinationNode : null;
52956
52951
 
52957
- if (!sourceNode)
52958
- throw new Error ("source node must be of type X3DNode.");
52952
+ sourceNode = Base_X3DCast (Base_X3DConstants .X3DNode, sourceNode, false) ?? importedSourceNode;
52953
+ sourceField = String (sourceField);
52954
+ destinationNode = Base_X3DCast (Base_X3DConstants .X3DNode, destinationNode, false) ?? importedDestinationNode;
52955
+ destinationField = String (destinationField);
52959
52956
 
52960
- if (!destinationNode)
52961
- throw new Error ("destination node must be of type X3DNode.");
52957
+ // Check nodes.
52962
52958
 
52963
- // Resolve imported source and destination node.
52959
+ if (!sourceNode)
52960
+ throw new Error ("Bad ROUTE specification: source node must be of type X3DNode.");
52964
52961
 
52965
- sourceNode = this .getLocalizedNode (sourceNode);
52966
- destinationNode = this .getLocalizedNode (destinationNode);
52962
+ if (!destinationNode)
52963
+ throw new Error ("Bad ROUTE specification: destination node must be of type X3DNode.");
52967
52964
 
52968
- // Add route.
52965
+ // Resolve imported source and destination node.
52969
52966
 
52970
- const
52971
- id = Routing_X3DRoute .getRouteId (sourceNode, sourceField, destinationNode, destinationField),
52972
- route = this [_routes] .get (id);
52967
+ sourceNode = this .getLocalizedNode (sourceNode);
52968
+ destinationNode = this .getLocalizedNode (destinationNode);
52973
52969
 
52974
- if (route)
52975
- {
52976
- return route;
52977
- }
52978
- else
52979
- {
52980
- const route = new Routing_X3DRoute (this, sourceNode, sourceField, destinationNode, destinationField);
52970
+ // Add route.
52981
52971
 
52982
- this [_routes] .add (id, route);
52972
+ const
52973
+ id = Routing_X3DRoute .getRouteId (sourceNode, sourceField, destinationNode, destinationField),
52974
+ route = this [_routes] .get (id);
52983
52975
 
52984
- return route;
52985
- }
52976
+ if (route)
52977
+ {
52978
+ return route;
52986
52979
  }
52987
- catch (error)
52980
+ else
52988
52981
  {
52989
- throw new Error (`Bad ROUTE specification.`, { cause: error });
52982
+ const route = new Routing_X3DRoute (this, sourceNode, sourceField, destinationNode, destinationField);
52983
+
52984
+ this [_routes] .add (id, route);
52985
+
52986
+ return route;
52990
52987
  }
52991
52988
  },
52992
52989
  deleteRoute (route)
@@ -54656,9 +54653,9 @@ function X3DCoreContext (element)
54656
54653
  <div class="x_ite-private-browser" part="browser" tabindex="0">
54657
54654
  <div class="x_ite-private-surface" part="surface">
54658
54655
  <canvas class="x_ite-private-canvas" part="canvas"></canvas>
54659
- <div class="x_ite-private-buttons" part="buttons"></div>
54656
+ <div class="x_ite-private-buttons x_ite-private-fade" part="buttons"></div>
54660
54657
  </div>
54661
- <div class="x_ite-private-splash-screen x_ite-private-hidden">
54658
+ <div class="x_ite-private-splash-screen x_ite-private-fade x_ite-private-hidden">
54662
54659
  <div class="x_ite-private-spinner"></div>
54663
54660
  <div class="x_ite-private-progress">
54664
54661
  <div class="x_ite-private-x_ite">
@@ -54682,7 +54679,7 @@ function X3DCoreContext (element)
54682
54679
  {
54683
54680
  const link = document .createElement ("link");
54684
54681
 
54685
- link .integrity = "sha384-dhnoOI+clBqqFYGBrUCL7KhjerG/JEhXRHWvaNS1qEwbCU/f0MWYgFRQj2esJwbi";
54682
+ link .integrity = "sha384-/SECsklivyOEI8wp6xcDS0QDczGbqmxoaXDzSZCmJLpGmYfD16XJmOZr0O2QNDmj";
54686
54683
  link .rel = "stylesheet";
54687
54684
  link .crossOrigin = "anonymous";
54688
54685
  link .onload = resolve;
@@ -54981,12 +54978,7 @@ Object .assign (X3DCoreContext .prototype,
54981
54978
  this .setBrowserOption ("SplashScreen", this .parseBooleanAttribute (newValue) ?? true);
54982
54979
 
54983
54980
  if (!this .getBrowserOption ("SplashScreen"))
54984
- {
54985
- this .getCanvas () .style .display = "block";
54986
-
54987
- this .getSplashScreen () .classList .remove ("x_ite-private-fade-out-splash-screen");
54988
54981
  this .getSplashScreen () .classList .add ("x_ite-private-hidden");
54989
- }
54990
54982
 
54991
54983
  break;
54992
54984
  }
@@ -64154,7 +64146,7 @@ Object .assign (X3DNetworkingContext .prototype,
64154
64146
  {
64155
64147
  this .getContextMenu () .hide ();
64156
64148
  this .getCanvas () .style .display = "none";
64157
- this .getSplashScreen () .classList .remove ("x_ite-private-fade-out-splash-screen", "x_ite-private-hidden");
64149
+ this .getSplashScreen () .classList .remove ("x_ite-private-hidden");
64158
64150
  }
64159
64151
  }
64160
64152
  else
@@ -64169,7 +64161,7 @@ Object .assign (X3DNetworkingContext .prototype,
64169
64161
  setTimeout (() =>
64170
64162
  {
64171
64163
  if (!this [_browserLoading])
64172
- this .getSplashScreen () .classList .add ("x_ite-private-fade-out-splash-screen");
64164
+ this .getSplashScreen () .classList .add ("x_ite-private-hidden");
64173
64165
  });
64174
64166
  }
64175
64167
  }
@@ -64416,12 +64408,11 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64416
64408
  {
64417
64409
  const surface = this .getBrowser () .getSurface ();
64418
64410
 
64419
- helper.on (this, surface, "mousedown", event => this .mousedown (event));
64420
- helper.on (this, surface, "mouseup", event => this .mouseup (event));
64421
- helper.on (this, surface, "dblclick", event => this .dblclick (event));
64422
- helper.on (this, surface, "mousemove", event => this .mousemove (event));
64423
- helper.on (this, surface, "mouseenter", event => this .onmouseenter (event));
64424
- helper.on (this, surface, "mouseout", event => this .onmouseout (event));
64411
+ helper.on (this, surface, "mousedown", event => this .mousedown (event));
64412
+ helper.on (this, surface, "mouseup", event => this .mouseup (event));
64413
+ helper.on (this, surface, "dblclick", event => this .dblclick (event));
64414
+ helper.on (this, surface, "mousemove", event => this .mousemove (event));
64415
+ helper.on (this, surface, "mouseout", event => this .onmouseout (event));
64425
64416
 
64426
64417
  helper.on (this, surface, "touchstart", event => this .touchstart (event));
64427
64418
  helper.on (this, surface, "touchend", event => this .touchend (event));
@@ -64432,6 +64423,8 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64432
64423
  browser = this .getBrowser (),
64433
64424
  surface = browser .getSurface ();
64434
64425
 
64426
+ browser .getElement () .focus ({ preventScroll: true });
64427
+
64435
64428
  if (browser .getShiftKey () && (browser .getControlKey () || browser .getCommandKey ()))
64436
64429
  return;
64437
64430
 
@@ -64612,10 +64605,6 @@ Object .assign (Object .setPrototypeOf (PointingDevice .prototype, Base_X3DBaseN
64612
64605
  else
64613
64606
  browser .setCursor (this .grabbing && move ? "GRABBING" : "DEFAULT");
64614
64607
  },
64615
- onmouseenter ()
64616
- {
64617
- this .getBrowser () .getElement () .focus ({ preventScroll: true });
64618
- },
64619
64608
  onmouseout ()
64620
64609
  {
64621
64610
  this .getBrowser () .leaveNotifyEvent ();
@@ -66125,10 +66114,16 @@ Object .assign (X3DRenderingContext .prototype,
66125
66114
  {
66126
66115
  return Utility_Lock .acquire (this [_buttonLock], async () =>
66127
66116
  {
66128
- this .getSurface () .querySelector (".x_ite-private-xr-button") ?.remove ();
66129
66117
 
66130
66118
  if (!await this .xrCheckSupport ())
66119
+ {
66120
+ const button = this .getSurface () .querySelector (".x_ite-private-xr-button");
66121
+
66122
+ if (button)
66123
+ button .classList .add ("x_ite-private-hidden");
66124
+
66131
66125
  return;
66126
+ }
66132
66127
 
66133
66128
  await this .loadComponents (this .getComponent ("WebXR"), this .getComponent ("Geometry2D"));
66134
66129
 
@@ -71911,7 +71906,6 @@ const PeriodicWave_default_ = PeriodicWave;
71911
71906
 
71912
71907
 
71913
71908
 
71914
-
71915
71909
  const
71916
71910
  _audioContext = Symbol (),
71917
71911
  _soundDestinationNodes = Symbol (),
@@ -72022,7 +72016,7 @@ Object .assign (X3DSoundContext .prototype,
72022
72016
  noSoundButton = document .createElement ("div"),
72023
72017
  startAudioElements = () => this .startAudioElements ();
72024
72018
 
72025
- noSoundButton .classList .add ("x_ite-private-no-sound-button", "x_ite-private-button");
72019
+ noSoundButton .classList .add ("x_ite-private-no-sound-button", "x_ite-private-button", "x_ite-private-fade");
72026
72020
  noSoundButton .part ?.add ("no-sound-button");
72027
72021
 
72028
72022
  noSoundButton .title = gettext("Activate sound.");
@@ -72034,24 +72028,12 @@ Object .assign (X3DSoundContext .prototype,
72034
72028
  return noSoundButton;
72035
72029
  })();
72036
72030
 
72037
- const
72038
- count = !! this [_audioElements] .size,
72039
- fade = count ? "x_ite-private-fade-in-300" : "x_ite-private-fade-out-300";
72031
+ const count = !! this [_audioElements] .size;
72040
72032
 
72041
72033
  if (count)
72042
- this [_noSoundButton] .style .display = "";
72043
-
72044
- this [_noSoundButton] .classList .add (fade);
72045
-
72046
- await helper.sleep (400);
72047
-
72048
- this [_noSoundButton] .classList .remove (fade);
72049
-
72050
- if (count !== !! this [_audioElements] .size)
72051
- return;
72052
-
72053
- if (!count)
72054
- this [_noSoundButton] .style .display = "none";
72034
+ this [_noSoundButton] .classList .remove ("x_ite-private-hidden");
72035
+ else
72036
+ this [_noSoundButton] .classList .add ("x_ite-private-hidden");
72055
72037
  },
72056
72038
  200);
72057
72039
  },
@@ -72995,15 +72977,16 @@ function X3DBrowserContext (element)
72995
72977
  for (const browserContext of browserContexts)
72996
72978
  browserContext .call (this, element);
72997
72979
 
72998
- this .addChildObjects (Base_X3DConstants .outputOnly, "initialized", new x_ite_Fields .SFTime (),
72999
- Base_X3DConstants .outputOnly, "shutdown", new x_ite_Fields .SFTime (),
73000
- Base_X3DConstants .outputOnly, "prepareEvents", new x_ite_Fields .SFTime (),
73001
- Base_X3DConstants .outputOnly, "timeEvents", new x_ite_Fields .SFTime (),
73002
- Base_X3DConstants .outputOnly, "cameraEvents", new x_ite_Fields .SFTime (),
73003
- Base_X3DConstants .outputOnly, "sensorEvents", new x_ite_Fields .SFTime (),
73004
- Base_X3DConstants .outputOnly, "displayEvents", new x_ite_Fields .SFTime (),
73005
- Base_X3DConstants .outputOnly, "finishedEvents", new x_ite_Fields .SFTime (),
73006
- Base_X3DConstants .outputOnly, "endEvents", new x_ite_Fields .SFTime ());
72980
+ this .addChildObjects (Base_X3DConstants .outputOnly, "initialized", new x_ite_Fields .SFTime (),
72981
+ Base_X3DConstants .outputOnly, "shutdown", new x_ite_Fields .SFTime (),
72982
+ Base_X3DConstants .outputOnly, "prepareEvents", new x_ite_Fields .SFTime (),
72983
+ Base_X3DConstants .outputOnly, "timePrepareEvents", new x_ite_Fields .SFTime (),
72984
+ Base_X3DConstants .outputOnly, "timeEvents", new x_ite_Fields .SFTime (),
72985
+ Base_X3DConstants .outputOnly, "cameraEvents", new x_ite_Fields .SFTime (),
72986
+ Base_X3DConstants .outputOnly, "sensorEvents", new x_ite_Fields .SFTime (),
72987
+ Base_X3DConstants .outputOnly, "displayEvents", new x_ite_Fields .SFTime (),
72988
+ Base_X3DConstants .outputOnly, "finishedEvents", new x_ite_Fields .SFTime (),
72989
+ Base_X3DConstants .outputOnly, "endEvents", new x_ite_Fields .SFTime ());
73007
72990
 
73008
72991
  this [X3DBrowserContext_tainted] = false;
73009
72992
  this [_previousTime] = 0;
@@ -73037,6 +73020,10 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73037
73020
  {
73038
73021
  return this ._prepareEvents;
73039
73022
  },
73023
+ timePrepareEvents ()
73024
+ {
73025
+ return this ._timePrepareEvents;
73026
+ },
73040
73027
  timeEvents ()
73041
73028
  {
73042
73029
  return this ._timeEvents;
@@ -73140,6 +73127,9 @@ Object .assign (Object .setPrototypeOf (X3DBrowserContext .prototype, Base_X3DBa
73140
73127
  this .addTaintedField (this ._prepareEvents);
73141
73128
  this [X3DBrowserContext_processEvents] ();
73142
73129
 
73130
+ this .addTaintedField (this ._timePrepareEvents);
73131
+ this [X3DBrowserContext_processEvents] ();
73132
+
73143
73133
  this .addTaintedField (this ._timeEvents);
73144
73134
  this [X3DBrowserContext_processEvents] ();
73145
73135
 
@@ -84029,7 +84019,9 @@ const Inline_default_ = Inline;
84029
84019
  * THIS NODE IS STILL EXPERIMENTAL.
84030
84020
  */
84031
84021
 
84032
- const InlineGeometry_cache = Symbol .for ("X_ITE.cache");
84022
+ const
84023
+ InlineGeometry_cache = Symbol .for ("X_ITE.cache"),
84024
+ _lock = Symbol ();
84033
84025
 
84034
84026
  function InlineGeometry (executionContext)
84035
84027
  {
@@ -84060,43 +84052,54 @@ Object .assign (Object .setPrototypeOf (InlineGeometry .prototype, Rendering_X3D
84060
84052
  },
84061
84053
  set_solid__ ()
84062
84054
  {
84063
- if (!this .geometryNode)
84055
+ const { geometryNode } = this;
84056
+
84057
+ if (!geometryNode)
84064
84058
  return;
84065
84059
 
84066
- if (this .geometryNode .getGeometryType () < 2)
84060
+ if (geometryNode .getGeometryType () < 2)
84067
84061
  return;
84068
84062
 
84069
- this .geometryNode ._solid = this ._solid;
84063
+ geometryNode ._solid = this ._solid;
84070
84064
  },
84071
84065
  set_smooth__ ()
84072
84066
  {
84073
- if (!this .geometryNode)
84067
+ const { geometryNode } = this;
84068
+
84069
+ if (!geometryNode)
84070
+ return;
84071
+
84072
+ if (geometryNode .getGeometryType () < 3)
84074
84073
  return;
84075
84074
 
84076
- if (this .geometryNode .getGeometryType () < 2)
84075
+ if (geometryNode ._normal ?.getValue ())
84077
84076
  return;
84078
84077
 
84079
84078
  const smooth = this ._smooth .getValue ();
84080
84079
 
84081
- if (this .geometryNode ._creaseAngle)
84080
+ if (geometryNode ._creaseAngle)
84082
84081
  {
84083
84082
  const creaseAngle = smooth ? Math .PI : 0;
84084
84083
 
84085
- if (this .geometryNode ._creaseAngle .equals (creaseAngle))
84084
+ if (geometryNode ._creaseAngle .equals (creaseAngle))
84086
84085
  return;
84087
84086
 
84088
- this .geometryNode ._creaseAngle = creaseAngle;
84087
+ geometryNode ._creaseAngle = creaseAngle;
84089
84088
  }
84090
- else if (this .geometryNode ._normal && !this .geometryNode ._normal .getValue ())
84089
+
84090
+ if (geometryNode ._normalPerVertex)
84091
84091
  {
84092
- if (this .geometryNode ._normalPerVertex .equals (smooth))
84092
+ if (geometryNode ._normalPerVertex .equals (smooth))
84093
84093
  return;
84094
84094
 
84095
- this .geometryNode ._normalPerVertex = smooth;
84095
+ geometryNode ._normalPerVertex = smooth;
84096
84096
  }
84097
84097
  },
84098
84098
  unloadData ()
84099
84099
  {
84100
+ if (this .geometryNode)
84101
+ this .geometryNode [_lock] = false;
84102
+
84100
84103
  this .fileLoader ?.abort ();
84101
84104
  this .setInternalScene (null);
84102
84105
  },
@@ -84104,6 +84107,9 @@ Object .assign (Object .setPrototypeOf (InlineGeometry .prototype, Rendering_X3D
84104
84107
  {
84105
84108
  const cache = this .getBrowser () .getBrowserOption ("Cache");
84106
84109
 
84110
+ if (this .geometryNode)
84111
+ this .geometryNode [_lock] = false;
84112
+
84107
84113
  this .fileLoader ?.abort ();
84108
84114
 
84109
84115
  this .fileLoader = new InputOutput_FileLoader (this, { cacheScene: cache })
@@ -84113,13 +84119,8 @@ Object .assign (Object .setPrototypeOf (InlineGeometry .prototype, Rendering_X3D
84113
84119
  {
84114
84120
  // Remove old scene.
84115
84121
 
84116
- if (this .scene)
84117
- {
84118
- this .getLive () .removeFieldInterest (this .scene .getLive ());
84119
-
84120
- if (!this .scene [InlineGeometry_cache])
84121
- this .scene .dispose ();
84122
- }
84122
+ if (!this .scene ?.[InlineGeometry_cache])
84123
+ this .scene ?.dispose ();
84123
84124
 
84124
84125
  // Set new scene.
84125
84126
 
@@ -84139,6 +84140,19 @@ Object .assign (Object .setPrototypeOf (InlineGeometry .prototype, Rendering_X3D
84139
84140
  if (!this .geometryNode)
84140
84141
  throw new Error ("No X3DGeometryNode found.");
84141
84142
 
84143
+ if (this .geometryNode [_lock])
84144
+ {
84145
+ this .geometryNode = this .geometryNode .copy (this .getExecutionContext ());
84146
+
84147
+ this .geometryNode .setup ();
84148
+
84149
+ // TODO: add routes.
84150
+ }
84151
+ else
84152
+ {
84153
+ this .geometryNode [_lock] = true;
84154
+ }
84155
+
84142
84156
  this .scene .setExecutionContext (scene [InlineGeometry_cache] ? browser .getDefaultScene () : this .getExecutionContext ());
84143
84157
  this .scene .setLive (true);
84144
84158
 
@@ -84220,6 +84234,9 @@ Object .assign (Object .setPrototypeOf (InlineGeometry .prototype, Rendering_X3D
84220
84234
  { },
84221
84235
  dispose ()
84222
84236
  {
84237
+ if (this .geometryNode)
84238
+ this .geometryNode [_lock] = false;
84239
+
84223
84240
  Networking_X3DUrlObject .prototype .dispose .call (this);
84224
84241
  Rendering_X3DGeometryNode .prototype .dispose .call (this);
84225
84242
  },
@@ -87872,6 +87889,10 @@ Object .assign (Object .setPrototypeOf (X3DSoundProcessingNode .prototype, Sound
87872
87889
  for (const childNode of this .childNodes)
87873
87890
  childNode .getAudioSource () .connect (this .audioDestination);
87874
87891
  },
87892
+ set_start ()
87893
+ {
87894
+ this ._elapsedTime = 0;
87895
+ },
87875
87896
  set_time ()
87876
87897
  {
87877
87898
  this ._elapsedTime = this .getElapsedTime ();
@@ -88125,6 +88146,8 @@ Object .assign (Object .setPrototypeOf (X3DSoundSourceNode .prototype, Sound_X3D
88125
88146
  if (!this .mediaElement)
88126
88147
  return;
88127
88148
 
88149
+ this ._elapsedTime = 0;
88150
+
88128
88151
  this .mediaElement .currentTime = 0;
88129
88152
 
88130
88153
  this .getBrowser () .startAudioElement (this .mediaElement);
@@ -88680,7 +88703,10 @@ Object .assign (Object .setPrototypeOf (AudioDestination .prototype, Sound_X3DSo
88680
88703
  },
88681
88704
  set_mediaDeviceID_impl__ ()
88682
88705
  {
88683
- const sinkId = this ._mediaDeviceID .getValue () || "default";
88706
+ const sinkId = this ._mediaDeviceID .getValue ();
88707
+
88708
+ if (this .audioElement .sinkId === sinkId)
88709
+ return Promise .resolve ();
88684
88710
 
88685
88711
  return this .audioElement .setSinkId ?.(sinkId) ?? Promise .resolve ();
88686
88712
  },
@@ -89028,12 +89054,12 @@ Object .defineProperties (BufferAudioSource,
89028
89054
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "gain", new x_ite_Fields .SFFloat (1)),
89029
89055
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "detune", new x_ite_Fields .SFFloat ()),
89030
89056
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "playbackRate", new x_ite_Fields .SFFloat (1)),
89031
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopStart", new x_ite_Fields .SFTime (0)),
89032
- new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopEnd", new x_ite_Fields .SFTime (0)),
89033
89057
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCount", new x_ite_Fields .SFInt32 ()), // skip test
89034
89058
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelCountMode", new x_ite_Fields .SFString ("MAX")),
89035
89059
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "channelInterpretation", new x_ite_Fields .SFString ("SPEAKERS")),
89036
89060
 
89061
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopStart", new x_ite_Fields .SFTime (0)),
89062
+ new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loopEnd", new x_ite_Fields .SFTime (0)),
89037
89063
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "loop", new x_ite_Fields .SFBool ()),
89038
89064
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "startTime", new x_ite_Fields .SFTime (0)),
89039
89065
  new Base_X3DFieldDefinition (Base_X3DConstants .inputOutput, "resumeTime", new x_ite_Fields .SFTime (0)),
@@ -90071,6 +90097,8 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
90071
90097
 
90072
90098
  this .mediaStreamAudioSourceNode = new MediaStreamAudioSourceNode (audioContext, { mediaStream });
90073
90099
 
90100
+ this ._elapsedTime = 0;
90101
+
90074
90102
  if (this ._isActive .getValue ())
90075
90103
  {
90076
90104
  if (this ._isPaused .getValue () || !this .getLive () .getValue ())
@@ -90142,6 +90170,9 @@ Object .assign (Object .setPrototypeOf (MicrophoneSource .prototype, Sound_X3DSo
90142
90170
  },
90143
90171
  set_time ()
90144
90172
  {
90173
+ if (!this .mediaStreamAudioSourceNode)
90174
+ return;
90175
+
90145
90176
  this ._elapsedTime = this .getElapsedTime ();
90146
90177
  },
90147
90178
  });
@@ -90210,7 +90241,7 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90210
90241
  if (!this .oscillatorNode)
90211
90242
  return;
90212
90243
 
90213
- this .oscillatorNode .detune .value = Math .max (this ._detune .getValue (), 0);
90244
+ this .oscillatorNode .detune .value = this ._detune .getValue ();
90214
90245
  },
90215
90246
  set_frequency__ ()
90216
90247
  {
@@ -90278,12 +90309,15 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90278
90309
 
90279
90310
  this .oscillatorNode = new OscillatorNode (audioContext);
90280
90311
 
90312
+ this .set_gain__ ();
90281
90313
  this .set_detune__ ();
90282
90314
  this .set_frequency__ ();
90283
90315
  this .set_type__ ();
90284
90316
 
90285
90317
  this .oscillatorNode .connect (this .getAudioSource ());
90286
90318
  this .oscillatorNode .start ();
90319
+
90320
+ this ._elapsedTime = 0;
90287
90321
  },
90288
90322
  set_pause ()
90289
90323
  {
@@ -90295,8 +90329,16 @@ Object .assign (Object .setPrototypeOf (OscillatorSource .prototype, Sound_X3DSo
90295
90329
  },
90296
90330
  set_stop ()
90297
90331
  {
90298
- this .oscillatorNode .stop ();
90299
- this .oscillatorNode .disconnect ();
90332
+ const
90333
+ audioContext = this .getBrowser () .getAudioContext (),
90334
+ gainNode = this .getAudioSource (),
90335
+ now = audioContext .currentTime,
90336
+ fadeDuration = 0.03;
90337
+
90338
+ gainNode .gain .setValueAtTime (gainNode .gain .value, now);
90339
+ gainNode .gain .exponentialRampToValueAtTime (1e-3, now + fadeDuration);
90340
+
90341
+ this .oscillatorNode .stop (now + fadeDuration);
90300
90342
  },
90301
90343
  set_time ()
90302
90344
  {
@@ -90457,6 +90499,9 @@ Object .assign (Object .setPrototypeOf (Sound .prototype, Sound_X3DSoundNode .pr
90457
90499
  },
90458
90500
  setGain (gain, pan = 0.5, rotation = 0)
90459
90501
  {
90502
+ // Given a pan value, left and right channel levels can be obtained using the equations from:
90503
+ // https://www.web3d.org/documents/specifications/19775-1/V4.0/index.html
90504
+
90460
90505
  const
90461
90506
  panLeft = 1 - pan ** 2,
90462
90507
  panRight = 1 - (1 - pan) ** 2,
@@ -91335,7 +91380,7 @@ function GifMedia (gif, movieTexture)
91335
91380
  if (!loop && cycle < this .cycle)
91336
91381
  return this .duration;
91337
91382
 
91338
- return (movieTexture ._elapsedTime * playbackRate) % this .duration;
91383
+ return (movieTexture ._elapsedTime .getValue () * playbackRate) % this .duration;
91339
91384
  },
91340
91385
  set: Function .prototype,
91341
91386
  },
@@ -91362,7 +91407,7 @@ function GifMedia (gif, movieTexture)
91362
91407
  {
91363
91408
  get ()
91364
91409
  {
91365
- return Math .floor (movieTexture ._elapsedTime / this .duration);
91410
+ return Math .floor (movieTexture ._elapsedTime .getValue () / this .duration);
91366
91411
  },
91367
91412
  },
91368
91413
  currentFrame:
@@ -91456,7 +91501,7 @@ async function PNGMedia (apng, movieTexture)
91456
91501
  {
91457
91502
  get ()
91458
91503
  {
91459
- return Math .floor (movieTexture ._elapsedTime / this .duration);
91504
+ return Math .floor (movieTexture ._elapsedTime .getValue () / this .duration);
91460
91505
  },
91461
91506
  },
91462
91507
  currentFrame:
@@ -91501,8 +91546,8 @@ const PNGMedia_default_ = PNGMedia;
91501
91546
 
91502
91547
  /* harmony default export */ const Texturing_PNGMedia = (x_ite_Namespace .add ("PNGMedia", PNGMedia_default_));
91503
91548
  ;// ./src/x_ite/Components/Texturing/MovieTexture.js
91504
- /* provided dependency */ var SuperGif = __webpack_require__(133);
91505
- /* provided dependency */ var APNG = __webpack_require__(991);
91549
+ /* provided dependency */ var SuperGif = __webpack_require__(530);
91550
+ /* provided dependency */ var APNG = __webpack_require__(504);
91506
91551
 
91507
91552
 
91508
91553
 
@@ -93769,7 +93814,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
93769
93814
  },
93770
93815
  print (... args)
93771
93816
  {
93772
- const string = args .map (String) .join (" ");
93817
+ const string = args .join (" ");
93773
93818
 
93774
93819
  console .log (string);
93775
93820
 
@@ -93778,7 +93823,7 @@ Object .assign (Object .setPrototypeOf (X3DBrowser .prototype, Browser_X3DBrowse
93778
93823
  },
93779
93824
  println (... args)
93780
93825
  {
93781
- const string = args .map (String) .join (" ");
93826
+ const string = args .join (" ");
93782
93827
 
93783
93828
  console .log (string);
93784
93829
 
@@ -94146,7 +94191,7 @@ const QuickSort_default_ = QuickSort;
94146
94191
 
94147
94192
  /* harmony default export */ const Algorithms_QuickSort = (x_ite_Namespace .add ("QuickSort", QuickSort_default_));
94148
94193
  ;// ./src/lib/libtess.js
94149
- /* provided dependency */ var libtess_libtess = __webpack_require__(643);
94194
+ /* provided dependency */ var libtess_libtess = __webpack_require__(780);
94150
94195
  const libtess_default_ = libtess_libtess;
94151
94196
  ;
94152
94197