@tsparticles/plugin-canvas-mask 4.0.0-alpha.8 → 4.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/201.min.js +1 -0
- package/556.min.js +2 -0
- package/browser/CanvasMaskPlugin.js +1 -3
- package/browser/CanvasMaskPluginInstance.js +6 -5
- package/browser/Options/Classes/CanvasMask.js +9 -0
- package/browser/Options/Classes/CanvasMaskOverride.js +2 -0
- package/browser/Options/Classes/CanvasMaskPixels.js +3 -1
- package/browser/Options/Classes/FontTextMask.js +8 -0
- package/browser/Options/Classes/ImageMask.js +1 -0
- package/browser/Options/Classes/TextMask.js +9 -0
- package/browser/Options/Classes/TextMaskLine.js +2 -0
- package/browser/index.js +3 -3
- package/browser/utils.js +6 -89
- package/cjs/CanvasMaskPlugin.js +1 -3
- package/cjs/CanvasMaskPluginInstance.js +6 -5
- package/cjs/Options/Classes/CanvasMask.js +9 -0
- package/cjs/Options/Classes/CanvasMaskOverride.js +2 -0
- package/cjs/Options/Classes/CanvasMaskPixels.js +3 -1
- package/cjs/Options/Classes/FontTextMask.js +8 -0
- package/cjs/Options/Classes/ImageMask.js +1 -0
- package/cjs/Options/Classes/TextMask.js +9 -0
- package/cjs/Options/Classes/TextMaskLine.js +2 -0
- package/cjs/index.js +3 -3
- package/cjs/utils.js +6 -89
- package/dist_browser_CanvasMaskPluginInstance_js.js +3 -3
- package/dist_browser_CanvasMaskPlugin_js.js +9 -9
- package/esm/CanvasMaskPlugin.js +1 -3
- package/esm/CanvasMaskPluginInstance.js +6 -5
- package/esm/Options/Classes/CanvasMask.js +9 -0
- package/esm/Options/Classes/CanvasMaskOverride.js +2 -0
- package/esm/Options/Classes/CanvasMaskPixels.js +3 -1
- package/esm/Options/Classes/FontTextMask.js +8 -0
- package/esm/Options/Classes/ImageMask.js +1 -0
- package/esm/Options/Classes/TextMask.js +9 -0
- package/esm/Options/Classes/TextMaskLine.js +2 -0
- package/esm/index.js +3 -3
- package/esm/utils.js +6 -89
- package/package.json +3 -2
- package/report.html +84 -29
- package/tsparticles.plugin.canvas-mask.js +41 -19
- package/tsparticles.plugin.canvas-mask.min.js +2 -2
- package/types/CanvasMaskPlugin.d.ts +1 -2
- package/types/Options/Classes/FontTextMask.d.ts +3 -3
- package/types/Options/Classes/TextMask.d.ts +1 -0
- package/types/Options/Interfaces/IFontTextMask.d.ts +2 -7
- package/types/Options/Interfaces/ITextMask.d.ts +3 -3
- package/types/Options/Interfaces/ITextMaskLine.d.ts +2 -4
- package/types/utils.d.ts +2 -10
- package/umd/CanvasMaskPlugin.js +1 -3
- package/umd/CanvasMaskPluginInstance.js +8 -7
- package/umd/Options/Classes/CanvasMask.js +9 -0
- package/umd/Options/Classes/CanvasMaskOverride.js +2 -0
- package/umd/Options/Classes/CanvasMaskPixels.js +3 -1
- package/umd/Options/Classes/FontTextMask.js +8 -0
- package/umd/Options/Classes/ImageMask.js +1 -0
- package/umd/Options/Classes/TextMask.js +9 -0
- package/umd/Options/Classes/TextMaskLine.js +2 -0
- package/umd/index.js +3 -3
- package/umd/utils.js +5 -91
- package/722.min.js +0 -2
- package/722.min.js.LICENSE.txt +0 -1
- package/775.min.js +0 -2
- package/775.min.js.LICENSE.txt +0 -1
- 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-
|
|
7
|
+
* v4.0.0-beta.1
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
package/esm/CanvasMaskPlugin.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { CanvasMask } from "./Options/Classes/CanvasMask.js";
|
|
2
2
|
export class CanvasMaskPlugin {
|
|
3
|
-
|
|
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 {
|
|
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.render.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.render.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.render.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,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 (
|
|
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)) {
|
|
@@ -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) {
|
package/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export async function loadCanvasMaskPlugin(engine) {
|
|
2
|
-
engine.checkVersion("4.0.0-
|
|
3
|
-
await engine.register(async (e) => {
|
|
2
|
+
engine.checkVersion("4.0.0-beta.1");
|
|
3
|
+
await engine.pluginManager.register(async (e) => {
|
|
4
4
|
const { CanvasMaskPlugin } = await import("./CanvasMaskPlugin.js");
|
|
5
|
-
e.addPlugin(new CanvasMaskPlugin());
|
|
5
|
+
e.pluginManager.addPlugin(new CanvasMaskPlugin());
|
|
6
6
|
});
|
|
7
7
|
}
|
package/esm/utils.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
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.
|
|
32
|
-
|
|
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-
|
|
3
|
+
"version": "4.0.0-beta.1",
|
|
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/
|
|
89
|
+
"@tsparticles/canvas-utils": "4.0.0-beta.1",
|
|
90
|
+
"@tsparticles/engine": "4.0.0-beta.1"
|
|
90
91
|
},
|
|
91
92
|
"publishConfig": {
|
|
92
93
|
"access": "public"
|