@tsparticles/shape-image 3.0.3 → 3.2.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 (42) hide show
  1. package/21.min.js +2 -0
  2. package/21.min.js.LICENSE.txt +1 -0
  3. package/618.min.js +2 -0
  4. package/618.min.js.LICENSE.txt +1 -0
  5. package/623.min.js +2 -0
  6. package/623.min.js.LICENSE.txt +1 -0
  7. package/browser/GifUtils/ByteStream.js +13 -9
  8. package/browser/GifUtils/Utils.js +113 -10
  9. package/browser/ImageDrawer.js +44 -109
  10. package/browser/ImagePreloader.js +3 -2
  11. package/browser/Utils.js +6 -23
  12. package/browser/index.js +12 -5
  13. package/cjs/GifUtils/ByteStream.js +13 -9
  14. package/cjs/GifUtils/Utils.js +139 -11
  15. package/cjs/ImageDrawer.js +67 -109
  16. package/cjs/ImagePreloader.js +3 -2
  17. package/cjs/Utils.js +7 -25
  18. package/cjs/index.js +36 -6
  19. package/dist_browser_GifUtils_Utils_js.js +50 -0
  20. package/dist_browser_ImageDrawer_js.js +30 -0
  21. package/dist_browser_ImagePreloader_js.js +40 -0
  22. package/esm/GifUtils/ByteStream.js +13 -9
  23. package/esm/GifUtils/Utils.js +113 -10
  24. package/esm/ImageDrawer.js +44 -109
  25. package/esm/ImagePreloader.js +3 -2
  26. package/esm/Utils.js +6 -23
  27. package/esm/index.js +12 -5
  28. package/package.json +2 -2
  29. package/report.html +3 -3
  30. package/tsparticles.shape.image.js +251 -862
  31. package/tsparticles.shape.image.min.js +1 -1
  32. package/tsparticles.shape.image.min.js.LICENSE.txt +1 -1
  33. package/types/GifUtils/Utils.d.ts +4 -0
  34. package/types/ImageDrawer.d.ts +3 -3
  35. package/types/ImagePreloader.d.ts +1 -1
  36. package/types/Utils.d.ts +0 -1
  37. package/umd/GifUtils/ByteStream.js +13 -9
  38. package/umd/GifUtils/Utils.js +140 -11
  39. package/umd/ImageDrawer.js +69 -110
  40. package/umd/ImagePreloader.js +3 -2
  41. package/umd/Utils.js +8 -26
  42. package/umd/index.js +38 -7
package/esm/Utils.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { errorPrefix, getLogger, getStyleFromHsl } from "@tsparticles/engine";
2
- import { decodeGIF, getGIFLoopAmount } from "./GifUtils/Utils.js";
2
+ const stringStart = 0, defaultOpacity = 1;
3
3
  const currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d.]+%?\))|currentcolor/gi;
4
4
  function replaceColorSvg(imageShape, color, opacity) {
5
5
  const { svgData } = imageShape;
@@ -11,7 +11,7 @@ function replaceColorSvg(imageShape, color, opacity) {
11
11
  return svgData.replace(currentColorRegex, () => colorStyle);
12
12
  }
13
13
  const preFillIndex = svgData.indexOf(">");
14
- return `${svgData.substring(0, preFillIndex)} fill="${colorStyle}"${svgData.substring(preFillIndex)}`;
14
+ return `${svgData.substring(stringStart, preFillIndex)} fill="${colorStyle}"${svgData.substring(preFillIndex)}`;
15
15
  }
16
16
  export async function loadImage(image) {
17
17
  return new Promise((resolve) => {
@@ -32,24 +32,6 @@ export async function loadImage(image) {
32
32
  img.src = image.source;
33
33
  });
34
34
  }
35
- export async function loadGifImage(image) {
36
- if (image.type !== "gif") {
37
- await loadImage(image);
38
- return;
39
- }
40
- image.loading = true;
41
- try {
42
- image.gifData = await decodeGIF(image.source);
43
- image.gifLoopCount = getGIFLoopAmount(image.gifData) ?? 0;
44
- if (image.gifLoopCount === 0) {
45
- image.gifLoopCount = Infinity;
46
- }
47
- }
48
- catch {
49
- image.error = true;
50
- }
51
- image.loading = false;
52
- }
53
35
  export async function downloadSvgImage(image) {
54
36
  if (image.type !== "svg") {
55
37
  await loadImage(image);
@@ -67,7 +49,7 @@ export async function downloadSvgImage(image) {
67
49
  image.loading = false;
68
50
  }
69
51
  export function replaceImageColor(image, imageData, color, particle) {
70
- const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? 1), imageRes = {
52
+ const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? defaultOpacity), imageRes = {
71
53
  color,
72
54
  gif: imageData.gif,
73
55
  data: {
@@ -87,7 +69,7 @@ export function replaceImageColor(image, imageData, color, particle) {
87
69
  resolve(imageRes);
88
70
  domUrl.revokeObjectURL(url);
89
71
  });
90
- img.addEventListener("error", async () => {
72
+ const errorHandler = async () => {
91
73
  domUrl.revokeObjectURL(url);
92
74
  const img2 = {
93
75
  ...image,
@@ -98,7 +80,8 @@ export function replaceImageColor(image, imageData, color, particle) {
98
80
  imageRes.loaded = true;
99
81
  imageRes.element = img2.element;
100
82
  resolve(imageRes);
101
- });
83
+ };
84
+ img.addEventListener("error", () => void errorHandler());
102
85
  img.src = url;
103
86
  });
104
87
  }
package/esm/index.js CHANGED
@@ -1,7 +1,6 @@
1
- import { downloadSvgImage, loadGifImage, loadImage } from "./Utils.js";
2
- import { ImageDrawer } from "./ImageDrawer.js";
3
- import { ImagePreloaderPlugin } from "./ImagePreloader.js";
1
+ import { downloadSvgImage, loadImage } from "./Utils.js";
4
2
  import { errorPrefix } from "@tsparticles/engine";
3
+ const extLength = 3;
5
4
  function addLoadImageToEngine(engine) {
6
5
  if (engine.loadImage) {
7
6
  return;
@@ -21,14 +20,21 @@ function addLoadImageToEngine(engine) {
21
20
  gif: data.gif ?? false,
22
21
  name: data.name ?? data.src,
23
22
  source: data.src,
24
- type: data.src.substring(data.src.length - 3),
23
+ type: data.src.substring(data.src.length - extLength),
25
24
  error: false,
26
25
  loading: true,
27
26
  replaceColor: data.replaceColor,
28
27
  ratio: data.width && data.height ? data.width / data.height : undefined,
29
28
  };
30
29
  engine.images.push(image);
31
- const imageFunc = data.gif ? loadGifImage : data.replaceColor ? downloadSvgImage : loadImage;
30
+ let imageFunc;
31
+ if (data.gif) {
32
+ const { loadGifImage } = await import("./GifUtils/Utils.js");
33
+ imageFunc = loadGifImage;
34
+ }
35
+ else {
36
+ imageFunc = data.replaceColor ? downloadSvgImage : loadImage;
37
+ }
32
38
  await imageFunc(image);
33
39
  }
34
40
  catch {
@@ -38,6 +44,7 @@ function addLoadImageToEngine(engine) {
38
44
  }
39
45
  export async function loadImageShape(engine, refresh = true) {
40
46
  addLoadImageToEngine(engine);
47
+ const { ImagePreloaderPlugin } = await import("./ImagePreloader.js"), { ImageDrawer } = await import("./ImageDrawer.js");
41
48
  const preloader = new ImagePreloaderPlugin(engine);
42
49
  await engine.addPlugin(preloader, refresh);
43
50
  await engine.addShape(["image", "images"], new ImageDrawer(engine), refresh);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/shape-image",
3
- "version": "3.0.3",
3
+ "version": "3.2.0",
4
4
  "description": "tsParticles image shape",
5
5
  "homepage": "https://particles.js.org",
6
6
  "repository": {
@@ -59,7 +59,7 @@
59
59
  "./package.json": "./package.json"
60
60
  },
61
61
  "dependencies": {
62
- "@tsparticles/engine": "^3.0.3"
62
+ "@tsparticles/engine": "^3.2.0"
63
63
  },
64
64
  "publishConfig": {
65
65
  "access": "public"
package/report.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8"/>
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
6
- <title>@tsparticles/shape-image [26 Dec 2023 at 19:30]</title>
6
+ <title>@tsparticles/shape-image [31 Jan 2024 at 02:09]</title>
7
7
  <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
8
8
 
9
9
  <script>
@@ -31,8 +31,8 @@
31
31
  <body>
32
32
  <div id="app"></div>
33
33
  <script>
34
- window.chartData = [{"label":"tsparticles.shape.image.js","isAsset":true,"statSize":25927,"parsedSize":29622,"gzipSize":7128,"groups":[{"label":"dist/browser","path":"./dist/browser","statSize":25885,"groups":[{"id":284,"label":"index.js + 7 modules (concatenated)","path":"./dist/browser/index.js + 7 modules (concatenated)","statSize":25885,"parsedSize":29622,"gzipSize":7128,"concatenated":true,"groups":[{"label":"dist/browser","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser","statSize":25885,"groups":[{"id":null,"label":"index.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/index.js","statSize":1516,"parsedSize":1734,"gzipSize":417,"inaccurateSizes":true},{"id":null,"label":"Utils.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/Utils.js","statSize":3207,"parsedSize":3669,"gzipSize":883,"inaccurateSizes":true},{"id":null,"label":"ImagePreloader.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/ImagePreloader.js","statSize":774,"parsedSize":885,"gzipSize":213,"inaccurateSizes":true},{"id":null,"label":"ImageDrawer.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/ImageDrawer.js","statSize":6817,"parsedSize":7801,"gzipSize":1877,"inaccurateSizes":true},{"label":"GifUtils","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/GifUtils","statSize":12981,"groups":[{"id":null,"label":"Utils.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/GifUtils/Utils.js","statSize":11636,"parsedSize":13315,"gzipSize":3204,"inaccurateSizes":true},{"id":null,"label":"Constants.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/GifUtils/Constants.js","statSize":89,"parsedSize":101,"gzipSize":24,"inaccurateSizes":true},{"id":null,"label":"ByteStream.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/GifUtils/ByteStream.js","statSize":1256,"parsedSize":1437,"gzipSize":345,"inaccurateSizes":true}],"parsedSize":14855,"gzipSize":3574,"inaccurateSizes":true},{"label":"Options/Classes","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/Options/Classes","statSize":590,"groups":[{"id":null,"label":"Preload.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/Options/Classes/Preload.js","statSize":590,"parsedSize":675,"gzipSize":162,"inaccurateSizes":true}],"parsedSize":675,"gzipSize":162,"inaccurateSizes":true}],"parsedSize":29622,"gzipSize":7128,"inaccurateSizes":true}]}],"parsedSize":29622,"gzipSize":7128},{"label":"engine\",\"commonjs2\":\"@tsparticles/engine\",\"amd\":\"@tsparticles","path":"./engine\",\"commonjs2\":\"@tsparticles/engine\",\"amd\":\"@tsparticles","statSize":42,"groups":[{"id":533,"label":"engine\",\"root\":\"window\"}","path":"./engine\",\"commonjs2\":\"@tsparticles/engine\",\"amd\":\"@tsparticles/engine\",\"root\":\"window\"}","statSize":42}],"parsedSize":0,"gzipSize":0}],"isInitialByEntrypoint":{"tsparticles.shape.image":true}}];
35
- window.entrypoints = ["tsparticles.shape.image","tsparticles.shape.image.min"];
34
+ window.chartData = [];
35
+ window.entrypoints = ["tsparticles.shape.image.min"];
36
36
  window.defaultSizes = "parsed";
37
37
  </script>
38
38
  </body>