{"version":3,"file":"component---src-pages-developer-index-js-c9429fc17e5290745c56.js","mappings":"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","sources":["webpack://pb-gatsby-tailwind/./src/components/icons/UparrowIcon.js","webpack://pb-gatsby-tailwind/./src/components/ProjectGallery.js","webpack://pb-gatsby-tailwind/./src/pages/developer/index.js","webpack://pb-gatsby-tailwind/./src/utils/useWindowWidth.js"],"sourcesContent":["import * as React from \"react\"\n\nfunction SvgUparrowIcon({ title, titleId, ...props }) {\n return (\n \n {title ? {title} : null}\n \n \n )\n}\n\nexport default SvgUparrowIcon\n","import { Link } from \"gatsby\"\nimport React, { useRef, useEffect, useState } from \"react\"\nimport { gsap } from \"gsap\"\nimport { GatsbyImage, getImage } from \"gatsby-plugin-image\"\nimport SvgUparrowIcon from \"../components/icons/UparrowIcon\"\nimport useWindowWidth from \"../utils/useWindowWidth\"\nimport '../styles/gallery.module.scss'\n\nexport default function ProjectGallery({ data }) {\n\n const projects = data.projects.nodes\n const width = useWindowWidth()\n\n const [position, setPosition] = useState({ x: 0, y: 0 })\n const galleryRef = useRef()\n\n const handlePositionChange = e => {\n setPosition({\n x: e.clientX / window.innerWidth - 0.5,\n y: e.clientY / window.innerHeight - 0.5,\n })\n }\n\n useEffect(() => {\n const galleryScroller = document.querySelector('.gallery-scroller');\n const galleryItem = document.querySelector('.gallery-scroller a');\n const galleryItemSize = width < 1280 ? (galleryItem ? galleryItem.clientWidth : null) : (galleryItem ? galleryItem.clientHeight : null)\n\n const scrollToNextPage = () => {\n width < 1280 ? galleryScroller.scrollBy(galleryItemSize, 0) : galleryScroller.scrollBy(0, galleryItemSize)\n }\n \n const scrollToPrevPage = () => {\n width < 1280 ? galleryScroller.scrollBy(-galleryItemSize, 0) : galleryScroller.scrollBy(0, -galleryItemSize)\n }\n\n const btnNext = document.querySelector('.btn.next');\n const btnPrev = document.querySelector('.btn.prev');\n\n btnNext.addEventListener('click', scrollToNextPage);\n btnPrev.addEventListener('click', scrollToPrevPage);\n })\n \n useEffect(() => {\n gsap.to(galleryRef.current, {\n rotationY: 2 * position.y,\n rotationX: 10 * position.x,\n translateZ: 5,\n transformPerspective: 200,\n ease: 'power3',\n transformOrigin: \"center\",\n })\n })\n\n return (\n handlePositionChange(e)}\n role=\"region\"\n >\n
\n {projects.map(project => {\n \n const image = getImage(project.frontmatter.thumb.childImageSharp)\n const alt = project.frontmatter.title\n\n return (\n \n
\n\n
\n

{project.frontmatter.title}

\n

{project.frontmatter.stack}

\n
\n\n
\n {project && (\n \n )}\n
\n \n )\n })}\n
\n\n \n \n \n )\n}","import { graphql } from \"gatsby\"\nimport React, { useRef, useEffect, useState } from 'react'\nimport { gsap } from \"gsap\"\nimport Layout from '../../components/Layout'\nimport Seo from '../../components/Seo'\nimport ProjectGallery from '../../components/ProjectGallery'\nimport '../../styles/developer.module.scss'\n\nexport default function Developer({ data }) {\n \n const { siteUrl } = data.site.siteMetadata\n const { images } = data\n\n const profileImages = images.edges\n const selectDefaultImage = profileImages.filter(item => item.node.name === 'og-code')\n const defaultImageSrc = selectDefaultImage[0].node.childImageSharp.fluid.src\n\n // console.log(data)\n\n const [position, setPosition] = useState({ x: 0, y: 0 })\n const textRef = useRef()\n\n const handlePositionChange = e => {\n setPosition({\n x: e.clientX / window.innerWidth - 0.5,\n y: e.clientY / window.innerHeight - 0.5,\n })\n }\n\n useEffect(() => {\n gsap.to(textRef.current, {\n rotationY: -5 * position.y,\n rotationX: -5 * position.x,\n transformPerspective: 700,\n ease: 'power3',\n transformOrigin: \"center\",\n })\n })\n \n const openLink = () => {\n window.open(\"https://github.com/princebazawule\")\n }\n\n return (\n <>\n \n \n\n handlePositionChange(e)}\n role=\"region\"\n >\n

\n \n Developer\n \n

\n\n

\n i’m a frontend developer with over
15 years web experience\n

\n \n

\n i enjoy creating rich web experiences.\n

\n

\n With a solid base in html, css & javascript, my tech stack is ever evolving, as with the industry.\n

\n

\n i am currently enjoying the exciting world of react, vue, jamstack & serverless technologies.\n

\n\n
\n openLink()}\n className=\"flex mt-8 sm:mt-10 md:mt-10 lg:mt-6 xl:mt-8 2xl:mt-16 transition duration-300 ease-in-out bg-blueGray-900 hover:bg-emerald-100 dark:bg-emerald-300 dark:hover:bg-emerald-700 text-blueGray-100 hover:text-blueGray-900 dark:text-blueGray-900 dark:hover:text-blueGray-100 text-2xl xs:text-3xl sm:text-3xl md:text-4xl lg:text-4xl xl:text-4xl 2xl:text-5xl 3xl:text-5xl font-bold rounded-full border-0 py-2 px-8 lg:px-12 lg:tracking-tight xl:px-12 xl:tracking-tight 2xl:px-12 2xl:tracking-tight 3xl:px-12 3xl:tracking-tight focus:ring-6 focus:ring-emerald-500 focus:ring-opacity-5\"\n >\n view some projects\n \n
\n \n\n \n \n
\n \n )\n}\n\nexport const query = graphql`\n query ProjectsPage {\n projects: allMarkdownRemark(\n sort: { order: DESC, fields: frontmatter___date }\n filter: { fileAbsolutePath: { regex: \"/(projects)/\" } }\n ) {\n nodes {\n frontmatter {\n title\n stack\n slug\n thumb {\n childImageSharp {\n gatsbyImageData(\n width: 750\n placeholder: BLURRED\n formats: [AUTO, WEBP, AVIF]\n blurredOptions: {toFormat: NO_CHANGE}\n )\n }\n }\n featuredImg {\n src {\n childImageSharp {\n gatsbyImageData(\n width: 1000\n placeholder: BLURRED\n blurredOptions: {toFormat: NO_CHANGE}\n formats: [AUTO, WEBP, AVIF]\n )\n }\n }\n }\n }\n id\n }\n }\n\n images: allFile(filter: {absolutePath: {regex: \"/(images/profile)/\"}}) {\n edges {\n node {\n id\n childImageSharp {\n fluid {\n ...GatsbyImageSharpFluid\n }\n }\n name\n }\n }\n }\n\n site {\n siteMetadata {\n siteUrl\n }\n }\n }\n`\n","import { useEffect, useState } from \"react\"\n\nconst useWindowWidth = () => {\n const isBrowser = typeof window !== 'undefined'\n const [width, setWidth] = useState(isBrowser ? window.innerWidth : 0)\n \n useEffect(() => {\n if (!isBrowser) return false\n \n const handleResize = () => setWidth(window.innerWidth)\n window.addEventListener('resize', handleResize)\n \n return () => {\n window.removeEventListener('resize', handleResize)\n }\n })\n \n return width\n}\n\nexport default useWindowWidth;"],"names":["title","titleId","props","width","height","xmlns","fillRule","clipRule","className","id","d","fill","ProjectGallery","projects","data","nodes","useWindowWidth","useState","x","y","position","setPosition","galleryRef","useRef","useEffect","galleryScroller","document","querySelector","galleryItem","galleryItemSize","clientWidth","clientHeight","btnNext","btnPrev","addEventListener","scrollBy","gsap","current","rotationY","rotationX","translateZ","transformPerspective","ease","transformOrigin","ref","onMouseMove","e","clientX","window","innerWidth","clientY","innerHeight","handlePositionChange","role","map","project","image","getImage","frontmatter","thumb","childImageSharp","alt","Link","to","slug","key","stack","G","placeholder","layout","Developer","siteUrl","site","siteMetadata","defaultImageSrc","images","edges","filter","item","node","name","fluid","src","textRef","Layout","Seo","keywords","description","url","type","formTarget","onClick","open","isBrowser","setWidth","handleResize","removeEventListener"],"sourceRoot":""}