@tsparticles/shape-image 3.1.0 → 3.2.1

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 +2 -1
  8. package/browser/GifUtils/Utils.js +96 -0
  9. package/browser/ImageDrawer.js +42 -113
  10. package/browser/ImagePreloader.js +2 -1
  11. package/browser/Utils.js +1 -20
  12. package/browser/index.js +3 -3
  13. package/cjs/GifUtils/ByteStream.js +2 -1
  14. package/cjs/GifUtils/Utils.js +122 -1
  15. package/cjs/ImageDrawer.js +64 -112
  16. package/cjs/ImagePreloader.js +2 -1
  17. package/cjs/Utils.js +2 -22
  18. package/cjs/index.js +28 -5
  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 +2 -1
  23. package/esm/GifUtils/Utils.js +96 -0
  24. package/esm/ImageDrawer.js +42 -113
  25. package/esm/ImagePreloader.js +2 -1
  26. package/esm/Utils.js +1 -20
  27. package/esm/index.js +3 -3
  28. package/package.json +2 -2
  29. package/report.html +3 -3
  30. package/tsparticles.shape.image.js +251 -910
  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 +4 -4
  35. package/types/ImagePreloader.d.ts +1 -1
  36. package/types/Utils.d.ts +0 -1
  37. package/umd/GifUtils/ByteStream.js +2 -1
  38. package/umd/GifUtils/Utils.js +123 -1
  39. package/umd/ImageDrawer.js +66 -113
  40. package/umd/ImagePreloader.js +2 -1
  41. package/umd/Utils.js +3 -23
  42. package/umd/index.js +30 -6
@@ -1,9 +1,5 @@
1
- import { errorPrefix, } from "@tsparticles/engine";
2
- import { replaceImageColor } from "./Utils.js";
3
- const origin = {
4
- x: 0,
5
- y: 0,
6
- }, defaultLoopCount = 0, defaultFrame = 0, half = 0.5, initialTime = 0, firstIndex = 0, double = 2, defaultAlpha = 1, sides = 12, defaultRatio = 1;
1
+ import { errorPrefix } from "@tsparticles/engine";
2
+ const double = 2, defaultAlpha = 1, sides = 12, defaultRatio = 1;
7
3
  export class ImageDrawer {
8
4
  constructor(engine) {
9
5
  this.loadImageShape = async (imageShape) => {
@@ -25,80 +21,15 @@ export class ImageDrawer {
25
21
  }
26
22
  this._engine.images.push(image);
27
23
  }
28
- draw(data) {
29
- const { context, radius, particle, opacity, delta } = data, image = particle.image, element = image?.element;
24
+ async draw(data) {
25
+ const { context, radius, particle, opacity } = data, image = particle.image, element = image?.element;
30
26
  if (!image) {
31
27
  return;
32
28
  }
33
29
  context.globalAlpha = opacity;
34
30
  if (image.gif && image.gifData) {
35
- const offscreenCanvas = new OffscreenCanvas(image.gifData.width, image.gifData.height), offscreenContext = offscreenCanvas.getContext("2d");
36
- if (!offscreenContext) {
37
- throw new Error("could not create offscreen canvas context");
38
- }
39
- offscreenContext.imageSmoothingQuality = "low";
40
- offscreenContext.imageSmoothingEnabled = false;
41
- offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);
42
- if (particle.gifLoopCount === undefined) {
43
- particle.gifLoopCount = image.gifLoopCount ?? defaultLoopCount;
44
- }
45
- let frameIndex = particle.gifFrame ?? defaultFrame;
46
- const pos = { x: -image.gifData.width * half, y: -image.gifData.height * half }, frame = image.gifData.frames[frameIndex];
47
- if (particle.gifTime === undefined) {
48
- particle.gifTime = initialTime;
49
- }
50
- if (!frame.bitmap) {
51
- return;
52
- }
53
- context.scale(radius / image.gifData.width, radius / image.gifData.height);
54
- switch (frame.disposalMethod) {
55
- case 4:
56
- case 5:
57
- case 6:
58
- case 7:
59
- case 0:
60
- offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);
61
- context.drawImage(offscreenCanvas, pos.x, pos.y);
62
- offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);
63
- break;
64
- case 1:
65
- offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);
66
- context.drawImage(offscreenCanvas, pos.x, pos.y);
67
- break;
68
- case 2:
69
- offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);
70
- context.drawImage(offscreenCanvas, pos.x, pos.y);
71
- offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);
72
- if (!image.gifData.globalColorTable.length) {
73
- offscreenContext.putImageData(image.gifData.frames[firstIndex].image, pos.x + frame.left, pos.y + frame.top);
74
- }
75
- else {
76
- offscreenContext.putImageData(image.gifData.backgroundImage, pos.x, pos.y);
77
- }
78
- break;
79
- case 3:
80
- {
81
- const previousImageData = offscreenContext.getImageData(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);
82
- offscreenContext.drawImage(frame.bitmap, frame.left, frame.top);
83
- context.drawImage(offscreenCanvas, pos.x, pos.y);
84
- offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);
85
- offscreenContext.putImageData(previousImageData, origin.x, origin.y);
86
- }
87
- break;
88
- }
89
- particle.gifTime += delta.value;
90
- if (particle.gifTime > frame.delayTime) {
91
- particle.gifTime -= frame.delayTime;
92
- if (++frameIndex >= image.gifData.frames.length) {
93
- if (--particle.gifLoopCount <= defaultLoopCount) {
94
- return;
95
- }
96
- frameIndex = firstIndex;
97
- offscreenContext.clearRect(origin.x, origin.y, offscreenCanvas.width, offscreenCanvas.height);
98
- }
99
- particle.gifFrame = frameIndex;
100
- }
101
- context.scale(image.gifData.width / radius, image.gifData.height / radius);
31
+ const { drawGif } = await import("./GifUtils/Utils.js");
32
+ drawGif(data);
102
33
  }
103
34
  else if (element) {
104
35
  const ratio = image.ratio, pos = {
@@ -121,7 +52,7 @@ export class ImageDrawer {
121
52
  await this._engine.loadImage(imageData);
122
53
  }
123
54
  }
124
- loadShape(particle) {
55
+ async loadShape(particle) {
125
56
  if (particle.shape !== "image" && particle.shape !== "images") {
126
57
  return;
127
58
  }
@@ -134,12 +65,11 @@ export class ImageDrawer {
134
65
  }
135
66
  const image = this._engine.images.find((t) => t.name === imageData.name || t.source === imageData.src);
136
67
  if (!image) {
137
- void this.loadImageShape(imageData).then(() => {
138
- this.loadShape(particle);
139
- });
68
+ await this.loadImageShape(imageData);
69
+ await this.loadShape(particle);
140
70
  }
141
71
  }
142
- particleInit(container, particle) {
72
+ async particleInit(container, particle) {
143
73
  if (particle.shape !== "image" && particle.shape !== "images") {
144
74
  return;
145
75
  }
@@ -157,42 +87,41 @@ export class ImageDrawer {
157
87
  const replaceColor = imageData.replaceColor ?? image.replaceColor;
158
88
  if (image.loading) {
159
89
  setTimeout(() => {
160
- this.particleInit(container, particle);
90
+ void this.particleInit(container, particle);
161
91
  });
162
92
  return;
163
93
  }
164
- void (async () => {
165
- let imageRes;
166
- if (image.svgData && color) {
167
- imageRes = await replaceImageColor(image, imageData, color, particle);
168
- }
169
- else {
170
- imageRes = {
171
- color,
172
- data: image,
173
- element: image.element,
174
- gif: image.gif,
175
- gifData: image.gifData,
176
- gifLoopCount: image.gifLoopCount,
177
- loaded: true,
178
- ratio: imageData.width && imageData.height
179
- ? imageData.width / imageData.height
180
- : image.ratio ?? defaultRatio,
181
- replaceColor: replaceColor,
182
- source: imageData.src,
183
- };
184
- }
185
- if (!imageRes.ratio) {
186
- imageRes.ratio = 1;
187
- }
188
- const fill = imageData.fill ?? particle.shapeFill, close = imageData.close ?? particle.shapeClose, imageShape = {
189
- image: imageRes,
190
- fill,
191
- close,
94
+ let imageRes;
95
+ if (image.svgData && color) {
96
+ const { replaceImageColor } = await import("./Utils.js");
97
+ imageRes = await replaceImageColor(image, imageData, color, particle);
98
+ }
99
+ else {
100
+ imageRes = {
101
+ color,
102
+ data: image,
103
+ element: image.element,
104
+ gif: image.gif,
105
+ gifData: image.gifData,
106
+ gifLoopCount: image.gifLoopCount,
107
+ loaded: true,
108
+ ratio: imageData.width && imageData.height
109
+ ? imageData.width / imageData.height
110
+ : image.ratio ?? defaultRatio,
111
+ replaceColor: replaceColor,
112
+ source: imageData.src,
192
113
  };
193
- particle.image = imageShape.image;
194
- particle.shapeFill = imageShape.fill;
195
- particle.shapeClose = imageShape.close;
196
- })();
114
+ }
115
+ if (!imageRes.ratio) {
116
+ imageRes.ratio = 1;
117
+ }
118
+ const fill = imageData.fill ?? particle.shapeFill, close = imageData.close ?? particle.shapeClose, imageShape = {
119
+ image: imageRes,
120
+ fill,
121
+ close,
122
+ };
123
+ particle.image = imageShape.image;
124
+ particle.shapeFill = imageShape.fill;
125
+ particle.shapeClose = imageShape.close;
197
126
  }
198
127
  }
@@ -4,7 +4,8 @@ export class ImagePreloaderPlugin {
4
4
  this.id = "imagePreloader";
5
5
  this._engine = engine;
6
6
  }
7
- getPlugin() {
7
+ async getPlugin() {
8
+ await Promise.resolve();
8
9
  return {};
9
10
  }
10
11
  loadOptions(options, source) {
package/esm/Utils.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { errorPrefix, getLogger, getStyleFromHsl } from "@tsparticles/engine";
2
- import { decodeGIF, getGIFLoopAmount } from "./GifUtils/Utils.js";
3
- const stringStart = 0, defaultLoopCount = 0, defaultOpacity = 1;
2
+ const stringStart = 0, defaultOpacity = 1;
4
3
  const currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d.]+%?\))|currentcolor/gi;
5
4
  function replaceColorSvg(imageShape, color, opacity) {
6
5
  const { svgData } = imageShape;
@@ -33,24 +32,6 @@ export async function loadImage(image) {
33
32
  img.src = image.source;
34
33
  });
35
34
  }
36
- export async function loadGifImage(image) {
37
- if (image.type !== "gif") {
38
- await loadImage(image);
39
- return;
40
- }
41
- image.loading = true;
42
- try {
43
- image.gifData = await decodeGIF(image.source);
44
- image.gifLoopCount = getGIFLoopAmount(image.gifData) ?? defaultLoopCount;
45
- if (!image.gifLoopCount) {
46
- image.gifLoopCount = Infinity;
47
- }
48
- }
49
- catch {
50
- image.error = true;
51
- }
52
- image.loading = false;
53
- }
54
35
  export async function downloadSvgImage(image) {
55
36
  if (image.type !== "svg") {
56
37
  await loadImage(image);
package/esm/index.js CHANGED
@@ -1,6 +1,4 @@
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";
5
3
  const extLength = 3;
6
4
  function addLoadImageToEngine(engine) {
@@ -31,6 +29,7 @@ function addLoadImageToEngine(engine) {
31
29
  engine.images.push(image);
32
30
  let imageFunc;
33
31
  if (data.gif) {
32
+ const { loadGifImage } = await import("./GifUtils/Utils.js");
34
33
  imageFunc = loadGifImage;
35
34
  }
36
35
  else {
@@ -45,6 +44,7 @@ function addLoadImageToEngine(engine) {
45
44
  }
46
45
  export async function loadImageShape(engine, refresh = true) {
47
46
  addLoadImageToEngine(engine);
47
+ const { ImagePreloaderPlugin } = await import("./ImagePreloader.js"), { ImageDrawer } = await import("./ImageDrawer.js");
48
48
  const preloader = new ImagePreloaderPlugin(engine);
49
49
  await engine.addPlugin(preloader, refresh);
50
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.1.0",
3
+ "version": "3.2.1",
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.1.0"
62
+ "@tsparticles/engine": "^3.2.1"
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 [13 Jan 2024 at 23:06]</title>
6
+ <title>@tsparticles/shape-image [31 Jan 2024 at 09:54]</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":27020,"parsedSize":30775,"gzipSize":7436,"groups":[{"label":"dist/browser","path":"./dist/browser","statSize":26978,"groups":[{"id":826,"label":"index.js + 7 modules (concatenated)","path":"./dist/browser/index.js + 7 modules (concatenated)","statSize":26978,"parsedSize":30775,"gzipSize":7436,"concatenated":true,"groups":[{"label":"dist/browser","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser","statSize":26978,"groups":[{"id":null,"label":"index.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/index.js","statSize":1615,"parsedSize":1842,"gzipSize":445,"inaccurateSizes":true},{"id":null,"label":"Utils.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/Utils.js","statSize":3361,"parsedSize":3834,"gzipSize":926,"inaccurateSizes":true},{"id":null,"label":"ImagePreloader.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/ImagePreloader.js","statSize":764,"parsedSize":871,"gzipSize":210,"inaccurateSizes":true},{"id":null,"label":"ImageDrawer.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/ImageDrawer.js","statSize":7225,"parsedSize":8241,"gzipSize":1991,"inaccurateSizes":true},{"label":"GifUtils","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/GifUtils","statSize":13423,"groups":[{"id":null,"label":"Utils.js","path":"./dist/browser/index.js + 7 modules (concatenated)/dist/browser/GifUtils/Utils.js","statSize":11800,"parsedSize":13460,"gzipSize":3252,"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":1534,"parsedSize":1749,"gzipSize":422,"inaccurateSizes":true}],"parsedSize":15312,"gzipSize":3699,"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":673,"gzipSize":162,"inaccurateSizes":true}],"parsedSize":673,"gzipSize":162,"inaccurateSizes":true}],"parsedSize":30775,"gzipSize":7436,"inaccurateSizes":true}]}],"parsedSize":30775,"gzipSize":7436},{"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>