stillerman HF Staff commited on
Commit
1c04688
·
1 Parent(s): 4a656fb

scaffolding

Browse files
package.json CHANGED
@@ -11,7 +11,9 @@
11
  "preview": "vite preview"
12
  },
13
  "dependencies": {
 
14
  "@radix-ui/react-slot": "^1.2.0",
 
15
  "@tailwindcss/vite": "^4.1.5",
16
  "class-variance-authority": "^0.7.1",
17
  "clsx": "^2.1.1",
 
11
  "preview": "vite preview"
12
  },
13
  "dependencies": {
14
+ "@radix-ui/react-select": "^2.2.2",
15
  "@radix-ui/react-slot": "^1.2.0",
16
+ "@radix-ui/react-tabs": "^1.1.9",
17
  "@tailwindcss/vite": "^4.1.5",
18
  "class-variance-authority": "^0.7.1",
19
  "clsx": "^2.1.1",
src/App.css DELETED
@@ -1,42 +0,0 @@
1
- #root {
2
- max-width: 1280px;
3
- margin: 0 auto;
4
- padding: 2rem;
5
- text-align: center;
6
- }
7
-
8
- .logo {
9
- height: 6em;
10
- padding: 1.5em;
11
- will-change: filter;
12
- transition: filter 300ms;
13
- }
14
- .logo:hover {
15
- filter: drop-shadow(0 0 2em #646cffaa);
16
- }
17
- .logo.react:hover {
18
- filter: drop-shadow(0 0 2em #61dafbaa);
19
- }
20
-
21
- @keyframes logo-spin {
22
- from {
23
- transform: rotate(0deg);
24
- }
25
- to {
26
- transform: rotate(360deg);
27
- }
28
- }
29
-
30
- @media (prefers-reduced-motion: no-preference) {
31
- a:nth-of-type(2) .logo {
32
- animation: logo-spin infinite 20s linear;
33
- }
34
- }
35
-
36
- .card {
37
- padding: 2em;
38
- }
39
-
40
- .read-the-docs {
41
- color: #888;
42
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/App.tsx CHANGED
@@ -1,11 +1,26 @@
1
- import { Button } from "@/components/ui/button"
2
-
3
- function App() {
 
 
4
  return (
5
- <div className="flex flex-col items-center justify-center min-h-svh">
6
- <Button>Click me</Button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  </div>
8
- )
9
  }
10
-
11
- export default App
 
1
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
2
+ import ViewerTab from "@/components/viewer-tab";
3
+ import PlayTab from "@/components/play-tab";
4
+
5
+ export default function Home() {
6
  return (
7
+ <div className="container mx-auto p-4">
8
+ <h1 className="text-3xl font-bold mb-6">Wikispeedia</h1>
9
+
10
+ <Tabs defaultValue="view" className="w-full">
11
+ <TabsList className="mb-4">
12
+ <TabsTrigger value="view">View Runs</TabsTrigger>
13
+ <TabsTrigger value="play">Play Game</TabsTrigger>
14
+ </TabsList>
15
+
16
+ <TabsContent value="view">
17
+ <ViewerTab />
18
+ </TabsContent>
19
+
20
+ <TabsContent value="play">
21
+ <PlayTab />
22
+ </TabsContent>
23
+ </Tabs>
24
  </div>
25
+ );
26
  }
 
 
src/components/force-directed-graph.tsx ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ // This is a placeholder component for the force-directed graph
4
+ // In a real implementation, you would use a library like D3.js or react-force-graph
5
+
6
+ interface ForceDirectedGraphProps {
7
+ runId: number | null;
8
+ }
9
+
10
+ export default function ForceDirectedGraph({ runId }: ForceDirectedGraphProps) {
11
+ if (!runId) {
12
+ return (
13
+ <div className="w-full h-full flex items-center justify-center text-muted-foreground">
14
+ Select a run to view the path graph
15
+ </div>
16
+ );
17
+ }
18
+
19
+ // This is just a placeholder SVG - in a real implementation,
20
+ // you would render an actual force-directed graph
21
+ return (
22
+ <div className="w-full h-full flex items-center justify-center">
23
+ <svg width="100%" height="100%" viewBox="0 0 800 600">
24
+ {/* Center node */}
25
+ <circle cx="400" cy="300" r="20" fill="#ff4d4f" />
26
+
27
+ {/* Surrounding nodes */}
28
+ <circle cx="200" cy="150" r="15" fill="#ff9c6e" />
29
+ <circle cx="600" cy="150" r="15" fill="#ff9c6e" />
30
+ <circle cx="200" cy="450" r="15" fill="#ff9c6e" />
31
+ <circle cx="600" cy="450" r="15" fill="#ff9c6e" />
32
+ <circle cx="300" cy="100" r="15" fill="#ff9c6e" />
33
+ <circle cx="500" cy="100" r="15" fill="#ff9c6e" />
34
+ <circle cx="300" cy="500" r="15" fill="#ff9c6e" />
35
+ <circle cx="500" cy="500" r="15" fill="#ff9c6e" />
36
+
37
+ {/* Lines connecting nodes */}
38
+ <line
39
+ x1="400"
40
+ y1="300"
41
+ x2="200"
42
+ y2="150"
43
+ stroke="#ffa39e"
44
+ strokeWidth="2"
45
+ />
46
+ <line
47
+ x1="400"
48
+ y1="300"
49
+ x2="600"
50
+ y2="150"
51
+ stroke="#ffa39e"
52
+ strokeWidth="2"
53
+ />
54
+ <line
55
+ x1="400"
56
+ y1="300"
57
+ x2="200"
58
+ y2="450"
59
+ stroke="#ffa39e"
60
+ strokeWidth="2"
61
+ />
62
+ <line
63
+ x1="400"
64
+ y1="300"
65
+ x2="600"
66
+ y2="450"
67
+ stroke="#ffa39e"
68
+ strokeWidth="2"
69
+ />
70
+ <line
71
+ x1="400"
72
+ y1="300"
73
+ x2="300"
74
+ y2="100"
75
+ stroke="#ffa39e"
76
+ strokeWidth="2"
77
+ />
78
+ <line
79
+ x1="400"
80
+ y1="300"
81
+ x2="500"
82
+ y2="100"
83
+ stroke="#ffa39e"
84
+ strokeWidth="2"
85
+ />
86
+ <line
87
+ x1="400"
88
+ y1="300"
89
+ x2="300"
90
+ y2="500"
91
+ stroke="#ffa39e"
92
+ strokeWidth="2"
93
+ />
94
+ <line
95
+ x1="400"
96
+ y1="300"
97
+ x2="500"
98
+ y2="500"
99
+ stroke="#ffa39e"
100
+ strokeWidth="2"
101
+ />
102
+
103
+ {/* Secondary connections */}
104
+ <line
105
+ x1="200"
106
+ y1="150"
107
+ x2="300"
108
+ y2="100"
109
+ stroke="#ffa39e"
110
+ strokeWidth="1"
111
+ opacity="0.5"
112
+ />
113
+ <line
114
+ x1="600"
115
+ y1="150"
116
+ x2="500"
117
+ y2="100"
118
+ stroke="#ffa39e"
119
+ strokeWidth="1"
120
+ opacity="0.5"
121
+ />
122
+ <line
123
+ x1="200"
124
+ y1="450"
125
+ x2="300"
126
+ y2="500"
127
+ stroke="#ffa39e"
128
+ strokeWidth="1"
129
+ opacity="0.5"
130
+ />
131
+ <line
132
+ x1="600"
133
+ y1="450"
134
+ x2="500"
135
+ y2="500"
136
+ stroke="#ffa39e"
137
+ strokeWidth="1"
138
+ opacity="0.5"
139
+ />
140
+ </svg>
141
+ </div>
142
+ );
143
+ }
src/components/play-tab.tsx ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ export default function PlayTab() {
2
+ return (
3
+ <div className="flex items-center justify-center h-[600px] bg-muted/30 rounded-md">
4
+ <p className="text-muted-foreground">Play tab coming soon...</p>
5
+ </div>
6
+ );
7
+ }
src/components/reasoning-trace.tsx ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import { Input } from "@/components/ui/input";
5
+ import { Button } from "@/components/ui/button";
6
+ import { Send } from "lucide-react";
7
+
8
+ interface ReasoningTraceProps {
9
+ runId: number | null;
10
+ }
11
+
12
+ export default function ReasoningTrace({ runId }: ReasoningTraceProps) {
13
+ const [userInput, setUserInput] = useState("");
14
+
15
+ if (!runId) {
16
+ return (
17
+ <div className="w-full h-full flex items-center justify-center text-muted-foreground">
18
+ Select a run to view the reasoning trace
19
+ </div>
20
+ );
21
+ }
22
+
23
+ return (
24
+ <div className="flex flex-col h-full">
25
+ <h3 className="text-lg font-medium mb-4">LLM Reasoning Trace</h3>
26
+
27
+ <div className="flex-1 overflow-y-auto mb-4 bg-muted/30 rounded-md p-4">
28
+ <div className="space-y-4">
29
+ <div className="bg-primary/10 p-3 rounded-lg max-w-[80%]">
30
+ <p className="text-sm">Hello! How can I help you today?</p>
31
+ </div>
32
+
33
+ <div className="bg-primary/10 p-3 rounded-lg max-w-[80%] ml-auto">
34
+ <p className="text-sm">How can I deploy a website to Vercel?</p>
35
+ </div>
36
+
37
+ <div className="bg-primary/10 p-3 rounded-lg max-w-[80%]">
38
+ <p className="text-sm">
39
+ To deploy a website to Vercel, follow these steps:
40
+ <br />
41
+ <br />
42
+ 1. Sign up for a Vercel account: Go to https://vercel.com/signup
43
+ and sign up using your GitHub, GitLab, or Bitbucket account, or
44
+ with your email address.
45
+ <br />
46
+ <br />
47
+ 2. Install the Vercel command-line interface (CLI) by running the
48
+ following command in your terminal or command prompt:
49
+ <br />
50
+ <code className="bg-muted p-1 rounded">
51
+ npm install -g vercel
52
+ </code>
53
+ <br />
54
+ <br />
55
+ Make sure you have Node.js and npm installed on your system before
56
+ running this command.
57
+ <br />
58
+ <br />
59
+ 3. Authenticate with Vercel: Run the following command:
60
+ <br />
61
+ <code className="bg-muted p-1 rounded">vercel login</code>
62
+ </p>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ </div>
67
+ );
68
+ }
src/components/runs-list.tsx ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ import { Card } from "@/components/ui/card";
4
+ import { cn } from "@/lib/utils";
5
+
6
+ interface Run {
7
+ id: number;
8
+ start: string;
9
+ end: string;
10
+ hops: number;
11
+ }
12
+
13
+ interface RunsListProps {
14
+ runs: Run[];
15
+ onSelectRun: (runId: number) => void;
16
+ selectedRunId: number | null;
17
+ }
18
+
19
+ export default function RunsList({
20
+ runs,
21
+ onSelectRun,
22
+ selectedRunId,
23
+ }: RunsListProps) {
24
+ return (
25
+ <div className="h-[600px] overflow-y-auto space-y-2 pr-1">
26
+ {runs.map((run) => (
27
+ <Card
28
+ key={run.id}
29
+ className={cn(
30
+ "p-3 cursor-pointer transition-all border",
31
+ selectedRunId === run.id
32
+ ? "bg-primary/10 border-primary/50 shadow-sm"
33
+ : "hover:bg-muted/80 border-transparent"
34
+ )}
35
+ onClick={() => onSelectRun(run.id)}
36
+ >
37
+ <div className="flex items-center justify-between">
38
+ <div>
39
+ <p className="font-medium flex items-center">
40
+ <span>{run.start}</span>
41
+ <svg
42
+ xmlns="http://www.w3.org/2000/svg"
43
+ width="16"
44
+ height="16"
45
+ viewBox="0 0 24 24"
46
+ fill="none"
47
+ stroke="currentColor"
48
+ strokeWidth="2"
49
+ strokeLinecap="round"
50
+ strokeLinejoin="round"
51
+ className="mx-1"
52
+ >
53
+ <path d="M5 12h14" />
54
+ <path d="m12 5 7 7-7 7" />
55
+ </svg>
56
+ <span>{run.end}</span>
57
+ </p>
58
+ <p className="text-sm text-muted-foreground">{run.hops} hops</p>
59
+ </div>
60
+ {selectedRunId === run.id && (
61
+ <div
62
+ className="h-2 w-2 rounded-full bg-primary"
63
+ aria-hidden="true"
64
+ />
65
+ )}
66
+ </div>
67
+ </Card>
68
+ ))}
69
+
70
+ {runs.length === 0 && (
71
+ <div className="flex items-center justify-center h-full text-muted-foreground">
72
+ No runs available
73
+ </div>
74
+ )}
75
+ </div>
76
+ );
77
+ }
src/components/ui/card.tsx ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+
3
+ import { cn } from "@/lib/utils"
4
+
5
+ function Card({ className, ...props }: React.ComponentProps<"div">) {
6
+ return (
7
+ <div
8
+ data-slot="card"
9
+ className={cn(
10
+ "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
11
+ className
12
+ )}
13
+ {...props}
14
+ />
15
+ )
16
+ }
17
+
18
+ function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
19
+ return (
20
+ <div
21
+ data-slot="card-header"
22
+ className={cn(
23
+ "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
24
+ className
25
+ )}
26
+ {...props}
27
+ />
28
+ )
29
+ }
30
+
31
+ function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
32
+ return (
33
+ <div
34
+ data-slot="card-title"
35
+ className={cn("leading-none font-semibold", className)}
36
+ {...props}
37
+ />
38
+ )
39
+ }
40
+
41
+ function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
42
+ return (
43
+ <div
44
+ data-slot="card-description"
45
+ className={cn("text-muted-foreground text-sm", className)}
46
+ {...props}
47
+ />
48
+ )
49
+ }
50
+
51
+ function CardAction({ className, ...props }: React.ComponentProps<"div">) {
52
+ return (
53
+ <div
54
+ data-slot="card-action"
55
+ className={cn(
56
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
57
+ className
58
+ )}
59
+ {...props}
60
+ />
61
+ )
62
+ }
63
+
64
+ function CardContent({ className, ...props }: React.ComponentProps<"div">) {
65
+ return (
66
+ <div
67
+ data-slot="card-content"
68
+ className={cn("px-6", className)}
69
+ {...props}
70
+ />
71
+ )
72
+ }
73
+
74
+ function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
75
+ return (
76
+ <div
77
+ data-slot="card-footer"
78
+ className={cn("flex items-center px-6 [.border-t]:pt-6", className)}
79
+ {...props}
80
+ />
81
+ )
82
+ }
83
+
84
+ export {
85
+ Card,
86
+ CardHeader,
87
+ CardFooter,
88
+ CardTitle,
89
+ CardAction,
90
+ CardDescription,
91
+ CardContent,
92
+ }
src/components/ui/input.tsx ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+
3
+ import { cn } from "@/lib/utils"
4
+
5
+ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
+ return (
7
+ <input
8
+ type={type}
9
+ data-slot="input"
10
+ className={cn(
11
+ "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
12
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
13
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
14
+ className
15
+ )}
16
+ {...props}
17
+ />
18
+ )
19
+ }
20
+
21
+ export { Input }
src/components/ui/select.tsx ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+ import * as SelectPrimitive from "@radix-ui/react-select"
3
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ function Select({
8
+ ...props
9
+ }: React.ComponentProps<typeof SelectPrimitive.Root>) {
10
+ return <SelectPrimitive.Root data-slot="select" {...props} />
11
+ }
12
+
13
+ function SelectGroup({
14
+ ...props
15
+ }: React.ComponentProps<typeof SelectPrimitive.Group>) {
16
+ return <SelectPrimitive.Group data-slot="select-group" {...props} />
17
+ }
18
+
19
+ function SelectValue({
20
+ ...props
21
+ }: React.ComponentProps<typeof SelectPrimitive.Value>) {
22
+ return <SelectPrimitive.Value data-slot="select-value" {...props} />
23
+ }
24
+
25
+ function SelectTrigger({
26
+ className,
27
+ size = "default",
28
+ children,
29
+ ...props
30
+ }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
31
+ size?: "sm" | "default"
32
+ }) {
33
+ return (
34
+ <SelectPrimitive.Trigger
35
+ data-slot="select-trigger"
36
+ data-size={size}
37
+ className={cn(
38
+ "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
39
+ className
40
+ )}
41
+ {...props}
42
+ >
43
+ {children}
44
+ <SelectPrimitive.Icon asChild>
45
+ <ChevronDownIcon className="size-4 opacity-50" />
46
+ </SelectPrimitive.Icon>
47
+ </SelectPrimitive.Trigger>
48
+ )
49
+ }
50
+
51
+ function SelectContent({
52
+ className,
53
+ children,
54
+ position = "popper",
55
+ ...props
56
+ }: React.ComponentProps<typeof SelectPrimitive.Content>) {
57
+ return (
58
+ <SelectPrimitive.Portal>
59
+ <SelectPrimitive.Content
60
+ data-slot="select-content"
61
+ className={cn(
62
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
63
+ position === "popper" &&
64
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
65
+ className
66
+ )}
67
+ position={position}
68
+ {...props}
69
+ >
70
+ <SelectScrollUpButton />
71
+ <SelectPrimitive.Viewport
72
+ className={cn(
73
+ "p-1",
74
+ position === "popper" &&
75
+ "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
76
+ )}
77
+ >
78
+ {children}
79
+ </SelectPrimitive.Viewport>
80
+ <SelectScrollDownButton />
81
+ </SelectPrimitive.Content>
82
+ </SelectPrimitive.Portal>
83
+ )
84
+ }
85
+
86
+ function SelectLabel({
87
+ className,
88
+ ...props
89
+ }: React.ComponentProps<typeof SelectPrimitive.Label>) {
90
+ return (
91
+ <SelectPrimitive.Label
92
+ data-slot="select-label"
93
+ className={cn("text-muted-foreground px-2 py-1.5 text-xs", className)}
94
+ {...props}
95
+ />
96
+ )
97
+ }
98
+
99
+ function SelectItem({
100
+ className,
101
+ children,
102
+ ...props
103
+ }: React.ComponentProps<typeof SelectPrimitive.Item>) {
104
+ return (
105
+ <SelectPrimitive.Item
106
+ data-slot="select-item"
107
+ className={cn(
108
+ "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
109
+ className
110
+ )}
111
+ {...props}
112
+ >
113
+ <span className="absolute right-2 flex size-3.5 items-center justify-center">
114
+ <SelectPrimitive.ItemIndicator>
115
+ <CheckIcon className="size-4" />
116
+ </SelectPrimitive.ItemIndicator>
117
+ </span>
118
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
119
+ </SelectPrimitive.Item>
120
+ )
121
+ }
122
+
123
+ function SelectSeparator({
124
+ className,
125
+ ...props
126
+ }: React.ComponentProps<typeof SelectPrimitive.Separator>) {
127
+ return (
128
+ <SelectPrimitive.Separator
129
+ data-slot="select-separator"
130
+ className={cn("bg-border pointer-events-none -mx-1 my-1 h-px", className)}
131
+ {...props}
132
+ />
133
+ )
134
+ }
135
+
136
+ function SelectScrollUpButton({
137
+ className,
138
+ ...props
139
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {
140
+ return (
141
+ <SelectPrimitive.ScrollUpButton
142
+ data-slot="select-scroll-up-button"
143
+ className={cn(
144
+ "flex cursor-default items-center justify-center py-1",
145
+ className
146
+ )}
147
+ {...props}
148
+ >
149
+ <ChevronUpIcon className="size-4" />
150
+ </SelectPrimitive.ScrollUpButton>
151
+ )
152
+ }
153
+
154
+ function SelectScrollDownButton({
155
+ className,
156
+ ...props
157
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {
158
+ return (
159
+ <SelectPrimitive.ScrollDownButton
160
+ data-slot="select-scroll-down-button"
161
+ className={cn(
162
+ "flex cursor-default items-center justify-center py-1",
163
+ className
164
+ )}
165
+ {...props}
166
+ >
167
+ <ChevronDownIcon className="size-4" />
168
+ </SelectPrimitive.ScrollDownButton>
169
+ )
170
+ }
171
+
172
+ export {
173
+ Select,
174
+ SelectContent,
175
+ SelectGroup,
176
+ SelectItem,
177
+ SelectLabel,
178
+ SelectScrollDownButton,
179
+ SelectScrollUpButton,
180
+ SelectSeparator,
181
+ SelectTrigger,
182
+ SelectValue,
183
+ }
src/components/ui/tabs.tsx ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+ import * as TabsPrimitive from "@radix-ui/react-tabs"
3
+
4
+ import { cn } from "@/lib/utils"
5
+
6
+ function Tabs({
7
+ className,
8
+ ...props
9
+ }: React.ComponentProps<typeof TabsPrimitive.Root>) {
10
+ return (
11
+ <TabsPrimitive.Root
12
+ data-slot="tabs"
13
+ className={cn("flex flex-col gap-2", className)}
14
+ {...props}
15
+ />
16
+ )
17
+ }
18
+
19
+ function TabsList({
20
+ className,
21
+ ...props
22
+ }: React.ComponentProps<typeof TabsPrimitive.List>) {
23
+ return (
24
+ <TabsPrimitive.List
25
+ data-slot="tabs-list"
26
+ className={cn(
27
+ "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",
28
+ className
29
+ )}
30
+ {...props}
31
+ />
32
+ )
33
+ }
34
+
35
+ function TabsTrigger({
36
+ className,
37
+ ...props
38
+ }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {
39
+ return (
40
+ <TabsPrimitive.Trigger
41
+ data-slot="tabs-trigger"
42
+ className={cn(
43
+ "data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
44
+ className
45
+ )}
46
+ {...props}
47
+ />
48
+ )
49
+ }
50
+
51
+ function TabsContent({
52
+ className,
53
+ ...props
54
+ }: React.ComponentProps<typeof TabsPrimitive.Content>) {
55
+ return (
56
+ <TabsPrimitive.Content
57
+ data-slot="tabs-content"
58
+ className={cn("flex-1 outline-none", className)}
59
+ {...props}
60
+ />
61
+ )
62
+ }
63
+
64
+ export { Tabs, TabsList, TabsTrigger, TabsContent }
src/components/viewer-tab.tsx ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import {
5
+ Select,
6
+ SelectContent,
7
+ SelectItem,
8
+ SelectTrigger,
9
+ SelectValue,
10
+ } from "@/components/ui/select";
11
+ import { Card } from "@/components/ui/card";
12
+ import ForceDirectedGraph from "@/components/force-directed-graph";
13
+ import ReasoningTrace from "@/components/reasoning-trace";
14
+ import RunsList from "@/components/runs-list";
15
+
16
+ // Sample data - would be fetched from HuggingFace dataset in a real implementation
17
+ const sampleRuns = [
18
+ { id: 1, start: "Pokemon", end: "Canada", hops: 16 },
19
+ { id: 2, start: "Pokemon", end: "Canada", hops: 16 },
20
+ { id: 3, start: "Pokemon", end: "Canada", hops: 16 },
21
+ { id: 4, start: "Pokemon", end: "Canada", hops: 16 },
22
+ // Add more sample runs as needed
23
+ ];
24
+
25
+ const datasets = [
26
+ { id: "dataset1", name: "Wikispeedia Paths" },
27
+ { id: "dataset2", name: "LLM Generated Paths" },
28
+ ];
29
+
30
+ export default function ViewerTab() {
31
+ const [selectedDataset, setSelectedDataset] = useState<string>("");
32
+ const [selectedRun, setSelectedRun] = useState<number | null>(null);
33
+
34
+ const handleDatasetChange = (value: string) => {
35
+ setSelectedDataset(value);
36
+ setSelectedRun(null);
37
+ };
38
+
39
+ const handleRunSelect = (runId: number) => {
40
+ setSelectedRun(runId);
41
+ };
42
+
43
+ return (
44
+ <div className="grid grid-cols-1 md:grid-cols-12 gap-4">
45
+ <div className="md:col-span-3">
46
+ <div className="mb-4">
47
+ <Select value={selectedDataset} onValueChange={handleDatasetChange}>
48
+ <SelectTrigger className="w-full">
49
+ <SelectValue placeholder="SELECT DATASET" />
50
+ </SelectTrigger>
51
+ <SelectContent>
52
+ {datasets.map((dataset) => (
53
+ <SelectItem key={dataset.id} value={dataset.id}>
54
+ {dataset.name}
55
+ </SelectItem>
56
+ ))}
57
+ </SelectContent>
58
+ </Select>
59
+ </div>
60
+
61
+ <div className="bg-card rounded-lg p-3 border">
62
+ <h3 className="text-sm font-medium mb-2 text-muted-foreground">
63
+ Available Runs
64
+ </h3>
65
+ <RunsList
66
+ runs={sampleRuns}
67
+ onSelectRun={handleRunSelect}
68
+ selectedRunId={selectedRun}
69
+ />
70
+ </div>
71
+ </div>
72
+
73
+ <div className="md:col-span-5">
74
+ <Card className="w-full h-[600px] flex items-center justify-center">
75
+ <ForceDirectedGraph runId={selectedRun} />
76
+ </Card>
77
+ </div>
78
+
79
+ <div className="md:col-span-4">
80
+ <Card className="w-full h-[600px] p-4">
81
+ <ReasoningTrace runId={selectedRun} />
82
+ </Card>
83
+ </div>
84
+ </div>
85
+ );
86
+ }
yarn.lock CHANGED
@@ -376,6 +376,33 @@
376
  "@eslint/core" "^0.13.0"
377
  levn "^0.4.1"
378
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
379
  "@humanfs/core@^0.19.1":
380
  version "0.19.1"
381
  resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
@@ -466,18 +493,245 @@
466
  "@nodelib/fs.scandir" "2.1.5"
467
  fastq "^1.6.0"
468
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
  "@radix-ui/[email protected]":
470
  version "1.1.2"
471
  resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30"
472
  integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==
473
 
474
- "@radix-ui/react-slot@^1.2.0":
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
475
  version "1.2.0"
476
  resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.0.tgz#57727fc186ddb40724ccfbe294e1a351d92462ba"
477
  integrity sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==
478
  dependencies:
479
  "@radix-ui/react-compose-refs" "1.1.2"
480
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
481
  "@rollup/[email protected]":
482
  version "4.40.1"
483
  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz#e1562d360bca73c7bef6feef86098de3a2f1d442"
@@ -875,6 +1129,13 @@ argparse@^2.0.1:
875
  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
876
  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
877
 
 
 
 
 
 
 
 
878
  balanced-match@^1.0.0:
879
  version "1.0.2"
880
  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -995,6 +1256,11 @@ detect-libc@^2.0.3:
995
  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8"
996
  integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==
997
 
 
 
 
 
 
998
  electron-to-chromium@^1.5.73:
999
  version "1.5.145"
1000
  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.145.tgz#abd50700ac2c809e40a4694584f66711ee937fb6"
@@ -1234,6 +1500,11 @@ gensync@^1.0.0-beta.2:
1234
  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
1235
  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1236
 
 
 
 
 
 
1237
  glob-parent@^5.1.2:
1238
  version "5.1.2"
1239
  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
@@ -1608,6 +1879,33 @@ react-refresh@^0.17.0:
1608
  resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
1609
  integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==
1610
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1611
  react@^19.0.0:
1612
  version "19.1.0"
1613
  resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75"
@@ -1738,7 +2036,7 @@ ts-api-utils@^2.0.1:
1738
  resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
1739
  integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
1740
 
1741
- tslib@^2.4.0, tslib@^2.8.0:
1742
  version "2.8.1"
1743
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
1744
  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
@@ -1789,6 +2087,21 @@ uri-js@^4.2.2:
1789
  dependencies:
1790
  punycode "^2.1.0"
1791
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1792
  vite@^6.3.1:
1793
  version "6.3.4"
1794
  resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.4.tgz#d441a72c7cd9a93b719bb851250a4e6c119c9cff"
 
376
  "@eslint/core" "^0.13.0"
377
  levn "^0.4.1"
378
 
379
+ "@floating-ui/core@^1.6.0":
380
+ version "1.6.9"
381
+ resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.9.tgz#64d1da251433019dafa091de9b2886ff35ec14e6"
382
+ integrity sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==
383
+ dependencies:
384
+ "@floating-ui/utils" "^0.2.9"
385
+
386
+ "@floating-ui/dom@^1.0.0":
387
+ version "1.6.13"
388
+ resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34"
389
+ integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==
390
+ dependencies:
391
+ "@floating-ui/core" "^1.6.0"
392
+ "@floating-ui/utils" "^0.2.9"
393
+
394
+ "@floating-ui/react-dom@^2.0.0":
395
+ version "2.1.2"
396
+ resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31"
397
+ integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==
398
+ dependencies:
399
+ "@floating-ui/dom" "^1.0.0"
400
+
401
+ "@floating-ui/utils@^0.2.9":
402
+ version "0.2.9"
403
+ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429"
404
+ integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==
405
+
406
  "@humanfs/core@^0.19.1":
407
  version "0.19.1"
408
  resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
 
493
  "@nodelib/fs.scandir" "2.1.5"
494
  fastq "^1.6.0"
495
 
496
+ "@radix-ui/[email protected]":
497
+ version "1.1.1"
498
+ resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.1.tgz#7b2c9225fbf1b126539551f5985769d0048d9090"
499
+ integrity sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==
500
+
501
+ "@radix-ui/[email protected]":
502
+ version "1.1.2"
503
+ resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.2.tgz#83f415c4425f21e3d27914c12b3272a32e3dae65"
504
+ integrity sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==
505
+
506
+ "@radix-ui/[email protected]":
507
+ version "1.1.4"
508
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.4.tgz#08e263c692b3a56a3f1c4bdc8405b7f73f070963"
509
+ integrity sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw==
510
+ dependencies:
511
+ "@radix-ui/react-primitive" "2.1.0"
512
+
513
+ "@radix-ui/[email protected]":
514
+ version "1.1.4"
515
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.4.tgz#45fb4215ca26a84bd61b9b1337105e4d4e01b686"
516
+ integrity sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg==
517
+ dependencies:
518
+ "@radix-ui/react-compose-refs" "1.1.2"
519
+ "@radix-ui/react-context" "1.1.2"
520
+ "@radix-ui/react-primitive" "2.1.0"
521
+ "@radix-ui/react-slot" "1.2.0"
522
+
523
  "@radix-ui/[email protected]":
524
  version "1.1.2"
525
  resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz#a2c4c47af6337048ee78ff6dc0d090b390d2bb30"
526
  integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==
527
 
528
+ "@radix-ui/react-context@1.1.2":
529
+ version "1.1.2"
530
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.2.tgz#61628ef269a433382c364f6f1e3788a6dc213a36"
531
+ integrity sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==
532
+
533
+ "@radix-ui/[email protected]":
534
+ version "1.1.1"
535
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.1.tgz#39e5a5769e676c753204b792fbe6cf508e550a14"
536
+ integrity sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==
537
+
538
+ "@radix-ui/[email protected]":
539
+ version "1.1.7"
540
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.7.tgz#80b5c23a0d29cfe56850399210c603376c27091f"
541
+ integrity sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw==
542
+ dependencies:
543
+ "@radix-ui/primitive" "1.1.2"
544
+ "@radix-ui/react-compose-refs" "1.1.2"
545
+ "@radix-ui/react-primitive" "2.1.0"
546
+ "@radix-ui/react-use-callback-ref" "1.1.1"
547
+ "@radix-ui/react-use-escape-keydown" "1.1.1"
548
+
549
+ "@radix-ui/[email protected]":
550
+ version "1.1.2"
551
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz#4ec9a7e50925f7fb661394460045b46212a33bed"
552
+ integrity sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==
553
+
554
+ "@radix-ui/[email protected]":
555
+ version "1.1.4"
556
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.4.tgz#dbe9ed31b36ff9aadadf4b59aa733a4e91799d15"
557
+ integrity sha512-r2annK27lIW5w9Ho5NyQgqs0MmgZSTIKXWpVCJaLC1q2kZrZkcqnmHkCHMEmv8XLvsLlurKMPT+kbKkRkm/xVA==
558
+ dependencies:
559
+ "@radix-ui/react-compose-refs" "1.1.2"
560
+ "@radix-ui/react-primitive" "2.1.0"
561
+ "@radix-ui/react-use-callback-ref" "1.1.1"
562
+
563
+ "@radix-ui/[email protected]":
564
+ version "1.1.1"
565
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.1.tgz#1404002e79a03fe062b7e3864aa01e24bd1471f7"
566
+ integrity sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==
567
+ dependencies:
568
+ "@radix-ui/react-use-layout-effect" "1.1.1"
569
+
570
+ "@radix-ui/[email protected]":
571
+ version "1.2.4"
572
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.4.tgz#8fd6d954fca9e5d1341c7d9153cc88e05d5ed84e"
573
+ integrity sha512-3p2Rgm/a1cK0r/UVkx5F/K9v/EplfjAeIFCGOPYPO4lZ0jtg4iSQXt/YGTSLWaf4x7NG6Z4+uKFcylcTZjeqDA==
574
+ dependencies:
575
+ "@floating-ui/react-dom" "^2.0.0"
576
+ "@radix-ui/react-arrow" "1.1.4"
577
+ "@radix-ui/react-compose-refs" "1.1.2"
578
+ "@radix-ui/react-context" "1.1.2"
579
+ "@radix-ui/react-primitive" "2.1.0"
580
+ "@radix-ui/react-use-callback-ref" "1.1.1"
581
+ "@radix-ui/react-use-layout-effect" "1.1.1"
582
+ "@radix-ui/react-use-rect" "1.1.1"
583
+ "@radix-ui/react-use-size" "1.1.1"
584
+ "@radix-ui/rect" "1.1.1"
585
+
586
+ "@radix-ui/[email protected]":
587
+ version "1.1.6"
588
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.6.tgz#4202e1bb34afdac612e4e982eca8efd36cbc611f"
589
+ integrity sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw==
590
+ dependencies:
591
+ "@radix-ui/react-primitive" "2.1.0"
592
+ "@radix-ui/react-use-layout-effect" "1.1.1"
593
+
594
+ "@radix-ui/[email protected]":
595
+ version "1.1.4"
596
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.4.tgz#253ac0ad4946c5b4a9c66878335f5cf07c967ced"
597
+ integrity sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==
598
+ dependencies:
599
+ "@radix-ui/react-compose-refs" "1.1.2"
600
+ "@radix-ui/react-use-layout-effect" "1.1.1"
601
+
602
+ "@radix-ui/[email protected]":
603
+ version "2.1.0"
604
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.1.0.tgz#9233e17a22d0010195086f8b5eb1808ebbca8437"
605
+ integrity sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw==
606
+ dependencies:
607
+ "@radix-ui/react-slot" "1.2.0"
608
+
609
+ "@radix-ui/[email protected]":
610
+ version "1.1.7"
611
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.7.tgz#02077705ab0c712d2d9692459a7194c5a4e5236d"
612
+ integrity sha512-C6oAg451/fQT3EGbWHbCQjYTtbyjNO1uzQgMzwyivcHT3GKNEmu1q3UuREhN+HzHAVtv3ivMVK08QlC+PkYw9Q==
613
+ dependencies:
614
+ "@radix-ui/primitive" "1.1.2"
615
+ "@radix-ui/react-collection" "1.1.4"
616
+ "@radix-ui/react-compose-refs" "1.1.2"
617
+ "@radix-ui/react-context" "1.1.2"
618
+ "@radix-ui/react-direction" "1.1.1"
619
+ "@radix-ui/react-id" "1.1.1"
620
+ "@radix-ui/react-primitive" "2.1.0"
621
+ "@radix-ui/react-use-callback-ref" "1.1.1"
622
+ "@radix-ui/react-use-controllable-state" "1.2.2"
623
+
624
+ "@radix-ui/react-select@^2.2.2":
625
+ version "2.2.2"
626
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-select/-/react-select-2.2.2.tgz#96759b9dcf4e80f6f39c1ad706718f1b2928ba21"
627
+ integrity sha512-HjkVHtBkuq+r3zUAZ/CvNWUGKPfuicGDbgtZgiQuFmNcV5F+Tgy24ep2nsAW2nFgvhGPJVqeBZa6KyVN0EyrBA==
628
+ dependencies:
629
+ "@radix-ui/number" "1.1.1"
630
+ "@radix-ui/primitive" "1.1.2"
631
+ "@radix-ui/react-collection" "1.1.4"
632
+ "@radix-ui/react-compose-refs" "1.1.2"
633
+ "@radix-ui/react-context" "1.1.2"
634
+ "@radix-ui/react-direction" "1.1.1"
635
+ "@radix-ui/react-dismissable-layer" "1.1.7"
636
+ "@radix-ui/react-focus-guards" "1.1.2"
637
+ "@radix-ui/react-focus-scope" "1.1.4"
638
+ "@radix-ui/react-id" "1.1.1"
639
+ "@radix-ui/react-popper" "1.2.4"
640
+ "@radix-ui/react-portal" "1.1.6"
641
+ "@radix-ui/react-primitive" "2.1.0"
642
+ "@radix-ui/react-slot" "1.2.0"
643
+ "@radix-ui/react-use-callback-ref" "1.1.1"
644
+ "@radix-ui/react-use-controllable-state" "1.2.2"
645
+ "@radix-ui/react-use-layout-effect" "1.1.1"
646
+ "@radix-ui/react-use-previous" "1.1.1"
647
+ "@radix-ui/react-visually-hidden" "1.2.0"
648
+ aria-hidden "^1.2.4"
649
+ react-remove-scroll "^2.6.3"
650
+
651
+ "@radix-ui/[email protected]", "@radix-ui/react-slot@^1.2.0":
652
  version "1.2.0"
653
  resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.2.0.tgz#57727fc186ddb40724ccfbe294e1a351d92462ba"
654
  integrity sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==
655
  dependencies:
656
  "@radix-ui/react-compose-refs" "1.1.2"
657
 
658
+ "@radix-ui/react-tabs@^1.1.9":
659
+ version "1.1.9"
660
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-tabs/-/react-tabs-1.1.9.tgz#4170432717f32d2e75de3a9853ad0a557ccc1346"
661
+ integrity sha512-KIjtwciYvquiW/wAFkELZCVnaNLBsYNhTNcvl+zfMAbMhRkcvNuCLXDDd22L0j7tagpzVh/QwbFpwAATg7ILPw==
662
+ dependencies:
663
+ "@radix-ui/primitive" "1.1.2"
664
+ "@radix-ui/react-context" "1.1.2"
665
+ "@radix-ui/react-direction" "1.1.1"
666
+ "@radix-ui/react-id" "1.1.1"
667
+ "@radix-ui/react-presence" "1.1.4"
668
+ "@radix-ui/react-primitive" "2.1.0"
669
+ "@radix-ui/react-roving-focus" "1.1.7"
670
+ "@radix-ui/react-use-controllable-state" "1.2.2"
671
+
672
+ "@radix-ui/[email protected]":
673
+ version "1.1.1"
674
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz#62a4dba8b3255fdc5cc7787faeac1c6e4cc58d40"
675
+ integrity sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==
676
+
677
+ "@radix-ui/[email protected]":
678
+ version "1.2.2"
679
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz#905793405de57d61a439f4afebbb17d0645f3190"
680
+ integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==
681
+ dependencies:
682
+ "@radix-ui/react-use-effect-event" "0.0.2"
683
+ "@radix-ui/react-use-layout-effect" "1.1.1"
684
+
685
+ "@radix-ui/[email protected]":
686
+ version "0.0.2"
687
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz#090cf30d00a4c7632a15548512e9152217593907"
688
+ integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==
689
+ dependencies:
690
+ "@radix-ui/react-use-layout-effect" "1.1.1"
691
+
692
+ "@radix-ui/[email protected]":
693
+ version "1.1.1"
694
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz#b3fed9bbea366a118f40427ac40500aa1423cc29"
695
+ integrity sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==
696
+ dependencies:
697
+ "@radix-ui/react-use-callback-ref" "1.1.1"
698
+
699
+ "@radix-ui/[email protected]":
700
+ version "1.1.1"
701
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz#0c4230a9eed49d4589c967e2d9c0d9d60a23971e"
702
+ integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==
703
+
704
+ "@radix-ui/[email protected]":
705
+ version "1.1.1"
706
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz#1a1ad5568973d24051ed0af687766f6c7cb9b5b5"
707
+ integrity sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==
708
+
709
+ "@radix-ui/[email protected]":
710
+ version "1.1.1"
711
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz#01443ca8ed071d33023c1113e5173b5ed8769152"
712
+ integrity sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==
713
+ dependencies:
714
+ "@radix-ui/rect" "1.1.1"
715
+
716
+ "@radix-ui/[email protected]":
717
+ version "1.1.1"
718
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz#6de276ffbc389a537ffe4316f5b0f24129405b37"
719
+ integrity sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==
720
+ dependencies:
721
+ "@radix-ui/react-use-layout-effect" "1.1.1"
722
+
723
+ "@radix-ui/[email protected]":
724
+ version "1.2.0"
725
+ resolved "https://registry.yarnpkg.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.0.tgz#7692a590b4789bebf7e02d73e6d1390704a97920"
726
+ integrity sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg==
727
+ dependencies:
728
+ "@radix-ui/react-primitive" "2.1.0"
729
+
730
+ "@radix-ui/[email protected]":
731
+ version "1.1.1"
732
+ resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.1.tgz#78244efe12930c56fd255d7923865857c41ac8cb"
733
+ integrity sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==
734
+
735
  "@rollup/[email protected]":
736
  version "4.40.1"
737
  resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.1.tgz#e1562d360bca73c7bef6feef86098de3a2f1d442"
 
1129
  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
1130
  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
1131
 
1132
+ aria-hidden@^1.2.4:
1133
+ version "1.2.4"
1134
+ resolved "https://registry.yarnpkg.com/aria-hidden/-/aria-hidden-1.2.4.tgz#b78e383fdbc04d05762c78b4a25a501e736c4522"
1135
+ integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==
1136
+ dependencies:
1137
+ tslib "^2.0.0"
1138
+
1139
  balanced-match@^1.0.0:
1140
  version "1.0.2"
1141
  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
 
1256
  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8"
1257
  integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==
1258
 
1259
+ detect-node-es@^1.1.0:
1260
+ version "1.1.0"
1261
+ resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493"
1262
+ integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
1263
+
1264
  electron-to-chromium@^1.5.73:
1265
  version "1.5.145"
1266
  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.145.tgz#abd50700ac2c809e40a4694584f66711ee937fb6"
 
1500
  resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
1501
  integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1502
 
1503
+ get-nonce@^1.0.0:
1504
+ version "1.0.1"
1505
+ resolved "https://registry.yarnpkg.com/get-nonce/-/get-nonce-1.0.1.tgz#fdf3f0278073820d2ce9426c18f07481b1e0cdf3"
1506
+ integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==
1507
+
1508
  glob-parent@^5.1.2:
1509
  version "5.1.2"
1510
  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
 
1879
  resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
1880
  integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==
1881
 
1882
+ react-remove-scroll-bar@^2.3.7:
1883
+ version "2.3.8"
1884
+ resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223"
1885
+ integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==
1886
+ dependencies:
1887
+ react-style-singleton "^2.2.2"
1888
+ tslib "^2.0.0"
1889
+
1890
+ react-remove-scroll@^2.6.3:
1891
+ version "2.6.3"
1892
+ resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz#df02cde56d5f2731e058531f8ffd7f9adec91ac2"
1893
+ integrity sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==
1894
+ dependencies:
1895
+ react-remove-scroll-bar "^2.3.7"
1896
+ react-style-singleton "^2.2.3"
1897
+ tslib "^2.1.0"
1898
+ use-callback-ref "^1.3.3"
1899
+ use-sidecar "^1.1.3"
1900
+
1901
+ react-style-singleton@^2.2.2, react-style-singleton@^2.2.3:
1902
+ version "2.2.3"
1903
+ resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388"
1904
+ integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==
1905
+ dependencies:
1906
+ get-nonce "^1.0.0"
1907
+ tslib "^2.0.0"
1908
+
1909
  react@^19.0.0:
1910
  version "19.1.0"
1911
  resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75"
 
2036
  resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
2037
  integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
2038
 
2039
+ tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.8.0:
2040
  version "2.8.1"
2041
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
2042
  integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
 
2087
  dependencies:
2088
  punycode "^2.1.0"
2089
 
2090
+ use-callback-ref@^1.3.3:
2091
+ version "1.3.3"
2092
+ resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf"
2093
+ integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==
2094
+ dependencies:
2095
+ tslib "^2.0.0"
2096
+
2097
+ use-sidecar@^1.1.3:
2098
+ version "1.1.3"
2099
+ resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb"
2100
+ integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==
2101
+ dependencies:
2102
+ detect-node-es "^1.1.0"
2103
+ tslib "^2.0.0"
2104
+
2105
  vite@^6.3.1:
2106
  version "6.3.4"
2107
  resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.4.tgz#d441a72c7cd9a93b719bb851250a4e6c119c9cff"