Spaces:
Running
Running
Commit
·
8de92d1
1
Parent(s):
1c04688
removed large file
Browse files- .gitignore +3 -0
- Dockerfile +38 -0
- README.md +8 -54
- api.py +86 -0
- package.json +9 -1
- requirements.txt +14 -0
- src/App.tsx +5 -2
- src/components/force-directed-graph.tsx +97 -131
- src/components/game-component.tsx +424 -0
- src/components/play-tab.tsx +261 -2
- src/components/reasoning-trace.tsx +85 -43
- src/components/runs-list.tsx +11 -12
- src/components/sign-in-with-hf-button.tsx +85 -0
- src/components/ui/label.tsx +22 -0
- src/components/viewer-tab.tsx +52 -5
- src/lib/inference.tsx +39 -0
- tsconfig.app.json +1 -1
- yarn.lock +645 -1
.gitignore
CHANGED
@@ -22,3 +22,6 @@ dist-ssr
|
|
22 |
*.njsproj
|
23 |
*.sln
|
24 |
*.sw?
|
|
|
|
|
|
|
|
22 |
*.njsproj
|
23 |
*.sln
|
24 |
*.sw?
|
25 |
+
|
26 |
+
.env
|
27 |
+
tmp
|
Dockerfile
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
FROM python:3.9
|
2 |
+
|
3 |
+
# Set up a new user named "user" with user ID 1000
|
4 |
+
RUN useradd -m -u 1000 user
|
5 |
+
|
6 |
+
# Switch to the "user" user
|
7 |
+
USER user
|
8 |
+
|
9 |
+
# Set home to the user's home directory
|
10 |
+
ENV HOME=/home/user \
|
11 |
+
PATH=/home/user/.local/bin:$PATH
|
12 |
+
|
13 |
+
# Set the working directory to the user's home directory
|
14 |
+
WORKDIR $HOME/app
|
15 |
+
|
16 |
+
# install nodejs
|
17 |
+
ENV PYTHONUNBUFFERED 1
|
18 |
+
RUN apt-get update && apt-get install nodejs
|
19 |
+
|
20 |
+
COPY requirements.txt .
|
21 |
+
|
22 |
+
# Try and run pip command after setting the user with `USER user` to avoid permission issues with Python
|
23 |
+
RUN pip install --no-cache-dir --upgrade pip
|
24 |
+
|
25 |
+
RUN pip install -r requirements.txt
|
26 |
+
|
27 |
+
# Copy the current directory contents into the container at $HOME/app setting the owner to the user
|
28 |
+
COPY --chown=user . $HOME/app
|
29 |
+
|
30 |
+
RUN npm install
|
31 |
+
RUN npm run build
|
32 |
+
|
33 |
+
CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "7860"]
|
34 |
+
|
35 |
+
|
36 |
+
# # Download a checkpoint
|
37 |
+
# RUN mkdir content
|
38 |
+
# ADD --chown=user https://<SOME_ASSET_URL> content/<SOME_ASSET_NAME>
|
README.md
CHANGED
@@ -1,54 +1,8 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
## Expanding the ESLint configuration
|
11 |
-
|
12 |
-
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
|
13 |
-
|
14 |
-
```js
|
15 |
-
export default tseslint.config({
|
16 |
-
extends: [
|
17 |
-
// Remove ...tseslint.configs.recommended and replace with this
|
18 |
-
...tseslint.configs.recommendedTypeChecked,
|
19 |
-
// Alternatively, use this for stricter rules
|
20 |
-
...tseslint.configs.strictTypeChecked,
|
21 |
-
// Optionally, add this for stylistic rules
|
22 |
-
...tseslint.configs.stylisticTypeChecked,
|
23 |
-
],
|
24 |
-
languageOptions: {
|
25 |
-
// other options...
|
26 |
-
parserOptions: {
|
27 |
-
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
28 |
-
tsconfigRootDir: import.meta.dirname,
|
29 |
-
},
|
30 |
-
},
|
31 |
-
})
|
32 |
-
```
|
33 |
-
|
34 |
-
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
|
35 |
-
|
36 |
-
```js
|
37 |
-
// eslint.config.js
|
38 |
-
import reactX from 'eslint-plugin-react-x'
|
39 |
-
import reactDom from 'eslint-plugin-react-dom'
|
40 |
-
|
41 |
-
export default tseslint.config({
|
42 |
-
plugins: {
|
43 |
-
// Add the react-x and react-dom plugins
|
44 |
-
'react-x': reactX,
|
45 |
-
'react-dom': reactDom,
|
46 |
-
},
|
47 |
-
rules: {
|
48 |
-
// other rules...
|
49 |
-
// Enable its recommended typescript rules
|
50 |
-
...reactX.configs['recommended-typescript'].rules,
|
51 |
-
...reactDom.configs.recommended.rules,
|
52 |
-
},
|
53 |
-
})
|
54 |
-
```
|
|
|
1 |
+
---
|
2 |
+
title: Wikispeedia
|
3 |
+
emoji: 🐳
|
4 |
+
colorFrom: purple
|
5 |
+
colorTo: gray
|
6 |
+
sdk: docker
|
7 |
+
app_port: 7860
|
8 |
+
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
api.py
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import sqlite3
|
2 |
+
import json
|
3 |
+
import os
|
4 |
+
from typing import Tuple, List, Optional
|
5 |
+
from functools import lru_cache
|
6 |
+
from fastapi import FastAPI, HTTPException
|
7 |
+
from fastapi.middleware.cors import CORSMiddleware
|
8 |
+
from fastapi.staticfiles import StaticFiles
|
9 |
+
from pydantic import BaseModel
|
10 |
+
import uvicorn
|
11 |
+
from fastapi.responses import FileResponse
|
12 |
+
|
13 |
+
app = FastAPI(title="WikiSpeedia API")
|
14 |
+
|
15 |
+
# Add CORS middleware
|
16 |
+
app.add_middleware(
|
17 |
+
CORSMiddleware,
|
18 |
+
allow_origins=["*"], # Allows all origins
|
19 |
+
allow_credentials=True,
|
20 |
+
allow_methods=["*"], # Allows all methods
|
21 |
+
allow_headers=["*"], # Allows all headers
|
22 |
+
)
|
23 |
+
|
24 |
+
class ArticleResponse(BaseModel):
|
25 |
+
title: str
|
26 |
+
links: List[str]
|
27 |
+
|
28 |
+
class HealthResponse(BaseModel):
|
29 |
+
status: str
|
30 |
+
article_count: int
|
31 |
+
|
32 |
+
class SQLiteDB:
|
33 |
+
def __init__(self, db_path: str):
|
34 |
+
"""Initialize the database with path to SQLite database"""
|
35 |
+
self.db_path = db_path
|
36 |
+
self.conn = sqlite3.connect(db_path)
|
37 |
+
self.conn.row_factory = sqlite3.Row
|
38 |
+
self.cursor = self.conn.cursor()
|
39 |
+
self._article_count = self._get_article_count()
|
40 |
+
print(f"Connected to SQLite database with {self._article_count} articles")
|
41 |
+
|
42 |
+
def _get_article_count(self):
|
43 |
+
self.cursor.execute("SELECT COUNT(*) FROM core_articles")
|
44 |
+
return self.cursor.fetchone()[0]
|
45 |
+
|
46 |
+
@lru_cache(maxsize=8192)
|
47 |
+
def get_article_with_links(self, article_title: str) -> Tuple[str, List[str]]:
|
48 |
+
self.cursor.execute(
|
49 |
+
"SELECT title, links_json FROM core_articles WHERE title = ?",
|
50 |
+
(article_title,),
|
51 |
+
)
|
52 |
+
article = self.cursor.fetchone()
|
53 |
+
if not article:
|
54 |
+
return None, []
|
55 |
+
|
56 |
+
links = json.loads(article["links_json"])
|
57 |
+
return article["title"], links
|
58 |
+
|
59 |
+
# Initialize database connection
|
60 |
+
db = SQLiteDB(
|
61 |
+
os.getenv("WIKISPEEDIA_DB_PATH", "/Users/jts/daily/wikihop/db/data/wikihop.db")
|
62 |
+
)
|
63 |
+
|
64 |
+
@app.get("/health", response_model=HealthResponse)
|
65 |
+
async def health_check():
|
66 |
+
"""Health check endpoint that returns the article count"""
|
67 |
+
return HealthResponse(
|
68 |
+
status="healthy",
|
69 |
+
article_count=db._article_count
|
70 |
+
)
|
71 |
+
|
72 |
+
@app.get("/get_article_with_links/{article_title}", response_model=ArticleResponse)
|
73 |
+
async def get_article(article_title: str):
|
74 |
+
"""Get article and its links by title"""
|
75 |
+
title, links = db.get_article_with_links(article_title)
|
76 |
+
if title is None:
|
77 |
+
raise HTTPException(status_code=404, detail="Article not found")
|
78 |
+
return ArticleResponse(title=title, links=links)
|
79 |
+
|
80 |
+
|
81 |
+
# Mount the dist folder for static files
|
82 |
+
app.mount("/", StaticFiles(directory="dist", html=True), name="static")
|
83 |
+
|
84 |
+
|
85 |
+
if __name__ == "__main__":
|
86 |
+
uvicorn.run(app, host="0.0.0.0", port=8000)
|
package.json
CHANGED
@@ -5,21 +5,29 @@
|
|
5 |
"type": "module",
|
6 |
"scripts": {
|
7 |
"dev": "vite",
|
8 |
-
"build": "
|
9 |
"deploy": "yarn build && huggingface-cli upload --repo-type space --private HuggingFaceTB/Wikispeedia dist",
|
10 |
"lint": "eslint .",
|
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",
|
|
|
|
|
20 |
"lucide-react": "^0.503.0",
|
21 |
"react": "^19.0.0",
|
22 |
"react-dom": "^19.0.0",
|
|
|
|
|
|
|
23 |
"tailwind-merge": "^3.2.0",
|
24 |
"tailwindcss": "^4.1.5"
|
25 |
},
|
|
|
5 |
"type": "module",
|
6 |
"scripts": {
|
7 |
"dev": "vite",
|
8 |
+
"build": "vite build",
|
9 |
"deploy": "yarn build && huggingface-cli upload --repo-type space --private HuggingFaceTB/Wikispeedia dist",
|
10 |
"lint": "eslint .",
|
11 |
"preview": "vite preview"
|
12 |
},
|
13 |
"dependencies": {
|
14 |
+
"@huggingface/hub": "^1.1.2",
|
15 |
+
"@huggingface/inference": "^3.10.0",
|
16 |
+
"@radix-ui/react-label": "^2.1.4",
|
17 |
"@radix-ui/react-select": "^2.2.2",
|
18 |
"@radix-ui/react-slot": "^1.2.0",
|
19 |
"@radix-ui/react-tabs": "^1.1.9",
|
20 |
"@tailwindcss/vite": "^4.1.5",
|
21 |
"class-variance-authority": "^0.7.1",
|
22 |
"clsx": "^2.1.1",
|
23 |
+
"d3": "^7.9.0",
|
24 |
+
"jwt-decode": "^4.0.0",
|
25 |
"lucide-react": "^0.503.0",
|
26 |
"react": "^19.0.0",
|
27 |
"react-dom": "^19.0.0",
|
28 |
+
"react-force-graph-2d": "^1.27.1",
|
29 |
+
"react-force-graph-3d": "^1.26.1",
|
30 |
+
"react-vis-force": "^0.3.1",
|
31 |
"tailwind-merge": "^3.2.0",
|
32 |
"tailwindcss": "^4.1.5"
|
33 |
},
|
requirements.txt
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
annotated-types==0.7.0
|
2 |
+
anyio==4.9.0
|
3 |
+
click==8.1.8
|
4 |
+
exceptiongroup==1.2.2
|
5 |
+
fastapi==0.115.12
|
6 |
+
h11==0.16.0
|
7 |
+
idna==3.10
|
8 |
+
pydantic==2.11.4
|
9 |
+
pydantic-core==2.33.2
|
10 |
+
sniffio==1.3.1
|
11 |
+
starlette==0.46.2
|
12 |
+
typing-extensions==4.13.2
|
13 |
+
typing-inspection==0.4.0
|
14 |
+
uvicorn==0.34.2
|
src/App.tsx
CHANGED
@@ -1,11 +1,14 @@
|
|
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 |
-
<
|
|
|
|
|
|
|
9 |
|
10 |
<Tabs defaultValue="view" className="w-full">
|
11 |
<TabsList className="mb-4">
|
|
|
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 |
+
import { SignInWithHuggingFaceButton } from "@/components/sign-in-with-hf-button";
|
5 |
export default function Home() {
|
6 |
return (
|
7 |
<div className="container mx-auto p-4">
|
8 |
+
<div className="flex flex-row justify-between">
|
9 |
+
<h1 className="text-3xl font-bold mb-6">Wikispeedia</h1>
|
10 |
+
<SignInWithHuggingFaceButton />
|
11 |
+
</div>
|
12 |
|
13 |
<Tabs defaultValue="view" className="w-full">
|
14 |
<TabsList className="mb-4">
|
src/components/force-directed-graph.tsx
CHANGED
@@ -1,143 +1,109 @@
|
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
return (
|
13 |
-
|
14 |
-
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
}
|
|
|
1 |
"use client";
|
2 |
|
3 |
+
import { useEffect, useRef, useState } from "react";
|
4 |
+
import ForceGraph2D from "react-force-graph-2d";
|
5 |
+
import { Run } from "./reasoning-trace";
|
6 |
+
|
7 |
// This is a placeholder component for the force-directed graph
|
8 |
// In a real implementation, you would use a library like D3.js or react-force-graph
|
9 |
|
10 |
interface ForceDirectedGraphProps {
|
11 |
runId: number | null;
|
12 |
+
runs: Run[];
|
13 |
}
|
14 |
|
15 |
+
export default function ForceDirectedGraph({runs, runId }: ForceDirectedGraphProps) {
|
16 |
+
const [graphData, setGraphData] = useState<{nodes: {id: string}[], links: {source: string, target: string}[]}>({nodes: [], links: []});
|
17 |
+
const [dimensions, setDimensions] = useState({ width: 300, height: 300 });
|
18 |
+
const containerRef = useRef<HTMLDivElement>(null);
|
19 |
+
|
20 |
+
useEffect(() => {
|
21 |
+
|
22 |
+
const newGraphData: {nodes: {id: string}[], links: {source: string, target: string}[]} = {nodes: [], links: []};
|
23 |
+
const nodesSet: Set<string> = new Set();
|
24 |
+
const mainNodeSet: Set<string> = new Set();
|
25 |
+
|
26 |
+
if(runs) {
|
27 |
+
runs.forEach((run) => {
|
28 |
+
// add in src and dst to nodes
|
29 |
+
|
30 |
+
mainNodeSet.add(run.start_article);
|
31 |
+
mainNodeSet.add(run.destination_article);
|
32 |
+
|
33 |
+
for(let i = 0; i < run.steps.length - 1; i++) {
|
34 |
+
const step = run.steps[i];
|
35 |
+
const nextStep = run.steps[i + 1];
|
36 |
+
|
37 |
+
if(!mainNodeSet.has(step.article)) {
|
38 |
+
nodesSet.add(step.article);
|
39 |
+
}
|
40 |
+
|
41 |
+
if(!mainNodeSet.has(nextStep.article)) {
|
42 |
+
nodesSet.add(nextStep.article);
|
43 |
+
}
|
44 |
+
|
45 |
+
newGraphData.links.push({source: step.article, target: nextStep.article});
|
46 |
+
}
|
47 |
+
|
48 |
+
const mainNodes = Array.from(mainNodeSet);
|
49 |
+
const radius = 200; // Radius of the circle
|
50 |
+
const centerX = 400; // Center X coordinate
|
51 |
+
const centerY = 300; // Center Y coordinate
|
52 |
+
|
53 |
+
newGraphData.nodes = mainNodes.map((id, index) => {
|
54 |
+
const angle = (index * 2 * Math.PI) / mainNodes.length;
|
55 |
+
return {
|
56 |
+
id,
|
57 |
+
fx: centerX + radius * Math.cos(angle),
|
58 |
+
fy: centerY + radius * Math.sin(angle),
|
59 |
+
color: "red"
|
60 |
+
};
|
61 |
+
});
|
62 |
+
newGraphData.nodes.push(...Array.from(nodesSet).map((id) => ({id})));
|
63 |
+
});
|
64 |
+
|
65 |
+
setGraphData(newGraphData);
|
66 |
+
}
|
67 |
+
}, [runs]);
|
68 |
+
|
69 |
+
// useEffect(() => {
|
70 |
+
// if (!containerRef.current) return;
|
71 |
+
// const observer = new window.ResizeObserver(entries => {
|
72 |
+
// for (const entry of entries) {
|
73 |
+
// const { width, height } = entry.contentRect;
|
74 |
+
// setDimensions({ width, height });
|
75 |
+
// }
|
76 |
+
// });
|
77 |
+
// observer.observe(containerRef.current);
|
78 |
+
// // Set initial size
|
79 |
+
// setDimensions({
|
80 |
+
// width: containerRef.current.offsetWidth,
|
81 |
+
// height: containerRef.current.offsetHeight
|
82 |
+
// });
|
83 |
+
// return () => observer.disconnect();
|
84 |
+
// }, []);
|
85 |
+
|
86 |
+
// if (!runId) {
|
87 |
+
// return (
|
88 |
+
// <div className="w-full h-full flex items-center justify-center text-muted-foreground">
|
89 |
+
// Select a run to view the path graph
|
90 |
+
// </div>
|
91 |
+
// );
|
92 |
+
// }
|
93 |
+
|
94 |
return (
|
95 |
+
<div className="w-full h-full flex items-center justify-center">
|
96 |
+
<div ref={containerRef} className="w-full h-full">
|
97 |
+
<ForceGraph2D
|
98 |
+
graphData={graphData}
|
99 |
+
nodeLabel="id"
|
100 |
+
linkLabel="id"
|
101 |
+
nodeColor="color"
|
102 |
+
linkColor="gray"
|
103 |
+
width={dimensions.width}
|
104 |
+
height={dimensions.height}
|
105 |
+
/>
|
106 |
+
</div>
|
107 |
+
</div>
|
108 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
}
|
src/components/game-component.tsx
ADDED
@@ -0,0 +1,424 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
"use client";
|
2 |
+
|
3 |
+
import { useState, useEffect, useCallback, useMemo } from "react";
|
4 |
+
import { Card } from "@/components/ui/card";
|
5 |
+
import { Button } from "@/components/ui/button";
|
6 |
+
import { Flag, Clock, Hash, BarChart, ArrowRight, Bot } from "lucide-react";
|
7 |
+
import inference from "@/lib/inference";
|
8 |
+
import ReasoningTrace, { Run, Step } from "./reasoning-trace";
|
9 |
+
import ForceDirectedGraph from "./force-directed-graph";
|
10 |
+
|
11 |
+
const mockRun: Run = {
|
12 |
+
steps: [
|
13 |
+
{
|
14 |
+
type: "start",
|
15 |
+
article: "Dogs",
|
16 |
+
metadata: {
|
17 |
+
message: "Starting Node",
|
18 |
+
},
|
19 |
+
},
|
20 |
+
{
|
21 |
+
type: "step",
|
22 |
+
article: "Dogs",
|
23 |
+
links: ["Dogs", "Cats", "Birds"],
|
24 |
+
metadata: {
|
25 |
+
conversation: [
|
26 |
+
{
|
27 |
+
role: "user",
|
28 |
+
content: "I want to go to the moon",
|
29 |
+
},
|
30 |
+
{
|
31 |
+
role: "assistant",
|
32 |
+
content: "I want to go to the moon",
|
33 |
+
},
|
34 |
+
],
|
35 |
+
},
|
36 |
+
},
|
37 |
+
],
|
38 |
+
};
|
39 |
+
const buildPrompt = (
|
40 |
+
current: string,
|
41 |
+
target: string,
|
42 |
+
path_so_far: string[],
|
43 |
+
links: string[]
|
44 |
+
) => {
|
45 |
+
const formatted_links = links
|
46 |
+
.map((link, index) => `${index + 1}. ${link}`)
|
47 |
+
.join("\n");
|
48 |
+
const path_so_far_str = path_so_far.join(" -> ");
|
49 |
+
|
50 |
+
return `You are playing WikiRun, trying to navigate from one Wikipedia article to another using only links.
|
51 |
+
|
52 |
+
IMPORTANT: You MUST put your final answer in <answer>NUMBER</answer> tags, where NUMBER is the link number.
|
53 |
+
For example, if you want to choose link 3, output <answer>3</answer>.
|
54 |
+
|
55 |
+
Current article: ${current}
|
56 |
+
Target article: ${target}
|
57 |
+
You have ${links.length} link(s) to choose from:
|
58 |
+
${formatted_links}
|
59 |
+
|
60 |
+
Your path so far: ${path_so_far_str}
|
61 |
+
|
62 |
+
Think about which link is most likely to lead you toward the target article.
|
63 |
+
First, analyze each link briefly and how it connects to your goal, then select the most promising one.
|
64 |
+
|
65 |
+
Remember to format your final answer by explicitly writing out the xml number tags like this: <answer>NUMBER</answer>`;
|
66 |
+
};
|
67 |
+
|
68 |
+
const API_BASE = "http://localhost:8000";
|
69 |
+
|
70 |
+
interface GameComponentProps {
|
71 |
+
player: "me" | "model";
|
72 |
+
model?: string;
|
73 |
+
maxHops: number;
|
74 |
+
startPage: string;
|
75 |
+
targetPage: string;
|
76 |
+
onReset: () => void;
|
77 |
+
maxTokens: number;
|
78 |
+
maxLinks: number;
|
79 |
+
}
|
80 |
+
|
81 |
+
export default function GameComponent({
|
82 |
+
player,
|
83 |
+
model,
|
84 |
+
maxHops,
|
85 |
+
startPage,
|
86 |
+
targetPage,
|
87 |
+
onReset,
|
88 |
+
maxTokens,
|
89 |
+
maxLinks,
|
90 |
+
}: GameComponentProps) {
|
91 |
+
const [currentPage, setCurrentPage] = useState<string>(startPage);
|
92 |
+
const [currentPageLinks, setCurrentPageLinks] = useState<string[]>([]);
|
93 |
+
const [linksLoading, setLinksLoading] = useState<boolean>(false);
|
94 |
+
const [hops, setHops] = useState<number>(0);
|
95 |
+
const [timeElapsed, setTimeElapsed] = useState<number>(0);
|
96 |
+
const [visitedNodes, setVisitedNodes] = useState<string[]>([startPage]);
|
97 |
+
const [gameStatus, setGameStatus] = useState<"playing" | "won" | "lost">(
|
98 |
+
"playing"
|
99 |
+
);
|
100 |
+
const [reasoningTrace, setReasoningTrace] = useState<Run | null>({
|
101 |
+
start_article: startPage,
|
102 |
+
destination_article: targetPage,
|
103 |
+
steps: [
|
104 |
+
{
|
105 |
+
type: "start",
|
106 |
+
article: startPage,
|
107 |
+
metadata: {
|
108 |
+
message: "Starting Node",
|
109 |
+
},
|
110 |
+
},
|
111 |
+
],
|
112 |
+
});
|
113 |
+
const [isModelThinking, setIsModelThinking] = useState<boolean>(false);
|
114 |
+
|
115 |
+
const runs = useMemo(() => {
|
116 |
+
return reasoningTrace ? [reasoningTrace] : [];
|
117 |
+
}, [reasoningTrace]);
|
118 |
+
|
119 |
+
const fetchCurrentPageLinks = useCallback(async () => {
|
120 |
+
setLinksLoading(true);
|
121 |
+
const response = await fetch(
|
122 |
+
`${API_BASE}/get_article_with_links/${currentPage}`
|
123 |
+
);
|
124 |
+
const data = await response.json();
|
125 |
+
setCurrentPageLinks(data.links.slice(0, maxLinks));
|
126 |
+
setLinksLoading(false);
|
127 |
+
}, [currentPage, maxLinks]);
|
128 |
+
|
129 |
+
useEffect(() => {
|
130 |
+
fetchCurrentPageLinks();
|
131 |
+
}, [fetchCurrentPageLinks]);
|
132 |
+
|
133 |
+
useEffect(() => {
|
134 |
+
if (gameStatus === "playing") {
|
135 |
+
const timer = setInterval(() => {
|
136 |
+
setTimeElapsed((prev) => prev + 1);
|
137 |
+
}, 1000);
|
138 |
+
|
139 |
+
return () => clearInterval(timer);
|
140 |
+
}
|
141 |
+
}, [gameStatus]);
|
142 |
+
|
143 |
+
// Check win condition
|
144 |
+
useEffect(() => {
|
145 |
+
if (currentPage === targetPage) {
|
146 |
+
setGameStatus("won");
|
147 |
+
} else if (hops >= maxHops) {
|
148 |
+
setGameStatus("lost");
|
149 |
+
}
|
150 |
+
}, [currentPage, targetPage, hops, maxHops]);
|
151 |
+
|
152 |
+
const addStepToReasoningTrace = (step: Step) => {
|
153 |
+
setReasoningTrace((prev) => {
|
154 |
+
if (!prev) return { steps: [step], start_article: startPage, destination_article: targetPage };
|
155 |
+
return { steps: [...prev.steps, step], start_article: startPage, destination_article: targetPage };
|
156 |
+
});
|
157 |
+
};
|
158 |
+
|
159 |
+
const handleLinkClick = (link: string, userClicked: boolean = true) => {
|
160 |
+
if (gameStatus !== "playing") return;
|
161 |
+
|
162 |
+
setCurrentPage(link);
|
163 |
+
setHops((prev) => prev + 1);
|
164 |
+
setVisitedNodes((prev) => [...prev, link]);
|
165 |
+
if (userClicked) {
|
166 |
+
addStepToReasoningTrace({
|
167 |
+
type: "step",
|
168 |
+
article: link,
|
169 |
+
links: currentPageLinks,
|
170 |
+
metadata: {
|
171 |
+
message: "User clicked link",
|
172 |
+
},
|
173 |
+
});
|
174 |
+
}
|
175 |
+
};
|
176 |
+
|
177 |
+
const makeModelMove = async () => {
|
178 |
+
setIsModelThinking(true);
|
179 |
+
|
180 |
+
const prompt = buildPrompt(
|
181 |
+
currentPage,
|
182 |
+
targetPage,
|
183 |
+
visitedNodes,
|
184 |
+
currentPageLinks
|
185 |
+
);
|
186 |
+
|
187 |
+
const modelResponse = await inference({
|
188 |
+
apiKey:
|
189 |
+
window.localStorage.getItem("huggingface_access_token") || undefined,
|
190 |
+
model: model,
|
191 |
+
prompt,
|
192 |
+
maxTokens: maxTokens,
|
193 |
+
});
|
194 |
+
console.log("Model response", modelResponse.content);
|
195 |
+
|
196 |
+
const answer = modelResponse.content?.match(/<answer>(.*?)<\/answer>/)?.[1];
|
197 |
+
if (!answer) {
|
198 |
+
console.error("No answer found in model response");
|
199 |
+
return;
|
200 |
+
}
|
201 |
+
|
202 |
+
// try parsing the answer as an integer
|
203 |
+
const answerInt = parseInt(answer);
|
204 |
+
if (isNaN(answerInt)) {
|
205 |
+
console.error("Invalid answer found in model response");
|
206 |
+
return;
|
207 |
+
}
|
208 |
+
|
209 |
+
if (answerInt < 1 || answerInt > currentPageLinks.length) {
|
210 |
+
console.error(
|
211 |
+
"Selected link out of bounds",
|
212 |
+
answerInt,
|
213 |
+
"from ",
|
214 |
+
currentPageLinks.length,
|
215 |
+
"links"
|
216 |
+
);
|
217 |
+
return;
|
218 |
+
}
|
219 |
+
|
220 |
+
const selectedLink = currentPageLinks[answerInt - 1];
|
221 |
+
|
222 |
+
console.log(
|
223 |
+
"Model picked selectedLink",
|
224 |
+
selectedLink,
|
225 |
+
"from ",
|
226 |
+
currentPageLinks
|
227 |
+
);
|
228 |
+
|
229 |
+
addStepToReasoningTrace({
|
230 |
+
type: "step",
|
231 |
+
article: selectedLink,
|
232 |
+
links: currentPageLinks,
|
233 |
+
metadata: {
|
234 |
+
message: "Model picked link",
|
235 |
+
conversation: [
|
236 |
+
{
|
237 |
+
role: "user",
|
238 |
+
content: prompt,
|
239 |
+
},
|
240 |
+
{
|
241 |
+
role: "assistant",
|
242 |
+
content: modelResponse.content || "",
|
243 |
+
},
|
244 |
+
],
|
245 |
+
},
|
246 |
+
});
|
247 |
+
|
248 |
+
handleLinkClick(selectedLink, false);
|
249 |
+
setIsModelThinking(false);
|
250 |
+
};
|
251 |
+
|
252 |
+
const handleGiveUp = () => {
|
253 |
+
setGameStatus("lost");
|
254 |
+
};
|
255 |
+
|
256 |
+
const formatTime = (seconds: number) => {
|
257 |
+
const mins = Math.floor(seconds / 60);
|
258 |
+
const secs = seconds % 60;
|
259 |
+
return `${mins}:${secs < 10 ? "0" : ""}${secs}`;
|
260 |
+
};
|
261 |
+
|
262 |
+
return (
|
263 |
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
264 |
+
<Card className="p-4 flex col-span-2">
|
265 |
+
<h2 className="text-xl font-bold">Game Status</h2>
|
266 |
+
<div className="grid grid-cols-4 gap-4 mb-4">
|
267 |
+
<div className="bg-muted/30 p-3 rounded-md">
|
268 |
+
<div className="flex items-center gap-2 text-sm font-medium text-muted-foreground mb-1">
|
269 |
+
<ArrowRight className="h-4 w-4" /> Current
|
270 |
+
</div>
|
271 |
+
<div className="font-medium">{currentPage}</div>
|
272 |
+
</div>
|
273 |
+
<div className="bg-muted/30 p-3 rounded-md">
|
274 |
+
<div className="flex items-center gap-2 text-sm font-medium text-muted-foreground mb-1">
|
275 |
+
<Flag className="h-4 w-4" /> Target
|
276 |
+
</div>
|
277 |
+
<div className="font-medium">{targetPage}</div>
|
278 |
+
</div>
|
279 |
+
|
280 |
+
<div className="bg-muted/30 p-3 rounded-md">
|
281 |
+
<div className="flex items-center gap-2 text-sm font-medium text-muted-foreground mb-1">
|
282 |
+
<Hash className="h-4 w-4" /> Hops
|
283 |
+
</div>
|
284 |
+
<div className="font-medium">
|
285 |
+
{hops} / {maxHops}
|
286 |
+
</div>
|
287 |
+
</div>
|
288 |
+
|
289 |
+
<div className="bg-muted/30 p-3 rounded-md">
|
290 |
+
<div className="flex items-center gap-2 text-sm font-medium text-muted-foreground mb-1">
|
291 |
+
<Clock className="h-4 w-4" /> Time
|
292 |
+
</div>
|
293 |
+
<div className="font-medium">{formatTime(timeElapsed)}</div>
|
294 |
+
</div>
|
295 |
+
</div>
|
296 |
+
|
297 |
+
{player === "model" && (
|
298 |
+
<div className="mb-4 bg-blue-50 border border-blue-200 rounded-md p-3">
|
299 |
+
<div className="flex items-center gap-2">
|
300 |
+
<Bot className="h-4 w-4 text-blue-500" />
|
301 |
+
<span className="font-medium text-blue-700">
|
302 |
+
{model} {isModelThinking ? "is playing..." : "is playing"}
|
303 |
+
</span>
|
304 |
+
</div>
|
305 |
+
</div>
|
306 |
+
)}
|
307 |
+
</Card>
|
308 |
+
{/* Left pane - Current page and available links */}
|
309 |
+
<Card className="p-4 flex flex-col">
|
310 |
+
<h2 className="text-xl font-bold">Available Links</h2>
|
311 |
+
<div className="flex justify-between items-center mb-4">
|
312 |
+
{gameStatus !== "playing" && (
|
313 |
+
<Button onClick={onReset} variant="outline">
|
314 |
+
New Game
|
315 |
+
</Button>
|
316 |
+
)}
|
317 |
+
</div>
|
318 |
+
|
319 |
+
{/* Wikipedia iframe (mocked) */}
|
320 |
+
{/* <div className="bg-muted/30 rounded-md flex-1 mb-4 overflow-hidden">
|
321 |
+
<div className="bg-white p-4 border-b">
|
322 |
+
<h2 className="text-xl font-bold">{currentPage}</h2>
|
323 |
+
<p className="text-sm text-muted-foreground">
|
324 |
+
https://en.wikipedia.org/wiki/{currentPage.replace(/\s+/g, "_")}
|
325 |
+
</p>
|
326 |
+
</div>
|
327 |
+
<div className="p-4">
|
328 |
+
<p className="text-sm">
|
329 |
+
This is a mock Wikipedia page for {currentPage}. In the actual
|
330 |
+
implementation, this would be an iframe showing the real Wikipedia
|
331 |
+
page.
|
332 |
+
</p>
|
333 |
+
</div>
|
334 |
+
</div> */}
|
335 |
+
|
336 |
+
{/* Available links */}
|
337 |
+
{gameStatus === "playing" && (
|
338 |
+
<>
|
339 |
+
<div className="grid grid-cols-2 sm:grid-cols-3 gap-2 mb-4 overflow-y-auto max-h-[200px]">
|
340 |
+
{currentPageLinks
|
341 |
+
.sort((a, b) => a.localeCompare(b))
|
342 |
+
.map((link) => (
|
343 |
+
<Button
|
344 |
+
key={link}
|
345 |
+
variant="outline"
|
346 |
+
size="sm"
|
347 |
+
className="justify-start overflow-hidden text-ellipsis whitespace-nowrap"
|
348 |
+
onClick={() => handleLinkClick(link)}
|
349 |
+
disabled={player === "model" || isModelThinking}
|
350 |
+
>
|
351 |
+
{link}
|
352 |
+
</Button>
|
353 |
+
))}
|
354 |
+
</div>
|
355 |
+
|
356 |
+
{player === "model" && (
|
357 |
+
<Button
|
358 |
+
onClick={makeModelMove}
|
359 |
+
disabled={isModelThinking || linksLoading}
|
360 |
+
>
|
361 |
+
Make Move
|
362 |
+
</Button>
|
363 |
+
)}
|
364 |
+
</>
|
365 |
+
)}
|
366 |
+
|
367 |
+
{player === "model" && isModelThinking && gameStatus === "playing" && (
|
368 |
+
<div className="flex items-center gap-2 text-sm animate-pulse mb-4">
|
369 |
+
<Bot className="h-4 w-4" />
|
370 |
+
<span>{model} is thinking...</span>
|
371 |
+
</div>
|
372 |
+
)}
|
373 |
+
|
374 |
+
{gameStatus === "playing" && player === "me" && (
|
375 |
+
<Button
|
376 |
+
onClick={handleGiveUp}
|
377 |
+
variant="destructive"
|
378 |
+
className="mt-auto"
|
379 |
+
>
|
380 |
+
Give Up
|
381 |
+
</Button>
|
382 |
+
)}
|
383 |
+
|
384 |
+
{gameStatus === "won" && (
|
385 |
+
<div className="bg-green-100 text-green-800 p-4 rounded-md mt-auto">
|
386 |
+
<h3 className="font-bold">
|
387 |
+
{player === "model" ? `${model} won!` : "You won!"}
|
388 |
+
</h3>
|
389 |
+
<p>
|
390 |
+
{player === "model" ? "It" : "You"} reached {targetPage} in {hops}{" "}
|
391 |
+
hops.
|
392 |
+
</p>
|
393 |
+
</div>
|
394 |
+
)}
|
395 |
+
|
396 |
+
{gameStatus === "lost" && (
|
397 |
+
<div className="bg-red-100 text-red-800 p-4 rounded-md mt-auto">
|
398 |
+
<h3 className="font-bold">Game Over</h3>
|
399 |
+
<p>
|
400 |
+
{player === "model" ? `${model} didn't` : "You didn't"} reach{" "}
|
401 |
+
{targetPage} within {maxHops} hops.
|
402 |
+
</p>
|
403 |
+
</div>
|
404 |
+
)}
|
405 |
+
</Card>
|
406 |
+
|
407 |
+
<Card className="p-4 flex flex-col max-h-[500px] overflow-y-auto">
|
408 |
+
<ReasoningTrace run={reasoningTrace} />
|
409 |
+
</Card>
|
410 |
+
|
411 |
+
{/* Right pane - Game stats and graph */}
|
412 |
+
<Card className="p-4 flex flex-col">
|
413 |
+
<div className="flex-1 bg-muted/30 rounded-md p-4">
|
414 |
+
<div className="flex items-center gap-2 text-sm font-medium text-muted-foreground mb-2">
|
415 |
+
<BarChart className="h-4 w-4" /> Path Visualization
|
416 |
+
</div>
|
417 |
+
|
418 |
+
<ForceDirectedGraph runs={runs} runId={null} />
|
419 |
+
</div>
|
420 |
+
</Card>
|
421 |
+
</div>
|
422 |
+
);
|
423 |
+
}
|
424 |
+
|
src/components/play-tab.tsx
CHANGED
@@ -1,7 +1,266 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
export default function PlayTab() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
return (
|
3 |
-
<div className="
|
4 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
</div>
|
6 |
);
|
7 |
}
|
|
|
1 |
+
"use client";
|
2 |
+
|
3 |
+
import { useEffect, useState } from "react";
|
4 |
+
import { Card } from "@/components/ui/card";
|
5 |
+
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
6 |
+
import { Input } from "@/components/ui/input";
|
7 |
+
import { Label } from "@/components/ui/label";
|
8 |
+
import { Button } from "@/components/ui/button";
|
9 |
+
import { Sun } from "lucide-react";
|
10 |
+
import { Wifi, WifiOff } from "lucide-react";
|
11 |
+
import GameComponent from "@/components/game-component";
|
12 |
+
import {
|
13 |
+
Select,
|
14 |
+
SelectContent,
|
15 |
+
SelectGroup,
|
16 |
+
SelectItem,
|
17 |
+
SelectLabel,
|
18 |
+
SelectTrigger,
|
19 |
+
SelectValue,
|
20 |
+
} from "@/components/ui/select";
|
21 |
+
|
22 |
+
const API_BASE = "http://localhost:8000/";
|
23 |
+
|
24 |
+
// Available AI models
|
25 |
+
const aiModels = [
|
26 |
+
{ id: "gpt-4o", name: "GPT-4o", category: "OpenAI" },
|
27 |
+
{ id: "claude-3-5-sonnet", name: "Claude 3.5 Sonnet", category: "Anthropic" },
|
28 |
+
{ id: "gemini-1.5-pro", name: "Gemini 1.5 Pro", category: "Google" },
|
29 |
+
{ id: "llama-3-70b", name: "Llama 3 70B", category: "Meta" },
|
30 |
+
{ id: "mistral-large", name: "Mistral Large", category: "Mistral AI" },
|
31 |
+
];
|
32 |
+
|
33 |
export default function PlayTab() {
|
34 |
+
const [player, setPlayer] = useState<"me" | "model">("me");
|
35 |
+
const [selectedModel, setSelectedModel] = useState<string | undefined>();
|
36 |
+
const [maxHops, setMaxHops] = useState<number>(20);
|
37 |
+
const [nodeList, setNodeList] = useState<string>("default");
|
38 |
+
const [isGameStarted, setIsGameStarted] = useState<boolean>(false);
|
39 |
+
const [startPage, setStartPage] = useState<string>("Dogs");
|
40 |
+
const [targetPage, setTargetPage] = useState<string>("Canada");
|
41 |
+
const [maxTokens, setMaxTokens] = useState<number>(1024);
|
42 |
+
const [maxLinks, setMaxLinks] = useState<number>(200);
|
43 |
+
const [isServerConnected, setIsServerConnected] = useState<boolean>(false);
|
44 |
+
const [modelList, setModelList] = useState<{id: string, name: string, author: string, likes: number, trendingScore: number}[]>([]);
|
45 |
+
|
46 |
+
// Server connection check
|
47 |
+
useEffect(() => {
|
48 |
+
fetchAvailableModels();
|
49 |
+
const checkServerConnection = async () => {
|
50 |
+
try {
|
51 |
+
const response = await fetch(API_BASE);
|
52 |
+
setIsServerConnected(response.ok);
|
53 |
+
} catch {
|
54 |
+
setIsServerConnected(false);
|
55 |
+
}
|
56 |
+
};
|
57 |
+
|
58 |
+
// Check immediately and then every 30 seconds
|
59 |
+
checkServerConnection();
|
60 |
+
const interval = setInterval(checkServerConnection, 30000);
|
61 |
+
|
62 |
+
return () => clearInterval(interval);
|
63 |
+
}, []);
|
64 |
+
|
65 |
+
const handleStartGame = () => {
|
66 |
+
setIsGameStarted(true);
|
67 |
+
};
|
68 |
+
|
69 |
+
const handleResetGame = () => {
|
70 |
+
setIsGameStarted(false);
|
71 |
+
};
|
72 |
+
|
73 |
+
const handlePlayerChange = (value: string) => {
|
74 |
+
setPlayer(value as "me" | "model");
|
75 |
+
};
|
76 |
+
|
77 |
+
const fetchAvailableModels = async () => {
|
78 |
+
const response = await fetch(
|
79 |
+
"https://huggingface.co/api/models?inference_provider=all&pipeline_tag=text-generation"
|
80 |
+
);
|
81 |
+
const models = await response.json()
|
82 |
+
const filteredModels = models.filter((m: any) => m.tags.includes('text-generation'))
|
83 |
+
const modelList = filteredModels.map((m: any) => ({
|
84 |
+
id: m.id,
|
85 |
+
likes: m.likes,
|
86 |
+
trendingScore: m.trendingScore,
|
87 |
+
author: m.id.split('/')[0],
|
88 |
+
name: m.id.split('/')[1],
|
89 |
+
}));
|
90 |
+
console.log("got model list", modelList);
|
91 |
+
setModelList(modelList);
|
92 |
+
}
|
93 |
+
|
94 |
return (
|
95 |
+
<div className="space-y-4">
|
96 |
+
{!isGameStarted ? (
|
97 |
+
<Card className="p-6">
|
98 |
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
|
99 |
+
<div className="space-y-4">
|
100 |
+
<div>
|
101 |
+
<Label htmlFor="player-select" className="block mb-2">
|
102 |
+
Player
|
103 |
+
</Label>
|
104 |
+
<Tabs
|
105 |
+
defaultValue="me"
|
106 |
+
value={player}
|
107 |
+
onValueChange={handlePlayerChange}
|
108 |
+
className="w-full"
|
109 |
+
>
|
110 |
+
<TabsList className="grid w-full grid-cols-2">
|
111 |
+
<TabsTrigger value="me">Me</TabsTrigger>
|
112 |
+
<TabsTrigger value="model">Model</TabsTrigger>
|
113 |
+
</TabsList>
|
114 |
+
</Tabs>
|
115 |
+
</div>
|
116 |
+
|
117 |
+
<div className="flex items-center gap-2">
|
118 |
+
<div className="flex items-center gap-1 text-sm">
|
119 |
+
{isServerConnected ? (
|
120 |
+
<Wifi className="h-4 w-4 text-green-500" />
|
121 |
+
) : (
|
122 |
+
<WifiOff className="h-4 w-4 text-red-500" />
|
123 |
+
)}
|
124 |
+
<span
|
125 |
+
className={
|
126 |
+
isServerConnected ? "text-green-500" : "text-red-500"
|
127 |
+
}
|
128 |
+
>
|
129 |
+
{isServerConnected ? "Connected" : "Disconnected"}
|
130 |
+
</span>
|
131 |
+
</div>
|
132 |
+
</div>
|
133 |
+
</div>
|
134 |
+
|
135 |
+
<div>
|
136 |
+
<Label htmlFor="max-hops" className="block mb-2">
|
137 |
+
Max Hops
|
138 |
+
</Label>
|
139 |
+
<Input
|
140 |
+
id="max-hops"
|
141 |
+
type="number"
|
142 |
+
value={maxHops}
|
143 |
+
onChange={(e) => setMaxHops(Number.parseInt(e.target.value))}
|
144 |
+
min={1}
|
145 |
+
max={100}
|
146 |
+
/>
|
147 |
+
</div>
|
148 |
+
|
149 |
+
<div>
|
150 |
+
<Label htmlFor="node-list" className="block mb-2">
|
151 |
+
Node List
|
152 |
+
</Label>
|
153 |
+
<Tabs
|
154 |
+
defaultValue="default"
|
155 |
+
value={nodeList}
|
156 |
+
onValueChange={setNodeList}
|
157 |
+
className="w-full"
|
158 |
+
>
|
159 |
+
<TabsList className="grid w-full grid-cols-2">
|
160 |
+
<TabsTrigger value="default">Default</TabsTrigger>
|
161 |
+
<TabsTrigger value="custom">Custom</TabsTrigger>
|
162 |
+
</TabsList>
|
163 |
+
</Tabs>
|
164 |
+
</div>
|
165 |
+
|
166 |
+
{player === "model" && (
|
167 |
+
<div className="md:col-span-3 animate-in fade-in slide-in-from-top-5 duration-300 grid grid-cols-1 md:grid-cols-3 gap-4 mt-2">
|
168 |
+
<div>
|
169 |
+
<Label htmlFor="model-select" className="block mb-2">
|
170 |
+
Select Model
|
171 |
+
</Label>
|
172 |
+
<Select
|
173 |
+
value={selectedModel}
|
174 |
+
onValueChange={setSelectedModel}
|
175 |
+
>
|
176 |
+
<SelectTrigger className="w-full">
|
177 |
+
<SelectValue placeholder={`Select a model (${modelList.length} models available)`} />
|
178 |
+
</SelectTrigger>
|
179 |
+
<SelectContent>
|
180 |
+
{modelList.map((model) => (
|
181 |
+
<SelectItem key={model.id} value={model.id}>
|
182 |
+
{model.id}
|
183 |
+
</SelectItem>
|
184 |
+
))}
|
185 |
+
</SelectContent>
|
186 |
+
</Select>
|
187 |
+
</div>
|
188 |
+
<div>
|
189 |
+
<Label htmlFor="max-tokens" className="block mb-2">
|
190 |
+
Max Tokens
|
191 |
+
</Label>
|
192 |
+
<Input
|
193 |
+
id="max-tokens"
|
194 |
+
type="number"
|
195 |
+
value={maxTokens}
|
196 |
+
onChange={(e) => setMaxTokens(Number.parseInt(e.target.value))}
|
197 |
+
min={1}
|
198 |
+
max={10000}
|
199 |
+
/>
|
200 |
+
</div>
|
201 |
+
<div>
|
202 |
+
<Label htmlFor="max-links" className="block mb-2">
|
203 |
+
Max Links
|
204 |
+
</Label>
|
205 |
+
<Input
|
206 |
+
id="max-links"
|
207 |
+
type="number"
|
208 |
+
value={maxLinks}
|
209 |
+
onChange={(e) => setMaxLinks(Number.parseInt(e.target.value))}
|
210 |
+
min={1}
|
211 |
+
max={1000}
|
212 |
+
/>
|
213 |
+
</div>
|
214 |
+
</div>
|
215 |
+
)}
|
216 |
+
</div>
|
217 |
+
|
218 |
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 mt-6">
|
219 |
+
<div>
|
220 |
+
<Label htmlFor="start-page" className="block mb-2">
|
221 |
+
Start Page
|
222 |
+
</Label>
|
223 |
+
<Input
|
224 |
+
id="start-page"
|
225 |
+
value={startPage}
|
226 |
+
onChange={(e) => setStartPage(e.target.value)}
|
227 |
+
placeholder="e.g. Dogs"
|
228 |
+
/>
|
229 |
+
</div>
|
230 |
+
|
231 |
+
<div className="flex items-end gap-2">
|
232 |
+
<div className="flex-1">
|
233 |
+
<Label
|
234 |
+
htmlFor="target-page"
|
235 |
+
className="flex items-center gap-1 mb-2"
|
236 |
+
>
|
237 |
+
Target Page <Sun className="h-4 w-4 text-yellow-500" />
|
238 |
+
</Label>
|
239 |
+
<Input
|
240 |
+
id="target-page"
|
241 |
+
value={targetPage}
|
242 |
+
onChange={(e) => setTargetPage(e.target.value)}
|
243 |
+
placeholder="e.g. Canada"
|
244 |
+
/>
|
245 |
+
</div>
|
246 |
+
<Button onClick={handleStartGame} className="mb-0.5">
|
247 |
+
Start Game
|
248 |
+
</Button>
|
249 |
+
</div>
|
250 |
+
</div>
|
251 |
+
</Card>
|
252 |
+
) : (
|
253 |
+
<GameComponent
|
254 |
+
player={player}
|
255 |
+
model={player === "model" ? selectedModel : undefined}
|
256 |
+
maxHops={maxHops}
|
257 |
+
startPage={startPage}
|
258 |
+
targetPage={targetPage}
|
259 |
+
onReset={handleResetGame}
|
260 |
+
maxTokens={maxTokens}
|
261 |
+
maxLinks={maxLinks}
|
262 |
+
/>
|
263 |
+
)}
|
264 |
</div>
|
265 |
);
|
266 |
}
|
src/components/reasoning-trace.tsx
CHANGED
@@ -1,67 +1,109 @@
|
|
1 |
"use client";
|
2 |
|
3 |
import { useState } from "react";
|
4 |
-
import { Input } from "@/components/ui/input";
|
5 |
import { Button } from "@/components/ui/button";
|
6 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
8 |
interface ReasoningTraceProps {
|
9 |
-
|
10 |
}
|
11 |
|
12 |
-
|
13 |
-
|
|
|
|
|
|
|
14 |
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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-
|
26 |
|
27 |
-
<div className="flex-1 overflow-y-auto
|
28 |
-
|
29 |
-
<div className="
|
30 |
-
<
|
31 |
-
|
|
|
|
|
|
|
|
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
|
|
|
|
|
|
|
|
36 |
|
37 |
-
|
38 |
-
|
39 |
-
|
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 |
-
|
65 |
</div>
|
66 |
</div>
|
67 |
);
|
|
|
1 |
"use client";
|
2 |
|
3 |
import { useState } from "react";
|
|
|
4 |
import { Button } from "@/components/ui/button";
|
5 |
+
|
6 |
+
interface Message {
|
7 |
+
role: "user" | "assistant";
|
8 |
+
content: string;
|
9 |
+
}
|
10 |
+
|
11 |
+
interface StepMetadata {
|
12 |
+
message?: string;
|
13 |
+
conversation?: Message[];
|
14 |
+
}
|
15 |
+
|
16 |
+
export interface Step {
|
17 |
+
type: string;
|
18 |
+
article: string;
|
19 |
+
links?: unknown[];
|
20 |
+
metadata?: StepMetadata;
|
21 |
+
}
|
22 |
+
|
23 |
+
export interface Run {
|
24 |
+
steps: Step[];
|
25 |
+
start_article: string;
|
26 |
+
destination_article: string;
|
27 |
+
}
|
28 |
|
29 |
interface ReasoningTraceProps {
|
30 |
+
run: Run | null | undefined;
|
31 |
}
|
32 |
|
33 |
+
const MAX_MESSAGE_LENGTH = 200;
|
34 |
+
|
35 |
+
function ExpandableMessage({ message }: { message: Message }) {
|
36 |
+
const [isExpanded, setIsExpanded] = useState(false);
|
37 |
+
const isLongMessage = message.content.length > MAX_MESSAGE_LENGTH;
|
38 |
|
39 |
+
const toggleExpand = () => setIsExpanded(!isExpanded);
|
40 |
+
|
41 |
+
return (
|
42 |
+
<div
|
43 |
+
className={`p-3 rounded-lg max-w-[80%] ${
|
44 |
+
message.role === "user"
|
45 |
+
? "bg-primary/10 ml-auto"
|
46 |
+
: "bg-secondary/10 mr-auto"
|
47 |
+
}`}
|
48 |
+
>
|
49 |
+
<p className="text-xs font-semibold mb-1 capitalize text-muted-foreground">
|
50 |
+
{message.role}
|
51 |
+
</p>
|
52 |
+
<p className="text-sm whitespace-pre-wrap">
|
53 |
+
{isLongMessage && !isExpanded
|
54 |
+
? `${message.content.substring(0, MAX_MESSAGE_LENGTH)}...`
|
55 |
+
: message.content}
|
56 |
+
</p>
|
57 |
+
{isLongMessage && (
|
58 |
+
<Button
|
59 |
+
variant="link"
|
60 |
+
size="sm"
|
61 |
+
className="p-0 h-auto text-xs mt-1"
|
62 |
+
onClick={toggleExpand}
|
63 |
+
>
|
64 |
+
{isExpanded ? "Show Less" : "Show More"}
|
65 |
+
</Button>
|
66 |
+
)}
|
67 |
+
</div>
|
68 |
+
);
|
69 |
+
}
|
70 |
+
|
71 |
+
export default function ReasoningTrace({ run }: ReasoningTraceProps) {
|
72 |
+
if (!run?.steps) {
|
73 |
return (
|
74 |
<div className="w-full h-full flex items-center justify-center text-muted-foreground">
|
75 |
+
{run === undefined ? "Loading..." : "Select a run to view the reasoning trace"}
|
76 |
</div>
|
77 |
);
|
78 |
}
|
79 |
|
80 |
return (
|
81 |
<div className="flex flex-col h-full">
|
82 |
+
<h3 className="text-lg font-semibold mb-4 px-1">LLM Reasoning Trace</h3>
|
83 |
|
84 |
+
<div className="flex-1 overflow-y-auto space-y-4 p-1">
|
85 |
+
{run.steps.map((step, index) => (
|
86 |
+
<div key={index} className="py-4 px-2">
|
87 |
+
<div>
|
88 |
+
<h4 className="text-base font-semibold">Step {index + 1} - {step.article}</h4>
|
89 |
+
{step.metadata?.message && (
|
90 |
+
<p className="text-sm text-muted-foreground pt-1 italic">"{step.metadata.message}"</p>
|
91 |
+
)}
|
92 |
+
</div>
|
93 |
|
94 |
+
{step.metadata?.conversation && step.metadata.conversation.length > 0 && (
|
95 |
+
<div className="space-y-2 mt-3 pt-3">
|
96 |
+
{step.metadata.conversation.map((message, msgIndex) => (
|
97 |
+
<ExpandableMessage key={msgIndex} message={message} />
|
98 |
+
))}
|
99 |
+
</div>
|
100 |
+
)}
|
101 |
|
102 |
+
{index < run.steps.length - 1 && (
|
103 |
+
<hr className="my-6" />
|
104 |
+
)}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
</div>
|
106 |
+
))}
|
107 |
</div>
|
108 |
</div>
|
109 |
);
|
src/components/runs-list.tsx
CHANGED
@@ -4,10 +4,9 @@ import { Card } from "@/components/ui/card";
|
|
4 |
import { cn } from "@/lib/utils";
|
5 |
|
6 |
interface Run {
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
hops: number;
|
11 |
}
|
12 |
|
13 |
interface RunsListProps {
|
@@ -23,21 +22,21 @@ export default function RunsList({
|
|
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={
|
29 |
className={cn(
|
30 |
"p-3 cursor-pointer transition-all border",
|
31 |
-
selectedRunId ===
|
32 |
? "bg-primary/10 border-primary/50 shadow-sm"
|
33 |
: "hover:bg-muted/80 border-transparent"
|
34 |
)}
|
35 |
-
onClick={() => onSelectRun(
|
36 |
>
|
37 |
<div className="flex items-center justify-between">
|
38 |
<div>
|
39 |
<p className="font-medium flex items-center">
|
40 |
-
<span>{run.
|
41 |
<svg
|
42 |
xmlns="http://www.w3.org/2000/svg"
|
43 |
width="16"
|
@@ -53,11 +52,11 @@ export default function RunsList({
|
|
53 |
<path d="M5 12h14" />
|
54 |
<path d="m12 5 7 7-7 7" />
|
55 |
</svg>
|
56 |
-
<span>{run.
|
57 |
</p>
|
58 |
-
<p className="text-sm text-muted-foreground">{run.
|
59 |
</div>
|
60 |
-
{selectedRunId ===
|
61 |
<div
|
62 |
className="h-2 w-2 rounded-full bg-primary"
|
63 |
aria-hidden="true"
|
|
|
4 |
import { cn } from "@/lib/utils";
|
5 |
|
6 |
interface Run {
|
7 |
+
start_article: string;
|
8 |
+
destination_article: string;
|
9 |
+
steps: string[];
|
|
|
10 |
}
|
11 |
|
12 |
interface RunsListProps {
|
|
|
22 |
}: RunsListProps) {
|
23 |
return (
|
24 |
<div className="h-[600px] overflow-y-auto space-y-2 pr-1">
|
25 |
+
{runs.map((run, index) => (
|
26 |
<Card
|
27 |
+
key={index}
|
28 |
className={cn(
|
29 |
"p-3 cursor-pointer transition-all border",
|
30 |
+
selectedRunId === index
|
31 |
? "bg-primary/10 border-primary/50 shadow-sm"
|
32 |
: "hover:bg-muted/80 border-transparent"
|
33 |
)}
|
34 |
+
onClick={() => onSelectRun(index)}
|
35 |
>
|
36 |
<div className="flex items-center justify-between">
|
37 |
<div>
|
38 |
<p className="font-medium flex items-center">
|
39 |
+
<span>{run.start_article}</span>
|
40 |
<svg
|
41 |
xmlns="http://www.w3.org/2000/svg"
|
42 |
width="16"
|
|
|
52 |
<path d="M5 12h14" />
|
53 |
<path d="m12 5 7 7-7 7" />
|
54 |
</svg>
|
55 |
+
<span>{run.destination_article}</span>
|
56 |
</p>
|
57 |
+
<p className="text-sm text-muted-foreground">{run.steps.length} hops</p>
|
58 |
</div>
|
59 |
+
{selectedRunId === index && (
|
60 |
<div
|
61 |
className="h-2 w-2 rounded-full bg-primary"
|
62 |
aria-hidden="true"
|
src/components/sign-in-with-hf-button.tsx
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// Use the code query parameter to get an access token and id token from https://huggingface.co/oauth/token (POST request with client_id, code, grant_type=authorization_code and redirect_uri as form data, and with Authorization: Basic {base64(client_id:client_secret)} as a header).
|
2 |
+
import { useState } from "react";
|
3 |
+
import { useEffect } from "react";
|
4 |
+
import { jwtDecode } from "jwt-decode";
|
5 |
+
|
6 |
+
const CLIENT_ID = "a67ef241-fb7e-4300-a6bd-8430a7565c9a";
|
7 |
+
const REDIRECT_URI = "http://localhost:5173/auth/callback";
|
8 |
+
const SCOPE = "openid%20profile%20email%20inference-api";
|
9 |
+
const STATE = "1234567890";
|
10 |
+
const SSO_URL = `https://huggingface.co/oauth/authorize?client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=${SCOPE}&prompt=consent&state=${STATE}`;
|
11 |
+
const API_BASE = "https://huggingface.co/oauth/token";
|
12 |
+
const CLIENT_SECRET = import.meta.env.VITE_HUGGINGFACE_CLIENT_SECRET; // THIS IS UNSAFE, must fix before real deploy
|
13 |
+
|
14 |
+
export const SignInWithHuggingFaceButton = () => {
|
15 |
+
const [isSignedIn, setIsSignedIn] = useState(false);
|
16 |
+
const [isLoading, setIsLoading] = useState(false);
|
17 |
+
const [name, setName] = useState<string | null>(null);
|
18 |
+
|
19 |
+
useEffect(() => {
|
20 |
+
const idToken = window.localStorage.getItem("huggingface_id_token");
|
21 |
+
const accessToken = window.localStorage.getItem("huggingface_access_token");
|
22 |
+
|
23 |
+
if (idToken && accessToken) {
|
24 |
+
const idTokenObject = JSON.parse(idToken);
|
25 |
+
if (idTokenObject.exp > Date.now() / 1000) {
|
26 |
+
setIsSignedIn(true);
|
27 |
+
setName(idTokenObject.name);
|
28 |
+
|
29 |
+
return;
|
30 |
+
}
|
31 |
+
}
|
32 |
+
|
33 |
+
|
34 |
+
async function fetchToken() {
|
35 |
+
const code = new URLSearchParams(window.location.search).get("code");
|
36 |
+
if (code) {
|
37 |
+
// remove the code from the url
|
38 |
+
window.history.replaceState({}, "", window.location.pathname);
|
39 |
+
setIsLoading(true);
|
40 |
+
const response = await fetch(`${API_BASE}`, {
|
41 |
+
method: "POST",
|
42 |
+
headers: {
|
43 |
+
"Content-Type": "application/x-www-form-urlencoded",
|
44 |
+
Authorization: `Basic ${btoa(`${CLIENT_ID}:${CLIENT_SECRET}`)}`,
|
45 |
+
},
|
46 |
+
body: new URLSearchParams({
|
47 |
+
client_id: CLIENT_ID,
|
48 |
+
code,
|
49 |
+
grant_type: "authorization_code",
|
50 |
+
redirect_uri: REDIRECT_URI
|
51 |
+
}).toString(),
|
52 |
+
});
|
53 |
+
const data = await response.json();
|
54 |
+
window.localStorage.setItem("huggingface_access_token", data.access_token);
|
55 |
+
|
56 |
+
// parse the id_token
|
57 |
+
const idToken = jwtDecode(data.id_token);
|
58 |
+
console.log(idToken);
|
59 |
+
window.localStorage.setItem("huggingface_id_token", JSON.stringify(idToken));
|
60 |
+
setName(idToken.name);
|
61 |
+
setIsSignedIn(true);
|
62 |
+
setIsLoading(false);
|
63 |
+
}
|
64 |
+
}
|
65 |
+
|
66 |
+
fetchToken();
|
67 |
+
}, []);
|
68 |
+
|
69 |
+
if (isLoading) {
|
70 |
+
return <div>Loading...</div>;
|
71 |
+
}
|
72 |
+
|
73 |
+
if (isSignedIn) {
|
74 |
+
return <div>Welcome, {name}</div>;
|
75 |
+
}
|
76 |
+
|
77 |
+
return (
|
78 |
+
<a href={SSO_URL} rel="nofollow">
|
79 |
+
<img
|
80 |
+
src="https://huggingface.co/datasets/huggingface/badges/resolve/main/sign-in-with-huggingface-xl.svg"
|
81 |
+
alt="Sign in with Hugging Face"
|
82 |
+
/>
|
83 |
+
</a>
|
84 |
+
);
|
85 |
+
};
|
src/components/ui/label.tsx
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import * as React from "react"
|
2 |
+
import * as LabelPrimitive from "@radix-ui/react-label"
|
3 |
+
|
4 |
+
import { cn } from "@/lib/utils"
|
5 |
+
|
6 |
+
function Label({
|
7 |
+
className,
|
8 |
+
...props
|
9 |
+
}: React.ComponentProps<typeof LabelPrimitive.Root>) {
|
10 |
+
return (
|
11 |
+
<LabelPrimitive.Root
|
12 |
+
data-slot="label"
|
13 |
+
className={cn(
|
14 |
+
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
15 |
+
className
|
16 |
+
)}
|
17 |
+
{...props}
|
18 |
+
/>
|
19 |
+
)
|
20 |
+
}
|
21 |
+
|
22 |
+
export { Label }
|
src/components/viewer-tab.tsx
CHANGED
@@ -1,5 +1,10 @@
|
|
1 |
"use client";
|
2 |
|
|
|
|
|
|
|
|
|
|
|
3 |
import { useState } from "react";
|
4 |
import {
|
5 |
Select,
|
@@ -8,11 +13,19 @@ import {
|
|
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 },
|
@@ -23,13 +36,45 @@ const sampleRuns = [
|
|
23 |
];
|
24 |
|
25 |
const datasets = [
|
26 |
-
{ id: "dataset1", name: "
|
27 |
-
{ id: "dataset2", name: "LLM
|
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);
|
@@ -56,6 +101,8 @@ export default function ViewerTab() {
|
|
56 |
))}
|
57 |
</SelectContent>
|
58 |
</Select>
|
|
|
|
|
59 |
</div>
|
60 |
|
61 |
<div className="bg-card rounded-lg p-3 border">
|
@@ -63,7 +110,7 @@ export default function ViewerTab() {
|
|
63 |
Available Runs
|
64 |
</h3>
|
65 |
<RunsList
|
66 |
-
runs={
|
67 |
onSelectRun={handleRunSelect}
|
68 |
selectedRunId={selectedRun}
|
69 |
/>
|
@@ -72,13 +119,13 @@ export default function ViewerTab() {
|
|
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
|
82 |
</Card>
|
83 |
</div>
|
84 |
</div>
|
|
|
1 |
"use client";
|
2 |
|
3 |
+
import * as hub from "@huggingface/hub";
|
4 |
+
import type { RepoDesignation } from "@huggingface/hub";
|
5 |
+
|
6 |
+
import mockResults from "../../qwen3-final-results.json";
|
7 |
+
|
8 |
import { useState } from "react";
|
9 |
import {
|
10 |
Select,
|
|
|
13 |
SelectTrigger,
|
14 |
SelectValue,
|
15 |
} from "@/components/ui/select";
|
16 |
+
import { Button } from "@/components/ui/button";
|
17 |
import { Card } from "@/components/ui/card";
|
18 |
import ForceDirectedGraph from "@/components/force-directed-graph";
|
19 |
import ReasoningTrace from "@/components/reasoning-trace";
|
20 |
import RunsList from "@/components/runs-list";
|
21 |
|
22 |
+
type Run = {
|
23 |
+
id: number;
|
24 |
+
start: string;
|
25 |
+
end: string;
|
26 |
+
hops: number;
|
27 |
+
};
|
28 |
+
|
29 |
// Sample data - would be fetched from HuggingFace dataset in a real implementation
|
30 |
const sampleRuns = [
|
31 |
{ id: 1, start: "Pokemon", end: "Canada", hops: 16 },
|
|
|
36 |
];
|
37 |
|
38 |
const datasets = [
|
39 |
+
{ id: "dataset1", name: "Eureka-Lab/PHYBench" },
|
40 |
+
{ id: "dataset2", name: "Eureka-Lab/PHYBench-LLM" },
|
41 |
];
|
42 |
|
43 |
export default function ViewerTab() {
|
44 |
const [selectedDataset, setSelectedDataset] = useState<string>("");
|
45 |
const [selectedRun, setSelectedRun] = useState<number | null>(null);
|
46 |
+
const [runs, setRuns] = useState<Run[]>([]);
|
47 |
+
const [loading, setLoading] = useState<boolean>(false);
|
48 |
+
|
49 |
+
const fetchDataset = async () => {
|
50 |
+
console.log("Fetching dataset...");
|
51 |
+
console.log(Object.keys(mockResults));
|
52 |
+
setRuns(mockResults.runs.slice(0, 10));
|
53 |
+
|
54 |
+
return;
|
55 |
+
setLoading(true);
|
56 |
+
|
57 |
+
// https://huggingface.co/datasets/HuggingFaceTB/wikispeedia-traces/resolve/main/qwen3-final-results.json
|
58 |
+
// const response = await fetch("https://huggingface.co/datasets/HuggingFaceTB/wikispeedia-traces/resolve/main/qwen3-final-results.json");
|
59 |
+
// const json = await response.json();
|
60 |
+
// setRuns(json.runs);
|
61 |
+
// setLoading(false);
|
62 |
+
|
63 |
+
// const repo: RepoDesignation = {
|
64 |
+
// type: "dataset",
|
65 |
+
// name: "HuggingFaceTB/wikispeedia-traces",
|
66 |
+
// };
|
67 |
+
// const file = await hub.downloadFile({ repo, path: "qwen3-final-results.json" });
|
68 |
+
// if (!file) {
|
69 |
+
// console.error("Failed to download file");
|
70 |
+
// return;
|
71 |
+
// }
|
72 |
+
// const text = await file.text();
|
73 |
+
// console.log("GOT FILE!", text);
|
74 |
+
// const json = JSON.parse(text);
|
75 |
+
// setRuns(json.runs);
|
76 |
+
// setLoading(false);
|
77 |
+
};
|
78 |
|
79 |
const handleDatasetChange = (value: string) => {
|
80 |
setSelectedDataset(value);
|
|
|
101 |
))}
|
102 |
</SelectContent>
|
103 |
</Select>
|
104 |
+
<Button onClick={fetchDataset}>Fetch Dataset</Button>
|
105 |
+
{loading && <p>Loading...</p>}
|
106 |
</div>
|
107 |
|
108 |
<div className="bg-card rounded-lg p-3 border">
|
|
|
110 |
Available Runs
|
111 |
</h3>
|
112 |
<RunsList
|
113 |
+
runs={runs}
|
114 |
onSelectRun={handleRunSelect}
|
115 |
selectedRunId={selectedRun}
|
116 |
/>
|
|
|
119 |
|
120 |
<div className="md:col-span-5">
|
121 |
<Card className="w-full h-[600px] flex items-center justify-center">
|
122 |
+
<ForceDirectedGraph runs={runs} runId={selectedRun} />
|
123 |
</Card>
|
124 |
</div>
|
125 |
|
126 |
<div className="md:col-span-4">
|
127 |
<Card className="w-full h-[600px] p-4">
|
128 |
+
<ReasoningTrace run={runs[selectedRun]} />
|
129 |
</Card>
|
130 |
</div>
|
131 |
</div>
|
src/lib/inference.tsx
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import { InferenceClient } from "@huggingface/inference";
|
2 |
+
|
3 |
+
export default async function inference({
|
4 |
+
prompt,
|
5 |
+
model = "Qwen/Qwen3-235B-A22B",
|
6 |
+
apiKey,
|
7 |
+
maxTokens = 512
|
8 |
+
}: {
|
9 |
+
prompt: string,
|
10 |
+
model?: string,
|
11 |
+
apiKey?: string,
|
12 |
+
maxTokens?: number
|
13 |
+
}) {
|
14 |
+
if (!apiKey) {
|
15 |
+
const token = window.localStorage.getItem("huggingface_access_token");
|
16 |
+
if (!token) {
|
17 |
+
throw new Error("You must be signed in to use the inference API!");
|
18 |
+
}
|
19 |
+
apiKey = token;
|
20 |
+
}
|
21 |
+
|
22 |
+
console.log("Inference", prompt, model, apiKey);
|
23 |
+
const client = new InferenceClient(apiKey);
|
24 |
+
|
25 |
+
const chatCompletion = await client.chatCompletion({
|
26 |
+
provider: "fireworks-ai",
|
27 |
+
model: model,
|
28 |
+
messages: [
|
29 |
+
{
|
30 |
+
role: "user",
|
31 |
+
content: prompt,
|
32 |
+
},
|
33 |
+
],
|
34 |
+
max_tokens: maxTokens,
|
35 |
+
});
|
36 |
+
|
37 |
+
console.log("Inference response", chatCompletion.choices[0].message);
|
38 |
+
return chatCompletion.choices[0].message;
|
39 |
+
}
|
tsconfig.app.json
CHANGED
@@ -23,7 +23,7 @@
|
|
23 |
"jsx": "react-jsx",
|
24 |
|
25 |
/* Linting */
|
26 |
-
"strict":
|
27 |
"noUnusedLocals": true,
|
28 |
"noUnusedParameters": true,
|
29 |
"noFallthroughCasesInSwitch": true,
|
|
|
23 |
"jsx": "react-jsx",
|
24 |
|
25 |
/* Linting */
|
26 |
+
"strict": false,
|
27 |
"noUnusedLocals": true,
|
28 |
"noUnusedParameters": true,
|
29 |
"noFallthroughCasesInSwitch": true,
|
yarn.lock
CHANGED
@@ -2,6 +2,17 @@
|
|
2 |
# yarn lockfile v1
|
3 |
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
"@ampproject/remapping@^2.2.0":
|
6 |
version "2.3.0"
|
7 |
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
|
@@ -133,6 +144,11 @@
|
|
133 |
dependencies:
|
134 |
"@babel/helper-plugin-utils" "^7.27.1"
|
135 |
|
|
|
|
|
|
|
|
|
|
|
136 |
"@babel/template@^7.27.1":
|
137 |
version "7.27.1"
|
138 |
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.1.tgz#b9e4f55c17a92312774dfbdde1b3c01c547bbae2"
|
@@ -403,6 +419,36 @@
|
|
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"
|
@@ -567,6 +613,13 @@
|
|
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"
|
@@ -936,6 +989,11 @@
|
|
936 |
"@tailwindcss/oxide" "4.1.5"
|
937 |
tailwindcss "4.1.5"
|
938 |
|
|
|
|
|
|
|
|
|
|
|
939 |
"@tybys/wasm-util@^0.9.0":
|
940 |
version "0.9.0"
|
941 |
resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355"
|
@@ -1097,6 +1155,11 @@
|
|
1097 |
"@types/babel__core" "^7.20.5"
|
1098 |
react-refresh "^0.17.0"
|
1099 |
|
|
|
|
|
|
|
|
|
|
|
1100 |
acorn-jsx@^5.3.2:
|
1101 |
version "5.3.2"
|
1102 |
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
@@ -1141,6 +1204,11 @@ balanced-match@^1.0.0:
|
|
1141 |
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
1142 |
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
1143 |
|
|
|
|
|
|
|
|
|
|
|
1144 |
brace-expansion@^1.1.7:
|
1145 |
version "1.1.11"
|
1146 |
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
@@ -1183,6 +1251,13 @@ caniuse-lite@^1.0.30001688:
|
|
1183 |
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001716.tgz#39220dfbc58c85d9d4519e7090b656aa11ca4b85"
|
1184 |
integrity sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==
|
1185 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1186 |
chalk@^4.0.0:
|
1187 |
version "4.1.2"
|
1188 |
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
@@ -1215,6 +1290,11 @@ color-name@~1.1.4:
|
|
1215 |
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
1216 |
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
1217 |
|
|
|
|
|
|
|
|
|
|
|
1218 | |
1219 |
version "0.0.1"
|
1220 |
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
@@ -1239,6 +1319,308 @@ csstype@^3.0.2:
|
|
1239 |
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
|
1240 |
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
|
1241 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1242 |
debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
|
1243 |
version "4.4.0"
|
1244 |
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
@@ -1251,6 +1633,13 @@ deep-is@^0.1.3:
|
|
1251 |
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
1252 |
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
|
1253 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1254 |
detect-libc@^2.0.3:
|
1255 |
version "2.0.4"
|
1256 |
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8"
|
@@ -1261,6 +1650,11 @@ detect-node-es@^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"
|
@@ -1490,6 +1884,36 @@ flatted@^3.2.9:
|
|
1490 |
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358"
|
1491 |
integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
|
1492 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1493 |
fsevents@~2.3.2, fsevents@~2.3.3:
|
1494 |
version "2.3.3"
|
1495 |
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
@@ -1519,6 +1943,14 @@ glob-parent@^6.0.2:
|
|
1519 |
dependencies:
|
1520 |
is-glob "^4.0.3"
|
1521 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1522 |
globals@^11.1.0:
|
1523 |
version "11.12.0"
|
1524 |
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
@@ -1549,6 +1981,13 @@ has-flag@^4.0.0:
|
|
1549 |
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
1550 |
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
1551 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1552 |
ignore@^5.2.0, ignore@^5.3.1:
|
1553 |
version "5.3.2"
|
1554 |
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
|
@@ -1567,6 +2006,16 @@ imurmurhash@^0.1.4:
|
|
1567 |
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
1568 |
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
|
1569 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1570 |
is-extglob@^2.1.1:
|
1571 |
version "2.1.1"
|
1572 |
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
@@ -1589,12 +2038,17 @@ isexe@^2.0.0:
|
|
1589 |
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
1590 |
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
1591 |
|
|
|
|
|
|
|
|
|
|
|
1592 |
jiti@^2.4.2:
|
1593 |
version "2.4.2"
|
1594 |
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560"
|
1595 |
integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==
|
1596 |
|
1597 |
-
js-tokens@^4.0.0:
|
1598 |
version "4.0.0"
|
1599 |
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
1600 |
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
@@ -1631,6 +2085,18 @@ json5@^2.2.3:
|
|
1631 |
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
1632 |
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
1633 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1634 |
keyv@^4.5.4:
|
1635 |
version "4.5.4"
|
1636 |
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
|
@@ -1721,11 +2187,28 @@ locate-path@^6.0.0:
|
|
1721 |
dependencies:
|
1722 |
p-locate "^5.0.0"
|
1723 |
|
|
|
|
|
|
|
|
|
|
|
1724 |
lodash.merge@^4.6.2:
|
1725 |
version "4.6.2"
|
1726 |
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
1727 |
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
1728 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1729 |
lru-cache@^5.1.1:
|
1730 |
version "5.1.1"
|
1731 |
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
@@ -1751,6 +2234,13 @@ micromatch@^4.0.8:
|
|
1751 |
braces "^3.0.3"
|
1752 |
picomatch "^2.3.1"
|
1753 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1754 |
minimatch@^3.1.2:
|
1755 |
version "3.1.2"
|
1756 |
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
@@ -1780,11 +2270,47 @@ natural-compare@^1.4.0:
|
|
1780 |
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
1781 |
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
|
1782 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1783 |
node-releases@^2.0.19:
|
1784 |
version "2.0.19"
|
1785 |
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
|
1786 |
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
|
1787 |
|
|
|
|
|
|
|
|
|
|
|
1788 |
optionator@^0.9.3:
|
1789 |
version "0.9.4"
|
1790 |
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
|
@@ -1843,6 +2369,13 @@ picomatch@^4.0.2:
|
|
1843 |
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
|
1844 |
integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
|
1845 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1846 |
postcss@^8.5.3:
|
1847 |
version "8.5.3"
|
1848 |
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb"
|
@@ -1852,11 +2385,30 @@ postcss@^8.5.3:
|
|
1852 |
picocolors "^1.1.1"
|
1853 |
source-map-js "^1.2.1"
|
1854 |
|
|
|
|
|
|
|
|
|
|
|
1855 |
prelude-ls@^1.2.1:
|
1856 |
version "1.2.1"
|
1857 |
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
1858 |
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
|
1859 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1860 |
punycode@^2.1.0:
|
1861 |
version "2.3.1"
|
1862 |
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
|
@@ -1874,6 +2426,36 @@ react-dom@^19.0.0:
|
|
1874 |
dependencies:
|
1875 |
scheduler "^0.26.0"
|
1876 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1877 |
react-refresh@^0.17.0:
|
1878 |
version "0.17.0"
|
1879 |
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
|
@@ -1906,6 +2488,16 @@ react-style-singleton@^2.2.2, react-style-singleton@^2.2.3:
|
|
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"
|
@@ -1921,6 +2513,11 @@ reusify@^1.0.4:
|
|
1921 |
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
|
1922 |
integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
|
1923 |
|
|
|
|
|
|
|
|
|
|
|
1924 |
rollup@^4.34.9:
|
1925 |
version "4.40.1"
|
1926 |
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.40.1.tgz#03d6c53ebb6a9c2c060ae686a61e72a2472b366f"
|
@@ -1957,6 +2554,16 @@ run-parallel@^1.1.9:
|
|
1957 |
dependencies:
|
1958 |
queue-microtask "^1.2.2"
|
1959 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1960 |
scheduler@^0.26.0:
|
1961 |
version "0.26.0"
|
1962 |
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337"
|
@@ -2016,6 +2623,43 @@ tapable@^2.2.0:
|
|
2016 |
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
|
2017 |
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
|
2018 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019 |
tinyglobby@^0.2.13:
|
2020 |
version "0.2.13"
|
2021 |
resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.13.tgz#a0e46515ce6cbcd65331537e57484af5a7b2ff7e"
|
|
|
2 |
# yarn lockfile v1
|
3 |
|
4 |
|
5 |
+
"3d-force-graph@^1.76":
|
6 |
+
version "1.77.0"
|
7 |
+
resolved "https://registry.yarnpkg.com/3d-force-graph/-/3d-force-graph-1.77.0.tgz#10a47db13179371409ee42d82dba59ec7315058b"
|
8 |
+
integrity sha512-w2MlrCeMJxXwhz5gtRZ7mLU4xW5DD2U6VSEfFv8pvnvSNPYPuAIKjbJoZekfv7yFmMaWnNy/2RfRcgC5oGr2KQ==
|
9 |
+
dependencies:
|
10 |
+
accessor-fn "1"
|
11 |
+
kapsule "^1.16"
|
12 |
+
three ">=0.118 <1"
|
13 |
+
three-forcegraph "1"
|
14 |
+
three-render-objects "^1.35"
|
15 |
+
|
16 |
"@ampproject/remapping@^2.2.0":
|
17 |
version "2.3.0"
|
18 |
resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
|
|
|
144 |
dependencies:
|
145 |
"@babel/helper-plugin-utils" "^7.27.1"
|
146 |
|
147 |
+
"@babel/runtime@^7.17.8":
|
148 |
+
version "7.27.1"
|
149 |
+
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541"
|
150 |
+
integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==
|
151 |
+
|
152 |
"@babel/template@^7.27.1":
|
153 |
version "7.27.1"
|
154 |
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.1.tgz#b9e4f55c17a92312774dfbdde1b3c01c547bbae2"
|
|
|
419 |
resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429"
|
420 |
integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==
|
421 |
|
422 |
+
"@huggingface/hub@^1.1.2":
|
423 |
+
version "1.1.2"
|
424 |
+
resolved "https://registry.yarnpkg.com/@huggingface/hub/-/hub-1.1.2.tgz#390d3a6b7efe98acd146c6ccc6d178b7605cfc27"
|
425 |
+
integrity sha512-Jf4GhvVj9ABDw4Itb3BV1T7f22iewuZva476qTicQ4kOTbosuUuFDhsVH7ZH6rVNgg20Ll9kaNBF5CXjySIT+w==
|
426 |
+
dependencies:
|
427 |
+
"@huggingface/tasks" "^0.18.2"
|
428 |
+
|
429 |
+
"@huggingface/inference@^3.10.0":
|
430 |
+
version "3.10.0"
|
431 |
+
resolved "https://registry.yarnpkg.com/@huggingface/inference/-/inference-3.10.0.tgz#2fe1eb8a79198fdde56d00b6c2e540b0c7b060db"
|
432 |
+
integrity sha512-nouLdl5Tu4gdTzIKv9zAr7HPziXV8rXbVONjYKQ7u9F78KgWVsYmhEM+ZhTbhg4fV4N1gdgywOAHrd9uOV5tRQ==
|
433 |
+
dependencies:
|
434 |
+
"@huggingface/jinja" "^0.4.0"
|
435 |
+
"@huggingface/tasks" "^0.19.0"
|
436 |
+
|
437 |
+
"@huggingface/jinja@^0.4.0":
|
438 |
+
version "0.4.1"
|
439 |
+
resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.4.1.tgz#a71deab443c4badb6498d28e784ea1cd5eb369e2"
|
440 |
+
integrity sha512-3WXbMFaPkk03LRCM0z0sylmn8ddDm4ubjU7X+Hg4M2GOuMklwoGAFXp9V2keq7vltoB/c7McE5aHUVVddAewsw==
|
441 |
+
|
442 |
+
"@huggingface/tasks@^0.18.2":
|
443 |
+
version "0.18.12"
|
444 |
+
resolved "https://registry.yarnpkg.com/@huggingface/tasks/-/tasks-0.18.12.tgz#44fc9de0cb77e36b7a724b9f1a1f1debf16d13e4"
|
445 |
+
integrity sha512-hUEYhXJzJCUhLSBNglW+Sji5fuzMnpBimp3kbdcGor+MaN9xb+qrcLnMC7X8aOcZaZdCErwYYIqz2oSP2EM4Bg==
|
446 |
+
|
447 |
+
"@huggingface/tasks@^0.19.0":
|
448 |
+
version "0.19.1"
|
449 |
+
resolved "https://registry.yarnpkg.com/@huggingface/tasks/-/tasks-0.19.1.tgz#03f133140e0de97bb28a1094e8cfe117dd821721"
|
450 |
+
integrity sha512-cocq5+jkmh8+qIvWDCyC9nkf7qCpmBRrJL/WPWhfIMXWEv2dMYMY62ylFv+dq/vRwpe+/5h0WlnZGOSIa+3OJg==
|
451 |
+
|
452 |
"@humanfs/core@^0.19.1":
|
453 |
version "0.19.1"
|
454 |
resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
|
|
|
613 |
dependencies:
|
614 |
"@radix-ui/react-use-layout-effect" "1.1.1"
|
615 |
|
616 |
+
"@radix-ui/react-label@^2.1.4":
|
617 |
+
version "2.1.4"
|
618 |
+
resolved "https://registry.yarnpkg.com/@radix-ui/react-label/-/react-label-2.1.4.tgz#e89607486b82381f2d28ce1ce022e7fb5f5a158c"
|
619 |
+
integrity sha512-wy3dqizZnZVV4ja0FNnUhIWNwWdoldXrneEyUcVtLYDAt8ovGS4ridtMAOGgXBBIfggL4BOveVWsjXDORdGEQg==
|
620 |
+
dependencies:
|
621 |
+
"@radix-ui/react-primitive" "2.1.0"
|
622 |
+
|
623 |
"@radix-ui/[email protected]":
|
624 |
version "1.2.4"
|
625 |
resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.4.tgz#8fd6d954fca9e5d1341c7d9153cc88e05d5ed84e"
|
|
|
989 |
"@tailwindcss/oxide" "4.1.5"
|
990 |
tailwindcss "4.1.5"
|
991 |
|
992 |
+
"@tweenjs/tween.js@18 - 25":
|
993 |
+
version "25.0.0"
|
994 |
+
resolved "https://registry.yarnpkg.com/@tweenjs/tween.js/-/tween.js-25.0.0.tgz#7266baebcc3affe62a3a54318a3ea82d904cd0b9"
|
995 |
+
integrity sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==
|
996 |
+
|
997 |
"@tybys/wasm-util@^0.9.0":
|
998 |
version "0.9.0"
|
999 |
resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355"
|
|
|
1155 |
"@types/babel__core" "^7.20.5"
|
1156 |
react-refresh "^0.17.0"
|
1157 |
|
1158 |
+
accessor-fn@1:
|
1159 |
+
version "1.5.3"
|
1160 |
+
resolved "https://registry.yarnpkg.com/accessor-fn/-/accessor-fn-1.5.3.tgz#5e2549d291d4ac022f532da9a554358dc525b0f7"
|
1161 |
+
integrity sha512-rkAofCwe/FvYFUlMB0v0gWmhqtfAtV1IUkdPbfhTUyYniu5LrC0A0UJkTH0Jv3S8SvwkmfuAlY+mQIJATdocMA==
|
1162 |
+
|
1163 |
acorn-jsx@^5.3.2:
|
1164 |
version "5.3.2"
|
1165 |
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
|
|
|
1204 |
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
1205 |
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
1206 |
|
1207 |
+
"bezier-js@3 - 6":
|
1208 |
+
version "6.1.4"
|
1209 |
+
resolved "https://registry.yarnpkg.com/bezier-js/-/bezier-js-6.1.4.tgz#c7828f6c8900562b69d5040afb881bcbdad82001"
|
1210 |
+
integrity sha512-PA0FW9ZpcHbojUCMu28z9Vg/fNkwTj5YhusSAjHHDfHDGLxJ6YUKrAN2vk1fP2MMOxVw4Oko16FMlRGVBGqLKg==
|
1211 |
+
|
1212 |
brace-expansion@^1.1.7:
|
1213 |
version "1.1.11"
|
1214 |
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
|
|
1251 |
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001716.tgz#39220dfbc58c85d9d4519e7090b656aa11ca4b85"
|
1252 |
integrity sha512-49/c1+x3Kwz7ZIWt+4DvK3aMJy9oYXXG6/97JKsnjdCk/6n9vVyWL8NAwVt95Lwt9eigI10Hl782kDfZUUlRXw==
|
1253 |
|
1254 |
+
canvas-color-tracker@^1.3:
|
1255 |
+
version "1.3.2"
|
1256 |
+
resolved "https://registry.yarnpkg.com/canvas-color-tracker/-/canvas-color-tracker-1.3.2.tgz#b924cf94b33441b82692938fca5b936be971a46d"
|
1257 |
+
integrity sha512-ryQkDX26yJ3CXzb3hxUVNlg1NKE4REc5crLBq661Nxzr8TNd236SaEf2ffYLXyI5tSABSeguHLqcVq4vf9L3Zg==
|
1258 |
+
dependencies:
|
1259 |
+
tinycolor2 "^1.6.0"
|
1260 |
+
|
1261 |
chalk@^4.0.0:
|
1262 |
version "4.1.2"
|
1263 |
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
|
|
1290 |
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
1291 |
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
1292 |
|
1293 |
+
commander@7:
|
1294 |
+
version "7.2.0"
|
1295 |
+
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
|
1296 |
+
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
|
1297 |
+
|
1298 | |
1299 |
version "0.0.1"
|
1300 |
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
|
|
1319 |
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
|
1320 |
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
|
1321 |
|
1322 |
+
"d3-array@1 - 3", "d3-array@2 - 3", "[email protected] - 3", "[email protected] - 3", d3-array@3, d3-array@^3.2.0:
|
1323 |
+
version "3.2.4"
|
1324 |
+
resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5"
|
1325 |
+
integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==
|
1326 |
+
dependencies:
|
1327 |
+
internmap "1 - 2"
|
1328 |
+
|
1329 |
+
d3-axis@3:
|
1330 |
+
version "3.0.0"
|
1331 |
+
resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322"
|
1332 |
+
integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==
|
1333 |
+
|
1334 |
+
d3-binarytree@1:
|
1335 |
+
version "1.0.2"
|
1336 |
+
resolved "https://registry.yarnpkg.com/d3-binarytree/-/d3-binarytree-1.0.2.tgz#ed43ebc13c70fbabfdd62df17480bc5a425753cc"
|
1337 |
+
integrity sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==
|
1338 |
+
|
1339 |
+
d3-brush@3:
|
1340 |
+
version "3.0.0"
|
1341 |
+
resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c"
|
1342 |
+
integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==
|
1343 |
+
dependencies:
|
1344 |
+
d3-dispatch "1 - 3"
|
1345 |
+
d3-drag "2 - 3"
|
1346 |
+
d3-interpolate "1 - 3"
|
1347 |
+
d3-selection "3"
|
1348 |
+
d3-transition "3"
|
1349 |
+
|
1350 |
+
d3-chord@3:
|
1351 |
+
version "3.0.1"
|
1352 |
+
resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966"
|
1353 |
+
integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==
|
1354 |
+
dependencies:
|
1355 |
+
d3-path "1 - 3"
|
1356 |
+
|
1357 |
+
d3-collection@1:
|
1358 |
+
version "1.0.7"
|
1359 |
+
resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
|
1360 |
+
integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==
|
1361 |
+
|
1362 |
+
"d3-color@1 - 3", d3-color@3:
|
1363 |
+
version "3.1.0"
|
1364 |
+
resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2"
|
1365 |
+
integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==
|
1366 |
+
|
1367 |
+
d3-contour@4:
|
1368 |
+
version "4.0.2"
|
1369 |
+
resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-4.0.2.tgz#bb92063bc8c5663acb2422f99c73cbb6c6ae3bcc"
|
1370 |
+
integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==
|
1371 |
+
dependencies:
|
1372 |
+
d3-array "^3.2.0"
|
1373 |
+
|
1374 |
+
d3-delaunay@6:
|
1375 |
+
version "6.0.4"
|
1376 |
+
resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b"
|
1377 |
+
integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==
|
1378 |
+
dependencies:
|
1379 |
+
delaunator "5"
|
1380 |
+
|
1381 |
+
d3-dispatch@1:
|
1382 |
+
version "1.0.6"
|
1383 |
+
resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58"
|
1384 |
+
integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==
|
1385 |
+
|
1386 |
+
"d3-dispatch@1 - 3", d3-dispatch@3:
|
1387 |
+
version "3.0.1"
|
1388 |
+
resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e"
|
1389 |
+
integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==
|
1390 |
+
|
1391 |
+
"d3-drag@2 - 3", d3-drag@3:
|
1392 |
+
version "3.0.0"
|
1393 |
+
resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba"
|
1394 |
+
integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==
|
1395 |
+
dependencies:
|
1396 |
+
d3-dispatch "1 - 3"
|
1397 |
+
d3-selection "3"
|
1398 |
+
|
1399 |
+
"d3-dsv@1 - 3", d3-dsv@3:
|
1400 |
+
version "3.0.1"
|
1401 |
+
resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73"
|
1402 |
+
integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==
|
1403 |
+
dependencies:
|
1404 |
+
commander "7"
|
1405 |
+
iconv-lite "0.6"
|
1406 |
+
rw "1"
|
1407 |
+
|
1408 |
+
"d3-ease@1 - 3", d3-ease@3:
|
1409 |
+
version "3.0.1"
|
1410 |
+
resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4"
|
1411 |
+
integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==
|
1412 |
+
|
1413 |
+
d3-fetch@3:
|
1414 |
+
version "3.0.1"
|
1415 |
+
resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22"
|
1416 |
+
integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==
|
1417 |
+
dependencies:
|
1418 |
+
d3-dsv "1 - 3"
|
1419 |
+
|
1420 |
+
"d3-force-3d@2 - 3":
|
1421 |
+
version "3.0.6"
|
1422 |
+
resolved "https://registry.yarnpkg.com/d3-force-3d/-/d3-force-3d-3.0.6.tgz#7ea4c26d7937b82993bd9444f570ed52f661d4aa"
|
1423 |
+
integrity sha512-4tsKHUPLOVkyfEffZo1v6sFHvGFwAIIjt/W8IThbp08DYAsXZck+2pSHEG5W1+gQgEvFLdZkYvmJAbRM2EzMnA==
|
1424 |
+
dependencies:
|
1425 |
+
d3-binarytree "1"
|
1426 |
+
d3-dispatch "1 - 3"
|
1427 |
+
d3-octree "1"
|
1428 |
+
d3-quadtree "1 - 3"
|
1429 |
+
d3-timer "1 - 3"
|
1430 |
+
|
1431 |
+
d3-force@3:
|
1432 |
+
version "3.0.0"
|
1433 |
+
resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4"
|
1434 |
+
integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==
|
1435 |
+
dependencies:
|
1436 |
+
d3-dispatch "1 - 3"
|
1437 |
+
d3-quadtree "1 - 3"
|
1438 |
+
d3-timer "1 - 3"
|
1439 |
+
|
1440 |
+
d3-force@^1.0.2:
|
1441 |
+
version "1.2.1"
|
1442 |
+
resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b"
|
1443 |
+
integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==
|
1444 |
+
dependencies:
|
1445 |
+
d3-collection "1"
|
1446 |
+
d3-dispatch "1"
|
1447 |
+
d3-quadtree "1"
|
1448 |
+
d3-timer "1"
|
1449 |
+
|
1450 |
+
"d3-format@1 - 3", d3-format@3:
|
1451 |
+
version "3.1.0"
|
1452 |
+
resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641"
|
1453 |
+
integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==
|
1454 |
+
|
1455 |
+
d3-geo@3:
|
1456 |
+
version "3.1.1"
|
1457 |
+
resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.1.tgz#6027cf51246f9b2ebd64f99e01dc7c3364033a4d"
|
1458 |
+
integrity sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==
|
1459 |
+
dependencies:
|
1460 |
+
d3-array "2.5.0 - 3"
|
1461 |
+
|
1462 |
+
d3-hierarchy@3:
|
1463 |
+
version "3.1.2"
|
1464 |
+
resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6"
|
1465 |
+
integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==
|
1466 |
+
|
1467 |
+
"d3-interpolate@1 - 3", "[email protected] - 3", d3-interpolate@3:
|
1468 |
+
version "3.0.1"
|
1469 |
+
resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d"
|
1470 |
+
integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==
|
1471 |
+
dependencies:
|
1472 |
+
d3-color "1 - 3"
|
1473 |
+
|
1474 |
+
d3-octree@1:
|
1475 |
+
version "1.1.0"
|
1476 |
+
resolved "https://registry.yarnpkg.com/d3-octree/-/d3-octree-1.1.0.tgz#f07e353b76df872644e7130ab1a74c5ef2f4287e"
|
1477 |
+
integrity sha512-F8gPlqpP+HwRPMO/8uOu5wjH110+6q4cgJvgJT6vlpy3BEaDIKlTZrgHKZSp/i1InRpVfh4puY/kvL6MxK930A==
|
1478 |
+
|
1479 |
+
"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0:
|
1480 |
+
version "3.1.0"
|
1481 |
+
resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526"
|
1482 |
+
integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==
|
1483 |
+
|
1484 |
+
d3-polygon@3:
|
1485 |
+
version "3.0.1"
|
1486 |
+
resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398"
|
1487 |
+
integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==
|
1488 |
+
|
1489 |
+
d3-quadtree@1:
|
1490 |
+
version "1.0.7"
|
1491 |
+
resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135"
|
1492 |
+
integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==
|
1493 |
+
|
1494 |
+
"d3-quadtree@1 - 3", d3-quadtree@3:
|
1495 |
+
version "3.0.1"
|
1496 |
+
resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f"
|
1497 |
+
integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==
|
1498 |
+
|
1499 |
+
d3-random@3:
|
1500 |
+
version "3.0.1"
|
1501 |
+
resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4"
|
1502 |
+
integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==
|
1503 |
+
|
1504 |
+
"d3-scale-chromatic@1 - 3", d3-scale-chromatic@3:
|
1505 |
+
version "3.1.0"
|
1506 |
+
resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz#34c39da298b23c20e02f1a4b239bd0f22e7f1314"
|
1507 |
+
integrity sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==
|
1508 |
+
dependencies:
|
1509 |
+
d3-color "1 - 3"
|
1510 |
+
d3-interpolate "1 - 3"
|
1511 |
+
|
1512 |
+
"d3-scale@1 - 4", d3-scale@4:
|
1513 |
+
version "4.0.2"
|
1514 |
+
resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396"
|
1515 |
+
integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==
|
1516 |
+
dependencies:
|
1517 |
+
d3-array "2.10.0 - 3"
|
1518 |
+
d3-format "1 - 3"
|
1519 |
+
d3-interpolate "1.2.0 - 3"
|
1520 |
+
d3-time "2.1.1 - 3"
|
1521 |
+
d3-time-format "2 - 4"
|
1522 |
+
|
1523 |
+
"d3-selection@2 - 3", d3-selection@3:
|
1524 |
+
version "3.0.0"
|
1525 |
+
resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31"
|
1526 |
+
integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==
|
1527 |
+
|
1528 |
+
d3-shape@3:
|
1529 |
+
version "3.2.0"
|
1530 |
+
resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5"
|
1531 |
+
integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==
|
1532 |
+
dependencies:
|
1533 |
+
d3-path "^3.1.0"
|
1534 |
+
|
1535 |
+
"d3-time-format@2 - 4", d3-time-format@4:
|
1536 |
+
version "4.1.0"
|
1537 |
+
resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a"
|
1538 |
+
integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==
|
1539 |
+
dependencies:
|
1540 |
+
d3-time "1 - 3"
|
1541 |
+
|
1542 |
+
"d3-time@1 - 3", "[email protected] - 3", d3-time@3:
|
1543 |
+
version "3.1.0"
|
1544 |
+
resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7"
|
1545 |
+
integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==
|
1546 |
+
dependencies:
|
1547 |
+
d3-array "2 - 3"
|
1548 |
+
|
1549 |
+
d3-timer@1:
|
1550 |
+
version "1.0.10"
|
1551 |
+
resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5"
|
1552 |
+
integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==
|
1553 |
+
|
1554 |
+
"d3-timer@1 - 3", d3-timer@3:
|
1555 |
+
version "3.0.1"
|
1556 |
+
resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0"
|
1557 |
+
integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
|
1558 |
+
|
1559 |
+
"d3-transition@2 - 3", d3-transition@3:
|
1560 |
+
version "3.0.1"
|
1561 |
+
resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f"
|
1562 |
+
integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==
|
1563 |
+
dependencies:
|
1564 |
+
d3-color "1 - 3"
|
1565 |
+
d3-dispatch "1 - 3"
|
1566 |
+
d3-ease "1 - 3"
|
1567 |
+
d3-interpolate "1 - 3"
|
1568 |
+
d3-timer "1 - 3"
|
1569 |
+
|
1570 |
+
"d3-zoom@2 - 3", d3-zoom@3:
|
1571 |
+
version "3.0.0"
|
1572 |
+
resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3"
|
1573 |
+
integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==
|
1574 |
+
dependencies:
|
1575 |
+
d3-dispatch "1 - 3"
|
1576 |
+
d3-drag "2 - 3"
|
1577 |
+
d3-interpolate "1 - 3"
|
1578 |
+
d3-selection "2 - 3"
|
1579 |
+
d3-transition "2 - 3"
|
1580 |
+
|
1581 |
+
d3@^7.9.0:
|
1582 |
+
version "7.9.0"
|
1583 |
+
resolved "https://registry.yarnpkg.com/d3/-/d3-7.9.0.tgz#579e7acb3d749caf8860bd1741ae8d371070cd5d"
|
1584 |
+
integrity sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==
|
1585 |
+
dependencies:
|
1586 |
+
d3-array "3"
|
1587 |
+
d3-axis "3"
|
1588 |
+
d3-brush "3"
|
1589 |
+
d3-chord "3"
|
1590 |
+
d3-color "3"
|
1591 |
+
d3-contour "4"
|
1592 |
+
d3-delaunay "6"
|
1593 |
+
d3-dispatch "3"
|
1594 |
+
d3-drag "3"
|
1595 |
+
d3-dsv "3"
|
1596 |
+
d3-ease "3"
|
1597 |
+
d3-fetch "3"
|
1598 |
+
d3-force "3"
|
1599 |
+
d3-format "3"
|
1600 |
+
d3-geo "3"
|
1601 |
+
d3-hierarchy "3"
|
1602 |
+
d3-interpolate "3"
|
1603 |
+
d3-path "3"
|
1604 |
+
d3-polygon "3"
|
1605 |
+
d3-quadtree "3"
|
1606 |
+
d3-random "3"
|
1607 |
+
d3-scale "4"
|
1608 |
+
d3-scale-chromatic "3"
|
1609 |
+
d3-selection "3"
|
1610 |
+
d3-shape "3"
|
1611 |
+
d3-time "3"
|
1612 |
+
d3-time-format "4"
|
1613 |
+
d3-timer "3"
|
1614 |
+
d3-transition "3"
|
1615 |
+
d3-zoom "3"
|
1616 |
+
|
1617 |
+
data-bind-mapper@1:
|
1618 |
+
version "1.0.3"
|
1619 |
+
resolved "https://registry.yarnpkg.com/data-bind-mapper/-/data-bind-mapper-1.0.3.tgz#275e55fd170331b1146479f3c7eb4256b8239481"
|
1620 |
+
integrity sha512-QmU3lyEnbENQPo0M1F9BMu4s6cqNNp8iJA+b/HP2sSb7pf3dxwF3+EP1eO69rwBfH9kFJ1apmzrtogAmVt2/Xw==
|
1621 |
+
dependencies:
|
1622 |
+
accessor-fn "1"
|
1623 |
+
|
1624 |
debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
|
1625 |
version "4.4.0"
|
1626 |
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
|
|
|
1633 |
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
1634 |
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
|
1635 |
|
1636 |
+
delaunator@5:
|
1637 |
+
version "5.0.1"
|
1638 |
+
resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.1.tgz#39032b08053923e924d6094fe2cde1a99cc51278"
|
1639 |
+
integrity sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==
|
1640 |
+
dependencies:
|
1641 |
+
robust-predicates "^3.0.2"
|
1642 |
+
|
1643 |
detect-libc@^2.0.3:
|
1644 |
version "2.0.4"
|
1645 |
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8"
|
|
|
1650 |
resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493"
|
1651 |
integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==
|
1652 |
|
1653 |
+
dom-walk@^0.1.0:
|
1654 |
+
version "0.1.2"
|
1655 |
+
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
|
1656 |
+
integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
|
1657 |
+
|
1658 |
electron-to-chromium@^1.5.73:
|
1659 |
version "1.5.145"
|
1660 |
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.145.tgz#abd50700ac2c809e40a4694584f66711ee937fb6"
|
|
|
1884 |
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358"
|
1885 |
integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==
|
1886 |
|
1887 |
+
float-tooltip@^1.6, float-tooltip@^1.7:
|
1888 |
+
version "1.7.5"
|
1889 |
+
resolved "https://registry.yarnpkg.com/float-tooltip/-/float-tooltip-1.7.5.tgz#7083bf78f0de5a97f9c2d6aa8e90d2139f34047f"
|
1890 |
+
integrity sha512-/kXzuDnnBqyyWyhDMH7+PfP8J/oXiAavGzcRxASOMRHFuReDtofizLLJsf7nnDLAfEaMW4pVWaXrAjtnglpEkg==
|
1891 |
+
dependencies:
|
1892 |
+
d3-selection "2 - 3"
|
1893 |
+
kapsule "^1.16"
|
1894 |
+
preact "10"
|
1895 |
+
|
1896 |
+
force-graph@^1.49:
|
1897 |
+
version "1.49.5"
|
1898 |
+
resolved "https://registry.yarnpkg.com/force-graph/-/force-graph-1.49.5.tgz#8736402701838b119637c31ee55687702fecad8e"
|
1899 |
+
integrity sha512-mCTLxsaOPfp4Jq4FND8sHTpa8aZDLNXgkwAN98IDZ8Ve3nralz0gNsmE4Nx6NFm48olJ0gzCQYYLJrrYDqifew==
|
1900 |
+
dependencies:
|
1901 |
+
"@tweenjs/tween.js" "18 - 25"
|
1902 |
+
accessor-fn "1"
|
1903 |
+
bezier-js "3 - 6"
|
1904 |
+
canvas-color-tracker "^1.3"
|
1905 |
+
d3-array "1 - 3"
|
1906 |
+
d3-drag "2 - 3"
|
1907 |
+
d3-force-3d "2 - 3"
|
1908 |
+
d3-scale "1 - 4"
|
1909 |
+
d3-scale-chromatic "1 - 3"
|
1910 |
+
d3-selection "2 - 3"
|
1911 |
+
d3-zoom "2 - 3"
|
1912 |
+
float-tooltip "^1.6"
|
1913 |
+
index-array-by "1"
|
1914 |
+
kapsule "^1.16"
|
1915 |
+
lodash-es "4"
|
1916 |
+
|
1917 |
fsevents@~2.3.2, fsevents@~2.3.3:
|
1918 |
version "2.3.3"
|
1919 |
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
|
|
1943 |
dependencies:
|
1944 |
is-glob "^4.0.3"
|
1945 |
|
1946 |
+
global@^4.3.0:
|
1947 |
+
version "4.4.0"
|
1948 |
+
resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
|
1949 |
+
integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
|
1950 |
+
dependencies:
|
1951 |
+
min-document "^2.19.0"
|
1952 |
+
process "^0.11.10"
|
1953 |
+
|
1954 |
globals@^11.1.0:
|
1955 |
version "11.12.0"
|
1956 |
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
|
|
1981 |
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
1982 |
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
1983 |
|
1984 | |
1985 |
+
version "0.6.3"
|
1986 |
+
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
|
1987 |
+
integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
|
1988 |
+
dependencies:
|
1989 |
+
safer-buffer ">= 2.1.2 < 3.0.0"
|
1990 |
+
|
1991 |
ignore@^5.2.0, ignore@^5.3.1:
|
1992 |
version "5.3.2"
|
1993 |
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
|
|
|
2006 |
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
2007 |
integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
|
2008 |
|
2009 |
+
index-array-by@1:
|
2010 |
+
version "1.4.2"
|
2011 |
+
resolved "https://registry.yarnpkg.com/index-array-by/-/index-array-by-1.4.2.tgz#d6f82e9fbff3201c4dab64ba415d4d2923242fea"
|
2012 |
+
integrity sha512-SP23P27OUKzXWEC/TOyWlwLviofQkCSCKONnc62eItjp69yCZZPqDQtr3Pw5gJDnPeUMqExmKydNZaJO0FU9pw==
|
2013 |
+
|
2014 |
+
"internmap@1 - 2":
|
2015 |
+
version "2.0.3"
|
2016 |
+
resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
|
2017 |
+
integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
|
2018 |
+
|
2019 |
is-extglob@^2.1.1:
|
2020 |
version "2.1.1"
|
2021 |
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
|
|
2038 |
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
2039 |
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
2040 |
|
2041 |
+
jerrypick@^1.1.1:
|
2042 |
+
version "1.1.2"
|
2043 |
+
resolved "https://registry.yarnpkg.com/jerrypick/-/jerrypick-1.1.2.tgz#eb5016304aeb9ac9b7dea6714aa5fe85b24cb8ad"
|
2044 |
+
integrity sha512-YKnxXEekXKzhpf7CLYA0A+oDP8V0OhICNCr5lv96FvSsDEmrb0GKM776JgQvHTMjr7DTTPEVv/1Ciaw0uEWzBA==
|
2045 |
+
|
2046 |
jiti@^2.4.2:
|
2047 |
version "2.4.2"
|
2048 |
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.2.tgz#d19b7732ebb6116b06e2038da74a55366faef560"
|
2049 |
integrity sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==
|
2050 |
|
2051 |
+
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
|
2052 |
version "4.0.0"
|
2053 |
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
2054 |
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
|
|
2085 |
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
2086 |
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
2087 |
|
2088 |
+
jwt-decode@^4.0.0:
|
2089 |
+
version "4.0.0"
|
2090 |
+
resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-4.0.0.tgz#2270352425fd413785b2faf11f6e755c5151bd4b"
|
2091 |
+
integrity sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==
|
2092 |
+
|
2093 |
+
kapsule@^1.16:
|
2094 |
+
version "1.16.3"
|
2095 |
+
resolved "https://registry.yarnpkg.com/kapsule/-/kapsule-1.16.3.tgz#5684ed89838b6658b30d0f2cc056dffc3ba68c30"
|
2096 |
+
integrity sha512-4+5mNNf4vZDSwPhKprKwz3330iisPrb08JyMgbsdFrimBCKNHecua/WBwvVg3n7vwx0C1ARjfhwIpbrbd9n5wg==
|
2097 |
+
dependencies:
|
2098 |
+
lodash-es "4"
|
2099 |
+
|
2100 |
keyv@^4.5.4:
|
2101 |
version "4.5.4"
|
2102 |
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
|
|
|
2187 |
dependencies:
|
2188 |
p-locate "^5.0.0"
|
2189 |
|
2190 |
+
lodash-es@4:
|
2191 |
+
version "4.17.21"
|
2192 |
+
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
|
2193 |
+
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
|
2194 |
+
|
2195 |
lodash.merge@^4.6.2:
|
2196 |
version "4.6.2"
|
2197 |
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
|
2198 |
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
|
2199 |
|
2200 |
+
lodash.reduce@^4.6.0:
|
2201 |
+
version "4.6.0"
|
2202 |
+
resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
|
2203 |
+
integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==
|
2204 |
+
|
2205 |
+
loose-envify@^1.4.0:
|
2206 |
+
version "1.4.0"
|
2207 |
+
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
2208 |
+
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
2209 |
+
dependencies:
|
2210 |
+
js-tokens "^3.0.0 || ^4.0.0"
|
2211 |
+
|
2212 |
lru-cache@^5.1.1:
|
2213 |
version "5.1.1"
|
2214 |
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
|
|
|
2234 |
braces "^3.0.3"
|
2235 |
picomatch "^2.3.1"
|
2236 |
|
2237 |
+
min-document@^2.19.0:
|
2238 |
+
version "2.19.0"
|
2239 |
+
resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
|
2240 |
+
integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==
|
2241 |
+
dependencies:
|
2242 |
+
dom-walk "^0.1.0"
|
2243 |
+
|
2244 |
minimatch@^3.1.2:
|
2245 |
version "3.1.2"
|
2246 |
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
|
|
2270 |
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
2271 |
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
|
2272 |
|
2273 |
+
ngraph.events@^1.0.0, ngraph.events@^1.2.1:
|
2274 |
+
version "1.2.2"
|
2275 |
+
resolved "https://registry.yarnpkg.com/ngraph.events/-/ngraph.events-1.2.2.tgz#3ceb92d676a04a4e7ce60a09fa8e17a4f0346d7f"
|
2276 |
+
integrity sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==
|
2277 |
+
|
2278 |
+
ngraph.forcelayout@3:
|
2279 |
+
version "3.3.1"
|
2280 |
+
resolved "https://registry.yarnpkg.com/ngraph.forcelayout/-/ngraph.forcelayout-3.3.1.tgz#981e1baee5e0593c490bc27219169f9cedfa4f8b"
|
2281 |
+
integrity sha512-MKBuEh1wujyQHFTW57y5vd/uuEOK0XfXYxm3lC7kktjJLRdt/KEKEknyOlc6tjXflqBKEuYBBcu7Ax5VY+S6aw==
|
2282 |
+
dependencies:
|
2283 |
+
ngraph.events "^1.0.0"
|
2284 |
+
ngraph.merge "^1.0.0"
|
2285 |
+
ngraph.random "^1.0.0"
|
2286 |
+
|
2287 |
+
ngraph.graph@20:
|
2288 |
+
version "20.0.1"
|
2289 |
+
resolved "https://registry.yarnpkg.com/ngraph.graph/-/ngraph.graph-20.0.1.tgz#579470d1d805583239704dc913e2095540aaf371"
|
2290 |
+
integrity sha512-VFsQ+EMkT+7lcJO1QP8Ik3w64WbHJl27Q53EO9hiFU9CRyxJ8HfcXtfWz/U8okuoYKDctbciL6pX3vG5dt1rYA==
|
2291 |
+
dependencies:
|
2292 |
+
ngraph.events "^1.2.1"
|
2293 |
+
|
2294 |
+
ngraph.merge@^1.0.0:
|
2295 |
+
version "1.0.0"
|
2296 |
+
resolved "https://registry.yarnpkg.com/ngraph.merge/-/ngraph.merge-1.0.0.tgz#d763cdfa48b1bbd4270ea246f06c9c8ff5d3477c"
|
2297 |
+
integrity sha512-5J8YjGITUJeapsomtTALYsw7rFveYkM+lBj3QiYZ79EymQcuri65Nw3knQtFxQBU1r5iOaVRXrSwMENUPK62Vg==
|
2298 |
+
|
2299 |
+
ngraph.random@^1.0.0:
|
2300 |
+
version "1.2.0"
|
2301 |
+
resolved "https://registry.yarnpkg.com/ngraph.random/-/ngraph.random-1.2.0.tgz#3864ffbb9971e920db6c5f33ce5abc3d2439e3d2"
|
2302 |
+
integrity sha512-4EUeAGbB2HWX9njd6bP6tciN6ByJfoaAvmVL9QTaZSeXrW46eNGA9GajiXiPBbvFqxUWFkEbyo6x5qsACUuVfA==
|
2303 |
+
|
2304 |
node-releases@^2.0.19:
|
2305 |
version "2.0.19"
|
2306 |
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
|
2307 |
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
|
2308 |
|
2309 |
+
object-assign@^4.1.1:
|
2310 |
+
version "4.1.1"
|
2311 |
+
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
2312 |
+
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
2313 |
+
|
2314 |
optionator@^0.9.3:
|
2315 |
version "0.9.4"
|
2316 |
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734"
|
|
|
2369 |
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
|
2370 |
integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
|
2371 |
|
2372 |
+
polished@4:
|
2373 |
+
version "4.3.1"
|
2374 |
+
resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548"
|
2375 |
+
integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==
|
2376 |
+
dependencies:
|
2377 |
+
"@babel/runtime" "^7.17.8"
|
2378 |
+
|
2379 |
postcss@^8.5.3:
|
2380 |
version "8.5.3"
|
2381 |
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.3.tgz#1463b6f1c7fb16fe258736cba29a2de35237eafb"
|
|
|
2385 |
picocolors "^1.1.1"
|
2386 |
source-map-js "^1.2.1"
|
2387 |
|
2388 |
+
preact@10:
|
2389 |
+
version "10.26.5"
|
2390 |
+
resolved "https://registry.yarnpkg.com/preact/-/preact-10.26.5.tgz#7e1e998af178f139e4c7cb53f441bf2179f44ad2"
|
2391 |
+
integrity sha512-fmpDkgfGU6JYux9teDWLhj9mKN55tyepwYbxHgQuIxbWQzgFg5vk7Mrrtfx7xRxq798ynkY4DDDxZr235Kk+4w==
|
2392 |
+
|
2393 |
prelude-ls@^1.2.1:
|
2394 |
version "1.2.1"
|
2395 |
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
2396 |
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
|
2397 |
|
2398 |
+
process@^0.11.10:
|
2399 |
+
version "0.11.10"
|
2400 |
+
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
2401 |
+
integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
|
2402 |
+
|
2403 |
+
prop-types@15, prop-types@^15.5.10:
|
2404 |
+
version "15.8.1"
|
2405 |
+
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
2406 |
+
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
|
2407 |
+
dependencies:
|
2408 |
+
loose-envify "^1.4.0"
|
2409 |
+
object-assign "^4.1.1"
|
2410 |
+
react-is "^16.13.1"
|
2411 |
+
|
2412 |
punycode@^2.1.0:
|
2413 |
version "2.3.1"
|
2414 |
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
|
|
|
2426 |
dependencies:
|
2427 |
scheduler "^0.26.0"
|
2428 |
|
2429 |
+
react-force-graph-2d@^1.27.1:
|
2430 |
+
version "1.27.1"
|
2431 |
+
resolved "https://registry.yarnpkg.com/react-force-graph-2d/-/react-force-graph-2d-1.27.1.tgz#3c8be8c3a3295f8f10c1489fe1369aa52254d6dd"
|
2432 |
+
integrity sha512-/b1k+HbW9QCzGILJibyzN2PVZdDWTFuEylqcJGkUTBs0uLcK0h2LgOUuVU+GpRGpuXmj9sBAt43zz+PTETFHGg==
|
2433 |
+
dependencies:
|
2434 |
+
force-graph "^1.49"
|
2435 |
+
prop-types "15"
|
2436 |
+
react-kapsule "^2.5"
|
2437 |
+
|
2438 |
+
react-force-graph-3d@^1.26.1:
|
2439 |
+
version "1.26.1"
|
2440 |
+
resolved "https://registry.yarnpkg.com/react-force-graph-3d/-/react-force-graph-3d-1.26.1.tgz#b138adc13412da6d0c89ea4e85a59ef85ae5ed49"
|
2441 |
+
integrity sha512-Ff520+ngcja441fAyop+oiPPEcXaRhzvTqA+4ve6Kr341g3TIg0+s/i7pafCtYhgpPXcbjiDet0wskzGaNhIlQ==
|
2442 |
+
dependencies:
|
2443 |
+
"3d-force-graph" "^1.76"
|
2444 |
+
prop-types "15"
|
2445 |
+
react-kapsule "^2.5"
|
2446 |
+
|
2447 |
+
react-is@^16.13.1:
|
2448 |
+
version "16.13.1"
|
2449 |
+
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
2450 |
+
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
2451 |
+
|
2452 |
+
react-kapsule@^2.5:
|
2453 |
+
version "2.5.7"
|
2454 |
+
resolved "https://registry.yarnpkg.com/react-kapsule/-/react-kapsule-2.5.7.tgz#dcd957ae8e897ff48055fc8ff48ed04ebe3c5bd2"
|
2455 |
+
integrity sha512-kifAF4ZPD77qZKc4CKLmozq6GY1sBzPEJTIJb0wWFK6HsePJatK3jXplZn2eeAt3x67CDozgi7/rO8fNQ/AL7A==
|
2456 |
+
dependencies:
|
2457 |
+
jerrypick "^1.1.1"
|
2458 |
+
|
2459 |
react-refresh@^0.17.0:
|
2460 |
version "0.17.0"
|
2461 |
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
|
|
|
2488 |
get-nonce "^1.0.0"
|
2489 |
tslib "^2.0.0"
|
2490 |
|
2491 |
+
react-vis-force@^0.3.1:
|
2492 |
+
version "0.3.1"
|
2493 |
+
resolved "https://registry.yarnpkg.com/react-vis-force/-/react-vis-force-0.3.1.tgz#c7bc96a4e872409f5d4c0fa93fe89c94554d47b7"
|
2494 |
+
integrity sha512-YmAe02LAwkxeWceyL6Kq8C7RLQBWtgXtrVgDV9Uq9vgfeyh8z9U2+gH/i4KDgaZdSd2bVxIwr2CgkVdEOOMygQ==
|
2495 |
+
dependencies:
|
2496 |
+
d3-force "^1.0.2"
|
2497 |
+
global "^4.3.0"
|
2498 |
+
lodash.reduce "^4.6.0"
|
2499 |
+
prop-types "^15.5.10"
|
2500 |
+
|
2501 |
react@^19.0.0:
|
2502 |
version "19.1.0"
|
2503 |
resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75"
|
|
|
2513 |
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
|
2514 |
integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
|
2515 |
|
2516 |
+
robust-predicates@^3.0.2:
|
2517 |
+
version "3.0.2"
|
2518 |
+
resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771"
|
2519 |
+
integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==
|
2520 |
+
|
2521 |
rollup@^4.34.9:
|
2522 |
version "4.40.1"
|
2523 |
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.40.1.tgz#03d6c53ebb6a9c2c060ae686a61e72a2472b366f"
|
|
|
2554 |
dependencies:
|
2555 |
queue-microtask "^1.2.2"
|
2556 |
|
2557 |
+
rw@1:
|
2558 |
+
version "1.3.3"
|
2559 |
+
resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
|
2560 |
+
integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==
|
2561 |
+
|
2562 |
+
"safer-buffer@>= 2.1.2 < 3.0.0":
|
2563 |
+
version "2.1.2"
|
2564 |
+
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
2565 |
+
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
2566 |
+
|
2567 |
scheduler@^0.26.0:
|
2568 |
version "0.26.0"
|
2569 |
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337"
|
|
|
2623 |
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
|
2624 |
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
|
2625 |
|
2626 |
+
three-forcegraph@1:
|
2627 |
+
version "1.42.13"
|
2628 |
+
resolved "https://registry.yarnpkg.com/three-forcegraph/-/three-forcegraph-1.42.13.tgz#4827338dece4b027532fe2f006d802b9271cf725"
|
2629 |
+
integrity sha512-BoG5fB3nlAFeIyiLuFquvWIjt8DA2gdPWlqW/8V8xQcEO7otMmeN2/WWHCP7cWzKEImULxpJ6bNLmmt7TTJaiw==
|
2630 |
+
dependencies:
|
2631 |
+
accessor-fn "1"
|
2632 |
+
d3-array "1 - 3"
|
2633 |
+
d3-force-3d "2 - 3"
|
2634 |
+
d3-scale "1 - 4"
|
2635 |
+
d3-scale-chromatic "1 - 3"
|
2636 |
+
data-bind-mapper "1"
|
2637 |
+
kapsule "^1.16"
|
2638 |
+
ngraph.forcelayout "3"
|
2639 |
+
ngraph.graph "20"
|
2640 |
+
tinycolor2 "1"
|
2641 |
+
|
2642 |
+
three-render-objects@^1.35:
|
2643 |
+
version "1.40.0"
|
2644 |
+
resolved "https://registry.yarnpkg.com/three-render-objects/-/three-render-objects-1.40.0.tgz#d4f48800cbce9061a90814c2e60346f55e4171d3"
|
2645 |
+
integrity sha512-Ub2IebRGrV+ctxkOe7lkLzIraJDTtz5s31Z2rvaQb7sHAXfofv02CwtEJmIPIkEy6jpGreuqJbCGEnQpvKKDFw==
|
2646 |
+
dependencies:
|
2647 |
+
"@tweenjs/tween.js" "18 - 25"
|
2648 |
+
accessor-fn "1"
|
2649 |
+
float-tooltip "^1.7"
|
2650 |
+
kapsule "^1.16"
|
2651 |
+
polished "4"
|
2652 |
+
|
2653 |
+
"three@>=0.118 <1":
|
2654 |
+
version "0.176.0"
|
2655 |
+
resolved "https://registry.yarnpkg.com/three/-/three-0.176.0.tgz#a30c1974e46db5745e4f96dd9ee2028d71e16ecf"
|
2656 |
+
integrity sha512-PWRKYWQo23ojf9oZSlRGH8K09q7nRSWx6LY/HF/UUrMdYgN9i1e2OwJYHoQjwc6HF/4lvvYLC5YC1X8UJL2ZpA==
|
2657 |
+
|
2658 |
+
tinycolor2@1, tinycolor2@^1.6.0:
|
2659 |
+
version "1.6.0"
|
2660 |
+
resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e"
|
2661 |
+
integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==
|
2662 |
+
|
2663 |
tinyglobby@^0.2.13:
|
2664 |
version "0.2.13"
|
2665 |
resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.13.tgz#a0e46515ce6cbcd65331537e57484af5a7b2ff7e"
|