enzostvs HF staff commited on
Commit
702763e
1 Parent(s): e4741e5

hugger roaster v1

Browse files
.gitignore CHANGED
@@ -34,3 +34,4 @@ yarn-error.log*
34
  # typescript
35
  *.tsbuildinfo
36
  next-env.d.ts
 
 
34
  # typescript
35
  *.tsbuildinfo
36
  next-env.d.ts
37
+ .env
Dockerfile ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Dockerfile
2
+ # Use an official Node.js runtime as the base image
3
+ FROM node:18
4
+
5
+ # Set the working directory in the container
6
+ WORKDIR /usr/src/app
7
+
8
+ # Copy package.json and package-lock.json to the container
9
+ COPY package.json package-lock.json ./
10
+
11
+ # Install dependencies
12
+ RUN npm install
13
+
14
+ # Copy the rest of the application files to the container
15
+ COPY . .
16
+
17
+ # Build the Next.js application for production
18
+ RUN npm run build
19
+
20
+ # Expose the application port (assuming your app runs on port 3000)
21
+ EXPOSE 3000
22
+
23
+ # Start the application
24
+ CMD ["npm", "start"]
README.md CHANGED
@@ -1,36 +1,13 @@
1
- This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2
-
3
- ## Getting Started
4
-
5
- First, run the development server:
6
-
7
- ```bash
8
- npm run dev
9
- # or
10
- yarn dev
11
- # or
12
- pnpm dev
13
- # or
14
- bun dev
15
- ```
16
-
17
- Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
18
-
19
- You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
20
-
21
- This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
22
-
23
- ## Learn More
24
-
25
- To learn more about Next.js, take a look at the following resources:
26
-
27
- - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
28
- - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
29
-
30
- You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
31
-
32
- ## Deploy on Vercel
33
-
34
- The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
35
-
36
- Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
 
1
+ ---
2
+ title: Hugger Roaster
3
+ emoji: 🧨
4
+ colorFrom: red
5
+ colorTo: gray
6
+ sdk: docker
7
+ pinned: true
8
+ app_port: 3000
9
+ short_description: Roast any Hugging Face profile
10
+ license: mit
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/actions/check_user.ts ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use server";
2
+
3
+ export const check_user = async (username: string) => {
4
+ const userResponse = await fetch(
5
+ `https://huggingface.co/api/users/${username}/overview`
6
+ );
7
+ const user = await userResponse.json();
8
+ if (!user || user.error) {
9
+ return false;
10
+ }
11
+
12
+ return true;
13
+ }
app/actions/roast.ts ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use server"
2
+
3
+ import { AutoTokenizer } from "@xenova/transformers";
4
+ import { HfInference } from '@huggingface/inference'
5
+
6
+ import { formatInformations, transformForInference } from "@/utils/roast";
7
+ import { FormProps } from "@/components/form";
8
+
9
+ const MODEL_ID = "meta-llama/Meta-Llama-3.1-70B-Instruct";
10
+
11
+ export async function roast({ username, language }: FormProps) {
12
+ const userResponse = await fetch(`https://huggingface.co/api/users/${username}/overview`);
13
+ const user = await userResponse.json();
14
+ if (!user || user.error) {
15
+ return { error: user.error ?? "Something wrong happened, please retry.", status: 404 };
16
+ }
17
+
18
+ if (!username) {
19
+ return { error: "Please provide a valid username", status: 400 };
20
+ }
21
+
22
+ const requests = Promise.all([
23
+ await fetch(`https://huggingface.co/api/users/${username}/following`),
24
+ await fetch(`https://huggingface.co/api/users/${username}/followers`),
25
+ await fetch(`https://huggingface.co/api/spaces?author=${username}&sort=likes&limit=300&full=false&l`),
26
+ await fetch(`https://huggingface.co/api/models?author=${username}&sort=downloads&limit=300&full=false`),
27
+ await fetch(`https://huggingface.co/api/collections?owner=${username}&limit=100&sort=upvotes&full=false`)
28
+ ]);
29
+
30
+ const [followingResponse, followersResponse, spacesResponse, modelsResponse, collectionsResponse] = await requests;
31
+ const [following, followers, spaces, models, collections] = await Promise.all([
32
+ followingResponse.json(),
33
+ followersResponse.json(),
34
+ spacesResponse.json(),
35
+ modelsResponse.json(),
36
+ collectionsResponse.json()
37
+ ]);
38
+ const [spacesLikes, modelsLikes] = [spaces, models].map((items) => items.reduce((acc: number, item: any) => acc + item.likes, 0));
39
+ const collectionsUpvotes = collections?.reduce((acc: number, item: any) => acc + item.upvotes, 0);
40
+
41
+ const datas = formatInformations(user, following.length, followers.length, spaces, models, collections, spacesLikes, modelsLikes, collectionsUpvotes);
42
+ const chat = transformForInference(datas, language, username);
43
+
44
+ const hf = new HfInference(process.env.HF_ACCESS_TOKEN);
45
+ const tokenizer = await AutoTokenizer.from_pretrained("philschmid/meta-llama-3-tokenizer")
46
+
47
+ const formattedPrompt = tokenizer.apply_chat_template(chat, { tokenize: false, add_generation_prompt: true })
48
+ const res = await hf.textGeneration({
49
+ model: MODEL_ID,
50
+ inputs: formattedPrompt as string,
51
+ parameters: {
52
+ return_full_text: false,
53
+ max_new_tokens: 1024,
54
+ stop_sequences: ["<|end|>", "<|endoftext|>", "<|assistant|>"],
55
+ }
56
+ }, {
57
+ use_cache: false,
58
+ })
59
+
60
+ return {
61
+ data: res.generated_text.match(/"(.*?)"/)?.[1],
62
+ }
63
+ }
app/api/roast/route.ts ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { NextResponse } from "next/server";
2
+
3
+ export async function POST(req: Request) {
4
+ const body = await req.json();
5
+ console.log(body);
6
+
7
+ // fetch the user's username from the body
8
+ const { username } = body;
9
+
10
+ // fetch user from hugging face API
11
+ const user = await fetch(`https://huggingface.co/api/users/${username}`);
12
+
13
+ console.log(user);
14
+
15
+ return NextResponse.json({ message: "Roasted!" });
16
+ }
app/globals.css DELETED
@@ -1,33 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- :root {
6
- --foreground-rgb: 0, 0, 0;
7
- --background-start-rgb: 214, 219, 220;
8
- --background-end-rgb: 255, 255, 255;
9
- }
10
-
11
- @media (prefers-color-scheme: dark) {
12
- :root {
13
- --foreground-rgb: 255, 255, 255;
14
- --background-start-rgb: 0, 0, 0;
15
- --background-end-rgb: 0, 0, 0;
16
- }
17
- }
18
-
19
- body {
20
- color: rgb(var(--foreground-rgb));
21
- background: linear-gradient(
22
- to bottom,
23
- transparent,
24
- rgb(var(--background-end-rgb))
25
- )
26
- rgb(var(--background-start-rgb));
27
- }
28
-
29
- @layer utilities {
30
- .text-balance {
31
- text-wrap: balance;
32
- }
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/layout.tsx CHANGED
@@ -1,6 +1,6 @@
1
  import type { Metadata } from "next";
2
  import { Inter } from "next/font/google";
3
- import "./globals.css";
4
 
5
  const inter = Inter({ subsets: ["latin"] });
6
 
 
1
  import type { Metadata } from "next";
2
  import { Inter } from "next/font/google";
3
+ import "@/styles/globals.css";
4
 
5
  const inter = Inter({ subsets: ["latin"] });
6
 
app/page.tsx CHANGED
@@ -1,113 +1,86 @@
 
 
1
  import Image from "next/image";
 
 
 
 
 
 
2
 
3
  export default function Home() {
4
- return (
5
- <main className="flex min-h-screen flex-col items-center justify-between p-24">
6
- <div className="z-10 w-full max-w-5xl items-center justify-between font-mono text-sm lg:flex">
7
- <p className="fixed left-0 top-0 flex w-full justify-center border-b border-gray-300 bg-gradient-to-b from-zinc-200 pb-6 pt-8 backdrop-blur-2xl dark:border-neutral-800 dark:bg-zinc-800/30 dark:from-inherit lg:static lg:w-auto lg:rounded-xl lg:border lg:bg-gray-200 lg:p-4 lg:dark:bg-zinc-800/30">
8
- Get started by editing&nbsp;
9
- <code className="font-mono font-bold">app/page.tsx</code>
10
- </p>
11
- <div className="fixed bottom-0 left-0 flex h-48 w-full items-end justify-center bg-gradient-to-t from-white via-white dark:from-black dark:via-black lg:static lg:size-auto lg:bg-none">
12
- <a
13
- className="pointer-events-none flex place-items-center gap-2 p-8 lg:pointer-events-auto lg:p-0"
14
- href="https://vercel.com?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
15
- target="_blank"
16
- rel="noopener noreferrer"
17
- >
18
- By{" "}
19
- <Image
20
- src="/vercel.svg"
21
- alt="Vercel Logo"
22
- className="dark:invert"
23
- width={100}
24
- height={24}
25
- priority
26
- />
27
- </a>
28
- </div>
29
- </div>
30
 
31
- <div className="relative z-[-1] flex place-items-center before:absolute before:h-[300px] before:w-full before:-translate-x-1/2 before:rounded-full before:bg-gradient-radial before:from-white before:to-transparent before:blur-2xl before:content-[''] after:absolute after:-z-20 after:h-[180px] after:w-full after:translate-x-1/3 after:bg-gradient-conic after:from-sky-200 after:via-blue-200 after:blur-2xl after:content-[''] before:dark:bg-gradient-to-br before:dark:from-transparent before:dark:to-blue-700 before:dark:opacity-10 after:dark:from-sky-900 after:dark:via-[#0141ff] after:dark:opacity-40 sm:before:w-[480px] sm:after:w-[240px] before:lg:h-[360px]">
32
- <Image
33
- className="relative dark:drop-shadow-[0_0_0.3rem_#ffffff70] dark:invert"
34
- src="/next.svg"
35
- alt="Next.js Logo"
36
- width={180}
37
- height={37}
38
- priority
39
- />
40
- </div>
41
 
42
- <div className="mb-32 grid text-center lg:mb-0 lg:w-full lg:max-w-5xl lg:grid-cols-4 lg:text-left">
43
- <a
44
- href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
45
- className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
46
- target="_blank"
47
- rel="noopener noreferrer"
48
- >
49
- <h2 className="mb-3 text-2xl font-semibold">
50
- Docs{" "}
51
- <span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
52
- -&gt;
53
- </span>
54
- </h2>
55
- <p className="m-0 max-w-[30ch] text-sm opacity-50">
56
- Find in-depth information about Next.js features and API.
57
- </p>
58
- </a>
59
 
60
- <a
61
- href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
62
- className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
63
- target="_blank"
64
- rel="noopener noreferrer"
65
- >
66
- <h2 className="mb-3 text-2xl font-semibold">
67
- Learn{" "}
68
- <span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
69
- -&gt;
70
- </span>
71
- </h2>
72
- <p className="m-0 max-w-[30ch] text-sm opacity-50">
73
- Learn about Next.js in an interactive course with&nbsp;quizzes!
74
- </p>
75
- </a>
76
 
77
- <a
78
- href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
79
- className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
80
- target="_blank"
81
- rel="noopener noreferrer"
82
- >
83
- <h2 className="mb-3 text-2xl font-semibold">
84
- Templates{" "}
85
- <span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
86
- -&gt;
87
- </span>
88
- </h2>
89
- <p className="m-0 max-w-[30ch] text-sm opacity-50">
90
- Explore starter templates for Next.js.
91
- </p>
92
- </a>
93
 
94
- <a
95
- href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
96
- className="group rounded-lg border border-transparent px-5 py-4 transition-colors hover:border-gray-300 hover:bg-gray-100 hover:dark:border-neutral-700 hover:dark:bg-neutral-800/30"
97
- target="_blank"
98
- rel="noopener noreferrer"
99
- >
100
- <h2 className="mb-3 text-2xl font-semibold">
101
- Deploy{" "}
102
- <span className="inline-block transition-transform group-hover:translate-x-1 motion-reduce:transform-none">
103
- -&gt;
104
- </span>
105
- </h2>
106
- <p className="m-0 max-w-[30ch] text-balance text-sm opacity-50">
107
- Instantly deploy your Next.js site to a shareable URL with Vercel.
108
- </p>
109
- </a>
 
 
 
 
 
 
 
 
110
  </div>
111
- </main>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  );
113
  }
 
1
+ "use client";
2
+ import { useState } from "react";
3
  import Image from "next/image";
4
+ import classNames from "classnames";
5
+
6
+ import { roast } from "@/app/actions/roast";
7
+ import { Form, FormProps } from "@/components/form";
8
+
9
+ import Logo from "@/assets/logo.svg";
10
 
11
  export default function Home() {
12
+ const [data, setData] = useState("");
13
+ const [error, setError] = useState("");
14
+ const [loading, setLoading] = useState(false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
+ const handleRoast = async (form: FormProps) => {
17
+ setError("");
18
+ setData("");
19
+ setLoading(true);
 
 
 
 
 
 
20
 
21
+ const res: {
22
+ error?: string;
23
+ data?: any;
24
+ } = await roast(form);
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
+ if (res.error) {
27
+ setError(res.error);
28
+ } else {
29
+ setData(res?.data);
30
+ }
 
 
 
 
 
 
 
 
 
 
 
31
 
32
+ setLoading(false);
33
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
 
35
+ return (
36
+ <section className="h-screen w-full flex items-center justify-center flex-col bg-zinc-100 gap-5">
37
+ <div className="max-w-2xl w-full border border-gray-200 bg-white rounded-3xl p-8 grid gap-8 shadow-xl shadow-black/5">
38
+ <header className="flex items-center justify-between border-b border-zinc-200 pb-5">
39
+ <Image
40
+ src={Logo}
41
+ alt="logo hugging face"
42
+ width={100}
43
+ height={100}
44
+ className="object-contain w-36 lg:w-44"
45
+ />
46
+ <div>
47
+ <p className="text-sm text-zinc-500">
48
+ Roast your favorite Hugging Face user! 👹
49
+ </p>
50
+ </div>
51
+ </header>
52
+ {error && (
53
+ <div className="text-sm text-red-600 bg-red-500/10 border-[1px] border-red-500/15 px-3.5 py-2.5 rounded-xl">
54
+ <p className="font-semibold text-sm">Oops!</p>
55
+ {error}
56
+ </div>
57
+ )}
58
+ <Form loading={loading} onSubmit={handleRoast} />
59
  </div>
60
+ {data && (
61
+ <div className="max-w-2xl w-full border border-gray-200 bg-white rounded-3xl p-8 shadow-xl shadow-black/5 relative z-[1] overflow-hidden">
62
+ <p className="text-[8rem] absolute bottom-0 translate-y-1/3 right-0 opacity-20 -z-[1]">
63
+ 🧨
64
+ </p>
65
+ <p className="uppercase text-base tracking-wider font-semibold mb-2">
66
+ Roasting
67
+ </p>
68
+ <p className="text-lg text-gray-500 leading-relaxed container mx-auto text-pretty">
69
+ {data}
70
+ </p>
71
+ <button
72
+ className={classNames(
73
+ "bg-black rounded-full mt-4 px-4 py-2.5 text-sm font-medium text-white hover:bg-zinc-800 disabled:bg-zinc-300 disabled:text-zinc-500 disabled:cursor-not-allowed",
74
+ {
75
+ // "animate-pulse": loading,
76
+ }
77
+ )}
78
+ disabled={true}
79
+ >
80
+ Share (coming soon)
81
+ </button>
82
+ </div>
83
+ )}
84
+ </section>
85
  );
86
  }
assets/logo.svg ADDED
components/form.tsx ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import classNames from "classnames";
5
+
6
+ import { Input } from "./input";
7
+ import { Select } from "./select";
8
+
9
+ interface Props {
10
+ loading: boolean;
11
+ onSubmit: (form: FormProps) => void;
12
+ }
13
+
14
+ export interface FormProps {
15
+ username?: string;
16
+ language: Language;
17
+ }
18
+ export type Language = "en" | "fr" | "es";
19
+
20
+ export const Form: React.FC<Props> = ({ loading, onSubmit }) => {
21
+ const [form, setForm] = useState<FormProps>({
22
+ username: undefined,
23
+ language: "en",
24
+ });
25
+
26
+ return (
27
+ <main className="grid grid-cols-1 gap-6">
28
+ <div>
29
+ <p className="font-semibold text-xs uppercase mb-2 text-zinc-600">
30
+ Hugging Face username
31
+ </p>
32
+ <Input
33
+ value={form.username}
34
+ onChange={(value) => setForm({ ...form, username: value })}
35
+ />
36
+ </div>
37
+ <div>
38
+ <p className="font-semibold text-xs uppercase mb-2 text-zinc-600">
39
+ Language
40
+ </p>
41
+ <Select
42
+ value={form.language}
43
+ onChange={(value) => setForm({ ...form, language: value })}
44
+ />
45
+ </div>
46
+ <div className="flex justify-end">
47
+ <button
48
+ className={classNames(
49
+ "bg-black rounded-full px-5 py-2.5 text-base font-medium text-white hover:bg-zinc-800 disabled:bg-zinc-300 disabled:text-zinc-500 disabled:cursor-not-allowed",
50
+ {
51
+ "animate-pulse": loading,
52
+ }
53
+ )}
54
+ disabled={!form.username || loading}
55
+ onClick={() => onSubmit(form)}
56
+ >
57
+ {loading ? "Roasting in progress..." : "Roast this Hugger 🔥"}
58
+ </button>
59
+ </div>
60
+ </main>
61
+ );
62
+ };
components/input.tsx ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useState } from "react";
2
+ import classNames from "classnames";
3
+ import { CircleCheck, OctagonX } from "lucide-react";
4
+
5
+ import { check_user } from "@/app/actions/check_user";
6
+ import { on } from "events";
7
+
8
+ interface Props {
9
+ value?: string;
10
+ onChange: (s?: string) => void;
11
+ }
12
+ export const Input: React.FC<Props> = ({ onChange, value }) => {
13
+ const [error, setError] = useState<boolean>(false);
14
+ const [valid, setValid] = useState<boolean>(false);
15
+
16
+ const [username, setUsername] = useState<string>("");
17
+
18
+ const handleCheckUser = async (username: string) => {
19
+ const user = await check_user(username);
20
+ if (!user) {
21
+ setError(true);
22
+ setValid(false);
23
+ onChange(undefined);
24
+ } else {
25
+ setError(false);
26
+ setValid(true);
27
+ onChange(username);
28
+ }
29
+ };
30
+
31
+ return (
32
+ <div
33
+ className={classNames(
34
+ "rounded-md mr-2 border border-gray-200 relative ring-transparent text-zinc-600 focus-within:ring-amber-500/20 ring-[3px] flex items-center justify-center overflow-hidden",
35
+ {
36
+ "!border-emerald-500/50 focus-within:!ring-emerald-500/20 !text-emerald-500 ring-emerald-500/20":
37
+ valid,
38
+ "!border-red-500/50 focus-within:!ring-red-500/20 !text-red-500":
39
+ error,
40
+ }
41
+ )}
42
+ >
43
+ <div className="bg-zinc-100 border-r border-zinc-200 text-zinc-500 text-sm px-3 h-[40px] flex items-center justify-center">
44
+ https://huggingface.co/
45
+ </div>
46
+ <input
47
+ value={username}
48
+ onChange={(e) => {
49
+ onChange("");
50
+ setUsername(e.target.value);
51
+ }}
52
+ onBlur={(e) => handleCheckUser(e.target.value)}
53
+ placeholder="enzostvs"
54
+ className="outline-none bg-transparent border-none w-full text-sm px-3 py-2.5 flex-1"
55
+ />
56
+ {error && <OctagonX className="text-red-500 w-5 h-5 absolute right-3" />}
57
+ {valid && (
58
+ <CircleCheck className="text-emerald-500 w-5 h-5 absolute right-3" />
59
+ )}
60
+ </div>
61
+ );
62
+ };
components/select.tsx ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Language } from "./form";
2
+
3
+ interface Props {
4
+ value: string;
5
+ onChange: (s: Language) => void;
6
+ }
7
+ export const Select: React.FC<Props> = ({ onChange, value }) => {
8
+ return (
9
+ <select
10
+ value={value}
11
+ onChange={(e) => onChange(e.target.value as Language)}
12
+ className="rounded-md mr-2 border border-gray-200 relative ring-transparent text-zinc-600 focus-within:ring-amber-500/20 ring-[3px] flex items-center justify-center overflow-hidden text-sm px-3 py-2.5 max-w-[150px] w-full outline-none"
13
+ >
14
+ <option value="en">English</option>
15
+ <option value="fr">French</option>
16
+ <option value="es">Spanish</option>
17
+ </select>
18
+ );
19
+ };
next.config.mjs CHANGED
@@ -1,4 +1,15 @@
1
  /** @type {import('next').NextConfig} */
2
- const nextConfig = {};
 
 
 
 
 
 
 
 
 
 
 
3
 
4
  export default nextConfig;
 
1
  /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ webpack: (config) => {
4
+ // Ignore node-specific modules when bundling for the browser
5
+ // See https://webpack.js.org/configuration/resolve/#resolvealias
6
+ config.resolve.alias = {
7
+ ...config.resolve.alias,
8
+ "sharp$": false,
9
+ "onnxruntime-node$": false,
10
+ }
11
+ return config;
12
+ },
13
+ };
14
 
15
  export default nextConfig;
package-lock.json CHANGED
@@ -8,9 +8,14 @@
8
  "name": "hf_roasted",
9
  "version": "0.1.0",
10
  "dependencies": {
 
 
 
 
11
  "next": "14.2.7",
12
  "react": "^18",
13
- "react-dom": "^18"
 
14
  },
15
  "devDependencies": {
16
  "@types/node": "^20",
@@ -35,6 +40,17 @@
35
  "url": "https://github.com/sponsors/sindresorhus"
36
  }
37
  },
 
 
 
 
 
 
 
 
 
 
 
38
  "node_modules/@eslint-community/eslint-utils": {
39
  "version": "4.4.0",
40
  "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@@ -91,6 +107,30 @@
91
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
92
  }
93
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  "node_modules/@humanwhocodes/config-array": {
95
  "version": "0.11.14",
96
  "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
@@ -205,8 +245,7 @@
205
  "node_modules/@jridgewell/sourcemap-codec": {
206
  "version": "1.5.0",
207
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
208
- "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
209
- "dev": true
210
  },
211
  "node_modules/@jridgewell/trace-mapping": {
212
  "version": "0.3.25",
@@ -421,6 +460,60 @@
421
  "node": ">=14"
422
  }
423
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
424
  "node_modules/@rushstack/eslint-patch": {
425
  "version": "1.10.4",
426
  "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
@@ -441,17 +534,26 @@
441
  "tslib": "^2.4.0"
442
  }
443
  },
 
 
 
 
 
444
  "node_modules/@types/json5": {
445
  "version": "0.0.29",
446
  "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
447
  "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
448
  "dev": true
449
  },
 
 
 
 
 
450
  "node_modules/@types/node": {
451
  "version": "20.16.2",
452
  "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.2.tgz",
453
  "integrity": "sha512-91s/n4qUPV/wg8eE9KHYW1kouTfDk2FPGjXbBMfRWP/2vg1rCXNQL1OCabwGs0XSdukuK+MwCDXE30QpSeMUhQ==",
454
- "dev": true,
455
  "dependencies": {
456
  "undici-types": "~6.19.2"
457
  }
@@ -614,6 +716,24 @@
614
  "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
615
  "dev": true
616
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
617
  "node_modules/acorn": {
618
  "version": "8.12.1",
619
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
@@ -913,12 +1033,77 @@
913
  "deep-equal": "^2.0.5"
914
  }
915
  },
 
 
 
 
 
916
  "node_modules/balanced-match": {
917
  "version": "1.0.2",
918
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
919
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
920
  "dev": true
921
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
922
  "node_modules/binary-extensions": {
923
  "version": "2.3.0",
924
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -931,6 +1116,16 @@
931
  "url": "https://github.com/sponsors/sindresorhus"
932
  }
933
  },
 
 
 
 
 
 
 
 
 
 
934
  "node_modules/brace-expansion": {
935
  "version": "1.1.11",
936
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -953,6 +1148,29 @@
953
  "node": ">=8"
954
  }
955
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
956
  "node_modules/busboy": {
957
  "version": "1.6.0",
958
  "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
@@ -1072,16 +1290,37 @@
1072
  "node": ">= 6"
1073
  }
1074
  },
 
 
 
 
 
 
 
 
 
 
1075
  "node_modules/client-only": {
1076
  "version": "0.0.1",
1077
  "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1078
  "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1079
  },
 
 
 
 
 
 
 
 
 
 
 
 
1080
  "node_modules/color-convert": {
1081
  "version": "2.0.1",
1082
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1083
  "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1084
- "dev": true,
1085
  "dependencies": {
1086
  "color-name": "~1.1.4"
1087
  },
@@ -1092,8 +1331,16 @@
1092
  "node_modules/color-name": {
1093
  "version": "1.1.4",
1094
  "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1095
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1096
- "dev": true
 
 
 
 
 
 
 
 
1097
  },
1098
  "node_modules/commander": {
1099
  "version": "4.1.1",
@@ -1110,6 +1357,14 @@
1110
  "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1111
  "dev": true
1112
  },
 
 
 
 
 
 
 
 
1113
  "node_modules/cross-spawn": {
1114
  "version": "7.0.3",
1115
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1124,6 +1379,26 @@
1124
  "node": ">= 8"
1125
  }
1126
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1127
  "node_modules/cssesc": {
1128
  "version": "3.0.0",
1129
  "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -1139,8 +1414,7 @@
1139
  "node_modules/csstype": {
1140
  "version": "3.1.3",
1141
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1142
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
1143
- "dev": true
1144
  },
1145
  "node_modules/damerau-levenshtein": {
1146
  "version": "1.0.8",
@@ -1216,6 +1490,20 @@
1216
  }
1217
  }
1218
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1219
  "node_modules/deep-equal": {
1220
  "version": "2.2.3",
1221
  "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz",
@@ -1248,6 +1536,14 @@
1248
  "url": "https://github.com/sponsors/ljharb"
1249
  }
1250
  },
 
 
 
 
 
 
 
 
1251
  "node_modules/deep-is": {
1252
  "version": "0.1.4",
1253
  "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -1288,6 +1584,14 @@
1288
  "url": "https://github.com/sponsors/ljharb"
1289
  }
1290
  },
 
 
 
 
 
 
 
 
1291
  "node_modules/didyoumean": {
1292
  "version": "1.2.2",
1293
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
@@ -1336,6 +1640,14 @@
1336
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1337
  "dev": true
1338
  },
 
 
 
 
 
 
 
 
1339
  "node_modules/enhanced-resolve": {
1340
  "version": "5.17.1",
1341
  "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
@@ -1349,6 +1661,14 @@
1349
  "node": ">=10.13.0"
1350
  }
1351
  },
 
 
 
 
 
 
 
 
1352
  "node_modules/es-abstract": {
1353
  "version": "1.23.3",
1354
  "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
@@ -1961,11 +2281,23 @@
1961
  "node": ">=0.10.0"
1962
  }
1963
  },
 
 
 
 
 
 
 
 
1964
  "node_modules/fast-deep-equal": {
1965
  "version": "3.1.3",
1966
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1967
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1968
- "dev": true
 
 
 
 
1969
  },
1970
  "node_modules/fast-glob": {
1971
  "version": "3.3.2",
@@ -2007,6 +2339,16 @@
2007
  "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
2008
  "dev": true
2009
  },
 
 
 
 
 
 
 
 
 
 
2010
  "node_modules/fastq": {
2011
  "version": "1.17.1",
2012
  "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@@ -2070,6 +2412,11 @@
2070
  "node": "^10.12.0 || >=12.0.0"
2071
  }
2072
  },
 
 
 
 
 
2073
  "node_modules/flatted": {
2074
  "version": "3.3.1",
2075
  "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
@@ -2101,6 +2448,11 @@
2101
  "url": "https://github.com/sponsors/isaacs"
2102
  }
2103
  },
 
 
 
 
 
2104
  "node_modules/fs.realpath": {
2105
  "version": "1.0.0",
2106
  "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -2205,6 +2557,11 @@
2205
  "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
2206
  }
2207
  },
 
 
 
 
 
2208
  "node_modules/glob": {
2209
  "version": "10.3.10",
2210
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
@@ -2337,6 +2694,11 @@
2337
  "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
2338
  "dev": true
2339
  },
 
 
 
 
 
2340
  "node_modules/has-bigints": {
2341
  "version": "1.0.2",
2342
  "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -2418,6 +2780,30 @@
2418
  "node": ">= 0.4"
2419
  }
2420
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2421
  "node_modules/ignore": {
2422
  "version": "5.3.2",
2423
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -2466,8 +2852,20 @@
2466
  "node_modules/inherits": {
2467
  "version": "2.0.4",
2468
  "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2469
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
2470
- "dev": true
 
 
 
 
 
 
 
 
 
 
 
 
2471
  },
2472
  "node_modules/internal-slot": {
2473
  "version": "1.0.7",
@@ -2515,6 +2913,11 @@
2515
  "url": "https://github.com/sponsors/ljharb"
2516
  }
2517
  },
 
 
 
 
 
2518
  "node_modules/is-async-function": {
2519
  "version": "2.0.0",
2520
  "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
@@ -2930,6 +3333,11 @@
2930
  "jiti": "bin/jiti.js"
2931
  }
2932
  },
 
 
 
 
 
2933
  "node_modules/js-tokens": {
2934
  "version": "4.0.0",
2935
  "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -3068,6 +3476,11 @@
3068
  "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
3069
  "dev": true
3070
  },
 
 
 
 
 
3071
  "node_modules/loose-envify": {
3072
  "version": "1.4.0",
3073
  "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -3085,6 +3498,19 @@
3085
  "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
3086
  "dev": true
3087
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
3088
  "node_modules/merge2": {
3089
  "version": "1.4.1",
3090
  "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -3107,6 +3533,17 @@
3107
  "node": ">=8.6"
3108
  }
3109
  },
 
 
 
 
 
 
 
 
 
 
 
3110
  "node_modules/minimatch": {
3111
  "version": "3.1.2",
3112
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3123,7 +3560,6 @@
3123
  "version": "1.2.8",
3124
  "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
3125
  "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
3126
- "dev": true,
3127
  "funding": {
3128
  "url": "https://github.com/sponsors/ljharb"
3129
  }
@@ -3137,6 +3573,11 @@
3137
  "node": ">=16 || 14 >=14.17"
3138
  }
3139
  },
 
 
 
 
 
3140
  "node_modules/ms": {
3141
  "version": "2.1.2",
3142
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -3154,6 +3595,25 @@
3154
  "thenify-all": "^1.0.0"
3155
  }
3156
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3157
  "node_modules/nanoid": {
3158
  "version": "3.3.7",
3159
  "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
@@ -3171,6 +3631,11 @@
3171
  "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
3172
  }
3173
  },
 
 
 
 
 
3174
  "node_modules/natural-compare": {
3175
  "version": "1.4.0",
3176
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -3253,6 +3718,22 @@
3253
  "node": "^10 || ^12 || >=14"
3254
  }
3255
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3256
  "node_modules/normalize-path": {
3257
  "version": "3.0.0",
3258
  "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -3402,11 +3883,50 @@
3402
  "version": "1.4.0",
3403
  "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
3404
  "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
3405
- "dev": true,
3406
  "dependencies": {
3407
  "wrappy": "1"
3408
  }
3409
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3410
  "node_modules/optionator": {
3411
  "version": "0.9.4",
3412
  "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -3559,6 +4079,11 @@
3559
  "node": ">= 6"
3560
  }
3561
  },
 
 
 
 
 
3562
  "node_modules/possible-typed-array-names": {
3563
  "version": "1.0.0",
3564
  "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
@@ -3723,6 +4248,57 @@
3723
  "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
3724
  "dev": true
3725
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3726
  "node_modules/prelude-ls": {
3727
  "version": "1.2.1",
3728
  "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -3743,6 +4319,40 @@
3743
  "react-is": "^16.13.1"
3744
  }
3745
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3746
  "node_modules/punycode": {
3747
  "version": "2.3.1",
3748
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -3772,6 +4382,33 @@
3772
  }
3773
  ]
3774
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3775
  "node_modules/react": {
3776
  "version": "18.3.1",
3777
  "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -3801,6 +4438,40 @@
3801
  "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
3802
  "dev": true
3803
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3804
  "node_modules/read-cache": {
3805
  "version": "1.0.0",
3806
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -3810,6 +4481,19 @@
3810
  "pify": "^2.3.0"
3811
  }
3812
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
3813
  "node_modules/readdirp": {
3814
  "version": "3.6.0",
3815
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -3843,6 +4527,11 @@
3843
  "url": "https://github.com/sponsors/ljharb"
3844
  }
3845
  },
 
 
 
 
 
3846
  "node_modules/regexp.prototype.flags": {
3847
  "version": "1.5.2",
3848
  "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
@@ -3861,6 +4550,11 @@
3861
  "url": "https://github.com/sponsors/ljharb"
3862
  }
3863
  },
 
 
 
 
 
3864
  "node_modules/resolve": {
3865
  "version": "1.22.8",
3866
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@@ -3943,6 +4637,14 @@
3943
  "url": "https://github.com/sponsors/isaacs"
3944
  }
3945
  },
 
 
 
 
 
 
 
 
3946
  "node_modules/run-parallel": {
3947
  "version": "1.2.0",
3948
  "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -3984,6 +4686,25 @@
3984
  "url": "https://github.com/sponsors/ljharb"
3985
  }
3986
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3987
  "node_modules/safe-regex-test": {
3988
  "version": "1.0.3",
3989
  "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
@@ -4009,11 +4730,21 @@
4009
  "loose-envify": "^1.1.0"
4010
  }
4011
  },
 
 
 
 
 
 
 
 
 
 
 
4012
  "node_modules/semver": {
4013
  "version": "7.6.3",
4014
  "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
4015
  "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
4016
- "dev": true,
4017
  "bin": {
4018
  "semver": "bin/semver.js"
4019
  },
@@ -4053,6 +4784,36 @@
4053
  "node": ">= 0.4"
4054
  }
4055
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4056
  "node_modules/shebang-command": {
4057
  "version": "2.0.0",
4058
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -4104,6 +4865,57 @@
4104
  "url": "https://github.com/sponsors/isaacs"
4105
  }
4106
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4107
  "node_modules/slash": {
4108
  "version": "3.0.0",
4109
  "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -4113,6 +4925,14 @@
4113
  "node": ">=8"
4114
  }
4115
  },
 
 
 
 
 
 
 
 
4116
  "node_modules/source-map-js": {
4117
  "version": "1.2.0",
4118
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
@@ -4121,6 +4941,46 @@
4121
  "node": ">=0.10.0"
4122
  }
4123
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4124
  "node_modules/stop-iteration-iterator": {
4125
  "version": "1.0.0",
4126
  "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
@@ -4141,6 +5001,27 @@
4141
  "node": ">=10.0.0"
4142
  }
4143
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4144
  "node_modules/string-width": {
4145
  "version": "5.1.2",
4146
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
@@ -4369,6 +5250,11 @@
4369
  }
4370
  }
4371
  },
 
 
 
 
 
4372
  "node_modules/sucrase": {
4373
  "version": "3.35.0",
4374
  "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
@@ -4461,6 +5347,37 @@
4461
  "node": ">=6"
4462
  }
4463
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4464
  "node_modules/text-table": {
4465
  "version": "0.2.0",
4466
  "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -4488,6 +5405,14 @@
4488
  "node": ">=0.8"
4489
  }
4490
  },
 
 
 
 
 
 
 
 
4491
  "node_modules/to-regex-range": {
4492
  "version": "5.0.1",
4493
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -4500,6 +5425,11 @@
4500
  "node": ">=8.0"
4501
  }
4502
  },
 
 
 
 
 
4503
  "node_modules/ts-api-utils": {
4504
  "version": "1.3.0",
4505
  "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
@@ -4512,6 +5442,11 @@
4512
  "typescript": ">=4.2.0"
4513
  }
4514
  },
 
 
 
 
 
4515
  "node_modules/ts-interface-checker": {
4516
  "version": "0.1.13",
4517
  "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
@@ -4535,6 +5470,17 @@
4535
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
4536
  "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="
4537
  },
 
 
 
 
 
 
 
 
 
 
 
4538
  "node_modules/type-check": {
4539
  "version": "0.4.0",
4540
  "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -4663,8 +5609,7 @@
4663
  "node_modules/undici-types": {
4664
  "version": "6.19.8",
4665
  "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
4666
- "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
4667
- "dev": true
4668
  },
4669
  "node_modules/uri-js": {
4670
  "version": "4.4.1",
@@ -4678,8 +5623,7 @@
4678
  "node_modules/util-deprecate": {
4679
  "version": "1.0.2",
4680
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
4681
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
4682
- "dev": true
4683
  },
4684
  "node_modules/which": {
4685
  "version": "2.0.2",
@@ -4881,8 +5825,7 @@
4881
  "node_modules/wrappy": {
4882
  "version": "1.0.2",
4883
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
4884
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
4885
- "dev": true
4886
  },
4887
  "node_modules/yaml": {
4888
  "version": "2.5.0",
 
8
  "name": "hf_roasted",
9
  "version": "0.1.0",
10
  "dependencies": {
11
+ "@huggingface/inference": "^2.8.0",
12
+ "@xenova/transformers": "^2.17.2",
13
+ "classnames": "^2.5.1",
14
+ "lucide-react": "^0.436.0",
15
  "next": "14.2.7",
16
  "react": "^18",
17
+ "react-dom": "^18",
18
+ "react-use": "^17.5.1"
19
  },
20
  "devDependencies": {
21
  "@types/node": "^20",
 
40
  "url": "https://github.com/sponsors/sindresorhus"
41
  }
42
  },
43
+ "node_modules/@babel/runtime": {
44
+ "version": "7.25.4",
45
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz",
46
+ "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==",
47
+ "dependencies": {
48
+ "regenerator-runtime": "^0.14.0"
49
+ },
50
+ "engines": {
51
+ "node": ">=6.9.0"
52
+ }
53
+ },
54
  "node_modules/@eslint-community/eslint-utils": {
55
  "version": "4.4.0",
56
  "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
 
107
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
108
  }
109
  },
110
+ "node_modules/@huggingface/inference": {
111
+ "version": "2.8.0",
112
+ "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.8.0.tgz",
113
+ "integrity": "sha512-Ti681P1qckcCAqgzmL53jBnluPuZGelmMIuXNjgAwC5+RIjF4S0SDQu6oy44ZTwekwNp2ETaZ2sXsOk+45aC4w==",
114
+ "dependencies": {
115
+ "@huggingface/tasks": "^0.11.2"
116
+ },
117
+ "engines": {
118
+ "node": ">=18"
119
+ }
120
+ },
121
+ "node_modules/@huggingface/jinja": {
122
+ "version": "0.2.2",
123
+ "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz",
124
+ "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==",
125
+ "engines": {
126
+ "node": ">=18"
127
+ }
128
+ },
129
+ "node_modules/@huggingface/tasks": {
130
+ "version": "0.11.11",
131
+ "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.11.11.tgz",
132
+ "integrity": "sha512-YRleUv67oSqDOkcYm4pFdBeaw8I8Dh6/DYlXo02fxXj5iC/WiDi8PE1wBhAhTdASwkl/n1V4xbL69uKXwDNDGw=="
133
+ },
134
  "node_modules/@humanwhocodes/config-array": {
135
  "version": "0.11.14",
136
  "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
 
245
  "node_modules/@jridgewell/sourcemap-codec": {
246
  "version": "1.5.0",
247
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
248
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
 
249
  },
250
  "node_modules/@jridgewell/trace-mapping": {
251
  "version": "0.3.25",
 
460
  "node": ">=14"
461
  }
462
  },
463
+ "node_modules/@protobufjs/aspromise": {
464
+ "version": "1.1.2",
465
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
466
+ "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
467
+ },
468
+ "node_modules/@protobufjs/base64": {
469
+ "version": "1.1.2",
470
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
471
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
472
+ },
473
+ "node_modules/@protobufjs/codegen": {
474
+ "version": "2.0.4",
475
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
476
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
477
+ },
478
+ "node_modules/@protobufjs/eventemitter": {
479
+ "version": "1.1.0",
480
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
481
+ "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
482
+ },
483
+ "node_modules/@protobufjs/fetch": {
484
+ "version": "1.1.0",
485
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
486
+ "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
487
+ "dependencies": {
488
+ "@protobufjs/aspromise": "^1.1.1",
489
+ "@protobufjs/inquire": "^1.1.0"
490
+ }
491
+ },
492
+ "node_modules/@protobufjs/float": {
493
+ "version": "1.0.2",
494
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
495
+ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
496
+ },
497
+ "node_modules/@protobufjs/inquire": {
498
+ "version": "1.1.0",
499
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
500
+ "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
501
+ },
502
+ "node_modules/@protobufjs/path": {
503
+ "version": "1.1.2",
504
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
505
+ "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
506
+ },
507
+ "node_modules/@protobufjs/pool": {
508
+ "version": "1.1.0",
509
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
510
+ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
511
+ },
512
+ "node_modules/@protobufjs/utf8": {
513
+ "version": "1.1.0",
514
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
515
+ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
516
+ },
517
  "node_modules/@rushstack/eslint-patch": {
518
  "version": "1.10.4",
519
  "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
 
534
  "tslib": "^2.4.0"
535
  }
536
  },
537
+ "node_modules/@types/js-cookie": {
538
+ "version": "2.2.7",
539
+ "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz",
540
+ "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA=="
541
+ },
542
  "node_modules/@types/json5": {
543
  "version": "0.0.29",
544
  "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
545
  "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
546
  "dev": true
547
  },
548
+ "node_modules/@types/long": {
549
+ "version": "4.0.2",
550
+ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
551
+ "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
552
+ },
553
  "node_modules/@types/node": {
554
  "version": "20.16.2",
555
  "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.2.tgz",
556
  "integrity": "sha512-91s/n4qUPV/wg8eE9KHYW1kouTfDk2FPGjXbBMfRWP/2vg1rCXNQL1OCabwGs0XSdukuK+MwCDXE30QpSeMUhQ==",
 
557
  "dependencies": {
558
  "undici-types": "~6.19.2"
559
  }
 
716
  "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
717
  "dev": true
718
  },
719
+ "node_modules/@xenova/transformers": {
720
+ "version": "2.17.2",
721
+ "resolved": "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.17.2.tgz",
722
+ "integrity": "sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==",
723
+ "dependencies": {
724
+ "@huggingface/jinja": "^0.2.2",
725
+ "onnxruntime-web": "1.14.0",
726
+ "sharp": "^0.32.0"
727
+ },
728
+ "optionalDependencies": {
729
+ "onnxruntime-node": "1.14.0"
730
+ }
731
+ },
732
+ "node_modules/@xobotyi/scrollbar-width": {
733
+ "version": "1.9.5",
734
+ "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz",
735
+ "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ=="
736
+ },
737
  "node_modules/acorn": {
738
  "version": "8.12.1",
739
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
 
1033
  "deep-equal": "^2.0.5"
1034
  }
1035
  },
1036
+ "node_modules/b4a": {
1037
+ "version": "1.6.6",
1038
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
1039
+ "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg=="
1040
+ },
1041
  "node_modules/balanced-match": {
1042
  "version": "1.0.2",
1043
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1044
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1045
  "dev": true
1046
  },
1047
+ "node_modules/bare-events": {
1048
+ "version": "2.4.2",
1049
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
1050
+ "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
1051
+ "optional": true
1052
+ },
1053
+ "node_modules/bare-fs": {
1054
+ "version": "2.3.1",
1055
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz",
1056
+ "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==",
1057
+ "optional": true,
1058
+ "dependencies": {
1059
+ "bare-events": "^2.0.0",
1060
+ "bare-path": "^2.0.0",
1061
+ "bare-stream": "^2.0.0"
1062
+ }
1063
+ },
1064
+ "node_modules/bare-os": {
1065
+ "version": "2.4.0",
1066
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz",
1067
+ "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==",
1068
+ "optional": true
1069
+ },
1070
+ "node_modules/bare-path": {
1071
+ "version": "2.1.3",
1072
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz",
1073
+ "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==",
1074
+ "optional": true,
1075
+ "dependencies": {
1076
+ "bare-os": "^2.1.0"
1077
+ }
1078
+ },
1079
+ "node_modules/bare-stream": {
1080
+ "version": "2.2.0",
1081
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.2.0.tgz",
1082
+ "integrity": "sha512-+o9MG5bPRRBlkVSpfFlMag3n7wMaIZb4YZasU2+/96f+3HTQ4F9DKQeu3K/Sjz1W0umu6xvVq1ON0ipWdMlr3A==",
1083
+ "optional": true,
1084
+ "dependencies": {
1085
+ "streamx": "^2.18.0"
1086
+ }
1087
+ },
1088
+ "node_modules/base64-js": {
1089
+ "version": "1.5.1",
1090
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
1091
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
1092
+ "funding": [
1093
+ {
1094
+ "type": "github",
1095
+ "url": "https://github.com/sponsors/feross"
1096
+ },
1097
+ {
1098
+ "type": "patreon",
1099
+ "url": "https://www.patreon.com/feross"
1100
+ },
1101
+ {
1102
+ "type": "consulting",
1103
+ "url": "https://feross.org/support"
1104
+ }
1105
+ ]
1106
+ },
1107
  "node_modules/binary-extensions": {
1108
  "version": "2.3.0",
1109
  "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
 
1116
  "url": "https://github.com/sponsors/sindresorhus"
1117
  }
1118
  },
1119
+ "node_modules/bl": {
1120
+ "version": "4.1.0",
1121
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
1122
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
1123
+ "dependencies": {
1124
+ "buffer": "^5.5.0",
1125
+ "inherits": "^2.0.4",
1126
+ "readable-stream": "^3.4.0"
1127
+ }
1128
+ },
1129
  "node_modules/brace-expansion": {
1130
  "version": "1.1.11",
1131
  "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
 
1148
  "node": ">=8"
1149
  }
1150
  },
1151
+ "node_modules/buffer": {
1152
+ "version": "5.7.1",
1153
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
1154
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
1155
+ "funding": [
1156
+ {
1157
+ "type": "github",
1158
+ "url": "https://github.com/sponsors/feross"
1159
+ },
1160
+ {
1161
+ "type": "patreon",
1162
+ "url": "https://www.patreon.com/feross"
1163
+ },
1164
+ {
1165
+ "type": "consulting",
1166
+ "url": "https://feross.org/support"
1167
+ }
1168
+ ],
1169
+ "dependencies": {
1170
+ "base64-js": "^1.3.1",
1171
+ "ieee754": "^1.1.13"
1172
+ }
1173
+ },
1174
  "node_modules/busboy": {
1175
  "version": "1.6.0",
1176
  "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
 
1290
  "node": ">= 6"
1291
  }
1292
  },
1293
+ "node_modules/chownr": {
1294
+ "version": "1.1.4",
1295
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
1296
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
1297
+ },
1298
+ "node_modules/classnames": {
1299
+ "version": "2.5.1",
1300
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
1301
+ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
1302
+ },
1303
  "node_modules/client-only": {
1304
  "version": "0.0.1",
1305
  "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
1306
  "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
1307
  },
1308
+ "node_modules/color": {
1309
+ "version": "4.2.3",
1310
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
1311
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
1312
+ "dependencies": {
1313
+ "color-convert": "^2.0.1",
1314
+ "color-string": "^1.9.0"
1315
+ },
1316
+ "engines": {
1317
+ "node": ">=12.5.0"
1318
+ }
1319
+ },
1320
  "node_modules/color-convert": {
1321
  "version": "2.0.1",
1322
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1323
  "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 
1324
  "dependencies": {
1325
  "color-name": "~1.1.4"
1326
  },
 
1331
  "node_modules/color-name": {
1332
  "version": "1.1.4",
1333
  "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1334
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1335
+ },
1336
+ "node_modules/color-string": {
1337
+ "version": "1.9.1",
1338
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
1339
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
1340
+ "dependencies": {
1341
+ "color-name": "^1.0.0",
1342
+ "simple-swizzle": "^0.2.2"
1343
+ }
1344
  },
1345
  "node_modules/commander": {
1346
  "version": "4.1.1",
 
1357
  "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1358
  "dev": true
1359
  },
1360
+ "node_modules/copy-to-clipboard": {
1361
+ "version": "3.3.3",
1362
+ "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
1363
+ "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
1364
+ "dependencies": {
1365
+ "toggle-selection": "^1.0.6"
1366
+ }
1367
+ },
1368
  "node_modules/cross-spawn": {
1369
  "version": "7.0.3",
1370
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
 
1379
  "node": ">= 8"
1380
  }
1381
  },
1382
+ "node_modules/css-in-js-utils": {
1383
+ "version": "3.1.0",
1384
+ "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz",
1385
+ "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==",
1386
+ "dependencies": {
1387
+ "hyphenate-style-name": "^1.0.3"
1388
+ }
1389
+ },
1390
+ "node_modules/css-tree": {
1391
+ "version": "1.1.3",
1392
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
1393
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
1394
+ "dependencies": {
1395
+ "mdn-data": "2.0.14",
1396
+ "source-map": "^0.6.1"
1397
+ },
1398
+ "engines": {
1399
+ "node": ">=8.0.0"
1400
+ }
1401
+ },
1402
  "node_modules/cssesc": {
1403
  "version": "3.0.0",
1404
  "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
 
1414
  "node_modules/csstype": {
1415
  "version": "3.1.3",
1416
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1417
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
 
1418
  },
1419
  "node_modules/damerau-levenshtein": {
1420
  "version": "1.0.8",
 
1490
  }
1491
  }
1492
  },
1493
+ "node_modules/decompress-response": {
1494
+ "version": "6.0.0",
1495
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
1496
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
1497
+ "dependencies": {
1498
+ "mimic-response": "^3.1.0"
1499
+ },
1500
+ "engines": {
1501
+ "node": ">=10"
1502
+ },
1503
+ "funding": {
1504
+ "url": "https://github.com/sponsors/sindresorhus"
1505
+ }
1506
+ },
1507
  "node_modules/deep-equal": {
1508
  "version": "2.2.3",
1509
  "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz",
 
1536
  "url": "https://github.com/sponsors/ljharb"
1537
  }
1538
  },
1539
+ "node_modules/deep-extend": {
1540
+ "version": "0.6.0",
1541
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
1542
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
1543
+ "engines": {
1544
+ "node": ">=4.0.0"
1545
+ }
1546
+ },
1547
  "node_modules/deep-is": {
1548
  "version": "0.1.4",
1549
  "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
 
1584
  "url": "https://github.com/sponsors/ljharb"
1585
  }
1586
  },
1587
+ "node_modules/detect-libc": {
1588
+ "version": "2.0.3",
1589
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
1590
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
1591
+ "engines": {
1592
+ "node": ">=8"
1593
+ }
1594
+ },
1595
  "node_modules/didyoumean": {
1596
  "version": "1.2.2",
1597
  "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
 
1640
  "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1641
  "dev": true
1642
  },
1643
+ "node_modules/end-of-stream": {
1644
+ "version": "1.4.4",
1645
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
1646
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
1647
+ "dependencies": {
1648
+ "once": "^1.4.0"
1649
+ }
1650
+ },
1651
  "node_modules/enhanced-resolve": {
1652
  "version": "5.17.1",
1653
  "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
 
1661
  "node": ">=10.13.0"
1662
  }
1663
  },
1664
+ "node_modules/error-stack-parser": {
1665
+ "version": "2.1.4",
1666
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
1667
+ "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
1668
+ "dependencies": {
1669
+ "stackframe": "^1.3.4"
1670
+ }
1671
+ },
1672
  "node_modules/es-abstract": {
1673
  "version": "1.23.3",
1674
  "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
 
2281
  "node": ">=0.10.0"
2282
  }
2283
  },
2284
+ "node_modules/expand-template": {
2285
+ "version": "2.0.3",
2286
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
2287
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
2288
+ "engines": {
2289
+ "node": ">=6"
2290
+ }
2291
+ },
2292
  "node_modules/fast-deep-equal": {
2293
  "version": "3.1.3",
2294
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
2295
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
2296
+ },
2297
+ "node_modules/fast-fifo": {
2298
+ "version": "1.3.2",
2299
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
2300
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
2301
  },
2302
  "node_modules/fast-glob": {
2303
  "version": "3.3.2",
 
2339
  "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
2340
  "dev": true
2341
  },
2342
+ "node_modules/fast-shallow-equal": {
2343
+ "version": "1.0.0",
2344
+ "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz",
2345
+ "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw=="
2346
+ },
2347
+ "node_modules/fastest-stable-stringify": {
2348
+ "version": "2.0.2",
2349
+ "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz",
2350
+ "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q=="
2351
+ },
2352
  "node_modules/fastq": {
2353
  "version": "1.17.1",
2354
  "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
 
2412
  "node": "^10.12.0 || >=12.0.0"
2413
  }
2414
  },
2415
+ "node_modules/flatbuffers": {
2416
+ "version": "1.12.0",
2417
+ "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz",
2418
+ "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ=="
2419
+ },
2420
  "node_modules/flatted": {
2421
  "version": "3.3.1",
2422
  "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
 
2448
  "url": "https://github.com/sponsors/isaacs"
2449
  }
2450
  },
2451
+ "node_modules/fs-constants": {
2452
+ "version": "1.0.0",
2453
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
2454
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
2455
+ },
2456
  "node_modules/fs.realpath": {
2457
  "version": "1.0.0",
2458
  "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
 
2557
  "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
2558
  }
2559
  },
2560
+ "node_modules/github-from-package": {
2561
+ "version": "0.0.0",
2562
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
2563
+ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
2564
+ },
2565
  "node_modules/glob": {
2566
  "version": "10.3.10",
2567
  "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
 
2694
  "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
2695
  "dev": true
2696
  },
2697
+ "node_modules/guid-typescript": {
2698
+ "version": "1.0.9",
2699
+ "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
2700
+ "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ=="
2701
+ },
2702
  "node_modules/has-bigints": {
2703
  "version": "1.0.2",
2704
  "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
 
2780
  "node": ">= 0.4"
2781
  }
2782
  },
2783
+ "node_modules/hyphenate-style-name": {
2784
+ "version": "1.1.0",
2785
+ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz",
2786
+ "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw=="
2787
+ },
2788
+ "node_modules/ieee754": {
2789
+ "version": "1.2.1",
2790
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
2791
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
2792
+ "funding": [
2793
+ {
2794
+ "type": "github",
2795
+ "url": "https://github.com/sponsors/feross"
2796
+ },
2797
+ {
2798
+ "type": "patreon",
2799
+ "url": "https://www.patreon.com/feross"
2800
+ },
2801
+ {
2802
+ "type": "consulting",
2803
+ "url": "https://feross.org/support"
2804
+ }
2805
+ ]
2806
+ },
2807
  "node_modules/ignore": {
2808
  "version": "5.3.2",
2809
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
 
2852
  "node_modules/inherits": {
2853
  "version": "2.0.4",
2854
  "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2855
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
2856
+ },
2857
+ "node_modules/ini": {
2858
+ "version": "1.3.8",
2859
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
2860
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
2861
+ },
2862
+ "node_modules/inline-style-prefixer": {
2863
+ "version": "7.0.1",
2864
+ "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz",
2865
+ "integrity": "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==",
2866
+ "dependencies": {
2867
+ "css-in-js-utils": "^3.1.0"
2868
+ }
2869
  },
2870
  "node_modules/internal-slot": {
2871
  "version": "1.0.7",
 
2913
  "url": "https://github.com/sponsors/ljharb"
2914
  }
2915
  },
2916
+ "node_modules/is-arrayish": {
2917
+ "version": "0.3.2",
2918
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
2919
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
2920
+ },
2921
  "node_modules/is-async-function": {
2922
  "version": "2.0.0",
2923
  "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
 
3333
  "jiti": "bin/jiti.js"
3334
  }
3335
  },
3336
+ "node_modules/js-cookie": {
3337
+ "version": "2.2.1",
3338
+ "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz",
3339
+ "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ=="
3340
+ },
3341
  "node_modules/js-tokens": {
3342
  "version": "4.0.0",
3343
  "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
 
3476
  "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
3477
  "dev": true
3478
  },
3479
+ "node_modules/long": {
3480
+ "version": "4.0.0",
3481
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
3482
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
3483
+ },
3484
  "node_modules/loose-envify": {
3485
  "version": "1.4.0",
3486
  "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
 
3498
  "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
3499
  "dev": true
3500
  },
3501
+ "node_modules/lucide-react": {
3502
+ "version": "0.436.0",
3503
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.436.0.tgz",
3504
+ "integrity": "sha512-N292bIxoqm1aObAg0MzFtvhYwgQE6qnIOWx/GLj5ONgcTPH6N0fD9bVq/GfdeC9ZORBXozt/XeEKDpiB3x3vlQ==",
3505
+ "peerDependencies": {
3506
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
3507
+ }
3508
+ },
3509
+ "node_modules/mdn-data": {
3510
+ "version": "2.0.14",
3511
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
3512
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="
3513
+ },
3514
  "node_modules/merge2": {
3515
  "version": "1.4.1",
3516
  "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
 
3533
  "node": ">=8.6"
3534
  }
3535
  },
3536
+ "node_modules/mimic-response": {
3537
+ "version": "3.1.0",
3538
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
3539
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
3540
+ "engines": {
3541
+ "node": ">=10"
3542
+ },
3543
+ "funding": {
3544
+ "url": "https://github.com/sponsors/sindresorhus"
3545
+ }
3546
+ },
3547
  "node_modules/minimatch": {
3548
  "version": "3.1.2",
3549
  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
 
3560
  "version": "1.2.8",
3561
  "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
3562
  "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
 
3563
  "funding": {
3564
  "url": "https://github.com/sponsors/ljharb"
3565
  }
 
3573
  "node": ">=16 || 14 >=14.17"
3574
  }
3575
  },
3576
+ "node_modules/mkdirp-classic": {
3577
+ "version": "0.5.3",
3578
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
3579
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
3580
+ },
3581
  "node_modules/ms": {
3582
  "version": "2.1.2",
3583
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 
3595
  "thenify-all": "^1.0.0"
3596
  }
3597
  },
3598
+ "node_modules/nano-css": {
3599
+ "version": "5.6.2",
3600
+ "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.2.tgz",
3601
+ "integrity": "sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==",
3602
+ "dependencies": {
3603
+ "@jridgewell/sourcemap-codec": "^1.4.15",
3604
+ "css-tree": "^1.1.2",
3605
+ "csstype": "^3.1.2",
3606
+ "fastest-stable-stringify": "^2.0.2",
3607
+ "inline-style-prefixer": "^7.0.1",
3608
+ "rtl-css-js": "^1.16.1",
3609
+ "stacktrace-js": "^2.0.2",
3610
+ "stylis": "^4.3.0"
3611
+ },
3612
+ "peerDependencies": {
3613
+ "react": "*",
3614
+ "react-dom": "*"
3615
+ }
3616
+ },
3617
  "node_modules/nanoid": {
3618
  "version": "3.3.7",
3619
  "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
 
3631
  "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
3632
  }
3633
  },
3634
+ "node_modules/napi-build-utils": {
3635
+ "version": "1.0.2",
3636
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
3637
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
3638
+ },
3639
  "node_modules/natural-compare": {
3640
  "version": "1.4.0",
3641
  "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
 
3718
  "node": "^10 || ^12 || >=14"
3719
  }
3720
  },
3721
+ "node_modules/node-abi": {
3722
+ "version": "3.67.0",
3723
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz",
3724
+ "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==",
3725
+ "dependencies": {
3726
+ "semver": "^7.3.5"
3727
+ },
3728
+ "engines": {
3729
+ "node": ">=10"
3730
+ }
3731
+ },
3732
+ "node_modules/node-addon-api": {
3733
+ "version": "6.1.0",
3734
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
3735
+ "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="
3736
+ },
3737
  "node_modules/normalize-path": {
3738
  "version": "3.0.0",
3739
  "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
 
3883
  "version": "1.4.0",
3884
  "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
3885
  "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
 
3886
  "dependencies": {
3887
  "wrappy": "1"
3888
  }
3889
  },
3890
+ "node_modules/onnx-proto": {
3891
+ "version": "4.0.4",
3892
+ "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz",
3893
+ "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==",
3894
+ "dependencies": {
3895
+ "protobufjs": "^6.8.8"
3896
+ }
3897
+ },
3898
+ "node_modules/onnxruntime-common": {
3899
+ "version": "1.14.0",
3900
+ "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz",
3901
+ "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew=="
3902
+ },
3903
+ "node_modules/onnxruntime-node": {
3904
+ "version": "1.14.0",
3905
+ "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz",
3906
+ "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==",
3907
+ "optional": true,
3908
+ "os": [
3909
+ "win32",
3910
+ "darwin",
3911
+ "linux"
3912
+ ],
3913
+ "dependencies": {
3914
+ "onnxruntime-common": "~1.14.0"
3915
+ }
3916
+ },
3917
+ "node_modules/onnxruntime-web": {
3918
+ "version": "1.14.0",
3919
+ "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz",
3920
+ "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==",
3921
+ "dependencies": {
3922
+ "flatbuffers": "^1.12.0",
3923
+ "guid-typescript": "^1.0.9",
3924
+ "long": "^4.0.0",
3925
+ "onnx-proto": "^4.0.4",
3926
+ "onnxruntime-common": "~1.14.0",
3927
+ "platform": "^1.3.6"
3928
+ }
3929
+ },
3930
  "node_modules/optionator": {
3931
  "version": "0.9.4",
3932
  "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
 
4079
  "node": ">= 6"
4080
  }
4081
  },
4082
+ "node_modules/platform": {
4083
+ "version": "1.3.6",
4084
+ "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz",
4085
+ "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
4086
+ },
4087
  "node_modules/possible-typed-array-names": {
4088
  "version": "1.0.0",
4089
  "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
 
4248
  "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
4249
  "dev": true
4250
  },
4251
+ "node_modules/prebuild-install": {
4252
+ "version": "7.1.2",
4253
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz",
4254
+ "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==",
4255
+ "dependencies": {
4256
+ "detect-libc": "^2.0.0",
4257
+ "expand-template": "^2.0.3",
4258
+ "github-from-package": "0.0.0",
4259
+ "minimist": "^1.2.3",
4260
+ "mkdirp-classic": "^0.5.3",
4261
+ "napi-build-utils": "^1.0.1",
4262
+ "node-abi": "^3.3.0",
4263
+ "pump": "^3.0.0",
4264
+ "rc": "^1.2.7",
4265
+ "simple-get": "^4.0.0",
4266
+ "tar-fs": "^2.0.0",
4267
+ "tunnel-agent": "^0.6.0"
4268
+ },
4269
+ "bin": {
4270
+ "prebuild-install": "bin.js"
4271
+ },
4272
+ "engines": {
4273
+ "node": ">=10"
4274
+ }
4275
+ },
4276
+ "node_modules/prebuild-install/node_modules/tar-fs": {
4277
+ "version": "2.1.1",
4278
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
4279
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
4280
+ "dependencies": {
4281
+ "chownr": "^1.1.1",
4282
+ "mkdirp-classic": "^0.5.2",
4283
+ "pump": "^3.0.0",
4284
+ "tar-stream": "^2.1.4"
4285
+ }
4286
+ },
4287
+ "node_modules/prebuild-install/node_modules/tar-stream": {
4288
+ "version": "2.2.0",
4289
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
4290
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
4291
+ "dependencies": {
4292
+ "bl": "^4.0.3",
4293
+ "end-of-stream": "^1.4.1",
4294
+ "fs-constants": "^1.0.0",
4295
+ "inherits": "^2.0.3",
4296
+ "readable-stream": "^3.1.1"
4297
+ },
4298
+ "engines": {
4299
+ "node": ">=6"
4300
+ }
4301
+ },
4302
  "node_modules/prelude-ls": {
4303
  "version": "1.2.1",
4304
  "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
 
4319
  "react-is": "^16.13.1"
4320
  }
4321
  },
4322
+ "node_modules/protobufjs": {
4323
+ "version": "6.11.4",
4324
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz",
4325
+ "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==",
4326
+ "hasInstallScript": true,
4327
+ "dependencies": {
4328
+ "@protobufjs/aspromise": "^1.1.2",
4329
+ "@protobufjs/base64": "^1.1.2",
4330
+ "@protobufjs/codegen": "^2.0.4",
4331
+ "@protobufjs/eventemitter": "^1.1.0",
4332
+ "@protobufjs/fetch": "^1.1.0",
4333
+ "@protobufjs/float": "^1.0.2",
4334
+ "@protobufjs/inquire": "^1.1.0",
4335
+ "@protobufjs/path": "^1.1.2",
4336
+ "@protobufjs/pool": "^1.1.0",
4337
+ "@protobufjs/utf8": "^1.1.0",
4338
+ "@types/long": "^4.0.1",
4339
+ "@types/node": ">=13.7.0",
4340
+ "long": "^4.0.0"
4341
+ },
4342
+ "bin": {
4343
+ "pbjs": "bin/pbjs",
4344
+ "pbts": "bin/pbts"
4345
+ }
4346
+ },
4347
+ "node_modules/pump": {
4348
+ "version": "3.0.0",
4349
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
4350
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
4351
+ "dependencies": {
4352
+ "end-of-stream": "^1.1.0",
4353
+ "once": "^1.3.1"
4354
+ }
4355
+ },
4356
  "node_modules/punycode": {
4357
  "version": "2.3.1",
4358
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
 
4382
  }
4383
  ]
4384
  },
4385
+ "node_modules/queue-tick": {
4386
+ "version": "1.0.1",
4387
+ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
4388
+ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
4389
+ },
4390
+ "node_modules/rc": {
4391
+ "version": "1.2.8",
4392
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
4393
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
4394
+ "dependencies": {
4395
+ "deep-extend": "^0.6.0",
4396
+ "ini": "~1.3.0",
4397
+ "minimist": "^1.2.0",
4398
+ "strip-json-comments": "~2.0.1"
4399
+ },
4400
+ "bin": {
4401
+ "rc": "cli.js"
4402
+ }
4403
+ },
4404
+ "node_modules/rc/node_modules/strip-json-comments": {
4405
+ "version": "2.0.1",
4406
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
4407
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
4408
+ "engines": {
4409
+ "node": ">=0.10.0"
4410
+ }
4411
+ },
4412
  "node_modules/react": {
4413
  "version": "18.3.1",
4414
  "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
 
4438
  "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
4439
  "dev": true
4440
  },
4441
+ "node_modules/react-universal-interface": {
4442
+ "version": "0.6.2",
4443
+ "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz",
4444
+ "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==",
4445
+ "peerDependencies": {
4446
+ "react": "*",
4447
+ "tslib": "*"
4448
+ }
4449
+ },
4450
+ "node_modules/react-use": {
4451
+ "version": "17.5.1",
4452
+ "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.5.1.tgz",
4453
+ "integrity": "sha512-LG/uPEVRflLWMwi3j/sZqR00nF6JGqTTDblkXK2nzXsIvij06hXl1V/MZIlwj1OKIQUtlh1l9jK8gLsRyCQxMg==",
4454
+ "dependencies": {
4455
+ "@types/js-cookie": "^2.2.6",
4456
+ "@xobotyi/scrollbar-width": "^1.9.5",
4457
+ "copy-to-clipboard": "^3.3.1",
4458
+ "fast-deep-equal": "^3.1.3",
4459
+ "fast-shallow-equal": "^1.0.0",
4460
+ "js-cookie": "^2.2.1",
4461
+ "nano-css": "^5.6.2",
4462
+ "react-universal-interface": "^0.6.2",
4463
+ "resize-observer-polyfill": "^1.5.1",
4464
+ "screenfull": "^5.1.0",
4465
+ "set-harmonic-interval": "^1.0.1",
4466
+ "throttle-debounce": "^3.0.1",
4467
+ "ts-easing": "^0.2.0",
4468
+ "tslib": "^2.1.0"
4469
+ },
4470
+ "peerDependencies": {
4471
+ "react": "*",
4472
+ "react-dom": "*"
4473
+ }
4474
+ },
4475
  "node_modules/read-cache": {
4476
  "version": "1.0.0",
4477
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
 
4481
  "pify": "^2.3.0"
4482
  }
4483
  },
4484
+ "node_modules/readable-stream": {
4485
+ "version": "3.6.2",
4486
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
4487
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
4488
+ "dependencies": {
4489
+ "inherits": "^2.0.3",
4490
+ "string_decoder": "^1.1.1",
4491
+ "util-deprecate": "^1.0.1"
4492
+ },
4493
+ "engines": {
4494
+ "node": ">= 6"
4495
+ }
4496
+ },
4497
  "node_modules/readdirp": {
4498
  "version": "3.6.0",
4499
  "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
 
4527
  "url": "https://github.com/sponsors/ljharb"
4528
  }
4529
  },
4530
+ "node_modules/regenerator-runtime": {
4531
+ "version": "0.14.1",
4532
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
4533
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
4534
+ },
4535
  "node_modules/regexp.prototype.flags": {
4536
  "version": "1.5.2",
4537
  "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
 
4550
  "url": "https://github.com/sponsors/ljharb"
4551
  }
4552
  },
4553
+ "node_modules/resize-observer-polyfill": {
4554
+ "version": "1.5.1",
4555
+ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
4556
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
4557
+ },
4558
  "node_modules/resolve": {
4559
  "version": "1.22.8",
4560
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
 
4637
  "url": "https://github.com/sponsors/isaacs"
4638
  }
4639
  },
4640
+ "node_modules/rtl-css-js": {
4641
+ "version": "1.16.1",
4642
+ "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz",
4643
+ "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==",
4644
+ "dependencies": {
4645
+ "@babel/runtime": "^7.1.2"
4646
+ }
4647
+ },
4648
  "node_modules/run-parallel": {
4649
  "version": "1.2.0",
4650
  "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
 
4686
  "url": "https://github.com/sponsors/ljharb"
4687
  }
4688
  },
4689
+ "node_modules/safe-buffer": {
4690
+ "version": "5.2.1",
4691
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
4692
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
4693
+ "funding": [
4694
+ {
4695
+ "type": "github",
4696
+ "url": "https://github.com/sponsors/feross"
4697
+ },
4698
+ {
4699
+ "type": "patreon",
4700
+ "url": "https://www.patreon.com/feross"
4701
+ },
4702
+ {
4703
+ "type": "consulting",
4704
+ "url": "https://feross.org/support"
4705
+ }
4706
+ ]
4707
+ },
4708
  "node_modules/safe-regex-test": {
4709
  "version": "1.0.3",
4710
  "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
 
4730
  "loose-envify": "^1.1.0"
4731
  }
4732
  },
4733
+ "node_modules/screenfull": {
4734
+ "version": "5.2.0",
4735
+ "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz",
4736
+ "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==",
4737
+ "engines": {
4738
+ "node": ">=0.10.0"
4739
+ },
4740
+ "funding": {
4741
+ "url": "https://github.com/sponsors/sindresorhus"
4742
+ }
4743
+ },
4744
  "node_modules/semver": {
4745
  "version": "7.6.3",
4746
  "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
4747
  "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
 
4748
  "bin": {
4749
  "semver": "bin/semver.js"
4750
  },
 
4784
  "node": ">= 0.4"
4785
  }
4786
  },
4787
+ "node_modules/set-harmonic-interval": {
4788
+ "version": "1.0.1",
4789
+ "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz",
4790
+ "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==",
4791
+ "engines": {
4792
+ "node": ">=6.9"
4793
+ }
4794
+ },
4795
+ "node_modules/sharp": {
4796
+ "version": "0.32.6",
4797
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz",
4798
+ "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==",
4799
+ "hasInstallScript": true,
4800
+ "dependencies": {
4801
+ "color": "^4.2.3",
4802
+ "detect-libc": "^2.0.2",
4803
+ "node-addon-api": "^6.1.0",
4804
+ "prebuild-install": "^7.1.1",
4805
+ "semver": "^7.5.4",
4806
+ "simple-get": "^4.0.1",
4807
+ "tar-fs": "^3.0.4",
4808
+ "tunnel-agent": "^0.6.0"
4809
+ },
4810
+ "engines": {
4811
+ "node": ">=14.15.0"
4812
+ },
4813
+ "funding": {
4814
+ "url": "https://opencollective.com/libvips"
4815
+ }
4816
+ },
4817
  "node_modules/shebang-command": {
4818
  "version": "2.0.0",
4819
  "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
 
4865
  "url": "https://github.com/sponsors/isaacs"
4866
  }
4867
  },
4868
+ "node_modules/simple-concat": {
4869
+ "version": "1.0.1",
4870
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
4871
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
4872
+ "funding": [
4873
+ {
4874
+ "type": "github",
4875
+ "url": "https://github.com/sponsors/feross"
4876
+ },
4877
+ {
4878
+ "type": "patreon",
4879
+ "url": "https://www.patreon.com/feross"
4880
+ },
4881
+ {
4882
+ "type": "consulting",
4883
+ "url": "https://feross.org/support"
4884
+ }
4885
+ ]
4886
+ },
4887
+ "node_modules/simple-get": {
4888
+ "version": "4.0.1",
4889
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
4890
+ "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
4891
+ "funding": [
4892
+ {
4893
+ "type": "github",
4894
+ "url": "https://github.com/sponsors/feross"
4895
+ },
4896
+ {
4897
+ "type": "patreon",
4898
+ "url": "https://www.patreon.com/feross"
4899
+ },
4900
+ {
4901
+ "type": "consulting",
4902
+ "url": "https://feross.org/support"
4903
+ }
4904
+ ],
4905
+ "dependencies": {
4906
+ "decompress-response": "^6.0.0",
4907
+ "once": "^1.3.1",
4908
+ "simple-concat": "^1.0.0"
4909
+ }
4910
+ },
4911
+ "node_modules/simple-swizzle": {
4912
+ "version": "0.2.2",
4913
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
4914
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
4915
+ "dependencies": {
4916
+ "is-arrayish": "^0.3.1"
4917
+ }
4918
+ },
4919
  "node_modules/slash": {
4920
  "version": "3.0.0",
4921
  "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
 
4925
  "node": ">=8"
4926
  }
4927
  },
4928
+ "node_modules/source-map": {
4929
+ "version": "0.6.1",
4930
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
4931
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
4932
+ "engines": {
4933
+ "node": ">=0.10.0"
4934
+ }
4935
+ },
4936
  "node_modules/source-map-js": {
4937
  "version": "1.2.0",
4938
  "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
 
4941
  "node": ">=0.10.0"
4942
  }
4943
  },
4944
+ "node_modules/stack-generator": {
4945
+ "version": "2.0.10",
4946
+ "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz",
4947
+ "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==",
4948
+ "dependencies": {
4949
+ "stackframe": "^1.3.4"
4950
+ }
4951
+ },
4952
+ "node_modules/stackframe": {
4953
+ "version": "1.3.4",
4954
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
4955
+ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="
4956
+ },
4957
+ "node_modules/stacktrace-gps": {
4958
+ "version": "3.1.2",
4959
+ "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz",
4960
+ "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==",
4961
+ "dependencies": {
4962
+ "source-map": "0.5.6",
4963
+ "stackframe": "^1.3.4"
4964
+ }
4965
+ },
4966
+ "node_modules/stacktrace-gps/node_modules/source-map": {
4967
+ "version": "0.5.6",
4968
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
4969
+ "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==",
4970
+ "engines": {
4971
+ "node": ">=0.10.0"
4972
+ }
4973
+ },
4974
+ "node_modules/stacktrace-js": {
4975
+ "version": "2.0.2",
4976
+ "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz",
4977
+ "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==",
4978
+ "dependencies": {
4979
+ "error-stack-parser": "^2.0.6",
4980
+ "stack-generator": "^2.0.5",
4981
+ "stacktrace-gps": "^3.0.4"
4982
+ }
4983
+ },
4984
  "node_modules/stop-iteration-iterator": {
4985
  "version": "1.0.0",
4986
  "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
 
5001
  "node": ">=10.0.0"
5002
  }
5003
  },
5004
+ "node_modules/streamx": {
5005
+ "version": "2.19.0",
5006
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.19.0.tgz",
5007
+ "integrity": "sha512-5z6CNR4gtkPbwlxyEqoDGDmWIzoNJqCBt4Eac1ICP9YaIT08ct712cFj0u1rx4F8luAuL+3Qc+RFIdI4OX00kg==",
5008
+ "dependencies": {
5009
+ "fast-fifo": "^1.3.2",
5010
+ "queue-tick": "^1.0.1",
5011
+ "text-decoder": "^1.1.0"
5012
+ },
5013
+ "optionalDependencies": {
5014
+ "bare-events": "^2.2.0"
5015
+ }
5016
+ },
5017
+ "node_modules/string_decoder": {
5018
+ "version": "1.3.0",
5019
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
5020
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
5021
+ "dependencies": {
5022
+ "safe-buffer": "~5.2.0"
5023
+ }
5024
+ },
5025
  "node_modules/string-width": {
5026
  "version": "5.1.2",
5027
  "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
 
5250
  }
5251
  }
5252
  },
5253
+ "node_modules/stylis": {
5254
+ "version": "4.3.4",
5255
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz",
5256
+ "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now=="
5257
+ },
5258
  "node_modules/sucrase": {
5259
  "version": "3.35.0",
5260
  "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
 
5347
  "node": ">=6"
5348
  }
5349
  },
5350
+ "node_modules/tar-fs": {
5351
+ "version": "3.0.6",
5352
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
5353
+ "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
5354
+ "dependencies": {
5355
+ "pump": "^3.0.0",
5356
+ "tar-stream": "^3.1.5"
5357
+ },
5358
+ "optionalDependencies": {
5359
+ "bare-fs": "^2.1.1",
5360
+ "bare-path": "^2.1.0"
5361
+ }
5362
+ },
5363
+ "node_modules/tar-stream": {
5364
+ "version": "3.1.7",
5365
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
5366
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
5367
+ "dependencies": {
5368
+ "b4a": "^1.6.4",
5369
+ "fast-fifo": "^1.2.0",
5370
+ "streamx": "^2.15.0"
5371
+ }
5372
+ },
5373
+ "node_modules/text-decoder": {
5374
+ "version": "1.1.1",
5375
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz",
5376
+ "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==",
5377
+ "dependencies": {
5378
+ "b4a": "^1.6.4"
5379
+ }
5380
+ },
5381
  "node_modules/text-table": {
5382
  "version": "0.2.0",
5383
  "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
 
5405
  "node": ">=0.8"
5406
  }
5407
  },
5408
+ "node_modules/throttle-debounce": {
5409
+ "version": "3.0.1",
5410
+ "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
5411
+ "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
5412
+ "engines": {
5413
+ "node": ">=10"
5414
+ }
5415
+ },
5416
  "node_modules/to-regex-range": {
5417
  "version": "5.0.1",
5418
  "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
 
5425
  "node": ">=8.0"
5426
  }
5427
  },
5428
+ "node_modules/toggle-selection": {
5429
+ "version": "1.0.6",
5430
+ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
5431
+ "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="
5432
+ },
5433
  "node_modules/ts-api-utils": {
5434
  "version": "1.3.0",
5435
  "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
 
5442
  "typescript": ">=4.2.0"
5443
  }
5444
  },
5445
+ "node_modules/ts-easing": {
5446
+ "version": "0.2.0",
5447
+ "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz",
5448
+ "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ=="
5449
+ },
5450
  "node_modules/ts-interface-checker": {
5451
  "version": "0.1.13",
5452
  "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
 
5470
  "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
5471
  "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="
5472
  },
5473
+ "node_modules/tunnel-agent": {
5474
+ "version": "0.6.0",
5475
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
5476
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
5477
+ "dependencies": {
5478
+ "safe-buffer": "^5.0.1"
5479
+ },
5480
+ "engines": {
5481
+ "node": "*"
5482
+ }
5483
+ },
5484
  "node_modules/type-check": {
5485
  "version": "0.4.0",
5486
  "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
 
5609
  "node_modules/undici-types": {
5610
  "version": "6.19.8",
5611
  "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
5612
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw=="
 
5613
  },
5614
  "node_modules/uri-js": {
5615
  "version": "4.4.1",
 
5623
  "node_modules/util-deprecate": {
5624
  "version": "1.0.2",
5625
  "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
5626
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
 
5627
  },
5628
  "node_modules/which": {
5629
  "version": "2.0.2",
 
5825
  "node_modules/wrappy": {
5826
  "version": "1.0.2",
5827
  "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
5828
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
 
5829
  },
5830
  "node_modules/yaml": {
5831
  "version": "2.5.0",
package.json CHANGED
@@ -9,18 +9,23 @@
9
  "lint": "next lint"
10
  },
11
  "dependencies": {
 
 
 
 
 
12
  "react": "^18",
13
  "react-dom": "^18",
14
- "next": "14.2.7"
15
  },
16
  "devDependencies": {
17
- "typescript": "^5",
18
  "@types/node": "^20",
19
  "@types/react": "^18",
20
  "@types/react-dom": "^18",
 
 
21
  "postcss": "^8",
22
  "tailwindcss": "^3.4.1",
23
- "eslint": "^8",
24
- "eslint-config-next": "14.2.7"
25
  }
26
  }
 
9
  "lint": "next lint"
10
  },
11
  "dependencies": {
12
+ "@huggingface/inference": "^2.8.0",
13
+ "@xenova/transformers": "^2.17.2",
14
+ "classnames": "^2.5.1",
15
+ "lucide-react": "^0.436.0",
16
+ "next": "14.2.7",
17
  "react": "^18",
18
  "react-dom": "^18",
19
+ "react-use": "^17.5.1"
20
  },
21
  "devDependencies": {
 
22
  "@types/node": "^20",
23
  "@types/react": "^18",
24
  "@types/react-dom": "^18",
25
+ "eslint": "^8",
26
+ "eslint-config-next": "14.2.7",
27
  "postcss": "^8",
28
  "tailwindcss": "^3.4.1",
29
+ "typescript": "^5"
 
30
  }
31
  }
styles/globals.css ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ @layer utilities {
6
+ .text-balance {
7
+ text-wrap: balance;
8
+ }
9
+ }
utils/roast copy.ts ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const formatSpacesInfos = (spaces: any) => {
2
+ const texts: string[] = []
3
+ spaces.map((space: any) => {
4
+ let text = `${space.cardData?.title} has ${space.likes} likes and has been updated ${space.lastModified} ago.`
5
+ if (space.cardData?.short_description) {
6
+ text += `The space description is: ${space.cardData?.short_description}`
7
+ }
8
+ texts.push(text)
9
+ })
10
+
11
+ return texts.join("\n")
12
+ }
13
+
14
+ const formatModelsInfos = (models: any) => {
15
+ const texts: string[] = []
16
+ models.map((model: any) => {
17
+ let text = `${model.id?.split("/")[1]} has ${model.likes} likes and ${model.downloads} downloads.`
18
+ if (model.gating) {
19
+ text += `You should ask for access to this model.`
20
+ } else {
21
+ text += `This model is public.`
22
+ }
23
+ text += `This model is about ${model.pipeline_tag}`
24
+
25
+ texts.push(text)
26
+ })
27
+
28
+ return texts.join("\n")
29
+ }
30
+
31
+ const formatUserInfos = (user: any, countFollowing: number, countFollowers: number, spacesLikes: number, modelsLikes: number, spaces: any, models: any) => {
32
+ return `
33
+ The user ${user.fullname} has ${countFollowers} followers and is following ${countFollowing} users.
34
+ He is part of ${user.orgs?.length ?? 0} organizations.
35
+ He is owner of ${spaces?.length ?? 0} spaces and has ${models?.length ?? 0} models.
36
+ He already liked ${user.likes?.length ?? 0} models/spaces/datasets. This user is ${user.isPro ? "pro" : "not pro"}.
37
+ He has ${spacesLikes} likes on his spaces and ${modelsLikes} likes on his models.
38
+ `
39
+ }
40
+
41
+ export const formatInformations = (
42
+ user: any,
43
+ countFollowing: number,
44
+ countFollowers: number,
45
+ spaces: any,
46
+ models: any,
47
+ spacesLikes: number,
48
+ modelsLikes: number
49
+ ) => {
50
+ const userInfos = formatUserInfos(user, countFollowing, countFollowers, spacesLikes, modelsLikes, spaces, models)
51
+ const spacesInfos = formatSpacesInfos(spaces.slice(0, 6))
52
+ const modelsInfos = formatModelsInfos(models.slice(0, 6))
53
+
54
+ return `${userInfos}\n\n${spacesInfos}\n\n${modelsInfos}`
55
+ }
utils/roast.ts ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Language } from "@/components/form";
2
+
3
+ export const formatInformations = (
4
+ user: any,
5
+ countFollowing: number,
6
+ countFollowers: number,
7
+ spaces: any,
8
+ models: any,
9
+ collections: any,
10
+ spacesLikes: number,
11
+ modelsLikes: number,
12
+ collectionsUpvotes: number
13
+ ) => {
14
+ const datas = {
15
+ name: user.fullname,
16
+ bio: user.details,
17
+ organizations: user.orgs?.map((org: any) => ({
18
+ name: org.fullname
19
+ })),
20
+ followers: countFollowers === 500 ? "500+" : countFollowers,
21
+ following: countFollowing === 500 ? "500+" : countFollowing,
22
+ total_spaces_likes: spacesLikes,
23
+ total_models_likes: modelsLikes,
24
+ total_collections_likes: collectionsUpvotes,
25
+ last_5_spaces: spaces
26
+ .map((space: any) => ({
27
+ name: space?.cardData?.title ?? space.id?.split("/")[1],
28
+ description: space?.cardData?.short_description,
29
+ likes_count: space.likes,
30
+ last_modified: space.lastModified,
31
+ created_at: space.createdAt
32
+ }))
33
+ .slice(0, 5),
34
+ last_5_models: models
35
+ .map((model: any) => ({
36
+ name: model.id?.split("/")[1],
37
+ has_inference: model.inference,
38
+ likes_count: model.likes,
39
+ downloads_count: model.downloads,
40
+ pipeline_tag: model.pipeline_tag,
41
+ last_modified: model.lastModified,
42
+ created_at: model.createdAt
43
+ }))
44
+ .slice(0, 5),
45
+ last_5_collections: collections
46
+ .map((collection: any) => ({
47
+ name: collection.title,
48
+ description: collection.description,
49
+ upvotes_count: collection.upvotes,
50
+ }))
51
+ .slice(0, 5),
52
+ };
53
+
54
+ return datas;
55
+ }
56
+
57
+ export const transformForInference = (
58
+ datas: Record<string, any>,
59
+ language: Language,
60
+ username: string,
61
+ ) => {
62
+ let user_content = `give a short and harsh roasting for the following hugging face profile: ${username}. Here are the details: "${JSON.stringify(datas)}"`
63
+
64
+ switch (language) {
65
+ case "fr":
66
+ user_content = `fais une courte et cruelle critique sarcastique en argot pour le profil Hugging Face suivant en français : ${username}. Voici les détails: "${JSON.stringify(datas)}"`
67
+ break;
68
+ case "es":
69
+ user_content = `haz una crítica corta y cruel para el siguiente perfil de Hugging Face en español: ${username}. Aquí están los detalles: "${JSON.stringify(datas)}"`
70
+ break;
71
+ }
72
+
73
+ const chat = [{
74
+ role: 'assistant',
75
+ content:
76
+ 'You roast people hugging face account based on their bio, name, spaces, and models as harsh and spicy as possible, and keep it short.'
77
+ },
78
+ { role: 'user', content: user_content }]
79
+
80
+ return chat;
81
+ }