@tsparticles/plugin-canvas-mask 4.0.0-alpha.8 → 4.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/565.min.js +1 -0
  2. package/597.min.js +2 -0
  3. package/browser/CanvasMaskPlugin.js +1 -3
  4. package/browser/CanvasMaskPluginInstance.js +6 -5
  5. package/browser/Options/Classes/CanvasMask.js +9 -0
  6. package/browser/Options/Classes/CanvasMaskOverride.js +2 -0
  7. package/browser/Options/Classes/CanvasMaskPixels.js +3 -1
  8. package/browser/Options/Classes/FontTextMask.js +8 -0
  9. package/browser/Options/Classes/ImageMask.js +1 -0
  10. package/browser/Options/Classes/TextMask.js +9 -0
  11. package/browser/Options/Classes/TextMaskLine.js +2 -0
  12. package/browser/index.js +1 -1
  13. package/browser/utils.js +6 -89
  14. package/cjs/CanvasMaskPlugin.js +1 -3
  15. package/cjs/CanvasMaskPluginInstance.js +6 -5
  16. package/cjs/Options/Classes/CanvasMask.js +9 -0
  17. package/cjs/Options/Classes/CanvasMaskOverride.js +2 -0
  18. package/cjs/Options/Classes/CanvasMaskPixels.js +3 -1
  19. package/cjs/Options/Classes/FontTextMask.js +8 -0
  20. package/cjs/Options/Classes/ImageMask.js +1 -0
  21. package/cjs/Options/Classes/TextMask.js +9 -0
  22. package/cjs/Options/Classes/TextMaskLine.js +2 -0
  23. package/cjs/index.js +1 -1
  24. package/cjs/utils.js +6 -89
  25. package/dist_browser_CanvasMaskPluginInstance_js.js +3 -3
  26. package/dist_browser_CanvasMaskPlugin_js.js +9 -9
  27. package/esm/CanvasMaskPlugin.js +1 -3
  28. package/esm/CanvasMaskPluginInstance.js +6 -5
  29. package/esm/Options/Classes/CanvasMask.js +9 -0
  30. package/esm/Options/Classes/CanvasMaskOverride.js +2 -0
  31. package/esm/Options/Classes/CanvasMaskPixels.js +3 -1
  32. package/esm/Options/Classes/FontTextMask.js +8 -0
  33. package/esm/Options/Classes/ImageMask.js +1 -0
  34. package/esm/Options/Classes/TextMask.js +9 -0
  35. package/esm/Options/Classes/TextMaskLine.js +2 -0
  36. package/esm/index.js +1 -1
  37. package/esm/utils.js +6 -89
  38. package/package.json +3 -2
  39. package/report.html +1 -1
  40. package/tsparticles.plugin.canvas-mask.js +41 -19
  41. package/tsparticles.plugin.canvas-mask.min.js +2 -2
  42. package/types/CanvasMaskPlugin.d.ts +1 -2
  43. package/types/Options/Classes/FontTextMask.d.ts +3 -3
  44. package/types/Options/Classes/TextMask.d.ts +1 -0
  45. package/types/Options/Interfaces/IFontTextMask.d.ts +2 -7
  46. package/types/Options/Interfaces/ITextMask.d.ts +3 -3
  47. package/types/Options/Interfaces/ITextMaskLine.d.ts +2 -4
  48. package/types/utils.d.ts +2 -10
  49. package/umd/CanvasMaskPlugin.js +1 -3
  50. package/umd/CanvasMaskPluginInstance.js +8 -7
  51. package/umd/Options/Classes/CanvasMask.js +9 -0
  52. package/umd/Options/Classes/CanvasMaskOverride.js +2 -0
  53. package/umd/Options/Classes/CanvasMaskPixels.js +3 -1
  54. package/umd/Options/Classes/FontTextMask.js +8 -0
  55. package/umd/Options/Classes/ImageMask.js +1 -0
  56. package/umd/Options/Classes/TextMask.js +9 -0
  57. package/umd/Options/Classes/TextMaskLine.js +2 -0
  58. package/umd/index.js +1 -1
  59. package/umd/utils.js +5 -91
  60. package/722.min.js +0 -2
  61. package/722.min.js.LICENSE.txt +0 -1
  62. package/775.min.js +0 -2
  63. package/775.min.js.LICENSE.txt +0 -1
  64. package/tsparticles.plugin.canvas-mask.min.js.LICENSE.txt +0 -1
@@ -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.8
7
+ * v4.0.0-beta.0
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 */ CanvasMaskPlugin: () => (/* binding */ CanvasMaskPlugin)\n/* harmony export */ });\n/* harmony import */ var _Options_Classes_CanvasMask_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Options/Classes/CanvasMask.js */ \"./dist/browser/Options/Classes/CanvasMask.js\");\n\nclass CanvasMaskPlugin {\n constructor() {\n this.id = \"canvasMask\";\n }\n async getPlugin(container) {\n const {\n CanvasMaskPluginInstance\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_CanvasMaskPluginInstance_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./CanvasMaskPluginInstance.js */ \"./dist/browser/CanvasMaskPluginInstance.js\"));\n return new CanvasMaskPluginInstance(container);\n }\n loadOptions(_container, options, source) {\n if (!this.needsPlugin(options) && !this.needsPlugin(source)) {\n return;\n }\n let canvasMaskOptions = options.canvasMask;\n if (canvasMaskOptions?.load === undefined) {\n options.canvasMask = canvasMaskOptions = new _Options_Classes_CanvasMask_js__WEBPACK_IMPORTED_MODULE_0__.CanvasMask();\n }\n canvasMaskOptions.load(source?.canvasMask);\n }\n needsPlugin(options) {\n return options?.canvasMask?.enable ?? false;\n }\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/CanvasMaskPlugin.js?\n}");
26
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasMaskPlugin: () => (/* binding */ CanvasMaskPlugin)\n/* harmony export */ });\n/* harmony import */ var _Options_Classes_CanvasMask_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Options/Classes/CanvasMask.js */ \"./dist/browser/Options/Classes/CanvasMask.js\");\n\nclass CanvasMaskPlugin {\n id = \"canvas-mask\";\n async getPlugin(container) {\n const { CanvasMaskPluginInstance } = await __webpack_require__.e(/*! import() */ \"dist_browser_CanvasMaskPluginInstance_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./CanvasMaskPluginInstance.js */ \"./dist/browser/CanvasMaskPluginInstance.js\"));\n return new CanvasMaskPluginInstance(container);\n }\n loadOptions(_container, options, source) {\n if (!this.needsPlugin(options) && !this.needsPlugin(source)) {\n return;\n }\n let canvasMaskOptions = options.canvasMask;\n if (canvasMaskOptions?.load === undefined) {\n options.canvasMask = canvasMaskOptions = new _Options_Classes_CanvasMask_js__WEBPACK_IMPORTED_MODULE_0__.CanvasMask();\n }\n canvasMaskOptions.load(source?.canvasMask);\n }\n needsPlugin(options) {\n return options?.canvasMask?.enable ?? false;\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/CanvasMaskPlugin.js?\n}");
27
27
 
28
28
  /***/ },
29
29
 
@@ -33,7 +33,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
33
33
  \****************************************************/
34
34
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
35
35
 
36
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasMask: () => (/* binding */ CanvasMask)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _CanvasMaskOverride_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CanvasMaskOverride.js */ \"./dist/browser/Options/Classes/CanvasMaskOverride.js\");\n/* harmony import */ var _CanvasMaskPixels_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CanvasMaskPixels.js */ \"./dist/browser/Options/Classes/CanvasMaskPixels.js\");\n/* harmony import */ var _ImageMask_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ImageMask.js */ \"./dist/browser/Options/Classes/ImageMask.js\");\n/* harmony import */ var _TextMask_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./TextMask.js */ \"./dist/browser/Options/Classes/TextMask.js\");\n\n\n\n\n\nclass CanvasMask {\n constructor() {\n this.enable = false;\n this.override = new _CanvasMaskOverride_js__WEBPACK_IMPORTED_MODULE_1__.CanvasMaskOverride();\n this.pixels = new _CanvasMaskPixels_js__WEBPACK_IMPORTED_MODULE_2__.CanvasMaskPixels();\n this.position = {\n x: 50,\n y: 50\n };\n this.scale = 1;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.element !== undefined && data.element instanceof HTMLCanvasElement) {\n this.element = data.element;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.image) {\n this.image ??= new _ImageMask_js__WEBPACK_IMPORTED_MODULE_3__.ImageMask();\n this.image.load(data.image);\n }\n this.pixels.load(data.pixels);\n if (data.position) {\n this.position = {\n x: data.position.x ?? this.position.x,\n y: data.position.y ?? this.position.y\n };\n }\n this.override.load(data.override);\n if (data.scale !== undefined) {\n this.scale = data.scale;\n }\n if (data.selector !== undefined) {\n this.selector = data.selector;\n }\n if (data.text) {\n this.text ??= new _TextMask_js__WEBPACK_IMPORTED_MODULE_4__.TextMask();\n this.text.load(data.text);\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/CanvasMask.js?\n}");
36
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasMask: () => (/* binding */ CanvasMask)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _CanvasMaskOverride_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CanvasMaskOverride.js */ \"./dist/browser/Options/Classes/CanvasMaskOverride.js\");\n/* harmony import */ var _CanvasMaskPixels_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CanvasMaskPixels.js */ \"./dist/browser/Options/Classes/CanvasMaskPixels.js\");\n/* harmony import */ var _ImageMask_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ImageMask.js */ \"./dist/browser/Options/Classes/ImageMask.js\");\n/* harmony import */ var _TextMask_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./TextMask.js */ \"./dist/browser/Options/Classes/TextMask.js\");\n\n\n\n\n\nclass CanvasMask {\n element;\n enable;\n image;\n override;\n pixels;\n position;\n scale;\n selector;\n text;\n constructor(){\n this.enable = false;\n this.override = new _CanvasMaskOverride_js__WEBPACK_IMPORTED_MODULE_1__.CanvasMaskOverride();\n this.pixels = new _CanvasMaskPixels_js__WEBPACK_IMPORTED_MODULE_2__.CanvasMaskPixels();\n this.position = {\n x: 50,\n y: 50\n };\n this.scale = 1;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.element !== undefined && data.element instanceof HTMLCanvasElement) {\n this.element = data.element;\n }\n if (data.enable !== undefined) {\n this.enable = data.enable;\n }\n if (data.image) {\n this.image ??= new _ImageMask_js__WEBPACK_IMPORTED_MODULE_3__.ImageMask();\n this.image.load(data.image);\n }\n this.pixels.load(data.pixels);\n if (data.position) {\n this.position = {\n x: data.position.x ?? this.position.x,\n y: data.position.y ?? this.position.y\n };\n }\n this.override.load(data.override);\n if (data.scale !== undefined) {\n this.scale = data.scale;\n }\n if (data.selector !== undefined) {\n this.selector = data.selector;\n }\n if (data.text) {\n this.text ??= new _TextMask_js__WEBPACK_IMPORTED_MODULE_4__.TextMask();\n this.text.load(data.text);\n }\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/CanvasMask.js?\n}");
37
37
 
38
38
  /***/ },
39
39
 
@@ -43,7 +43,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
43
43
  \************************************************************/
44
44
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
45
45
 
46
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasMaskOverride: () => (/* binding */ CanvasMaskOverride)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nclass CanvasMaskOverride {\n constructor() {\n this.color = true;\n this.opacity = false;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = data.color;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/CanvasMaskOverride.js?\n}");
46
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasMaskOverride: () => (/* binding */ CanvasMaskOverride)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nclass CanvasMaskOverride {\n color;\n opacity;\n constructor(){\n this.color = true;\n this.opacity = false;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = data.color;\n }\n if (data.opacity !== undefined) {\n this.opacity = data.opacity;\n }\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/CanvasMaskOverride.js?\n}");
47
47
 
48
48
  /***/ },
49
49
 
@@ -53,7 +53,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
53
53
  \**********************************************************/
54
54
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
55
55
 
56
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasMaskPixels: () => (/* binding */ CanvasMaskPixels)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nconst minAlpha = 0;\nclass CanvasMaskPixels {\n constructor() {\n this.filter = pixel => pixel.a > minAlpha;\n this.offset = 4;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.filter !== undefined) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isString)(data.filter)) {\n if (Object.hasOwn(globalThis, data.filter)) {\n const filter = globalThis[data.filter];\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isFunction)(filter)) {\n this.filter = filter;\n }\n }\n } else {\n this.filter = data.filter;\n }\n }\n if (data.offset !== undefined) {\n this.offset = data.offset;\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/CanvasMaskPixels.js?\n}");
56
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CanvasMaskPixels: () => (/* binding */ CanvasMaskPixels)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nconst minAlpha = 0;\nclass CanvasMaskPixels {\n filter;\n offset;\n constructor(){\n this.filter = (pixel)=>pixel.a > minAlpha;\n this.offset = 4;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.filter !== undefined) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isString)(data.filter)) {\n if (data.filter in globalThis) {\n const filter = globalThis[data.filter];\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isFunction)(filter)) {\n this.filter = filter;\n }\n }\n } else {\n this.filter = data.filter;\n }\n }\n if (data.offset !== undefined) {\n this.offset = data.offset;\n }\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/CanvasMaskPixels.js?\n}");
57
57
 
58
58
  /***/ },
59
59
 
@@ -63,7 +63,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
63
63
  \******************************************************/
64
64
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
65
65
 
66
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FontTextMask: () => (/* binding */ FontTextMask)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nclass FontTextMask {\n constructor() {\n this.family = \"sans-serif\";\n this.size = 100;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.family !== undefined) {\n this.family = data.family;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.style !== undefined) {\n this.style = data.style;\n }\n if (data.variant !== undefined) {\n this.variant = data.variant;\n }\n if (data.weight !== undefined) {\n this.weight = data.weight;\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/FontTextMask.js?\n}");
66
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ FontTextMask: () => (/* binding */ FontTextMask)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nclass FontTextMask {\n family;\n size;\n style;\n variant;\n weight;\n constructor(){\n this.family = \"sans-serif\";\n this.size = 100;\n this.style = \"\";\n this.variant = \"\";\n this.weight = \"\";\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.family !== undefined) {\n this.family = data.family;\n }\n if (data.size !== undefined) {\n this.size = data.size;\n }\n if (data.style !== undefined) {\n this.style = data.style;\n }\n if (data.variant !== undefined) {\n this.variant = data.variant;\n }\n if (data.weight !== undefined) {\n this.weight = data.weight;\n }\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/FontTextMask.js?\n}");
67
67
 
68
68
  /***/ },
69
69
 
@@ -73,7 +73,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
73
73
  \***************************************************/
74
74
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
75
75
 
76
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ImageMask: () => (/* binding */ ImageMask)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nclass ImageMask {\n constructor() {\n this.src = \"\";\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.src !== undefined) {\n this.src = data.src;\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/ImageMask.js?\n}");
76
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ImageMask: () => (/* binding */ ImageMask)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nclass ImageMask {\n src;\n constructor(){\n this.src = \"\";\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.src !== undefined) {\n this.src = data.src;\n }\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/ImageMask.js?\n}");
77
77
 
78
78
  /***/ },
79
79
 
@@ -83,7 +83,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
83
83
  \**************************************************/
84
84
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
85
85
 
86
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextMask: () => (/* binding */ TextMask)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _FontTextMask_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FontTextMask.js */ \"./dist/browser/Options/Classes/FontTextMask.js\");\n/* harmony import */ var _TextMaskLine_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TextMaskLine.js */ \"./dist/browser/Options/Classes/TextMaskLine.js\");\n\n\n\nclass TextMask {\n constructor() {\n this.color = \"#000000\";\n this.font = new _FontTextMask_js__WEBPACK_IMPORTED_MODULE_1__.FontTextMask();\n this.lines = new _TextMaskLine_js__WEBPACK_IMPORTED_MODULE_2__.TextMaskLine();\n this.text = \"\";\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = data.color;\n }\n this.font.load(data.font);\n this.lines.load(data.lines);\n if (data.text !== undefined) {\n this.text = data.text;\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/TextMask.js?\n}");
86
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextMask: () => (/* binding */ TextMask)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _FontTextMask_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FontTextMask.js */ \"./dist/browser/Options/Classes/FontTextMask.js\");\n/* harmony import */ var _TextMaskLine_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TextMaskLine.js */ \"./dist/browser/Options/Classes/TextMaskLine.js\");\n\n\n\nclass TextMask {\n color;\n fill;\n font;\n lines;\n text;\n constructor(){\n this.color = \"#000000\";\n this.fill = true;\n this.font = new _FontTextMask_js__WEBPACK_IMPORTED_MODULE_1__.FontTextMask();\n this.lines = new _TextMaskLine_js__WEBPACK_IMPORTED_MODULE_2__.TextMaskLine();\n this.text = \"\";\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.color !== undefined) {\n this.color = data.color;\n }\n if (data.fill !== undefined) {\n this.fill = data.fill;\n }\n this.font.load(data.font);\n this.lines.load(data.lines);\n if (data.text !== undefined) {\n this.text = data.text;\n }\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/TextMask.js?\n}");
87
87
 
88
88
  /***/ },
89
89
 
@@ -93,7 +93,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
93
93
  \******************************************************/
94
94
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
95
95
 
96
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextMaskLine: () => (/* binding */ TextMaskLine)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nclass TextMaskLine {\n constructor() {\n this.separator = \"\\n\";\n this.spacing = 10;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.separator !== undefined) {\n this.separator = data.separator;\n }\n if (data.spacing !== undefined) {\n this.spacing = data.spacing;\n }\n }\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/TextMaskLine.js?\n}");
96
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TextMaskLine: () => (/* binding */ TextMaskLine)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nclass TextMaskLine {\n separator;\n spacing;\n constructor(){\n this.separator = \"\\n\";\n this.spacing = 10;\n }\n load(data) {\n if ((0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.isNull)(data)) {\n return;\n }\n if (data.separator !== undefined) {\n this.separator = data.separator;\n }\n if (data.spacing !== undefined) {\n this.spacing = data.spacing;\n }\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/Options/Classes/TextMaskLine.js?\n}");
97
97
 
98
98
  /***/ }
99
99
 
@@ -1,8 +1,6 @@
1
1
  import { CanvasMask } from "./Options/Classes/CanvasMask.js";
2
2
  export class CanvasMaskPlugin {
3
- constructor() {
4
- this.id = "canvasMask";
5
- }
3
+ id = "canvas-mask";
6
4
  async getPlugin(container) {
7
5
  const { CanvasMaskPluginInstance } = await import("./CanvasMaskPluginInstance.js");
8
6
  return new CanvasMaskPluginInstance(container);
@@ -1,6 +1,8 @@
1
- import { addParticlesFromCanvasPixels, getCanvasImageData, getImageData, getTextData, } from "./utils.js";
1
+ import { getCanvasImageData, getImageData, getTextData } from "@tsparticles/canvas-utils";
2
2
  import { isNull, safeDocument } from "@tsparticles/engine";
3
+ import { addParticlesFromCanvasPixels } from "./utils.js";
3
4
  export class CanvasMaskPluginInstance {
5
+ _container;
4
6
  constructor(container) {
5
7
  this._container = container;
6
8
  }
@@ -20,11 +22,10 @@ export class CanvasMaskPluginInstance {
20
22
  if (!url) {
21
23
  return;
22
24
  }
23
- pixelData = await getImageData(url, offset);
25
+ pixelData = await getImageData(url, offset, container.canvas.settings);
24
26
  }
25
27
  else if (options.text) {
26
- const textOptions = options.text;
27
- const data = getTextData(textOptions, offset);
28
+ const textOptions = options.text, data = getTextData(textOptions, offset, textOptions.fill, container.canvas.settings);
28
29
  if (isNull(data)) {
29
30
  return;
30
31
  }
@@ -35,7 +36,7 @@ export class CanvasMaskPluginInstance {
35
36
  if (!canvas) {
36
37
  return;
37
38
  }
38
- const context = canvas.getContext("2d");
39
+ const context = canvas.getContext("2d", container.canvas.settings);
39
40
  if (!context) {
40
41
  return;
41
42
  }
@@ -4,6 +4,15 @@ import { CanvasMaskPixels } from "./CanvasMaskPixels.js";
4
4
  import { ImageMask } from "./ImageMask.js";
5
5
  import { TextMask } from "./TextMask.js";
6
6
  export class CanvasMask {
7
+ element;
8
+ enable;
9
+ image;
10
+ override;
11
+ pixels;
12
+ position;
13
+ scale;
14
+ selector;
15
+ text;
7
16
  constructor() {
8
17
  this.enable = false;
9
18
  this.override = new CanvasMaskOverride();
@@ -1,5 +1,7 @@
1
1
  import { isNull } from "@tsparticles/engine";
2
2
  export class CanvasMaskOverride {
3
+ color;
4
+ opacity;
3
5
  constructor() {
4
6
  this.color = true;
5
7
  this.opacity = false;
@@ -1,6 +1,8 @@
1
1
  import { isFunction, isNull, isString, } from "@tsparticles/engine";
2
2
  const minAlpha = 0;
3
3
  export class CanvasMaskPixels {
4
+ filter;
5
+ offset;
4
6
  constructor() {
5
7
  this.filter = (pixel) => pixel.a > minAlpha;
6
8
  this.offset = 4;
@@ -11,7 +13,7 @@ export class CanvasMaskPixels {
11
13
  }
12
14
  if (data.filter !== undefined) {
13
15
  if (isString(data.filter)) {
14
- if (Object.hasOwn(globalThis, data.filter)) {
16
+ if (data.filter in globalThis) {
15
17
  const filter = globalThis[data.filter];
16
18
  if (isFunction(filter)) {
17
19
  this.filter = filter;
@@ -1,8 +1,16 @@
1
1
  import { isNull } from "@tsparticles/engine";
2
2
  export class FontTextMask {
3
+ family;
4
+ size;
5
+ style;
6
+ variant;
7
+ weight;
3
8
  constructor() {
4
9
  this.family = "sans-serif";
5
10
  this.size = 100;
11
+ this.style = "";
12
+ this.variant = "";
13
+ this.weight = "";
6
14
  }
7
15
  load(data) {
8
16
  if (isNull(data)) {
@@ -1,5 +1,6 @@
1
1
  import { isNull } from "@tsparticles/engine";
2
2
  export class ImageMask {
3
+ src;
3
4
  constructor() {
4
5
  this.src = "";
5
6
  }
@@ -2,8 +2,14 @@ import { isNull } from "@tsparticles/engine";
2
2
  import { FontTextMask } from "./FontTextMask.js";
3
3
  import { TextMaskLine } from "./TextMaskLine.js";
4
4
  export class TextMask {
5
+ color;
6
+ fill;
7
+ font;
8
+ lines;
9
+ text;
5
10
  constructor() {
6
11
  this.color = "#000000";
12
+ this.fill = true;
7
13
  this.font = new FontTextMask();
8
14
  this.lines = new TextMaskLine();
9
15
  this.text = "";
@@ -15,6 +21,9 @@ export class TextMask {
15
21
  if (data.color !== undefined) {
16
22
  this.color = data.color;
17
23
  }
24
+ if (data.fill !== undefined) {
25
+ this.fill = data.fill;
26
+ }
18
27
  this.font.load(data.font);
19
28
  this.lines.load(data.lines);
20
29
  if (data.text !== undefined) {
@@ -1,5 +1,7 @@
1
1
  import { isNull } from "@tsparticles/engine";
2
2
  export class TextMaskLine {
3
+ separator;
4
+ spacing;
3
5
  constructor() {
4
6
  this.separator = "\n";
5
7
  this.spacing = 10;
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export async function loadCanvasMaskPlugin(engine) {
2
- engine.checkVersion("4.0.0-alpha.8");
2
+ engine.checkVersion("4.0.0-beta.0");
3
3
  await engine.register(async (e) => {
4
4
  const { CanvasMaskPlugin } = await import("./CanvasMaskPlugin.js");
5
5
  e.addPlugin(new CanvasMaskPlugin());
package/esm/utils.js CHANGED
@@ -1,5 +1,4 @@
1
- import { defaultAlpha, getRandom, half, isNumber, originPoint, percentDenominator, safeDocument, } from "@tsparticles/engine";
2
- const defaultWidth = 0, defaultRgb = 0;
1
+ import { getRandom, half, percentDenominator, } from "@tsparticles/engine";
3
2
  export function addParticlesFromCanvasPixels(container, data, position, scale, override, filter) {
4
3
  const { height, width } = data, numPixels = height * width, indexArray = shuffle(range(numPixels)), maxParticles = Math.min(numPixels, container.actualOptions.particles.number.value), canvasSize = container.canvas.size;
5
4
  let selectedPixels = 0;
@@ -28,8 +27,11 @@ export function addParticlesFromCanvasPixels(container, data, position, scale, o
28
27
  y: pixelPos.y * scale + positionOffset.y,
29
28
  }, pOptions = {};
30
29
  if (override.color) {
31
- pOptions.color = {
32
- value: pixel,
30
+ pOptions.fill = {
31
+ color: {
32
+ value: pixel,
33
+ },
34
+ enable: true,
33
35
  };
34
36
  }
35
37
  if (override.opacity) {
@@ -41,91 +43,6 @@ export function addParticlesFromCanvasPixels(container, data, position, scale, o
41
43
  selectedPixels++;
42
44
  }
43
45
  }
44
- export function getCanvasImageData(ctx, size, offset, clear = true) {
45
- const imageData = ctx.getImageData(originPoint.x, originPoint.y, size.width, size.height).data;
46
- if (clear) {
47
- ctx.clearRect(originPoint.x, originPoint.y, size.width, size.height);
48
- }
49
- const pixels = [];
50
- for (let i = 0; i < imageData.length; i += offset) {
51
- const idx = i / offset, pos = {
52
- x: idx % size.width,
53
- y: Math.floor(idx / size.width),
54
- };
55
- pixels[pos.y] ??= [];
56
- const indexesOffset = {
57
- r: 0,
58
- g: 1,
59
- b: 2,
60
- a: 3,
61
- }, alphaFactor = 255, row = pixels[pos.y];
62
- if (!row) {
63
- continue;
64
- }
65
- row[pos.x] = {
66
- r: imageData[i + indexesOffset.r] ?? defaultRgb,
67
- g: imageData[i + indexesOffset.g] ?? defaultRgb,
68
- b: imageData[i + indexesOffset.b] ?? defaultRgb,
69
- a: (imageData[i + indexesOffset.a] ?? defaultAlpha) / alphaFactor,
70
- };
71
- }
72
- return {
73
- pixels,
74
- width: Math.min(...pixels.map(row => row.length)),
75
- height: pixels.length,
76
- };
77
- }
78
- export function getImageData(src, offset) {
79
- const image = new Image();
80
- image.crossOrigin = "Anonymous";
81
- const p = new Promise((resolve, reject) => {
82
- image.onerror = reject;
83
- image.onload = () => {
84
- const canvas = safeDocument().createElement("canvas");
85
- canvas.width = image.width;
86
- canvas.height = image.height;
87
- const context = canvas.getContext("2d");
88
- if (!context) {
89
- reject(new Error("Could not get canvas context"));
90
- return;
91
- }
92
- context.drawImage(image, originPoint.x, originPoint.y, image.width, image.height, originPoint.x, originPoint.y, canvas.width, canvas.height);
93
- resolve(getCanvasImageData(context, canvas, offset));
94
- };
95
- });
96
- image.src = src;
97
- return p;
98
- }
99
- export function getTextData(textOptions, offset) {
100
- const canvas = safeDocument().createElement("canvas"), context = canvas.getContext("2d"), { font, text, lines: linesOptions, color } = textOptions;
101
- if (!text || !context) {
102
- return;
103
- }
104
- const lines = text.split(linesOptions.separator), fontSize = isNumber(font.size) ? `${font.size.toString()}px` : font.size, linesData = [];
105
- let maxWidth = 0, totalHeight = 0;
106
- for (const line of lines) {
107
- context.font = `${font.style ?? ""} ${font.variant ?? ""} ${font.weight?.toString() ?? ""} ${fontSize} ${font.family}`;
108
- const measure = context.measureText(line), lineData = {
109
- measure,
110
- text: line,
111
- height: measure.actualBoundingBoxAscent + measure.actualBoundingBoxDescent,
112
- width: measure.width,
113
- };
114
- maxWidth = Math.max(maxWidth || defaultWidth, lineData.width);
115
- totalHeight += lineData.height + linesOptions.spacing;
116
- linesData.push(lineData);
117
- }
118
- canvas.width = maxWidth;
119
- canvas.height = totalHeight;
120
- let currentHeight = 0;
121
- for (const line of linesData) {
122
- context.font = `${font.style ?? ""} ${font.variant ?? ""} ${font.weight?.toString() ?? ""} ${fontSize} ${font.family}`;
123
- context.fillStyle = color;
124
- context.fillText(line.text, originPoint.x, currentHeight + line.measure.actualBoundingBoxAscent);
125
- currentHeight += line.height + linesOptions.spacing;
126
- }
127
- return getCanvasImageData(context, canvas, offset);
128
- }
129
46
  function shuffle(array) {
130
47
  const lengthOffset = 1, minIndex = 0;
131
48
  for (let currentIndex = array.length - lengthOffset; currentIndex >= minIndex; currentIndex--) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/plugin-canvas-mask",
3
- "version": "4.0.0-alpha.8",
3
+ "version": "4.0.0-beta.0",
4
4
  "description": "tsParticles canvas mask plugin",
5
5
  "homepage": "https://particles.js.org",
6
6
  "repository": {
@@ -86,7 +86,8 @@
86
86
  "./package.json": "./package.json"
87
87
  },
88
88
  "dependencies": {
89
- "@tsparticles/engine": "4.0.0-alpha.8"
89
+ "@tsparticles/canvas-utils": "4.0.0-beta.0",
90
+ "@tsparticles/engine": "4.0.0-beta.0"
90
91
  },
91
92
  "publishConfig": {
92
93
  "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/plugin-canvas-mask [23 Jan 2026 at 23:41]</title>
6
+ <title>@tsparticles/plugin-canvas-mask [19 Mar 2026 at 14:01]</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.8
7
+ * v4.0.0-beta.0
8
8
  */
9
9
  /*
10
10
  * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
@@ -16,25 +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/canvas-utils"), require("@tsparticles/engine"));
20
20
  else if(typeof define === 'function' && define.amd)
21
- define(["@tsparticles/engine"], factory);
21
+ define(["@tsparticles/canvas-utils", "@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/canvas-utils"), 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_canvas_utils__, __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__) => {
27
27
  return /******/ (() => { // webpackBootstrap
28
28
  /******/ "use strict";
29
29
  /******/ var __webpack_modules__ = ({
30
30
 
31
- /***/ "./dist/browser/index.js"
32
- /*!*******************************!*\
33
- !*** ./dist/browser/index.js ***!
34
- \*******************************/
35
- (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
31
+ /***/ "@tsparticles/canvas-utils"
32
+ /*!***************************************************************************************************************************************************!*\
33
+ !*** external {"commonjs":"@tsparticles/canvas-utils","commonjs2":"@tsparticles/canvas-utils","amd":"@tsparticles/canvas-utils","root":"window"} ***!
34
+ \***************************************************************************************************************************************************/
35
+ (module) {
36
36
 
37
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadCanvasMaskPlugin: () => (/* binding */ loadCanvasMaskPlugin)\n/* harmony export */ });\nasync function loadCanvasMaskPlugin(engine) {\n engine.checkVersion(\"4.0.0-alpha.8\");\n await engine.register(async e => {\n const {\n CanvasMaskPlugin\n } = await __webpack_require__.e(/*! import() */ \"dist_browser_CanvasMaskPlugin_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./CanvasMaskPlugin.js */ \"./dist/browser/CanvasMaskPlugin.js\"));\n e.addPlugin(new CanvasMaskPlugin());\n });\n}\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/index.js?\n}");
37
+ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_canvas_utils__;
38
38
 
39
39
  /***/ },
40
40
 
@@ -46,6 +46,16 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
46
46
 
47
47
  module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
48
48
 
49
+ /***/ },
50
+
51
+ /***/ "./dist/browser/index.js"
52
+ /*!*******************************!*\
53
+ !*** ./dist/browser/index.js ***!
54
+ \*******************************/
55
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
56
+
57
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadCanvasMaskPlugin: () => (/* binding */ loadCanvasMaskPlugin)\n/* harmony export */ });\nasync function loadCanvasMaskPlugin(engine) {\n engine.checkVersion(\"4.0.0-beta.0\");\n await engine.register(async (e)=>{\n const { CanvasMaskPlugin } = await __webpack_require__.e(/*! import() */ \"dist_browser_CanvasMaskPlugin_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./CanvasMaskPlugin.js */ \"./dist/browser/CanvasMaskPlugin.js\"));\n e.addPlugin(new CanvasMaskPlugin());\n });\n}\n\n\n//# sourceURL=webpack://@tsparticles/plugin-canvas-mask/./dist/browser/index.js?\n}");
58
+
49
59
  /***/ }
50
60
 
51
61
  /******/ });
@@ -60,12 +70,6 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
60
70
  /******/ if (cachedModule !== undefined) {
61
71
  /******/ return cachedModule.exports;
62
72
  /******/ }
63
- /******/ // Check if module exists (development only)
64
- /******/ if (__webpack_modules__[moduleId] === undefined) {
65
- /******/ var e = new Error("Cannot find module '" + moduleId + "'");
66
- /******/ e.code = 'MODULE_NOT_FOUND';
67
- /******/ throw e;
68
- /******/ }
69
73
  /******/ // Create a new module (and put it into the cache)
70
74
  /******/ var module = __webpack_module_cache__[moduleId] = {
71
75
  /******/ // no module.id needed
@@ -74,6 +78,12 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
74
78
  /******/ };
75
79
  /******/
76
80
  /******/ // Execute the module function
81
+ /******/ if (!(moduleId in __webpack_modules__)) {
82
+ /******/ delete __webpack_module_cache__[moduleId];
83
+ /******/ var e = new Error("Cannot find module '" + moduleId + "'");
84
+ /******/ e.code = 'MODULE_NOT_FOUND';
85
+ /******/ throw e;
86
+ /******/ }
77
87
  /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
78
88
  /******/
79
89
  /******/ // Return the exports of the module
@@ -118,6 +128,18 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
118
128
  /******/ };
119
129
  /******/ })();
120
130
  /******/
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
+ /******/
121
143
  /******/ /* webpack/runtime/hasOwnProperty shorthand */
122
144
  /******/ (() => {
123
145
  /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
@@ -182,8 +204,8 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
182
204
  /******/ /* webpack/runtime/publicPath */
183
205
  /******/ (() => {
184
206
  /******/ var scriptUrl;
185
- /******/ if (globalThis.importScripts) scriptUrl = globalThis.location + "";
186
- /******/ var document = globalThis.document;
207
+ /******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
208
+ /******/ var document = __webpack_require__.g.document;
187
209
  /******/ if (!scriptUrl && document) {
188
210
  /******/ if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')
189
211
  /******/ scriptUrl = document.currentScript.src;
@@ -1,2 +1,2 @@
1
- /*! For license information please see tsparticles.plugin.canvas-mask.min.js.LICENSE.txt */
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 a in r)("object"==typeof exports?exports:e)[a]=r[a]}}(this,(e=>(()=>{var t,r,a={303(t){t.exports=e}},o={};function n(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}};return a[e](r,r.exports,n),r.exports}n.m=a,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.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),t={},r="@tsparticles/plugin-canvas-mask:",n.l=(e,a,o,i)=>{if(t[e])t[e].push(a);else{var s,l;if(void 0!==o)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")==r+o){s=u;break}}s||(l=!0,(s=document.createElement("script")).charset="utf-8",n.nc&&s.setAttribute("nonce",n.nc),s.setAttribute("data-webpack",r+o),s.src=e),t[e]=[a];var d=(r,a)=>{s.onerror=s.onload=null,clearTimeout(f);var o=t[e];if(delete t[e],s.parentNode&&s.parentNode.removeChild(s),o&&o.forEach((e=>e(a))),r)return r(a)},f=setTimeout(d.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=d.bind(null,s.onerror),s.onload=d.bind(null,s.onload),l&&document.head.appendChild(s)}},n.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 a=r.length-1;a>-1&&(!e||!/^http(s?):/.test(e));)e=r[a--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{var e={837:0};n.f.j=(t,r)=>{var a=n.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var i=n.p+n.u(t),s=new Error;n.l(i,(r=>{if(n.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+i+")",s.name="ChunkLoadError",s.type=o,s.request=i,a[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var a,o,[i,s,l]=r,c=0;if(i.some((t=>0!==e[t]))){for(a in s)n.o(s,a)&&(n.m[a]=s[a]);if(l)l(n)}for(t&&t(r);c<i.length;c++)o=i[c],n.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=this.webpackChunk_tsparticles_plugin_canvas_mask=this.webpackChunk_tsparticles_plugin_canvas_mask||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var i={};async function s(e){e.checkVersion("4.0.0-alpha.8"),await e.register((async e=>{const{CanvasMaskPlugin:t}=await n.e(775).then(n.bind(n,775));e.addPlugin(new t)}))}return n.r(i),n.d(i,{loadCanvasMaskPlugin:()=>s}),i})()));
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/canvas-utils"),require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/canvas-utils","@tsparticles/engine"],t);else{var r="object"==typeof exports?t(require("@tsparticles/canvas-utils"),require("@tsparticles/engine")):t(e.window,e.window);for(var i in r)("object"==typeof exports?exports:e)[i]=r[i]}}(this,(e,t)=>(()=>{"use strict";var r,i,o,n={425(t){t.exports=e},303(e){e.exports=t}},a={};function s(e){var t=a[e];if(void 0!==t)return t.exports;var r=a[e]={exports:{}};return n[e](r,r.exports,s),r.exports}s.m=n,s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce((t,r)=>(s.f[r](e,t),t),[])),s.u=e=>""+e+".min.js",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),c={},s.l=(e,t,r,i)=>{if(c[e])return void c[e].push(t);if(void 0!==r)for(var o,n,a=document.getElementsByTagName("script"),l=0;l<a.length;l++){var p=a[l];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")=="@tsparticles/plugin-canvas-mask:"+r){o=p;break}}o||(n=!0,(o=document.createElement("script")).charset="utf-8",s.nc&&o.setAttribute("nonce",s.nc),o.setAttribute("data-webpack","@tsparticles/plugin-canvas-mask:"+r),o.src=e),c[e]=[t];var u=(t,r)=>{o.onerror=o.onload=null,clearTimeout(d);var i=c[e];if(delete c[e],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach(e=>e(r)),t)return t(r)},d=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),n&&document.head.appendChild(o)},s.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.g.importScripts&&(l=s.g.location+"");var c,l,p=s.g.document;if(!l&&p&&(p.currentScript&&"SCRIPT"===p.currentScript.tagName.toUpperCase()&&(l=p.currentScript.src),!l)){var u=p.getElementsByTagName("script");if(u.length)for(var d=u.length-1;d>-1&&(!l||!/^http(s?):/.test(l));)l=u[d--].src}if(!l)throw Error("Automatic publicPath is not supported in this browser");s.p=l=l.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r={837:0},s.f.j=(e,t)=>{var i=s.o(r,e)?r[e]:void 0;if(0!==i)if(i)t.push(i[2]);else{var o=new Promise((t,o)=>i=r[e]=[t,o]);t.push(i[2]=o);var n=s.p+s.u(e),a=Error();s.l(n,t=>{if(s.o(r,e)&&(0!==(i=r[e])&&(r[e]=void 0),i)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;a.message="Loading chunk "+e+` failed.
2
+ (`+o+": "+n+")",a.name="ChunkLoadError",a.type=o,a.request=n,i[1](a)}},"chunk-"+e,e)}},i=(e,t)=>{var i,o,[n,a,c]=t,l=0;if(n.some(e=>0!==r[e])){for(i in a)s.o(a,i)&&(s.m[i]=a[i]);c&&c(s)}for(e&&e(t);l<n.length;l++)o=n[l],s.o(r,o)&&r[o]&&r[o][0](),r[o]=0},(o=this.webpackChunk_tsparticles_plugin_canvas_mask=this.webpackChunk_tsparticles_plugin_canvas_mask||[]).forEach(i.bind(null,0)),o.push=i.bind(null,o.push.bind(o));var f={};async function b(e){e.checkVersion("4.0.0-beta.0"),await e.register(async e=>{let{CanvasMaskPlugin:t}=await s.e(597).then(s.bind(s,597));e.addPlugin(new t)})}return s.r(f),s.d(f,{loadCanvasMaskPlugin:()=>b}),f})());
@@ -1,8 +1,7 @@
1
1
  import type { CanvasMaskOptions, ICanvasMaskOptions } from "./types.js";
2
2
  import { type Container, type IContainerPlugin, type IPlugin, type RecursivePartial } from "@tsparticles/engine";
3
3
  export declare class CanvasMaskPlugin implements IPlugin {
4
- readonly id: string;
5
- constructor();
4
+ readonly id = "canvas-mask";
6
5
  getPlugin(container: Container): Promise<IContainerPlugin>;
7
6
  loadOptions(_container: Container, options: CanvasMaskOptions, source?: RecursivePartial<ICanvasMaskOptions>): void;
8
7
  needsPlugin(options?: RecursivePartial<ICanvasMaskOptions>): boolean;
@@ -3,9 +3,9 @@ import type { IFontTextMask } from "../Interfaces/IFontTextMask.js";
3
3
  export declare class FontTextMask implements IFontTextMask, IOptionLoader<IFontTextMask> {
4
4
  family: string;
5
5
  size: string | number;
6
- style?: string;
7
- variant?: string;
8
- weight?: string | number;
6
+ style: string;
7
+ variant: string;
8
+ weight: string;
9
9
  constructor();
10
10
  load(data?: RecursivePartial<IFontTextMask>): void;
11
11
  }
@@ -4,6 +4,7 @@ import type { ITextMask } from "../Interfaces/ITextMask.js";
4
4
  import { TextMaskLine } from "./TextMaskLine.js";
5
5
  export declare class TextMask implements ITextMask, IOptionLoader<ITextMask> {
6
6
  color: string;
7
+ fill: boolean;
7
8
  font: FontTextMask;
8
9
  lines: TextMaskLine;
9
10
  text: string;
@@ -1,7 +1,2 @@
1
- export interface IFontTextMask {
2
- family: string;
3
- size: number | string;
4
- style?: string;
5
- variant?: string;
6
- weight?: number | string;
7
- }
1
+ import type { ITextDataFontOptions } from "@tsparticles/canvas-utils";
2
+ export type IFontTextMask = ITextDataFontOptions;