@leanspec/ui 0.2.9-dev.20251205030455 → 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.
Files changed (516) hide show
  1. package/.next/standalone/node_modules/.pnpm/better-sqlite3@11.10.0/node_modules/better-sqlite3/build/Release/better_sqlite3.node +0 -0
  2. package/.next/standalone/packages/ui/.next/BUILD_ID +1 -1
  3. package/.next/standalone/packages/ui/.next/app-path-routes-manifest.json +5 -0
  4. package/.next/standalone/packages/ui/.next/build-manifest.json +2 -2
  5. package/.next/standalone/packages/ui/.next/prerender-manifest.json +3 -3
  6. package/.next/standalone/packages/ui/.next/required-server-files.json +4 -4
  7. package/.next/standalone/packages/ui/.next/routes-manifest.json +40 -0
  8. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js +1 -1
  9. package/.next/standalone/packages/ui/.next/server/app/_global-error/page.js.nft.json +1 -1
  10. package/.next/standalone/packages/ui/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/packages/ui/.next/server/app/_global-error.html +2 -2
  12. package/.next/standalone/packages/ui/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  14. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  16. package/.next/standalone/packages/ui/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js +2 -2
  18. package/.next/standalone/packages/ui/.next/server/app/_not-found/page.js.nft.json +1 -1
  19. package/.next/standalone/packages/ui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  20. package/.next/standalone/packages/ui/.next/server/app/_not-found.html +2 -2
  21. package/.next/standalone/packages/ui/.next/server/app/_not-found.rsc +18 -20
  22. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_full.segment.rsc +18 -20
  23. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_index.segment.rsc +23 -26
  24. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  25. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_not-found.segment.rsc +3 -3
  26. package/.next/standalone/packages/ui/.next/server/app/_not-found.segments/_tree.segment.rsc +5 -5
  27. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js +1 -1
  28. package/.next/standalone/packages/ui/.next/server/app/api/context/route.js.nft.json +1 -1
  29. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js +1 -1
  30. package/.next/standalone/packages/ui/.next/server/app/api/dependencies/route.js.nft.json +1 -1
  31. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/[id]/route.js.nft.json +1 -1
  32. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/discover/route.js.nft.json +1 -1
  33. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/list-directory/route.js.nft.json +1 -1
  34. package/.next/standalone/packages/ui/.next/server/app/api/local-projects/route.js.nft.json +1 -1
  35. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js +1 -1
  36. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/context/route.js.nft.json +1 -1
  37. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js +1 -1
  38. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/dependencies/route.js.nft.json +1 -1
  39. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/route.js.nft.json +1 -1
  40. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/app-paths-manifest.json +3 -0
  41. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/build-manifest.json +11 -0
  42. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route/server-reference-manifest.json +4 -0
  43. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js +8 -0
  44. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.map +5 -0
  45. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route.js.nft.json +1 -0
  46. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/dependency-graph/route_client-reference-manifest.js +2 -0
  47. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/app-paths-manifest.json +3 -0
  48. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/build-manifest.json +11 -0
  49. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route/server-reference-manifest.json +4 -0
  50. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js +8 -0
  51. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.map +5 -0
  52. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route.js.nft.json +1 -0
  53. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/metadata/route_client-reference-manifest.js +2 -0
  54. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js +1 -1
  55. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/route.js.nft.json +1 -1
  56. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js +1 -1
  57. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/[spec]/status/route.js.nft.json +1 -1
  58. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js +1 -1
  59. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/specs/route.js.nft.json +1 -1
  60. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js +1 -1
  61. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/stats/route.js.nft.json +1 -1
  62. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/app-paths-manifest.json +3 -0
  63. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/build-manifest.json +11 -0
  64. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route/server-reference-manifest.json +4 -0
  65. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js +8 -0
  66. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.map +5 -0
  67. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route.js.nft.json +1 -0
  68. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/tags/route_client-reference-manifest.js +2 -0
  69. package/.next/standalone/packages/ui/.next/server/app/api/projects/[id]/validate/route.js.nft.json +1 -1
  70. package/.next/standalone/packages/ui/.next/server/app/api/projects/route.js.nft.json +1 -1
  71. package/.next/standalone/packages/ui/.next/server/app/api/revalidate/route.js.nft.json +1 -1
  72. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js +1 -1
  73. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/dependency-graph/route.js.nft.json +1 -1
  74. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/app-paths-manifest.json +3 -0
  75. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/build-manifest.json +11 -0
  76. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route/server-reference-manifest.json +4 -0
  77. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js +8 -0
  78. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.map +5 -0
  79. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route.js.nft.json +1 -0
  80. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/metadata/route_client-reference-manifest.js +2 -0
  81. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js +1 -1
  82. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/route.js.nft.json +1 -1
  83. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/status/route.js.nft.json +1 -1
  84. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js +1 -1
  85. package/.next/standalone/packages/ui/.next/server/app/api/specs/[id]/subspecs/[file]/route.js.nft.json +1 -1
  86. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js +1 -1
  87. package/.next/standalone/packages/ui/.next/server/app/api/stats/route.js.nft.json +1 -1
  88. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/app-paths-manifest.json +3 -0
  89. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/build-manifest.json +11 -0
  90. package/.next/standalone/packages/ui/.next/server/app/api/tags/route/server-reference-manifest.json +4 -0
  91. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js +8 -0
  92. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.map +5 -0
  93. package/.next/standalone/packages/ui/.next/server/app/api/tags/route.js.nft.json +1 -0
  94. package/.next/standalone/packages/ui/.next/server/app/api/tags/route_client-reference-manifest.js +2 -0
  95. package/.next/standalone/packages/ui/.next/server/app/context/page.js +4 -3
  96. package/.next/standalone/packages/ui/.next/server/app/context/page.js.nft.json +1 -1
  97. package/.next/standalone/packages/ui/.next/server/app/context/page_client-reference-manifest.js +1 -1
  98. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js +4 -3
  99. package/.next/standalone/packages/ui/.next/server/app/dependencies/page.js.nft.json +1 -1
  100. package/.next/standalone/packages/ui/.next/server/app/dependencies/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/packages/ui/.next/server/app/page.js +2 -2
  102. package/.next/standalone/packages/ui/.next/server/app/page.js.nft.json +1 -1
  103. package/.next/standalone/packages/ui/.next/server/app/page_client-reference-manifest.js +1 -1
  104. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js +2 -2
  105. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page.js.nft.json +1 -1
  106. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/context/page_client-reference-manifest.js +1 -1
  107. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js +2 -2
  108. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page.js.nft.json +1 -1
  109. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/dependencies/page_client-reference-manifest.js +1 -1
  110. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js +2 -2
  111. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page.js.nft.json +1 -1
  112. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/page_client-reference-manifest.js +1 -1
  113. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js +2 -2
  114. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page.js.nft.json +1 -1
  115. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/[specId]/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js +2 -2
  117. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page.js.nft.json +1 -1
  118. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/specs/page_client-reference-manifest.js +1 -1
  119. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js +2 -2
  120. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page.js.nft.json +1 -1
  121. package/.next/standalone/packages/ui/.next/server/app/projects/[projectId]/stats/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/packages/ui/.next/server/app/projects/page.js +2 -2
  123. package/.next/standalone/packages/ui/.next/server/app/projects/page.js.nft.json +1 -1
  124. package/.next/standalone/packages/ui/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  125. package/.next/standalone/packages/ui/.next/server/app/projects.html +2 -2
  126. package/.next/standalone/packages/ui/.next/server/app/projects.rsc +24 -25
  127. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_full.segment.rsc +24 -25
  128. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_index.segment.rsc +20 -24
  129. package/.next/standalone/packages/ui/.next/server/app/projects.segments/_tree.segment.rsc +2 -2
  130. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects/__PAGE__.segment.rsc +2 -2
  131. package/.next/standalone/packages/ui/.next/server/app/projects.segments/projects.segment.rsc +1 -1
  132. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js +2 -2
  133. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page.js.nft.json +1 -1
  134. package/.next/standalone/packages/ui/.next/server/app/specs/[id]/page_client-reference-manifest.js +1 -1
  135. package/.next/standalone/packages/ui/.next/server/app/specs/page.js +4 -3
  136. package/.next/standalone/packages/ui/.next/server/app/specs/page.js.nft.json +1 -1
  137. package/.next/standalone/packages/ui/.next/server/app/specs/page_client-reference-manifest.js +1 -1
  138. package/.next/standalone/packages/ui/.next/server/app/stats/page.js +4 -3
  139. package/.next/standalone/packages/ui/.next/server/app/stats/page.js.nft.json +1 -1
  140. package/.next/standalone/packages/ui/.next/server/app/stats/page_client-reference-manifest.js +1 -1
  141. package/.next/standalone/packages/ui/.next/server/app-paths-manifest.json +5 -0
  142. package/.next/standalone/packages/ui/.next/server/chunks/284a8_app_api_projects_[id]_specs_[spec]_dependency-graph_route_actions_f18476ed.js +3 -0
  143. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_projects_[id]_tags_route_actions_40899744.js +3 -0
  144. package/.next/standalone/packages/ui/.next/server/chunks/730ea_ui__next-internal_server_app_api_specs_[id]_metadata_route_actions_139bb09f.js +3 -0
  145. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0afcada7._.js +3 -0
  146. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0e63a440._.js +3 -0
  147. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0ec6f9b0._.js +3 -0
  148. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0edb782a._.js +3 -0
  149. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__0fbfea15._.js +1 -1
  150. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1706515f._.js +1 -1
  151. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__1f037512._.js +1 -1
  152. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__38780e00._.js +3 -0
  153. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3a535244._.js +3 -0
  154. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__41f43652._.js +3 -0
  155. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__5081ac6f._.js +3 -0
  156. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__526764b2._.js +3 -0
  157. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__548e27d4._.js +1 -1
  158. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__71d98924._.js +1 -1
  159. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__74af400b._.js +3 -0
  160. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__8075fe29._.js +1 -1
  161. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9ce722b4._.js +1 -1
  162. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9cf3bf21._.js +3 -0
  163. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__a2d7cbed._.js +1 -1
  164. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b1ad8b69._.js +1 -1
  165. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__c7a4906b._.js +3 -0
  166. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__de15d2aa._.js +3 -0
  167. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e16f7651._.js +3 -0
  168. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e2fcb5c6._.js +3 -0
  169. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e8d9903e._.js +3 -0
  170. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f6936b89._.js +3 -0
  171. package/.next/standalone/packages/ui/.next/server/chunks/f825c_server_app_api_projects_[id]_specs_[spec]_metadata_route_actions_35af9a8c.js +3 -0
  172. package/.next/standalone/packages/ui/.next/server/chunks/packages_ui__next-internal_server_app_api_tags_route_actions_64625b2c.js +3 -0
  173. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__01bfc8ff._.js +3 -0
  174. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__13f96ef4._.js → [root-of-the-server]__174e1ca1._.js} +2 -2
  175. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__38c56adc._.js → [root-of-the-server]__2d9202e8._.js} +2 -2
  176. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__338c65fe._.js +1 -1
  177. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__366688dd._.js +1 -1
  178. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__44b603f9._.js +1 -1
  179. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__4ec37765._.js +3 -0
  180. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__69a0d63a._.js +1 -1
  181. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__7f55abaa._.js +1 -1
  182. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c158c9a9._.js +3 -0
  183. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__c7735439._.js +3 -0
  184. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__e2c760eb._.js +3 -0
  185. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{[root-of-the-server]__84124d4b._.js → [root-of-the-server]__ead1539c._.js} +2 -2
  186. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__ec5b96a5._.js +1 -1
  187. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_000dd317._.js +1 -1
  188. package/.next/standalone/packages/ui/.next/server/chunks/ssr/{_adb9d7cb._.js → _22274047._.js} +2 -2
  189. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_59616aa6._.js +3 -0
  190. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_5e1484f9._.js +7 -0
  191. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_8ab6f9ca._.js +1 -1
  192. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_be836d6a._.js +5 -0
  193. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_ec637d7c._.js +1 -1
  194. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_projects_page_tsx_6e166c8e._.js +1 -1
  195. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js +1 -1
  196. package/.next/standalone/packages/ui/.next/server/chunks/ssr/packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js +1 -1
  197. package/.next/standalone/packages/ui/.next/server/pages/404.html +2 -2
  198. package/.next/standalone/packages/ui/.next/server/pages/500.html +2 -2
  199. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.js +1 -1
  200. package/.next/standalone/packages/ui/.next/server/server-reference-manifest.json +1 -1
  201. package/.next/standalone/packages/ui/.next/static/chunks/0c7bbb59865774a1.js +1 -0
  202. package/.next/standalone/packages/ui/.next/static/chunks/0fe978002ba489fb.js +3 -0
  203. package/.next/standalone/packages/ui/.next/static/chunks/1169d4ac8f9df687.js +1 -0
  204. package/.next/standalone/packages/ui/.next/static/chunks/241b6b1c83610ebf.js +1 -0
  205. package/.next/standalone/packages/ui/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
  206. package/.next/standalone/packages/ui/.next/static/chunks/6d7922838a3513a4.js +1 -0
  207. package/.next/{static/chunks/7a00633903e066b4.js → standalone/packages/ui/.next/static/chunks/781328ee279ffc41.js} +1 -1
  208. package/.next/standalone/packages/ui/.next/static/chunks/937cb3894a606899.js +5 -0
  209. package/.next/standalone/packages/ui/.next/static/chunks/9cf644b700f37825.css +1 -0
  210. package/.next/standalone/packages/ui/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
  211. package/.next/standalone/packages/ui/.next/static/chunks/dbce73f7087f2470.js +10 -0
  212. package/.next/standalone/packages/ui/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
  213. package/.next/standalone/packages/ui/dist/BUILD_ID +1 -0
  214. package/.next/standalone/packages/ui/dist/public/f864aa7e7061c0600e35cf3d879b27cf.txt +1 -0
  215. package/.next/standalone/packages/ui/dist/public/favicon.ico +0 -0
  216. package/.next/standalone/packages/ui/dist/public/file.svg +1 -0
  217. package/.next/standalone/packages/ui/dist/public/github-mark-white.svg +1 -0
  218. package/.next/standalone/packages/ui/dist/public/github-mark.svg +1 -0
  219. package/.next/standalone/packages/ui/dist/public/globe.svg +1 -0
  220. package/.next/standalone/packages/ui/dist/public/icon.svg +7 -0
  221. package/.next/standalone/packages/ui/dist/public/logo-dark-bg.svg +17 -0
  222. package/.next/standalone/packages/ui/dist/public/logo-with-bg.svg +17 -0
  223. package/.next/standalone/packages/ui/dist/public/logo.svg +17 -0
  224. package/.next/standalone/packages/ui/dist/public/next.svg +1 -0
  225. package/.next/standalone/packages/ui/dist/public/vercel.svg +1 -0
  226. package/.next/standalone/packages/ui/dist/public/window.svg +1 -0
  227. package/.next/standalone/packages/ui/dist/standalone/packages/web/README.md +196 -0
  228. package/.next/standalone/packages/ui/dist/standalone/packages/web/package.json +75 -0
  229. package/.next/standalone/packages/ui/dist/standalone/packages/web/server.js +44 -0
  230. package/.next/standalone/packages/ui/dist/standalone/specs/014-complete-custom-frontmatter/README.md +175 -0
  231. package/.next/standalone/packages/ui/dist/standalone/specs/016-github-action/README.md +317 -0
  232. package/.next/standalone/packages/ui/dist/standalone/specs/017-vscode-extension/README.md +261 -0
  233. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CLI-DESIGN.md +380 -0
  234. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION-EXAMPLES.md +230 -0
  235. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/CONFIGURATION.md +285 -0
  236. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/IMPLEMENTATION.md +358 -0
  237. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/README.md +303 -0
  238. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/TESTING.md +368 -0
  239. package/.next/standalone/packages/ui/dist/standalone/specs/018-spec-validation/VALIDATION-RULES.md +327 -0
  240. package/.next/standalone/packages/ui/dist/standalone/specs/024-pattern-aware-list-grouping/README.md +117 -0
  241. package/.next/standalone/packages/ui/dist/standalone/specs/025-template-config-updates/README.md +73 -0
  242. package/.next/standalone/packages/ui/dist/standalone/specs/026-init-pattern-selection/README.md +109 -0
  243. package/.next/standalone/packages/ui/dist/standalone/specs/034-copilot-slash-commands/README.md +107 -0
  244. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/ARCHITECTURE.md +244 -0
  245. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/IMPLEMENTATION.md +429 -0
  246. package/.next/standalone/packages/ui/dist/standalone/specs/035-live-specs-showcase/README.md +302 -0
  247. package/.next/standalone/packages/ui/dist/standalone/specs/036-pm-integrations/README.md +158 -0
  248. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-AI-ASSISTED.md +359 -0
  249. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-FULL-LIFECYCLE.md +86 -0
  250. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-REAL-FEATURE.md +437 -0
  251. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DEMO-SCRIPT.md +365 -0
  252. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-FINAL.md +203 -0
  253. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SESSION-2025-11-06.md +174 -0
  254. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/DOGFOODING-SUMMARY.md +156 -0
  255. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/IMPLEMENTATION.md +183 -0
  256. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/MARKETING.md +229 -0
  257. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/NEXT-STEPS-DEMO.md +243 -0
  258. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/README.md +217 -0
  259. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/SESSION-2025-11-06.md +166 -0
  260. package/.next/standalone/packages/ui/dist/standalone/specs/043-official-launch-02/TESTING.md +126 -0
  261. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/ACTUAL-IMPLEMENTATION.md +108 -0
  262. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/DESIGN.md +382 -0
  263. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/IMPLEMENTATION.md +144 -0
  264. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/RATIONALE.md +146 -0
  265. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/README.md +208 -0
  266. package/.next/standalone/packages/ui/dist/standalone/specs/045-unified-dashboard/TESTING.md +182 -0
  267. package/.next/standalone/packages/ui/dist/standalone/specs/047-git-backfill-timestamps/README.md +314 -0
  268. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/FINDINGS.md +113 -0
  269. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/GUIDELINES.md +237 -0
  270. package/.next/standalone/packages/ui/dist/standalone/specs/048-spec-complexity-analysis/README.md +149 -0
  271. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-COMPARISONS.md +175 -0
  272. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/ANALYSIS-CONSTRAINTS.md +254 -0
  273. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/FIRST-PRINCIPLES.md +376 -0
  274. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-ROADMAP.md +240 -0
  275. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/OPERATIONALIZATION-TOOLS.md +175 -0
  276. package/.next/standalone/packages/ui/dist/standalone/specs/049-leanspec-first-principles/README.md +374 -0
  277. package/.next/standalone/packages/ui/dist/standalone/specs/051-docs-system-prompt-principles/README.md +339 -0
  278. package/.next/standalone/packages/ui/dist/standalone/specs/052-branding-assets/README.md +128 -0
  279. package/.next/standalone/packages/ui/dist/standalone/specs/053-spec-assets-philosophy/README.md +97 -0
  280. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/DESIGN-DECISIONS.md +93 -0
  281. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/OUTPUT-FORMAT-SPEC.md +146 -0
  282. package/.next/standalone/packages/ui/dist/standalone/specs/054-validate-output-lint-style/README.md +175 -0
  283. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART1.md +397 -0
  284. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS-PART2.md +342 -0
  285. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/ANALYSIS.md +44 -0
  286. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CHANGES.md +150 -0
  287. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/CONCERNS-ANALYSIS.md +351 -0
  288. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/DOCS-ALIGNMENT-ANALYSIS.md +238 -0
  289. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/README.md +280 -0
  290. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-DRAFT.md +372 -0
  291. package/.next/standalone/packages/ui/dist/standalone/specs/055-readme-redesign-ai-first/REDESIGN-REFINED.md +466 -0
  292. package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/AUDIT-RESULTS.md +178 -0
  293. package/.next/standalone/packages/ui/dist/standalone/specs/056-docs-site-accuracy-audit/README.md +174 -0
  294. package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/README.md +295 -0
  295. package/.next/standalone/packages/ui/dist/standalone/specs/057-docs-validation-comprehensive/VALIDATION-RESULTS.md +487 -0
  296. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/ANALYSIS.md +241 -0
  297. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/DESIGN.md +279 -0
  298. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/IMPLEMENTATION.md +642 -0
  299. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/NOTES.md +125 -0
  300. package/.next/standalone/packages/ui/dist/standalone/specs/058-docs-overview-polish/README.md +286 -0
  301. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/ARCHITECTURE.md +392 -0
  302. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/COMMANDS.md +1002 -0
  303. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/CONTEXT-ENGINEERING.md +411 -0
  304. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/IMPLEMENTATION.md +812 -0
  305. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/README.md +504 -0
  306. package/.next/standalone/packages/ui/dist/standalone/specs/059-programmatic-spec-management/TESTING.md +724 -0
  307. package/.next/standalone/packages/ui/dist/standalone/specs/060-core-concepts-coherence/README.md +125 -0
  308. package/.next/standalone/packages/ui/dist/standalone/specs/061-ai-assisted-spec-writing/README.md +299 -0
  309. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/IMPLEMENTATION-PLAN.md +174 -0
  310. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PAGE-SPECIFICATIONS.md +265 -0
  311. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/PROBLEM-ANALYSIS.md +36 -0
  312. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/README.md +243 -0
  313. package/.next/standalone/packages/ui/dist/standalone/specs/062-docs-info-architecture-v2/SOLUTION-DESIGN.md +82 -0
  314. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/DESIGN.md +338 -0
  315. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/EXAMPLES.md +354 -0
  316. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/IMPLEMENTATION.md +189 -0
  317. package/.next/standalone/packages/ui/dist/standalone/specs/063-migration-from-existing-tools/README.md +119 -0
  318. package/.next/standalone/packages/ui/dist/standalone/specs/064-docs-site-zh-translation/README.md +170 -0
  319. package/.next/standalone/packages/ui/dist/standalone/specs/065-v03-planning/README.md +158 -0
  320. package/.next/standalone/packages/ui/dist/standalone/specs/066-context-economy-thresholds-refinement/README.md +842 -0
  321. package/.next/standalone/packages/ui/dist/standalone/specs/067-monorepo-core-extraction/README.md +358 -0
  322. package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/DESIGN.md +444 -0
  323. package/.next/standalone/packages/ui/dist/standalone/specs/068-live-specs-ux-enhancements/README.md +357 -0
  324. package/.next/standalone/packages/ui/dist/standalone/specs/069-token-counting-utils/README.md +551 -0
  325. package/.next/standalone/packages/ui/dist/standalone/specs/070-mcp-token-counting-tool/README.md +372 -0
  326. package/.next/standalone/packages/ui/dist/standalone/specs/071-simplified-token-validation/README.md +489 -0
  327. package/.next/standalone/packages/ui/dist/standalone/specs/072-ai-agent-first-use-workflow/README.md +285 -0
  328. package/.next/standalone/packages/ui/dist/standalone/specs/073-template-engine-agents-md/README.md +323 -0
  329. package/.next/standalone/packages/ui/dist/standalone/specs/074-content-at-creation/README.md +136 -0
  330. package/.next/standalone/packages/ui/dist/standalone/specs/075-intelligent-search-engine/README.md +399 -0
  331. package/.next/standalone/packages/ui/dist/standalone/specs/076-programmatic-spec-relationships/README.md +301 -0
  332. package/.next/standalone/packages/ui/dist/standalone/specs/077-archiving-strategy/README.md +235 -0
  333. package/.next/standalone/packages/ui/dist/standalone/specs/078-sub-spec-template-system/README.md +303 -0
  334. package/.next/standalone/packages/ui/dist/standalone/specs/079-cli-alphabetical-organization/README.md +196 -0
  335. package/.next/standalone/packages/ui/dist/standalone/specs/080-mcp-server-modular-architecture/README.md +388 -0
  336. package/.next/standalone/packages/ui/dist/standalone/specs/081-web-app-ux-redesign/README.md +824 -0
  337. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DATABASE.md +111 -0
  338. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/DEPLOYMENT.md +69 -0
  339. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/FILESYSTEM.md +77 -0
  340. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/IMPLEMENTATION.md +184 -0
  341. package/.next/standalone/packages/ui/dist/standalone/specs/082-web-realtime-sync-architecture/README.md +496 -0
  342. package/.next/standalone/packages/ui/dist/standalone/specs/083-web-navigation-performance/README.md +490 -0
  343. package/.next/standalone/packages/ui/dist/standalone/specs/084-sub-spec-visibility-in-tools/README.md +389 -0
  344. package/.next/standalone/packages/ui/dist/standalone/specs/085-cli-relationship-commands/README.md +920 -0
  345. package/.next/standalone/packages/ui/dist/standalone/specs/086-template-component-deduplication/README.md +146 -0
  346. package/.next/standalone/packages/ui/dist/standalone/specs/087-cli-ui-command/README.md +607 -0
  347. package/.next/standalone/packages/ui/dist/standalone/specs/088-core-concepts-terminology-only/README.md +104 -0
  348. package/.next/standalone/packages/ui/dist/standalone/specs/089-sdd-practical-tutorials/README.md +124 -0
  349. package/.next/standalone/packages/ui/dist/standalone/specs/090-leanspec-sdd-case-studies/README.md +129 -0
  350. package/.next/standalone/packages/ui/dist/standalone/specs/091-chinese-localization-strategy/README.md +244 -0
  351. package/.next/standalone/packages/ui/dist/standalone/specs/092-docs-site-submodule-migration/README.md +148 -0
  352. package/.next/standalone/packages/ui/dist/standalone/specs/093-spec-detail-ui-improvements/README.md +54 -0
  353. package/.next/standalone/packages/ui/dist/standalone/specs/archived/001-typescript-cli-migration/README.md +37 -0
  354. package/.next/standalone/packages/ui/dist/standalone/specs/archived/002-template-system-redesign/README.md +60 -0
  355. package/.next/standalone/packages/ui/dist/standalone/specs/archived/003-init-system-redesign/README.md +113 -0
  356. package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/README.md +69 -0
  357. package/.next/standalone/packages/ui/dist/standalone/specs/archived/004-existing-project-integration/SUMMARY.md +112 -0
  358. package/.next/standalone/packages/ui/dist/standalone/specs/archived/005-structured-frontmatter/README.md +229 -0
  359. package/.next/standalone/packages/ui/dist/standalone/specs/archived/006-pm-visualization-tools/README.md +406 -0
  360. package/.next/standalone/packages/ui/dist/standalone/specs/archived/007-system-prompt-updates/README.md +168 -0
  361. package/.next/standalone/packages/ui/dist/standalone/specs/archived/008-commander-migration/README.md +174 -0
  362. package/.next/standalone/packages/ui/dist/standalone/specs/archived/009-cli-ux-enhancement/README.md +212 -0
  363. package/.next/standalone/packages/ui/dist/standalone/specs/archived/010-commands-refactor/README.md +249 -0
  364. package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/README.md +60 -0
  365. package/.next/standalone/packages/ui/dist/standalone/specs/archived/011-test-results/TEST_SUMMARY.md +139 -0
  366. package/.next/standalone/packages/ui/dist/standalone/specs/archived/012-sub-spec-files/README.md +722 -0
  367. package/.next/standalone/packages/ui/dist/standalone/specs/archived/013-custom-spec-templates/README.md +413 -0
  368. package/.next/standalone/packages/ui/dist/standalone/specs/archived/015-npm-publishing/README.md +255 -0
  369. package/.next/standalone/packages/ui/dist/standalone/specs/archived/019-readme-improvement/README.md +252 -0
  370. package/.next/standalone/packages/ui/dist/standalone/specs/archived/020-documentation-website/README.md +253 -0
  371. package/.next/standalone/packages/ui/dist/standalone/specs/archived/021-docusaurus-vercel-migration/README.md +612 -0
  372. package/.next/standalone/packages/ui/dist/standalone/specs/archived/022-flexible-folder-structure/README.md +794 -0
  373. package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/DESIGN.md +834 -0
  374. package/.next/standalone/packages/ui/dist/standalone/specs/archived/023-folder-structure-improvements/README.md +255 -0
  375. package/.next/standalone/packages/ui/dist/standalone/specs/archived/027-cli-ui-ux-optimization/README.md +454 -0
  376. package/.next/standalone/packages/ui/dist/standalone/specs/archived/028-cli-ui-modernization/README.md +172 -0
  377. package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/IMPLEMENTATION.md +152 -0
  378. package/.next/standalone/packages/ui/dist/standalone/specs/archived/029-visualization-improvements/README.md +95 -0
  379. package/.next/standalone/packages/ui/dist/standalone/specs/archived/030-created-date-format-bug/README.md +87 -0
  380. package/.next/standalone/packages/ui/dist/standalone/specs/archived/031-gantt-ux-improvements/README.md +230 -0
  381. package/.next/standalone/packages/ui/dist/standalone/specs/archived/032-console-log-chalk-security/README.md +89 -0
  382. package/.next/standalone/packages/ui/dist/standalone/specs/archived/033-mcp-server/README.md +89 -0
  383. package/.next/standalone/packages/ui/dist/standalone/specs/archived/037-docs-overhaul/README.md +166 -0
  384. package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-flat-structure-migration/README.md +276 -0
  385. package/.next/standalone/packages/ui/dist/standalone/specs/archived/038-mcp-frontmatter-bug-fix/README.md +122 -0
  386. package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-simplify-viewer-commands/README.md +198 -0
  387. package/.next/standalone/packages/ui/dist/standalone/specs/archived/039-template-variable-sync/README.md +192 -0
  388. package/.next/standalone/packages/ui/dist/standalone/specs/archived/040-spec-viewer-commands/README.md +171 -0
  389. package/.next/standalone/packages/ui/dist/standalone/specs/archived/042-mcp-error-handling/README.md +200 -0
  390. package/.next/standalone/packages/ui/dist/standalone/specs/archived/044-spec-relationships-clarity/README.md +317 -0
  391. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/DESIGN.md +276 -0
  392. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/IMPLEMENTATION.md +241 -0
  393. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/README.md +139 -0
  394. package/.next/standalone/packages/ui/dist/standalone/specs/archived/046-stats-dashboard-refactor/TESTING.md +328 -0
  395. package/.next/standalone/packages/ui/dist/standalone/specs/archived/050-tool-redesign-first-principles/README.md +400 -0
  396. package/.next/standalone/packages/ui/dist/static/chunks/0c19c69aa7625475.js +1 -0
  397. package/.next/standalone/packages/ui/dist/static/chunks/116800b03245a1e5.js +1 -0
  398. package/.next/standalone/packages/ui/dist/static/chunks/15843a3d7584e314.js +1 -0
  399. package/.next/standalone/packages/ui/dist/static/chunks/19e80edf527aef5c.js +1 -0
  400. package/.next/standalone/packages/ui/dist/static/chunks/465954d5af3284a9.js +1 -0
  401. package/.next/standalone/packages/ui/dist/static/chunks/5abeeb89f1412a80.js +3 -0
  402. package/.next/standalone/packages/ui/dist/static/chunks/5c2072ad938de8ed.js +1 -0
  403. package/.next/standalone/packages/ui/dist/static/chunks/6a05a93ec8fa7b83.js +1 -0
  404. package/.next/standalone/packages/ui/dist/static/chunks/778e42188e450b39.css +1 -0
  405. package/.next/standalone/packages/ui/dist/static/chunks/a02c1f50ff00204f.js +1 -0
  406. package/.next/standalone/packages/ui/dist/static/chunks/a45464b9776dd88e.js +1 -0
  407. package/.next/standalone/packages/ui/dist/static/chunks/a6dad97d9634a72d.js +1 -0
  408. package/.next/standalone/packages/ui/dist/static/chunks/b0ea0ac61604f843.js +1 -0
  409. package/.next/standalone/packages/ui/dist/static/chunks/c06e85b449720194.js +1 -0
  410. package/.next/standalone/packages/ui/dist/static/chunks/c557ac675be79771.js +1 -0
  411. package/.next/standalone/packages/ui/dist/static/chunks/cad005a57ffbb2d3.js +1 -0
  412. package/.next/standalone/packages/ui/dist/static/chunks/cdf6fe33bc65efbc.js +1 -0
  413. package/.next/standalone/packages/ui/dist/static/chunks/d12ed5dbe44caed7.js +1 -0
  414. package/.next/standalone/packages/ui/dist/static/chunks/d1ebe5c1a344f4ca.js +5 -0
  415. package/.next/standalone/packages/ui/dist/static/chunks/d42cf1682bc46652.js +1 -0
  416. package/.next/standalone/packages/ui/dist/static/chunks/dde5d8bddd7fbfcf.js +1 -0
  417. package/.next/standalone/packages/ui/dist/static/chunks/ebd89051637b9a47.js +4 -0
  418. package/.next/standalone/packages/ui/dist/static/chunks/ec82875d18b29f47.js +2 -0
  419. package/.next/standalone/packages/ui/dist/static/chunks/f0b701df9769bcc5.js +19 -0
  420. package/.next/standalone/packages/ui/dist/static/chunks/turbopack-1c09a99f4c9e28d3.js +3 -0
  421. package/.next/standalone/packages/ui/package.json +1 -1
  422. package/.next/standalone/packages/ui/server.js +1 -1
  423. package/.next/standalone/packages/ui/src/app/api/dependencies/route.ts +4 -67
  424. package/.next/standalone/packages/ui/src/app/api/projects/[id]/dependencies/route.ts +3 -52
  425. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/dependency-graph/route.ts +129 -0
  426. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/metadata/route.ts +170 -0
  427. package/.next/standalone/packages/ui/src/app/api/projects/[id]/specs/[spec]/status/route.ts +9 -2
  428. package/.next/standalone/packages/ui/src/app/api/projects/[id]/tags/route.ts +25 -0
  429. package/.next/standalone/packages/ui/src/app/api/specs/[id]/metadata/route.ts +184 -0
  430. package/.next/standalone/packages/ui/src/app/api/tags/route.ts +16 -0
  431. package/.next/standalone/packages/ui/src/app/context/page.tsx +22 -0
  432. package/.next/standalone/packages/ui/src/app/dashboard-client.tsx +14 -4
  433. package/.next/standalone/packages/ui/src/app/dependencies/dependencies-client.tsx +2 -2
  434. package/.next/standalone/packages/ui/src/app/dependencies/page.tsx +25 -13
  435. package/.next/standalone/packages/ui/src/app/projects/[projectId]/dependencies/page.tsx +1 -14
  436. package/.next/standalone/packages/ui/src/app/projects/page.tsx +234 -113
  437. package/.next/standalone/packages/ui/src/app/specs/[id]/page.tsx +24 -1
  438. package/.next/standalone/packages/ui/src/app/specs/page.tsx +22 -0
  439. package/.next/standalone/packages/ui/src/app/specs/specs-client.tsx +1 -1
  440. package/.next/standalone/packages/ui/src/app/stats/page.tsx +22 -0
  441. package/.next/standalone/packages/ui/src/components/editable-spec-metadata.tsx +152 -0
  442. package/.next/standalone/packages/ui/src/components/main-sidebar.tsx +6 -0
  443. package/.next/standalone/packages/ui/src/components/priority-editor.tsx +153 -0
  444. package/.next/standalone/packages/ui/src/components/project-switcher.tsx +53 -8
  445. package/.next/standalone/packages/ui/src/components/spec-detail-client.tsx +23 -20
  446. package/.next/standalone/packages/ui/src/components/status-editor.tsx +153 -0
  447. package/.next/standalone/packages/ui/src/components/tags-editor.tsx +238 -0
  448. package/.next/standalone/packages/ui/src/components/ui/command.tsx +1 -1
  449. package/.next/standalone/packages/ui/src/lib/db/service-queries.ts +151 -15
  450. package/.next/standalone/packages/ui/src/lib/projects/registry.ts +1 -1
  451. package/.next/standalone/packages/ui/src/lib/specs/sources/multi-project-source.ts +21 -5
  452. package/.next/standalone/packages/ui/tsconfig.tsbuildinfo +1 -1
  453. package/.next/static/chunks/0c7bbb59865774a1.js +1 -0
  454. package/.next/static/chunks/0fe978002ba489fb.js +3 -0
  455. package/.next/static/chunks/1169d4ac8f9df687.js +1 -0
  456. package/.next/static/chunks/241b6b1c83610ebf.js +1 -0
  457. package/.next/static/chunks/39931c5cecf4c4b7.js +1 -0
  458. package/.next/static/chunks/6d7922838a3513a4.js +1 -0
  459. package/.next/{standalone/packages/ui/.next/static/chunks/7a00633903e066b4.js → static/chunks/781328ee279ffc41.js} +1 -1
  460. package/.next/static/chunks/937cb3894a606899.js +5 -0
  461. package/.next/static/chunks/9cf644b700f37825.css +1 -0
  462. package/.next/static/chunks/bc0f8f7f8dc0a352.js +1 -0
  463. package/.next/static/chunks/dbce73f7087f2470.js +10 -0
  464. package/.next/static/chunks/f0a083ac29b4b6c2.js +1 -0
  465. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_buildManifest.js +11 -0
  466. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_clientMiddlewareManifest.json +1 -0
  467. package/.next/static/s9uUE9DnvJD2xIz-iBGMe/_ssgManifest.js +1 -0
  468. package/package.json +2 -2
  469. package/.next/standalone/node_modules/.pnpm/source-map@0.8.0-beta.0/node_modules/source-map/package.json +0 -95
  470. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__18aca702._.js +0 -3
  471. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__27348781._.js +0 -3
  472. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3a7f0840._.js +0 -3
  473. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__3e17db24._.js +0 -3
  474. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__6e06fd2a._.js +0 -3
  475. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__97b99cc0._.js +0 -3
  476. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__9d9758e1._.js +0 -3
  477. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b212b9bd._.js +0 -3
  478. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__b9c03a57._.js +0 -3
  479. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__e99e7672._.js +0 -3
  480. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__f38a5f20._.js +0 -3
  481. package/.next/standalone/packages/ui/.next/server/chunks/[root-of-the-server]__fa8cf2bc._.js +0 -3
  482. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__53f4506c._.js +0 -3
  483. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__921689ca._.js +0 -3
  484. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__a9d7fd42._.js +0 -3
  485. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b27b2469._.js +0 -3
  486. package/.next/standalone/packages/ui/.next/server/chunks/ssr/[root-of-the-server]__b3633d6e._.js +0 -3
  487. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_03aa8d19._.js +0 -7
  488. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_28fe1532._.js +0 -5
  489. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_90eed09a._.js +0 -3
  490. package/.next/standalone/packages/ui/.next/server/chunks/ssr/_f9129aae._.js +0 -3
  491. package/.next/standalone/packages/ui/.next/static/chunks/04de9ed512b8098b.js +0 -10
  492. package/.next/standalone/packages/ui/.next/static/chunks/3d12a8c3152b526d.js +0 -3
  493. package/.next/standalone/packages/ui/.next/static/chunks/7931c6cb379305b1.js +0 -1
  494. package/.next/standalone/packages/ui/.next/static/chunks/7f9a218732be8099.js +0 -5
  495. package/.next/standalone/packages/ui/.next/static/chunks/8a6e8f3394240dbb.js +0 -1
  496. package/.next/standalone/packages/ui/.next/static/chunks/8d8c106c6848d15b.js +0 -1
  497. package/.next/standalone/packages/ui/.next/static/chunks/a640b005f2e15d98.js +0 -1
  498. package/.next/standalone/packages/ui/.next/static/chunks/a7075a240adea8e8.js +0 -1
  499. package/.next/standalone/packages/ui/.next/static/chunks/ddb2935cfe5310c7.css +0 -1
  500. package/.next/standalone/packages/ui/.next/static/chunks/f924ae32752e1583.js +0 -1
  501. package/.next/static/chunks/04de9ed512b8098b.js +0 -10
  502. package/.next/static/chunks/3d12a8c3152b526d.js +0 -3
  503. package/.next/static/chunks/7931c6cb379305b1.js +0 -1
  504. package/.next/static/chunks/7f9a218732be8099.js +0 -5
  505. package/.next/static/chunks/8a6e8f3394240dbb.js +0 -1
  506. package/.next/static/chunks/8d8c106c6848d15b.js +0 -1
  507. package/.next/static/chunks/a640b005f2e15d98.js +0 -1
  508. package/.next/static/chunks/a7075a240adea8e8.js +0 -1
  509. package/.next/static/chunks/ddb2935cfe5310c7.css +0 -1
  510. package/.next/static/chunks/f924ae32752e1583.js +0 -1
  511. /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_buildManifest.js +0 -0
  512. /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_clientMiddlewareManifest.json +0 -0
  513. /package/.next/standalone/packages/ui/.next/static/{T8X9UGfigRL0qWZiBHNjy → s9uUE9DnvJD2xIz-iBGMe}/_ssgManifest.js +0 -0
  514. /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_buildManifest.js +0 -0
  515. /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_clientMiddlewareManifest.json +0 -0
  516. /package/.next/{static/T8X9UGfigRL0qWZiBHNjy → standalone/packages/ui/dist/static/4ZnYN1WbN4LGJQOwP6FkT}/_ssgManifest.js +0 -0
@@ -0,0 +1,10 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,635389,e=>{"use strict";let t=(0,e.i(122436).default)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]);e.s(["Maximize2",()=>t],635389)},76075,e=>{"use strict";var t=e.i(890022),s=e.i(431231),a=e.i(632137);let n=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("rounded-xl border border-gray-200 dark:border-gray-800 bg-card text-card-foreground shadow",e),...s}));n.displayName="Card";let r=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("flex flex-col space-y-1.5 p-6",e),...s}));r.displayName="CardHeader";let l=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("font-semibold leading-none tracking-tight",e),...s}));l.displayName="CardTitle";let i=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("text-sm text-muted-foreground",e),...s}));i.displayName="CardDescription";let c=s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("p-6 pt-0",e),...s}));c.displayName="CardContent",s.forwardRef(({className:e,...s},n)=>(0,t.jsx)("div",{ref:n,className:(0,a.cn)("flex items-center p-6 pt-0",e),...s})).displayName="CardFooter",e.s(["Card",()=>n,"CardContent",()=>c,"CardDescription",()=>i,"CardHeader",()=>r,"CardTitle",()=>l])},522764,e=>{"use strict";let t=(0,e.i(122436).default)("list",[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]);e.s(["List",()=>t],522764)},549914,e=>{"use strict";var t=e.i(890022),s=e.i(431231),a=e.i(954049),n=e.i(828666),r=e.i(20315),l=e.i(122436);let i=(0,l.default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);var c=e.i(686266),o=e.i(94176);let d=(0,l.default)("coins",[["circle",{cx:"8",cy:"8",r:"6",key:"3yglwk"}],["path",{d:"M18.09 10.37A6 6 0 1 1 10.34 18",key:"t5s6rm"}],["path",{d:"M7 6h1v4",key:"1obek4"}],["path",{d:"m16.71 13.88.7.71-2.82 2.82",key:"1rbuyh"}]]),m=(0,l.default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);var x=e.i(300329),h=e.i(644021),p=e.i(76075),u=e.i(235893),g=e.i(323490),f=e.i(21079),j=e.i(40843),y=e.i(765213),k=e.i(635389);let N=(0,l.default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]),w=(0,l.default)("scroll-text",[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]]),v=(0,l.default)("file-code",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]]),b=(0,l.default)("history",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]),C=(0,l.default)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]]),M=(0,l.default)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]),S=(0,l.default)("scale",[["path",{d:"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"7g6ntu"}],["path",{d:"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z",key:"ijws7r"}],["path",{d:"M7 21h10",key:"1b0cd5"}],["path",{d:"M12 3v18",key:"108xh3"}],["path",{d:"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2",key:"3gwbw2"}]]),T=(0,l.default)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]]);var B=e.i(632137),z=e.i(603921),R=e.i(812878),L=e.i(188168);function O(e,t){if(!t||t.length<2)return 0;let s=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=e.match(RegExp(s,"gi"));return a?a.length:0}function $({name:e,path:r,content:l,tokenCount:o,lastModified:m,isExpanded:x=!1,onToggle:h,className:f,searchQuery:$,projectRoot:A,onViewDetail:D}){let E,V,[F,P]=s.useState(!1),I=$?O(l,$):0,W=async e=>{e.stopPropagation();try{await navigator.clipboard.writeText(l),P(!0),setTimeout(()=>P(!1),2e3)}catch(e){console.error("Failed to copy content:",e)}},H=e.endsWith(".json"),q=e.endsWith(".md"),Q="agents.md"===(E=e.toLowerCase())||E.includes("agent")?N:"gemini.md"===E?T:"claude.md"===E||"copilot.md"===E||"copilot-instructions.md"===E?N:"readme.md"===E?a.BookOpen:"contributing.md"===E?C:"changelog.md"===E?b:"license.md"===E||"license"===E?S:"security.md"===E?M:E.endsWith(".json")||"config.json"===E?n.Settings:E.includes("api")||E.includes("spec")?v:w,G="agents.md"===(V=e.toLowerCase())||V.includes("agent")?"text-purple-500":"gemini.md"===V?"text-blue-500":"claude.md"===V?"text-orange-500":"copilot.md"===V||"copilot-instructions.md"===V?"text-sky-500":"readme.md"===V?"text-green-500":"contributing.md"===V?"text-pink-500":"changelog.md"===V?"text-amber-500":"license.md"===V||"license"===V?"text-slate-500":"security.md"===V?"text-red-500":V.endsWith(".json")?"text-yellow-500":"text-muted-foreground",J=e=>{if($&&$.length>=2){if(!$||$.length<2)return e;let s=$.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=RegExp(`(${s})`,"gi");return e.split(a).map((e,s)=>a.test(e)?(0,t.jsx)("mark",{className:"bg-yellow-200 dark:bg-yellow-800 rounded px-0.5",children:e},s):e)}return e};return(0,t.jsxs)(p.Card,{className:(0,B.cn)("overflow-hidden",f),children:[(0,t.jsx)(p.CardHeader,{className:(0,B.cn)("cursor-pointer hover:bg-muted/50 transition-colors py-3 px-4",x&&"border-b"),onClick:h,children:(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,t.jsx)(Q,{className:(0,B.cn)("h-4 w-4 shrink-0",G)}),(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)(p.CardTitle,{className:"text-sm font-medium truncate",children:e}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:r})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 shrink-0",children:[$&&I>0&&(0,t.jsxs)(g.Badge,{variant:"secondary",className:"text-xs bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",children:[I," match",1!==I?"es":""]}),(0,t.jsxs)(g.Badge,{variant:"outline",className:(0,B.cn)("text-xs",o<2e3?"text-green-600 dark:text-green-400":o<3500?"text-blue-600 dark:text-blue-400":o<5e3?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"),children:[(0,t.jsx)(d,{className:"h-3 w-3 mr-1"}),o.toLocaleString()," tokens"]}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground hidden sm:inline",children:o<2e3?"Optimal":o<3500?"Good":o<5e3?"Large":"Very Large"}),D&&(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:e=>{e.stopPropagation(),D?.()},title:"View full page",children:(0,t.jsx)(k.Maximize2,{className:"h-3.5 w-3.5"})}),A&&(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:e=>{let t;e.stopPropagation(),A&&window.open((t=r.startsWith("/")?r:`${A}/${r}`,`vscode://file${t}`),"_blank")},title:"Open in VS Code",children:(0,t.jsx)(y.ExternalLink,{className:"h-3.5 w-3.5"})}),(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:W,title:"Copy content",children:F?(0,t.jsx)(c.Check,{className:"h-3.5 w-3.5 text-green-600"}):(0,t.jsx)(i,{className:"h-3.5 w-3.5"})})]})]})}),x&&(0,t.jsxs)(p.CardContent,{className:"p-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-4 px-4 py-2 bg-muted/30 text-xs text-muted-foreground border-b",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1",children:[(0,t.jsx)(j.Clock,{className:"h-3 w-3"}),"Modified ",("string"==typeof m?new Date(m):m).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})]}),(0,t.jsxs)("span",{children:[l.split("\n").length," lines"]})]}),(0,t.jsx)("div",{className:"max-h-[500px] overflow-auto",children:H?(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 whitespace-pre-wrap",children:J(JSON.stringify(JSON.parse(l),null,2))}):q?$&&$.length>=2?(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 whitespace-pre-wrap font-mono",children:J(l)}):(0,t.jsx)("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm p-4",children:(0,t.jsx)(z.default,{remarkPlugins:[R.default],rehypePlugins:[L.default],children:l})}):(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 whitespace-pre-wrap",children:J(l)})})]})]})}function A({name:e,path:a,content:n,tokenCount:r,lastModified:l,className:i,searchQuery:c,projectRoot:o,onViewDetail:d}){let[m,x]=s.useState(!1);return s.useEffect(()=>{c&&c.length>=2&&O(n,c)>0&&x(!0)},[c,n]),(0,t.jsx)($,{name:e,path:a,content:n,tokenCount:r,lastModified:l,isExpanded:m,onToggle:()=>x(!m),className:i,searchQuery:c,projectRoot:o,onViewDetail:d})}var D=e.i(237545),E=e.i(753938),V=e.i(998489),F=e.i(656756),P=e.i(715683);function I({file:e,projectRoot:r,onBack:l}){var o,m,x;let h,p,[f,k]=s.useState(!1),O="agents.md"===(h=e.name.toLowerCase())||h.includes("agent")?N:"gemini.md"===h?T:"claude.md"===h||"copilot.md"===h||"copilot-instructions.md"===h?N:"readme.md"===h?a.BookOpen:"contributing.md"===h?C:"changelog.md"===h?b:"license.md"===h||"license"===h?S:"security.md"===h?M:h.endsWith(".json")||"config.json"===h?n.Settings:h.includes("api")||h.includes("spec")?v:w,$="agents.md"===(p=e.name.toLowerCase())||p.includes("agent")?"text-purple-500":"gemini.md"===p?"text-blue-500":"claude.md"===p?"text-orange-500":"copilot.md"===p||"copilot-instructions.md"===p?"text-sky-500":"readme.md"===p?"text-green-500":"contributing.md"===p?"text-pink-500":"changelog.md"===p?"text-amber-500":"license.md"===p||"license"===p?"text-slate-500":"security.md"===p?"text-red-500":p.endsWith(".json")?"text-yellow-500":"text-muted-foreground",A=async()=>{try{await navigator.clipboard.writeText(e.content),k(!0),setTimeout(()=>k(!1),2e3)}catch(e){console.error("Failed to copy content:",e)}},I=e.name.endsWith(".md"),W=e.name.endsWith(".json");return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("header",{className:"lg:sticky lg:top-14 lg:z-20 border-b bg-card",children:(0,t.jsxs)("div",{className:"px-3 sm:px-6 py-2 sm:py-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3 mb-1.5 sm:mb-2",children:[(0,t.jsxs)(u.Button,{variant:"ghost",size:"sm",onClick:l,className:"h-8 px-2 -ml-2",children:[(0,t.jsx)(E.ArrowLeft,{className:"h-4 w-4 mr-1"}),"Back"]}),(0,t.jsx)(O,{className:(0,B.cn)("h-5 w-5 shrink-0",$)}),(0,t.jsx)("h1",{className:"text-lg sm:text-xl font-bold tracking-tight truncate",children:e.name})]}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsxs)(g.Badge,{variant:"outline",className:(0,B.cn)("text-xs",(o=e.tokenCount)<2e3?"text-green-600 dark:text-green-400":o<3500?"text-blue-600 dark:text-blue-400":o<5e3?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"),children:[(0,t.jsx)(d,{className:"h-3 w-3 mr-1"}),e.tokenCount.toLocaleString()," tokens"]}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:(m=e.tokenCount)<2e3?"Optimal":m<3500?"Good":m<5e3?"Large":"Very Large"}),(0,t.jsx)("div",{className:"h-4 w-px bg-border mx-1 hidden sm:block"}),(0,t.jsxs)("span",{className:"text-xs text-muted-foreground flex items-center gap-1",children:[(0,t.jsx)(j.Clock,{className:"h-3 w-3"}),"Modified ",("string"==typeof(x=e.lastModified)?new Date(x):x).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})]}),(0,t.jsx)("span",{className:"text-xs text-muted-foreground",children:"•"}),(0,t.jsxs)("span",{className:"text-xs text-muted-foreground",children:[e.content.split("\n").length," lines"]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2 mt-1.5 sm:mt-2",children:[(0,t.jsx)("span",{className:"text-xs text-muted-foreground truncate",children:e.path}),(0,t.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[r&&(0,t.jsxs)(u.Button,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:()=>{var t;let s;r&&window.open((s=(t=e.path).startsWith("/")?t:`${r}/${t}`,`vscode://file${s}`),"_blank")},title:"Open in VS Code",children:[(0,t.jsx)(y.ExternalLink,{className:"h-3.5 w-3.5 mr-1"}),"Open in Editor"]}),(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:A,title:"Copy content",children:f?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.Check,{className:"h-3.5 w-3.5 mr-1 text-green-600"}),"Copied!"]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{className:"h-3.5 w-3.5 mr-1"}),"Copy"]})})]})]})]})}),(0,t.jsxs)("div",{className:"flex flex-col xl:flex-row xl:items-start",children:[(0,t.jsx)("main",{className:"flex-1 px-3 sm:px-6 py-3 sm:py-6 min-w-0",children:(0,t.jsx)("div",{className:"space-y-4",children:W?(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 rounded-lg border whitespace-pre-wrap",children:JSON.stringify(JSON.parse(e.content),null,2)}):I?(0,t.jsx)("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm sm:prose-base",children:(0,t.jsx)(z.default,{remarkPlugins:[R.default],rehypePlugins:[L.default,D.default],components:{pre:({children:e,...a})=>{let n=s.Children.toArray(e)[0];if(s.isValidElement(n)&&"code"===n.type&&"string"==typeof n.props.className&&n.props.className?.includes("language-mermaid")){let e=n.props,s="string"==typeof e.children?e.children:"";return(0,t.jsx)(P.MermaidDiagram,{code:s})}return(0,t.jsx)("pre",{...a,children:e})}},children:e.content})}):(0,t.jsx)("pre",{className:"p-4 text-sm overflow-x-auto bg-muted/20 rounded-lg border whitespace-pre-wrap",children:e.content})})}),I&&(0,t.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,t.jsx)(V.TableOfContentsSidebar,{content:e.content})})]}),I&&(0,t.jsx)("div",{className:"xl:hidden",children:(0,t.jsx)(V.TableOfContents,{content:e.content})}),(0,t.jsx)(F.BackToTop,{})]})}function W(e){return e<5e3?"text-green-600 dark:text-green-400":e<1e4?"text-blue-600 dark:text-blue-400":e<2e4?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function H({icon:e,title:s,description:a,suggestion:n}){return(0,t.jsxs)("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[(0,t.jsx)(e,{className:"h-12 w-12 text-muted-foreground/50 mb-4"}),(0,t.jsx)("h3",{className:"text-sm font-medium text-muted-foreground",children:s}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground/70 mt-1 max-w-xs",children:a}),n&&(0,t.jsx)("p",{className:"text-xs text-primary mt-2",children:n})]})}function q({title:e,description:a,icon:n,files:r,emptyMessage:l,emptySuggestion:i,defaultExpanded:c=!0,searchQuery:m,projectRoot:x,onFileSelect:h}){let u=r.reduce((e,t)=>e+t.tokenCount,0),f=s.useMemo(()=>!m||m.length<2?r:r.filter(e=>{let t=O(e.content,m),s=e.name.toLowerCase().includes(m.toLowerCase());return t>0||s}),[r,m]),j=s.useMemo(()=>!m||m.length<2?0:f.reduce((e,t)=>e+O(t.content,m),0),[f,m]);return(0,t.jsxs)(p.Card,{children:[(0,t.jsx)(p.CardHeader,{className:"pb-3",children:(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"p-2 rounded-lg bg-primary/10",children:(0,t.jsx)(n,{className:"h-5 w-5 text-primary"})}),(0,t.jsxs)("div",{children:[(0,t.jsx)(p.CardTitle,{className:"text-lg",children:e}),(0,t.jsx)(p.CardDescription,{children:a})]})]}),r.length>0&&(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[m&&j>0&&(0,t.jsxs)(g.Badge,{variant:"secondary",className:"text-xs bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",children:[j," match",1!==j?"es":""]}),(0,t.jsxs)(g.Badge,{variant:"secondary",className:"text-xs",children:[f.length,f.length!==r.length?`/${r.length}`:""," file",1!==r.length?"s":""]}),(0,t.jsxs)(g.Badge,{variant:"outline",className:(0,B.cn)("text-xs",W(u)),children:[(0,t.jsx)(d,{className:"h-3 w-3 mr-1"}),u.toLocaleString()," tokens"]})]})]})}),(0,t.jsx)(p.CardContent,{children:0===f.length?(0,t.jsx)(H,{icon:o.AlertCircle,title:m?"No matches found":l,description:m?"Try a different search term":"No files found in this category",suggestion:m?void 0:i}):(0,t.jsx)("div",{className:"space-y-3",children:f.map(e=>(0,t.jsx)(A,{name:e.name,path:e.path,content:e.content,tokenCount:e.tokenCount,lastModified:e.lastModified,searchQuery:m,projectRoot:x,onViewDetail:h?()=>h(e):void 0},e.path))})})]})}function Q({context:e}){let[l,o]=s.useState(!1),[j,y]=s.useState(""),[k,N]=s.useState(null),w=async()=>{let t=[];for(let s of e.agentInstructions)t.push(`# ${s.path}
2
+
3
+ ${s.content}
4
+ `);for(let s of(e.config.file&&t.push(`# ${e.config.file.path}
5
+
6
+ ${e.config.file.content}
7
+ `),e.projectDocs))t.push(`# ${s.path}
8
+
9
+ ${s.content}
10
+ `);try{await navigator.clipboard.writeText(t.join("\n---\n\n")),o(!0),setTimeout(()=>o(!1),2e3)}catch(e){console.error("Failed to copy all content:",e)}},v=e.agentInstructions.length>0||null!==e.config.file||e.projectDocs.length>0,b=s.useMemo(()=>{if(!j||j.length<2)return 0;let t=0;for(let s of e.agentInstructions)t+=O(s.content,j);for(let s of(e.config.file&&(t+=O(e.config.file.content,j)),e.projectDocs))t+=O(s.content,j);return t},[e,j]);return k?(0,t.jsx)("div",{className:"min-h-screen bg-background",children:(0,t.jsx)(I,{file:k,projectRoot:e.projectRoot,onBack:()=>N(null)})}):(0,t.jsx)("div",{className:"min-h-screen bg-background",children:(0,t.jsxs)("div",{className:"container mx-auto px-4 py-8 max-w-5xl",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsxs)("div",{className:"flex items-start justify-between gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("h1",{className:"text-3xl sm:text-4xl font-bold tracking-tight flex items-center gap-3",children:[(0,t.jsx)(a.BookOpen,{className:"h-8 w-8 text-primary"}),"Project Context"]}),(0,t.jsx)("p",{className:"text-muted-foreground mt-2",children:"View project-level context files that inform AI agents and development workflows"})]}),v&&(0,t.jsx)(u.Button,{variant:"outline",size:"sm",onClick:w,className:"shrink-0",children:l?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.Check,{className:"h-4 w-4 mr-2 text-green-600"}),"Copied!"]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{className:"h-4 w-4 mr-2"}),"Copy All"]})})]}),v&&(0,t.jsxs)("div",{className:"mt-6 space-y-4",children:[(0,t.jsxs)("div",{className:"relative",children:[(0,t.jsx)(x.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),(0,t.jsx)(f.Input,{type:"text",placeholder:"Search within context files...",value:j,onChange:e=>y(e.target.value),className:"pl-10 pr-10"}),j&&(0,t.jsx)(u.Button,{variant:"ghost",size:"sm",className:"absolute right-1 top-1/2 -translate-y-1/2 h-7 w-7 p-0",onClick:()=>y(""),children:(0,t.jsx)(h.X,{className:"h-4 w-4"})})]}),j&&j.length>=2&&(0,t.jsx)("div",{className:"flex items-center gap-2 text-sm",children:b>0?(0,t.jsxs)(g.Badge,{variant:"secondary",className:"bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",children:[b," match",1!==b?"es":""," found"]}):(0,t.jsxs)("span",{className:"text-muted-foreground",children:['No matches found for "',j,'"']})}),(0,t.jsx)(p.Card,{className:"bg-muted/30",children:(0,t.jsx)(p.CardContent,{className:"py-4",children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-4 sm:gap-8",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(d,{className:(0,B.cn)("h-5 w-5",W(e.totalTokens))}),(0,t.jsxs)("span",{className:"text-sm",children:[(0,t.jsx)("strong",{className:W(e.totalTokens),children:e.totalTokens.toLocaleString()})," ","total tokens"]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[(0,t.jsx)(m,{className:"h-4 w-4"}),"Context budget for AI agents"]})]})})})]})]}),(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsx)(q,{title:"Agent Instructions",description:"System prompts and guidelines for AI agents",icon:a.BookOpen,files:e.agentInstructions,emptyMessage:"No agent instructions found",emptySuggestion:"Create an AGENTS.md file in your project root",defaultExpanded:e.agentInstructions.length<=2,searchQuery:j,projectRoot:e.projectRoot,onFileSelect:N}),(0,t.jsx)(q,{title:"Configuration",description:"LeanSpec project configuration and settings",icon:n.Settings,files:e.config.file?[e.config.file]:[],emptyMessage:"No configuration found",emptySuggestion:"Run 'lean-spec init' to create a config file",defaultExpanded:!0,searchQuery:j,projectRoot:e.projectRoot,onFileSelect:N}),(0,t.jsx)(q,{title:"Project Documentation",description:"README, contributing guidelines, and changelog",icon:r.FileText,files:e.projectDocs,emptyMessage:"No project docs found",emptySuggestion:"Create a README.md file in your project root",defaultExpanded:!1,searchQuery:j,projectRoot:e.projectRoot,onFileSelect:N})]}),!v&&(0,t.jsx)(p.Card,{className:"mt-8",children:(0,t.jsx)(p.CardContent,{className:"py-12",children:(0,t.jsx)(H,{icon:a.BookOpen,title:"No project context found",description:"This project doesn't have any context files yet. Context files help AI agents understand your project better.",suggestion:"Start by creating AGENTS.md or running 'lean-spec init'"})})})]})})}e.s(["ContextClient",()=>Q],549914)},172381,e=>{e.v(t=>Promise.all(["static/chunks/e5aab2c562822175.js","static/chunks/192b2f6118d057e2.js","static/chunks/c658e22a605e0ed1.js","static/chunks/2136b3131f74188f.js","static/chunks/97c8160044aea609.js","static/chunks/414a78f7b9b58d11.js","static/chunks/4610aea3ca2e69eb.js","static/chunks/d52a048b511c32bd.js"].map(t=>e.l(t))).then(()=>t(396758)))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,585458,(e,t,s)=>{e.e,t.exports=function(){"use strict";var e="millisecond",t="second",s="minute",r="hour",a="week",n="month",i="quarter",l="year",c="date",d="Invalid Date",o=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,m=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,u=function(e,t,s){var r=String(e);return!r||r.length>=t?e:""+Array(t+1-r.length).join(s)+e},h="en",x={};x[h]={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var t=["th","st","nd","rd"],s=e%100;return"["+e+(t[(s-20)%10]||t[s]||t[0])+"]"}};var p="$isDayjsObject",f=function(e){return e instanceof y||!(!e||!e[p])},g=function e(t,s,r){var a;if(!t)return h;if("string"==typeof t){var n=t.toLowerCase();x[n]&&(a=n),s&&(x[n]=s,a=n);var i=t.split("-");if(!a&&i.length>1)return e(i[0])}else{var l=t.name;x[l]=t,a=l}return!r&&a&&(h=a),a||!r&&h},v=function(e,t){if(f(e))return e.clone();var s="object"==typeof t?t:{};return s.date=e,s.args=arguments,new y(s)},b={s:u,z:function(e){var t=-e.utcOffset(),s=Math.abs(t);return(t<=0?"+":"-")+u(Math.floor(s/60),2,"0")+":"+u(s%60,2,"0")},m:function e(t,s){if(t.date()<s.date())return-e(s,t);var r=12*(s.year()-t.year())+(s.month()-t.month()),a=t.clone().add(r,n),i=s-a<0,l=t.clone().add(r+(i?-1:1),n);return+(-(r+(s-a)/(i?a-l:l-a))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(d){return({M:n,y:l,w:a,d:"day",D:c,h:r,m:s,s:t,ms:e,Q:i})[d]||String(d||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}};b.l=g,b.i=f,b.w=function(e,t){return v(e,{locale:t.$L,utc:t.$u,x:t.$x,$offset:t.$offset})};var y=function(){function u(e){this.$L=g(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[p]=!0}var h=u.prototype;return h.parse=function(e){this.$d=function(e){var t=e.date,s=e.utc;if(null===t)return new Date(NaN);if(b.u(t))return new Date;if(t instanceof Date)return new Date(t);if("string"==typeof t&&!/Z$/i.test(t)){var r=t.match(o);if(r){var a=r[2]-1||0,n=(r[7]||"0").substring(0,3);return s?new Date(Date.UTC(r[1],a,r[3]||1,r[4]||0,r[5]||0,r[6]||0,n)):new Date(r[1],a,r[3]||1,r[4]||0,r[5]||0,r[6]||0,n)}}return new Date(t)}(e),this.init()},h.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},h.$utils=function(){return b},h.isValid=function(){return this.$d.toString()!==d},h.isSame=function(e,t){var s=v(e);return this.startOf(t)<=s&&s<=this.endOf(t)},h.isAfter=function(e,t){return v(e)<this.startOf(t)},h.isBefore=function(e,t){return this.endOf(t)<v(e)},h.$g=function(e,t,s){return b.u(e)?this[t]:this.set(s,e)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(e,i){var d=this,o=!!b.u(i)||i,m=b.p(e),u=function(e,t){var s=b.w(d.$u?Date.UTC(d.$y,t,e):new Date(d.$y,t,e),d);return o?s:s.endOf("day")},h=function(e,t){return b.w(d.toDate()[e].apply(d.toDate("s"),(o?[0,0,0,0]:[23,59,59,999]).slice(t)),d)},x=this.$W,p=this.$M,f=this.$D,g="set"+(this.$u?"UTC":"");switch(m){case l:return o?u(1,0):u(31,11);case n:return o?u(1,p):u(0,p+1);case a:var v=this.$locale().weekStart||0,y=(x<v?x+7:x)-v;return u(o?f-y:f+(6-y),p);case"day":case c:return h(g+"Hours",0);case r:return h(g+"Minutes",1);case s:return h(g+"Seconds",2);case t:return h(g+"Milliseconds",3);default:return this.clone()}},h.endOf=function(e){return this.startOf(e,!1)},h.$set=function(a,i){var d,o=b.p(a),m="set"+(this.$u?"UTC":""),u=((d={}).day=m+"Date",d[c]=m+"Date",d[n]=m+"Month",d[l]=m+"FullYear",d[r]=m+"Hours",d[s]=m+"Minutes",d[t]=m+"Seconds",d[e]=m+"Milliseconds",d)[o],h="day"===o?this.$D+(i-this.$W):i;if(o===n||o===l){var x=this.clone().set(c,1);x.$d[u](h),x.init(),this.$d=x.set(c,Math.min(this.$D,x.daysInMonth())).$d}else u&&this.$d[u](h);return this.init(),this},h.set=function(e,t){return this.clone().$set(e,t)},h.get=function(e){return this[b.p(e)]()},h.add=function(e,i){var c,d=this;e=Number(e);var o=b.p(i),m=function(t){var s=v(d);return b.w(s.date(s.date()+Math.round(t*e)),d)};if(o===n)return this.set(n,this.$M+e);if(o===l)return this.set(l,this.$y+e);if("day"===o)return m(1);if(o===a)return m(7);var u=((c={})[s]=6e4,c[r]=36e5,c[t]=1e3,c)[o]||1,h=this.$d.getTime()+e*u;return b.w(h,this)},h.subtract=function(e,t){return this.add(-1*e,t)},h.format=function(e){var t=this,s=this.$locale();if(!this.isValid())return s.invalidDate||d;var r=e||"YYYY-MM-DDTHH:mm:ssZ",a=b.z(this),n=this.$H,i=this.$m,l=this.$M,c=s.weekdays,o=s.months,u=s.meridiem,h=function(e,s,a,n){return e&&(e[s]||e(t,r))||a[s].slice(0,n)},x=function(e){return b.s(n%12||12,e,"0")},p=u||function(e,t,s){var r=e<12?"AM":"PM";return s?r.toLowerCase():r};return r.replace(m,function(e,r){return r||function(e){switch(e){case"YY":return String(t.$y).slice(-2);case"YYYY":return b.s(t.$y,4,"0");case"M":return l+1;case"MM":return b.s(l+1,2,"0");case"MMM":return h(s.monthsShort,l,o,3);case"MMMM":return h(o,l);case"D":return t.$D;case"DD":return b.s(t.$D,2,"0");case"d":return String(t.$W);case"dd":return h(s.weekdaysMin,t.$W,c,2);case"ddd":return h(s.weekdaysShort,t.$W,c,3);case"dddd":return c[t.$W];case"H":return String(n);case"HH":return b.s(n,2,"0");case"h":return x(1);case"hh":return x(2);case"a":return p(n,i,!0);case"A":return p(n,i,!1);case"m":return String(i);case"mm":return b.s(i,2,"0");case"s":return String(t.$s);case"ss":return b.s(t.$s,2,"0");case"SSS":return b.s(t.$ms,3,"0");case"Z":return a}return null}(e)||a.replace(":","")})},h.utcOffset=function(){return-(15*Math.round(this.$d.getTimezoneOffset()/15))},h.diff=function(e,c,d){var o,m=this,u=b.p(c),h=v(e),x=(h.utcOffset()-this.utcOffset())*6e4,p=this-h,f=function(){return b.m(m,h)};switch(u){case l:o=f()/12;break;case n:o=f();break;case i:o=f()/3;break;case a:o=(p-x)/6048e5;break;case"day":o=(p-x)/864e5;break;case r:o=p/36e5;break;case s:o=p/6e4;break;case t:o=p/1e3;break;default:o=p}return d?o:b.a(o)},h.daysInMonth=function(){return this.endOf(n).$D},h.$locale=function(){return x[this.$L]},h.locale=function(e,t){if(!e)return this.$L;var s=this.clone(),r=g(e,t,!0);return r&&(s.$L=r),s},h.clone=function(){return b.w(this.$d,this)},h.toDate=function(){return new Date(this.valueOf())},h.toJSON=function(){return this.isValid()?this.toISOString():null},h.toISOString=function(){return this.$d.toISOString()},h.toString=function(){return this.$d.toUTCString()},u}(),w=y.prototype;return v.prototype=w,[["$ms",e],["$s",t],["$m",s],["$H",r],["$W","day"],["$M",n],["$y",l],["$D",c]].forEach(function(e){w[e[1]]=function(t){return this.$g(t,e[0],e[1])}}),v.extend=function(e,t){return e.$i||(e(t,y,v),e.$i=!0),v},v.locale=g,v.isDayjs=f,v.unix=function(e){return v(1e3*e)},v.en=x[h],v.Ls=x,v.p={},v}()},635389,e=>{"use strict";let t=(0,e.i(122436).default)("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]);e.s(["Maximize2",()=>t],635389)},730885,340982,e=>{"use strict";var t=e.i(122436);let s=(0,t.default)("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);e.s(["GitBranch",()=>s],730885);let r=(0,t.default)("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]]);e.s(["Minimize2",()=>r],340982)},76075,e=>{"use strict";var t=e.i(890022),s=e.i(431231),r=e.i(632137);let a=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("rounded-xl border border-gray-200 dark:border-gray-800 bg-card text-card-foreground shadow",e),...s}));a.displayName="Card";let n=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("flex flex-col space-y-1.5 p-6",e),...s}));n.displayName="CardHeader";let i=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("font-semibold leading-none tracking-tight",e),...s}));i.displayName="CardTitle";let l=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("text-sm text-muted-foreground",e),...s}));l.displayName="CardDescription";let c=s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("p-6 pt-0",e),...s}));c.displayName="CardContent",s.forwardRef(({className:e,...s},a)=>(0,t.jsx)("div",{ref:a,className:(0,r.cn)("flex items-center p-6 pt-0",e),...s})).displayName="CardFooter",e.s(["Card",()=>a,"CardContent",()=>c,"CardDescription",()=>l,"CardHeader",()=>n,"CardTitle",()=>i])},522764,e=>{"use strict";let t=(0,e.i(122436).default)("list",[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]]);e.s(["List",()=>t],522764)},416992,e=>{"use strict";let t=(0,e.i(122436).default)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]);e.s(["LayoutGrid",()=>t],416992)},310009,e=>{"use strict";var t=e.i(890022),s=e.i(431231),r=e.i(987985),a=e.i(230827),n=e.i(76075),i=e.i(323490),l=e.i(21079),c=e.i(235893),d=e.i(708737),o=e.i(300329),m=e.i(196812),u=e.i(75364),h=e.i(40843),x=e.i(490225),p=e.i(416992),f=e.i(522764),g=e.i(20315),v=e.i(730885),b=e.i(635389),y=e.i(340982),w=e.i(826712),j=e.i(525761),N=e.i(168497),C=e.i(597705),S=e.i(632137),$=e.i(145878);e.i(178420);var k=e.i(995403);let M={planned:{icon:h.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:u.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:m.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:x.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 T({initialSpecs:e,projectId:r}){let n=(0,a.useSearchParams)(),i=(0,a.useRouter)(),m=(0,s.useCallback)(e=>r?`/projects/${r}/specs/${e}`:`/specs/${e}`,[r]),u=(0,s.useCallback)(()=>r?`/projects/${r}/specs`:"/specs",[r]),[h,x]=(0,s.useState)(e),[g,v]=(0,s.useState)({}),[w,j]=(0,s.useState)(""),[N,C]=(0,s.useState)("all"),[$,D]=(0,s.useState)("all"),[T,A]=(0,s.useState)("id-desc"),[L,H]=(0,s.useState)(!1),[_,B]=(0,s.useState)(!1),[z,P]=(0,s.useState)(()=>{let e=n.get("view");if("board"===e||"list"===e)return e;{let e=localStorage.getItem("specs-view-mode");if("board"===e||"list"===e)return e}return"list"}),R=(0,s.useRef)(!0);(0,s.useEffect)(()=>{x(e)},[e]);let U=(0,s.useCallback)(async(e,t)=>{if(e.status===t)return;let s=e.status;v(t=>({...t,[e.id]:!0})),x(s=>s.map(s=>s.id===e.id?{...s,status:t}:s));try{let s=r?`/api/projects/${r}/specs/${encodeURIComponent(e.specName)}/status`:`/api/specs/${encodeURIComponent(e.specName)}/status`,a=await fetch(s,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:t})});if(!a.ok){let e=await a.text();throw Error(e||"Failed to update spec status")}let n=e.specNumber?`#${e.specNumber}`:e.specName;k.toast.success(`Moved ${n} to ${M[t].title}`)}catch(t){console.error("Failed to update spec status",t),x(t=>t.map(t=>t.id===e.id?{...t,status:s}:t)),k.toast.error("Unable to update status. Please try again.")}finally{v(t=>{let s={...t};return delete s[e.id],s})}},[r]);(0,s.useEffect)(()=>{"archived"===N&&"board"===z&&H(!0)},[N,z]),(0,s.useEffect)(()=>{if(R.current){R.current=!1;return}let e=new URLSearchParams(window.location.search);"board"===z?e.set("view","board"):e.delete("view");let t=e.toString(),s=t?`?${t}`:"";i.replace(`${u()}${s}`,{scroll:!1}),localStorage.setItem("specs-view-mode",z)},[z,i,u]);let F=(0,s.useMemo)(()=>{let e=[...h.filter(e=>{let t=!w||e.title?.toLowerCase().includes(w.toLowerCase())||e.specName.toLowerCase().includes(w.toLowerCase())||e.tags?.some(e=>e.toLowerCase().includes(w.toLowerCase())),s="all"===N?"list"!==z||"archived"!==e.status:e.status===N,r="all"===$||e.priority===$;return t&&s&&r})];switch(T){case"id-desc":e.sort((e,t)=>(t.specNumber||0)-(e.specNumber||0));break;case"id-asc":e.sort((e,t)=>(e.specNumber||0)-(t.specNumber||0));break;case"updated-desc":e.sort((e,t)=>e.updatedAt?t.updatedAt?t.updatedAt.getTime()-e.updatedAt.getTime():-1:1);break;case"title-asc":e.sort((e,t)=>{let s=(e.title||e.specName).toLowerCase(),r=(t.title||t.specName).toLowerCase();return s.localeCompare(r)})}return e},[h,w,N,$,T,z]);return(0,t.jsx)("div",{className:"h-[calc(100vh-3.5rem)] flex flex-col overflow-hidden bg-background p-2 sm:p-4",children:(0,t.jsxs)("div",{className:(0,S.cn)("flex flex-col h-full mx-auto transition-all duration-300",_?"w-full":"max-w-7xl w-full"),children:[(0,t.jsx)("div",{className:"flex-none mb-3 sm:mb-4",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3 md:gap-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsx)("h1",{className:"text-lg sm:text-xl md:text-2xl font-bold tracking-tight truncate",children:"Specifications"}),(0,t.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:[F.length," specs"]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5 sm:gap-2 flex-shrink-0",children:[(0,t.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,t.jsxs)(c.Button,{variant:"list"===z?"secondary":"ghost",size:"sm",onClick:()=>P("list"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"List view",children:[(0,t.jsx)(f.List,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,t.jsx)("span",{className:"hidden lg:inline ml-2",children:"List"})]}),(0,t.jsxs)(c.Button,{variant:"board"===z?"secondary":"ghost",size:"sm",onClick:()=>P("board"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"Board view",children:[(0,t.jsx)(p.LayoutGrid,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,t.jsx)("span",{className:"hidden lg:inline ml-2",children:"Board"})]})]}),(0,t.jsx)(c.Button,{variant:"ghost",size:"icon",onClick:()=>B(!_),className:"hidden md:flex h-8 w-8 sm:h-10 sm:w-10 text-muted-foreground hover:text-foreground",title:_?"Exit wide mode":"Enter wide mode",children:_?(0,t.jsx)(y.Minimize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}):(0,t.jsx)(b.Maximize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"})})]})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"relative w-full",children:[(0,t.jsx)(o.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,t.jsx)(l.Input,{placeholder:"Search specs...",value:w,onChange:e=>j(e.target.value),className:"pl-8 sm:pl-9 h-9 sm:h-10 w-full text-sm"})]}),(0,t.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,t.jsxs)(d.Select,{value:N,onValueChange:e=>C(e),children:[(0,t.jsx)(d.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,t.jsx)(d.SelectValue,{placeholder:"Status"})}),(0,t.jsxs)(d.SelectContent,{children:[(0,t.jsx)(d.SelectItem,{value:"all",children:"All Status"}),(0,t.jsx)(d.SelectItem,{value:"planned",children:"Planned"}),(0,t.jsx)(d.SelectItem,{value:"in-progress",children:"In Progress"}),(0,t.jsx)(d.SelectItem,{value:"complete",children:"Complete"}),(0,t.jsx)(d.SelectItem,{value:"archived",children:"Archived"})]})]}),(0,t.jsxs)(d.Select,{value:$,onValueChange:D,children:[(0,t.jsx)(d.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,t.jsx)(d.SelectValue,{placeholder:"Priority"})}),(0,t.jsxs)(d.SelectContent,{children:[(0,t.jsx)(d.SelectItem,{value:"all",children:"All Priority"}),(0,t.jsx)(d.SelectItem,{value:"critical",children:"Critical"}),(0,t.jsx)(d.SelectItem,{value:"high",children:"High"}),(0,t.jsx)(d.SelectItem,{value:"medium",children:"Medium"}),(0,t.jsx)(d.SelectItem,{value:"low",children:"Low"})]})]}),(0,t.jsxs)(d.Select,{value:T,onValueChange:e=>A(e),children:[(0,t.jsx)(d.SelectTrigger,{className:"w-[130px] sm:w-[170px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,t.jsx)(d.SelectValue,{placeholder:"Sort by"})}),(0,t.jsxs)(d.SelectContent,{children:[(0,t.jsx)(d.SelectItem,{value:"id-desc",children:"Newest First"}),(0,t.jsx)(d.SelectItem,{value:"id-asc",children:"Oldest First"}),(0,t.jsx)(d.SelectItem,{value:"updated-desc",children:"Recently Updated"}),(0,t.jsx)(d.SelectItem,{value:"title-asc",children:"Title (A-Z)"})]})]})]})]})]})}),(0,t.jsx)("div",{className:(0,S.cn)("flex-1 min-h-0","board"===z?"overflow-x-auto overflow-y-hidden":"overflow-y-auto"),children:"list"===z?(0,t.jsx)("div",{className:"w-full",children:(0,t.jsx)(O,{specs:F,getSpecUrl:m})}):(0,t.jsx)(I,{specs:F,onStatusChange:U,pendingSpecIds:g,showArchived:L,onToggleArchived:()=>H(!L),getSpecUrl:m})})]})})}function O({specs:e,getSpecUrl:s}){return(0,t.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:gap-3 md:gap-4 pb-2 sm:pb-4 md:pb-8",children:e.map(e=>{let a={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[e.priority]||"border-l-gray-300",l=e.relationships&&e.relationships.dependsOn.length>0,c=!!(e.subSpecsCount&&e.subSpecsCount>0),d=s(e.specNumber||e.id);return(0,t.jsxs)(n.Card,{className:(0,S.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",a),onClick:()=>window.location.href=d,children:[(0,t.jsx)(n.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,t.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-start md:justify-between md:gap-4",children:[(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)(r.default,{href:d,children:(0,t.jsxs)(n.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:[e.specNumber?(0,t.jsxs)("span",{className:"font-mono text-xs sm:text-sm md:text-base font-normal text-muted-foreground flex-shrink-0",children:["#",e.specNumber.toString().padStart(3,"0")]}):null,(0,t.jsx)("span",{className:"flex-1 break-words",children:e.title||e.specName})]})}),e.title&&e.title!==e.specName&&(0,t.jsx)("p",{className:"text-[11px] sm:text-xs font-mono text-muted-foreground mt-1 sm:mt-1.5 truncate",children:e.specName})]}),(0,t.jsxs)("div",{className:"flex gap-1.5 sm:gap-2 flex-wrap md:shrink-0",children:[e.status&&(0,t.jsx)(N.StatusBadge,{status:e.status}),e.priority&&(0,t.jsx)(C.PriorityBadge,{priority:e.priority})]})]})}),(0,t.jsx)(n.CardContent,{className:"px-3 sm:px-4 md:px-6 pb-2.5 sm:pb-3 md:pb-6 pt-0",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-4",children:[(0,t.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:e.updatedAt||c||l?(0,t.jsxs)(t.Fragment,{children:[e.updatedAt&&(0,t.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,t.jsx)(h.Clock,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,t.jsxs)("span",{className:"whitespace-nowrap",children:["Updated ",(0,$.formatRelativeTime)(e.updatedAt)]})]}),c&&(0,t.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,t.jsx)(g.FileText,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,t.jsxs)("span",{className:"whitespace-nowrap",children:["+",e.subSpecsCount," files"]})]}),l&&(0,t.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,t.jsx)(v.GitBranch,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,t.jsxs)("span",{className:"whitespace-nowrap",children:[e.relationships.dependsOn.length," deps"]})]})]}):(0,t.jsx)("span",{className:"invisible hidden md:inline",children:"No metadata"})}),e.tags&&e.tags.length>0&&(0,t.jsx)("div",{className:"flex flex-wrap gap-1 sm:gap-1.5 md:gap-2 md:justify-end md:shrink-0",children:e.tags.map(e=>(0,t.jsx)(i.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:e},e))})]})})]},e.id)})})}function I({specs:e,onStatusChange:a,pendingSpecIds:l,showArchived:c,onToggleArchived:d,getSpecUrl:o}){let[m,u]=(0,s.useState)(null),[h,x]=(0,s.useState)(null),[p,f]=(0,s.useState)({}),g=(0,s.useMemo)(()=>D.map(t=>({status:t,config:M[t],specs:e.filter(e=>e.status===t)})),[e]),v=(0,s.useMemo)(()=>{let t=new Map;return e.forEach(e=>t.set(e.id,e)),t},[e]),b=(0,s.useCallback)((e,t)=>{t.dataTransfer.setData("text/plain",e),t.dataTransfer.effectAllowed="move",u(e)},[]),y=(0,s.useCallback)(()=>{u(null),x(null)},[]),N=(0,s.useCallback)((e,t)=>{m&&(t.preventDefault(),t.dataTransfer.dropEffect="move",x(e))},[m]),$=(0,s.useCallback)((e,t)=>{if(!m)return;let s=t.relatedTarget;s&&t.currentTarget.contains(s)||x(t=>t===e?null:t)},[m]),k=(0,s.useCallback)((e,t)=>{t.preventDefault();let s=t.dataTransfer.getData("text/plain")||m;if(!s)return void y();let r=v.get(s);r&&r.status!==e&&a(r,e),y()},[m,y,a,v]);return(0,t.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:g.map(e=>{let s=e.config.icon,a="archived"===e.status,u=p[e.status];return(0,t.jsxs)("div",{className:(0,S.cn)("flex flex-col flex-1 snap-start","h-auto md:h-full w-full md:w-auto flex-shrink-0",a&&!c?"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,t.jsx)("div",{className:(0,S.cn)("flex-none mb-3 sm:mb-4 rounded-lg border-2 bg-background transition-all touch-manipulation",e.config.bgClass,e.config.borderClass,a?"cursor-pointer hover:opacity-80 active:opacity-70":"",a&&!c?"py-4 sm:py-6 px-1.5 sm:px-2":"p-2.5 sm:p-3","md:cursor-default cursor-pointer"),onClick:()=>{if(a)d();else{var t;window.innerWidth<768&&(t=e.status,f(e=>({...e,[t]:!e[t]})))}},children:(0,t.jsxs)("h2",{className:(0,S.cn)("text-base sm:text-lg font-semibold flex items-center gap-1.5 sm:gap-2",e.config.colorClass,a&&!c&&"flex-col text-xs sm:text-sm gap-2 sm:gap-3"),children:[(0,t.jsx)(s,{className:"h-4 w-4 sm:h-5 sm:w-5 flex-shrink-0"}),a&&!c?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"vertical-text text-xs sm:text-sm whitespace-nowrap",children:e.config.title}),(0,t.jsx)(i.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1 sm:px-2 h-4 sm:h-5",children:e.specs.length})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:"truncate flex-1",children:e.config.title}),(0,t.jsx)(i.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1.5 sm:px-2 h-4 sm:h-5 flex-shrink-0",children:e.specs.length}),(0,t.jsx)("div",{className:"md:hidden ml-2 text-muted-foreground/50",children:u?(0,t.jsx)(j.ChevronRight,{className:"h-4 w-4"}):(0,t.jsx)(w.ChevronDown,{className:"h-4 w-4"})})]})]})}),(!a||c)&&!u&&(0,t.jsxs)("div",{className:(0,S.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",m&&"border-dashed border-muted-foreground/40",m&&h===e.status&&"bg-muted/40 border-primary/50"),onDragOver:t=>N(e.status,t),onDragLeave:t=>$(e.status,t),onDrop:t=>k(e.status,t),children:[e.specs.map(e=>{let s={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[e.priority]||"border-l-gray-300",a=!!l[e.id],c=o(e.specNumber||e.id);return(0,t.jsxs)(n.Card,{draggable:!a,onDragStart:t=>{a?t.preventDefault():b(e.id,t)},onDragEnd:y,"aria-disabled":a,className:(0,S.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",s,a&&"opacity-60 cursor-wait"),onClick:()=>window.location.href=c,children:[a&&(0,t.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,t.jsxs)(n.CardHeader,{className:"p-3 sm:p-4 pb-1.5 sm:pb-2 space-y-1 sm:space-y-1.5",children:[(0,t.jsx)("div",{className:"flex items-center justify-between",children:(0,t.jsx)("span",{className:"font-mono text-[10px] sm:text-xs text-muted-foreground/70 group-hover:text-primary/60 transition-colors",children:e.specNumber?`#${e.specNumber}`:""})}),(0,t.jsx)(r.default,{href:c,className:"block",children:(0,t.jsx)(n.CardTitle,{className:"text-xs sm:text-sm font-semibold leading-snug hover:text-primary transition-colors line-clamp-3",children:e.title||e.specName})})]}),(0,t.jsx)(n.CardContent,{className:"p-3 sm:p-4 pt-1.5 sm:pt-2 flex-1 flex flex-col justify-end",children:(0,t.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3",children:[e.title&&e.title!==e.specName&&(0,t.jsx)("p",{className:"text-[10px] sm:text-xs font-mono text-muted-foreground truncate opacity-70",children:e.specName}),(0,t.jsxs)("div",{className:"flex items-center justify-between gap-1.5 sm:gap-2 pt-0.5 sm:pt-1",children:[e.priority?(0,t.jsx)(C.PriorityBadge,{priority:e.priority}):(0,t.jsx)("div",{}),e.tags&&e.tags.length>0&&(0,t.jsxs)("div",{className:"flex flex-wrap gap-0.5 sm:gap-1 justify-end",children:[e.tags.slice(0,2).map(e=>(0,t.jsx)(i.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:e},e)),e.tags.length>2&&(0,t.jsxs)(i.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:["+",e.tags.length-2]})]})]})]})})]},e.id)}),0===e.specs.length&&(0,t.jsx)(n.Card,{className:"border-dashed border-gray-300 dark:border-gray-700 bg-transparent",children:(0,t.jsxs)(n.CardContent,{className:"py-6 sm:py-8 text-center px-2",children:[(0,t.jsx)(s,{className:(0,S.cn)("mx-auto h-6 w-6 sm:h-8 sm:w-8 mb-1.5 sm:mb-2",e.config.colorClass,"opacity-50")}),(0,t.jsx)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:"Drop here to move specs"})]})})]})]},e.status)})})}e.s(["SpecsClient",()=>T])}]);
@@ -0,0 +1 @@
1
+ 4ZnYN1WbN4LGJQOwP6FkT
@@ -0,0 +1 @@
1
+ b8a98cb5aeb125b59779ef790da5a13e7ad48091
@@ -0,0 +1 @@
1
+ <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#fff"/></svg>
@@ -0,0 +1 @@
1
+ <svg width="98" height="96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z" fill="#24292f"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
@@ -0,0 +1,7 @@
1
+ <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="6" y="4" width="20" height="24" rx="2" fill="#3B82F6"/>
3
+ <rect x="9" y="8" width="14" height="2" rx="1" fill="white" opacity="0.9"/>
4
+ <rect x="9" y="12" width="10" height="2" rx="1" fill="white" opacity="0.7"/>
5
+ <rect x="9" y="16" width="12" height="2" rx="1" fill="white" opacity="0.7"/>
6
+ <path d="M19 20 L21 22 L25 18" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" fill="none" opacity="0.9"/>
7
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="120" height="120">
2
+ <!-- Dark background -->
3
+ <rect width="120" height="120" fill="#1a1a2e" rx="8"/>
4
+ <!-- Left bracket -->
5
+ <path d="M 35 15 L 20 15 L 20 105 L 35 105"
6
+ fill="none" stroke="#00d9ff" stroke-width="6" stroke-linecap="round"/>
7
+ <!-- Right bracket -->
8
+ <path d="M 85 15 L 100 15 L 100 105 L 85 105"
9
+ fill="none" stroke="#00d9ff" stroke-width="6" stroke-linecap="round"/>
10
+ <!-- LS monogram -->
11
+ <text x="60" y="75"
12
+ font-family="system-ui, -apple-system, sans-serif"
13
+ font-size="42"
14
+ font-weight="700"
15
+ text-anchor="middle"
16
+ fill="#00d9ff">LS</text>
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="120" height="120">
2
+ <!-- Light background for contrast -->
3
+ <rect width="120" height="120" fill="#ffffff" rx="8"/>
4
+ <!-- Left bracket -->
5
+ <path d="M 35 15 L 20 15 L 20 105 L 35 105"
6
+ fill="none" stroke="#1a1a2e" stroke-width="6" stroke-linecap="round"/>
7
+ <!-- Right bracket -->
8
+ <path d="M 85 15 L 100 15 L 100 105 L 85 105"
9
+ fill="none" stroke="#1a1a2e" stroke-width="6" stroke-linecap="round"/>
10
+ <!-- LS monogram -->
11
+ <text x="60" y="75"
12
+ font-family="system-ui, -apple-system, sans-serif"
13
+ font-size="42"
14
+ font-weight="700"
15
+ text-anchor="middle"
16
+ fill="#1a1a2e">LS</text>
17
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="120" height="120">
2
+ <!-- Light background for contrast -->
3
+ <rect width="120" height="120" fill="#ffffff" rx="8"/>
4
+ <!-- Left bracket -->
5
+ <path d="M 35 15 L 20 15 L 20 105 L 35 105"
6
+ fill="none" stroke="#1a1a2e" stroke-width="6" stroke-linecap="round"/>
7
+ <!-- Right bracket -->
8
+ <path d="M 85 15 L 100 15 L 100 105 L 85 105"
9
+ fill="none" stroke="#1a1a2e" stroke-width="6" stroke-linecap="round"/>
10
+ <!-- LS monogram -->
11
+ <text x="60" y="75"
12
+ font-family="system-ui, -apple-system, sans-serif"
13
+ font-size="42"
14
+ font-weight="700"
15
+ text-anchor="middle"
16
+ fill="#1a1a2e">LS</text>
17
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
@@ -0,0 +1,196 @@
1
+ # LeanSpec Web
2
+
3
+ > Interactive spec showcase platform for browsing and exploring LeanSpec specifications
4
+
5
+ A fullstack web application built with Next.js 16, showcasing LeanSpec's own specifications in a rich, interactive format. This is the MVP (Phase 1) implementation for spec 035-live-specs-showcase.
6
+
7
+ ## Features
8
+
9
+ ✨ **Core Features (MVP - Phase 1)**:
10
+ - 📊 **Stats Dashboard**: Visual overview of project metrics and completion rates
11
+ - 🔍 **Search & Filtering**: Find specs by title, name, tags, status, or priority
12
+ - 📋 **Spec Browser**: Table view with sortable columns and detailed information
13
+ - 🎯 **Kanban Board**: Visual workflow tracking across all statuses
14
+ - 📝 **Rich Markdown Rendering**: Syntax-highlighted code blocks and GitHub-flavored markdown
15
+ - 🎨 **Modern UI**: Built with shadcn/ui components and Tailwind CSS
16
+ - 🌐 **Navigation**: Clean header with routing between pages
17
+ - ⚡ **Loading States**: Skeleton loaders for better UX
18
+ - 🛡️ **Error Handling**: Custom 404 and error pages
19
+
20
+ ## Tech Stack
21
+
22
+ - **Framework**: Next.js 16 with App Router
23
+ - **UI**: React 19, Tailwind CSS 4, shadcn/ui components
24
+ - **Database**: SQLite (dev) with Drizzle ORM
25
+ - **Markdown**: react-markdown with syntax highlighting (highlight.js)
26
+ - **Icons**: lucide-react
27
+ - **Testing**: Vitest
28
+
29
+ ## Getting Started
30
+
31
+ ### Prerequisites
32
+
33
+ - Node.js 18+
34
+ - pnpm (monorepo package manager)
35
+
36
+ ### Installation
37
+
38
+ From the monorepo root:
39
+
40
+ ```bash
41
+ # Install dependencies
42
+ pnpm install
43
+
44
+ # Navigate to web package
45
+ cd packages/web
46
+ ```
47
+
48
+ ### Database Setup
49
+
50
+ ```bash
51
+ # Generate migrations
52
+ npm run db:generate
53
+
54
+ # Run migrations
55
+ npm run db:migrate
56
+
57
+ # Seed database with LeanSpec specs
58
+ npm run db:seed
59
+ ```
60
+
61
+ ### Development
62
+
63
+ ```bash
64
+ # Start dev server (from packages/web)
65
+ npm run dev
66
+ ```
67
+
68
+ Open [http://localhost:3000](http://localhost:3000) to see the application.
69
+
70
+ ### Build
71
+
72
+ ```bash
73
+ # Type check
74
+ npm run typecheck
75
+
76
+ # Build for production
77
+ npm run build
78
+
79
+ # Start production server
80
+ npm run start
81
+ ```
82
+
83
+ ### Testing
84
+
85
+ ```bash
86
+ # Run tests once
87
+ npm run test
88
+
89
+ # Watch mode
90
+ npm run test:watch
91
+
92
+ # UI mode
93
+ npm run test:ui
94
+ ```
95
+
96
+ ## Project Structure
97
+
98
+ ```
99
+ src/
100
+ ├── app/ # Next.js App Router pages
101
+ │ ├── api/ # API routes
102
+ │ │ ├── projects/ # Projects endpoints
103
+ │ │ ├── specs/ # Specs endpoints
104
+ │ │ └── stats/ # Statistics endpoint
105
+ │ ├── board/ # Kanban board page
106
+ │ ├── specs/[id]/ # Spec detail page
107
+ │ ├── error.tsx # Error boundary
108
+ │ ├── loading.tsx # Global loading state
109
+ │ ├── not-found.tsx # 404 page
110
+ │ ├── page.tsx # Home page (server)
111
+ │ └── home-client.tsx # Home page (client)
112
+ ├── components/
113
+ │ ├── ui/ # shadcn/ui components
114
+ │ │ ├── badge.tsx
115
+ │ │ ├── button.tsx
116
+ │ │ ├── card.tsx
117
+ │ │ ├── input.tsx
118
+ │ │ └── skeleton.tsx
119
+ │ └── navigation.tsx # Header navigation
120
+ ├── lib/
121
+ │ ├── db/ # Database layer
122
+ │ │ ├── index.ts # DB connection
123
+ │ │ ├── schema.ts # Drizzle schema
124
+ │ │ ├── queries.ts # Data access layer
125
+ │ │ ├── migrate.ts # Migration runner
126
+ │ │ └── seed.ts # Database seeding
127
+ │ └── utils.ts # Utility functions
128
+ └── types/ # TypeScript types
129
+ ```
130
+
131
+ ## Database Schema
132
+
133
+ - **projects**: GitHub repositories using LeanSpec
134
+ - **specs**: Cached specification content from GitHub
135
+ - **spec_relationships**: Dependencies and relationships between specs
136
+ - **sync_logs**: Audit trail for GitHub sync operations
137
+
138
+ ## Available Scripts
139
+
140
+ | Command | Description |
141
+ |---------|-------------|
142
+ | `npm run dev` | Start development server |
143
+ | `npm run build` | Build for production |
144
+ | `npm run start` | Start production server |
145
+ | `npm run lint` | Run ESLint |
146
+ | `npm run typecheck` | Type check with TypeScript |
147
+ | `npm run test` | Run tests once |
148
+ | `npm run test:watch` | Run tests in watch mode |
149
+ | `npm run test:ui` | Run tests with UI |
150
+ | `npm run db:generate` | Generate Drizzle migrations |
151
+ | `npm run db:migrate` | Run database migrations |
152
+ | `npm run db:studio` | Open Drizzle Studio |
153
+ | `npm run db:seed` | Seed database with specs |
154
+
155
+ ## Roadmap
156
+
157
+ ### ✅ Phase 1: Foundation & MVP (Complete)
158
+ - Core pages and navigation
159
+ - Search and filtering
160
+ - Kanban board view
161
+ - Error handling and loading states
162
+ - Basic testing
163
+
164
+ ### 🚧 Phase 2: GitHub Integration (Upcoming)
165
+ - Multi-project support
166
+ - Automatic GitHub sync
167
+ - Scheduled cron jobs
168
+ - Enhanced error handling
169
+
170
+ ### 📋 Phase 3: Community & Discovery (Future)
171
+ - Public project explorer
172
+ - Full-text search across projects
173
+ - Spec relationship visualization
174
+ - Export to PDF
175
+
176
+ ### 🔮 Phase 4: Advanced Features (Future)
177
+ - GitHub OAuth for private repos
178
+ - Real-time webhooks
179
+ - Version history and diffs
180
+ - Team collaboration features
181
+
182
+ ## Contributing
183
+
184
+ This is part of the LeanSpec monorepo. See the main README for contribution guidelines.
185
+
186
+ ## License
187
+
188
+ Same as the LeanSpec project.
189
+
190
+ ## Documentation
191
+
192
+ For detailed architecture, design decisions, and implementation details, see:
193
+ - [Spec 035 README](../../specs/035-live-specs-showcase/README.md)
194
+ - [Architecture](../../specs/035-live-specs-showcase/ARCHITECTURE.md)
195
+ - [Implementation Plan](../../specs/035-live-specs-showcase/IMPLEMENTATION.md)
196
+
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@leanspec/web",
3
+ "version": "0.2.2",
4
+ "description": "LeanSpec Web: Fullstack spec showcase platform",
5
+ "private": true,
6
+ "type": "module",
7
+ "scripts": {
8
+ "dev": "next dev",
9
+ "build": "next build",
10
+ "start": "next start",
11
+ "lint": "eslint",
12
+ "typecheck": "tsc --noEmit",
13
+ "test": "vitest run",
14
+ "test:watch": "vitest",
15
+ "test:ui": "vitest --ui",
16
+ "db:generate": "drizzle-kit generate",
17
+ "db:migrate": "tsx src/lib/db/migrate.ts",
18
+ "db:studio": "drizzle-kit studio",
19
+ "db:seed": "tsx src/lib/db/seed.ts"
20
+ },
21
+ "dependencies": {
22
+ "@leanspec/core": "workspace:*",
23
+ "@radix-ui/react-avatar": "^1.1.11",
24
+ "@radix-ui/react-dialog": "^1.1.15",
25
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
26
+ "@radix-ui/react-progress": "^1.1.8",
27
+ "@radix-ui/react-select": "^2.1.14",
28
+ "@radix-ui/react-separator": "^1.1.8",
29
+ "@radix-ui/react-slot": "^1.2.4",
30
+ "@radix-ui/react-tabs": "^1.1.13",
31
+ "@radix-ui/react-tooltip": "^1.2.8",
32
+ "better-sqlite3": "^11.7.0",
33
+ "class-variance-authority": "^0.7.1",
34
+ "clsx": "^2.0.0",
35
+ "cmdk": "^1.1.1",
36
+ "dayjs": "^1.11.19",
37
+ "drizzle-orm": "^0.38.3",
38
+ "fuse.js": "^7.1.0",
39
+ "gray-matter": "^4.0.3",
40
+ "highlight.js": "^11.11.1",
41
+ "lucide-react": "^0.553.0",
42
+ "next": "16.0.1",
43
+ "next-themes": "^0.4.6",
44
+ "react": "19.2.0",
45
+ "react-dom": "19.2.0",
46
+ "react-markdown": "^9.0.2",
47
+ "recharts": "^3.4.1",
48
+ "rehype-highlight": "^7.0.1",
49
+ "remark-gfm": "^4.0.0",
50
+ "sonner": "^2.0.7",
51
+ "swr": "^2.3.6",
52
+ "tailwind-merge": "^3.4.0",
53
+ "zod": "^3.25.76"
54
+ },
55
+ "devDependencies": {
56
+ "@tailwindcss/typography": "^0.5.15",
57
+ "@types/better-sqlite3": "^7.6.12",
58
+ "@types/node": "^20",
59
+ "@types/react": "^19",
60
+ "@types/react-dom": "^19",
61
+ "@vitest/ui": "^4.0.6",
62
+ "autoprefixer": "^10.4.20",
63
+ "drizzle-kit": "^0.31.0",
64
+ "eslint": "^9",
65
+ "eslint-config-next": "16.0.1",
66
+ "postcss": "^8.4.49",
67
+ "tailwindcss": "^3.4.17",
68
+ "tsx": "^4.19.2",
69
+ "typescript": "^5",
70
+ "vitest": "^4.0.6"
71
+ },
72
+ "engines": {
73
+ "node": ">=20"
74
+ }
75
+ }
@@ -0,0 +1,44 @@
1
+ performance.mark('next-start');
2
+ import path from 'node:path'
3
+ import { fileURLToPath } from 'node:url'
4
+ import module from 'node:module'
5
+ const require = module.createRequire(import.meta.url)
6
+ const __dirname = fileURLToPath(new URL('.', import.meta.url))
7
+
8
+
9
+ const dir = path.join(__dirname)
10
+
11
+ process.env.NODE_ENV = 'production'
12
+ process.chdir(__dirname)
13
+
14
+ const currentPort = parseInt(process.env.PORT, 10) || 3000
15
+ const hostname = process.env.HOSTNAME || '0.0.0.0'
16
+
17
+ let keepAliveTimeout = parseInt(process.env.KEEP_ALIVE_TIMEOUT, 10)
18
+ const nextConfig = {"env":{},"webpack":null,"typescript":{"ignoreBuildErrors":false},"typedRoutes":false,"distDir":"./.next","cleanDistDir":true,"assetPrefix":"","cacheMaxMemorySize":52428800,"configOrigin":"next.config.ts","useFileSystemPublicRoutes":true,"generateEtags":true,"pageExtensions":["tsx","ts","jsx","js"],"poweredByHeader":true,"compress":true,"images":{"deviceSizes":[640,750,828,1080,1200,1920,2048,3840],"imageSizes":[32,48,64,96,128,256,384],"path":"/_next/image","loader":"default","loaderFile":"","domains":[],"disableStaticImages":false,"minimumCacheTTL":14400,"formats":["image/webp"],"maximumRedirects":3,"dangerouslyAllowLocalIP":false,"dangerouslyAllowSVG":false,"contentSecurityPolicy":"script-src 'none'; frame-src 'none'; sandbox;","contentDispositionType":"attachment","localPatterns":[{"pathname":"**","search":""}],"remotePatterns":[],"qualities":[75],"unoptimized":false},"devIndicators":{"position":"bottom-left"},"onDemandEntries":{"maxInactiveAge":60000,"pagesBufferLength":5},"basePath":"","sassOptions":{},"trailingSlash":false,"i18n":null,"productionBrowserSourceMaps":false,"excludeDefaultMomentLocales":true,"reactProductionProfiling":false,"reactStrictMode":null,"reactMaxHeadersLength":6000,"httpAgentOptions":{"keepAlive":true},"logging":{},"compiler":{},"expireTime":31536000,"staticPageGenerationTimeout":60,"output":"standalone","modularizeImports":{"@mui/icons-material":{"transform":"@mui/icons-material/{{member}}"},"lodash":{"transform":"lodash/{{member}}"}},"outputFileTracingRoot":"/home/marvin/projects/codervisor/lean-spec","cacheComponents":false,"cacheLife":{"default":{"stale":300,"revalidate":900,"expire":4294967294},"seconds":{"stale":30,"revalidate":1,"expire":60},"minutes":{"stale":300,"revalidate":60,"expire":3600},"hours":{"stale":300,"revalidate":3600,"expire":86400},"days":{"stale":300,"revalidate":86400,"expire":604800},"weeks":{"stale":300,"revalidate":604800,"expire":2592000},"max":{"stale":300,"revalidate":2592000,"expire":31536000}},"cacheHandlers":{},"experimental":{"useSkewCookie":false,"cssChunking":true,"multiZoneDraftMode":false,"appNavFailHandling":false,"prerenderEarlyExit":true,"serverMinification":true,"serverSourceMaps":false,"linkNoTouchStart":false,"caseSensitiveRoutes":false,"clientSegmentCache":true,"dynamicOnHover":false,"preloadEntriesOnStart":true,"clientRouterFilter":true,"clientRouterFilterRedirects":false,"fetchCacheKeyPrefix":"","proxyPrefetch":"flexible","optimisticClientCache":true,"manualClientBasePath":false,"cpus":31,"memoryBasedWorkersCount":false,"imgOptConcurrency":null,"imgOptTimeoutInSeconds":7,"imgOptMaxInputPixels":268402689,"imgOptSequentialRead":null,"imgOptSkipMetadata":null,"isrFlushToDisk":true,"workerThreads":false,"optimizeCss":false,"nextScriptWorkers":false,"scrollRestoration":false,"externalDir":false,"disableOptimizedLoading":false,"gzipSize":true,"craCompat":false,"esmExternals":true,"fullySpecified":false,"swcTraceProfiling":false,"forceSwcTransforms":false,"largePageDataBytes":128000,"typedEnv":false,"parallelServerCompiles":false,"parallelServerBuildTraces":false,"ppr":false,"authInterrupts":false,"webpackMemoryOptimizations":false,"optimizeServerReact":true,"viewTransition":false,"removeUncaughtErrorAndRejectionListeners":false,"validateRSCRequestHeaders":false,"staleTimes":{"dynamic":0,"static":300},"reactDebugChannel":false,"serverComponentsHmrCache":true,"staticGenerationMaxConcurrency":8,"staticGenerationMinPagesPerWorker":25,"inlineCss":false,"useCache":false,"globalNotFound":false,"browserDebugInfoInTerminal":false,"lockDistDir":true,"isolatedDevBuild":true,"proxyClientMaxBodySize":10485760,"hideLogsAfterAbort":false,"mcpServer":true,"optimizePackageImports":["lucide-react","date-fns","lodash-es","ramda","antd","react-bootstrap","ahooks","@ant-design/icons","@headlessui/react","@headlessui-float/react","@heroicons/react/20/solid","@heroicons/react/24/solid","@heroicons/react/24/outline","@visx/visx","@tremor/react","rxjs","@mui/material","@mui/icons-material","recharts","react-use","effect","@effect/schema","@effect/platform","@effect/platform-node","@effect/platform-browser","@effect/platform-bun","@effect/sql","@effect/sql-mssql","@effect/sql-mysql2","@effect/sql-pg","@effect/sql-sqlite-node","@effect/sql-sqlite-bun","@effect/sql-sqlite-wasm","@effect/sql-sqlite-react-native","@effect/rpc","@effect/rpc-http","@effect/typeclass","@effect/experimental","@effect/opentelemetry","@material-ui/core","@material-ui/icons","@tabler/icons-react","mui-core","react-icons/ai","react-icons/bi","react-icons/bs","react-icons/cg","react-icons/ci","react-icons/di","react-icons/fa","react-icons/fa6","react-icons/fc","react-icons/fi","react-icons/gi","react-icons/go","react-icons/gr","react-icons/hi","react-icons/hi2","react-icons/im","react-icons/io","react-icons/io5","react-icons/lia","react-icons/lib","react-icons/lu","react-icons/md","react-icons/pi","react-icons/ri","react-icons/rx","react-icons/si","react-icons/sl","react-icons/tb","react-icons/tfi","react-icons/ti","react-icons/vsc","react-icons/wi"],"trustHostHeader":false,"isExperimentalCompile":false},"htmlLimitedBots":"[\\w-]+-Google|Google-[\\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight","bundlePagesRouterDependencies":false,"configFileName":"next.config.ts","turbopack":{"root":"/home/marvin/projects/codervisor/lean-spec"},"distDirRoot":".next"}
19
+
20
+ process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(nextConfig)
21
+
22
+ require('next')
23
+ const { startServer } = require('next/dist/server/lib/start-server')
24
+
25
+ if (
26
+ Number.isNaN(keepAliveTimeout) ||
27
+ !Number.isFinite(keepAliveTimeout) ||
28
+ keepAliveTimeout < 0
29
+ ) {
30
+ keepAliveTimeout = undefined
31
+ }
32
+
33
+ startServer({
34
+ dir,
35
+ isDev: false,
36
+ config: nextConfig,
37
+ hostname,
38
+ port: currentPort,
39
+ allowRetry: false,
40
+ keepAliveTimeout,
41
+ }).catch((err) => {
42
+ console.error(err);
43
+ process.exit(1);
44
+ });