@mml-io/mml-web-client 0.19.4 → 0.19.6

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/build/index.js CHANGED
@@ -1722,9 +1722,53 @@
1722
1722
  return false;
1723
1723
  }
1724
1724
  };
1725
+ function parseRGB(value) {
1726
+ value = value.trim();
1727
+ const validStart = value.startsWith("rgb(") || value.startsWith("rgba(");
1728
+ const validEnd = value.endsWith(")");
1729
+ if (!validStart || !validEnd) return null;
1730
+ const content = value.substring(value.indexOf("(") + 1, value.length - 1).split(",");
1731
+ if (content.length < 3 || content.length > 4) return null;
1732
+ if (value.startsWith("rgb(") && content.length !== 3) return null;
1733
+ if (value.startsWith("rgba(") && content.length !== 4) return null;
1734
+ const numbers = content.map((n) => parseFloat(n.trim()));
1735
+ if (numbers.some((n) => isNaN(n))) return null;
1736
+ return {
1737
+ r: Math.min(255, Math.max(0, numbers[0])) / 255,
1738
+ g: Math.min(255, Math.max(0, numbers[1])) / 255,
1739
+ b: Math.min(255, Math.max(0, numbers[2])) / 255,
1740
+ a: numbers.length === 4 ? Math.min(1, Math.max(0, numbers[3])) : void 0
1741
+ };
1742
+ }
1743
+ function parseHSL(value) {
1744
+ value = value.trim();
1745
+ const validStart = value.startsWith("hsl(") || value.startsWith("hsla(");
1746
+ const validEnd = value.endsWith(")");
1747
+ if (!validStart || !validEnd) return null;
1748
+ const content = value.substring(value.indexOf("(") + 1, value.length - 1).split(",");
1749
+ if (content.length < 3 || content.length > 4) return null;
1750
+ if (value.startsWith("hsl(") && content.length !== 3) return null;
1751
+ if (value.startsWith("hsla(") && content.length !== 4) return null;
1752
+ const numbers = content.map((n) => parseFloat(n.trim()));
1753
+ if (numbers.some((n) => isNaN(n))) return null;
1754
+ let [h, s, l] = numbers;
1755
+ h = h / 360;
1756
+ h = h === 0 ? 1e-4 : h === 1 ? 0.9999 : h;
1757
+ s = s / 100;
1758
+ s = s === 0 ? 1e-4 : s === 1 ? 0.9999 : s;
1759
+ l = l / 100;
1760
+ l = l === 0 ? 1e-4 : l === 1 ? 0.9999 : l;
1761
+ const rgb = hslToRGB(h, s, l);
1762
+ return {
1763
+ r: rgb.r,
1764
+ g: rgb.g,
1765
+ b: rgb.b,
1766
+ a: numbers.length === 4 ? Math.min(1, Math.max(0, numbers[3])) : void 0
1767
+ };
1768
+ }
1725
1769
  function parseColorAttribute(value, defaultValue) {
1726
1770
  return parseAttribute(value, defaultValue, (value2) => {
1727
- const colorNameValues = colors[value2];
1771
+ const colorNameValues = colors[value2.trim()];
1728
1772
  if (colorNameValues) {
1729
1773
  return {
1730
1774
  r: colorNameValues[0],
@@ -1753,75 +1797,16 @@
1753
1797
  }
1754
1798
  }
1755
1799
  if (value2.indexOf("rgb(") === 0) {
1756
- const rgb = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/.exec(value2);
1757
- if (rgb) {
1758
- return {
1759
- r: parseInt(rgb[1], 10) / 255,
1760
- g: parseInt(rgb[2], 10) / 255,
1761
- b: parseInt(rgb[3], 10) / 255
1762
- };
1763
- }
1800
+ return parseRGB(value2);
1764
1801
  }
1765
1802
  if (value2.indexOf("rgba(") === 0) {
1766
- const rgba = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d*\.?\d+)\)$/.exec(value2);
1767
- if (rgba) {
1768
- return {
1769
- r: parseInt(rgba[1], 10) / 255,
1770
- g: parseInt(rgba[2], 10) / 255,
1771
- b: parseInt(rgba[3], 10) / 255,
1772
- a: parseFloat(rgba[4])
1773
- };
1774
- }
1803
+ return parseRGB(value2);
1775
1804
  }
1776
1805
  if (value2.indexOf("hsl(") === 0) {
1777
- const hsl = /^hsl\(\s*(\d+)\s*,\s*(\d+(?:\.\d+)?%)\s*,\s*(\d+(?:\.\d+)?%)\)$/.exec(value2);
1778
- if (hsl) {
1779
- let h = parseFloat(hsl[1]) / 360;
1780
- if (h === 0) {
1781
- h = 1e-4;
1782
- } else if (h === 1) {
1783
- h = 0.9999;
1784
- }
1785
- let s = parseFloat(hsl[2]) / 100;
1786
- if (s === 0) {
1787
- s = 1e-4;
1788
- } else if (s === 1) {
1789
- s = 0.9999;
1790
- }
1791
- let l = parseFloat(hsl[3]) / 100;
1792
- if (l === 0) {
1793
- l = 1e-4;
1794
- } else if (l === 1) {
1795
- l = 0.9999;
1796
- }
1797
- return hslToRGB(h, s, l);
1798
- }
1806
+ return parseHSL(value2);
1799
1807
  }
1800
1808
  if (value2.indexOf("hsla(") === 0) {
1801
- const hsla = /^hsla\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?%)\s*,\s*(\d+(?:\.\d+)?%),\s*(\d+(?:\.\d+)?)\)$/.exec(
1802
- value2
1803
- );
1804
- if (hsla) {
1805
- let h = parseFloat(hsla[1]) / 360;
1806
- if (h === 0) {
1807
- h = 1e-4;
1808
- } else if (h === 1) {
1809
- h = 0.9999;
1810
- }
1811
- let s = parseFloat(hsla[2]) / 100;
1812
- if (s === 0) {
1813
- s = 1e-4;
1814
- } else if (s === 1) {
1815
- s = 0.9999;
1816
- }
1817
- let l = parseFloat(hsla[3]) / 100;
1818
- if (l === 0) {
1819
- l = 1e-4;
1820
- } else if (l === 1) {
1821
- l = 0.9999;
1822
- }
1823
- return hslToRGB(h, s, l);
1824
- }
1809
+ return parseHSL(value2);
1825
1810
  }
1826
1811
  return null;
1827
1812
  });
@@ -65087,6 +65072,7 @@ ${DracoWorker.toString()}
65087
65072
  this.updateDebugVisualisation();
65088
65073
  }
65089
65074
  if (!src) {
65075
+ this.latestSrcModelPromise = null;
65090
65076
  this.srcLoadingInstanceManager.abortIfLoading();
65091
65077
  this.socketChildrenByBone.forEach((children) => {
65092
65078
  children.forEach((child) => {
@@ -65098,10 +65084,13 @@ ${DracoWorker.toString()}
65098
65084
  return;
65099
65085
  }
65100
65086
  const contentSrc = this.model.contentSrcToContentAddress(src);
65087
+ this.srcLoadingInstanceManager.start(this.model.getLoadingProgressManager(), contentSrc);
65101
65088
  const srcModelPromise = this.asyncLoadSourceAsset(contentSrc, (loaded, total) => {
65089
+ if (this.latestSrcModelPromise !== srcModelPromise) {
65090
+ return;
65091
+ }
65102
65092
  this.srcLoadingInstanceManager.setProgress(loaded / total);
65103
65093
  });
65104
- this.srcLoadingInstanceManager.start(this.model.getLoadingProgressManager(), contentSrc);
65105
65094
  this.latestSrcModelPromise = srcModelPromise;
65106
65095
  srcModelPromise.then((asset2) => {
65107
65096
  if (this.latestSrcModelPromise !== srcModelPromise || !this.model.isConnected) {
@@ -65247,6 +65236,8 @@ ${DracoWorker.toString()}
65247
65236
  this.loadedState = null;
65248
65237
  }
65249
65238
  this.clearDebugVisualisation();
65239
+ this.latestSrcModelPromise = null;
65240
+ this.latestAnimPromise = null;
65250
65241
  this.animLoadingInstanceManager.dispose();
65251
65242
  this.srcLoadingInstanceManager.dispose();
65252
65243
  }
@@ -97870,10 +97861,13 @@ void main() {
97870
97861
  this.registeredParentAttachment = null;
97871
97862
  }
97872
97863
  const animSrc = this.model.contentSrcToContentAddress(anim2);
97864
+ this.animLoadingInstanceManager.start(this.model.getLoadingProgressManager(), animSrc);
97873
97865
  const animPromise = this.asyncLoadSourceAsset(animSrc, (loaded, total) => {
97866
+ if (this.latestAnimPromise !== animPromise) {
97867
+ return;
97868
+ }
97874
97869
  this.animLoadingInstanceManager.setProgress(loaded / total);
97875
97870
  });
97876
- this.animLoadingInstanceManager.start(this.model.getLoadingProgressManager(), animSrc);
97877
97871
  this.latestAnimPromise = animPromise;
97878
97872
  animPromise.then((result) => {
97879
97873
  if (this.latestAnimPromise !== animPromise || !this.model.isConnected) {
@@ -97892,6 +97886,22 @@ void main() {
97892
97886
  });
97893
97887
  }
97894
97888
  setAnimEnabled() {
97889
+ if (this.model.props.animEnabled) {
97890
+ if (this.animState && !this.animState.appliedAnimation) {
97891
+ for (const [attachment] of this.attachments) {
97892
+ this.registerAttachment(attachment);
97893
+ }
97894
+ this.playAnimation(this.animState.currentAnimationClip);
97895
+ }
97896
+ } else if (!this.model.props.animEnabled) {
97897
+ for (const [attachment, animState] of this.attachments) {
97898
+ if (animState) {
97899
+ animState.animationMixer.stopAllAction();
97900
+ }
97901
+ this.attachments.set(attachment, null);
97902
+ this.model.getContainer().add(attachment.getContainer());
97903
+ }
97904
+ }
97895
97905
  }
97896
97906
  setAnimLoop() {
97897
97907
  }
@@ -97916,6 +97926,7 @@ void main() {
97916
97926
  this.updateDebugVisualisation();
97917
97927
  }
97918
97928
  if (!src) {
97929
+ this.latestSrcModelPromise = null;
97919
97930
  this.srcLoadingInstanceManager.abortIfLoading();
97920
97931
  this.socketChildrenByBone.forEach((children) => {
97921
97932
  children.forEach((child) => {
@@ -97927,10 +97938,13 @@ void main() {
97927
97938
  return;
97928
97939
  }
97929
97940
  const contentSrc = this.model.contentSrcToContentAddress(src);
97941
+ this.srcLoadingInstanceManager.start(this.model.getLoadingProgressManager(), contentSrc);
97930
97942
  const srcModelPromise = this.asyncLoadSourceAsset(contentSrc, (loaded, total) => {
97943
+ if (this.latestSrcModelPromise !== srcModelPromise) {
97944
+ return;
97945
+ }
97931
97946
  this.srcLoadingInstanceManager.setProgress(loaded / total);
97932
97947
  });
97933
- this.srcLoadingInstanceManager.start(this.model.getLoadingProgressManager(), contentSrc);
97934
97948
  this.latestSrcModelPromise = srcModelPromise;
97935
97949
  srcModelPromise.then((result) => {
97936
97950
  if (this.latestSrcModelPromise !== srcModelPromise || !this.model.isConnected) {
@@ -98183,6 +98197,8 @@ void main() {
98183
98197
  this.loadedState = null;
98184
98198
  }
98185
98199
  this.clearDebugVisualisation();
98200
+ this.latestSrcModelPromise = null;
98201
+ this.latestAnimPromise = null;
98186
98202
  this.animLoadingInstanceManager.dispose();
98187
98203
  this.srcLoadingInstanceManager.dispose();
98188
98204
  }