diff --git a/relume-test/src/App.tsx b/relume-test/src/App.tsx index efa7bdf..715b990 100644 --- a/relume-test/src/App.tsx +++ b/relume-test/src/App.tsx @@ -1,10 +1,12 @@ import { Routes, Route } from "react-router-dom"; import Home from "./pages/Home"; +import Programm from "./pages/Programm"; function App() { return ( } /> + } /> ); } diff --git a/relume-test/src/assets/program-header.png b/relume-test/src/assets/program-header.png new file mode 100644 index 0000000..f4a2e60 Binary files /dev/null and b/relume-test/src/assets/program-header.png differ diff --git a/relume-test/src/components/Banner15.tsx b/relume-test/src/components/Banner15.tsx new file mode 100644 index 0000000..6918ee3 --- /dev/null +++ b/relume-test/src/components/Banner15.tsx @@ -0,0 +1,86 @@ +import React from "react"; + +type ImageProps = { + src: string; + alt?: string; +}; + +type Section = { + title: string; + image: ImageProps; +}; + +type Props = { + sections: Section[]; +}; + +export type Banner15Props = React.ComponentPropsWithoutRef<"section"> & Partial; + +export const Banner15 = (props: Banner15Props) => { + const { sections } = { + ...Banner15Defaults, + ...props, + }; + return ( +
+
+ {Array(2) + .fill(0) + .map((_, index) => ( +
+ {sections.map((section, index) => ( + +
+

{section.title}

+
+
+ {section.image.alt} +
+
+ ))} +
+ ))} +
+
+ ); +}; + +export const Banner15Defaults: Props = { + sections: [ + { + title: "Relume Library", + image: { + src: "https://relume-assets.s3.us-east-1.amazonaws.com/placeholder-image.svg", + alt: "Relume Library", + }, + }, + { + title: "Relume Library", + image: { + src: "https://relume-assets.s3.us-east-1.amazonaws.com/placeholder-image.svg", + alt: "Relume Library", + }, + }, + { + title: "Relume Library", + image: { + src: "https://relume-assets.s3.us-east-1.amazonaws.com/placeholder-image.svg", + alt: "Relume Library", + }, + }, + { + title: "Relume Library", + image: { + src: "https://relume-assets.s3.us-east-1.amazonaws.com/placeholder-image.svg", + alt: "Relume Library", + }, + }, + ], +}; \ No newline at end of file diff --git a/relume-test/src/components/Event33.tsx b/relume-test/src/components/Event33.tsx new file mode 100644 index 0000000..8b0e700 --- /dev/null +++ b/relume-test/src/components/Event33.tsx @@ -0,0 +1,283 @@ +import { Button, Tabs, TabsContent, TabsList, TabsTrigger } from "@relume_io/relume-ui"; +import type { ButtonProps } from "@relume_io/relume-ui"; +import { BiMap } from "react-icons/bi"; + +type ImageProps = { + src: string; + alt?: string; +}; + +type ScheduledEvent = { + url: string; + time: string; + image: ImageProps; + title: string; + speaker: string; + location: string; + button: ButtonProps; +}; + +type Tab = { + value: string; + trigger: string; + content: ScheduledEvent[]; +}; + +type Props = { + tagline: string; + heading: string; + description: string; + tabs: Tab[]; +}; + +export type Event33Props = React.ComponentPropsWithoutRef<"section"> & Partial; + +export const Event33 = (props: Event33Props) => { + const { tagline, heading, description, tabs } = { + ...Event33Defaults, + ...props, + }; + + return ( +
+
+
+
+

{tagline}

+

{heading}

+

{description}

+
+
+ + + {tabs.map((tab, index) => ( + + {tab.trigger} + + ))} + + {tabs.map((tab) => ( + + {tab.content.map((event, index) => ( + + ))} + + ))} + +
+
+ ); +}; + +const ScheduledEvent: React.FC = ({ + url, + time, + image, + title, + speaker, + location, + button, +}) => { + return ( +
+
{time}
+
+ + {image.alt} + +
+
+
+
{title}
+
{speaker}
+
+
+ + {location} +
+
+ +
+ ); +}; + +export const Event33Defaults: Props = { + tagline: "Tagline", + heading: "Schedule", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.", + tabs: [ + { + value: "fri-09-feb", + trigger: "Fri 09 Feb", + content: [ + { + url: "#", + time: "8:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 1", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + { + url: "#", + time: "9:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 2", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + { + url: "#", + time: "10:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 3", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + ], + }, + { + value: "sat-10-feb", + trigger: "Sat 10 Feb", + content: [ + { + url: "#", + time: "8:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 4", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + { + url: "#", + time: "9:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 5", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + { + url: "#", + time: "10:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 6", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + ], + }, + { + value: "sun-11-feb", + trigger: "Sun 11 Feb", + content: [ + { + url: "#", + time: "8:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 7", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + { + url: "#", + time: "9:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 8", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + { + url: "#", + time: "10:00 am", + image: { + src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", + alt: "Relume placeholder image 9", + }, + title: "Event title heading", + speaker: "Speaker", + location: "Location", + button: { + variant: "secondary", + size: "primary", + title: "View details", + }, + }, + ], + }, + ], +}; diff --git a/relume-test/src/components/Filters5.tsx b/relume-test/src/components/Filters5.tsx new file mode 100644 index 0000000..848097f --- /dev/null +++ b/relume-test/src/components/Filters5.tsx @@ -0,0 +1,316 @@ +import React, { useState } from "react"; +import { BiFilter, BiSearch } from "react-icons/bi"; +import { RxChevronDown } from "react-icons/rx"; +import { IoCloseOutline } from "react-icons/io5"; +import { AnimatePresence, motion } from "framer-motion"; +import type { Variants } from "framer-motion"; +import { + Button, + Checkbox, + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, + Input, + Label, + Select, + SelectContent, + SelectTrigger, + SelectValue, + Tabs, + TabsList, + TabsTrigger, +} from "@relume_io/relume-ui"; + +type FilterValues = { + filterOne: string; + filterTwo: string[]; + filterThree: string[]; + filterFour: string[]; +}; + +const tabs = [ + { value: "View all", trigger: "View all" }, + { value: "Category one", trigger: "Category one" }, + { value: "Category two", trigger: "Category two" }, + { value: "Category three", trigger: "Category three" }, + { value: "Category four", trigger: "Category four" }, +]; + +const options = [ + { value: "option-1", label: "Option one" }, + { value: "option-2", label: "Option two" }, + { value: "option-3", label: "Option three" }, + { value: "option-4", label: "Option four" }, + { value: "option-5", label: "Option five" }, +]; + +const containerVariants: Variants = { + initial: { + height: 0, + opacity: 0, + transition: { duration: 0.2, ease: "easeInOut" }, + }, + animate: { + height: "auto", + opacity: 1, + transition: { duration: 0.2, ease: "easeInOut" }, + }, + exit: { + height: 0, + opacity: 0, + transition: { duration: 0.2, ease: "easeInOut" }, + }, +}; + +export const Filters5 = () => { + const [isOpen, setIsOpen] = useState(false); + const [selectedValues, setSelectedValues] = useState({ + filterOne: "", + filterTwo: ["option-1"], + filterThree: ["option-1"], + filterFour: ["option-1"], + }); + + const handleClear = (filter: keyof FilterValues) => { + setSelectedValues((prev) => ({ + ...prev, + [filter]: Array.isArray(prev[filter]) ? [] : "", + })); + }; + + const handleCheckboxChange = (filter: keyof Omit, value: string) => { + setSelectedValues((prev) => { + const currentItems = prev[filter]; + return { + ...prev, + [filter]: currentItems.includes(value) + ? currentItems.filter((item) => item !== value) + : [...currentItems, value], + }; + }); + }; + + const getSelectedLabels = (filter: keyof FilterValues) => { + if (!selectedValues[filter].length) return "Select options"; + if (selectedValues[filter].length === 1) { + return options.find((opt) => opt.value === selectedValues[filter][0])?.label; + } + return `${selectedValues[filter].length} selected`; + }; + + return ( +
+
+
+

Collection

+

Lorem ipsum dolor sit amet.

+
+
+ + + + {tabs.map((tab, index) => ( + + {tab.trigger} + + ))} + + + + +

Sort by

+ +
+ + {[ + "Most Popular", + "Most Recent", + "Name: A to Z", + "Name: Z to A", + "Price: Low to High", + "Price: High to Low", + ].map((option) => ( + {option} + ))} + +
+
+ + {isOpen && ( + +
+
+
+ Filter One + +
+ } + value={selectedValues.filterOne} + onChange={(e) => + setSelectedValues((prev) => ({ + ...prev, + filterOne: e.target.value, + })) + } + className="border-electric-violet rounded-2xl" + /> +
+
+
+ Filter Two + +
+ +
+
+
+ Filter Three + +
+ +
+
+
+ Filter Four + +
+ +
+
+
+ )} +
+
+
+
+
+
+ ); +}; \ No newline at end of file diff --git a/relume-test/src/components/Header23.tsx b/relume-test/src/components/Header23.tsx new file mode 100644 index 0000000..affacd8 --- /dev/null +++ b/relume-test/src/components/Header23.tsx @@ -0,0 +1,59 @@ +import headerBg from "../assets/program-header.png"; +import { Button } from "@relume_io/relume-ui"; +import type { ButtonProps } from "@relume_io/relume-ui"; + +type Props = { + heading: string; + description: string; + buttons: ButtonProps[]; +}; + +export type Header23Props = React.ComponentPropsWithoutRef<"section"> & Partial; + +export const Header23 = (props: Header23Props) => { + const { heading, description, buttons } = { + ...Header23Defaults, + ...props, + }; + return ( +
+ {/* Background image with overlay */} +
+
+ +
+ {/* Content */} +
+
+

+ {heading} +

+

+ {description} +

+ {buttons.length > 0 && ( +
+ {buttons.map((button, index) => ( + + ))} +
+ )} +
+
+
+ ); +}; + +export const Header23Defaults: Props = { + heading: "UXplore 2026 Programm", + description: "Erfahre von den klügsten Köpfen der Branche, wie sie komplexe Design-Herausforderungen meistern. Von Schweizer Präzision im Interface bis hin zu globalen Strategien führender Tech-Giganten – unsere Speaker bringen handfeste Insights statt nur Buzzwords.", + buttons: [], +}; + +export default Header23; \ No newline at end of file diff --git a/relume-test/src/declarations.d.ts b/relume-test/src/declarations.d.ts index 8fcd0d7..e74589e 100644 --- a/relume-test/src/declarations.d.ts +++ b/relume-test/src/declarations.d.ts @@ -2,4 +2,5 @@ declare module "*.png"; declare module "*.jpg"; declare module "*.jpeg"; declare module "*.svg"; -declare module "*.webp"; \ No newline at end of file +declare module "*.webp"; +declare module "*.css"; \ No newline at end of file diff --git a/relume-test/src/pages/Programm.tsx b/relume-test/src/pages/Programm.tsx new file mode 100644 index 0000000..68333aa --- /dev/null +++ b/relume-test/src/pages/Programm.tsx @@ -0,0 +1,21 @@ +import { Navbar3 } from "../components/Navbar"; +import { Header23 } from "../components/Header23"; +import { Filters5 } from "../components/Filters5"; +import { Event33 } from "../components/Event33"; +import { Banner15 } from "../components/Banner15"; +import { Footer3 } from "../components/Footer"; + +const Programm = () => { + return ( +
+ + + + + + +
+ ); +}; + +export default Programm; \ No newline at end of file diff --git a/relume-test/src/reactcomponents_home.jsx b/relume-test/src/reactcomponents_home.jsx deleted file mode 100644 index 718a571..0000000 --- a/relume-test/src/reactcomponents_home.jsx +++ /dev/null @@ -1,1242 +0,0 @@ -"use client"; - -import { useState } from "react"; -import { Button, useMediaQuery } from "@relume_io/relume-ui"; -import type { ButtonProps } from "@relume_io/relume-ui"; -import { AnimatePresence, motion } from "framer-motion"; -import { RxChevronDown } from "react-icons/rx"; - -type ImageProps = { - url?: string; - src: string; - alt?: string; -}; - -type NavLink = { - url: string; - title: string; - subMenuLinks?: NavLink[]; -}; - -type Props = { - logo: ImageProps; - navLinks: NavLink[]; - buttons: ButtonProps[]; -}; - -export type Navbar3Props = React.ComponentPropsWithoutRef<"section"> & Partial; - -export const Navbar3 = (props: Navbar3Props) => { - const { logo, navLinks, buttons } = { - ...Navbar3Defaults, - ...props, - }; - const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); - const isMobile = useMediaQuery("(max-width: 991px)"); - - return ( -
- - - - - {logo.alt} - - {navLinks.map((navLink, index) => ( -
- {navLink.subMenuLinks && navLink.subMenuLinks.length > 0 ? ( - - ) : ( - - {navLink.title} - - )} -
- ))} -
- {buttons.map((button, index) => ( - - ))} -
-
- {isMobileMenuOpen && ( - setIsMobileMenuOpen(false)} - /> - )} -
- - {logo.alt} - -
-
- {buttons.map((button, index) => ( - - ))} -
-
-
- ); -}; - -const SubMenu = ({ navLink, isMobile }: { navLink: NavLink; isMobile: boolean }) => { - const [isDropdownOpen, setIsDropdownOpen] = useState(false); - - return ( -
!isMobile && setIsDropdownOpen(true)} - onMouseLeave={() => !isMobile && setIsDropdownOpen(false)} - > - - {isDropdownOpen && ( - - - {navLink.subMenuLinks?.map((subMenuLink, index) => ( - - {subMenuLink.title} - - ))} - - - )} -
- ); -}; - -export const Navbar3Defaults: Props = { - logo: { - url: "#", - src: "https://d22po4pjz3o32e.cloudfront.net/logo-image.svg", - alt: "Logo image", - }, - navLinks: [ - { title: "Link One", url: "#" }, - { title: "Link Two", url: "#" }, - { - title: "Link Three", - url: "#", - subMenuLinks: [ - { title: "Link Four", url: "#" }, - { title: "Link Five", url: "#" }, - { title: "Link Six", url: "#" }, - ], - }, - ], - buttons: [ - { - title: "Button", - size: "sm", - }, - ], -}; - - - - -import * as React from "react"; -import type { ButtonProps } from "@relume_io/relume-ui"; -import { Button } from "@relume_io/relume-ui"; -import { RxChevronRight } from "react-icons/rx"; -import { BiMap, BiCalendarAlt } from "react-icons/bi"; - -type ImageProps = { - src: string; - alt?: string; -}; - -type Date = { - weekday: string; - day: string; - month: string; - year: string; -}; - -type FeaturedEvent = { - url: string; - image: ImageProps; - date: Date; - category: string; - title: string; - location: string; - description: string; - button: ButtonProps; -}; - -type Props = { - tagline: string; - heading: string; - description: string; - button: ButtonProps; - featuredEvents: FeaturedEvent[]; -}; - -export type Event17Props = React.ComponentPropsWithoutRef<"section"> & Partial; - -export const Event17 = (props: Event17Props) => { - const { tagline, heading, description, button, featuredEvents } = { - ...Event17Defaults, - ...props, - }; - return ( -
-
-
-

{tagline}

-

{heading}

-

{description}

-
-
- {featuredEvents.map((event, index) => ( - - ))} -
-
- -
-
-
- ); -}; - -const FeaturedEvent: React.FC = ({ - url, - image, - date, - category, - title, - location, - description, - button, -}) => { - return ( -
- - {image.alt} - - {category} - - -
-
-
- - {date.weekday} {date.day} {date.month} {date.year} -
-
- - {location} -
-
- -

{title}

-
-

{description}

- -
-
- ); -}; - -export const Event17Defaults: Props = { - tagline: "Tagline", - heading: "Events", - description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", - button: { - variant: "secondary", - size: "primary", - title: "View all", - }, - featuredEvents: [ - { - url: "#", - image: { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg", - alt: "Relume placeholder image 1", - }, - date: { - weekday: "Fri", - day: "09", - month: "Feb", - year: "2024", - }, - category: "Category", - title: "Event title heading", - location: "Location", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.", - button: { title: "View event", variant: "link", size: "link", iconRight: }, - }, - { - url: "#", - image: { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg", - alt: "Relume placeholder image 2", - }, - date: { - weekday: "Sat", - day: "10", - month: "Feb", - year: "2024", - }, - category: "Category", - title: "Event title heading", - location: "Location", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.", - button: { title: "View event", variant: "link", size: "link", iconRight: }, - }, - { - url: "#", - image: { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg", - alt: "Relume placeholder image 3", - }, - date: { - weekday: "Sun", - day: "11", - month: "Feb", - year: "2024", - }, - category: "Category", - title: "Event title heading", - location: "Location", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.", - button: { title: "View event", variant: "link", size: "link", iconRight: }, - }, - ], -}; - - - - -"use client"; - -import { useState, useEffect } from "react"; -import { - Carousel, - CarouselContent, - CarouselItem, - CarouselNext, - CarouselPrevious, -} from "@relume_io/relume-ui"; -import type { CarouselApi } from "@relume_io/relume-ui"; -import clsx from "clsx"; - -type ImageProps = { - src: string; - alt?: string; -}; - -type Props = { - heading: string; - description: string; - images: ImageProps[]; -}; - -export type Gallery19Props = React.ComponentPropsWithoutRef<"section"> & Partial; - -export const Gallery19 = (props: Gallery19Props) => { - const { heading, description, images } = { - ...Gallery19Defaults, - ...props, - }; - - const [api, setApi] = useState(); - const [current, setCurrent] = useState(0); - - useEffect(() => { - if (!api) { - return; - } - setCurrent(api.selectedScrollSnap() + 1); - api.on("select", () => { - setCurrent(api.selectedScrollSnap() + 1); - }); - }, [api]); - - return ( -
-
-
-
-

- {heading} -

-

{description}

-
- {/* for all available options: https://www.embla-carousel.com/api/options/ */} - -
- - {images.map((image, index) => ( - -
- {image.alt} -
-
- ))} -
- - -
-
- {images.map((_, index) => ( -
-
-
-
-
- ); -}; - -export const Gallery19Defaults: Props = { - heading: "Image Gallery", - description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", - images: [ - { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", - alt: "Relume placeholder image 1", - }, - { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", - alt: "Relume placeholder image 2", - }, - { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", - alt: "Relume placeholder image 3", - }, - { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", - alt: "Relume placeholder image 4", - }, - { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", - alt: "Relume placeholder image 5", - }, - { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", - alt: "Relume placeholder image 6", - }, - { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", - alt: "Relume placeholder image 7", - }, - { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image.svg", - alt: "Relume placeholder image 8", - }, - ], -}; - - - - -"use client"; - -import { useState } from "react"; -import { Button, Input } from "@relume_io/relume-ui"; -import type { ButtonProps } from "@relume_io/relume-ui"; - -type Props = { - heading: string; - description: string; - inputPlaceholder?: string; - button: ButtonProps; - termsAndConditions: string; - video: string; - videoType: string; -}; - -export type Cta30Props = React.ComponentPropsWithoutRef<"section"> & Partial; - -export const Cta30 = (props: Cta30Props) => { - const { heading, description, inputPlaceholder, button, termsAndConditions, video, videoType } = { - ...Cta30Defaults, - ...props, - }; - - const [emailInput, setEmailInput] = useState(""); - const handleSubmit = (event: React.FormEvent) => { - event.preventDefault(); - console.log({ - emailInput, - }); - }; - - return ( -
-
-

- {heading} -

-

{description}

-
-
- setEmailInput(e.target.value)} - /> - -
-
-
-
-
- -
-
-
- ); -}; - -export const Cta30Defaults: Props = { - heading: "Medium length heading goes here", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.", - inputPlaceholder: "Enter your email", - button: { - title: "Sign up", - variant: "primary", - size: "sm", - }, - termsAndConditions: ` -

- By clicking Sign Up you're confirming that you agree with our - Terms and Conditions. -

- `, - video: "https://d22po4pjz3o32e.cloudfront.net/placeholder-video.mp4", - videoType: "video/mp4", -}; - - - - -import * as React from "react"; -import type { ButtonProps } from "@relume_io/relume-ui"; -import { Button } from "@relume_io/relume-ui"; -import { RxChevronRight } from "react-icons/rx"; -import { BiMap, BiCalendarAlt } from "react-icons/bi"; - -type ImageProps = { - src: string; - alt?: string; -}; - -type Date = { - weekday: string; - day: string; - month: string; - year: string; -}; - -type FeaturedEvent = { - url: string; - image: ImageProps; - date: Date; - category: string; - title: string; - location: string; - description: string; - button: ButtonProps; -}; - -type Props = { - tagline: string; - heading: string; - description: string; - button: ButtonProps; - featuredEvents: FeaturedEvent[]; -}; - -export type Event20Props = React.ComponentPropsWithoutRef<"section"> & Partial; - -export const Event20 = (props: Event20Props) => { - const { tagline, heading, description, button, featuredEvents } = { - ...Event20Defaults, - ...props, - }; - return ( -
-
-
-
-

{tagline}

-

{heading}

-

{description}

-
- -
-
- {featuredEvents.map((event, index) => ( - - ))} -
-
- -
-
-
- ); -}; - -const FeaturedEvent: React.FC = ({ - url, - image, - date, - category, - title, - location, - description, - button, -}) => { - return ( -
- - {image.alt} - - {category} - - -
-
-
- - {date.weekday} {date.day} {date.month} {date.year} -
-
- - {location} -
-
- -

{title}

-
-

{description}

- -
-
- ); -}; - -export const Event20Defaults: Props = { - tagline: "Tagline", - heading: "Events", - description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", - button: { - variant: "secondary", - size: "primary", - title: "View all", - }, - featuredEvents: [ - { - url: "#", - image: { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg", - alt: "Relume placeholder image 1", - }, - date: { - weekday: "Fri", - day: "09", - month: "Feb", - year: "2024", - }, - category: "Category", - title: "Event title heading", - location: "Location", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.", - button: { title: "View event", variant: "link", size: "link", iconRight: }, - }, - { - url: "#", - image: { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg", - alt: "Relume placeholder image 2", - }, - date: { - weekday: "Sat", - day: "10", - month: "Feb", - year: "2024", - }, - category: "Category", - title: "Event title heading", - location: "Location", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.", - button: { title: "View event", variant: "link", size: "link", iconRight: }, - }, - { - url: "#", - image: { - src: "https://d22po4pjz3o32e.cloudfront.net/placeholder-image-landscape.svg", - alt: "Relume placeholder image 3", - }, - date: { - weekday: "Sun", - day: "11", - month: "Feb", - year: "2024", - }, - category: "Category", - title: "Event title heading", - location: "Location", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros.", - button: { title: "View event", variant: "link", size: "link", iconRight: }, - }, - ], -}; - - - - -import { Button } from "@relume_io/relume-ui"; -import type { ButtonProps } from "@relume_io/relume-ui"; -import { BiCheck } from "react-icons/bi"; - -type PricingPlan = { - planName: string; - monthlyPrice: string; - yearlyPrice: string; - features: string[]; - button: ButtonProps; -}; - -type Props = { - tagline: string; - heading: string; - description: string; - pricingPlans: PricingPlan[]; -}; - -export type Pricing18Props = React.ComponentPropsWithoutRef<"section"> & Partial; - -export const Pricing18 = (props: Pricing18Props) => { - const { tagline, heading, description, pricingPlans } = { - ...Pricing18Defaults, - ...props, - }; - return ( -
-
-
-

{tagline}

-

- {heading} -

-

{description}

-
-
- {pricingPlans.map((plan, index) => ( -
-
-
-
{plan.planName}
-

- {plan.monthlyPrice} - /mo -

-

or {plan.yearlyPrice} yearly

-
-
- {plan.features.map((feature, index) => ( -
-
- -
-

{feature}

-
- ))} -
-
-
- -
-
- ))} -
-
-
- ); -}; - -export const Pricing18Defaults: Props = { - tagline: "Tagline", - heading: "Pricing plan", - description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", - pricingPlans: [ - { - planName: "Basic plan", - monthlyPrice: "$19", - yearlyPrice: "$199", - features: ["Feature text goes here", "Feature text goes here", "Feature text goes here"], - button: { title: "Get started" }, - }, - { - planName: "Business plan", - monthlyPrice: "$29", - yearlyPrice: "$299", - features: [ - "Feature text goes here", - "Feature text goes here", - "Feature text goes here", - "Feature text goes here", - ], - button: { title: "Get started" }, - }, - { - planName: "Enterprise plan", - monthlyPrice: "$49", - yearlyPrice: "$499", - features: [ - "Feature text goes here", - "Feature text goes here", - "Feature text goes here", - "Feature text goes here", - "Feature text goes here", - ], - button: { title: "Get started" }, - }, - ], -}; - - - - -import { - Button, - Accordion, - AccordionTrigger, - AccordionContent, - AccordionItem, -} from "@relume_io/relume-ui"; -import type { ButtonProps } from "@relume_io/relume-ui"; - -type QuestionsProps = { - title: string; - answer: string; -}; - -type Props = { - heading: string; - description: string; - footerHeading: string; - footerDescription: string; - button: ButtonProps; - questions: QuestionsProps[]; -}; - -export type Faq10Props = React.ComponentPropsWithoutRef<"section"> & Partial; - -export const Faq10 = (props: Faq10Props) => { - const { heading, description, questions, footerHeading, footerDescription, button } = { - ...Faq10Defaults, - ...props, - }; - - const halfLength = Math.ceil(questions.length / 2); - const firstColumnQuestions = questions.slice(0, halfLength); - const secondColumnQuestions = questions.slice(halfLength); - - return ( -
-
-
-

- {heading} -

-

{description}

-
-
- - {firstColumnQuestions.map((question, index) => ( - - {question.title} - {question.answer} - - ))} - - - {secondColumnQuestions.map((question, index) => ( - - {question.title} - {question.answer} - - ))} - -
-
-

- {footerHeading} -

-

{footerDescription}

-
- -
-
-
-
- ); -}; - -export const Faq10Defaults: Props = { - heading: "FAQs", - description: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique.", - questions: [ - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - { - title: "Question text goes here", - answer: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.", - }, - ], - footerHeading: "Still have questions?", - footerDescription: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", - button: { - title: "Contact", - variant: "secondary", - }, -}; - - - - -import { FaXTwitter } from "react-icons/fa6"; -import { - BiLogoFacebookCircle, - BiLogoInstagram, - BiLogoLinkedinSquare, - BiLogoYoutube, -} from "react-icons/bi"; - -type ImageProps = { - url?: string; - src: string; - alt?: string; -}; - -type Links = { - title: string; - url: string; -}; - -type SocialMediaLinks = { - url: string; - icon: React.ReactNode; -}; - -type ColumnLinks = { - links: Links[]; -}; - -type Address = { - label: string; - value: string; -}; - -type Contact = { - label: string; - phone: string; - email: string; -}; - -type Props = { - logo: ImageProps; - address: Address; - contact: Contact; - columnLinks: ColumnLinks[]; - socialMediaLinks: SocialMediaLinks[]; - footerText?: string; - footerLinks: Links[]; -}; - -export type Footer3Props = React.ComponentPropsWithoutRef<"section"> & Partial; - -export const Footer3 = (props: Footer3Props) => { - const { logo, address, contact, columnLinks, socialMediaLinks, footerText, footerLinks } = { - ...Footer3Defaults, - ...props, - }; - return ( -
-
-
-
-
- - {logo.alt} - -
-
-
-

{address.label}

-

{address.value}

-
-
-

{contact.label}

-

- {contact.phone} - {contact.email} -

-
-
-
- {socialMediaLinks.map((link, index) => ( - - {link.icon} - - ))} -
-
-
- {columnLinks.map((column, index) => ( -
    - {column.links.map((link, linkIndex) => ( -
  • - {link.title} -
  • - ))} -
- ))} -
-
-
-
-

{footerText}

-
    - {footerLinks.map((link, index) => ( -
  • - {link.title} -
  • - ))} -
-
-
-
- ); -}; - -export const Footer3Defaults: Props = { - logo: { - url: "#", - src: "https://d22po4pjz3o32e.cloudfront.net/logo-image.svg", - alt: "Logo image", - }, - address: { - label: "Address:", - value: "Level 1, 12 Sample St, Sydney NSW 2000", - }, - contact: { - label: "Contact:", - phone: "1800 123 4567", - email: "info@relume.io", - }, - columnLinks: [ - { - links: [ - { title: "Link One", url: "#" }, - { title: "Link Two", url: "#" }, - { title: "Link Three", url: "#" }, - { title: "Link Four", url: "#" }, - { title: "Link Five", url: "#" }, - ], - }, - { - links: [ - { title: "Link Six", url: "#" }, - { title: "Link Seven", url: "#" }, - { title: "Link Eight", url: "#" }, - { title: "Link Nine", url: "#" }, - { title: "Link Ten", url: "#" }, - ], - }, - ], - socialMediaLinks: [ - { url: "#", icon: }, - { url: "#", icon: }, - { url: "#", icon: }, - { url: "#", icon: }, - { url: "#", icon: }, - ], - footerText: "© 2024 Relume. All rights reserved.", - footerLinks: [ - { title: "Privacy Policy", url: "#" }, - { title: "Terms of Service", url: "#" }, - { title: "Cookies Settings", url: "#" }, - ], -};