react-particle-components
Version:
React components for adding beautiful tsParticles effects with minimal setup.
1 lines • 8.58 kB
Source Map (JSON)
{"version":3,"sources":["../index.js","../src/ParticleComponent.jsx","../options/getParticleOptions.js"],"sourcesContent":["import ParticleComponent from \"./src/ParticleComponent\";\n\nexport default ParticleComponent;","import React, { useCallback, useEffect, useState } from \"react\";\nimport Particles, { initParticlesEngine } from \"@tsparticles/react\";\nimport { loadSlim } from \"@tsparticles/slim\";\nimport { getParticleOptions } from \"../options/getParticleOptions\";\n\nconst ParticleComponent = (\n {\n id = \"neko-tsparticles\",\n type = \"circle\",\n speed = 2,\n value = 80,\n opacity = 0.5,\n distance = 150,\n area = 800,\n color = \"#ffffff\"\n }\n) => {\n if (!React || !useState || !useEffect) {\n console.error(\"React hooks are not available.\");\n return null;\n }\n\n if (!React | !React.createElement) {\n console.error(\"React is not properly initialized.\");\n return null;\n }\n\n if (!Particles || !initParticlesEngine) {\n console.error(\"tsParticles is not properly initialized. Ensure @tsparticles/react is installed and imported.\");\n return null;\n }\n\n if (typeof speed !== \"number\" || speed <= 0) {\n console.error(\"Invalid speed value. It must be a positive number.\");\n return null;\n }\n\n if (typeof value !== \"number\" || value <= 0) {\n console.error(\"Invalid value for particle count. It must be a positive number.\");\n return null;\n }\n\n const [init, setInit] = useState(false);\n\n useEffect(() => {\n initParticlesEngine(async (engine) => {\n await loadSlim(engine);\n }).then(() => {\n setInit(true);\n });\n }, []);\n\n const particlesLoaded = useCallback((container) => {\n console.log(\"Particles Loaded:\", container);\n }, []);\n\n return (\n <>\n {init && (\n <Particles\n id={id}\n particlesLoaded={particlesLoaded}\n options={{\n fpsLimit: 60,\n interactivity: {\n events: {\n onClick: {\n enable: true,\n mode: \"push\",\n },\n onHover: {\n enable: true,\n mode: \"repulse\",\n },\n resize: true,\n },\n modes: {\n push: {\n quantity: 4,\n },\n repulse: {\n distance: 200,\n duration: 0.2,\n },\n },\n },\n ...getParticleOptions(type, speed, value, opacity, distance, area, color),\n detectRetina: true,\n }}\n />\n )}\n </>\n );\n};\n\nexport default ParticleComponent;","export const getParticleOptions = (type, speed, value, opacity, distance, area, color) => {\n switch (type) {\n case \"bubbles\":\n return {\n particles: {\n number: {\n value: value,\n density: {\n enable: true,\n area: area,\n },\n },\n opacity: {\n value: opacity,\n },\n size: {\n value: { min: 1, max: 5 },\n },\n color: {\n value: color,\n },\n shape: {\n type: \"circle\",\n },\n move: {\n enable: true,\n speed: speed,\n direction: \"none\",\n random: true,\n straight: false,\n outModes: {\n default: \"out\",\n },\n },\n },\n }\n case \"circle\":\n default:\n return {\n particles: {\n number: {\n value: value,\n density: {\n enable: true,\n area: area,\n },\n },\n shape: {\n type: \"circle\",\n },\n opacity: {\n value: opacity,\n },\n size: {\n value: { min: 1, max: 5 },\n },\n move: {\n enable: true,\n speed: speed,\n direction: \"none\",\n random: false,\n straight: false,\n outModes: {\n default: \"bounce\",\n },\n },\n links: {\n enable: true,\n distance: distance,\n color: color,\n opacity: opacity,\n width: 1,\n },\n },\n };\n }\n};"],"mappings":"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","names":["import_react","React","Particles"]}