diff --git a/app/(pages)/(index-page)/_components/hero/heroInfo.tsx b/app/(pages)/(index-page)/_components/hero/heroInfo.tsx index 9ec6de0..0567bda 100644 --- a/app/(pages)/(index-page)/_components/hero/heroInfo.tsx +++ b/app/(pages)/(index-page)/_components/hero/heroInfo.tsx @@ -1,13 +1,16 @@ import React from 'react'; import Image from 'next/image'; import HeartButton from '../HeartButton/heartButton'; +import WordCycle from './wordCycle'; export default function HeroInfo() { return (

- create + + + for

diff --git a/app/(pages)/(index-page)/_components/hero/heroMainSection.module.scss b/app/(pages)/(index-page)/_components/hero/heroMainSection.module.scss new file mode 100644 index 0000000..6f1b2e8 --- /dev/null +++ b/app/(pages)/(index-page)/_components/hero/heroMainSection.module.scss @@ -0,0 +1,82 @@ +$wave-amplitude: -5%; +$wave-period: 5s; + +@keyframes wave-1-motion { + 0% { + transform: translateX(0); + } + 50% { + transform: translateX($wave-amplitude); + } + 100% { + transform: translateX(0); + } +} + +@keyframes wave-2-motion { + 0% { + transform: translateX(5%); + } + 50% { + transform: translateX(calc($wave-amplitude + 5%)); + } + 100% { + transform: translateX(5%); + } +} + +@keyframes wave-3-motion { + 0% { + transform: translateX(15%); + } + 50% { + transform: translateX(calc($wave-amplitude + 15%)); + } + 100% { + transform: translateX(15%); + } +} + +@keyframes wave-4-motion { + 0% { + transform: translateX(3%); + } + 50% { + transform: translateX(calc($wave-amplitude + 3%)); + } + 100% { + transform: translateX(3%); + } +} + +.dark_water_layer { + position: absolute; + right: -45%; + z-index: 118; + width: 100%; +} + +.light_water_layer { + position: absolute; + right: -0%; // to -5% + // top: -0.5px; + z-index: 120; + width: 66%; + animation: wave-1-motion $wave-period infinite ease-in-out; +} + +.dark_beach_layer { + position: absolute; + right: -2%; + z-index: 115; + width: 84%; + animation: wave-2-motion $wave-period infinite ease-in-out; +} + +.light_beach_layer { + position: relative; + right: -5%; + top: 0; + width: 120%; + animation: wave-4-motion $wave-period infinite ease-in-out; +} \ No newline at end of file diff --git a/app/(pages)/(index-page)/_components/hero/heroMainSection.tsx b/app/(pages)/(index-page)/_components/hero/heroMainSection.tsx index ad82c31..8fd933b 100644 --- a/app/(pages)/(index-page)/_components/hero/heroMainSection.tsx +++ b/app/(pages)/(index-page)/_components/hero/heroMainSection.tsx @@ -2,6 +2,12 @@ import React from 'react'; import HeroInfo from './heroInfo'; import HeroSun from './heroSun'; import Image from 'next/image'; +import styles from './heroMainSection.module.scss'; + +import DarkWaterLayer from '@public/Hero/dark_water_layer.svg'; +import LightWaterLayer from '@public/Hero/light_water_layer.svg'; +import LightBeachLayer from '@public/Hero/light_beach_layer.svg'; +import DarkBeachLayer from '@public/Hero/dark_beach_layer.svg'; export default function HeroSection() { return ( @@ -93,23 +99,32 @@ export default function HeroSection() { className="h-[107.5px] w-[176px] md:h-[180px] md:w-[288px] lg:h-[180px] lg:w-[288px] xl:h-[215px] xl:w-[352px]" />

-
- wave -
-
- wave +
+
+ dark-water-layer + light-water-layer + dark-beach-layer + light-beach-layer +
{ + const [wordIdx, setWordIdx] = useState(0); + const nodeRef = useRef(null); + + useEffect(() => { + const swapInterval = setInterval(() => { + setWordIdx((idx) => (idx + 1) % words.length); + }, 3000); + + return () => clearInterval(swapInterval); + }, []); + + return ( + + + + + {words[wordIdx]} + + + {' '} + + ); +}; + +export default WordCycle; diff --git a/package-lock.json b/package-lock.json index 5eb57ea..c1fa11a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "react-dom": "^18", "react-icons": "^5.3.0", "react-scroll-parallax": "^3.4.5", + "react-transition-group": "^4.4.5", "sass": "^1.81.0", "sharp": "^0.33.5" }, @@ -27,6 +28,7 @@ "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/react-transition-group": "^4.4.12", "@typescript-eslint/eslint-plugin": "^8.14.0", "@typescript-eslint/parser": "^8.14.0", "eslint": "^8.57.1", @@ -82,6 +84,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@emnapi/runtime": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", @@ -1108,6 +1122,16 @@ "@types/react": "*" } }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", @@ -2070,7 +2094,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, "node_modules/damerau-levenshtein": { @@ -2258,6 +2281,16 @@ "node": ">=6.0.0" } }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/dom5": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", @@ -5623,6 +5656,22 @@ "react-dom": "^16.8.0-0 || >=17.0.1 || ^18.0.0" } }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, "node_modules/react-transition-state": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/react-transition-state/-/react-transition-state-2.3.0.tgz", @@ -5788,6 +5837,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, "node_modules/regexp-tree": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", diff --git a/package.json b/package.json index c817daf..39efac9 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "react-dom": "^18", "react-icons": "^5.3.0", "react-scroll-parallax": "^3.4.5", + "react-transition-group": "^4.4.5", "sass": "^1.81.0", "sharp": "^0.33.5" }, @@ -28,6 +29,7 @@ "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", + "@types/react-transition-group": "^4.4.12", "@typescript-eslint/eslint-plugin": "^8.14.0", "@typescript-eslint/parser": "^8.14.0", "eslint": "^8.57.1", diff --git a/public/Hero/dark_beach_layer.svg b/public/Hero/dark_beach_layer.svg new file mode 100644 index 0000000..1437e46 --- /dev/null +++ b/public/Hero/dark_beach_layer.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/Hero/dark_water_layer.svg b/public/Hero/dark_water_layer.svg new file mode 100644 index 0000000..0c72d92 --- /dev/null +++ b/public/Hero/dark_water_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/Hero/heart.svg b/public/Hero/heart.svg deleted file mode 100644 index 0bab6ea..0000000 --- a/public/Hero/heart.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/public/Hero/light_beach_layer.svg b/public/Hero/light_beach_layer.svg new file mode 100644 index 0000000..765d20c --- /dev/null +++ b/public/Hero/light_beach_layer.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/Hero/light_water_layer.svg b/public/Hero/light_water_layer.svg new file mode 100644 index 0000000..06257e2 --- /dev/null +++ b/public/Hero/light_water_layer.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/public/index/wave/top-right.svg b/public/index/wave/top-right.svg index 5d2611d..a179a22 100644 --- a/public/index/wave/top-right.svg +++ b/public/index/wave/top-right.svg @@ -1,7 +1,7 @@ - +