diff --git a/src/app/associations/page.tsx b/src/app/associations/page.tsx index e0553bb..df87e64 100644 --- a/src/app/associations/page.tsx +++ b/src/app/associations/page.tsx @@ -12,6 +12,7 @@ import { FiYoutube, } from "react-icons/fi" import AccordionAssociation from "@/components/accordion-association" +import { Hero } from "@/components/ui/hero" import esnLogo from "../../../public/logos/esn.svg" const accordionItems = [ @@ -158,19 +159,11 @@ const accordionItems = [ export default function AssociationsPage() { return ( -
-
-
-

- Associazioni -

-

- Scopri le associazioni studentesche del Politecnico -

-
-
- -
+
+ + +
+
) diff --git a/src/app/faqs/page.tsx b/src/app/faqs/page.tsx index e3dbc0f..e05776f 100644 --- a/src/app/faqs/page.tsx +++ b/src/app/faqs/page.tsx @@ -1,110 +1,17 @@ -"use client" +import type { Metadata } from "next" +import { FaqsTabs } from "@/components/faqs/faqs-tabs" +import { Hero } from "@/components/ui/hero" -import { FiBookOpen, FiDollarSign, FiEdit, FiFileText, FiSend } from "react-icons/fi" -import AccordionList from "@/components/accordion-list" -import CalloutItem from "@/components/callout-item" -import TabsNavigation from "@/components/tabs" -import { Tabs } from "@/components/tabs/tabs" -import { TabsContent } from "@/components/tabs/tabs-content" - -const faqItems = [ - { - value: "tab1", - label: "Lezioni", - content: "Content for Tab 1", - icon: FiBookOpen, - }, - { - value: "tab2", - label: "Tasse", - content: "Content for Tab 2", - icon: FiDollarSign, - }, - { - value: "tab3", - label: "Esami", - content: "Content for Tab 3", - icon: FiEdit, - }, - { - value: "tab4", - label: "Piano di Studi", - content: "Content for Tab 4", - icon: FiFileText, - }, - { - value: "tab5", - label: "Mobilitá Internazionale", - content: ( -
-

Content for Tab 5

-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore - magna aliqua. -

-
- ), - icon: FiSend, - }, -] - -const accordionItems = [ - { - value: "item-1", - trigger: "Per le lauree le lezioni sono sospese? ", - content: - "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell’esercitatore.", - }, - { - value: "item-2", - trigger: "Per le lauree le lezioni sono sospese? ", - content: - "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell’esercitatore.", - }, - { - value: "item-3", - trigger: "Per le lauree le lezioni sono sospese? ", - content: - "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell’esercitatore.", - }, - { - value: "item-4", - trigger: "Per le lauree le lezioni sono sospese? ", - content: - "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell’esercitatore.", - }, - { - value: "item-5", - trigger: "Per le lauree le lezioni sono sospese? ", - content: - "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell’esercitatore.", - }, -] +export const metadata: Metadata = { + title: "FAQs", + description: "Risposte chiare per vivere al meglio la community", +} export default function FAQsPage() { return ( -
-
- -
-
- - - {faqItems.map((item) => ( - - {item.content} - - ))} - -
-
- -
+
+ +
) } diff --git a/src/components/callout-item/types.ts b/src/components/callout-item/types.ts index e4d35f8..f78554d 100644 --- a/src/components/callout-item/types.ts +++ b/src/components/callout-item/types.ts @@ -1,6 +1,8 @@ +import type React from "react" + export type CalloutItemProps = { title: string href: string - buttonText: string + buttonText: React.ReactNode className?: string } diff --git a/src/components/faqs/faqs-tabs.tsx b/src/components/faqs/faqs-tabs.tsx new file mode 100644 index 0000000..5d1af7c --- /dev/null +++ b/src/components/faqs/faqs-tabs.tsx @@ -0,0 +1,137 @@ +"use client" + +import type { IconType } from "react-icons" +import { FiBookOpen, FiDollarSign, FiEdit, FiFileText, FiSend } from "react-icons/fi" +import AccordionList from "@/components/accordion-list" +import type { AccordionListItem } from "@/components/accordion-list/types" +import CalloutItem from "@/components/callout-item" +import TabsNavigation from "@/components/tabs" +import { Tabs } from "@/components/tabs/tabs" +import { TabsContent } from "@/components/tabs/tabs-content" + +const faqItems: { + value: string + label: string + icon: IconType + accordionItems: AccordionListItem[] +}[] = [ + { + value: "tab1", + label: "Lezioni", + icon: FiBookOpen, + accordionItems: [ + { + value: "item-1", + trigger: "Per le lauree le lezioni sono sospese?", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + ], + }, + { + value: "tab2", + label: "Tasse", + icon: FiDollarSign, + accordionItems: [ + { + value: "item-1", + trigger: "Per le lauree le lezioni sono sospese?", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + ], + }, + { + value: "tab3", + label: "Esami", + icon: FiEdit, + accordionItems: [ + { + value: "item-1", + trigger: "Per le lauree le lezioni sono sospese?", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + ], + }, + { + value: "tab4", + label: "Piano di Studi", + icon: FiFileText, + accordionItems: [ + { + value: "item-1", + trigger: "Per le lauree le lezioni sono sospese?", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + ], + }, + { + value: "tab5", + label: "Mobilità Internazionale", + icon: FiSend, + accordionItems: [ + { + value: "item-1", + trigger: "Per le lauree le lezioni sono sospese? ", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + { + value: "item-2", + trigger: "Per le lauree le lezioni sono sospese? ", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + { + value: "item-3", + trigger: "Per le lauree le lezioni sono sospese? ", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + { + value: "item-4", + trigger: "Per le lauree le lezioni sono sospese? ", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + { + value: "item-5", + trigger: "Per le lauree le lezioni sono sospese? ", + content: + "Spesso, la prima settimana, i Professori utilizzano le ore destinate alle esercitazioni per qualche ora di lezione in più: saranno quindi i docenti a specificare come verranno utilizzate queste ore. Dunque, le esercitazioni non sono da considerarsi annullate, salvo diversa comunicazione da parte del docente o dell'esercitatore.", + }, + ], + }, +] + +export function FaqsTabs() { + return ( +
+ + + {faqItems.map((item) => ( + + + + ))} + + + + Guide + Esplora le Guide + + } + className="w-full" + /> +
+ ) +} diff --git a/src/components/header/constants.ts b/src/components/header/constants.ts index 38a1e4f..d65fef6 100644 --- a/src/components/header/constants.ts +++ b/src/components/header/constants.ts @@ -8,7 +8,7 @@ export const headerMenuItems: HeaderMenuItem[] = [ { title: "Materials", href: "#", icon: FiChevronRight }, { title: "Guides", href: "#", icon: FiChevronRight }, { title: "Computer Recs", href: "#", icon: FiChevronRight }, - { title: "FAQs", href: "#", icon: FiChevronRight }, + { title: "FAQs", href: "/faqs", icon: FiChevronRight }, { title: "Rankings", href: "#", icon: FiArrowUpRight }, { title: "Tol Project", href: "#", icon: FiArrowUpRight }, ], diff --git a/src/components/home/carousel-mock.tsx b/src/components/home/carousel-mock.tsx deleted file mode 100644 index c4f9758..0000000 --- a/src/components/home/carousel-mock.tsx +++ /dev/null @@ -1,49 +0,0 @@ -"use client" - -import { CardCaption } from "@/components/card-caption" -import { Carousel, CarouselContent, CarouselDots, CarouselItem } from "@/components/ui/carousel" - -const mockCards = [ - { - title: "WeBeepSync", - caption: - "WeBeep Sync è una semplice app, user-friendly e senza compromessi che serve per tenere sincronizzati tutti i tuoi file di WeBeep.", - }, - { - title: "PolimiSchedule", - caption: - "Genera un file iCalendar (.ics) a partire dal formato testuale dell’Orario delle lezioni. Possibilità di importare su Google Calendar.", - }, - { - title: "WiFiLinux", - caption: "Scarica ed esegui lo script Python per attivare la connessione permanente al WiFi Polimi.", - }, - { - title: "The TOL Project", - caption: "Un simulatore gratuito del test di ammissione per le aspiranti matricole di Ingegneria del PoliMi.", - }, -] as const - -// TODO: delete this when merging -export function CarouselMock() { - return ( -
-

- PoliNetwork -

- - - - {mockCards.map((card) => ( - -
- -
-
- ))} -
- -
-
- ) -} diff --git a/src/components/projects/collection.tsx b/src/components/projects/collection.tsx index 81221e0..81c651d 100644 --- a/src/components/projects/collection.tsx +++ b/src/components/projects/collection.tsx @@ -83,7 +83,7 @@ export function Collection() {
-
+
{collectionCards.map((card) => ( ))} diff --git a/src/components/projects/community-news.tsx b/src/components/projects/community-news.tsx index f5881ff..1aa9e9b 100644 --- a/src/components/projects/community-news.tsx +++ b/src/components/projects/community-news.tsx @@ -1,6 +1,7 @@ import { FiCrop } from "react-icons/fi" import { CardCaption } from "../card-caption" import { Carousel, CarouselContent, CarouselDots, CarouselItem } from "../ui/carousel" +import { Hero } from "../ui/hero" const communityCards = [ { @@ -36,14 +37,7 @@ const communityCards = [ export function CommunityNews() { return (
-
-

- Projects -

-

- Esplora e contribuisci ai progetti degli studenti -

-
+
diff --git a/src/components/projects/deprecated.tsx b/src/components/projects/deprecated.tsx index ebff0a9..67a3c07 100644 --- a/src/components/projects/deprecated.tsx +++ b/src/components/projects/deprecated.tsx @@ -47,7 +47,7 @@ export function Deprecated() {
-
+
{communityCards.map((card) => ( ))} diff --git a/src/components/tabs/tabs-list.tsx b/src/components/tabs/tabs-list.tsx index 804ef07..5a8a09c 100644 --- a/src/components/tabs/tabs-list.tsx +++ b/src/components/tabs/tabs-list.tsx @@ -6,15 +6,23 @@ import { Glass } from "../glass" export function TabsList({ className, children, ...props }: React.ComponentProps) { return ( - +
- {children} +
+ + {children} + +
- +
) } diff --git a/src/components/ui/hero.tsx b/src/components/ui/hero.tsx new file mode 100644 index 0000000..d4ebc4b --- /dev/null +++ b/src/components/ui/hero.tsx @@ -0,0 +1,10 @@ +export function Hero({ title, description }: { title: string; description: string }) { + return ( +
+

+ {title} +

+

{description}

+
+ ) +} diff --git a/src/components/ui/item.tsx b/src/components/ui/item.tsx index 9ee61ab..6e9fe15 100644 --- a/src/components/ui/item.tsx +++ b/src/components/ui/item.tsx @@ -27,7 +27,13 @@ function ItemContent({ className, ...props }: React.ComponentProps<"div">) { } function ItemTitle({ className, ...props }: React.ComponentProps<"p">) { - return

+ return ( +

+ ) } function ItemActions({ className, ...props }: React.ComponentProps<"div">) { diff --git a/src/styles/globals.css b/src/styles/globals.css index 2086df8..2560003 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -31,3 +31,11 @@ margin-right: 0px !important; } } + +@media (max-width: 767px) { + /* max-md */ + .scroll-fade-x { + mask-image: linear-gradient(to right, transparent, black 28px, black calc(100% - 36px), transparent); + -webkit-mask-image: linear-gradient(to right, transparent, black 28px, black calc(100% - 28px), transparent); + } +}