style navlinks
This commit is contained in:
		
							parent
							
								
									96db18580e
								
							
						
					
					
						commit
						5aaa45cade
					
				|  | @ -1,8 +1,8 @@ | ||||||
| @tailwind base; | @tailwind base; | ||||||
|   @tailwind components; | @tailwind components; | ||||||
|   @tailwind utilities; | @tailwind utilities; | ||||||
| 
 | 
 | ||||||
|   @layer base { | @layer base { | ||||||
|   :root { |   :root { | ||||||
|     --background: 0 0% 100%; |     --background: 0 0% 100%; | ||||||
|     --foreground: 222.2 84% 4.9%; |     --foreground: 222.2 84% 4.9%; | ||||||
|  | @ -64,13 +64,14 @@ | ||||||
|     --input: 217.2 32.6% 17.5%; |     --input: 217.2 32.6% 17.5%; | ||||||
|     --ring: 212.7 26.8% 83.9%; |     --ring: 212.7 26.8% 83.9%; | ||||||
|   } |   } | ||||||
|   } | } | ||||||
| 
 | 
 | ||||||
|   @layer base { | @layer base { | ||||||
|   * { |   * { | ||||||
|     @apply border-border; |     @apply border-border; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|   body { |   body { | ||||||
|     @apply bg-background text-foreground; |     @apply bg-background text-foreground; | ||||||
|   } |   } | ||||||
|   } | } | ||||||
|  |  | ||||||
|  | @ -1,10 +1,12 @@ | ||||||
| import type { Metadata } from "next"; | import type { Metadata } from "next"; | ||||||
| import { Inter } from "next/font/google"; | import { Inter } from "next/font/google"; | ||||||
|  | 
 | ||||||
| import { Toaster } from "@/components/ui/toaster"; | import { Toaster } from "@/components/ui/toaster"; | ||||||
| import "./tailwind.css"; | import "./tailwind.css"; | ||||||
| import Link from "next/link"; | import Link from "next/link"; | ||||||
| import { ComponentProps } from "react"; | import { ComponentProps } from "react"; | ||||||
| import { Send } from "lucide-react"; | import { Send } from "lucide-react"; | ||||||
|  | import Navlinks from "./ui/navLinks"; | ||||||
| 
 | 
 | ||||||
| const inter = Inter({ subsets: ["latin"] }); | const inter = Inter({ subsets: ["latin"] }); | ||||||
| 
 | 
 | ||||||
|  | @ -31,12 +33,10 @@ export default function RootLayout({ | ||||||
|         <div id="layout-container" className="flex p-4"> |         <div id="layout-container" className="flex p-4"> | ||||||
|           <div id="sidebar" > |           <div id="sidebar" > | ||||||
|             <header className="mb-6"> |             <header className="mb-6"> | ||||||
|               <h1 className="font-black text-6xl antialiased inline">SubMan</h1> <Send className="inline" size={"3rem"} /> |               <h1 className="font-black text-6xl antialiased inline">SubMan</h1> <Send className="inline mb-6" size={"3rem"} /> | ||||||
|               <p className="font-bold text-xl antialiased">The self-hosted literary<br />  submission tracker.</p> |               <p className="font-bold text-xl antialiased">The self-hosted literary<br />  submission tracker.</p> | ||||||
|             </header> |             </header> | ||||||
|             <NavLink href="/story">STORIES</NavLink> |             <Navlinks /> | ||||||
|             <NavLink href="/publication">PUBLICATIONS</NavLink> |  | ||||||
|             <NavLink href="/submission">SUBMISSIONS</NavLink> |  | ||||||
|           </div> |           </div> | ||||||
|           {children} |           {children} | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|  | @ -4,6 +4,7 @@ import { columns } from "app/submission/columns" | ||||||
| import { PageHeader, PageSubHeader } from "app/ui/pageHeader" | import { PageHeader, PageSubHeader } from "app/ui/pageHeader" | ||||||
| import { DataTable } from "app/ui/tables/data-table" | import { DataTable } from "app/ui/tables/data-table" | ||||||
| import { Badge } from "@/components/ui/badge" | import { Badge } from "@/components/ui/badge" | ||||||
|  | import GenreBadges from "app/ui/genreBadges" | ||||||
| 
 | 
 | ||||||
| //ids are string here because they're coming from url params
 | //ids are string here because they're coming from url params
 | ||||||
| async function getStoryWithGenres(id: string) { | async function getStoryWithGenres(id: string) { | ||||||
|  | @ -30,7 +31,7 @@ export default async function Page({ params }: { params: { id: string } }) { | ||||||
|   return <> |   return <> | ||||||
|     <div className="container"> |     <div className="container"> | ||||||
|       <PageHeader>{data?.title ?? ""}</PageHeader> |       <PageHeader>{data?.title ?? ""}</PageHeader> | ||||||
|       {data.genres.map(e => (<Badge>{e.name}</Badge>))} |       <GenreBadges genres={data.genres} className="my-6" /> | ||||||
|       <PageSubHeader>Submissions:</PageSubHeader> |       <PageSubHeader>Submissions:</PageSubHeader> | ||||||
|       <DataTable columns={columns} data={storySubs} /> |       <DataTable columns={columns} data={storySubs} /> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -17,6 +17,7 @@ import { | ||||||
| import { deleteStory } from "app/lib/del" | import { deleteStory } from "app/lib/del" | ||||||
| import Link from "next/link" | import Link from "next/link" | ||||||
| import { DialogClose } from "@radix-ui/react-dialog" | import { DialogClose } from "@radix-ui/react-dialog" | ||||||
|  | import GenreBadges from "app/ui/genreBadges" | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| const columnHelper = createColumnHelper<StoryWithGenres>() | const columnHelper = createColumnHelper<StoryWithGenres>() | ||||||
|  | @ -55,8 +56,7 @@ export const columns: ColumnDef<StoryWithGenres>[] = [ | ||||||
|   columnHelper.accessor("genres", { |   columnHelper.accessor("genres", { | ||||||
|     cell: props => { |     cell: props => { | ||||||
|       const genres = props.getValue() |       const genres = props.getValue() | ||||||
|         .map(e => <Badge>{e.name}</Badge>) |       return <GenreBadges genres={genres} /> | ||||||
|       return genres |  | ||||||
|     }, |     }, | ||||||
|     filterFn: "arrIncludes" |     filterFn: "arrIncludes" | ||||||
|     //TODO - write custom filter function, to account for an array of objects
 |     //TODO - write custom filter function, to account for an array of objects
 | ||||||
|  |  | ||||||
|  | @ -684,14 +684,6 @@ body { | ||||||
|   z-index: 100; |   z-index: 100; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .m-4 { |  | ||||||
|   margin: 1rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .m-2 { |  | ||||||
|   margin: 0.5rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .-mx-1 { | .-mx-1 { | ||||||
|   margin-left: -0.25rem; |   margin-left: -0.25rem; | ||||||
|   margin-right: -0.25rem; |   margin-right: -0.25rem; | ||||||
|  | @ -712,10 +704,19 @@ body { | ||||||
|   margin-bottom: 0.5rem; |   margin-bottom: 0.5rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .my-6 { | ||||||
|  |   margin-top: 1.5rem; | ||||||
|  |   margin-bottom: 1.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .mb-4 { | .mb-4 { | ||||||
|   margin-bottom: 1rem; |   margin-bottom: 1rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .mb-6 { | ||||||
|  |   margin-bottom: 1.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .ml-2 { | .ml-2 { | ||||||
|   margin-left: 0.5rem; |   margin-left: 0.5rem; | ||||||
| } | } | ||||||
|  | @ -728,12 +729,12 @@ body { | ||||||
|   margin-top: 0.5rem; |   margin-top: 0.5rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .mt-4 { | .mt-3 { | ||||||
|   margin-top: 1rem; |   margin-top: 0.75rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .mb-6 { | .mt-4 { | ||||||
|   margin-bottom: 1.5rem; |   margin-top: 1rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .inline { | .inline { | ||||||
|  | @ -877,38 +878,6 @@ body { | ||||||
|   width: 100%; |   width: 100%; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .w-3\/4 { |  | ||||||
|   width: 75%; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .w-1\/5 { |  | ||||||
|   width: 20%; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .w-11 { |  | ||||||
|   width: 2.75rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .w-5 { |  | ||||||
|   width: 1.25rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .w-8 { |  | ||||||
|   width: 2rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .w-6 { |  | ||||||
|   width: 1.5rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .w-16 { |  | ||||||
|   width: 4rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .w-20 { |  | ||||||
|   width: 5rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .min-w-\[8rem\] { | .min-w-\[8rem\] { | ||||||
|   min-width: 8rem; |   min-width: 8rem; | ||||||
| } | } | ||||||
|  | @ -1297,23 +1266,25 @@ body { | ||||||
|   text-align: center; |   text-align: center; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .text-right { |  | ||||||
|   text-align: right; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .align-middle { | .align-middle { | ||||||
|   vertical-align: middle; |   vertical-align: middle; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .font-display { |  | ||||||
|   font-family: Playfair; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .text-3xl { | .text-3xl { | ||||||
|   font-size: 1.875rem; |   font-size: 1.875rem; | ||||||
|   line-height: 2.25rem; |   line-height: 2.25rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .text-4xl { | ||||||
|  |   font-size: 2.25rem; | ||||||
|  |   line-height: 2.5rem; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .text-6xl { | ||||||
|  |   font-size: 3.75rem; | ||||||
|  |   line-height: 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .text-\[0\.8rem\] { | .text-\[0\.8rem\] { | ||||||
|   font-size: 0.8rem; |   font-size: 0.8rem; | ||||||
| } | } | ||||||
|  | @ -1333,30 +1304,24 @@ body { | ||||||
|   line-height: 1.25rem; |   line-height: 1.25rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .text-xs { |  | ||||||
|   font-size: 0.75rem; |  | ||||||
|   line-height: 1rem; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .text-xl { | .text-xl { | ||||||
|   font-size: 1.25rem; |   font-size: 1.25rem; | ||||||
|   line-height: 1.75rem; |   line-height: 1.75rem; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .text-4xl { | .text-xs { | ||||||
|   font-size: 2.25rem; |   font-size: 0.75rem; | ||||||
|   line-height: 2.5rem; |   line-height: 1rem; | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .text-6xl { |  | ||||||
|   font-size: 3.75rem; |  | ||||||
|   line-height: 1; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .font-black { | .font-black { | ||||||
|   font-weight: 900; |   font-weight: 900; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .font-bold { | ||||||
|  |   font-weight: 700; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .font-medium { | .font-medium { | ||||||
|   font-weight: 500; |   font-weight: 500; | ||||||
| } | } | ||||||
|  | @ -1369,10 +1334,6 @@ body { | ||||||
|   font-weight: 600; |   font-weight: 600; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .font-bold { |  | ||||||
|   font-weight: 700; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .capitalize { | .capitalize { | ||||||
|   text-transform: capitalize; |   text-transform: capitalize; | ||||||
| } | } | ||||||
|  | @ -1433,6 +1394,11 @@ body { | ||||||
|   color: hsl(var(--secondary-foreground)); |   color: hsl(var(--secondary-foreground)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .text-slate-50 { | ||||||
|  |   --tw-text-opacity: 1; | ||||||
|  |   color: rgb(248 250 252 / var(--tw-text-opacity)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .text-white { | .text-white { | ||||||
|   --tw-text-opacity: 1; |   --tw-text-opacity: 1; | ||||||
|   color: rgb(255 255 255 / var(--tw-text-opacity)); |   color: rgb(255 255 255 / var(--tw-text-opacity)); | ||||||
|  |  | ||||||
|  | @ -0,0 +1,11 @@ | ||||||
|  | import { Genre } from "@prisma/client"; | ||||||
|  | import { ComponentProps } from "react"; | ||||||
|  | import { Badge } from "@/components/ui/badge"; | ||||||
|  | 
 | ||||||
|  | export default function GenreBadges(props: ComponentProps<"div"> & { genres: Array<Genre> }) { | ||||||
|  |   return ( | ||||||
|  |     <div className={props.className}> | ||||||
|  |       {props.genres.map((e: Genre) => (<Badge key={e.name}>{e.name}</Badge>))} | ||||||
|  |     </div> | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  | @ -0,0 +1,33 @@ | ||||||
|  | "use client" | ||||||
|  | import Link from "next/link"; | ||||||
|  | import { usePathname } from "next/navigation"; | ||||||
|  | import { ComponentProps } from "react"; | ||||||
|  | import clsx from "clsx"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | function NavLink(props: ComponentProps<"div"> & { href: string }) { | ||||||
|  |   return ( | ||||||
|  |     <Link href={props.href}><h1 className={props.className}>{props.children}</h1></Link> | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  | export default function Navlinks(props: ComponentProps<"div">) { | ||||||
|  |   const pathname = usePathname() | ||||||
|  |   const links = [ | ||||||
|  |     { link: "/story", label: "STORIES" }, | ||||||
|  |     { link: "/publication", label: "PUBLICATIONS" }, | ||||||
|  |     { link: "/submission", label: "SUBMISSIONS" }, | ||||||
|  |   ] | ||||||
|  |   return ( | ||||||
|  |     <> | ||||||
|  |       {links.map(e => (<NavLink key={e.link} href={e.link} | ||||||
|  |         className={clsx("text-4xl font-black my-2", | ||||||
|  |           { | ||||||
|  |             "text-destructive": pathname === e.link | ||||||
|  |           } | ||||||
|  |         )} | ||||||
|  |       >{e.label}</NavLink >)) | ||||||
|  |       } | ||||||
|  |       {pathname} | ||||||
|  |     </> | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  | @ -1,9 +1,9 @@ | ||||||
| import { ComponentProps } from "react" | import { ComponentProps } from "react" | ||||||
| 
 | 
 | ||||||
| export function PageHeader(props: ComponentProps<"h1">) { | export function PageHeader(props: ComponentProps<"h1">) { | ||||||
|   return <h1 className="text-3xl font-display font-bold">{props.children}</h1> |   return <h1 className="text-3xl font-bold mt-3">{props.children}</h1> | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export function PageSubHeader(props: ComponentProps<"h2">) { | export function PageSubHeader(props: ComponentProps<"h2">) { | ||||||
|   return <h2 className="text-xl font-display font-bold">{props.children}</h2> |   return <h2 className="text-xl font-bold">{props.children}</h2> | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -82,4 +82,3 @@ module.exports = { | ||||||
|   }, |   }, | ||||||
|   plugins: [require("tailwindcss-animate")], |   plugins: [require("tailwindcss-animate")], | ||||||
| }; | }; | ||||||
| 
 |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue