diff --git a/src/components/project.tsx b/src/components/project.tsx index 0e1cd6a..f5986d5 100644 --- a/src/components/project.tsx +++ b/src/components/project.tsx @@ -11,7 +11,7 @@ import { FaPersonChalkboard, } from "react-icons/fa6"; -import { Card } from "@heroui/react"; +import { Card, Separator } from "@heroui/react"; import { IconLink } from "@/components/icon-link"; import { Areas, Tools } from "@/components/skills"; @@ -67,13 +67,10 @@ const ProjectView = React.memo(({ project }: { project: Project }) => { return ( -
+

{project.name}

-
- -
+
- @@ -83,13 +80,16 @@ const ProjectView = React.memo(({ project }: { project: Project }) => { -
- -
    + {/*
      {project.roles.map((role) => (
    • {role}
    • ))} -
    +
*/} + +
+ + +
{new Date(project.date).getFullYear()} diff --git a/src/components/publication.tsx b/src/components/publication.tsx index 3e259a0..6795efb 100644 --- a/src/components/publication.tsx +++ b/src/components/publication.tsx @@ -6,10 +6,11 @@ import { FaPersonChalkboard, FaQuoteLeft, FaLink, + FaCopy, + FaCheck, } from "react-icons/fa6"; -import { SiScopus } from "react-icons/si"; -import { Popover, Button, Card } from "@heroui/react"; +import { Popover, Button, Card, Separator, Tooltip } from "@heroui/react"; import { IconLink } from "@/components/icon-link"; import { Areas, Tools } from "@/components/skills"; @@ -30,6 +31,7 @@ const CiteButton = ({ publication }: { publication: Publication }) => { year = {${publication.year}} }`; + const [copied, setCopied] = React.useState(false); return ( @@ -45,54 +47,74 @@ const CiteButton = ({ publication }: { publication: Publication }) => { placement="top" className="dark:bg-slate-800 rounded-3xl" > - -
-            {bibtex}
-          
-
+
+ {copied && Copied} + -
- + + + Copy to clipboard + + +
+
+          {bibtex}
+        
-
+ ); }; -const Links = ({ links }: { links: PublicationLinks }) => { +const Links = ({ + links, + compact = false, +}: { + links: PublicationLinks; + compact?: boolean; +}) => { return ( -
+
{links.fulltext && ( - Read + {!compact && Read} )} {links.presentation && ( - Presentation + {!compact && ( + Slides + )} )} {links.doi && ( - DOI + {!compact && DOI} )} - {links.scopus && ( + {/* {links.scopus && ( - Scopus + {!compact && Scopus} - )} + )} */}
); }; @@ -100,27 +122,23 @@ const Links = ({ links }: { links: PublicationLinks }) => { const PublicationView = React.memo( ({ publication, - featured = false, }: { publication: Publication; - featured?: boolean; }) => { + const isFeatured = publication.featured; return (
-

+

{publication.title}

{publication.authors.join(", ")}

-
- -
@@ -130,15 +148,15 @@ const PublicationView = React.memo(
- -
-
- - -
-
- -
+ +
+ + + +
+
+ +
diff --git a/src/components/section-item-card.tsx b/src/components/section-item-card.tsx index cb05947..3779d25 100644 --- a/src/components/section-item-card.tsx +++ b/src/components/section-item-card.tsx @@ -1,6 +1,7 @@ "use client"; import Image from "next/image"; + import React from "react"; interface SectionItemCardProps { @@ -25,12 +26,7 @@ export const SectionItemCard = ({
- {image.alt} + {image.alt}

{title}

{subtitle}

{footer}

diff --git a/src/components/sections/certifications.tsx b/src/components/sections/certifications.tsx index 42ca99b..afb7552 100644 --- a/src/components/sections/certifications.tsx +++ b/src/components/sections/certifications.tsx @@ -2,8 +2,8 @@ import certificationsData from "@/data/certifications"; -import { SectionItemCard } from "../section-item-card"; import { FilterableSection } from "../filterable-section"; +import { SectionItemCard } from "../section-item-card"; export const CertificationsSection = () => { return ( @@ -15,7 +15,10 @@ export const CertificationsSection = () => { { ))}
diff --git a/src/components/timeline.tsx b/src/components/timeline.tsx index 1f83f28..9f963bd 100644 --- a/src/components/timeline.tsx +++ b/src/components/timeline.tsx @@ -15,9 +15,8 @@ const PositionView = memo(({ position }: { position: Position }) => (

- -
    +
      {position.tasks.map((task) => (
    • ( ))}
    -
    - - +
    + + + + +
      + {position.roles.map((role) => ( +
    • {role}
    • + ))} +
    +
    -
      - {position.roles.map((role) => ( -
    • {role}
    • - ))} -
    )); @@ -61,7 +63,7 @@ const Timeline = memo(({ positions }: { positions: Position[] }) => (
-
+
diff --git a/src/data/publications.tsx b/src/data/publications.tsx index a5d08f5..3692900 100644 --- a/src/data/publications.tsx +++ b/src/data/publications.tsx @@ -7,7 +7,7 @@ const publications: Publication[] = [ "Securing Cloud Containers through Intrusion Detection and Remediation", authors: ["Amr S. Abed"], featured: true, - venue: "Virginia Tech", + venue: "PhD Dissertation, Virginia Tech", year: "2017", type: "phdthesis", links: {