Compare commits

...

8 Commits

9 changed files with 55 additions and 96 deletions

View File

@@ -36,12 +36,13 @@
"@radix-ui/react-toggle": "^1.1.9", "@radix-ui/react-toggle": "^1.1.9",
"@radix-ui/react-toggle-group": "^1.1.10", "@radix-ui/react-toggle-group": "^1.1.10",
"@radix-ui/react-tooltip": "^1.2.7", "@radix-ui/react-tooltip": "^1.2.7",
"cheerio": "^1.1.2", "cheerio": "1.0.0-rc.12",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"cmdk": "^1.1.1", "cmdk": "^1.1.1",
"date-fns": "^3.6.0", "date-fns": "^3.6.0",
"embla-carousel-react": "^8.6.0", "embla-carousel-react": "^8.6.0",
"geist": "^1.5.1",
"input-otp": "^1.4.2", "input-otp": "^1.4.2",
"lucide-react": "^0.511.0", "lucide-react": "^0.511.0",
"next": "15.3.8", "next": "15.3.8",

87
pnpm-lock.yaml generated
View File

@@ -90,8 +90,8 @@ importers:
specifier: ^1.2.7 specifier: ^1.2.7
version: 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) version: 1.2.7(@types/react-dom@19.1.5(@types/react@19.1.5))(@types/react@19.1.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
cheerio: cheerio:
specifier: ^1.1.2 specifier: 1.0.0-rc.12
version: 1.1.2 version: 1.0.0-rc.12
class-variance-authority: class-variance-authority:
specifier: ^0.7.1 specifier: ^0.7.1
version: 0.7.1 version: 0.7.1
@@ -107,6 +107,9 @@ importers:
embla-carousel-react: embla-carousel-react:
specifier: ^8.6.0 specifier: ^8.6.0
version: 8.6.0(react@19.2.1) version: 8.6.0(react@19.2.1)
geist:
specifier: ^1.5.1
version: 1.5.1(next@15.3.8(react-dom@19.2.1(react@19.2.1))(react@19.2.1))
input-otp: input-otp:
specifier: ^1.4.2 specifier: ^1.4.2
version: 1.4.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1) version: 1.4.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
@@ -1250,9 +1253,9 @@ packages:
cheerio-select@2.1.0: cheerio-select@2.1.0:
resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
cheerio@1.1.2: cheerio@1.0.0-rc.12:
resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
engines: {node: '>=20.18.1'} engines: {node: '>= 6'}
chokidar@3.6.0: chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
@@ -1422,9 +1425,6 @@ packages:
emoji-regex@9.2.2: emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
encoding-sniffer@0.2.1:
resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==}
enhanced-resolve@5.18.1: enhanced-resolve@5.18.1:
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
@@ -1503,6 +1503,11 @@ packages:
function-bind@1.1.2: function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
geist@1.5.1:
resolution: {integrity: sha512-mAHZxIsL2o3ZITFaBVFBnwyDOw+zNLYum6A6nIjpzCGIO8QtC3V76XF2RnZTyLx1wlDTmMDy8jg3Ib52MIjGvQ==}
peerDependencies:
next: '>=13.2.0'
get-nonce@1.0.1: get-nonce@1.0.1:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -1533,12 +1538,8 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
htmlparser2@10.0.0: htmlparser2@8.0.2:
resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
input-otp@1.4.2: input-otp@1.4.2:
resolution: {integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==} resolution: {integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==}
@@ -1718,9 +1719,6 @@ packages:
parse5-htmlparser2-tree-adapter@7.1.0: parse5-htmlparser2-tree-adapter@7.1.0:
resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
parse5-parser-stream@7.1.2:
resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
parse5@7.3.0: parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
@@ -1915,9 +1913,6 @@ packages:
safe-buffer@5.2.1: safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
scheduler@0.27.0: scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
@@ -2081,10 +2076,6 @@ packages:
undici-types@6.19.8: undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
undici@7.18.2:
resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==}
engines: {node: '>=20.18.1'}
update-browserslist-db@1.1.3: update-browserslist-db@1.1.3:
resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
hasBin: true hasBin: true
@@ -2146,15 +2137,6 @@ packages:
webpack-cli: webpack-cli:
optional: true optional: true
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
which@2.0.2: which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
@@ -3254,19 +3236,15 @@ snapshots:
domhandler: 5.0.3 domhandler: 5.0.3
domutils: 3.2.2 domutils: 3.2.2
cheerio@1.1.2: cheerio@1.0.0-rc.12:
dependencies: dependencies:
cheerio-select: 2.1.0 cheerio-select: 2.1.0
dom-serializer: 2.0.0 dom-serializer: 2.0.0
domhandler: 5.0.3 domhandler: 5.0.3
domutils: 3.2.2 domutils: 3.2.2
encoding-sniffer: 0.2.1 htmlparser2: 8.0.2
htmlparser2: 10.0.0
parse5: 7.3.0 parse5: 7.3.0
parse5-htmlparser2-tree-adapter: 7.1.0 parse5-htmlparser2-tree-adapter: 7.1.0
parse5-parser-stream: 7.1.2
undici: 7.18.2
whatwg-mimetype: 4.0.0
chokidar@3.6.0: chokidar@3.6.0:
dependencies: dependencies:
@@ -3438,11 +3416,6 @@ snapshots:
emoji-regex@9.2.2: {} emoji-regex@9.2.2: {}
encoding-sniffer@0.2.1:
dependencies:
iconv-lite: 0.6.3
whatwg-encoding: 3.1.1
enhanced-resolve@5.18.1: enhanced-resolve@5.18.1:
dependencies: dependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@@ -3507,6 +3480,10 @@ snapshots:
function-bind@1.1.2: {} function-bind@1.1.2: {}
geist@1.5.1(next@15.3.8(react-dom@19.2.1(react@19.2.1))(react@19.2.1)):
dependencies:
next: 15.3.8(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
get-nonce@1.0.1: {} get-nonce@1.0.1: {}
glob-parent@5.1.2: glob-parent@5.1.2:
@@ -3536,16 +3513,12 @@ snapshots:
dependencies: dependencies:
function-bind: 1.1.2 function-bind: 1.1.2
htmlparser2@10.0.0: htmlparser2@8.0.2:
dependencies: dependencies:
domelementtype: 2.3.0 domelementtype: 2.3.0
domhandler: 5.0.3 domhandler: 5.0.3
domutils: 3.2.2 domutils: 3.2.2
entities: 6.0.1 entities: 4.5.0
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
input-otp@1.4.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1): input-otp@1.4.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
dependencies: dependencies:
@@ -3699,10 +3672,6 @@ snapshots:
domhandler: 5.0.3 domhandler: 5.0.3
parse5: 7.3.0 parse5: 7.3.0
parse5-parser-stream@7.1.2:
dependencies:
parse5: 7.3.0
parse5@7.3.0: parse5@7.3.0:
dependencies: dependencies:
entities: 6.0.1 entities: 6.0.1
@@ -3889,8 +3858,6 @@ snapshots:
safe-buffer@5.2.1: {} safe-buffer@5.2.1: {}
safer-buffer@2.1.2: {}
scheduler@0.27.0: {} scheduler@0.27.0: {}
schema-utils@4.3.2: schema-utils@4.3.2:
@@ -4079,8 +4046,6 @@ snapshots:
undici-types@6.19.8: {} undici-types@6.19.8: {}
undici@7.18.2: {}
update-browserslist-db@1.1.3(browserslist@4.25.0): update-browserslist-db@1.1.3(browserslist@4.25.0):
dependencies: dependencies:
browserslist: 4.25.0 browserslist: 4.25.0
@@ -4172,12 +4137,6 @@ snapshots:
- esbuild - esbuild
- uglify-js - uglify-js
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
whatwg-mimetype@4.0.0: {}
which@2.0.2: which@2.0.2:
dependencies: dependencies:
isexe: 2.0.0 isexe: 2.0.0

View File

@@ -134,7 +134,9 @@ export async function extractMetaData(url: string, keyword?: string) {
const path: HeadlineNode[] = []; const path: HeadlineNode[] = [];
$("h1, h2, h3, h4, h5, h6").each((i, el) => { $("h1, h2, h3, h4, h5, h6").each((i, el) => {
const tag = $(el).prop("tagName").toLowerCase(); const tagName = $(el).prop("tagName");
if (!tagName) return;
const tag = tagName.toLowerCase();
const text = $(el).text().trim(); const text = $(el).text().trim();
if (!text) return; if (!text) return;

View File

@@ -1,19 +1,10 @@
import type { Metadata } from "next"; import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google"; import { GeistSans } from "geist/font/sans";
import { GeistMono } from "geist/font/mono";
import "./globals.css"; import "./globals.css";
import { ThemeProvider } from "@/components/theme-provider"; import { ThemeProvider } from "@/components/theme-provider";
import { Toaster } from "@/components/ui/sonner"; import { Toaster } from "@/components/ui/sonner";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Create Next App", title: "Create Next App",
description: "Generated by create next app", description: "Generated by create next app",
@@ -27,7 +18,7 @@ export default function RootLayout({
return ( return (
<html lang="en" suppressHydrationWarning> <html lang="en" suppressHydrationWarning>
<body <body
className={`${geistSans.variable} ${geistMono.variable} antialiased`} className={`${GeistSans.variable} ${GeistMono.variable} antialiased font-sans`}
> >
<ThemeProvider <ThemeProvider
attribute="class" attribute="class"

View File

@@ -4,7 +4,7 @@ import { Tags } from "lucide-react";
export default function Home() { export default function Home() {
return ( return (
<div className="flex flex-col min-h-screen font-[family-name:var(--font-geist-sans)] bg-background"> <div className="flex flex-col min-h-screen bg-background">
<main className="flex-grow flex items-center justify-center p-4 sm:p-8"> <main className="flex-grow flex items-center justify-center p-4 sm:p-8">
<div className="flex flex-col gap-8 items-center w-full max-w-6xl"> <div className="flex flex-col gap-8 items-center w-full max-w-6xl">
<div className="text-center space-y-4"> <div className="text-center space-y-4">

View File

@@ -49,7 +49,7 @@ export function ImageAltDisplay({ images, keyword }: ImageAltDisplayProps) {
if (sortOrder === "asc") { if (sortOrder === "asc") {
return sizeA - sizeB; return sizeA - sizeB;
} else { } else {
return sizeB - a.size; return sizeB - sizeA;
} }
}); });

View File

@@ -15,16 +15,19 @@ interface SchemaDisplayProps {
} }
export function SchemaDisplay({ schemas }: SchemaDisplayProps) { export function SchemaDisplay({ schemas }: SchemaDisplayProps) {
const groupedSchemas = schemas.reduce((acc, schema) => { const groupedSchemas = schemas.reduce(
const type = Array.isArray(schema["@type"]) (acc: Record<string, any[]>, schema: any) => {
? schema["@type"].join(", ") const type = Array.isArray(schema["@type"])
: schema["@type"] || "Untyped"; ? schema["@type"].join(", ")
if (!acc[type]) { : schema["@type"] || "Untyped";
acc[type] = []; if (!acc[type]) {
} acc[type] = [];
acc[type].push(schema); }
return acc; acc[type].push(schema);
}, {} as Record<string, any[]>); return acc;
},
{}
);
const SchemaContent = ({ schema }: { schema: any }) => { const SchemaContent = ({ schema }: { schema: any }) => {
const schemaJson = JSON.stringify(schema, null, 2); const schemaJson = JSON.stringify(schema, null, 2);
@@ -55,7 +58,7 @@ export function SchemaDisplay({ schemas }: SchemaDisplayProps) {
</div> </div>
<Accordion type="multiple" className="w-full space-y-4"> <Accordion type="multiple" className="w-full space-y-4">
{Object.entries(groupedSchemas).map( {Object.entries(groupedSchemas).map(
([type, schemaGroup], groupIndex) => ( ([type, schemaGroup]: [string, any[]], groupIndex: number) => (
<AccordionItem <AccordionItem
value={`group-${type}-${groupIndex}`} value={`group-${type}-${groupIndex}`}
key={groupIndex} key={groupIndex}
@@ -74,7 +77,7 @@ export function SchemaDisplay({ schemas }: SchemaDisplayProps) {
type="multiple" type="multiple"
className="w-full space-y-2" className="w-full space-y-2"
> >
{schemaGroup.map((schema, schemaIndex) => ( {schemaGroup.map((schema: any, schemaIndex: number) => (
<AccordionItem <AccordionItem
value={`schema-${groupIndex}-${schemaIndex}`} value={`schema-${groupIndex}-${schemaIndex}`}
key={schemaIndex} key={schemaIndex}

View File

@@ -1,8 +1,7 @@
"use client" "use client"
import * as React from "react" import * as React from "react"
import { ThemeProvider as NextThemesProvider } from "next-themes" import { ThemeProvider as NextThemesProvider, type ThemeProviderProps } from "next-themes"
import { type ThemeProviderProps } from "next-themes/dist/types"
export function ThemeProvider({ children, ...props }: ThemeProviderProps) { export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
return <NextThemesProvider {...props}>{children}</NextThemesProvider> return <NextThemesProvider {...props}>{children}</NextThemesProvider>

View File

@@ -9,6 +9,10 @@ export default {
], ],
theme: { theme: {
extend: { extend: {
fontFamily: {
sans: ["var(--font-geist-sans)"],
mono: ["var(--font-geist-mono)"],
},
colors: { colors: {
background: 'hsl(var(--background))', background: 'hsl(var(--background))',
foreground: 'hsl(var(--foreground))', foreground: 'hsl(var(--foreground))',