@tsparticles/plugin-absorbers 4.0.0-alpha.3 → 4.0.0-alpha.5
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/215.min.js +2 -0
- package/215.min.js.LICENSE.txt +1 -0
- package/384.min.js +2 -0
- package/384.min.js.LICENSE.txt +1 -0
- package/688.min.js +2 -0
- package/688.min.js.LICENSE.txt +1 -0
- package/903.min.js +2 -0
- package/903.min.js.LICENSE.txt +1 -0
- package/980.min.js +2 -0
- package/980.min.js.LICENSE.txt +1 -0
- package/browser/AbsorberInstance.js +6 -24
- package/browser/AbsorbersInstancesManager.js +47 -0
- package/browser/AbsorbersInteractor.js +90 -0
- package/browser/AbsorbersPlugin.js +6 -16
- package/browser/AbsorbersPluginInstance.js +40 -0
- package/browser/index.js +10 -6
- package/cjs/AbsorberInstance.js +6 -24
- package/cjs/AbsorbersInstancesManager.js +47 -0
- package/cjs/AbsorbersInteractor.js +90 -0
- package/cjs/AbsorbersPlugin.js +6 -16
- package/cjs/AbsorbersPluginInstance.js +40 -0
- package/cjs/index.js +10 -6
- package/dist_browser_AbsorberInstance_js.js +60 -0
- package/dist_browser_AbsorbersInstancesManager_js.js +30 -0
- package/dist_browser_AbsorbersInteractor_js.js +60 -0
- package/dist_browser_AbsorbersPluginInstance_js.js +30 -0
- package/dist_browser_AbsorbersPlugin_js.js +2 -22
- package/esm/AbsorberInstance.js +6 -24
- package/esm/AbsorbersInstancesManager.js +47 -0
- package/esm/AbsorbersInteractor.js +90 -0
- package/esm/AbsorbersPlugin.js +6 -16
- package/esm/AbsorbersPluginInstance.js +40 -0
- package/esm/index.js +10 -6
- package/package.json +3 -2
- package/report.html +1 -1
- package/tsparticles.plugin.absorbers.js +48 -30
- package/tsparticles.plugin.absorbers.min.js +1 -1
- package/tsparticles.plugin.absorbers.min.js.LICENSE.txt +1 -1
- package/types/AbsorberContainer.d.ts +5 -4
- package/types/AbsorberInstance.d.ts +5 -5
- package/types/AbsorbersInstancesManager.d.ts +14 -0
- package/types/AbsorbersInteractor.d.ts +18 -0
- package/types/AbsorbersPlugin.d.ts +6 -6
- package/types/AbsorbersPluginInstance.d.ts +13 -0
- package/types/index.d.ts +1 -2
- package/types/types.d.ts +12 -9
- package/umd/AbsorberInstance.js +5 -23
- package/umd/AbsorbersInstancesManager.js +95 -0
- package/umd/AbsorbersInteractor.js +104 -0
- package/umd/AbsorbersPlugin.js +40 -16
- package/umd/AbsorbersPluginInstance.js +54 -0
- package/umd/index.js +11 -10
- package/47.min.js +0 -2
- package/47.min.js.LICENSE.txt +0 -1
- package/browser/Absorbers.js +0 -70
- package/browser/Enums/AbsorberClickMode.js +0 -4
- package/cjs/Absorbers.js +0 -70
- package/cjs/Enums/AbsorberClickMode.js +0 -4
- package/esm/Absorbers.js +0 -70
- package/esm/Enums/AbsorberClickMode.js +0 -4
- package/types/Absorbers.d.ts +0 -21
- package/types/Enums/AbsorberClickMode.d.ts +0 -3
- package/umd/Absorbers.js +0 -84
- package/umd/Enums/AbsorberClickMode.js +0 -17
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/plugin-absorbers [
|
|
6
|
+
<title>@tsparticles/plugin-absorbers [21 Jan 2026 at 19:04]</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.
|
|
7
|
+
* v4.0.0-alpha.5
|
|
8
8
|
*/
|
|
9
9
|
/*
|
|
10
10
|
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
|
@@ -16,35 +16,25 @@
|
|
|
16
16
|
*/
|
|
17
17
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
18
18
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
19
|
-
module.exports = factory(require("@tsparticles/engine"));
|
|
19
|
+
module.exports = factory(require("@tsparticles/plugin-interactivity"), require("@tsparticles/engine"));
|
|
20
20
|
else if(typeof define === 'function' && define.amd)
|
|
21
|
-
define(["@tsparticles/engine"], factory);
|
|
21
|
+
define(["@tsparticles/plugin-interactivity", "@tsparticles/engine"], factory);
|
|
22
22
|
else {
|
|
23
|
-
var a = typeof exports === 'object' ? factory(require("@tsparticles/engine")) : factory(root["window"]);
|
|
23
|
+
var a = typeof exports === 'object' ? factory(require("@tsparticles/plugin-interactivity"), require("@tsparticles/engine")) : factory(root["window"], root["window"]);
|
|
24
24
|
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
|
|
25
25
|
}
|
|
26
|
-
})(this, (__WEBPACK_EXTERNAL_MODULE__tsparticles_engine__) => {
|
|
26
|
+
})(this, (__WEBPACK_EXTERNAL_MODULE__tsparticles_plugin_interactivity__, __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__) => {
|
|
27
27
|
return /******/ (() => { // webpackBootstrap
|
|
28
28
|
/******/ "use strict";
|
|
29
29
|
/******/ var __webpack_modules__ = ({
|
|
30
30
|
|
|
31
|
-
/***/ "./dist/browser/Enums/AbsorberClickMode.js"
|
|
32
|
-
/*!*************************************************!*\
|
|
33
|
-
!*** ./dist/browser/Enums/AbsorberClickMode.js ***!
|
|
34
|
-
\*************************************************/
|
|
35
|
-
(__unused_webpack___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 */ AbsorberClickMode: () => (/* binding */ AbsorberClickMode)\n/* harmony export */ });\nvar AbsorberClickMode;\n(function (AbsorberClickMode) {\n AbsorberClickMode[\"absorber\"] = \"absorber\";\n})(AbsorberClickMode || (AbsorberClickMode = {}));\n\n//# sourceURL=webpack://@tsparticles/plugin-absorbers/./dist/browser/Enums/AbsorberClickMode.js?\n}");
|
|
38
|
-
|
|
39
|
-
/***/ },
|
|
40
|
-
|
|
41
31
|
/***/ "./dist/browser/index.js"
|
|
42
32
|
/*!*******************************!*\
|
|
43
33
|
!*** ./dist/browser/index.js ***!
|
|
44
34
|
\*******************************/
|
|
45
35
|
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
46
36
|
|
|
47
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */
|
|
37
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadAbsorbersPlugin: () => (/* binding */ loadAbsorbersPlugin)\n/* harmony export */ });\nasync function loadAbsorbersPlugin(engine) {\n engine.checkVersion(\"4.0.0-alpha.5\");\n await engine.register(async e => {\n const {\n loadInteractivityPlugin\n } = await Promise.resolve(/*! import() */).then(__webpack_require__.t.bind(__webpack_require__, /*! @tsparticles/plugin-interactivity */ \"@tsparticles/plugin-interactivity\", 19)),\n {\n AbsorbersInstancesManager\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_AbsorbersInstancesManager_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./AbsorbersInstancesManager.js */ \"./dist/browser/AbsorbersInstancesManager.js\")),\n {\n AbsorbersPlugin\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_AbsorbersPlugin_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./AbsorbersPlugin.js */ \"./dist/browser/AbsorbersPlugin.js\")),\n instancesManager = new AbsorbersInstancesManager(e);\n await loadInteractivityPlugin(e);\n e.addPlugin(new AbsorbersPlugin(instancesManager));\n e.addInteractor?.(\"externalAbsorbers\", async container => {\n const {\n AbsorbersInteractor\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_AbsorbersInteractor_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./AbsorbersInteractor.js */ \"./dist/browser/AbsorbersInteractor.js\"));\n return new AbsorbersInteractor(container, instancesManager);\n });\n });\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-absorbers/./dist/browser/index.js?\n}");
|
|
48
38
|
|
|
49
39
|
/***/ },
|
|
50
40
|
|
|
@@ -56,6 +46,16 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
56
46
|
|
|
57
47
|
module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
|
|
58
48
|
|
|
49
|
+
/***/ },
|
|
50
|
+
|
|
51
|
+
/***/ "@tsparticles/plugin-interactivity"
|
|
52
|
+
/*!***************************************************************************************************************************************************************************!*\
|
|
53
|
+
!*** external {"commonjs":"@tsparticles/plugin-interactivity","commonjs2":"@tsparticles/plugin-interactivity","amd":"@tsparticles/plugin-interactivity","root":"window"} ***!
|
|
54
|
+
\***************************************************************************************************************************************************************************/
|
|
55
|
+
(module) {
|
|
56
|
+
|
|
57
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_plugin_interactivity__;
|
|
58
|
+
|
|
59
59
|
/***/ }
|
|
60
60
|
|
|
61
61
|
/******/ });
|
|
@@ -94,6 +94,36 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
|
|
|
94
94
|
/******/ __webpack_require__.m = __webpack_modules__;
|
|
95
95
|
/******/
|
|
96
96
|
/************************************************************************/
|
|
97
|
+
/******/ /* webpack/runtime/create fake namespace object */
|
|
98
|
+
/******/ (() => {
|
|
99
|
+
/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
|
|
100
|
+
/******/ var leafPrototypes;
|
|
101
|
+
/******/ // create a fake namespace object
|
|
102
|
+
/******/ // mode & 1: value is a module id, require it
|
|
103
|
+
/******/ // mode & 2: merge all properties of value into the ns
|
|
104
|
+
/******/ // mode & 4: return value when already ns object
|
|
105
|
+
/******/ // mode & 16: return value when it's Promise-like
|
|
106
|
+
/******/ // mode & 8|1: behave like require
|
|
107
|
+
/******/ __webpack_require__.t = function(value, mode) {
|
|
108
|
+
/******/ if(mode & 1) value = this(value);
|
|
109
|
+
/******/ if(mode & 8) return value;
|
|
110
|
+
/******/ if(typeof value === 'object' && value) {
|
|
111
|
+
/******/ if((mode & 4) && value.__esModule) return value;
|
|
112
|
+
/******/ if((mode & 16) && typeof value.then === 'function') return value;
|
|
113
|
+
/******/ }
|
|
114
|
+
/******/ var ns = Object.create(null);
|
|
115
|
+
/******/ __webpack_require__.r(ns);
|
|
116
|
+
/******/ var def = {};
|
|
117
|
+
/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
|
|
118
|
+
/******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {
|
|
119
|
+
/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
|
|
120
|
+
/******/ }
|
|
121
|
+
/******/ def['default'] = () => (value);
|
|
122
|
+
/******/ __webpack_require__.d(ns, def);
|
|
123
|
+
/******/ return ns;
|
|
124
|
+
/******/ };
|
|
125
|
+
/******/ })();
|
|
126
|
+
/******/
|
|
97
127
|
/******/ /* webpack/runtime/define property getters */
|
|
98
128
|
/******/ (() => {
|
|
99
129
|
/******/ // define getter functions for harmony exports
|
|
@@ -128,18 +158,6 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
|
|
|
128
158
|
/******/ };
|
|
129
159
|
/******/ })();
|
|
130
160
|
/******/
|
|
131
|
-
/******/ /* webpack/runtime/global */
|
|
132
|
-
/******/ (() => {
|
|
133
|
-
/******/ __webpack_require__.g = (function() {
|
|
134
|
-
/******/ if (typeof globalThis === 'object') return globalThis;
|
|
135
|
-
/******/ try {
|
|
136
|
-
/******/ return this || new Function('return this')();
|
|
137
|
-
/******/ } catch (e) {
|
|
138
|
-
/******/ if (typeof window === 'object') return window;
|
|
139
|
-
/******/ }
|
|
140
|
-
/******/ })();
|
|
141
|
-
/******/ })();
|
|
142
|
-
/******/
|
|
143
161
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
144
162
|
/******/ (() => {
|
|
145
163
|
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
@@ -204,8 +222,8 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
|
|
|
204
222
|
/******/ /* webpack/runtime/publicPath */
|
|
205
223
|
/******/ (() => {
|
|
206
224
|
/******/ var scriptUrl;
|
|
207
|
-
/******/ if (
|
|
208
|
-
/******/ var document =
|
|
225
|
+
/******/ if (globalThis.importScripts) scriptUrl = globalThis.location + "";
|
|
226
|
+
/******/ var document = globalThis.document;
|
|
209
227
|
/******/ if (!scriptUrl && document) {
|
|
210
228
|
/******/ if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')
|
|
211
229
|
/******/ scriptUrl = document.currentScript.src;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! For license information please see tsparticles.plugin.absorbers.min.js.LICENSE.txt */
|
|
2
|
-
!function(e,
|
|
2
|
+
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/plugin-interactivity"),require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/plugin-interactivity","@tsparticles/engine"],t);else{var r="object"==typeof exports?t(require("@tsparticles/plugin-interactivity"),require("@tsparticles/engine")):t(e.window,e.window);for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(this,((e,t)=>(()=>{var r,n,o,i,a={303(e){e.exports=t},702(t){t.exports=e}},s={};function l(e){var t=s[e];if(void 0!==t)return t.exports;var r=s[e]={exports:{}};return a[e](r,r.exports,l),r.exports}l.m=a,n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.t=function(e,t){if(1&t&&(e=this(e)),8&t)return e;if("object"==typeof e&&e){if(4&t&&e.__esModule)return e;if(16&t&&"function"==typeof e.then)return e}var o=Object.create(null);l.r(o);var i={};r=r||[null,n({}),n([]),n(n)];for(var a=2&t&&e;("object"==typeof a||"function"==typeof a)&&!~r.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach((t=>i[t]=()=>e[t]));return i.default=()=>e,l.d(o,i),o},l.d=(e,t)=>{for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce(((t,r)=>(l.f[r](e,t),t)),[])),l.u=e=>e+".min.js",l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o={},i="@tsparticles/plugin-absorbers:",l.l=(e,t,r,n)=>{if(o[e])o[e].push(t);else{var a,s;if(void 0!==r)for(var c=document.getElementsByTagName("script"),p=0;p<c.length;p++){var u=c[p];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==i+r){a=u;break}}a||(s=!0,(a=document.createElement("script")).charset="utf-8",l.nc&&a.setAttribute("nonce",l.nc),a.setAttribute("data-webpack",i+r),a.src=e),o[e]=[t];var d=(t,r)=>{a.onerror=a.onload=null,clearTimeout(f);var n=o[e];if(delete o[e],a.parentNode&&a.parentNode.removeChild(a),n&&n.forEach((e=>e(r))),t)return t(r)},f=setTimeout(d.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=d.bind(null,a.onerror),a.onload=d.bind(null,a.onload),s&&document.head.appendChild(a)}},l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;globalThis.importScripts&&(e=globalThis.location+"");var t=globalThis.document;if(!e&&t&&(t.currentScript&&"SCRIPT"===t.currentScript.tagName.toUpperCase()&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),l.p=e})(),(()=>{var e={425:0};l.f.j=(t,r)=>{var n=l.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,o)=>n=e[t]=[r,o]));r.push(n[2]=o);var i=l.p+l.u(t),a=new Error;l.l(i,(r=>{if(l.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;a.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",a.name="ChunkLoadError",a.type=o,a.request=i,n[1](a)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[i,a,s]=r,c=0;if(i.some((t=>0!==e[t]))){for(n in a)l.o(a,n)&&(l.m[n]=a[n]);if(s)s(l)}for(t&&t(r);c<i.length;c++)o=i[c],l.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=this.webpackChunk_tsparticles_plugin_absorbers=this.webpackChunk_tsparticles_plugin_absorbers||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var c={};async function p(e){e.checkVersion("4.0.0-alpha.5"),await e.register((async e=>{const{loadInteractivityPlugin:t}=await Promise.resolve().then(l.t.bind(l,702,19)),{AbsorbersInstancesManager:r}=await l.e(980).then(l.bind(l,980)),{AbsorbersPlugin:n}=await l.e(384).then(l.bind(l,384)),o=new r(e);await t(e),e.addPlugin(new n(o)),e.addInteractor?.("externalAbsorbers",(async e=>{const{AbsorbersInteractor:t}=await l.e(688).then(l.bind(l,688));return new t(e,o)}))}))}return l.r(c),l.d(c,{loadAbsorbersPlugin:()=>p}),c})()));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
/*! tsParticles Absorbers Plugin v4.0.0-alpha.
|
|
1
|
+
/*! tsParticles Absorbers Plugin v4.0.0-alpha.5 by Matteo Bruni */
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ICoordinates, RecursivePartial } from "@tsparticles/engine";
|
|
2
2
|
import type { AbsorberInstance } from "./AbsorberInstance.js";
|
|
3
3
|
import type { AbsorberOptions } from "./types.js";
|
|
4
4
|
import type { IAbsorber } from "./Options/Interfaces/IAbsorber.js";
|
|
5
|
-
|
|
5
|
+
import type { InteractivityContainer } from "@tsparticles/plugin-interactivity";
|
|
6
|
+
export interface AbsorberContainer extends InteractivityContainer {
|
|
6
7
|
actualOptions: AbsorberOptions;
|
|
7
|
-
addAbsorber
|
|
8
|
-
getAbsorber
|
|
8
|
+
addAbsorber?: (options: RecursivePartial<IAbsorber>, position?: ICoordinates) => Promise<AbsorberInstance>;
|
|
9
|
+
getAbsorber?: (idxOrName?: number | string) => AbsorberInstance | undefined;
|
|
9
10
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type Container, type Engine, type ICoordinates, type IRgb, type Particle, type RecursivePartial, RotateDirection, Vector } from "@tsparticles/engine";
|
|
1
|
+
import { type Container, type Engine, type ICoordinates, type IDelta, type IRgb, type Particle, type RecursivePartial, RotateDirection, Vector } from "@tsparticles/engine";
|
|
2
|
+
import { Absorber } from "./Options/Classes/Absorber.js";
|
|
2
3
|
import type { IAbsorber } from "./Options/Interfaces/IAbsorber.js";
|
|
3
4
|
import type { IAbsorberSizeLimit } from "./Options/Interfaces/IAbsorberSizeLimit.js";
|
|
4
5
|
type OrbitingParticle = Particle & {
|
|
@@ -12,15 +13,14 @@ export declare class AbsorberInstance {
|
|
|
12
13
|
mass: number;
|
|
13
14
|
readonly name?: string;
|
|
14
15
|
opacity: number;
|
|
16
|
+
readonly options: Absorber;
|
|
15
17
|
position: Vector;
|
|
16
18
|
size: number;
|
|
17
19
|
private readonly _container;
|
|
18
20
|
private readonly _engine;
|
|
19
|
-
private dragging;
|
|
20
21
|
private readonly initialPosition?;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
attract(particle: OrbitingParticle): void;
|
|
22
|
+
constructor(engine: Engine, container: Container, options: RecursivePartial<IAbsorber>, position?: ICoordinates);
|
|
23
|
+
attract(particle: OrbitingParticle, delta: IDelta): void;
|
|
24
24
|
draw(context: CanvasRenderingContext2D): void;
|
|
25
25
|
resize(): void;
|
|
26
26
|
private readonly _calcPosition;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Engine, type ICoordinates, type RecursivePartial } from "@tsparticles/engine";
|
|
2
|
+
import type { AbsorberContainer } from "./AbsorberContainer.js";
|
|
3
|
+
import type { AbsorberInstance } from "./AbsorberInstance.js";
|
|
4
|
+
import type { IAbsorber } from "./Options/Interfaces/IAbsorber.js";
|
|
5
|
+
export declare class AbsorbersInstancesManager {
|
|
6
|
+
private readonly _containerArrays;
|
|
7
|
+
private readonly _engine;
|
|
8
|
+
constructor(engine: Engine);
|
|
9
|
+
addAbsorber(container: AbsorberContainer, options: RecursivePartial<IAbsorber>, position?: ICoordinates): Promise<AbsorberInstance>;
|
|
10
|
+
clear(container: AbsorberContainer): void;
|
|
11
|
+
getArray(container: AbsorberContainer): AbsorberInstance[];
|
|
12
|
+
initContainer(container: AbsorberContainer): void;
|
|
13
|
+
removeAbsorber(container: AbsorberContainer, absorber: AbsorberInstance): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AbsorberModeOptions, IAbsorberModeOptions } from "./types.js";
|
|
2
|
+
import { ExternalInteractorBase, type IInteractivityData, type IModes, type InteractivityParticle, type Modes } from "@tsparticles/plugin-interactivity";
|
|
3
|
+
import { type IDelta, type RecursivePartial } from "@tsparticles/engine";
|
|
4
|
+
import type { AbsorberContainer } from "./AbsorberContainer.js";
|
|
5
|
+
import type { AbsorbersInstancesManager } from "./AbsorbersInstancesManager.js";
|
|
6
|
+
export declare class AbsorbersInteractor extends ExternalInteractorBase<AbsorberContainer> {
|
|
7
|
+
handleClickMode: (mode: string, interactivityData: IInteractivityData) => void;
|
|
8
|
+
private readonly _instancesManager;
|
|
9
|
+
private dragging;
|
|
10
|
+
private draggingAbsorber;
|
|
11
|
+
constructor(container: AbsorberContainer, instancesManager: AbsorbersInstancesManager);
|
|
12
|
+
clear(): void;
|
|
13
|
+
init(): void;
|
|
14
|
+
interact(interactivityData: IInteractivityData, delta: IDelta): void;
|
|
15
|
+
isEnabled(interactivityData: IInteractivityData, particle?: InteractivityParticle): boolean;
|
|
16
|
+
loadModeOptions(options: Modes & AbsorberModeOptions, ...sources: RecursivePartial<(IModes & IAbsorberModeOptions) | undefined>[]): void;
|
|
17
|
+
reset(): void;
|
|
18
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { AbsorberOptions, IAbsorberOptions } from "./types.js";
|
|
2
|
-
import { type
|
|
2
|
+
import { type Container, type IContainerPlugin, type IOptions, type IPlugin, type RecursivePartial } from "@tsparticles/engine";
|
|
3
3
|
import type { AbsorberContainer } from "./AbsorberContainer.js";
|
|
4
|
-
import {
|
|
4
|
+
import type { AbsorbersInstancesManager } from "./AbsorbersInstancesManager.js";
|
|
5
5
|
export declare class AbsorbersPlugin implements IPlugin {
|
|
6
6
|
readonly id: string;
|
|
7
|
-
private readonly
|
|
8
|
-
constructor(
|
|
9
|
-
getPlugin(container: AbsorberContainer): Promise<
|
|
10
|
-
loadOptions(options: AbsorberOptions, source?: RecursivePartial<IAbsorberOptions>): void;
|
|
7
|
+
private readonly _instancesManager;
|
|
8
|
+
constructor(instancesManager: AbsorbersInstancesManager);
|
|
9
|
+
getPlugin(container: AbsorberContainer): Promise<IContainerPlugin>;
|
|
10
|
+
loadOptions(_container: Container, options: AbsorberOptions, source?: RecursivePartial<IAbsorberOptions>): void;
|
|
11
11
|
needsPlugin(options?: RecursivePartial<IOptions & IAbsorberOptions>): boolean;
|
|
12
12
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type IContainerPlugin, type IDelta, type Particle } from "@tsparticles/engine";
|
|
2
|
+
import type { AbsorberContainer } from "./AbsorberContainer.js";
|
|
3
|
+
import type { AbsorbersInstancesManager } from "./AbsorbersInstancesManager.js";
|
|
4
|
+
export declare class AbsorbersPluginInstance implements IContainerPlugin {
|
|
5
|
+
private readonly _container;
|
|
6
|
+
private readonly _instancesManager;
|
|
7
|
+
constructor(container: AbsorberContainer, instancesManager: AbsorbersInstancesManager);
|
|
8
|
+
draw(context: CanvasRenderingContext2D): void;
|
|
9
|
+
init(): Promise<void>;
|
|
10
|
+
particleUpdate(particle: Particle, delta: IDelta): void;
|
|
11
|
+
resize(): void;
|
|
12
|
+
stop(): void;
|
|
13
|
+
}
|
package/types/index.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { type Engine } from "@tsparticles/engine";
|
|
2
|
-
export declare function loadAbsorbersPlugin(engine: Engine): void
|
|
2
|
+
export declare function loadAbsorbersPlugin(engine: Engine): Promise<void>;
|
|
3
3
|
export type * from "./AbsorberContainer.js";
|
|
4
|
-
export * from "./Enums/AbsorberClickMode.js";
|
package/types/types.d.ts
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { IInteractivityOptions, InteractivityOptions } from "@tsparticles/plugin-interactivity";
|
|
2
2
|
import type { Absorber } from "./Options/Classes/Absorber.js";
|
|
3
3
|
import type { IAbsorber } from "./Options/Interfaces/IAbsorber.js";
|
|
4
|
-
|
|
4
|
+
import type { SingleOrMultiple } from "@tsparticles/engine";
|
|
5
|
+
export interface AbsorberModeOptions {
|
|
6
|
+
absorbers?: Absorber[];
|
|
7
|
+
}
|
|
8
|
+
export interface IAbsorberModeOptions {
|
|
9
|
+
absorbers?: SingleOrMultiple<IAbsorber>;
|
|
10
|
+
}
|
|
11
|
+
export type AbsorberOptions = InteractivityOptions & {
|
|
5
12
|
absorbers: SingleOrMultiple<Absorber>;
|
|
6
13
|
interactivity: {
|
|
7
|
-
modes:
|
|
8
|
-
absorbers: SingleOrMultiple<Absorber>;
|
|
9
|
-
};
|
|
14
|
+
modes: AbsorberModeOptions;
|
|
10
15
|
};
|
|
11
16
|
};
|
|
12
|
-
export type IAbsorberOptions =
|
|
17
|
+
export type IAbsorberOptions = IInteractivityOptions & {
|
|
13
18
|
absorbers: SingleOrMultiple<IAbsorber>;
|
|
14
19
|
interactivity: {
|
|
15
|
-
modes:
|
|
16
|
-
absorbers: SingleOrMultiple<IAbsorber>;
|
|
17
|
-
};
|
|
20
|
+
modes: IAbsorberModeOptions;
|
|
18
21
|
};
|
|
19
22
|
};
|
package/umd/AbsorberInstance.js
CHANGED
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
exports.AbsorberInstance = void 0;
|
|
13
13
|
const engine_1 = require("@tsparticles/engine");
|
|
14
14
|
const Absorber_js_1 = require("./Options/Classes/Absorber.js");
|
|
15
|
-
const squareExp = 2, absorbFactor = 0.033, minOrbitLength = 0, minRadius = 0, minMass = 0, minAngle = 0,
|
|
15
|
+
const squareExp = 2, absorbFactor = 0.033, minOrbitLength = 0, minRadius = 0, minMass = 0, minAngle = 0, maxAngle = engine_1.doublePI, minVelocity = 0;
|
|
16
16
|
class AbsorberInstance {
|
|
17
|
-
constructor(
|
|
17
|
+
constructor(engine, container, options, position) {
|
|
18
18
|
this._calcPosition = () => {
|
|
19
19
|
const exactPosition = (0, engine_1.calcPositionOrRandomFromSizeRanged)({
|
|
20
20
|
size: this._container.canvas.size,
|
|
@@ -76,7 +76,6 @@
|
|
|
76
76
|
this.options = new Absorber_js_1.Absorber();
|
|
77
77
|
this.options.load(options);
|
|
78
78
|
}
|
|
79
|
-
this.dragging = false;
|
|
80
79
|
this.name = this.options.name;
|
|
81
80
|
this.opacity = this.options.opacity;
|
|
82
81
|
this.size = (0, engine_1.getRangeValue)(this.options.size.value) * container.retina.pixelRatio;
|
|
@@ -93,28 +92,11 @@
|
|
|
93
92
|
};
|
|
94
93
|
this.position = this.initialPosition?.copy() ?? this._calcPosition();
|
|
95
94
|
}
|
|
96
|
-
attract(particle) {
|
|
97
|
-
const container = this._container, options = this.options;
|
|
98
|
-
if (options.draggable) {
|
|
99
|
-
const mouse = container.interactivity.mouse;
|
|
100
|
-
if (mouse.clicking && mouse.downPosition) {
|
|
101
|
-
const mouseDist = (0, engine_1.getDistance)(this.position, mouse.downPosition);
|
|
102
|
-
if (mouseDist <= this.size) {
|
|
103
|
-
this.dragging = true;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
this.dragging = false;
|
|
108
|
-
}
|
|
109
|
-
if (this.dragging && mouse.position) {
|
|
110
|
-
this.position.x = mouse.position.x;
|
|
111
|
-
this.position.y = mouse.position.y;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
const pos = particle.getPosition(), { dx, dy, distance } = (0, engine_1.getDistances)(this.position, pos), v = engine_1.Vector.create(dx, dy);
|
|
95
|
+
attract(particle, delta) {
|
|
96
|
+
const container = this._container, options = this.options, pos = particle.getPosition(), { dx, dy, distance } = (0, engine_1.getDistances)(this.position, pos), v = engine_1.Vector.create(dx, dy);
|
|
115
97
|
v.length = (this.mass / Math.pow(distance, squareExp)) * container.retina.reduceFactor;
|
|
116
98
|
if (distance < this.size + particle.getRadius()) {
|
|
117
|
-
const sizeFactor = particle.getRadius() * absorbFactor * container.retina.pixelRatio;
|
|
99
|
+
const sizeFactor = particle.getRadius() * absorbFactor * container.retina.pixelRatio * delta.factor;
|
|
118
100
|
if ((this.size > particle.getRadius() && distance < this.size - particle.getRadius()) ||
|
|
119
101
|
(particle.absorberOrbit !== undefined && particle.absorberOrbit.length < minOrbitLength)) {
|
|
120
102
|
if (options.destroy) {
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
2
|
+
if (k2 === undefined) k2 = k;
|
|
3
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
4
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
5
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
6
|
+
}
|
|
7
|
+
Object.defineProperty(o, k2, desc);
|
|
8
|
+
}) : (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
o[k2] = m[k];
|
|
11
|
+
}));
|
|
12
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
13
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
14
|
+
}) : function(o, v) {
|
|
15
|
+
o["default"] = v;
|
|
16
|
+
});
|
|
17
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
18
|
+
var ownKeys = function(o) {
|
|
19
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
20
|
+
var ar = [];
|
|
21
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
22
|
+
return ar;
|
|
23
|
+
};
|
|
24
|
+
return ownKeys(o);
|
|
25
|
+
};
|
|
26
|
+
return function (mod) {
|
|
27
|
+
if (mod && mod.__esModule) return mod;
|
|
28
|
+
var result = {};
|
|
29
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
30
|
+
__setModuleDefault(result, mod);
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
})();
|
|
34
|
+
(function (factory) {
|
|
35
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
36
|
+
var v = factory(require, exports);
|
|
37
|
+
if (v !== undefined) module.exports = v;
|
|
38
|
+
}
|
|
39
|
+
else if (typeof define === "function" && define.amd) {
|
|
40
|
+
define(["require", "exports", "@tsparticles/engine"], factory);
|
|
41
|
+
}
|
|
42
|
+
})(function (require, exports) {
|
|
43
|
+
"use strict";
|
|
44
|
+
var __syncRequire = typeof module === "object" && typeof module.exports === "object";
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.AbsorbersInstancesManager = void 0;
|
|
47
|
+
const engine_1 = require("@tsparticles/engine");
|
|
48
|
+
const defaultIndex = 0;
|
|
49
|
+
class AbsorbersInstancesManager {
|
|
50
|
+
constructor(engine) {
|
|
51
|
+
this._containerArrays = new Map();
|
|
52
|
+
this._engine = engine;
|
|
53
|
+
}
|
|
54
|
+
async addAbsorber(container, options, position) {
|
|
55
|
+
const { AbsorberInstance } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./AbsorberInstance.js"))) : new Promise((resolve_1, reject_1) => { require(["./AbsorberInstance.js"], resolve_1, reject_1); }).then(__importStar)), absorber = new AbsorberInstance(this._engine, container, options, position), array = this.getArray(container);
|
|
56
|
+
array.push(absorber);
|
|
57
|
+
return absorber;
|
|
58
|
+
}
|
|
59
|
+
clear(container) {
|
|
60
|
+
this.initContainer(container);
|
|
61
|
+
this._containerArrays.set(container, []);
|
|
62
|
+
}
|
|
63
|
+
getArray(container) {
|
|
64
|
+
this.initContainer(container);
|
|
65
|
+
let array = this._containerArrays.get(container);
|
|
66
|
+
if (!array) {
|
|
67
|
+
array = [];
|
|
68
|
+
this._containerArrays.set(container, array);
|
|
69
|
+
}
|
|
70
|
+
return array;
|
|
71
|
+
}
|
|
72
|
+
initContainer(container) {
|
|
73
|
+
if (this._containerArrays.has(container)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this._containerArrays.set(container, []);
|
|
77
|
+
container.getAbsorber ??= (idxOrName) => {
|
|
78
|
+
const array = this.getArray(container);
|
|
79
|
+
return idxOrName === undefined || (0, engine_1.isNumber)(idxOrName)
|
|
80
|
+
? array[idxOrName ?? defaultIndex]
|
|
81
|
+
: array.find(t => t.name === idxOrName);
|
|
82
|
+
};
|
|
83
|
+
container.addAbsorber ??= (options, position) => {
|
|
84
|
+
return this.addAbsorber(container, options, position);
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
removeAbsorber(container, absorber) {
|
|
88
|
+
const index = this.getArray(container).indexOf(absorber), deleteCount = 1;
|
|
89
|
+
if (index >= defaultIndex) {
|
|
90
|
+
this.getArray(container).splice(index, deleteCount);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.AbsorbersInstancesManager = AbsorbersInstancesManager;
|
|
95
|
+
});
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "@tsparticles/plugin-interactivity", "@tsparticles/engine", "./Options/Classes/Absorber.js"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AbsorbersInteractor = void 0;
|
|
13
|
+
const plugin_interactivity_1 = require("@tsparticles/plugin-interactivity");
|
|
14
|
+
const engine_1 = require("@tsparticles/engine");
|
|
15
|
+
const Absorber_js_1 = require("./Options/Classes/Absorber.js");
|
|
16
|
+
const absorbersMode = "absorbers";
|
|
17
|
+
class AbsorbersInteractor extends plugin_interactivity_1.ExternalInteractorBase {
|
|
18
|
+
constructor(container, instancesManager) {
|
|
19
|
+
super(container);
|
|
20
|
+
this.dragging = false;
|
|
21
|
+
this._instancesManager = instancesManager;
|
|
22
|
+
this._instancesManager.initContainer(container);
|
|
23
|
+
this.handleClickMode = (mode, interactivityData) => {
|
|
24
|
+
const container = this.container, options = container.actualOptions, absorbers = options.interactivity.modes.absorbers;
|
|
25
|
+
if (!absorbers || mode !== absorbersMode) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const { clickPosition } = interactivityData.mouse;
|
|
29
|
+
if (clickPosition) {
|
|
30
|
+
const existingAbsorber = instancesManager
|
|
31
|
+
.getArray(this.container)
|
|
32
|
+
.some(t => (0, engine_1.getDistance)(t.position, clickPosition) < t.size);
|
|
33
|
+
if (existingAbsorber) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const absorbersModeOptions = (0, engine_1.itemFromArray)(absorbers) ?? new Absorber_js_1.Absorber();
|
|
38
|
+
void this._instancesManager.addAbsorber(container, absorbersModeOptions, clickPosition);
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
clear() {
|
|
42
|
+
}
|
|
43
|
+
init() {
|
|
44
|
+
}
|
|
45
|
+
interact(interactivityData, delta) {
|
|
46
|
+
for (const particle of this.container.particles.filter(p => this.isEnabled(interactivityData, p))) {
|
|
47
|
+
for (const absorber of this._instancesManager.getArray(this.container)) {
|
|
48
|
+
if (absorber.options.draggable) {
|
|
49
|
+
const mouse = interactivityData.mouse;
|
|
50
|
+
if (mouse.clicking && mouse.downPosition) {
|
|
51
|
+
const mouseDist = (0, engine_1.getDistance)(absorber.position, mouse.downPosition);
|
|
52
|
+
if (mouseDist <= absorber.size) {
|
|
53
|
+
this.dragging = true;
|
|
54
|
+
this.draggingAbsorber = absorber;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.dragging = false;
|
|
59
|
+
this.draggingAbsorber = undefined;
|
|
60
|
+
}
|
|
61
|
+
if (this.dragging && this.draggingAbsorber == absorber && mouse.position) {
|
|
62
|
+
absorber.position.x = mouse.position.x;
|
|
63
|
+
absorber.position.y = mouse.position.y;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
absorber.attract(particle, delta);
|
|
67
|
+
if (particle.destroyed) {
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
isEnabled(interactivityData, particle) {
|
|
74
|
+
const container = this.container, options = container.actualOptions, mouse = interactivityData.mouse, events = (particle?.interactivity ?? options.interactivity).events;
|
|
75
|
+
if (!mouse.clickPosition || !events.onClick.enable) {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
return (0, engine_1.isInArray)(absorbersMode, events.onClick.mode);
|
|
79
|
+
}
|
|
80
|
+
loadModeOptions(options, ...sources) {
|
|
81
|
+
options.absorbers ??= [];
|
|
82
|
+
for (const source of sources) {
|
|
83
|
+
if (!source) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if ((0, engine_1.isArray)(source.absorbers)) {
|
|
87
|
+
for (const absorber of source.absorbers) {
|
|
88
|
+
const tmp = new Absorber_js_1.Absorber();
|
|
89
|
+
tmp.load(absorber);
|
|
90
|
+
options.absorbers.push(tmp);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const tmp = new Absorber_js_1.Absorber();
|
|
95
|
+
tmp.load(source.absorbers);
|
|
96
|
+
options.absorbers.push(tmp);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
reset() {
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.AbsorbersInteractor = AbsorbersInteractor;
|
|
104
|
+
});
|