diff --git a/package-lock.json b/package-lock.json index c033ee8..adfc883 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "lotengdev-web", "version": "0.0.1", "dependencies": { + "framer-motion": "^11.11.10", "prop-types": "^15.8.1", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -2477,6 +2478,31 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "11.11.10", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.10.tgz", + "integrity": "sha512-061Bt1jL/vIm+diYIiA4dP/Yld7vD47ROextS7ESBW5hr4wQFhxB5D5T5zAc3c/5me3cOa+iO5LqhA38WDln/A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", diff --git a/package.json b/package.json index ace5251..32a7994 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "preview": "vite preview" }, "dependencies": { + "framer-motion": "^11.11.10", "prop-types": "^15.8.1", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/src/pages/about/index.jsx b/src/pages/about/index.jsx index a5c22af..c3ef5be 100644 --- a/src/pages/about/index.jsx +++ b/src/pages/about/index.jsx @@ -1,4 +1,5 @@ import { Link } from "react-router-dom"; +import {Motion} from "../framer-motion";// For Motion in Text export function AboutPage() { return ( @@ -11,11 +12,31 @@ export function AboutPage() { > About -
+ Tentang Komunitas Lombok Tengah Developer (Loteng Dev) -
+
-
+ Lorem ipsum dolor sit amet consectetur adipisicing elit. Ex molestiae quos veritatis nemo sit praesentium aperiam quasi voluptatum quisquam unde delectus mollitia eveniet rem quia, saepe aliquam, consequuntur similique? Vitae.

@@ -25,7 +46,7 @@ export function AboutPage() {
Lorem ipsum, dolor sit amet consectetur adipisicing elit. Eius temporibus vitae at. Consequatur reiciendis sit quidem, impedit, facere aperiam nostrum delectus dolore dolor quibusdam harum animi amet repellendus, sunt voluptatibus. -
+ diff --git a/src/pages/event/index.jsx b/src/pages/event/index.jsx index bbbda85..1b2ae25 100644 --- a/src/pages/event/index.jsx +++ b/src/pages/event/index.jsx @@ -1,132 +1,271 @@ import PlayIcon from '@/assets/icons/play.svg' +import {Motion} from "../framer-motion";// For Motion in Text export function EventPage() { return (
-

+ Semua Acara -

-

+ + yang telah terlaksana -

+
-
images
 play
-
-
+ Lotengdev Online Meetup #2: Prepare for Hacktoberfest -
+
-
images
 play
-
-
+ Lotengdev Online Meetup #2: Prepare for Hacktoberfest -
+
-
images
 play
-
-
+ Lotengdev Online Meetup #2: Prepare for Hacktoberfest -
+
-
images
 play
-
-
+ Lotengdev Online Meetup #2: Prepare for Hacktoberfest -
+
-
images
 play
-
-
+ Lotengdev Online Meetup #2: Prepare for Hacktoberfest -
+
-
images
 play
-
-
+ Lotengdev Online Meetup #2: Prepare for Hacktoberfest -
+
-
+ Next meetup kita mau bahas
apa nih? -
+ + Kirim ide topik diff --git a/src/pages/framer-motion/index.tsx b/src/pages/framer-motion/index.tsx new file mode 100644 index 0000000..10befcf --- /dev/null +++ b/src/pages/framer-motion/index.tsx @@ -0,0 +1,11 @@ +import { MotionA, MotionButton, MotionDiv, MotionH1, MotionH2, MotionP, MotionSection } from "./util"; + +export const Motion = { + div: MotionDiv, + a: MotionA, + p: MotionP, + h1: MotionH1, + h2: MotionH2, + button: MotionButton, + section: MotionSection, +}; \ No newline at end of file diff --git a/src/pages/framer-motion/util.tsx b/src/pages/framer-motion/util.tsx new file mode 100644 index 0000000..a36cdfe --- /dev/null +++ b/src/pages/framer-motion/util.tsx @@ -0,0 +1,39 @@ +'use client' +import * as React from "react"; +import { motion, HTMLMotionProps } from "framer-motion"; + +type MotionTags = "div" | "a" | "p" | "h1" | "h2" | "button" | "section"; + +type MotionComponent = React.ForwardRefRenderFunction< + Element, + HTMLMotionProps +>; + +export const createMotionComponent = ( + tag: T +): MotionComponent => { + const MotionTag = motion[tag] as any; + + const MotionComponent: MotionComponent = ( + { className, children, ...props }, + ref + ) => { + return ( + + {children} + + ); + }; + + MotionComponent.displayName = `Motion.${tag}`; + + return MotionComponent; +}; + +export const MotionDiv = React.forwardRef(createMotionComponent("div")); +export const MotionA = React.forwardRef(createMotionComponent("a")); +export const MotionP = React.forwardRef(createMotionComponent("p")); +export const MotionH1 = React.forwardRef(createMotionComponent("h1")); +export const MotionH2 = React.forwardRef(createMotionComponent("h2")); +export const MotionButton = React.forwardRef(createMotionComponent("button")); +export const MotionSection = React.forwardRef(createMotionComponent("section")); \ No newline at end of file diff --git a/src/pages/speaker/index.jsx b/src/pages/speaker/index.jsx index 0a4ce8d..811e00d 100644 --- a/src/pages/speaker/index.jsx +++ b/src/pages/speaker/index.jsx @@ -1,17 +1,38 @@ import LinkedinIcon from '@/assets/icons/linkedin.svg'; import GithubIcon from '@/assets/icons/github.svg'; import WebsiteIcon from '@/assets/icons/website.svg'; +import {Motion} from "../framer-motion";// For Motion in Text export function SpeakerPage() { return (
-

+ Semua Pembicara -

-

+ + yang telah berbagi di
acara Lotengdev -

+
( -
+
-
+ ))}
-
+ Tertarik menjadi pembicara di
acara Lotengdev ? -
+
+ Kirim ide topik