@leanspec/ui 0.2.9 → 0.2.10
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/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/README.md +2 -2
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/lib/glib-2.0/include/glibconfig.h +9 -8
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3} +0 -0
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/package.json +11 -5
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/README.md +46 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/glib-2.0/include/glibconfig.h +221 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-libvips-linuxmusl-x64@1.2.4/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
- package/.next/standalone/node_modules/.pnpm/{@img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64 → @img+sharp-linux-x64@0.34.5/node_modules/@img/sharp-linux-x64}/package.json +13 -7
- package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
- package/.next/standalone/node_modules/.pnpm/@img+sharp-linuxmusl-x64@0.34.5/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
- 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 +11 -0
- package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
- package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
- package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
- package/.next/standalone/packages/ui/.next/routes-manifest.json +88 -0
- 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/page_client-reference-manifest.js +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/_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.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 -20
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -20
- package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +23 -26
- 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 +5 -5
- package/.next/standalone/packages/ui/.next/server/app/api/context/route.js +1 -1
- 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 +1 -1
- 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/local-projects/[id]/route.js.nft.json +1 -1
- 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.nft.json +1 -1
- 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/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js +1 -3
- 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/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +1 -2
- 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 +1 -1
- 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 +1 -2
- 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 +1 -1
- 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/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js +6 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js +1 -3
- 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 +1 -1
- 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/specs/[id]/dependency-graph/route.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route/build-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js +8 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/api/tags/route_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/context/page.js +2 -1
- package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js +2 -1
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/dependencies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/page.js +2 -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/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js +21 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js +21 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +5 -5
- 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.js +6 -5
- 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.js +5 -4
- 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/app-paths-manifest.json +3 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/build-manifest.json +18 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/next-font-manifest.json +6 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page/server-reference-manifest.json +4 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js +21 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js.map +5 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js.nft.json +1 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page_client-reference-manifest.js +2 -0
- package/.next/standalone/packages/ui/.next/server/app/projects/page.js +5 -4
- 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 +24 -25
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +24 -25
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +20 -24
- package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
- 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/specs/[id]/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page.js +2 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js +2 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
- package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +11 -0
- package/.next/standalone/packages/ui/.next/server/chunks/284a8_app_api_projects_[id]_specs_[spec]_dependency-graph_route_actions_f18476ed.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/6681a__next-internal_server_app_api_projects_[id]_dependencies_route_actions_7ac49581.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_context_route_actions_96adca70.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_tags_route_actions_40899744.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_validate_route_actions_b60372c9.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_specs_[id]_metadata_route_actions_139bb09f.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[externals]_better-sqlite3_a1cc22cb._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0afcada7._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0e63a440._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0ec6f9b0._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0edb782a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0fbfea15._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1706515f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1f037512._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__38780e00._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3a535244._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__41f43652._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5081ac6f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__526764b2._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__548e27d4._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5f1e0195._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__71d98924._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__74af400b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8075fe29._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9ce722b4._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9cf3bf21._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2d7cbed._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b1ad8b69._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c7a4906b._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__de15d2aa._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e16f7651._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e2fcb5c6._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e8d9903e._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f6936b89._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_projects_[id]_specs_[spec]_metadata_route_actions_35af9a8c.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_tags_route_actions_64625b2c.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/packages_ui_src_lib_specs_sources_database-source_ts_baa0160d._.js +72 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/730ea_ui__next-internal_server_app_projects_[projectId]_context_page_actions_e4940a48.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/730ea_ui__next-internal_server_app_projects_[projectId]_stats_page_actions_82a85203.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__0f0dade1._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__174e1ca1._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__212c8580._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__2b66bcca._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__a965a67b._.js → [root-of-the-server]__2d9202e8._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__312221a2._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__338c65fe._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__366688dd._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__44b603f9._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__46b71f61._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__665ae766._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__69a0d63a._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__7f55abaa._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a34731d8._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__12b4eb41._.js → [root-of-the-server]__b0d6e2ad._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c158c9a9._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c7735439._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__dcee62dd._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e2c760eb._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ead1539c._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ec5b96a5._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_39562b2a._.js → _170362f4._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_1a642e67._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_adb9d7cb._.js → _22274047._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_85effc18._.js → _2bc76f88._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_fdd7780b._.js → _3f059230._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_58b98a8f._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_59616aa6._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_5e1484f9._.js +7 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8ab6f9ca._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_b303aeea._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_bae6d2b8._.js → _b421ba4a._.js} +3 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_be836d6a._.js +5 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_d840ffc6._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ec637d7c._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f05260d6._.js +4 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/f825c_server_app_projects_[projectId]_dependencies_page_actions_ba2321b8.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_0056f1f2._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_30b0b05a._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_478d57e5._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_151891de._.js → node_modules__pnpm_4e3e790c._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_f5b29533._.js → node_modules__pnpm_8680dc29._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_e175b92a._.js → node_modules__pnpm_94a0b1f5._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_1120b57c._.js → node_modules__pnpm_b4ff5c78._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/{node_modules__pnpm_7791e3b8._.js → node_modules__pnpm_d3262b3d._.js} +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_context_context-client_tsx_4ba99a62._.js +2 -2
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_dependencies_dependencies-client_tsx_0e82443a._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_layout_tsx_86c2ce0f._.js +3 -0
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_page_tsx_6e166c8e._.js +1 -1
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.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-nav-sidebar_tsx_8237ed13._.js +1 -1
- 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/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/0c7bbb59865774a1.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/0fe978002ba489fb.js +3 -0
- package/.next/standalone/packages/ui/.next/static/chunks/1169d4ac8f9df687.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/1e0689744f87e958.js +2 -0
- package/.next/standalone/packages/ui/.next/static/chunks/241b6b1c83610ebf.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
- package/.next/{static/chunks/6d938a49daa10208.js → standalone/packages/ui/.next/static/chunks/4610aea3ca2e69eb.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/6d7922838a3513a4.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/781328ee279ffc41.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/{942cf63b4032c808.js → 7df6308e6cfcf902.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/840c6743a491a398.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/937cb3894a606899.js +5 -0
- package/.next/standalone/packages/ui/.next/static/chunks/9cf644b700f37825.css +1 -0
- package/.next/{static/chunks/a3d7e1be47de010b.js → standalone/packages/ui/.next/static/chunks/bbd498aa5689c057.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
- package/.next/{static/chunks/979625373d5474b6.js → standalone/packages/ui/.next/static/chunks/c26909a25ca9fc9b.js} +1 -1
- package/.next/{static/chunks/e3bc96a996e2a314.js → standalone/packages/ui/.next/static/chunks/d26f4109b44eb240.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/{3276ca6fd9005903.js → d52a048b511c32bd.js} +1 -1
- package/.next/standalone/packages/ui/.next/static/chunks/dbce73f7087f2470.js +10 -0
- package/.next/standalone/packages/ui/.next/static/chunks/e399b4afc7936907.js +1 -0
- package/.next/standalone/packages/ui/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
- package/.next/standalone/packages/ui/dist/BUILD_ID +1 -0
- package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +1 -9
- package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +1 -1
- package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +3 -7
- package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +3 -5
- package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +1 -2
- package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +3 -8
- package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +259 -73
- package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +3 -5
- package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +3 -5
- package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +3 -5
- package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +23 -33
- package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +3 -7
- package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +14 -25
- package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +3 -0
- package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +5 -0
- package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +1 -0
- package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +4 -0
- package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +2 -0
- package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +19 -0
- package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +3 -0
- package/.next/standalone/packages/ui/package.json +1 -1
- package/.next/standalone/packages/ui/server.js +1 -1
- package/.next/standalone/packages/ui/src/app/api/dependencies/route.ts +4 -67
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/context/route.ts +39 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/dependencies/route.ts +20 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/route.ts +25 -9
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/dependency-graph/route.ts +129 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/metadata/route.ts +170 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/route.ts +14 -14
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/status/route.ts +9 -2
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/route.ts +9 -8
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/tags/route.ts +25 -0
- package/.next/standalone/packages/ui/src/app/api/projects/[id]/validate/route.ts +49 -0
- package/.next/standalone/packages/ui/src/app/api/projects/route.ts +18 -5
- package/.next/standalone/packages/ui/src/app/api/specs/[id]/dependency-graph/route.test.ts +0 -2
- package/.next/standalone/packages/ui/src/app/api/specs/[id]/dependency-graph/route.ts +0 -15
- package/.next/standalone/packages/ui/src/app/api/specs/[id]/metadata/route.ts +184 -0
- package/.next/standalone/packages/ui/src/app/api/tags/route.ts +16 -0
- package/.next/standalone/packages/ui/src/app/context/page.tsx +22 -0
- package/.next/standalone/packages/ui/src/app/dashboard-client.tsx +43 -62
- package/.next/standalone/packages/ui/src/app/dependencies/constants.ts +9 -8
- package/.next/standalone/packages/ui/src/app/dependencies/dependencies-client.tsx +95 -20
- package/.next/standalone/packages/ui/src/app/dependencies/page.tsx +25 -13
- package/.next/standalone/packages/ui/src/app/dependencies/spec-node.tsx +8 -8
- package/.next/standalone/packages/ui/src/app/dependencies/spec-sidebar.tsx +40 -67
- package/.next/standalone/packages/ui/src/app/page.tsx +24 -0
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/context/page.tsx +41 -0
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/dependencies/page.tsx +30 -0
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/page.tsx +18 -2
- package/.next/standalone/packages/ui/src/app/projects/[projectId]/stats/page.tsx +24 -0
- package/.next/standalone/packages/ui/src/app/projects/layout.tsx +7 -0
- package/.next/standalone/packages/ui/src/app/projects/page.tsx +375 -107
- package/.next/standalone/packages/ui/src/app/specs/[id]/page.tsx +24 -1
- package/.next/standalone/packages/ui/src/app/specs/page.tsx +22 -0
- package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +28 -18
- package/.next/standalone/packages/ui/src/app/stats/page.tsx +22 -0
- package/.next/standalone/packages/ui/src/components/color-picker.tsx +73 -0
- package/.next/standalone/packages/ui/src/components/create-project-dialog.tsx +3 -5
- package/.next/standalone/packages/ui/src/components/directory-picker.tsx +1 -0
- package/.next/standalone/packages/ui/{dist/standalone/packages/web/src/components/spec-metadata.tsx → src/components/editable-spec-metadata.tsx} +46 -30
- package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +28 -6
- package/.next/standalone/packages/ui/src/components/markdown-link.tsx +15 -8
- package/.next/standalone/packages/ui/src/components/priority-editor.tsx +153 -0
- package/.next/standalone/packages/ui/src/components/project-switcher.tsx +74 -10
- package/.next/standalone/packages/ui/src/components/quick-search.tsx +3 -1
- package/.next/standalone/packages/ui/src/components/spec-dependency-graph.tsx +13 -52
- package/.next/standalone/packages/ui/src/components/spec-detail-client.tsx +58 -30
- package/.next/standalone/packages/ui/src/components/spec-detail-wrapper.tsx +3 -4
- package/.next/standalone/packages/ui/src/components/specs-nav-sidebar.tsx +8 -6
- package/.next/standalone/packages/ui/src/components/status-editor.tsx +153 -0
- package/.next/standalone/packages/ui/src/components/tags-editor.tsx +238 -0
- package/.next/standalone/packages/ui/src/components/ui/command.tsx +1 -1
- package/.next/standalone/packages/ui/src/contexts/project-context.tsx +24 -0
- package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +230 -40
- package/.next/standalone/packages/ui/src/lib/dependency-graph.ts +0 -13
- package/.next/standalone/packages/ui/src/lib/projects/registry.ts +1 -1
- package/.next/standalone/packages/ui/src/lib/specs/sources/multi-project-source.ts +21 -5
- package/.next/standalone/packages/ui/src/types/specs.ts +6 -4
- package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
- package/.next/static/chunks/0c7bbb59865774a1.js +1 -0
- package/.next/static/chunks/0fe978002ba489fb.js +3 -0
- package/.next/static/chunks/1169d4ac8f9df687.js +1 -0
- package/.next/static/chunks/1e0689744f87e958.js +2 -0
- package/.next/static/chunks/241b6b1c83610ebf.js +1 -0
- package/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/6d938a49daa10208.js → static/chunks/4610aea3ca2e69eb.js} +1 -1
- package/.next/static/chunks/6d7922838a3513a4.js +1 -0
- package/.next/static/chunks/781328ee279ffc41.js +1 -0
- package/.next/static/chunks/{942cf63b4032c808.js → 7df6308e6cfcf902.js} +1 -1
- package/.next/static/chunks/840c6743a491a398.js +1 -0
- package/.next/static/chunks/937cb3894a606899.js +5 -0
- package/.next/static/chunks/9cf644b700f37825.css +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/a3d7e1be47de010b.js → static/chunks/bbd498aa5689c057.js} +1 -1
- package/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
- package/.next/{standalone/packages/ui/.next/static/chunks/979625373d5474b6.js → static/chunks/c26909a25ca9fc9b.js} +1 -1
- package/.next/{standalone/packages/ui/.next/static/chunks/e3bc96a996e2a314.js → static/chunks/d26f4109b44eb240.js} +1 -1
- package/.next/static/chunks/{3276ca6fd9005903.js → d52a048b511c32bd.js} +1 -1
- package/.next/static/chunks/dbce73f7087f2470.js +10 -0
- package/.next/static/chunks/e399b4afc7936907.js +1 -0
- package/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
- package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_buildManifest.js +11 -0
- package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_clientMiddlewareManifest.json +1 -0
- package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_ssgManifest.js +1 -0
- package/package.json +2 -2
- package/.next/standalone/node_modules/.pnpm/@img+sharp-darwin-arm64@0.34.5/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__126dea7b._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__65667b70._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__675a763e._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__803d07f0._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8233e09b._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__84cdc14a._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8a9ab1a3._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__aa677b0d._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__ae726e9c._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b0969111._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__bdc3963a._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f06435b0._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f5c6d6b8._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fb91986f._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_db_index_ts_556307fa._.js +0 -74
- package/.next/standalone/packages/ui/.next/server/chunks/packages_ui_src_lib_specs_sources_database-source_ts_0bd881ee._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__3c77d95b._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__50122e7e._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__8608a6fa._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__88a691ee._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__bdbbba01._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__cc589a54._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__daedd80e._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__dc176c61._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_03aa8d19._.js +0 -7
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +0 -5
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_3b617676._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8cec504f._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ea899b87._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/_fe120f8a._.js +0 -3
- package/.next/standalone/packages/ui/.next/server/chunks/ssr/node_modules__pnpm_1c916fe3._.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/static/chunks/094cf9f4e3553261.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/1c015eb9eaaf9f9c.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/1d36660b2877d213.js +0 -3
- package/.next/standalone/packages/ui/.next/static/chunks/20f4141ccb5d4eb4.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/2c85b8059e42248a.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/3b6b058ebd14dbed.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/4d29ca0fa6843070.js +0 -2
- package/.next/standalone/packages/ui/.next/static/chunks/59854b15bf046467.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/5fd8101e32b076b1.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/a33f10af6abef4df.js +0 -10
- package/.next/standalone/packages/ui/.next/static/chunks/b7f19087afe1d2c9.css +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/ddd87cd0d26bc2f5.js +0 -1
- package/.next/standalone/packages/ui/.next/static/chunks/eeec245955b3b600.js +0 -5
- package/.next/standalone/packages/ui/dist/standalone/packages/web/components.json +0 -20
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0000_reflective_thena.sql +0 -59
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/0001_fresh_carmella_unuscione.sql +0 -1
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0000_snapshot.json +0 -427
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/0001_snapshot.json +0 -436
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle/meta/_journal.json +0 -20
- package/.next/standalone/packages/ui/dist/standalone/packages/web/drizzle.config.ts +0 -10
- package/.next/standalone/packages/ui/dist/standalone/packages/web/eslint.config.mjs +0 -18
- package/.next/standalone/packages/ui/dist/standalone/packages/web/next.config.ts +0 -7
- package/.next/standalone/packages/ui/dist/standalone/packages/web/postcss.config.mjs +0 -8
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/[id]/specs/route.ts +0 -23
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/projects/route.ts +0 -19
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/revalidate/route.ts +0 -63
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.test.ts +0 -51
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/dependency-graph/route.ts +0 -171
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/route.ts +0 -36
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/specs/[id]/subspecs/[file]/route.ts +0 -46
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/api/stats/route.ts +0 -19
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/board-client.tsx +0 -162
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/loading.tsx +0 -43
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/board/page.tsx +0 -18
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/dashboard-client.tsx +0 -364
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/error.tsx +0 -43
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/globals.css +0 -531
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/home-client.tsx +0 -277
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/layout.tsx +0 -70
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/loading.tsx +0 -87
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/not-found.tsx +0 -27
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/page.tsx +0 -18
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/loading.tsx +0 -5
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/[id]/page.tsx +0 -43
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/page.tsx +0 -18
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/specs/specs-client.tsx +0 -425
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/page.tsx +0 -18
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/app/stats/stats-client.tsx +0 -283
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/back-to-top.tsx +0 -46
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/empty-state.tsx +0 -52
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/main-sidebar.tsx +0 -175
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.test.ts +0 -96
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/markdown-link.tsx +0 -95
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/navigation.tsx +0 -210
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/priority-badge.tsx +0 -53
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/quick-search.tsx +0 -180
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/skeletons.tsx +0 -119
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-dependency-graph.tsx +0 -369
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-client.tsx +0 -372
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-loading-shell.tsx +0 -42
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-detail-wrapper.tsx +0 -70
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-sidebar.tsx +0 -127
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/spec-timeline.tsx +0 -186
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/specs-nav-sidebar.tsx +0 -561
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/status-badge.tsx +0 -53
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/sub-spec-tabs.tsx +0 -143
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/table-of-contents.tsx +0 -130
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-provider.tsx +0 -11
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/theme-toggle.tsx +0 -37
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/avatar.tsx +0 -50
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/badge.tsx +0 -36
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/breadcrumb.tsx +0 -110
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/button.tsx +0 -57
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/card.tsx +0 -76
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/command.tsx +0 -153
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/dialog.tsx +0 -122
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/input.tsx +0 -24
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/select.tsx +0 -159
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/separator.tsx +0 -31
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/skeleton.tsx +0 -15
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tabs.tsx +0 -55
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/toast.tsx +0 -30
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/components/ui/tooltip.tsx +0 -32
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/date-utils.ts +0 -76
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/index.ts +0 -42
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/migrate.ts +0 -18
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/queries.ts +0 -114
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/schema.ts +0 -123
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/seed.ts +0 -156
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/db/service-queries.ts +0 -216
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/dependency-graph.ts +0 -105
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/service.ts +0 -120
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/database-source.ts +0 -94
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/sources/filesystem-source.ts +0 -249
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/specs/types.ts +0 -55
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/stores/specs-sidebar-store.ts +0 -152
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/sub-specs.ts +0 -171
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/lib/utils.ts +0 -17
- package/.next/standalone/packages/ui/dist/standalone/packages/web/src/types/specs.ts +0 -18
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tailwind.config.ts +0 -58
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.json +0 -34
- package/.next/standalone/packages/ui/dist/standalone/packages/web/tsconfig.tsbuildinfo +0 -1
- package/.next/standalone/packages/ui/dist/standalone/packages/web/vitest.config.ts +0 -14
- package/.next/standalone/packages/ui/dist/standalone/specs/094-ai-chatbot-web-integration/README.md +0 -332
- package/.next/standalone/packages/ui/dist/standalone/specs/095-pr-migration-verification/README.md +0 -339
- package/.next/standalone/packages/ui/dist/standalone/specs/096-docs-beginner-first-reorg/README.md +0 -399
- package/.next/standalone/packages/ui/dist/standalone/specs/097-dag-visualization-library/README.md +0 -525
- package/.next/standalone/packages/ui/dist/standalone/specs/098-github-multi-project-integration/README.md +0 -387
- package/.next/standalone/packages/ui/dist/standalone/specs/099-enhanced-dependency-commands-cli-mcp/README.md +0 -613
- package/.next/standalone/packages/ui/dist/standalone/specs/100-release-process-typecheck-failure/README.md +0 -266
- package/.next/standalone/packages/ui/dist/standalone/specs/101-sidebar-scroll-position-drift/README.md +0 -100
- package/.next/standalone/packages/ui/dist/standalone/specs/102-mcp-wrapper-package/README.md +0 -172
- package/.next/static/chunks/094cf9f4e3553261.js +0 -1
- package/.next/static/chunks/1c015eb9eaaf9f9c.js +0 -1
- package/.next/static/chunks/1d36660b2877d213.js +0 -3
- package/.next/static/chunks/20f4141ccb5d4eb4.js +0 -1
- package/.next/static/chunks/2c85b8059e42248a.js +0 -1
- package/.next/static/chunks/3b6b058ebd14dbed.js +0 -1
- package/.next/static/chunks/4d29ca0fa6843070.js +0 -2
- package/.next/static/chunks/59854b15bf046467.js +0 -1
- package/.next/static/chunks/5fd8101e32b076b1.js +0 -1
- package/.next/static/chunks/a33f10af6abef4df.js +0 -10
- package/.next/static/chunks/b7f19087afe1d2c9.css +0 -1
- package/.next/static/chunks/ddd87cd0d26bc2f5.js +0 -1
- package/.next/static/chunks/eeec245955b3b600.js +0 -5
- /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/lib/index.js +0 -0
- /package/.next/standalone/node_modules/.pnpm/{@img+sharp-libvips-darwin-arm64@1.2.4/node_modules/@img/sharp-libvips-darwin-arm64 → @img+sharp-libvips-linux-x64@1.2.4/node_modules/@img/sharp-libvips-linux-x64}/versions.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{8PwFWS-09QjFSbDbfp15t → s9uUE9DnvJD2xIz-iBGMe}/_buildManifest.js +0 -0
- /package/.next/standalone/packages/ui/.next/static/{8PwFWS-09QjFSbDbfp15t → s9uUE9DnvJD2xIz-iBGMe}/_clientMiddlewareManifest.json +0 -0
- /package/.next/standalone/packages/ui/.next/static/{8PwFWS-09QjFSbDbfp15t → s9uUE9DnvJD2xIz-iBGMe}/_ssgManifest.js +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/f864aa7e7061c0600e35cf3d879b27cf.txt +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/favicon.ico +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/file.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/github-mark-white.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/github-mark.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/globe.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/icon.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo-dark-bg.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo-with-bg.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/logo.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/next.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/vercel.svg +0 -0
- /package/.next/standalone/packages/ui/dist/{standalone/packages/web/public → public}/window.svg +0 -0
- /package/.next/{static/8PwFWS-09QjFSbDbfp15t → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_buildManifest.js +0 -0
- /package/.next/{static/8PwFWS-09QjFSbDbfp15t → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_clientMiddlewareManifest.json +0 -0
- /package/.next/{static/8PwFWS-09QjFSbDbfp15t → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[113142,a=>{"use strict";var b=a.i(40352),c=a.i(936883),d=a.i(920378),e=a.i(681612),f=a.i(980096),g=a.i(837717),h=a.i(406334),i=a.i(227725),j=a.i(915929),k=a.i(793090),l=a.i(800966),m=a.i(659358),n=a.i(297557),o=a.i(262936),p=a.i(307840),q=a.i(730702),r=a.i(615268),s=a.i(915970),t=a.i(404620),u=a.i(709211),v=a.i(633093),w=a.i(141270),x=a.i(882479),y=a.i(322570),z=a.i(687052),A=a.i(890075);a.i(294783);var B=a.i(156916);let C={planned:{icon:n.Clock,title:"Planned",colorClass:"text-blue-600 dark:text-blue-400",bgClass:"bg-blue-50 dark:bg-blue-900/20",borderClass:"border-blue-200 dark:border-blue-800"},"in-progress":{icon:m.PlayCircle,title:"In Progress",colorClass:"text-orange-600 dark:text-orange-400",bgClass:"bg-orange-50 dark:bg-orange-900/20",borderClass:"border-orange-200 dark:border-orange-800"},complete:{icon:l.CheckCircle2,title:"Complete",colorClass:"text-green-600 dark:text-green-400",bgClass:"bg-green-50 dark:bg-green-900/20",borderClass:"border-green-200 dark:border-green-800"},archived:{icon:o.Archive,title:"Archived",colorClass:"text-gray-600 dark:text-gray-400",bgClass:"bg-gray-50 dark:bg-gray-900/20",borderClass:"border-gray-200 dark:border-gray-800"}},D=["planned","in-progress","complete","archived"];function E({initialSpecs:a,projectId:d}){let f=(0,e.useSearchParams)(),g=(0,e.useRouter)(),[l,m]=(0,c.useState)(a),[n,o]=(0,c.useState)({}),[r,s]=(0,c.useState)(""),[v,w]=(0,c.useState)("all"),[x,y]=(0,c.useState)("all"),[A,D]=(0,c.useState)("id-desc"),[E,H]=(0,c.useState)(!1),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(()=>{let a=f.get("view");return"board"===a||"list"===a?a:"list"}),M=(0,c.useRef)(!0);(0,c.useEffect)(()=>{m(a)},[a]);let N=(0,c.useCallback)(async(a,b)=>{if(a.status===b)return;let c=a.status;o(b=>({...b,[a.id]:!0})),m(c=>c.map(c=>c.id===a.id?{...c,status:b}:c));try{let c=d?`/api/projects/${d}/specs/${encodeURIComponent(a.specName)}/status`:`/api/specs/${encodeURIComponent(a.specName)}/status`,e=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:b})});if(!e.ok){let a=await e.text();throw Error(a||"Failed to update spec status")}let f=a.specNumber?`#${a.specNumber}`:a.specName;B.toast.success(`Moved ${f} to ${C[b].title}`)}catch(b){console.error("Failed to update spec status",b),m(b=>b.map(b=>b.id===a.id?{...b,status:c}:b)),B.toast.error("Unable to update status. Please try again.")}finally{o(b=>{let c={...b};return delete c[a.id],c})}},[]);(0,c.useEffect)(()=>{"archived"===v&&"board"===K&&H(!0)},[v,K]),(0,c.useEffect)(()=>{if(M.current){M.current=!1;return}let a=new URLSearchParams(window.location.search);"board"===K?a.set("view","board"):a.delete("view");let b=a.toString(),c=b?`?${b}`:"";g.replace(`/specs${c}`,{scroll:!1})},[K,g]);let O=(0,c.useMemo)(()=>{let a=[...l.filter(a=>{let b=!r||a.title?.toLowerCase().includes(r.toLowerCase())||a.specName.toLowerCase().includes(r.toLowerCase())||a.tags?.some(a=>a.toLowerCase().includes(r.toLowerCase())),c="all"===v?"list"!==K||"archived"!==a.status:a.status===v,d="all"===x||a.priority===x;return b&&c&&d})];switch(A){case"id-desc":a.sort((a,b)=>(b.specNumber||0)-(a.specNumber||0));break;case"id-asc":a.sort((a,b)=>(a.specNumber||0)-(b.specNumber||0));break;case"updated-desc":a.sort((a,b)=>a.updatedAt?b.updatedAt?b.updatedAt.getTime()-a.updatedAt.getTime():-1:1);break;case"title-asc":a.sort((a,b)=>{let c=(a.title||a.specName).toLowerCase(),d=(b.title||b.specName).toLowerCase();return c.localeCompare(d)})}return a},[l,r,v,x,A,K]);return(0,b.jsx)("div",{className:"h-[calc(100vh-3.5rem)] flex flex-col overflow-hidden bg-background p-2 sm:p-4",children:(0,b.jsxs)("div",{className:(0,z.cn)("flex flex-col h-full mx-auto transition-all duration-300",I?"w-full":"max-w-7xl w-full"),children:[(0,b.jsx)("div",{className:"flex-none mb-3 sm:mb-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3 md:gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h1",{className:"text-lg sm:text-xl md:text-2xl font-bold tracking-tight truncate",children:"Specifications"}),(0,b.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:[O.length," specs"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 sm:gap-2 flex-shrink-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-0.5 sm:gap-1 bg-muted/50 p-0.5 sm:p-1 rounded-lg",children:[(0,b.jsxs)(i.Button,{variant:"list"===K?"secondary":"ghost",size:"sm",onClick:()=>L("list"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"List view",children:[(0,b.jsx)(q.List,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,b.jsx)("span",{className:"hidden lg:inline ml-2",children:"List"})]}),(0,b.jsxs)(i.Button,{variant:"board"===K?"secondary":"ghost",size:"sm",onClick:()=>L("board"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"Board view",children:[(0,b.jsx)(p.LayoutGrid,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,b.jsx)("span",{className:"hidden lg:inline ml-2",children:"Board"})]})]}),(0,b.jsx)(i.Button,{variant:"ghost",size:"icon",onClick:()=>J(!I),className:"hidden md:flex h-8 w-8 sm:h-10 sm:w-10 text-muted-foreground hover:text-foreground",title:I?"Exit wide mode":"Enter wide mode",children:I?(0,b.jsx)(u.Minimize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}):(0,b.jsx)(t.Maximize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"})})]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"relative w-full",children:[(0,b.jsx)(k.Search,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 sm:h-4 sm:w-4 text-muted-foreground pointer-events-none"}),(0,b.jsx)(h.Input,{placeholder:"Search specs...",value:r,onChange:a=>s(a.target.value),className:"pl-8 sm:pl-9 h-9 sm:h-10 w-full text-sm"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 overflow-x-auto snap-x snap-mandatory pb-1 -mx-2 px-2 sm:mx-0 sm:px-0 sm:pb-0 scrollbar-thin",children:[(0,b.jsxs)(j.Select,{value:v,onValueChange:a=>w(a),children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Status"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"all",children:"All Status"}),(0,b.jsx)(j.SelectItem,{value:"planned",children:"Planned"}),(0,b.jsx)(j.SelectItem,{value:"in-progress",children:"In Progress"}),(0,b.jsx)(j.SelectItem,{value:"complete",children:"Complete"}),(0,b.jsx)(j.SelectItem,{value:"archived",children:"Archived"})]})]}),(0,b.jsxs)(j.Select,{value:x,onValueChange:y,children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Priority"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"all",children:"All Priority"}),(0,b.jsx)(j.SelectItem,{value:"critical",children:"Critical"}),(0,b.jsx)(j.SelectItem,{value:"high",children:"High"}),(0,b.jsx)(j.SelectItem,{value:"medium",children:"Medium"}),(0,b.jsx)(j.SelectItem,{value:"low",children:"Low"})]})]}),(0,b.jsxs)(j.Select,{value:A,onValueChange:a=>D(a),children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[130px] sm:w-[170px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Sort by"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"id-desc",children:"Newest First"}),(0,b.jsx)(j.SelectItem,{value:"id-asc",children:"Oldest First"}),(0,b.jsx)(j.SelectItem,{value:"updated-desc",children:"Recently Updated"}),(0,b.jsx)(j.SelectItem,{value:"title-asc",children:"Title (A-Z)"})]})]})]})]})]})}),(0,b.jsx)("div",{className:(0,z.cn)("flex-1 min-h-0","board"===K?"overflow-x-auto overflow-y-hidden":"overflow-y-auto"),children:"list"===K?(0,b.jsx)("div",{className:"w-full",children:(0,b.jsx)(F,{specs:O})}):(0,b.jsx)(G,{specs:O,onStatusChange:N,pendingSpecIds:n,showArchived:E,onToggleArchived:()=>H(!E)})})]})})}function F({specs:a}){return(0,b.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:gap-3 md:gap-4 pb-2 sm:pb-4 md:pb-8",children:a.map(a=>{let c={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[a.priority]||"border-l-gray-300",e=a.relationships&&(a.relationships.dependsOn.length>0||a.relationships.related.length>0),h=!!(a.subSpecsCount&&a.subSpecsCount>0);return(0,b.jsxs)(f.Card,{className:(0,z.cn)("hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.01] active:scale-[0.99] border-l-4 cursor-pointer touch-manipulation",c),onClick:()=>window.location.href=`/specs/${a.specNumber||a.id}`,children:[(0,b.jsx)(f.CardHeader,{className:"pb-2 sm:pb-2.5 md:pb-3 px-3 sm:px-4 md:px-6 pt-3 sm:pt-4 md:pt-6",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-start md:justify-between md:gap-4",children:[(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsx)(d.default,{href:`/specs/${a.specNumber||a.id}`,children:(0,b.jsxs)(f.CardTitle,{className:"text-sm sm:text-base md:text-lg font-semibold hover:text-primary transition-colors flex items-start flex-wrap gap-1.5 sm:gap-2 leading-snug sm:leading-normal",children:[a.specNumber?(0,b.jsxs)("span",{className:"font-mono text-xs sm:text-sm md:text-base font-normal text-muted-foreground flex-shrink-0",children:["#",a.specNumber.toString().padStart(3,"0")]}):null,(0,b.jsx)("span",{className:"flex-1 break-words",children:a.title||a.specName})]})}),a.title&&a.title!==a.specName&&(0,b.jsx)("p",{className:"text-[11px] sm:text-xs font-mono text-muted-foreground mt-1 sm:mt-1.5 truncate",children:a.specName})]}),(0,b.jsxs)("div",{className:"flex gap-1.5 sm:gap-2 flex-wrap md:shrink-0",children:[a.status&&(0,b.jsx)(x.StatusBadge,{status:a.status}),a.priority&&(0,b.jsx)(y.PriorityBadge,{priority:a.priority})]})]})}),(0,b.jsx)(f.CardContent,{className:"px-3 sm:px-4 md:px-6 pb-2.5 sm:pb-3 md:pb-6 pt-0",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-4",children:[(0,b.jsx)("div",{className:"flex items-center gap-2 sm:gap-3 md:gap-4 text-[11px] sm:text-xs md:text-sm text-muted-foreground flex-wrap",children:a.updatedAt||h||e?(0,b.jsxs)(b.Fragment,{children:[a.updatedAt&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(n.Clock,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:["Updated ",(0,A.formatRelativeTime)(a.updatedAt)]})]}),h&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(r.FileText,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:["+",a.subSpecsCount," files"]})]}),e&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(s.GitBranch,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:[a.relationships.dependsOn.length>0&&`${a.relationships.dependsOn.length} deps`,a.relationships.dependsOn.length>0&&a.relationships.related.length>0&&", ",a.relationships.related.length>0&&`${a.relationships.related.length} related`]})]})]}):(0,b.jsx)("span",{className:"invisible hidden md:inline",children:"No metadata"})}),a.tags&&a.tags.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 sm:gap-1.5 md:gap-2 md:justify-end md:shrink-0",children:a.tags.map(a=>(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs font-mono text-muted-foreground hover:text-foreground transition-colors h-5 sm:h-auto px-1.5 sm:px-2",children:a},a))})]})})]},a.id)})})}function G({specs:a,onStatusChange:e,pendingSpecIds:h,showArchived:i,onToggleArchived:j}){let[k,l]=(0,c.useState)(null),[m,n]=(0,c.useState)(null),[o,p]=(0,c.useState)({}),q=(0,c.useMemo)(()=>D.map(b=>({status:b,config:C[b],specs:a.filter(a=>a.status===b)})),[a]),r=(0,c.useMemo)(()=>{let b=new Map;return a.forEach(a=>b.set(a.id,a)),b},[a]),s=(0,c.useCallback)((a,b)=>{b.dataTransfer.setData("text/plain",a),b.dataTransfer.effectAllowed="move",l(a)},[]),t=(0,c.useCallback)(()=>{l(null),n(null)},[]),u=(0,c.useCallback)((a,b)=>{k&&(b.preventDefault(),b.dataTransfer.dropEffect="move",n(a))},[k]),x=(0,c.useCallback)((a,b)=>{if(!k)return;let c=b.relatedTarget;c&&b.currentTarget.contains(c)||n(b=>b===a?null:b)},[k]),A=(0,c.useCallback)((a,b)=>{b.preventDefault();let c=b.dataTransfer.getData("text/plain")||k;if(!c)return void t();let d=r.get(c);d&&d.status!==a&&e(d,a),t()},[k,t,e,r]);return(0,b.jsx)("div",{className:"flex flex-col md:flex-row gap-3 sm:gap-4 md:gap-6 h-full pb-2 md:snap-x md:snap-mandatory overflow-y-auto md:overflow-y-hidden md:overflow-x-auto",children:q.map(a=>{let c=a.config.icon,e="archived"===a.status,l=o[a.status];return(0,b.jsxs)("div",{className:(0,z.cn)("flex flex-col flex-1 snap-start","h-auto md:h-full w-full md:w-auto flex-shrink-0",e&&!i?"md:w-12 md:sm:w-14 md:min-w-[3rem] md:sm:min-w-[3.5rem] flex-none":"md:min-w-[260px] md:sm:min-w-[280px] md:md:min-w-[300px]"),children:[(0,b.jsx)("div",{className:(0,z.cn)("flex-none mb-3 sm:mb-4 rounded-lg border-2 bg-background transition-all touch-manipulation",a.config.bgClass,a.config.borderClass,e?"cursor-pointer hover:opacity-80 active:opacity-70":"",e&&!i?"py-4 sm:py-6 px-1.5 sm:px-2":"p-2.5 sm:p-3","md:cursor-default cursor-pointer"),onClick:()=>{if(e)j();else{var b;window.innerWidth<768&&(b=a.status,p(a=>({...a,[b]:!a[b]})))}},children:(0,b.jsxs)("h2",{className:(0,z.cn)("text-base sm:text-lg font-semibold flex items-center gap-1.5 sm:gap-2",a.config.colorClass,e&&!i&&"flex-col text-xs sm:text-sm gap-2 sm:gap-3"),children:[(0,b.jsx)(c,{className:"h-4 w-4 sm:h-5 sm:w-5 flex-shrink-0"}),e&&!i?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"vertical-text text-xs sm:text-sm whitespace-nowrap",children:a.config.title}),(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1 sm:px-2 h-4 sm:h-5",children:a.specs.length})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"truncate flex-1",children:a.config.title}),(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1.5 sm:px-2 h-4 sm:h-5 flex-shrink-0",children:a.specs.length}),(0,b.jsx)("div",{className:"md:hidden ml-2 text-muted-foreground/50",children:l?(0,b.jsx)(w.ChevronRight,{className:"h-4 w-4"}):(0,b.jsx)(v.ChevronDown,{className:"h-4 w-4"})})]})]})}),(!e||i)&&!l&&(0,b.jsxs)("div",{className:(0,z.cn)("space-y-2 sm:space-y-2.5 md:space-y-3 flex-1 rounded-xl border border-transparent p-1 transition-colors overflow-y-auto min-h-0 scrollbar-thin",k&&"border-dashed border-muted-foreground/40",k&&m===a.status&&"bg-muted/40 border-primary/50"),onDragOver:b=>u(a.status,b),onDragLeave:b=>x(a.status,b),onDrop:b=>A(a.status,b),children:[a.specs.map(a=>{let c={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[a.priority]||"border-l-gray-300",e=!!h[a.id];return(0,b.jsxs)(f.Card,{draggable:!e,onDragStart:b=>{e?b.preventDefault():s(a.id,b)},onDragEnd:t,"aria-disabled":e,className:(0,z.cn)("relative hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.02] active:scale-[0.99] border-l-4 cursor-pointer group flex flex-col touch-manipulation",c,e&&"opacity-60 cursor-wait"),onClick:()=>window.location.href=`/specs/${a.specNumber||a.id}`,children:[e&&(0,b.jsx)("div",{className:"absolute inset-0 rounded-lg bg-background/80 flex items-center justify-center text-xs sm:text-sm font-medium z-10",children:"Updating..."}),(0,b.jsxs)(f.CardHeader,{className:"p-3 sm:p-4 pb-1.5 sm:pb-2 space-y-1 sm:space-y-1.5",children:[(0,b.jsx)("div",{className:"flex items-center justify-between",children:(0,b.jsx)("span",{className:"font-mono text-[10px] sm:text-xs text-muted-foreground/70 group-hover:text-primary/60 transition-colors",children:a.specNumber?`#${a.specNumber}`:""})}),(0,b.jsx)(d.default,{href:`/specs/${a.specNumber||a.id}`,className:"block",children:(0,b.jsx)(f.CardTitle,{className:"text-xs sm:text-sm font-semibold leading-snug hover:text-primary transition-colors line-clamp-3",children:a.title||a.specName})})]}),(0,b.jsx)(f.CardContent,{className:"p-3 sm:p-4 pt-1.5 sm:pt-2 flex-1 flex flex-col justify-end",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3",children:[a.title&&a.title!==a.specName&&(0,b.jsx)("p",{className:"text-[10px] sm:text-xs font-mono text-muted-foreground truncate opacity-70",children:a.specName}),(0,b.jsxs)("div",{className:"flex items-center justify-between gap-1.5 sm:gap-2 pt-0.5 sm:pt-1",children:[a.priority?(0,b.jsx)(y.PriorityBadge,{priority:a.priority}):(0,b.jsx)("div",{}),a.tags&&a.tags.length>0&&(0,b.jsxs)("div",{className:"flex flex-wrap gap-0.5 sm:gap-1 justify-end",children:[a.tags.slice(0,2).map(a=>(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:a},a)),a.tags.length>2&&(0,b.jsxs)(g.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:["+",a.tags.length-2]})]})]})]})})]},a.id)}),0===a.specs.length&&(0,b.jsx)(f.Card,{className:"border-dashed border-gray-300 dark:border-gray-700 bg-transparent",children:(0,b.jsxs)(f.CardContent,{className:"py-6 sm:py-8 text-center px-2",children:[(0,b.jsx)(c,{className:(0,z.cn)("mx-auto h-6 w-6 sm:h-8 sm:w-8 mb-1.5 sm:mb-2",a.config.colorClass,"opacity-50")}),(0,b.jsx)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:"Drop here to move specs"})]})})]})]},a.status)})})}a.s(["SpecsClient",()=>E])}];
|
|
1
|
+
module.exports=[113142,a=>{"use strict";var b=a.i(40352),c=a.i(936883),d=a.i(920378),e=a.i(681612),f=a.i(980096),g=a.i(837717),h=a.i(406334),i=a.i(227725),j=a.i(915929),k=a.i(793090),l=a.i(800966),m=a.i(659358),n=a.i(297557),o=a.i(262936),p=a.i(307840),q=a.i(730702),r=a.i(615268),s=a.i(915970),t=a.i(404620),u=a.i(709211),v=a.i(633093),w=a.i(141270),x=a.i(882479),y=a.i(322570),z=a.i(687052),A=a.i(890075);a.i(294783);var B=a.i(156916);let C={planned:{icon:n.Clock,title:"Planned",colorClass:"text-blue-600 dark:text-blue-400",bgClass:"bg-blue-50 dark:bg-blue-900/20",borderClass:"border-blue-200 dark:border-blue-800"},"in-progress":{icon:m.PlayCircle,title:"In Progress",colorClass:"text-orange-600 dark:text-orange-400",bgClass:"bg-orange-50 dark:bg-orange-900/20",borderClass:"border-orange-200 dark:border-orange-800"},complete:{icon:l.CheckCircle2,title:"Complete",colorClass:"text-green-600 dark:text-green-400",bgClass:"bg-green-50 dark:bg-green-900/20",borderClass:"border-green-200 dark:border-green-800"},archived:{icon:o.Archive,title:"Archived",colorClass:"text-gray-600 dark:text-gray-400",bgClass:"bg-gray-50 dark:bg-gray-900/20",borderClass:"border-gray-200 dark:border-gray-800"}},D=["planned","in-progress","complete","archived"];function E({initialSpecs:a,projectId:d}){let f=(0,e.useSearchParams)(),g=(0,e.useRouter)(),l=(0,c.useCallback)(a=>d?`/projects/${d}/specs/${a}`:`/specs/${a}`,[d]),m=(0,c.useCallback)(()=>d?`/projects/${d}/specs`:"/specs",[d]),[n,o]=(0,c.useState)(a),[r,s]=(0,c.useState)({}),[v,w]=(0,c.useState)(""),[x,y]=(0,c.useState)("all"),[A,D]=(0,c.useState)("all"),[E,H]=(0,c.useState)("id-desc"),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(!1),[M,N]=(0,c.useState)(()=>{let a=f.get("view");return"board"===a||"list"===a?a:"list"}),O=(0,c.useRef)(!0);(0,c.useEffect)(()=>{o(a)},[a]);let P=(0,c.useCallback)(async(a,b)=>{if(a.status===b)return;let c=a.status;s(b=>({...b,[a.id]:!0})),o(c=>c.map(c=>c.id===a.id?{...c,status:b}:c));try{let c=d?`/api/projects/${d}/specs/${encodeURIComponent(a.specName)}/status`:`/api/specs/${encodeURIComponent(a.specName)}/status`,e=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:b})});if(!e.ok){let a=await e.text();throw Error(a||"Failed to update spec status")}let f=a.specNumber?`#${a.specNumber}`:a.specName;B.toast.success(`Moved ${f} to ${C[b].title}`)}catch(b){console.error("Failed to update spec status",b),o(b=>b.map(b=>b.id===a.id?{...b,status:c}:b)),B.toast.error("Unable to update status. Please try again.")}finally{s(b=>{let c={...b};return delete c[a.id],c})}},[d]);(0,c.useEffect)(()=>{"archived"===x&&"board"===M&&J(!0)},[x,M]),(0,c.useEffect)(()=>{if(O.current){O.current=!1;return}let a=new URLSearchParams(window.location.search);"board"===M?a.set("view","board"):a.delete("view");let b=a.toString(),c=b?`?${b}`:"";g.replace(`${m()}${c}`,{scroll:!1})},[M,g,m]);let Q=(0,c.useMemo)(()=>{let a=[...n.filter(a=>{let b=!v||a.title?.toLowerCase().includes(v.toLowerCase())||a.specName.toLowerCase().includes(v.toLowerCase())||a.tags?.some(a=>a.toLowerCase().includes(v.toLowerCase())),c="all"===x?"list"!==M||"archived"!==a.status:a.status===x,d="all"===A||a.priority===A;return b&&c&&d})];switch(E){case"id-desc":a.sort((a,b)=>(b.specNumber||0)-(a.specNumber||0));break;case"id-asc":a.sort((a,b)=>(a.specNumber||0)-(b.specNumber||0));break;case"updated-desc":a.sort((a,b)=>a.updatedAt?b.updatedAt?b.updatedAt.getTime()-a.updatedAt.getTime():-1:1);break;case"title-asc":a.sort((a,b)=>{let c=(a.title||a.specName).toLowerCase(),d=(b.title||b.specName).toLowerCase();return c.localeCompare(d)})}return a},[n,v,x,A,E,M]);return(0,b.jsx)("div",{className:"h-[calc(100vh-3.5rem)] flex flex-col overflow-hidden bg-background p-2 sm:p-4",children:(0,b.jsxs)("div",{className:(0,z.cn)("flex flex-col h-full mx-auto transition-all duration-300",K?"w-full":"max-w-7xl w-full"),children:[(0,b.jsx)("div",{className:"flex-none mb-3 sm:mb-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3 md:gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h1",{className:"text-lg sm:text-xl md:text-2xl font-bold tracking-tight truncate",children:"Specifications"}),(0,b.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:[Q.length," specs"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 sm:gap-2 flex-shrink-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-0.5 sm:gap-1 bg-muted/50 p-0.5 sm:p-1 rounded-lg",children:[(0,b.jsxs)(i.Button,{variant:"list"===M?"secondary":"ghost",size:"sm",onClick:()=>N("list"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"List view",children:[(0,b.jsx)(q.List,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,b.jsx)("span",{className:"hidden lg:inline ml-2",children:"List"})]}),(0,b.jsxs)(i.Button,{variant:"board"===M?"secondary":"ghost",size:"sm",onClick:()=>N("board"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"Board view",children:[(0,b.jsx)(p.LayoutGrid,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,b.jsx)("span",{className:"hidden lg:inline ml-2",children:"Board"})]})]}),(0,b.jsx)(i.Button,{variant:"ghost",size:"icon",onClick:()=>L(!K),className:"hidden md:flex h-8 w-8 sm:h-10 sm:w-10 text-muted-foreground hover:text-foreground",title:K?"Exit wide mode":"Enter wide mode",children:K?(0,b.jsx)(u.Minimize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}):(0,b.jsx)(t.Maximize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"})})]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"relative w-full",children:[(0,b.jsx)(k.Search,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 sm:h-4 sm:w-4 text-muted-foreground pointer-events-none"}),(0,b.jsx)(h.Input,{placeholder:"Search specs...",value:v,onChange:a=>w(a.target.value),className:"pl-8 sm:pl-9 h-9 sm:h-10 w-full text-sm"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 overflow-x-auto snap-x snap-mandatory pb-1 -mx-2 px-2 sm:mx-0 sm:px-0 sm:pb-0 scrollbar-thin",children:[(0,b.jsxs)(j.Select,{value:x,onValueChange:a=>y(a),children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Status"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"all",children:"All Status"}),(0,b.jsx)(j.SelectItem,{value:"planned",children:"Planned"}),(0,b.jsx)(j.SelectItem,{value:"in-progress",children:"In Progress"}),(0,b.jsx)(j.SelectItem,{value:"complete",children:"Complete"}),(0,b.jsx)(j.SelectItem,{value:"archived",children:"Archived"})]})]}),(0,b.jsxs)(j.Select,{value:A,onValueChange:D,children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Priority"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"all",children:"All Priority"}),(0,b.jsx)(j.SelectItem,{value:"critical",children:"Critical"}),(0,b.jsx)(j.SelectItem,{value:"high",children:"High"}),(0,b.jsx)(j.SelectItem,{value:"medium",children:"Medium"}),(0,b.jsx)(j.SelectItem,{value:"low",children:"Low"})]})]}),(0,b.jsxs)(j.Select,{value:E,onValueChange:a=>H(a),children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[130px] sm:w-[170px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Sort by"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"id-desc",children:"Newest First"}),(0,b.jsx)(j.SelectItem,{value:"id-asc",children:"Oldest First"}),(0,b.jsx)(j.SelectItem,{value:"updated-desc",children:"Recently Updated"}),(0,b.jsx)(j.SelectItem,{value:"title-asc",children:"Title (A-Z)"})]})]})]})]})]})}),(0,b.jsx)("div",{className:(0,z.cn)("flex-1 min-h-0","board"===M?"overflow-x-auto overflow-y-hidden":"overflow-y-auto"),children:"list"===M?(0,b.jsx)("div",{className:"w-full",children:(0,b.jsx)(F,{specs:Q,getSpecUrl:l})}):(0,b.jsx)(G,{specs:Q,onStatusChange:P,pendingSpecIds:r,showArchived:I,onToggleArchived:()=>J(!I),getSpecUrl:l})})]})})}function F({specs:a,getSpecUrl:c}){return(0,b.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:gap-3 md:gap-4 pb-2 sm:pb-4 md:pb-8",children:a.map(a=>{let e={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[a.priority]||"border-l-gray-300",h=a.relationships&&a.relationships.dependsOn.length>0,i=!!(a.subSpecsCount&&a.subSpecsCount>0),j=c(a.specNumber||a.id);return(0,b.jsxs)(f.Card,{className:(0,z.cn)("hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.01] active:scale-[0.99] border-l-4 cursor-pointer touch-manipulation",e),onClick:()=>window.location.href=j,children:[(0,b.jsx)(f.CardHeader,{className:"pb-2 sm:pb-2.5 md:pb-3 px-3 sm:px-4 md:px-6 pt-3 sm:pt-4 md:pt-6",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-start md:justify-between md:gap-4",children:[(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsx)(d.default,{href:j,children:(0,b.jsxs)(f.CardTitle,{className:"text-sm sm:text-base md:text-lg font-semibold hover:text-primary transition-colors flex items-start flex-wrap gap-1.5 sm:gap-2 leading-snug sm:leading-normal",children:[a.specNumber?(0,b.jsxs)("span",{className:"font-mono text-xs sm:text-sm md:text-base font-normal text-muted-foreground flex-shrink-0",children:["#",a.specNumber.toString().padStart(3,"0")]}):null,(0,b.jsx)("span",{className:"flex-1 break-words",children:a.title||a.specName})]})}),a.title&&a.title!==a.specName&&(0,b.jsx)("p",{className:"text-[11px] sm:text-xs font-mono text-muted-foreground mt-1 sm:mt-1.5 truncate",children:a.specName})]}),(0,b.jsxs)("div",{className:"flex gap-1.5 sm:gap-2 flex-wrap md:shrink-0",children:[a.status&&(0,b.jsx)(x.StatusBadge,{status:a.status}),a.priority&&(0,b.jsx)(y.PriorityBadge,{priority:a.priority})]})]})}),(0,b.jsx)(f.CardContent,{className:"px-3 sm:px-4 md:px-6 pb-2.5 sm:pb-3 md:pb-6 pt-0",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-4",children:[(0,b.jsx)("div",{className:"flex items-center gap-2 sm:gap-3 md:gap-4 text-[11px] sm:text-xs md:text-sm text-muted-foreground flex-wrap",children:a.updatedAt||i||h?(0,b.jsxs)(b.Fragment,{children:[a.updatedAt&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(n.Clock,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:["Updated ",(0,A.formatRelativeTime)(a.updatedAt)]})]}),i&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(r.FileText,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:["+",a.subSpecsCount," files"]})]}),h&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(s.GitBranch,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:[a.relationships.dependsOn.length," deps"]})]})]}):(0,b.jsx)("span",{className:"invisible hidden md:inline",children:"No metadata"})}),a.tags&&a.tags.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 sm:gap-1.5 md:gap-2 md:justify-end md:shrink-0",children:a.tags.map(a=>(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs font-mono text-muted-foreground hover:text-foreground transition-colors h-5 sm:h-auto px-1.5 sm:px-2",children:a},a))})]})})]},a.id)})})}function G({specs:a,onStatusChange:e,pendingSpecIds:h,showArchived:i,onToggleArchived:j,getSpecUrl:k}){let[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)({}),r=(0,c.useMemo)(()=>D.map(b=>({status:b,config:C[b],specs:a.filter(a=>a.status===b)})),[a]),s=(0,c.useMemo)(()=>{let b=new Map;return a.forEach(a=>b.set(a.id,a)),b},[a]),t=(0,c.useCallback)((a,b)=>{b.dataTransfer.setData("text/plain",a),b.dataTransfer.effectAllowed="move",m(a)},[]),u=(0,c.useCallback)(()=>{m(null),o(null)},[]),x=(0,c.useCallback)((a,b)=>{l&&(b.preventDefault(),b.dataTransfer.dropEffect="move",o(a))},[l]),A=(0,c.useCallback)((a,b)=>{if(!l)return;let c=b.relatedTarget;c&&b.currentTarget.contains(c)||o(b=>b===a?null:b)},[l]),B=(0,c.useCallback)((a,b)=>{b.preventDefault();let c=b.dataTransfer.getData("text/plain")||l;if(!c)return void u();let d=s.get(c);d&&d.status!==a&&e(d,a),u()},[l,u,e,s]);return(0,b.jsx)("div",{className:"flex flex-col md:flex-row gap-3 sm:gap-4 md:gap-6 h-full pb-2 md:snap-x md:snap-mandatory overflow-y-auto md:overflow-y-hidden md:overflow-x-auto",children:r.map(a=>{let c=a.config.icon,e="archived"===a.status,m=p[a.status];return(0,b.jsxs)("div",{className:(0,z.cn)("flex flex-col flex-1 snap-start","h-auto md:h-full w-full md:w-auto flex-shrink-0",e&&!i?"md:w-12 md:sm:w-14 md:min-w-[3rem] md:sm:min-w-[3.5rem] flex-none":"md:min-w-[260px] md:sm:min-w-[280px] md:md:min-w-[300px]"),children:[(0,b.jsx)("div",{className:(0,z.cn)("flex-none mb-3 sm:mb-4 rounded-lg border-2 bg-background transition-all touch-manipulation",a.config.bgClass,a.config.borderClass,e?"cursor-pointer hover:opacity-80 active:opacity-70":"",e&&!i?"py-4 sm:py-6 px-1.5 sm:px-2":"p-2.5 sm:p-3","md:cursor-default cursor-pointer"),onClick:()=>{if(e)j();else{var b;window.innerWidth<768&&(b=a.status,q(a=>({...a,[b]:!a[b]})))}},children:(0,b.jsxs)("h2",{className:(0,z.cn)("text-base sm:text-lg font-semibold flex items-center gap-1.5 sm:gap-2",a.config.colorClass,e&&!i&&"flex-col text-xs sm:text-sm gap-2 sm:gap-3"),children:[(0,b.jsx)(c,{className:"h-4 w-4 sm:h-5 sm:w-5 flex-shrink-0"}),e&&!i?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"vertical-text text-xs sm:text-sm whitespace-nowrap",children:a.config.title}),(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1 sm:px-2 h-4 sm:h-5",children:a.specs.length})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"truncate flex-1",children:a.config.title}),(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1.5 sm:px-2 h-4 sm:h-5 flex-shrink-0",children:a.specs.length}),(0,b.jsx)("div",{className:"md:hidden ml-2 text-muted-foreground/50",children:m?(0,b.jsx)(w.ChevronRight,{className:"h-4 w-4"}):(0,b.jsx)(v.ChevronDown,{className:"h-4 w-4"})})]})]})}),(!e||i)&&!m&&(0,b.jsxs)("div",{className:(0,z.cn)("space-y-2 sm:space-y-2.5 md:space-y-3 flex-1 rounded-xl border border-transparent p-1 transition-colors overflow-y-auto min-h-0 scrollbar-thin",l&&"border-dashed border-muted-foreground/40",l&&n===a.status&&"bg-muted/40 border-primary/50"),onDragOver:b=>x(a.status,b),onDragLeave:b=>A(a.status,b),onDrop:b=>B(a.status,b),children:[a.specs.map(a=>{let c={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[a.priority]||"border-l-gray-300",e=!!h[a.id],i=k(a.specNumber||a.id);return(0,b.jsxs)(f.Card,{draggable:!e,onDragStart:b=>{e?b.preventDefault():t(a.id,b)},onDragEnd:u,"aria-disabled":e,className:(0,z.cn)("relative hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.02] active:scale-[0.99] border-l-4 cursor-pointer group flex flex-col touch-manipulation",c,e&&"opacity-60 cursor-wait"),onClick:()=>window.location.href=i,children:[e&&(0,b.jsx)("div",{className:"absolute inset-0 rounded-lg bg-background/80 flex items-center justify-center text-xs sm:text-sm font-medium z-10",children:"Updating..."}),(0,b.jsxs)(f.CardHeader,{className:"p-3 sm:p-4 pb-1.5 sm:pb-2 space-y-1 sm:space-y-1.5",children:[(0,b.jsx)("div",{className:"flex items-center justify-between",children:(0,b.jsx)("span",{className:"font-mono text-[10px] sm:text-xs text-muted-foreground/70 group-hover:text-primary/60 transition-colors",children:a.specNumber?`#${a.specNumber}`:""})}),(0,b.jsx)(d.default,{href:i,className:"block",children:(0,b.jsx)(f.CardTitle,{className:"text-xs sm:text-sm font-semibold leading-snug hover:text-primary transition-colors line-clamp-3",children:a.title||a.specName})})]}),(0,b.jsx)(f.CardContent,{className:"p-3 sm:p-4 pt-1.5 sm:pt-2 flex-1 flex flex-col justify-end",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3",children:[a.title&&a.title!==a.specName&&(0,b.jsx)("p",{className:"text-[10px] sm:text-xs font-mono text-muted-foreground truncate opacity-70",children:a.specName}),(0,b.jsxs)("div",{className:"flex items-center justify-between gap-1.5 sm:gap-2 pt-0.5 sm:pt-1",children:[a.priority?(0,b.jsx)(y.PriorityBadge,{priority:a.priority}):(0,b.jsx)("div",{}),a.tags&&a.tags.length>0&&(0,b.jsxs)("div",{className:"flex flex-wrap gap-0.5 sm:gap-1 justify-end",children:[a.tags.slice(0,2).map(a=>(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:a},a)),a.tags.length>2&&(0,b.jsxs)(g.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:["+",a.tags.length-2]})]})]})]})})]},a.id)}),0===a.specs.length&&(0,b.jsx)(f.Card,{className:"border-dashed border-gray-300 dark:border-gray-700 bg-transparent",children:(0,b.jsxs)(f.CardContent,{className:"py-6 sm:py-8 text-center px-2",children:[(0,b.jsx)(c,{className:(0,z.cn)("mx-auto h-6 w-6 sm:h-8 sm:w-8 mb-1.5 sm:mb-2",a.config.colorClass,"opacity-50")}),(0,b.jsx)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:"Drop here to move specs"})]})})]})]},a.status)})})}a.s(["SpecsClient",()=>E])}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[599302,a=>{"use strict";let b;var c=a.i(40352),d=a.i(936883),e=a.i(558285),f=a.i(681612),g=a.i(836180);a.s(["ERROR_REVALIDATE_EVENT",()=>3,"FOCUS_EVENT",()=>0,"MUTATE_EVENT",()=>2,"RECONNECT_EVENT",()=>1],869111);var h=Object.prototype.hasOwnProperty;let i=new WeakMap,j=()=>{},k=j(),l=Object,m=a=>a===k,n=(a,b)=>({...a,...b}),o={},p={},q="undefined",r=typeof document!=q,s=!1,t=(a,b)=>{let c=i.get(a);return[()=>!m(b)&&a.get(b)||o,d=>{if(!m(b)){let e=a.get(b);b in p||(p[b]=e),c[5](b,n(e,d),e||o)}},c[6],()=>!m(b)&&b in p?p[b]:!m(b)&&a.get(b)||o]},u=!0,[v,w]=[j,j],x={initFocus:a=>(r&&document.addEventListener("visibilitychange",a),v("focus",a),()=>{r&&document.removeEventListener("visibilitychange",a),w("focus",a)}),initReconnect:a=>{let b=()=>{u=!0,a()},c=()=>{u=!1};return v("online",b),v("offline",c),()=>{w("online",b),w("offline",c)}}},y=!d.default.useId,z=!0,A=d.useEffect,B="undefined"!=typeof navigator&&navigator.connection;!z&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData);let C=new WeakMap,D=(a,b)=>a===`[object ${b}]`,E=0,F=a=>{let b,c,d=typeof a,e=l.prototype.toString.call(a),f=D(e,"Date"),g=D(e,"RegExp"),h=D(e,"Object");if(l(a)!==a||f||g)b=f?a.toJSON():"symbol"==d?a.toString():"string"==d?JSON.stringify(a):""+a;else{if(b=C.get(a))return b;if(b=++E+"~",C.set(a,b),Array.isArray(a)){for(c=0,b="@";c<a.length;c++)b+=F(a[c])+",";C.set(a,b)}if(h){b="#";let d=l.keys(a).sort();for(;!m(c=d.pop());)m(a[c])||(b+=c+":"+F(a[c])+",");C.set(a,b)}}return b},G=a=>{if("function"==typeof a)try{a=a()}catch(b){a=""}let b=a;return[a="string"==typeof a?a:(Array.isArray(a)?a.length:a)?F(a):"",b]},H=0,I=()=>++H;async function J(...a){let[b,c,d,e]=a,f=n({populateCache:!0,throwOnError:!0},"boolean"==typeof e?{revalidate:e}:e||{}),g=f.populateCache,h=f.rollbackOnError,j=f.optimisticData,l=f.throwOnError;if("function"==typeof c){let a=[];for(let d of b.keys())!/^\$(inf|sub)\$/.test(d)&&c(b.get(d)._k)&&a.push(d);return Promise.all(a.map(o))}return o(c);async function o(c){let e,[n]=G(c);if(!n)return;let[o,p]=t(b,n),[q,r,s,u]=i.get(b),v=()=>{let a=q[n];return("function"==typeof f.revalidate?f.revalidate(o().data,c):!1!==f.revalidate)&&(delete s[n],delete u[n],a&&a[0])?a[0](2).then(()=>o().data):o().data};if(a.length<3)return v();let w=d,x=!1,y=I();r[n]=[y,0];let z=!m(j),A=o(),B=A.data,C=A._c,D=m(C)?B:C;if(z&&p({data:j="function"==typeof j?j(D,B):j,_c:D}),"function"==typeof w)try{w=w(D)}catch(a){e=a,x=!0}if(w&&"function"==typeof w.then){let a;if(w=await w.catch(a=>{e=a,x=!0}),y!==r[n][0]){if(x)throw e;return w}x&&z&&(a=e,"function"==typeof h?h(a):!1!==h)&&(g=!0,p({data:D,_c:k}))}if(g&&!x&&("function"==typeof g?p({data:g(w,D),error:k,_c:k}):p({data:w,error:k,_c:k})),r[n][1]=I(),Promise.resolve(v()).then(()=>{p({_c:k})}),x){if(l)throw e;return}return w}}let K=(a,b)=>{if(!i.has(a)){n(x,b);let c=Object.create(null),d=J.bind(k,a),e=Object.create(null),f=(a,b)=>{let c=e[a]||[];return e[a]=c,c.push(b),()=>c.splice(c.indexOf(b),1)},g=(b,c,d)=>{a.set(b,c);let f=e[b];if(f)for(let a of f)a(c,d)},h=()=>{i.has(a)||i.set(a,[c,Object.create(null),Object.create(null),Object.create(null),d,g,f])};return h(),[a,d,h,j]}return[a,i.get(a)[4]]},[L,M]=K(new Map),N=n({onLoadingSlow:j,onSuccess:j,onError:j,onErrorRetry:(a,b,c,d,e)=>{let f=c.errorRetryCount,g=e.retryCount,h=~~((Math.random()+.5)*(1<<(g<8?g:8)))*c.errorRetryInterval;(m(f)||!(g>f))&&setTimeout(d,h,e)},onDiscarded:j,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:3e3,compare:function a(b,c){var d,e;if(b===c)return!0;if(b&&c&&(d=b.constructor)===c.constructor){if(d===Date)return b.getTime()===c.getTime();if(d===RegExp)return b.toString()===c.toString();if(d===Array){if((e=b.length)===c.length)for(;e--&&a(b[e],c[e]););return -1===e}if(!d||"object"==typeof b){for(d in e=0,b)if(h.call(b,d)&&++e&&!h.call(c,d)||!(d in c)||!a(b[d],c[d]))return!1;return Object.keys(c).length===e}}return b!=b&&c!=c},isPaused:()=>!1,cache:L,mutate:M,fallback:{}},{isOnline:()=>u,isVisible:()=>{let a=r&&document.visibilityState;return m(a)||"hidden"!==a}}),O=(a,b)=>{let c=n(a,b);if(b){let{use:d,fallback:e}=a,{use:f,fallback:g}=b;d&&f&&(c.use=d.concat(f)),e&&g&&(c.fallback=n(e,g))}return c},P=(0,d.createContext)({});var Q=a.i(869111);let R=!1,S=(R?window.__SWR_DEVTOOLS_USE__:[]).concat(a=>(b,c,d)=>{let e=c&&((...a)=>{let[d]=G(b),[,,,e]=i.get(L);if(d.startsWith("$inf$"))return c(...a);let f=e[d];return m(f)?c(...a):(delete e[d],f)});return a(b,e,d)});R&&(window.__SWR_DEVTOOLS_REACT__=d.default);let T=()=>{},U=T(),V=(new WeakMap,d.default.use||(a=>{switch(a.status){case"pending":throw a;case"fulfilled":return a.value;case"rejected":throw a.reason;default:throw a.status="pending",a.then(b=>{a.status="fulfilled",a.value=b},b=>{a.status="rejected",a.reason=b}),a}})),W={dedupe:!0},X=Promise.resolve(k);l.defineProperty(a=>{let{value:b}=a,c=(0,d.useContext)(P),e="function"==typeof b,f=(0,d.useMemo)(()=>e?b(c):b,[e,c,b]),g=(0,d.useMemo)(()=>e?f:O(c,f),[e,c,f]),h=f&&f.provider,i=(0,d.useRef)(k);h&&!i.current&&(i.current=K(h(g.cache||L),f));let j=i.current;return j&&(g.cache=j[0],g.mutate=j[1]),A(()=>{if(j)return j[2]&&j[2](),j[3]},[]),(0,d.createElement)(P.Provider,n(a,{value:g}))},"defaultValue",{value:N});let Y=(b=(a,b,c)=>{let{cache:e,compare:f,suspense:h,fallbackData:j,revalidateOnMount:l,revalidateIfStale:o,refreshInterval:p,refreshWhenHidden:q,refreshWhenOffline:r,keepPreviousData:s}=c,[u,v,w,x]=i.get(e),[B,C]=G(a),D=(0,d.useRef)(!1),E=(0,d.useRef)(!1),F=(0,d.useRef)(B),H=(0,d.useRef)(b),K=(0,d.useRef)(c),L=()=>K.current.isVisible()&&K.current.isOnline(),[M,N,O,P]=t(e,B),R=(0,d.useRef)({}).current,S=m(j)?m(c.fallback)?k:c.fallback[B]:j,T=(a,b)=>{for(let c in R)if("data"===c){if(!f(a[c],b[c])&&(!m(a[c])||!f(ad,b[c])))return!1}else if(b[c]!==a[c])return!1;return!0},U=(0,d.useMemo)(()=>{let a=!!B&&!!b&&(m(l)?!K.current.isPaused()&&!h&&!1!==o:l),c=b=>{let c=n(b);return(delete c._k,a)?{isValidating:!0,isLoading:!0,...c}:c},d=M(),e=P(),f=c(d),g=d===e?f:c(e),i=f;return[()=>{let a=c(M());return T(a,i)?(i.data=a.data,i.isLoading=a.isLoading,i.isValidating=a.isValidating,i.error=a.error,i):(i=a,a)},()=>g]},[e,B]),Y=(0,g.useSyncExternalStore)((0,d.useCallback)(a=>O(B,(b,c)=>{T(c,b)||a()}),[e,B]),U[0],U[1]),Z=!D.current,$=u[B]&&u[B].length>0,_=Y.data,aa=m(_)?S&&"function"==typeof S.then?V(S):S:_,ab=Y.error,ac=(0,d.useRef)(aa),ad=s?m(_)?m(ac.current)?aa:ac.current:_:aa,ae=(!$||!!m(ab))&&(Z&&!m(l)?l:!K.current.isPaused()&&(h?!m(aa)&&o:m(aa)||o)),af=!!(B&&b&&Z&&ae),ag=m(Y.isValidating)?af:Y.isValidating,ah=m(Y.isLoading)?af:Y.isLoading,ai=(0,d.useCallback)(async a=>{let b,d,e=H.current;if(!B||!e||E.current||K.current.isPaused())return!1;let g=!0,h=a||{},i=!w[B]||!h.dedupe,j=()=>y?!E.current&&B===F.current&&D.current:B===F.current,l={isValidating:!1,isLoading:!1},n=()=>{N(l)},o=()=>{let a=w[B];a&&a[1]===d&&delete w[B]},p={isValidating:!0};m(M().data)&&(p.isLoading=!0);try{if(i&&(N(p),c.loadingTimeout&&m(M().data)&&setTimeout(()=>{g&&j()&&K.current.onLoadingSlow(B,c)},c.loadingTimeout),w[B]=[e(C),I()]),[b,d]=w[B],b=await b,i&&setTimeout(o,c.dedupingInterval),!w[B]||w[B][1]!==d)return i&&j()&&K.current.onDiscarded(B),!1;l.error=k;let a=v[B];if(!m(a)&&(d<=a[0]||d<=a[1]||0===a[1]))return n(),i&&j()&&K.current.onDiscarded(B),!1;let h=M().data;l.data=f(h,b)?h:b,i&&j()&&K.current.onSuccess(b,B,c)}catch(c){o();let a=K.current,{shouldRetryOnError:b}=a;!a.isPaused()&&(l.error=c,i&&j())&&(a.onError(c,B,a),(!0===b||"function"==typeof b&&b(c))&&(!K.current.revalidateOnFocus||!K.current.revalidateOnReconnect||L())&&a.onErrorRetry(c,B,a,a=>{let b=u[B];b&&b[0]&&b[0](Q.ERROR_REVALIDATE_EVENT,a)},{retryCount:(h.retryCount||0)+1,dedupe:!0}))}return g=!1,n(),!0},[B,e]),aj=(0,d.useCallback)((...a)=>J(e,F.current,...a),[]);if(A(()=>{H.current=b,K.current=c,m(_)||(ac.current=_)}),A(()=>{var a;let b;if(!B)return;let c=ai.bind(k,W),d=0;K.current.revalidateOnFocus&&(d=Date.now()+K.current.focusThrottleInterval);let e=(a=(a,b={})=>{if(a==Q.FOCUS_EVENT){let a=Date.now();K.current.revalidateOnFocus&&a>d&&L()&&(d=a+K.current.focusThrottleInterval,c())}else if(a==Q.RECONNECT_EVENT)K.current.revalidateOnReconnect&&L()&&c();else if(a==Q.MUTATE_EVENT)return ai();else if(a==Q.ERROR_REVALIDATE_EVENT)return ai(b)},(b=u[B]||(u[B]=[])).push(a),()=>{let c=b.indexOf(a);c>=0&&(b[c]=b[b.length-1],b.pop())});if(E.current=!1,F.current=B,D.current=!0,N({_k:C}),ae&&!w[B])if(m(aa)||z)c();else setTimeout(c,1);return()=>{E.current=!0,e()}},[B]),A(()=>{let a;function b(){let b="function"==typeof p?p(M().data):p;b&&-1!==a&&(a=setTimeout(c,b))}function c(){!M().error&&(q||K.current.isVisible())&&(r||K.current.isOnline())?ai(W).then(b):b()}return b(),()=>{a&&(clearTimeout(a),a=-1)}},[p,q,r,B]),(0,d.useDebugValue)(ad),h){let a=B&&m(aa);if(!y&&z&&a)throw Error("Fallback data is required when using Suspense in SSR.");a&&(H.current=b,K.current=c,E.current=!1);let d=x[B];if(V(!m(d)&&a?aj(d):X),!m(ab)&&a)throw ab;let e=a?ai(W):X;!m(ad)&&a&&(e.status="fulfilled",e.value=!0),V(e)}return{mutate:aj,get data(){return R.data=!0,ad},get error(){return R.error=!0,ab},get isValidating(){return R.isValidating=!0,ag},get isLoading(){return R.isLoading=!0,ah}}},function(...a){let c,e=(c=(0,d.useContext)(P),(0,d.useMemo)(()=>n(N,c),[c])),[f,g,h]="function"==typeof a[1]?[a[0],a[1],a[2]||{}]:[a[0],null,(null===a[1]?a[2]:a[1])||{}],i=O(e,h),j=b,{use:k}=i,l=(k||[]).concat(S);for(let a=l.length;a--;)j=l[a](j);return j(f,g||i.fetcher||null,i)});var Z=a.i(459500),$=a.i(316828),_=a.i(312750),aa=a.i(524172),ab=a.i(837717),ac=a.i(227725),ad=a.i(297557),ae=a.i(659358),af=a.i(800966),ag=a.i(262936),ah=a.i(532418),ai=a.i(890075),aj=a.i(687052);function ak({createdAt:a,updatedAt:b,completedAt:d,status:e,className:f}){let g=[];return(a&&g.push({label:"Created",date:a,isActive:!0,isFuture:!1,icon:ad.Clock,color:"text-blue-600"}),"in-progress"===e||"complete"===e||"archived"===e?g.push({label:"In Progress",date:b||a,isActive:!0,isFuture:!1,icon:ae.PlayCircle,color:"text-orange-600"}):g.push({label:"In Progress",date:null,isActive:!1,isFuture:!0,icon:ah.Circle,color:"text-muted-foreground"}),"complete"===e||"archived"===e?g.push({label:"Complete",date:d||b,isActive:!0,isFuture:!1,icon:af.CheckCircle2,color:"text-green-600"}):g.push({label:"Complete",date:null,isActive:!1,isFuture:!0,icon:ah.Circle,color:"text-muted-foreground"}),"archived"===e&&g.push({label:"Archived",date:b,isActive:!0,isFuture:!1,icon:ag.Archive,color:"text-gray-600"}),0===g.length)?null:(0,c.jsx)("div",{className:(0,aj.cn)("flex items-start gap-2",f),children:g.map((a,b)=>{let d=a.icon,e=b===g.length-1,f=e?null:g[b+1],h=a.date&&f?.date&&!f.isFuture?(0,ai.formatDuration)(a.date,f.date):"";return(0,c.jsxs)("div",{className:"flex items-center gap-2 flex-1",children:[(0,c.jsxs)("div",{className:"flex flex-col items-center gap-1 min-w-0",children:[(0,c.jsx)("div",{className:(0,aj.cn)("w-8 h-8 rounded-full border-2 bg-background flex items-center justify-center shrink-0",a.isActive&&!a.isFuture?"border-primary":"border-muted-foreground/40"),children:d&&(0,c.jsx)(d,{className:(0,aj.cn)("h-4 w-4",a.isActive&&!a.isFuture?"text-primary":"text-muted-foreground/60")})}),(0,c.jsx)("div",{className:(0,aj.cn)("text-xs font-medium text-center whitespace-nowrap",a.isActive&&!a.isFuture?"text-foreground":"text-muted-foreground"),children:a.label}),(0,c.jsxs)("div",{className:"text-[10px] text-center min-h-[14px]",children:[a.date&&!a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground",children:(0,ai.formatRelativeTime)(a.date)}),!a.date&&a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/70",children:"Awaiting start"}),a.date&&a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/70",children:"Queued"}),!a.date&&!a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/60",children:"Pending update"})]})]}),!e&&(0,c.jsxs)("div",{className:"flex flex-col items-center flex-1 min-w-4 gap-0.5",children:[(0,c.jsx)("div",{className:(0,aj.cn)("h-0.5 w-full",a.isActive&&!a.isFuture?"bg-primary":"bg-muted-foreground/40")}),h&&(0,c.jsx)("div",{className:"text-[10px] text-muted-foreground font-medium whitespace-nowrap",children:h})]})]},b)})})}var al=a.i(882479),am=a.i(322570),an=a.i(920378);function ao({href:a,children:b,currentSpecNumber:d,...e}){if(!a)return(0,c.jsx)("a",{...e,children:b});let f=function(a,b){if(a.startsWith("#")||a.startsWith("http://")||a.startsWith("https://"))return a;let c=a.match(/^\.\/([^/]+\.md)$/);if(c&&b){let a=c[1];return"README.md"!==a?`/specs/${b}?subspec=${a}`:`/specs/${b}`}let d=a.match(/^\.\.\/(\d+)-[^/]+\/?([^/]+\.md)?$/);if(d){let a=parseInt(d[1],10),b=d[2];return b&&"README.md"!==b?`/specs/${a}?subspec=${b}`:`/specs/${a}`}return a}(a,d),g=f.startsWith("http://")||f.startsWith("https://"),h=f.startsWith("#");return g||h?(0,c.jsx)("a",{href:f,...e,target:g?"_blank":void 0,rel:g?"noopener noreferrer":void 0,children:b}):(0,c.jsx)(an.default,{href:f,...e,className:"text-primary hover:underline",children:b})}var ap=a.i(87140),aq=a.i(731751),ar=a.i(183214),as=a.i(398293),at=a.i(231008),au=a.i(53897),av=a.i(669153);let aw="#f59e0b",ax="#38bdf8",ay="#ef4444",az={current:"border-primary/70 bg-primary/5 text-foreground",precedence:"border-amber-400/70 bg-amber-400/10 text-amber-900 dark:text-amber-200",related:"border-sky-400/70 bg-sky-400/10 text-sky-900 dark:text-sky-200","required-by":"border-red-400/70 bg-red-400/10 text-red-900 dark:text-red-200"},aA={rankdir:"LR",align:"UL",nodesep:60,ranksep:120,marginx:40,marginy:40},aB=d.memo(function({data:a}){return(0,c.jsxs)("div",{className:(0,aj.cn)("flex w-[280px] flex-col gap-1.5 rounded-xl border-2 px-5 py-4 text-base shadow-md transition-colors",az[a.tone],a.interactive&&"cursor-pointer hover:border-primary/70 hover:shadow-lg"),children:[(0,c.jsx)(av.Handle,{type:"target",position:av.Position.Left,className:"opacity-0"}),(0,c.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground/70",children:a.badge}),(0,c.jsx)("span",{className:"text-base font-semibold leading-snug",children:a.label}),a.subtitle&&(0,c.jsx)("span",{className:"text-sm text-muted-foreground/80",children:a.subtitle}),(0,c.jsx)(av.Handle,{type:"source",position:av.Position.Right,className:"opacity-0"})]})});aB.displayName="SpecNode";let aC={specNode:aB};function aD(a){let b=a.trim();if(!b)return"Unknown Spec";let c=b.match(/^(\d+)[-_]?(.*)$/);if(!c)return b;let d=c[1].padStart(3,"0"),e=c[2]?.replace(/[-_]/g," ").trim();return e?`#${d} ${e}`:`#${d}`}function aE(a){let b=a.trim(),c=b.match(/^(\d+)/);return c?`/specs/${parseInt(c[1],10)}`:`/specs/${b}`}function aF(a,b,c){return`${a}-${c}-${b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-")||c}`}function aG({relationships:a,specNumber:b,specTitle:e}){let g=(0,f.useRouter)(),[h,i]=d.useState(null),j=d.useMemo(()=>{let c,d,f,g;return c=[],d=[],f={id:"current-spec",type:"specNode",data:{label:b?`#${b.toString().padStart(3,"0")} ${e}`:e,badge:"Current Spec",subtitle:"This spec",tone:"current",interactive:!1},position:{x:0,y:0},draggable:!1,selectable:!1,sourcePosition:av.Position.Right,targetPosition:av.Position.Left},c.push(f),a.dependsOn?.forEach((a,b)=>{let e=aF("precedence",a,b);c.push({id:e,type:"specNode",data:{label:aD(a),badge:"Depends On",subtitle:"Must complete first",tone:"precedence",href:aE(a),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:av.Position.Right,targetPosition:av.Position.Left}),d.push({id:`edge-${e}-current`,source:e,target:f.id,type:"smoothstep",markerEnd:{type:av.MarkerType.ArrowClosed,color:aw,width:28,height:28},style:{stroke:aw,strokeWidth:3}})}),a.requiredBy?.forEach((a,b)=>{let e=aF("required-by",a,b);c.push({id:e,type:"specNode",data:{label:aD(a),badge:"Required By",subtitle:"Blocked by this spec",tone:"required-by",href:aE(a),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:av.Position.Right,targetPosition:av.Position.Left}),d.push({id:`edge-current-${e}`,source:f.id,target:e,type:"smoothstep",markerEnd:{type:av.MarkerType.ArrowClosed,color:ay,width:28,height:28},style:{stroke:ay,strokeWidth:3}})}),a.related?.forEach((a,b)=>{let e=aF("related",a,b);c.push({id:e,type:"specNode",data:{label:aD(a),badge:"Related",subtitle:"Connected work",tone:"related",href:aE(a),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:av.Position.Right,targetPosition:av.Position.Left}),d.push({id:`edge-current-${e}`,source:f.id,target:e,type:"smoothstep",markerEnd:{type:av.MarkerType.ArrowClosed,color:ax,width:24,height:24},style:{stroke:ax,strokeWidth:3,strokeDasharray:"10 8"}})}),(g=new ar.default.graphlib.Graph).setGraph(aA),g.setDefaultEdgeLabel(()=>({})),c.forEach(a=>{g.setNode(a.id,{width:280,height:110})}),d.forEach(a=>{g.setEdge(a.source,a.target)}),ar.default.layout(g),{nodes:c.map(a=>{let{x:b,y:c}=g.node(a.id);return{...a,position:{x:b-140,y:c-55}}}),edges:d}},[a,b,e]),k=d.useCallback(a=>{i(a),requestAnimationFrame(()=>{a.fitView({padding:.4,duration:350})})},[]);d.useEffect(()=>{h&&h.fitView({padding:.4,duration:350})},[h,j.nodes]);let l=d.useCallback((a,b)=>{!b?.data||b.data.href&&g.push(b.data.href)},[g]);return(0,c.jsxs)("div",{className:"flex h-full flex-col gap-4",children:[(0,c.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 text-sm text-muted-foreground",children:[(0,c.jsxs)("div",{children:[(0,c.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wide",children:"Dependency Map"}),(0,c.jsx)("p",{className:"text-base text-foreground",children:"Explore precedence and connected work"})]}),(0,c.jsx)("div",{className:"rounded-full border border-border px-3 py-1.5 text-sm font-medium uppercase tracking-wide",children:"React Flow DAG"})]}),(0,c.jsx)("div",{className:"flex-1 overflow-hidden rounded-2xl border border-border bg-muted/30",children:(0,c.jsxs)(as.default,{nodes:j.nodes,edges:j.edges,nodeTypes:aC,onInit:k,className:"h-full w-full",fitView:!0,proOptions:{hideAttribution:!0},nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,panOnScroll:!0,panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,minZoom:.4,maxZoom:1.6,onNodeClick:l,children:[(0,c.jsx)(at.Background,{gap:24,size:1,color:"rgba(148, 163, 184, 0.3)"}),(0,c.jsx)(au.Controls,{showInteractive:!1})]})}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-4 text-sm text-muted-foreground",children:[(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-amber-400/80"}),"Depends On → blocks until complete"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-red-400/80"}),"Required By ← blocked by this spec"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-sky-400/80"}),"Related ↔ connected work (bidirectional)"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-primary/60"}),"Drag to pan • Scroll / pinch to zoom."]})]})]})}var aH=a.i(228e3),aI=a.i(186945),aJ=a.i(615268),aK=a.i(863535);let aL=(0,aK.default)("palette",[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]]),aM=(0,aK.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]),aN=(0,aK.default)("test-tube",[["path",{d:"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2",key:"125lnx"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M14.5 16h-5",key:"1ox875"}]]),aO=(0,aK.default)("square-check-big",[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]),aP=(0,aK.default)("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]),aQ=(0,aK.default)("map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]]);var aR=a.i(915970),aS=a.i(476011),aT=a.i(418419),aU=a.i(404620),aV=a.i(709211),aW=a.i(730702),aX=a.i(386868);let aY=()=>a=>{(0,aX.visit)(a,"html",a=>{"string"==typeof a.value&&a.value.trim().startsWith("<!--")&&(a.value="")})},aZ={FileText:aJ.FileText,Palette:aL,Code:aM,TestTube:aN,CheckSquare:aO,Wrench:aP,Map:aQ,GitBranch:aR.GitBranch,Home:aS.Home,TrendingUp:aT.TrendingUp},a$=a=>fetch(a).then(a=>{if(!a.ok)throw Error(`HTTP error! status: ${a.status}`);return a.json()});function a_({initialSpec:a,initialSubSpec:b,isFocusMode:e=!1,onToggleFocusMode:g}){let h=(0,f.useRouter)(),i=(0,f.useSearchParams)().get("subspec")||b,[j,k]=d.useState(!1),[l,m]=d.useState(!1),{data:n,error:o,isLoading:p}=Y(`/api/specs/${a.specNumber||a.id}`,a$,{fallbackData:{spec:a},revalidateOnFocus:!1,dedupingInterval:5e3}),{data:q}=Y(l?`/api/specs/${a.specNumber||a.id}/dependency-graph`:null,a$,{revalidateOnFocus:!1,dedupingInterval:6e4}),r=n?.spec||a,s=d.useMemo(()=>r.tags||[],[r.tags]),t=r.updatedAt?(0,ai.formatRelativeTime)(r.updatedAt):"N/A",u=r.relationships,v=q?{dependsOn:q.dependsOn.map(a=>a.specName),requiredBy:q.requiredBy.map(a=>a.specName),related:q.related.map(a=>a.specName)}:u,w=!!(u&&((u.dependsOn?.length??0)>0||(u.related?.length??0)>0));d.useEffect(()=>{w||m(!1)},[w]);let x=(0,aj.extractH1Title)(r.contentMd)||r.title||r.specName,y=r.contentMd;if(i&&r.subSpecs){let a=r.subSpecs.find(a=>a.file===i);a&&(y=a.content)}let z=a=>a?new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):"N/A",A=a=>{let b=a?`/specs/${r.specNumber||r.id}?subspec=${a}`:`/specs/${r.specNumber||r.id}`;h.push(b,{scroll:!1})},B=d.useRef(null);return d.useEffect(()=>{let a=()=>{let a=56;window.innerWidth>=1024&&B.current&&(a+=B.current.offsetHeight-56),document.documentElement.style.scrollPaddingTop=`${a}px`};a(),window.addEventListener("resize",a);let b=new ResizeObserver(a);return B.current&&b.observe(B.current),()=>{window.removeEventListener("resize",a),b.disconnect(),document.documentElement.style.scrollPaddingTop=""}},[r,s]),(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("header",{ref:B,className:"lg:sticky lg:top-14 lg:z-20 border-b bg-card",children:[(0,c.jsx)("div",{className:(0,aj.cn)("px-3 sm:px-6",e?"py-1.5":"py-2 sm:py-3"),children:e?(0,c.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,c.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,c.jsxs)("h1",{className:"text-base font-semibold tracking-tight truncate",children:[r.specNumber&&(0,c.jsxs)("span",{className:"text-muted-foreground",children:["#",r.specNumber.toString().padStart(3,"0")," "]}),x]}),(0,c.jsx)(al.StatusBadge,{status:r.status||"planned"}),(0,c.jsx)(am.PriorityBadge,{priority:r.priority||"medium"})]}),(0,c.jsx)(ac.Button,{type:"button",variant:"ghost",size:"sm",onClick:g,className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground shrink-0",title:"Exit focus mode",children:(0,c.jsx)(aV.Minimize2,{className:"h-4 w-4"})})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{className:"flex items-start justify-between gap-2 mb-1.5 sm:mb-2",children:[(0,c.jsxs)("h1",{className:"text-lg sm:text-xl font-bold tracking-tight",children:[r.specNumber&&(0,c.jsxs)("span",{className:"text-muted-foreground",children:["#",r.specNumber.toString().padStart(3,"0")," "]}),x]}),(0,c.jsxs)(ac.Button,{variant:"ghost",size:"icon",className:"lg:hidden h-8 w-8 -mr-2 shrink-0 text-muted-foreground",onClick:()=>{},children:[(0,c.jsx)(aW.List,{className:"h-5 w-5"}),(0,c.jsx)("span",{className:"sr-only",children:"Toggle specs list"})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(al.StatusBadge,{status:r.status||"planned"}),(0,c.jsx)(am.PriorityBadge,{priority:r.priority||"medium"}),s.length>0&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("div",{className:"h-4 w-px bg-border mx-1 hidden sm:block"}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-1",children:[s.slice(0,5).map(a=>(0,c.jsx)(ab.Badge,{variant:"secondary",className:"text-xs",children:a},a)),s.length>5&&(0,c.jsxs)(ab.Badge,{variant:"secondary",className:"text-xs",children:["+",s.length-5," more"]})]})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-2 sm:gap-4 text-xs text-muted-foreground mt-1.5 sm:mt-2",children:[(0,c.jsxs)("span",{className:"hidden sm:inline",children:["Created: ",z(r.createdAt)]}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{children:["Updated: ",z(r.updatedAt),r.updatedAt&&(0,c.jsxs)("span",{className:"ml-1 text-[11px] text-muted-foreground/80",children:["(",t,")"]})]}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{className:"hidden md:inline",children:["Name: ",r.specName]}),r.assignee&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{className:"hidden sm:inline",children:["Assignee: ",r.assignee]})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[(0,c.jsxs)(aI.Dialog,{open:j,onOpenChange:k,children:[(0,c.jsxs)(ac.Button,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":j,onClick:()=>k(!0),className:"h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[(0,c.jsx)(ad.Clock,{className:"mr-1.5 h-3.5 w-3.5"}),"View Timeline",(0,c.jsx)(aU.Maximize2,{className:"ml-1.5 h-3.5 w-3.5"})]}),(0,c.jsxs)(aI.DialogContent,{className:"w-[min(900px,90vw)] max-w-3xl max-h-[90vh] overflow-y-auto",children:[(0,c.jsxs)(aI.DialogHeader,{children:[(0,c.jsx)(aI.DialogTitle,{children:"Spec Timeline"}),(0,c.jsx)(aI.DialogDescription,{children:"Created, updated, and completion milestones."})]}),(0,c.jsx)("div",{className:"rounded-xl border border-border bg-muted/30 p-4",children:(0,c.jsx)(ak,{createdAt:r.createdAt,updatedAt:r.updatedAt,completedAt:r.completedAt,status:r.status||"planned"})})]})]}),(0,c.jsxs)(aI.Dialog,{open:l,onOpenChange:m,children:[(0,c.jsxs)(ac.Button,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":l,onClick:()=>m(!0),disabled:!w,className:(0,aj.cn)("h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",!w&&"cursor-not-allowed opacity-50"),children:[(0,c.jsx)(aR.GitBranch,{className:"mr-1.5 h-3.5 w-3.5"}),"View Dependencies",(0,c.jsx)(aU.Maximize2,{className:"ml-1.5 h-3.5 w-3.5"})]}),(0,c.jsxs)(aI.DialogContent,{className:"flex h-[85vh] w-[min(1200px,95vw)] max-w-6xl flex-col gap-4 overflow-hidden",children:[(0,c.jsxs)(aI.DialogHeader,{children:[(0,c.jsx)(aI.DialogTitle,{children:"Dependency Graph"}),(0,c.jsx)(aI.DialogDescription,{children:"Precedence requirements and connected specs rendered with automatic layout."})]}),(0,c.jsx)("div",{className:"min-h-0 flex-1",children:v&&(0,c.jsx)(aG,{relationships:v,specNumber:r.specNumber,specTitle:x})})]})]}),g&&(0,c.jsxs)(ac.Button,{type:"button",variant:"outline",size:"sm",onClick:g,className:"hidden lg:inline-flex h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",title:"Enter focus mode",children:[(0,c.jsx)(aU.Maximize2,{className:"mr-1.5 h-3.5 w-3.5"}),"Focus"]})]})]})}),r.subSpecs&&r.subSpecs.length>0&&(0,c.jsx)("div",{className:"border-t bg-muted/30",children:(0,c.jsx)("div",{className:"px-3 sm:px-6 overflow-x-auto",children:(0,c.jsxs)("div",{className:"flex gap-1 py-2 min-w-max",children:[(0,c.jsxs)("button",{onClick:()=>A(null),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${!i?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[(0,c.jsx)(aS.Home,{className:"h-4 w-4"}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"Overview"})]}),r.subSpecs.map(a=>{let b=aZ[a.iconName]||aJ.FileText;return(0,c.jsxs)("button",{onClick:()=>A(a.file),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${i===a.file?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[(0,c.jsx)(b,{className:`h-4 w-4 ${a.color}`}),(0,c.jsx)("span",{className:"hidden sm:inline",children:a.name})]},a.file)})]})})})]}),(0,c.jsxs)("div",{className:"flex flex-col xl:flex-row xl:items-start",children:[(0,c.jsx)("main",{className:"flex-1 px-3 sm:px-6 py-3 sm:py-6 min-w-0",children:(0,c.jsxs)("div",{className:"space-y-4",children:[p&&(0,c.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading..."}),o&&(0,c.jsx)("div",{className:"text-sm text-destructive",children:"Error loading spec"}),(0,c.jsx)("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm sm:prose-base",children:(0,c.jsx)(Z.default,{remarkPlugins:[$.default,aY],rehypePlugins:[_.default,aa.default],components:{a:a=>(0,c.jsx)(ao,{...a,currentSpecNumber:r.specNumber||void 0}),pre:({children:a,...b})=>{let e=d.Children.toArray(a)[0];if(d.isValidElement(e)&&"code"===e.type&&"string"==typeof e.props.className&&e.props.className?.includes("language-mermaid")){let a=e.props,b="string"==typeof a.children?a.children:"";return(0,c.jsx)(aH.MermaidDiagram,{code:b})}return(0,c.jsx)("pre",{...b,children:a})}},children:y})})]})}),(0,c.jsx)("aside",{className:"hidden xl:block w-72 shrink-0 px-6 py-6 sticky top-32 h-[calc(100vh-8rem)] overflow-y-auto scrollbar-auto-hide",children:(0,c.jsx)(ap.TableOfContentsSidebar,{content:y})})]}),(0,c.jsx)("div",{className:"xl:hidden",children:(0,c.jsx)(ap.TableOfContents,{content:y})}),(0,c.jsx)(aq.BackToTop,{})]})}var a0=a.i(90555);function a1({spec:a,allSpecs:b,currentSubSpec:f}){let[g,h]=d.useState(()=>!1),i=d.useCallback(()=>{h(a=>{let b=!a;return localStorage.setItem("spec-detail-focus-mode",String(b)),b})},[]),j=d.useMemo(()=>b.map(a=>({id:a.id,specNumber:a.specNumber,title:a.title,specName:a.specName,status:a.status,priority:a.priority,tags:a.tags,contentMd:a.contentMd,updatedAt:a.updatedAt,subSpecsCount:"subSpecsCount"in a?a.subSpecsCount:void 0})),[b]);d.useEffect(()=>{(0,a0.primeSpecsSidebar)(j)},[j]),d.useEffect(()=>{(0,a0.setActiveSidebarSpec)(a.id)},[a.id]);let k=d.useCallback(a=>{fetch(`/api/specs/${a}`).catch(()=>{})},[]);return(0,c.jsxs)("div",{className:"flex min-h-[calc(100vh-3.5rem)] w-full min-w-0",children:[(0,c.jsx)(e.SpecsNavSidebar,{initialSpecs:j,currentSpecId:a.id,currentSubSpec:f,onSpecHover:k,className:(0,aj.cn)(g&&"hidden")}),(0,c.jsx)("div",{className:"flex-1 min-w-0",children:(0,c.jsx)(a_,{initialSpec:a,initialSubSpec:f,isFocusMode:g,onToggleFocusMode:i})})]})}a.s(["SpecDetailWrapper",()=>a1],599302)}];
|
|
1
|
+
module.exports=[599302,a=>{"use strict";let b;var c=a.i(40352),d=a.i(936883),e=a.i(558285),f=a.i(681612),g=a.i(836180);a.s(["ERROR_REVALIDATE_EVENT",()=>3,"FOCUS_EVENT",()=>0,"MUTATE_EVENT",()=>2,"RECONNECT_EVENT",()=>1],869111);var h=Object.prototype.hasOwnProperty;let i=new WeakMap,j=()=>{},k=j(),l=Object,m=a=>a===k,n=(a,b)=>({...a,...b}),o={},p={},q="undefined",r=typeof document!=q,s=!1,t=(a,b)=>{let c=i.get(a);return[()=>!m(b)&&a.get(b)||o,d=>{if(!m(b)){let e=a.get(b);b in p||(p[b]=e),c[5](b,n(e,d),e||o)}},c[6],()=>!m(b)&&b in p?p[b]:!m(b)&&a.get(b)||o]},u=!0,[v,w]=[j,j],x={initFocus:a=>(r&&document.addEventListener("visibilitychange",a),v("focus",a),()=>{r&&document.removeEventListener("visibilitychange",a),w("focus",a)}),initReconnect:a=>{let b=()=>{u=!0,a()},c=()=>{u=!1};return v("online",b),v("offline",c),()=>{w("online",b),w("offline",c)}}},y=!d.default.useId,z=!0,A=d.useEffect,B="undefined"!=typeof navigator&&navigator.connection;!z&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData);let C=new WeakMap,D=(a,b)=>a===`[object ${b}]`,E=0,F=a=>{let b,c,d=typeof a,e=l.prototype.toString.call(a),f=D(e,"Date"),g=D(e,"RegExp"),h=D(e,"Object");if(l(a)!==a||f||g)b=f?a.toJSON():"symbol"==d?a.toString():"string"==d?JSON.stringify(a):""+a;else{if(b=C.get(a))return b;if(b=++E+"~",C.set(a,b),Array.isArray(a)){for(c=0,b="@";c<a.length;c++)b+=F(a[c])+",";C.set(a,b)}if(h){b="#";let d=l.keys(a).sort();for(;!m(c=d.pop());)m(a[c])||(b+=c+":"+F(a[c])+",");C.set(a,b)}}return b},G=a=>{if("function"==typeof a)try{a=a()}catch(b){a=""}let b=a;return[a="string"==typeof a?a:(Array.isArray(a)?a.length:a)?F(a):"",b]},H=0,I=()=>++H;async function J(...a){let[b,c,d,e]=a,f=n({populateCache:!0,throwOnError:!0},"boolean"==typeof e?{revalidate:e}:e||{}),g=f.populateCache,h=f.rollbackOnError,j=f.optimisticData,l=f.throwOnError;if("function"==typeof c){let a=[];for(let d of b.keys())!/^\$(inf|sub)\$/.test(d)&&c(b.get(d)._k)&&a.push(d);return Promise.all(a.map(o))}return o(c);async function o(c){let e,[n]=G(c);if(!n)return;let[o,p]=t(b,n),[q,r,s,u]=i.get(b),v=()=>{let a=q[n];return("function"==typeof f.revalidate?f.revalidate(o().data,c):!1!==f.revalidate)&&(delete s[n],delete u[n],a&&a[0])?a[0](2).then(()=>o().data):o().data};if(a.length<3)return v();let w=d,x=!1,y=I();r[n]=[y,0];let z=!m(j),A=o(),B=A.data,C=A._c,D=m(C)?B:C;if(z&&p({data:j="function"==typeof j?j(D,B):j,_c:D}),"function"==typeof w)try{w=w(D)}catch(a){e=a,x=!0}if(w&&"function"==typeof w.then){let a;if(w=await w.catch(a=>{e=a,x=!0}),y!==r[n][0]){if(x)throw e;return w}x&&z&&(a=e,"function"==typeof h?h(a):!1!==h)&&(g=!0,p({data:D,_c:k}))}if(g&&!x&&("function"==typeof g?p({data:g(w,D),error:k,_c:k}):p({data:w,error:k,_c:k})),r[n][1]=I(),Promise.resolve(v()).then(()=>{p({_c:k})}),x){if(l)throw e;return}return w}}let K=(a,b)=>{if(!i.has(a)){n(x,b);let c=Object.create(null),d=J.bind(k,a),e=Object.create(null),f=(a,b)=>{let c=e[a]||[];return e[a]=c,c.push(b),()=>c.splice(c.indexOf(b),1)},g=(b,c,d)=>{a.set(b,c);let f=e[b];if(f)for(let a of f)a(c,d)},h=()=>{i.has(a)||i.set(a,[c,Object.create(null),Object.create(null),Object.create(null),d,g,f])};return h(),[a,d,h,j]}return[a,i.get(a)[4]]},[L,M]=K(new Map),N=n({onLoadingSlow:j,onSuccess:j,onError:j,onErrorRetry:(a,b,c,d,e)=>{let f=c.errorRetryCount,g=e.retryCount,h=~~((Math.random()+.5)*(1<<(g<8?g:8)))*c.errorRetryInterval;(m(f)||!(g>f))&&setTimeout(d,h,e)},onDiscarded:j,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:3e3,compare:function a(b,c){var d,e;if(b===c)return!0;if(b&&c&&(d=b.constructor)===c.constructor){if(d===Date)return b.getTime()===c.getTime();if(d===RegExp)return b.toString()===c.toString();if(d===Array){if((e=b.length)===c.length)for(;e--&&a(b[e],c[e]););return -1===e}if(!d||"object"==typeof b){for(d in e=0,b)if(h.call(b,d)&&++e&&!h.call(c,d)||!(d in c)||!a(b[d],c[d]))return!1;return Object.keys(c).length===e}}return b!=b&&c!=c},isPaused:()=>!1,cache:L,mutate:M,fallback:{}},{isOnline:()=>u,isVisible:()=>{let a=r&&document.visibilityState;return m(a)||"hidden"!==a}}),O=(a,b)=>{let c=n(a,b);if(b){let{use:d,fallback:e}=a,{use:f,fallback:g}=b;d&&f&&(c.use=d.concat(f)),e&&g&&(c.fallback=n(e,g))}return c},P=(0,d.createContext)({});var Q=a.i(869111);let R=!1,S=(R?window.__SWR_DEVTOOLS_USE__:[]).concat(a=>(b,c,d)=>{let e=c&&((...a)=>{let[d]=G(b),[,,,e]=i.get(L);if(d.startsWith("$inf$"))return c(...a);let f=e[d];return m(f)?c(...a):(delete e[d],f)});return a(b,e,d)});R&&(window.__SWR_DEVTOOLS_REACT__=d.default);let T=()=>{},U=T(),V=(new WeakMap,d.default.use||(a=>{switch(a.status){case"pending":throw a;case"fulfilled":return a.value;case"rejected":throw a.reason;default:throw a.status="pending",a.then(b=>{a.status="fulfilled",a.value=b},b=>{a.status="rejected",a.reason=b}),a}})),W={dedupe:!0},X=Promise.resolve(k);l.defineProperty(a=>{let{value:b}=a,c=(0,d.useContext)(P),e="function"==typeof b,f=(0,d.useMemo)(()=>e?b(c):b,[e,c,b]),g=(0,d.useMemo)(()=>e?f:O(c,f),[e,c,f]),h=f&&f.provider,i=(0,d.useRef)(k);h&&!i.current&&(i.current=K(h(g.cache||L),f));let j=i.current;return j&&(g.cache=j[0],g.mutate=j[1]),A(()=>{if(j)return j[2]&&j[2](),j[3]},[]),(0,d.createElement)(P.Provider,n(a,{value:g}))},"defaultValue",{value:N});let Y=(b=(a,b,c)=>{let{cache:e,compare:f,suspense:h,fallbackData:j,revalidateOnMount:l,revalidateIfStale:o,refreshInterval:p,refreshWhenHidden:q,refreshWhenOffline:r,keepPreviousData:s}=c,[u,v,w,x]=i.get(e),[B,C]=G(a),D=(0,d.useRef)(!1),E=(0,d.useRef)(!1),F=(0,d.useRef)(B),H=(0,d.useRef)(b),K=(0,d.useRef)(c),L=()=>K.current.isVisible()&&K.current.isOnline(),[M,N,O,P]=t(e,B),R=(0,d.useRef)({}).current,S=m(j)?m(c.fallback)?k:c.fallback[B]:j,T=(a,b)=>{for(let c in R)if("data"===c){if(!f(a[c],b[c])&&(!m(a[c])||!f(ad,b[c])))return!1}else if(b[c]!==a[c])return!1;return!0},U=(0,d.useMemo)(()=>{let a=!!B&&!!b&&(m(l)?!K.current.isPaused()&&!h&&!1!==o:l),c=b=>{let c=n(b);return(delete c._k,a)?{isValidating:!0,isLoading:!0,...c}:c},d=M(),e=P(),f=c(d),g=d===e?f:c(e),i=f;return[()=>{let a=c(M());return T(a,i)?(i.data=a.data,i.isLoading=a.isLoading,i.isValidating=a.isValidating,i.error=a.error,i):(i=a,a)},()=>g]},[e,B]),Y=(0,g.useSyncExternalStore)((0,d.useCallback)(a=>O(B,(b,c)=>{T(c,b)||a()}),[e,B]),U[0],U[1]),Z=!D.current,$=u[B]&&u[B].length>0,_=Y.data,aa=m(_)?S&&"function"==typeof S.then?V(S):S:_,ab=Y.error,ac=(0,d.useRef)(aa),ad=s?m(_)?m(ac.current)?aa:ac.current:_:aa,ae=(!$||!!m(ab))&&(Z&&!m(l)?l:!K.current.isPaused()&&(h?!m(aa)&&o:m(aa)||o)),af=!!(B&&b&&Z&&ae),ag=m(Y.isValidating)?af:Y.isValidating,ah=m(Y.isLoading)?af:Y.isLoading,ai=(0,d.useCallback)(async a=>{let b,d,e=H.current;if(!B||!e||E.current||K.current.isPaused())return!1;let g=!0,h=a||{},i=!w[B]||!h.dedupe,j=()=>y?!E.current&&B===F.current&&D.current:B===F.current,l={isValidating:!1,isLoading:!1},n=()=>{N(l)},o=()=>{let a=w[B];a&&a[1]===d&&delete w[B]},p={isValidating:!0};m(M().data)&&(p.isLoading=!0);try{if(i&&(N(p),c.loadingTimeout&&m(M().data)&&setTimeout(()=>{g&&j()&&K.current.onLoadingSlow(B,c)},c.loadingTimeout),w[B]=[e(C),I()]),[b,d]=w[B],b=await b,i&&setTimeout(o,c.dedupingInterval),!w[B]||w[B][1]!==d)return i&&j()&&K.current.onDiscarded(B),!1;l.error=k;let a=v[B];if(!m(a)&&(d<=a[0]||d<=a[1]||0===a[1]))return n(),i&&j()&&K.current.onDiscarded(B),!1;let h=M().data;l.data=f(h,b)?h:b,i&&j()&&K.current.onSuccess(b,B,c)}catch(c){o();let a=K.current,{shouldRetryOnError:b}=a;!a.isPaused()&&(l.error=c,i&&j())&&(a.onError(c,B,a),(!0===b||"function"==typeof b&&b(c))&&(!K.current.revalidateOnFocus||!K.current.revalidateOnReconnect||L())&&a.onErrorRetry(c,B,a,a=>{let b=u[B];b&&b[0]&&b[0](Q.ERROR_REVALIDATE_EVENT,a)},{retryCount:(h.retryCount||0)+1,dedupe:!0}))}return g=!1,n(),!0},[B,e]),aj=(0,d.useCallback)((...a)=>J(e,F.current,...a),[]);if(A(()=>{H.current=b,K.current=c,m(_)||(ac.current=_)}),A(()=>{var a;let b;if(!B)return;let c=ai.bind(k,W),d=0;K.current.revalidateOnFocus&&(d=Date.now()+K.current.focusThrottleInterval);let e=(a=(a,b={})=>{if(a==Q.FOCUS_EVENT){let a=Date.now();K.current.revalidateOnFocus&&a>d&&L()&&(d=a+K.current.focusThrottleInterval,c())}else if(a==Q.RECONNECT_EVENT)K.current.revalidateOnReconnect&&L()&&c();else if(a==Q.MUTATE_EVENT)return ai();else if(a==Q.ERROR_REVALIDATE_EVENT)return ai(b)},(b=u[B]||(u[B]=[])).push(a),()=>{let c=b.indexOf(a);c>=0&&(b[c]=b[b.length-1],b.pop())});if(E.current=!1,F.current=B,D.current=!0,N({_k:C}),ae&&!w[B])if(m(aa)||z)c();else setTimeout(c,1);return()=>{E.current=!0,e()}},[B]),A(()=>{let a;function b(){let b="function"==typeof p?p(M().data):p;b&&-1!==a&&(a=setTimeout(c,b))}function c(){!M().error&&(q||K.current.isVisible())&&(r||K.current.isOnline())?ai(W).then(b):b()}return b(),()=>{a&&(clearTimeout(a),a=-1)}},[p,q,r,B]),(0,d.useDebugValue)(ad),h){let a=B&&m(aa);if(!y&&z&&a)throw Error("Fallback data is required when using Suspense in SSR.");a&&(H.current=b,K.current=c,E.current=!1);let d=x[B];if(V(!m(d)&&a?aj(d):X),!m(ab)&&a)throw ab;let e=a?ai(W):X;!m(ad)&&a&&(e.status="fulfilled",e.value=!0),V(e)}return{mutate:aj,get data(){return R.data=!0,ad},get error(){return R.error=!0,ab},get isValidating(){return R.isValidating=!0,ag},get isLoading(){return R.isLoading=!0,ah}}},function(...a){let c,e=(c=(0,d.useContext)(P),(0,d.useMemo)(()=>n(N,c),[c])),[f,g,h]="function"==typeof a[1]?[a[0],a[1],a[2]||{}]:[a[0],null,(null===a[1]?a[2]:a[1])||{}],i=O(e,h),j=b,{use:k}=i,l=(k||[]).concat(S);for(let a=l.length;a--;)j=l[a](j);return j(f,g||i.fetcher||null,i)});var Z=a.i(459500),$=a.i(316828),_=a.i(312750),aa=a.i(524172),ab=a.i(227725),ac=a.i(297557),ad=a.i(659358),ae=a.i(800966),af=a.i(262936),ag=a.i(532418),ah=a.i(890075),ai=a.i(687052);function aj({createdAt:a,updatedAt:b,completedAt:d,status:e,className:f}){let g=[];return(a&&g.push({label:"Created",date:a,isActive:!0,isFuture:!1,icon:ac.Clock,color:"text-blue-600"}),"in-progress"===e||"complete"===e||"archived"===e?g.push({label:"In Progress",date:b||a,isActive:!0,isFuture:!1,icon:ad.PlayCircle,color:"text-orange-600"}):g.push({label:"In Progress",date:null,isActive:!1,isFuture:!0,icon:ag.Circle,color:"text-muted-foreground"}),"complete"===e||"archived"===e?g.push({label:"Complete",date:d||b,isActive:!0,isFuture:!1,icon:ae.CheckCircle2,color:"text-green-600"}):g.push({label:"Complete",date:null,isActive:!1,isFuture:!0,icon:ag.Circle,color:"text-muted-foreground"}),"archived"===e&&g.push({label:"Archived",date:b,isActive:!0,isFuture:!1,icon:af.Archive,color:"text-gray-600"}),0===g.length)?null:(0,c.jsx)("div",{className:(0,ai.cn)("flex items-start gap-2",f),children:g.map((a,b)=>{let d=a.icon,e=b===g.length-1,f=e?null:g[b+1],h=a.date&&f?.date&&!f.isFuture?(0,ah.formatDuration)(a.date,f.date):"";return(0,c.jsxs)("div",{className:"flex items-center gap-2 flex-1",children:[(0,c.jsxs)("div",{className:"flex flex-col items-center gap-1 min-w-0",children:[(0,c.jsx)("div",{className:(0,ai.cn)("w-8 h-8 rounded-full border-2 bg-background flex items-center justify-center shrink-0",a.isActive&&!a.isFuture?"border-primary":"border-muted-foreground/40"),children:d&&(0,c.jsx)(d,{className:(0,ai.cn)("h-4 w-4",a.isActive&&!a.isFuture?"text-primary":"text-muted-foreground/60")})}),(0,c.jsx)("div",{className:(0,ai.cn)("text-xs font-medium text-center whitespace-nowrap",a.isActive&&!a.isFuture?"text-foreground":"text-muted-foreground"),children:a.label}),(0,c.jsxs)("div",{className:"text-[10px] text-center min-h-[14px]",children:[a.date&&!a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground",children:(0,ah.formatRelativeTime)(a.date)}),!a.date&&a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/70",children:"Awaiting start"}),a.date&&a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/70",children:"Queued"}),!a.date&&!a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/60",children:"Pending update"})]})]}),!e&&(0,c.jsxs)("div",{className:"flex flex-col items-center flex-1 min-w-4 gap-0.5",children:[(0,c.jsx)("div",{className:(0,ai.cn)("h-0.5 w-full",a.isActive&&!a.isFuture?"bg-primary":"bg-muted-foreground/40")}),h&&(0,c.jsx)("div",{className:"text-[10px] text-muted-foreground font-medium whitespace-nowrap",children:h})]})]},b)})})}var ak=a.i(882479),al=a.i(322570),am=a.i(247338);a.i(294783);var an=a.i(156916),ao=a.i(915929);let ap=["planned","in-progress","complete","archived"],aq={planned:{icon:ac.Clock,label:"Planned",className:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},"in-progress":{icon:ad.PlayCircle,label:"In Progress",className:"bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-400"},complete:{icon:ae.CheckCircle2,label:"Complete",className:"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400"},archived:{icon:af.Archive,label:"Archived",className:"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-400"}};function ar({specId:a,currentStatus:b,onUpdate:e,disabled:f=!1,projectId:g}){let[h,i]=d.useState(b||"planned"),[j,k]=d.useState(!1),[l,m]=d.useState(null),n=async b=>{if(b!==h){i(b),k(!0),m(null);try{let c=g?`/api/projects/${g}/specs/${a}/metadata`:`/api/specs/${a}/metadata`,d=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:b})});if(!d.ok){let a=await d.json();throw Error(a.error||"Failed to update status")}e?.(b),an.toast.success("Status updated")}catch(b){i(h);let a=b instanceof Error?b.message:"Failed to update";m(a),an.toast.error("Failed to update status",{description:a}),console.error("Status update failed:",b)}finally{k(!1)}}},o=aq[h]||aq.planned,p=o.icon;return(0,c.jsxs)("div",{className:"relative",children:[(0,c.jsxs)(ao.Select,{value:h,onValueChange:a=>n(a),disabled:f||j,children:[(0,c.jsx)(ao.SelectTrigger,{className:(0,ai.cn)("h-7 w-fit min-w-[120px] border-0 px-2 text-xs font-medium",o.className,j&&"opacity-70"),"aria-label":"Change spec status",children:(0,c.jsxs)("div",{className:"flex items-center gap-1.5",children:[j?(0,c.jsx)(am.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,c.jsx)(p,{className:"h-3.5 w-3.5"}),(0,c.jsx)(ao.SelectValue,{children:o.label})]})}),(0,c.jsx)(ao.SelectContent,{children:ap.map(a=>{let b=aq[a],d=b.icon;return(0,c.jsx)(ao.SelectItem,{value:a,className:"pl-2",children:(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(d,{className:"h-4 w-4"}),(0,c.jsx)("span",{children:b.label})]})},a)})})]}),l&&(0,c.jsx)("div",{className:"absolute top-full left-0 mt-1 text-xs text-destructive",children:l})]})}var as=a.i(853206),at=a.i(283695),au=a.i(792804),av=a.i(845566);let aw=["low","medium","high","critical"],ax={critical:{icon:as.AlertCircle,label:"Critical",className:"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400"},high:{icon:at.ArrowUp,label:"High",className:"bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-400"},medium:{icon:au.Minus,label:"Medium",className:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},low:{icon:av.ArrowDown,label:"Low",className:"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-400"}};function ay({specId:a,currentPriority:b,onUpdate:e,disabled:f=!1,projectId:g}){let[h,i]=d.useState(b||"medium"),[j,k]=d.useState(!1),[l,m]=d.useState(null),n=async b=>{if(b!==h){i(b),k(!0),m(null);try{let c=g?`/api/projects/${g}/specs/${a}/metadata`:`/api/specs/${a}/metadata`,d=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:b})});if(!d.ok){let a=await d.json();throw Error(a.error||"Failed to update priority")}e?.(b),an.toast.success("Priority updated")}catch(b){i(h);let a=b instanceof Error?b.message:"Failed to update";m(a),an.toast.error("Failed to update priority",{description:a}),console.error("Priority update failed:",b)}finally{k(!1)}}},o=ax[h]||ax.medium,p=o.icon;return(0,c.jsxs)("div",{className:"relative",children:[(0,c.jsxs)(ao.Select,{value:h,onValueChange:a=>n(a),disabled:f||j,children:[(0,c.jsx)(ao.SelectTrigger,{className:(0,ai.cn)("h-7 w-fit min-w-[100px] border-0 px-2 text-xs font-medium",o.className,j&&"opacity-70"),"aria-label":"Change spec priority",children:(0,c.jsxs)("div",{className:"flex items-center gap-1.5",children:[j?(0,c.jsx)(am.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,c.jsx)(p,{className:"h-3.5 w-3.5"}),(0,c.jsx)(ao.SelectValue,{children:o.label})]})}),(0,c.jsx)(ao.SelectContent,{children:aw.map(a=>{let b=ax[a],d=b.icon;return(0,c.jsx)(ao.SelectItem,{value:a,className:"pl-2",children:(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(d,{className:"h-4 w-4"}),(0,c.jsx)("span",{children:b.label})]})},a)})})]}),l&&(0,c.jsx)("div",{className:"absolute top-full left-0 mt-1 text-xs text-destructive",children:l})]})}var az=a.i(914174),aA=a.i(479220),aB=a.i(837717),aC=a.i(285232),aD=a.i(964952);function aE({specId:a,currentTags:b,onUpdate:e,disabled:f=!1,projectId:g}){let[h,i]=d.useState(b||[]),[j,k]=d.useState([]),[l,m]=d.useState(!1),[n,o]=d.useState(null),[p,q]=d.useState(!1),[r,s]=d.useState("");d.useEffect(()=>{p&&0===j.length&&(async()=>{try{let a=g?`/api/projects/${g}/tags`:"/api/tags",b=await fetch(a);if(b.ok){let a=await b.json();k(a.tags||[])}}catch(a){console.error("Failed to fetch tags:",a)}})()},[p,j.length,g]);let t=async b=>{i(b),m(!0),o(null);try{let c=g?`/api/projects/${g}/specs/${a}/metadata`:`/api/specs/${a}/metadata`,d=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tags:b})});if(!d.ok){let a=await d.json();throw Error(a.error||"Failed to update tags")}e?.(b),an.toast.success("Tags updated")}catch(b){i(h);let a=b instanceof Error?b.message:"Failed to update";o(a),an.toast.error("Failed to update tags",{description:a}),console.error("Tags update failed:",b)}finally{m(!1)}},u=a=>{let b=a.trim().toLowerCase();b&&(h.includes(b)?o("Tag already exists"):(t([...h,b]),s(""),q(!1)))},v=d.useMemo(()=>{let a=r.toLowerCase();return j.filter(a=>!h.includes(a)).filter(b=>!a||b.toLowerCase().includes(a))},[j,h,r]),w=r.trim()&&!h.includes(r.trim().toLowerCase())&&!j.includes(r.trim().toLowerCase());return(0,c.jsx)("div",{className:"relative",children:(0,c.jsxs)("div",{className:"flex gap-1 flex-wrap items-center",children:[h.map(a=>(0,c.jsxs)(aB.Badge,{variant:"outline",className:(0,ai.cn)("text-xs pr-1 gap-1",f&&"opacity-50"),children:[a,!f&&(0,c.jsx)("button",{onClick:()=>{t(h.filter(b=>b!==a))},disabled:l,className:"ml-1 rounded-full hover:bg-muted p-0.5 transition-colors","aria-label":`Remove ${a} tag`,children:(0,c.jsx)(az.X,{className:"h-3 w-3"})})]},a)),!f&&(0,c.jsxs)(aC.Popover,{open:p,onOpenChange:q,children:[(0,c.jsx)(aC.PopoverTrigger,{asChild:!0,children:(0,c.jsx)(ab.Button,{variant:"outline",size:"sm",className:"h-6 px-2 text-xs",disabled:l,"aria-label":"Add new tag",children:l?(0,c.jsx)(am.Loader2,{className:"h-3 w-3 animate-spin"}):(0,c.jsx)(aA.Plus,{className:"h-3 w-3"})})}),(0,c.jsxs)(aC.PopoverContent,{className:"w-56 p-0",align:"start",children:[(0,c.jsxs)(aD.Command,{children:[(0,c.jsx)(aD.CommandInput,{placeholder:"Search or create tag...",value:r,onValueChange:s}),(0,c.jsxs)(aD.CommandList,{children:[(0,c.jsx)(aD.CommandEmpty,{children:w?(0,c.jsxs)(aD.CommandItem,{onSelect:()=>u(r),className:"cursor-pointer",children:[(0,c.jsx)(aA.Plus,{className:"mr-2 h-4 w-4"}),'Create "',r.trim().toLowerCase(),'"']}):(0,c.jsx)("span",{className:"text-muted-foreground px-2 py-1.5 text-sm",children:"No tags found."})}),v.length>0&&(0,c.jsx)(aD.CommandGroup,{heading:"Existing tags",children:v.slice(0,10).map(a=>(0,c.jsx)(aD.CommandItem,{value:a,onSelect:()=>u(a),className:"cursor-pointer",children:a},a))}),w&&v.length>0&&(0,c.jsx)(aD.CommandGroup,{heading:"Create new",children:(0,c.jsxs)(aD.CommandItem,{onSelect:()=>u(r),className:"cursor-pointer",children:[(0,c.jsx)(aA.Plus,{className:"mr-2 h-4 w-4"}),'Create "',r.trim().toLowerCase(),'"']})})]})]}),n&&(0,c.jsx)("p",{className:"text-xs text-destructive px-2 pb-2",children:n})]})]})]})})}var aF=a.i(920378);function aG({href:a,children:b,currentSpecNumber:d,projectId:e,...f}){if(!a)return(0,c.jsx)("a",{...f,children:b});let g=function(a,b,c){if(a.startsWith("#")||a.startsWith("http://")||a.startsWith("https://"))return a;let d=(a,b)=>{let d=c?`/projects/${c}/specs/${a}`:`/specs/${a}`;return b?`${d}?subspec=${b}`:d},e=a.match(/^\.\/([^/]+\.md)$/);if(e&&b){let a=e[1];return"README.md"!==a?d(b,a):d(b)}let f=a.match(/^\.\.\/(\d+)-[^/]+\/?([^/]+\.md)?$/);if(f){let a=parseInt(f[1],10),b=f[2];return b&&"README.md"!==b?d(a,b):d(a)}return a}(a,d,e),h=g.startsWith("http://")||g.startsWith("https://"),i=g.startsWith("#");return h||i?(0,c.jsx)("a",{href:g,...f,target:h?"_blank":void 0,rel:h?"noopener noreferrer":void 0,children:b}):(0,c.jsx)(aF.default,{href:g,...f,className:"text-primary hover:underline",children:b})}var aH=a.i(87140),aI=a.i(731751),aJ=a.i(183214),aK=a.i(398293),aL=a.i(231008),aM=a.i(53897),aN=a.i(669153);let aO="#f59e0b",aP="#ef4444",aQ={current:"border-primary/70 bg-primary/5 text-foreground",precedence:"border-amber-400/70 bg-amber-400/10 text-amber-900 dark:text-amber-200","required-by":"border-red-400/70 bg-red-400/10 text-red-900 dark:text-red-200"},aR={rankdir:"LR",align:"UL",nodesep:60,ranksep:120,marginx:40,marginy:40},aS=d.memo(function({data:a}){return(0,c.jsxs)("div",{className:(0,ai.cn)("flex w-[280px] flex-col gap-1.5 rounded-xl border-2 px-5 py-4 text-base shadow-md transition-colors",aQ[a.tone],a.interactive&&"cursor-pointer hover:border-primary/70 hover:shadow-lg"),children:[(0,c.jsx)(aN.Handle,{type:"target",position:aN.Position.Left,className:"opacity-0"}),(0,c.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground/70",children:a.badge}),(0,c.jsx)("span",{className:"text-base font-semibold leading-snug",children:a.label}),a.subtitle&&(0,c.jsx)("span",{className:"text-sm text-muted-foreground/80",children:a.subtitle}),(0,c.jsx)(aN.Handle,{type:"source",position:aN.Position.Right,className:"opacity-0"})]})});aS.displayName="SpecNode";let aT={specNode:aS};function aU(a){let b=a.trim();if(!b)return"Unknown Spec";let c=b.match(/^(\d+)[-_]?(.*)$/);if(!c)return b;let d=c[1].padStart(3,"0"),e=c[2]?.replace(/[-_]/g," ").trim();return e?`#${d} ${e}`:`#${d}`}function aV(a,b){let c=a.trim(),d=c.match(/^(\d+)/),e=d?parseInt(d[1],10):c;return b?`/projects/${b}/specs/${e}`:`/specs/${e}`}function aW(a,b,c){return`${a}-${c}-${b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-")||c}`}function aX({relationships:a,specNumber:b,specTitle:e,projectId:g}){let h=(0,f.useRouter)(),[i,j]=d.useState(null),k=d.useMemo(()=>{let c,d,f,h;return c=[],d=[],f={id:"current-spec",type:"specNode",data:{label:b?`#${b.toString().padStart(3,"0")} ${e}`:e,badge:"Current Spec",subtitle:"This spec",tone:"current",interactive:!1},position:{x:0,y:0},draggable:!1,selectable:!1,sourcePosition:aN.Position.Right,targetPosition:aN.Position.Left},c.push(f),a.dependsOn?.forEach((a,b)=>{let e=aW("precedence",a,b);c.push({id:e,type:"specNode",data:{label:aU(a),badge:"Depends On",subtitle:"Must complete first",tone:"precedence",href:aV(a,g),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:aN.Position.Right,targetPosition:aN.Position.Left}),d.push({id:`edge-${e}-current`,source:e,target:f.id,type:"smoothstep",markerEnd:{type:aN.MarkerType.ArrowClosed,color:aO,width:28,height:28},style:{stroke:aO,strokeWidth:3}})}),a.requiredBy?.forEach((a,b)=>{let e=aW("required-by",a,b);c.push({id:e,type:"specNode",data:{label:aU(a),badge:"Required By",subtitle:"Blocked by this spec",tone:"required-by",href:aV(a,g),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:aN.Position.Right,targetPosition:aN.Position.Left}),d.push({id:`edge-current-${e}`,source:f.id,target:e,type:"smoothstep",markerEnd:{type:aN.MarkerType.ArrowClosed,color:aP,width:28,height:28},style:{stroke:aP,strokeWidth:3}})}),(h=new aJ.default.graphlib.Graph).setGraph(aR),h.setDefaultEdgeLabel(()=>({})),c.forEach(a=>{h.setNode(a.id,{width:280,height:110})}),d.forEach(a=>{h.setEdge(a.source,a.target)}),aJ.default.layout(h),{nodes:c.map(a=>{let{x:b,y:c}=h.node(a.id);return{...a,position:{x:b-140,y:c-55}}}),edges:d}},[a,b,e,g]),l=d.useCallback(a=>{j(a),requestAnimationFrame(()=>{a.fitView({padding:.4,duration:350})})},[]);d.useEffect(()=>{i&&i.fitView({padding:.4,duration:350})},[i,k.nodes]);let m=d.useCallback((a,b)=>{!b?.data||b.data.href&&h.push(b.data.href)},[h]);return(0,c.jsxs)("div",{className:"flex h-full flex-col gap-4",children:[(0,c.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 text-sm text-muted-foreground",children:[(0,c.jsxs)("div",{children:[(0,c.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wide",children:"Dependency Map"}),(0,c.jsx)("p",{className:"text-base text-foreground",children:"Explore precedence and connected work"})]}),(0,c.jsx)("div",{className:"rounded-full border border-border px-3 py-1.5 text-sm font-medium uppercase tracking-wide",children:"React Flow DAG"})]}),(0,c.jsx)("div",{className:"flex-1 overflow-hidden rounded-2xl border border-border bg-muted/30",children:(0,c.jsxs)(aK.default,{nodes:k.nodes,edges:k.edges,nodeTypes:aT,onInit:l,className:"h-full w-full",fitView:!0,proOptions:{hideAttribution:!0},nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,panOnScroll:!0,panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,minZoom:.4,maxZoom:1.6,onNodeClick:m,children:[(0,c.jsx)(aL.Background,{gap:24,size:1,color:"rgba(148, 163, 184, 0.3)"}),(0,c.jsx)(aM.Controls,{showInteractive:!1})]})}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-4 text-sm text-muted-foreground",children:[(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-amber-400/80"}),"Depends On → blocks until complete"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-red-400/80"}),"Required By ← blocked by this spec"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-sky-400/80"}),"Related ↔ connected work (bidirectional)"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-primary/60"}),"Drag to pan • Scroll / pinch to zoom."]})]})]})}var aY=a.i(228e3),aZ=a.i(186945),a$=a.i(72245),a_=a.i(615268),a0=a.i(863535);let a1=(0,a0.default)("palette",[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]]),a2=(0,a0.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]),a3=(0,a0.default)("test-tube",[["path",{d:"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2",key:"125lnx"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M14.5 16h-5",key:"1ox875"}]]),a4=(0,a0.default)("square-check-big",[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]),a5=(0,a0.default)("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]),a6=(0,a0.default)("map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]]);var a7=a.i(915970),a8=a.i(476011),a9=a.i(418419),ba=a.i(404620),bb=a.i(709211),bc=a.i(730702),bd=a.i(475661),be=a.i(386868);let bf=()=>a=>{(0,be.visit)(a,"html",a=>{"string"==typeof a.value&&a.value.trim().startsWith("<!--")&&(a.value="")})},bg={FileText:a_.FileText,Palette:a1,Code:a2,TestTube:a3,CheckSquare:a4,Wrench:a5,Map:a6,GitBranch:a7.GitBranch,Home:a8.Home,TrendingUp:a9.TrendingUp},bh=a=>fetch(a).then(a=>{if(!a.ok)throw Error(`HTTP error! status: ${a.status}`);return a.json()});function bi({initialSpec:a,initialSubSpec:b,isFocusMode:e=!1,onToggleFocusMode:g}){let h=(0,f.useRouter)(),i=(0,f.useSearchParams)().get("subspec")||b,[j,k]=d.useState(!1),[l,m]=d.useState(!1),{getSpecUrl:n,projectId:o}=(0,a$.useProjectUrl)(),p=o?`/api/projects/${o}/specs/${a.specNumber||a.id}`:`/api/specs/${a.specNumber||a.id}`,q=o?`/api/projects/${o}/specs/${a.specNumber||a.id}/dependency-graph`:`/api/specs/${a.specNumber||a.id}/dependency-graph`,{data:r,error:s,isLoading:t}=Y(p,bh,{fallbackData:{spec:a},revalidateOnFocus:!1,dedupingInterval:5e3}),{data:u}=Y(l?q:null,bh,{revalidateOnFocus:!1,dedupingInterval:6e4}),v=r?.spec||a,w=d.useMemo(()=>v.tags||[],[v.tags]),x=v.updatedAt?(0,ah.formatRelativeTime)(v.updatedAt):"N/A",y=v.relationships,z=u?{dependsOn:u.dependsOn.map(a=>a.specName),requiredBy:u.requiredBy.map(a=>a.specName)}:y,A=!!(y&&((y.dependsOn?.length??0)>0||(y.requiredBy?.length??0)>0));d.useEffect(()=>{A||m(!1)},[A]);let B=(0,ai.extractH1Title)(v.contentMd)||v.title||v.specName,C=v.contentMd;if(i&&v.subSpecs){let a=v.subSpecs.find(a=>a.file===i);a&&(C=a.content)}let D=a=>a?new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):"N/A",E=a=>{let b=a?n(v.specNumber||v.id,a):n(v.specNumber||v.id);h.push(b,{scroll:!1})},F=d.useRef(null);return d.useEffect(()=>{let a=()=>{let a=56;window.innerWidth>=1024&&F.current&&(a+=F.current.offsetHeight-56),document.documentElement.style.scrollPaddingTop=`${a}px`};a(),window.addEventListener("resize",a);let b=new ResizeObserver(a);return F.current&&b.observe(F.current),()=>{window.removeEventListener("resize",a),b.disconnect(),document.documentElement.style.scrollPaddingTop=""}},[v,w]),(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("header",{ref:F,className:"lg:sticky lg:top-14 lg:z-20 border-b bg-card",children:[(0,c.jsx)("div",{className:(0,ai.cn)("px-3 sm:px-6",e?"py-1.5":"py-2 sm:py-3"),children:e?(0,c.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,c.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,c.jsxs)("h1",{className:"text-base font-semibold tracking-tight truncate",children:[v.specNumber&&(0,c.jsxs)("span",{className:"text-muted-foreground",children:["#",v.specNumber.toString().padStart(3,"0")," "]}),B]}),(0,c.jsx)(ak.StatusBadge,{status:v.status||"planned"}),(0,c.jsx)(al.PriorityBadge,{priority:v.priority||"medium"})]}),(0,c.jsx)(ab.Button,{type:"button",variant:"ghost",size:"sm",onClick:g,className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground shrink-0",title:"Exit focus mode",children:(0,c.jsx)(bb.Minimize2,{className:"h-4 w-4"})})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{className:"flex items-start justify-between gap-2 mb-1.5 sm:mb-2",children:[(0,c.jsxs)("h1",{className:"text-lg sm:text-xl font-bold tracking-tight",children:[v.specNumber&&(0,c.jsxs)("span",{className:"text-muted-foreground",children:["#",v.specNumber.toString().padStart(3,"0")," "]}),B]}),(0,c.jsxs)(ab.Button,{variant:"ghost",size:"icon",className:"lg:hidden h-8 w-8 -mr-2 shrink-0 text-muted-foreground",onClick:()=>{},children:[(0,c.jsx)(bc.List,{className:"h-5 w-5"}),(0,c.jsx)("span",{className:"sr-only",children:"Toggle specs list"})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(ar,{specId:v.specNumber?.toString()||v.id,currentStatus:v.status||"planned",projectId:o}),(0,c.jsx)(ay,{specId:v.specNumber?.toString()||v.id,currentPriority:v.priority||"medium",projectId:o}),(0,c.jsx)("div",{className:"h-4 w-px bg-border mx-1 hidden sm:block"}),(0,c.jsx)(aE,{specId:v.specNumber?.toString()||v.id,currentTags:w,projectId:o})]}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-2 sm:gap-4 text-xs text-muted-foreground mt-1.5 sm:mt-2",children:[(0,c.jsxs)("span",{className:"hidden sm:inline",children:["Created: ",D(v.createdAt)]}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{children:["Updated: ",D(v.updatedAt),v.updatedAt&&(0,c.jsxs)("span",{className:"ml-1 text-[11px] text-muted-foreground/80",children:["(",x,")"]})]}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{className:"hidden md:inline",children:["Name: ",v.specName]}),v.assignee&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{className:"hidden sm:inline",children:["Assignee: ",v.assignee]})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[(0,c.jsxs)(aZ.Dialog,{open:j,onOpenChange:k,children:[(0,c.jsxs)(ab.Button,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":j,onClick:()=>k(!0),className:"h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[(0,c.jsx)(ac.Clock,{className:"mr-1.5 h-3.5 w-3.5"}),"View Timeline",(0,c.jsx)(ba.Maximize2,{className:"ml-1.5 h-3.5 w-3.5"})]}),(0,c.jsxs)(aZ.DialogContent,{className:"w-[min(900px,90vw)] max-w-3xl max-h-[90vh] overflow-y-auto",children:[(0,c.jsxs)(aZ.DialogHeader,{children:[(0,c.jsx)(aZ.DialogTitle,{children:"Spec Timeline"}),(0,c.jsx)(aZ.DialogDescription,{children:"Created, updated, and completion milestones."})]}),(0,c.jsx)("div",{className:"rounded-xl border border-border bg-muted/30 p-4",children:(0,c.jsx)(aj,{createdAt:v.createdAt,updatedAt:v.updatedAt,completedAt:v.completedAt,status:v.status||"planned"})})]})]}),(0,c.jsxs)(aZ.Dialog,{open:l,onOpenChange:m,children:[(0,c.jsxs)(ab.Button,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":l,onClick:()=>m(!0),disabled:!A,className:(0,ai.cn)("h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",!A&&"cursor-not-allowed opacity-50"),children:[(0,c.jsx)(a7.GitBranch,{className:"mr-1.5 h-3.5 w-3.5"}),"View Dependencies",(0,c.jsx)(ba.Maximize2,{className:"ml-1.5 h-3.5 w-3.5"})]}),(0,c.jsxs)(aZ.DialogContent,{className:"flex h-[85vh] w-[min(1200px,95vw)] max-w-6xl flex-col gap-4 overflow-hidden",children:[(0,c.jsxs)(aZ.DialogHeader,{children:[(0,c.jsx)(aZ.DialogTitle,{children:"Dependency Graph"}),(0,c.jsxs)(aZ.DialogDescription,{className:"flex flex-col gap-2",children:[(0,c.jsx)("span",{children:"Precedence requirements and connected specs rendered with automatic layout."}),(0,c.jsxs)(aF.default,{href:o?`/projects/${o}/dependencies?spec=${v.specNumber||v.id}`:`/dependencies?spec=${v.specNumber||v.id}`,className:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline w-fit",onClick:()=>m(!1),children:[(0,c.jsx)(bd.ExternalLink,{className:"h-3 w-3"}),"View in full dependencies page"]})]})]}),(0,c.jsx)("div",{className:"min-h-0 flex-1",children:z&&(0,c.jsx)(aX,{relationships:z,specNumber:v.specNumber,specTitle:B,projectId:o})})]})]}),g&&(0,c.jsxs)(ab.Button,{type:"button",variant:"outline",size:"sm",onClick:g,className:"hidden lg:inline-flex h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",title:"Enter focus mode",children:[(0,c.jsx)(ba.Maximize2,{className:"mr-1.5 h-3.5 w-3.5"}),"Focus"]})]})]})}),v.subSpecs&&v.subSpecs.length>0&&(0,c.jsx)("div",{className:"border-t bg-muted/30",children:(0,c.jsx)("div",{className:"px-3 sm:px-6 overflow-x-auto",children:(0,c.jsxs)("div",{className:"flex gap-1 py-2 min-w-max",children:[(0,c.jsxs)("button",{onClick:()=>E(null),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${!i?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[(0,c.jsx)(a8.Home,{className:"h-4 w-4"}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"Overview"})]}),v.subSpecs.map(a=>{let b=bg[a.iconName]||a_.FileText;return(0,c.jsxs)("button",{onClick:()=>E(a.file),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${i===a.file?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[(0,c.jsx)(b,{className:`h-4 w-4 ${a.color}`}),(0,c.jsx)("span",{className:"hidden sm:inline",children:a.name})]},a.file)})]})})})]}),(0,c.jsxs)("div",{className:"flex flex-col xl:flex-row xl:items-start",children:[(0,c.jsx)("main",{className:"flex-1 px-3 sm:px-6 py-3 sm:py-6 min-w-0",children:(0,c.jsxs)("div",{className:"space-y-4",children:[t&&(0,c.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading..."}),s&&(0,c.jsx)("div",{className:"text-sm text-destructive",children:"Error loading spec"}),(0,c.jsx)("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm sm:prose-base",children:(0,c.jsx)(Z.default,{remarkPlugins:[$.default,bf],rehypePlugins:[_.default,aa.default],components:{a:a=>(0,c.jsx)(aG,{...a,currentSpecNumber:v.specNumber||void 0,projectId:o}),pre:({children:a,...b})=>{let e=d.Children.toArray(a)[0];if(d.isValidElement(e)&&"code"===e.type&&"string"==typeof e.props.className&&e.props.className?.includes("language-mermaid")){let a=e.props,b="string"==typeof a.children?a.children:"";return(0,c.jsx)(aY.MermaidDiagram,{code:b})}return(0,c.jsx)("pre",{...b,children:a})}},children:C})})]})}),(0,c.jsx)("aside",{className:"hidden xl:block w-72 shrink-0 px-6 py-6 sticky top-32 h-[calc(100vh-8rem)] overflow-y-auto scrollbar-auto-hide",children:(0,c.jsx)(aH.TableOfContentsSidebar,{content:C})})]}),(0,c.jsx)("div",{className:"xl:hidden",children:(0,c.jsx)(aH.TableOfContents,{content:C})}),(0,c.jsx)(aI.BackToTop,{})]})}var bj=a.i(90555);function bk({spec:a,allSpecs:b,currentSubSpec:f}){let[g,h]=d.useState(()=>!1),i=d.useCallback(()=>{h(a=>{let b=!a;return localStorage.setItem("spec-detail-focus-mode",String(b)),b})},[]),j=d.useMemo(()=>b.map(a=>({id:a.id,specNumber:a.specNumber,title:a.title,specName:a.specName,status:a.status,priority:a.priority,tags:a.tags,updatedAt:a.updatedAt,subSpecsCount:"subSpecsCount"in a?a.subSpecsCount:void 0})),[b]);d.useEffect(()=>{(0,bj.primeSpecsSidebar)(j)},[j]),d.useEffect(()=>{(0,bj.setActiveSidebarSpec)(a.id)},[a.id]);let k=d.useCallback(a=>{fetch(`/api/specs/${a}`).catch(()=>{})},[]);return(0,c.jsxs)("div",{className:"flex min-h-[calc(100vh-3.5rem)] w-full min-w-0",children:[(0,c.jsx)(e.SpecsNavSidebar,{initialSpecs:j,currentSpecId:a.id,currentSubSpec:f,onSpecHover:k,className:(0,ai.cn)(g&&"hidden")}),(0,c.jsx)("div",{className:"flex-1 min-w-0",children:(0,c.jsx)(bi,{initialSpec:a,initialSubSpec:f,isFocusMode:g,onToggleFocusMode:i})})]})}a.s(["SpecDetailWrapper",()=>bk],599302)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[558285,90555,a=>{"use strict";var b=a.i(40352),c=a.i(936883),d=a.i(920378);let e=c.useEffect;function f(a){if(void 0!==a)switch(typeof a){case"number":return a;case"string":if(a.endsWith("px"))return parseFloat(a)}}let g=null;function h({containerElement:a,direction:b,isRtl:c,scrollOffset:d}){if("horizontal"===b&&c)switch(function(a=!1){if(null===g||a){let a=document.createElement("div"),b=a.style;b.width="50px",b.height="50px",b.overflow="scroll",b.direction="rtl";let c=document.createElement("div"),d=c.style;return d.width="100px",d.height="100px",a.appendChild(c),document.body.appendChild(a),a.scrollLeft>0?g="positive-descending":(a.scrollLeft=1,g=0===a.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(a),g}return g}()){case"negative":return-d;case"positive-descending":if(a){let{clientWidth:b,scrollLeft:c,scrollWidth:d}=a;return d-b-c}}return d}function i(a,b="Assertion error"){if(!a)throw console.error(b),Error(b)}function j(a,b){if(a===b)return!0;if(!!a!=!!b||(i(void 0!==a),i(void 0!==b),Object.keys(a).length!==Object.keys(b).length))return!1;for(let c in a)if(!Object.is(b[c],a[c]))return!1;return!0}function k({cachedBounds:a,itemCount:b,itemSize:c}){if(0===b)return 0;if("number"==typeof c)return b*c;{let c=a.get(0===a.size?0:a.size-1);return i(void 0!==c,"Unexpected bounds cache miss"),b*((c.scrollOffset+c.size)/a.size)}}function l({cachedBounds:a,containerScrollOffset:b,containerSize:c,itemCount:d,overscanCount:e}){let f=d-1,g=0,h=-1,i=0,j=-1,k=0;for(;k<f;){let c=a.get(k);if(c.scrollOffset+c.size>b)break;k++}for(i=Math.max(0,(g=k)-e);k<f;){let d=a.get(k);if(d.scrollOffset+d.size>=b+c)break;k++}return j=Math.min(d-1,(h=Math.min(f,k))+e),g<0&&(g=0,h=-1,i=0,j=-1),{startIndexVisible:g,stopIndexVisible:h,startIndexOverscan:i,stopIndexOverscan:j}}function m(a,b){let{ariaAttributes:c,style:d,...e}=a,{ariaAttributes:f,style:g,...h}=b;return j(c,f)&&j(d,g)&&j(e,h)}function n({children:a,className:d,defaultHeight:g=0,listRef:n,onResize:o,onRowsRendered:p,overscanCount:q=3,rowComponent:r,rowCount:s,rowHeight:t,rowProps:u,tagName:v="div",style:w,...x}){let y=(0,c.useMemo)(()=>u,Object.values(u)),z=(0,c.useMemo)(()=>(0,c.memo)(r,m),[r]),[A,B]=(0,c.useState)(null),C=null!=t&&"object"==typeof t&&"getAverageRowHeight"in t&&"function"==typeof t.getAverageRowHeight,{getCellBounds:D,getEstimatedSize:E,scrollToIndex:F,startIndexOverscan:G,startIndexVisible:H,stopIndexOverscan:I,stopIndexVisible:J}=function({containerElement:a,containerStyle:b,defaultContainerSize:d=0,direction:g,isRtl:m=!1,itemCount:n,itemProps:o,itemSize:p,onResize:q,overscanCount:r}){var s;let t,[u,v]=(0,c.useState)({startIndexVisible:0,startIndexOverscan:0,stopIndexVisible:-1,stopIndexOverscan:-1}),{startIndexVisible:w,startIndexOverscan:x,stopIndexVisible:y,stopIndexOverscan:z}={startIndexVisible:Math.min(n-1,u.startIndexVisible),startIndexOverscan:Math.min(n-1,u.startIndexOverscan),stopIndexVisible:Math.min(n-1,u.stopIndexVisible),stopIndexOverscan:Math.min(n-1,u.stopIndexOverscan)},{height:A=d,width:B=d}=function({box:a,defaultHeight:b,defaultWidth:d,disabled:g,element:h,mode:i,style:j}){let{styleHeight:k,styleWidth:l}=(0,c.useMemo)(()=>({styleHeight:f(j?.height),styleWidth:f(j?.width)}),[j?.height,j?.width]),[m,n]=(0,c.useState)({height:b,width:d}),o=g||"only-height"===i&&void 0!==k||"only-width"===i&&void 0!==l||void 0!==k&&void 0!==l;return e(()=>{if(null===h||o)return;let b=new ResizeObserver(a=>{for(let b of a){let{contentRect:a,target:c}=b;h===c&&n(b=>b.height===a.height&&b.width===a.width?b:{height:a.height,width:a.width})}});return b.observe(h,{box:a}),()=>{b?.unobserve(h)}},[a,o,h,k,l]),(0,c.useMemo)(()=>({height:k??m.height,width:l??m.width}),[m,k,l])}({defaultHeight:"vertical"===g?d:void 0,defaultWidth:"horizontal"===g?d:void 0,element:a,mode:"vertical"===g?"only-height":"only-width",style:b}),C=(0,c.useRef)({height:0,width:0}),D="vertical"===g?A:B,E=function({containerSize:a,itemSize:b}){let c;return"string"==typeof b?(i(b.endsWith("%"),`Invalid item size: "${b}"; string values must be percentages (e.g. "100%")`),i(void 0!==a,"Container size must be defined if a percentage item size is specified"),c=a*parseInt(b)/100):c=b,c}({containerSize:D,itemSize:p});(0,c.useLayoutEffect)(()=>{if("function"==typeof q){let a=C.current;(a.height!==A||a.width!==B)&&(q({height:A,width:B},{...a}),a.height=A,a.width=B)}},[A,q,B]);let F=function({itemCount:a,itemProps:b,itemSize:d}){return(0,c.useMemo)(()=>(function({itemCount:a,itemProps:b,itemSize:c}){let d=new Map;return{get(e){for(i(e<a,`Invalid index ${e}`);d.size-1<e;){let a,f=d.size;switch(typeof c){case"function":a=c(f,b);break;case"number":a=c}if(0===f)d.set(f,{size:a,scrollOffset:0});else{let b=d.get(f-1);i(void 0!==b,`Unexpected bounds cache miss for index ${e}`),d.set(f,{scrollOffset:b.scrollOffset+b.size,size:a})}}let f=d.get(e);return i(void 0!==f,`Unexpected bounds cache miss for index ${e}`),f},set(a,b){d.set(a,b)},get size(){return d.size}}})({itemCount:a,itemProps:b,itemSize:d}),[a,b,d])}({itemCount:n,itemProps:o,itemSize:E}),G=(0,c.useCallback)(a=>F.get(a),[F]),H=(0,c.useCallback)(()=>k({cachedBounds:F,itemCount:n,itemSize:E}),[F,n,E]),I=(0,c.useCallback)(b=>l({cachedBounds:F,containerScrollOffset:h({containerElement:a,direction:g,isRtl:m,scrollOffset:b}),containerSize:D,itemCount:n,overscanCount:r}),[F,a,D,g,m,n,r]);return e(()=>{v(I(("vertical"===g?a?.scrollTop:a?.scrollLeft)??0))},[a,g,I]),e(()=>{if(!a)return;let b=()=>{v(b=>{let{scrollLeft:c,scrollTop:d}=a,e=l({cachedBounds:F,containerScrollOffset:h({containerElement:a,direction:g,isRtl:m,scrollOffset:"vertical"===g?d:c}),containerSize:D,itemCount:n,overscanCount:r});return j(e,b)?b:e})};return a.addEventListener("scroll",b),()=>{a.removeEventListener("scroll",b)}},[F,a,D,g,n,r]),{getCellBounds:G,getEstimatedSize:H,scrollToIndex:(s=({align:b="auto",containerScrollOffset:c,index:d})=>{let e=function({align:a,cachedBounds:b,index:c,itemCount:d,itemSize:e,containerScrollOffset:f,containerSize:g}){if(c<0||c>=d)throw RangeError(`Invalid index specified: ${c}`,{cause:`Index ${c} is not within the range of 0 - ${d-1}`});let h=k({cachedBounds:b,itemCount:d,itemSize:e}),i=b.get(c),j=Math.max(0,Math.min(h-g,i.scrollOffset)),l=Math.max(0,i.scrollOffset-g+i.size);switch("smart"===a&&(a=f>=l&&f<=j?"auto":"center"),a){case"start":return j;case"end":return l;case"center":return i.scrollOffset<=g/2?0:i.scrollOffset+i.size/2>=h-g/2?h-g:i.scrollOffset+i.size/2-g/2;default:return f>=l&&f<=j?f:f<l?l:j}}({align:b,cachedBounds:F,containerScrollOffset:c,containerSize:D,index:d,itemCount:n,itemSize:E});if(a){if(e=h({containerElement:a,direction:g,isRtl:m,scrollOffset:e}),"function"!=typeof a.scrollTo){let a=I(e);j(u,a)||v(a)}return e}},t=(0,c.useRef)(()=>{throw Error("Cannot call during render.")}),e(()=>{t.current=s},[s]),(0,c.useCallback)(a=>t.current?.(a),[t])),startIndexOverscan:x,startIndexVisible:w,stopIndexOverscan:z,stopIndexVisible:y}}({containerElement:A,containerStyle:w,defaultContainerSize:g,direction:"vertical",itemCount:s,itemProps:y,itemSize:(0,c.useMemo)(()=>C?a=>t.getRowHeight(a)??t.getAverageRowHeight():t,[C,t]),onResize:o,overscanCount:q});(0,c.useImperativeHandle)(n,()=>({get element(){return A},scrollToRow({align:a="auto",behavior:b="auto",index:c}){let d=F({align:a,containerScrollOffset:A?.scrollTop??0,index:c});"function"==typeof A?.scrollTo&&A.scrollTo({behavior:b,top:d})}}),[A,F]),e(()=>{if(!A)return;let a=Array.from(A.children).filter((a,b)=>{if(a.hasAttribute("aria-hidden"))return!1;let c=`${G+b}`;return a.setAttribute("data-react-window-index",c),!0});if(C)return t.observeRowElements(a)},[A,C,t,G,I]),(0,c.useEffect)(()=>{G>=0&&I>=0&&p&&p({startIndex:H,stopIndex:J},{startIndex:G,stopIndex:I})},[p,G,H,I,J]);let K=(0,c.useMemo)(()=>{let a=[];if(s>0)for(let b=G;b<=I;b++){let d=D(b);a.push((0,c.createElement)(z,{...y,ariaAttributes:{"aria-posinset":b+1,"aria-setsize":s,role:"listitem"},key:b,index:b,style:{position:"absolute",left:0,transform:`translateY(${d.scrollOffset}px)`,height:C?void 0:d.size,width:"100%"}}))}return a},[z,D,C,s,y,G,I]),L=(0,b.jsx)("div",{"aria-hidden":!0,style:{height:E(),width:"100%",zIndex:-1}});return(0,c.createElement)(v,{role:"list",...x,className:d,ref:B,style:{position:"relative",maxHeight:"100%",flexGrow:1,overflowY:"auto",...w}},K,a,L)}c.useState,c.useRef,c.useState,c.useRef;var o=a.i(793090),p=a.i(629620),q=a.i(141270),r=a.i(914174);let s=(0,a.i(863535).default)("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]]);var t=a.i(406334),u=a.i(227725),v=a.i(882479),w=a.i(96151),x=a.i(915929),y=a.i(687052),z=a.i(322570),A=a.i(890075);let B={specs:[],signature:null,scrollTop:0,activeSpecId:null},C=[],D=new Set,E=new Set,F=new Set;function G(){for(let a of D)a()}function H(a){return D.add(a),()=>{D.delete(a)}}function I(){return B}function J(){return(0,c.useSyncExternalStore)(H,I,()=>B)}function K(){let a=c.useCallback(a=>(E.add(a),()=>{E.delete(a)}),[]);return(0,c.useSyncExternalStore)(a,()=>I().specs,()=>C)}function L(){let a=c.useCallback(a=>(F.add(a),()=>{F.delete(a)}),[]);return(0,c.useSyncExternalStore)(a,()=>I().activeSpecId,()=>null)}function M(a){if(0===a.length)return;let b=a.map(a=>[a.id,a.specNumber??"",a.title??"",a.status??"",a.priority??"",a.updatedAt?new Date(a.updatedAt).getTime():0].join(":")).join("|");if(b!==B.signature)for(let c of(B={...B,specs:a,signature:b},G(),E))c()}function N(a){if(B.activeSpecId!==a)for(let b of(B={...B,activeSpecId:a},G(),F))b()}a.s(["primeSpecsSidebar",()=>M,"setActiveSidebarSpec",()=>N,"useSpecsSidebarActiveSpec",()=>L,"useSpecsSidebarSpecs",()=>K,"useSpecsSidebarState",()=>J],90555);let O=c.useEffect;function P({initialSpecs:a=[],currentSpecId:e,currentSubSpec:f,onSpecHover:g,className:h}){let[i,j]=c.useState(""),[k,l]=c.useState("all"),[m,B]=c.useState("all"),[C,D]=c.useState("all"),[E,F]=c.useState(!1),[G,H]=c.useState(()=>!1),[I,J]=c.useState(!1),[M,N]=c.useState(!1),P=c.useRef(null);c.useRef(null),c.useRef(!1);let Q=c.useRef(null);c.useRef(0),c.useRef(!1),c.useRef(!0);let R=K(),S=L(),T=c.useMemo(()=>R.length>0?R:a,[R,a]),U=e||S||"";c.useEffect(()=>{N(!0)},[]),c.useEffect(()=>{document.documentElement.style.setProperty("--specs-nav-sidebar-width",G?"0px":"280px"),localStorage.setItem("specs-nav-sidebar-collapsed",String(G))},[G]),c.useEffect(()=>{J(!1)},[U,f]);let V=c.useMemo(()=>{let a=T;if(i){let b=i.toLowerCase();a=a.filter(a=>a.title?.toLowerCase().includes(b)||a.specName.toLowerCase().includes(b)||a.specNumber?.toString().includes(b))}return"all"!==k&&(a=a.filter(a=>a.status===k)),"all"!==m&&(a=a.filter(a=>a.priority===m)),"all"!==C&&(a=a.filter(a=>a.tags?.includes(C))),console.debug(a),a},[T,i,k,m,C]),W=c.useMemo(()=>{let a=new Set;return T.forEach(b=>{b.tags?.forEach(b=>a.add(b))}),Array.from(a).sort()},[T]),X="all"!==k||"all"!==m||"all"!==C,Y=c.useMemo(()=>[...V].sort((a,b)=>(b.specNumber||0)-(a.specNumber||0)),[V]);O(()=>{},[]),O(()=>{},[Y,U]),c.useEffect(()=>{},[]);let Z=c.useCallback(a=>{let{index:c,style:e}=a,h=Y[c],i=h.id===U,j=(h.contentMd?(0,y.extractH1Title)(h.contentMd):null)||h.title||h.specName;return(0,b.jsx)("div",{style:e,className:"px-1",children:(0,b.jsx)("div",{className:"mb-0.5",children:(0,b.jsx)("div",{className:"flex items-center gap-0.5",children:(0,b.jsxs)(w.Tooltip,{children:[(0,b.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)(d.default,{ref:i&&!f?P:null,href:`/specs/${h.specNumber||h.id}`,onMouseEnter:()=>g?.(h.specNumber?.toString()||h.id),className:(0,y.cn)("w-full flex flex-col gap-1 p-1.5 rounded-md text-sm transition-colors",i?"bg-accent text-accent-foreground font-medium":"hover:bg-accent/50"),children:[(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[h.specNumber&&(0,b.jsxs)("span",{className:"text-xs font-mono text-muted-foreground shrink-0",children:["#",h.specNumber.toString().padStart(3,"0")]}),(0,b.jsx)("span",{className:"truncate text-xs leading-relaxed",children:j})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 flex-wrap",children:[h.status&&(0,b.jsxs)(w.Tooltip,{children:[(0,b.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("div",{children:(0,b.jsx)(v.StatusBadge,{status:h.status,iconOnly:!0,className:"text-[10px] scale-90"})})}),(0,b.jsx)(w.TooltipContent,{side:"right",children:(0,v.getStatusLabel)(h.status)})]}),h.priority&&(0,b.jsxs)(w.Tooltip,{children:[(0,b.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("div",{children:(0,b.jsx)(z.PriorityBadge,{priority:h.priority,iconOnly:!0,className:"text-[10px] scale-90"})})}),(0,b.jsx)(w.TooltipContent,{side:"right",children:(0,z.getPriorityLabel)(h.priority)})]}),"number"==typeof h.subSpecsCount&&h.subSpecsCount>0&&(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:["+",h.subSpecsCount," files"]}),h.updatedAt&&(0,b.jsx)("span",{className:"text-[10px] text-muted-foreground",children:(0,A.formatRelativeTime)(h.updatedAt)})]})]})}),(0,b.jsx)(w.TooltipContent,{side:"right",className:"max-w-[300px]",children:(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("div",{className:"font-semibold",children:j}),(0,b.jsx)("div",{className:"text-xs text-muted-foreground",children:h.specName})]})})]})})})})},[Y,U,f,g]),$=c.useMemo(()=>600,[]),_=c.useMemo(()=>c.memo(n),[]);return(0,b.jsxs)(w.TooltipProvider,{delayDuration:700,children:[I&&(0,b.jsx)("div",{className:"fixed inset-0 bg-black/50 z-40 lg:hidden",onClick:()=>J(!1)}),(0,b.jsxs)("div",{className:(0,y.cn)("relative flex-shrink-0",h),children:[(0,b.jsxs)("aside",{className:(0,y.cn)("border-r border-border bg-background flex flex-col overflow-hidden transition-all duration-300","hidden lg:flex lg:sticky lg:top-14 lg:h-[calc(100vh-3.5rem)]",M&&G?"lg:w-0 lg:border-r-0":"lg:w-[280px]",I&&"fixed inset-y-0 left-0 z-[60] flex w-[280px]"),children:[(0,b.jsxs)("div",{className:"p-4 border-b border-border",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,b.jsx)("h2",{className:"font-semibold text-sm",children:"Specifications"}),(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsxs)(w.Tooltip,{children:[(0,b.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(u.Button,{variant:E||X?"default":"ghost",size:"sm",onClick:()=>F(!E),className:"h-6 w-6 p-0",children:(0,b.jsx)(s,{className:"h-4 w-4"})})}),(0,b.jsx)(w.TooltipContent,{side:"bottom",children:E?"Hide filters":"Show filters"})]}),(0,b.jsx)(u.Button,{variant:"ghost",size:"sm",onClick:()=>J(!1),className:"h-6 w-6 p-0 lg:hidden",children:(0,b.jsx)(r.X,{className:"h-4 w-4"})}),(0,b.jsx)(u.Button,{variant:"ghost",size:"sm",onClick:()=>H(!0),className:"h-6 w-6 p-0 hidden lg:flex lg:items-center lg:justify-center",children:(0,b.jsx)(p.ChevronLeft,{className:"h-4 w-4"})})]})]}),E&&(0,b.jsxs)("div",{className:"space-y-2 mb-3 pb-3 border-b border-border",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"Filters"}),X&&(0,b.jsx)(u.Button,{variant:"ghost",size:"sm",onClick:()=>{l("all"),B("all"),D("all")},className:"h-5 text-xs px-2 py-0",children:"Clear"})]}),(0,b.jsxs)(x.Select,{value:k,onValueChange:l,children:[(0,b.jsx)(x.SelectTrigger,{className:"h-8 text-xs",children:(0,b.jsx)(x.SelectValue,{placeholder:"Status"})}),(0,b.jsxs)(x.SelectContent,{children:[(0,b.jsx)(x.SelectItem,{value:"all",children:"All Status"}),(0,b.jsx)(x.SelectItem,{value:"planned",children:"Planned"}),(0,b.jsx)(x.SelectItem,{value:"in-progress",children:"In Progress"}),(0,b.jsx)(x.SelectItem,{value:"complete",children:"Complete"}),(0,b.jsx)(x.SelectItem,{value:"archived",children:"Archived"})]})]}),(0,b.jsxs)(x.Select,{value:m,onValueChange:B,children:[(0,b.jsx)(x.SelectTrigger,{className:"h-8 text-xs",children:(0,b.jsx)(x.SelectValue,{placeholder:"Priority"})}),(0,b.jsxs)(x.SelectContent,{children:[(0,b.jsx)(x.SelectItem,{value:"all",children:"All Priority"}),(0,b.jsx)(x.SelectItem,{value:"low",children:"Low"}),(0,b.jsx)(x.SelectItem,{value:"medium",children:"Medium"}),(0,b.jsx)(x.SelectItem,{value:"high",children:"High"}),(0,b.jsx)(x.SelectItem,{value:"critical",children:"Critical"})]})]}),W.length>0&&(0,b.jsxs)(x.Select,{value:C,onValueChange:D,children:[(0,b.jsx)(x.SelectTrigger,{className:"h-8 text-xs",children:(0,b.jsx)(x.SelectValue,{placeholder:"Tag"})}),(0,b.jsxs)(x.SelectContent,{children:[(0,b.jsx)(x.SelectItem,{value:"all",children:"All Tags"}),W.map(a=>(0,b.jsx)(x.SelectItem,{value:a,children:a},a))]})]})]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(o.Search,{className:"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground"}),(0,b.jsx)(t.Input,{placeholder:"Search specs...",value:i,onChange:a=>j(a.target.value),className:"pl-8 h-9 border-border"})]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-hidden",children:0===Y.length?(0,b.jsx)("div",{className:"text-center py-8 text-sm text-muted-foreground",children:"No specs found"}):(0,b.jsx)(_,{listRef:Q,defaultHeight:$,rowCount:Y.length,rowHeight:72,overscanCount:5,rowComponent:Z,rowProps:{}})})]}),M&&G&&(0,b.jsx)(u.Button,{variant:"ghost",size:"sm",onClick:()=>H(!1),className:"hidden lg:items-center lg:justify-center lg:flex h-6 w-6 p-0 fixed z-50 top-20 -translate-y-1 -translate-x-1/2 left-[calc(var(--main-sidebar-width,240px))] bg-background border",children:(0,b.jsx)(q.ChevronRight,{className:"h-4 w-4"})})]})]})}a.s(["SpecsNavSidebar",()=>P],558285)}];
|
|
1
|
+
module.exports=[558285,90555,a=>{"use strict";var b=a.i(40352),c=a.i(936883),d=a.i(920378);let e=c.useEffect;function f(a){if(void 0!==a)switch(typeof a){case"number":return a;case"string":if(a.endsWith("px"))return parseFloat(a)}}let g=null;function h({containerElement:a,direction:b,isRtl:c,scrollOffset:d}){if("horizontal"===b&&c)switch(function(a=!1){if(null===g||a){let a=document.createElement("div"),b=a.style;b.width="50px",b.height="50px",b.overflow="scroll",b.direction="rtl";let c=document.createElement("div"),d=c.style;return d.width="100px",d.height="100px",a.appendChild(c),document.body.appendChild(a),a.scrollLeft>0?g="positive-descending":(a.scrollLeft=1,g=0===a.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(a),g}return g}()){case"negative":return-d;case"positive-descending":if(a){let{clientWidth:b,scrollLeft:c,scrollWidth:d}=a;return d-b-c}}return d}function i(a,b="Assertion error"){if(!a)throw console.error(b),Error(b)}function j(a,b){if(a===b)return!0;if(!!a!=!!b||(i(void 0!==a),i(void 0!==b),Object.keys(a).length!==Object.keys(b).length))return!1;for(let c in a)if(!Object.is(b[c],a[c]))return!1;return!0}function k({cachedBounds:a,itemCount:b,itemSize:c}){if(0===b)return 0;if("number"==typeof c)return b*c;{let c=a.get(0===a.size?0:a.size-1);return i(void 0!==c,"Unexpected bounds cache miss"),b*((c.scrollOffset+c.size)/a.size)}}function l({cachedBounds:a,containerScrollOffset:b,containerSize:c,itemCount:d,overscanCount:e}){let f=d-1,g=0,h=-1,i=0,j=-1,k=0;for(;k<f;){let c=a.get(k);if(c.scrollOffset+c.size>b)break;k++}for(i=Math.max(0,(g=k)-e);k<f;){let d=a.get(k);if(d.scrollOffset+d.size>=b+c)break;k++}return j=Math.min(d-1,(h=Math.min(f,k))+e),g<0&&(g=0,h=-1,i=0,j=-1),{startIndexVisible:g,stopIndexVisible:h,startIndexOverscan:i,stopIndexOverscan:j}}function m(a,b){let{ariaAttributes:c,style:d,...e}=a,{ariaAttributes:f,style:g,...h}=b;return j(c,f)&&j(d,g)&&j(e,h)}function n({children:a,className:d,defaultHeight:g=0,listRef:n,onResize:o,onRowsRendered:p,overscanCount:q=3,rowComponent:r,rowCount:s,rowHeight:t,rowProps:u,tagName:v="div",style:w,...x}){let y=(0,c.useMemo)(()=>u,Object.values(u)),z=(0,c.useMemo)(()=>(0,c.memo)(r,m),[r]),[A,B]=(0,c.useState)(null),C=null!=t&&"object"==typeof t&&"getAverageRowHeight"in t&&"function"==typeof t.getAverageRowHeight,{getCellBounds:D,getEstimatedSize:E,scrollToIndex:F,startIndexOverscan:G,startIndexVisible:H,stopIndexOverscan:I,stopIndexVisible:J}=function({containerElement:a,containerStyle:b,defaultContainerSize:d=0,direction:g,isRtl:m=!1,itemCount:n,itemProps:o,itemSize:p,onResize:q,overscanCount:r}){var s;let t,[u,v]=(0,c.useState)({startIndexVisible:0,startIndexOverscan:0,stopIndexVisible:-1,stopIndexOverscan:-1}),{startIndexVisible:w,startIndexOverscan:x,stopIndexVisible:y,stopIndexOverscan:z}={startIndexVisible:Math.min(n-1,u.startIndexVisible),startIndexOverscan:Math.min(n-1,u.startIndexOverscan),stopIndexVisible:Math.min(n-1,u.stopIndexVisible),stopIndexOverscan:Math.min(n-1,u.stopIndexOverscan)},{height:A=d,width:B=d}=function({box:a,defaultHeight:b,defaultWidth:d,disabled:g,element:h,mode:i,style:j}){let{styleHeight:k,styleWidth:l}=(0,c.useMemo)(()=>({styleHeight:f(j?.height),styleWidth:f(j?.width)}),[j?.height,j?.width]),[m,n]=(0,c.useState)({height:b,width:d}),o=g||"only-height"===i&&void 0!==k||"only-width"===i&&void 0!==l||void 0!==k&&void 0!==l;return e(()=>{if(null===h||o)return;let b=new ResizeObserver(a=>{for(let b of a){let{contentRect:a,target:c}=b;h===c&&n(b=>b.height===a.height&&b.width===a.width?b:{height:a.height,width:a.width})}});return b.observe(h,{box:a}),()=>{b?.unobserve(h)}},[a,o,h,k,l]),(0,c.useMemo)(()=>({height:k??m.height,width:l??m.width}),[m,k,l])}({defaultHeight:"vertical"===g?d:void 0,defaultWidth:"horizontal"===g?d:void 0,element:a,mode:"vertical"===g?"only-height":"only-width",style:b}),C=(0,c.useRef)({height:0,width:0}),D="vertical"===g?A:B,E=function({containerSize:a,itemSize:b}){let c;return"string"==typeof b?(i(b.endsWith("%"),`Invalid item size: "${b}"; string values must be percentages (e.g. "100%")`),i(void 0!==a,"Container size must be defined if a percentage item size is specified"),c=a*parseInt(b)/100):c=b,c}({containerSize:D,itemSize:p});(0,c.useLayoutEffect)(()=>{if("function"==typeof q){let a=C.current;(a.height!==A||a.width!==B)&&(q({height:A,width:B},{...a}),a.height=A,a.width=B)}},[A,q,B]);let F=function({itemCount:a,itemProps:b,itemSize:d}){return(0,c.useMemo)(()=>(function({itemCount:a,itemProps:b,itemSize:c}){let d=new Map;return{get(e){for(i(e<a,`Invalid index ${e}`);d.size-1<e;){let a,f=d.size;switch(typeof c){case"function":a=c(f,b);break;case"number":a=c}if(0===f)d.set(f,{size:a,scrollOffset:0});else{let b=d.get(f-1);i(void 0!==b,`Unexpected bounds cache miss for index ${e}`),d.set(f,{scrollOffset:b.scrollOffset+b.size,size:a})}}let f=d.get(e);return i(void 0!==f,`Unexpected bounds cache miss for index ${e}`),f},set(a,b){d.set(a,b)},get size(){return d.size}}})({itemCount:a,itemProps:b,itemSize:d}),[a,b,d])}({itemCount:n,itemProps:o,itemSize:E}),G=(0,c.useCallback)(a=>F.get(a),[F]),H=(0,c.useCallback)(()=>k({cachedBounds:F,itemCount:n,itemSize:E}),[F,n,E]),I=(0,c.useCallback)(b=>l({cachedBounds:F,containerScrollOffset:h({containerElement:a,direction:g,isRtl:m,scrollOffset:b}),containerSize:D,itemCount:n,overscanCount:r}),[F,a,D,g,m,n,r]);return e(()=>{v(I(("vertical"===g?a?.scrollTop:a?.scrollLeft)??0))},[a,g,I]),e(()=>{if(!a)return;let b=()=>{v(b=>{let{scrollLeft:c,scrollTop:d}=a,e=l({cachedBounds:F,containerScrollOffset:h({containerElement:a,direction:g,isRtl:m,scrollOffset:"vertical"===g?d:c}),containerSize:D,itemCount:n,overscanCount:r});return j(e,b)?b:e})};return a.addEventListener("scroll",b),()=>{a.removeEventListener("scroll",b)}},[F,a,D,g,n,r]),{getCellBounds:G,getEstimatedSize:H,scrollToIndex:(s=({align:b="auto",containerScrollOffset:c,index:d})=>{let e=function({align:a,cachedBounds:b,index:c,itemCount:d,itemSize:e,containerScrollOffset:f,containerSize:g}){if(c<0||c>=d)throw RangeError(`Invalid index specified: ${c}`,{cause:`Index ${c} is not within the range of 0 - ${d-1}`});let h=k({cachedBounds:b,itemCount:d,itemSize:e}),i=b.get(c),j=Math.max(0,Math.min(h-g,i.scrollOffset)),l=Math.max(0,i.scrollOffset-g+i.size);switch("smart"===a&&(a=f>=l&&f<=j?"auto":"center"),a){case"start":return j;case"end":return l;case"center":return i.scrollOffset<=g/2?0:i.scrollOffset+i.size/2>=h-g/2?h-g:i.scrollOffset+i.size/2-g/2;default:return f>=l&&f<=j?f:f<l?l:j}}({align:b,cachedBounds:F,containerScrollOffset:c,containerSize:D,index:d,itemCount:n,itemSize:E});if(a){if(e=h({containerElement:a,direction:g,isRtl:m,scrollOffset:e}),"function"!=typeof a.scrollTo){let a=I(e);j(u,a)||v(a)}return e}},t=(0,c.useRef)(()=>{throw Error("Cannot call during render.")}),e(()=>{t.current=s},[s]),(0,c.useCallback)(a=>t.current?.(a),[t])),startIndexOverscan:x,startIndexVisible:w,stopIndexOverscan:z,stopIndexVisible:y}}({containerElement:A,containerStyle:w,defaultContainerSize:g,direction:"vertical",itemCount:s,itemProps:y,itemSize:(0,c.useMemo)(()=>C?a=>t.getRowHeight(a)??t.getAverageRowHeight():t,[C,t]),onResize:o,overscanCount:q});(0,c.useImperativeHandle)(n,()=>({get element(){return A},scrollToRow({align:a="auto",behavior:b="auto",index:c}){let d=F({align:a,containerScrollOffset:A?.scrollTop??0,index:c});"function"==typeof A?.scrollTo&&A.scrollTo({behavior:b,top:d})}}),[A,F]),e(()=>{if(!A)return;let a=Array.from(A.children).filter((a,b)=>{if(a.hasAttribute("aria-hidden"))return!1;let c=`${G+b}`;return a.setAttribute("data-react-window-index",c),!0});if(C)return t.observeRowElements(a)},[A,C,t,G,I]),(0,c.useEffect)(()=>{G>=0&&I>=0&&p&&p({startIndex:H,stopIndex:J},{startIndex:G,stopIndex:I})},[p,G,H,I,J]);let K=(0,c.useMemo)(()=>{let a=[];if(s>0)for(let b=G;b<=I;b++){let d=D(b);a.push((0,c.createElement)(z,{...y,ariaAttributes:{"aria-posinset":b+1,"aria-setsize":s,role:"listitem"},key:b,index:b,style:{position:"absolute",left:0,transform:`translateY(${d.scrollOffset}px)`,height:C?void 0:d.size,width:"100%"}}))}return a},[z,D,C,s,y,G,I]),L=(0,b.jsx)("div",{"aria-hidden":!0,style:{height:E(),width:"100%",zIndex:-1}});return(0,c.createElement)(v,{role:"list",...x,className:d,ref:B,style:{position:"relative",maxHeight:"100%",flexGrow:1,overflowY:"auto",...w}},K,a,L)}c.useState,c.useRef,c.useState,c.useRef;var o=a.i(793090),p=a.i(629620),q=a.i(141270),r=a.i(914174);let s=(0,a.i(863535).default)("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]]);var t=a.i(406334),u=a.i(227725),v=a.i(882479),w=a.i(96151),x=a.i(915929),y=a.i(687052),z=a.i(322570),A=a.i(890075);let B={specs:[],signature:null,scrollTop:0,activeSpecId:null},C=[],D=new Set,E=new Set,F=new Set;function G(){for(let a of D)a()}function H(a){return D.add(a),()=>{D.delete(a)}}function I(){return B}function J(){return(0,c.useSyncExternalStore)(H,I,()=>B)}function K(){let a=c.useCallback(a=>(E.add(a),()=>{E.delete(a)}),[]);return(0,c.useSyncExternalStore)(a,()=>I().specs,()=>C)}function L(){let a=c.useCallback(a=>(F.add(a),()=>{F.delete(a)}),[]);return(0,c.useSyncExternalStore)(a,()=>I().activeSpecId,()=>null)}function M(a){if(0===a.length)return;let b=a.map(a=>[a.id,a.specNumber??"",a.title??"",a.status??"",a.priority??"",a.updatedAt?new Date(a.updatedAt).getTime():0].join(":")).join("|");if(b!==B.signature)for(let c of(B={...B,specs:a,signature:b},G(),E))c()}function N(a){if(B.activeSpecId!==a)for(let b of(B={...B,activeSpecId:a},G(),F))b()}a.s(["primeSpecsSidebar",()=>M,"setActiveSidebarSpec",()=>N,"useSpecsSidebarActiveSpec",()=>L,"useSpecsSidebarSpecs",()=>K,"useSpecsSidebarState",()=>J],90555);var O=a.i(72245);let P=c.useEffect;function Q({initialSpecs:a=[],currentSpecId:e,currentSubSpec:f,onSpecHover:g,className:h}){let[i,j]=c.useState(""),[k,l]=c.useState("all"),[m,B]=c.useState("all"),[C,D]=c.useState("all"),[E,F]=c.useState(!1),[G,H]=c.useState(()=>!1),[I,J]=c.useState(!1),[M,N]=c.useState(!1),Q=c.useRef(null);c.useRef(null),c.useRef(!1);let R=c.useRef(null);c.useRef(0),c.useRef(!1),c.useRef(!0);let S=K(),T=L(),U=c.useMemo(()=>S.length>0?S:a,[S,a]),V=e||T||"";c.useEffect(()=>{N(!0)},[]),c.useEffect(()=>{document.documentElement.style.setProperty("--specs-nav-sidebar-width",G?"0px":"280px"),localStorage.setItem("specs-nav-sidebar-collapsed",String(G))},[G]),c.useEffect(()=>{J(!1)},[V,f]);let W=c.useMemo(()=>{let a=U;if(i){let b=i.toLowerCase();a=a.filter(a=>a.title?.toLowerCase().includes(b)||a.specName.toLowerCase().includes(b)||a.specNumber?.toString().includes(b))}return"all"!==k&&(a=a.filter(a=>a.status===k)),"all"!==m&&(a=a.filter(a=>a.priority===m)),"all"!==C&&(a=a.filter(a=>a.tags?.includes(C))),console.debug(a),a},[U,i,k,m,C]),X=c.useMemo(()=>{let a=new Set;return U.forEach(b=>{b.tags?.forEach(b=>a.add(b))}),Array.from(a).sort()},[U]),Y="all"!==k||"all"!==m||"all"!==C,Z=c.useMemo(()=>[...W].sort((a,b)=>(b.specNumber||0)-(a.specNumber||0)),[W]);P(()=>{},[]),P(()=>{},[Z,V]),c.useEffect(()=>{},[]);let{getSpecUrl:$}=(0,O.useProjectUrl)(),_=c.useCallback(a=>{let{index:c,style:e}=a,h=Z[c],i=h.id===V,j=h.title||h.specName,k=$(h.specNumber||h.id);return(0,b.jsx)("div",{style:e,className:"px-1",children:(0,b.jsx)("div",{className:"mb-0.5",children:(0,b.jsx)("div",{className:"flex items-center gap-0.5",children:(0,b.jsxs)(w.Tooltip,{children:[(0,b.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,b.jsxs)(d.default,{ref:i&&!f?Q:null,href:k,onMouseEnter:()=>g?.(h.specNumber?.toString()||h.id),className:(0,y.cn)("w-full flex flex-col gap-1 p-1.5 rounded-md text-sm transition-colors",i?"bg-accent text-accent-foreground font-medium":"hover:bg-accent/50"),children:[(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[h.specNumber&&(0,b.jsxs)("span",{className:"text-xs font-mono text-muted-foreground shrink-0",children:["#",h.specNumber.toString().padStart(3,"0")]}),(0,b.jsx)("span",{className:"truncate text-xs leading-relaxed",children:j})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 flex-wrap",children:[h.status&&(0,b.jsxs)(w.Tooltip,{children:[(0,b.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("div",{children:(0,b.jsx)(v.StatusBadge,{status:h.status,iconOnly:!0,className:"text-[10px] scale-90"})})}),(0,b.jsx)(w.TooltipContent,{side:"right",children:(0,v.getStatusLabel)(h.status)})]}),h.priority&&(0,b.jsxs)(w.Tooltip,{children:[(0,b.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("div",{children:(0,b.jsx)(z.PriorityBadge,{priority:h.priority,iconOnly:!0,className:"text-[10px] scale-90"})})}),(0,b.jsx)(w.TooltipContent,{side:"right",children:(0,z.getPriorityLabel)(h.priority)})]}),"number"==typeof h.subSpecsCount&&h.subSpecsCount>0&&(0,b.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:["+",h.subSpecsCount," files"]}),h.updatedAt&&(0,b.jsx)("span",{className:"text-[10px] text-muted-foreground",children:(0,A.formatRelativeTime)(h.updatedAt)})]})]})}),(0,b.jsx)(w.TooltipContent,{side:"right",className:"max-w-[300px]",children:(0,b.jsxs)("div",{className:"space-y-1",children:[(0,b.jsx)("div",{className:"font-semibold",children:j}),(0,b.jsx)("div",{className:"text-xs text-muted-foreground",children:h.specName})]})})]})})})})},[Z,V,f,g,$]),aa=c.useMemo(()=>600,[]),ab=c.useMemo(()=>c.memo(n),[]);return(0,b.jsxs)(w.TooltipProvider,{delayDuration:700,children:[I&&(0,b.jsx)("div",{className:"fixed inset-0 bg-black/50 z-40 lg:hidden",onClick:()=>J(!1)}),(0,b.jsxs)("div",{className:(0,y.cn)("relative flex-shrink-0",h),children:[(0,b.jsxs)("aside",{className:(0,y.cn)("border-r border-border bg-background flex flex-col overflow-hidden transition-all duration-300","hidden lg:flex lg:sticky lg:top-14 lg:h-[calc(100vh-3.5rem)]",M&&G?"lg:w-0 lg:border-r-0":"lg:w-[280px]",I&&"fixed inset-y-0 left-0 z-[60] flex w-[280px]"),children:[(0,b.jsxs)("div",{className:"p-4 border-b border-border",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,b.jsx)("h2",{className:"font-semibold text-sm",children:"Specifications"}),(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsxs)(w.Tooltip,{children:[(0,b.jsx)(w.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(u.Button,{variant:E||Y?"default":"ghost",size:"sm",onClick:()=>F(!E),className:"h-6 w-6 p-0",children:(0,b.jsx)(s,{className:"h-4 w-4"})})}),(0,b.jsx)(w.TooltipContent,{side:"bottom",children:E?"Hide filters":"Show filters"})]}),(0,b.jsx)(u.Button,{variant:"ghost",size:"sm",onClick:()=>J(!1),className:"h-6 w-6 p-0 lg:hidden",children:(0,b.jsx)(r.X,{className:"h-4 w-4"})}),(0,b.jsx)(u.Button,{variant:"ghost",size:"sm",onClick:()=>H(!0),className:"h-6 w-6 p-0 hidden lg:flex lg:items-center lg:justify-center",children:(0,b.jsx)(p.ChevronLeft,{className:"h-4 w-4"})})]})]}),E&&(0,b.jsxs)("div",{className:"space-y-2 mb-3 pb-3 border-b border-border",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsx)("span",{className:"text-xs font-medium text-muted-foreground",children:"Filters"}),Y&&(0,b.jsx)(u.Button,{variant:"ghost",size:"sm",onClick:()=>{l("all"),B("all"),D("all")},className:"h-5 text-xs px-2 py-0",children:"Clear"})]}),(0,b.jsxs)(x.Select,{value:k,onValueChange:l,children:[(0,b.jsx)(x.SelectTrigger,{className:"h-8 text-xs",children:(0,b.jsx)(x.SelectValue,{placeholder:"Status"})}),(0,b.jsxs)(x.SelectContent,{children:[(0,b.jsx)(x.SelectItem,{value:"all",children:"All Status"}),(0,b.jsx)(x.SelectItem,{value:"planned",children:"Planned"}),(0,b.jsx)(x.SelectItem,{value:"in-progress",children:"In Progress"}),(0,b.jsx)(x.SelectItem,{value:"complete",children:"Complete"}),(0,b.jsx)(x.SelectItem,{value:"archived",children:"Archived"})]})]}),(0,b.jsxs)(x.Select,{value:m,onValueChange:B,children:[(0,b.jsx)(x.SelectTrigger,{className:"h-8 text-xs",children:(0,b.jsx)(x.SelectValue,{placeholder:"Priority"})}),(0,b.jsxs)(x.SelectContent,{children:[(0,b.jsx)(x.SelectItem,{value:"all",children:"All Priority"}),(0,b.jsx)(x.SelectItem,{value:"low",children:"Low"}),(0,b.jsx)(x.SelectItem,{value:"medium",children:"Medium"}),(0,b.jsx)(x.SelectItem,{value:"high",children:"High"}),(0,b.jsx)(x.SelectItem,{value:"critical",children:"Critical"})]})]}),X.length>0&&(0,b.jsxs)(x.Select,{value:C,onValueChange:D,children:[(0,b.jsx)(x.SelectTrigger,{className:"h-8 text-xs",children:(0,b.jsx)(x.SelectValue,{placeholder:"Tag"})}),(0,b.jsxs)(x.SelectContent,{children:[(0,b.jsx)(x.SelectItem,{value:"all",children:"All Tags"}),X.map(a=>(0,b.jsx)(x.SelectItem,{value:a,children:a},a))]})]})]}),(0,b.jsxs)("div",{className:"relative",children:[(0,b.jsx)(o.Search,{className:"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground"}),(0,b.jsx)(t.Input,{placeholder:"Search specs...",value:i,onChange:a=>j(a.target.value),className:"pl-8 h-9 border-border"})]})]}),(0,b.jsx)("div",{className:"flex-1 overflow-hidden",children:0===Z.length?(0,b.jsx)("div",{className:"text-center py-8 text-sm text-muted-foreground",children:"No specs found"}):(0,b.jsx)(ab,{listRef:R,defaultHeight:aa,rowCount:Z.length,rowHeight:72,overscanCount:5,rowComponent:_,rowProps:{}})})]}),M&&G&&(0,b.jsx)(u.Button,{variant:"ghost",size:"sm",onClick:()=>H(!1),className:"hidden lg:items-center lg:justify-center lg:flex h-6 w-6 p-0 fixed z-50 top-20 -translate-y-1 -translate-x-1/2 left-[calc(var(--main-sidebar-width,240px))] bg-background border",children:(0,b.jsx)(q.ChevronRight,{className:"h-4 w-4"})})]})]})}a.s(["SpecsNavSidebar",()=>Q],558285)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=packages_ui_src_components_specs-nav-sidebar_tsx_8237ed13._.js.map
|