fixed bug preventing anything from rendering.

This commit is contained in:
Joshua Ashton
2024-12-31 14:09:37 -07:00
parent d66977381e
commit d58fcd5a64
5 changed files with 10 additions and 291 deletions
-19
View File
@@ -9,24 +9,6 @@ import { terminal } from "virtual:terminal";
* TODO: Read in data from a plain text file for easier editing in the future. * TODO: Read in data from a plain text file for easier editing in the future.
*/ */
export default function App() { export default function App() {
// FUNCTION DATA
const [isMobile, setIsMobile] = useState(window.innerWidth <= 790);
useEffect(() => {
const handleResize = () => {
const mediaQuery = window.matchMedia("(max-width: 790px)");
setIsMobile(mediaQuery.matches);
};
handleResize(); // Initial check on mount
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
const initState = isMobile ? [true, false, false] : [true, true, true];
terminal.log("isMobile: " + isMobile);
// DATA VARIABLES // DATA VARIABLES
/* /*
{ {
@@ -97,7 +79,6 @@ export default function App() {
callToAction="Here's my resume." callToAction="Here's my resume."
image="/images/profile.jpg" image="/images/profile.jpg"
skills={skillsData} skills={skillsData}
initState={initState}
/>, />,
<Projects cardData={projectData} />, <Projects cardData={projectData} />,
]; ];
+2 -2
View File
@@ -8,9 +8,9 @@ export default function Primary({
callToAction, callToAction,
image, image,
skills, skills,
initState,
}) { }) {
let [activeCardIndex, setActiveCardIndex] = useState(null); const [activeCardIndex, setActiveCardIndex] = useState(null);
() => setActiveCardIndex(0);
return ( return (
<> <>
<div id="primary"> <div id="primary">
+2 -6
View File
@@ -3,17 +3,13 @@ import React, { useState } from "react";
// TODO: Add state which only allows one skill card at a time to be expanded. // TODO: Add state which only allows one skill card at a time to be expanded.
// TODO: Ensure that the expandability of the skill card is only an option when @media max-width 790px (mobile) // TODO: Ensure that the expandability of the skill card is only an option when @media max-width 790px (mobile)
const SkillCard = ({ header, symbol, list, isActive, onToggle }) => { const SkillCard = ({ header, symbol, list, isActive, onToggle }) => {
function test() {
console.log("click detected");
onToggle();
}
return ( return (
<div className="card shadow"> <div className="card shadow">
<div className="skill-card-header" onClick={() => test()}> <div className="skill-card-header" onClick={() => onToggle()}>
<span className="material-icons skill-symbol">{symbol}</span> <span className="material-icons skill-symbol">{symbol}</span>
<h3>{header}</h3> <h3>{header}</h3>
</div> </div>
{(initState || isActive) && ( {isActive && (
<ul> <ul>
{list.map((item, index) => ( {list.map((item, index) => (
<li key={index}>{item}</li> <li key={index}>{item}</li>
+6 -3
View File
@@ -23,8 +23,8 @@
body { body {
margin: 0; margin: 0;
height: 100vh;
position: relative; position: relative;
height: 100%;
background: linear-gradient( background: linear-gradient(
135deg, 135deg,
#84509f 0%, #84509f 0%,
@@ -35,7 +35,7 @@ body {
background-size: background-size:
300% 100%, 300% 100%,
cover; cover;
animation: background-fade 4s linear infinite; animation: background-fade 5s linear infinite;
animation-direction: alternate; animation-direction: alternate;
background-attachment: fixed; background-attachment: fixed;
} }
@@ -72,7 +72,10 @@ h4 {
font-size: 5vw; font-size: 5vw;
color: #ebd2ff; color: #ebd2ff;
margin: 0 auto; display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
} }
.shadow { .shadow {
-261
View File
@@ -1,261 +0,0 @@
@import url("https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&display=swap");
:root {
--width: 480px;
}
*,
*::before,
*::after {
padding: 0;
margin: 0;
box-sizing: border-box;
font-family: "Lato", sans-serif;
}
html,
body {
position: relative;
height: 100%;
background: #222;
}
.swiper {
width: 100%;
height: 100vh;
overflow: hidden;
}
.swiper-slide .slide-container {
display: grid;
grid-template-columns: 48% 50%;
grid-template-rows: 100%;
column-gap: 30px;
height: 100%;
}
.info {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding-left: 120px;
text-align: center;
opacity: 0;
}
.info h1 {
font-size: clamp(2.25rem, 3.5vw, 8rem);
font-weight: 600;
letter-spacing: 2px;
width: max-content;
margin-bottom: 32px;
opacity: 0;
}
[data-color="purple"] {
color: #7385ca;
}
.info p {
font-size: clamp(1.1rem, 2vw, 1.5rem);
color: #bfbec1;
font-weight: 300;
line-height: 1.5;
opacity: 0;
}
.swiper-slide-active .info {
opacity: 1;
}
.swiper-slide-active .info h1,
.swiper-slide-active .info p {
animation: moveDown 0.8s ease-in forwards;
}
.swiper-slide-active .info h1 {
animation-delay: 0.2s;
}
.swiper-slide-active .info p {
animation-delay: 1s;
}
@keyframes moveDown {
0% {
transform: translateY(-20px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
.item {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: var(--width);
aspect-ratio: 1/1;
margin: auto;
}
.circle {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
border-radius: 50%;
overflow: hidden;
}
.circle[data-item="purple"] {
border: 1px solid #8092d9;
}
.circle::before {
content: "";
position: absolute;
left: 0;
width: 100%;
height: 0;
z-index: -1;
}
.circle[data-item="purple"]::before {
background: linear-gradient(
to left bottom,
#8092d9,
#677abf,
#4e63a6,
#344d8d,
#163875
);
}
.animated-circle::before {
animation: colorTransition 2s linear forwards;
}
@keyframes colorTransition {
0% {
height: 0;
top: -50%;
}
100% {
height: 100%;
top: 0%;
}
}
.swiper-slide img {
display: block;
width: calc(var(--width) / 2);
filter: drop-shadow(5px 6px 5px rgba(36, 36, 42, 0.5));
user-select: none;
opacity: 0;
z-index: 1;
}
.swiper-slide-active img {
animation: itemMoveDown 0.8s ease-in forwards 1.4s;
}
@keyframes itemMoveDown {
0% {
transform: translateY(calc(var(--width) / -5));
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
.swiper-pagination-bullet {
width: 18px;
height: 18px;
background-color: #7e7e7e;
border-radius: 50%;
transition: all 0.6s ease-in-out;
}
.swiper-pagination-bullet-active {
height: 36px;
background-color: #717271;
border-radius: 14px;
}
@media (max-width: 1250px) {
.info {
padding-left: 90px;
}
}
@media (max-width: 1075px) {
:root {
--width: 400px;
}
.swiper-slide .slide-container {
column-gap: 20px;
}
.info {
padding-left: 60px;
}
}
@media (max-width: 990px) {
:root {
--width: 360px;
}
.info {
padding-left: 30px;
}
}
@media (max-width: 790px) {
.swiper-slide .slide-container {
grid-template-columns: 100%;
grid-template-rows: 60% 35%;
column-gap: 0;
grid-template-areas:
"item"
"info";
padding: 30px;
}
.item {
grid-area: item;
}
.info {
grid-area: info;
}
.info h1 {
margin-bottom: 16px;
width: unset;
line-height: 1.1;
}
.swiper-pagination-bullet {
width: 14px;
height: 14px;
}
.swiper-pagination-bullet-active {
height: 28px;
}
}
@media (max-width: 485px) {
:root {
--width: 280px;
}
.info p {
line-height: 1.4;
}
}