@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
@@ -1,3 +1,3 @@
1
- module.exports=[531428,a=>{"use strict";var b=a.i(40352),c=a.i(936883),d=a.i(681612),e=a.i(479220),f=a.i(793090),g=a.i(66497),h=a.i(108920),i=a.i(863535);let j=(0,i.default)("ellipsis-vertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]]),k=(0,i.default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]),l=(0,i.default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]),m=(0,i.default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);var n=a.i(470485),o=a.i(914174);let p=(0,i.default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);var q=a.i(800966),r=a.i(72245),s=a.i(227725),t=a.i(406334),u=a.i(980096),v=a.i(559653),w=a.i(517988),x=a.i(763375),y=a.i(317449),z=a.i(675655),A=a.i(466965),B=a.i(553484),C=a.i(983644),D=a.i(241857),E=a.i(84228),F=a.i(699700),G=a.i(272311),H=a.i(407547),I=a.i(544329),J=a.i(244293),K="rovingFocusGroup.onEntryFocus",L={bubbles:!1,cancelable:!0},M="RovingFocusGroup",[N,O,P]=(0,A.createCollection)(M),[Q,R]=(0,x.createContextScope)(M,[P]),[S,T]=Q(M),U=c.forwardRef((a,c)=>(0,b.jsx)(N.Provider,{scope:a.__scopeRovingFocusGroup,children:(0,b.jsx)(N.Slot,{scope:a.__scopeRovingFocusGroup,children:(0,b.jsx)(V,{...a,ref:c})})}));U.displayName=M;var V=c.forwardRef((a,d)=>{let{__scopeRovingFocusGroup:e,orientation:f,loop:g=!1,dir:h,currentTabStopId:i,defaultCurrentTabStopId:j,onCurrentTabStopIdChange:k,onEntryFocus:l,preventScrollOnEntryFocus:m=!1,...n}=a,o=c.useRef(null),p=(0,w.useComposedRefs)(d,o),q=(0,B.useDirection)(h),[r,s]=(0,y.useControllableState)({prop:i,defaultProp:j??null,onChange:k,caller:M}),[t,u]=c.useState(!1),x=(0,J.useCallbackRef)(l),A=O(e),C=c.useRef(!1),[D,E]=c.useState(0);return c.useEffect(()=>{let a=o.current;if(a)return a.addEventListener(K,x),()=>a.removeEventListener(K,x)},[x]),(0,b.jsx)(S,{scope:e,orientation:f,dir:q,loop:g,currentTabStopId:r,onItemFocus:c.useCallback(a=>s(a),[s]),onItemShiftTab:c.useCallback(()=>u(!0),[]),onFocusableItemAdd:c.useCallback(()=>E(a=>a+1),[]),onFocusableItemRemove:c.useCallback(()=>E(a=>a-1),[]),children:(0,b.jsx)(z.Primitive.div,{tabIndex:t||0===D?-1:0,"data-orientation":f,...n,ref:p,style:{outline:"none",...a.style},onMouseDown:(0,v.composeEventHandlers)(a.onMouseDown,()=>{C.current=!0}),onFocus:(0,v.composeEventHandlers)(a.onFocus,a=>{let b=!C.current;if(a.target===a.currentTarget&&b&&!t){let b=new CustomEvent(K,L);if(a.currentTarget.dispatchEvent(b),!b.defaultPrevented){let a=A().filter(a=>a.focusable);Z([a.find(a=>a.active),a.find(a=>a.id===r),...a].filter(Boolean).map(a=>a.ref.current),m)}}C.current=!1}),onBlur:(0,v.composeEventHandlers)(a.onBlur,()=>u(!1))})})}),W="RovingFocusGroupItem",X=c.forwardRef((a,d)=>{let{__scopeRovingFocusGroup:e,focusable:f=!0,active:g=!1,tabStopId:h,children:i,...j}=a,k=(0,F.useId)(),l=h||k,m=T(W,e),n=m.currentTabStopId===l,o=O(e),{onFocusableItemAdd:p,onFocusableItemRemove:q,currentTabStopId:r}=m;return c.useEffect(()=>{if(f)return p(),()=>q()},[f,p,q]),(0,b.jsx)(N.ItemSlot,{scope:e,id:l,focusable:f,active:g,children:(0,b.jsx)(z.Primitive.span,{tabIndex:n?0:-1,"data-orientation":m.orientation,...j,ref:d,onMouseDown:(0,v.composeEventHandlers)(a.onMouseDown,a=>{f?m.onItemFocus(l):a.preventDefault()}),onFocus:(0,v.composeEventHandlers)(a.onFocus,()=>m.onItemFocus(l)),onKeyDown:(0,v.composeEventHandlers)(a.onKeyDown,a=>{if("Tab"===a.key&&a.shiftKey)return void m.onItemShiftTab();if(a.target!==a.currentTarget)return;let b=function(a,b,c){var d;let e=(d=a.key,"rtl"!==c?d:"ArrowLeft"===d?"ArrowRight":"ArrowRight"===d?"ArrowLeft":d);if(!("vertical"===b&&["ArrowLeft","ArrowRight"].includes(e))&&!("horizontal"===b&&["ArrowUp","ArrowDown"].includes(e)))return Y[e]}(a,m.orientation,m.dir);if(void 0!==b){if(a.metaKey||a.ctrlKey||a.altKey||a.shiftKey)return;a.preventDefault();let e=o().filter(a=>a.focusable).map(a=>a.ref.current);if("last"===b)e.reverse();else if("prev"===b||"next"===b){var c,d;"prev"===b&&e.reverse();let f=e.indexOf(a.currentTarget);e=m.loop?(c=e,d=f+1,c.map((a,b)=>c[(d+b)%c.length])):e.slice(f+1)}setTimeout(()=>Z(e))}}),children:"function"==typeof i?i({isCurrentTabStop:n,hasTabStop:null!=r}):i})})});X.displayName=W;var Y={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Z(a,b=!1){let c=document.activeElement;for(let d of a)if(d===c||(d.focus({preventScroll:b}),document.activeElement!==c))return}var $=a.i(878357),_=a.i(516164),aa=a.i(151867),ab=["Enter"," "],ac=["ArrowUp","PageDown","End"],ad=["ArrowDown","PageUp","Home",...ac],ae={ltr:[...ab,"ArrowRight"],rtl:[...ab,"ArrowLeft"]},af={ltr:["ArrowLeft"],rtl:["ArrowRight"]},ag="Menu",[ah,ai,aj]=(0,A.createCollection)(ag),[ak,al]=(0,x.createContextScope)(ag,[aj,G.createPopperScope,R]),am=(0,G.createPopperScope)(),an=R(),[ao,ap]=ak(ag),[aq,ar]=ak(ag),as=a=>{let{__scopeMenu:d,open:e=!1,children:f,dir:g,onOpenChange:h,modal:i=!0}=a,j=am(d),[k,l]=c.useState(null),m=c.useRef(!1),n=(0,J.useCallbackRef)(h),o=(0,B.useDirection)(g);return c.useEffect(()=>{let a=()=>{m.current=!0,document.addEventListener("pointerdown",b,{capture:!0,once:!0}),document.addEventListener("pointermove",b,{capture:!0,once:!0})},b=()=>m.current=!1;return document.addEventListener("keydown",a,{capture:!0}),()=>{document.removeEventListener("keydown",a,{capture:!0}),document.removeEventListener("pointerdown",b,{capture:!0}),document.removeEventListener("pointermove",b,{capture:!0})}},[]),(0,b.jsx)(G.Root,{...j,children:(0,b.jsx)(ao,{scope:d,open:e,onOpenChange:n,content:k,onContentChange:l,children:(0,b.jsx)(aq,{scope:d,onClose:c.useCallback(()=>n(!1),[n]),isUsingKeyboardRef:m,dir:o,modal:i,children:f})})})};as.displayName=ag;var at=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a,f=am(d);return(0,b.jsx)(G.Anchor,{...f,...e,ref:c})});at.displayName="MenuAnchor";var au="MenuPortal",[av,aw]=ak(au,{forceMount:void 0}),ax=a=>{let{__scopeMenu:c,forceMount:d,children:e,container:f}=a,g=ap(au,c);return(0,b.jsx)(av,{scope:c,forceMount:d,children:(0,b.jsx)(I.Presence,{present:d||g.open,children:(0,b.jsx)(H.Portal,{asChild:!0,container:f,children:e})})})};ax.displayName=au;var ay="MenuContent",[az,aA]=ak(ay),aB=c.forwardRef((a,c)=>{let d=aw(ay,a.__scopeMenu),{forceMount:e=d.forceMount,...f}=a,g=ap(ay,a.__scopeMenu),h=ar(ay,a.__scopeMenu);return(0,b.jsx)(ah.Provider,{scope:a.__scopeMenu,children:(0,b.jsx)(I.Presence,{present:e||g.open,children:(0,b.jsx)(ah.Slot,{scope:a.__scopeMenu,children:h.modal?(0,b.jsx)(aC,{...f,ref:c}):(0,b.jsx)(aD,{...f,ref:c})})})})}),aC=c.forwardRef((a,d)=>{let e=ap(ay,a.__scopeMenu),f=c.useRef(null),g=(0,w.useComposedRefs)(d,f);return c.useEffect(()=>{let a=f.current;if(a)return(0,_.hideOthers)(a)},[]),(0,b.jsx)(aF,{...a,ref:g,trapFocus:e.open,disableOutsidePointerEvents:e.open,disableOutsideScroll:!0,onFocusOutside:(0,v.composeEventHandlers)(a.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>e.onOpenChange(!1)})}),aD=c.forwardRef((a,c)=>{let d=ap(ay,a.__scopeMenu);return(0,b.jsx)(aF,{...a,ref:c,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>d.onOpenChange(!1)})}),aE=(0,$.createSlot)("MenuContent.ScrollLock"),aF=c.forwardRef((a,d)=>{let{__scopeMenu:e,loop:f=!1,trapFocus:g,onOpenAutoFocus:h,onCloseAutoFocus:i,disableOutsidePointerEvents:j,onEntryFocus:k,onEscapeKeyDown:l,onPointerDownOutside:m,onFocusOutside:n,onInteractOutside:o,onDismiss:p,disableOutsideScroll:q,...r}=a,s=ap(ay,e),t=ar(ay,e),u=am(e),x=an(e),y=ai(e),[z,A]=c.useState(null),B=c.useRef(null),F=(0,w.useComposedRefs)(d,B,s.onContentChange),H=c.useRef(0),I=c.useRef(""),J=c.useRef(0),K=c.useRef(null),L=c.useRef("right"),M=c.useRef(0),N=q?aa.RemoveScroll:c.Fragment;c.useEffect(()=>()=>window.clearTimeout(H.current),[]),(0,D.useFocusGuards)();let O=c.useCallback(a=>{var b,c;return L.current===K.current?.side&&(b=a,!!(c=K.current?.area)&&function(a,b){let{x:c,y:d}=a,e=!1;for(let a=0,f=b.length-1;a<b.length;f=a++){let g=b[a],h=b[f],i=g.x,j=g.y,k=h.x,l=h.y;j>d!=l>d&&c<(k-i)*(d-j)/(l-j)+i&&(e=!e)}return e}({x:b.clientX,y:b.clientY},c))},[]);return(0,b.jsx)(az,{scope:e,searchRef:I,onItemEnter:c.useCallback(a=>{O(a)&&a.preventDefault()},[O]),onItemLeave:c.useCallback(a=>{O(a)||(B.current?.focus(),A(null))},[O]),onTriggerLeave:c.useCallback(a=>{O(a)&&a.preventDefault()},[O]),pointerGraceTimerRef:J,onPointerGraceIntentChange:c.useCallback(a=>{K.current=a},[]),children:(0,b.jsx)(N,{...q?{as:aE,allowPinchZoom:!0}:void 0,children:(0,b.jsx)(E.FocusScope,{asChild:!0,trapped:g,onMountAutoFocus:(0,v.composeEventHandlers)(h,a=>{a.preventDefault(),B.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:i,children:(0,b.jsx)(C.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:j,onEscapeKeyDown:l,onPointerDownOutside:m,onFocusOutside:n,onInteractOutside:o,onDismiss:p,children:(0,b.jsx)(U,{asChild:!0,...x,dir:t.dir,orientation:"vertical",loop:f,currentTabStopId:z,onCurrentTabStopIdChange:A,onEntryFocus:(0,v.composeEventHandlers)(k,a=>{t.isUsingKeyboardRef.current||a.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,b.jsx)(G.Content,{role:"menu","aria-orientation":"vertical","data-state":a3(s.open),"data-radix-menu-content":"",dir:t.dir,...u,...r,ref:F,style:{outline:"none",...r.style},onKeyDown:(0,v.composeEventHandlers)(r.onKeyDown,a=>{let b=a.target.closest("[data-radix-menu-content]")===a.currentTarget,c=a.ctrlKey||a.altKey||a.metaKey,d=1===a.key.length;if(b){var e;let b,f,g,h,i,j;"Tab"===a.key&&a.preventDefault(),!c&&d&&(e=a.key,b=I.current+e,f=y().filter(a=>!a.disabled),g=document.activeElement,h=f.find(a=>a.ref.current===g)?.textValue,i=function(a,b,c){var d;let e=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,f=c?a.indexOf(c):-1,g=(d=Math.max(f,0),a.map((b,c)=>a[(d+c)%a.length]));1===e.length&&(g=g.filter(a=>a!==c));let h=g.find(a=>a.toLowerCase().startsWith(e.toLowerCase()));return h!==c?h:void 0}(f.map(a=>a.textValue),b,h),j=f.find(a=>a.textValue===i)?.ref.current,function a(b){I.current=b,window.clearTimeout(H.current),""!==b&&(H.current=window.setTimeout(()=>a(""),1e3))}(b),j&&setTimeout(()=>j.focus()))}let f=B.current;if(a.target!==f||!ad.includes(a.key))return;a.preventDefault();let g=y().filter(a=>!a.disabled).map(a=>a.ref.current);ac.includes(a.key)&&g.reverse(),function(a){let b=document.activeElement;for(let c of a)if(c===b||(c.focus(),document.activeElement!==b))return}(g)}),onBlur:(0,v.composeEventHandlers)(a.onBlur,a=>{a.currentTarget.contains(a.target)||(window.clearTimeout(H.current),I.current="")}),onPointerMove:(0,v.composeEventHandlers)(a.onPointerMove,a6(a=>{let b=a.target,c=M.current!==a.clientX;a.currentTarget.contains(b)&&c&&(L.current=a.clientX>M.current?"right":"left",M.current=a.clientX)}))})})})})})})});aB.displayName=ay;var aG=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a;return(0,b.jsx)(z.Primitive.div,{role:"group",...e,ref:c})});aG.displayName="MenuGroup";var aH=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a;return(0,b.jsx)(z.Primitive.div,{...e,ref:c})});aH.displayName="MenuLabel";var aI="MenuItem",aJ="menu.itemSelect",aK=c.forwardRef((a,d)=>{let{disabled:e=!1,onSelect:f,...g}=a,h=c.useRef(null),i=ar(aI,a.__scopeMenu),j=aA(aI,a.__scopeMenu),k=(0,w.useComposedRefs)(d,h),l=c.useRef(!1);return(0,b.jsx)(aL,{...g,ref:k,disabled:e,onClick:(0,v.composeEventHandlers)(a.onClick,()=>{let a=h.current;if(!e&&a){let b=new CustomEvent(aJ,{bubbles:!0,cancelable:!0});a.addEventListener(aJ,a=>f?.(a),{once:!0}),(0,z.dispatchDiscreteCustomEvent)(a,b),b.defaultPrevented?l.current=!1:i.onClose()}}),onPointerDown:b=>{a.onPointerDown?.(b),l.current=!0},onPointerUp:(0,v.composeEventHandlers)(a.onPointerUp,a=>{l.current||a.currentTarget?.click()}),onKeyDown:(0,v.composeEventHandlers)(a.onKeyDown,a=>{let b=""!==j.searchRef.current;e||b&&" "===a.key||ab.includes(a.key)&&(a.currentTarget.click(),a.preventDefault())})})});aK.displayName=aI;var aL=c.forwardRef((a,d)=>{let{__scopeMenu:e,disabled:f=!1,textValue:g,...h}=a,i=aA(aI,e),j=an(e),k=c.useRef(null),l=(0,w.useComposedRefs)(d,k),[m,n]=c.useState(!1),[o,p]=c.useState("");return c.useEffect(()=>{let a=k.current;a&&p((a.textContent??"").trim())},[h.children]),(0,b.jsx)(ah.ItemSlot,{scope:e,disabled:f,textValue:g??o,children:(0,b.jsx)(X,{asChild:!0,...j,focusable:!f,children:(0,b.jsx)(z.Primitive.div,{role:"menuitem","data-highlighted":m?"":void 0,"aria-disabled":f||void 0,"data-disabled":f?"":void 0,...h,ref:l,onPointerMove:(0,v.composeEventHandlers)(a.onPointerMove,a6(a=>{f?i.onItemLeave(a):(i.onItemEnter(a),a.defaultPrevented||a.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:(0,v.composeEventHandlers)(a.onPointerLeave,a6(a=>i.onItemLeave(a))),onFocus:(0,v.composeEventHandlers)(a.onFocus,()=>n(!0)),onBlur:(0,v.composeEventHandlers)(a.onBlur,()=>n(!1))})})})}),aM=c.forwardRef((a,c)=>{let{checked:d=!1,onCheckedChange:e,...f}=a;return(0,b.jsx)(aU,{scope:a.__scopeMenu,checked:d,children:(0,b.jsx)(aK,{role:"menuitemcheckbox","aria-checked":a4(d)?"mixed":d,...f,ref:c,"data-state":a5(d),onSelect:(0,v.composeEventHandlers)(f.onSelect,()=>e?.(!!a4(d)||!d),{checkForDefaultPrevented:!1})})})});aM.displayName="MenuCheckboxItem";var aN="MenuRadioGroup",[aO,aP]=ak(aN,{value:void 0,onValueChange:()=>{}}),aQ=c.forwardRef((a,c)=>{let{value:d,onValueChange:e,...f}=a,g=(0,J.useCallbackRef)(e);return(0,b.jsx)(aO,{scope:a.__scopeMenu,value:d,onValueChange:g,children:(0,b.jsx)(aG,{...f,ref:c})})});aQ.displayName=aN;var aR="MenuRadioItem",aS=c.forwardRef((a,c)=>{let{value:d,...e}=a,f=aP(aR,a.__scopeMenu),g=d===f.value;return(0,b.jsx)(aU,{scope:a.__scopeMenu,checked:g,children:(0,b.jsx)(aK,{role:"menuitemradio","aria-checked":g,...e,ref:c,"data-state":a5(g),onSelect:(0,v.composeEventHandlers)(e.onSelect,()=>f.onValueChange?.(d),{checkForDefaultPrevented:!1})})})});aS.displayName=aR;var aT="MenuItemIndicator",[aU,aV]=ak(aT,{checked:!1}),aW=c.forwardRef((a,c)=>{let{__scopeMenu:d,forceMount:e,...f}=a,g=aV(aT,d);return(0,b.jsx)(I.Presence,{present:e||a4(g.checked)||!0===g.checked,children:(0,b.jsx)(z.Primitive.span,{...f,ref:c,"data-state":a5(g.checked)})})});aW.displayName=aT;var aX=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a;return(0,b.jsx)(z.Primitive.div,{role:"separator","aria-orientation":"horizontal",...e,ref:c})});aX.displayName="MenuSeparator";var aY=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a,f=am(d);return(0,b.jsx)(G.Arrow,{...f,...e,ref:c})});aY.displayName="MenuArrow";var[aZ,a$]=ak("MenuSub"),a_="MenuSubTrigger",a0=c.forwardRef((a,d)=>{let e=ap(a_,a.__scopeMenu),f=ar(a_,a.__scopeMenu),g=a$(a_,a.__scopeMenu),h=aA(a_,a.__scopeMenu),i=c.useRef(null),{pointerGraceTimerRef:j,onPointerGraceIntentChange:k}=h,l={__scopeMenu:a.__scopeMenu},m=c.useCallback(()=>{i.current&&window.clearTimeout(i.current),i.current=null},[]);return c.useEffect(()=>m,[m]),c.useEffect(()=>{let a=j.current;return()=>{window.clearTimeout(a),k(null)}},[j,k]),(0,b.jsx)(at,{asChild:!0,...l,children:(0,b.jsx)(aL,{id:g.triggerId,"aria-haspopup":"menu","aria-expanded":e.open,"aria-controls":g.contentId,"data-state":a3(e.open),...a,ref:(0,w.composeRefs)(d,g.onTriggerChange),onClick:b=>{a.onClick?.(b),a.disabled||b.defaultPrevented||(b.currentTarget.focus(),e.open||e.onOpenChange(!0))},onPointerMove:(0,v.composeEventHandlers)(a.onPointerMove,a6(b=>{h.onItemEnter(b),!b.defaultPrevented&&(a.disabled||e.open||i.current||(h.onPointerGraceIntentChange(null),i.current=window.setTimeout(()=>{e.onOpenChange(!0),m()},100)))})),onPointerLeave:(0,v.composeEventHandlers)(a.onPointerLeave,a6(a=>{m();let b=e.content?.getBoundingClientRect();if(b){let c=e.content?.dataset.side,d="right"===c,f=b[d?"left":"right"],g=b[d?"right":"left"];h.onPointerGraceIntentChange({area:[{x:a.clientX+(d?-5:5),y:a.clientY},{x:f,y:b.top},{x:g,y:b.top},{x:g,y:b.bottom},{x:f,y:b.bottom}],side:c}),window.clearTimeout(j.current),j.current=window.setTimeout(()=>h.onPointerGraceIntentChange(null),300)}else{if(h.onTriggerLeave(a),a.defaultPrevented)return;h.onPointerGraceIntentChange(null)}})),onKeyDown:(0,v.composeEventHandlers)(a.onKeyDown,b=>{let c=""!==h.searchRef.current;a.disabled||c&&" "===b.key||ae[f.dir].includes(b.key)&&(e.onOpenChange(!0),e.content?.focus(),b.preventDefault())})})})});a0.displayName=a_;var a1="MenuSubContent",a2=c.forwardRef((a,d)=>{let e=aw(ay,a.__scopeMenu),{forceMount:f=e.forceMount,...g}=a,h=ap(ay,a.__scopeMenu),i=ar(ay,a.__scopeMenu),j=a$(a1,a.__scopeMenu),k=c.useRef(null),l=(0,w.useComposedRefs)(d,k);return(0,b.jsx)(ah.Provider,{scope:a.__scopeMenu,children:(0,b.jsx)(I.Presence,{present:f||h.open,children:(0,b.jsx)(ah.Slot,{scope:a.__scopeMenu,children:(0,b.jsx)(aF,{id:j.contentId,"aria-labelledby":j.triggerId,...g,ref:l,align:"start",side:"rtl"===i.dir?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:a=>{i.isUsingKeyboardRef.current&&k.current?.focus(),a.preventDefault()},onCloseAutoFocus:a=>a.preventDefault(),onFocusOutside:(0,v.composeEventHandlers)(a.onFocusOutside,a=>{a.target!==j.trigger&&h.onOpenChange(!1)}),onEscapeKeyDown:(0,v.composeEventHandlers)(a.onEscapeKeyDown,a=>{i.onClose(),a.preventDefault()}),onKeyDown:(0,v.composeEventHandlers)(a.onKeyDown,a=>{let b=a.currentTarget.contains(a.target),c=af[i.dir].includes(a.key);b&&c&&(h.onOpenChange(!1),j.trigger?.focus(),a.preventDefault())})})})})})});function a3(a){return a?"open":"closed"}function a4(a){return"indeterminate"===a}function a5(a){return a4(a)?"indeterminate":a?"checked":"unchecked"}function a6(a){return b=>"mouse"===b.pointerType?a(b):void 0}a2.displayName=a1;var a7="DropdownMenu",[a8,a9]=(0,x.createContextScope)(a7,[al]),ba=al(),[bb,bc]=a8(a7),bd=a=>{let{__scopeDropdownMenu:d,children:e,dir:f,open:g,defaultOpen:h,onOpenChange:i,modal:j=!0}=a,k=ba(d),l=c.useRef(null),[m,n]=(0,y.useControllableState)({prop:g,defaultProp:h??!1,onChange:i,caller:a7});return(0,b.jsx)(bb,{scope:d,triggerId:(0,F.useId)(),triggerRef:l,contentId:(0,F.useId)(),open:m,onOpenChange:n,onOpenToggle:c.useCallback(()=>n(a=>!a),[n]),modal:j,children:(0,b.jsx)(as,{...k,open:m,onOpenChange:n,dir:f,modal:j,children:e})})};bd.displayName=a7;var be="DropdownMenuTrigger",bf=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,disabled:e=!1,...f}=a,g=bc(be,d),h=ba(d);return(0,b.jsx)(at,{asChild:!0,...h,children:(0,b.jsx)(z.Primitive.button,{type:"button",id:g.triggerId,"aria-haspopup":"menu","aria-expanded":g.open,"aria-controls":g.open?g.contentId:void 0,"data-state":g.open?"open":"closed","data-disabled":e?"":void 0,disabled:e,...f,ref:(0,w.composeRefs)(c,g.triggerRef),onPointerDown:(0,v.composeEventHandlers)(a.onPointerDown,a=>{!e&&0===a.button&&!1===a.ctrlKey&&(g.onOpenToggle(),g.open||a.preventDefault())}),onKeyDown:(0,v.composeEventHandlers)(a.onKeyDown,a=>{!e&&(["Enter"," "].includes(a.key)&&g.onOpenToggle(),"ArrowDown"===a.key&&g.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(a.key)&&a.preventDefault())})})})});bf.displayName=be;var bg=a=>{let{__scopeDropdownMenu:c,...d}=a,e=ba(c);return(0,b.jsx)(ax,{...e,...d})};bg.displayName="DropdownMenuPortal";var bh="DropdownMenuContent",bi=c.forwardRef((a,d)=>{let{__scopeDropdownMenu:e,...f}=a,g=bc(bh,e),h=ba(e),i=c.useRef(!1);return(0,b.jsx)(aB,{id:g.contentId,"aria-labelledby":g.triggerId,...h,...f,ref:d,onCloseAutoFocus:(0,v.composeEventHandlers)(a.onCloseAutoFocus,a=>{i.current||g.triggerRef.current?.focus(),i.current=!1,a.preventDefault()}),onInteractOutside:(0,v.composeEventHandlers)(a.onInteractOutside,a=>{let b=a.detail.originalEvent,c=0===b.button&&!0===b.ctrlKey,d=2===b.button||c;(!g.modal||d)&&(i.current=!0)}),style:{...a.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});bi.displayName=bh,c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aG,{...f,...e,ref:c})}).displayName="DropdownMenuGroup";var bj=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aH,{...f,...e,ref:c})});bj.displayName="DropdownMenuLabel";var bk=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aK,{...f,...e,ref:c})});bk.displayName="DropdownMenuItem";var bl=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aM,{...f,...e,ref:c})});bl.displayName="DropdownMenuCheckboxItem",c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aQ,{...f,...e,ref:c})}).displayName="DropdownMenuRadioGroup";var bm=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aS,{...f,...e,ref:c})});bm.displayName="DropdownMenuRadioItem";var bn=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aW,{...f,...e,ref:c})});bn.displayName="DropdownMenuItemIndicator";var bo=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aX,{...f,...e,ref:c})});bo.displayName="DropdownMenuSeparator",c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(aY,{...f,...e,ref:c})}).displayName="DropdownMenuArrow";var bp=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(a0,{...f,...e,ref:c})});bp.displayName="DropdownMenuSubTrigger";var bq=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=ba(d);return(0,b.jsx)(a2,{...f,...e,ref:c,style:{...a.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});bq.displayName="DropdownMenuSubContent";var br=a.i(141270),bs=a.i(532418),bt=a.i(687052);c.forwardRef(({className:a,inset:c,children:d,...e},f)=>(0,b.jsxs)(bp,{ref:f,className:(0,bt.cn)("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",c&&"pl-8",a),...e,children:[d,(0,b.jsx)(br.ChevronRight,{className:"ml-auto h-4 w-4"})]})).displayName=bp.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(bq,{ref:d,className:(0,bt.cn)("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",a),...c})).displayName=bq.displayName;let bu=c.forwardRef(({className:a,sideOffset:c=4,...d},e)=>(0,b.jsx)(bg,{children:(0,b.jsx)(bi,{ref:e,sideOffset:c,className:(0,bt.cn)("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",a),...d})}));bu.displayName=bi.displayName;let bv=c.forwardRef(({className:a,inset:c,...d},e)=>(0,b.jsx)(bk,{ref:e,className:(0,bt.cn)("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",c&&"pl-8",a),...d}));bv.displayName=bk.displayName,c.forwardRef(({className:a,children:c,checked:d,...e},f)=>(0,b.jsxs)(bl,{ref:f,className:(0,bt.cn)("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),checked:d,...e,children:[(0,b.jsx)("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(bn,{children:(0,b.jsx)(n.Check,{className:"h-4 w-4"})})}),c]})).displayName=bl.displayName,c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(bm,{ref:e,className:(0,bt.cn)("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...d,children:[(0,b.jsx)("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(bn,{children:(0,b.jsx)(bs.Circle,{className:"h-2 w-2 fill-current"})})}),c]})).displayName=bm.displayName,c.forwardRef(({className:a,inset:c,...d},e)=>(0,b.jsx)(bj,{ref:e,className:(0,bt.cn)("px-2 py-1.5 text-sm font-semibold",c&&"pl-8",a),...d})).displayName=bj.displayName;let bw=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(bo,{ref:d,className:(0,bt.cn)("-mx-1 my-1 h-px bg-muted",a),...c}));bw.displayName=bo.displayName;var bx=a.i(365791),by=a.i(285232);let bz=["#ef4444","#f97316","#eab308","#22c55e","#14b8a6","#3b82f6","#6366f1","#8b5cf6","#d946ef","#ec4899","#6b7280","#78716c"];function bA({value:a,onChange:d,disabled:e}){let[f,g]=(0,c.useState)(!1);return(0,b.jsxs)(by.Popover,{open:f,onOpenChange:g,children:[(0,b.jsx)(by.PopoverTrigger,{asChild:!0,children:(0,b.jsx)(s.Button,{variant:"outline",size:"sm",className:"h-8 w-8 p-0",disabled:e,"aria-label":"Pick color",children:(0,b.jsx)("div",{className:"h-4 w-4 rounded-full border",style:{backgroundColor:a||"#666"}})})}),(0,b.jsx)(by.PopoverContent,{className:"w-[200px] p-3",align:"start",children:(0,b.jsx)("div",{className:"grid grid-cols-6 gap-2",children:bz.map(c=>(0,b.jsx)("button",{className:(0,bt.cn)("h-6 w-6 rounded-full border-2 transition-transform hover:scale-110",a===c?"border-primary":"border-transparent"),style:{backgroundColor:c},onClick:()=>{d(c),g(!1)},"aria-label":`Select color ${c}`},c))})})]})}var bB=a.i(156916),bC=a.i(435133),bD=a.i(779121);function bE(){let a=(0,d.useRouter)(),{projects:i,switchProject:v,toggleFavorite:w,removeProject:x,updateProject:y}=(0,r.useProject)(),[z,A]=(0,c.useState)(""),[B,C]=(0,c.useState)(!1),[D,E]=(0,c.useState)(null),[F,G]=(0,c.useState)(""),[H,I]=(0,c.useState)({}),J=i.filter(a=>a.name.toLowerCase().includes(z.toLowerCase())),K=async b=>{await v(b),a.push(`/projects/${b}/specs`)},L=()=>{E(null),G("")},M=async a=>{if(!F.trim())return void bB.toast.error("Project name cannot be empty");try{await y(a,{name:F.trim()}),bB.toast.success("Project name updated"),E(null),G("")}catch{bB.toast.error("Failed to update project name")}},N=async(a,b)=>{try{await y(a,{color:b}),bB.toast.success("Project color updated")}catch{bB.toast.error("Failed to update project color")}},O=(0,c.useCallback)(async a=>{I(b=>({...b,[a]:{status:"validating"}}));try{let b=await fetch(`/api/projects/${a}/validate`,{method:"POST"});if(!b.ok)throw Error("Validation request failed");let c=await b.json();I(b=>({...b,[a]:{status:c.validation.isValid?"valid":"invalid",error:c.validation.error}})),c.validation.isValid?bB.toast.success("Project path is valid"):bB.toast.error(`Project path invalid: ${c.validation.error||"Unknown error"}`)}catch{I(b=>({...b,[a]:{status:"invalid",error:"Failed to validate"}})),bB.toast.error("Failed to validate project")}},[]);return(0,b.jsxs)("div",{className:"container max-w-5xl py-8 space-y-8",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-3xl font-bold tracking-tight",children:"Projects"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-2",children:"Manage your LeanSpec projects and workspaces."})]}),(0,b.jsxs)(s.Button,{onClick:()=>C(!0),children:[(0,b.jsx)(e.Plus,{className:"mr-2 h-4 w-4"}),"Add Project"]})]}),(0,b.jsx)("div",{className:"flex items-center space-x-2",children:(0,b.jsxs)("div",{className:"relative flex-1 max-w-sm",children:[(0,b.jsx)(f.Search,{className:"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground"}),(0,b.jsx)(t.Input,{placeholder:"Search projects...",value:z,onChange:a=>A(a.target.value),className:"pl-8"})]})}),(0,b.jsxs)("div",{className:"grid gap-6 md:grid-cols-2 lg:grid-cols-3",children:[J.map(a=>{let c;return(0,b.jsxs)(u.Card,{className:"group relative hover:border-primary/50 transition-colors",children:[(0,b.jsx)(u.CardHeader,{className:"pb-4",children:(0,b.jsxs)("div",{className:"flex items-start justify-between",children:[(0,b.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,b.jsx)(bA,{value:a.color,onChange:b=>N(a.id,b)}),(0,b.jsxs)("div",{className:"space-y-1 flex-1 min-w-0",children:[D===a.id?(0,b.jsxs)("div",{className:"flex items-center gap-1",children:[(0,b.jsx)(t.Input,{value:F,onChange:a=>G(a.target.value),className:"h-7 text-sm",autoFocus:!0,onKeyDown:b=>{"Enter"===b.key&&M(a.id),"Escape"===b.key&&L()}}),(0,b.jsx)(s.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>M(a.id),children:(0,b.jsx)(n.Check,{className:"h-3 w-3"})}),(0,b.jsx)(s.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:L,children:(0,b.jsx)(o.X,{className:"h-3 w-3"})})]}):(0,b.jsxs)(u.CardTitle,{className:"text-base leading-none flex items-center gap-2",children:[(0,b.jsx)("button",{onClick:()=>K(a.id),className:"hover:underline focus:outline-none truncate",children:a.name}),(c=H[a.id])&&"unknown"!==c.status?"validating"===c.status?(0,b.jsx)(m,{className:"h-4 w-4 animate-spin text-muted-foreground"}):"valid"===c.status?(0,b.jsx)(q.CheckCircle2,{className:"h-4 w-4 text-green-500"}):"invalid"===c.status?(0,b.jsx)("span",{title:c.error||"Invalid project",children:(0,b.jsx)(p,{className:"h-4 w-4 text-destructive"})}):null:null]}),(0,b.jsx)(u.CardDescription,{className:"text-xs truncate max-w-[180px]",title:a.path,children:a.path})]})]}),(0,b.jsxs)(bd,{children:[(0,b.jsx)(bf,{asChild:!0,children:(0,b.jsxs)(s.Button,{variant:"ghost",size:"icon",className:"h-8 w-8",children:[(0,b.jsx)(j,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"sr-only",children:"Open menu"})]})}),(0,b.jsxs)(bu,{align:"end",children:[(0,b.jsxs)(bv,{onClick:()=>{var b,c;return b=a.id,c=a.name,void(E(b),G(c))},children:[(0,b.jsx)(l,{className:"mr-2 h-4 w-4"}),"Rename"]}),(0,b.jsxs)(bv,{onClick:()=>w(a.id),children:[(0,b.jsx)(h.Star,{className:"mr-2 h-4 w-4"}),a.favorite?"Unfavorite":"Favorite"]}),(0,b.jsxs)(bv,{onClick:()=>O(a.id),children:[(0,b.jsx)(m,{className:"mr-2 h-4 w-4"}),"Validate Path"]}),(0,b.jsx)(bw,{}),(0,b.jsxs)(bv,{className:"text-destructive",onClick:()=>x(a.id),children:[(0,b.jsx)(k,{className:"mr-2 h-4 w-4"}),"Remove"]})]})]})]})}),(0,b.jsx)(u.CardContent,{className:"pb-4",children:(0,b.jsxs)("div",{className:"flex items-center justify-between text-sm text-muted-foreground",children:[(0,b.jsxs)("div",{className:"flex items-center",children:[(0,b.jsx)(g.FolderOpen,{className:"mr-1 h-3 w-3"}),(0,b.jsx)("span",{className:"text-xs",children:"Local"})]}),a.lastAccessed&&(0,b.jsxs)("span",{className:"text-xs",children:["Opened ",(0,bC.default)(a.lastAccessed).fromNow()]})]})}),a.favorite&&(0,b.jsx)("div",{className:"absolute top-2 right-10 text-yellow-500",children:(0,b.jsx)(h.Star,{className:"h-4 w-4 fill-current"})})]},a.id)}),0===J.length&&(0,b.jsxs)("div",{className:"col-span-full flex flex-col items-center justify-center py-12 text-center border rounded-lg border-dashed",children:[(0,b.jsx)(g.FolderOpen,{className:"h-10 w-10 text-muted-foreground mb-4"}),(0,b.jsx)("h3",{className:"text-lg font-medium",children:"No projects found"}),(0,b.jsx)("p",{className:"text-sm text-muted-foreground mt-1 mb-4",children:z?"Try adjusting your search query.":"Get started by adding your first project."}),(0,b.jsxs)(s.Button,{onClick:()=>C(!0),children:[(0,b.jsx)(e.Plus,{className:"mr-2 h-4 w-4"}),"Add Project"]})]})]}),(0,b.jsx)(bx.CreateProjectDialog,{open:B,onOpenChange:C})]})}bC.default.extend(bD.default),a.s(["default",()=>bE],531428)}];
1
+ module.exports=[531428,a=>{"use strict";var b=a.i(40352),c=a.i(936883),d=a.i(681612),e=a.i(479220),f=a.i(793090),g=a.i(66497),h=a.i(108920),i=a.i(863535);let j=(0,i.default)("ellipsis-vertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]]),k=(0,i.default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]),l=(0,i.default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]),m=(0,i.default)("refresh-cw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);var n=a.i(470485),o=a.i(914174);let p=(0,i.default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);var q=a.i(800966),r=a.i(517601),s=a.i(920378),t=a.i(72245),u=a.i(227725),v=a.i(406334),w=a.i(980096),x=a.i(559653),y=a.i(517988),z=a.i(763375),A=a.i(317449),B=a.i(675655),C=a.i(466965),D=a.i(553484),E=a.i(983644),F=a.i(241857),G=a.i(84228),H=a.i(699700),I=a.i(272311),J=a.i(407547),K=a.i(544329),L=a.i(244293),M="rovingFocusGroup.onEntryFocus",N={bubbles:!1,cancelable:!0},O="RovingFocusGroup",[P,Q,R]=(0,C.createCollection)(O),[S,T]=(0,z.createContextScope)(O,[R]),[U,V]=S(O),W=c.forwardRef((a,c)=>(0,b.jsx)(P.Provider,{scope:a.__scopeRovingFocusGroup,children:(0,b.jsx)(P.Slot,{scope:a.__scopeRovingFocusGroup,children:(0,b.jsx)(X,{...a,ref:c})})}));W.displayName=O;var X=c.forwardRef((a,d)=>{let{__scopeRovingFocusGroup:e,orientation:f,loop:g=!1,dir:h,currentTabStopId:i,defaultCurrentTabStopId:j,onCurrentTabStopIdChange:k,onEntryFocus:l,preventScrollOnEntryFocus:m=!1,...n}=a,o=c.useRef(null),p=(0,y.useComposedRefs)(d,o),q=(0,D.useDirection)(h),[r,s]=(0,A.useControllableState)({prop:i,defaultProp:j??null,onChange:k,caller:O}),[t,u]=c.useState(!1),v=(0,L.useCallbackRef)(l),w=Q(e),z=c.useRef(!1),[C,E]=c.useState(0);return c.useEffect(()=>{let a=o.current;if(a)return a.addEventListener(M,v),()=>a.removeEventListener(M,v)},[v]),(0,b.jsx)(U,{scope:e,orientation:f,dir:q,loop:g,currentTabStopId:r,onItemFocus:c.useCallback(a=>s(a),[s]),onItemShiftTab:c.useCallback(()=>u(!0),[]),onFocusableItemAdd:c.useCallback(()=>E(a=>a+1),[]),onFocusableItemRemove:c.useCallback(()=>E(a=>a-1),[]),children:(0,b.jsx)(B.Primitive.div,{tabIndex:t||0===C?-1:0,"data-orientation":f,...n,ref:p,style:{outline:"none",...a.style},onMouseDown:(0,x.composeEventHandlers)(a.onMouseDown,()=>{z.current=!0}),onFocus:(0,x.composeEventHandlers)(a.onFocus,a=>{let b=!z.current;if(a.target===a.currentTarget&&b&&!t){let b=new CustomEvent(M,N);if(a.currentTarget.dispatchEvent(b),!b.defaultPrevented){let a=w().filter(a=>a.focusable);_([a.find(a=>a.active),a.find(a=>a.id===r),...a].filter(Boolean).map(a=>a.ref.current),m)}}z.current=!1}),onBlur:(0,x.composeEventHandlers)(a.onBlur,()=>u(!1))})})}),Y="RovingFocusGroupItem",Z=c.forwardRef((a,d)=>{let{__scopeRovingFocusGroup:e,focusable:f=!0,active:g=!1,tabStopId:h,children:i,...j}=a,k=(0,H.useId)(),l=h||k,m=V(Y,e),n=m.currentTabStopId===l,o=Q(e),{onFocusableItemAdd:p,onFocusableItemRemove:q,currentTabStopId:r}=m;return c.useEffect(()=>{if(f)return p(),()=>q()},[f,p,q]),(0,b.jsx)(P.ItemSlot,{scope:e,id:l,focusable:f,active:g,children:(0,b.jsx)(B.Primitive.span,{tabIndex:n?0:-1,"data-orientation":m.orientation,...j,ref:d,onMouseDown:(0,x.composeEventHandlers)(a.onMouseDown,a=>{f?m.onItemFocus(l):a.preventDefault()}),onFocus:(0,x.composeEventHandlers)(a.onFocus,()=>m.onItemFocus(l)),onKeyDown:(0,x.composeEventHandlers)(a.onKeyDown,a=>{if("Tab"===a.key&&a.shiftKey)return void m.onItemShiftTab();if(a.target!==a.currentTarget)return;let b=function(a,b,c){var d;let e=(d=a.key,"rtl"!==c?d:"ArrowLeft"===d?"ArrowRight":"ArrowRight"===d?"ArrowLeft":d);if(!("vertical"===b&&["ArrowLeft","ArrowRight"].includes(e))&&!("horizontal"===b&&["ArrowUp","ArrowDown"].includes(e)))return $[e]}(a,m.orientation,m.dir);if(void 0!==b){if(a.metaKey||a.ctrlKey||a.altKey||a.shiftKey)return;a.preventDefault();let e=o().filter(a=>a.focusable).map(a=>a.ref.current);if("last"===b)e.reverse();else if("prev"===b||"next"===b){var c,d;"prev"===b&&e.reverse();let f=e.indexOf(a.currentTarget);e=m.loop?(c=e,d=f+1,c.map((a,b)=>c[(d+b)%c.length])):e.slice(f+1)}setTimeout(()=>_(e))}}),children:"function"==typeof i?i({isCurrentTabStop:n,hasTabStop:null!=r}):i})})});Z.displayName=Y;var $={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function _(a,b=!1){let c=document.activeElement;for(let d of a)if(d===c||(d.focus({preventScroll:b}),document.activeElement!==c))return}var aa=a.i(878357),ab=a.i(516164),ac=a.i(151867),ad=["Enter"," "],ae=["ArrowUp","PageDown","End"],af=["ArrowDown","PageUp","Home",...ae],ag={ltr:[...ad,"ArrowRight"],rtl:[...ad,"ArrowLeft"]},ah={ltr:["ArrowLeft"],rtl:["ArrowRight"]},ai="Menu",[aj,ak,al]=(0,C.createCollection)(ai),[am,an]=(0,z.createContextScope)(ai,[al,I.createPopperScope,T]),ao=(0,I.createPopperScope)(),ap=T(),[aq,ar]=am(ai),[as,at]=am(ai),au=a=>{let{__scopeMenu:d,open:e=!1,children:f,dir:g,onOpenChange:h,modal:i=!0}=a,j=ao(d),[k,l]=c.useState(null),m=c.useRef(!1),n=(0,L.useCallbackRef)(h),o=(0,D.useDirection)(g);return c.useEffect(()=>{let a=()=>{m.current=!0,document.addEventListener("pointerdown",b,{capture:!0,once:!0}),document.addEventListener("pointermove",b,{capture:!0,once:!0})},b=()=>m.current=!1;return document.addEventListener("keydown",a,{capture:!0}),()=>{document.removeEventListener("keydown",a,{capture:!0}),document.removeEventListener("pointerdown",b,{capture:!0}),document.removeEventListener("pointermove",b,{capture:!0})}},[]),(0,b.jsx)(I.Root,{...j,children:(0,b.jsx)(aq,{scope:d,open:e,onOpenChange:n,content:k,onContentChange:l,children:(0,b.jsx)(as,{scope:d,onClose:c.useCallback(()=>n(!1),[n]),isUsingKeyboardRef:m,dir:o,modal:i,children:f})})})};au.displayName=ai;var av=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a,f=ao(d);return(0,b.jsx)(I.Anchor,{...f,...e,ref:c})});av.displayName="MenuAnchor";var aw="MenuPortal",[ax,ay]=am(aw,{forceMount:void 0}),az=a=>{let{__scopeMenu:c,forceMount:d,children:e,container:f}=a,g=ar(aw,c);return(0,b.jsx)(ax,{scope:c,forceMount:d,children:(0,b.jsx)(K.Presence,{present:d||g.open,children:(0,b.jsx)(J.Portal,{asChild:!0,container:f,children:e})})})};az.displayName=aw;var aA="MenuContent",[aB,aC]=am(aA),aD=c.forwardRef((a,c)=>{let d=ay(aA,a.__scopeMenu),{forceMount:e=d.forceMount,...f}=a,g=ar(aA,a.__scopeMenu),h=at(aA,a.__scopeMenu);return(0,b.jsx)(aj.Provider,{scope:a.__scopeMenu,children:(0,b.jsx)(K.Presence,{present:e||g.open,children:(0,b.jsx)(aj.Slot,{scope:a.__scopeMenu,children:h.modal?(0,b.jsx)(aE,{...f,ref:c}):(0,b.jsx)(aF,{...f,ref:c})})})})}),aE=c.forwardRef((a,d)=>{let e=ar(aA,a.__scopeMenu),f=c.useRef(null),g=(0,y.useComposedRefs)(d,f);return c.useEffect(()=>{let a=f.current;if(a)return(0,ab.hideOthers)(a)},[]),(0,b.jsx)(aH,{...a,ref:g,trapFocus:e.open,disableOutsidePointerEvents:e.open,disableOutsideScroll:!0,onFocusOutside:(0,x.composeEventHandlers)(a.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>e.onOpenChange(!1)})}),aF=c.forwardRef((a,c)=>{let d=ar(aA,a.__scopeMenu);return(0,b.jsx)(aH,{...a,ref:c,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>d.onOpenChange(!1)})}),aG=(0,aa.createSlot)("MenuContent.ScrollLock"),aH=c.forwardRef((a,d)=>{let{__scopeMenu:e,loop:f=!1,trapFocus:g,onOpenAutoFocus:h,onCloseAutoFocus:i,disableOutsidePointerEvents:j,onEntryFocus:k,onEscapeKeyDown:l,onPointerDownOutside:m,onFocusOutside:n,onInteractOutside:o,onDismiss:p,disableOutsideScroll:q,...r}=a,s=ar(aA,e),t=at(aA,e),u=ao(e),v=ap(e),w=ak(e),[z,A]=c.useState(null),B=c.useRef(null),C=(0,y.useComposedRefs)(d,B,s.onContentChange),D=c.useRef(0),H=c.useRef(""),J=c.useRef(0),K=c.useRef(null),L=c.useRef("right"),M=c.useRef(0),N=q?ac.RemoveScroll:c.Fragment;c.useEffect(()=>()=>window.clearTimeout(D.current),[]),(0,F.useFocusGuards)();let O=c.useCallback(a=>{var b,c;return L.current===K.current?.side&&(b=a,!!(c=K.current?.area)&&function(a,b){let{x:c,y:d}=a,e=!1;for(let a=0,f=b.length-1;a<b.length;f=a++){let g=b[a],h=b[f],i=g.x,j=g.y,k=h.x,l=h.y;j>d!=l>d&&c<(k-i)*(d-j)/(l-j)+i&&(e=!e)}return e}({x:b.clientX,y:b.clientY},c))},[]);return(0,b.jsx)(aB,{scope:e,searchRef:H,onItemEnter:c.useCallback(a=>{O(a)&&a.preventDefault()},[O]),onItemLeave:c.useCallback(a=>{O(a)||(B.current?.focus(),A(null))},[O]),onTriggerLeave:c.useCallback(a=>{O(a)&&a.preventDefault()},[O]),pointerGraceTimerRef:J,onPointerGraceIntentChange:c.useCallback(a=>{K.current=a},[]),children:(0,b.jsx)(N,{...q?{as:aG,allowPinchZoom:!0}:void 0,children:(0,b.jsx)(G.FocusScope,{asChild:!0,trapped:g,onMountAutoFocus:(0,x.composeEventHandlers)(h,a=>{a.preventDefault(),B.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:i,children:(0,b.jsx)(E.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:j,onEscapeKeyDown:l,onPointerDownOutside:m,onFocusOutside:n,onInteractOutside:o,onDismiss:p,children:(0,b.jsx)(W,{asChild:!0,...v,dir:t.dir,orientation:"vertical",loop:f,currentTabStopId:z,onCurrentTabStopIdChange:A,onEntryFocus:(0,x.composeEventHandlers)(k,a=>{t.isUsingKeyboardRef.current||a.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,b.jsx)(I.Content,{role:"menu","aria-orientation":"vertical","data-state":a5(s.open),"data-radix-menu-content":"",dir:t.dir,...u,...r,ref:C,style:{outline:"none",...r.style},onKeyDown:(0,x.composeEventHandlers)(r.onKeyDown,a=>{let b=a.target.closest("[data-radix-menu-content]")===a.currentTarget,c=a.ctrlKey||a.altKey||a.metaKey,d=1===a.key.length;if(b){var e;let b,f,g,h,i,j;"Tab"===a.key&&a.preventDefault(),!c&&d&&(e=a.key,b=H.current+e,f=w().filter(a=>!a.disabled),g=document.activeElement,h=f.find(a=>a.ref.current===g)?.textValue,i=function(a,b,c){var d;let e=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,f=c?a.indexOf(c):-1,g=(d=Math.max(f,0),a.map((b,c)=>a[(d+c)%a.length]));1===e.length&&(g=g.filter(a=>a!==c));let h=g.find(a=>a.toLowerCase().startsWith(e.toLowerCase()));return h!==c?h:void 0}(f.map(a=>a.textValue),b,h),j=f.find(a=>a.textValue===i)?.ref.current,function a(b){H.current=b,window.clearTimeout(D.current),""!==b&&(D.current=window.setTimeout(()=>a(""),1e3))}(b),j&&setTimeout(()=>j.focus()))}let f=B.current;if(a.target!==f||!af.includes(a.key))return;a.preventDefault();let g=w().filter(a=>!a.disabled).map(a=>a.ref.current);ae.includes(a.key)&&g.reverse(),function(a){let b=document.activeElement;for(let c of a)if(c===b||(c.focus(),document.activeElement!==b))return}(g)}),onBlur:(0,x.composeEventHandlers)(a.onBlur,a=>{a.currentTarget.contains(a.target)||(window.clearTimeout(D.current),H.current="")}),onPointerMove:(0,x.composeEventHandlers)(a.onPointerMove,a8(a=>{let b=a.target,c=M.current!==a.clientX;a.currentTarget.contains(b)&&c&&(L.current=a.clientX>M.current?"right":"left",M.current=a.clientX)}))})})})})})})});aD.displayName=aA;var aI=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a;return(0,b.jsx)(B.Primitive.div,{role:"group",...e,ref:c})});aI.displayName="MenuGroup";var aJ=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a;return(0,b.jsx)(B.Primitive.div,{...e,ref:c})});aJ.displayName="MenuLabel";var aK="MenuItem",aL="menu.itemSelect",aM=c.forwardRef((a,d)=>{let{disabled:e=!1,onSelect:f,...g}=a,h=c.useRef(null),i=at(aK,a.__scopeMenu),j=aC(aK,a.__scopeMenu),k=(0,y.useComposedRefs)(d,h),l=c.useRef(!1);return(0,b.jsx)(aN,{...g,ref:k,disabled:e,onClick:(0,x.composeEventHandlers)(a.onClick,()=>{let a=h.current;if(!e&&a){let b=new CustomEvent(aL,{bubbles:!0,cancelable:!0});a.addEventListener(aL,a=>f?.(a),{once:!0}),(0,B.dispatchDiscreteCustomEvent)(a,b),b.defaultPrevented?l.current=!1:i.onClose()}}),onPointerDown:b=>{a.onPointerDown?.(b),l.current=!0},onPointerUp:(0,x.composeEventHandlers)(a.onPointerUp,a=>{l.current||a.currentTarget?.click()}),onKeyDown:(0,x.composeEventHandlers)(a.onKeyDown,a=>{let b=""!==j.searchRef.current;e||b&&" "===a.key||ad.includes(a.key)&&(a.currentTarget.click(),a.preventDefault())})})});aM.displayName=aK;var aN=c.forwardRef((a,d)=>{let{__scopeMenu:e,disabled:f=!1,textValue:g,...h}=a,i=aC(aK,e),j=ap(e),k=c.useRef(null),l=(0,y.useComposedRefs)(d,k),[m,n]=c.useState(!1),[o,p]=c.useState("");return c.useEffect(()=>{let a=k.current;a&&p((a.textContent??"").trim())},[h.children]),(0,b.jsx)(aj.ItemSlot,{scope:e,disabled:f,textValue:g??o,children:(0,b.jsx)(Z,{asChild:!0,...j,focusable:!f,children:(0,b.jsx)(B.Primitive.div,{role:"menuitem","data-highlighted":m?"":void 0,"aria-disabled":f||void 0,"data-disabled":f?"":void 0,...h,ref:l,onPointerMove:(0,x.composeEventHandlers)(a.onPointerMove,a8(a=>{f?i.onItemLeave(a):(i.onItemEnter(a),a.defaultPrevented||a.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:(0,x.composeEventHandlers)(a.onPointerLeave,a8(a=>i.onItemLeave(a))),onFocus:(0,x.composeEventHandlers)(a.onFocus,()=>n(!0)),onBlur:(0,x.composeEventHandlers)(a.onBlur,()=>n(!1))})})})}),aO=c.forwardRef((a,c)=>{let{checked:d=!1,onCheckedChange:e,...f}=a;return(0,b.jsx)(aW,{scope:a.__scopeMenu,checked:d,children:(0,b.jsx)(aM,{role:"menuitemcheckbox","aria-checked":a6(d)?"mixed":d,...f,ref:c,"data-state":a7(d),onSelect:(0,x.composeEventHandlers)(f.onSelect,()=>e?.(!!a6(d)||!d),{checkForDefaultPrevented:!1})})})});aO.displayName="MenuCheckboxItem";var aP="MenuRadioGroup",[aQ,aR]=am(aP,{value:void 0,onValueChange:()=>{}}),aS=c.forwardRef((a,c)=>{let{value:d,onValueChange:e,...f}=a,g=(0,L.useCallbackRef)(e);return(0,b.jsx)(aQ,{scope:a.__scopeMenu,value:d,onValueChange:g,children:(0,b.jsx)(aI,{...f,ref:c})})});aS.displayName=aP;var aT="MenuRadioItem",aU=c.forwardRef((a,c)=>{let{value:d,...e}=a,f=aR(aT,a.__scopeMenu),g=d===f.value;return(0,b.jsx)(aW,{scope:a.__scopeMenu,checked:g,children:(0,b.jsx)(aM,{role:"menuitemradio","aria-checked":g,...e,ref:c,"data-state":a7(g),onSelect:(0,x.composeEventHandlers)(e.onSelect,()=>f.onValueChange?.(d),{checkForDefaultPrevented:!1})})})});aU.displayName=aT;var aV="MenuItemIndicator",[aW,aX]=am(aV,{checked:!1}),aY=c.forwardRef((a,c)=>{let{__scopeMenu:d,forceMount:e,...f}=a,g=aX(aV,d);return(0,b.jsx)(K.Presence,{present:e||a6(g.checked)||!0===g.checked,children:(0,b.jsx)(B.Primitive.span,{...f,ref:c,"data-state":a7(g.checked)})})});aY.displayName=aV;var aZ=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a;return(0,b.jsx)(B.Primitive.div,{role:"separator","aria-orientation":"horizontal",...e,ref:c})});aZ.displayName="MenuSeparator";var a$=c.forwardRef((a,c)=>{let{__scopeMenu:d,...e}=a,f=ao(d);return(0,b.jsx)(I.Arrow,{...f,...e,ref:c})});a$.displayName="MenuArrow";var[a_,a0]=am("MenuSub"),a1="MenuSubTrigger",a2=c.forwardRef((a,d)=>{let e=ar(a1,a.__scopeMenu),f=at(a1,a.__scopeMenu),g=a0(a1,a.__scopeMenu),h=aC(a1,a.__scopeMenu),i=c.useRef(null),{pointerGraceTimerRef:j,onPointerGraceIntentChange:k}=h,l={__scopeMenu:a.__scopeMenu},m=c.useCallback(()=>{i.current&&window.clearTimeout(i.current),i.current=null},[]);return c.useEffect(()=>m,[m]),c.useEffect(()=>{let a=j.current;return()=>{window.clearTimeout(a),k(null)}},[j,k]),(0,b.jsx)(av,{asChild:!0,...l,children:(0,b.jsx)(aN,{id:g.triggerId,"aria-haspopup":"menu","aria-expanded":e.open,"aria-controls":g.contentId,"data-state":a5(e.open),...a,ref:(0,y.composeRefs)(d,g.onTriggerChange),onClick:b=>{a.onClick?.(b),a.disabled||b.defaultPrevented||(b.currentTarget.focus(),e.open||e.onOpenChange(!0))},onPointerMove:(0,x.composeEventHandlers)(a.onPointerMove,a8(b=>{h.onItemEnter(b),!b.defaultPrevented&&(a.disabled||e.open||i.current||(h.onPointerGraceIntentChange(null),i.current=window.setTimeout(()=>{e.onOpenChange(!0),m()},100)))})),onPointerLeave:(0,x.composeEventHandlers)(a.onPointerLeave,a8(a=>{m();let b=e.content?.getBoundingClientRect();if(b){let c=e.content?.dataset.side,d="right"===c,f=b[d?"left":"right"],g=b[d?"right":"left"];h.onPointerGraceIntentChange({area:[{x:a.clientX+(d?-5:5),y:a.clientY},{x:f,y:b.top},{x:g,y:b.top},{x:g,y:b.bottom},{x:f,y:b.bottom}],side:c}),window.clearTimeout(j.current),j.current=window.setTimeout(()=>h.onPointerGraceIntentChange(null),300)}else{if(h.onTriggerLeave(a),a.defaultPrevented)return;h.onPointerGraceIntentChange(null)}})),onKeyDown:(0,x.composeEventHandlers)(a.onKeyDown,b=>{let c=""!==h.searchRef.current;a.disabled||c&&" "===b.key||ag[f.dir].includes(b.key)&&(e.onOpenChange(!0),e.content?.focus(),b.preventDefault())})})})});a2.displayName=a1;var a3="MenuSubContent",a4=c.forwardRef((a,d)=>{let e=ay(aA,a.__scopeMenu),{forceMount:f=e.forceMount,...g}=a,h=ar(aA,a.__scopeMenu),i=at(aA,a.__scopeMenu),j=a0(a3,a.__scopeMenu),k=c.useRef(null),l=(0,y.useComposedRefs)(d,k);return(0,b.jsx)(aj.Provider,{scope:a.__scopeMenu,children:(0,b.jsx)(K.Presence,{present:f||h.open,children:(0,b.jsx)(aj.Slot,{scope:a.__scopeMenu,children:(0,b.jsx)(aH,{id:j.contentId,"aria-labelledby":j.triggerId,...g,ref:l,align:"start",side:"rtl"===i.dir?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:a=>{i.isUsingKeyboardRef.current&&k.current?.focus(),a.preventDefault()},onCloseAutoFocus:a=>a.preventDefault(),onFocusOutside:(0,x.composeEventHandlers)(a.onFocusOutside,a=>{a.target!==j.trigger&&h.onOpenChange(!1)}),onEscapeKeyDown:(0,x.composeEventHandlers)(a.onEscapeKeyDown,a=>{i.onClose(),a.preventDefault()}),onKeyDown:(0,x.composeEventHandlers)(a.onKeyDown,a=>{let b=a.currentTarget.contains(a.target),c=ah[i.dir].includes(a.key);b&&c&&(h.onOpenChange(!1),j.trigger?.focus(),a.preventDefault())})})})})})});function a5(a){return a?"open":"closed"}function a6(a){return"indeterminate"===a}function a7(a){return a6(a)?"indeterminate":a?"checked":"unchecked"}function a8(a){return b=>"mouse"===b.pointerType?a(b):void 0}a4.displayName=a3;var a9="DropdownMenu",[ba,bb]=(0,z.createContextScope)(a9,[an]),bc=an(),[bd,be]=ba(a9),bf=a=>{let{__scopeDropdownMenu:d,children:e,dir:f,open:g,defaultOpen:h,onOpenChange:i,modal:j=!0}=a,k=bc(d),l=c.useRef(null),[m,n]=(0,A.useControllableState)({prop:g,defaultProp:h??!1,onChange:i,caller:a9});return(0,b.jsx)(bd,{scope:d,triggerId:(0,H.useId)(),triggerRef:l,contentId:(0,H.useId)(),open:m,onOpenChange:n,onOpenToggle:c.useCallback(()=>n(a=>!a),[n]),modal:j,children:(0,b.jsx)(au,{...k,open:m,onOpenChange:n,dir:f,modal:j,children:e})})};bf.displayName=a9;var bg="DropdownMenuTrigger",bh=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,disabled:e=!1,...f}=a,g=be(bg,d),h=bc(d);return(0,b.jsx)(av,{asChild:!0,...h,children:(0,b.jsx)(B.Primitive.button,{type:"button",id:g.triggerId,"aria-haspopup":"menu","aria-expanded":g.open,"aria-controls":g.open?g.contentId:void 0,"data-state":g.open?"open":"closed","data-disabled":e?"":void 0,disabled:e,...f,ref:(0,y.composeRefs)(c,g.triggerRef),onPointerDown:(0,x.composeEventHandlers)(a.onPointerDown,a=>{!e&&0===a.button&&!1===a.ctrlKey&&(g.onOpenToggle(),g.open||a.preventDefault())}),onKeyDown:(0,x.composeEventHandlers)(a.onKeyDown,a=>{!e&&(["Enter"," "].includes(a.key)&&g.onOpenToggle(),"ArrowDown"===a.key&&g.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(a.key)&&a.preventDefault())})})})});bh.displayName=bg;var bi=a=>{let{__scopeDropdownMenu:c,...d}=a,e=bc(c);return(0,b.jsx)(az,{...e,...d})};bi.displayName="DropdownMenuPortal";var bj="DropdownMenuContent",bk=c.forwardRef((a,d)=>{let{__scopeDropdownMenu:e,...f}=a,g=be(bj,e),h=bc(e),i=c.useRef(!1);return(0,b.jsx)(aD,{id:g.contentId,"aria-labelledby":g.triggerId,...h,...f,ref:d,onCloseAutoFocus:(0,x.composeEventHandlers)(a.onCloseAutoFocus,a=>{i.current||g.triggerRef.current?.focus(),i.current=!1,a.preventDefault()}),onInteractOutside:(0,x.composeEventHandlers)(a.onInteractOutside,a=>{let b=a.detail.originalEvent,c=0===b.button&&!0===b.ctrlKey,d=2===b.button||c;(!g.modal||d)&&(i.current=!0)}),style:{...a.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});bk.displayName=bj,c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(aI,{...f,...e,ref:c})}).displayName="DropdownMenuGroup";var bl=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(aJ,{...f,...e,ref:c})});bl.displayName="DropdownMenuLabel";var bm=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(aM,{...f,...e,ref:c})});bm.displayName="DropdownMenuItem";var bn=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(aO,{...f,...e,ref:c})});bn.displayName="DropdownMenuCheckboxItem",c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(aS,{...f,...e,ref:c})}).displayName="DropdownMenuRadioGroup";var bo=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(aU,{...f,...e,ref:c})});bo.displayName="DropdownMenuRadioItem";var bp=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(aY,{...f,...e,ref:c})});bp.displayName="DropdownMenuItemIndicator";var bq=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(aZ,{...f,...e,ref:c})});bq.displayName="DropdownMenuSeparator",c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(a$,{...f,...e,ref:c})}).displayName="DropdownMenuArrow";var br=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(a2,{...f,...e,ref:c})});br.displayName="DropdownMenuSubTrigger";var bs=c.forwardRef((a,c)=>{let{__scopeDropdownMenu:d,...e}=a,f=bc(d);return(0,b.jsx)(a4,{...f,...e,ref:c,style:{...a.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});bs.displayName="DropdownMenuSubContent";var bt=a.i(141270),bu=a.i(532418),bv=a.i(687052);c.forwardRef(({className:a,inset:c,children:d,...e},f)=>(0,b.jsxs)(br,{ref:f,className:(0,bv.cn)("flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",c&&"pl-8",a),...e,children:[d,(0,b.jsx)(bt.ChevronRight,{className:"ml-auto h-4 w-4"})]})).displayName=br.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(bs,{ref:d,className:(0,bv.cn)("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",a),...c})).displayName=bs.displayName;let bw=c.forwardRef(({className:a,sideOffset:c=4,...d},e)=>(0,b.jsx)(bi,{children:(0,b.jsx)(bk,{ref:e,sideOffset:c,className:(0,bv.cn)("z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",a),...d})}));bw.displayName=bk.displayName;let bx=c.forwardRef(({className:a,inset:c,...d},e)=>(0,b.jsx)(bm,{ref:e,className:(0,bv.cn)("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",c&&"pl-8",a),...d}));bx.displayName=bm.displayName,c.forwardRef(({className:a,children:c,checked:d,...e},f)=>(0,b.jsxs)(bn,{ref:f,className:(0,bv.cn)("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),checked:d,...e,children:[(0,b.jsx)("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(bp,{children:(0,b.jsx)(n.Check,{className:"h-4 w-4"})})}),c]})).displayName=bn.displayName,c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(bo,{ref:e,className:(0,bv.cn)("relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...d,children:[(0,b.jsx)("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(bp,{children:(0,b.jsx)(bu.Circle,{className:"h-2 w-2 fill-current"})})}),c]})).displayName=bo.displayName,c.forwardRef(({className:a,inset:c,...d},e)=>(0,b.jsx)(bl,{ref:e,className:(0,bv.cn)("px-2 py-1.5 text-sm font-semibold",c&&"pl-8",a),...d})).displayName=bl.displayName;let by=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(bq,{ref:d,className:(0,bv.cn)("-mx-1 my-1 h-px bg-muted",a),...c}));by.displayName=bq.displayName;var bz=a.i(365791),bA=a.i(285232);let bB=["#ef4444","#f97316","#eab308","#22c55e","#14b8a6","#3b82f6","#6366f1","#8b5cf6","#d946ef","#ec4899","#6b7280","#78716c"];function bC({value:a,onChange:d,disabled:e}){let[f,g]=(0,c.useState)(!1);return(0,b.jsxs)(bA.Popover,{open:f,onOpenChange:g,children:[(0,b.jsx)(bA.PopoverTrigger,{asChild:!0,children:(0,b.jsx)(u.Button,{variant:"outline",size:"sm",className:"h-8 w-8 p-0",disabled:e,"aria-label":"Pick color",children:(0,b.jsx)("div",{className:"h-4 w-4 rounded-full border",style:{backgroundColor:a||"#666"}})})}),(0,b.jsx)(bA.PopoverContent,{className:"w-[200px] p-3",align:"start",children:(0,b.jsx)("div",{className:"grid grid-cols-6 gap-2",children:bB.map(c=>(0,b.jsx)("button",{className:(0,bv.cn)("h-6 w-6 rounded-full border-2 transition-transform hover:scale-110",a===c?"border-primary":"border-transparent"),style:{backgroundColor:c},onClick:()=>{d(c),g(!1)},"aria-label":`Select color ${c}`},c))})})]})}var bD=a.i(156916),bE=a.i(435133),bF=a.i(779121);function bG(){let a=(0,d.useRouter)(),{projects:i,currentProject:x,switchProject:y,toggleFavorite:z,removeProject:A,updateProject:B,isLoading:C}=(0,t.useProject)(),[D,E]=(0,c.useState)(""),[F,G]=(0,c.useState)(!1),[H,I]=(0,c.useState)(null),[J,K]=(0,c.useState)(""),[L,M]=(0,c.useState)({}),[N,O]=(0,c.useState)({}),P=i.filter(a=>a.name.toLowerCase().includes(D.toLowerCase()));(0,c.useEffect)(()=>{let a=async()=>{for(let a of i)if(L[a.id]?.status!=="valid"&&L[a.id]?.status!=="invalid")try{M(b=>({...b,[a.id]:{status:"validating"}}));let b=await fetch(`/api/projects/${a.id}/validate`,{method:"POST"});if(b.ok){let c=await b.json();M(b=>({...b,[a.id]:{status:c.validation.isValid?"valid":"invalid",error:c.validation.error}}))}}catch{M(b=>({...b,[a.id]:{status:"invalid",error:"Validation failed"}}))}};i.length>0&&a()},[i]),(0,c.useEffect)(()=>{let a=async()=>{for(let a of i)if(!N[a.id])try{let b=await fetch(`/api/projects/${a.id}/stats`);if(b.ok){let c=await b.json();O(b=>({...b,[a.id]:c.stats}))}}catch{}};i.length>0&&a()},[i]);let Q=async b=>{await y(b),a.push(`/projects/${b}/specs`)},R=()=>{I(null),K("")},S=async a=>{if(!J.trim())return void bD.toast.error("Project name cannot be empty");try{await B(a,{name:J.trim()}),bD.toast.success("Project name updated"),I(null),K("")}catch{bD.toast.error("Failed to update project name")}},T=async(a,b)=>{try{await B(a,{color:b}),bD.toast.success("Project color updated")}catch{bD.toast.error("Failed to update project color")}},U=(0,c.useCallback)(async a=>{M(b=>({...b,[a]:{status:"validating"}}));try{let b=await fetch(`/api/projects/${a}/validate`,{method:"POST"});if(!b.ok)throw Error("Validation request failed");let c=await b.json();M(b=>({...b,[a]:{status:c.validation.isValid?"valid":"invalid",error:c.validation.error}})),c.validation.isValid?bD.toast.success("Project path is valid"):bD.toast.error(`Project path invalid: ${c.validation.error||"Unknown error"}`)}catch{M(b=>({...b,[a]:{status:"invalid",error:"Failed to validate"}})),bD.toast.error("Failed to validate project")}},[]);return(0,b.jsxs)("div",{className:"min-h-screen bg-background",children:[(0,b.jsx)("div",{className:"border-b bg-card/50 backdrop-blur-sm sticky top-0 z-10",children:(0,b.jsxs)("div",{className:"container max-w-7xl mx-auto py-6 space-y-6",children:[x&&(0,b.jsxs)(s.default,{href:`/projects/${x.id}/specs`,className:"inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors",children:[(0,b.jsx)(r.ArrowLeft,{className:"h-4 w-4"}),"Back to ",x.name]}),(0,b.jsxs)("div",{className:"flex flex-col md:flex-row md:items-center justify-between gap-4",children:[(0,b.jsxs)("div",{children:[(0,b.jsx)("h1",{className:"text-3xl font-bold tracking-tight text-foreground",children:"Projects"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-1 text-lg",children:"Manage your LeanSpec projects and workspaces."})]}),(0,b.jsxs)(u.Button,{onClick:()=>G(!0),size:"lg",className:"shadow-sm",children:[(0,b.jsx)(e.Plus,{className:"mr-2 h-4 w-4"}),"New Project"]})]}),(0,b.jsx)("div",{className:"flex items-center space-x-2 max-w-md",children:(0,b.jsxs)("div",{className:"relative flex-1",children:[(0,b.jsx)(f.Search,{className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground"}),(0,b.jsx)(v.Input,{placeholder:"Search projects...",value:D,onChange:a=>E(a.target.value),className:"pl-9 bg-background/50"})]})})]})}),(0,b.jsxs)("div",{className:"container max-w-7xl mx-auto py-8",children:[(0,b.jsxs)("div",{className:"grid gap-6 grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:[P.map(a=>{let c,d=N[a.id];return(0,b.jsxs)(w.Card,{className:"group relative flex flex-col transition-all duration-200 hover:shadow-md hover:border-primary/20 overflow-hidden cursor-pointer bg-card",onClick:()=>Q(a.id),children:[(0,b.jsx)("div",{className:"h-1 w-full",style:{backgroundColor:a.color||"hsl(var(--primary))"}}),(0,b.jsx)(w.CardHeader,{className:"px-4 pt-4 pb-2 space-y-1",children:(0,b.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[H===a.id?(0,b.jsxs)("div",{className:"flex items-center gap-1",onClick:a=>a.stopPropagation(),children:[(0,b.jsx)(v.Input,{value:J,onChange:a=>K(a.target.value),className:"h-7 text-sm",autoFocus:!0,onKeyDown:b=>{"Enter"===b.key&&S(a.id),"Escape"===b.key&&R()}}),(0,b.jsx)(u.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>S(a.id),children:(0,b.jsx)(n.Check,{className:"h-3 w-3"})}),(0,b.jsx)(u.Button,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:R,children:(0,b.jsx)(o.X,{className:"h-3 w-3"})})]}):(0,b.jsxs)("div",{className:"flex items-center gap-2 mb-1",children:[(0,b.jsx)("h3",{className:"font-semibold text-base leading-none truncate",title:a.name,children:a.name}),(c=L[a.id])&&"unknown"!==c.status?"validating"===c.status?(0,b.jsx)(m,{className:"h-4 w-4 animate-spin text-muted-foreground"}):"valid"===c.status?(0,b.jsx)(q.CheckCircle2,{className:"h-4 w-4 text-green-500"}):"invalid"===c.status?(0,b.jsx)("span",{title:c.error||"Invalid project",children:(0,b.jsx)(p,{className:"h-4 w-4 text-destructive"})}):null:null]}),(0,b.jsx)("p",{className:"text-[10px] font-mono text-muted-foreground truncate",title:a.path,children:a.path})]}),(0,b.jsxs)(bf,{children:[(0,b.jsx)(bh,{asChild:!0,onClick:a=>a.stopPropagation(),children:(0,b.jsxs)(u.Button,{variant:"ghost",size:"icon",className:"h-8 w-8 -mr-2 text-muted-foreground hover:text-foreground opacity-0 group-hover:opacity-100 transition-opacity",children:[(0,b.jsx)(j,{className:"h-4 w-4"}),(0,b.jsx)("span",{className:"sr-only",children:"Open menu"})]})}),(0,b.jsxs)(bw,{align:"end",children:[(0,b.jsxs)(bx,{onClick:b=>{var c,d;b.stopPropagation(),c=a.id,d=a.name,I(c),K(d)},children:[(0,b.jsx)(l,{className:"mr-2 h-4 w-4"}),"Rename"]}),(0,b.jsxs)("div",{className:"p-2",onClick:a=>a.stopPropagation(),children:[(0,b.jsx)("p",{className:"text-xs text-muted-foreground mb-2 px-2",children:"Project Color"}),(0,b.jsx)("div",{className:"flex flex-wrap gap-1 px-2",children:(0,b.jsx)(bC,{value:a.color,onChange:b=>T(a.id,b)})})]}),(0,b.jsx)(by,{}),(0,b.jsxs)(bx,{onClick:b=>{b.stopPropagation(),z(a.id)},children:[(0,b.jsx)(h.Star,{className:"mr-2 h-4 w-4"}),a.favorite?"Unfavorite":"Favorite"]}),(0,b.jsxs)(bx,{onClick:b=>{b.stopPropagation(),U(a.id)},children:[(0,b.jsx)(m,{className:"mr-2 h-4 w-4"}),"Validate Path"]}),(0,b.jsx)(by,{}),(0,b.jsxs)(bx,{className:"text-destructive",onClick:b=>{b.stopPropagation(),A(a.id)},children:[(0,b.jsx)(k,{className:"mr-2 h-4 w-4"}),"Remove"]})]})]})]})}),(0,b.jsx)(w.CardContent,{className:"px-4 pb-4 flex-1",children:(0,b.jsxs)("div",{className:"flex items-center gap-4 py-1",children:[(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("span",{className:"text-[10px] text-muted-foreground font-medium uppercase tracking-wider",children:"Specs"}),(0,b.jsx)("span",{className:"text-lg font-bold tracking-tight",children:d?.totalSpecs||0})]}),(0,b.jsx)("div",{className:"w-px h-8 bg-border"}),(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("span",{className:"text-[10px] text-muted-foreground font-medium uppercase tracking-wider",children:"Completion"}),(0,b.jsxs)("span",{className:"text-lg font-bold tracking-tight",children:[d?.completionRate||0,"%"]})]})]})}),(0,b.jsxs)("div",{className:"px-4 py-2 bg-muted/20 border-t flex items-center justify-between text-[10px] text-muted-foreground mt-auto",children:[(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsx)("div",{className:"w-1.5 h-1.5 rounded-full",style:{backgroundColor:a.color||"#666"}}),(0,b.jsx)("span",{children:"Local"})]}),a.lastAccessed&&(0,b.jsx)("span",{children:(0,bE.default)(a.lastAccessed).fromNow()})]}),a.favorite&&(0,b.jsx)("div",{className:"absolute top-0 right-0 p-2 pointer-events-none",children:(0,b.jsx)("div",{className:"bg-background/80 backdrop-blur-sm p-1.5 rounded-bl-lg border-b border-l shadow-sm",children:(0,b.jsx)(h.Star,{className:"h-3.5 w-3.5 fill-yellow-500 text-yellow-500"})})})]},a.id)}),0===P.length&&!C&&(0,b.jsxs)("div",{className:"col-span-full flex flex-col items-center justify-center py-16 text-center border-2 border-dashed rounded-xl bg-muted/10",children:[(0,b.jsx)("div",{className:"bg-muted/30 p-4 rounded-full mb-4",children:(0,b.jsx)(g.FolderOpen,{className:"h-8 w-8 text-muted-foreground"})}),(0,b.jsx)("h3",{className:"text-xl font-semibold",children:"No projects found"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-2 mb-6 max-w-sm",children:D?"We couldn't find any projects matching your search.":"Get started by creating your first LeanSpec project."}),(0,b.jsxs)(u.Button,{onClick:()=>G(!0),size:"lg",children:[(0,b.jsx)(e.Plus,{className:"mr-2 h-4 w-4"}),"Create Project"]})]})]}),(0,b.jsx)(bz.CreateProjectDialog,{open:F,onOpenChange:G})]})]})}bE.default.extend(bF.default),a.s(["default",()=>bG],531428)}];
2
2
 
3
3
  //# sourceMappingURL=packages_ui_src_app_projects_page_tsx_6e166c8e._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[113142,a=>{"use strict";var b=a.i(40352),c=a.i(936883),d=a.i(920378),e=a.i(681612),f=a.i(980096),g=a.i(837717),h=a.i(406334),i=a.i(227725),j=a.i(915929),k=a.i(793090),l=a.i(800966),m=a.i(659358),n=a.i(297557),o=a.i(262936),p=a.i(307840),q=a.i(730702),r=a.i(615268),s=a.i(915970),t=a.i(404620),u=a.i(709211),v=a.i(633093),w=a.i(141270),x=a.i(882479),y=a.i(322570),z=a.i(687052),A=a.i(890075);a.i(294783);var B=a.i(156916);let C={planned:{icon:n.Clock,title:"Planned",colorClass:"text-blue-600 dark:text-blue-400",bgClass:"bg-blue-50 dark:bg-blue-900/20",borderClass:"border-blue-200 dark:border-blue-800"},"in-progress":{icon:m.PlayCircle,title:"In Progress",colorClass:"text-orange-600 dark:text-orange-400",bgClass:"bg-orange-50 dark:bg-orange-900/20",borderClass:"border-orange-200 dark:border-orange-800"},complete:{icon:l.CheckCircle2,title:"Complete",colorClass:"text-green-600 dark:text-green-400",bgClass:"bg-green-50 dark:bg-green-900/20",borderClass:"border-green-200 dark:border-green-800"},archived:{icon:o.Archive,title:"Archived",colorClass:"text-gray-600 dark:text-gray-400",bgClass:"bg-gray-50 dark:bg-gray-900/20",borderClass:"border-gray-200 dark:border-gray-800"}},D=["planned","in-progress","complete","archived"];function E({initialSpecs:a,projectId:d}){let f=(0,e.useSearchParams)(),g=(0,e.useRouter)(),l=(0,c.useCallback)(a=>d?`/projects/${d}/specs/${a}`:`/specs/${a}`,[d]),m=(0,c.useCallback)(()=>d?`/projects/${d}/specs`:"/specs",[d]),[n,o]=(0,c.useState)(a),[r,s]=(0,c.useState)({}),[v,w]=(0,c.useState)(""),[x,y]=(0,c.useState)("all"),[A,D]=(0,c.useState)("all"),[E,H]=(0,c.useState)("id-desc"),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(!1),[M,N]=(0,c.useState)(()=>{let a=f.get("view");return"board"===a||"list"===a?a:"list"}),O=(0,c.useRef)(!0);(0,c.useEffect)(()=>{o(a)},[a]);let P=(0,c.useCallback)(async(a,b)=>{if(a.status===b)return;let c=a.status;s(b=>({...b,[a.id]:!0})),o(c=>c.map(c=>c.id===a.id?{...c,status:b}:c));try{let c=d?`/api/projects/${d}/specs/${encodeURIComponent(a.specName)}/status`:`/api/specs/${encodeURIComponent(a.specName)}/status`,e=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:b})});if(!e.ok){let a=await e.text();throw Error(a||"Failed to update spec status")}let f=a.specNumber?`#${a.specNumber}`:a.specName;B.toast.success(`Moved ${f} to ${C[b].title}`)}catch(b){console.error("Failed to update spec status",b),o(b=>b.map(b=>b.id===a.id?{...b,status:c}:b)),B.toast.error("Unable to update status. Please try again.")}finally{s(b=>{let c={...b};return delete c[a.id],c})}},[]);(0,c.useEffect)(()=>{"archived"===x&&"board"===M&&J(!0)},[x,M]),(0,c.useEffect)(()=>{if(O.current){O.current=!1;return}let a=new URLSearchParams(window.location.search);"board"===M?a.set("view","board"):a.delete("view");let b=a.toString(),c=b?`?${b}`:"";g.replace(`${m()}${c}`,{scroll:!1})},[M,g,m]);let Q=(0,c.useMemo)(()=>{let a=[...n.filter(a=>{let b=!v||a.title?.toLowerCase().includes(v.toLowerCase())||a.specName.toLowerCase().includes(v.toLowerCase())||a.tags?.some(a=>a.toLowerCase().includes(v.toLowerCase())),c="all"===x?"list"!==M||"archived"!==a.status:a.status===x,d="all"===A||a.priority===A;return b&&c&&d})];switch(E){case"id-desc":a.sort((a,b)=>(b.specNumber||0)-(a.specNumber||0));break;case"id-asc":a.sort((a,b)=>(a.specNumber||0)-(b.specNumber||0));break;case"updated-desc":a.sort((a,b)=>a.updatedAt?b.updatedAt?b.updatedAt.getTime()-a.updatedAt.getTime():-1:1);break;case"title-asc":a.sort((a,b)=>{let c=(a.title||a.specName).toLowerCase(),d=(b.title||b.specName).toLowerCase();return c.localeCompare(d)})}return a},[n,v,x,A,E,M]);return(0,b.jsx)("div",{className:"h-[calc(100vh-3.5rem)] flex flex-col overflow-hidden bg-background p-2 sm:p-4",children:(0,b.jsxs)("div",{className:(0,z.cn)("flex flex-col h-full mx-auto transition-all duration-300",K?"w-full":"max-w-7xl w-full"),children:[(0,b.jsx)("div",{className:"flex-none mb-3 sm:mb-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3 md:gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h1",{className:"text-lg sm:text-xl md:text-2xl font-bold tracking-tight truncate",children:"Specifications"}),(0,b.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:[Q.length," specs"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 sm:gap-2 flex-shrink-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-0.5 sm:gap-1 bg-muted/50 p-0.5 sm:p-1 rounded-lg",children:[(0,b.jsxs)(i.Button,{variant:"list"===M?"secondary":"ghost",size:"sm",onClick:()=>N("list"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"List view",children:[(0,b.jsx)(q.List,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,b.jsx)("span",{className:"hidden lg:inline ml-2",children:"List"})]}),(0,b.jsxs)(i.Button,{variant:"board"===M?"secondary":"ghost",size:"sm",onClick:()=>N("board"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"Board view",children:[(0,b.jsx)(p.LayoutGrid,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,b.jsx)("span",{className:"hidden lg:inline ml-2",children:"Board"})]})]}),(0,b.jsx)(i.Button,{variant:"ghost",size:"icon",onClick:()=>L(!K),className:"hidden md:flex h-8 w-8 sm:h-10 sm:w-10 text-muted-foreground hover:text-foreground",title:K?"Exit wide mode":"Enter wide mode",children:K?(0,b.jsx)(u.Minimize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}):(0,b.jsx)(t.Maximize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"})})]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"relative w-full",children:[(0,b.jsx)(k.Search,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 sm:h-4 sm:w-4 text-muted-foreground pointer-events-none"}),(0,b.jsx)(h.Input,{placeholder:"Search specs...",value:v,onChange:a=>w(a.target.value),className:"pl-8 sm:pl-9 h-9 sm:h-10 w-full text-sm"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 overflow-x-auto snap-x snap-mandatory pb-1 -mx-2 px-2 sm:mx-0 sm:px-0 sm:pb-0 scrollbar-thin",children:[(0,b.jsxs)(j.Select,{value:x,onValueChange:a=>y(a),children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Status"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"all",children:"All Status"}),(0,b.jsx)(j.SelectItem,{value:"planned",children:"Planned"}),(0,b.jsx)(j.SelectItem,{value:"in-progress",children:"In Progress"}),(0,b.jsx)(j.SelectItem,{value:"complete",children:"Complete"}),(0,b.jsx)(j.SelectItem,{value:"archived",children:"Archived"})]})]}),(0,b.jsxs)(j.Select,{value:A,onValueChange:D,children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Priority"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"all",children:"All Priority"}),(0,b.jsx)(j.SelectItem,{value:"critical",children:"Critical"}),(0,b.jsx)(j.SelectItem,{value:"high",children:"High"}),(0,b.jsx)(j.SelectItem,{value:"medium",children:"Medium"}),(0,b.jsx)(j.SelectItem,{value:"low",children:"Low"})]})]}),(0,b.jsxs)(j.Select,{value:E,onValueChange:a=>H(a),children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[130px] sm:w-[170px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Sort by"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"id-desc",children:"Newest First"}),(0,b.jsx)(j.SelectItem,{value:"id-asc",children:"Oldest First"}),(0,b.jsx)(j.SelectItem,{value:"updated-desc",children:"Recently Updated"}),(0,b.jsx)(j.SelectItem,{value:"title-asc",children:"Title (A-Z)"})]})]})]})]})]})}),(0,b.jsx)("div",{className:(0,z.cn)("flex-1 min-h-0","board"===M?"overflow-x-auto overflow-y-hidden":"overflow-y-auto"),children:"list"===M?(0,b.jsx)("div",{className:"w-full",children:(0,b.jsx)(F,{specs:Q,getSpecUrl:l})}):(0,b.jsx)(G,{specs:Q,onStatusChange:P,pendingSpecIds:r,showArchived:I,onToggleArchived:()=>J(!I),getSpecUrl:l})})]})})}function F({specs:a,getSpecUrl:c}){return(0,b.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:gap-3 md:gap-4 pb-2 sm:pb-4 md:pb-8",children:a.map(a=>{let e={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[a.priority]||"border-l-gray-300",h=a.relationships&&a.relationships.dependsOn.length>0,i=!!(a.subSpecsCount&&a.subSpecsCount>0),j=c(a.specNumber||a.id);return(0,b.jsxs)(f.Card,{className:(0,z.cn)("hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.01] active:scale-[0.99] border-l-4 cursor-pointer touch-manipulation",e),onClick:()=>window.location.href=j,children:[(0,b.jsx)(f.CardHeader,{className:"pb-2 sm:pb-2.5 md:pb-3 px-3 sm:px-4 md:px-6 pt-3 sm:pt-4 md:pt-6",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-start md:justify-between md:gap-4",children:[(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsx)(d.default,{href:j,children:(0,b.jsxs)(f.CardTitle,{className:"text-sm sm:text-base md:text-lg font-semibold hover:text-primary transition-colors flex items-start flex-wrap gap-1.5 sm:gap-2 leading-snug sm:leading-normal",children:[a.specNumber?(0,b.jsxs)("span",{className:"font-mono text-xs sm:text-sm md:text-base font-normal text-muted-foreground flex-shrink-0",children:["#",a.specNumber.toString().padStart(3,"0")]}):null,(0,b.jsx)("span",{className:"flex-1 break-words",children:a.title||a.specName})]})}),a.title&&a.title!==a.specName&&(0,b.jsx)("p",{className:"text-[11px] sm:text-xs font-mono text-muted-foreground mt-1 sm:mt-1.5 truncate",children:a.specName})]}),(0,b.jsxs)("div",{className:"flex gap-1.5 sm:gap-2 flex-wrap md:shrink-0",children:[a.status&&(0,b.jsx)(x.StatusBadge,{status:a.status}),a.priority&&(0,b.jsx)(y.PriorityBadge,{priority:a.priority})]})]})}),(0,b.jsx)(f.CardContent,{className:"px-3 sm:px-4 md:px-6 pb-2.5 sm:pb-3 md:pb-6 pt-0",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-4",children:[(0,b.jsx)("div",{className:"flex items-center gap-2 sm:gap-3 md:gap-4 text-[11px] sm:text-xs md:text-sm text-muted-foreground flex-wrap",children:a.updatedAt||i||h?(0,b.jsxs)(b.Fragment,{children:[a.updatedAt&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(n.Clock,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:["Updated ",(0,A.formatRelativeTime)(a.updatedAt)]})]}),i&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(r.FileText,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:["+",a.subSpecsCount," files"]})]}),h&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(s.GitBranch,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:[a.relationships.dependsOn.length," deps"]})]})]}):(0,b.jsx)("span",{className:"invisible hidden md:inline",children:"No metadata"})}),a.tags&&a.tags.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 sm:gap-1.5 md:gap-2 md:justify-end md:shrink-0",children:a.tags.map(a=>(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs font-mono text-muted-foreground hover:text-foreground transition-colors h-5 sm:h-auto px-1.5 sm:px-2",children:a},a))})]})})]},a.id)})})}function G({specs:a,onStatusChange:e,pendingSpecIds:h,showArchived:i,onToggleArchived:j,getSpecUrl:k}){let[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)({}),r=(0,c.useMemo)(()=>D.map(b=>({status:b,config:C[b],specs:a.filter(a=>a.status===b)})),[a]),s=(0,c.useMemo)(()=>{let b=new Map;return a.forEach(a=>b.set(a.id,a)),b},[a]),t=(0,c.useCallback)((a,b)=>{b.dataTransfer.setData("text/plain",a),b.dataTransfer.effectAllowed="move",m(a)},[]),u=(0,c.useCallback)(()=>{m(null),o(null)},[]),x=(0,c.useCallback)((a,b)=>{l&&(b.preventDefault(),b.dataTransfer.dropEffect="move",o(a))},[l]),A=(0,c.useCallback)((a,b)=>{if(!l)return;let c=b.relatedTarget;c&&b.currentTarget.contains(c)||o(b=>b===a?null:b)},[l]),B=(0,c.useCallback)((a,b)=>{b.preventDefault();let c=b.dataTransfer.getData("text/plain")||l;if(!c)return void u();let d=s.get(c);d&&d.status!==a&&e(d,a),u()},[l,u,e,s]);return(0,b.jsx)("div",{className:"flex flex-col md:flex-row gap-3 sm:gap-4 md:gap-6 h-full pb-2 md:snap-x md:snap-mandatory overflow-y-auto md:overflow-y-hidden md:overflow-x-auto",children:r.map(a=>{let c=a.config.icon,e="archived"===a.status,m=p[a.status];return(0,b.jsxs)("div",{className:(0,z.cn)("flex flex-col flex-1 snap-start","h-auto md:h-full w-full md:w-auto flex-shrink-0",e&&!i?"md:w-12 md:sm:w-14 md:min-w-[3rem] md:sm:min-w-[3.5rem] flex-none":"md:min-w-[260px] md:sm:min-w-[280px] md:md:min-w-[300px]"),children:[(0,b.jsx)("div",{className:(0,z.cn)("flex-none mb-3 sm:mb-4 rounded-lg border-2 bg-background transition-all touch-manipulation",a.config.bgClass,a.config.borderClass,e?"cursor-pointer hover:opacity-80 active:opacity-70":"",e&&!i?"py-4 sm:py-6 px-1.5 sm:px-2":"p-2.5 sm:p-3","md:cursor-default cursor-pointer"),onClick:()=>{if(e)j();else{var b;window.innerWidth<768&&(b=a.status,q(a=>({...a,[b]:!a[b]})))}},children:(0,b.jsxs)("h2",{className:(0,z.cn)("text-base sm:text-lg font-semibold flex items-center gap-1.5 sm:gap-2",a.config.colorClass,e&&!i&&"flex-col text-xs sm:text-sm gap-2 sm:gap-3"),children:[(0,b.jsx)(c,{className:"h-4 w-4 sm:h-5 sm:w-5 flex-shrink-0"}),e&&!i?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"vertical-text text-xs sm:text-sm whitespace-nowrap",children:a.config.title}),(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1 sm:px-2 h-4 sm:h-5",children:a.specs.length})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"truncate flex-1",children:a.config.title}),(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1.5 sm:px-2 h-4 sm:h-5 flex-shrink-0",children:a.specs.length}),(0,b.jsx)("div",{className:"md:hidden ml-2 text-muted-foreground/50",children:m?(0,b.jsx)(w.ChevronRight,{className:"h-4 w-4"}):(0,b.jsx)(v.ChevronDown,{className:"h-4 w-4"})})]})]})}),(!e||i)&&!m&&(0,b.jsxs)("div",{className:(0,z.cn)("space-y-2 sm:space-y-2.5 md:space-y-3 flex-1 rounded-xl border border-transparent p-1 transition-colors overflow-y-auto min-h-0 scrollbar-thin",l&&"border-dashed border-muted-foreground/40",l&&n===a.status&&"bg-muted/40 border-primary/50"),onDragOver:b=>x(a.status,b),onDragLeave:b=>A(a.status,b),onDrop:b=>B(a.status,b),children:[a.specs.map(a=>{let c={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[a.priority]||"border-l-gray-300",e=!!h[a.id],i=k(a.specNumber||a.id);return(0,b.jsxs)(f.Card,{draggable:!e,onDragStart:b=>{e?b.preventDefault():t(a.id,b)},onDragEnd:u,"aria-disabled":e,className:(0,z.cn)("relative hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.02] active:scale-[0.99] border-l-4 cursor-pointer group flex flex-col touch-manipulation",c,e&&"opacity-60 cursor-wait"),onClick:()=>window.location.href=i,children:[e&&(0,b.jsx)("div",{className:"absolute inset-0 rounded-lg bg-background/80 flex items-center justify-center text-xs sm:text-sm font-medium z-10",children:"Updating..."}),(0,b.jsxs)(f.CardHeader,{className:"p-3 sm:p-4 pb-1.5 sm:pb-2 space-y-1 sm:space-y-1.5",children:[(0,b.jsx)("div",{className:"flex items-center justify-between",children:(0,b.jsx)("span",{className:"font-mono text-[10px] sm:text-xs text-muted-foreground/70 group-hover:text-primary/60 transition-colors",children:a.specNumber?`#${a.specNumber}`:""})}),(0,b.jsx)(d.default,{href:i,className:"block",children:(0,b.jsx)(f.CardTitle,{className:"text-xs sm:text-sm font-semibold leading-snug hover:text-primary transition-colors line-clamp-3",children:a.title||a.specName})})]}),(0,b.jsx)(f.CardContent,{className:"p-3 sm:p-4 pt-1.5 sm:pt-2 flex-1 flex flex-col justify-end",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3",children:[a.title&&a.title!==a.specName&&(0,b.jsx)("p",{className:"text-[10px] sm:text-xs font-mono text-muted-foreground truncate opacity-70",children:a.specName}),(0,b.jsxs)("div",{className:"flex items-center justify-between gap-1.5 sm:gap-2 pt-0.5 sm:pt-1",children:[a.priority?(0,b.jsx)(y.PriorityBadge,{priority:a.priority}):(0,b.jsx)("div",{}),a.tags&&a.tags.length>0&&(0,b.jsxs)("div",{className:"flex flex-wrap gap-0.5 sm:gap-1 justify-end",children:[a.tags.slice(0,2).map(a=>(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:a},a)),a.tags.length>2&&(0,b.jsxs)(g.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:["+",a.tags.length-2]})]})]})]})})]},a.id)}),0===a.specs.length&&(0,b.jsx)(f.Card,{className:"border-dashed border-gray-300 dark:border-gray-700 bg-transparent",children:(0,b.jsxs)(f.CardContent,{className:"py-6 sm:py-8 text-center px-2",children:[(0,b.jsx)(c,{className:(0,z.cn)("mx-auto h-6 w-6 sm:h-8 sm:w-8 mb-1.5 sm:mb-2",a.config.colorClass,"opacity-50")}),(0,b.jsx)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:"Drop here to move specs"})]})})]})]},a.status)})})}a.s(["SpecsClient",()=>E])}];
1
+ module.exports=[113142,a=>{"use strict";var b=a.i(40352),c=a.i(936883),d=a.i(920378),e=a.i(681612),f=a.i(980096),g=a.i(837717),h=a.i(406334),i=a.i(227725),j=a.i(915929),k=a.i(793090),l=a.i(800966),m=a.i(659358),n=a.i(297557),o=a.i(262936),p=a.i(307840),q=a.i(730702),r=a.i(615268),s=a.i(915970),t=a.i(404620),u=a.i(709211),v=a.i(633093),w=a.i(141270),x=a.i(882479),y=a.i(322570),z=a.i(687052),A=a.i(890075);a.i(294783);var B=a.i(156916);let C={planned:{icon:n.Clock,title:"Planned",colorClass:"text-blue-600 dark:text-blue-400",bgClass:"bg-blue-50 dark:bg-blue-900/20",borderClass:"border-blue-200 dark:border-blue-800"},"in-progress":{icon:m.PlayCircle,title:"In Progress",colorClass:"text-orange-600 dark:text-orange-400",bgClass:"bg-orange-50 dark:bg-orange-900/20",borderClass:"border-orange-200 dark:border-orange-800"},complete:{icon:l.CheckCircle2,title:"Complete",colorClass:"text-green-600 dark:text-green-400",bgClass:"bg-green-50 dark:bg-green-900/20",borderClass:"border-green-200 dark:border-green-800"},archived:{icon:o.Archive,title:"Archived",colorClass:"text-gray-600 dark:text-gray-400",bgClass:"bg-gray-50 dark:bg-gray-900/20",borderClass:"border-gray-200 dark:border-gray-800"}},D=["planned","in-progress","complete","archived"];function E({initialSpecs:a,projectId:d}){let f=(0,e.useSearchParams)(),g=(0,e.useRouter)(),l=(0,c.useCallback)(a=>d?`/projects/${d}/specs/${a}`:`/specs/${a}`,[d]),m=(0,c.useCallback)(()=>d?`/projects/${d}/specs`:"/specs",[d]),[n,o]=(0,c.useState)(a),[r,s]=(0,c.useState)({}),[v,w]=(0,c.useState)(""),[x,y]=(0,c.useState)("all"),[A,D]=(0,c.useState)("all"),[E,H]=(0,c.useState)("id-desc"),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(!1),[M,N]=(0,c.useState)(()=>{let a=f.get("view");return"board"===a||"list"===a?a:"list"}),O=(0,c.useRef)(!0);(0,c.useEffect)(()=>{o(a)},[a]);let P=(0,c.useCallback)(async(a,b)=>{if(a.status===b)return;let c=a.status;s(b=>({...b,[a.id]:!0})),o(c=>c.map(c=>c.id===a.id?{...c,status:b}:c));try{let c=d?`/api/projects/${d}/specs/${encodeURIComponent(a.specName)}/status`:`/api/specs/${encodeURIComponent(a.specName)}/status`,e=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:b})});if(!e.ok){let a=await e.text();throw Error(a||"Failed to update spec status")}let f=a.specNumber?`#${a.specNumber}`:a.specName;B.toast.success(`Moved ${f} to ${C[b].title}`)}catch(b){console.error("Failed to update spec status",b),o(b=>b.map(b=>b.id===a.id?{...b,status:c}:b)),B.toast.error("Unable to update status. Please try again.")}finally{s(b=>{let c={...b};return delete c[a.id],c})}},[d]);(0,c.useEffect)(()=>{"archived"===x&&"board"===M&&J(!0)},[x,M]),(0,c.useEffect)(()=>{if(O.current){O.current=!1;return}let a=new URLSearchParams(window.location.search);"board"===M?a.set("view","board"):a.delete("view");let b=a.toString(),c=b?`?${b}`:"";g.replace(`${m()}${c}`,{scroll:!1})},[M,g,m]);let Q=(0,c.useMemo)(()=>{let a=[...n.filter(a=>{let b=!v||a.title?.toLowerCase().includes(v.toLowerCase())||a.specName.toLowerCase().includes(v.toLowerCase())||a.tags?.some(a=>a.toLowerCase().includes(v.toLowerCase())),c="all"===x?"list"!==M||"archived"!==a.status:a.status===x,d="all"===A||a.priority===A;return b&&c&&d})];switch(E){case"id-desc":a.sort((a,b)=>(b.specNumber||0)-(a.specNumber||0));break;case"id-asc":a.sort((a,b)=>(a.specNumber||0)-(b.specNumber||0));break;case"updated-desc":a.sort((a,b)=>a.updatedAt?b.updatedAt?b.updatedAt.getTime()-a.updatedAt.getTime():-1:1);break;case"title-asc":a.sort((a,b)=>{let c=(a.title||a.specName).toLowerCase(),d=(b.title||b.specName).toLowerCase();return c.localeCompare(d)})}return a},[n,v,x,A,E,M]);return(0,b.jsx)("div",{className:"h-[calc(100vh-3.5rem)] flex flex-col overflow-hidden bg-background p-2 sm:p-4",children:(0,b.jsxs)("div",{className:(0,z.cn)("flex flex-col h-full mx-auto transition-all duration-300",K?"w-full":"max-w-7xl w-full"),children:[(0,b.jsx)("div",{className:"flex-none mb-3 sm:mb-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3 md:gap-4",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)("h1",{className:"text-lg sm:text-xl md:text-2xl font-bold tracking-tight truncate",children:"Specifications"}),(0,b.jsxs)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:[Q.length," specs"]})]}),(0,b.jsxs)("div",{className:"flex items-center gap-1.5 sm:gap-2 flex-shrink-0",children:[(0,b.jsxs)("div",{className:"flex items-center gap-0.5 sm:gap-1 bg-muted/50 p-0.5 sm:p-1 rounded-lg",children:[(0,b.jsxs)(i.Button,{variant:"list"===M?"secondary":"ghost",size:"sm",onClick:()=>N("list"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"List view",children:[(0,b.jsx)(q.List,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,b.jsx)("span",{className:"hidden lg:inline ml-2",children:"List"})]}),(0,b.jsxs)(i.Button,{variant:"board"===M?"secondary":"ghost",size:"sm",onClick:()=>N("board"),className:"h-7 sm:h-8 px-2 sm:px-3",title:"Board view",children:[(0,b.jsx)(p.LayoutGrid,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}),(0,b.jsx)("span",{className:"hidden lg:inline ml-2",children:"Board"})]})]}),(0,b.jsx)(i.Button,{variant:"ghost",size:"icon",onClick:()=>L(!K),className:"hidden md:flex h-8 w-8 sm:h-10 sm:w-10 text-muted-foreground hover:text-foreground",title:K?"Exit wide mode":"Enter wide mode",children:K?(0,b.jsx)(u.Minimize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"}):(0,b.jsx)(t.Maximize2,{className:"h-3.5 w-3.5 sm:h-4 sm:w-4"})})]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"relative w-full",children:[(0,b.jsx)(k.Search,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 sm:h-4 sm:w-4 text-muted-foreground pointer-events-none"}),(0,b.jsx)(h.Input,{placeholder:"Search specs...",value:v,onChange:a=>w(a.target.value),className:"pl-8 sm:pl-9 h-9 sm:h-10 w-full text-sm"})]}),(0,b.jsxs)("div",{className:"flex items-center gap-2 overflow-x-auto snap-x snap-mandatory pb-1 -mx-2 px-2 sm:mx-0 sm:px-0 sm:pb-0 scrollbar-thin",children:[(0,b.jsxs)(j.Select,{value:x,onValueChange:a=>y(a),children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Status"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"all",children:"All Status"}),(0,b.jsx)(j.SelectItem,{value:"planned",children:"Planned"}),(0,b.jsx)(j.SelectItem,{value:"in-progress",children:"In Progress"}),(0,b.jsx)(j.SelectItem,{value:"complete",children:"Complete"}),(0,b.jsx)(j.SelectItem,{value:"archived",children:"Archived"})]})]}),(0,b.jsxs)(j.Select,{value:A,onValueChange:D,children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[110px] sm:w-[130px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Priority"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"all",children:"All Priority"}),(0,b.jsx)(j.SelectItem,{value:"critical",children:"Critical"}),(0,b.jsx)(j.SelectItem,{value:"high",children:"High"}),(0,b.jsx)(j.SelectItem,{value:"medium",children:"Medium"}),(0,b.jsx)(j.SelectItem,{value:"low",children:"Low"})]})]}),(0,b.jsxs)(j.Select,{value:E,onValueChange:a=>H(a),children:[(0,b.jsx)(j.SelectTrigger,{className:"w-[130px] sm:w-[170px] h-9 sm:h-10 flex-shrink-0 snap-start text-xs sm:text-sm",children:(0,b.jsx)(j.SelectValue,{placeholder:"Sort by"})}),(0,b.jsxs)(j.SelectContent,{children:[(0,b.jsx)(j.SelectItem,{value:"id-desc",children:"Newest First"}),(0,b.jsx)(j.SelectItem,{value:"id-asc",children:"Oldest First"}),(0,b.jsx)(j.SelectItem,{value:"updated-desc",children:"Recently Updated"}),(0,b.jsx)(j.SelectItem,{value:"title-asc",children:"Title (A-Z)"})]})]})]})]})]})}),(0,b.jsx)("div",{className:(0,z.cn)("flex-1 min-h-0","board"===M?"overflow-x-auto overflow-y-hidden":"overflow-y-auto"),children:"list"===M?(0,b.jsx)("div",{className:"w-full",children:(0,b.jsx)(F,{specs:Q,getSpecUrl:l})}):(0,b.jsx)(G,{specs:Q,onStatusChange:P,pendingSpecIds:r,showArchived:I,onToggleArchived:()=>J(!I),getSpecUrl:l})})]})})}function F({specs:a,getSpecUrl:c}){return(0,b.jsx)("div",{className:"grid grid-cols-1 gap-2 sm:gap-3 md:gap-4 pb-2 sm:pb-4 md:pb-8",children:a.map(a=>{let e={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[a.priority]||"border-l-gray-300",h=a.relationships&&a.relationships.dependsOn.length>0,i=!!(a.subSpecsCount&&a.subSpecsCount>0),j=c(a.specNumber||a.id);return(0,b.jsxs)(f.Card,{className:(0,z.cn)("hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.01] active:scale-[0.99] border-l-4 cursor-pointer touch-manipulation",e),onClick:()=>window.location.href=j,children:[(0,b.jsx)(f.CardHeader,{className:"pb-2 sm:pb-2.5 md:pb-3 px-3 sm:px-4 md:px-6 pt-3 sm:pt-4 md:pt-6",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-start md:justify-between md:gap-4",children:[(0,b.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,b.jsx)(d.default,{href:j,children:(0,b.jsxs)(f.CardTitle,{className:"text-sm sm:text-base md:text-lg font-semibold hover:text-primary transition-colors flex items-start flex-wrap gap-1.5 sm:gap-2 leading-snug sm:leading-normal",children:[a.specNumber?(0,b.jsxs)("span",{className:"font-mono text-xs sm:text-sm md:text-base font-normal text-muted-foreground flex-shrink-0",children:["#",a.specNumber.toString().padStart(3,"0")]}):null,(0,b.jsx)("span",{className:"flex-1 break-words",children:a.title||a.specName})]})}),a.title&&a.title!==a.specName&&(0,b.jsx)("p",{className:"text-[11px] sm:text-xs font-mono text-muted-foreground mt-1 sm:mt-1.5 truncate",children:a.specName})]}),(0,b.jsxs)("div",{className:"flex gap-1.5 sm:gap-2 flex-wrap md:shrink-0",children:[a.status&&(0,b.jsx)(x.StatusBadge,{status:a.status}),a.priority&&(0,b.jsx)(y.PriorityBadge,{priority:a.priority})]})]})}),(0,b.jsx)(f.CardContent,{className:"px-3 sm:px-4 md:px-6 pb-2.5 sm:pb-3 md:pb-6 pt-0",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 md:flex-row md:items-center md:justify-between md:gap-4",children:[(0,b.jsx)("div",{className:"flex items-center gap-2 sm:gap-3 md:gap-4 text-[11px] sm:text-xs md:text-sm text-muted-foreground flex-wrap",children:a.updatedAt||i||h?(0,b.jsxs)(b.Fragment,{children:[a.updatedAt&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(n.Clock,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:["Updated ",(0,A.formatRelativeTime)(a.updatedAt)]})]}),i&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(r.FileText,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:["+",a.subSpecsCount," files"]})]}),h&&(0,b.jsxs)("div",{className:"flex items-center gap-1 sm:gap-1.5",children:[(0,b.jsx)(s.GitBranch,{className:"h-3 w-3 sm:h-3.5 sm:w-3.5 flex-shrink-0"}),(0,b.jsxs)("span",{className:"whitespace-nowrap",children:[a.relationships.dependsOn.length," deps"]})]})]}):(0,b.jsx)("span",{className:"invisible hidden md:inline",children:"No metadata"})}),a.tags&&a.tags.length>0&&(0,b.jsx)("div",{className:"flex flex-wrap gap-1 sm:gap-1.5 md:gap-2 md:justify-end md:shrink-0",children:a.tags.map(a=>(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs font-mono text-muted-foreground hover:text-foreground transition-colors h-5 sm:h-auto px-1.5 sm:px-2",children:a},a))})]})})]},a.id)})})}function G({specs:a,onStatusChange:e,pendingSpecIds:h,showArchived:i,onToggleArchived:j,getSpecUrl:k}){let[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(null),[p,q]=(0,c.useState)({}),r=(0,c.useMemo)(()=>D.map(b=>({status:b,config:C[b],specs:a.filter(a=>a.status===b)})),[a]),s=(0,c.useMemo)(()=>{let b=new Map;return a.forEach(a=>b.set(a.id,a)),b},[a]),t=(0,c.useCallback)((a,b)=>{b.dataTransfer.setData("text/plain",a),b.dataTransfer.effectAllowed="move",m(a)},[]),u=(0,c.useCallback)(()=>{m(null),o(null)},[]),x=(0,c.useCallback)((a,b)=>{l&&(b.preventDefault(),b.dataTransfer.dropEffect="move",o(a))},[l]),A=(0,c.useCallback)((a,b)=>{if(!l)return;let c=b.relatedTarget;c&&b.currentTarget.contains(c)||o(b=>b===a?null:b)},[l]),B=(0,c.useCallback)((a,b)=>{b.preventDefault();let c=b.dataTransfer.getData("text/plain")||l;if(!c)return void u();let d=s.get(c);d&&d.status!==a&&e(d,a),u()},[l,u,e,s]);return(0,b.jsx)("div",{className:"flex flex-col md:flex-row gap-3 sm:gap-4 md:gap-6 h-full pb-2 md:snap-x md:snap-mandatory overflow-y-auto md:overflow-y-hidden md:overflow-x-auto",children:r.map(a=>{let c=a.config.icon,e="archived"===a.status,m=p[a.status];return(0,b.jsxs)("div",{className:(0,z.cn)("flex flex-col flex-1 snap-start","h-auto md:h-full w-full md:w-auto flex-shrink-0",e&&!i?"md:w-12 md:sm:w-14 md:min-w-[3rem] md:sm:min-w-[3.5rem] flex-none":"md:min-w-[260px] md:sm:min-w-[280px] md:md:min-w-[300px]"),children:[(0,b.jsx)("div",{className:(0,z.cn)("flex-none mb-3 sm:mb-4 rounded-lg border-2 bg-background transition-all touch-manipulation",a.config.bgClass,a.config.borderClass,e?"cursor-pointer hover:opacity-80 active:opacity-70":"",e&&!i?"py-4 sm:py-6 px-1.5 sm:px-2":"p-2.5 sm:p-3","md:cursor-default cursor-pointer"),onClick:()=>{if(e)j();else{var b;window.innerWidth<768&&(b=a.status,q(a=>({...a,[b]:!a[b]})))}},children:(0,b.jsxs)("h2",{className:(0,z.cn)("text-base sm:text-lg font-semibold flex items-center gap-1.5 sm:gap-2",a.config.colorClass,e&&!i&&"flex-col text-xs sm:text-sm gap-2 sm:gap-3"),children:[(0,b.jsx)(c,{className:"h-4 w-4 sm:h-5 sm:w-5 flex-shrink-0"}),e&&!i?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"vertical-text text-xs sm:text-sm whitespace-nowrap",children:a.config.title}),(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1 sm:px-2 h-4 sm:h-5",children:a.specs.length})]}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"truncate flex-1",children:a.config.title}),(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[10px] sm:text-xs px-1.5 sm:px-2 h-4 sm:h-5 flex-shrink-0",children:a.specs.length}),(0,b.jsx)("div",{className:"md:hidden ml-2 text-muted-foreground/50",children:m?(0,b.jsx)(w.ChevronRight,{className:"h-4 w-4"}):(0,b.jsx)(v.ChevronDown,{className:"h-4 w-4"})})]})]})}),(!e||i)&&!m&&(0,b.jsxs)("div",{className:(0,z.cn)("space-y-2 sm:space-y-2.5 md:space-y-3 flex-1 rounded-xl border border-transparent p-1 transition-colors overflow-y-auto min-h-0 scrollbar-thin",l&&"border-dashed border-muted-foreground/40",l&&n===a.status&&"bg-muted/40 border-primary/50"),onDragOver:b=>x(a.status,b),onDragLeave:b=>A(a.status,b),onDrop:b=>B(a.status,b),children:[a.specs.map(a=>{let c={critical:"border-l-red-500",high:"border-l-orange-500",medium:"border-l-blue-500",low:"border-l-gray-400"}[a.priority]||"border-l-gray-300",e=!!h[a.id],i=k(a.specNumber||a.id);return(0,b.jsxs)(f.Card,{draggable:!e,onDragStart:b=>{e?b.preventDefault():t(a.id,b)},onDragEnd:u,"aria-disabled":e,className:(0,z.cn)("relative hover:shadow-lg active:shadow-xl transition-all duration-150 hover:scale-[1.02] active:scale-[0.99] border-l-4 cursor-pointer group flex flex-col touch-manipulation",c,e&&"opacity-60 cursor-wait"),onClick:()=>window.location.href=i,children:[e&&(0,b.jsx)("div",{className:"absolute inset-0 rounded-lg bg-background/80 flex items-center justify-center text-xs sm:text-sm font-medium z-10",children:"Updating..."}),(0,b.jsxs)(f.CardHeader,{className:"p-3 sm:p-4 pb-1.5 sm:pb-2 space-y-1 sm:space-y-1.5",children:[(0,b.jsx)("div",{className:"flex items-center justify-between",children:(0,b.jsx)("span",{className:"font-mono text-[10px] sm:text-xs text-muted-foreground/70 group-hover:text-primary/60 transition-colors",children:a.specNumber?`#${a.specNumber}`:""})}),(0,b.jsx)(d.default,{href:i,className:"block",children:(0,b.jsx)(f.CardTitle,{className:"text-xs sm:text-sm font-semibold leading-snug hover:text-primary transition-colors line-clamp-3",children:a.title||a.specName})})]}),(0,b.jsx)(f.CardContent,{className:"p-3 sm:p-4 pt-1.5 sm:pt-2 flex-1 flex flex-col justify-end",children:(0,b.jsxs)("div",{className:"flex flex-col gap-2 sm:gap-3",children:[a.title&&a.title!==a.specName&&(0,b.jsx)("p",{className:"text-[10px] sm:text-xs font-mono text-muted-foreground truncate opacity-70",children:a.specName}),(0,b.jsxs)("div",{className:"flex items-center justify-between gap-1.5 sm:gap-2 pt-0.5 sm:pt-1",children:[a.priority?(0,b.jsx)(y.PriorityBadge,{priority:a.priority}):(0,b.jsx)("div",{}),a.tags&&a.tags.length>0&&(0,b.jsxs)("div",{className:"flex flex-wrap gap-0.5 sm:gap-1 justify-end",children:[a.tags.slice(0,2).map(a=>(0,b.jsx)(g.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:a},a)),a.tags.length>2&&(0,b.jsxs)(g.Badge,{variant:"outline",className:"text-[9px] sm:text-[10px] px-1 sm:px-1.5 h-4 sm:h-5 font-mono text-muted-foreground/80",children:["+",a.tags.length-2]})]})]})]})})]},a.id)}),0===a.specs.length&&(0,b.jsx)(f.Card,{className:"border-dashed border-gray-300 dark:border-gray-700 bg-transparent",children:(0,b.jsxs)(f.CardContent,{className:"py-6 sm:py-8 text-center px-2",children:[(0,b.jsx)(c,{className:(0,z.cn)("mx-auto h-6 w-6 sm:h-8 sm:w-8 mb-1.5 sm:mb-2",a.config.colorClass,"opacity-50")}),(0,b.jsx)("p",{className:"text-xs sm:text-sm text-muted-foreground",children:"Drop here to move specs"})]})})]})]},a.status)})})}a.s(["SpecsClient",()=>E])}];
2
2
 
3
3
  //# sourceMappingURL=packages_ui_src_app_specs_specs-client_tsx_0bb8f8f8._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[599302,a=>{"use strict";let b;var c=a.i(40352),d=a.i(936883),e=a.i(558285),f=a.i(681612),g=a.i(836180);a.s(["ERROR_REVALIDATE_EVENT",()=>3,"FOCUS_EVENT",()=>0,"MUTATE_EVENT",()=>2,"RECONNECT_EVENT",()=>1],869111);var h=Object.prototype.hasOwnProperty;let i=new WeakMap,j=()=>{},k=j(),l=Object,m=a=>a===k,n=(a,b)=>({...a,...b}),o={},p={},q="undefined",r=typeof document!=q,s=!1,t=(a,b)=>{let c=i.get(a);return[()=>!m(b)&&a.get(b)||o,d=>{if(!m(b)){let e=a.get(b);b in p||(p[b]=e),c[5](b,n(e,d),e||o)}},c[6],()=>!m(b)&&b in p?p[b]:!m(b)&&a.get(b)||o]},u=!0,[v,w]=[j,j],x={initFocus:a=>(r&&document.addEventListener("visibilitychange",a),v("focus",a),()=>{r&&document.removeEventListener("visibilitychange",a),w("focus",a)}),initReconnect:a=>{let b=()=>{u=!0,a()},c=()=>{u=!1};return v("online",b),v("offline",c),()=>{w("online",b),w("offline",c)}}},y=!d.default.useId,z=!0,A=d.useEffect,B="undefined"!=typeof navigator&&navigator.connection;!z&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData);let C=new WeakMap,D=(a,b)=>a===`[object ${b}]`,E=0,F=a=>{let b,c,d=typeof a,e=l.prototype.toString.call(a),f=D(e,"Date"),g=D(e,"RegExp"),h=D(e,"Object");if(l(a)!==a||f||g)b=f?a.toJSON():"symbol"==d?a.toString():"string"==d?JSON.stringify(a):""+a;else{if(b=C.get(a))return b;if(b=++E+"~",C.set(a,b),Array.isArray(a)){for(c=0,b="@";c<a.length;c++)b+=F(a[c])+",";C.set(a,b)}if(h){b="#";let d=l.keys(a).sort();for(;!m(c=d.pop());)m(a[c])||(b+=c+":"+F(a[c])+",");C.set(a,b)}}return b},G=a=>{if("function"==typeof a)try{a=a()}catch(b){a=""}let b=a;return[a="string"==typeof a?a:(Array.isArray(a)?a.length:a)?F(a):"",b]},H=0,I=()=>++H;async function J(...a){let[b,c,d,e]=a,f=n({populateCache:!0,throwOnError:!0},"boolean"==typeof e?{revalidate:e}:e||{}),g=f.populateCache,h=f.rollbackOnError,j=f.optimisticData,l=f.throwOnError;if("function"==typeof c){let a=[];for(let d of b.keys())!/^\$(inf|sub)\$/.test(d)&&c(b.get(d)._k)&&a.push(d);return Promise.all(a.map(o))}return o(c);async function o(c){let e,[n]=G(c);if(!n)return;let[o,p]=t(b,n),[q,r,s,u]=i.get(b),v=()=>{let a=q[n];return("function"==typeof f.revalidate?f.revalidate(o().data,c):!1!==f.revalidate)&&(delete s[n],delete u[n],a&&a[0])?a[0](2).then(()=>o().data):o().data};if(a.length<3)return v();let w=d,x=!1,y=I();r[n]=[y,0];let z=!m(j),A=o(),B=A.data,C=A._c,D=m(C)?B:C;if(z&&p({data:j="function"==typeof j?j(D,B):j,_c:D}),"function"==typeof w)try{w=w(D)}catch(a){e=a,x=!0}if(w&&"function"==typeof w.then){let a;if(w=await w.catch(a=>{e=a,x=!0}),y!==r[n][0]){if(x)throw e;return w}x&&z&&(a=e,"function"==typeof h?h(a):!1!==h)&&(g=!0,p({data:D,_c:k}))}if(g&&!x&&("function"==typeof g?p({data:g(w,D),error:k,_c:k}):p({data:w,error:k,_c:k})),r[n][1]=I(),Promise.resolve(v()).then(()=>{p({_c:k})}),x){if(l)throw e;return}return w}}let K=(a,b)=>{if(!i.has(a)){n(x,b);let c=Object.create(null),d=J.bind(k,a),e=Object.create(null),f=(a,b)=>{let c=e[a]||[];return e[a]=c,c.push(b),()=>c.splice(c.indexOf(b),1)},g=(b,c,d)=>{a.set(b,c);let f=e[b];if(f)for(let a of f)a(c,d)},h=()=>{i.has(a)||i.set(a,[c,Object.create(null),Object.create(null),Object.create(null),d,g,f])};return h(),[a,d,h,j]}return[a,i.get(a)[4]]},[L,M]=K(new Map),N=n({onLoadingSlow:j,onSuccess:j,onError:j,onErrorRetry:(a,b,c,d,e)=>{let f=c.errorRetryCount,g=e.retryCount,h=~~((Math.random()+.5)*(1<<(g<8?g:8)))*c.errorRetryInterval;(m(f)||!(g>f))&&setTimeout(d,h,e)},onDiscarded:j,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:3e3,compare:function a(b,c){var d,e;if(b===c)return!0;if(b&&c&&(d=b.constructor)===c.constructor){if(d===Date)return b.getTime()===c.getTime();if(d===RegExp)return b.toString()===c.toString();if(d===Array){if((e=b.length)===c.length)for(;e--&&a(b[e],c[e]););return -1===e}if(!d||"object"==typeof b){for(d in e=0,b)if(h.call(b,d)&&++e&&!h.call(c,d)||!(d in c)||!a(b[d],c[d]))return!1;return Object.keys(c).length===e}}return b!=b&&c!=c},isPaused:()=>!1,cache:L,mutate:M,fallback:{}},{isOnline:()=>u,isVisible:()=>{let a=r&&document.visibilityState;return m(a)||"hidden"!==a}}),O=(a,b)=>{let c=n(a,b);if(b){let{use:d,fallback:e}=a,{use:f,fallback:g}=b;d&&f&&(c.use=d.concat(f)),e&&g&&(c.fallback=n(e,g))}return c},P=(0,d.createContext)({});var Q=a.i(869111);let R=!1,S=(R?window.__SWR_DEVTOOLS_USE__:[]).concat(a=>(b,c,d)=>{let e=c&&((...a)=>{let[d]=G(b),[,,,e]=i.get(L);if(d.startsWith("$inf$"))return c(...a);let f=e[d];return m(f)?c(...a):(delete e[d],f)});return a(b,e,d)});R&&(window.__SWR_DEVTOOLS_REACT__=d.default);let T=()=>{},U=T(),V=(new WeakMap,d.default.use||(a=>{switch(a.status){case"pending":throw a;case"fulfilled":return a.value;case"rejected":throw a.reason;default:throw a.status="pending",a.then(b=>{a.status="fulfilled",a.value=b},b=>{a.status="rejected",a.reason=b}),a}})),W={dedupe:!0},X=Promise.resolve(k);l.defineProperty(a=>{let{value:b}=a,c=(0,d.useContext)(P),e="function"==typeof b,f=(0,d.useMemo)(()=>e?b(c):b,[e,c,b]),g=(0,d.useMemo)(()=>e?f:O(c,f),[e,c,f]),h=f&&f.provider,i=(0,d.useRef)(k);h&&!i.current&&(i.current=K(h(g.cache||L),f));let j=i.current;return j&&(g.cache=j[0],g.mutate=j[1]),A(()=>{if(j)return j[2]&&j[2](),j[3]},[]),(0,d.createElement)(P.Provider,n(a,{value:g}))},"defaultValue",{value:N});let Y=(b=(a,b,c)=>{let{cache:e,compare:f,suspense:h,fallbackData:j,revalidateOnMount:l,revalidateIfStale:o,refreshInterval:p,refreshWhenHidden:q,refreshWhenOffline:r,keepPreviousData:s}=c,[u,v,w,x]=i.get(e),[B,C]=G(a),D=(0,d.useRef)(!1),E=(0,d.useRef)(!1),F=(0,d.useRef)(B),H=(0,d.useRef)(b),K=(0,d.useRef)(c),L=()=>K.current.isVisible()&&K.current.isOnline(),[M,N,O,P]=t(e,B),R=(0,d.useRef)({}).current,S=m(j)?m(c.fallback)?k:c.fallback[B]:j,T=(a,b)=>{for(let c in R)if("data"===c){if(!f(a[c],b[c])&&(!m(a[c])||!f(ad,b[c])))return!1}else if(b[c]!==a[c])return!1;return!0},U=(0,d.useMemo)(()=>{let a=!!B&&!!b&&(m(l)?!K.current.isPaused()&&!h&&!1!==o:l),c=b=>{let c=n(b);return(delete c._k,a)?{isValidating:!0,isLoading:!0,...c}:c},d=M(),e=P(),f=c(d),g=d===e?f:c(e),i=f;return[()=>{let a=c(M());return T(a,i)?(i.data=a.data,i.isLoading=a.isLoading,i.isValidating=a.isValidating,i.error=a.error,i):(i=a,a)},()=>g]},[e,B]),Y=(0,g.useSyncExternalStore)((0,d.useCallback)(a=>O(B,(b,c)=>{T(c,b)||a()}),[e,B]),U[0],U[1]),Z=!D.current,$=u[B]&&u[B].length>0,_=Y.data,aa=m(_)?S&&"function"==typeof S.then?V(S):S:_,ab=Y.error,ac=(0,d.useRef)(aa),ad=s?m(_)?m(ac.current)?aa:ac.current:_:aa,ae=(!$||!!m(ab))&&(Z&&!m(l)?l:!K.current.isPaused()&&(h?!m(aa)&&o:m(aa)||o)),af=!!(B&&b&&Z&&ae),ag=m(Y.isValidating)?af:Y.isValidating,ah=m(Y.isLoading)?af:Y.isLoading,ai=(0,d.useCallback)(async a=>{let b,d,e=H.current;if(!B||!e||E.current||K.current.isPaused())return!1;let g=!0,h=a||{},i=!w[B]||!h.dedupe,j=()=>y?!E.current&&B===F.current&&D.current:B===F.current,l={isValidating:!1,isLoading:!1},n=()=>{N(l)},o=()=>{let a=w[B];a&&a[1]===d&&delete w[B]},p={isValidating:!0};m(M().data)&&(p.isLoading=!0);try{if(i&&(N(p),c.loadingTimeout&&m(M().data)&&setTimeout(()=>{g&&j()&&K.current.onLoadingSlow(B,c)},c.loadingTimeout),w[B]=[e(C),I()]),[b,d]=w[B],b=await b,i&&setTimeout(o,c.dedupingInterval),!w[B]||w[B][1]!==d)return i&&j()&&K.current.onDiscarded(B),!1;l.error=k;let a=v[B];if(!m(a)&&(d<=a[0]||d<=a[1]||0===a[1]))return n(),i&&j()&&K.current.onDiscarded(B),!1;let h=M().data;l.data=f(h,b)?h:b,i&&j()&&K.current.onSuccess(b,B,c)}catch(c){o();let a=K.current,{shouldRetryOnError:b}=a;!a.isPaused()&&(l.error=c,i&&j())&&(a.onError(c,B,a),(!0===b||"function"==typeof b&&b(c))&&(!K.current.revalidateOnFocus||!K.current.revalidateOnReconnect||L())&&a.onErrorRetry(c,B,a,a=>{let b=u[B];b&&b[0]&&b[0](Q.ERROR_REVALIDATE_EVENT,a)},{retryCount:(h.retryCount||0)+1,dedupe:!0}))}return g=!1,n(),!0},[B,e]),aj=(0,d.useCallback)((...a)=>J(e,F.current,...a),[]);if(A(()=>{H.current=b,K.current=c,m(_)||(ac.current=_)}),A(()=>{var a;let b;if(!B)return;let c=ai.bind(k,W),d=0;K.current.revalidateOnFocus&&(d=Date.now()+K.current.focusThrottleInterval);let e=(a=(a,b={})=>{if(a==Q.FOCUS_EVENT){let a=Date.now();K.current.revalidateOnFocus&&a>d&&L()&&(d=a+K.current.focusThrottleInterval,c())}else if(a==Q.RECONNECT_EVENT)K.current.revalidateOnReconnect&&L()&&c();else if(a==Q.MUTATE_EVENT)return ai();else if(a==Q.ERROR_REVALIDATE_EVENT)return ai(b)},(b=u[B]||(u[B]=[])).push(a),()=>{let c=b.indexOf(a);c>=0&&(b[c]=b[b.length-1],b.pop())});if(E.current=!1,F.current=B,D.current=!0,N({_k:C}),ae&&!w[B])if(m(aa)||z)c();else setTimeout(c,1);return()=>{E.current=!0,e()}},[B]),A(()=>{let a;function b(){let b="function"==typeof p?p(M().data):p;b&&-1!==a&&(a=setTimeout(c,b))}function c(){!M().error&&(q||K.current.isVisible())&&(r||K.current.isOnline())?ai(W).then(b):b()}return b(),()=>{a&&(clearTimeout(a),a=-1)}},[p,q,r,B]),(0,d.useDebugValue)(ad),h){let a=B&&m(aa);if(!y&&z&&a)throw Error("Fallback data is required when using Suspense in SSR.");a&&(H.current=b,K.current=c,E.current=!1);let d=x[B];if(V(!m(d)&&a?aj(d):X),!m(ab)&&a)throw ab;let e=a?ai(W):X;!m(ad)&&a&&(e.status="fulfilled",e.value=!0),V(e)}return{mutate:aj,get data(){return R.data=!0,ad},get error(){return R.error=!0,ab},get isValidating(){return R.isValidating=!0,ag},get isLoading(){return R.isLoading=!0,ah}}},function(...a){let c,e=(c=(0,d.useContext)(P),(0,d.useMemo)(()=>n(N,c),[c])),[f,g,h]="function"==typeof a[1]?[a[0],a[1],a[2]||{}]:[a[0],null,(null===a[1]?a[2]:a[1])||{}],i=O(e,h),j=b,{use:k}=i,l=(k||[]).concat(S);for(let a=l.length;a--;)j=l[a](j);return j(f,g||i.fetcher||null,i)});var Z=a.i(459500),$=a.i(316828),_=a.i(312750),aa=a.i(524172),ab=a.i(837717),ac=a.i(227725),ad=a.i(297557),ae=a.i(659358),af=a.i(800966),ag=a.i(262936),ah=a.i(532418),ai=a.i(890075),aj=a.i(687052);function ak({createdAt:a,updatedAt:b,completedAt:d,status:e,className:f}){let g=[];return(a&&g.push({label:"Created",date:a,isActive:!0,isFuture:!1,icon:ad.Clock,color:"text-blue-600"}),"in-progress"===e||"complete"===e||"archived"===e?g.push({label:"In Progress",date:b||a,isActive:!0,isFuture:!1,icon:ae.PlayCircle,color:"text-orange-600"}):g.push({label:"In Progress",date:null,isActive:!1,isFuture:!0,icon:ah.Circle,color:"text-muted-foreground"}),"complete"===e||"archived"===e?g.push({label:"Complete",date:d||b,isActive:!0,isFuture:!1,icon:af.CheckCircle2,color:"text-green-600"}):g.push({label:"Complete",date:null,isActive:!1,isFuture:!0,icon:ah.Circle,color:"text-muted-foreground"}),"archived"===e&&g.push({label:"Archived",date:b,isActive:!0,isFuture:!1,icon:ag.Archive,color:"text-gray-600"}),0===g.length)?null:(0,c.jsx)("div",{className:(0,aj.cn)("flex items-start gap-2",f),children:g.map((a,b)=>{let d=a.icon,e=b===g.length-1,f=e?null:g[b+1],h=a.date&&f?.date&&!f.isFuture?(0,ai.formatDuration)(a.date,f.date):"";return(0,c.jsxs)("div",{className:"flex items-center gap-2 flex-1",children:[(0,c.jsxs)("div",{className:"flex flex-col items-center gap-1 min-w-0",children:[(0,c.jsx)("div",{className:(0,aj.cn)("w-8 h-8 rounded-full border-2 bg-background flex items-center justify-center shrink-0",a.isActive&&!a.isFuture?"border-primary":"border-muted-foreground/40"),children:d&&(0,c.jsx)(d,{className:(0,aj.cn)("h-4 w-4",a.isActive&&!a.isFuture?"text-primary":"text-muted-foreground/60")})}),(0,c.jsx)("div",{className:(0,aj.cn)("text-xs font-medium text-center whitespace-nowrap",a.isActive&&!a.isFuture?"text-foreground":"text-muted-foreground"),children:a.label}),(0,c.jsxs)("div",{className:"text-[10px] text-center min-h-[14px]",children:[a.date&&!a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground",children:(0,ai.formatRelativeTime)(a.date)}),!a.date&&a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/70",children:"Awaiting start"}),a.date&&a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/70",children:"Queued"}),!a.date&&!a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/60",children:"Pending update"})]})]}),!e&&(0,c.jsxs)("div",{className:"flex flex-col items-center flex-1 min-w-4 gap-0.5",children:[(0,c.jsx)("div",{className:(0,aj.cn)("h-0.5 w-full",a.isActive&&!a.isFuture?"bg-primary":"bg-muted-foreground/40")}),h&&(0,c.jsx)("div",{className:"text-[10px] text-muted-foreground font-medium whitespace-nowrap",children:h})]})]},b)})})}var al=a.i(882479),am=a.i(322570),an=a.i(920378);function ao({href:a,children:b,currentSpecNumber:d,projectId:e,...f}){if(!a)return(0,c.jsx)("a",{...f,children:b});let g=function(a,b,c){if(a.startsWith("#")||a.startsWith("http://")||a.startsWith("https://"))return a;let d=(a,b)=>{let d=c?`/projects/${c}/specs/${a}`:`/specs/${a}`;return b?`${d}?subspec=${b}`:d},e=a.match(/^\.\/([^/]+\.md)$/);if(e&&b){let a=e[1];return"README.md"!==a?d(b,a):d(b)}let f=a.match(/^\.\.\/(\d+)-[^/]+\/?([^/]+\.md)?$/);if(f){let a=parseInt(f[1],10),b=f[2];return b&&"README.md"!==b?d(a,b):d(a)}return a}(a,d,e),h=g.startsWith("http://")||g.startsWith("https://"),i=g.startsWith("#");return h||i?(0,c.jsx)("a",{href:g,...f,target:h?"_blank":void 0,rel:h?"noopener noreferrer":void 0,children:b}):(0,c.jsx)(an.default,{href:g,...f,className:"text-primary hover:underline",children:b})}var ap=a.i(87140),aq=a.i(731751),ar=a.i(183214),as=a.i(398293),at=a.i(231008),au=a.i(53897),av=a.i(669153);let aw="#f59e0b",ax="#ef4444",ay={current:"border-primary/70 bg-primary/5 text-foreground",precedence:"border-amber-400/70 bg-amber-400/10 text-amber-900 dark:text-amber-200","required-by":"border-red-400/70 bg-red-400/10 text-red-900 dark:text-red-200"},az={rankdir:"LR",align:"UL",nodesep:60,ranksep:120,marginx:40,marginy:40},aA=d.memo(function({data:a}){return(0,c.jsxs)("div",{className:(0,aj.cn)("flex w-[280px] flex-col gap-1.5 rounded-xl border-2 px-5 py-4 text-base shadow-md transition-colors",ay[a.tone],a.interactive&&"cursor-pointer hover:border-primary/70 hover:shadow-lg"),children:[(0,c.jsx)(av.Handle,{type:"target",position:av.Position.Left,className:"opacity-0"}),(0,c.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground/70",children:a.badge}),(0,c.jsx)("span",{className:"text-base font-semibold leading-snug",children:a.label}),a.subtitle&&(0,c.jsx)("span",{className:"text-sm text-muted-foreground/80",children:a.subtitle}),(0,c.jsx)(av.Handle,{type:"source",position:av.Position.Right,className:"opacity-0"})]})});aA.displayName="SpecNode";let aB={specNode:aA};function aC(a){let b=a.trim();if(!b)return"Unknown Spec";let c=b.match(/^(\d+)[-_]?(.*)$/);if(!c)return b;let d=c[1].padStart(3,"0"),e=c[2]?.replace(/[-_]/g," ").trim();return e?`#${d} ${e}`:`#${d}`}function aD(a,b){let c=a.trim(),d=c.match(/^(\d+)/),e=d?parseInt(d[1],10):c;return b?`/projects/${b}/specs/${e}`:`/specs/${e}`}function aE(a,b,c){return`${a}-${c}-${b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-")||c}`}function aF({relationships:a,specNumber:b,specTitle:e,projectId:g}){let h=(0,f.useRouter)(),[i,j]=d.useState(null),k=d.useMemo(()=>{let c,d,f,h;return c=[],d=[],f={id:"current-spec",type:"specNode",data:{label:b?`#${b.toString().padStart(3,"0")} ${e}`:e,badge:"Current Spec",subtitle:"This spec",tone:"current",interactive:!1},position:{x:0,y:0},draggable:!1,selectable:!1,sourcePosition:av.Position.Right,targetPosition:av.Position.Left},c.push(f),a.dependsOn?.forEach((a,b)=>{let e=aE("precedence",a,b);c.push({id:e,type:"specNode",data:{label:aC(a),badge:"Depends On",subtitle:"Must complete first",tone:"precedence",href:aD(a,g),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:av.Position.Right,targetPosition:av.Position.Left}),d.push({id:`edge-${e}-current`,source:e,target:f.id,type:"smoothstep",markerEnd:{type:av.MarkerType.ArrowClosed,color:aw,width:28,height:28},style:{stroke:aw,strokeWidth:3}})}),a.requiredBy?.forEach((a,b)=>{let e=aE("required-by",a,b);c.push({id:e,type:"specNode",data:{label:aC(a),badge:"Required By",subtitle:"Blocked by this spec",tone:"required-by",href:aD(a,g),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:av.Position.Right,targetPosition:av.Position.Left}),d.push({id:`edge-current-${e}`,source:f.id,target:e,type:"smoothstep",markerEnd:{type:av.MarkerType.ArrowClosed,color:ax,width:28,height:28},style:{stroke:ax,strokeWidth:3}})}),(h=new ar.default.graphlib.Graph).setGraph(az),h.setDefaultEdgeLabel(()=>({})),c.forEach(a=>{h.setNode(a.id,{width:280,height:110})}),d.forEach(a=>{h.setEdge(a.source,a.target)}),ar.default.layout(h),{nodes:c.map(a=>{let{x:b,y:c}=h.node(a.id);return{...a,position:{x:b-140,y:c-55}}}),edges:d}},[a,b,e,g]),l=d.useCallback(a=>{j(a),requestAnimationFrame(()=>{a.fitView({padding:.4,duration:350})})},[]);d.useEffect(()=>{i&&i.fitView({padding:.4,duration:350})},[i,k.nodes]);let m=d.useCallback((a,b)=>{!b?.data||b.data.href&&h.push(b.data.href)},[h]);return(0,c.jsxs)("div",{className:"flex h-full flex-col gap-4",children:[(0,c.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 text-sm text-muted-foreground",children:[(0,c.jsxs)("div",{children:[(0,c.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wide",children:"Dependency Map"}),(0,c.jsx)("p",{className:"text-base text-foreground",children:"Explore precedence and connected work"})]}),(0,c.jsx)("div",{className:"rounded-full border border-border px-3 py-1.5 text-sm font-medium uppercase tracking-wide",children:"React Flow DAG"})]}),(0,c.jsx)("div",{className:"flex-1 overflow-hidden rounded-2xl border border-border bg-muted/30",children:(0,c.jsxs)(as.default,{nodes:k.nodes,edges:k.edges,nodeTypes:aB,onInit:l,className:"h-full w-full",fitView:!0,proOptions:{hideAttribution:!0},nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,panOnScroll:!0,panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,minZoom:.4,maxZoom:1.6,onNodeClick:m,children:[(0,c.jsx)(at.Background,{gap:24,size:1,color:"rgba(148, 163, 184, 0.3)"}),(0,c.jsx)(au.Controls,{showInteractive:!1})]})}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-4 text-sm text-muted-foreground",children:[(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-amber-400/80"}),"Depends On → blocks until complete"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-red-400/80"}),"Required By ← blocked by this spec"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-sky-400/80"}),"Related ↔ connected work (bidirectional)"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-primary/60"}),"Drag to pan • Scroll / pinch to zoom."]})]})]})}var aG=a.i(228e3),aH=a.i(186945),aI=a.i(72245),aJ=a.i(615268),aK=a.i(863535);let aL=(0,aK.default)("palette",[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]]),aM=(0,aK.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]),aN=(0,aK.default)("test-tube",[["path",{d:"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2",key:"125lnx"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M14.5 16h-5",key:"1ox875"}]]),aO=(0,aK.default)("square-check-big",[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]),aP=(0,aK.default)("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]),aQ=(0,aK.default)("map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]]);var aR=a.i(915970),aS=a.i(476011),aT=a.i(418419),aU=a.i(404620),aV=a.i(709211),aW=a.i(730702),aX=a.i(475661),aY=a.i(386868);let aZ=()=>a=>{(0,aY.visit)(a,"html",a=>{"string"==typeof a.value&&a.value.trim().startsWith("<!--")&&(a.value="")})},a$={FileText:aJ.FileText,Palette:aL,Code:aM,TestTube:aN,CheckSquare:aO,Wrench:aP,Map:aQ,GitBranch:aR.GitBranch,Home:aS.Home,TrendingUp:aT.TrendingUp},a_=a=>fetch(a).then(a=>{if(!a.ok)throw Error(`HTTP error! status: ${a.status}`);return a.json()});function a0({initialSpec:a,initialSubSpec:b,isFocusMode:e=!1,onToggleFocusMode:g}){let h=(0,f.useRouter)(),i=(0,f.useSearchParams)().get("subspec")||b,[j,k]=d.useState(!1),[l,m]=d.useState(!1),{getSpecUrl:n,projectId:o}=(0,aI.useProjectUrl)(),p=o?`/api/projects/${o}/specs/${a.specNumber||a.id}`:`/api/specs/${a.specNumber||a.id}`,q=o?`/api/projects/${o}/specs/${a.specNumber||a.id}/dependency-graph`:`/api/specs/${a.specNumber||a.id}/dependency-graph`,{data:r,error:s,isLoading:t}=Y(p,a_,{fallbackData:{spec:a},revalidateOnFocus:!1,dedupingInterval:5e3}),{data:u}=Y(l?q:null,a_,{revalidateOnFocus:!1,dedupingInterval:6e4}),v=r?.spec||a,w=d.useMemo(()=>v.tags||[],[v.tags]),x=v.updatedAt?(0,ai.formatRelativeTime)(v.updatedAt):"N/A",y=v.relationships,z=u?{dependsOn:u.dependsOn.map(a=>a.specName),requiredBy:u.requiredBy.map(a=>a.specName)}:y,A=!!(y&&((y.dependsOn?.length??0)>0||(y.requiredBy?.length??0)>0));d.useEffect(()=>{A||m(!1)},[A]);let B=(0,aj.extractH1Title)(v.contentMd)||v.title||v.specName,C=v.contentMd;if(i&&v.subSpecs){let a=v.subSpecs.find(a=>a.file===i);a&&(C=a.content)}let D=a=>a?new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):"N/A",E=a=>{let b=a?n(v.specNumber||v.id,a):n(v.specNumber||v.id);h.push(b,{scroll:!1})},F=d.useRef(null);return d.useEffect(()=>{let a=()=>{let a=56;window.innerWidth>=1024&&F.current&&(a+=F.current.offsetHeight-56),document.documentElement.style.scrollPaddingTop=`${a}px`};a(),window.addEventListener("resize",a);let b=new ResizeObserver(a);return F.current&&b.observe(F.current),()=>{window.removeEventListener("resize",a),b.disconnect(),document.documentElement.style.scrollPaddingTop=""}},[v,w]),(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("header",{ref:F,className:"lg:sticky lg:top-14 lg:z-20 border-b bg-card",children:[(0,c.jsx)("div",{className:(0,aj.cn)("px-3 sm:px-6",e?"py-1.5":"py-2 sm:py-3"),children:e?(0,c.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,c.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,c.jsxs)("h1",{className:"text-base font-semibold tracking-tight truncate",children:[v.specNumber&&(0,c.jsxs)("span",{className:"text-muted-foreground",children:["#",v.specNumber.toString().padStart(3,"0")," "]}),B]}),(0,c.jsx)(al.StatusBadge,{status:v.status||"planned"}),(0,c.jsx)(am.PriorityBadge,{priority:v.priority||"medium"})]}),(0,c.jsx)(ac.Button,{type:"button",variant:"ghost",size:"sm",onClick:g,className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground shrink-0",title:"Exit focus mode",children:(0,c.jsx)(aV.Minimize2,{className:"h-4 w-4"})})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{className:"flex items-start justify-between gap-2 mb-1.5 sm:mb-2",children:[(0,c.jsxs)("h1",{className:"text-lg sm:text-xl font-bold tracking-tight",children:[v.specNumber&&(0,c.jsxs)("span",{className:"text-muted-foreground",children:["#",v.specNumber.toString().padStart(3,"0")," "]}),B]}),(0,c.jsxs)(ac.Button,{variant:"ghost",size:"icon",className:"lg:hidden h-8 w-8 -mr-2 shrink-0 text-muted-foreground",onClick:()=>{},children:[(0,c.jsx)(aW.List,{className:"h-5 w-5"}),(0,c.jsx)("span",{className:"sr-only",children:"Toggle specs list"})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(al.StatusBadge,{status:v.status||"planned"}),(0,c.jsx)(am.PriorityBadge,{priority:v.priority||"medium"}),w.length>0&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("div",{className:"h-4 w-px bg-border mx-1 hidden sm:block"}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-1",children:[w.slice(0,5).map(a=>(0,c.jsx)(ab.Badge,{variant:"secondary",className:"text-xs",children:a},a)),w.length>5&&(0,c.jsxs)(ab.Badge,{variant:"secondary",className:"text-xs",children:["+",w.length-5," more"]})]})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-2 sm:gap-4 text-xs text-muted-foreground mt-1.5 sm:mt-2",children:[(0,c.jsxs)("span",{className:"hidden sm:inline",children:["Created: ",D(v.createdAt)]}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{children:["Updated: ",D(v.updatedAt),v.updatedAt&&(0,c.jsxs)("span",{className:"ml-1 text-[11px] text-muted-foreground/80",children:["(",x,")"]})]}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{className:"hidden md:inline",children:["Name: ",v.specName]}),v.assignee&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{className:"hidden sm:inline",children:["Assignee: ",v.assignee]})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[(0,c.jsxs)(aH.Dialog,{open:j,onOpenChange:k,children:[(0,c.jsxs)(ac.Button,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":j,onClick:()=>k(!0),className:"h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[(0,c.jsx)(ad.Clock,{className:"mr-1.5 h-3.5 w-3.5"}),"View Timeline",(0,c.jsx)(aU.Maximize2,{className:"ml-1.5 h-3.5 w-3.5"})]}),(0,c.jsxs)(aH.DialogContent,{className:"w-[min(900px,90vw)] max-w-3xl max-h-[90vh] overflow-y-auto",children:[(0,c.jsxs)(aH.DialogHeader,{children:[(0,c.jsx)(aH.DialogTitle,{children:"Spec Timeline"}),(0,c.jsx)(aH.DialogDescription,{children:"Created, updated, and completion milestones."})]}),(0,c.jsx)("div",{className:"rounded-xl border border-border bg-muted/30 p-4",children:(0,c.jsx)(ak,{createdAt:v.createdAt,updatedAt:v.updatedAt,completedAt:v.completedAt,status:v.status||"planned"})})]})]}),(0,c.jsxs)(aH.Dialog,{open:l,onOpenChange:m,children:[(0,c.jsxs)(ac.Button,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":l,onClick:()=>m(!0),disabled:!A,className:(0,aj.cn)("h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",!A&&"cursor-not-allowed opacity-50"),children:[(0,c.jsx)(aR.GitBranch,{className:"mr-1.5 h-3.5 w-3.5"}),"View Dependencies",(0,c.jsx)(aU.Maximize2,{className:"ml-1.5 h-3.5 w-3.5"})]}),(0,c.jsxs)(aH.DialogContent,{className:"flex h-[85vh] w-[min(1200px,95vw)] max-w-6xl flex-col gap-4 overflow-hidden",children:[(0,c.jsxs)(aH.DialogHeader,{children:[(0,c.jsx)(aH.DialogTitle,{children:"Dependency Graph"}),(0,c.jsxs)(aH.DialogDescription,{className:"flex flex-col gap-2",children:[(0,c.jsx)("span",{children:"Precedence requirements and connected specs rendered with automatic layout."}),(0,c.jsxs)(an.default,{href:`/dependencies?spec=${v.specNumber||v.id}`,className:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline w-fit",onClick:()=>m(!1),children:[(0,c.jsx)(aX.ExternalLink,{className:"h-3 w-3"}),"View in full dependencies page"]})]})]}),(0,c.jsx)("div",{className:"min-h-0 flex-1",children:z&&(0,c.jsx)(aF,{relationships:z,specNumber:v.specNumber,specTitle:B,projectId:o})})]})]}),g&&(0,c.jsxs)(ac.Button,{type:"button",variant:"outline",size:"sm",onClick:g,className:"hidden lg:inline-flex h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",title:"Enter focus mode",children:[(0,c.jsx)(aU.Maximize2,{className:"mr-1.5 h-3.5 w-3.5"}),"Focus"]})]})]})}),v.subSpecs&&v.subSpecs.length>0&&(0,c.jsx)("div",{className:"border-t bg-muted/30",children:(0,c.jsx)("div",{className:"px-3 sm:px-6 overflow-x-auto",children:(0,c.jsxs)("div",{className:"flex gap-1 py-2 min-w-max",children:[(0,c.jsxs)("button",{onClick:()=>E(null),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${!i?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[(0,c.jsx)(aS.Home,{className:"h-4 w-4"}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"Overview"})]}),v.subSpecs.map(a=>{let b=a$[a.iconName]||aJ.FileText;return(0,c.jsxs)("button",{onClick:()=>E(a.file),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${i===a.file?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[(0,c.jsx)(b,{className:`h-4 w-4 ${a.color}`}),(0,c.jsx)("span",{className:"hidden sm:inline",children:a.name})]},a.file)})]})})})]}),(0,c.jsxs)("div",{className:"flex flex-col xl:flex-row xl:items-start",children:[(0,c.jsx)("main",{className:"flex-1 px-3 sm:px-6 py-3 sm:py-6 min-w-0",children:(0,c.jsxs)("div",{className:"space-y-4",children:[t&&(0,c.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading..."}),s&&(0,c.jsx)("div",{className:"text-sm text-destructive",children:"Error loading spec"}),(0,c.jsx)("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm sm:prose-base",children:(0,c.jsx)(Z.default,{remarkPlugins:[$.default,aZ],rehypePlugins:[_.default,aa.default],components:{a:a=>(0,c.jsx)(ao,{...a,currentSpecNumber:v.specNumber||void 0,projectId:o}),pre:({children:a,...b})=>{let e=d.Children.toArray(a)[0];if(d.isValidElement(e)&&"code"===e.type&&"string"==typeof e.props.className&&e.props.className?.includes("language-mermaid")){let a=e.props,b="string"==typeof a.children?a.children:"";return(0,c.jsx)(aG.MermaidDiagram,{code:b})}return(0,c.jsx)("pre",{...b,children:a})}},children:C})})]})}),(0,c.jsx)("aside",{className:"hidden xl:block w-72 shrink-0 px-6 py-6 sticky top-32 h-[calc(100vh-8rem)] overflow-y-auto scrollbar-auto-hide",children:(0,c.jsx)(ap.TableOfContentsSidebar,{content:C})})]}),(0,c.jsx)("div",{className:"xl:hidden",children:(0,c.jsx)(ap.TableOfContents,{content:C})}),(0,c.jsx)(aq.BackToTop,{})]})}var a1=a.i(90555);function a2({spec:a,allSpecs:b,currentSubSpec:f}){let[g,h]=d.useState(()=>!1),i=d.useCallback(()=>{h(a=>{let b=!a;return localStorage.setItem("spec-detail-focus-mode",String(b)),b})},[]),j=d.useMemo(()=>b.map(a=>({id:a.id,specNumber:a.specNumber,title:a.title,specName:a.specName,status:a.status,priority:a.priority,tags:a.tags,updatedAt:a.updatedAt,subSpecsCount:"subSpecsCount"in a?a.subSpecsCount:void 0})),[b]);d.useEffect(()=>{(0,a1.primeSpecsSidebar)(j)},[j]),d.useEffect(()=>{(0,a1.setActiveSidebarSpec)(a.id)},[a.id]);let k=d.useCallback(a=>{fetch(`/api/specs/${a}`).catch(()=>{})},[]);return(0,c.jsxs)("div",{className:"flex min-h-[calc(100vh-3.5rem)] w-full min-w-0",children:[(0,c.jsx)(e.SpecsNavSidebar,{initialSpecs:j,currentSpecId:a.id,currentSubSpec:f,onSpecHover:k,className:(0,aj.cn)(g&&"hidden")}),(0,c.jsx)("div",{className:"flex-1 min-w-0",children:(0,c.jsx)(a0,{initialSpec:a,initialSubSpec:f,isFocusMode:g,onToggleFocusMode:i})})]})}a.s(["SpecDetailWrapper",()=>a2],599302)}];
1
+ module.exports=[599302,a=>{"use strict";let b;var c=a.i(40352),d=a.i(936883),e=a.i(558285),f=a.i(681612),g=a.i(836180);a.s(["ERROR_REVALIDATE_EVENT",()=>3,"FOCUS_EVENT",()=>0,"MUTATE_EVENT",()=>2,"RECONNECT_EVENT",()=>1],869111);var h=Object.prototype.hasOwnProperty;let i=new WeakMap,j=()=>{},k=j(),l=Object,m=a=>a===k,n=(a,b)=>({...a,...b}),o={},p={},q="undefined",r=typeof document!=q,s=!1,t=(a,b)=>{let c=i.get(a);return[()=>!m(b)&&a.get(b)||o,d=>{if(!m(b)){let e=a.get(b);b in p||(p[b]=e),c[5](b,n(e,d),e||o)}},c[6],()=>!m(b)&&b in p?p[b]:!m(b)&&a.get(b)||o]},u=!0,[v,w]=[j,j],x={initFocus:a=>(r&&document.addEventListener("visibilitychange",a),v("focus",a),()=>{r&&document.removeEventListener("visibilitychange",a),w("focus",a)}),initReconnect:a=>{let b=()=>{u=!0,a()},c=()=>{u=!1};return v("online",b),v("offline",c),()=>{w("online",b),w("offline",c)}}},y=!d.default.useId,z=!0,A=d.useEffect,B="undefined"!=typeof navigator&&navigator.connection;!z&&B&&(["slow-2g","2g"].includes(B.effectiveType)||B.saveData);let C=new WeakMap,D=(a,b)=>a===`[object ${b}]`,E=0,F=a=>{let b,c,d=typeof a,e=l.prototype.toString.call(a),f=D(e,"Date"),g=D(e,"RegExp"),h=D(e,"Object");if(l(a)!==a||f||g)b=f?a.toJSON():"symbol"==d?a.toString():"string"==d?JSON.stringify(a):""+a;else{if(b=C.get(a))return b;if(b=++E+"~",C.set(a,b),Array.isArray(a)){for(c=0,b="@";c<a.length;c++)b+=F(a[c])+",";C.set(a,b)}if(h){b="#";let d=l.keys(a).sort();for(;!m(c=d.pop());)m(a[c])||(b+=c+":"+F(a[c])+",");C.set(a,b)}}return b},G=a=>{if("function"==typeof a)try{a=a()}catch(b){a=""}let b=a;return[a="string"==typeof a?a:(Array.isArray(a)?a.length:a)?F(a):"",b]},H=0,I=()=>++H;async function J(...a){let[b,c,d,e]=a,f=n({populateCache:!0,throwOnError:!0},"boolean"==typeof e?{revalidate:e}:e||{}),g=f.populateCache,h=f.rollbackOnError,j=f.optimisticData,l=f.throwOnError;if("function"==typeof c){let a=[];for(let d of b.keys())!/^\$(inf|sub)\$/.test(d)&&c(b.get(d)._k)&&a.push(d);return Promise.all(a.map(o))}return o(c);async function o(c){let e,[n]=G(c);if(!n)return;let[o,p]=t(b,n),[q,r,s,u]=i.get(b),v=()=>{let a=q[n];return("function"==typeof f.revalidate?f.revalidate(o().data,c):!1!==f.revalidate)&&(delete s[n],delete u[n],a&&a[0])?a[0](2).then(()=>o().data):o().data};if(a.length<3)return v();let w=d,x=!1,y=I();r[n]=[y,0];let z=!m(j),A=o(),B=A.data,C=A._c,D=m(C)?B:C;if(z&&p({data:j="function"==typeof j?j(D,B):j,_c:D}),"function"==typeof w)try{w=w(D)}catch(a){e=a,x=!0}if(w&&"function"==typeof w.then){let a;if(w=await w.catch(a=>{e=a,x=!0}),y!==r[n][0]){if(x)throw e;return w}x&&z&&(a=e,"function"==typeof h?h(a):!1!==h)&&(g=!0,p({data:D,_c:k}))}if(g&&!x&&("function"==typeof g?p({data:g(w,D),error:k,_c:k}):p({data:w,error:k,_c:k})),r[n][1]=I(),Promise.resolve(v()).then(()=>{p({_c:k})}),x){if(l)throw e;return}return w}}let K=(a,b)=>{if(!i.has(a)){n(x,b);let c=Object.create(null),d=J.bind(k,a),e=Object.create(null),f=(a,b)=>{let c=e[a]||[];return e[a]=c,c.push(b),()=>c.splice(c.indexOf(b),1)},g=(b,c,d)=>{a.set(b,c);let f=e[b];if(f)for(let a of f)a(c,d)},h=()=>{i.has(a)||i.set(a,[c,Object.create(null),Object.create(null),Object.create(null),d,g,f])};return h(),[a,d,h,j]}return[a,i.get(a)[4]]},[L,M]=K(new Map),N=n({onLoadingSlow:j,onSuccess:j,onError:j,onErrorRetry:(a,b,c,d,e)=>{let f=c.errorRetryCount,g=e.retryCount,h=~~((Math.random()+.5)*(1<<(g<8?g:8)))*c.errorRetryInterval;(m(f)||!(g>f))&&setTimeout(d,h,e)},onDiscarded:j,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:3e3,compare:function a(b,c){var d,e;if(b===c)return!0;if(b&&c&&(d=b.constructor)===c.constructor){if(d===Date)return b.getTime()===c.getTime();if(d===RegExp)return b.toString()===c.toString();if(d===Array){if((e=b.length)===c.length)for(;e--&&a(b[e],c[e]););return -1===e}if(!d||"object"==typeof b){for(d in e=0,b)if(h.call(b,d)&&++e&&!h.call(c,d)||!(d in c)||!a(b[d],c[d]))return!1;return Object.keys(c).length===e}}return b!=b&&c!=c},isPaused:()=>!1,cache:L,mutate:M,fallback:{}},{isOnline:()=>u,isVisible:()=>{let a=r&&document.visibilityState;return m(a)||"hidden"!==a}}),O=(a,b)=>{let c=n(a,b);if(b){let{use:d,fallback:e}=a,{use:f,fallback:g}=b;d&&f&&(c.use=d.concat(f)),e&&g&&(c.fallback=n(e,g))}return c},P=(0,d.createContext)({});var Q=a.i(869111);let R=!1,S=(R?window.__SWR_DEVTOOLS_USE__:[]).concat(a=>(b,c,d)=>{let e=c&&((...a)=>{let[d]=G(b),[,,,e]=i.get(L);if(d.startsWith("$inf$"))return c(...a);let f=e[d];return m(f)?c(...a):(delete e[d],f)});return a(b,e,d)});R&&(window.__SWR_DEVTOOLS_REACT__=d.default);let T=()=>{},U=T(),V=(new WeakMap,d.default.use||(a=>{switch(a.status){case"pending":throw a;case"fulfilled":return a.value;case"rejected":throw a.reason;default:throw a.status="pending",a.then(b=>{a.status="fulfilled",a.value=b},b=>{a.status="rejected",a.reason=b}),a}})),W={dedupe:!0},X=Promise.resolve(k);l.defineProperty(a=>{let{value:b}=a,c=(0,d.useContext)(P),e="function"==typeof b,f=(0,d.useMemo)(()=>e?b(c):b,[e,c,b]),g=(0,d.useMemo)(()=>e?f:O(c,f),[e,c,f]),h=f&&f.provider,i=(0,d.useRef)(k);h&&!i.current&&(i.current=K(h(g.cache||L),f));let j=i.current;return j&&(g.cache=j[0],g.mutate=j[1]),A(()=>{if(j)return j[2]&&j[2](),j[3]},[]),(0,d.createElement)(P.Provider,n(a,{value:g}))},"defaultValue",{value:N});let Y=(b=(a,b,c)=>{let{cache:e,compare:f,suspense:h,fallbackData:j,revalidateOnMount:l,revalidateIfStale:o,refreshInterval:p,refreshWhenHidden:q,refreshWhenOffline:r,keepPreviousData:s}=c,[u,v,w,x]=i.get(e),[B,C]=G(a),D=(0,d.useRef)(!1),E=(0,d.useRef)(!1),F=(0,d.useRef)(B),H=(0,d.useRef)(b),K=(0,d.useRef)(c),L=()=>K.current.isVisible()&&K.current.isOnline(),[M,N,O,P]=t(e,B),R=(0,d.useRef)({}).current,S=m(j)?m(c.fallback)?k:c.fallback[B]:j,T=(a,b)=>{for(let c in R)if("data"===c){if(!f(a[c],b[c])&&(!m(a[c])||!f(ad,b[c])))return!1}else if(b[c]!==a[c])return!1;return!0},U=(0,d.useMemo)(()=>{let a=!!B&&!!b&&(m(l)?!K.current.isPaused()&&!h&&!1!==o:l),c=b=>{let c=n(b);return(delete c._k,a)?{isValidating:!0,isLoading:!0,...c}:c},d=M(),e=P(),f=c(d),g=d===e?f:c(e),i=f;return[()=>{let a=c(M());return T(a,i)?(i.data=a.data,i.isLoading=a.isLoading,i.isValidating=a.isValidating,i.error=a.error,i):(i=a,a)},()=>g]},[e,B]),Y=(0,g.useSyncExternalStore)((0,d.useCallback)(a=>O(B,(b,c)=>{T(c,b)||a()}),[e,B]),U[0],U[1]),Z=!D.current,$=u[B]&&u[B].length>0,_=Y.data,aa=m(_)?S&&"function"==typeof S.then?V(S):S:_,ab=Y.error,ac=(0,d.useRef)(aa),ad=s?m(_)?m(ac.current)?aa:ac.current:_:aa,ae=(!$||!!m(ab))&&(Z&&!m(l)?l:!K.current.isPaused()&&(h?!m(aa)&&o:m(aa)||o)),af=!!(B&&b&&Z&&ae),ag=m(Y.isValidating)?af:Y.isValidating,ah=m(Y.isLoading)?af:Y.isLoading,ai=(0,d.useCallback)(async a=>{let b,d,e=H.current;if(!B||!e||E.current||K.current.isPaused())return!1;let g=!0,h=a||{},i=!w[B]||!h.dedupe,j=()=>y?!E.current&&B===F.current&&D.current:B===F.current,l={isValidating:!1,isLoading:!1},n=()=>{N(l)},o=()=>{let a=w[B];a&&a[1]===d&&delete w[B]},p={isValidating:!0};m(M().data)&&(p.isLoading=!0);try{if(i&&(N(p),c.loadingTimeout&&m(M().data)&&setTimeout(()=>{g&&j()&&K.current.onLoadingSlow(B,c)},c.loadingTimeout),w[B]=[e(C),I()]),[b,d]=w[B],b=await b,i&&setTimeout(o,c.dedupingInterval),!w[B]||w[B][1]!==d)return i&&j()&&K.current.onDiscarded(B),!1;l.error=k;let a=v[B];if(!m(a)&&(d<=a[0]||d<=a[1]||0===a[1]))return n(),i&&j()&&K.current.onDiscarded(B),!1;let h=M().data;l.data=f(h,b)?h:b,i&&j()&&K.current.onSuccess(b,B,c)}catch(c){o();let a=K.current,{shouldRetryOnError:b}=a;!a.isPaused()&&(l.error=c,i&&j())&&(a.onError(c,B,a),(!0===b||"function"==typeof b&&b(c))&&(!K.current.revalidateOnFocus||!K.current.revalidateOnReconnect||L())&&a.onErrorRetry(c,B,a,a=>{let b=u[B];b&&b[0]&&b[0](Q.ERROR_REVALIDATE_EVENT,a)},{retryCount:(h.retryCount||0)+1,dedupe:!0}))}return g=!1,n(),!0},[B,e]),aj=(0,d.useCallback)((...a)=>J(e,F.current,...a),[]);if(A(()=>{H.current=b,K.current=c,m(_)||(ac.current=_)}),A(()=>{var a;let b;if(!B)return;let c=ai.bind(k,W),d=0;K.current.revalidateOnFocus&&(d=Date.now()+K.current.focusThrottleInterval);let e=(a=(a,b={})=>{if(a==Q.FOCUS_EVENT){let a=Date.now();K.current.revalidateOnFocus&&a>d&&L()&&(d=a+K.current.focusThrottleInterval,c())}else if(a==Q.RECONNECT_EVENT)K.current.revalidateOnReconnect&&L()&&c();else if(a==Q.MUTATE_EVENT)return ai();else if(a==Q.ERROR_REVALIDATE_EVENT)return ai(b)},(b=u[B]||(u[B]=[])).push(a),()=>{let c=b.indexOf(a);c>=0&&(b[c]=b[b.length-1],b.pop())});if(E.current=!1,F.current=B,D.current=!0,N({_k:C}),ae&&!w[B])if(m(aa)||z)c();else setTimeout(c,1);return()=>{E.current=!0,e()}},[B]),A(()=>{let a;function b(){let b="function"==typeof p?p(M().data):p;b&&-1!==a&&(a=setTimeout(c,b))}function c(){!M().error&&(q||K.current.isVisible())&&(r||K.current.isOnline())?ai(W).then(b):b()}return b(),()=>{a&&(clearTimeout(a),a=-1)}},[p,q,r,B]),(0,d.useDebugValue)(ad),h){let a=B&&m(aa);if(!y&&z&&a)throw Error("Fallback data is required when using Suspense in SSR.");a&&(H.current=b,K.current=c,E.current=!1);let d=x[B];if(V(!m(d)&&a?aj(d):X),!m(ab)&&a)throw ab;let e=a?ai(W):X;!m(ad)&&a&&(e.status="fulfilled",e.value=!0),V(e)}return{mutate:aj,get data(){return R.data=!0,ad},get error(){return R.error=!0,ab},get isValidating(){return R.isValidating=!0,ag},get isLoading(){return R.isLoading=!0,ah}}},function(...a){let c,e=(c=(0,d.useContext)(P),(0,d.useMemo)(()=>n(N,c),[c])),[f,g,h]="function"==typeof a[1]?[a[0],a[1],a[2]||{}]:[a[0],null,(null===a[1]?a[2]:a[1])||{}],i=O(e,h),j=b,{use:k}=i,l=(k||[]).concat(S);for(let a=l.length;a--;)j=l[a](j);return j(f,g||i.fetcher||null,i)});var Z=a.i(459500),$=a.i(316828),_=a.i(312750),aa=a.i(524172),ab=a.i(227725),ac=a.i(297557),ad=a.i(659358),ae=a.i(800966),af=a.i(262936),ag=a.i(532418),ah=a.i(890075),ai=a.i(687052);function aj({createdAt:a,updatedAt:b,completedAt:d,status:e,className:f}){let g=[];return(a&&g.push({label:"Created",date:a,isActive:!0,isFuture:!1,icon:ac.Clock,color:"text-blue-600"}),"in-progress"===e||"complete"===e||"archived"===e?g.push({label:"In Progress",date:b||a,isActive:!0,isFuture:!1,icon:ad.PlayCircle,color:"text-orange-600"}):g.push({label:"In Progress",date:null,isActive:!1,isFuture:!0,icon:ag.Circle,color:"text-muted-foreground"}),"complete"===e||"archived"===e?g.push({label:"Complete",date:d||b,isActive:!0,isFuture:!1,icon:ae.CheckCircle2,color:"text-green-600"}):g.push({label:"Complete",date:null,isActive:!1,isFuture:!0,icon:ag.Circle,color:"text-muted-foreground"}),"archived"===e&&g.push({label:"Archived",date:b,isActive:!0,isFuture:!1,icon:af.Archive,color:"text-gray-600"}),0===g.length)?null:(0,c.jsx)("div",{className:(0,ai.cn)("flex items-start gap-2",f),children:g.map((a,b)=>{let d=a.icon,e=b===g.length-1,f=e?null:g[b+1],h=a.date&&f?.date&&!f.isFuture?(0,ah.formatDuration)(a.date,f.date):"";return(0,c.jsxs)("div",{className:"flex items-center gap-2 flex-1",children:[(0,c.jsxs)("div",{className:"flex flex-col items-center gap-1 min-w-0",children:[(0,c.jsx)("div",{className:(0,ai.cn)("w-8 h-8 rounded-full border-2 bg-background flex items-center justify-center shrink-0",a.isActive&&!a.isFuture?"border-primary":"border-muted-foreground/40"),children:d&&(0,c.jsx)(d,{className:(0,ai.cn)("h-4 w-4",a.isActive&&!a.isFuture?"text-primary":"text-muted-foreground/60")})}),(0,c.jsx)("div",{className:(0,ai.cn)("text-xs font-medium text-center whitespace-nowrap",a.isActive&&!a.isFuture?"text-foreground":"text-muted-foreground"),children:a.label}),(0,c.jsxs)("div",{className:"text-[10px] text-center min-h-[14px]",children:[a.date&&!a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground",children:(0,ah.formatRelativeTime)(a.date)}),!a.date&&a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/70",children:"Awaiting start"}),a.date&&a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/70",children:"Queued"}),!a.date&&!a.isFuture&&(0,c.jsx)("span",{className:"text-muted-foreground/60",children:"Pending update"})]})]}),!e&&(0,c.jsxs)("div",{className:"flex flex-col items-center flex-1 min-w-4 gap-0.5",children:[(0,c.jsx)("div",{className:(0,ai.cn)("h-0.5 w-full",a.isActive&&!a.isFuture?"bg-primary":"bg-muted-foreground/40")}),h&&(0,c.jsx)("div",{className:"text-[10px] text-muted-foreground font-medium whitespace-nowrap",children:h})]})]},b)})})}var ak=a.i(882479),al=a.i(322570),am=a.i(247338);a.i(294783);var an=a.i(156916),ao=a.i(915929);let ap=["planned","in-progress","complete","archived"],aq={planned:{icon:ac.Clock,label:"Planned",className:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},"in-progress":{icon:ad.PlayCircle,label:"In Progress",className:"bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-400"},complete:{icon:ae.CheckCircle2,label:"Complete",className:"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400"},archived:{icon:af.Archive,label:"Archived",className:"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-400"}};function ar({specId:a,currentStatus:b,onUpdate:e,disabled:f=!1,projectId:g}){let[h,i]=d.useState(b||"planned"),[j,k]=d.useState(!1),[l,m]=d.useState(null),n=async b=>{if(b!==h){i(b),k(!0),m(null);try{let c=g?`/api/projects/${g}/specs/${a}/metadata`:`/api/specs/${a}/metadata`,d=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:b})});if(!d.ok){let a=await d.json();throw Error(a.error||"Failed to update status")}e?.(b),an.toast.success("Status updated")}catch(b){i(h);let a=b instanceof Error?b.message:"Failed to update";m(a),an.toast.error("Failed to update status",{description:a}),console.error("Status update failed:",b)}finally{k(!1)}}},o=aq[h]||aq.planned,p=o.icon;return(0,c.jsxs)("div",{className:"relative",children:[(0,c.jsxs)(ao.Select,{value:h,onValueChange:a=>n(a),disabled:f||j,children:[(0,c.jsx)(ao.SelectTrigger,{className:(0,ai.cn)("h-7 w-fit min-w-[120px] border-0 px-2 text-xs font-medium",o.className,j&&"opacity-70"),"aria-label":"Change spec status",children:(0,c.jsxs)("div",{className:"flex items-center gap-1.5",children:[j?(0,c.jsx)(am.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,c.jsx)(p,{className:"h-3.5 w-3.5"}),(0,c.jsx)(ao.SelectValue,{children:o.label})]})}),(0,c.jsx)(ao.SelectContent,{children:ap.map(a=>{let b=aq[a],d=b.icon;return(0,c.jsx)(ao.SelectItem,{value:a,className:"pl-2",children:(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(d,{className:"h-4 w-4"}),(0,c.jsx)("span",{children:b.label})]})},a)})})]}),l&&(0,c.jsx)("div",{className:"absolute top-full left-0 mt-1 text-xs text-destructive",children:l})]})}var as=a.i(853206),at=a.i(283695),au=a.i(792804),av=a.i(845566);let aw=["low","medium","high","critical"],ax={critical:{icon:as.AlertCircle,label:"Critical",className:"bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400"},high:{icon:at.ArrowUp,label:"High",className:"bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-400"},medium:{icon:au.Minus,label:"Medium",className:"bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400"},low:{icon:av.ArrowDown,label:"Low",className:"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-400"}};function ay({specId:a,currentPriority:b,onUpdate:e,disabled:f=!1,projectId:g}){let[h,i]=d.useState(b||"medium"),[j,k]=d.useState(!1),[l,m]=d.useState(null),n=async b=>{if(b!==h){i(b),k(!0),m(null);try{let c=g?`/api/projects/${g}/specs/${a}/metadata`:`/api/specs/${a}/metadata`,d=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:b})});if(!d.ok){let a=await d.json();throw Error(a.error||"Failed to update priority")}e?.(b),an.toast.success("Priority updated")}catch(b){i(h);let a=b instanceof Error?b.message:"Failed to update";m(a),an.toast.error("Failed to update priority",{description:a}),console.error("Priority update failed:",b)}finally{k(!1)}}},o=ax[h]||ax.medium,p=o.icon;return(0,c.jsxs)("div",{className:"relative",children:[(0,c.jsxs)(ao.Select,{value:h,onValueChange:a=>n(a),disabled:f||j,children:[(0,c.jsx)(ao.SelectTrigger,{className:(0,ai.cn)("h-7 w-fit min-w-[100px] border-0 px-2 text-xs font-medium",o.className,j&&"opacity-70"),"aria-label":"Change spec priority",children:(0,c.jsxs)("div",{className:"flex items-center gap-1.5",children:[j?(0,c.jsx)(am.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,c.jsx)(p,{className:"h-3.5 w-3.5"}),(0,c.jsx)(ao.SelectValue,{children:o.label})]})}),(0,c.jsx)(ao.SelectContent,{children:aw.map(a=>{let b=ax[a],d=b.icon;return(0,c.jsx)(ao.SelectItem,{value:a,className:"pl-2",children:(0,c.jsxs)("div",{className:"flex items-center gap-2",children:[(0,c.jsx)(d,{className:"h-4 w-4"}),(0,c.jsx)("span",{children:b.label})]})},a)})})]}),l&&(0,c.jsx)("div",{className:"absolute top-full left-0 mt-1 text-xs text-destructive",children:l})]})}var az=a.i(914174),aA=a.i(479220),aB=a.i(837717),aC=a.i(285232),aD=a.i(964952);function aE({specId:a,currentTags:b,onUpdate:e,disabled:f=!1,projectId:g}){let[h,i]=d.useState(b||[]),[j,k]=d.useState([]),[l,m]=d.useState(!1),[n,o]=d.useState(null),[p,q]=d.useState(!1),[r,s]=d.useState("");d.useEffect(()=>{p&&0===j.length&&(async()=>{try{let a=g?`/api/projects/${g}/tags`:"/api/tags",b=await fetch(a);if(b.ok){let a=await b.json();k(a.tags||[])}}catch(a){console.error("Failed to fetch tags:",a)}})()},[p,j.length,g]);let t=async b=>{i(b),m(!0),o(null);try{let c=g?`/api/projects/${g}/specs/${a}/metadata`:`/api/specs/${a}/metadata`,d=await fetch(c,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({tags:b})});if(!d.ok){let a=await d.json();throw Error(a.error||"Failed to update tags")}e?.(b),an.toast.success("Tags updated")}catch(b){i(h);let a=b instanceof Error?b.message:"Failed to update";o(a),an.toast.error("Failed to update tags",{description:a}),console.error("Tags update failed:",b)}finally{m(!1)}},u=a=>{let b=a.trim().toLowerCase();b&&(h.includes(b)?o("Tag already exists"):(t([...h,b]),s(""),q(!1)))},v=d.useMemo(()=>{let a=r.toLowerCase();return j.filter(a=>!h.includes(a)).filter(b=>!a||b.toLowerCase().includes(a))},[j,h,r]),w=r.trim()&&!h.includes(r.trim().toLowerCase())&&!j.includes(r.trim().toLowerCase());return(0,c.jsx)("div",{className:"relative",children:(0,c.jsxs)("div",{className:"flex gap-1 flex-wrap items-center",children:[h.map(a=>(0,c.jsxs)(aB.Badge,{variant:"outline",className:(0,ai.cn)("text-xs pr-1 gap-1",f&&"opacity-50"),children:[a,!f&&(0,c.jsx)("button",{onClick:()=>{t(h.filter(b=>b!==a))},disabled:l,className:"ml-1 rounded-full hover:bg-muted p-0.5 transition-colors","aria-label":`Remove ${a} tag`,children:(0,c.jsx)(az.X,{className:"h-3 w-3"})})]},a)),!f&&(0,c.jsxs)(aC.Popover,{open:p,onOpenChange:q,children:[(0,c.jsx)(aC.PopoverTrigger,{asChild:!0,children:(0,c.jsx)(ab.Button,{variant:"outline",size:"sm",className:"h-6 px-2 text-xs",disabled:l,"aria-label":"Add new tag",children:l?(0,c.jsx)(am.Loader2,{className:"h-3 w-3 animate-spin"}):(0,c.jsx)(aA.Plus,{className:"h-3 w-3"})})}),(0,c.jsxs)(aC.PopoverContent,{className:"w-56 p-0",align:"start",children:[(0,c.jsxs)(aD.Command,{children:[(0,c.jsx)(aD.CommandInput,{placeholder:"Search or create tag...",value:r,onValueChange:s}),(0,c.jsxs)(aD.CommandList,{children:[(0,c.jsx)(aD.CommandEmpty,{children:w?(0,c.jsxs)(aD.CommandItem,{onSelect:()=>u(r),className:"cursor-pointer",children:[(0,c.jsx)(aA.Plus,{className:"mr-2 h-4 w-4"}),'Create "',r.trim().toLowerCase(),'"']}):(0,c.jsx)("span",{className:"text-muted-foreground px-2 py-1.5 text-sm",children:"No tags found."})}),v.length>0&&(0,c.jsx)(aD.CommandGroup,{heading:"Existing tags",children:v.slice(0,10).map(a=>(0,c.jsx)(aD.CommandItem,{value:a,onSelect:()=>u(a),className:"cursor-pointer",children:a},a))}),w&&v.length>0&&(0,c.jsx)(aD.CommandGroup,{heading:"Create new",children:(0,c.jsxs)(aD.CommandItem,{onSelect:()=>u(r),className:"cursor-pointer",children:[(0,c.jsx)(aA.Plus,{className:"mr-2 h-4 w-4"}),'Create "',r.trim().toLowerCase(),'"']})})]})]}),n&&(0,c.jsx)("p",{className:"text-xs text-destructive px-2 pb-2",children:n})]})]})]})})}var aF=a.i(920378);function aG({href:a,children:b,currentSpecNumber:d,projectId:e,...f}){if(!a)return(0,c.jsx)("a",{...f,children:b});let g=function(a,b,c){if(a.startsWith("#")||a.startsWith("http://")||a.startsWith("https://"))return a;let d=(a,b)=>{let d=c?`/projects/${c}/specs/${a}`:`/specs/${a}`;return b?`${d}?subspec=${b}`:d},e=a.match(/^\.\/([^/]+\.md)$/);if(e&&b){let a=e[1];return"README.md"!==a?d(b,a):d(b)}let f=a.match(/^\.\.\/(\d+)-[^/]+\/?([^/]+\.md)?$/);if(f){let a=parseInt(f[1],10),b=f[2];return b&&"README.md"!==b?d(a,b):d(a)}return a}(a,d,e),h=g.startsWith("http://")||g.startsWith("https://"),i=g.startsWith("#");return h||i?(0,c.jsx)("a",{href:g,...f,target:h?"_blank":void 0,rel:h?"noopener noreferrer":void 0,children:b}):(0,c.jsx)(aF.default,{href:g,...f,className:"text-primary hover:underline",children:b})}var aH=a.i(87140),aI=a.i(731751),aJ=a.i(183214),aK=a.i(398293),aL=a.i(231008),aM=a.i(53897),aN=a.i(669153);let aO="#f59e0b",aP="#ef4444",aQ={current:"border-primary/70 bg-primary/5 text-foreground",precedence:"border-amber-400/70 bg-amber-400/10 text-amber-900 dark:text-amber-200","required-by":"border-red-400/70 bg-red-400/10 text-red-900 dark:text-red-200"},aR={rankdir:"LR",align:"UL",nodesep:60,ranksep:120,marginx:40,marginy:40},aS=d.memo(function({data:a}){return(0,c.jsxs)("div",{className:(0,ai.cn)("flex w-[280px] flex-col gap-1.5 rounded-xl border-2 px-5 py-4 text-base shadow-md transition-colors",aQ[a.tone],a.interactive&&"cursor-pointer hover:border-primary/70 hover:shadow-lg"),children:[(0,c.jsx)(aN.Handle,{type:"target",position:aN.Position.Left,className:"opacity-0"}),(0,c.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground/70",children:a.badge}),(0,c.jsx)("span",{className:"text-base font-semibold leading-snug",children:a.label}),a.subtitle&&(0,c.jsx)("span",{className:"text-sm text-muted-foreground/80",children:a.subtitle}),(0,c.jsx)(aN.Handle,{type:"source",position:aN.Position.Right,className:"opacity-0"})]})});aS.displayName="SpecNode";let aT={specNode:aS};function aU(a){let b=a.trim();if(!b)return"Unknown Spec";let c=b.match(/^(\d+)[-_]?(.*)$/);if(!c)return b;let d=c[1].padStart(3,"0"),e=c[2]?.replace(/[-_]/g," ").trim();return e?`#${d} ${e}`:`#${d}`}function aV(a,b){let c=a.trim(),d=c.match(/^(\d+)/),e=d?parseInt(d[1],10):c;return b?`/projects/${b}/specs/${e}`:`/specs/${e}`}function aW(a,b,c){return`${a}-${c}-${b.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-")||c}`}function aX({relationships:a,specNumber:b,specTitle:e,projectId:g}){let h=(0,f.useRouter)(),[i,j]=d.useState(null),k=d.useMemo(()=>{let c,d,f,h;return c=[],d=[],f={id:"current-spec",type:"specNode",data:{label:b?`#${b.toString().padStart(3,"0")} ${e}`:e,badge:"Current Spec",subtitle:"This spec",tone:"current",interactive:!1},position:{x:0,y:0},draggable:!1,selectable:!1,sourcePosition:aN.Position.Right,targetPosition:aN.Position.Left},c.push(f),a.dependsOn?.forEach((a,b)=>{let e=aW("precedence",a,b);c.push({id:e,type:"specNode",data:{label:aU(a),badge:"Depends On",subtitle:"Must complete first",tone:"precedence",href:aV(a,g),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:aN.Position.Right,targetPosition:aN.Position.Left}),d.push({id:`edge-${e}-current`,source:e,target:f.id,type:"smoothstep",markerEnd:{type:aN.MarkerType.ArrowClosed,color:aO,width:28,height:28},style:{stroke:aO,strokeWidth:3}})}),a.requiredBy?.forEach((a,b)=>{let e=aW("required-by",a,b);c.push({id:e,type:"specNode",data:{label:aU(a),badge:"Required By",subtitle:"Blocked by this spec",tone:"required-by",href:aV(a,g),interactive:!0},position:{x:0,y:0},draggable:!1,selectable:!0,sourcePosition:aN.Position.Right,targetPosition:aN.Position.Left}),d.push({id:`edge-current-${e}`,source:f.id,target:e,type:"smoothstep",markerEnd:{type:aN.MarkerType.ArrowClosed,color:aP,width:28,height:28},style:{stroke:aP,strokeWidth:3}})}),(h=new aJ.default.graphlib.Graph).setGraph(aR),h.setDefaultEdgeLabel(()=>({})),c.forEach(a=>{h.setNode(a.id,{width:280,height:110})}),d.forEach(a=>{h.setEdge(a.source,a.target)}),aJ.default.layout(h),{nodes:c.map(a=>{let{x:b,y:c}=h.node(a.id);return{...a,position:{x:b-140,y:c-55}}}),edges:d}},[a,b,e,g]),l=d.useCallback(a=>{j(a),requestAnimationFrame(()=>{a.fitView({padding:.4,duration:350})})},[]);d.useEffect(()=>{i&&i.fitView({padding:.4,duration:350})},[i,k.nodes]);let m=d.useCallback((a,b)=>{!b?.data||b.data.href&&h.push(b.data.href)},[h]);return(0,c.jsxs)("div",{className:"flex h-full flex-col gap-4",children:[(0,c.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 text-sm text-muted-foreground",children:[(0,c.jsxs)("div",{children:[(0,c.jsx)("p",{className:"text-xs font-semibold uppercase tracking-wide",children:"Dependency Map"}),(0,c.jsx)("p",{className:"text-base text-foreground",children:"Explore precedence and connected work"})]}),(0,c.jsx)("div",{className:"rounded-full border border-border px-3 py-1.5 text-sm font-medium uppercase tracking-wide",children:"React Flow DAG"})]}),(0,c.jsx)("div",{className:"flex-1 overflow-hidden rounded-2xl border border-border bg-muted/30",children:(0,c.jsxs)(aK.default,{nodes:k.nodes,edges:k.edges,nodeTypes:aT,onInit:l,className:"h-full w-full",fitView:!0,proOptions:{hideAttribution:!0},nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!0,panOnScroll:!0,panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,minZoom:.4,maxZoom:1.6,onNodeClick:m,children:[(0,c.jsx)(aL.Background,{gap:24,size:1,color:"rgba(148, 163, 184, 0.3)"}),(0,c.jsx)(aM.Controls,{showInteractive:!1})]})}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-4 text-sm text-muted-foreground",children:[(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-amber-400/80"}),"Depends On → blocks until complete"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-red-400/80"}),"Required By ← blocked by this spec"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2 font-medium",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-sky-400/80"}),"Related ↔ connected work (bidirectional)"]}),(0,c.jsxs)("span",{className:"inline-flex items-center gap-2",children:[(0,c.jsx)("span",{className:"inline-block h-2.5 w-8 rounded-full bg-primary/60"}),"Drag to pan • Scroll / pinch to zoom."]})]})]})}var aY=a.i(228e3),aZ=a.i(186945),a$=a.i(72245),a_=a.i(615268),a0=a.i(863535);let a1=(0,a0.default)("palette",[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]]),a2=(0,a0.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]),a3=(0,a0.default)("test-tube",[["path",{d:"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2",key:"125lnx"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M14.5 16h-5",key:"1ox875"}]]),a4=(0,a0.default)("square-check-big",[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]),a5=(0,a0.default)("wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]]),a6=(0,a0.default)("map",[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]]);var a7=a.i(915970),a8=a.i(476011),a9=a.i(418419),ba=a.i(404620),bb=a.i(709211),bc=a.i(730702),bd=a.i(475661),be=a.i(386868);let bf=()=>a=>{(0,be.visit)(a,"html",a=>{"string"==typeof a.value&&a.value.trim().startsWith("<!--")&&(a.value="")})},bg={FileText:a_.FileText,Palette:a1,Code:a2,TestTube:a3,CheckSquare:a4,Wrench:a5,Map:a6,GitBranch:a7.GitBranch,Home:a8.Home,TrendingUp:a9.TrendingUp},bh=a=>fetch(a).then(a=>{if(!a.ok)throw Error(`HTTP error! status: ${a.status}`);return a.json()});function bi({initialSpec:a,initialSubSpec:b,isFocusMode:e=!1,onToggleFocusMode:g}){let h=(0,f.useRouter)(),i=(0,f.useSearchParams)().get("subspec")||b,[j,k]=d.useState(!1),[l,m]=d.useState(!1),{getSpecUrl:n,projectId:o}=(0,a$.useProjectUrl)(),p=o?`/api/projects/${o}/specs/${a.specNumber||a.id}`:`/api/specs/${a.specNumber||a.id}`,q=o?`/api/projects/${o}/specs/${a.specNumber||a.id}/dependency-graph`:`/api/specs/${a.specNumber||a.id}/dependency-graph`,{data:r,error:s,isLoading:t}=Y(p,bh,{fallbackData:{spec:a},revalidateOnFocus:!1,dedupingInterval:5e3}),{data:u}=Y(l?q:null,bh,{revalidateOnFocus:!1,dedupingInterval:6e4}),v=r?.spec||a,w=d.useMemo(()=>v.tags||[],[v.tags]),x=v.updatedAt?(0,ah.formatRelativeTime)(v.updatedAt):"N/A",y=v.relationships,z=u?{dependsOn:u.dependsOn.map(a=>a.specName),requiredBy:u.requiredBy.map(a=>a.specName)}:y,A=!!(y&&((y.dependsOn?.length??0)>0||(y.requiredBy?.length??0)>0));d.useEffect(()=>{A||m(!1)},[A]);let B=(0,ai.extractH1Title)(v.contentMd)||v.title||v.specName,C=v.contentMd;if(i&&v.subSpecs){let a=v.subSpecs.find(a=>a.file===i);a&&(C=a.content)}let D=a=>a?new Date(a).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"}):"N/A",E=a=>{let b=a?n(v.specNumber||v.id,a):n(v.specNumber||v.id);h.push(b,{scroll:!1})},F=d.useRef(null);return d.useEffect(()=>{let a=()=>{let a=56;window.innerWidth>=1024&&F.current&&(a+=F.current.offsetHeight-56),document.documentElement.style.scrollPaddingTop=`${a}px`};a(),window.addEventListener("resize",a);let b=new ResizeObserver(a);return F.current&&b.observe(F.current),()=>{window.removeEventListener("resize",a),b.disconnect(),document.documentElement.style.scrollPaddingTop=""}},[v,w]),(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("header",{ref:F,className:"lg:sticky lg:top-14 lg:z-20 border-b bg-card",children:[(0,c.jsx)("div",{className:(0,ai.cn)("px-3 sm:px-6",e?"py-1.5":"py-2 sm:py-3"),children:e?(0,c.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,c.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,c.jsxs)("h1",{className:"text-base font-semibold tracking-tight truncate",children:[v.specNumber&&(0,c.jsxs)("span",{className:"text-muted-foreground",children:["#",v.specNumber.toString().padStart(3,"0")," "]}),B]}),(0,c.jsx)(ak.StatusBadge,{status:v.status||"planned"}),(0,c.jsx)(al.PriorityBadge,{priority:v.priority||"medium"})]}),(0,c.jsx)(ab.Button,{type:"button",variant:"ghost",size:"sm",onClick:g,className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground shrink-0",title:"Exit focus mode",children:(0,c.jsx)(bb.Minimize2,{className:"h-4 w-4"})})]}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsxs)("div",{className:"flex items-start justify-between gap-2 mb-1.5 sm:mb-2",children:[(0,c.jsxs)("h1",{className:"text-lg sm:text-xl font-bold tracking-tight",children:[v.specNumber&&(0,c.jsxs)("span",{className:"text-muted-foreground",children:["#",v.specNumber.toString().padStart(3,"0")," "]}),B]}),(0,c.jsxs)(ab.Button,{variant:"ghost",size:"icon",className:"lg:hidden h-8 w-8 -mr-2 shrink-0 text-muted-foreground",onClick:()=>{},children:[(0,c.jsx)(bc.List,{className:"h-5 w-5"}),(0,c.jsx)("span",{className:"sr-only",children:"Toggle specs list"})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,c.jsx)(ar,{specId:v.specNumber?.toString()||v.id,currentStatus:v.status||"planned",projectId:o}),(0,c.jsx)(ay,{specId:v.specNumber?.toString()||v.id,currentPriority:v.priority||"medium",projectId:o}),(0,c.jsx)("div",{className:"h-4 w-px bg-border mx-1 hidden sm:block"}),(0,c.jsx)(aE,{specId:v.specNumber?.toString()||v.id,currentTags:w,projectId:o})]}),(0,c.jsxs)("div",{className:"flex flex-wrap gap-2 sm:gap-4 text-xs text-muted-foreground mt-1.5 sm:mt-2",children:[(0,c.jsxs)("span",{className:"hidden sm:inline",children:["Created: ",D(v.createdAt)]}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{children:["Updated: ",D(v.updatedAt),v.updatedAt&&(0,c.jsxs)("span",{className:"ml-1 text-[11px] text-muted-foreground/80",children:["(",x,")"]})]}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{className:"hidden md:inline",children:["Name: ",v.specName]}),v.assignee&&(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)("span",{className:"hidden sm:inline",children:"•"}),(0,c.jsxs)("span",{className:"hidden sm:inline",children:["Assignee: ",v.assignee]})]})]}),(0,c.jsxs)("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[(0,c.jsxs)(aZ.Dialog,{open:j,onOpenChange:k,children:[(0,c.jsxs)(ab.Button,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":j,onClick:()=>k(!0),className:"h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[(0,c.jsx)(ac.Clock,{className:"mr-1.5 h-3.5 w-3.5"}),"View Timeline",(0,c.jsx)(ba.Maximize2,{className:"ml-1.5 h-3.5 w-3.5"})]}),(0,c.jsxs)(aZ.DialogContent,{className:"w-[min(900px,90vw)] max-w-3xl max-h-[90vh] overflow-y-auto",children:[(0,c.jsxs)(aZ.DialogHeader,{children:[(0,c.jsx)(aZ.DialogTitle,{children:"Spec Timeline"}),(0,c.jsx)(aZ.DialogDescription,{children:"Created, updated, and completion milestones."})]}),(0,c.jsx)("div",{className:"rounded-xl border border-border bg-muted/30 p-4",children:(0,c.jsx)(aj,{createdAt:v.createdAt,updatedAt:v.updatedAt,completedAt:v.completedAt,status:v.status||"planned"})})]})]}),(0,c.jsxs)(aZ.Dialog,{open:l,onOpenChange:m,children:[(0,c.jsxs)(ab.Button,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":l,onClick:()=>m(!0),disabled:!A,className:(0,ai.cn)("h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",!A&&"cursor-not-allowed opacity-50"),children:[(0,c.jsx)(a7.GitBranch,{className:"mr-1.5 h-3.5 w-3.5"}),"View Dependencies",(0,c.jsx)(ba.Maximize2,{className:"ml-1.5 h-3.5 w-3.5"})]}),(0,c.jsxs)(aZ.DialogContent,{className:"flex h-[85vh] w-[min(1200px,95vw)] max-w-6xl flex-col gap-4 overflow-hidden",children:[(0,c.jsxs)(aZ.DialogHeader,{children:[(0,c.jsx)(aZ.DialogTitle,{children:"Dependency Graph"}),(0,c.jsxs)(aZ.DialogDescription,{className:"flex flex-col gap-2",children:[(0,c.jsx)("span",{children:"Precedence requirements and connected specs rendered with automatic layout."}),(0,c.jsxs)(aF.default,{href:o?`/projects/${o}/dependencies?spec=${v.specNumber||v.id}`:`/dependencies?spec=${v.specNumber||v.id}`,className:"inline-flex items-center gap-1.5 text-xs text-primary hover:underline w-fit",onClick:()=>m(!1),children:[(0,c.jsx)(bd.ExternalLink,{className:"h-3 w-3"}),"View in full dependencies page"]})]})]}),(0,c.jsx)("div",{className:"min-h-0 flex-1",children:z&&(0,c.jsx)(aX,{relationships:z,specNumber:v.specNumber,specTitle:B,projectId:o})})]})]}),g&&(0,c.jsxs)(ab.Button,{type:"button",variant:"outline",size:"sm",onClick:g,className:"hidden lg:inline-flex h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",title:"Enter focus mode",children:[(0,c.jsx)(ba.Maximize2,{className:"mr-1.5 h-3.5 w-3.5"}),"Focus"]})]})]})}),v.subSpecs&&v.subSpecs.length>0&&(0,c.jsx)("div",{className:"border-t bg-muted/30",children:(0,c.jsx)("div",{className:"px-3 sm:px-6 overflow-x-auto",children:(0,c.jsxs)("div",{className:"flex gap-1 py-2 min-w-max",children:[(0,c.jsxs)("button",{onClick:()=>E(null),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${!i?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[(0,c.jsx)(a8.Home,{className:"h-4 w-4"}),(0,c.jsx)("span",{className:"hidden sm:inline",children:"Overview"})]}),v.subSpecs.map(a=>{let b=bg[a.iconName]||a_.FileText;return(0,c.jsxs)("button",{onClick:()=>E(a.file),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${i===a.file?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[(0,c.jsx)(b,{className:`h-4 w-4 ${a.color}`}),(0,c.jsx)("span",{className:"hidden sm:inline",children:a.name})]},a.file)})]})})})]}),(0,c.jsxs)("div",{className:"flex flex-col xl:flex-row xl:items-start",children:[(0,c.jsx)("main",{className:"flex-1 px-3 sm:px-6 py-3 sm:py-6 min-w-0",children:(0,c.jsxs)("div",{className:"space-y-4",children:[t&&(0,c.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading..."}),s&&(0,c.jsx)("div",{className:"text-sm text-destructive",children:"Error loading spec"}),(0,c.jsx)("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm sm:prose-base",children:(0,c.jsx)(Z.default,{remarkPlugins:[$.default,bf],rehypePlugins:[_.default,aa.default],components:{a:a=>(0,c.jsx)(aG,{...a,currentSpecNumber:v.specNumber||void 0,projectId:o}),pre:({children:a,...b})=>{let e=d.Children.toArray(a)[0];if(d.isValidElement(e)&&"code"===e.type&&"string"==typeof e.props.className&&e.props.className?.includes("language-mermaid")){let a=e.props,b="string"==typeof a.children?a.children:"";return(0,c.jsx)(aY.MermaidDiagram,{code:b})}return(0,c.jsx)("pre",{...b,children:a})}},children:C})})]})}),(0,c.jsx)("aside",{className:"hidden xl:block w-72 shrink-0 px-6 py-6 sticky top-32 h-[calc(100vh-8rem)] overflow-y-auto scrollbar-auto-hide",children:(0,c.jsx)(aH.TableOfContentsSidebar,{content:C})})]}),(0,c.jsx)("div",{className:"xl:hidden",children:(0,c.jsx)(aH.TableOfContents,{content:C})}),(0,c.jsx)(aI.BackToTop,{})]})}var bj=a.i(90555);function bk({spec:a,allSpecs:b,currentSubSpec:f}){let[g,h]=d.useState(()=>!1),i=d.useCallback(()=>{h(a=>{let b=!a;return localStorage.setItem("spec-detail-focus-mode",String(b)),b})},[]),j=d.useMemo(()=>b.map(a=>({id:a.id,specNumber:a.specNumber,title:a.title,specName:a.specName,status:a.status,priority:a.priority,tags:a.tags,updatedAt:a.updatedAt,subSpecsCount:"subSpecsCount"in a?a.subSpecsCount:void 0})),[b]);d.useEffect(()=>{(0,bj.primeSpecsSidebar)(j)},[j]),d.useEffect(()=>{(0,bj.setActiveSidebarSpec)(a.id)},[a.id]);let k=d.useCallback(a=>{fetch(`/api/specs/${a}`).catch(()=>{})},[]);return(0,c.jsxs)("div",{className:"flex min-h-[calc(100vh-3.5rem)] w-full min-w-0",children:[(0,c.jsx)(e.SpecsNavSidebar,{initialSpecs:j,currentSpecId:a.id,currentSubSpec:f,onSpecHover:k,className:(0,ai.cn)(g&&"hidden")}),(0,c.jsx)("div",{className:"flex-1 min-w-0",children:(0,c.jsx)(bi,{initialSpec:a,initialSubSpec:f,isFocusMode:g,onToggleFocusMode:i})})]})}a.s(["SpecDetailWrapper",()=>bk],599302)}];
2
2
 
3
3
  //# sourceMappingURL=packages_ui_src_components_spec-detail-wrapper_tsx_fd35401c._.js.map