diff --git a/bun.lock b/bun.lock index 0b70d82..9cfed06 100644 --- a/bun.lock +++ b/bun.lock @@ -5,17 +5,19 @@ "": { "name": "graphy", "dependencies": { - "@anthropic-ai/sdk": "^0.97.0", - "@base-ui/react": "^1.4.1", + "@anthropic-ai/sdk": "^0.97.1", + "@base-ui/react": "^1.5.0", "@codemirror/autocomplete": "^6.20.2", "@codemirror/commands": "^6.10.3", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/language": "^6.12.3", + "@codemirror/language-data": "^6.5.2", "@codemirror/state": "^6.6.0", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.43.0", + "@dagrejs/dagre": "^3.0.0", "@fontsource-variable/geist": "^5.2.9", - "@openai/codex-sdk": "^0.131.0", + "@openai/codex-sdk": "^0.132.0", "@tailwindcss/vite": "^4.3.0", "@tanstack/react-devtools": "^0.10.5", "@tanstack/react-router": "^1.170.4", @@ -29,7 +31,7 @@ "cmdk": "^1.1.1", "lucide-react": "^1.16.0", "next-themes": "^0.4.6", - "nitro": "npm:nitro-nightly@^3.0.1-20260518-130639-31265391", + "nitro": "npm:nitro-nightly@^3.0.1-20260519-181425-9cc59cf7", "radix-ui": "^1.4.3", "react": "^19.2.6", "react-dom": "^19.2.6", @@ -48,21 +50,21 @@ "@tailwindcss/typography": "^0.5.19", "@tanstack/devtools-vite": "^0.7.0", "@tanstack/eslint-config": "^0.4.0", - "@types/node": "^25.9.0", - "@types/react": "^19.2.14", + "@types/node": "^25.9.1", + "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", "chokidar": "^5.0.0", "concurrently": "^9.2.1", "cross-env": "^10.1.0", - "electron": "^42.1.0", + "electron": "^42.2.0", "electron-builder": "^26.8.1", "eslint": "^10.4.0", "jsdom": "^29.1.1", "prettier": "^3.8.3", "typescript": "^6.0.3", "vite": "^8.0.13", - "vitest": "^4.1.6", + "vitest": "^4.1.7", "wait-on": "^9.0.10", }, }, @@ -70,7 +72,7 @@ "packages": { "7zip-bin": ["7zip-bin@5.2.0", "", {}, "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A=="], - "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.97.0", "", { "dependencies": { "json-schema-to-ts": "^3.1.1", "standardwebhooks": "^1.0.0" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-124Ebx14aEFlyr2/wRtQjcQ3IRbuON6GgoRKEPGffVV0Nu5DCXs7nlkocVQ4NLI8MxDT+7ezXCwRWXoBpWEuVw=="], + "@anthropic-ai/sdk": ["@anthropic-ai/sdk@0.97.1", "", { "dependencies": { "json-schema-to-ts": "^3.1.1", "standardwebhooks": "^1.0.0" }, "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" }, "optionalPeers": ["zod"], "bin": { "anthropic-ai-sdk": "bin/cli" } }, "sha512-wOf7AUeJPitcVpvKO4UMu63mWH5SaVipkGd7OOQJt/G6VYGlV8D2Gp9dLxOrttDJh/9gqPqdaBwDGcBevumeAg=="], "@asamuzakjp/css-color": ["@asamuzakjp/css-color@5.1.11", "", { "dependencies": { "@asamuzakjp/generational-cache": "^1.0.1", "@csstools/css-calc": "^3.2.0", "@csstools/css-color-parser": "^4.1.0", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg=="], @@ -138,9 +140,9 @@ "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], - "@base-ui/react": ["@base-ui/react@1.4.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.2.8", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@date-fns/tz", "@types/react", "date-fns"] }, "sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw=="], + "@base-ui/react": ["@base-ui/react@1.5.0", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.2.9", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@date-fns/tz", "@types/react", "date-fns"] }, "sha512-z1gSAlced1yY+iM+mHDEtIkD8UI3Ebs52MuBPxvV6f5hRutk+xvCH/wuB7hDqDzK9JG5FoMz5nhrqtSs1wjt1A=="], - "@base-ui/utils": ["@base-ui/utils@0.2.8", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ=="], + "@base-ui/utils": ["@base-ui/utils@0.2.9", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-x/PDDCYzoqPpjrdyb3VcyylTI2IjUXEtYDGi5foh7KsnmNJIIaVwA2GLgDH1dps1GgXiJbA60hM+AyuTfQzIvw=="], "@bramus/specificity": ["@bramus/specificity@2.4.2", "", { "dependencies": { "css-tree": "^3.0.0" }, "bin": { "specificity": "bin/cli.js" } }, "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw=="], @@ -148,10 +150,54 @@ "@codemirror/commands": ["@codemirror/commands@6.10.3", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.6.0", "@codemirror/view": "^6.27.0", "@lezer/common": "^1.1.0" } }, "sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q=="], + "@codemirror/lang-angular": ["@codemirror/lang-angular@0.1.4", "", { "dependencies": { "@codemirror/lang-html": "^6.0.0", "@codemirror/lang-javascript": "^6.1.2", "@codemirror/language": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.3.3" } }, "sha512-oap+gsltb/fzdlTQWD6BFF4bSLKcDnlxDsLdePiJpCVNKWXSTAbiiQeYI3UmES+BLAdkmIC1WjyztC1pi/bX4g=="], + + "@codemirror/lang-cpp": ["@codemirror/lang-cpp@6.0.3", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@lezer/cpp": "^1.0.0" } }, "sha512-URM26M3vunFFn9/sm6rzqrBzDgfWuDixp85uTY49wKudToc2jTHUrKIGGKs+QWND+YLofNNZpxcNGRynFJfvgA=="], + + "@codemirror/lang-css": ["@codemirror/lang-css@6.3.1", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.0.2", "@lezer/css": "^1.1.7" } }, "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg=="], + + "@codemirror/lang-go": ["@codemirror/lang-go@6.0.1", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/go": "^1.0.0" } }, "sha512-7fNvbyNylvqCphW9HD6WFnRpcDjr+KXX/FgqXy5H5ZS0eC5edDljukm/yNgYkwTsgp2busdod50AOTIy6Jikfg=="], + + "@codemirror/lang-html": ["@codemirror/lang-html@6.4.11", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/css": "^1.1.0", "@lezer/html": "^1.3.12" } }, "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw=="], + + "@codemirror/lang-java": ["@codemirror/lang-java@6.0.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@lezer/java": "^1.0.0" } }, "sha512-m5Nt1mQ/cznJY7tMfQTJchmrjdjQ71IDs+55d1GAa8DGaB8JXWsVCkVT284C3RTASaY43YknrK2X3hPO/J3MOQ=="], + "@codemirror/lang-javascript": ["@codemirror/lang-javascript@6.2.5", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", "@codemirror/lint": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0", "@lezer/javascript": "^1.0.0" } }, "sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A=="], + "@codemirror/lang-jinja": ["@codemirror/lang-jinja@6.0.1", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.2.0", "@lezer/lr": "^1.4.0" } }, "sha512-P5kyHLObzjtbGj16h+hyvZTxJhSjBEeSx4wMjbnAf3b0uwTy2+F0zGjMZL4PQOm/mh2eGZ5xUDVZXgwP783Nsw=="], + + "@codemirror/lang-json": ["@codemirror/lang-json@6.0.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@lezer/json": "^1.0.0" } }, "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ=="], + + "@codemirror/lang-less": ["@codemirror/lang-less@6.0.2", "", { "dependencies": { "@codemirror/lang-css": "^6.2.0", "@codemirror/language": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-EYdQTG22V+KUUk8Qq582g7FMnCZeEHsyuOJisHRft/mQ+ZSZ2w51NupvDUHiqtsOy7It5cHLPGfHQLpMh9bqpQ=="], + + "@codemirror/lang-liquid": ["@codemirror/lang-liquid@6.3.2", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.3.1" } }, "sha512-6PDVU3ZnfeYyz1at1E/ttorErZvZFXXt1OPhtfe1EZJ2V2iDFa0CwPqPgG5F7NXN0yONGoBogKmFAafKTqlwIw=="], + + "@codemirror/lang-markdown": ["@codemirror/lang-markdown@6.5.0", "", { "dependencies": { "@codemirror/autocomplete": "^6.7.1", "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.3.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.2.1", "@lezer/markdown": "^1.0.0" } }, "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw=="], + + "@codemirror/lang-php": ["@codemirror/lang-php@6.0.2", "", { "dependencies": { "@codemirror/lang-html": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/php": "^1.0.0" } }, "sha512-ZKy2v1n8Fc8oEXj0Th0PUMXzQJ0AIR6TaZU+PbDHExFwdu+guzOA4jmCHS1Nz4vbFezwD7LyBdDnddSJeScMCA=="], + + "@codemirror/lang-python": ["@codemirror/lang-python@6.2.1", "", { "dependencies": { "@codemirror/autocomplete": "^6.3.2", "@codemirror/language": "^6.8.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.2.1", "@lezer/python": "^1.1.4" } }, "sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw=="], + + "@codemirror/lang-rust": ["@codemirror/lang-rust@6.0.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@lezer/rust": "^1.0.0" } }, "sha512-EZaGjCUegtiU7kSMvOfEZpaCReowEf3yNidYu7+vfuGTm9ow4mthAparY5hisJqOHmJowVH3Upu+eJlUji6qqA=="], + + "@codemirror/lang-sass": ["@codemirror/lang-sass@6.0.2", "", { "dependencies": { "@codemirror/lang-css": "^6.2.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.0.2", "@lezer/sass": "^1.0.0" } }, "sha512-l/bdzIABvnTo1nzdY6U+kPAC51czYQcOErfzQ9zSm9D8GmNPD0WTW8st/CJwBTPLO8jlrbyvlSEcN20dc4iL0Q=="], + + "@codemirror/lang-sql": ["@codemirror/lang-sql@6.10.0", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-6ayPkEd/yRw0XKBx5uAiToSgGECo/GY2NoJIHXIIQh1EVwLuKoU8BP/qK0qH5NLXAbtJRLuT73hx7P9X34iO4w=="], + + "@codemirror/lang-vue": ["@codemirror/lang-vue@0.1.3", "", { "dependencies": { "@codemirror/lang-html": "^6.0.0", "@codemirror/lang-javascript": "^6.1.2", "@codemirror/language": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.3.1" } }, "sha512-QSKdtYTDRhEHCfo5zOShzxCmqKJvgGrZwDQSdbvCRJ5pRLWBS7pD/8e/tH44aVQT6FKm0t6RVNoSUWHOI5vNug=="], + + "@codemirror/lang-wast": ["@codemirror/lang-wast@6.0.2", "", { "dependencies": { "@codemirror/language": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-Imi2KTpVGm7TKuUkqyJ5NRmeFWF7aMpNiwHnLQe0x9kmrxElndyH0K6H/gXtWwY6UshMRAhpENsgfpSwsgmC6Q=="], + + "@codemirror/lang-xml": ["@codemirror/lang-xml@6.1.0", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.4.0", "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", "@lezer/common": "^1.0.0", "@lezer/xml": "^1.0.0" } }, "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg=="], + + "@codemirror/lang-yaml": ["@codemirror/lang-yaml@6.1.3", "", { "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.2.0", "@lezer/lr": "^1.0.0", "@lezer/yaml": "^1.0.0" } }, "sha512-AZ8DJBuXGVHybpBQhmZtgew5//4hv3tdkXnr3vDmOUMJRuB6vn/uuwtmTOTlqEaQFg3hQSVeA90NmvIQyUV6FQ=="], + "@codemirror/language": ["@codemirror/language@6.12.3", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" } }, "sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA=="], + "@codemirror/language-data": ["@codemirror/language-data@6.5.2", "", { "dependencies": { "@codemirror/lang-angular": "^0.1.0", "@codemirror/lang-cpp": "^6.0.0", "@codemirror/lang-css": "^6.0.0", "@codemirror/lang-go": "^6.0.0", "@codemirror/lang-html": "^6.0.0", "@codemirror/lang-java": "^6.0.0", "@codemirror/lang-javascript": "^6.0.0", "@codemirror/lang-jinja": "^6.0.0", "@codemirror/lang-json": "^6.0.0", "@codemirror/lang-less": "^6.0.0", "@codemirror/lang-liquid": "^6.0.0", "@codemirror/lang-markdown": "^6.0.0", "@codemirror/lang-php": "^6.0.0", "@codemirror/lang-python": "^6.0.0", "@codemirror/lang-rust": "^6.0.0", "@codemirror/lang-sass": "^6.0.0", "@codemirror/lang-sql": "^6.0.0", "@codemirror/lang-vue": "^0.1.1", "@codemirror/lang-wast": "^6.0.0", "@codemirror/lang-xml": "^6.0.0", "@codemirror/lang-yaml": "^6.0.0", "@codemirror/language": "^6.0.0", "@codemirror/legacy-modes": "^6.4.0" } }, "sha512-CPkWBKrNS8stYbEU5kwBwTf3JB1kghlbh4FSAwzGW2TEscdeHHH4FGysREW86Mqnj3Qn09s0/6Ea/TutmoTobg=="], + + "@codemirror/legacy-modes": ["@codemirror/legacy-modes@6.5.3", "", { "dependencies": { "@codemirror/language": "^6.0.0" } }, "sha512-xCsmIzH78MyWkib9jlPaaun57XNkfbMIhagfaZVd0iLTqlpw3jXaIcbZm72MTmmn64eTZpBVNjbyYh+QXnxRsg=="], + "@codemirror/lint": ["@codemirror/lint@6.9.6", "", { "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.42.0", "crelt": "^1.0.5" } }, "sha512-6Kp7r6XfCi/D/5sdXieMfg9pJU1bUEx96WITuLU6ESaKizCz0QHFMjY/TaFSbigDdEAIgi93itLBIUETP4oK+A=="], "@codemirror/state": ["@codemirror/state@6.6.0", "", { "dependencies": { "@marijn/find-cluster-break": "^1.0.0" } }, "sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ=="], @@ -172,7 +218,9 @@ "@csstools/css-tokenizer": ["@csstools/css-tokenizer@4.0.0", "", {}, "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA=="], - "@date-fns/tz": ["@date-fns/tz@1.4.1", "", {}, "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA=="], + "@dagrejs/dagre": ["@dagrejs/dagre@3.0.0", "", { "dependencies": { "@dagrejs/graphlib": "4.0.1" } }, "sha512-ZzhnTy1rfuoew9Ez3EIw4L2znPGnYYhfn8vc9c4oB8iw6QAsszbiU0vRhlxWPFnmmNSFAkrYeF1PhM5m4lAN0Q=="], + + "@dagrejs/graphlib": ["@dagrejs/graphlib@4.0.1", "", {}, "sha512-IvcV6FduIIAmLwnH+yun+QtV36SC7mERqa86aClNqmMN09WhmPPYU8ckHrZBozErf+UvHPWOTJYaGYiIcs0DgA=="], "@develar/schema-utils": ["@develar/schema-utils@2.6.5", "", { "dependencies": { "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" } }, "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig=="], @@ -286,12 +334,38 @@ "@lezer/common": ["@lezer/common@1.5.2", "", {}, "sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ=="], + "@lezer/cpp": ["@lezer/cpp@1.1.5", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-DIhSXmYtJKLehrjzDFN+2cPt547ySQ41nA8yqcDf/GxMc+YM736xqltFkvADL2M0VebU5I+3+4ks2Vv+Kyq3Aw=="], + + "@lezer/css": ["@lezer/css@1.3.3", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.3.0" } }, "sha512-RzBo8r+/6QJeow7aPHIpGVIH59xTcJXp399820gZoMo9noQDRVpJLheIBUicYwKcsbOYoBRoLZlf2720dG/4Tg=="], + + "@lezer/go": ["@lezer/go@1.0.1", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.3.0" } }, "sha512-xToRsYxwsgJNHTgNdStpcvmbVuKxTapV0dM0wey1geMMRc9aggoVyKgzYp41D2/vVOx+Ii4hmE206kvxIXBVXQ=="], + "@lezer/highlight": ["@lezer/highlight@1.2.3", "", { "dependencies": { "@lezer/common": "^1.3.0" } }, "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g=="], + "@lezer/html": ["@lezer/html@1.3.13", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg=="], + + "@lezer/java": ["@lezer/java@1.1.3", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw=="], + "@lezer/javascript": ["@lezer/javascript@1.5.4", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.1.3", "@lezer/lr": "^1.3.0" } }, "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA=="], + "@lezer/json": ["@lezer/json@1.0.3", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ=="], + "@lezer/lr": ["@lezer/lr@1.4.10", "", { "dependencies": { "@lezer/common": "^1.0.0" } }, "sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A=="], + "@lezer/markdown": ["@lezer/markdown@1.6.3", "", { "dependencies": { "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0" } }, "sha512-jpGm5Ps+XErS+xA4urw7ogEGkeZOahVQF21Z6oECF0sj+2liwZopd2+I8uH5I/vZsRuuze3OxBREIANLf6KKUw=="], + + "@lezer/php": ["@lezer/php@1.0.5", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.1.0" } }, "sha512-W7asp9DhM6q0W6DYNwIkLSKOvxlXRrif+UXBMxzsJUuqmhE7oVU+gS3THO4S/Puh7Xzgm858UNaFi6dxTP8dJA=="], + + "@lezer/python": ["@lezer/python@1.1.18", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg=="], + + "@lezer/rust": ["@lezer/rust@1.0.2", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg=="], + + "@lezer/sass": ["@lezer/sass@1.1.0", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-3mMGdCTUZ/84ArHOuXWQr37pnf7f+Nw9ycPUeKX+wu19b7pSMcZGLbaXwvD2APMBDOGxPmpK/O6S1v1EvLoqgQ=="], + + "@lezer/xml": ["@lezer/xml@1.0.6", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww=="], + + "@lezer/yaml": ["@lezer/yaml@1.0.4", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.4.0" } }, "sha512-2lrrHqxalACEbxIbsjhqGpSW8kWpUKuY6RHgnSAFZa6qK62wvnPxA8hGOwOoDbwHcOFs5M4o27mjGu+P7TvBmw=="], + "@malept/cross-spawn-promise": ["@malept/cross-spawn-promise@2.0.0", "", { "dependencies": { "cross-spawn": "^7.0.1" } }, "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg=="], "@malept/flatpak-bundler": ["@malept/flatpak-bundler@0.4.0", "", { "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.0", "lodash": "^4.17.15", "tmp-promise": "^3.0.2" } }, "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q=="], @@ -334,21 +408,21 @@ "@open-draft/until": ["@open-draft/until@2.1.0", "", {}, "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg=="], - "@openai/codex": ["@openai/codex@0.131.0", "", { "optionalDependencies": { "@openai/codex-darwin-arm64": "npm:@openai/codex@0.131.0-darwin-arm64", "@openai/codex-darwin-x64": "npm:@openai/codex@0.131.0-darwin-x64", "@openai/codex-linux-arm64": "npm:@openai/codex@0.131.0-linux-arm64", "@openai/codex-linux-x64": "npm:@openai/codex@0.131.0-linux-x64", "@openai/codex-win32-arm64": "npm:@openai/codex@0.131.0-win32-arm64", "@openai/codex-win32-x64": "npm:@openai/codex@0.131.0-win32-x64" }, "bin": { "codex": "bin/codex.js" } }, "sha512-5/fNFAotnPaNSX1jGAAGgWk65HGZupWPnka+DzXdoNzl78RGw0eGpOjpowF+dtPRTEvdwt0U8qoptUjtefitBQ=="], + "@openai/codex": ["@openai/codex@0.132.0", "", { "optionalDependencies": { "@openai/codex-darwin-arm64": "npm:@openai/codex@0.132.0-darwin-arm64", "@openai/codex-darwin-x64": "npm:@openai/codex@0.132.0-darwin-x64", "@openai/codex-linux-arm64": "npm:@openai/codex@0.132.0-linux-arm64", "@openai/codex-linux-x64": "npm:@openai/codex@0.132.0-linux-x64", "@openai/codex-win32-arm64": "npm:@openai/codex@0.132.0-win32-arm64", "@openai/codex-win32-x64": "npm:@openai/codex@0.132.0-win32-x64" }, "bin": { "codex": "bin/codex.js" } }, "sha512-OaTUz3oTbUP23I1yprQyaqO5LvlfWbTFIAI/JT2Hm0kgIsD+nKK14vauTzAt3zaeik6D7+meekCTuNdpU1dU2Q=="], - "@openai/codex-darwin-arm64": ["@openai/codex@0.131.0-darwin-arm64", "", { "os": "darwin", "cpu": "arm64" }, "sha512-e4EZ7XjK1zrkW65nZdhCqQFVKd/zt/of26w4L32wcfibzKE15/Lw2i3FGTD9ufUUqVzF+gowu/lEiBRvDoh21w=="], + "@openai/codex-darwin-arm64": ["@openai/codex@0.132.0-darwin-arm64", "", { "os": "darwin", "cpu": "arm64" }, "sha512-EVD6XaKSN4fD7Z9HrQIjOFFLbL6cu1PWA6a2hzFwMomAjHlZelGOLtS4faFWOmLUZnO7TYtnJJXk8VNfdGqefg=="], - "@openai/codex-darwin-x64": ["@openai/codex@0.131.0-darwin-x64", "", { "os": "darwin", "cpu": "x64" }, "sha512-BkFwUVU+yJhw5a85p1oagiSjkRvBs9Xp1b1q1Qbvg4Y9Chtatj4SjI7HRjH5uespNs/Wnh48cMnTsxkAILqlBw=="], + "@openai/codex-darwin-x64": ["@openai/codex@0.132.0-darwin-x64", "", { "os": "darwin", "cpu": "x64" }, "sha512-RGaiBLwM9UkuB0tOHXjhwTJzMi/FCk/TQaKai97WIodIrvmRzL+j43hqVsXMV8jjYxTFwdyYooGMmCI7cQbKXw=="], - "@openai/codex-linux-arm64": ["@openai/codex@0.131.0-linux-arm64", "", { "os": "linux", "cpu": "arm64" }, "sha512-I12Ou5I5oR/nfUyMJ/D95OMm83HoXMBHdl+4YrPay/XGd9KkyMhvZxp9Es/h9x/xt8yiBIk+k0Ehtr093r8AFw=="], + "@openai/codex-linux-arm64": ["@openai/codex@0.132.0-linux-arm64", "", { "os": "linux", "cpu": "arm64" }, "sha512-cdYuH9GqIHMI6p8hP0R4VKejBQjeAUtz1SMhPmwbIP24/Jc7w+KoVXP40UEqaLkD6i3pVbbYtnJ7KahZV+GEPQ=="], - "@openai/codex-linux-x64": ["@openai/codex@0.131.0-linux-x64", "", { "os": "linux", "cpu": "x64" }, "sha512-Fj9P7h3iBgjAQKzoEyUkb1Q8QMVLqaf62UzlL1jYeDhIzbDMI/gaV0tOackIGXPcfguzzORJC1g5pD9SMWqU5g=="], + "@openai/codex-linux-x64": ["@openai/codex@0.132.0-linux-x64", "", { "os": "linux", "cpu": "x64" }, "sha512-aGJPB+QkgtYQNQMlRGmE7oZstULu7k4trpux5r3CCZGPun4Xtwx3swtZXm7cWOVeTUkNfGCqdtCQ0bv6SKRiLA=="], - "@openai/codex-sdk": ["@openai/codex-sdk@0.131.0", "", { "dependencies": { "@openai/codex": "0.131.0" } }, "sha512-fSIJKPGkxVsKu5TsU9pcCvGfYxiPLtfuJOkuk9VIqeZHQwlhVByZ8MVTiBhsd4mr5hxgyeyPSiofUONULdaPWQ=="], + "@openai/codex-sdk": ["@openai/codex-sdk@0.132.0", "", { "dependencies": { "@openai/codex": "0.132.0" } }, "sha512-KyO6Xx6FP0gm8nXWGRyug8lox1DFK5dmc/ThO9b2WggSDQoPH2W+1WWEmliwE2juAs3p7A6VedQ1RfixJDotRw=="], - "@openai/codex-win32-arm64": ["@openai/codex@0.131.0-win32-arm64", "", { "os": "win32", "cpu": "arm64" }, "sha512-aGXsk8GYNFCjHYH61mVG0PulheBq6ZxZWM2BLYAJabzGarzRQpPknc60mx8mSm93BebjPkX0Wpf+0qInBPbF0w=="], + "@openai/codex-win32-arm64": ["@openai/codex@0.132.0-win32-arm64", "", { "os": "win32", "cpu": "arm64" }, "sha512-6RmSrBe0sAMLdF3g1FIZw9Vlqy4pmcU/Lr0Q6bQJGeY/IKUbYwj2dWZukXVWU+kW8B7+KNuX89k5nRk1GUaS6A=="], - "@openai/codex-win32-x64": ["@openai/codex@0.131.0-win32-x64", "", { "os": "win32", "cpu": "x64" }, "sha512-RlIRs0hi6xIaBXWFhiPTPlz+Dfibc3pXrnVXjJtpbeYcNyBOO+SIMMVuQUswpz3RnJpsxA70dQA+05hKYraKhA=="], + "@openai/codex-win32-x64": ["@openai/codex@0.132.0-win32-x64", "", { "os": "win32", "cpu": "x64" }, "sha512-TnAoOBWbFSCqR+4AkgwSKOVQJtGUdBCqROOEyAKylbIug55xzrLPLNQ7Mnd9l1yFIUnU2NqvPeHtIYqGImzCqA=="], "@oxc-parser/binding-android-arm-eabi": ["@oxc-parser/binding-android-arm-eabi@0.120.0", "", { "os": "android", "cpu": "arm" }, "sha512-WU3qtINx802wOl8RxAF1v0VvmC2O4D9M8Sv486nLeQ7iPHVmncYZrtBhB4SYyX+XZxj2PNnCcN+PW21jHgiOxg=="], @@ -720,11 +794,11 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@25.9.0", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-AOQwYUNolgy3VosiRqXrACUXTN8nJUtPl7FJXMqZVyxiiCLhQuG3jXKvCS1ALr+Y2OmZhzzLVlYPEqJaiqkaJQ=="], + "@types/node": ["@types/node@25.9.1", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg=="], "@types/plist": ["@types/plist@3.0.5", "", { "dependencies": { "@types/node": "*", "xmlbuilder": ">=11.0.1" } }, "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA=="], - "@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="], + "@types/react": ["@types/react@19.2.15", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q=="], "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], @@ -804,19 +878,19 @@ "@vitejs/plugin-react": ["@vitejs/plugin-react@6.0.2", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.0" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler"] }, "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg=="], - "@vitest/expect": ["@vitest/expect@4.1.6", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.6", "@vitest/utils": "4.1.6", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-7EHDquPthALSV0jhhjgEW8FXaviMx7rSqu8W6oqCoAuOhKov814P99QDV1pxMA3QPv21YudvJngIhjrNI4opLg=="], + "@vitest/expect": ["@vitest/expect@4.1.7", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.7", "@vitest/utils": "4.1.7", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-1R+tw0ortHEbZDGMymm+pN7/AFQ/RkFFdtd7EN+VBpynKmLbP8A3rpEXdshBJ7+8hQ9zBJh/i1s0yKNtxAnU7w=="], - "@vitest/mocker": ["@vitest/mocker@4.1.6", "", { "dependencies": { "@vitest/spy": "4.1.6", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-MCFc63czMjEInOlcY2cpQCvCN+KgbAn+60xu9cMgP4sKaLC5JNAKw7JH8QdAnoAC88hW1IiSNZ+GgVXlN1UcMQ=="], + "@vitest/mocker": ["@vitest/mocker@4.1.7", "", { "dependencies": { "@vitest/spy": "4.1.7", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-vY7nuamKgfvpA1Koa3oYIw/k7D6kZnpGyNMZW8loow2bsBYla1TFdqTaXncWdRn4pgwNs+90RhnXhJScDwQeJA=="], - "@vitest/pretty-format": ["@vitest/pretty-format@4.1.6", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-h5SxD/IzNhZYnrSZRsUZQIC+vD0GY8cUvq0iwsmkFKixRCKLLWqCXa/FIQ4S1R+sI+PGoojkHsdNrbZiM9Qpgw=="], + "@vitest/pretty-format": ["@vitest/pretty-format@4.1.7", "", { "dependencies": { "tinyrainbow": "^3.1.0" } }, "sha512-umgCarTOYQWIaDMvGDRZij+6b9oVeLIyJzfN+AS88e0ZOU3QTgNNSTtjQOpcvWr3np1N0j4WgZj+sb3oYBDscw=="], - "@vitest/runner": ["@vitest/runner@4.1.6", "", { "dependencies": { "@vitest/utils": "4.1.6", "pathe": "^2.0.3" } }, "sha512-nOPCmn2+yD0ZNmKdsXGv/UxMMWbMuKeD6GyYncNwdkYDxpQvrPSKYj2rWuDjC2Y4b6w6hjip5dBKFzEUuZe3vA=="], + "@vitest/runner": ["@vitest/runner@4.1.7", "", { "dependencies": { "@vitest/utils": "4.1.7", "pathe": "^2.0.3" } }, "sha512-BapjmAQ2aI78WdMEfeUWivnfVzB+VPGwWRQcJE0OUq7qEeEcBsCSf+0T5iREBNE5nBb4wA5Ya0W6IA+sghdEFw=="], - "@vitest/snapshot": ["@vitest/snapshot@4.1.6", "", { "dependencies": { "@vitest/pretty-format": "4.1.6", "@vitest/utils": "4.1.6", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-YhsdE6xAVfTDmzjxL2ZDUvjj+ZsgyOKe+TdQzqkD72wIOmHka8NuGQ6NpTNZv9D2Z63fbwWKJPeVpEw4EQgYxw=="], + "@vitest/snapshot": ["@vitest/snapshot@4.1.7", "", { "dependencies": { "@vitest/pretty-format": "4.1.7", "@vitest/utils": "4.1.7", "magic-string": "^0.30.21", "pathe": "^2.0.3" } }, "sha512-ZacLzja+TmJeZ1h14xW2FB/WpeimUD3haBXQPyJqxvo8jQTmfeA8zv58mtjN2C7EHXZDYVcVYdYmAxjkWVvKCw=="], - "@vitest/spy": ["@vitest/spy@4.1.6", "", {}, "sha512-JFKxMx6udhwKh/Ldo270e17QX710vgunMkuPAvXjHSvC6oqLWAHhVhjg/I71q0u0CBSErIODV1Kjv0FQNSWjdg=="], + "@vitest/spy": ["@vitest/spy@4.1.7", "", {}, "sha512-kbkI5LMWakyuTIvs6fUJ5qdIVb1XVKsYJAT4OJ938cHMROYMSfmoQdZy0aaAnjbbc8F61vkoTqz/Az+/HiIu5Q=="], - "@vitest/utils": ["@vitest/utils@4.1.6", "", { "dependencies": { "@vitest/pretty-format": "4.1.6", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-FxIY+U81R3LGKCxaHHFRQ5+g6/iRgGLmeHWdp2Amj4ljQRrEIWHmZyDfDYBRZlpyqA7qKxtS9DD1dhk8RnRIVQ=="], + "@vitest/utils": ["@vitest/utils@4.1.7", "", { "dependencies": { "@vitest/pretty-format": "4.1.7", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-T532WBu791cBxJlCl6SO+J14l81DQx6uQHm1bQbmCDY7nqlEIgkza/UFnSBNaUtSf41unldDFjdOBYEQC4b5Hw=="], "@xmldom/xmldom": ["@xmldom/xmldom@0.8.13", "", {}, "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw=="], @@ -1090,8 +1164,6 @@ "data-urls": ["data-urls@7.0.0", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.0" } }, "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA=="], - "date-fns": ["date-fns@4.2.1", "", {}, "sha512-37RhSdxaG1suen6VDCza6rNrQfooyQh57HFVPwQGEq2QWliVLzPQZ8Oa017weOu+HZCnzI7N3Pf/wyoBKfEqrA=="], - "dayjs": ["dayjs@1.11.20", "", {}, "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ=="], "db0": ["db0@0.3.4", "", { "peerDependencies": { "@electric-sql/pglite": "*", "@libsql/client": "*", "better-sqlite3": "*", "drizzle-orm": "*", "mysql2": "*", "sqlite3": "*" }, "optionalPeers": ["@electric-sql/pglite", "@libsql/client", "better-sqlite3", "drizzle-orm", "mysql2", "sqlite3"] }, "sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw=="], @@ -1170,7 +1242,7 @@ "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], - "electron": ["electron@42.1.0", "", { "dependencies": { "@electron/get": "^5.0.0", "@types/node": "^24.9.0", "extract-zip": "^2.0.1" }, "bin": { "electron": "cli.js", "install-electron": "install.js" } }, "sha512-0szNwC/0dWtkvNce5j3ThiuL0TxBNrZN/BZhdOiGwbLreiD/+u3MGpkct4hA5Ycagb8MXjpEr5/oosi+FwuKRQ=="], + "electron": ["electron@42.2.0", "", { "dependencies": { "@electron/get": "^5.0.0", "@types/node": "^24.9.0", "extract-zip": "^2.0.1" }, "bin": { "electron": "cli.js", "install-electron": "install.js" } }, "sha512-b2Tc7sIKiZEl0tBVwFM5GJ+FT5KYhmy9QJHjx8BGVZPVW2SctXWEvrE959ElB56qw7H05dBkhlikDA1DmpaAMw=="], "electron-builder": ["electron-builder@26.8.1", "", { "dependencies": { "app-builder-lib": "26.8.1", "builder-util": "26.8.1", "builder-util-runtime": "9.5.1", "chalk": "^4.1.2", "ci-info": "^4.2.0", "dmg-builder": "26.8.1", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", "yargs": "^17.6.2" }, "bin": { "electron-builder": "cli.js", "install-app-deps": "install-app-deps.js" } }, "sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw=="], @@ -1780,7 +1852,7 @@ "nf3": ["nf3@0.3.17", "", {}, "sha512-N9zEWySuJFw+gR0lhS5863YsvNeudOdqRyFvNb+jMXbeTJOdrjDqkCpDginIZfUm0LzT1t1nCRiDeqQm/8kirQ=="], - "nitro": ["nitro-nightly@3.0.1-20260518-130639-31265391", "", { "dependencies": { "consola": "^3.4.2", "crossws": "^0.4.5", "db0": "^0.3.4", "env-runner": "^0.1.7", "h3": "^2.0.1-rc.22", "hookable": "^6.1.1", "nf3": "^0.3.17", "ocache": "^0.1.4", "ofetch": "^2.0.0-alpha.3", "ohash": "^2.0.11", "rolldown": "^1.0.0", "srvx": "^0.11.15", "unenv": "^2.0.0-rc.24", "unstorage": "^2.0.0-alpha.7" }, "peerDependencies": { "@vercel/queue": "^0.1.6", "dotenv": "*", "giget": "*", "jiti": "^2.6.1", "rollup": "^4.60.3", "vite": "^7 || ^8", "xml2js": "^0.6.2", "zephyr-agent": "^0.2.0" }, "optionalPeers": ["@vercel/queue", "dotenv", "giget", "jiti", "rollup", "vite", "xml2js", "zephyr-agent"], "bin": { "nitro": "dist/cli/index.mjs" } }, "sha512-JhmqcyNdah1zLNeHzAIeNcTqNT1GW5UveEdK39hGB776K4ydPlijTsm821MTDNZjdEmSTs8Pzxzr+xmi7lBgdw=="], + "nitro": ["nitro-nightly@3.0.1-20260519-181425-9cc59cf7", "", { "dependencies": { "consola": "^3.4.2", "crossws": "^0.4.5", "db0": "^0.3.4", "env-runner": "^0.1.7", "h3": "^2.0.1-rc.22", "hookable": "^6.1.1", "nf3": "^0.3.17", "ocache": "^0.1.4", "ofetch": "^2.0.0-alpha.3", "ohash": "^2.0.11", "rolldown": "^1.0.1", "srvx": "^0.11.15", "unenv": "^2.0.0-rc.24", "unstorage": "^2.0.0-alpha.7" }, "peerDependencies": { "@vercel/queue": "^0.1.6", "dotenv": "*", "giget": "*", "jiti": "^2.6.1", "rollup": "^4.60.3", "vite": "^7 || ^8", "xml2js": "^0.6.2", "zephyr-agent": "^0.2.0" }, "optionalPeers": ["@vercel/queue", "dotenv", "giget", "jiti", "rollup", "vite", "xml2js", "zephyr-agent"], "bin": { "nitro": "dist/cli/index.mjs" } }, "sha512-3Yd4X9aOb/8dS1Os1aba+KOUeYut+kFbcQoteNbRCUrASNZ+g33R/Ne8VBGAm96scjwMoP9miS2GsmcpuNIX2A=="], "node-abi": ["node-abi@4.31.0", "", { "dependencies": { "semver": "^7.6.3" } }, "sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw=="], @@ -2282,7 +2354,7 @@ "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], - "vitest": ["vitest@4.1.6", "", { "dependencies": { "@vitest/expect": "4.1.6", "@vitest/mocker": "4.1.6", "@vitest/pretty-format": "4.1.6", "@vitest/runner": "4.1.6", "@vitest/snapshot": "4.1.6", "@vitest/spy": "4.1.6", "@vitest/utils": "4.1.6", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.6", "@vitest/browser-preview": "4.1.6", "@vitest/browser-webdriverio": "4.1.6", "@vitest/coverage-istanbul": "4.1.6", "@vitest/coverage-v8": "4.1.6", "@vitest/ui": "4.1.6", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-6lvjbS3p9b4CrdCmguzbh2/4uoXhGE2q71R4OX5sqF9R1bo9Xd6fGrMAfvp5wnCzlBnFVdCOp6onuTQVbo8iUQ=="], + "vitest": ["vitest@4.1.7", "", { "dependencies": { "@vitest/expect": "4.1.7", "@vitest/mocker": "4.1.7", "@vitest/pretty-format": "4.1.7", "@vitest/runner": "4.1.7", "@vitest/snapshot": "4.1.7", "@vitest/spy": "4.1.7", "@vitest/utils": "4.1.7", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.7", "@vitest/browser-preview": "4.1.7", "@vitest/browser-webdriverio": "4.1.7", "@vitest/coverage-istanbul": "4.1.7", "@vitest/coverage-v8": "4.1.7", "@vitest/ui": "4.1.7", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-flYyaFd2CgoCoU+0UKt3pxksgC+S02iTDN0n3LtqaMeXsI9SBcdNujc2k0DeFLzUn/0k538yNjOSdwgCqcrwJA=="], "vue-eslint-parser": ["vue-eslint-parser@10.4.0", "", { "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0 || ^9.0.0", "eslint-visitor-keys": "^4.2.0 || ^5.0.0", "espree": "^10.3.0 || ^11.0.0", "esquery": "^1.6.0", "semver": "^7.6.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" } }, "sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg=="], diff --git a/package.json b/package.json index 6640b74..5bac027 100644 --- a/package.json +++ b/package.json @@ -76,17 +76,19 @@ } }, "dependencies": { - "@anthropic-ai/sdk": "^0.97.0", - "@base-ui/react": "^1.4.1", + "@anthropic-ai/sdk": "^0.97.1", + "@base-ui/react": "^1.5.0", "@codemirror/autocomplete": "^6.20.2", "@codemirror/commands": "^6.10.3", "@codemirror/lang-javascript": "^6.2.5", "@codemirror/language": "^6.12.3", + "@codemirror/language-data": "^6.5.2", "@codemirror/state": "^6.6.0", "@codemirror/theme-one-dark": "^6.1.3", "@codemirror/view": "^6.43.0", + "@dagrejs/dagre": "^3.0.0", "@fontsource-variable/geist": "^5.2.9", - "@openai/codex-sdk": "^0.131.0", + "@openai/codex-sdk": "^0.132.0", "@tailwindcss/vite": "^4.3.0", "@tanstack/react-devtools": "^0.10.5", "@tanstack/react-router": "^1.170.4", @@ -100,7 +102,7 @@ "cmdk": "^1.1.1", "lucide-react": "^1.16.0", "next-themes": "^0.4.6", - "nitro": "npm:nitro-nightly@^3.0.1-20260518-130639-31265391", + "nitro": "npm:nitro-nightly@^3.0.1-20260519-181425-9cc59cf7", "radix-ui": "^1.4.3", "react": "^19.2.6", "react-dom": "^19.2.6", @@ -119,21 +121,21 @@ "@tailwindcss/typography": "^0.5.19", "@tanstack/devtools-vite": "^0.7.0", "@tanstack/eslint-config": "^0.4.0", - "@types/node": "^25.9.0", - "@types/react": "^19.2.14", + "@types/node": "^25.9.1", + "@types/react": "^19.2.15", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^6.0.2", "chokidar": "^5.0.0", "concurrently": "^9.2.1", "cross-env": "^10.1.0", - "electron": "^42.1.0", + "electron": "^42.2.0", "electron-builder": "^26.8.1", "eslint": "^10.4.0", "jsdom": "^29.1.1", "prettier": "^3.8.3", "typescript": "^6.0.3", "vite": "^8.0.13", - "vitest": "^4.1.6", + "vitest": "^4.1.7", "wait-on": "^9.0.10" }, "pnpm": { diff --git a/public/sample-graph.json b/public/sample-graph.json deleted file mode 100644 index 038916d..0000000 --- a/public/sample-graph.json +++ /dev/null @@ -1,799 +0,0 @@ -{ - "version": "1.2", - "language": "typescript", - "root": "/Users/nivid/Desktop/Graphy/tests/fixtures", - "nodes": [ - { - "id": "utils/validate.ts::assertEmail", - "name": "assertEmail", - "type": "function", - "file": "utils/validate.ts", - "line": 7, - "endLine": 11, - "signature": "(value)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 5, - "inDegree": 1, - "outDegree": 1 - }, - { - "id": "utils/validate.ts::assertTitle", - "name": "assertTitle", - "type": "function", - "file": "utils/validate.ts", - "line": 13, - "endLine": 20, - "signature": "(value)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 8, - "inDegree": 1, - "outDegree": 1 - }, - { - "id": "utils/validate.ts::isEmail", - "name": "isEmail", - "type": "arrow", - "file": "utils/validate.ts", - "line": 3, - "endLine": 3, - "signature": "(value)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 1, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "utils/validate.ts::isNonEmpty", - "name": "isNonEmpty", - "type": "arrow", - "file": "utils/validate.ts", - "line": 5, - "endLine": 5, - "signature": "(value)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 1, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "utils/format.ts::slugify", - "name": "slugify", - "type": "function", - "file": "utils/format.ts", - "line": 1, - "endLine": 6, - "signature": "(input)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 6, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "utils/format.ts::formatDate", - "name": "formatDate", - "type": "function", - "file": "utils/format.ts", - "line": 8, - "endLine": 10, - "signature": "(date)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 3, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "utils/format.ts::truncate", - "name": "truncate", - "type": "arrow", - "file": "utils/format.ts", - "line": 12, - "endLine": 15, - "signature": "(text, max)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 4, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "utils/format.ts::capitalize", - "name": "capitalize", - "type": "arrow", - "file": "utils/format.ts", - "line": 17, - "endLine": 18, - "signature": "(word)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 2, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "models/user.ts::User", - "name": "User", - "type": "class", - "file": "models/user.ts", - "line": 9, - "endLine": 27, - "signature": "", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 19, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "models/user.ts::User.canPublish", - "name": "canPublish", - "type": "method", - "file": "models/user.ts", - "line": 16, - "endLine": 18, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "models/user.ts::User.canModerate", - "name": "canModerate", - "type": "method", - "file": "models/user.ts", - "line": 20, - "endLine": 22, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "models/user.ts::User.toPublic", - "name": "toPublic", - "type": "method", - "file": "models/user.ts", - "line": 24, - "endLine": 26, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 2, - "outDegree": 0 - }, - { - "id": "models/user.ts::User.constructor", - "name": "constructor", - "type": "constructor", - "file": "models/user.ts", - "line": 10, - "endLine": 10, - "signature": "(record)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 1, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "models/user.ts::User.get:id", - "name": "id", - "type": "getter", - "file": "models/user.ts", - "line": 12, - "endLine": 14, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "models/post.ts::Post", - "name": "Post", - "type": "class", - "file": "models/post.ts", - "line": 11, - "endLine": 27, - "signature": "", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 17, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "models/post.ts::Post.isPublished", - "name": "isPublished", - "type": "method", - "file": "models/post.ts", - "line": 18, - "endLine": 20, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "models/post.ts::Post.preview", - "name": "preview", - "type": "method", - "file": "models/post.ts", - "line": 22, - "endLine": 26, - "signature": "(maxLength)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 5, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "models/post.ts::Post.constructor", - "name": "constructor", - "type": "constructor", - "file": "models/post.ts", - "line": 12, - "endLine": 12, - "signature": "(record)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 1, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "models/post.ts::Post.get:slug", - "name": "slug", - "type": "getter", - "file": "models/post.ts", - "line": 14, - "endLine": 16, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 0, - "outDegree": 1 - }, - { - "id": "db/database.ts::Database", - "name": "Database", - "type": "class", - "file": "db/database.ts", - "line": 4, - "endLine": 31, - "signature": "", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 28, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "db/database.ts::Database.saveUser", - "name": "saveUser", - "type": "method", - "file": "db/database.ts", - "line": 8, - "endLine": 10, - "signature": "(record)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "db/database.ts::Database.findUser", - "name": "findUser", - "type": "method", - "file": "db/database.ts", - "line": 12, - "endLine": 14, - "signature": "(id)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "db/database.ts::Database.savePost", - "name": "savePost", - "type": "method", - "file": "db/database.ts", - "line": 16, - "endLine": 18, - "signature": "(record)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 2, - "outDegree": 0 - }, - { - "id": "db/database.ts::Database.findPost", - "name": "findPost", - "type": "method", - "file": "db/database.ts", - "line": 20, - "endLine": 22, - "signature": "(id)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "db/database.ts::Database.listPostsByAuthor", - "name": "listPostsByAuthor", - "type": "method", - "file": "db/database.ts", - "line": 24, - "endLine": 30, - "signature": "(authorId)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 7, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "api/postController.ts::createPost", - "name": "createPost", - "type": "function", - "file": "api/postController.ts", - "line": 11, - "endLine": 18, - "signature": "(input)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 8, - "inDegree": 1, - "outDegree": 2 - }, - { - "id": "api/postController.ts::publishPost", - "name": "publishPost", - "type": "function", - "file": "api/postController.ts", - "line": 20, - "endLine": 23, - "signature": "(id)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 4, - "inDegree": 1, - "outDegree": 2 - }, - { - "id": "api/postController.ts::listAuthorPosts", - "name": "listAuthorPosts", - "type": "function", - "file": "api/postController.ts", - "line": 25, - "endLine": 27, - "signature": "(authorId)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 3, - "inDegree": 1, - "outDegree": 1 - }, - { - "id": "api/postController.ts::summarize", - "name": "summarize", - "type": "function", - "file": "api/postController.ts", - "line": 29, - "endLine": 38, - "signature": "(post)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 10, - "inDegree": 2, - "outDegree": 3 - }, - { - "id": "api/userController.ts::registerUser", - "name": "registerUser", - "type": "function", - "file": "api/userController.ts", - "line": 4, - "endLine": 15, - "signature": "(input)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 12, - "inDegree": 1, - "outDegree": 3 - }, - { - "id": "api/userController.ts::fetchUser", - "name": "fetchUser", - "type": "function", - "file": "api/userController.ts", - "line": 17, - "endLine": 22, - "signature": "(id)", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 6, - "inDegree": 0, - "outDegree": 2 - }, - { - "id": "index.ts::seedDemo", - "name": "seedDemo", - "type": "function", - "file": "index.ts", - "line": 4, - "endLine": 21, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 18, - "inDegree": 0, - "outDegree": 4 - }, - { - "id": "services/postService.ts::makePostId", - "name": "makePostId", - "type": "function", - "file": "services/postService.ts", - "line": 40, - "endLine": 42, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "services/postService.ts::PostService", - "name": "PostService", - "type": "class", - "file": "services/postService.ts", - "line": 7, - "endLine": 38, - "signature": "", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 32, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "services/postService.ts::PostService.create", - "name": "create", - "type": "method", - "file": "services/postService.ts", - "line": 8, - "endLine": 25, - "signature": "(input)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 18, - "inDegree": 1, - "outDegree": 5 - }, - { - "id": "services/postService.ts::PostService.publish", - "name": "publish", - "type": "method", - "file": "services/postService.ts", - "line": 27, - "endLine": 33, - "signature": "(id)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 7, - "inDegree": 1, - "outDegree": 2 - }, - { - "id": "services/postService.ts::PostService.byAuthor", - "name": "byAuthor", - "type": "method", - "file": "services/postService.ts", - "line": 35, - "endLine": 37, - "signature": "(authorId)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 1, - "outDegree": 1 - }, - { - "id": "services/userService.ts::makeId", - "name": "makeId", - "type": "function", - "file": "services/userService.ts", - "line": 27, - "endLine": 32, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 6, - "inDegree": 1, - "outDegree": 0 - }, - { - "id": "services/userService.ts::makeZizi", - "name": "makeZizi", - "type": "function", - "file": "services/userService.ts", - "line": 34, - "endLine": 36, - "signature": "()", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 3, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "services/userService.ts::UserService", - "name": "UserService", - "type": "class", - "file": "services/userService.ts", - "line": 6, - "endLine": 25, - "signature": "", - "isAsync": false, - "isExported": true, - "isStatic": false, - "bodyLines": 20, - "inDegree": 0, - "outDegree": 0 - }, - { - "id": "services/userService.ts::UserService.create", - "name": "create", - "type": "method", - "file": "services/userService.ts", - "line": 7, - "endLine": 18, - "signature": "(input)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 12, - "inDegree": 1, - "outDegree": 3 - }, - { - "id": "services/userService.ts::UserService.get", - "name": "get", - "type": "method", - "file": "services/userService.ts", - "line": 20, - "endLine": 24, - "signature": "(id)", - "isAsync": false, - "isExported": false, - "isStatic": false, - "bodyLines": 5, - "inDegree": 2, - "outDegree": 1 - } - ], - "edges": [ - { - "source": "utils/validate.ts::assertEmail", - "target": "utils/validate.ts::isEmail", - "type": "calls" - }, - { - "source": "utils/validate.ts::assertTitle", - "target": "utils/validate.ts::isNonEmpty", - "type": "calls" - }, - { - "source": "models/post.ts::Post.get:slug", - "target": "utils/format.ts::slugify", - "type": "calls" - }, - { - "source": "api/postController.ts::createPost", - "target": "services/postService.ts::PostService.create", - "type": "calls" - }, - { - "source": "api/postController.ts::createPost", - "target": "api/postController.ts::summarize", - "type": "calls" - }, - { - "source": "api/postController.ts::publishPost", - "target": "services/postService.ts::PostService.publish", - "type": "calls" - }, - { - "source": "api/postController.ts::publishPost", - "target": "api/postController.ts::summarize", - "type": "calls" - }, - { - "source": "api/postController.ts::listAuthorPosts", - "target": "services/postService.ts::PostService.byAuthor", - "type": "calls" - }, - { - "source": "api/postController.ts::summarize", - "target": "utils/format.ts::truncate", - "type": "calls" - }, - { - "source": "api/postController.ts::summarize", - "target": "models/post.ts::Post.preview", - "type": "calls" - }, - { - "source": "api/postController.ts::summarize", - "target": "utils/format.ts::formatDate", - "type": "calls" - }, - { - "source": "api/userController.ts::registerUser", - "target": "services/userService.ts::UserService.create", - "type": "calls" - }, - { - "source": "api/userController.ts::registerUser", - "target": "utils/format.ts::capitalize", - "type": "calls" - }, - { - "source": "api/userController.ts::registerUser", - "target": "models/user.ts::User.toPublic", - "type": "calls" - }, - { - "source": "api/userController.ts::fetchUser", - "target": "services/userService.ts::UserService.get", - "type": "calls" - }, - { - "source": "api/userController.ts::fetchUser", - "target": "models/user.ts::User.toPublic", - "type": "calls" - }, - { - "source": "index.ts::seedDemo", - "target": "api/userController.ts::registerUser", - "type": "calls" - }, - { - "source": "index.ts::seedDemo", - "target": "api/postController.ts::createPost", - "type": "calls" - }, - { - "source": "index.ts::seedDemo", - "target": "api/postController.ts::publishPost", - "type": "calls" - }, - { - "source": "index.ts::seedDemo", - "target": "api/postController.ts::listAuthorPosts", - "type": "calls" - }, - { - "source": "services/postService.ts::PostService.create", - "target": "utils/validate.ts::assertTitle", - "type": "calls" - }, - { - "source": "services/postService.ts::PostService.create", - "target": "services/userService.ts::UserService.get", - "type": "calls" - }, - { - "source": "services/postService.ts::PostService.create", - "target": "models/user.ts::User.canPublish", - "type": "calls" - }, - { - "source": "services/postService.ts::PostService.create", - "target": "services/postService.ts::makePostId", - "type": "calls" - }, - { - "source": "services/postService.ts::PostService.create", - "target": "db/database.ts::Database.savePost", - "type": "calls" - }, - { - "source": "services/postService.ts::PostService.publish", - "target": "db/database.ts::Database.findPost", - "type": "calls" - }, - { - "source": "services/postService.ts::PostService.publish", - "target": "db/database.ts::Database.savePost", - "type": "calls" - }, - { - "source": "services/postService.ts::PostService.byAuthor", - "target": "db/database.ts::Database.listPostsByAuthor", - "type": "calls" - }, - { - "source": "services/userService.ts::UserService.create", - "target": "utils/validate.ts::assertEmail", - "type": "calls" - }, - { - "source": "services/userService.ts::UserService.create", - "target": "services/userService.ts::makeId", - "type": "calls" - }, - { - "source": "services/userService.ts::UserService.create", - "target": "db/database.ts::Database.saveUser", - "type": "calls" - }, - { - "source": "services/userService.ts::UserService.get", - "target": "db/database.ts::Database.findUser", - "type": "calls" - } - ] -} \ No newline at end of file diff --git a/src/app/layout/sidebar.tsx b/src/app/layout/sidebar.tsx index 16c1022..b810fbf 100644 --- a/src/app/layout/sidebar.tsx +++ b/src/app/layout/sidebar.tsx @@ -1,13 +1,5 @@ import { Link } from '@tanstack/react-router' -import { - Bell, - Folder, - GitBranch, - Network, - Puzzle, - Search, - Settings, -} from 'lucide-react' +import { Folder, GitBranch, Network, Search, Settings } from 'lucide-react' import { toggleActivePanel, useActivePanel } from '@/shared/lib/active-panel' import type { ActivePanel } from '@/shared/lib/active-panel' @@ -56,12 +48,6 @@ const navItems: Array = [ shortcut: '⌘⇧H', view: 'graph', }, - { - id: 'extensions', - icon: Puzzle, - label: 'Extensions', - shortcut: '⌘⇧X', - }, ] export function Sidebar() { @@ -129,19 +115,6 @@ export function Sidebar() {
- - - - - Notifications - - - {canRemove ? ( - - ) : null}
) diff --git a/src/modules/settings/components/section-about.tsx b/src/modules/settings/components/section-about.tsx index 54342d0..22c5e3f 100644 --- a/src/modules/settings/components/section-about.tsx +++ b/src/modules/settings/components/section-about.tsx @@ -1,7 +1,3 @@ -import { RefreshCw } from 'lucide-react' - -import { Button } from '@/shared/ui/button' - import { SettingCard } from './setting-card' import { SettingRow } from './setting-row' @@ -10,20 +6,14 @@ export function SectionAbout() { - 0.1.0 · nightly + {__APP_VERSION__} - 9832201 + {__APP_COMMIT__} - - - ) } diff --git a/src/modules/themes/components/theme-mode-selector.tsx b/src/modules/themes/components/theme-mode-selector.tsx new file mode 100644 index 0000000..17099b4 --- /dev/null +++ b/src/modules/themes/components/theme-mode-selector.tsx @@ -0,0 +1,52 @@ +import { Monitor, Moon, Sun } from 'lucide-react' + +import { cn } from '@/shared/lib/utils' + +import { useThemeState } from '../hooks/use-theme' +import { themeStore } from '../state/theme-store' +import type { ThemeMode } from '../types' + +const MODES: ReadonlyArray<{ + id: ThemeMode + label: string + icon: typeof Sun +}> = [ + { id: 'system', label: 'System', icon: Monitor }, + { id: 'light', label: 'Light', icon: Sun }, + { id: 'dark', label: 'Dark', icon: Moon }, +] + +export function ThemeModeSelector() { + const state = useThemeState() + + return ( +
+ {MODES.map(({ id, label, icon: Icon }) => { + const active = state.mode === id + return ( + + ) + })} +
+ ) +} diff --git a/src/modules/themes/components/theme-preset-card.tsx b/src/modules/themes/components/theme-preset-card.tsx index 7bdd4dc..1829491 100644 --- a/src/modules/themes/components/theme-preset-card.tsx +++ b/src/modules/themes/components/theme-preset-card.tsx @@ -3,28 +3,34 @@ import { Check } from 'lucide-react' import { cn } from '@/shared/lib/utils' import { themeTokenById } from '../data/tokens' -import type { ThemePreset } from '../types' +import type { ResolvedMode, ThemePreset } from '../types' type ThemePresetCardProps = { preset: ThemePreset + mode: ResolvedMode selected: boolean onSelect: () => void } -function tokenFromPreset(preset: ThemePreset, id: string): string { - return preset.values[id] ?? themeTokenById.get(id)?.defaultValue ?? '#000' +function tokenFromPreset( + preset: ThemePreset, + id: string, + mode: ResolvedMode, +): string { + return preset[mode][id] ?? themeTokenById.get(id)?.[mode] ?? '#000' } export function ThemePresetCard({ preset, + mode, selected, onSelect, }: ThemePresetCardProps) { - const bg = tokenFromPreset(preset, 'background') - const card = tokenFromPreset(preset, 'card') - const foreground = tokenFromPreset(preset, 'foreground') - const muted = tokenFromPreset(preset, 'muted-foreground') - const primary = preset.accent + const bg = tokenFromPreset(preset, 'background', mode) + const card = tokenFromPreset(preset, 'card', mode) + const foreground = tokenFromPreset(preset, 'foreground', mode) + const muted = tokenFromPreset(preset, 'muted-foreground', mode) + const primary = preset.accent[mode] return (