@tsparticles/shape-image 4.0.0-alpha.8 → 4.0.0-beta.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 (60) hide show
  1. package/326.min.js +1 -0
  2. package/562.min.js +1 -0
  3. package/664.min.js +1 -0
  4. package/979.min.js +1 -0
  5. package/browser/GifUtils/ByteStream.js +3 -1
  6. package/browser/GifUtils/Utils.js +36 -42
  7. package/browser/ImageDrawer.js +31 -33
  8. package/browser/ImagePreloader.js +7 -5
  9. package/browser/ImagePreloaderInstance.js +11 -0
  10. package/browser/Options/Classes/Preload.js +6 -0
  11. package/browser/Utils.js +7 -6
  12. package/browser/index.js +28 -14
  13. package/cjs/GifUtils/ByteStream.js +3 -1
  14. package/cjs/GifUtils/Utils.js +36 -42
  15. package/cjs/ImageDrawer.js +31 -33
  16. package/cjs/ImagePreloader.js +7 -5
  17. package/cjs/ImagePreloaderInstance.js +11 -0
  18. package/cjs/Options/Classes/Preload.js +6 -0
  19. package/cjs/Utils.js +7 -6
  20. package/cjs/index.js +28 -14
  21. package/dist_browser_GifUtils_Utils_js.js +6 -16
  22. package/dist_browser_ImageDrawer_js.js +2 -2
  23. package/dist_browser_ImagePreloaderInstance_js.js +30 -0
  24. package/dist_browser_ImagePreloader_js.js +3 -3
  25. package/esm/GifUtils/ByteStream.js +3 -1
  26. package/esm/GifUtils/Utils.js +36 -42
  27. package/esm/ImageDrawer.js +31 -33
  28. package/esm/ImagePreloader.js +7 -5
  29. package/esm/ImagePreloaderInstance.js +11 -0
  30. package/esm/Options/Classes/Preload.js +6 -0
  31. package/esm/Utils.js +7 -6
  32. package/esm/index.js +28 -14
  33. package/package.json +2 -2
  34. package/report.html +84 -29
  35. package/tsparticles.shape.image.js +40 -18
  36. package/tsparticles.shape.image.min.js +2 -2
  37. package/types/GifUtils/Utils.d.ts +4 -4
  38. package/types/ImageDrawer.d.ts +3 -4
  39. package/types/ImagePreloader.d.ts +5 -4
  40. package/types/ImagePreloaderInstance.d.ts +8 -0
  41. package/types/Utils.d.ts +1 -0
  42. package/types/types.d.ts +3 -2
  43. package/umd/GifUtils/ByteStream.js +3 -1
  44. package/umd/GifUtils/Utils.js +37 -43
  45. package/umd/ImageDrawer.js +30 -32
  46. package/umd/ImagePreloader.js +41 -5
  47. package/umd/ImagePreloaderInstance.js +25 -0
  48. package/umd/Options/Classes/Preload.js +6 -0
  49. package/umd/Utils.js +8 -6
  50. package/umd/index.js +29 -15
  51. package/324.min.js +0 -2
  52. package/324.min.js.LICENSE.txt +0 -1
  53. package/337.min.js +0 -2
  54. package/337.min.js.LICENSE.txt +0 -1
  55. package/413.min.js +0 -2
  56. package/413.min.js.LICENSE.txt +0 -1
  57. package/72.min.js +0 -2
  58. package/72.min.js.LICENSE.txt +0 -1
  59. package/dist_browser_Utils_js.js +0 -30
  60. package/tsparticles.shape.image.min.js.LICENSE.txt +0 -1
@@ -15,24 +15,11 @@
15
15
  const Utils_js_2 = require("./GifUtils/Utils.js");
16
16
  const sides = 12;
17
17
  class ImageDrawer {
18
- constructor(engine) {
19
- this.validTypes = ["image", "images"];
20
- this.loadImageShape = async (imageShape) => {
21
- if (!this._engine.loadImage) {
22
- throw new Error(`Image shape not initialized`);
23
- }
24
- await this._engine.loadImage({
25
- gif: imageShape.gif,
26
- name: imageShape.name,
27
- replaceColor: imageShape.replaceColor,
28
- src: imageShape.src,
29
- });
30
- };
18
+ _container;
19
+ _engine;
20
+ constructor(engine, container) {
31
21
  this._engine = engine;
32
- }
33
- addImage(image) {
34
- this._engine.images ??= [];
35
- this._engine.images.push(image);
22
+ this._container = container;
36
23
  }
37
24
  draw(data) {
38
25
  const { context, radius, particle, opacity } = data, image = particle.image, element = image?.element;
@@ -41,7 +28,7 @@
41
28
  }
42
29
  context.globalAlpha = opacity;
43
30
  if (image.gif && image.gifData) {
44
- (0, Utils_js_2.drawGif)(data);
31
+ (0, Utils_js_2.drawGif)(data, this._container.canvas.render.settings);
45
32
  }
46
33
  else if (element) {
47
34
  const ratio = image.ratio, pos = {
@@ -60,36 +47,38 @@
60
47
  if (!options.preload || !this._engine.loadImage) {
61
48
  return;
62
49
  }
50
+ const promises = [];
63
51
  for (const imageData of options.preload) {
64
- await this._engine.loadImage(imageData);
52
+ promises.push(this._engine.loadImage(container, imageData));
65
53
  }
54
+ await Promise.all(promises);
66
55
  }
67
56
  loadShape(particle) {
68
- if (particle.shape !== "image" && particle.shape !== "images") {
57
+ const { _container: container } = this;
58
+ if (!particle.shape || !Utils_js_1.shapeTypes.includes(particle.shape)) {
69
59
  return;
70
60
  }
71
- this._engine.images ??= [];
72
61
  const imageData = particle.shapeData;
73
62
  if (!imageData) {
74
63
  return;
75
64
  }
76
- const image = this._engine.images.find((t) => t.name === imageData.name || t.source === imageData.src);
77
- if (!image) {
78
- void this.loadImageShape(imageData).then(() => {
79
- this.loadShape(particle);
80
- });
65
+ const images = this._engine.getImages?.(container), image = images?.find((t) => t.name === imageData.name || t.source === imageData.src);
66
+ if (image) {
67
+ return;
81
68
  }
69
+ void this.loadImageShape(container, imageData).then(() => {
70
+ this.loadShape(particle);
71
+ });
82
72
  }
83
73
  particleInit(container, particle) {
84
74
  if (particle.shape !== "image" && particle.shape !== "images") {
85
75
  return;
86
76
  }
87
- this._engine.images ??= [];
88
- const images = this._engine.images, imageData = particle.shapeData;
77
+ const images = this._engine.getImages?.(container), imageData = particle.shapeData;
89
78
  if (!imageData) {
90
79
  return;
91
80
  }
92
- const color = particle.getFillColor(), image = images.find((t) => t.name === imageData.name || t.source === imageData.src);
81
+ const color = particle.getFillColor(), image = images?.find((t) => t.name === imageData.name || t.source === imageData.src);
93
82
  if (!image) {
94
83
  return;
95
84
  }
@@ -122,16 +111,25 @@
122
111
  if (!imageRes.ratio) {
123
112
  imageRes.ratio = 1;
124
113
  }
125
- const fill = imageData.fill ?? particle.shapeFill, close = imageData.close ?? particle.shapeClose, imageShape = {
114
+ const close = imageData.close ?? particle.shapeClose, imageShape = {
126
115
  image: imageRes,
127
- fill,
128
116
  close,
129
117
  };
130
118
  particle.image = imageShape.image;
131
- particle.shapeFill = imageShape.fill;
132
119
  particle.shapeClose = imageShape.close;
133
120
  })();
134
121
  }
122
+ loadImageShape = async (container, imageShape) => {
123
+ if (!this._engine.loadImage) {
124
+ throw new Error(`Image shape not initialized`);
125
+ }
126
+ await this._engine.loadImage(container, {
127
+ gif: imageShape.gif,
128
+ name: imageShape.name,
129
+ replaceColor: imageShape.replaceColor,
130
+ src: imageShape.src,
131
+ });
132
+ };
135
133
  }
136
134
  exports.ImageDrawer = ImageDrawer;
137
135
  });
@@ -1,3 +1,36 @@
1
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
+ if (k2 === undefined) k2 = k;
3
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
+ desc = { enumerable: true, get: function() { return m[k]; } };
6
+ }
7
+ Object.defineProperty(o, k2, desc);
8
+ }) : (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ o[k2] = m[k];
11
+ }));
12
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
13
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
14
+ }) : function(o, v) {
15
+ o["default"] = v;
16
+ });
17
+ var __importStar = (this && this.__importStar) || (function () {
18
+ var ownKeys = function(o) {
19
+ ownKeys = Object.getOwnPropertyNames || function (o) {
20
+ var ar = [];
21
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
22
+ return ar;
23
+ };
24
+ return ownKeys(o);
25
+ };
26
+ return function (mod) {
27
+ if (mod && mod.__esModule) return mod;
28
+ var result = {};
29
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
30
+ __setModuleDefault(result, mod);
31
+ return result;
32
+ };
33
+ })();
1
34
  (function (factory) {
2
35
  if (typeof module === "object" && typeof module.exports === "object") {
3
36
  var v = factory(require, exports);
@@ -8,16 +41,19 @@
8
41
  }
9
42
  })(function (require, exports) {
10
43
  "use strict";
44
+ var __syncRequire = typeof module === "object" && typeof module.exports === "object";
11
45
  Object.defineProperty(exports, "__esModule", { value: true });
12
46
  exports.ImagePreloaderPlugin = void 0;
13
47
  const Preload_js_1 = require("./Options/Classes/Preload.js");
14
48
  class ImagePreloaderPlugin {
15
- constructor() {
16
- this.id = "imagePreloader";
49
+ id = "image-preloader";
50
+ _engine;
51
+ constructor(engine) {
52
+ this._engine = engine;
17
53
  }
18
- async getPlugin() {
19
- await Promise.resolve();
20
- return {};
54
+ async getPlugin(container) {
55
+ const { ImagePreloaderInstance } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./ImagePreloaderInstance.js"))) : new Promise((resolve_1, reject_1) => { require(["./ImagePreloaderInstance.js"], resolve_1, reject_1); }).then(__importStar));
56
+ return new ImagePreloaderInstance(this._engine, container);
21
57
  }
22
58
  loadOptions(_container, options, source) {
23
59
  if (!source?.preload) {
@@ -0,0 +1,25 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ImagePreloaderInstance = void 0;
13
+ class ImagePreloaderInstance {
14
+ _container;
15
+ _engine;
16
+ constructor(engine, container) {
17
+ this._engine = engine;
18
+ this._container = container;
19
+ }
20
+ destroy() {
21
+ this._engine.images?.delete(this._container);
22
+ }
23
+ }
24
+ exports.ImagePreloaderInstance = ImagePreloaderInstance;
25
+ });
@@ -12,6 +12,12 @@
12
12
  exports.Preload = void 0;
13
13
  const engine_1 = require("@tsparticles/engine");
14
14
  class Preload {
15
+ gif;
16
+ height;
17
+ name;
18
+ replaceColor;
19
+ src;
20
+ width;
15
21
  constructor() {
16
22
  this.src = "";
17
23
  this.gif = false;
package/umd/Utils.js CHANGED
@@ -9,10 +9,12 @@
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.shapeTypes = void 0;
12
13
  exports.loadImage = loadImage;
13
14
  exports.downloadSvgImage = downloadSvgImage;
14
15
  exports.replaceImageColor = replaceImageColor;
15
16
  const engine_1 = require("@tsparticles/engine");
17
+ exports.shapeTypes = ["image", "images"];
16
18
  const stringStart = 0, defaultOpacity = 1;
17
19
  const currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d.]+%?\))|currentcolor/gi;
18
20
  function replaceColorSvg(imageShape, color, opacity, hdr = false) {
@@ -22,13 +24,13 @@
22
24
  }
23
25
  const colorStyle = (0, engine_1.getStyleFromHsl)(color, hdr, opacity);
24
26
  if (svgData.includes("fill")) {
25
- return svgData.replace(currentColorRegex, () => colorStyle);
27
+ return svgData.replaceAll(currentColorRegex, () => colorStyle);
26
28
  }
27
29
  const preFillIndex = svgData.indexOf(">");
28
30
  return `${svgData.substring(stringStart, preFillIndex)} fill="${colorStyle}"${svgData.substring(preFillIndex)}`;
29
31
  }
30
32
  async function loadImage(image) {
31
- return new Promise((resolve) => {
33
+ return new Promise(resolve => {
32
34
  image.loading = true;
33
35
  const img = new Image();
34
36
  image.element = img;
@@ -53,12 +55,12 @@
53
55
  }
54
56
  image.loading = true;
55
57
  const response = await fetch(image.source);
56
- if (!response.ok) {
57
- (0, engine_1.getLogger)().error("Image not found");
58
- image.error = true;
58
+ if (response.ok) {
59
+ image.svgData = await response.text();
59
60
  }
60
61
  else {
61
- image.svgData = await response.text();
62
+ (0, engine_1.getLogger)().error("Image not found");
63
+ image.error = true;
62
64
  }
63
65
  image.loading = false;
64
66
  }
package/umd/index.js CHANGED
@@ -37,24 +37,35 @@ var __importStar = (this && this.__importStar) || (function () {
37
37
  if (v !== undefined) module.exports = v;
38
38
  }
39
39
  else if (typeof define === "function" && define.amd) {
40
- define(["require", "exports"], factory);
40
+ define(["require", "exports", "./Utils.js"], factory);
41
41
  }
42
42
  })(function (require, exports) {
43
43
  "use strict";
44
44
  var __syncRequire = typeof module === "object" && typeof module.exports === "object";
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
46
  exports.loadImageShape = loadImageShape;
47
+ const Utils_js_1 = require("./Utils.js");
47
48
  const extLength = 3;
48
49
  function addLoadImageToEngine(engine) {
49
- if (engine.loadImage) {
50
- return;
51
- }
52
- engine.loadImage = async (data) => {
50
+ engine.getImages ??= (container) => {
51
+ engine.images ??= new Map();
52
+ let images = engine.images.get(container);
53
+ if (!images) {
54
+ images = [];
55
+ engine.images.set(container, images);
56
+ }
57
+ return images;
58
+ };
59
+ engine.loadImage ??= async (container, data) => {
60
+ if (!engine.getImages) {
61
+ throw new Error("No images collection found");
62
+ }
53
63
  if (!data.name && !data.src) {
54
64
  throw new Error("No image source provided");
55
65
  }
56
- engine.images ??= [];
57
- if (engine.images.some((t) => t.name === data.name || t.source === data.src)) {
66
+ engine.images ??= new Map();
67
+ const containerImages = engine.getImages(container);
68
+ if (containerImages.some((t) => t.name === data.name || t.source === data.src)) {
58
69
  return;
59
70
  }
60
71
  try {
@@ -68,11 +79,12 @@ var __importStar = (this && this.__importStar) || (function () {
68
79
  replaceColor: data.replaceColor,
69
80
  ratio: data.width && data.height ? data.width / data.height : undefined,
70
81
  };
71
- engine.images.push(image);
82
+ containerImages.push(image);
83
+ engine.images.set(container, containerImages);
72
84
  let imageFunc;
73
85
  if (data.gif) {
74
86
  const { loadGifImage } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./GifUtils/Utils.js"))) : new Promise((resolve_1, reject_1) => { require(["./GifUtils/Utils.js"], resolve_1, reject_1); }).then(__importStar));
75
- imageFunc = loadGifImage;
87
+ imageFunc = (img) => loadGifImage(img, { colorSpace: "srgb" });
76
88
  }
77
89
  else if (data.replaceColor) {
78
90
  const { downloadSvgImage } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./Utils.js"))) : new Promise((resolve_2, reject_2) => { require(["./Utils.js"], resolve_2, reject_2); }).then(__importStar));
@@ -90,13 +102,15 @@ var __importStar = (this && this.__importStar) || (function () {
90
102
  };
91
103
  }
92
104
  async function loadImageShape(engine) {
93
- engine.checkVersion("4.0.0-alpha.8");
94
- await engine.register(async (e) => {
95
- const { ImageDrawer } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./ImageDrawer.js"))) : new Promise((resolve_4, reject_4) => { require(["./ImageDrawer.js"], resolve_4, reject_4); }).then(__importStar)), { ImagePreloaderPlugin } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./ImagePreloader.js"))) : new Promise((resolve_5, reject_5) => { require(["./ImagePreloader.js"], resolve_5, reject_5); }).then(__importStar));
105
+ engine.checkVersion("4.0.0-beta.1");
106
+ await engine.pluginManager.register(async (e) => {
107
+ const { ImagePreloaderPlugin } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./ImagePreloader.js"))) : new Promise((resolve_4, reject_4) => { require(["./ImagePreloader.js"], resolve_4, reject_4); }).then(__importStar));
96
108
  addLoadImageToEngine(e);
97
- const preloader = new ImagePreloaderPlugin();
98
- e.addPlugin(preloader);
99
- e.addShape(new ImageDrawer(e));
109
+ e.pluginManager.addPlugin(new ImagePreloaderPlugin(e));
110
+ e.pluginManager.addShape(Utils_js_1.shapeTypes, async (container) => {
111
+ const { ImageDrawer } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./ImageDrawer.js"))) : new Promise((resolve_5, reject_5) => { require(["./ImageDrawer.js"], resolve_5, reject_5); }).then(__importStar));
112
+ return new ImageDrawer(e, container);
113
+ });
100
114
  });
101
115
  }
102
116
  });
package/324.min.js DELETED
@@ -1,2 +0,0 @@
1
- /*! For license information please see 324.min.js.LICENSE.txt */
2
- (this.webpackChunk_tsparticles_shape_image=this.webpackChunk_tsparticles_shape_image||[]).push([[324,337,413],{324(e,t,a){a.d(t,{ImageDrawer:()=>r});var o=a(303),i=a(413),n=a(337);class r{constructor(e){this.validTypes=["image","images"],this.loadImageShape=async e=>{if(!this._engine.loadImage)throw new Error("Image shape not initialized");await this._engine.loadImage({gif:e.gif,name:e.name,replaceColor:e.replaceColor,src:e.src})},this._engine=e}addImage(e){this._engine.images??=[],this._engine.images.push(e)}draw(e){const{context:t,radius:a,particle:i,opacity:r}=e,s=i.image,l=s?.element;if(s){if(t.globalAlpha=r,s.gif&&s.gifData)(0,n.zS)(e);else if(l){const e=s.ratio,i={x:-a,y:-a},n=a*o.double;t.drawImage(l,i.x,i.y,n,n/e)}t.globalAlpha=o.defaultAlpha}}getSidesCount(){return 12}async init(e){const t=e.actualOptions;if(t.preload&&this._engine.loadImage)for(const e of t.preload)await this._engine.loadImage(e)}loadShape(e){if("image"!==e.shape&&"images"!==e.shape)return;this._engine.images??=[];const t=e.shapeData;if(!t)return;this._engine.images.find((e=>e.name===t.name||e.source===t.src))||this.loadImageShape(t).then((()=>{this.loadShape(e)}))}particleInit(e,t){if("image"!==t.shape&&"images"!==t.shape)return;this._engine.images??=[];const a=this._engine.images,n=t.shapeData;if(!n)return;const r=t.getFillColor(),s=a.find((e=>e.name===n.name||e.source===n.src));if(!s)return;const l=n.replaceColor;s.loading?setTimeout((()=>{this.particleInit(e,t)})):(async()=>{let a;a=s.svgData&&r?await(0,i.d)(s,n,r,t,e.hdr):{color:r,data:s,element:s.element,gif:s.gif,gifData:s.gifData,gifLoopCount:s.gifLoopCount,loaded:!0,ratio:n.width&&n.height?n.width/n.height:s.ratio??o.defaultRatio,replaceColor:l,source:n.src},a.ratio||(a.ratio=1);const c={image:a,fill:n.fill??t.shapeFill,close:n.close??t.shapeClose};t.image=c.image,t.shapeFill=c.fill,t.shapeClose=c.close})()}}},337(e,t,a){a.d(t,{zS:()=>p,loadGifImage:()=>m});var o=a(303),i=a(413);const n=[0,4,2,1],r=[8,8,4,2];class s{constructor(e){this.pos=0,this.data=new Uint8ClampedArray(e)}getString(e){const t=this.data.slice(this.pos,this.pos+e);return this.pos+=t.length,t.reduce(((e,t)=>e+String.fromCharCode(t)),"")}nextByte(){return this.data[this.pos++]}nextTwoBytes(){return this.pos+=2,this.data[this.pos-2]+(this.data[this.pos-1]<<8)}readSubBlocks(){let e="",t=0;do{t=this.data[this.pos++];for(let a=t;--a>=0;e+=String.fromCharCode(this.data[this.pos++]));}while(0!==t);return e}readSubBlocksBin(){let e=this.data[this.pos],t=0;for(let a=0;0!==e;a+=e+1,e=this.data[this.pos+a])t+=e;const a=new Uint8Array(t);e=this.data[this.pos++];for(let t=0;0!==e;e=this.data[this.pos++])for(let o=e;--o>=0;a[t++]=this.data[this.pos++]);return a}skipSubBlocks(){for(const e=1,t=0;this.data[this.pos]!==t;this.pos+=this.data[this.pos]+e);this.pos++}}var l,c;!function(e){e[e.Replace=0]="Replace",e[e.Combine=1]="Combine",e[e.RestoreBackground=2]="RestoreBackground",e[e.RestorePrevious=3]="RestorePrevious",e[e.UndefinedA=4]="UndefinedA",e[e.UndefinedB=5]="UndefinedB",e[e.UndefinedC=6]="UndefinedC",e[e.UndefinedD=7]="UndefinedD"}(l||(l={})),function(e){e[e.Extension=33]="Extension",e[e.ApplicationExtension=255]="ApplicationExtension",e[e.GraphicsControlExtension=249]="GraphicsControlExtension",e[e.PlainTextExtension=1]="PlainTextExtension",e[e.CommentExtension=254]="CommentExtension",e[e.Image=44]="Image",e[e.EndOfFile=59]="EndOfFile"}(c||(c={}));const g=0,h=0;function d(e,t){const a=[];for(let o=0;o<t;o++)a.push({r:e.data[e.pos],g:e.data[e.pos+1],b:e.data[e.pos+2]}),e.pos+=3;return a}async function f(e,t,a,o,i,s){switch(e.nextByte()){case c.EndOfFile:return!0;case c.Image:await async function(e,t,a,o,i,s){const l=t.frames[o(!0)];l.left=e.nextTwoBytes(),l.top=e.nextTwoBytes(),l.width=e.nextTwoBytes(),l.height=e.nextTwoBytes();const c=e.nextByte(),g=!(128&~c),h=!(64&~c);l.sortFlag=!(32&~c),l.reserved=(24&c)>>>3;const f=1<<1+(7&c);g&&(l.localColorTable=d(e,f));const p=e=>{const{r:o,g:n,b:r}=(g?l.localColorTable:t.globalColorTable)[e];return e!==i(null)?{r:o,g:n,b:r,a:255}:{r:o,g:n,b:r,a:a?Math.trunc((o+n+r)/3):0}},m=(()=>{try{return new ImageData(l.width,l.height,{colorSpace:"srgb"})}catch(e){if(e instanceof DOMException&&"IndexSizeError"===e.name)return null;throw e}})();if(null==m)throw new EvalError("GIF frame size is to large");const u=e.nextByte(),w=e.readSubBlocksBin(),x=1<<u,b=(e,t)=>{const a=e>>>3,o=7&e;return(w[a]+(w[a+1]<<8)+(w[a+2]<<16)&(1<<t)-1<<o)>>>o};if(h){for(let a=0,i=u+1,c=0,g=[[0]],h=0;h<4;h++){if(n[h]<l.height){let e=0,t=0,o=!1;for(;!o;){const s=a;if(a=b(c,i),c+=i+1,a===x){i=u+1,g.length=x+2;for(let e=0;e<g.length;e++)g[e]=e<x?[e]:[]}else{a>=g.length?g.push(g[s].concat(g[s][0])):s!==x&&g.push(g[s].concat(g[a][0]));for(const o of g[a]){const{r:a,g:i,b:s,a:c}=p(o);m.data.set([a,i,s,c],n[h]*l.width+r[h]*t+e%(4*l.width)),e+=4}g.length===1<<i&&i<12&&i++}e===4*l.width*(t+1)&&(t++,n[h]+r[h]*t>=l.height&&(o=!0))}}s?.(e.pos/(e.data.length-1),o(!1)+1,m,{x:l.left,y:l.top},{width:t.width,height:t.height})}l.image=m,l.bitmap=await createImageBitmap(m)}else{let a=0,i=u+1,n=0,r=-4;const c=[[0]];for(;;){const e=a;if(a=b(n,i),n+=i,a===x){i=u+1,c.length=x+2;for(let e=0;e<c.length;e++)c[e]=e<x?[e]:[]}else{if(a===x+1)break;a>=c.length?c.push(c[e].concat(c[e][0])):e!==x&&c.push(c[e].concat(c[a][0]));for(const e of c[a]){const{r:t,g:a,b:o,a:i}=p(e);m.data.set([t,a,o,i],r),r+=4}c.length>=1<<i&&i<12&&i++}}l.image=m,l.bitmap=await createImageBitmap(m),s?.((e.pos+1)/e.data.length,o(!1)+1,l.image,{x:l.left,y:l.top},{width:t.width,height:t.height})}}(e,t,a,o,i,s);break;case c.Extension:!function(e,t,a,o){switch(e.nextByte()){case c.GraphicsControlExtension:{const i=t.frames[a(!1)];e.pos++;const n=e.nextByte();i.GCreserved=(224&n)>>>5,i.disposalMethod=(28&n)>>>2,i.userInputDelayFlag=!(2&~n);const r=!(1&~n);i.delayTime=10*e.nextTwoBytes();const s=e.nextByte();r&&o(s),e.pos++;break}case c.ApplicationExtension:{e.pos++;const a={identifier:e.getString(8),authenticationCode:e.getString(3),data:e.readSubBlocksBin()};t.applicationExtensions.push(a);break}case c.CommentExtension:t.comments.push([a(!1),e.readSubBlocks()]);break;case c.PlainTextExtension:if(0===t.globalColorTable.length)throw new EvalError("plain text extension without global color table");e.pos++,t.frames[a(!1)].plainTextData={left:e.nextTwoBytes(),top:e.nextTwoBytes(),width:e.nextTwoBytes(),height:e.nextTwoBytes(),charSize:{width:e.nextTwoBytes(),height:e.nextTwoBytes()},foregroundColor:e.nextByte(),backgroundColor:e.nextByte(),text:e.readSubBlocks()};break;default:e.skipSubBlocks()}}(e,t,o,i);break;default:throw new EvalError("undefined block found")}return!1}function p(e){const{context:t,radius:a,particle:i,delta:n}=e,r=i.image;if(!r?.gifData||!r.gif)return;const s=new OffscreenCanvas(r.gifData.width,r.gifData.height),c=s.getContext("2d");if(!c)throw new Error("could not create offscreen canvas context");c.imageSmoothingQuality="low",c.imageSmoothingEnabled=!1,c.clearRect(g,h,s.width,s.height),i.gifLoopCount??=r.gifLoopCount??0;let d=i.gifFrame??0;const f={x:-r.gifData.width*o.half,y:-r.gifData.height*o.half},p=r.gifData.frames[d];if(i.gifTime??=0,p.bitmap){switch(t.scale(a/r.gifData.width,a/r.gifData.height),p.disposalMethod){case l.UndefinedA:case l.UndefinedB:case l.UndefinedC:case l.UndefinedD:case l.Replace:c.drawImage(p.bitmap,p.left,p.top),t.drawImage(s,f.x,f.y),c.clearRect(g,h,s.width,s.height);break;case l.Combine:c.drawImage(p.bitmap,p.left,p.top),t.drawImage(s,f.x,f.y);break;case l.RestoreBackground:c.drawImage(p.bitmap,p.left,p.top),t.drawImage(s,f.x,f.y),c.clearRect(g,h,s.width,s.height),r.gifData.globalColorTable.length?c.putImageData(r.gifData.backgroundImage,f.x,f.y):c.putImageData(r.gifData.frames[0].image,f.x+p.left,f.y+p.top);break;case l.RestorePrevious:{const e=c.getImageData(g,h,s.width,s.height);c.drawImage(p.bitmap,p.left,p.top),t.drawImage(s,f.x,f.y),c.clearRect(g,h,s.width,s.height),c.putImageData(e,g,h)}}if(i.gifTime+=n.value,i.gifTime>p.delayTime){if(i.gifTime-=p.delayTime,++d>=r.gifData.frames.length){if(--i.gifLoopCount<=0)return;d=0,c.clearRect(g,h,s.width,s.height)}i.gifFrame=d}t.scale(r.gifData.width/a,r.gifData.height/a)}}async function m(e){if("gif"===e.type){e.loading=!0;try{e.gifData=await async function(e,t,a){a??=!1;const o=await fetch(e);if(!o.ok&&404===o.status)throw new EvalError("file not found");const i=await o.arrayBuffer(),n={width:0,height:0,totalTime:0,colorRes:0,pixelAspectRatio:0,frames:[],sortFlag:!1,globalColorTable:[],backgroundImage:new ImageData(1,1,{colorSpace:"srgb"}),comments:[],applicationExtensions:[]},r=new s(new Uint8ClampedArray(i));if("GIF89a"!==r.getString(6))throw new Error("not a supported GIF file");n.width=r.nextTwoBytes(),n.height=r.nextTwoBytes();const c=r.nextByte(),g=!(128&~c);n.colorRes=(112&c)>>>4,n.sortFlag=!(8&~c);const h=1<<1+(7&c),p=r.nextByte();n.pixelAspectRatio=r.nextByte(),0!==n.pixelAspectRatio&&(n.pixelAspectRatio=(n.pixelAspectRatio+15)/64),g&&(n.globalColorTable=d(r,h));const m=(()=>{try{return new ImageData(n.width,n.height,{colorSpace:"srgb"})}catch(e){if(e instanceof DOMException&&"IndexSizeError"===e.name)return null;throw e}})();if(null==m)throw new Error("GIF frame size is to large");const{r:u,g:w,b:x}=n.globalColorTable[p];m.data.set(g?[u,w,x,255]:[0,0,0,0]);for(let e=4;e<m.data.length;e*=2)m.data.copyWithin(e,0,e);n.backgroundImage=m;let b=-1,y=!0,C=-1;const I=e=>(e&&(y=!0),b),E=e=>(null!=e&&(C=e),C);try{do{y&&(n.frames.push({left:0,top:0,width:0,height:0,disposalMethod:l.Replace,image:new ImageData(1,1,{colorSpace:"srgb"}),plainTextData:null,userInputDelayFlag:!1,delayTime:0,sortFlag:!1,localColorTable:[],reserved:0,GCreserved:0}),b++,C=-1,y=!1)}while(!await f(r,n,a,I,E,t));n.frames.length--;for(const e of n.frames){if(e.userInputDelayFlag&&0===e.delayTime){n.totalTime=1/0;break}n.totalTime+=e.delayTime}return n}catch(e){if(e instanceof EvalError)throw new Error(`error while parsing frame ${b.toString()} "${e.message}"`);throw e}}(e.source),e.gifLoopCount=function(e){for(const t of e.applicationExtensions)if(t.identifier+t.authenticationCode==="NETSCAPE2.0")return t.data[1]+(t.data[2]<<8);return NaN}(e.gifData),e.gifLoopCount||(e.gifLoopCount=1/0)}catch{e.error=!0}e.loading=!1}else await(0,i.loadImage)(e)}},413(e,t,a){a.d(t,{d:()=>s,downloadSvgImage:()=>r,loadImage:()=>n});var o=a(303);const i=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d.]+%?\))|currentcolor/gi;async function n(e){return new Promise((t=>{e.loading=!0;const a=new Image;e.element=a,a.addEventListener("load",(()=>{e.loading=!1,t()})),a.addEventListener("error",(()=>{e.element=void 0,e.error=!0,e.loading=!1,(0,o.getLogger)().error(`Error loading image: ${e.source}`),t()})),a.src=e.source}))}async function r(e){if("svg"!==e.type)return void await n(e);e.loading=!0;const t=await fetch(e.source);t.ok?e.svgData=await t.text():((0,o.getLogger)().error("Image not found"),e.error=!0),e.loading=!1}function s(e,t,a,r,s=!1){const l=function(e,t,a,n=!1){const{svgData:r}=e;if(!r)return"";const s=(0,o.getStyleFromHsl)(t,n,a);if(r.includes("fill"))return r.replace(i,(()=>s));const l=r.indexOf(">");return`${r.substring(0,l)} fill="${s}"${r.substring(l)}`}(e,a,r.opacity?.value??1,s),c={color:a,gif:t.gif,data:{...e,svgData:l},loaded:!1,ratio:t.width/t.height,replaceColor:t.replaceColor,source:t.src};return new Promise((t=>{const a=new Blob([l],{type:"image/svg+xml"}),o=URL.createObjectURL(a),i=new Image;i.addEventListener("load",(()=>{c.loaded=!0,c.element=i,t(c),URL.revokeObjectURL(o)}));i.addEventListener("error",(()=>{(async()=>{URL.revokeObjectURL(o);const a={...e,error:!1,loading:!0};await n(a),c.loaded=!0,c.element=a.element,t(c)})()})),i.src=o}))}}}]);
@@ -1 +0,0 @@
1
- /*! tsParticles Image Shape v4.0.0-alpha.8 by Matteo Bruni */
package/337.min.js DELETED
@@ -1,2 +0,0 @@
1
- /*! For license information please see 337.min.js.LICENSE.txt */
2
- (this.webpackChunk_tsparticles_shape_image=this.webpackChunk_tsparticles_shape_image||[]).push([[337,413],{337(e,t,a){a.d(t,{zS:()=>p,loadGifImage:()=>u});var o=a(303),n=a(413);const i=[0,4,2,1],r=[8,8,4,2];class s{constructor(e){this.pos=0,this.data=new Uint8ClampedArray(e)}getString(e){const t=this.data.slice(this.pos,this.pos+e);return this.pos+=t.length,t.reduce(((e,t)=>e+String.fromCharCode(t)),"")}nextByte(){return this.data[this.pos++]}nextTwoBytes(){return this.pos+=2,this.data[this.pos-2]+(this.data[this.pos-1]<<8)}readSubBlocks(){let e="",t=0;do{t=this.data[this.pos++];for(let a=t;--a>=0;e+=String.fromCharCode(this.data[this.pos++]));}while(0!==t);return e}readSubBlocksBin(){let e=this.data[this.pos],t=0;for(let a=0;0!==e;a+=e+1,e=this.data[this.pos+a])t+=e;const a=new Uint8Array(t);e=this.data[this.pos++];for(let t=0;0!==e;e=this.data[this.pos++])for(let o=e;--o>=0;a[t++]=this.data[this.pos++]);return a}skipSubBlocks(){for(const e=1,t=0;this.data[this.pos]!==t;this.pos+=this.data[this.pos]+e);this.pos++}}var l,c;!function(e){e[e.Replace=0]="Replace",e[e.Combine=1]="Combine",e[e.RestoreBackground=2]="RestoreBackground",e[e.RestorePrevious=3]="RestorePrevious",e[e.UndefinedA=4]="UndefinedA",e[e.UndefinedB=5]="UndefinedB",e[e.UndefinedC=6]="UndefinedC",e[e.UndefinedD=7]="UndefinedD"}(l||(l={})),function(e){e[e.Extension=33]="Extension",e[e.ApplicationExtension=255]="ApplicationExtension",e[e.GraphicsControlExtension=249]="GraphicsControlExtension",e[e.PlainTextExtension=1]="PlainTextExtension",e[e.CommentExtension=254]="CommentExtension",e[e.Image=44]="Image",e[e.EndOfFile=59]="EndOfFile"}(c||(c={}));const g=0,d=0;function h(e,t){const a=[];for(let o=0;o<t;o++)a.push({r:e.data[e.pos],g:e.data[e.pos+1],b:e.data[e.pos+2]}),e.pos+=3;return a}async function f(e,t,a,o,n,s){switch(e.nextByte()){case c.EndOfFile:return!0;case c.Image:await async function(e,t,a,o,n,s){const l=t.frames[o(!0)];l.left=e.nextTwoBytes(),l.top=e.nextTwoBytes(),l.width=e.nextTwoBytes(),l.height=e.nextTwoBytes();const c=e.nextByte(),g=!(128&~c),d=!(64&~c);l.sortFlag=!(32&~c),l.reserved=(24&c)>>>3;const f=1<<1+(7&c);g&&(l.localColorTable=h(e,f));const p=e=>{const{r:o,g:i,b:r}=(g?l.localColorTable:t.globalColorTable)[e];return e!==n(null)?{r:o,g:i,b:r,a:255}:{r:o,g:i,b:r,a:a?Math.trunc((o+i+r)/3):0}},u=(()=>{try{return new ImageData(l.width,l.height,{colorSpace:"srgb"})}catch(e){if(e instanceof DOMException&&"IndexSizeError"===e.name)return null;throw e}})();if(null==u)throw new EvalError("GIF frame size is to large");const m=e.nextByte(),w=e.readSubBlocksBin(),x=1<<m,b=(e,t)=>{const a=e>>>3,o=7&e;return(w[a]+(w[a+1]<<8)+(w[a+2]<<16)&(1<<t)-1<<o)>>>o};if(d){for(let a=0,n=m+1,c=0,g=[[0]],d=0;d<4;d++){if(i[d]<l.height){let e=0,t=0,o=!1;for(;!o;){const s=a;if(a=b(c,n),c+=n+1,a===x){n=m+1,g.length=x+2;for(let e=0;e<g.length;e++)g[e]=e<x?[e]:[]}else{a>=g.length?g.push(g[s].concat(g[s][0])):s!==x&&g.push(g[s].concat(g[a][0]));for(const o of g[a]){const{r:a,g:n,b:s,a:c}=p(o);u.data.set([a,n,s,c],i[d]*l.width+r[d]*t+e%(4*l.width)),e+=4}g.length===1<<n&&n<12&&n++}e===4*l.width*(t+1)&&(t++,i[d]+r[d]*t>=l.height&&(o=!0))}}s?.(e.pos/(e.data.length-1),o(!1)+1,u,{x:l.left,y:l.top},{width:t.width,height:t.height})}l.image=u,l.bitmap=await createImageBitmap(u)}else{let a=0,n=m+1,i=0,r=-4;const c=[[0]];for(;;){const e=a;if(a=b(i,n),i+=n,a===x){n=m+1,c.length=x+2;for(let e=0;e<c.length;e++)c[e]=e<x?[e]:[]}else{if(a===x+1)break;a>=c.length?c.push(c[e].concat(c[e][0])):e!==x&&c.push(c[e].concat(c[a][0]));for(const e of c[a]){const{r:t,g:a,b:o,a:n}=p(e);u.data.set([t,a,o,n],r),r+=4}c.length>=1<<n&&n<12&&n++}}l.image=u,l.bitmap=await createImageBitmap(u),s?.((e.pos+1)/e.data.length,o(!1)+1,l.image,{x:l.left,y:l.top},{width:t.width,height:t.height})}}(e,t,a,o,n,s);break;case c.Extension:!function(e,t,a,o){switch(e.nextByte()){case c.GraphicsControlExtension:{const n=t.frames[a(!1)];e.pos++;const i=e.nextByte();n.GCreserved=(224&i)>>>5,n.disposalMethod=(28&i)>>>2,n.userInputDelayFlag=!(2&~i);const r=!(1&~i);n.delayTime=10*e.nextTwoBytes();const s=e.nextByte();r&&o(s),e.pos++;break}case c.ApplicationExtension:{e.pos++;const a={identifier:e.getString(8),authenticationCode:e.getString(3),data:e.readSubBlocksBin()};t.applicationExtensions.push(a);break}case c.CommentExtension:t.comments.push([a(!1),e.readSubBlocks()]);break;case c.PlainTextExtension:if(0===t.globalColorTable.length)throw new EvalError("plain text extension without global color table");e.pos++,t.frames[a(!1)].plainTextData={left:e.nextTwoBytes(),top:e.nextTwoBytes(),width:e.nextTwoBytes(),height:e.nextTwoBytes(),charSize:{width:e.nextTwoBytes(),height:e.nextTwoBytes()},foregroundColor:e.nextByte(),backgroundColor:e.nextByte(),text:e.readSubBlocks()};break;default:e.skipSubBlocks()}}(e,t,o,n);break;default:throw new EvalError("undefined block found")}return!1}function p(e){const{context:t,radius:a,particle:n,delta:i}=e,r=n.image;if(!r?.gifData||!r.gif)return;const s=new OffscreenCanvas(r.gifData.width,r.gifData.height),c=s.getContext("2d");if(!c)throw new Error("could not create offscreen canvas context");c.imageSmoothingQuality="low",c.imageSmoothingEnabled=!1,c.clearRect(g,d,s.width,s.height),n.gifLoopCount??=r.gifLoopCount??0;let h=n.gifFrame??0;const f={x:-r.gifData.width*o.half,y:-r.gifData.height*o.half},p=r.gifData.frames[h];if(n.gifTime??=0,p.bitmap){switch(t.scale(a/r.gifData.width,a/r.gifData.height),p.disposalMethod){case l.UndefinedA:case l.UndefinedB:case l.UndefinedC:case l.UndefinedD:case l.Replace:c.drawImage(p.bitmap,p.left,p.top),t.drawImage(s,f.x,f.y),c.clearRect(g,d,s.width,s.height);break;case l.Combine:c.drawImage(p.bitmap,p.left,p.top),t.drawImage(s,f.x,f.y);break;case l.RestoreBackground:c.drawImage(p.bitmap,p.left,p.top),t.drawImage(s,f.x,f.y),c.clearRect(g,d,s.width,s.height),r.gifData.globalColorTable.length?c.putImageData(r.gifData.backgroundImage,f.x,f.y):c.putImageData(r.gifData.frames[0].image,f.x+p.left,f.y+p.top);break;case l.RestorePrevious:{const e=c.getImageData(g,d,s.width,s.height);c.drawImage(p.bitmap,p.left,p.top),t.drawImage(s,f.x,f.y),c.clearRect(g,d,s.width,s.height),c.putImageData(e,g,d)}}if(n.gifTime+=i.value,n.gifTime>p.delayTime){if(n.gifTime-=p.delayTime,++h>=r.gifData.frames.length){if(--n.gifLoopCount<=0)return;h=0,c.clearRect(g,d,s.width,s.height)}n.gifFrame=h}t.scale(r.gifData.width/a,r.gifData.height/a)}}async function u(e){if("gif"===e.type){e.loading=!0;try{e.gifData=await async function(e,t,a){a??=!1;const o=await fetch(e);if(!o.ok&&404===o.status)throw new EvalError("file not found");const n=await o.arrayBuffer(),i={width:0,height:0,totalTime:0,colorRes:0,pixelAspectRatio:0,frames:[],sortFlag:!1,globalColorTable:[],backgroundImage:new ImageData(1,1,{colorSpace:"srgb"}),comments:[],applicationExtensions:[]},r=new s(new Uint8ClampedArray(n));if("GIF89a"!==r.getString(6))throw new Error("not a supported GIF file");i.width=r.nextTwoBytes(),i.height=r.nextTwoBytes();const c=r.nextByte(),g=!(128&~c);i.colorRes=(112&c)>>>4,i.sortFlag=!(8&~c);const d=1<<1+(7&c),p=r.nextByte();i.pixelAspectRatio=r.nextByte(),0!==i.pixelAspectRatio&&(i.pixelAspectRatio=(i.pixelAspectRatio+15)/64),g&&(i.globalColorTable=h(r,d));const u=(()=>{try{return new ImageData(i.width,i.height,{colorSpace:"srgb"})}catch(e){if(e instanceof DOMException&&"IndexSizeError"===e.name)return null;throw e}})();if(null==u)throw new Error("GIF frame size is to large");const{r:m,g:w,b:x}=i.globalColorTable[p];u.data.set(g?[m,w,x,255]:[0,0,0,0]);for(let e=4;e<u.data.length;e*=2)u.data.copyWithin(e,0,e);i.backgroundImage=u;let b=-1,y=!0,B=-1;const E=e=>(e&&(y=!0),b),C=e=>(null!=e&&(B=e),B);try{do{y&&(i.frames.push({left:0,top:0,width:0,height:0,disposalMethod:l.Replace,image:new ImageData(1,1,{colorSpace:"srgb"}),plainTextData:null,userInputDelayFlag:!1,delayTime:0,sortFlag:!1,localColorTable:[],reserved:0,GCreserved:0}),b++,B=-1,y=!1)}while(!await f(r,i,a,E,C,t));i.frames.length--;for(const e of i.frames){if(e.userInputDelayFlag&&0===e.delayTime){i.totalTime=1/0;break}i.totalTime+=e.delayTime}return i}catch(e){if(e instanceof EvalError)throw new Error(`error while parsing frame ${b.toString()} "${e.message}"`);throw e}}(e.source),e.gifLoopCount=function(e){for(const t of e.applicationExtensions)if(t.identifier+t.authenticationCode==="NETSCAPE2.0")return t.data[1]+(t.data[2]<<8);return NaN}(e.gifData),e.gifLoopCount||(e.gifLoopCount=1/0)}catch{e.error=!0}e.loading=!1}else await(0,n.loadImage)(e)}},413(e,t,a){a.d(t,{d:()=>s,downloadSvgImage:()=>r,loadImage:()=>i});var o=a(303);const n=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d.]+%?\))|currentcolor/gi;async function i(e){return new Promise((t=>{e.loading=!0;const a=new Image;e.element=a,a.addEventListener("load",(()=>{e.loading=!1,t()})),a.addEventListener("error",(()=>{e.element=void 0,e.error=!0,e.loading=!1,(0,o.getLogger)().error(`Error loading image: ${e.source}`),t()})),a.src=e.source}))}async function r(e){if("svg"!==e.type)return void await i(e);e.loading=!0;const t=await fetch(e.source);t.ok?e.svgData=await t.text():((0,o.getLogger)().error("Image not found"),e.error=!0),e.loading=!1}function s(e,t,a,r,s=!1){const l=function(e,t,a,i=!1){const{svgData:r}=e;if(!r)return"";const s=(0,o.getStyleFromHsl)(t,i,a);if(r.includes("fill"))return r.replace(n,(()=>s));const l=r.indexOf(">");return`${r.substring(0,l)} fill="${s}"${r.substring(l)}`}(e,a,r.opacity?.value??1,s),c={color:a,gif:t.gif,data:{...e,svgData:l},loaded:!1,ratio:t.width/t.height,replaceColor:t.replaceColor,source:t.src};return new Promise((t=>{const a=new Blob([l],{type:"image/svg+xml"}),o=URL.createObjectURL(a),n=new Image;n.addEventListener("load",(()=>{c.loaded=!0,c.element=n,t(c),URL.revokeObjectURL(o)}));n.addEventListener("error",(()=>{(async()=>{URL.revokeObjectURL(o);const a={...e,error:!1,loading:!0};await i(a),c.loaded=!0,c.element=a.element,t(c)})()})),n.src=o}))}}}]);
@@ -1 +0,0 @@
1
- /*! tsParticles Image Shape v4.0.0-alpha.8 by Matteo Bruni */
package/413.min.js DELETED
@@ -1,2 +0,0 @@
1
- /*! For license information please see 413.min.js.LICENSE.txt */
2
- (this.webpackChunk_tsparticles_shape_image=this.webpackChunk_tsparticles_shape_image||[]).push([[413],{413(e,r,t){t.d(r,{d:()=>i,downloadSvgImage:()=>s,loadImage:()=>n});var a=t(303);const o=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d.]+%?\))|currentcolor/gi;async function n(e){return new Promise((r=>{e.loading=!0;const t=new Image;e.element=t,t.addEventListener("load",(()=>{e.loading=!1,r()})),t.addEventListener("error",(()=>{e.element=void 0,e.error=!0,e.loading=!1,(0,a.getLogger)().error(`Error loading image: ${e.source}`),r()})),t.src=e.source}))}async function s(e){if("svg"!==e.type)return void await n(e);e.loading=!0;const r=await fetch(e.source);r.ok?e.svgData=await r.text():((0,a.getLogger)().error("Image not found"),e.error=!0),e.loading=!1}function i(e,r,t,s,i=!1){const c=function(e,r,t,n=!1){const{svgData:s}=e;if(!s)return"";const i=(0,a.getStyleFromHsl)(r,n,t);if(s.includes("fill"))return s.replace(o,(()=>i));const c=s.indexOf(">");return`${s.substring(0,c)} fill="${i}"${s.substring(c)}`}(e,t,s.opacity?.value??1,i),l={color:t,gif:r.gif,data:{...e,svgData:c},loaded:!1,ratio:r.width/r.height,replaceColor:r.replaceColor,source:r.src};return new Promise((r=>{const t=new Blob([c],{type:"image/svg+xml"}),a=URL.createObjectURL(t),o=new Image;o.addEventListener("load",(()=>{l.loaded=!0,l.element=o,r(l),URL.revokeObjectURL(a)}));o.addEventListener("error",(()=>{(async()=>{URL.revokeObjectURL(a);const t={...e,error:!1,loading:!0};await n(t),l.loaded=!0,l.element=t.element,r(l)})()})),o.src=a}))}}}]);
@@ -1 +0,0 @@
1
- /*! tsParticles Image Shape v4.0.0-alpha.8 by Matteo Bruni */
package/72.min.js DELETED
@@ -1,2 +0,0 @@
1
- /*! For license information please see 72.min.js.LICENSE.txt */
2
- (this.webpackChunk_tsparticles_shape_image=this.webpackChunk_tsparticles_shape_image||[]).push([[72],{72(e,i,s){s.d(i,{ImagePreloaderPlugin:()=>t});var r=s(303);class o{constructor(){this.src="",this.gif=!1}load(e){(0,r.isNull)(e)||(void 0!==e.gif&&(this.gif=e.gif),void 0!==e.height&&(this.height=e.height),void 0!==e.name&&(this.name=e.name),void 0!==e.replaceColor&&(this.replaceColor=e.replaceColor),void 0!==e.src&&(this.src=e.src),void 0!==e.width&&(this.width=e.width))}}class t{constructor(){this.id="imagePreloader"}async getPlugin(){return await Promise.resolve(),{}}loadOptions(e,i,s){if(!s?.preload)return;i.preload??=[];const r=i.preload;for(const e of s.preload){const i=r.find((i=>i.name===e.name||i.src===e.src));if(i)i.load(e);else{const i=new o;i.load(e),r.push(i)}}}needsPlugin(){return!0}}}}]);
@@ -1 +0,0 @@
1
- /*! tsParticles Image Shape v4.0.0-alpha.8 by Matteo Bruni */
@@ -1,30 +0,0 @@
1
- /*!
2
- * Author : Matteo Bruni
3
- * MIT license: https://opensource.org/licenses/MIT
4
- * Demo / Generator : https://particles.js.org/
5
- * GitHub : https://www.github.com/matteobruni/tsparticles
6
- * How to use? : Check the GitHub README
7
- * v4.0.0-alpha.8
8
- */
9
- "use strict";
10
- /*
11
- * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
12
- * This devtool is neither made for production nor for readable output files.
13
- * It uses "eval()" calls to create a separate source file in the browser devtools.
14
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
15
- * or disable the default devtool with "devtool: false".
16
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
17
- */
18
- (this["webpackChunk_tsparticles_shape_image"] = this["webpackChunk_tsparticles_shape_image"] || []).push([["dist_browser_Utils_js"],{
19
-
20
- /***/ "./dist/browser/Utils.js"
21
- /*!*******************************!*\
22
- !*** ./dist/browser/Utils.js ***!
23
- \*******************************/
24
- (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25
-
26
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ downloadSvgImage: () => (/* binding */ downloadSvgImage),\n/* harmony export */ loadImage: () => (/* binding */ loadImage),\n/* harmony export */ replaceImageColor: () => (/* binding */ replaceImageColor)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nconst stringStart = 0,\n defaultOpacity = 1;\nconst currentColorRegex = /(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\\((-?\\d+%?[,\\s]+){2,3}\\s*[\\d.]+%?\\))|currentcolor/gi;\nfunction replaceColorSvg(imageShape, color, opacity, hdr = false) {\n const {\n svgData\n } = imageShape;\n if (!svgData) {\n return \"\";\n }\n const colorStyle = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getStyleFromHsl)(color, hdr, opacity);\n if (svgData.includes(\"fill\")) {\n return svgData.replace(currentColorRegex, () => colorStyle);\n }\n const preFillIndex = svgData.indexOf(\">\");\n return `${svgData.substring(stringStart, preFillIndex)} fill=\"${colorStyle}\"${svgData.substring(preFillIndex)}`;\n}\nasync function loadImage(image) {\n return new Promise(resolve => {\n image.loading = true;\n const img = new Image();\n image.element = img;\n img.addEventListener(\"load\", () => {\n image.loading = false;\n resolve();\n });\n img.addEventListener(\"error\", () => {\n image.element = undefined;\n image.error = true;\n image.loading = false;\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getLogger)().error(`Error loading image: ${image.source}`);\n resolve();\n });\n img.src = image.source;\n });\n}\nasync function downloadSvgImage(image) {\n if (image.type !== \"svg\") {\n await loadImage(image);\n return;\n }\n image.loading = true;\n const response = await fetch(image.source);\n if (!response.ok) {\n (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getLogger)().error(\"Image not found\");\n image.error = true;\n } else {\n image.svgData = await response.text();\n }\n image.loading = false;\n}\nfunction replaceImageColor(image, imageData, color, particle, hdr = false) {\n const svgColoredData = replaceColorSvg(image, color, particle.opacity?.value ?? defaultOpacity, hdr),\n imageRes = {\n color,\n gif: imageData.gif,\n data: {\n ...image,\n svgData: svgColoredData\n },\n loaded: false,\n ratio: imageData.width / imageData.height,\n replaceColor: imageData.replaceColor,\n source: imageData.src\n };\n return new Promise(resolve => {\n const svg = new Blob([svgColoredData], {\n type: \"image/svg+xml\"\n }),\n url = URL.createObjectURL(svg),\n img = new Image();\n img.addEventListener(\"load\", () => {\n imageRes.loaded = true;\n imageRes.element = img;\n resolve(imageRes);\n URL.revokeObjectURL(url);\n });\n const errorHandler = async () => {\n URL.revokeObjectURL(url);\n const img2 = {\n ...image,\n error: false,\n loading: true\n };\n await loadImage(img2);\n imageRes.loaded = true;\n imageRes.element = img2.element;\n resolve(imageRes);\n };\n img.addEventListener(\"error\", () => void errorHandler());\n img.src = url;\n });\n}\n\n//# sourceURL=webpack://@tsparticles/shape-image/./dist/browser/Utils.js?\n}");
27
-
28
- /***/ }
29
-
30
- }]);
@@ -1 +0,0 @@
1
- /*! tsParticles Image Shape v4.0.0-alpha.8 by Matteo Bruni */