@tsparticles/interaction-external-trail 4.0.0-alpha.26 → 4.0.0-alpha.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/983.min.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";(this.webpackChunk_tsparticles_interaction_external_trail=this.webpackChunk_tsparticles_interaction_external_trail||[]).push([[983],{983(t,i,e){e.d(i,{TrailMaker:()=>r});var a=e(303),s=e(702),l=e(170);let n="trail";class r extends s.ExternalInteractorBase{maxDistance=0;_delay;_engine;_lastPosition;constructor(t,i){super(i),this._engine=t,this._delay=0}clear(){}init(){}interact(t,i){let e=this.container;if(!e.retina.reduceFactor)return;let s=e.actualOptions,l=s.interactivity?.modes.trail;if(!l)return;let n=l.delay*a.millisecondsToSeconds/this.container.retina.reduceFactor;if(this._delay<n&&(this._delay+=i.value),this._delay<n)return;let r=t.mouse.position,o=!(l.pauseOnStop&&(r===this._lastPosition||r?.x===this._lastPosition?.x&&r?.y===this._lastPosition?.y));if(r?this._lastPosition={...r}:delete this._lastPosition,o&&r){let t=l.particles,i=l.colorCoords;if(i){let{width:s,height:n}=e.canvas.size,o={x:r.x/s,y:r.y/n},c=(t,i,e)=>{if(!(t?.weights?.x??t?.weights?.y))return;let s=t?.weights,l=o.x*(s?.x??0)+o.y*(s?.y??0),n=t?.value??i,r=(0,a.getRangeMin)(n??0),c=(0,a.getRangeMax)(n??e);return Math.min(c,Math.max(r,r+l*(c-r)))},d=l.particles?.fill?(0,a.itemFromSingleOrMultiple)(l.particles.fill):void 0,h=d?(0,a.rangeColorToHsl)(this._engine,a.AnimatableColor.create(void 0,d.color)):void 0,u=c(i.h,h?.h,a.hMax),_=c(i.s,h?.s,a.sMax),p=c(i.l,h?.l,a.lMax);(void 0!==u||void 0!==_||void 0!==p)&&(t=(0,a.deepExtend)({},l.particles,{color:{value:{h:u??h?.h,s:_??h?.s,l:p??h?.l}}}))}e.particles.push(l.quantity,r,t)}this._delay-=n}isEnabled(t,i){let e=this.container.actualOptions,s=t.mouse,l=(i?.interactivity??e.interactivity)?.events;return!!l&&(s.clicking&&s.inside&&!!s.position&&(0,a.isInArray)(n,l.onClick.mode)||s.inside&&!!s.position&&(0,a.isInArray)(n,l.onHover.mode))}loadModeOptions(t,...i){for(let e of(t.trail??=new l.X,i))t.trail.load(e?.trail)}reset(){}}}}]);
@@ -1,5 +1,5 @@
1
+ import { AnimatableColor, deepExtend, getRangeMax, getRangeMin, hMax, isInArray, itemFromSingleOrMultiple, lMax, millisecondsToSeconds, rangeColorToHsl, sMax, } from "@tsparticles/engine";
1
2
  import { ExternalInteractorBase, } from "@tsparticles/plugin-interactivity";
2
- import { deepExtend, getRangeMax, getRangeMin, hMax, isInArray, lMax, millisecondsToSeconds, rangeColorToHsl, sMax, } from "@tsparticles/engine";
3
3
  import { Trail } from "./Options/Classes/Trail.js";
4
4
  const trailMode = "trail", defaultMin = 0, defaultWeight = 0;
5
5
  export class TrailMaker extends ExternalInteractorBase {
@@ -52,7 +52,9 @@ export class TrailMaker extends ExternalInteractorBase {
52
52
  return undefined;
53
53
  const w = comp?.weights, factor = norm.x * (w?.x ?? defaultWeight) + norm.y * (w?.y ?? defaultWeight), rangeSource = comp?.value ?? originalValue, min = getRangeMin(rangeSource ?? defaultMin), max = getRangeMax(rangeSource ?? defaultMax), result = min + factor * (max - min);
54
54
  return Math.min(max, Math.max(min, result));
55
- }, baseHsl = rangeColorToHsl(this._engine, trailOptions.particles?.color), h = calculateValue(colorCoords.h, baseHsl?.h, hMax), s = calculateValue(colorCoords.s, baseHsl?.s, sMax), l = calculateValue(colorCoords.l, baseHsl?.l, lMax);
55
+ }, fillData = trailOptions.particles?.fill ? itemFromSingleOrMultiple(trailOptions.particles.fill) : undefined, baseHsl = fillData
56
+ ? rangeColorToHsl(this._engine, AnimatableColor.create(undefined, fillData.color))
57
+ : undefined, h = calculateValue(colorCoords.h, baseHsl?.h, hMax), s = calculateValue(colorCoords.s, baseHsl?.s, sMax), l = calculateValue(colorCoords.l, baseHsl?.l, lMax);
56
58
  if (h !== undefined || s !== undefined || l !== undefined) {
57
59
  particleOptions = deepExtend({}, trailOptions.particles, {
58
60
  color: {
package/browser/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export async function loadExternalTrailInteraction(engine) {
2
- engine.checkVersion("4.0.0-alpha.26");
2
+ engine.checkVersion("4.0.0-alpha.28");
3
3
  await engine.register(async (e) => {
4
4
  const { ensureInteractivityPluginLoaded } = await import("@tsparticles/plugin-interactivity");
5
5
  ensureInteractivityPluginLoaded(e);
package/cjs/TrailMaker.js CHANGED
@@ -1,5 +1,5 @@
1
+ import { AnimatableColor, deepExtend, getRangeMax, getRangeMin, hMax, isInArray, itemFromSingleOrMultiple, lMax, millisecondsToSeconds, rangeColorToHsl, sMax, } from "@tsparticles/engine";
1
2
  import { ExternalInteractorBase, } from "@tsparticles/plugin-interactivity";
2
- import { deepExtend, getRangeMax, getRangeMin, hMax, isInArray, lMax, millisecondsToSeconds, rangeColorToHsl, sMax, } from "@tsparticles/engine";
3
3
  import { Trail } from "./Options/Classes/Trail.js";
4
4
  const trailMode = "trail", defaultMin = 0, defaultWeight = 0;
5
5
  export class TrailMaker extends ExternalInteractorBase {
@@ -52,7 +52,9 @@ export class TrailMaker extends ExternalInteractorBase {
52
52
  return undefined;
53
53
  const w = comp?.weights, factor = norm.x * (w?.x ?? defaultWeight) + norm.y * (w?.y ?? defaultWeight), rangeSource = comp?.value ?? originalValue, min = getRangeMin(rangeSource ?? defaultMin), max = getRangeMax(rangeSource ?? defaultMax), result = min + factor * (max - min);
54
54
  return Math.min(max, Math.max(min, result));
55
- }, baseHsl = rangeColorToHsl(this._engine, trailOptions.particles?.color), h = calculateValue(colorCoords.h, baseHsl?.h, hMax), s = calculateValue(colorCoords.s, baseHsl?.s, sMax), l = calculateValue(colorCoords.l, baseHsl?.l, lMax);
55
+ }, fillData = trailOptions.particles?.fill ? itemFromSingleOrMultiple(trailOptions.particles.fill) : undefined, baseHsl = fillData
56
+ ? rangeColorToHsl(this._engine, AnimatableColor.create(undefined, fillData.color))
57
+ : undefined, h = calculateValue(colorCoords.h, baseHsl?.h, hMax), s = calculateValue(colorCoords.s, baseHsl?.s, sMax), l = calculateValue(colorCoords.l, baseHsl?.l, lMax);
56
58
  if (h !== undefined || s !== undefined || l !== undefined) {
57
59
  particleOptions = deepExtend({}, trailOptions.particles, {
58
60
  color: {
package/cjs/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export async function loadExternalTrailInteraction(engine) {
2
- engine.checkVersion("4.0.0-alpha.26");
2
+ engine.checkVersion("4.0.0-alpha.28");
3
3
  await engine.register(async (e) => {
4
4
  const { ensureInteractivityPluginLoaded } = await import("@tsparticles/plugin-interactivity");
5
5
  ensureInteractivityPluginLoaded(e);
@@ -4,7 +4,7 @@
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
- * v4.0.0-alpha.26
7
+ * v4.0.0-alpha.28
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -23,7 +23,7 @@
23
23
  \************************************/
24
24
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25
25
 
26
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TrailMaker: () => (/* binding */ TrailMaker)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_plugin_interactivity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/plugin-interactivity */ \"@tsparticles/plugin-interactivity\");\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _Options_Classes_Trail_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Options/Classes/Trail.js */ \"./dist/browser/Options/Classes/Trail.js\");\n\n\n\nconst trailMode = \"trail\", defaultMin = 0, defaultWeight = 0;\nclass TrailMaker extends _tsparticles_plugin_interactivity__WEBPACK_IMPORTED_MODULE_0__.ExternalInteractorBase {\n maxDistance = 0;\n _delay;\n _engine;\n _lastPosition;\n constructor(engine, container){\n super(container);\n this._engine = engine;\n this._delay = 0;\n }\n clear() {}\n init() {}\n interact(interactivityData, delta) {\n const container = this.container;\n if (!container.retina.reduceFactor) return;\n const options = container.actualOptions, trailOptions = options.interactivity?.modes.trail;\n if (!trailOptions) return;\n const optDelay = trailOptions.delay * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.millisecondsToSeconds / this.container.retina.reduceFactor;\n if (this._delay < optDelay) {\n this._delay += delta.value;\n }\n if (this._delay < optDelay) return;\n const mousePos = interactivityData.mouse.position, canEmit = !(trailOptions.pauseOnStop && (mousePos === this._lastPosition || mousePos?.x === this._lastPosition?.x && mousePos?.y === this._lastPosition?.y));\n if (mousePos) {\n this._lastPosition = {\n ...mousePos\n };\n } else {\n delete this._lastPosition;\n }\n if (canEmit && mousePos) {\n let particleOptions = trailOptions.particles;\n const colorCoords = trailOptions.colorCoords;\n if (colorCoords) {\n const { width, height } = container.canvas.size, norm = {\n x: mousePos.x / width,\n y: mousePos.y / height\n }, hasWeights = (comp)=>{\n return !!(comp?.weights?.x ?? comp?.weights?.y);\n }, calculateValue = (comp, originalValue, defaultMax)=>{\n if (!hasWeights(comp)) return undefined;\n const w = comp?.weights, factor = norm.x * (w?.x ?? defaultWeight) + norm.y * (w?.y ?? defaultWeight), rangeSource = comp?.value ?? originalValue, min = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.getRangeMin)(rangeSource ?? defaultMin), max = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.getRangeMax)(rangeSource ?? defaultMax), result = min + factor * (max - min);\n return Math.min(max, Math.max(min, result));\n }, baseHsl = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.rangeColorToHsl)(this._engine, trailOptions.particles?.color), h = calculateValue(colorCoords.h, baseHsl?.h, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.hMax), s = calculateValue(colorCoords.s, baseHsl?.s, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.sMax), l = calculateValue(colorCoords.l, baseHsl?.l, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.lMax);\n if (h !== undefined || s !== undefined || l !== undefined) {\n particleOptions = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.deepExtend)({}, trailOptions.particles, {\n color: {\n value: {\n h: h ?? baseHsl?.h,\n s: s ?? baseHsl?.s,\n l: l ?? baseHsl?.l\n }\n }\n });\n }\n }\n container.particles.push(trailOptions.quantity, mousePos, particleOptions);\n }\n this._delay -= optDelay;\n }\n isEnabled(interactivityData, particle) {\n const container = this.container, options = container.actualOptions, mouse = interactivityData.mouse, events = (particle?.interactivity ?? options.interactivity)?.events;\n return !!events && (mouse.clicking && mouse.inside && !!mouse.position && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.isInArray)(trailMode, events.onClick.mode) || mouse.inside && !!mouse.position && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_1__.isInArray)(trailMode, events.onHover.mode));\n }\n loadModeOptions(options, ...sources) {\n options.trail ??= new _Options_Classes_Trail_js__WEBPACK_IMPORTED_MODULE_2__.Trail();\n for (const source of sources){\n options.trail.load(source?.trail);\n }\n }\n reset() {}\n}\n\n\n//# sourceURL=webpack://@tsparticles/interaction-external-trail/./dist/browser/TrailMaker.js?\n}");
26
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TrailMaker: () => (/* binding */ TrailMaker)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _tsparticles_plugin_interactivity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @tsparticles/plugin-interactivity */ \"@tsparticles/plugin-interactivity\");\n/* harmony import */ var _Options_Classes_Trail_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Options/Classes/Trail.js */ \"./dist/browser/Options/Classes/Trail.js\");\n\n\n\nconst trailMode = \"trail\", defaultMin = 0, defaultWeight = 0;\nclass TrailMaker extends _tsparticles_plugin_interactivity__WEBPACK_IMPORTED_MODULE_1__.ExternalInteractorBase {\n maxDistance = 0;\n _delay;\n _engine;\n _lastPosition;\n constructor(engine, container){\n super(container);\n this._engine = engine;\n this._delay = 0;\n }\n clear() {}\n init() {}\n interact(interactivityData, delta) {\n const container = this.container;\n if (!container.retina.reduceFactor) return;\n const options = container.actualOptions, trailOptions = options.interactivity?.modes.trail;\n if (!trailOptions) return;\n const optDelay = trailOptions.delay * _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.millisecondsToSeconds / this.container.retina.reduceFactor;\n if (this._delay < optDelay) {\n this._delay += delta.value;\n }\n if (this._delay < optDelay) return;\n const mousePos = interactivityData.mouse.position, canEmit = !(trailOptions.pauseOnStop && (mousePos === this._lastPosition || mousePos?.x === this._lastPosition?.x && mousePos?.y === this._lastPosition?.y));\n if (mousePos) {\n this._lastPosition = {\n ...mousePos\n };\n } else {\n delete this._lastPosition;\n }\n if (canEmit && mousePos) {\n let particleOptions = trailOptions.particles;\n const colorCoords = trailOptions.colorCoords;\n if (colorCoords) {\n const { width, height } = container.canvas.size, norm = {\n x: mousePos.x / width,\n y: mousePos.y / height\n }, hasWeights = (comp)=>{\n return !!(comp?.weights?.x ?? comp?.weights?.y);\n }, calculateValue = (comp, originalValue, defaultMax)=>{\n if (!hasWeights(comp)) return undefined;\n const w = comp?.weights, factor = norm.x * (w?.x ?? defaultWeight) + norm.y * (w?.y ?? defaultWeight), rangeSource = comp?.value ?? originalValue, min = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMin)(rangeSource ?? defaultMin), max = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeMax)(rangeSource ?? defaultMax), result = min + factor * (max - min);\n return Math.min(max, Math.max(min, result));\n }, fillData = trailOptions.particles?.fill ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.itemFromSingleOrMultiple)(trailOptions.particles.fill) : undefined, baseHsl = fillData ? (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.rangeColorToHsl)(this._engine, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.AnimatableColor.create(undefined, fillData.color)) : undefined, h = calculateValue(colorCoords.h, baseHsl?.h, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.hMax), s = calculateValue(colorCoords.s, baseHsl?.s, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.sMax), l = calculateValue(colorCoords.l, baseHsl?.l, _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.lMax);\n if (h !== undefined || s !== undefined || l !== undefined) {\n particleOptions = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.deepExtend)({}, trailOptions.particles, {\n color: {\n value: {\n h: h ?? baseHsl?.h,\n s: s ?? baseHsl?.s,\n l: l ?? baseHsl?.l\n }\n }\n });\n }\n }\n container.particles.push(trailOptions.quantity, mousePos, particleOptions);\n }\n this._delay -= optDelay;\n }\n isEnabled(interactivityData, particle) {\n const container = this.container, options = container.actualOptions, mouse = interactivityData.mouse, events = (particle?.interactivity ?? options.interactivity)?.events;\n return !!events && (mouse.clicking && mouse.inside && !!mouse.position && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(trailMode, events.onClick.mode) || mouse.inside && !!mouse.position && (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isInArray)(trailMode, events.onHover.mode));\n }\n loadModeOptions(options, ...sources) {\n options.trail ??= new _Options_Classes_Trail_js__WEBPACK_IMPORTED_MODULE_2__.Trail();\n for (const source of sources){\n options.trail.load(source?.trail);\n }\n }\n reset() {}\n}\n\n\n//# sourceURL=webpack://@tsparticles/interaction-external-trail/./dist/browser/TrailMaker.js?\n}");
27
27
 
28
28
  /***/ }
29
29
 
package/esm/TrailMaker.js CHANGED
@@ -1,5 +1,5 @@
1
+ import { AnimatableColor, deepExtend, getRangeMax, getRangeMin, hMax, isInArray, itemFromSingleOrMultiple, lMax, millisecondsToSeconds, rangeColorToHsl, sMax, } from "@tsparticles/engine";
1
2
  import { ExternalInteractorBase, } from "@tsparticles/plugin-interactivity";
2
- import { deepExtend, getRangeMax, getRangeMin, hMax, isInArray, lMax, millisecondsToSeconds, rangeColorToHsl, sMax, } from "@tsparticles/engine";
3
3
  import { Trail } from "./Options/Classes/Trail.js";
4
4
  const trailMode = "trail", defaultMin = 0, defaultWeight = 0;
5
5
  export class TrailMaker extends ExternalInteractorBase {
@@ -52,7 +52,9 @@ export class TrailMaker extends ExternalInteractorBase {
52
52
  return undefined;
53
53
  const w = comp?.weights, factor = norm.x * (w?.x ?? defaultWeight) + norm.y * (w?.y ?? defaultWeight), rangeSource = comp?.value ?? originalValue, min = getRangeMin(rangeSource ?? defaultMin), max = getRangeMax(rangeSource ?? defaultMax), result = min + factor * (max - min);
54
54
  return Math.min(max, Math.max(min, result));
55
- }, baseHsl = rangeColorToHsl(this._engine, trailOptions.particles?.color), h = calculateValue(colorCoords.h, baseHsl?.h, hMax), s = calculateValue(colorCoords.s, baseHsl?.s, sMax), l = calculateValue(colorCoords.l, baseHsl?.l, lMax);
55
+ }, fillData = trailOptions.particles?.fill ? itemFromSingleOrMultiple(trailOptions.particles.fill) : undefined, baseHsl = fillData
56
+ ? rangeColorToHsl(this._engine, AnimatableColor.create(undefined, fillData.color))
57
+ : undefined, h = calculateValue(colorCoords.h, baseHsl?.h, hMax), s = calculateValue(colorCoords.s, baseHsl?.s, sMax), l = calculateValue(colorCoords.l, baseHsl?.l, lMax);
56
58
  if (h !== undefined || s !== undefined || l !== undefined) {
57
59
  particleOptions = deepExtend({}, trailOptions.particles, {
58
60
  color: {
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export async function loadExternalTrailInteraction(engine) {
2
- engine.checkVersion("4.0.0-alpha.26");
2
+ engine.checkVersion("4.0.0-alpha.28");
3
3
  await engine.register(async (e) => {
4
4
  const { ensureInteractivityPluginLoaded } = await import("@tsparticles/plugin-interactivity");
5
5
  ensureInteractivityPluginLoaded(e);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/interaction-external-trail",
3
- "version": "4.0.0-alpha.26",
3
+ "version": "4.0.0-alpha.28",
4
4
  "description": "tsParticles trail external interaction",
5
5
  "homepage": "https://particles.js.org",
6
6
  "repository": {
@@ -87,8 +87,8 @@
87
87
  "./package.json": "./package.json"
88
88
  },
89
89
  "dependencies": {
90
- "@tsparticles/engine": "4.0.0-alpha.26",
91
- "@tsparticles/plugin-interactivity": "4.0.0-alpha.26"
90
+ "@tsparticles/engine": "4.0.0-alpha.28",
91
+ "@tsparticles/plugin-interactivity": "4.0.0-alpha.28"
92
92
  },
93
93
  "publishConfig": {
94
94
  "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/interaction-external-trail [26 Feb 2026 at 18:07]</title>
6
+ <title>@tsparticles/interaction-external-trail [15 Mar 2026 at 13:48]</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>
@@ -4,7 +4,7 @@
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
- * v4.0.0-alpha.26
7
+ * v4.0.0-alpha.28
8
8
  */
9
9
  /*
10
10
  * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
@@ -94,7 +94,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
94
94
  \*******************************/
95
95
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
96
96
 
97
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Trail: () => (/* reexport safe */ _Options_Classes_Trail_js__WEBPACK_IMPORTED_MODULE_0__.Trail),\n/* harmony export */ loadExternalTrailInteraction: () => (/* binding */ loadExternalTrailInteraction)\n/* harmony export */ });\n/* harmony import */ var _Options_Classes_Trail_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Options/Classes/Trail.js */ \"./dist/browser/Options/Classes/Trail.js\");\nasync function loadExternalTrailInteraction(engine) {\n engine.checkVersion(\"4.0.0-alpha.26\");\n await engine.register(async (e)=>{\n const { ensureInteractivityPluginLoaded } = await Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(__webpack_require__, /*! @tsparticles/plugin-interactivity */ \"@tsparticles/plugin-interactivity\", 19));\n ensureInteractivityPluginLoaded(e);\n e.addInteractor?.(\"externalTrail\", async (container)=>{\n const { TrailMaker } = await __webpack_require__.e(/*! import() */ \"dist_browser_TrailMaker_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./TrailMaker.js */ \"./dist/browser/TrailMaker.js\"));\n return new TrailMaker(e, container);\n });\n });\n}\n\n\n\n//# sourceURL=webpack://@tsparticles/interaction-external-trail/./dist/browser/index.js?\n}");
97
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Trail: () => (/* reexport safe */ _Options_Classes_Trail_js__WEBPACK_IMPORTED_MODULE_0__.Trail),\n/* harmony export */ loadExternalTrailInteraction: () => (/* binding */ loadExternalTrailInteraction)\n/* harmony export */ });\n/* harmony import */ var _Options_Classes_Trail_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Options/Classes/Trail.js */ \"./dist/browser/Options/Classes/Trail.js\");\nasync function loadExternalTrailInteraction(engine) {\n engine.checkVersion(\"4.0.0-alpha.28\");\n await engine.register(async (e)=>{\n const { ensureInteractivityPluginLoaded } = await Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(__webpack_require__, /*! @tsparticles/plugin-interactivity */ \"@tsparticles/plugin-interactivity\", 19));\n ensureInteractivityPluginLoaded(e);\n e.addInteractor?.(\"externalTrail\", async (container)=>{\n const { TrailMaker } = await __webpack_require__.e(/*! import() */ \"dist_browser_TrailMaker_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./TrailMaker.js */ \"./dist/browser/TrailMaker.js\"));\n return new TrailMaker(e, container);\n });\n });\n}\n\n\n\n//# sourceURL=webpack://@tsparticles/interaction-external-trail/./dist/browser/index.js?\n}");
98
98
 
99
99
  /***/ }
100
100
 
@@ -110,12 +110,6 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
110
110
  /******/ if (cachedModule !== undefined) {
111
111
  /******/ return cachedModule.exports;
112
112
  /******/ }
113
- /******/ // Check if module exists (development only)
114
- /******/ if (__webpack_modules__[moduleId] === undefined) {
115
- /******/ var e = new Error("Cannot find module '" + moduleId + "'");
116
- /******/ e.code = 'MODULE_NOT_FOUND';
117
- /******/ throw e;
118
- /******/ }
119
113
  /******/ // Create a new module (and put it into the cache)
120
114
  /******/ var module = __webpack_module_cache__[moduleId] = {
121
115
  /******/ // no module.id needed
@@ -124,6 +118,12 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
124
118
  /******/ };
125
119
  /******/
126
120
  /******/ // Execute the module function
121
+ /******/ if (!(moduleId in __webpack_modules__)) {
122
+ /******/ delete __webpack_module_cache__[moduleId];
123
+ /******/ var e = new Error("Cannot find module '" + moduleId + "'");
124
+ /******/ e.code = 'MODULE_NOT_FOUND';
125
+ /******/ throw e;
126
+ /******/ }
127
127
  /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
128
128
  /******/
129
129
  /******/ // Return the exports of the module
@@ -1,2 +1,2 @@
1
- !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("@tsparticles/engine"),require("@tsparticles/plugin-interactivity"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine","@tsparticles/plugin-interactivity"],e);else{var r="object"==typeof exports?e(require("@tsparticles/engine"),require("@tsparticles/plugin-interactivity")):e(t.window,t.window);for(var i in r)("object"==typeof exports?exports:t)[i]=r[i]}}(this,(t,e)=>(()=>{"use strict";var r,i,o,n={303(e){e.exports=t},702(t){t.exports=e},34(t,e,r){r.d(e,{X:()=>s});var i=r(303);class o{x;y;constructor(){this.x=0,this.y=0}load(t){t&&(void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y))}}class n{value;weights;constructor(){this.weights=new o}load(t){t&&(t.weights&&(this.weights??=new o,this.weights.load(t.weights)),(0,i.isNull)(t.value)||(this.value=(0,i.setRangeValue)(t.value)))}}class a{h;l;s;constructor(){this.h=new n,this.s=new n,this.l=new n}load(t){t&&(t.h&&(this.h??=new n,this.h.load(t.h)),t.s&&(this.s??=new n,this.s.load(t.s)),t.l&&(this.l??=new n,this.l.load(t.l)))}}class s{colorCoords;delay;particles;pauseOnStop;quantity;constructor(){this.delay=1,this.pauseOnStop=!1,this.quantity=1,this.colorCoords=new a}load(t){!(0,i.isNull)(t)&&(void 0!==t.delay&&(this.delay=t.delay),void 0!==t.quantity&&(this.quantity=t.quantity),void 0!==t.pauseOnStop&&(this.pauseOnStop=t.pauseOnStop),void 0!==t.particles&&(this.particles=(0,i.deepExtend)({},t.particles)),t.colorCoords&&(this.colorCoords??=new a,this.colorCoords.load(t.colorCoords)))}}}},a={};function s(t){var e=a[t];if(void 0!==e)return e.exports;var r=a[t]={exports:{}};return n[t](r,r.exports,s),r.exports}s.m=n,c=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__,s.t=function(t,e){if(1&e&&(t=this(t)),8&e||"object"==typeof t&&t&&(4&e&&t.__esModule||16&e&&"function"==typeof t.then))return t;var r=Object.create(null);s.r(r);var i={};l=l||[null,c({}),c([]),c(c)];for(var o=2&e&&t;("object"==typeof o||"function"==typeof o)&&!~l.indexOf(o);o=c(o))Object.getOwnPropertyNames(o).forEach(e=>i[e]=()=>t[e]);return i.default=()=>t,s.d(r,i),r},s.d=(t,e)=>{for(var r in e)s.o(e,r)&&!s.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},s.f={},s.e=t=>Promise.all(Object.keys(s.f).reduce((e,r)=>(s.f[r](t,e),e),[])),s.u=t=>""+t+".min.js",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),u={},s.l=(t,e,r,i)=>{if(u[t])return void u[t].push(e);if(void 0!==r)for(var o,n,a=document.getElementsByTagName("script"),l=0;l<a.length;l++){var c=a[l];if(c.getAttribute("src")==t||c.getAttribute("data-webpack")=="@tsparticles/interaction-external-trail:"+r){o=c;break}}o||(n=!0,(o=document.createElement("script")).charset="utf-8",s.nc&&o.setAttribute("nonce",s.nc),o.setAttribute("data-webpack","@tsparticles/interaction-external-trail:"+r),o.src=t),u[t]=[e];var p=(e,r)=>{o.onerror=o.onload=null,clearTimeout(d);var i=u[t];if(delete u[t],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach(t=>t(r)),e)return e(r)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=p.bind(null,o.onerror),o.onload=p.bind(null,o.onload),n&&document.head.appendChild(o)},s.r=t=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.g.importScripts&&(p=s.g.location+"");var l,c,u,p,d=s.g.document;if(!p&&d&&(d.currentScript&&"SCRIPT"===d.currentScript.tagName.toUpperCase()&&(p=d.currentScript.src),!p)){var h=d.getElementsByTagName("script");if(h.length)for(var f=h.length-1;f>-1&&(!p||!/^http(s?):/.test(p));)p=h[f--].src}if(!p)throw Error("Automatic publicPath is not supported in this browser");s.p=p=p.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r={54:0},s.f.j=(t,e)=>{var i=s.o(r,t)?r[t]:void 0;if(0!==i)if(i)e.push(i[2]);else{var o=new Promise((e,o)=>i=r[t]=[e,o]);e.push(i[2]=o);var n=s.p+s.u(t),a=Error();s.l(n,e=>{if(s.o(r,t)&&(0!==(i=r[t])&&(r[t]=void 0),i)){var o=e&&("load"===e.type?"missing":e.type),n=e&&e.target&&e.target.src;a.message="Loading chunk "+t+` failed.
2
- (`+o+": "+n+")",a.name="ChunkLoadError",a.type=o,a.request=n,i[1](a)}},"chunk-"+t,t)}},i=(t,e)=>{var i,o,[n,a,l]=e,c=0;if(n.some(t=>0!==r[t])){for(i in a)s.o(a,i)&&(s.m[i]=a[i]);l&&l(s)}for(t&&t(e);c<n.length;c++)o=n[c],s.o(r,o)&&r[o]&&r[o][0](),r[o]=0},(o=this.webpackChunk_tsparticles_interaction_external_trail=this.webpackChunk_tsparticles_interaction_external_trail||[]).forEach(i.bind(null,0)),o.push=i.bind(null,o.push.bind(o));var y={};s.r(y),s.d(y,{Trail:()=>v.X,loadExternalTrailInteraction:()=>g});var v=s(34);async function g(t){t.checkVersion("4.0.0-alpha.26"),await t.register(async t=>{let{ensureInteractivityPluginLoaded:e}=await Promise.resolve().then(s.t.bind(s,702,19));e(t),t.addInteractor?.("externalTrail",async e=>{let{TrailMaker:r}=await s.e(320).then(s.bind(s,320));return new r(t,e)})})}return y})());
1
+ !function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e(require("@tsparticles/engine"),require("@tsparticles/plugin-interactivity"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine","@tsparticles/plugin-interactivity"],e);else{var r="object"==typeof exports?e(require("@tsparticles/engine"),require("@tsparticles/plugin-interactivity")):e(t.window,t.window);for(var i in r)("object"==typeof exports?exports:t)[i]=r[i]}}(this,(t,e)=>(()=>{"use strict";var r,i,o,n={303(e){e.exports=t},702(t){t.exports=e},170(t,e,r){r.d(e,{X:()=>s});var i=r(303);class o{x;y;constructor(){this.x=0,this.y=0}load(t){t&&(void 0!==t.x&&(this.x=t.x),void 0!==t.y&&(this.y=t.y))}}class n{value;weights;constructor(){this.weights=new o}load(t){t&&(t.weights&&(this.weights??=new o,this.weights.load(t.weights)),(0,i.isNull)(t.value)||(this.value=(0,i.setRangeValue)(t.value)))}}class a{h;l;s;constructor(){this.h=new n,this.s=new n,this.l=new n}load(t){t&&(t.h&&(this.h??=new n,this.h.load(t.h)),t.s&&(this.s??=new n,this.s.load(t.s)),t.l&&(this.l??=new n,this.l.load(t.l)))}}class s{colorCoords;delay;particles;pauseOnStop;quantity;constructor(){this.delay=1,this.pauseOnStop=!1,this.quantity=1,this.colorCoords=new a}load(t){!(0,i.isNull)(t)&&(void 0!==t.delay&&(this.delay=t.delay),void 0!==t.quantity&&(this.quantity=t.quantity),void 0!==t.pauseOnStop&&(this.pauseOnStop=t.pauseOnStop),void 0!==t.particles&&(this.particles=(0,i.deepExtend)({},t.particles)),t.colorCoords&&(this.colorCoords??=new a,this.colorCoords.load(t.colorCoords)))}}}},a={};function s(t){var e=a[t];if(void 0!==e)return e.exports;var r=a[t]={exports:{}};return n[t](r,r.exports,s),r.exports}s.m=n,c=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__,s.t=function(t,e){if(1&e&&(t=this(t)),8&e||"object"==typeof t&&t&&(4&e&&t.__esModule||16&e&&"function"==typeof t.then))return t;var r=Object.create(null);s.r(r);var i={};l=l||[null,c({}),c([]),c(c)];for(var o=2&e&&t;("object"==typeof o||"function"==typeof o)&&!~l.indexOf(o);o=c(o))Object.getOwnPropertyNames(o).forEach(e=>i[e]=()=>t[e]);return i.default=()=>t,s.d(r,i),r},s.d=(t,e)=>{for(var r in e)s.o(e,r)&&!s.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},s.f={},s.e=t=>Promise.all(Object.keys(s.f).reduce((e,r)=>(s.f[r](t,e),e),[])),s.u=t=>""+t+".min.js",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),u={},s.l=(t,e,r,i)=>{if(u[t])return void u[t].push(e);if(void 0!==r)for(var o,n,a=document.getElementsByTagName("script"),l=0;l<a.length;l++){var c=a[l];if(c.getAttribute("src")==t||c.getAttribute("data-webpack")=="@tsparticles/interaction-external-trail:"+r){o=c;break}}o||(n=!0,(o=document.createElement("script")).charset="utf-8",s.nc&&o.setAttribute("nonce",s.nc),o.setAttribute("data-webpack","@tsparticles/interaction-external-trail:"+r),o.src=t),u[t]=[e];var p=(e,r)=>{o.onerror=o.onload=null,clearTimeout(d);var i=u[t];if(delete u[t],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach(t=>t(r)),e)return e(r)},d=setTimeout(p.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=p.bind(null,o.onerror),o.onload=p.bind(null,o.onload),n&&document.head.appendChild(o)},s.r=t=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},s.g.importScripts&&(p=s.g.location+"");var l,c,u,p,d=s.g.document;if(!p&&d&&(d.currentScript&&"SCRIPT"===d.currentScript.tagName.toUpperCase()&&(p=d.currentScript.src),!p)){var h=d.getElementsByTagName("script");if(h.length)for(var f=h.length-1;f>-1&&(!p||!/^http(s?):/.test(p));)p=h[f--].src}if(!p)throw Error("Automatic publicPath is not supported in this browser");s.p=p=p.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r={54:0},s.f.j=(t,e)=>{var i=s.o(r,t)?r[t]:void 0;if(0!==i)if(i)e.push(i[2]);else{var o=new Promise((e,o)=>i=r[t]=[e,o]);e.push(i[2]=o);var n=s.p+s.u(t),a=Error();s.l(n,e=>{if(s.o(r,t)&&(0!==(i=r[t])&&(r[t]=void 0),i)){var o=e&&("load"===e.type?"missing":e.type),n=e&&e.target&&e.target.src;a.message="Loading chunk "+t+` failed.
2
+ (`+o+": "+n+")",a.name="ChunkLoadError",a.type=o,a.request=n,i[1](a)}},"chunk-"+t,t)}},i=(t,e)=>{var i,o,[n,a,l]=e,c=0;if(n.some(t=>0!==r[t])){for(i in a)s.o(a,i)&&(s.m[i]=a[i]);l&&l(s)}for(t&&t(e);c<n.length;c++)o=n[c],s.o(r,o)&&r[o]&&r[o][0](),r[o]=0},(o=this.webpackChunk_tsparticles_interaction_external_trail=this.webpackChunk_tsparticles_interaction_external_trail||[]).forEach(i.bind(null,0)),o.push=i.bind(null,o.push.bind(o));var y={};s.r(y),s.d(y,{Trail:()=>v.X,loadExternalTrailInteraction:()=>g});var v=s(170);async function g(t){t.checkVersion("4.0.0-alpha.28"),await t.register(async t=>{let{ensureInteractivityPluginLoaded:e}=await Promise.resolve().then(s.t.bind(s,702,19));e(t),t.addInteractor?.("externalTrail",async e=>{let{TrailMaker:r}=await s.e(983).then(s.bind(s,983));return new r(t,e)})})}return y})());
@@ -1,5 +1,5 @@
1
- import { ExternalInteractorBase, type IInteractivityData, type IModes, type InteractivityEngine, type InteractivityParticle, type Modes } from "@tsparticles/plugin-interactivity";
2
1
  import { type IDelta, type RecursivePartial } from "@tsparticles/engine";
2
+ import { ExternalInteractorBase, type IInteractivityData, type IModes, type InteractivityEngine, type InteractivityParticle, type Modes } from "@tsparticles/plugin-interactivity";
3
3
  import type { ITrailMode, TrailContainer, TrailMode } from "./Types.js";
4
4
  export declare class TrailMaker extends ExternalInteractorBase<TrailContainer> {
5
5
  readonly maxDistance = 0;
package/umd/TrailMaker.js CHANGED
@@ -4,14 +4,14 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "@tsparticles/plugin-interactivity", "@tsparticles/engine", "./Options/Classes/Trail.js"], factory);
7
+ define(["require", "exports", "@tsparticles/engine", "@tsparticles/plugin-interactivity", "./Options/Classes/Trail.js"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.TrailMaker = void 0;
13
- const plugin_interactivity_1 = require("@tsparticles/plugin-interactivity");
14
13
  const engine_1 = require("@tsparticles/engine");
14
+ const plugin_interactivity_1 = require("@tsparticles/plugin-interactivity");
15
15
  const Trail_js_1 = require("./Options/Classes/Trail.js");
16
16
  const trailMode = "trail", defaultMin = 0, defaultWeight = 0;
17
17
  class TrailMaker extends plugin_interactivity_1.ExternalInteractorBase {
@@ -64,7 +64,9 @@
64
64
  return undefined;
65
65
  const w = comp?.weights, factor = norm.x * (w?.x ?? defaultWeight) + norm.y * (w?.y ?? defaultWeight), rangeSource = comp?.value ?? originalValue, min = (0, engine_1.getRangeMin)(rangeSource ?? defaultMin), max = (0, engine_1.getRangeMax)(rangeSource ?? defaultMax), result = min + factor * (max - min);
66
66
  return Math.min(max, Math.max(min, result));
67
- }, baseHsl = (0, engine_1.rangeColorToHsl)(this._engine, trailOptions.particles?.color), h = calculateValue(colorCoords.h, baseHsl?.h, engine_1.hMax), s = calculateValue(colorCoords.s, baseHsl?.s, engine_1.sMax), l = calculateValue(colorCoords.l, baseHsl?.l, engine_1.lMax);
67
+ }, fillData = trailOptions.particles?.fill ? (0, engine_1.itemFromSingleOrMultiple)(trailOptions.particles.fill) : undefined, baseHsl = fillData
68
+ ? (0, engine_1.rangeColorToHsl)(this._engine, engine_1.AnimatableColor.create(undefined, fillData.color))
69
+ : undefined, h = calculateValue(colorCoords.h, baseHsl?.h, engine_1.hMax), s = calculateValue(colorCoords.s, baseHsl?.s, engine_1.sMax), l = calculateValue(colorCoords.l, baseHsl?.l, engine_1.lMax);
68
70
  if (h !== undefined || s !== undefined || l !== undefined) {
69
71
  particleOptions = (0, engine_1.deepExtend)({}, trailOptions.particles, {
70
72
  color: {
package/umd/index.js CHANGED
@@ -48,7 +48,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
48
48
  Object.defineProperty(exports, "__esModule", { value: true });
49
49
  exports.loadExternalTrailInteraction = loadExternalTrailInteraction;
50
50
  async function loadExternalTrailInteraction(engine) {
51
- engine.checkVersion("4.0.0-alpha.26");
51
+ engine.checkVersion("4.0.0-alpha.28");
52
52
  await engine.register(async (e) => {
53
53
  const { ensureInteractivityPluginLoaded } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("@tsparticles/plugin-interactivity"))) : new Promise((resolve_1, reject_1) => { require(["@tsparticles/plugin-interactivity"], resolve_1, reject_1); }).then(__importStar));
54
54
  ensureInteractivityPluginLoaded(e);
package/320.min.js DELETED
@@ -1 +0,0 @@
1
- "use strict";(this.webpackChunk_tsparticles_interaction_external_trail=this.webpackChunk_tsparticles_interaction_external_trail||[]).push([[320],{320(t,i,e){e.d(i,{TrailMaker:()=>l});var s=e(702),a=e(303),n=e(34);let r="trail";class l extends s.ExternalInteractorBase{maxDistance=0;_delay;_engine;_lastPosition;constructor(t,i){super(i),this._engine=t,this._delay=0}clear(){}init(){}interact(t,i){let e=this.container;if(!e.retina.reduceFactor)return;let s=e.actualOptions,n=s.interactivity?.modes.trail;if(!n)return;let r=n.delay*a.millisecondsToSeconds/this.container.retina.reduceFactor;if(this._delay<r&&(this._delay+=i.value),this._delay<r)return;let l=t.mouse.position,o=!(n.pauseOnStop&&(l===this._lastPosition||l?.x===this._lastPosition?.x&&l?.y===this._lastPosition?.y));if(l?this._lastPosition={...l}:delete this._lastPosition,o&&l){let t=n.particles,i=n.colorCoords;if(i){let{width:s,height:r}=e.canvas.size,o={x:l.x/s,y:l.y/r},c=(t,i,e)=>{if(!(t?.weights?.x??t?.weights?.y))return;let s=t?.weights,n=o.x*(s?.x??0)+o.y*(s?.y??0),r=t?.value??i,l=(0,a.getRangeMin)(r??0),c=(0,a.getRangeMax)(r??e);return Math.min(c,Math.max(l,l+n*(c-l)))},h=(0,a.rangeColorToHsl)(this._engine,n.particles?.color),d=c(i.h,h?.h,a.hMax),u=c(i.s,h?.s,a.sMax),_=c(i.l,h?.l,a.lMax);(void 0!==d||void 0!==u||void 0!==_)&&(t=(0,a.deepExtend)({},n.particles,{color:{value:{h:d??h?.h,s:u??h?.s,l:_??h?.l}}}))}e.particles.push(n.quantity,l,t)}this._delay-=r}isEnabled(t,i){let e=this.container.actualOptions,s=t.mouse,n=(i?.interactivity??e.interactivity)?.events;return!!n&&(s.clicking&&s.inside&&!!s.position&&(0,a.isInArray)(r,n.onClick.mode)||s.inside&&!!s.position&&(0,a.isInArray)(r,n.onHover.mode))}loadModeOptions(t,...i){for(let e of(t.trail??=new n.X,i))t.trail.load(e?.trail)}reset(){}}}}]);