@leanspec/ui 0.2.11 → 0.2.12
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/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
- package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
- package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/build-manifest.json +4 -4
- package/.next/standalone/packages/ui/.next/routes-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +18 -18
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -18
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_head.segment.rsc +4 -4
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +12 -12
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/health/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/health/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/health/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/health/route.js +6 -0
- package/.next/standalone/packages/ui/.next/server/app/api/health/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/health/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/health/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js +3 -3
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js +2 -2
- package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js +4 -3
- package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/search/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/search/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/search/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/search/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/search/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/search/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/search/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/health/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/health/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/health/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/health/route.js +6 -0
- package/.next/standalone/packages/ui/.next/server/app/health/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/health/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/health/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.rsc +12 -12
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +12 -12
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_head.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +10 -10
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
- package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__01a010d2._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__18006869._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__2fd8e63b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3c009811._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__408867af._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__4913ae11._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__493dafb5._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__4d45fba5._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__545bd045._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__580debd3._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__597227b1._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5db43dd1._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__6575637c._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__65eaee03._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__77b7bda2._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__77f9d159._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__896a68f6._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a3e5f47e._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__ab055d16._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b79da708._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c1a0f4ae._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f00a3584._.js +21 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f96cec8f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fa0c3244._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/_4126d0be._.js +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_health_route_actions_7e273251.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_search_route_actions_4d98696f.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_health_route_actions_38d6c859.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_b8c1af87._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/1ce3b_dagre-d3-es_src_dagre_index_f9cad90b.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_8167bfdd._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_039fb02e._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_c5b1d4f9._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_0a7c215c._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_0b254b71._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_40ab38d1._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_a32f523e._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_ffd8fbee._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_bf4b42a9._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_blockDiagram-VD42YOAC_mjs_99bfbaf9._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_blockDiagram-VD42YOAC_mjs_0326ef3f._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_c4Diagram-YG6GDRKO_mjs_4dc38eb2._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_chunk-ABZYJK2D_mjs_41e4ef7c._.js +79 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_chunk-B4BG7PRW_mjs_152d6b7c._.js +162 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_chunk-DI55MBZ5_mjs_2e49cdd9._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_chunk-DI55MBZ5_mjs_f803dc6e._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_chunk-FMBD7UC4_mjs_69c9238e._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_chunk-FMBD7UC4_mjs_82165e98._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_chunk-JA3XYJ7Z_mjs_9d45fac6._.js +62 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_chunk-JZLCHNYA_mjs_e1210981._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_chunk-JZLCHNYA_mjs_4c3bae8d._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_chunk-MI3HLSF2_mjs_4494daf0._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_chunk-MI3HLSF2_mjs_90225bf8._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_chunk-QXUST7PY_mjs_3e69582d._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_chunk-QXUST7PY_mjs_1558ec21._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_chunk-S3R3BYOJ_mjs_365fb61d._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_chunk-TZMSLE5B_mjs_72a0311f._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_chunk-TZMSLE5B_mjs_e3843d9c._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_dagre-6UL2VRFP_mjs_ced7f41d._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_diagram-PSM6KHXK_mjs_f109b802._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_diagram-PSM6KHXK_mjs_67034ee5._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_erDiagram-Q2GNP2WA_mjs_b238a129._.js +57 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_flowDiagram-NV44I4VS_mjs_c11db931._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_flowDiagram-NV44I4VS_mjs_9c68d218._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_gitGraphDiagram-NY62KEGX_mjs_bc2124c8._.js +65 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_journeyDiagram-XKPGCS4Q_mjs_c6224fc8._.js +136 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_kanban-definition-3W4ZIXB7_mjs_550640fc._.js +81 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_quadrantDiagram-AYHSOK5B_mjs_bef56c71._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_requirementDiagram-UZGBJVZJ_mjs_ff9d68c3._.js +61 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_sankeyDiagram-TZEHDZUN_mjs_9fa014df._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_sankeyDiagram-TZEHDZUN_mjs_2b6523f9._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_sequenceDiagram-WL72ISMW_mjs_4d5ee2b1._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_sequenceDiagram-WL72ISMW_mjs_07d830e2._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_stateDiagram-FKZM4ZOC_mjs_f874f344._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{931bf_mermaid_dist_chunks_mermaid_core_timeline-definition-IT6M3QCI_mjs_96b04d43._.js → 2d2f0_mermaid_dist_chunks_mermaid_core_timeline-definition-IT6M3QCI_mjs_f287eaf9._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_chunks_mermaid_core_xychartDiagram-PRI3JC2R_mjs_fd2f9ec2._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/2d2f0_mermaid_dist_mermaid_core_mjs_06200ddd._.js +9 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{f0bdc_katex_dist_katex_mjs_27a6c950._.js → 79abc_katex_dist_katex_mjs_4541e3ed._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__c8c18f4f._.js → [root-of-the-server]__1260c5f7._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__5f4adfc8._.js → [root-of-the-server]__1cb959c5._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__26326a5f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__0749b2a9._.js → [root-of-the-server]__4cd3ba60._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__6a435090._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__1c4b3bf2._.js → [root-of-the-server]__70286e1b._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__63c456e1._.js → [root-of-the-server]__8002df87._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__835e8eac._.js +64 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_0ac14791._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_0d858c33._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_0dbcf841._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_154a7c34._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_2258175d._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_3b71bf0a._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_621be400._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_622e0934._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_634df2de._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_73cbd742._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_9b6b1366._.js +5 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_e451c97d._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/a3abb_lodash-es_39467f98._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/a3abb_lodash-es_39b3309d._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/a3abb_lodash-es_71968945._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/a3abb_lodash-es_8c3798ec._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/a3abb_lodash-es_f7e6e959._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_03d68913._.js +28 -28
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_5237fdd7._.js → node_modules__pnpm_11fc8cad._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_a3f2a370._.js → node_modules__pnpm_1e176d07._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_2b810caa._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_3ac36b29._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_3d74497b._.js +31 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_4a28a77d._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_4a7b3c19._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_30b0b05a._.js → node_modules__pnpm_59960f1e._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_61f8ccc0._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_6697cd90._.js +26 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_73c425a0._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_74354499._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_763657ac._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_797a2ca8._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_7dfb1bd9._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_87b4580a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_88964c5f._.js +45 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_8991f9c5._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_76d4233c._.js → node_modules__pnpm_8cfd2093._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_94550f9f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_979654f9._.js +264 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_9f109f32._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_c766836f._.js → node_modules__pnpm_acea603d._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_cce16695._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_ccfd2c1b._.js +17 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_d627b170._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_b23175bb._.js → node_modules__pnpm_da2d2764._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_da99d8e9._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_e7a691d1._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_c22df304._.js → node_modules__pnpm_ea8cde4a._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_472d6274._.js → node_modules__pnpm_effb98fb._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_context-client_tsx_0ded8336._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_dependencies_dependencies-client_tsx_481976b3._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_specs-client_tsx_01341e35._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/middleware-build-manifest.js +2 -2
- package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
- package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
- package/.next/{static/chunks/7b70989270600907.js → standalone/packages/ui/.next/static/chunks/033e84ae4e602451.js} +2 -2
- package/.next/standalone/packages/ui/.next/static/chunks/{414a78f7b9b58d11.js → 0e1982b1a6cbd127.js} +2 -2
- package/.next/standalone/packages/ui/.next/static/chunks/12a7420acd028ffb.js +1 -0
- package/.next/{static/chunks/df7e61b074dee049.js → standalone/packages/ui/.next/static/chunks/1acfae010fd77014.js} +1 -1
- package/.next/{static/chunks/3013cefdf3bb0932.js → standalone/packages/ui/.next/static/chunks/1f73933498bb3f89.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/{af643629ba393b18.js → 219b7d9e437c6bd8.js} +2 -2
- package/.next/standalone/packages/ui/.next/static/chunks/23a1e247c32bcc61.js +93 -0
- package/.next/standalone/packages/ui/.next/static/chunks/25e71c18d7f735b0.js +77 -0
- package/.next/{static/chunks/42eab565a0419f25.js → standalone/packages/ui/.next/static/chunks/2769a6addee16819.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/2a07a20aeed845d2.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/3717f57c910514ee.js +4 -0
- package/.next/standalone/packages/ui/.next/static/chunks/3f5728744987b056.js +10 -0
- package/.next/standalone/packages/ui/.next/static/chunks/4205e1e99dbad846.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/484a82e3fed783b5.js +262 -0
- package/.next/standalone/packages/ui/.next/static/chunks/486b12d42e9f2e10.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/4928acec2f0a27a0.js +15 -0
- package/.next/standalone/packages/ui/.next/static/chunks/4c0bd06c9ef55bdf.js +63 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{b900efab2eee69a0.js → 4d8d7e62c2743f71.js} +2 -2
- package/.next/standalone/packages/ui/.next/static/chunks/4f2bc7a7a6b05a8b.js +55 -0
- package/.next/standalone/packages/ui/.next/static/chunks/4fead4c15e38b33e.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{f88536b96f1df686.js → 529ac1f084e36f1a.js} +1 -1
- package/.next/{static/chunks/6483096c16d96f2c.js → standalone/packages/ui/.next/static/chunks/55761e35a8946a1d.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/{5fffdea0623d8a25.js → 584bad9cf2498405.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/5cf25a8967a2f486.js +215 -0
- package/.next/standalone/packages/ui/.next/static/chunks/61d65fe807f69413.js +62 -0
- package/.next/standalone/packages/ui/.next/static/chunks/625c67f1826b0214.js +24 -0
- package/.next/standalone/packages/ui/.next/static/chunks/63d8fd1597f46aba.js +3 -0
- package/.next/standalone/packages/ui/.next/static/chunks/6d040eb901b4e641.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/76af2698c6233ad3.js +60 -0
- package/.next/{static/chunks/37f2e45cf97245d9.js → standalone/packages/ui/.next/static/chunks/7ff2a1996be67419.js} +1 -1
- package/.next/{static/chunks/2136b3131f74188f.js → standalone/packages/ui/.next/static/chunks/808ed0f189237446.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/81316016a1163994.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/83a8941b869553c2.js +43 -0
- package/.next/standalone/packages/ui/.next/static/chunks/83ad0e374ba914bb.js +1 -0
- package/.next/{static/chunks/8ff23db3e3143bc7.js → standalone/packages/ui/.next/static/chunks/86922861a757bcb1.js} +1 -1
- package/.next/{static/chunks/a0b34f852bfa3d1b.js → standalone/packages/ui/.next/static/chunks/962e5cad8ea716fc.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/98f112e5f904766f.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{31c5e577f282adb3.js → 9bb03156564e344d.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/9c6d5fb76690228a.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{3f94c1ef6e27c8bd.js → 9d851c7076be779f.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/9f415807575a9834.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/a1d3de9e7615662e.js +160 -0
- package/.next/standalone/packages/ui/.next/static/chunks/a7fdfeea5fd894c1.js +59 -0
- package/.next/standalone/packages/ui/.next/static/chunks/a8a3989305bcc136.js +215 -0
- package/.next/standalone/packages/ui/.next/static/chunks/ab47f453990e66ac.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{72dde43947381f78.js → acb938ef1d4fb5ac.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/acbfbe8ec48b9d30.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/c44a73bf08ad2744.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{6c862b0bdb79830a.js → c5cbf4348920e18a.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/c5ff5834cc40cc53.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/c795916b36aa4427.js +5 -0
- package/.next/standalone/packages/ui/.next/static/chunks/cf8d56af13058933.js +29 -0
- package/.next/standalone/packages/ui/.next/static/chunks/d0abae9ec6f86e28.js +24 -0
- package/.next/standalone/packages/ui/.next/static/chunks/d19b45f04737fd17.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/d267fa95a802a93e.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/d857534107a61f01.js +13 -0
- package/.next/{static/chunks/642374ace530e2bd.js → standalone/packages/ui/.next/static/chunks/d9d11dc692443713.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/dd4d5318fe76181b.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/e3b72bcd2506a85d.js +2 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{192b2f6118d057e2.js → e63644fc036e8e8f.js} +15 -15
- package/.next/{static/chunks/c8bad5d62c56feb2.js → standalone/packages/ui/.next/static/chunks/ea1a170f520100f6.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/f1d2ff2b44324a2f.js +2 -0
- package/.next/standalone/packages/ui/.next/static/chunks/f30b1d00c76e6487.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/f669ccd352a5dddd.js +1 -0
- package/.next/{static/chunks/16b742746668b9d6.js → standalone/packages/ui/.next/static/chunks/f8c965a996875e30.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/{1490995adc7829e2.js → f9737eb4b7281392.js} +1 -1
- package/.next/{static/chunks/turbopack-b52299a351b6f041.js → standalone/packages/ui/.next/static/chunks/turbopack-ee7289036a2ef92e.js} +1 -1
- package/.next/standalone/packages/ui/bin/ui.js +0 -0
- package/.next/standalone/packages/ui/package.json +30 -30
- package/.next/standalone/packages/ui/src/app/api/health/route.ts +9 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/dependencies/route.ts +8 -1
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/route.ts +1 -1
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/route.ts +15 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/stats/route.ts +1 -1
- package/.next/standalone/packages/ui/src/app/api/projects/route.ts +1 -1
- package/.next/standalone/packages/ui/src/app/api/search/route.ts +54 -0
- package/.next/standalone/packages/ui/src/app/health/route.ts +9 -0
- package/.next/standalone/packages/ui/src/lib/spec-utils/frontmatter.ts +18 -15
- package/.next/standalone/packages/ui-components/package.json +20 -20
- package/.next/standalone/packages/ui-vite/package.json +24 -17
- package/.next/standalone/packages/ui-vite/src/components/Layout.tsx +6 -2
- package/.next/standalone/packages/ui-vite/src/components/MermaidDiagram.tsx +82 -0
- package/.next/standalone/packages/ui-vite/src/hooks/useKeyboardShortcuts.ts +5 -0
- package/.next/standalone/packages/ui-vite/src/pages/DashboardPage.tsx +421 -0
- package/.next/standalone/packages/ui-vite/src/pages/DependenciesPage.tsx +222 -36
- package/.next/standalone/packages/ui-vite/src/pages/SpecDetailPage.tsx +24 -1
- package/.next/standalone/packages/ui-vite/src/pages/StatsPage.tsx +172 -45
- package/.next/standalone/packages/ui-vite/src/router.tsx +3 -2
- package/.next/{standalone/packages/ui/.next/static/chunks/7b70989270600907.js → static/chunks/033e84ae4e602451.js} +2 -2
- package/.next/static/chunks/{414a78f7b9b58d11.js → 0e1982b1a6cbd127.js} +2 -2
- package/.next/static/chunks/12a7420acd028ffb.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/df7e61b074dee049.js → static/chunks/1acfae010fd77014.js} +1 -1
- package/.next/{standalone/packages/ui/.next/static/chunks/3013cefdf3bb0932.js → static/chunks/1f73933498bb3f89.js} +1 -1
- package/.next/static/chunks/{af643629ba393b18.js → 219b7d9e437c6bd8.js} +2 -2
- package/.next/static/chunks/23a1e247c32bcc61.js +93 -0
- package/.next/static/chunks/25e71c18d7f735b0.js +77 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/42eab565a0419f25.js → static/chunks/2769a6addee16819.js} +1 -1
- package/.next/static/chunks/2a07a20aeed845d2.js +1 -0
- package/.next/static/chunks/3717f57c910514ee.js +4 -0
- package/.next/static/chunks/3f5728744987b056.js +10 -0
- package/.next/static/chunks/4205e1e99dbad846.js +1 -0
- package/.next/static/chunks/484a82e3fed783b5.js +262 -0
- package/.next/static/chunks/486b12d42e9f2e10.js +1 -0
- package/.next/static/chunks/4928acec2f0a27a0.js +15 -0
- package/.next/static/chunks/4c0bd06c9ef55bdf.js +63 -0
- package/.next/static/chunks/{b900efab2eee69a0.js → 4d8d7e62c2743f71.js} +2 -2
- package/.next/static/chunks/4f2bc7a7a6b05a8b.js +55 -0
- package/.next/static/chunks/4fead4c15e38b33e.js +1 -0
- package/.next/static/chunks/{f88536b96f1df686.js → 529ac1f084e36f1a.js} +1 -1
- package/.next/{standalone/packages/ui/.next/static/chunks/6483096c16d96f2c.js → static/chunks/55761e35a8946a1d.js} +1 -1
- package/.next/static/chunks/{5fffdea0623d8a25.js → 584bad9cf2498405.js} +1 -1
- package/.next/static/chunks/5cf25a8967a2f486.js +215 -0
- package/.next/static/chunks/61d65fe807f69413.js +62 -0
- package/.next/static/chunks/625c67f1826b0214.js +24 -0
- package/.next/static/chunks/63d8fd1597f46aba.js +3 -0
- package/.next/static/chunks/6d040eb901b4e641.js +1 -0
- package/.next/static/chunks/76af2698c6233ad3.js +60 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/37f2e45cf97245d9.js → static/chunks/7ff2a1996be67419.js} +1 -1
- package/.next/{standalone/packages/ui/.next/static/chunks/2136b3131f74188f.js → static/chunks/808ed0f189237446.js} +1 -1
- package/.next/static/chunks/81316016a1163994.js +1 -0
- package/.next/static/chunks/83a8941b869553c2.js +43 -0
- package/.next/static/chunks/83ad0e374ba914bb.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/8ff23db3e3143bc7.js → static/chunks/86922861a757bcb1.js} +1 -1
- package/.next/{standalone/packages/ui/.next/static/chunks/a0b34f852bfa3d1b.js → static/chunks/962e5cad8ea716fc.js} +1 -1
- package/.next/static/chunks/98f112e5f904766f.js +1 -0
- package/.next/static/chunks/{31c5e577f282adb3.js → 9bb03156564e344d.js} +1 -1
- package/.next/static/chunks/9c6d5fb76690228a.js +1 -0
- package/.next/static/chunks/{3f94c1ef6e27c8bd.js → 9d851c7076be779f.js} +1 -1
- package/.next/static/chunks/9f415807575a9834.js +1 -0
- package/.next/static/chunks/a1d3de9e7615662e.js +160 -0
- package/.next/static/chunks/a7fdfeea5fd894c1.js +59 -0
- package/.next/static/chunks/a8a3989305bcc136.js +215 -0
- package/.next/static/chunks/ab47f453990e66ac.js +1 -0
- package/.next/static/chunks/{72dde43947381f78.js → acb938ef1d4fb5ac.js} +1 -1
- package/.next/static/chunks/acbfbe8ec48b9d30.js +1 -0
- package/.next/static/chunks/c44a73bf08ad2744.js +1 -0
- package/.next/static/chunks/{6c862b0bdb79830a.js → c5cbf4348920e18a.js} +1 -1
- package/.next/static/chunks/c5ff5834cc40cc53.js +1 -0
- package/.next/static/chunks/c795916b36aa4427.js +5 -0
- package/.next/static/chunks/cf8d56af13058933.js +29 -0
- package/.next/static/chunks/d0abae9ec6f86e28.js +24 -0
- package/.next/static/chunks/d19b45f04737fd17.js +1 -0
- package/.next/static/chunks/d267fa95a802a93e.js +1 -0
- package/.next/static/chunks/d857534107a61f01.js +13 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/642374ace530e2bd.js → static/chunks/d9d11dc692443713.js} +1 -1
- package/.next/static/chunks/dd4d5318fe76181b.js +1 -0
- package/.next/static/chunks/e3b72bcd2506a85d.js +2 -0
- package/.next/static/chunks/{192b2f6118d057e2.js → e63644fc036e8e8f.js} +15 -15
- package/.next/{standalone/packages/ui/.next/static/chunks/c8bad5d62c56feb2.js → static/chunks/ea1a170f520100f6.js} +1 -1
- package/.next/static/chunks/f1d2ff2b44324a2f.js +2 -0
- package/.next/static/chunks/f30b1d00c76e6487.js +1 -0
- package/.next/static/chunks/f669ccd352a5dddd.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/16b742746668b9d6.js → static/chunks/f8c965a996875e30.js} +1 -1
- package/.next/static/chunks/{1490995adc7829e2.js → f9737eb4b7281392.js} +1 -1
- package/.next/{standalone/packages/ui/.next/static/chunks/turbopack-b52299a351b6f041.js → static/chunks/turbopack-ee7289036a2ef92e.js} +1 -1
- package/package.json +44 -44
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0ca8ab51._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__46661652._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5633d75c._.js +0 -21
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__7c3f68e4._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8d6c6cff._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__97ce74ed._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a05c13bb._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a1582fad._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b6844128._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__be4523bf._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e8070afd._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e891242e._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_14bcb343._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_545e404c._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_69a771f4._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_6b7380f1._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_82045c93._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_b7cdc48c._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_bedf0a4e._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_d3fd96f5._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/_eef7dd10._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/641df_lodash-es_057c0674._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/641df_lodash-es_4b57a3a3._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/641df_lodash-es_4d3de843._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/641df_lodash-es_5f3103e1._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/641df_lodash-es_bcc35893._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/641df_lodash-es_f2ef1919._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_c4Diagram-YG6GDRKO_mjs_0683be9f._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_chunk-ABZYJK2D_mjs_4034a85b._.js +0 -79
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_chunk-B4BG7PRW_mjs_3190ac39._.js +0 -162
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_chunk-JA3XYJ7Z_mjs_4c9b0254._.js +0 -62
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_chunk-S3R3BYOJ_mjs_0c8df0bf._.js +0 -4
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_dagre-6UL2VRFP_mjs_2a0e551c._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_erDiagram-Q2GNP2WA_mjs_2956542e._.js +0 -57
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_f71564d9._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_gitGraphDiagram-NY62KEGX_mjs_fe41f076._.js +0 -65
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_journeyDiagram-XKPGCS4Q_mjs_8b9c3e68._.js +0 -136
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_kanban-definition-3W4ZIXB7_mjs_d8e6de34._.js +0 -81
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_quadrantDiagram-AYHSOK5B_mjs_50c2110d._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_requirementDiagram-UZGBJVZJ_mjs_8f86dea7._.js +0 -61
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_stateDiagram-FKZM4ZOC_mjs_2bd67ce9._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_chunks_mermaid_core_xychartDiagram-PRI3JC2R_mjs_7eec04e0._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/931bf_mermaid_dist_mermaid_core_mjs_1c407865._.js +0 -9
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a34731d8._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b0d6e2ad._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e4a2bcdd._.js +0 -64
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_14e94498._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_228deb98._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_3e8b1549._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_55d5049a._.js +0 -5
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6766b4f3._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_6901fbea._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_c9ad4c99._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_1120b57c._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_157f6c24._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_1aec4342._.js +0 -17
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_2a29db83._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_3ba1438c._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_69372f5b._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_7434d351._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_7791e3b8._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_88c8b88b._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_b247a526._.js +0 -264
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_c17f27b1._.js +0 -45
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_e175b92a._.js +0 -31
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_e440897f._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_e8075f9b._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_ea1bddc7._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_f732d0bb._.js +0 -26
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_f919ef4a._.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/038fb2d565c88582.js +0 -2
- package/.next/standalone/packages/ui/.next/static/chunks/051e1aa02e4b28a5.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/0def4e3de105a498.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/1104de0c16e0b792.js +0 -59
- package/.next/standalone/packages/ui/.next/static/chunks/19e520f0833c8219.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/1a910f137d27fff0.js +0 -63
- package/.next/standalone/packages/ui/.next/static/chunks/1c6db91bce771c18.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/2b8dd40cfd46d975.js +0 -60
- package/.next/standalone/packages/ui/.next/static/chunks/305b74f3c20cb4ef.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/39691fae9a3463fe.js +0 -262
- package/.next/standalone/packages/ui/.next/static/chunks/3a683a37eeba41f4.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/3bb1648a5b264c9d.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/4610aea3ca2e69eb.js +0 -2
- package/.next/standalone/packages/ui/.next/static/chunks/49acb2b7b420dc50.js +0 -13
- package/.next/standalone/packages/ui/.next/static/chunks/4e85dea329906168.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/525d6cb99a13c44a.js +0 -215
- package/.next/standalone/packages/ui/.next/static/chunks/5295f0e82fd2a6d3.js +0 -24
- package/.next/standalone/packages/ui/.next/static/chunks/53c8177744c358e1.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/567bc31005c31006.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/56894ea818ee2a54.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/64543dbd7a7a99b7.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/6f3c460ef90843d6.js +0 -215
- package/.next/standalone/packages/ui/.next/static/chunks/8287406f2fe1c1c3.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/85b2b8ec762b7c79.js +0 -62
- package/.next/standalone/packages/ui/.next/static/chunks/89a8f922ce491ce9.js +0 -93
- package/.next/standalone/packages/ui/.next/static/chunks/8e74116482d87a39.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/93f68e12f388e2bb.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/942cf63b4032c808.js +0 -29
- package/.next/standalone/packages/ui/.next/static/chunks/97c8160044aea609.js +0 -77
- package/.next/standalone/packages/ui/.next/static/chunks/9f111762e88812e3.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/a95be4ea7999efee.js +0 -5
- package/.next/standalone/packages/ui/.next/static/chunks/abaf0381e8007624.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/c762baa705e11b30.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/d35b70bce9e2e4a3.js +0 -10
- package/.next/standalone/packages/ui/.next/static/chunks/d43971093c91d3b2.js +0 -160
- package/.next/standalone/packages/ui/.next/static/chunks/dc394e2327882613.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/dd8e053aa48c6398.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/ddc7726e19e5e25c.js +0 -43
- package/.next/standalone/packages/ui/.next/static/chunks/e20849e3abe63aa5.js +0 -55
- package/.next/standalone/packages/ui/.next/static/chunks/e2792c100b4041a1.js +0 -15
- package/.next/standalone/packages/ui/.next/static/chunks/e3bc96a996e2a314.js +0 -24
- package/.next/standalone/packages/ui/.next/static/chunks/e5aab2c562822175.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/efbbc4dc4b32a270.js +0 -4
- package/.next/standalone/packages/ui/.next/static/chunks/fcf01915df415518.js +0 -1
- package/.next/static/chunks/038fb2d565c88582.js +0 -2
- package/.next/static/chunks/051e1aa02e4b28a5.js +0 -1
- package/.next/static/chunks/0def4e3de105a498.js +0 -1
- package/.next/static/chunks/1104de0c16e0b792.js +0 -59
- package/.next/static/chunks/19e520f0833c8219.js +0 -1
- package/.next/static/chunks/1a910f137d27fff0.js +0 -63
- package/.next/static/chunks/1c6db91bce771c18.js +0 -1
- package/.next/static/chunks/2b8dd40cfd46d975.js +0 -60
- package/.next/static/chunks/305b74f3c20cb4ef.js +0 -1
- package/.next/static/chunks/39691fae9a3463fe.js +0 -262
- package/.next/static/chunks/3a683a37eeba41f4.js +0 -1
- package/.next/static/chunks/3bb1648a5b264c9d.js +0 -1
- package/.next/static/chunks/4610aea3ca2e69eb.js +0 -2
- package/.next/static/chunks/49acb2b7b420dc50.js +0 -13
- package/.next/static/chunks/4e85dea329906168.js +0 -1
- package/.next/static/chunks/525d6cb99a13c44a.js +0 -215
- package/.next/static/chunks/5295f0e82fd2a6d3.js +0 -24
- package/.next/static/chunks/53c8177744c358e1.js +0 -1
- package/.next/static/chunks/567bc31005c31006.js +0 -1
- package/.next/static/chunks/56894ea818ee2a54.js +0 -1
- package/.next/static/chunks/64543dbd7a7a99b7.js +0 -1
- package/.next/static/chunks/6f3c460ef90843d6.js +0 -215
- package/.next/static/chunks/8287406f2fe1c1c3.js +0 -1
- package/.next/static/chunks/85b2b8ec762b7c79.js +0 -62
- package/.next/static/chunks/89a8f922ce491ce9.js +0 -93
- package/.next/static/chunks/8e74116482d87a39.js +0 -1
- package/.next/static/chunks/93f68e12f388e2bb.js +0 -1
- package/.next/static/chunks/942cf63b4032c808.js +0 -29
- package/.next/static/chunks/97c8160044aea609.js +0 -77
- package/.next/static/chunks/9f111762e88812e3.js +0 -1
- package/.next/static/chunks/a95be4ea7999efee.js +0 -5
- package/.next/static/chunks/abaf0381e8007624.js +0 -1
- package/.next/static/chunks/c762baa705e11b30.js +0 -1
- package/.next/static/chunks/d35b70bce9e2e4a3.js +0 -10
- package/.next/static/chunks/d43971093c91d3b2.js +0 -160
- package/.next/static/chunks/dc394e2327882613.js +0 -3
- package/.next/static/chunks/dd8e053aa48c6398.js +0 -1
- package/.next/static/chunks/ddc7726e19e5e25c.js +0 -43
- package/.next/static/chunks/e20849e3abe63aa5.js +0 -55
- package/.next/static/chunks/e2792c100b4041a1.js +0 -15
- package/.next/static/chunks/e3bc96a996e2a314.js +0 -24
- package/.next/static/chunks/e5aab2c562822175.js +0 -1
- package/.next/static/chunks/efbbc4dc4b32a270.js +0 -4
- package/.next/static/chunks/fcf01915df415518.js +0 -1
- /package/.next/standalone/packages/ui/.next/static/{go0tWfyUzaZ0Q5O1ihd6x → 42z5C6Wiqc0rFyIDpNUDz}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{go0tWfyUzaZ0Q5O1ihd6x → 42z5C6Wiqc0rFyIDpNUDz}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{go0tWfyUzaZ0Q5O1ihd6x → 42z5C6Wiqc0rFyIDpNUDz}/_ssgManifest.js +0 -0
- /package/.next/static/{go0tWfyUzaZ0Q5O1ihd6x → 42z5C6Wiqc0rFyIDpNUDz}/_buildManifest.js +0 -0
- /package/.next/static/{go0tWfyUzaZ0Q5O1ihd6x → 42z5C6Wiqc0rFyIDpNUDz}/_clientMiddlewareManifest.json +0 -0
- /package/.next/static/{go0tWfyUzaZ0Q5O1ihd6x → 42z5C6Wiqc0rFyIDpNUDz}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { Link } from 'react-router-dom';
|
|
3
|
+
import {
|
|
4
|
+
FileText,
|
|
5
|
+
CheckCircle2,
|
|
6
|
+
PlayCircle,
|
|
7
|
+
Clock,
|
|
8
|
+
List as ListIcon,
|
|
9
|
+
TrendingUp,
|
|
10
|
+
Calendar,
|
|
11
|
+
Loader2
|
|
12
|
+
} from 'lucide-react';
|
|
13
|
+
import { Card, CardContent, CardHeader, CardTitle, Button, Badge } from '@leanspec/ui-components';
|
|
14
|
+
import { api, type Spec as APISpec, type Stats } from '../lib/api';
|
|
15
|
+
|
|
16
|
+
// Extend API spec with dates as Date objects
|
|
17
|
+
interface Spec extends Omit<APISpec, 'created' | 'updated'> {
|
|
18
|
+
created: Date | null;
|
|
19
|
+
updated: Date | null;
|
|
20
|
+
specNumber: number | null;
|
|
21
|
+
id: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function formatRelativeTime(date: Date | null): string {
|
|
25
|
+
if (!date) return 'Unknown';
|
|
26
|
+
|
|
27
|
+
const now = new Date();
|
|
28
|
+
const diffMs = now.getTime() - date.getTime();
|
|
29
|
+
const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
|
|
30
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
31
|
+
|
|
32
|
+
if (diffHours < 1) return 'Just now';
|
|
33
|
+
if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
|
|
34
|
+
if (diffDays < 7) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
|
|
35
|
+
if (diffDays < 30) return `${Math.floor(diffDays / 7)} week${Math.floor(diffDays / 7) > 1 ? 's' : ''} ago`;
|
|
36
|
+
return date.toLocaleDateString();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function SpecListItem({ spec }: { spec: Spec }) {
|
|
40
|
+
const displayTitle = spec.title || spec.name;
|
|
41
|
+
const specUrl = `/specs/${spec.name}`;
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<Link
|
|
45
|
+
to={specUrl}
|
|
46
|
+
className="block p-3 rounded-lg hover:bg-accent transition-colors"
|
|
47
|
+
title={spec.name}
|
|
48
|
+
>
|
|
49
|
+
<div className="flex items-start justify-between gap-2">
|
|
50
|
+
<div className="flex-1 min-w-0">
|
|
51
|
+
<div className="flex items-center gap-2 mb-1">
|
|
52
|
+
{spec.specNumber && (
|
|
53
|
+
<span className="text-sm font-mono text-muted-foreground shrink-0">
|
|
54
|
+
#{spec.specNumber.toString().padStart(3, '0')}
|
|
55
|
+
</span>
|
|
56
|
+
)}
|
|
57
|
+
<h4 className="text-sm font-medium truncate">
|
|
58
|
+
{displayTitle}
|
|
59
|
+
</h4>
|
|
60
|
+
</div>
|
|
61
|
+
{displayTitle !== spec.name && (
|
|
62
|
+
<div className="text-xs text-muted-foreground mb-1">
|
|
63
|
+
{spec.name}
|
|
64
|
+
</div>
|
|
65
|
+
)}
|
|
66
|
+
{spec.tags && spec.tags.length > 0 && (
|
|
67
|
+
<div className="flex flex-wrap gap-1">
|
|
68
|
+
{spec.tags.slice(0, 3).map(tag => (
|
|
69
|
+
<Badge key={tag} variant="secondary" className="text-xs">
|
|
70
|
+
{tag}
|
|
71
|
+
</Badge>
|
|
72
|
+
))}
|
|
73
|
+
</div>
|
|
74
|
+
)}
|
|
75
|
+
</div>
|
|
76
|
+
<div className="flex flex-col items-end gap-1 shrink-0">
|
|
77
|
+
{spec.status && (
|
|
78
|
+
<Badge
|
|
79
|
+
variant={
|
|
80
|
+
spec.status === 'complete' ? 'default' :
|
|
81
|
+
spec.status === 'in-progress' ? 'secondary' :
|
|
82
|
+
'outline'
|
|
83
|
+
}
|
|
84
|
+
className="text-xs scale-90"
|
|
85
|
+
>
|
|
86
|
+
{spec.status}
|
|
87
|
+
</Badge>
|
|
88
|
+
)}
|
|
89
|
+
{spec.priority && (
|
|
90
|
+
<Badge
|
|
91
|
+
variant="outline"
|
|
92
|
+
className="text-xs scale-90"
|
|
93
|
+
>
|
|
94
|
+
{spec.priority}
|
|
95
|
+
</Badge>
|
|
96
|
+
)}
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</Link>
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function ActivityItem({ spec, action, time }: { spec: Spec; action: string; time: Date | null }) {
|
|
104
|
+
const displayTitle = spec.title || spec.name;
|
|
105
|
+
const specUrl = `/specs/${spec.name}`;
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<div className="flex items-start gap-3 py-2">
|
|
109
|
+
<div className="w-2 h-2 rounded-full bg-primary mt-2 shrink-0" />
|
|
110
|
+
<div className="flex-1 min-w-0">
|
|
111
|
+
<p className="text-sm">
|
|
112
|
+
<Link
|
|
113
|
+
to={specUrl}
|
|
114
|
+
className="font-medium hover:underline"
|
|
115
|
+
title={spec.name}
|
|
116
|
+
>
|
|
117
|
+
{spec.specNumber && `#${spec.specNumber.toString().padStart(3, '0')} `}
|
|
118
|
+
{displayTitle}
|
|
119
|
+
</Link>
|
|
120
|
+
{' '}
|
|
121
|
+
<span className="text-muted-foreground">{action}</span>
|
|
122
|
+
</p>
|
|
123
|
+
<p className="text-xs text-muted-foreground mt-0.5">
|
|
124
|
+
{formatRelativeTime(time)}
|
|
125
|
+
</p>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export function DashboardPage() {
|
|
132
|
+
const [specs, setSpecs] = useState<Spec[]>([]);
|
|
133
|
+
const [stats, setStats] = useState<Stats | null>(null);
|
|
134
|
+
const [loading, setLoading] = useState(true);
|
|
135
|
+
const [error, setError] = useState<string | null>(null);
|
|
136
|
+
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
async function loadData() {
|
|
139
|
+
try {
|
|
140
|
+
setLoading(true);
|
|
141
|
+
const [specsData, statsData] = await Promise.all([
|
|
142
|
+
api.getSpecs(),
|
|
143
|
+
api.getStats(),
|
|
144
|
+
]);
|
|
145
|
+
|
|
146
|
+
const rawSpecs = Array.isArray(specsData) ? specsData : [];
|
|
147
|
+
|
|
148
|
+
// Transform specs to include dates and spec numbers; guard against missing names
|
|
149
|
+
const transformedSpecs = rawSpecs.map((spec) => {
|
|
150
|
+
const name = spec?.name || '';
|
|
151
|
+
const match = name.match(/^(\d+)-/);
|
|
152
|
+
const specNumber = match ? parseInt(match[1], 10) : null;
|
|
153
|
+
|
|
154
|
+
return {
|
|
155
|
+
...spec,
|
|
156
|
+
name,
|
|
157
|
+
id: name || spec?.title || crypto.randomUUID(),
|
|
158
|
+
specNumber,
|
|
159
|
+
created: spec?.created ? new Date(spec.created) : null,
|
|
160
|
+
updated: spec?.updated ? new Date(spec.updated) : null,
|
|
161
|
+
} as Spec;
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
setSpecs(transformedSpecs);
|
|
165
|
+
setStats(statsData);
|
|
166
|
+
} catch (err) {
|
|
167
|
+
setError(err instanceof Error ? err.message : 'Failed to load dashboard data');
|
|
168
|
+
} finally {
|
|
169
|
+
setLoading(false);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
loadData();
|
|
174
|
+
}, []);
|
|
175
|
+
|
|
176
|
+
if (loading) {
|
|
177
|
+
return (
|
|
178
|
+
<div className="flex items-center justify-center h-screen">
|
|
179
|
+
<Loader2 className="animate-spin h-8 w-8" />
|
|
180
|
+
</div>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (error) {
|
|
185
|
+
return (
|
|
186
|
+
<div className="flex items-center justify-center h-screen">
|
|
187
|
+
<div className="text-center">
|
|
188
|
+
<h2 className="text-2xl font-bold mb-2">Error</h2>
|
|
189
|
+
<p className="text-muted-foreground">{error}</p>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (!stats) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Get specs by status
|
|
200
|
+
const inProgressSpecs = specs
|
|
201
|
+
.filter(spec => spec.status === 'in-progress')
|
|
202
|
+
.sort((a, b) => (b.specNumber || 0) - (a.specNumber || 0))
|
|
203
|
+
.slice(0, 5);
|
|
204
|
+
|
|
205
|
+
const plannedSpecs = specs
|
|
206
|
+
.filter(spec => spec.status === 'planned')
|
|
207
|
+
.sort((a, b) => (b.specNumber || 0) - (a.specNumber || 0))
|
|
208
|
+
.slice(0, 5);
|
|
209
|
+
|
|
210
|
+
const recentlyAdded = specs
|
|
211
|
+
.sort((a, b) => {
|
|
212
|
+
if (!a.created) return 1;
|
|
213
|
+
if (!b.created) return -1;
|
|
214
|
+
return b.created.getTime() - a.created.getTime();
|
|
215
|
+
})
|
|
216
|
+
.slice(0, 5);
|
|
217
|
+
|
|
218
|
+
const recentActivity = specs
|
|
219
|
+
.filter(spec => spec.updated)
|
|
220
|
+
.sort((a, b) => {
|
|
221
|
+
if (!a.updated) return 1;
|
|
222
|
+
if (!b.updated) return -1;
|
|
223
|
+
return b.updated.getTime() - a.updated.getTime();
|
|
224
|
+
})
|
|
225
|
+
.slice(0, 10);
|
|
226
|
+
|
|
227
|
+
const completeCount = stats.by_status?.['complete'] || 0;
|
|
228
|
+
const totalSpecs = stats.total;
|
|
229
|
+
const completionRate = totalSpecs > 0 ? (completeCount / totalSpecs) * 100 : 0;
|
|
230
|
+
|
|
231
|
+
return (
|
|
232
|
+
<div className="min-h-screen bg-background p-4 sm:p-8">
|
|
233
|
+
<div className="max-w-7xl mx-auto space-y-6 sm:space-y-8">
|
|
234
|
+
{/* Header */}
|
|
235
|
+
<div>
|
|
236
|
+
<h1 className="text-3xl sm:text-4xl font-bold tracking-tight">Dashboard</h1>
|
|
237
|
+
<p className="text-muted-foreground mt-2">
|
|
238
|
+
Project overview and recent activity
|
|
239
|
+
</p>
|
|
240
|
+
</div>
|
|
241
|
+
|
|
242
|
+
{/* Stats Cards */}
|
|
243
|
+
<div className="grid grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4">
|
|
244
|
+
{/* Total Specs */}
|
|
245
|
+
<Card className="relative overflow-hidden">
|
|
246
|
+
<div className="absolute inset-0 bg-gradient-to-br from-blue-500/10 to-transparent" />
|
|
247
|
+
<CardHeader className="relative pb-3">
|
|
248
|
+
<div className="flex items-center justify-between">
|
|
249
|
+
<CardTitle className="text-sm font-medium text-muted-foreground">
|
|
250
|
+
Total Specs
|
|
251
|
+
</CardTitle>
|
|
252
|
+
<FileText className="h-5 w-5 text-blue-600" />
|
|
253
|
+
</div>
|
|
254
|
+
</CardHeader>
|
|
255
|
+
<CardContent className="relative">
|
|
256
|
+
<div className="text-3xl font-bold">{totalSpecs}</div>
|
|
257
|
+
</CardContent>
|
|
258
|
+
</Card>
|
|
259
|
+
|
|
260
|
+
{/* Planned */}
|
|
261
|
+
<Card className="relative overflow-hidden">
|
|
262
|
+
<div className="absolute inset-0 bg-gradient-to-br from-purple-500/10 to-transparent" />
|
|
263
|
+
<CardHeader className="relative pb-3">
|
|
264
|
+
<div className="flex items-center justify-between">
|
|
265
|
+
<CardTitle className="text-sm font-medium text-muted-foreground">
|
|
266
|
+
Planned
|
|
267
|
+
</CardTitle>
|
|
268
|
+
<Clock className="h-5 w-5 text-purple-600" />
|
|
269
|
+
</div>
|
|
270
|
+
</CardHeader>
|
|
271
|
+
<CardContent className="relative">
|
|
272
|
+
<div className="text-3xl font-bold">
|
|
273
|
+
{stats.by_status['planned'] || 0}
|
|
274
|
+
</div>
|
|
275
|
+
</CardContent>
|
|
276
|
+
</Card>
|
|
277
|
+
|
|
278
|
+
{/* In Progress */}
|
|
279
|
+
<Card className="relative overflow-hidden">
|
|
280
|
+
<div className="absolute inset-0 bg-gradient-to-br from-orange-500/10 to-transparent" />
|
|
281
|
+
<CardHeader className="relative pb-3">
|
|
282
|
+
<div className="flex items-center justify-between">
|
|
283
|
+
<CardTitle className="text-sm font-medium text-muted-foreground">
|
|
284
|
+
In Progress
|
|
285
|
+
</CardTitle>
|
|
286
|
+
<PlayCircle className="h-5 w-5 text-orange-600" />
|
|
287
|
+
</div>
|
|
288
|
+
</CardHeader>
|
|
289
|
+
<CardContent className="relative">
|
|
290
|
+
<div className="text-3xl font-bold">
|
|
291
|
+
{stats.by_status['in-progress'] || 0}
|
|
292
|
+
</div>
|
|
293
|
+
</CardContent>
|
|
294
|
+
</Card>
|
|
295
|
+
|
|
296
|
+
{/* Completed */}
|
|
297
|
+
<Card className="relative overflow-hidden">
|
|
298
|
+
<div className="absolute inset-0 bg-gradient-to-br from-green-500/10 to-transparent" />
|
|
299
|
+
<CardHeader className="relative pb-3">
|
|
300
|
+
<div className="flex items-center justify-between">
|
|
301
|
+
<CardTitle className="text-sm font-medium text-muted-foreground">
|
|
302
|
+
Completed
|
|
303
|
+
</CardTitle>
|
|
304
|
+
<CheckCircle2 className="h-5 w-5 text-green-600" />
|
|
305
|
+
</div>
|
|
306
|
+
</CardHeader>
|
|
307
|
+
<CardContent className="relative">
|
|
308
|
+
<div className="text-3xl font-bold">{completeCount}</div>
|
|
309
|
+
<p className="text-xs text-muted-foreground mt-1 flex items-center gap-1">
|
|
310
|
+
<TrendingUp className="h-3 w-3" />
|
|
311
|
+
{completionRate.toFixed(1)}% completion rate
|
|
312
|
+
</p>
|
|
313
|
+
</CardContent>
|
|
314
|
+
</Card>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
{/* Main Content Grid */}
|
|
318
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-4 sm:gap-6">
|
|
319
|
+
{/* Recently Added */}
|
|
320
|
+
<Card>
|
|
321
|
+
<CardHeader>
|
|
322
|
+
<CardTitle className="text-lg flex items-center gap-2">
|
|
323
|
+
<Calendar className="h-5 w-5 text-blue-600" />
|
|
324
|
+
Recently Added
|
|
325
|
+
</CardTitle>
|
|
326
|
+
</CardHeader>
|
|
327
|
+
<CardContent className="space-y-1">
|
|
328
|
+
{recentlyAdded.slice(0, 5).map(spec => (
|
|
329
|
+
<SpecListItem key={spec.id} spec={spec} />
|
|
330
|
+
))}
|
|
331
|
+
</CardContent>
|
|
332
|
+
</Card>
|
|
333
|
+
|
|
334
|
+
{/* Planned Specs */}
|
|
335
|
+
<Card>
|
|
336
|
+
<CardHeader>
|
|
337
|
+
<CardTitle className="text-lg flex items-center gap-2">
|
|
338
|
+
<Clock className="h-5 w-5 text-purple-600" />
|
|
339
|
+
Planned ({plannedSpecs.length})
|
|
340
|
+
</CardTitle>
|
|
341
|
+
</CardHeader>
|
|
342
|
+
<CardContent className="space-y-1">
|
|
343
|
+
{plannedSpecs.length > 0 ? (
|
|
344
|
+
plannedSpecs.map(spec => (
|
|
345
|
+
<SpecListItem key={spec.id} spec={spec} />
|
|
346
|
+
))
|
|
347
|
+
) : (
|
|
348
|
+
<p className="text-sm text-muted-foreground py-4 text-center">
|
|
349
|
+
No planned specs
|
|
350
|
+
</p>
|
|
351
|
+
)}
|
|
352
|
+
</CardContent>
|
|
353
|
+
</Card>
|
|
354
|
+
|
|
355
|
+
{/* In Progress Specs */}
|
|
356
|
+
<Card>
|
|
357
|
+
<CardHeader>
|
|
358
|
+
<CardTitle className="text-lg flex items-center gap-2">
|
|
359
|
+
<PlayCircle className="h-5 w-5 text-orange-600" />
|
|
360
|
+
In Progress ({inProgressSpecs.length})
|
|
361
|
+
</CardTitle>
|
|
362
|
+
</CardHeader>
|
|
363
|
+
<CardContent className="space-y-1">
|
|
364
|
+
{inProgressSpecs.length > 0 ? (
|
|
365
|
+
inProgressSpecs.map(spec => (
|
|
366
|
+
<SpecListItem key={spec.id} spec={spec} />
|
|
367
|
+
))
|
|
368
|
+
) : (
|
|
369
|
+
<p className="text-sm text-muted-foreground py-4 text-center">
|
|
370
|
+
No specs in progress
|
|
371
|
+
</p>
|
|
372
|
+
)}
|
|
373
|
+
</CardContent>
|
|
374
|
+
</Card>
|
|
375
|
+
</div>
|
|
376
|
+
|
|
377
|
+
{/* Activity Timeline */}
|
|
378
|
+
<Card>
|
|
379
|
+
<CardHeader>
|
|
380
|
+
<CardTitle className="text-lg">Recent Activity</CardTitle>
|
|
381
|
+
</CardHeader>
|
|
382
|
+
<CardContent>
|
|
383
|
+
<div className="border-l-2 border-muted pl-4 space-y-1">
|
|
384
|
+
{recentActivity.map(spec => (
|
|
385
|
+
<ActivityItem
|
|
386
|
+
key={spec.id}
|
|
387
|
+
spec={spec}
|
|
388
|
+
action="updated"
|
|
389
|
+
time={spec.updated}
|
|
390
|
+
/>
|
|
391
|
+
))}
|
|
392
|
+
</div>
|
|
393
|
+
</CardContent>
|
|
394
|
+
</Card>
|
|
395
|
+
|
|
396
|
+
{/* Quick Actions */}
|
|
397
|
+
<Card>
|
|
398
|
+
<CardHeader>
|
|
399
|
+
<CardTitle className="text-lg">Quick Actions</CardTitle>
|
|
400
|
+
</CardHeader>
|
|
401
|
+
<CardContent>
|
|
402
|
+
<div className="flex flex-wrap gap-3">
|
|
403
|
+
<Button asChild>
|
|
404
|
+
<Link to="/specs">
|
|
405
|
+
<ListIcon className="h-4 w-4 mr-2" />
|
|
406
|
+
View All Specs
|
|
407
|
+
</Link>
|
|
408
|
+
</Button>
|
|
409
|
+
<Button variant="outline" asChild>
|
|
410
|
+
<Link to="/stats">
|
|
411
|
+
<TrendingUp className="h-4 w-4 mr-2" />
|
|
412
|
+
View Stats
|
|
413
|
+
</Link>
|
|
414
|
+
</Button>
|
|
415
|
+
</div>
|
|
416
|
+
</CardContent>
|
|
417
|
+
</Card>
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
);
|
|
421
|
+
}
|