@tyroneross/navgator 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1 -1
- package/package.json +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -0
- package/web/.next/standalone/web/.next/app-path-routes-manifest.json +13 -0
- package/web/.next/standalone/web/.next/build-manifest.json +20 -0
- package/web/.next/standalone/web/.next/package.json +1 -0
- package/web/.next/standalone/web/.next/prerender-manifest.json +88 -0
- package/web/.next/standalone/web/.next/required-server-files.json +317 -0
- package/web/.next/standalone/web/.next/routes-manifest.json +110 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page/build-manifest.json +17 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page.js +10 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -0
- package/web/.next/standalone/web/.next/server/app/_global-error.meta +15 -0
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +12 -0
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +12 -0
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +7 -0
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page/build-manifest.json +17 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page.js +13 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.meta +16 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +17 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +17 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +8 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +8 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +3 -0
- package/web/.next/standalone/web/.next/server/app/api/components/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/api/components/route/build-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/api/components/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/api/components/route.js +6 -0
- package/web/.next/standalone/web/.next/server/app/api/components/route.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/api/components/route.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/api/components/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/api/connections/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/api/connections/route/build-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/api/connections/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/api/connections/route.js +6 -0
- package/web/.next/standalone/web/.next/server/app/api/connections/route.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/api/connections/route.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/api/connections/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/api/graph/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/api/graph/route/build-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/api/graph/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/api/graph/route.js +6 -0
- package/web/.next/standalone/web/.next/server/app/api/graph/route.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/api/graph/route.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/api/graph/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/api/projects/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/api/projects/route/build-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/api/projects/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/api/projects/route.js +6 -0
- package/web/.next/standalone/web/.next/server/app/api/projects/route.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/api/projects/route.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/api/projects/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/api/prompts/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/api/prompts/route/build-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/api/prompts/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/api/prompts/route.js +7 -0
- package/web/.next/standalone/web/.next/server/app/api/prompts/route.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/api/prompts/route.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/api/prompts/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/api/scan/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/api/scan/route/build-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/api/scan/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/api/scan/route.js +6 -0
- package/web/.next/standalone/web/.next/server/app/api/scan/route.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/api/scan/route.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/api/scan/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/api/settings/route/build-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/api/settings/route.js +6 -0
- package/web/.next/standalone/web/.next/server/app/api/settings/route.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/api/settings/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/api/status/route/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/api/status/route/build-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/api/status/route/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/api/status/route.js +6 -0
- package/web/.next/standalone/web/.next/server/app/api/status/route.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/api/status/route.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/api/status/route_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app/index.html +1 -0
- package/web/.next/standalone/web/.next/server/app/index.meta +14 -0
- package/web/.next/standalone/web/.next/server/app/index.rsc +23 -0
- package/web/.next/standalone/web/.next/server/app/index.segments/__PAGE__.segment.rsc +9 -0
- package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +23 -0
- package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +8 -0
- package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +8 -0
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +5 -0
- package/web/.next/standalone/web/.next/server/app/page/app-paths-manifest.json +3 -0
- package/web/.next/standalone/web/.next/server/app/page/build-manifest.json +17 -0
- package/web/.next/standalone/web/.next/server/app/page/next-font-manifest.json +11 -0
- package/web/.next/standalone/web/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/web/.next/standalone/web/.next/server/app/page/server-reference-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/app/page.js +15 -0
- package/web/.next/standalone/web/.next/server/app/page.js.map +5 -0
- package/web/.next/standalone/web/.next/server/app/page.js.nft.json +1 -0
- package/web/.next/standalone/web/.next/server/app/page_client-reference-manifest.js +2 -0
- package/web/.next/standalone/web/.next/server/app-paths-manifest.json +13 -0
- package/web/.next/standalone/web/.next/server/chunks/2374f_next_dist_esm_build_templates_app-route_0bb4e66a.js +19 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__006b837d._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__1ab91221._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__2e09fec9._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__38d0390f._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__539ef30d._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__594bcf20._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__b888fadf._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__f3450c22._.js +21 -0
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__fa2ec862._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/[turbopack]_runtime.js +770 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_e6039567._.js +6 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_09351209._.js +6 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_222be7ae._.js +6 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_2346e1b3._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_cec86455._.js +4 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_client_components_9c5d1a14._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_client_components_builtin_forbidden_8eae0c85.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_client_components_builtin_global-error_81159d60.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_client_components_builtin_unauthorized_7d34a31c.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_e03afa0e._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_esm_build_templates_app-page_2c8d71b9.js +4 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/2374f_next_dist_server_route-modules_app-page_vendored_ssr_react-dom_8910f04c.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__1a0663e6._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__4306eafc._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__44903626._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__60278e3f._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__61942f24._.js +4 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__8c45c3c9._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__9a2f110d._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__ed07bd88._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__f2db61af._.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/[turbopack]_runtime.js +770 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_0103e631._.js +4 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web_171de0df._.js +14 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app__global-error_page_actions_2a1e94d4.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app__not-found_page_actions_9eaa9845.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/ssr/web__next-internal_server_app_page_actions_ec26bf28.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_components_route_actions_c88bf2a6.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_connections_route_actions_b1d5e95a.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_graph_route_actions_e2dd052c.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_projects_route_actions_3f671cbb.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_prompts_route_actions_85b56166.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_scan_route_actions_861cde8d.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_settings_route_actions_e19026ae.js +3 -0
- package/web/.next/standalone/web/.next/server/chunks/web__next-internal_server_app_api_status_route_actions_8b8c6c89.js +3 -0
- package/web/.next/standalone/web/.next/server/functions-config-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/middleware-build-manifest.js +21 -0
- package/web/.next/standalone/web/.next/server/middleware-manifest.json +6 -0
- package/web/.next/standalone/web/.next/server/next-font-manifest.js +1 -0
- package/web/.next/standalone/web/.next/server/next-font-manifest.json +15 -0
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -0
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -0
- package/web/.next/standalone/web/.next/server/pages-manifest.json +4 -0
- package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -0
- package/web/.next/standalone/web/.next/server/server-reference-manifest.json +5 -0
- package/web/.next/standalone/web/.next/static/WH0NvTGUEDs9QVUjcPJKx/_buildManifest.js +11 -0
- package/web/.next/standalone/web/.next/static/WH0NvTGUEDs9QVUjcPJKx/_clientMiddlewareManifest.json +1 -0
- package/web/.next/standalone/web/.next/static/WH0NvTGUEDs9QVUjcPJKx/_ssgManifest.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/062ae79751df2759.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/159889e17b2cf1f8.js +2 -0
- package/web/.next/standalone/web/.next/static/chunks/458d6f37339fc069.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/6d3d39425a878d7f.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/8a80e7184ad3a13f.css +2 -0
- package/web/.next/standalone/web/.next/static/chunks/a6dad97d9634a72d.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/c056475f5f4424b6.css +1 -0
- package/web/.next/standalone/web/.next/static/chunks/c57fee8cce8d7cb9.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/cb3513192b63e480.js +12 -0
- package/web/.next/standalone/web/.next/static/chunks/dd22b5f2beb2cc31.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/e0affeef0ddb9a97.js +4 -0
- package/web/.next/standalone/web/.next/static/chunks/f74a6859e1c4d5e3.js +1 -0
- package/web/.next/standalone/web/.next/static/chunks/turbopack-c0c89f9e6f0a38c4.js +3 -0
- package/web/.next/standalone/web/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
- package/web/.next/standalone/web/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
- package/web/.next/standalone/web/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
- package/web/.next/standalone/web/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
- package/web/.next/standalone/web/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
- package/web/.next/standalone/web/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
- package/web/.next/standalone/web/app/api/components/route.ts +252 -0
- package/web/.next/standalone/web/app/api/connections/route.ts +319 -0
- package/web/.next/standalone/web/app/api/graph/route.ts +235 -0
- package/web/.next/standalone/web/app/api/projects/route.ts +221 -0
- package/web/.next/standalone/web/app/api/prompts/route.ts +328 -0
- package/web/.next/standalone/web/app/api/scan/route.ts +108 -0
- package/web/.next/standalone/web/app/api/settings/route.ts +198 -0
- package/web/.next/standalone/web/app/api/status/route.ts +169 -0
- package/web/.next/standalone/web/app/globals.css +99 -0
- package/web/.next/standalone/web/app/layout.tsx +49 -0
- package/web/.next/standalone/web/app/page.tsx +94 -0
- package/web/.next/standalone/web/components/components-panel.tsx +240 -0
- package/web/.next/standalone/web/components/connections-panel.tsx +220 -0
- package/web/.next/standalone/web/components/diagram-view.tsx +735 -0
- package/web/.next/standalone/web/components/header.tsx +225 -0
- package/web/.next/standalone/web/components/impact-analysis.tsx +358 -0
- package/web/.next/standalone/web/components/llm-tracking-panel.tsx +1483 -0
- package/web/.next/standalone/web/components/settings-panel.tsx +671 -0
- package/web/.next/standalone/web/components/sidebar.tsx +74 -0
- package/web/.next/standalone/web/components/status-overview.tsx +326 -0
- package/web/.next/standalone/web/components/theme-provider.tsx +11 -0
- package/web/.next/standalone/web/components/ui/accordion.tsx +66 -0
- package/web/.next/standalone/web/components/ui/alert-dialog.tsx +157 -0
- package/web/.next/standalone/web/components/ui/alert.tsx +66 -0
- package/web/.next/standalone/web/components/ui/aspect-ratio.tsx +11 -0
- package/web/.next/standalone/web/components/ui/avatar.tsx +53 -0
- package/web/.next/standalone/web/components/ui/badge.tsx +46 -0
- package/web/.next/standalone/web/components/ui/breadcrumb.tsx +109 -0
- package/web/.next/standalone/web/components/ui/button-group.tsx +83 -0
- package/web/.next/standalone/web/components/ui/button.tsx +60 -0
- package/web/.next/standalone/web/components/ui/calendar.tsx +213 -0
- package/web/.next/standalone/web/components/ui/card.tsx +92 -0
- package/web/.next/standalone/web/components/ui/carousel.tsx +241 -0
- package/web/.next/standalone/web/components/ui/chart.tsx +353 -0
- package/web/.next/standalone/web/components/ui/checkbox.tsx +32 -0
- package/web/.next/standalone/web/components/ui/collapsible.tsx +33 -0
- package/web/.next/standalone/web/components/ui/command.tsx +184 -0
- package/web/.next/standalone/web/components/ui/context-menu.tsx +252 -0
- package/web/.next/standalone/web/components/ui/dialog.tsx +143 -0
- package/web/.next/standalone/web/components/ui/drawer.tsx +135 -0
- package/web/.next/standalone/web/components/ui/dropdown-menu.tsx +257 -0
- package/web/.next/standalone/web/components/ui/empty.tsx +104 -0
- package/web/.next/standalone/web/components/ui/field.tsx +244 -0
- package/web/.next/standalone/web/components/ui/form.tsx +167 -0
- package/web/.next/standalone/web/components/ui/hover-card.tsx +44 -0
- package/web/.next/standalone/web/components/ui/input-group.tsx +169 -0
- package/web/.next/standalone/web/components/ui/input-otp.tsx +77 -0
- package/web/.next/standalone/web/components/ui/input.tsx +21 -0
- package/web/.next/standalone/web/components/ui/item.tsx +193 -0
- package/web/.next/standalone/web/components/ui/kbd.tsx +28 -0
- package/web/.next/standalone/web/components/ui/label.tsx +24 -0
- package/web/.next/standalone/web/components/ui/menubar.tsx +276 -0
- package/web/.next/standalone/web/components/ui/navigation-menu.tsx +166 -0
- package/web/.next/standalone/web/components/ui/pagination.tsx +127 -0
- package/web/.next/standalone/web/components/ui/popover.tsx +48 -0
- package/web/.next/standalone/web/components/ui/progress.tsx +31 -0
- package/web/.next/standalone/web/components/ui/radio-group.tsx +45 -0
- package/web/.next/standalone/web/components/ui/resizable.tsx +56 -0
- package/web/.next/standalone/web/components/ui/scroll-area.tsx +58 -0
- package/web/.next/standalone/web/components/ui/select.tsx +185 -0
- package/web/.next/standalone/web/components/ui/separator.tsx +28 -0
- package/web/.next/standalone/web/components/ui/sheet.tsx +139 -0
- package/web/.next/standalone/web/components/ui/sidebar.tsx +726 -0
- package/web/.next/standalone/web/components/ui/skeleton.tsx +13 -0
- package/web/.next/standalone/web/components/ui/slider.tsx +63 -0
- package/web/.next/standalone/web/components/ui/sonner.tsx +25 -0
- package/web/.next/standalone/web/components/ui/spinner.tsx +16 -0
- package/web/.next/standalone/web/components/ui/switch.tsx +31 -0
- package/web/.next/standalone/web/components/ui/table.tsx +116 -0
- package/web/.next/standalone/web/components/ui/tabs.tsx +66 -0
- package/web/.next/standalone/web/components/ui/textarea.tsx +18 -0
- package/web/.next/standalone/web/components/ui/toast.tsx +129 -0
- package/web/.next/standalone/web/components/ui/toaster.tsx +35 -0
- package/web/.next/standalone/web/components/ui/toggle-group.tsx +73 -0
- package/web/.next/standalone/web/components/ui/toggle.tsx +47 -0
- package/web/.next/standalone/web/components/ui/tooltip.tsx +61 -0
- package/web/.next/standalone/web/components/ui/use-mobile.tsx +19 -0
- package/web/.next/standalone/web/components/ui/use-toast.ts +191 -0
- package/web/.next/standalone/web/components.json +21 -0
- package/web/.next/standalone/web/hooks/use-mobile.ts +19 -0
- package/web/.next/standalone/web/hooks/use-toast.ts +191 -0
- package/web/.next/standalone/web/lib/hooks/index.ts +8 -0
- package/web/.next/standalone/web/lib/hooks/use-components.ts +83 -0
- package/web/.next/standalone/web/lib/hooks/use-connections.ts +83 -0
- package/web/.next/standalone/web/lib/hooks/use-projects.ts +116 -0
- package/web/.next/standalone/web/lib/hooks/use-prompts.ts +122 -0
- package/web/.next/standalone/web/lib/hooks/use-settings.ts +135 -0
- package/web/.next/standalone/web/lib/hooks/use-status.ts +80 -0
- package/web/.next/standalone/web/lib/project-context.tsx +46 -0
- package/web/.next/standalone/web/lib/transform.ts +625 -0
- package/web/.next/standalone/web/lib/types.ts +198 -0
- package/web/.next/standalone/web/lib/utils.ts +6 -0
- package/web/.next/standalone/web/next.config.mjs +12 -0
- package/web/.next/standalone/web/package-lock.json +3987 -0
- package/web/.next/standalone/web/package.json +73 -0
- package/web/.next/standalone/web/pnpm-lock.yaml +5 -0
- package/web/.next/standalone/web/postcss.config.mjs +8 -0
- package/web/.next/standalone/web/public/apple-icon.png +0 -0
- package/web/.next/standalone/web/public/icon-dark-32x32.png +0 -0
- package/web/.next/standalone/web/public/icon-light-32x32.png +0 -0
- package/web/.next/standalone/web/public/icon.svg +26 -0
- package/web/.next/standalone/web/public/navgator-logo.png +0 -0
- package/web/.next/standalone/web/public/placeholder-logo.png +0 -0
- package/web/.next/standalone/web/public/placeholder-logo.svg +1 -0
- package/web/.next/standalone/web/public/placeholder-user.jpg +0 -0
- package/web/.next/standalone/web/public/placeholder.jpg +0 -0
- package/web/.next/standalone/web/public/placeholder.svg +1 -0
- package/web/.next/standalone/web/public/public/apple-icon.png +0 -0
- package/web/.next/standalone/web/public/public/icon-dark-32x32.png +0 -0
- package/web/.next/standalone/web/public/public/icon-light-32x32.png +0 -0
- package/web/.next/standalone/web/public/public/icon.svg +26 -0
- package/web/.next/standalone/web/public/public/navgator-logo.png +0 -0
- package/web/.next/standalone/web/public/public/placeholder-logo.png +0 -0
- package/web/.next/standalone/web/public/public/placeholder-logo.svg +1 -0
- package/web/.next/standalone/web/public/public/placeholder-user.jpg +0 -0
- package/web/.next/standalone/web/public/public/placeholder.jpg +0 -0
- package/web/.next/standalone/web/public/public/placeholder.svg +1 -0
- package/web/.next/standalone/web/server.js +38 -0
- package/web/.next/standalone/web/styles/globals.css +125 -0
- package/web/.next/standalone/web/tsconfig.json +41 -0
- package/web/.next/static/WH0NvTGUEDs9QVUjcPJKx/_buildManifest.js +11 -0
- package/web/.next/static/WH0NvTGUEDs9QVUjcPJKx/_clientMiddlewareManifest.json +1 -0
- package/web/.next/static/WH0NvTGUEDs9QVUjcPJKx/_ssgManifest.js +1 -0
- package/web/.next/static/chunks/062ae79751df2759.js +1 -0
- package/web/.next/static/chunks/159889e17b2cf1f8.js +2 -0
- package/web/.next/static/chunks/458d6f37339fc069.js +1 -0
- package/web/.next/static/chunks/6d3d39425a878d7f.js +1 -0
- package/web/.next/static/chunks/8a80e7184ad3a13f.css +2 -0
- package/web/.next/static/chunks/a6dad97d9634a72d.js +1 -0
- package/web/.next/static/chunks/c056475f5f4424b6.css +1 -0
- package/web/.next/static/chunks/c57fee8cce8d7cb9.js +1 -0
- package/web/.next/static/chunks/cb3513192b63e480.js +12 -0
- package/web/.next/static/chunks/dd22b5f2beb2cc31.js +1 -0
- package/web/.next/static/chunks/e0affeef0ddb9a97.js +4 -0
- package/web/.next/static/chunks/f74a6859e1c4d5e3.js +1 -0
- package/web/.next/static/chunks/turbopack-c0c89f9e6f0a38c4.js +3 -0
- package/web/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
- package/web/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
- package/web/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
- package/web/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
- package/web/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
- package/web/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
|
@@ -0,0 +1,671 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from "react"
|
|
4
|
+
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"
|
|
5
|
+
import { Button } from "@/components/ui/button"
|
|
6
|
+
import { Input } from "@/components/ui/input"
|
|
7
|
+
import { Label } from "@/components/ui/label"
|
|
8
|
+
import { Switch } from "@/components/ui/switch"
|
|
9
|
+
import { Badge } from "@/components/ui/badge"
|
|
10
|
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
|
|
11
|
+
import {
|
|
12
|
+
Select,
|
|
13
|
+
SelectContent,
|
|
14
|
+
SelectItem,
|
|
15
|
+
SelectTrigger,
|
|
16
|
+
SelectValue,
|
|
17
|
+
} from "@/components/ui/select"
|
|
18
|
+
import {
|
|
19
|
+
FolderOpen,
|
|
20
|
+
GitBranch,
|
|
21
|
+
Bell,
|
|
22
|
+
Shield,
|
|
23
|
+
Palette,
|
|
24
|
+
Terminal,
|
|
25
|
+
Save,
|
|
26
|
+
RotateCcw,
|
|
27
|
+
Check,
|
|
28
|
+
AlertCircle,
|
|
29
|
+
Info,
|
|
30
|
+
Loader2,
|
|
31
|
+
} from "lucide-react"
|
|
32
|
+
import {
|
|
33
|
+
useSettings,
|
|
34
|
+
type ScanConfig,
|
|
35
|
+
type DetectionConfig,
|
|
36
|
+
type NotificationConfig,
|
|
37
|
+
type DisplayConfig,
|
|
38
|
+
} from "@/lib/hooks"
|
|
39
|
+
|
|
40
|
+
const DEFAULT_SCAN: ScanConfig = {
|
|
41
|
+
rootPath: "./src",
|
|
42
|
+
excludePaths: ["node_modules", ".git", "dist", "build", ".next"],
|
|
43
|
+
includePatterns: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
|
|
44
|
+
scanDepth: 10,
|
|
45
|
+
watchMode: false,
|
|
46
|
+
autoScanOnChange: true,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const DEFAULT_DETECTION: DetectionConfig = {
|
|
50
|
+
npm: true,
|
|
51
|
+
database: true,
|
|
52
|
+
service: true,
|
|
53
|
+
queue: true,
|
|
54
|
+
cache: true,
|
|
55
|
+
storage: true,
|
|
56
|
+
auth: true,
|
|
57
|
+
llm: true,
|
|
58
|
+
staticAnalysis: true,
|
|
59
|
+
environmentVariables: true,
|
|
60
|
+
configFiles: true,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const DEFAULT_NOTIFICATIONS: NotificationConfig = {
|
|
64
|
+
enabled: true,
|
|
65
|
+
onNewConnection: false,
|
|
66
|
+
onBreakingChange: true,
|
|
67
|
+
onSecurityIssue: true,
|
|
68
|
+
slackWebhook: "",
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const DEFAULT_DISPLAY: DisplayConfig = {
|
|
72
|
+
theme: "dark",
|
|
73
|
+
compactMode: false,
|
|
74
|
+
showLineNumbers: true,
|
|
75
|
+
diagramDirection: "TB",
|
|
76
|
+
maxVisibleConnections: 50,
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function SettingsPanel() {
|
|
80
|
+
const { settings, isLoading, isSaving, save } = useSettings({ autoFetch: true })
|
|
81
|
+
const [saved, setSaved] = useState(false)
|
|
82
|
+
|
|
83
|
+
const [scanConfig, setScanConfig] = useState<ScanConfig>(DEFAULT_SCAN)
|
|
84
|
+
const [detectionConfig, setDetectionConfig] = useState<DetectionConfig>(DEFAULT_DETECTION)
|
|
85
|
+
const [notificationConfig, setNotificationConfig] = useState<NotificationConfig>(DEFAULT_NOTIFICATIONS)
|
|
86
|
+
const [displayConfig, setDisplayConfig] = useState<DisplayConfig>(DEFAULT_DISPLAY)
|
|
87
|
+
|
|
88
|
+
// Sync local state when settings load from API
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
if (settings) {
|
|
91
|
+
setScanConfig(settings.scan)
|
|
92
|
+
setDetectionConfig(settings.detection)
|
|
93
|
+
setNotificationConfig(settings.notifications)
|
|
94
|
+
setDisplayConfig(settings.display)
|
|
95
|
+
}
|
|
96
|
+
}, [settings])
|
|
97
|
+
|
|
98
|
+
const handleSave = async () => {
|
|
99
|
+
const success = await save({
|
|
100
|
+
scan: scanConfig,
|
|
101
|
+
detection: detectionConfig,
|
|
102
|
+
notifications: notificationConfig,
|
|
103
|
+
display: displayConfig,
|
|
104
|
+
})
|
|
105
|
+
if (success) {
|
|
106
|
+
setSaved(true)
|
|
107
|
+
setTimeout(() => setSaved(false), 2000)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const handleReset = async () => {
|
|
112
|
+
setScanConfig(DEFAULT_SCAN)
|
|
113
|
+
setDetectionConfig(DEFAULT_DETECTION)
|
|
114
|
+
setNotificationConfig(DEFAULT_NOTIFICATIONS)
|
|
115
|
+
setDisplayConfig(DEFAULT_DISPLAY)
|
|
116
|
+
await save({
|
|
117
|
+
scan: DEFAULT_SCAN,
|
|
118
|
+
detection: DEFAULT_DETECTION,
|
|
119
|
+
notifications: DEFAULT_NOTIFICATIONS,
|
|
120
|
+
display: DEFAULT_DISPLAY,
|
|
121
|
+
})
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (isLoading && !settings) {
|
|
125
|
+
return (
|
|
126
|
+
<div className="flex h-64 items-center justify-center">
|
|
127
|
+
<Loader2 className="h-8 w-8 animate-spin text-muted-foreground" />
|
|
128
|
+
</div>
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return (
|
|
133
|
+
<div className="flex flex-col gap-6">
|
|
134
|
+
<div className="flex items-start justify-between">
|
|
135
|
+
<div>
|
|
136
|
+
<h1 className="text-2xl font-semibold text-foreground">Settings</h1>
|
|
137
|
+
<p className="text-sm text-muted-foreground">
|
|
138
|
+
Configure NavGator scanning behavior and display preferences
|
|
139
|
+
</p>
|
|
140
|
+
</div>
|
|
141
|
+
<div className="flex items-center gap-2">
|
|
142
|
+
<Button variant="outline" size="sm" className="gap-2 bg-transparent" onClick={handleReset}>
|
|
143
|
+
<RotateCcw className="h-4 w-4" />
|
|
144
|
+
Reset
|
|
145
|
+
</Button>
|
|
146
|
+
<Button size="sm" className="gap-2" onClick={handleSave} disabled={isSaving}>
|
|
147
|
+
{saved ? <Check className="h-4 w-4" /> : isSaving ? <Loader2 className="h-4 w-4 animate-spin" /> : <Save className="h-4 w-4" />}
|
|
148
|
+
{saved ? "Saved" : isSaving ? "Saving..." : "Save Changes"}
|
|
149
|
+
</Button>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<Tabs defaultValue="scanning" className="w-full">
|
|
154
|
+
<TabsList className="bg-secondary">
|
|
155
|
+
<TabsTrigger value="scanning" className="gap-2">
|
|
156
|
+
<FolderOpen className="h-4 w-4" />
|
|
157
|
+
Scanning
|
|
158
|
+
</TabsTrigger>
|
|
159
|
+
<TabsTrigger value="detection" className="gap-2">
|
|
160
|
+
<GitBranch className="h-4 w-4" />
|
|
161
|
+
Detection
|
|
162
|
+
</TabsTrigger>
|
|
163
|
+
<TabsTrigger value="notifications" className="gap-2">
|
|
164
|
+
<Bell className="h-4 w-4" />
|
|
165
|
+
Notifications
|
|
166
|
+
</TabsTrigger>
|
|
167
|
+
<TabsTrigger value="display" className="gap-2">
|
|
168
|
+
<Palette className="h-4 w-4" />
|
|
169
|
+
Display
|
|
170
|
+
</TabsTrigger>
|
|
171
|
+
</TabsList>
|
|
172
|
+
|
|
173
|
+
{/* Scanning Settings */}
|
|
174
|
+
<TabsContent value="scanning" className="mt-4">
|
|
175
|
+
<div className="grid gap-4">
|
|
176
|
+
<Card className="border-border bg-card">
|
|
177
|
+
<CardHeader>
|
|
178
|
+
<CardTitle className="text-base">Scan Configuration</CardTitle>
|
|
179
|
+
<CardDescription>
|
|
180
|
+
Configure which files and directories NavGator should analyze
|
|
181
|
+
</CardDescription>
|
|
182
|
+
</CardHeader>
|
|
183
|
+
<CardContent className="flex flex-col gap-6">
|
|
184
|
+
<div className="grid gap-2">
|
|
185
|
+
<Label htmlFor="rootPath">Root Path</Label>
|
|
186
|
+
<Input
|
|
187
|
+
id="rootPath"
|
|
188
|
+
value={scanConfig.rootPath}
|
|
189
|
+
onChange={(e) =>
|
|
190
|
+
setScanConfig((c) => ({ ...c, rootPath: e.target.value }))
|
|
191
|
+
}
|
|
192
|
+
className="bg-secondary font-mono"
|
|
193
|
+
placeholder="./src"
|
|
194
|
+
/>
|
|
195
|
+
<p className="text-xs text-muted-foreground">
|
|
196
|
+
Base directory for scanning (relative to project root)
|
|
197
|
+
</p>
|
|
198
|
+
</div>
|
|
199
|
+
|
|
200
|
+
<div className="grid gap-2">
|
|
201
|
+
<Label>Exclude Paths</Label>
|
|
202
|
+
<div className="flex flex-wrap gap-2">
|
|
203
|
+
{scanConfig.excludePaths.map((path, idx) => (
|
|
204
|
+
<Badge
|
|
205
|
+
key={idx}
|
|
206
|
+
variant="secondary"
|
|
207
|
+
className="gap-1 font-mono text-xs"
|
|
208
|
+
>
|
|
209
|
+
{path}
|
|
210
|
+
<button
|
|
211
|
+
type="button"
|
|
212
|
+
className="ml-1 hover:text-destructive"
|
|
213
|
+
onClick={() =>
|
|
214
|
+
setScanConfig((c) => ({
|
|
215
|
+
...c,
|
|
216
|
+
excludePaths: c.excludePaths.filter((_, i) => i !== idx),
|
|
217
|
+
}))
|
|
218
|
+
}
|
|
219
|
+
>
|
|
220
|
+
x
|
|
221
|
+
</button>
|
|
222
|
+
</Badge>
|
|
223
|
+
))}
|
|
224
|
+
<Input
|
|
225
|
+
placeholder="Add path..."
|
|
226
|
+
className="h-6 w-32 bg-secondary text-xs"
|
|
227
|
+
onKeyDown={(e) => {
|
|
228
|
+
if (e.key === "Enter") {
|
|
229
|
+
const value = e.currentTarget.value.trim()
|
|
230
|
+
if (value) {
|
|
231
|
+
setScanConfig((c) => ({
|
|
232
|
+
...c,
|
|
233
|
+
excludePaths: [...c.excludePaths, value],
|
|
234
|
+
}))
|
|
235
|
+
e.currentTarget.value = ""
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}}
|
|
239
|
+
/>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
|
|
243
|
+
<div className="grid gap-2">
|
|
244
|
+
<Label>Include Patterns</Label>
|
|
245
|
+
<div className="flex flex-wrap gap-2">
|
|
246
|
+
{scanConfig.includePatterns.map((pattern, idx) => (
|
|
247
|
+
<Badge
|
|
248
|
+
key={idx}
|
|
249
|
+
variant="outline"
|
|
250
|
+
className="gap-1 font-mono text-xs"
|
|
251
|
+
>
|
|
252
|
+
{pattern}
|
|
253
|
+
<button
|
|
254
|
+
type="button"
|
|
255
|
+
className="ml-1 hover:text-destructive"
|
|
256
|
+
onClick={() =>
|
|
257
|
+
setScanConfig((c) => ({
|
|
258
|
+
...c,
|
|
259
|
+
includePatterns: c.includePatterns.filter(
|
|
260
|
+
(_, i) => i !== idx
|
|
261
|
+
),
|
|
262
|
+
}))
|
|
263
|
+
}
|
|
264
|
+
>
|
|
265
|
+
x
|
|
266
|
+
</button>
|
|
267
|
+
</Badge>
|
|
268
|
+
))}
|
|
269
|
+
</div>
|
|
270
|
+
<p className="text-xs text-muted-foreground">
|
|
271
|
+
Glob patterns for files to include in analysis
|
|
272
|
+
</p>
|
|
273
|
+
</div>
|
|
274
|
+
|
|
275
|
+
<div className="grid gap-2">
|
|
276
|
+
<Label htmlFor="scanDepth">Scan Depth</Label>
|
|
277
|
+
<Select
|
|
278
|
+
value={scanConfig.scanDepth.toString()}
|
|
279
|
+
onValueChange={(v) =>
|
|
280
|
+
setScanConfig((c) => ({ ...c, scanDepth: Number.parseInt(v) }))
|
|
281
|
+
}
|
|
282
|
+
>
|
|
283
|
+
<SelectTrigger className="w-32 bg-secondary">
|
|
284
|
+
<SelectValue />
|
|
285
|
+
</SelectTrigger>
|
|
286
|
+
<SelectContent>
|
|
287
|
+
<SelectItem value="5">5 levels</SelectItem>
|
|
288
|
+
<SelectItem value="10">10 levels</SelectItem>
|
|
289
|
+
<SelectItem value="15">15 levels</SelectItem>
|
|
290
|
+
<SelectItem value="20">20 levels</SelectItem>
|
|
291
|
+
<SelectItem value="-1">Unlimited</SelectItem>
|
|
292
|
+
</SelectContent>
|
|
293
|
+
</Select>
|
|
294
|
+
<p className="text-xs text-muted-foreground">
|
|
295
|
+
Maximum directory depth to traverse
|
|
296
|
+
</p>
|
|
297
|
+
</div>
|
|
298
|
+
</CardContent>
|
|
299
|
+
</Card>
|
|
300
|
+
|
|
301
|
+
<Card className="border-border bg-card">
|
|
302
|
+
<CardHeader>
|
|
303
|
+
<CardTitle className="text-base">Watch Mode</CardTitle>
|
|
304
|
+
<CardDescription>
|
|
305
|
+
Automatically detect changes in your codebase
|
|
306
|
+
</CardDescription>
|
|
307
|
+
</CardHeader>
|
|
308
|
+
<CardContent className="flex flex-col gap-4">
|
|
309
|
+
<div className="flex items-center justify-between">
|
|
310
|
+
<div>
|
|
311
|
+
<Label>Enable Watch Mode</Label>
|
|
312
|
+
<p className="text-xs text-muted-foreground">
|
|
313
|
+
Monitor file changes in real-time
|
|
314
|
+
</p>
|
|
315
|
+
</div>
|
|
316
|
+
<Switch
|
|
317
|
+
checked={scanConfig.watchMode}
|
|
318
|
+
onCheckedChange={(v) =>
|
|
319
|
+
setScanConfig((c) => ({ ...c, watchMode: v }))
|
|
320
|
+
}
|
|
321
|
+
/>
|
|
322
|
+
</div>
|
|
323
|
+
|
|
324
|
+
<div className="flex items-center justify-between">
|
|
325
|
+
<div>
|
|
326
|
+
<Label>Auto-scan on Change</Label>
|
|
327
|
+
<p className="text-xs text-muted-foreground">
|
|
328
|
+
Automatically re-analyze when files change
|
|
329
|
+
</p>
|
|
330
|
+
</div>
|
|
331
|
+
<Switch
|
|
332
|
+
checked={scanConfig.autoScanOnChange}
|
|
333
|
+
onCheckedChange={(v) =>
|
|
334
|
+
setScanConfig((c) => ({ ...c, autoScanOnChange: v }))
|
|
335
|
+
}
|
|
336
|
+
/>
|
|
337
|
+
</div>
|
|
338
|
+
</CardContent>
|
|
339
|
+
</Card>
|
|
340
|
+
</div>
|
|
341
|
+
</TabsContent>
|
|
342
|
+
|
|
343
|
+
{/* Detection Settings */}
|
|
344
|
+
<TabsContent value="detection" className="mt-4">
|
|
345
|
+
<div className="grid gap-4">
|
|
346
|
+
<Card className="border-border bg-card">
|
|
347
|
+
<CardHeader>
|
|
348
|
+
<CardTitle className="text-base">Component Detection</CardTitle>
|
|
349
|
+
<CardDescription>
|
|
350
|
+
Configure what types of components NavGator should detect
|
|
351
|
+
</CardDescription>
|
|
352
|
+
</CardHeader>
|
|
353
|
+
<CardContent className="flex flex-col gap-4">
|
|
354
|
+
<div className="grid grid-cols-2 gap-4">
|
|
355
|
+
{([
|
|
356
|
+
{ id: "npm" as const, label: "NPM Packages", desc: "Detect package.json dependencies" },
|
|
357
|
+
{ id: "database" as const, label: "Databases", desc: "PostgreSQL, MySQL, MongoDB, etc." },
|
|
358
|
+
{ id: "service" as const, label: "External Services", desc: "APIs, webhooks, third-party services" },
|
|
359
|
+
{ id: "queue" as const, label: "Message Queues", desc: "Redis, RabbitMQ, SQS, etc." },
|
|
360
|
+
{ id: "cache" as const, label: "Caching", desc: "Redis, Memcached, CDN caches" },
|
|
361
|
+
{ id: "storage" as const, label: "File Storage", desc: "S3, GCS, local filesystem" },
|
|
362
|
+
{ id: "auth" as const, label: "Authentication", desc: "OAuth, JWT, session providers" },
|
|
363
|
+
{ id: "llm" as const, label: "LLM Calls", desc: "AI/ML model invocations" },
|
|
364
|
+
] as const).map((item) => (
|
|
365
|
+
<div
|
|
366
|
+
key={item.id}
|
|
367
|
+
className="flex items-start justify-between rounded-lg border border-border bg-secondary/50 p-3"
|
|
368
|
+
>
|
|
369
|
+
<div>
|
|
370
|
+
<Label>{item.label}</Label>
|
|
371
|
+
<p className="text-xs text-muted-foreground">{item.desc}</p>
|
|
372
|
+
</div>
|
|
373
|
+
<Switch
|
|
374
|
+
checked={detectionConfig[item.id]}
|
|
375
|
+
onCheckedChange={(v) =>
|
|
376
|
+
setDetectionConfig((c) => ({ ...c, [item.id]: v }))
|
|
377
|
+
}
|
|
378
|
+
/>
|
|
379
|
+
</div>
|
|
380
|
+
))}
|
|
381
|
+
</div>
|
|
382
|
+
</CardContent>
|
|
383
|
+
</Card>
|
|
384
|
+
|
|
385
|
+
<Card className="border-border bg-card">
|
|
386
|
+
<CardHeader>
|
|
387
|
+
<CardTitle className="text-base">Connection Analysis</CardTitle>
|
|
388
|
+
<CardDescription>
|
|
389
|
+
How NavGator identifies relationships between components
|
|
390
|
+
</CardDescription>
|
|
391
|
+
</CardHeader>
|
|
392
|
+
<CardContent className="flex flex-col gap-4">
|
|
393
|
+
<div className="flex items-center justify-between">
|
|
394
|
+
<div>
|
|
395
|
+
<Label>Static Analysis</Label>
|
|
396
|
+
<p className="text-xs text-muted-foreground">
|
|
397
|
+
Analyze imports, function calls, and type references
|
|
398
|
+
</p>
|
|
399
|
+
</div>
|
|
400
|
+
<Switch
|
|
401
|
+
checked={detectionConfig.staticAnalysis}
|
|
402
|
+
onCheckedChange={(v) =>
|
|
403
|
+
setDetectionConfig((c) => ({ ...c, staticAnalysis: v }))
|
|
404
|
+
}
|
|
405
|
+
/>
|
|
406
|
+
</div>
|
|
407
|
+
<div className="flex items-center justify-between">
|
|
408
|
+
<div>
|
|
409
|
+
<Label>Environment Variables</Label>
|
|
410
|
+
<p className="text-xs text-muted-foreground">
|
|
411
|
+
Detect service URLs from env vars
|
|
412
|
+
</p>
|
|
413
|
+
</div>
|
|
414
|
+
<Switch
|
|
415
|
+
checked={detectionConfig.environmentVariables}
|
|
416
|
+
onCheckedChange={(v) =>
|
|
417
|
+
setDetectionConfig((c) => ({ ...c, environmentVariables: v }))
|
|
418
|
+
}
|
|
419
|
+
/>
|
|
420
|
+
</div>
|
|
421
|
+
<div className="flex items-center justify-between">
|
|
422
|
+
<div>
|
|
423
|
+
<Label>Config Files</Label>
|
|
424
|
+
<p className="text-xs text-muted-foreground">
|
|
425
|
+
Parse docker-compose, terraform, k8s manifests
|
|
426
|
+
</p>
|
|
427
|
+
</div>
|
|
428
|
+
<Switch
|
|
429
|
+
checked={detectionConfig.configFiles}
|
|
430
|
+
onCheckedChange={(v) =>
|
|
431
|
+
setDetectionConfig((c) => ({ ...c, configFiles: v }))
|
|
432
|
+
}
|
|
433
|
+
/>
|
|
434
|
+
</div>
|
|
435
|
+
</CardContent>
|
|
436
|
+
</Card>
|
|
437
|
+
</div>
|
|
438
|
+
</TabsContent>
|
|
439
|
+
|
|
440
|
+
{/* Notifications Settings */}
|
|
441
|
+
<TabsContent value="notifications" className="mt-4">
|
|
442
|
+
<div className="grid gap-4">
|
|
443
|
+
<Card className="border-border bg-card">
|
|
444
|
+
<CardHeader>
|
|
445
|
+
<CardTitle className="text-base">Alert Preferences</CardTitle>
|
|
446
|
+
<CardDescription>
|
|
447
|
+
Configure when and how you receive notifications
|
|
448
|
+
</CardDescription>
|
|
449
|
+
</CardHeader>
|
|
450
|
+
<CardContent className="flex flex-col gap-4">
|
|
451
|
+
<div className="flex items-center justify-between">
|
|
452
|
+
<div>
|
|
453
|
+
<Label>Enable Notifications</Label>
|
|
454
|
+
<p className="text-xs text-muted-foreground">
|
|
455
|
+
Receive alerts for architecture changes
|
|
456
|
+
</p>
|
|
457
|
+
</div>
|
|
458
|
+
<Switch
|
|
459
|
+
checked={notificationConfig.enabled}
|
|
460
|
+
onCheckedChange={(v) =>
|
|
461
|
+
setNotificationConfig((c) => ({ ...c, enabled: v }))
|
|
462
|
+
}
|
|
463
|
+
/>
|
|
464
|
+
</div>
|
|
465
|
+
|
|
466
|
+
<div className="border-t border-border pt-4">
|
|
467
|
+
<Label className="mb-3 block text-muted-foreground">Notify me when...</Label>
|
|
468
|
+
<div className="flex flex-col gap-3">
|
|
469
|
+
<div className="flex items-center justify-between">
|
|
470
|
+
<div className="flex items-center gap-2">
|
|
471
|
+
<Info className="h-4 w-4 text-info" />
|
|
472
|
+
<span className="text-sm">New connection detected</span>
|
|
473
|
+
</div>
|
|
474
|
+
<Switch
|
|
475
|
+
checked={notificationConfig.onNewConnection}
|
|
476
|
+
onCheckedChange={(v) =>
|
|
477
|
+
setNotificationConfig((c) => ({ ...c, onNewConnection: v }))
|
|
478
|
+
}
|
|
479
|
+
disabled={!notificationConfig.enabled}
|
|
480
|
+
/>
|
|
481
|
+
</div>
|
|
482
|
+
<div className="flex items-center justify-between">
|
|
483
|
+
<div className="flex items-center gap-2">
|
|
484
|
+
<AlertCircle className="h-4 w-4 text-warning" />
|
|
485
|
+
<span className="text-sm">Breaking change detected</span>
|
|
486
|
+
</div>
|
|
487
|
+
<Switch
|
|
488
|
+
checked={notificationConfig.onBreakingChange}
|
|
489
|
+
onCheckedChange={(v) =>
|
|
490
|
+
setNotificationConfig((c) => ({ ...c, onBreakingChange: v }))
|
|
491
|
+
}
|
|
492
|
+
disabled={!notificationConfig.enabled}
|
|
493
|
+
/>
|
|
494
|
+
</div>
|
|
495
|
+
<div className="flex items-center justify-between">
|
|
496
|
+
<div className="flex items-center gap-2">
|
|
497
|
+
<Shield className="h-4 w-4 text-destructive" />
|
|
498
|
+
<span className="text-sm">Security issue found</span>
|
|
499
|
+
</div>
|
|
500
|
+
<Switch
|
|
501
|
+
checked={notificationConfig.onSecurityIssue}
|
|
502
|
+
onCheckedChange={(v) =>
|
|
503
|
+
setNotificationConfig((c) => ({ ...c, onSecurityIssue: v }))
|
|
504
|
+
}
|
|
505
|
+
disabled={!notificationConfig.enabled}
|
|
506
|
+
/>
|
|
507
|
+
</div>
|
|
508
|
+
</div>
|
|
509
|
+
</div>
|
|
510
|
+
</CardContent>
|
|
511
|
+
</Card>
|
|
512
|
+
|
|
513
|
+
<Card className="border-border bg-card">
|
|
514
|
+
<CardHeader>
|
|
515
|
+
<CardTitle className="text-base">Integrations</CardTitle>
|
|
516
|
+
<CardDescription>
|
|
517
|
+
Connect to external services for notifications
|
|
518
|
+
</CardDescription>
|
|
519
|
+
</CardHeader>
|
|
520
|
+
<CardContent className="flex flex-col gap-4">
|
|
521
|
+
<div className="grid gap-2">
|
|
522
|
+
<Label htmlFor="slack">Slack Webhook URL</Label>
|
|
523
|
+
<Input
|
|
524
|
+
id="slack"
|
|
525
|
+
type="url"
|
|
526
|
+
value={notificationConfig.slackWebhook}
|
|
527
|
+
onChange={(e) =>
|
|
528
|
+
setNotificationConfig((c) => ({ ...c, slackWebhook: e.target.value }))
|
|
529
|
+
}
|
|
530
|
+
className="bg-secondary font-mono"
|
|
531
|
+
placeholder="https://hooks.slack.com/services/..."
|
|
532
|
+
/>
|
|
533
|
+
</div>
|
|
534
|
+
<div className="flex items-center gap-2 rounded-lg border border-border bg-secondary/50 p-3">
|
|
535
|
+
<Terminal className="h-4 w-4 text-muted-foreground" />
|
|
536
|
+
<code className="text-xs text-muted-foreground">
|
|
537
|
+
navgator config set slack-webhook <url>
|
|
538
|
+
</code>
|
|
539
|
+
</div>
|
|
540
|
+
</CardContent>
|
|
541
|
+
</Card>
|
|
542
|
+
</div>
|
|
543
|
+
</TabsContent>
|
|
544
|
+
|
|
545
|
+
{/* Display Settings */}
|
|
546
|
+
<TabsContent value="display" className="mt-4">
|
|
547
|
+
<div className="grid gap-4">
|
|
548
|
+
<Card className="border-border bg-card">
|
|
549
|
+
<CardHeader>
|
|
550
|
+
<CardTitle className="text-base">Appearance</CardTitle>
|
|
551
|
+
<CardDescription>
|
|
552
|
+
Customize how NavGator looks and displays information
|
|
553
|
+
</CardDescription>
|
|
554
|
+
</CardHeader>
|
|
555
|
+
<CardContent className="flex flex-col gap-4">
|
|
556
|
+
<div className="grid gap-2">
|
|
557
|
+
<Label>Theme</Label>
|
|
558
|
+
<Select
|
|
559
|
+
value={displayConfig.theme}
|
|
560
|
+
onValueChange={(v) =>
|
|
561
|
+
setDisplayConfig((c) => ({
|
|
562
|
+
...c,
|
|
563
|
+
theme: v as DisplayConfig["theme"],
|
|
564
|
+
}))
|
|
565
|
+
}
|
|
566
|
+
>
|
|
567
|
+
<SelectTrigger className="w-40 bg-secondary">
|
|
568
|
+
<SelectValue />
|
|
569
|
+
</SelectTrigger>
|
|
570
|
+
<SelectContent>
|
|
571
|
+
<SelectItem value="dark">Dark</SelectItem>
|
|
572
|
+
<SelectItem value="light">Light</SelectItem>
|
|
573
|
+
<SelectItem value="system">System</SelectItem>
|
|
574
|
+
</SelectContent>
|
|
575
|
+
</Select>
|
|
576
|
+
</div>
|
|
577
|
+
|
|
578
|
+
<div className="flex items-center justify-between">
|
|
579
|
+
<div>
|
|
580
|
+
<Label>Compact Mode</Label>
|
|
581
|
+
<p className="text-xs text-muted-foreground">
|
|
582
|
+
Reduce padding and spacing for more content
|
|
583
|
+
</p>
|
|
584
|
+
</div>
|
|
585
|
+
<Switch
|
|
586
|
+
checked={displayConfig.compactMode}
|
|
587
|
+
onCheckedChange={(v) =>
|
|
588
|
+
setDisplayConfig((c) => ({ ...c, compactMode: v }))
|
|
589
|
+
}
|
|
590
|
+
/>
|
|
591
|
+
</div>
|
|
592
|
+
|
|
593
|
+
<div className="flex items-center justify-between">
|
|
594
|
+
<div>
|
|
595
|
+
<Label>Show Line Numbers</Label>
|
|
596
|
+
<p className="text-xs text-muted-foreground">
|
|
597
|
+
Display line numbers in code snippets
|
|
598
|
+
</p>
|
|
599
|
+
</div>
|
|
600
|
+
<Switch
|
|
601
|
+
checked={displayConfig.showLineNumbers}
|
|
602
|
+
onCheckedChange={(v) =>
|
|
603
|
+
setDisplayConfig((c) => ({ ...c, showLineNumbers: v }))
|
|
604
|
+
}
|
|
605
|
+
/>
|
|
606
|
+
</div>
|
|
607
|
+
</CardContent>
|
|
608
|
+
</Card>
|
|
609
|
+
|
|
610
|
+
<Card className="border-border bg-card">
|
|
611
|
+
<CardHeader>
|
|
612
|
+
<CardTitle className="text-base">Diagram Preferences</CardTitle>
|
|
613
|
+
<CardDescription>
|
|
614
|
+
Configure architecture diagram visualization
|
|
615
|
+
</CardDescription>
|
|
616
|
+
</CardHeader>
|
|
617
|
+
<CardContent className="flex flex-col gap-4">
|
|
618
|
+
<div className="grid gap-2">
|
|
619
|
+
<Label>Default Direction</Label>
|
|
620
|
+
<Select
|
|
621
|
+
value={displayConfig.diagramDirection}
|
|
622
|
+
onValueChange={(v) =>
|
|
623
|
+
setDisplayConfig((c) => ({
|
|
624
|
+
...c,
|
|
625
|
+
diagramDirection: v as DisplayConfig["diagramDirection"],
|
|
626
|
+
}))
|
|
627
|
+
}
|
|
628
|
+
>
|
|
629
|
+
<SelectTrigger className="w-40 bg-secondary">
|
|
630
|
+
<SelectValue />
|
|
631
|
+
</SelectTrigger>
|
|
632
|
+
<SelectContent>
|
|
633
|
+
<SelectItem value="TB">Top to Bottom</SelectItem>
|
|
634
|
+
<SelectItem value="LR">Left to Right</SelectItem>
|
|
635
|
+
</SelectContent>
|
|
636
|
+
</Select>
|
|
637
|
+
</div>
|
|
638
|
+
|
|
639
|
+
<div className="grid gap-2">
|
|
640
|
+
<Label>Max Visible Connections</Label>
|
|
641
|
+
<Select
|
|
642
|
+
value={displayConfig.maxVisibleConnections.toString()}
|
|
643
|
+
onValueChange={(v) =>
|
|
644
|
+
setDisplayConfig((c) => ({
|
|
645
|
+
...c,
|
|
646
|
+
maxVisibleConnections: Number.parseInt(v),
|
|
647
|
+
}))
|
|
648
|
+
}
|
|
649
|
+
>
|
|
650
|
+
<SelectTrigger className="w-40 bg-secondary">
|
|
651
|
+
<SelectValue />
|
|
652
|
+
</SelectTrigger>
|
|
653
|
+
<SelectContent>
|
|
654
|
+
<SelectItem value="25">25</SelectItem>
|
|
655
|
+
<SelectItem value="50">50</SelectItem>
|
|
656
|
+
<SelectItem value="100">100</SelectItem>
|
|
657
|
+
<SelectItem value="200">200</SelectItem>
|
|
658
|
+
</SelectContent>
|
|
659
|
+
</Select>
|
|
660
|
+
<p className="text-xs text-muted-foreground">
|
|
661
|
+
Limit connections shown to improve performance
|
|
662
|
+
</p>
|
|
663
|
+
</div>
|
|
664
|
+
</CardContent>
|
|
665
|
+
</Card>
|
|
666
|
+
</div>
|
|
667
|
+
</TabsContent>
|
|
668
|
+
</Tabs>
|
|
669
|
+
</div>
|
|
670
|
+
)
|
|
671
|
+
}
|