@tsparticles/shape-squircle 4.0.0-alpha.26 → 4.0.0-alpha.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/328.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";(this.webpackChunk_tsparticles_shape_squircle=this.webpackChunk_tsparticles_shape_squircle||[]).push([[328],{328(e,t,s){let a;s.d(t,{SquircleDrawer:()=>n});var l=s(303);function i(e){return e<l.none?-l.identity:l.identity}class n{draw(e){!function(e){let{context:t,radius:s}=e,n=a??=function(){let e=new Path2D,t=l.doublePI/48;for(let s=0;s<=48;s++){let a=s*t,n=Math.cos(a),r=Math.sin(a),o=i(n)*Math.pow(Math.abs(n),l.double/5),c=i(r)*Math.pow(Math.abs(r),l.double/5);s?e.lineTo(o,c):e.moveTo(o,c)}return e.closePath(),e}();t.save(),t.scale(s,s),t.fill(n),t.restore()}(e)}}}}]);
1
+ "use strict";(this.webpackChunk_tsparticles_shape_squircle=this.webpackChunk_tsparticles_shape_squircle||[]).push([[328],{328(e,t,s){s.d(t,{SquircleDrawer:()=>n});var a=s(303);function i(e){return e<a.none?-a.identity:a.identity}class n{draw(e){!function(e){let{context:t,particle:s,radius:n}=e;if(void 0===s.squircleExponent||void 0===s.squircleSteps)return;let l=s.squircleSteps,r=a.doublePI/l,c=a.double/s.squircleExponent;t.save(),t.scale(n,n),t.beginPath();for(let e=0;e<=l;e++){let s=e*r,a=Math.cos(s),n=Math.sin(s),l=i(a)*Math.pow(Math.abs(a),c),u=i(n)*Math.pow(Math.abs(n),c);e?t.lineTo(l,u):t.moveTo(l,u)}t.closePath(),t.restore()}(e)}particleInit(e,t){let s=t.shapeData;t.squircleExponent=(0,a.getRangeValue)(s?.exponent??4),t.squircleSteps=(0,a.getRangeValue)(s?.steps??64)}}}}]);
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,12 @@
1
- import { drawSquircle } from "./Utils.js";
1
+ import { getRangeValue } from "@tsparticles/engine";
2
+ import { defaultExponent, defaultSteps, drawSquircle } from "./Utils.js";
2
3
  export class SquircleDrawer {
3
4
  draw(data) {
4
5
  drawSquircle(data);
5
6
  }
7
+ particleInit(_container, particle) {
8
+ const shapeData = particle.shapeData;
9
+ particle.squircleExponent = getRangeValue(shapeData?.exponent ?? defaultExponent);
10
+ particle.squircleSteps = getRangeValue(shapeData?.steps ?? defaultSteps);
11
+ }
6
12
  }
@@ -0,0 +1 @@
1
+ export {};
package/browser/Utils.js CHANGED
@@ -1,31 +1,26 @@
1
1
  import { double, doublePI, identity, none } from "@tsparticles/engine";
2
- const EXPONENT = 5, STEPS = 48;
3
- let cachedPath;
2
+ export const defaultExponent = 4, defaultSteps = 64;
4
3
  function sign(v) {
5
4
  return v < none ? -identity : identity;
6
5
  }
7
- function createPath() {
8
- const path = new Path2D(), step = doublePI / STEPS;
9
- for (let i = 0; i <= STEPS; i++) {
10
- const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), double / EXPONENT), y = sign(sin) * Math.pow(Math.abs(sin), double / EXPONENT);
6
+ export function drawSquircle(data) {
7
+ const { context, particle, radius } = data;
8
+ if (particle.squircleExponent === undefined || particle.squircleSteps === undefined) {
9
+ return;
10
+ }
11
+ const steps = particle.squircleSteps, step = doublePI / steps, exponent = double / particle.squircleExponent;
12
+ context.save();
13
+ context.scale(radius, radius);
14
+ context.beginPath();
15
+ for (let i = 0; i <= steps; i++) {
16
+ const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), exponent), y = sign(sin) * Math.pow(Math.abs(sin), exponent);
11
17
  if (i) {
12
- path.lineTo(x, y);
18
+ context.lineTo(x, y);
13
19
  }
14
20
  else {
15
- path.moveTo(x, y);
21
+ context.moveTo(x, y);
16
22
  }
17
23
  }
18
- path.closePath();
19
- return path;
20
- }
21
- function getPath() {
22
- cachedPath ??= createPath();
23
- return cachedPath;
24
- }
25
- export function drawSquircle(data) {
26
- const { context, radius } = data, path = getPath();
27
- context.save();
28
- context.scale(radius, radius);
29
- context.fill(path);
24
+ context.closePath();
30
25
  context.restore();
31
26
  }
package/browser/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export async function loadSquircleShape(engine) {
2
- engine.checkVersion("4.0.0-alpha.26");
2
+ engine.checkVersion("4.0.0-alpha.28");
3
3
  await engine.register(e => {
4
4
  e.addShape(["squircle"], async () => {
5
5
  const { SquircleDrawer } = await import("./SquircleDrawer.js");
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,12 @@
1
- import { drawSquircle } from "./Utils.js";
1
+ import { getRangeValue } from "@tsparticles/engine";
2
+ import { defaultExponent, defaultSteps, drawSquircle } from "./Utils.js";
2
3
  export class SquircleDrawer {
3
4
  draw(data) {
4
5
  drawSquircle(data);
5
6
  }
7
+ particleInit(_container, particle) {
8
+ const shapeData = particle.shapeData;
9
+ particle.squircleExponent = getRangeValue(shapeData?.exponent ?? defaultExponent);
10
+ particle.squircleSteps = getRangeValue(shapeData?.steps ?? defaultSteps);
11
+ }
6
12
  }
@@ -0,0 +1 @@
1
+ export {};
package/cjs/Utils.js CHANGED
@@ -1,31 +1,26 @@
1
1
  import { double, doublePI, identity, none } from "@tsparticles/engine";
2
- const EXPONENT = 5, STEPS = 48;
3
- let cachedPath;
2
+ export const defaultExponent = 4, defaultSteps = 64;
4
3
  function sign(v) {
5
4
  return v < none ? -identity : identity;
6
5
  }
7
- function createPath() {
8
- const path = new Path2D(), step = doublePI / STEPS;
9
- for (let i = 0; i <= STEPS; i++) {
10
- const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), double / EXPONENT), y = sign(sin) * Math.pow(Math.abs(sin), double / EXPONENT);
6
+ export function drawSquircle(data) {
7
+ const { context, particle, radius } = data;
8
+ if (particle.squircleExponent === undefined || particle.squircleSteps === undefined) {
9
+ return;
10
+ }
11
+ const steps = particle.squircleSteps, step = doublePI / steps, exponent = double / particle.squircleExponent;
12
+ context.save();
13
+ context.scale(radius, radius);
14
+ context.beginPath();
15
+ for (let i = 0; i <= steps; i++) {
16
+ const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), exponent), y = sign(sin) * Math.pow(Math.abs(sin), exponent);
11
17
  if (i) {
12
- path.lineTo(x, y);
18
+ context.lineTo(x, y);
13
19
  }
14
20
  else {
15
- path.moveTo(x, y);
21
+ context.moveTo(x, y);
16
22
  }
17
23
  }
18
- path.closePath();
19
- return path;
20
- }
21
- function getPath() {
22
- cachedPath ??= createPath();
23
- return cachedPath;
24
- }
25
- export function drawSquircle(data) {
26
- const { context, radius } = data, path = getPath();
27
- context.save();
28
- context.scale(radius, radius);
29
- context.fill(path);
24
+ context.closePath();
30
25
  context.restore();
31
26
  }
package/cjs/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export async function loadSquircleShape(engine) {
2
- engine.checkVersion("4.0.0-alpha.26");
2
+ engine.checkVersion("4.0.0-alpha.28");
3
3
  await engine.register(e => {
4
4
  e.addShape(["squircle"], async () => {
5
5
  const { SquircleDrawer } = await import("./SquircleDrawer.js");
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v4.0.0-alpha.26
7
+ * v4.0.0-alpha.28
8
8
  */
9
9
  "use strict";
10
10
  /*
@@ -23,7 +23,7 @@
23
23
  \****************************************/
24
24
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
25
25
 
26
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SquircleDrawer: () => (/* binding */ SquircleDrawer)\n/* harmony export */ });\n/* harmony import */ var _Utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Utils.js */ \"./dist/browser/Utils.js\");\n\nclass SquircleDrawer {\n draw(data) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_0__.drawSquircle)(data);\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/shape-squircle/./dist/browser/SquircleDrawer.js?\n}");
26
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SquircleDrawer: () => (/* binding */ SquircleDrawer)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n/* harmony import */ var _Utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Utils.js */ \"./dist/browser/Utils.js\");\n\n\nclass SquircleDrawer {\n draw(data) {\n (0,_Utils_js__WEBPACK_IMPORTED_MODULE_1__.drawSquircle)(data);\n }\n particleInit(_container, particle) {\n const shapeData = particle.shapeData;\n particle.squircleExponent = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(shapeData?.exponent ?? _Utils_js__WEBPACK_IMPORTED_MODULE_1__.defaultExponent);\n particle.squircleSteps = (0,_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.getRangeValue)(shapeData?.steps ?? _Utils_js__WEBPACK_IMPORTED_MODULE_1__.defaultSteps);\n }\n}\n\n\n//# sourceURL=webpack://@tsparticles/shape-squircle/./dist/browser/SquircleDrawer.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 */ drawSquircle: () => (/* binding */ drawSquircle)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nconst EXPONENT = 5, STEPS = 48;\nlet cachedPath;\nfunction sign(v) {\n return v < _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.none ? -_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.identity : _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.identity;\n}\nfunction createPath() {\n const path = new Path2D(), step = _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.doublePI / STEPS;\n for(let i = 0; i <= STEPS; i++){\n const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.double / EXPONENT), y = sign(sin) * Math.pow(Math.abs(sin), _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.double / EXPONENT);\n if (i) {\n path.lineTo(x, y);\n } else {\n path.moveTo(x, y);\n }\n }\n path.closePath();\n return path;\n}\nfunction getPath() {\n cachedPath ??= createPath();\n return cachedPath;\n}\nfunction drawSquircle(data) {\n const { context, radius } = data, path = getPath();\n context.save();\n context.scale(radius, radius);\n context.fill(path);\n context.restore();\n}\n\n\n//# sourceURL=webpack://@tsparticles/shape-squircle/./dist/browser/Utils.js?\n}");
36
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ defaultExponent: () => (/* binding */ defaultExponent),\n/* harmony export */ defaultSteps: () => (/* binding */ defaultSteps),\n/* harmony export */ drawSquircle: () => (/* binding */ drawSquircle)\n/* harmony export */ });\n/* harmony import */ var _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @tsparticles/engine */ \"@tsparticles/engine\");\n\nconst defaultExponent = 4, defaultSteps = 64;\nfunction sign(v) {\n return v < _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.none ? -_tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.identity : _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.identity;\n}\nfunction drawSquircle(data) {\n const { context, particle, radius } = data;\n if (particle.squircleExponent === undefined || particle.squircleSteps === undefined) {\n return;\n }\n const steps = particle.squircleSteps, step = _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.doublePI / steps, exponent = _tsparticles_engine__WEBPACK_IMPORTED_MODULE_0__.double / particle.squircleExponent;\n context.save();\n context.scale(radius, radius);\n context.beginPath();\n for(let i = 0; i <= steps; i++){\n const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), exponent), y = sign(sin) * Math.pow(Math.abs(sin), exponent);\n if (i) {\n context.lineTo(x, y);\n } else {\n context.moveTo(x, y);\n }\n }\n context.closePath();\n context.restore();\n}\n\n\n//# sourceURL=webpack://@tsparticles/shape-squircle/./dist/browser/Utils.js?\n}");
37
37
 
38
38
  /***/ }
39
39
 
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,12 @@
1
- import { drawSquircle } from "./Utils.js";
1
+ import { getRangeValue } from "@tsparticles/engine";
2
+ import { defaultExponent, defaultSteps, drawSquircle } from "./Utils.js";
2
3
  export class SquircleDrawer {
3
4
  draw(data) {
4
5
  drawSquircle(data);
5
6
  }
7
+ particleInit(_container, particle) {
8
+ const shapeData = particle.shapeData;
9
+ particle.squircleExponent = getRangeValue(shapeData?.exponent ?? defaultExponent);
10
+ particle.squircleSteps = getRangeValue(shapeData?.steps ?? defaultSteps);
11
+ }
6
12
  }
@@ -0,0 +1 @@
1
+ export {};
package/esm/Utils.js CHANGED
@@ -1,31 +1,26 @@
1
1
  import { double, doublePI, identity, none } from "@tsparticles/engine";
2
- const EXPONENT = 5, STEPS = 48;
3
- let cachedPath;
2
+ export const defaultExponent = 4, defaultSteps = 64;
4
3
  function sign(v) {
5
4
  return v < none ? -identity : identity;
6
5
  }
7
- function createPath() {
8
- const path = new Path2D(), step = doublePI / STEPS;
9
- for (let i = 0; i <= STEPS; i++) {
10
- const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), double / EXPONENT), y = sign(sin) * Math.pow(Math.abs(sin), double / EXPONENT);
6
+ export function drawSquircle(data) {
7
+ const { context, particle, radius } = data;
8
+ if (particle.squircleExponent === undefined || particle.squircleSteps === undefined) {
9
+ return;
10
+ }
11
+ const steps = particle.squircleSteps, step = doublePI / steps, exponent = double / particle.squircleExponent;
12
+ context.save();
13
+ context.scale(radius, radius);
14
+ context.beginPath();
15
+ for (let i = 0; i <= steps; i++) {
16
+ const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), exponent), y = sign(sin) * Math.pow(Math.abs(sin), exponent);
11
17
  if (i) {
12
- path.lineTo(x, y);
18
+ context.lineTo(x, y);
13
19
  }
14
20
  else {
15
- path.moveTo(x, y);
21
+ context.moveTo(x, y);
16
22
  }
17
23
  }
18
- path.closePath();
19
- return path;
20
- }
21
- function getPath() {
22
- cachedPath ??= createPath();
23
- return cachedPath;
24
- }
25
- export function drawSquircle(data) {
26
- const { context, radius } = data, path = getPath();
27
- context.save();
28
- context.scale(radius, radius);
29
- context.fill(path);
24
+ context.closePath();
30
25
  context.restore();
31
26
  }
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export async function loadSquircleShape(engine) {
2
- engine.checkVersion("4.0.0-alpha.26");
2
+ engine.checkVersion("4.0.0-alpha.28");
3
3
  await engine.register(e => {
4
4
  e.addShape(["squircle"], async () => {
5
5
  const { SquircleDrawer } = await import("./SquircleDrawer.js");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tsparticles/shape-squircle",
3
- "version": "4.0.0-alpha.26",
3
+ "version": "4.0.0-alpha.28",
4
4
  "description": "tsParticles squircle shape",
5
5
  "homepage": "https://particles.js.org",
6
6
  "repository": {
@@ -100,7 +100,7 @@
100
100
  "./package.json": "./package.json"
101
101
  },
102
102
  "dependencies": {
103
- "@tsparticles/engine": "4.0.0-alpha.26"
103
+ "@tsparticles/engine": "4.0.0-alpha.28"
104
104
  },
105
105
  "publishConfig": {
106
106
  "access": "public"
package/report.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8"/>
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
6
- <title>@tsparticles/shape-squircle [9 Mar 2026 at 18:11]</title>
6
+ <title>@tsparticles/shape-squircle [15 Mar 2026 at 13:48]</title>
7
7
  <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
8
8
 
9
9
  <script>
@@ -4,7 +4,7 @@
4
4
  * Demo / Generator : https://particles.js.org/
5
5
  * GitHub : https://www.github.com/matteobruni/tsparticles
6
6
  * How to use? : Check the GitHub README
7
- * v4.0.0-alpha.26
7
+ * v4.0.0-alpha.28
8
8
  */
9
9
  /*
10
10
  * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
@@ -44,7 +44,7 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__tsparticles_engine__;
44
44
  \*******************************/
45
45
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
46
46
 
47
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadSquircleShape: () => (/* binding */ loadSquircleShape)\n/* harmony export */ });\nasync function loadSquircleShape(engine) {\n engine.checkVersion(\"4.0.0-alpha.26\");\n await engine.register((e)=>{\n e.addShape([\n \"squircle\"\n ], async ()=>{\n const { SquircleDrawer } = await __webpack_require__.e(/*! import() */ \"dist_browser_SquircleDrawer_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./SquircleDrawer.js */ \"./dist/browser/SquircleDrawer.js\"));\n return new SquircleDrawer();\n });\n });\n}\n\n\n//# sourceURL=webpack://@tsparticles/shape-squircle/./dist/browser/index.js?\n}");
47
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadSquircleShape: () => (/* binding */ loadSquircleShape)\n/* harmony export */ });\nasync function loadSquircleShape(engine) {\n engine.checkVersion(\"4.0.0-alpha.28\");\n await engine.register((e)=>{\n e.addShape([\n \"squircle\"\n ], async ()=>{\n const { SquircleDrawer } = await __webpack_require__.e(/*! import() */ \"dist_browser_SquircleDrawer_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./SquircleDrawer.js */ \"./dist/browser/SquircleDrawer.js\"));\n return new SquircleDrawer();\n });\n });\n}\n\n\n//# sourceURL=webpack://@tsparticles/shape-squircle/./dist/browser/index.js?\n}");
48
48
 
49
49
  /***/ }
50
50
 
@@ -1,2 +1,2 @@
1
1
  !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t(require("@tsparticles/engine"));else if("function"==typeof define&&define.amd)define(["@tsparticles/engine"],t);else{var r="object"==typeof exports?t(require("@tsparticles/engine")):t(e.window);for(var o in r)("object"==typeof exports?exports:e)[o]=r[o]}}(this,e=>(()=>{"use strict";var t,r,o,i={303(t){t.exports=e}},n={};function a(e){var t=n[e];if(void 0!==t)return t.exports;var r=n[e]={exports:{}};return i[e](r,r.exports,a),r.exports}a.m=i,a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce((t,r)=>(a.f[r](e,t),t),[])),a.u=e=>""+e+".min.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s={},a.l=(e,t,r,o)=>{if(s[e])return void s[e].push(t);if(void 0!==r)for(var i,n,c=document.getElementsByTagName("script"),p=0;p<c.length;p++){var l=c[p];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")=="@tsparticles/shape-squircle:"+r){i=l;break}}i||(n=!0,(i=document.createElement("script")).charset="utf-8",a.nc&&i.setAttribute("nonce",a.nc),i.setAttribute("data-webpack","@tsparticles/shape-squircle:"+r),i.src=e),s[e]=[t];var u=(t,r)=>{i.onerror=i.onload=null,clearTimeout(d);var o=s[e];if(delete s[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(e=>e(r)),t)return t(r)},d=setTimeout(u.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=u.bind(null,i.onerror),i.onload=u.bind(null,i.onload),n&&document.head.appendChild(i)},a.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.g.importScripts&&(c=a.g.location+"");var s,c,p=a.g.document;if(!c&&p&&(p.currentScript&&"SCRIPT"===p.currentScript.tagName.toUpperCase()&&(c=p.currentScript.src),!c)){var l=p.getElementsByTagName("script");if(l.length)for(var u=l.length-1;u>-1&&(!c||!/^http(s?):/.test(c));)c=l[u--].src}if(!c)throw Error("Automatic publicPath is not supported in this browser");a.p=c=c.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),t={486:0},a.f.j=(e,r)=>{var o=a.o(t,e)?t[e]:void 0;if(0!==o)if(o)r.push(o[2]);else{var i=new Promise((r,i)=>o=t[e]=[r,i]);r.push(o[2]=i);var n=a.p+a.u(e),s=Error();a.l(n,r=>{if(a.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var i=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;s.message="Loading chunk "+e+` failed.
2
- (`+i+": "+n+")",s.name="ChunkLoadError",s.type=i,s.request=n,o[1](s)}},"chunk-"+e,e)}},r=(e,r)=>{var o,i,[n,s,c]=r,p=0;if(n.some(e=>0!==t[e])){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);c&&c(a)}for(e&&e(r);p<n.length;p++)i=n[p],a.o(t,i)&&t[i]&&t[i][0](),t[i]=0},(o=this.webpackChunk_tsparticles_shape_squircle=this.webpackChunk_tsparticles_shape_squircle||[]).forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o));var d={};async function f(e){e.checkVersion("4.0.0-alpha.26"),await e.register(e=>{e.addShape(["squircle"],async()=>{let{SquircleDrawer:e}=await a.e(328).then(a.bind(a,328));return new e})})}return a.r(d),a.d(d,{loadSquircleShape:()=>f}),d})());
2
+ (`+i+": "+n+")",s.name="ChunkLoadError",s.type=i,s.request=n,o[1](s)}},"chunk-"+e,e)}},r=(e,r)=>{var o,i,[n,s,c]=r,p=0;if(n.some(e=>0!==t[e])){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);c&&c(a)}for(e&&e(r);p<n.length;p++)i=n[p],a.o(t,i)&&t[i]&&t[i][0](),t[i]=0},(o=this.webpackChunk_tsparticles_shape_squircle=this.webpackChunk_tsparticles_shape_squircle||[]).forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o));var d={};async function f(e){e.checkVersion("4.0.0-alpha.28"),await e.register(e=>{e.addShape(["squircle"],async()=>{let{SquircleDrawer:e}=await a.e(328).then(a.bind(a,328));return new e})})}return a.r(d),a.d(d,{loadSquircleShape:()=>f}),d})());
@@ -0,0 +1,5 @@
1
+ import type { IShapeValues, RangeValue } from "@tsparticles/engine";
2
+ export interface ISquircleData extends IShapeValues {
3
+ exponent?: RangeValue;
4
+ steps?: RangeValue;
5
+ }
@@ -1,4 +1,6 @@
1
- import { type IShapeDrawData, type IShapeDrawer } from "@tsparticles/engine";
2
- export declare class SquircleDrawer implements IShapeDrawer {
1
+ import { type Container, type IShapeDrawData, type IShapeDrawer } from "@tsparticles/engine";
2
+ import type { SquircleParticle } from "./SquircleParticle.js";
3
+ export declare class SquircleDrawer implements IShapeDrawer<SquircleParticle> {
3
4
  draw(data: IShapeDrawData): void;
5
+ particleInit(_container: Container, particle: SquircleParticle): void;
4
6
  }
@@ -0,0 +1,5 @@
1
+ import type { Particle } from "@tsparticles/engine";
2
+ export type SquircleParticle = Particle & {
3
+ squircleExponent?: number;
4
+ squircleSteps?: number;
5
+ };
package/types/Utils.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  import { type IShapeDrawData } from "@tsparticles/engine";
2
- export declare function drawSquircle(data: IShapeDrawData): void;
2
+ import type { SquircleParticle } from "./SquircleParticle.js";
3
+ export declare const defaultExponent = 4, defaultSteps = 64;
4
+ export declare function drawSquircle(data: IShapeDrawData<SquircleParticle>): void;
@@ -0,0 +1,12 @@
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"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ });
@@ -4,17 +4,23 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "./Utils.js"], factory);
7
+ define(["require", "exports", "@tsparticles/engine", "./Utils.js"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.SquircleDrawer = void 0;
13
+ const engine_1 = require("@tsparticles/engine");
13
14
  const Utils_js_1 = require("./Utils.js");
14
15
  class SquircleDrawer {
15
16
  draw(data) {
16
17
  (0, Utils_js_1.drawSquircle)(data);
17
18
  }
19
+ particleInit(_container, particle) {
20
+ const shapeData = particle.shapeData;
21
+ particle.squircleExponent = (0, engine_1.getRangeValue)(shapeData?.exponent ?? Utils_js_1.defaultExponent);
22
+ particle.squircleSteps = (0, engine_1.getRangeValue)(shapeData?.steps ?? Utils_js_1.defaultSteps);
23
+ }
18
24
  }
19
25
  exports.SquircleDrawer = SquircleDrawer;
20
26
  });
@@ -0,0 +1,12 @@
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"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ });
package/umd/Utils.js CHANGED
@@ -9,36 +9,32 @@
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.defaultSteps = exports.defaultExponent = void 0;
12
13
  exports.drawSquircle = drawSquircle;
13
14
  const engine_1 = require("@tsparticles/engine");
14
- const EXPONENT = 5, STEPS = 48;
15
- let cachedPath;
15
+ exports.defaultExponent = 4, exports.defaultSteps = 64;
16
16
  function sign(v) {
17
17
  return v < engine_1.none ? -engine_1.identity : engine_1.identity;
18
18
  }
19
- function createPath() {
20
- const path = new Path2D(), step = engine_1.doublePI / STEPS;
21
- for (let i = 0; i <= STEPS; i++) {
22
- const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), engine_1.double / EXPONENT), y = sign(sin) * Math.pow(Math.abs(sin), engine_1.double / EXPONENT);
19
+ function drawSquircle(data) {
20
+ const { context, particle, radius } = data;
21
+ if (particle.squircleExponent === undefined || particle.squircleSteps === undefined) {
22
+ return;
23
+ }
24
+ const steps = particle.squircleSteps, step = engine_1.doublePI / steps, exponent = engine_1.double / particle.squircleExponent;
25
+ context.save();
26
+ context.scale(radius, radius);
27
+ context.beginPath();
28
+ for (let i = 0; i <= steps; i++) {
29
+ const t = i * step, cos = Math.cos(t), sin = Math.sin(t), x = sign(cos) * Math.pow(Math.abs(cos), exponent), y = sign(sin) * Math.pow(Math.abs(sin), exponent);
23
30
  if (i) {
24
- path.lineTo(x, y);
31
+ context.lineTo(x, y);
25
32
  }
26
33
  else {
27
- path.moveTo(x, y);
34
+ context.moveTo(x, y);
28
35
  }
29
36
  }
30
- path.closePath();
31
- return path;
32
- }
33
- function getPath() {
34
- cachedPath ??= createPath();
35
- return cachedPath;
36
- }
37
- function drawSquircle(data) {
38
- const { context, radius } = data, path = getPath();
39
- context.save();
40
- context.scale(radius, radius);
41
- context.fill(path);
37
+ context.closePath();
42
38
  context.restore();
43
39
  }
44
40
  });
package/umd/index.js CHANGED
@@ -45,7 +45,7 @@ var __importStar = (this && this.__importStar) || (function () {
45
45
  Object.defineProperty(exports, "__esModule", { value: true });
46
46
  exports.loadSquircleShape = loadSquircleShape;
47
47
  async function loadSquircleShape(engine) {
48
- engine.checkVersion("4.0.0-alpha.26");
48
+ engine.checkVersion("4.0.0-alpha.28");
49
49
  await engine.register(e => {
50
50
  e.addShape(["squircle"], async () => {
51
51
  const { SquircleDrawer } = await (__syncRequire ? Promise.resolve().then(() => __importStar(require("./SquircleDrawer.js"))) : new Promise((resolve_1, reject_1) => { require(["./SquircleDrawer.js"], resolve_1, reject_1); }).then(__importStar));