diff --git a/public/example-image.jpg b/public/example-image.jpg new file mode 100644 index 0000000..3b2711b Binary files /dev/null and b/public/example-image.jpg differ diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx index 8c92378..6b27be0 100644 --- a/src/app/home/page.tsx +++ b/src/app/home/page.tsx @@ -1,4 +1,4 @@ -import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'; +import NewsCard from "@/components/news-card"; export default function Page(){ return ( @@ -8,15 +8,12 @@ export default function Page(){ Home -
- - - News title - - -

Hello World!

-
-
+
+ + + + +
); diff --git a/src/components/news-card.tsx b/src/components/news-card.tsx new file mode 100644 index 0000000..ae6d44a --- /dev/null +++ b/src/components/news-card.tsx @@ -0,0 +1,27 @@ +import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from '@/components/ui/card'; +import Image from 'next/image'; +import { Button } from "@/components/ui/button"; + +export default function NewsCard(){ + return ( + + + News title + That's just some story + + + News article + + + + + + + ); +} \ No newline at end of file diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx new file mode 100644 index 0000000..a2df8dc --- /dev/null +++ b/src/components/ui/button.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90", + destructive: + "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2 has-[>svg]:px-3", + sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + icon: "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +function Button({ + className, + variant, + size, + asChild = false, + ...props +}: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean + }) { + const Comp = asChild ? Slot : "button" + + return ( + + ) +} + +export { Button, buttonVariants }