diff --git a/.source/index.ts b/.source/index.ts index 498a0bce..e3aece72 100644 --- a/.source/index.ts +++ b/.source/index.ts @@ -1,15 +1,15 @@ // @ts-nocheck -- skip type checking -import * as docs_10 from "../content/docs/extensions/quicksnip.mdx?collection=docs&hash=1759902334815" -import * as docs_9 from "../content/docs/extensions/quicksnip-vscode.mdx?collection=docs&hash=1759902334815" -import * as docs_8 from "../content/docs/extensions/quicksnip-raycast.mdx?collection=docs&hash=1759902334815" -import * as docs_7 from "../content/docs/extensions/quicksnip-cli.mdx?collection=docs&hash=1759902334815" -import * as docs_6 from "../content/docs/contributing/third-party-apps.mdx?collection=docs&hash=1759902334815" -import * as docs_5 from "../content/docs/contributing/modifying-snippets.mdx?collection=docs&hash=1759902334815" -import * as docs_4 from "../content/docs/contributing/how-to-contribute.mdx?collection=docs&hash=1759902334815" -import * as docs_3 from "../content/docs/contributing/adding-snippets.mdx?collection=docs&hash=1759902334815" -import * as docs_2 from "../content/docs/installation.mdx?collection=docs&hash=1759902334815" -import * as docs_1 from "../content/docs/index.mdx?collection=docs&hash=1759902334815" -import * as docs_0 from "../content/docs/comparison.mdx?collection=docs&hash=1759902334815" +import * as docs_10 from "../content/docs/extensions/quicksnip.mdx?collection=docs&hash=1765841507830" +import * as docs_9 from "../content/docs/extensions/quicksnip-vscode.mdx?collection=docs&hash=1765841507830" +import * as docs_8 from "../content/docs/extensions/quicksnip-raycast.mdx?collection=docs&hash=1765841507830" +import * as docs_7 from "../content/docs/extensions/quicksnip-cli.mdx?collection=docs&hash=1765841507830" +import * as docs_6 from "../content/docs/contributing/third-party-apps.mdx?collection=docs&hash=1765841507830" +import * as docs_5 from "../content/docs/contributing/modifying-snippets.mdx?collection=docs&hash=1765841507830" +import * as docs_4 from "../content/docs/contributing/how-to-contribute.mdx?collection=docs&hash=1765841507830" +import * as docs_3 from "../content/docs/contributing/adding-snippets.mdx?collection=docs&hash=1765841507830" +import * as docs_2 from "../content/docs/installation.mdx?collection=docs&hash=1765841507830" +import * as docs_1 from "../content/docs/index.mdx?collection=docs&hash=1765841507830" +import * as docs_0 from "../content/docs/comparison.mdx?collection=docs&hash=1765841507830" import { _runtime } from "fumadocs-mdx/runtime/next" import * as _source from "../source.config" -export const docs = _runtime.docs([{ info: {"path":"comparison.mdx","fullPath":"content\\docs\\comparison.mdx"}, data: docs_0 }, { info: {"path":"index.mdx","fullPath":"content\\docs\\index.mdx"}, data: docs_1 }, { info: {"path":"installation.mdx","fullPath":"content\\docs\\installation.mdx"}, data: docs_2 }, { info: {"path":"contributing/adding-snippets.mdx","fullPath":"content\\docs\\contributing\\adding-snippets.mdx"}, data: docs_3 }, { info: {"path":"contributing/how-to-contribute.mdx","fullPath":"content\\docs\\contributing\\how-to-contribute.mdx"}, data: docs_4 }, { info: {"path":"contributing/modifying-snippets.mdx","fullPath":"content\\docs\\contributing\\modifying-snippets.mdx"}, data: docs_5 }, { info: {"path":"contributing/third-party-apps.mdx","fullPath":"content\\docs\\contributing\\third-party-apps.mdx"}, data: docs_6 }, { info: {"path":"extensions/quicksnip-cli.mdx","fullPath":"content\\docs\\extensions\\quicksnip-cli.mdx"}, data: docs_7 }, { info: {"path":"extensions/quicksnip-raycast.mdx","fullPath":"content\\docs\\extensions\\quicksnip-raycast.mdx"}, data: docs_8 }, { info: {"path":"extensions/quicksnip-vscode.mdx","fullPath":"content\\docs\\extensions\\quicksnip-vscode.mdx"}, data: docs_9 }, { info: {"path":"extensions/quicksnip.mdx","fullPath":"content\\docs\\extensions\\quicksnip.mdx"}, data: docs_10 }], [{"info":{"path":"meta.json","fullPath":"content\\docs\\meta.json"},"data":{"title":"Docs","pages":["---Introduction---","index.mdx","installation.mdx","comparison.mdx","---Extensions---","...extensions","---Contributing---","...contributing"],"root":true}}, {"info":{"path":"extensions/meta.json","fullPath":"content\\docs\\extensions\\meta.json"},"data":{"title":"Extensions","pages":["quicksnip","quicksnip-cli","quicksnip-vscode","quicksnip-raycast"]}}, {"info":{"path":"contributing/meta.json","fullPath":"content\\docs\\contributing\\meta.json"},"data":{"title":"Contributing","pages":["how-to-contribute","adding-snippets","modifying-snippets","third-party-apps"]}}]) \ No newline at end of file +export const docs = _runtime.docs([{ info: {"path":"comparison.mdx","fullPath":"content/docs/comparison.mdx"}, data: docs_0 }, { info: {"path":"index.mdx","fullPath":"content/docs/index.mdx"}, data: docs_1 }, { info: {"path":"installation.mdx","fullPath":"content/docs/installation.mdx"}, data: docs_2 }, { info: {"path":"contributing/adding-snippets.mdx","fullPath":"content/docs/contributing/adding-snippets.mdx"}, data: docs_3 }, { info: {"path":"contributing/how-to-contribute.mdx","fullPath":"content/docs/contributing/how-to-contribute.mdx"}, data: docs_4 }, { info: {"path":"contributing/modifying-snippets.mdx","fullPath":"content/docs/contributing/modifying-snippets.mdx"}, data: docs_5 }, { info: {"path":"contributing/third-party-apps.mdx","fullPath":"content/docs/contributing/third-party-apps.mdx"}, data: docs_6 }, { info: {"path":"extensions/quicksnip-cli.mdx","fullPath":"content/docs/extensions/quicksnip-cli.mdx"}, data: docs_7 }, { info: {"path":"extensions/quicksnip-raycast.mdx","fullPath":"content/docs/extensions/quicksnip-raycast.mdx"}, data: docs_8 }, { info: {"path":"extensions/quicksnip-vscode.mdx","fullPath":"content/docs/extensions/quicksnip-vscode.mdx"}, data: docs_9 }, { info: {"path":"extensions/quicksnip.mdx","fullPath":"content/docs/extensions/quicksnip.mdx"}, data: docs_10 }], [{"info":{"path":"meta.json","fullPath":"content/docs/meta.json"},"data":{"title":"Docs","pages":["---Introduction---","index.mdx","installation.mdx","comparison.mdx","---Extensions---","...extensions","---Contributing---","...contributing"],"root":true}}, {"info":{"path":"contributing/meta.json","fullPath":"content/docs/contributing/meta.json"},"data":{"title":"Contributing","pages":["how-to-contribute","adding-snippets","modifying-snippets","third-party-apps"]}}, {"info":{"path":"extensions/meta.json","fullPath":"content/docs/extensions/meta.json"},"data":{"title":"Extensions","pages":["quicksnip","quicksnip-cli","quicksnip-vscode","quicksnip-raycast"]}}]) \ No newline at end of file diff --git a/.source/source.config.mjs b/.source/source.config.mjs deleted file mode 100644 index 30ec6e06..00000000 --- a/.source/source.config.mjs +++ /dev/null @@ -1,24 +0,0 @@ -// source.config.ts -import { - defineConfig, - defineDocs, - frontmatterSchema, - metaSchema -} from "fumadocs-mdx/config"; -var docs = defineDocs({ - docs: { - schema: frontmatterSchema - }, - meta: { - schema: metaSchema - } -}); -var source_config_default = defineConfig({ - mdxOptions: { - // MDX options - } -}); -export { - source_config_default as default, - docs -}; diff --git a/package-lock.json b/package-lock.json index 374eda0d..4a68b3d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-switch": "^1.2.5", + "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.2.8", "@types/mdx": "^2.0.13", "class-variance-authority": "^0.7.1", @@ -28,7 +29,7 @@ "fumadocs-mdx": "^12.0.3", "fumadocs-ui": "^15.6.9", "lucide-react": "^0.535.0", - "next": "15.4.5", + "next": "15.4.10", "radix-ui": "^1.4.3", "react": "^19.1.0", "react-dom": "^19.1.0", @@ -1313,9 +1314,9 @@ } }, "node_modules/@next/env": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.5.tgz", - "integrity": "sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==", + "version": "15.4.10", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.10.tgz", + "integrity": "sha512-knhmoJ0Vv7VRf6pZEPSnciUG1S4bIhWx+qTYBW/AjxEtlzsiNORPk8sFDCEvqLfmKuey56UB9FL1UdHEV3uBrg==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { @@ -1329,9 +1330,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.5.tgz", - "integrity": "sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==", + "version": "15.4.8", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.8.tgz", + "integrity": "sha512-Pf6zXp7yyQEn7sqMxur6+kYcywx5up1J849psyET7/8pG2gQTVMjU3NzgIt8SeEP5to3If/SaWmaA6H6ysBr1A==", "cpu": [ "arm64" ], @@ -1345,9 +1346,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.5.tgz", - "integrity": "sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==", + "version": "15.4.8", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.8.tgz", + "integrity": "sha512-xla6AOfz68a6kq3gRQccWEvFC/VRGJmA/QuSLENSO7CZX5WIEkSz7r1FdXUjtGCQ1c2M+ndUAH7opdfLK1PQbw==", "cpu": [ "x64" ], @@ -1361,9 +1362,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.5.tgz", - "integrity": "sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==", + "version": "15.4.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.8.tgz", + "integrity": "sha512-y3fmp+1Px/SJD+5ntve5QLZnGLycsxsVPkTzAc3zUiXYSOlTPqT8ynfmt6tt4fSo1tAhDPmryXpYKEAcoAPDJw==", "cpu": [ "arm64" ], @@ -1377,9 +1378,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.5.tgz", - "integrity": "sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==", + "version": "15.4.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.8.tgz", + "integrity": "sha512-DX/L8VHzrr1CfwaVjBQr3GWCqNNFgyWJbeQ10Lx/phzbQo3JNAxUok1DZ8JHRGcL6PgMRgj6HylnLNndxn4Z6A==", "cpu": [ "arm64" ], @@ -1393,9 +1394,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.5.tgz", - "integrity": "sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==", + "version": "15.4.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.8.tgz", + "integrity": "sha512-9fLAAXKAL3xEIFdKdzG5rUSvSiZTLLTCc6JKq1z04DR4zY7DbAPcRvNm3K1inVhTiQCs19ZRAgUerHiVKMZZIA==", "cpu": [ "x64" ], @@ -1409,9 +1410,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.5.tgz", - "integrity": "sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==", + "version": "15.4.8", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.8.tgz", + "integrity": "sha512-s45V7nfb5g7dbS7JK6XZDcapicVrMMvX2uYgOHP16QuKH/JA285oy6HcxlKqwUNaFY/UC6EvQ8QZUOo19cBKSA==", "cpu": [ "x64" ], @@ -1425,9 +1426,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.5.tgz", - "integrity": "sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==", + "version": "15.4.8", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.8.tgz", + "integrity": "sha512-KjgeQyOAq7t/HzAJcWPGA8X+4WY03uSCZ2Ekk98S9OgCFsb6lfBE3dbUzUuEQAN2THbwYgFfxX2yFTCMm8Kehw==", "cpu": [ "arm64" ], @@ -1441,9 +1442,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.5.tgz", - "integrity": "sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==", + "version": "15.4.8", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.8.tgz", + "integrity": "sha512-Exsmf/+42fWVnLMaZHzshukTBxZrSwuuLKFvqhGHJ+mC1AokqieLY/XzAl3jc/CqhXLqLY3RRjkKJ9YnLPcRWg==", "cpu": [ "x64" ], @@ -8996,12 +8997,12 @@ } }, "node_modules/next": { - "version": "15.4.5", - "resolved": "https://registry.npmjs.org/next/-/next-15.4.5.tgz", - "integrity": "sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==", + "version": "15.4.10", + "resolved": "https://registry.npmjs.org/next/-/next-15.4.10.tgz", + "integrity": "sha512-itVlc79QjpKMFMRhP+kbGKaSG/gZM6RCvwhEbwmCNF06CdDiNaoHcbeg0PqkEa2GOcn8KJ0nnc7+yL7EjoYLHQ==", "license": "MIT", "dependencies": { - "@next/env": "15.4.5", + "@next/env": "15.4.10", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", @@ -9014,14 +9015,14 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.4.5", - "@next/swc-darwin-x64": "15.4.5", - "@next/swc-linux-arm64-gnu": "15.4.5", - "@next/swc-linux-arm64-musl": "15.4.5", - "@next/swc-linux-x64-gnu": "15.4.5", - "@next/swc-linux-x64-musl": "15.4.5", - "@next/swc-win32-arm64-msvc": "15.4.5", - "@next/swc-win32-x64-msvc": "15.4.5", + "@next/swc-darwin-arm64": "15.4.8", + "@next/swc-darwin-x64": "15.4.8", + "@next/swc-linux-arm64-gnu": "15.4.8", + "@next/swc-linux-arm64-musl": "15.4.8", + "@next/swc-linux-x64-gnu": "15.4.8", + "@next/swc-linux-x64-musl": "15.4.8", + "@next/swc-win32-arm64-msvc": "15.4.8", + "@next/swc-win32-x64-msvc": "15.4.8", "sharp": "^0.34.3" }, "peerDependencies": { diff --git a/package.json b/package.json index 98305b07..43e72c82 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slot": "^1.2.3", "@radix-ui/react-switch": "^1.2.5", + "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tooltip": "^1.2.8", "@types/mdx": "^2.0.13", "class-variance-authority": "^0.7.1", @@ -30,7 +31,7 @@ "fumadocs-mdx": "^12.0.3", "fumadocs-ui": "^15.6.9", "lucide-react": "^0.535.0", - "next": "15.4.5", + "next": "15.4.10", "radix-ui": "^1.4.3", "react": "^19.1.0", "react-dom": "^19.1.0", diff --git a/src/app/snippets/[category]/[snippet]/page.tsx b/src/app/snippets/[category]/[snippet]/page.tsx index 7cfd1e42..c863ab89 100644 --- a/src/app/snippets/[category]/[snippet]/page.tsx +++ b/src/app/snippets/[category]/[snippet]/page.tsx @@ -3,10 +3,21 @@ import { use } from "react"; import { useRouter } from "next/navigation"; +import Link from "next/link"; -import { Button } from "@/components/ui/button"; +import { Loader, XIcon } from "lucide-react"; -import { unslugify } from "@/lib/utils"; +import { FullSnippet } from "@/types"; +import { useFetch } from "@/hooks/use-fetch"; +import { Button } from "@/components/ui/button"; +import CodePreview from "@/components/layouts/code-preview"; +import { + Card, + CardContent, + CardFooter, + CardHeader, +} from "@/components/ui/card"; +import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; interface Props { params: Promise<{ category: string; snippet: string }>; @@ -15,6 +26,9 @@ interface Props { export default function SnippetPage({ params }: Props) { const router = useRouter(); const { category, snippet } = use(params); + const { data, loading } = useFetch( + `/data/snippets/${category}/${snippet}.json` + ); const handleCloseModal = () => { /** @@ -26,15 +40,55 @@ export default function SnippetPage({ params }: Props) { else router.push("/snippets"); }; + if (loading) return ; + if (!data) return null; + return (
-
-

- {unslugify(category)} / {unslugify(snippet)} -

-

Snippet details here

- -
+ + +

{data.title}

+ +
+ +

{data.description}

+ +
+ +
+

Contributors:

+
+ {data.contributors.map((contributor) => ( + + + {contributor.slice(0, 2)} + + ))} +
+
+
    + {data.tags.map((tag) => ( +
  • + + {tag} + +
  • + ))} +
+
+
); } diff --git a/src/components/layouts/code-preview.tsx b/src/components/layouts/code-preview.tsx new file mode 100644 index 00000000..8b5b5bf0 --- /dev/null +++ b/src/components/layouts/code-preview.tsx @@ -0,0 +1,46 @@ +import { Prism as SyntaxHighlighter } from "react-syntax-highlighter"; +import { oneDark } from "react-syntax-highlighter/dist/esm/styles/prism"; + +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; + +// import CopyToClipboard from "./CopyToClipboard"; +// import CopyURLButton from "./CopyURLButton"; + +type Props = { + languages: string[]; + snippets: Record; +}; + +const CodePreview = ({ languages, snippets }: Props) => { + return ( +
+ + + {languages.map((language) => ( + + {language} + + ))} + + {Object.keys(snippets).map((language) => { + const code = snippets[language as keyof typeof snippets]; + + return ( + + + {code} + + + ); + })} + +
+ ); +}; + +export default CodePreview; diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx new file mode 100644 index 00000000..497ba5ea --- /dev/null +++ b/src/components/ui/tabs.tsx @@ -0,0 +1,66 @@ +"use client" + +import * as React from "react" +import * as TabsPrimitive from "@radix-ui/react-tabs" + +import { cn } from "@/lib/utils" + +function Tabs({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function TabsList({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function TabsTrigger({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +function TabsContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { Tabs, TabsList, TabsTrigger, TabsContent } diff --git a/src/hooks/use-fetch.ts b/src/hooks/use-fetch.ts new file mode 100644 index 00000000..a9c91ac4 --- /dev/null +++ b/src/hooks/use-fetch.ts @@ -0,0 +1,28 @@ +import { useEffect, useState } from "react"; + +export const useFetch = (url: string) => { + const [data, setData] = useState(null); + const [error, setError] = useState(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const fetchData = async () => { + try { + const res = await fetch(url); + if (!res.ok) { + throw new Error(`Failed to fetch data from ${url}`); + } + const result: T = await res.json(); + setData(result); + } catch (err) { + setError((err as Error).message); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, [url]); + + return { data, loading, error }; +}; diff --git a/src/types/index.ts b/src/types/index.ts index 20711bd6..6b61c9b5 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -16,3 +16,14 @@ export type SnippetType = { contributors: string[]; tags: string[]; }; + +export type FullSnippet = { + id: string; + category: string; + title: string; + description: string; + languages: string[]; + contributors: string[]; + tags: string[]; + snippets: Record; +};