@tsparticles/effect-trail 3.0.3 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
package/295.min.js ADDED
@@ -0,0 +1,2 @@
1
+ /*! For license information please see 295.min.js.LICENSE.txt */
2
+ (this.webpackChunk_tsparticles_effect_trail=this.webpackChunk_tsparticles_effect_trail||[]).push([[295],{295:(t,a,i)=>{i.d(a,{TrailDrawer:()=>r});var e=i(533);const l=.5;class r{async draw(t){const{context:a,radius:i,particle:e}=t,r=2*i,n=e.container.retina.pixelRatio,o=e.getPosition();if(!e.trail||!e.trailLength)return;const s=e.trailLength+i;if(e.trail.push({color:a.fillStyle??a.strokeStyle,position:{x:o.x,y:o.y}}),e.trail.length<2)return;for(;e.trail.length>s;)e.trail.shift();const h=Math.min(e.trail.length,s),c=o.x,x=o.y,d=e.container.canvas.size.width+r,g=e.container.canvas.size.height+r;let y=e.trail[h-1].position;const p=1,f=0,m=0,M=1;a.setTransform(p,f,m,M,o.x,o.y);for(let t=h;t>0;t--){const i=e.trail[t-1],o=i.position;a.beginPath(),a.moveTo(y.x-c,y.y-x);const s={x:(y.x+d)%d,y:(y.y+g)%g};if(Math.abs(y.x-o.x)>d*l||Math.abs(y.y-o.y)>g*l){y=o;continue}a.lineTo((Math.abs(y.x-o.x)>d*l?s.x:o.x)-c,(Math.abs(y.y-o.y)>g*l?s.y:o.y)-x);const p=Math.max(t/h*r,n,e.trailMinWidth??-1),f=a.globalAlpha;a.globalAlpha=e.trailFade?t/h:1,a.lineWidth=e.trailMaxWidth?Math.min(p,e.trailMaxWidth):p,a.strokeStyle=i.color,a.stroke(),a.globalAlpha=f,y=o}const{transformData:b}=t;a.setTransform(b.a,b.b,b.c,b.d,o.x,o.y),await Promise.resolve()}async particleInit(t,a){a.trail=[];const i=a.effectData;a.trailFade=i?.fade??!0,a.trailLength=(0,e.getRangeValue)(i?.length??10)*t.retina.pixelRatio,a.trailMaxWidth=i?.maxWidth?(0,e.getRangeValue)(i.maxWidth)*t.retina.pixelRatio:void 0,a.trailMinWidth=i?.minWidth?(0,e.getRangeValue)(i.minWidth)*t.retina.pixelRatio:void 0,await Promise.resolve()}}}}]);
@@ -0,0 +1 @@
1
+ /*! tsParticles Trail Shape v3.2.0 by Matteo Bruni */
@@ -1,11 +1,12 @@
1
1
  import { getRangeValue, } from "@tsparticles/engine";
2
+ const double = 2, minTrailLength = 2, trailLengthOffset = 1, noItems = 0, half = 0.5, minWidth = -1, defaultLength = 10, defaultAlpha = 1;
2
3
  export class TrailDrawer {
3
- draw(data) {
4
- const { context, radius, particle } = data, diameter = radius * 2, pxRatio = particle.container.retina.pixelRatio, currentPos = particle.getPosition();
4
+ async draw(data) {
5
+ const { context, radius, particle } = data, diameter = radius * double, pxRatio = particle.container.retina.pixelRatio, currentPos = particle.getPosition();
5
6
  if (!particle.trail || !particle.trailLength) {
6
7
  return;
7
8
  }
8
- const pathLength = particle.trailLength;
9
+ const pathLength = particle.trailLength + radius;
9
10
  particle.trail.push({
10
11
  color: context.fillStyle ?? context.strokeStyle,
11
12
  position: {
@@ -13,7 +14,7 @@ export class TrailDrawer {
13
14
  y: currentPos.y,
14
15
  },
15
16
  });
16
- if (particle.trail.length < 2) {
17
+ if (particle.trail.length < minTrailLength) {
17
18
  return;
18
19
  }
19
20
  while (particle.trail.length > pathLength) {
@@ -26,25 +27,30 @@ export class TrailDrawer {
26
27
  width: particle.container.canvas.size.width + diameter,
27
28
  height: particle.container.canvas.size.height + diameter,
28
29
  };
29
- let lastPos = particle.trail[trailLength - 1].position;
30
- context.setTransform(1, 0, 0, 1, currentPos.x, currentPos.y);
31
- for (let i = trailLength; i > 0; i--) {
32
- const step = particle.trail[i - 1], position = step.position;
30
+ let lastPos = particle.trail[trailLength - trailLengthOffset].position;
31
+ const defaultTransform = {
32
+ a: 1,
33
+ b: 0,
34
+ c: 0,
35
+ d: 1,
36
+ };
37
+ context.setTransform(defaultTransform.a, defaultTransform.b, defaultTransform.c, defaultTransform.d, currentPos.x, currentPos.y);
38
+ for (let i = trailLength; i > noItems; i--) {
39
+ const step = particle.trail[i - trailLengthOffset], position = step.position;
33
40
  context.beginPath();
34
41
  context.moveTo(lastPos.x - offsetPos.x, lastPos.y - offsetPos.y);
35
42
  const warp = {
36
43
  x: (lastPos.x + canvasSize.width) % canvasSize.width,
37
44
  y: (lastPos.y + canvasSize.height) % canvasSize.height,
38
45
  };
39
- if (Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ||
40
- Math.abs(lastPos.y - position.y) > canvasSize.height / 2) {
46
+ if (Math.abs(lastPos.x - position.x) > canvasSize.width * half ||
47
+ Math.abs(lastPos.y - position.y) > canvasSize.height * half) {
41
48
  lastPos = position;
42
49
  continue;
43
50
  }
44
- context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height / 2 ? warp.y : position.y) - offsetPos.y);
45
- const width = Math.max((i / trailLength) * diameter, pxRatio, particle.trailMinWidth ?? -1);
46
- const oldAlpha = context.globalAlpha;
47
- context.globalAlpha = particle.trailFade ? i / trailLength : 1;
51
+ context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width * half ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height * half ? warp.y : position.y) - offsetPos.y);
52
+ const width = Math.max((i / trailLength) * diameter, pxRatio, particle.trailMinWidth ?? minWidth), oldAlpha = context.globalAlpha;
53
+ context.globalAlpha = particle.trailFade ? i / trailLength : defaultAlpha;
48
54
  context.lineWidth = particle.trailMaxWidth ? Math.min(width, particle.trailMaxWidth) : width;
49
55
  context.strokeStyle = step.color;
50
56
  context.stroke();
@@ -53,17 +59,19 @@ export class TrailDrawer {
53
59
  }
54
60
  const { transformData } = data;
55
61
  context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, currentPos.x, currentPos.y);
62
+ await Promise.resolve();
56
63
  }
57
- particleInit(container, particle) {
64
+ async particleInit(container, particle) {
58
65
  particle.trail = [];
59
66
  const effectData = particle.effectData;
60
67
  particle.trailFade = effectData?.fade ?? true;
61
- particle.trailLength = getRangeValue(effectData?.length ?? 10) * container.retina.pixelRatio;
68
+ particle.trailLength = getRangeValue(effectData?.length ?? defaultLength) * container.retina.pixelRatio;
62
69
  particle.trailMaxWidth = effectData?.maxWidth
63
70
  ? getRangeValue(effectData.maxWidth) * container.retina.pixelRatio
64
71
  : undefined;
65
72
  particle.trailMinWidth = effectData?.minWidth
66
73
  ? getRangeValue(effectData.minWidth) * container.retina.pixelRatio
67
74
  : undefined;
75
+ await Promise.resolve();
68
76
  }
69
77
  }
package/browser/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { TrailDrawer } from "./TrailDrawer.js";
2
1
  export async function loadTrailEffect(engine, refresh = true) {
2
+ const { TrailDrawer } = await import("./TrailDrawer.js");
3
3
  await engine.addEffect("trail", new TrailDrawer(), refresh);
4
4
  }
@@ -2,13 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TrailDrawer = void 0;
4
4
  const engine_1 = require("@tsparticles/engine");
5
+ const double = 2, minTrailLength = 2, trailLengthOffset = 1, noItems = 0, half = 0.5, minWidth = -1, defaultLength = 10, defaultAlpha = 1;
5
6
  class TrailDrawer {
6
- draw(data) {
7
- const { context, radius, particle } = data, diameter = radius * 2, pxRatio = particle.container.retina.pixelRatio, currentPos = particle.getPosition();
7
+ async draw(data) {
8
+ const { context, radius, particle } = data, diameter = radius * double, pxRatio = particle.container.retina.pixelRatio, currentPos = particle.getPosition();
8
9
  if (!particle.trail || !particle.trailLength) {
9
10
  return;
10
11
  }
11
- const pathLength = particle.trailLength;
12
+ const pathLength = particle.trailLength + radius;
12
13
  particle.trail.push({
13
14
  color: context.fillStyle ?? context.strokeStyle,
14
15
  position: {
@@ -16,7 +17,7 @@ class TrailDrawer {
16
17
  y: currentPos.y,
17
18
  },
18
19
  });
19
- if (particle.trail.length < 2) {
20
+ if (particle.trail.length < minTrailLength) {
20
21
  return;
21
22
  }
22
23
  while (particle.trail.length > pathLength) {
@@ -29,25 +30,30 @@ class TrailDrawer {
29
30
  width: particle.container.canvas.size.width + diameter,
30
31
  height: particle.container.canvas.size.height + diameter,
31
32
  };
32
- let lastPos = particle.trail[trailLength - 1].position;
33
- context.setTransform(1, 0, 0, 1, currentPos.x, currentPos.y);
34
- for (let i = trailLength; i > 0; i--) {
35
- const step = particle.trail[i - 1], position = step.position;
33
+ let lastPos = particle.trail[trailLength - trailLengthOffset].position;
34
+ const defaultTransform = {
35
+ a: 1,
36
+ b: 0,
37
+ c: 0,
38
+ d: 1,
39
+ };
40
+ context.setTransform(defaultTransform.a, defaultTransform.b, defaultTransform.c, defaultTransform.d, currentPos.x, currentPos.y);
41
+ for (let i = trailLength; i > noItems; i--) {
42
+ const step = particle.trail[i - trailLengthOffset], position = step.position;
36
43
  context.beginPath();
37
44
  context.moveTo(lastPos.x - offsetPos.x, lastPos.y - offsetPos.y);
38
45
  const warp = {
39
46
  x: (lastPos.x + canvasSize.width) % canvasSize.width,
40
47
  y: (lastPos.y + canvasSize.height) % canvasSize.height,
41
48
  };
42
- if (Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ||
43
- Math.abs(lastPos.y - position.y) > canvasSize.height / 2) {
49
+ if (Math.abs(lastPos.x - position.x) > canvasSize.width * half ||
50
+ Math.abs(lastPos.y - position.y) > canvasSize.height * half) {
44
51
  lastPos = position;
45
52
  continue;
46
53
  }
47
- context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height / 2 ? warp.y : position.y) - offsetPos.y);
48
- const width = Math.max((i / trailLength) * diameter, pxRatio, particle.trailMinWidth ?? -1);
49
- const oldAlpha = context.globalAlpha;
50
- context.globalAlpha = particle.trailFade ? i / trailLength : 1;
54
+ context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width * half ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height * half ? warp.y : position.y) - offsetPos.y);
55
+ const width = Math.max((i / trailLength) * diameter, pxRatio, particle.trailMinWidth ?? minWidth), oldAlpha = context.globalAlpha;
56
+ context.globalAlpha = particle.trailFade ? i / trailLength : defaultAlpha;
51
57
  context.lineWidth = particle.trailMaxWidth ? Math.min(width, particle.trailMaxWidth) : width;
52
58
  context.strokeStyle = step.color;
53
59
  context.stroke();
@@ -56,18 +62,20 @@ class TrailDrawer {
56
62
  }
57
63
  const { transformData } = data;
58
64
  context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, currentPos.x, currentPos.y);
65
+ await Promise.resolve();
59
66
  }
60
- particleInit(container, particle) {
67
+ async particleInit(container, particle) {
61
68
  particle.trail = [];
62
69
  const effectData = particle.effectData;
63
70
  particle.trailFade = effectData?.fade ?? true;
64
- particle.trailLength = (0, engine_1.getRangeValue)(effectData?.length ?? 10) * container.retina.pixelRatio;
71
+ particle.trailLength = (0, engine_1.getRangeValue)(effectData?.length ?? defaultLength) * container.retina.pixelRatio;
65
72
  particle.trailMaxWidth = effectData?.maxWidth
66
73
  ? (0, engine_1.getRangeValue)(effectData.maxWidth) * container.retina.pixelRatio
67
74
  : undefined;
68
75
  particle.trailMinWidth = effectData?.minWidth
69
76
  ? (0, engine_1.getRangeValue)(effectData.minWidth) * container.retina.pixelRatio
70
77
  : undefined;
78
+ await Promise.resolve();
71
79
  }
72
80
  }
73
81
  exports.TrailDrawer = TrailDrawer;
package/cjs/index.js CHANGED
@@ -1,8 +1,31 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.loadTrailEffect = void 0;
4
- const TrailDrawer_js_1 = require("./TrailDrawer.js");
5
27
  async function loadTrailEffect(engine, refresh = true) {
6
- await engine.addEffect("trail", new TrailDrawer_js_1.TrailDrawer(), refresh);
28
+ const { TrailDrawer } = await Promise.resolve().then(() => __importStar(require("./TrailDrawer.js")));
29
+ await engine.addEffect("trail", new TrailDrawer(), refresh);
7
30
  }
8
31
  exports.loadTrailEffect = loadTrailEffect;
@@ -0,0 +1,30 @@
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
+ * v3.2.0
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_effect_trail"] = this["webpackChunk_tsparticles_effect_trail"] || []).push([["dist_browser_TrailDrawer_js"],{
19
+
20
+ /***/ "./dist/browser/TrailDrawer.js":
21
+ /*!*************************************!*\
22
+ !*** ./dist/browser/TrailDrawer.js ***!
23
+ \*************************************/
24
+ /***/ ((__unused_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 */ TrailDrawer: () => (/* binding */ TrailDrawer)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__);\n\nconst double = 2,\n minTrailLength = 2,\n trailLengthOffset = 1,\n noItems = 0,\n half = 0.5,\n minWidth = -1,\n defaultLength = 10,\n defaultAlpha = 1;\nclass TrailDrawer {\n async draw(data) {\n const {\n context,\n radius,\n particle\n } = data,\n diameter = radius * double,\n pxRatio = particle.container.retina.pixelRatio,\n currentPos = particle.getPosition();\n if (!particle.trail || !particle.trailLength) {\n return;\n }\n const pathLength = particle.trailLength + radius;\n particle.trail.push({\n color: context.fillStyle ?? context.strokeStyle,\n position: {\n x: currentPos.x,\n y: currentPos.y\n }\n });\n if (particle.trail.length < minTrailLength) {\n return;\n }\n while (particle.trail.length > pathLength) {\n particle.trail.shift();\n }\n const trailLength = Math.min(particle.trail.length, pathLength),\n offsetPos = {\n x: currentPos.x,\n y: currentPos.y\n },\n canvasSize = {\n width: particle.container.canvas.size.width + diameter,\n height: particle.container.canvas.size.height + diameter\n };\n let lastPos = particle.trail[trailLength - trailLengthOffset].position;\n const defaultTransform = {\n a: 1,\n b: 0,\n c: 0,\n d: 1\n };\n context.setTransform(defaultTransform.a, defaultTransform.b, defaultTransform.c, defaultTransform.d, currentPos.x, currentPos.y);\n for (let i = trailLength; i > noItems; i--) {\n const step = particle.trail[i - trailLengthOffset],\n position = step.position;\n context.beginPath();\n context.moveTo(lastPos.x - offsetPos.x, lastPos.y - offsetPos.y);\n const warp = {\n x: (lastPos.x + canvasSize.width) % canvasSize.width,\n y: (lastPos.y + canvasSize.height) % canvasSize.height\n };\n if (Math.abs(lastPos.x - position.x) > canvasSize.width * half || Math.abs(lastPos.y - position.y) > canvasSize.height * half) {\n lastPos = position;\n continue;\n }\n context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width * half ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height * half ? warp.y : position.y) - offsetPos.y);\n const width = Math.max(i / trailLength * diameter, pxRatio, particle.trailMinWidth ?? minWidth),\n oldAlpha = context.globalAlpha;\n context.globalAlpha = particle.trailFade ? i / trailLength : defaultAlpha;\n context.lineWidth = particle.trailMaxWidth ? Math.min(width, particle.trailMaxWidth) : width;\n context.strokeStyle = step.color;\n context.stroke();\n context.globalAlpha = oldAlpha;\n lastPos = position;\n }\n const {\n transformData\n } = data;\n context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, currentPos.x, currentPos.y);\n await Promise.resolve();\n }\n async particleInit(container, particle) {\n particle.trail = [];\n const effectData = particle.effectData;\n particle.trailFade = effectData?.fade ?? true;\n particle.trailLength = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData?.length ?? defaultLength) * container.retina.pixelRatio;\n particle.trailMaxWidth = effectData?.maxWidth ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData.maxWidth) * container.retina.pixelRatio : undefined;\n particle.trailMinWidth = effectData?.minWidth ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(effectData.minWidth) * container.retina.pixelRatio : undefined;\n await Promise.resolve();\n }\n}\n\n//# sourceURL=webpack://@tsparticles/effect-trail/./dist/browser/TrailDrawer.js?");
27
+
28
+ /***/ })
29
+
30
+ }]);
@@ -1,11 +1,12 @@
1
1
  import { getRangeValue, } from "@tsparticles/engine";
2
+ const double = 2, minTrailLength = 2, trailLengthOffset = 1, noItems = 0, half = 0.5, minWidth = -1, defaultLength = 10, defaultAlpha = 1;
2
3
  export class TrailDrawer {
3
- draw(data) {
4
- const { context, radius, particle } = data, diameter = radius * 2, pxRatio = particle.container.retina.pixelRatio, currentPos = particle.getPosition();
4
+ async draw(data) {
5
+ const { context, radius, particle } = data, diameter = radius * double, pxRatio = particle.container.retina.pixelRatio, currentPos = particle.getPosition();
5
6
  if (!particle.trail || !particle.trailLength) {
6
7
  return;
7
8
  }
8
- const pathLength = particle.trailLength;
9
+ const pathLength = particle.trailLength + radius;
9
10
  particle.trail.push({
10
11
  color: context.fillStyle ?? context.strokeStyle,
11
12
  position: {
@@ -13,7 +14,7 @@ export class TrailDrawer {
13
14
  y: currentPos.y,
14
15
  },
15
16
  });
16
- if (particle.trail.length < 2) {
17
+ if (particle.trail.length < minTrailLength) {
17
18
  return;
18
19
  }
19
20
  while (particle.trail.length > pathLength) {
@@ -26,25 +27,30 @@ export class TrailDrawer {
26
27
  width: particle.container.canvas.size.width + diameter,
27
28
  height: particle.container.canvas.size.height + diameter,
28
29
  };
29
- let lastPos = particle.trail[trailLength - 1].position;
30
- context.setTransform(1, 0, 0, 1, currentPos.x, currentPos.y);
31
- for (let i = trailLength; i > 0; i--) {
32
- const step = particle.trail[i - 1], position = step.position;
30
+ let lastPos = particle.trail[trailLength - trailLengthOffset].position;
31
+ const defaultTransform = {
32
+ a: 1,
33
+ b: 0,
34
+ c: 0,
35
+ d: 1,
36
+ };
37
+ context.setTransform(defaultTransform.a, defaultTransform.b, defaultTransform.c, defaultTransform.d, currentPos.x, currentPos.y);
38
+ for (let i = trailLength; i > noItems; i--) {
39
+ const step = particle.trail[i - trailLengthOffset], position = step.position;
33
40
  context.beginPath();
34
41
  context.moveTo(lastPos.x - offsetPos.x, lastPos.y - offsetPos.y);
35
42
  const warp = {
36
43
  x: (lastPos.x + canvasSize.width) % canvasSize.width,
37
44
  y: (lastPos.y + canvasSize.height) % canvasSize.height,
38
45
  };
39
- if (Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ||
40
- Math.abs(lastPos.y - position.y) > canvasSize.height / 2) {
46
+ if (Math.abs(lastPos.x - position.x) > canvasSize.width * half ||
47
+ Math.abs(lastPos.y - position.y) > canvasSize.height * half) {
41
48
  lastPos = position;
42
49
  continue;
43
50
  }
44
- context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height / 2 ? warp.y : position.y) - offsetPos.y);
45
- const width = Math.max((i / trailLength) * diameter, pxRatio, particle.trailMinWidth ?? -1);
46
- const oldAlpha = context.globalAlpha;
47
- context.globalAlpha = particle.trailFade ? i / trailLength : 1;
51
+ context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width * half ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height * half ? warp.y : position.y) - offsetPos.y);
52
+ const width = Math.max((i / trailLength) * diameter, pxRatio, particle.trailMinWidth ?? minWidth), oldAlpha = context.globalAlpha;
53
+ context.globalAlpha = particle.trailFade ? i / trailLength : defaultAlpha;
48
54
  context.lineWidth = particle.trailMaxWidth ? Math.min(width, particle.trailMaxWidth) : width;
49
55
  context.strokeStyle = step.color;
50
56
  context.stroke();
@@ -53,17 +59,19 @@ export class TrailDrawer {
53
59
  }
54
60
  const { transformData } = data;
55
61
  context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, currentPos.x, currentPos.y);
62
+ await Promise.resolve();
56
63
  }
57
- particleInit(container, particle) {
64
+ async particleInit(container, particle) {
58
65
  particle.trail = [];
59
66
  const effectData = particle.effectData;
60
67
  particle.trailFade = effectData?.fade ?? true;
61
- particle.trailLength = getRangeValue(effectData?.length ?? 10) * container.retina.pixelRatio;
68
+ particle.trailLength = getRangeValue(effectData?.length ?? defaultLength) * container.retina.pixelRatio;
62
69
  particle.trailMaxWidth = effectData?.maxWidth
63
70
  ? getRangeValue(effectData.maxWidth) * container.retina.pixelRatio
64
71
  : undefined;
65
72
  particle.trailMinWidth = effectData?.minWidth
66
73
  ? getRangeValue(effectData.minWidth) * container.retina.pixelRatio
67
74
  : undefined;
75
+ await Promise.resolve();
68
76
  }
69
77
  }
package/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { TrailDrawer } from "./TrailDrawer.js";
2
1
  export async function loadTrailEffect(engine, refresh = true) {
2
+ const { TrailDrawer } = await import("./TrailDrawer.js");
3
3
  await engine.addEffect("trail", new TrailDrawer(), refresh);
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/effect-trail",
3
- "version": "3.0.3",
3
+ "version": "3.2.0",
4
4
  "description": "tsParticles trail effect",
5
5
  "homepage": "https://particles.js.org",
6
6
  "repository": {
@@ -100,7 +100,7 @@
100
100
  "./package.json": "./package.json"
101
101
  },
102
102
  "dependencies": {
103
- "@tsparticles/engine": "^3.0.3"
103
+ "@tsparticles/engine": "^3.2.0"
104
104
  },
105
105
  "publishConfig": {
106
106
  "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/effect-trail [26 Dec 2023 at 19:25]</title>
6
+ <title>@tsparticles/effect-trail [31 Jan 2024 at 02:02]</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.effect.trail.js","isAsset":true,"statSize":3280,"parsedSize":7126,"gzipSize":2190,"groups":[{"label":"dist/browser","path":"./dist/browser","statSize":3238,"groups":[{"id":938,"label":"index.js + 1 modules (concatenated)","path":"./dist/browser/index.js + 1 modules (concatenated)","statSize":3238,"parsedSize":7126,"gzipSize":2190,"concatenated":true,"groups":[{"label":"dist/browser","path":"./dist/browser/index.js + 1 modules (concatenated)/dist/browser","statSize":3238,"groups":[{"id":null,"label":"index.js","path":"./dist/browser/index.js + 1 modules (concatenated)/dist/browser/index.js","statSize":176,"parsedSize":387,"gzipSize":119,"inaccurateSizes":true},{"id":null,"label":"TrailDrawer.js","path":"./dist/browser/index.js + 1 modules (concatenated)/dist/browser/TrailDrawer.js","statSize":3062,"parsedSize":6738,"gzipSize":2070,"inaccurateSizes":true}],"parsedSize":7126,"gzipSize":2190,"inaccurateSizes":true}]}],"parsedSize":7126,"gzipSize":2190},{"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.effect.trail":true}}];
35
- window.entrypoints = ["tsparticles.effect.trail","tsparticles.effect.trail.min"];
34
+ window.chartData = [];
35
+ window.entrypoints = ["tsparticles.effect.trail.min"];
36
36
  window.defaultSizes = "parsed";
37
37
  </script>
38
38
  </body>
@@ -4,7 +4,15 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v3.0.3
7
+ * v3.2.0
8
+ */
9
+ /*
10
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
11
+ * This devtool is neither made for production nor for readable output files.
12
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
13
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
14
+ * or disable the default devtool with "devtool: false".
15
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
8
16
  */
9
17
  (function webpackUniversalModuleDefinition(root, factory) {
10
18
  if(typeof exports === 'object' && typeof module === 'object')
@@ -15,15 +23,28 @@
15
23
  var a = typeof exports === 'object' ? factory(require("@tsparticles/engine")) : factory(root["window"]);
16
24
  for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
17
25
  }
18
- })(this, (__WEBPACK_EXTERNAL_MODULE__533__) => {
26
+ })(this, (__WEBPACK_EXTERNAL_MODULE__tsparticles_engine__) => {
19
27
  return /******/ (() => { // webpackBootstrap
20
28
  /******/ "use strict";
21
29
  /******/ var __webpack_modules__ = ({
22
30
 
23
- /***/ 533:
31
+ /***/ "./dist/browser/index.js":
32
+ /*!*******************************!*\
33
+ !*** ./dist/browser/index.js ***!
34
+ \*******************************/
35
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36
+
37
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadTrailEffect: () => (/* binding */ loadTrailEffect)\n/* harmony export */ });\nasync function loadTrailEffect(engine, refresh = true) {\n const {\n TrailDrawer\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_TrailDrawer_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./TrailDrawer.js */ \"./dist/browser/TrailDrawer.js\"));\n await engine.addEffect(\"trail\", new TrailDrawer(), refresh);\n}\n\n//# sourceURL=webpack://@tsparticles/effect-trail/./dist/browser/index.js?");
38
+
39
+ /***/ }),
40
+
41
+ /***/ "@tsparticles/engine":
42
+ /*!*********************************************************************************************************************************!*\
43
+ !*** external {"commonjs":"@tsparticles/engine","commonjs2":"@tsparticles/engine","amd":"@tsparticles/engine","root":"window"} ***!
44
+ \*********************************************************************************************************************************/
24
45
  /***/ ((module) => {
25
46
 
26
- module.exports = __WEBPACK_EXTERNAL_MODULE__533__;
47
+ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
27
48
 
28
49
  /***/ })
29
50
 
@@ -53,7 +74,22 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__533__;
53
74
  /******/ return module.exports;
54
75
  /******/ }
55
76
  /******/
77
+ /******/ // expose the modules object (__webpack_modules__)
78
+ /******/ __webpack_require__.m = __webpack_modules__;
79
+ /******/
56
80
  /************************************************************************/
81
+ /******/ /* webpack/runtime/compat get default export */
82
+ /******/ (() => {
83
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
84
+ /******/ __webpack_require__.n = (module) => {
85
+ /******/ var getter = module && module.__esModule ?
86
+ /******/ () => (module['default']) :
87
+ /******/ () => (module);
88
+ /******/ __webpack_require__.d(getter, { a: getter });
89
+ /******/ return getter;
90
+ /******/ };
91
+ /******/ })();
92
+ /******/
57
93
  /******/ /* webpack/runtime/define property getters */
58
94
  /******/ (() => {
59
95
  /******/ // define getter functions for harmony exports
@@ -66,11 +102,91 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__533__;
66
102
  /******/ };
67
103
  /******/ })();
68
104
  /******/
105
+ /******/ /* webpack/runtime/ensure chunk */
106
+ /******/ (() => {
107
+ /******/ __webpack_require__.f = {};
108
+ /******/ // This file contains only the entry chunk.
109
+ /******/ // The chunk loading function for additional chunks
110
+ /******/ __webpack_require__.e = (chunkId) => {
111
+ /******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
112
+ /******/ __webpack_require__.f[key](chunkId, promises);
113
+ /******/ return promises;
114
+ /******/ }, []));
115
+ /******/ };
116
+ /******/ })();
117
+ /******/
118
+ /******/ /* webpack/runtime/get javascript chunk filename */
119
+ /******/ (() => {
120
+ /******/ // This function allow to reference async chunks
121
+ /******/ __webpack_require__.u = (chunkId) => {
122
+ /******/ // return url for filenames based on template
123
+ /******/ return "" + chunkId + ".js";
124
+ /******/ };
125
+ /******/ })();
126
+ /******/
127
+ /******/ /* webpack/runtime/global */
128
+ /******/ (() => {
129
+ /******/ __webpack_require__.g = (function() {
130
+ /******/ if (typeof globalThis === 'object') return globalThis;
131
+ /******/ try {
132
+ /******/ return this || new Function('return this')();
133
+ /******/ } catch (e) {
134
+ /******/ if (typeof window === 'object') return window;
135
+ /******/ }
136
+ /******/ })();
137
+ /******/ })();
138
+ /******/
69
139
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
70
140
  /******/ (() => {
71
141
  /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
72
142
  /******/ })();
73
143
  /******/
144
+ /******/ /* webpack/runtime/load script */
145
+ /******/ (() => {
146
+ /******/ var inProgress = {};
147
+ /******/ var dataWebpackPrefix = "@tsparticles/effect-trail:";
148
+ /******/ // loadScript function to load a script via script tag
149
+ /******/ __webpack_require__.l = (url, done, key, chunkId) => {
150
+ /******/ if(inProgress[url]) { inProgress[url].push(done); return; }
151
+ /******/ var script, needAttach;
152
+ /******/ if(key !== undefined) {
153
+ /******/ var scripts = document.getElementsByTagName("script");
154
+ /******/ for(var i = 0; i < scripts.length; i++) {
155
+ /******/ var s = scripts[i];
156
+ /******/ if(s.getAttribute("src") == url || s.getAttribute("data-webpack") == dataWebpackPrefix + key) { script = s; break; }
157
+ /******/ }
158
+ /******/ }
159
+ /******/ if(!script) {
160
+ /******/ needAttach = true;
161
+ /******/ script = document.createElement('script');
162
+ /******/
163
+ /******/ script.charset = 'utf-8';
164
+ /******/ script.timeout = 120;
165
+ /******/ if (__webpack_require__.nc) {
166
+ /******/ script.setAttribute("nonce", __webpack_require__.nc);
167
+ /******/ }
168
+ /******/ script.setAttribute("data-webpack", dataWebpackPrefix + key);
169
+ /******/
170
+ /******/ script.src = url;
171
+ /******/ }
172
+ /******/ inProgress[url] = [done];
173
+ /******/ var onScriptComplete = (prev, event) => {
174
+ /******/ // avoid mem leaks in IE.
175
+ /******/ script.onerror = script.onload = null;
176
+ /******/ clearTimeout(timeout);
177
+ /******/ var doneFns = inProgress[url];
178
+ /******/ delete inProgress[url];
179
+ /******/ script.parentNode && script.parentNode.removeChild(script);
180
+ /******/ doneFns && doneFns.forEach((fn) => (fn(event)));
181
+ /******/ if(prev) return prev(event);
182
+ /******/ }
183
+ /******/ var timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);
184
+ /******/ script.onerror = onScriptComplete.bind(null, script.onerror);
185
+ /******/ script.onload = onScriptComplete.bind(null, script.onload);
186
+ /******/ needAttach && document.head.appendChild(script);
187
+ /******/ };
188
+ /******/ })();
189
+ /******/
74
190
  /******/ /* webpack/runtime/make namespace object */
75
191
  /******/ (() => {
76
192
  /******/ // define __esModule on exports
@@ -82,104 +198,128 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__533__;
82
198
  /******/ };
83
199
  /******/ })();
84
200
  /******/
201
+ /******/ /* webpack/runtime/publicPath */
202
+ /******/ (() => {
203
+ /******/ var scriptUrl;
204
+ /******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
205
+ /******/ var document = __webpack_require__.g.document;
206
+ /******/ if (!scriptUrl && document) {
207
+ /******/ if (document.currentScript)
208
+ /******/ scriptUrl = document.currentScript.src;
209
+ /******/ if (!scriptUrl) {
210
+ /******/ var scripts = document.getElementsByTagName("script");
211
+ /******/ if(scripts.length) {
212
+ /******/ var i = scripts.length - 1;
213
+ /******/ while (i > -1 && !scriptUrl) scriptUrl = scripts[i--].src;
214
+ /******/ }
215
+ /******/ }
216
+ /******/ }
217
+ /******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
218
+ /******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
219
+ /******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
220
+ /******/ scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
221
+ /******/ __webpack_require__.p = scriptUrl;
222
+ /******/ })();
223
+ /******/
224
+ /******/ /* webpack/runtime/jsonp chunk loading */
225
+ /******/ (() => {
226
+ /******/ // no baseURI
227
+ /******/
228
+ /******/ // object to store loaded and loading chunks
229
+ /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
230
+ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
231
+ /******/ var installedChunks = {
232
+ /******/ "tsparticles.effect.trail": 0
233
+ /******/ };
234
+ /******/
235
+ /******/ __webpack_require__.f.j = (chunkId, promises) => {
236
+ /******/ // JSONP chunk loading for javascript
237
+ /******/ var installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;
238
+ /******/ if(installedChunkData !== 0) { // 0 means "already installed".
239
+ /******/
240
+ /******/ // a Promise means "currently loading".
241
+ /******/ if(installedChunkData) {
242
+ /******/ promises.push(installedChunkData[2]);
243
+ /******/ } else {
244
+ /******/ if(true) { // all chunks have JS
245
+ /******/ // setup Promise in chunk cache
246
+ /******/ var promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));
247
+ /******/ promises.push(installedChunkData[2] = promise);
248
+ /******/
249
+ /******/ // start chunk loading
250
+ /******/ var url = __webpack_require__.p + __webpack_require__.u(chunkId);
251
+ /******/ // create error before stack unwound to get useful stacktrace later
252
+ /******/ var error = new Error();
253
+ /******/ var loadingEnded = (event) => {
254
+ /******/ if(__webpack_require__.o(installedChunks, chunkId)) {
255
+ /******/ installedChunkData = installedChunks[chunkId];
256
+ /******/ if(installedChunkData !== 0) installedChunks[chunkId] = undefined;
257
+ /******/ if(installedChunkData) {
258
+ /******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
259
+ /******/ var realSrc = event && event.target && event.target.src;
260
+ /******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
261
+ /******/ error.name = 'ChunkLoadError';
262
+ /******/ error.type = errorType;
263
+ /******/ error.request = realSrc;
264
+ /******/ installedChunkData[1](error);
265
+ /******/ }
266
+ /******/ }
267
+ /******/ };
268
+ /******/ __webpack_require__.l(url, loadingEnded, "chunk-" + chunkId, chunkId);
269
+ /******/ }
270
+ /******/ }
271
+ /******/ }
272
+ /******/ };
273
+ /******/
274
+ /******/ // no prefetching
275
+ /******/
276
+ /******/ // no preloaded
277
+ /******/
278
+ /******/ // no HMR
279
+ /******/
280
+ /******/ // no HMR manifest
281
+ /******/
282
+ /******/ // no on chunks loaded
283
+ /******/
284
+ /******/ // install a JSONP callback for chunk loading
285
+ /******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
286
+ /******/ var chunkIds = data[0];
287
+ /******/ var moreModules = data[1];
288
+ /******/ var runtime = data[2];
289
+ /******/ // add "moreModules" to the modules object,
290
+ /******/ // then flag all "chunkIds" as loaded and fire callback
291
+ /******/ var moduleId, chunkId, i = 0;
292
+ /******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
293
+ /******/ for(moduleId in moreModules) {
294
+ /******/ if(__webpack_require__.o(moreModules, moduleId)) {
295
+ /******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
296
+ /******/ }
297
+ /******/ }
298
+ /******/ if(runtime) var result = runtime(__webpack_require__);
299
+ /******/ }
300
+ /******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
301
+ /******/ for(;i < chunkIds.length; i++) {
302
+ /******/ chunkId = chunkIds[i];
303
+ /******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
304
+ /******/ installedChunks[chunkId][0]();
305
+ /******/ }
306
+ /******/ installedChunks[chunkId] = 0;
307
+ /******/ }
308
+ /******/
309
+ /******/ }
310
+ /******/
311
+ /******/ var chunkLoadingGlobal = this["webpackChunk_tsparticles_effect_trail"] = this["webpackChunk_tsparticles_effect_trail"] || [];
312
+ /******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
313
+ /******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
314
+ /******/ })();
315
+ /******/
85
316
  /************************************************************************/
86
- var __webpack_exports__ = {};
87
- // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
88
- (() => {
89
- // ESM COMPAT FLAG
90
- __webpack_require__.r(__webpack_exports__);
91
-
92
- // EXPORTS
93
- __webpack_require__.d(__webpack_exports__, {
94
- loadTrailEffect: () => (/* binding */ loadTrailEffect)
95
- });
96
-
97
- // EXTERNAL MODULE: external {"commonjs":"@tsparticles/engine","commonjs2":"@tsparticles/engine","amd":"@tsparticles/engine","root":"window"}
98
- var engine_root_window_ = __webpack_require__(533);
99
- ;// CONCATENATED MODULE: ./dist/browser/TrailDrawer.js
100
-
101
- class TrailDrawer {
102
- draw(data) {
103
- const {
104
- context,
105
- radius,
106
- particle
107
- } = data,
108
- diameter = radius * 2,
109
- pxRatio = particle.container.retina.pixelRatio,
110
- currentPos = particle.getPosition();
111
- if (!particle.trail || !particle.trailLength) {
112
- return;
113
- }
114
- const pathLength = particle.trailLength;
115
- particle.trail.push({
116
- color: context.fillStyle ?? context.strokeStyle,
117
- position: {
118
- x: currentPos.x,
119
- y: currentPos.y
120
- }
121
- });
122
- if (particle.trail.length < 2) {
123
- return;
124
- }
125
- while (particle.trail.length > pathLength) {
126
- particle.trail.shift();
127
- }
128
- const trailLength = Math.min(particle.trail.length, pathLength),
129
- offsetPos = {
130
- x: currentPos.x,
131
- y: currentPos.y
132
- },
133
- canvasSize = {
134
- width: particle.container.canvas.size.width + diameter,
135
- height: particle.container.canvas.size.height + diameter
136
- };
137
- let lastPos = particle.trail[trailLength - 1].position;
138
- context.setTransform(1, 0, 0, 1, currentPos.x, currentPos.y);
139
- for (let i = trailLength; i > 0; i--) {
140
- const step = particle.trail[i - 1],
141
- position = step.position;
142
- context.beginPath();
143
- context.moveTo(lastPos.x - offsetPos.x, lastPos.y - offsetPos.y);
144
- const warp = {
145
- x: (lastPos.x + canvasSize.width) % canvasSize.width,
146
- y: (lastPos.y + canvasSize.height) % canvasSize.height
147
- };
148
- if (Math.abs(lastPos.x - position.x) > canvasSize.width / 2 || Math.abs(lastPos.y - position.y) > canvasSize.height / 2) {
149
- lastPos = position;
150
- continue;
151
- }
152
- context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height / 2 ? warp.y : position.y) - offsetPos.y);
153
- const width = Math.max(i / trailLength * diameter, pxRatio, particle.trailMinWidth ?? -1);
154
- const oldAlpha = context.globalAlpha;
155
- context.globalAlpha = particle.trailFade ? i / trailLength : 1;
156
- context.lineWidth = particle.trailMaxWidth ? Math.min(width, particle.trailMaxWidth) : width;
157
- context.strokeStyle = step.color;
158
- context.stroke();
159
- context.globalAlpha = oldAlpha;
160
- lastPos = position;
161
- }
162
- const {
163
- transformData
164
- } = data;
165
- context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, currentPos.x, currentPos.y);
166
- }
167
- particleInit(container, particle) {
168
- particle.trail = [];
169
- const effectData = particle.effectData;
170
- particle.trailFade = effectData?.fade ?? true;
171
- particle.trailLength = (0,engine_root_window_.getRangeValue)(effectData?.length ?? 10) * container.retina.pixelRatio;
172
- particle.trailMaxWidth = effectData?.maxWidth ? (0,engine_root_window_.getRangeValue)(effectData.maxWidth) * container.retina.pixelRatio : undefined;
173
- particle.trailMinWidth = effectData?.minWidth ? (0,engine_root_window_.getRangeValue)(effectData.minWidth) * container.retina.pixelRatio : undefined;
174
- }
175
- }
176
- ;// CONCATENATED MODULE: ./dist/browser/index.js
177
-
178
- async function loadTrailEffect(engine, refresh = true) {
179
- await engine.addEffect("trail", new TrailDrawer(), refresh);
180
- }
181
- })();
182
-
317
+ /******/
318
+ /******/ // startup
319
+ /******/ // Load entry module and return exports
320
+ /******/ // This entry module can't be inlined because the eval devtool is used.
321
+ /******/ var __webpack_exports__ = __webpack_require__("./dist/browser/index.js");
322
+ /******/
183
323
  /******/ return __webpack_exports__;
184
324
  /******/ })()
185
325
  ;
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see tsparticles.effect.trail.min.js.LICENSE.txt */
2
- !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],e);else{var i="object"==typeof exports?e(require("@tsparticles/engine")):e(t.window);for(var a in i)("object"==typeof exports?exports:t)[a]=i[a]}}(this,(t=>(()=>{"use strict";var e={533:e=>{e.exports=t}},i={};function a(t){var r=i[t];if(void 0!==r)return r.exports;var o=i[t]={exports:{}};return e[t](o,o.exports,a),o.exports}a.d=(t,e)=>{for(var i in e)a.o(e,i)&&!a.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};return(()=>{a.r(r),a.d(r,{loadTrailEffect:()=>i});var t=a(533);class e{draw(t){const{context:e,radius:i,particle:a}=t,r=2*i,o=a.container.retina.pixelRatio,n=a.getPosition();if(!a.trail||!a.trailLength)return;const l=a.trailLength;if(a.trail.push({color:e.fillStyle??e.strokeStyle,position:{x:n.x,y:n.y}}),a.trail.length<2)return;for(;a.trail.length>l;)a.trail.shift();const s=Math.min(a.trail.length,l),c=n.x,d=n.y,f=a.container.canvas.size.width+r,p=a.container.canvas.size.height+r;let h=a.trail[s-1].position;e.setTransform(1,0,0,1,n.x,n.y);for(let t=s;t>0;t--){const i=a.trail[t-1],n=i.position;e.beginPath(),e.moveTo(h.x-c,h.y-d);const l={x:(h.x+f)%f,y:(h.y+p)%p};if(Math.abs(h.x-n.x)>f/2||Math.abs(h.y-n.y)>p/2){h=n;continue}e.lineTo((Math.abs(h.x-n.x)>f/2?l.x:n.x)-c,(Math.abs(h.y-n.y)>p/2?l.y:n.y)-d);const x=Math.max(t/s*r,o,a.trailMinWidth??-1),y=e.globalAlpha;e.globalAlpha=a.trailFade?t/s:1,e.lineWidth=a.trailMaxWidth?Math.min(x,a.trailMaxWidth):x,e.strokeStyle=i.color,e.stroke(),e.globalAlpha=y,h=n}const{transformData:x}=t;e.setTransform(x.a,x.b,x.c,x.d,n.x,n.y)}particleInit(e,i){i.trail=[];const a=i.effectData;i.trailFade=a?.fade??!0,i.trailLength=(0,t.getRangeValue)(a?.length??10)*e.retina.pixelRatio,i.trailMaxWidth=a?.maxWidth?(0,t.getRangeValue)(a.maxWidth)*e.retina.pixelRatio:void 0,i.trailMinWidth=a?.minWidth?(0,t.getRangeValue)(a.minWidth)*e.retina.pixelRatio:void 0}}async function i(t,i=!0){await t.addEffect("trail",new e,i)}})(),r})()));
2
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],t);else{var r="object"==typeof exports?t(require("@tsparticles/engine")):t(e.window);for(var o in r)("object"==typeof exports?exports:e)[o]=r[o]}}(this,(e=>(()=>{var t,r,o={533:t=>{t.exports=e}},i={};function n(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return o[e](r,r.exports,n),r.exports}n.m=o,n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,r)=>(n.f[r](e,t),t)),[])),n.u=e=>e+".min.js",n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),t={},r="@tsparticles/effect-trail:",n.l=(e,o,i,a)=>{if(t[e])t[e].push(o);else{var l,s;if(void 0!==i)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++){var f=c[u];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")==r+i){l=f;break}}l||(s=!0,(l=document.createElement("script")).charset="utf-8",l.timeout=120,n.nc&&l.setAttribute("nonce",n.nc),l.setAttribute("data-webpack",r+i),l.src=e),t[e]=[o];var p=(r,o)=>{l.onerror=l.onload=null,clearTimeout(d);var i=t[e];if(delete t[e],l.parentNode&&l.parentNode.removeChild(l),i&&i.forEach((e=>e(o))),r)return r(o)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=p.bind(null,l.onerror),l.onload=p.bind(null,l.onload),s&&document.head.appendChild(l)}},n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var t=n.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!e;)e=r[o--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{var e={242:0};n.f.j=(t,r)=>{var o=n.o(e,t)?e[t]:void 0;if(0!==o)if(o)r.push(o[2]);else{var i=new Promise(((r,i)=>o=e[t]=[r,i]));r.push(o[2]=i);var a=n.p+n.u(t),l=new Error;n.l(a,(r=>{if(n.o(e,t)&&(0!==(o=e[t])&&(e[t]=void 0),o)){var i=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;l.message="Loading chunk "+t+" failed.\n("+i+": "+a+")",l.name="ChunkLoadError",l.type=i,l.request=a,o[1](l)}}),"chunk-"+t,t)}};var t=(t,r)=>{var o,i,a=r[0],l=r[1],s=r[2],c=0;if(a.some((t=>0!==e[t]))){for(o in l)n.o(l,o)&&(n.m[o]=l[o]);if(s)s(n)}for(t&&t(r);c<a.length;c++)i=a[c],n.o(e,i)&&e[i]&&e[i][0](),e[i]=0},r=this.webpackChunk_tsparticles_effect_trail=this.webpackChunk_tsparticles_effect_trail||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var a={};return(()=>{async function e(e,t=!0){const{TrailDrawer:r}=await n.e(295).then(n.bind(n,295));await e.addEffect("trail",new r,t)}n.r(a),n.d(a,{loadTrailEffect:()=>e})})(),a})()));
@@ -1 +1 @@
1
- /*! tsParticles Trail Shape v3.0.3 by Matteo Bruni */
1
+ /*! tsParticles Trail Shape v3.2.0 by Matteo Bruni */
@@ -1,8 +1,8 @@
1
1
  import { type Container, type ICoordinates, type IEffectDrawer, type IShapeDrawData, type Particle } from "@tsparticles/engine";
2
- type TrailStep = {
2
+ interface TrailStep {
3
3
  color: string | CanvasGradient | CanvasPattern;
4
4
  position: ICoordinates;
5
- };
5
+ }
6
6
  type TrailParticle = Particle & {
7
7
  trail?: TrailStep[];
8
8
  trailFade?: boolean;
@@ -11,7 +11,7 @@ type TrailParticle = Particle & {
11
11
  trailMinWidth?: number;
12
12
  };
13
13
  export declare class TrailDrawer implements IEffectDrawer<TrailParticle> {
14
- draw(data: IShapeDrawData<TrailParticle>): void;
15
- particleInit(container: Container, particle: TrailParticle): void;
14
+ draw(data: IShapeDrawData<TrailParticle>): Promise<void>;
15
+ particleInit(container: Container, particle: TrailParticle): Promise<void>;
16
16
  }
17
17
  export {};
@@ -11,13 +11,14 @@
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.TrailDrawer = void 0;
13
13
  const engine_1 = require("@tsparticles/engine");
14
+ const double = 2, minTrailLength = 2, trailLengthOffset = 1, noItems = 0, half = 0.5, minWidth = -1, defaultLength = 10, defaultAlpha = 1;
14
15
  class TrailDrawer {
15
- draw(data) {
16
- const { context, radius, particle } = data, diameter = radius * 2, pxRatio = particle.container.retina.pixelRatio, currentPos = particle.getPosition();
16
+ async draw(data) {
17
+ const { context, radius, particle } = data, diameter = radius * double, pxRatio = particle.container.retina.pixelRatio, currentPos = particle.getPosition();
17
18
  if (!particle.trail || !particle.trailLength) {
18
19
  return;
19
20
  }
20
- const pathLength = particle.trailLength;
21
+ const pathLength = particle.trailLength + radius;
21
22
  particle.trail.push({
22
23
  color: context.fillStyle ?? context.strokeStyle,
23
24
  position: {
@@ -25,7 +26,7 @@
25
26
  y: currentPos.y,
26
27
  },
27
28
  });
28
- if (particle.trail.length < 2) {
29
+ if (particle.trail.length < minTrailLength) {
29
30
  return;
30
31
  }
31
32
  while (particle.trail.length > pathLength) {
@@ -38,25 +39,30 @@
38
39
  width: particle.container.canvas.size.width + diameter,
39
40
  height: particle.container.canvas.size.height + diameter,
40
41
  };
41
- let lastPos = particle.trail[trailLength - 1].position;
42
- context.setTransform(1, 0, 0, 1, currentPos.x, currentPos.y);
43
- for (let i = trailLength; i > 0; i--) {
44
- const step = particle.trail[i - 1], position = step.position;
42
+ let lastPos = particle.trail[trailLength - trailLengthOffset].position;
43
+ const defaultTransform = {
44
+ a: 1,
45
+ b: 0,
46
+ c: 0,
47
+ d: 1,
48
+ };
49
+ context.setTransform(defaultTransform.a, defaultTransform.b, defaultTransform.c, defaultTransform.d, currentPos.x, currentPos.y);
50
+ for (let i = trailLength; i > noItems; i--) {
51
+ const step = particle.trail[i - trailLengthOffset], position = step.position;
45
52
  context.beginPath();
46
53
  context.moveTo(lastPos.x - offsetPos.x, lastPos.y - offsetPos.y);
47
54
  const warp = {
48
55
  x: (lastPos.x + canvasSize.width) % canvasSize.width,
49
56
  y: (lastPos.y + canvasSize.height) % canvasSize.height,
50
57
  };
51
- if (Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ||
52
- Math.abs(lastPos.y - position.y) > canvasSize.height / 2) {
58
+ if (Math.abs(lastPos.x - position.x) > canvasSize.width * half ||
59
+ Math.abs(lastPos.y - position.y) > canvasSize.height * half) {
53
60
  lastPos = position;
54
61
  continue;
55
62
  }
56
- context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width / 2 ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height / 2 ? warp.y : position.y) - offsetPos.y);
57
- const width = Math.max((i / trailLength) * diameter, pxRatio, particle.trailMinWidth ?? -1);
58
- const oldAlpha = context.globalAlpha;
59
- context.globalAlpha = particle.trailFade ? i / trailLength : 1;
63
+ context.lineTo((Math.abs(lastPos.x - position.x) > canvasSize.width * half ? warp.x : position.x) - offsetPos.x, (Math.abs(lastPos.y - position.y) > canvasSize.height * half ? warp.y : position.y) - offsetPos.y);
64
+ const width = Math.max((i / trailLength) * diameter, pxRatio, particle.trailMinWidth ?? minWidth), oldAlpha = context.globalAlpha;
65
+ context.globalAlpha = particle.trailFade ? i / trailLength : defaultAlpha;
60
66
  context.lineWidth = particle.trailMaxWidth ? Math.min(width, particle.trailMaxWidth) : width;
61
67
  context.strokeStyle = step.color;
62
68
  context.stroke();
@@ -65,18 +71,20 @@
65
71
  }
66
72
  const { transformData } = data;
67
73
  context.setTransform(transformData.a, transformData.b, transformData.c, transformData.d, currentPos.x, currentPos.y);
74
+ await Promise.resolve();
68
75
  }
69
- particleInit(container, particle) {
76
+ async particleInit(container, particle) {
70
77
  particle.trail = [];
71
78
  const effectData = particle.effectData;
72
79
  particle.trailFade = effectData?.fade ?? true;
73
- particle.trailLength = (0, engine_1.getRangeValue)(effectData?.length ?? 10) * container.retina.pixelRatio;
80
+ particle.trailLength = (0, engine_1.getRangeValue)(effectData?.length ?? defaultLength) * container.retina.pixelRatio;
74
81
  particle.trailMaxWidth = effectData?.maxWidth
75
82
  ? (0, engine_1.getRangeValue)(effectData.maxWidth) * container.retina.pixelRatio
76
83
  : undefined;
77
84
  particle.trailMinWidth = effectData?.minWidth
78
85
  ? (0, engine_1.getRangeValue)(effectData.minWidth) * container.retina.pixelRatio
79
86
  : undefined;
87
+ await Promise.resolve();
80
88
  }
81
89
  }
82
90
  exports.TrailDrawer = TrailDrawer;
package/umd/index.js CHANGED
@@ -1,18 +1,42 @@
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 (mod) {
18
+ if (mod && mod.__esModule) return mod;
19
+ var result = {};
20
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
21
+ __setModuleDefault(result, mod);
22
+ return result;
23
+ };
1
24
  (function (factory) {
2
25
  if (typeof module === "object" && typeof module.exports === "object") {
3
26
  var v = factory(require, exports);
4
27
  if (v !== undefined) module.exports = v;
5
28
  }
6
29
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "./TrailDrawer.js"], factory);
30
+ define(["require", "exports"], factory);
8
31
  }
9
32
  })(function (require, exports) {
10
33
  "use strict";
34
+ var __syncRequire = typeof module === "object" && typeof module.exports === "object";
11
35
  Object.defineProperty(exports, "__esModule", { value: true });
12
36
  exports.loadTrailEffect = void 0;
13
- const TrailDrawer_js_1 = require("./TrailDrawer.js");
14
37
  async function loadTrailEffect(engine, refresh = true) {
15
- await engine.addEffect("trail", new TrailDrawer_js_1.TrailDrawer(), refresh);
38
+ const { TrailDrawer } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./TrailDrawer.js"))) : new Promise((resolve_1, reject_1) => { require(["./TrailDrawer.js"], resolve_1, reject_1); }).then(__importStar));
39
+ await engine.addEffect("trail", new TrailDrawer(), refresh);
16
40
  }
17
41
  exports.loadTrailEffect = loadTrailEffect;
18
42
  });