diff --git a/chaosweb-v@2/package-lock.json b/chaosweb-v@2/package-lock.json index f055b59..1071951 100644 --- a/chaosweb-v@2/package-lock.json +++ b/chaosweb-v@2/package-lock.json @@ -8,6 +8,7 @@ "name": "chaosweb-v-2", "version": "0.0.0", "dependencies": { + "chaosweb-v-2": "file:", "fireworks-js": "^2.10.8", "framer-motion": "^11.11.10", "react": "^18.3.1", @@ -1762,6 +1763,10 @@ "node": ">=4" } }, + "node_modules/chaosweb-v-2": { + "resolved": "", + "link": true + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", diff --git a/chaosweb-v@2/package.json b/chaosweb-v@2/package.json index 755b8fd..83af5c2 100644 --- a/chaosweb-v@2/package.json +++ b/chaosweb-v@2/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "chaosweb-v-2": "file:", "fireworks-js": "^2.10.8", "framer-motion": "^11.11.10", "react": "^18.3.1", diff --git a/chaosweb-v@2/src/App.jsx b/chaosweb-v@2/src/App.jsx index ecb7012..8f124a0 100644 --- a/chaosweb-v@2/src/App.jsx +++ b/chaosweb-v@2/src/App.jsx @@ -1,4 +1,4 @@ -import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; + import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; import Home from "./pages/home"; import Contact from "./pages/contact"; import Timeline from "./pages/timeline"; @@ -15,7 +15,8 @@ import BarrelRoll from "./pages/BarrelRoll"; import RateUs from "./pages/RateUs"; import TestEffects from "./pages/TestEffects"; import Metadata from "./metadata"; - +import ChaoticTypingTest from "./pages/ChaoticTypingTest"; + function App() { const [trigger, setTrigger] = useState(false); @@ -48,6 +49,7 @@ function App() { } /> } /> } /> + } /> diff --git a/chaosweb-v@2/src/pages/ChaoticTypingTest.css b/chaosweb-v@2/src/pages/ChaoticTypingTest.css new file mode 100644 index 0000000..e60a047 --- /dev/null +++ b/chaosweb-v@2/src/pages/ChaoticTypingTest.css @@ -0,0 +1,178 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + body { + font-family: Arial, sans-serif; + overflow: hidden; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + color: #fff; + position: relative; + animation: flickerBackground 0.5s infinite alternate; + } + + #container { + margin-top: 20%; + text-align: center; + z-index: 10; + max-width: 700px; + padding: 20px; + border: 3px solid #888; + border-radius: 10px; + background: rgba(0, 0, 0, 0.8); + animation: flashBackground 0.11s infinite alternate; + } + + #scrambled-text { + font-size: 1.2em; + margin: 20px; + padding: 15px; + border-radius: 8px; + color: #f4f4f4; + min-height: 50px; + display: inline-block; + transition: all 0.3s ease; + } + + #typed-output { + font-size: 1.5em; + margin-top: 20px; + color: #ff6347; + background-color: #222; + padding: 10px; + border-radius: 4px; + border: 2px solid #555; + min-height: 50px; + white-space: pre-wrap; + animation: flashBackground 0.11s infinite alternate; + } + + .chaotic-element { + position: absolute; + border-radius: 50%; + opacity: 1; + animation: moveChaos 2s infinite ease-in-out alternate; + } + + .chaotic-element:nth-child(2n) { + animation-duration: 7s; + background-color: rgba(255, 0, 0, 0.6); + } + + .chaotic-element:nth-child(3n) { + animation-duration: 6s; + background-color: rgba(0, 255, 0, 0.6); + } + + .chaotic-element:nth-child(5n) { + animation-duration: 3s; + background-color: rgba(0, 0, 255, 0.6); + } + + .chaotic-element:nth-child(7n) { + animation-duration: 4s; + background-color: rgba(255, 0, 255, 0.6); + } + + .chaotic-element:nth-child(11n) { + animation-duration: 5s; + background-color: rgba(255, 255, 0, 0.6); + } + + .thunderbolt { + position: absolute; + width: 10px; + height: 300px; + background: linear-gradient(to bottom, #fff, #ff0); + opacity: 1; + animation: thunderboltAnimation 2s infinite; + transform-origin: top; + } + + @keyframes thunderboltAnimation { + 0% { + opacity: 0; + transform: translate(50%, -100%) scaleY(0.2); + } + 50% { + opacity: 1; + transform: translate(50%, 0) scaleY(1.5); + } + 100% { + opacity: 0; + transform: translate(50%, -100%) scaleY(0.2); + } + } + + @keyframes moveChaos { + 0% { + transform: translate(0, 0) scale(1); + } + 50% { + transform: translate(calc(100vw - 20px), calc(100vh - 20px)) scale(1.5) rotate(45deg); + } + 100% { + transform: translate(calc(-100vw + 20px), calc(-100vh + 20px)) scale(0.8) rotate(-45deg); + } + } + + @keyframes flickerBackground { + 0%, 100% { + background-color: #1029e5; + } + 20% { + background-color: #f0e405; + } + 40% { + background-color: #e91414; + } + 60% { + background-color: #0aebee; + } + 80% { + background-color: #8b3ded; + } + } + + .floating-title { + position: absolute; + font-size: 10em; + color: #90e4da; + animation: flickerText 0.6s infinite alternate; + } + + @keyframes flickerText { + 0%, 100% { + opacity: -10; + transform: scale(1); + } + 50% { + opacity: 0.3; + transform: scale(1.1); + } + } + + .random-effect { + position: absolute; + font-size: 1.5em; + animation: chaoticEffect 1.5s ease-in-out infinite; + } + + @keyframes chaoticEffect { + 0%, 100% { + transform: rotate(0deg); + opacity: 1; + } + 50% { + transform: rotate(180deg); + opacity: 0.5; + } + } + + + \ No newline at end of file diff --git a/chaosweb-v@2/src/pages/ChaoticTypingTest.jsx b/chaosweb-v@2/src/pages/ChaoticTypingTest.jsx new file mode 100644 index 0000000..a903332 --- /dev/null +++ b/chaosweb-v@2/src/pages/ChaoticTypingTest.jsx @@ -0,0 +1,93 @@ +import { useState, useEffect } from 'react'; +import './ChaoticTypingTest.css'; + +const ChaoticTypingTest = () => { + const paragraph = "This is your typing paragraph. Try to type it accurately despite the chaos!"; + const [typedText, setTypedText] = useState(''); + const [scrambledText, setScrambledText] = useState(paragraph); + + const scrambleParagraph = () => { + const scrambledParagraph = paragraph.split('').sort(() => Math.random() - 0.5).join(''); + setScrambledText(scrambledParagraph); + + const randomSize = Math.random() * (2 - 0.8) + 0.8; + const randomRotation = Math.random() * 360; + const randomX = Math.random() * 50; + const randomY = Math.random() * 50; + + const scrambledTextEl = document.getElementById('scrambled-text'); + scrambledTextEl.style.fontSize = `${randomSize}em`; + scrambledTextEl.style.transform = `rotate(${randomRotation}deg) translate(${randomX}%, ${randomY}%)`; + }; + + const randomLetterOrEmoji = () => { + const lettersAndEmojis = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz😊😂😎🎉✨💥🔥'; + return lettersAndEmojis[Math.floor(Math.random() * lettersAndEmojis.length)]; + }; + + const chaoticTyping = (event) => { + const typedChar = event.key; + setTypedText((prevText) => prevText + typedChar); + + for (let i = 0; i < 100; i++) { + const chaoticElement = document.createElement('div'); + chaoticElement.textContent = randomLetterOrEmoji(); + chaoticElement.classList.add('random-effect'); + chaoticElement.style.left = `${event.clientX + Math.random() * 300 - 50}px`; + chaoticElement.style.top = `${event.clientY + Math.random() * 300 - 50}px`; + document.body.appendChild(chaoticElement); + setTimeout(() => chaoticElement.remove(), 2000); + } + }; + + useEffect(() => { + const scrambleInterval = setInterval(() => { + scrambleParagraph(); + }, 3000); + + window.addEventListener('keydown', chaoticTyping); + window.addEventListener('click', chaoticTyping); + + const titles = document.querySelectorAll('.floating-title'); + titles.forEach(title => { + const randomX = Math.random() * 100; + const randomY = Math.random() * 100; + title.style.top = `${randomY}vh`; + title.style.left = `${randomX}vw`; + }); + + return () => { + clearInterval(scrambleInterval); + window.removeEventListener('keydown', chaoticTyping); + window.removeEventListener('click', chaoticTyping); + }; + }, []); + + return ( +
+
ChAOtiC TYpiNg UniVeRSe
+
Welcome to chaosWeb
+ +
+
{scrambledText}
+
{typedText}
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+
+
+ ); +}; + +export default ChaoticTypingTest; diff --git a/chaosweb-v@2/src/utils/pages.js b/chaosweb-v@2/src/utils/pages.js index 6e745ee..493b645 100644 --- a/chaosweb-v@2/src/utils/pages.js +++ b/chaosweb-v@2/src/utils/pages.js @@ -4,5 +4,6 @@ const appPages = [ "/review", "/timeline", "/hypnotic", + "/chaotictypingTest", ]; export default appPages;