diff --git a/app/Section/Characters.tsx b/app/Section/Characters.tsx index ec39e7c..457c2fc 100644 --- a/app/Section/Characters.tsx +++ b/app/Section/Characters.tsx @@ -1,8 +1,13 @@ +"use client"; + import Link from "next/link"; import { IconWithText } from "../components/IconWithText"; import { Section } from "../components/Section"; import { CharacterImage } from "../components/CharacterImage"; +import { useInView } from "motion/react" +import { useEffect, useRef } from "react"; + const links = [ { icon: "/icons/furaffinity.svg", @@ -19,6 +24,12 @@ const links = [ ]; export const Characters = () => { + + const imagesRedPandaRef = useRef(null) + const imagesRedPandaIsInView = useInView(imagesRedPandaRef, { once: true }) + const imagesProtogenRef = useRef(null) + const imagesProtogenIsInView = useInView(imagesProtogenRef, { once: true }) + return (
@@ -59,23 +70,21 @@ export const Characters = () => { />

Kentai

-

Red Panda

+

Red Panda

Male

-
+
-
-
@@ -90,19 +99,17 @@ export const Characters = () => { />

Protogen

-

Male

+

Male

-
+
-
-
diff --git a/app/Section/Intro.tsx b/app/Section/Intro.tsx index 721becb..3a744c6 100644 --- a/app/Section/Intro.tsx +++ b/app/Section/Intro.tsx @@ -1,20 +1,45 @@ +"use client"; + +import { useState, useEffect } from "react"; + export const Intro = () => { + const [isAnimated, setIsAnimated] = useState(false); + + useEffect(() => { + setIsAnimated(true); + }, []); + return (
-

+

Radiquum

-
+
-

+

Photographer

-

+

Developer

-

+

Self-Hosting admirer

diff --git a/app/components/CharacterImage.tsx b/app/components/CharacterImage.tsx index a4f124c..dd836d8 100644 --- a/app/components/CharacterImage.tsx +++ b/app/components/CharacterImage.tsx @@ -14,8 +14,8 @@ export const CharacterImage = ({ }: CharacterImageProps) => { return (
- -
+ +

{name}

diff --git a/package-lock.json b/package-lock.json index 3f412ac..d5dec41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "embla-carousel-react": "^8.6.0", + "motion": "^12.23.9", "next": "15.4.2", "react": "19.1.0", "react-dom": "19.1.0" @@ -3355,6 +3356,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/framer-motion": { + "version": "12.23.9", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.9.tgz", + "integrity": "sha512-TqEHXj8LWfQSKqfdr5Y4mYltYLw96deu6/K9kGDd+ysqRJPNwF9nb5mZcrLmybHbU7gcJ+HQar41U3UTGanbbQ==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.23.9", + "motion-utils": "^12.23.6", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4627,6 +4655,47 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/motion": { + "version": "12.23.9", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.9.tgz", + "integrity": "sha512-5PDgsbNtZ4cpfew3STYL0p06rIiy8vOveQuQBXUAa2+m1WMzjf65DXYn6eo88dM2s+XLxAQq3ZiOjcnKMACEtQ==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.23.9", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.23.9", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.9.tgz", + "integrity": "sha512-6Sv++iWS8XMFCgU1qwKj9l4xuC47Hp4+2jvPfyTXkqDg2tTzSgX6nWKD4kNFXk0k7llO59LZTPuJigza4A2K1A==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.23.6" + } + }, + "node_modules/motion-utils": { + "version": "12.23.6", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", + "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/package.json b/package.json index 4fa0c2a..6d8c79b 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "embla-carousel-react": "^8.6.0", + "motion": "^12.23.9", "next": "15.4.2", "react": "19.1.0", "react-dom": "19.1.0"