fixing features conflicts

This commit is contained in:
gom-by
2025-01-13 14:00:27 +01:00
12 changed files with 3300 additions and 2503 deletions

View File

@@ -0,0 +1,5 @@
import Contact from "@/components/contact";
export default function ContactPage() {
return <Contact />;
}

View File

@@ -2,6 +2,7 @@ import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
import Navbar from "@/components/nav-bar";
import Footer from "@/components/footer";
const geistSans = Geist({
variable: "--font-geist-sans",
@@ -30,6 +31,7 @@ export default function RootLayout({
>
<Navbar />
{children}
<Footer />
</body>
</html>
);

View File

@@ -0,0 +1,24 @@
import { GalleryVerticalEnd } from "lucide-react";
import { LoginForm } from "@/components/login-form";
export default function LoginPage() {
return (
<div className="grid min-h-svh lg:grid-cols-2">
<div className="flex flex-col gap-4 p-6 md:p-10">
<div className="flex flex-1 items-center justify-center">
<div className="w-full max-w-xs">
<LoginForm />
</div>
</div>
</div>
<div className="relative hidden bg-muted lg:block">
<img
src="/placeholder.svg"
alt="Image"
className="absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale"
/>
</div>
</div>
);
}

View File

@@ -1,8 +1,10 @@
"use server";
import Features, { FeatureItem } from "@/components/features";
import Gallery6 from "@/components/gallery";
import Hero from "@/components/hero";
export default function Home() {
export default async function Home() {
return (
<main>
<Hero />

View File

@@ -0,0 +1,91 @@
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Textarea } from "@/components/ui/textarea";
const Contact = () => {
return (
<section className="py-32">
<div className="p-4">
<div className="mx-auto flex max-w-screen-xl flex-col justify-between gap-10 lg:flex-row lg:gap-20">
<div className="self-center max-w-lg flex flex-col justify-between gap-10">
<div className="text-center lg:text-left">
<h1 className="mb-2 text-5xl font-semibold lg:mb-1 lg:text-6xl">
Contactez-nous !
</h1>
<p className="text-muted-foreground">
Nous nous rendons disponible pour répondre à
toutes vos questions.
</p>
</div>
<div className="mx-auto w-fit lg:mx-0">
<h3 className="mb-6 text-center text-2xl font-semibold lg:text-left">
Informations de contact
</h3>
<ul className="ml-4 list-disc">
<li>
<span className="font-bold">
Téléphone:{" "}
</span>
(123) 34567890
</li>
<li>
<span className="font-bold">Email: </span>
<a href="" className="underline">
nicolas.goruk@orange.fr
</a>
</li>
</ul>
</div>
</div>
<div className="mx-auto flex max-w-screen-md flex-col gap-6 rounded-lg border p-10">
<div className="flex gap-4">
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="firstname">Prénom</Label>
<Input
type="text"
id="firstname"
placeholder="Prénom"
/>
</div>
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="lastname">Nom de famille</Label>
<Input
type="text"
id="lastname"
placeholder="Nom de famille"
/>
</div>
</div>
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="email">Email</Label>
<Input
type="email"
id="email"
placeholder="Email"
/>
</div>
<div className="grid w-full items-center gap-1.5">
<Label htmlFor="subject">Objet</Label>
<Input
type="text"
id="subject"
placeholder="Objet"
/>
</div>
<div className="grid w-full gap-1.5">
<Label htmlFor="message">Message</Label>
<Textarea
placeholder="Écrivez votre message ici."
id="message"
/>
</div>
<Button className="w-full">Envoyer</Button>
</div>
</div>
</div>
</section>
);
};
export default Contact;

View File

@@ -0,0 +1,118 @@
import {
FaFacebook,
FaInstagram,
FaLinkedin,
FaTwitter,
FaYoutube,
} from "react-icons/fa";
const sections = [
{
title: "Product",
links: [
{ name: "Overview", href: "#" },
{ name: "Pricing", href: "#" },
{ name: "Marketplace", href: "#" },
{ name: "Features", href: "#" },
],
},
{
title: "Company",
links: [
{ name: "About", href: "#" },
{ name: "Team", href: "#" },
{ name: "Blog", href: "#" },
{ name: "Careers", href: "#" },
],
},
{
title: "Resources",
links: [
{ name: "Help", href: "#" },
{ name: "Sales", href: "#" },
{ name: "Advertise", href: "#" },
{ name: "Privacy", href: "#" },
],
},
];
const Footer = () => {
return (
<section className="p-16">
<div className="">
<footer>
<div className="flex flex-col items-center justify-between gap-10 text-center lg:flex-row lg:text-left">
<div className="flex w-full max-w-96 shrink flex-col items-center justify-between gap-6 lg:items-start">
<div>
<span className="flex items-center justify-center gap-4 lg:justify-start">
<img
src="https://shadcnblocks.com/images/block/block-1.svg"
alt="logo"
className="h-11"
/>
<p className="text-3xl font-semibold">
Latosa-Escrima
</p>
</span>
<p className="mt-6 text-sm text-muted-foreground">
A collection of 100+ responsive HTML
templates for your startup business or side
project.
</p>
</div>
<ul className="flex items-center space-x-6 text-muted-foreground">
<li className="font-medium hover:text-primary">
<a href="https://www.facebook.com/wingtsun.picardie">
<FaFacebook className="size-6" />
</a>
</li>
<li className="font-medium hover:text-primary">
<a href="https://www.youtube.com/@WingTsunPicardie">
<FaYoutube className="size-6" />
</a>
</li>
</ul>
</div>
<div className="grid grid-cols-3 gap-6 lg:gap-20">
{sections.map((section, sectionIdx) => (
<div key={sectionIdx}>
<h3 className="mb-6 font-bold">
{section.title}
</h3>
<ul className="space-y-4 text-sm text-muted-foreground">
{section.links.map((link, linkIdx) => (
<li
key={linkIdx}
className="font-medium hover:text-primary"
>
<a href={link.href}>
{link.name}
</a>
</li>
))}
</ul>
</div>
))}
</div>
</div>
<div className="mt-20 flex flex-col justify-between gap-4 border-t pt-8 text-center text-sm font-medium text-muted-foreground lg:flex-row lg:items-center lg:text-left">
<p>
© {new Date(Date.now()).getFullYear()}{" "}
Latosa-Escrima. Tous droits réservés.
</p>
<ul className="flex justify-center gap-4 lg:justify-start">
<li className="hover:text-primary">
<a href="#"> Terms and Conditions</a>
</li>
<li className="hover:text-primary">
<a href="#"> Privacy Policy</a>
</li>
</ul>
</div>
</footer>
</div>
</section>
);
};
export default Footer;

View File

@@ -4,13 +4,11 @@ import { cn } from "@/lib/utils";
import { Badge } from "@/components/ui/badge";
import { Button, buttonVariants } from "@/components/ui/button";
import Link from "next/link";
const Hero = () => {
return (
<section
style={{ height: "calc(100vh - 68px)" }}
className="flex justify-center items-center relative overflow-hidden py-32"
>
<section className="flex h-[calc(100vh-68px)] justify-center items-center relative overflow-hidden py-32">
<div className="">
<div className="bg-blue-50 magicpattern absolute inset-x-0 top-0 -z-10 flex h-full w-full items-center justify-center opacity-100" />
<div className="mx-auto flex max-w-5xl flex-col items-center">
@@ -30,7 +28,9 @@ const Hero = () => {
</p>
</div>
<div className="mt-4 flex justify-center gap-2">
<Button>Nous contacter</Button>
<Button>
<Link href="/contact">Nous contacter</Link>
</Button>
<Button variant="outline">
À propos
<ExternalLink className="ml-2 h-4" />

View File

@@ -0,0 +1,68 @@
import { cn } from "@/lib/utils";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
export function LoginForm({
className,
...props
}: React.ComponentPropsWithoutRef<"form">) {
return (
<form className={cn("flex flex-col gap-6", className)} {...props}>
<div className="flex flex-col items-center gap-2 text-center">
<h1 className="text-2xl font-bold">
Connectez-vous à votre compte.
</h1>
<p className="text-balance text-sm text-muted-foreground">
Entrez votre adresse e-mail pour vous connecter
</p>
</div>
<div className="grid gap-6">
<div className="grid gap-2">
<Label htmlFor="email">E-Mail</Label>
<Input
id="email"
type="email"
placeholder="m@example.com"
required
/>
</div>
<div className="grid gap-2">
<div className="flex items-center">
<Label htmlFor="password">Mot de passe</Label>
<a
href="#"
className="ml-auto text-sm underline-offset-4 hover:underline"
>
Forgot your password?
</a>
</div>
<Input id="password" type="password" required />
</div>
<Button type="submit" className="w-full">
Se connecter
</Button>
<div className="relative text-center text-sm after:absolute after:inset-0 after:top-1/2 after:z-0 after:flex after:items-center after:border-t after:border-border">
<span className="relative z-10 bg-background px-2 text-muted-foreground">
Ou connectez-vous avec
</span>
</div>
<Button variant="outline" className="w-full">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path
d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"
fill="currentColor"
/>
</svg>
Login with GitHub
</Button>
</div>
<div className="text-center text-sm">
Pas de compte ?{" "}
<a href="#" className="underline underline-offset-4">
Créer un compte
</a>
</div>
</form>
);
}

View File

@@ -25,6 +25,7 @@ import {
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet";
import Link from "next/link";
const subMenuItemsOne = [
{
@@ -75,7 +76,7 @@ const subMenuItemsTwo = [
const Navbar = () => {
return (
<section className="p-4">
<section className="p-4 top-0 sticky bg-white z-[100]">
<div className="">
<nav className="hidden justify-between lg:flex">
<div className="flex items-center gap-6">
@@ -90,7 +91,7 @@ const Navbar = () => {
</span>
</div>
<div className="flex items-center">
<a
<Link
className={cn(
"text-muted-foreground",
navigationMenuTriggerStyle,
@@ -98,10 +99,10 @@ const Navbar = () => {
variant: "ghost",
}),
)}
href="#"
href="/"
>
Home
</a>
Accueil
</Link>
<NavigationMenu>
<NavigationMenuList>
<NavigationMenuItem className="text-muted-foreground">
@@ -208,7 +209,9 @@ const Navbar = () => {
</div>
</div>
<div className="flex gap-2">
<Button variant="outline">Log in</Button>
<Button variant="outline">
<Link href="/login">Se connecter</Link>
</Button>
<Button>Sign up</Button>
</div>
</nav>
@@ -221,7 +224,7 @@ const Navbar = () => {
alt="logo"
/>
<span className="text-xl font-bold">
Shadcn Blocks
Latosa-Escrima
</span>
</div>
<Sheet>
@@ -240,15 +243,15 @@ const Navbar = () => {
alt="logo"
/>
<span className="text-xl font-bold">
Shadcn Blocks
Latosa-Escrima
</span>
</div>
</SheetTitle>
</SheetHeader>
<div className="mb-8 mt-8 flex flex-col gap-4">
<a href="#" className="font-semibold">
Home
</a>
<Link href="/" className="font-semibold">
Accueil
</Link>
<Accordion
type="single"
collapsible
@@ -399,7 +402,9 @@ const Navbar = () => {
</div>
<div className="mt-2 flex flex-col gap-3">
<Button variant="outline">
Log in
<Link href="/login">
Se connecter
</Link>
</Button>
<Button>Sign up</Button>
</div>

View File

@@ -0,0 +1,22 @@
import * as React from "react";
import { cn } from "@/lib/utils";
const Textarea = React.forwardRef<
HTMLTextAreaElement,
React.ComponentProps<"textarea">
>(({ className, ...props }, ref) => {
return (
<textarea
className={cn(
"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
className,
)}
ref={ref}
{...props}
/>
);
});
Textarea.displayName = "Textarea";
export { Textarea };

View File

@@ -2,22 +2,30 @@
"version": "4",
"specifiers": {
"npm:@eslint/eslintrc@3": "3.2.0",
"npm:@radix-ui/react-accordion@^1.2.2": "1.2.2_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0",
"npm:@radix-ui/react-dialog@^1.1.4": "1.1.4_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0",
"npm:@radix-ui/react-label@^2.1.1": "2.1.1_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0",
"npm:@radix-ui/react-navigation-menu@^1.2.3": "1.2.3_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0",
"npm:@radix-ui/react-select@^2.1.4": "2.1.4_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0",
"npm:@radix-ui/react-slot@^1.1.1": "1.1.1_@types+react@19.0.5_react@19.0.0",
"npm:@types/node@20": "20.17.12",
"npm:@types/react-dom@19": "19.0.3_@types+react@19.0.5",
"npm:@types/react@19": "19.0.5",
"npm:class-variance-authority@~0.7.1": "0.7.1",
"npm:clsx@^2.1.1": "2.1.1",
"npm:embla-carousel-react@^8.5.2": "8.5.2_react@19.0.0_embla-carousel@8.5.2",
"npm:eslint-config-next@15.1.4": "15.1.4_eslint@9.18.0_typescript@5.7.3_@typescript-eslint+parser@8.19.1__eslint@9.18.0__typescript@5.7.3_eslint-plugin-import@2.31.0__eslint@9.18.0",
"npm:eslint@9": "9.18.0",
"npm:lucide-react@0.471": "0.471.0_react@19.0.0",
"npm:next@15.1.4": "15.1.4_react@19.0.0_react-dom@19.0.0__react@19.0.0",
"npm:postcss@8": "8.4.49",
"npm:react-dom@19": "19.0.0_react@19.0.0",
"npm:react-icons@^5.4.0": "5.4.0_react@19.0.0",
"npm:react@19": "19.0.0",
"npm:tailwind-merge@^2.6.0": "2.6.0",
"npm:tailwindcss-animate@^1.0.7": "1.0.7_tailwindcss@3.4.17__postcss@8.4.49",
"npm:tailwindcss@^3.4.1": "3.4.17_postcss@8.4.49",
"npm:typescript@5": "5.7.3"
"npm:typescript@^5.7.3": "5.7.3"
},
"npm": {
"@alloc/quick-lru@5.2.0": {
@@ -80,6 +88,30 @@
"levn"
]
},
"@floating-ui/core@1.6.9": {
"integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
"dependencies": [
"@floating-ui/utils"
]
},
"@floating-ui/dom@1.6.13": {
"integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
"dependencies": [
"@floating-ui/core",
"@floating-ui/utils"
]
},
"@floating-ui/react-dom@2.1.2_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
"dependencies": [
"@floating-ui/dom",
"react",
"react-dom"
]
},
"@floating-ui/utils@0.2.9": {
"integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="
},
"@humanfs/core@0.19.1": {
"integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="
},
@@ -274,6 +306,343 @@
"@pkgjs/parseargs@0.11.0": {
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="
},
"@radix-ui/number@1.1.0": {
"integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ=="
},
"@radix-ui/primitive@1.1.1": {
"integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA=="
},
"@radix-ui/react-accordion@1.2.2_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-b1oh54x4DMCdGsB4/7ahiSrViXxaBwRPotiZNnYXjLha9vfuURSAZErki6qjDoSIV0eXx5v57XnTGVtGwnfp2g==",
"dependencies": [
"@radix-ui/primitive",
"@radix-ui/react-collapsible",
"@radix-ui/react-collection",
"@radix-ui/react-compose-refs",
"@radix-ui/react-context",
"@radix-ui/react-direction",
"@radix-ui/react-id",
"@radix-ui/react-primitive",
"@radix-ui/react-use-controllable-state",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-arrow@1.1.1_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==",
"dependencies": [
"@radix-ui/react-primitive",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-collapsible@1.1.2_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-PliMB63vxz7vggcyq0IxNYk8vGDrLXVWw4+W4B8YnwI1s18x7YZYqlG9PLX7XxAJUi0g2DxP4XKJMFHh/iVh9A==",
"dependencies": [
"@radix-ui/primitive",
"@radix-ui/react-compose-refs",
"@radix-ui/react-context",
"@radix-ui/react-id",
"@radix-ui/react-presence",
"@radix-ui/react-primitive",
"@radix-ui/react-use-controllable-state",
"@radix-ui/react-use-layout-effect",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-collection@1.1.1_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==",
"dependencies": [
"@radix-ui/react-compose-refs",
"@radix-ui/react-context",
"@radix-ui/react-primitive",
"@radix-ui/react-slot",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-compose-refs@1.1.1_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
"dependencies": [
"@types/react",
"react"
]
},
"@radix-ui/react-context@1.1.1_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
"dependencies": [
"@types/react",
"react"
]
},
"@radix-ui/react-dialog@1.1.4_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-Ur7EV1IwQGCyaAuyDRiOLA5JIUZxELJljF+MbM/2NC0BYwfuRrbpS30BiQBJrVruscgUkieKkqXYDOoByaxIoA==",
"dependencies": [
"@radix-ui/primitive",
"@radix-ui/react-compose-refs",
"@radix-ui/react-context",
"@radix-ui/react-dismissable-layer",
"@radix-ui/react-focus-guards",
"@radix-ui/react-focus-scope",
"@radix-ui/react-id",
"@radix-ui/react-portal",
"@radix-ui/react-presence",
"@radix-ui/react-primitive",
"@radix-ui/react-slot",
"@radix-ui/react-use-controllable-state",
"@types/react",
"@types/react-dom",
"aria-hidden",
"react",
"react-dom",
"react-remove-scroll"
]
},
"@radix-ui/react-direction@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
"dependencies": [
"@types/react",
"react"
]
},
"@radix-ui/react-dismissable-layer@1.1.3_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-onrWn/72lQoEucDmJnr8uczSNTujT0vJnA/X5+3AkChVPowr8n1yvIKIabhWyMQeMvvmdpsvcyDqx3X1LEXCPg==",
"dependencies": [
"@radix-ui/primitive",
"@radix-ui/react-compose-refs",
"@radix-ui/react-primitive",
"@radix-ui/react-use-callback-ref",
"@radix-ui/react-use-escape-keydown",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-focus-guards@1.1.1_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
"dependencies": [
"@types/react",
"react"
]
},
"@radix-ui/react-focus-scope@1.1.1_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==",
"dependencies": [
"@radix-ui/react-compose-refs",
"@radix-ui/react-primitive",
"@radix-ui/react-use-callback-ref",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-id@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
"dependencies": [
"@radix-ui/react-use-layout-effect",
"@types/react",
"react"
]
},
"@radix-ui/react-label@2.1.1_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw==",
"dependencies": [
"@radix-ui/react-primitive",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-navigation-menu@1.2.3_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-IQWAsQ7dsLIYDrn0WqPU+cdM7MONTv9nqrLVYoie3BPiabSfUVDe6Fr+oEt0Cofsr9ONDcDe9xhmJbL1Uq1yKg==",
"dependencies": [
"@radix-ui/primitive",
"@radix-ui/react-collection",
"@radix-ui/react-compose-refs",
"@radix-ui/react-context",
"@radix-ui/react-direction",
"@radix-ui/react-dismissable-layer",
"@radix-ui/react-id",
"@radix-ui/react-presence",
"@radix-ui/react-primitive",
"@radix-ui/react-use-callback-ref",
"@radix-ui/react-use-controllable-state",
"@radix-ui/react-use-layout-effect",
"@radix-ui/react-use-previous",
"@radix-ui/react-visually-hidden",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-popper@1.2.1_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==",
"dependencies": [
"@floating-ui/react-dom",
"@radix-ui/react-arrow",
"@radix-ui/react-compose-refs",
"@radix-ui/react-context",
"@radix-ui/react-primitive",
"@radix-ui/react-use-callback-ref",
"@radix-ui/react-use-layout-effect",
"@radix-ui/react-use-rect",
"@radix-ui/react-use-size",
"@radix-ui/rect",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-portal@1.1.3_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==",
"dependencies": [
"@radix-ui/react-primitive",
"@radix-ui/react-use-layout-effect",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-presence@1.1.2_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==",
"dependencies": [
"@radix-ui/react-compose-refs",
"@radix-ui/react-use-layout-effect",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-primitive@2.0.1_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==",
"dependencies": [
"@radix-ui/react-slot",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/react-select@2.1.4_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-pOkb2u8KgO47j/h7AylCj7dJsm69BXcjkrvTqMptFqsE2i0p8lHkfgneXKjAgPzBMivnoMyt8o4KiV4wYzDdyQ==",
"dependencies": [
"@radix-ui/number",
"@radix-ui/primitive",
"@radix-ui/react-collection",
"@radix-ui/react-compose-refs",
"@radix-ui/react-context",
"@radix-ui/react-direction",
"@radix-ui/react-dismissable-layer",
"@radix-ui/react-focus-guards",
"@radix-ui/react-focus-scope",
"@radix-ui/react-id",
"@radix-ui/react-popper",
"@radix-ui/react-portal",
"@radix-ui/react-primitive",
"@radix-ui/react-slot",
"@radix-ui/react-use-callback-ref",
"@radix-ui/react-use-controllable-state",
"@radix-ui/react-use-layout-effect",
"@radix-ui/react-use-previous",
"@radix-ui/react-visually-hidden",
"@types/react",
"@types/react-dom",
"aria-hidden",
"react",
"react-dom",
"react-remove-scroll"
]
},
"@radix-ui/react-slot@1.1.1_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==",
"dependencies": [
"@radix-ui/react-compose-refs",
"@types/react",
"react"
]
},
"@radix-ui/react-use-callback-ref@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
"dependencies": [
"@types/react",
"react"
]
},
"@radix-ui/react-use-controllable-state@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
"dependencies": [
"@radix-ui/react-use-callback-ref",
"@types/react",
"react"
]
},
"@radix-ui/react-use-escape-keydown@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
"dependencies": [
"@radix-ui/react-use-callback-ref",
"@types/react",
"react"
]
},
"@radix-ui/react-use-layout-effect@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
"dependencies": [
"@types/react",
"react"
]
},
"@radix-ui/react-use-previous@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
"dependencies": [
"@types/react",
"react"
]
},
"@radix-ui/react-use-rect@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
"dependencies": [
"@radix-ui/rect",
"@types/react",
"react"
]
},
"@radix-ui/react-use-size@1.1.0_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
"dependencies": [
"@radix-ui/react-use-layout-effect",
"@types/react",
"react"
]
},
"@radix-ui/react-visually-hidden@1.1.1_@types+react@19.0.5_@types+react-dom@19.0.3__@types+react@19.0.5_react@19.0.0_react-dom@19.0.0__react@19.0.0": {
"integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==",
"dependencies": [
"@radix-ui/react-primitive",
"@types/react",
"@types/react-dom",
"react",
"react-dom"
]
},
"@radix-ui/rect@1.1.0": {
"integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="
},
"@rtsao/scc@1.1.0": {
"integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="
},
@@ -447,6 +816,12 @@
"argparse@2.0.1": {
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
},
"aria-hidden@1.2.4": {
"integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
"dependencies": [
"tslib"
]
},
"aria-query@5.3.2": {
"integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="
},
@@ -744,6 +1119,9 @@
"detect-libc@2.0.3": {
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw=="
},
"detect-node-es@1.1.0": {
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
},
"didyoumean@1.2.2": {
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
},
@@ -767,6 +1145,23 @@
"eastasianwidth@0.2.0": {
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"embla-carousel-react@8.5.2_react@19.0.0_embla-carousel@8.5.2": {
"integrity": "sha512-Tmx+uY3MqseIGdwp0ScyUuxpBgx5jX1f7od4Cm5mDwg/dptEiTKf9xp6tw0lZN2VA9JbnVMl/aikmbc53c6QFA==",
"dependencies": [
"embla-carousel",
"embla-carousel-reactive-utils",
"react"
]
},
"embla-carousel-reactive-utils@8.5.2_embla-carousel@8.5.2": {
"integrity": "sha512-QC8/hYSK/pEmqEdU1IO5O+XNc/Ptmmq7uCB44vKplgLKhB/l0+yvYx0+Cv0sF6Ena8Srld5vUErZkT+yTahtDg==",
"dependencies": [
"embla-carousel"
]
},
"embla-carousel@8.5.2": {
"integrity": "sha512-xQ9oVLrun/eCG/7ru3R+I5bJ7shsD8fFwLEY7yPe27/+fDHCNj0OT5EoG5ZbFyOxOcG6yTwW8oTz/dWyFnyGpg=="
},
"emoji-regex@8.0.0": {
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
@@ -1207,6 +1602,9 @@
"math-intrinsics"
]
},
"get-nonce@1.0.1": {
"integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="
},
"get-proto@1.0.1": {
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dependencies": [
@@ -1883,9 +2281,45 @@
"scheduler"
]
},
"react-icons@5.4.0_react@19.0.0": {
"integrity": "sha512-7eltJxgVt7X64oHh6wSWNwwbKTCtMfK35hcjvJS0yxEAhPM8oUKdS3+kqaW1vicIltw+kR2unHaa12S9pPALoQ==",
"dependencies": [
"react"
]
},
"react-is@16.13.1": {
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"react-remove-scroll-bar@2.3.8_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
"dependencies": [
"@types/react",
"react",
"react-style-singleton",
"tslib"
]
},
"react-remove-scroll@2.6.2_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==",
"dependencies": [
"@types/react",
"react",
"react-remove-scroll-bar",
"react-style-singleton",
"tslib",
"use-callback-ref",
"use-sidecar"
]
},
"react-style-singleton@2.2.3_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
"dependencies": [
"@types/react",
"get-nonce",
"react",
"tslib"
]
},
"react@19.0.0": {
"integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ=="
},
@@ -2378,6 +2812,23 @@
"punycode"
]
},
"use-callback-ref@1.3.3_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
"dependencies": [
"@types/react",
"react",
"tslib"
]
},
"use-sidecar@1.1.3_@types+react@19.0.5_react@19.0.0": {
"integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
"dependencies": [
"@types/react",
"detect-node-es",
"react",
"tslib"
]
},
"util-deprecate@1.0.2": {
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
@@ -2465,22 +2916,30 @@
"packageJson": {
"dependencies": [
"npm:@eslint/eslintrc@3",
"npm:@radix-ui/react-accordion@^1.2.2",
"npm:@radix-ui/react-dialog@^1.1.4",
"npm:@radix-ui/react-label@^2.1.1",
"npm:@radix-ui/react-navigation-menu@^1.2.3",
"npm:@radix-ui/react-select@^2.1.4",
"npm:@radix-ui/react-slot@^1.1.1",
"npm:@types/node@20",
"npm:@types/react-dom@19",
"npm:@types/react@19",
"npm:class-variance-authority@~0.7.1",
"npm:clsx@^2.1.1",
"npm:embla-carousel-react@^8.5.2",
"npm:eslint-config-next@15.1.4",
"npm:eslint@9",
"npm:lucide-react@0.471",
"npm:next@15.1.4",
"npm:postcss@8",
"npm:react-dom@19",
"npm:react-icons@^5.4.0",
"npm:react@19",
"npm:tailwind-merge@^2.6.0",
"npm:tailwindcss-animate@^1.0.7",
"npm:tailwindcss@^3.4.1",
"npm:typescript@5"
"npm:typescript@^5.7.3"
]
}
}

View File

@@ -22,6 +22,7 @@
"next": "15.1.4",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-icons": "^5.4.0",
"tailwind-merge": "^2.6.0",
"tailwindcss-animate": "^1.0.7"
},