@shepai/cli 1.66.3 → 1.67.0

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 (276) hide show
  1. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.d.ts.map +1 -1
  2. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/merge/merge.node.js +26 -11
  3. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  4. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +16 -10
  5. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
  6. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +21 -1
  7. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts +15 -1
  8. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts.map +1 -1
  9. package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +16 -2
  10. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts +12 -0
  11. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts.map +1 -0
  12. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.js +284 -0
  13. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts +33 -0
  14. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts.map +1 -0
  15. package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.js +210 -0
  16. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +56 -0
  17. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -0
  18. package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +32 -0
  19. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts +3 -0
  20. package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts.map +1 -0
  21. package/dist/src/presentation/web/components/common/control-center-drawer/index.js +2 -0
  22. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts +0 -4
  23. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts +1 -1
  25. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
  26. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +18 -12
  27. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts +4 -6
  28. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js +5 -13
  30. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  31. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +2 -13
  32. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +2 -10
  33. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  34. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +21 -1
  35. package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts +1 -1
  36. package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts.map +1 -1
  37. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  38. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +14 -20
  39. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +7 -1
  40. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +37 -2
  42. package/dist/src/presentation/web/components/common/index.d.ts +1 -0
  43. package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
  44. package/dist/src/presentation/web/components/common/index.js +1 -0
  45. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
  46. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +2 -2
  47. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
  48. package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -2
  49. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +1 -1
  50. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
  51. package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -2
  52. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
  53. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +5 -1
  54. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts +2 -0
  55. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
  56. package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +13 -2
  57. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -1
  58. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +5 -2
  59. package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +1 -1
  60. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -1
  61. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +1 -1
  62. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
  63. package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -2
  64. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  65. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +20 -215
  66. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  67. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +2 -1
  68. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  69. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
  70. package/dist/tsconfig.build.tsbuildinfo +1 -1
  71. package/package.json +1 -1
  72. package/web/.next/BUILD_ID +1 -1
  73. package/web/.next/build-manifest.json +5 -5
  74. package/web/.next/cache/.previewinfo +1 -1
  75. package/web/.next/cache/.rscinfo +1 -1
  76. package/web/.next/cache/.tsbuildinfo +1 -1
  77. package/web/.next/cache/config.json +3 -3
  78. package/web/.next/fallback-build-manifest.json +2 -2
  79. package/web/.next/prerender-manifest.json +3 -3
  80. package/web/.next/required-server-files.js +1 -1
  81. package/web/.next/required-server-files.json +1 -1
  82. package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  83. package/web/.next/server/app/_global-error.html +2 -2
  84. package/web/.next/server/app/_global-error.rsc +1 -1
  85. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  86. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  87. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  88. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  89. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  90. package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  91. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  92. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  93. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/page/build-manifest.json +3 -3
  95. package/web/.next/server/app/page/server-reference-manifest.json +88 -88
  96. package/web/.next/server/app/page.js +1 -1
  97. package/web/.next/server/app/page.js.nft.json +1 -1
  98. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/skills/page/build-manifest.json +3 -3
  100. package/web/.next/server/app/skills/page/server-reference-manifest.json +5 -5
  101. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  102. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  103. package/web/.next/server/app/tools/page/build-manifest.json +3 -3
  104. package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  105. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  106. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/version/page/build-manifest.json +3 -3
  108. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  109. package/web/.next/server/app/version/page.js.nft.json +1 -1
  110. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +3 -0
  112. package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js.map +1 -0
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  116. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js → [root-of-the-server]__2ffb27f1._.js} +2 -2
  117. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js.map → [root-of-the-server]__2ffb27f1._.js.map} +1 -1
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +1 -1
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +3 -0
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js.map +1 -0
  124. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  125. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
  127. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +9 -0
  129. package/web/.next/server/chunks/ssr/{[root-of-the-server]__f648005b._.js.map → [root-of-the-server]__e41b5eec._.js.map} +1 -1
  130. package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +3 -0
  131. package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js.map +1 -0
  132. package/web/.next/server/chunks/ssr/_23c92688._.js +6 -0
  133. package/web/.next/server/chunks/ssr/_23c92688._.js.map +1 -0
  134. package/web/.next/server/chunks/ssr/_28993370._.js +1 -1
  135. package/web/.next/server/chunks/ssr/_28993370._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/_49bf495c._.js +3 -0
  137. package/web/.next/server/chunks/ssr/_49bf495c._.js.map +1 -0
  138. package/web/.next/server/chunks/ssr/_690ea95f._.js +3 -0
  139. package/web/.next/server/chunks/ssr/{_2900ed94._.js.map → _690ea95f._.js.map} +1 -1
  140. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_c52cace8._.js → server/chunks/ssr/_725584e5._.js} +2 -2
  141. package/web/.next/server/chunks/ssr/_725584e5._.js.map +1 -0
  142. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  143. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  144. package/web/.next/server/middleware-build-manifest.js +3 -3
  145. package/web/.next/server/pages/500.html +2 -2
  146. package/web/.next/server/server-reference-manifest.js +1 -1
  147. package/web/.next/server/server-reference-manifest.json +115 -115
  148. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  149. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +5 -5
  150. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  151. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  152. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
  153. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  154. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  155. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  156. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  157. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  158. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  159. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  160. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
  161. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  162. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  163. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +3 -3
  165. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +88 -88
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +3 -3
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +5 -5
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +3 -3
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +3 -3
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  180. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  181. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +3 -0
  182. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  184. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js → [root-of-the-server]__2ffb27f1._.js} +2 -2
  185. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +1 -1
  186. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  187. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +3 -0
  188. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  189. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
  190. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +9 -0
  191. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +3 -0
  192. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_23c92688._.js +6 -0
  193. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_28993370._.js +1 -1
  194. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_49bf495c._.js +3 -0
  195. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_690ea95f._.js +3 -0
  196. package/web/.next/{server/chunks/ssr/_c52cace8._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_725584e5._.js} +2 -2
  197. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  198. package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +3 -3
  199. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  200. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  201. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +115 -115
  202. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.stories.tsx +16 -2
  203. package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +35 -6
  204. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.tsx +285 -0
  205. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.tsx +650 -0
  206. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +82 -0
  207. package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/index.ts +2 -0
  208. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.ts +0 -4
  209. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.tsx +5 -14
  210. package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx +58 -51
  211. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +42 -1
  212. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +2 -16
  213. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/index.ts +1 -0
  214. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +55 -2
  215. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +97 -106
  216. package/web/.next/standalone/src/presentation/web/components/common/index.ts +6 -0
  217. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.stories.tsx +1 -2
  218. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.tsx +1 -2
  219. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +1 -2
  220. package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +1 -1
  221. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.stories.tsx +28 -2
  222. package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.tsx +7 -2
  223. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.tsx +1 -1
  224. package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +7 -6
  225. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +1 -2
  226. package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +1 -2
  227. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +30 -348
  228. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +2 -1
  229. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +5 -1
  230. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  231. package/web/.next/static/chunks/38ca82d1243738e3.js +1 -0
  232. package/web/.next/static/chunks/{35f41ba0a6d626d7.js → 491ae2bbae40857c.js} +1 -1
  233. package/web/.next/static/chunks/4b6cc9f65260f2bd.js +2 -0
  234. package/web/.next/static/chunks/67599679ca9ac863.js +1 -0
  235. package/web/.next/static/chunks/{ed887cce7b31c91b.js → 6ece250c7d0ec203.js} +1 -1
  236. package/web/.next/static/chunks/a186bbb822ccb655.css +2 -0
  237. package/web/.next/static/chunks/a5c59952485e875e.js +1 -0
  238. package/web/.next/static/chunks/{8c60d1bd87239066.js → a9626385607910b3.js} +1 -1
  239. package/web/.next/static/chunks/c1c15470a7b058c8.js +1 -0
  240. package/web/.next/static/chunks/caa2e7e1618e2179.js +1 -0
  241. package/web/.next/static/chunks/ed799a306922f03e.js +10 -0
  242. package/web/.next/static/chunks/fb703cf73aba2eb8.js +1 -0
  243. package/web/.next/static/chunks/{turbopack-b6b5b4f015327a9a.js → turbopack-958ac34b879d0dce.js} +1 -1
  244. package/web/.next/trace +1 -1
  245. package/web/.next/trace-build +1 -1
  246. package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +0 -3
  247. package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js.map +0 -1
  248. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +0 -3
  249. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js.map +0 -1
  250. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +0 -3
  251. package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js.map +0 -1
  252. package/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +0 -9
  253. package/web/.next/server/chunks/ssr/_2900ed94._.js +0 -3
  254. package/web/.next/server/chunks/ssr/_6978d868._.js +0 -3
  255. package/web/.next/server/chunks/ssr/_6978d868._.js.map +0 -1
  256. package/web/.next/server/chunks/ssr/_85965278._.js +0 -6
  257. package/web/.next/server/chunks/ssr/_85965278._.js.map +0 -1
  258. package/web/.next/server/chunks/ssr/_c52cace8._.js.map +0 -1
  259. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +0 -3
  260. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +0 -3
  261. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +0 -3
  262. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +0 -9
  263. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_2900ed94._.js +0 -3
  264. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6978d868._.js +0 -3
  265. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_85965278._.js +0 -6
  266. package/web/.next/static/chunks/41a2adc09edfffaf.js +0 -1
  267. package/web/.next/static/chunks/5054c72b1c8f5912.js +0 -1
  268. package/web/.next/static/chunks/7bcbfc56e5733034.js +0 -1
  269. package/web/.next/static/chunks/86c0cc1097427f74.js +0 -10
  270. package/web/.next/static/chunks/96f49affaceab206.css +0 -2
  271. package/web/.next/static/chunks/a6d1d774260fc927.js +0 -2
  272. package/web/.next/static/chunks/c0f7284a71378f26.js +0 -1
  273. package/web/.next/static/chunks/f5fb2f182ae9b015.js +0 -1
  274. /package/web/.next/static/{Cp8hg2DFpA4DyEezlBYOw → GdqfiIUVMj2wj_3lbrUqd}/_buildManifest.js +0 -0
  275. /package/web/.next/static/{Cp8hg2DFpA4DyEezlBYOw → GdqfiIUVMj2wj_3lbrUqd}/_clientMiddlewareManifest.json +0 -0
  276. /package/web/.next/static/{Cp8hg2DFpA4DyEezlBYOw → GdqfiIUVMj2wj_3lbrUqd}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/feature-drawer.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGxE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAC5B,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,UAAkB,GACnB,EAAE,kBAAkB,2CA+IpB"}
1
+ {"version":3,"file":"feature-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/feature-drawer.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGxE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAC5B,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,UAAkB,GACnB,EAAE,kBAAkB,2CAwJpB"}
@@ -1,10 +1,9 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useCallback, useEffect } from 'react';
3
+ import { useCallback } from 'react';
4
4
  import { Loader2, Trash2, ExternalLink, GitCommitHorizontal } from 'lucide-react';
5
5
  import { PrStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
6
6
  import { cn } from '../../../lib/utils.js';
7
- import { useSoundAction } from '../../../hooks/use-sound-action.js';
8
7
  import { OpenActionMenu } from '../../common/open-action-menu/index.js';
9
8
  import { BaseDrawer } from '../../common/base-drawer/index.js';
10
9
  import { DrawerTitle, DrawerDescription } from '../../ui/drawer.js';
@@ -17,26 +16,25 @@ import { CiStatusBadge } from '../../common/ci-status-badge/index.js';
17
16
  import { featureNodeStateConfig, lifecycleDisplayLabels } from '../../common/feature-node/index.js';
18
17
  import { useFeatureActions } from './use-feature-actions.js';
19
18
  export function FeatureDrawer({ selectedNode, onClose, onDelete, isDeleting = false, }) {
20
- const drawerOpenSound = useSoundAction('drawer-open');
21
- const drawerCloseSound = useSoundAction('drawer-close');
22
- const isOpen = selectedNode !== null;
23
- const playDrawerOpen = drawerOpenSound.play;
24
- useEffect(() => {
25
- if (isOpen)
26
- playDrawerOpen();
27
- }, [isOpen, playDrawerOpen]);
28
19
  const handleClose = useCallback(() => {
29
- drawerCloseSound.play();
30
20
  onClose();
31
- }, [onClose, drawerCloseSound]);
32
- return (_jsx(BaseDrawer, { open: selectedNode !== null, onClose: handleClose, size: "sm", modal: false, "data-testid": "feature-drawer", header: selectedNode ? (_jsxs("div", { "data-testid": "feature-drawer-header", children: [_jsx(DrawerTitle, { children: selectedNode.name }), _jsx(DrawerDescription, { children: selectedNode.featureId })] })) : undefined, deployTarget: selectedNode?.repositoryPath && selectedNode.branch
21
+ }, [onClose]);
22
+ const actionsInput = selectedNode?.repositoryPath && selectedNode?.branch
23
+ ? {
24
+ repositoryPath: selectedNode.repositoryPath,
25
+ branch: selectedNode.branch,
26
+ specPath: selectedNode.specPath,
27
+ }
28
+ : null;
29
+ const actions = useFeatureActions(actionsInput);
30
+ return (_jsx(BaseDrawer, { open: selectedNode !== null, onClose: handleClose, size: "md", modal: false, "data-testid": "feature-drawer", header: selectedNode ? (_jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "feature-drawer-header", children: [_jsx(DrawerTitle, { children: selectedNode.name }), selectedNode.description ? (_jsx(DrawerDescription, { children: selectedNode.description })) : selectedNode.featureId ? (_jsx(DrawerDescription, { className: "sr-only", children: selectedNode.featureId })) : null] }), actionsInput ? (_jsxs("div", { className: "flex items-center gap-2 pt-2", children: [_jsx(OpenActionMenu, { actions: actions, repositoryPath: actionsInput.repositoryPath, showSpecs: !!actionsInput.specPath }), onDelete && selectedNode.featureId ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "bg-border mx-1 h-4 w-px" }), _jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Delete feature", disabled: isDeleting, className: "text-muted-foreground hover:text-destructive", "data-testid": "feature-drawer-delete", children: isDeleting ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : (_jsx(Trash2, { className: "size-4" })) }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete feature?" }), _jsxs(AlertDialogDescription, { children: ["This will permanently delete ", _jsx("strong", { children: selectedNode.name }), " (", selectedNode.featureId, "). This action cannot be undone.", selectedNode.state === 'running' ? (_jsx(_Fragment, { children: " This feature has a running agent that will be stopped." })) : null] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: isDeleting, children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", disabled: isDeleting, onClick: () => onDelete(selectedNode.featureId), children: isDeleting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Deleting\u2026"] })) : ('Delete') })] })] })] })] })) : null] })) : null] })) : undefined, deployTarget: selectedNode?.repositoryPath && selectedNode.branch
33
31
  ? {
34
32
  targetId: selectedNode.featureId,
35
33
  targetType: 'feature',
36
34
  repositoryPath: selectedNode.repositoryPath,
37
35
  branch: selectedNode.branch,
38
36
  }
39
- : undefined, children: selectedNode ? (_jsxs(_Fragment, { children: [selectedNode.repositoryPath && selectedNode.branch ? (_jsx(DrawerActions, { repositoryPath: selectedNode.repositoryPath, branch: selectedNode.branch, specPath: selectedNode.specPath })) : null, _jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-status", className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: lifecycleDisplayLabels[selectedNode.lifecycle] }), _jsx(StateBadge, { data: selectedNode }), selectedNode.progress > 0 ? (_jsxs("div", { "data-testid": "feature-drawer-progress", className: "flex flex-col gap-1", children: [_jsxs("div", { className: "text-muted-foreground flex items-center justify-between text-xs", children: [_jsx("span", { children: "Progress" }), _jsxs("span", { children: [selectedNode.progress, "%"] })] }), _jsx("div", { className: "bg-muted h-2 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', featureNodeStateConfig[selectedNode.state].progressClass), style: { width: `${selectedNode.progress}%` } }) })] })) : null] }), selectedNode.pr ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsx(PrInfoSection, { pr: selectedNode.pr })] })) : null, _jsx(Separator, {}), _jsx(DetailsSection, { data: selectedNode }), onDelete ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsx("div", { "data-testid": "feature-drawer-delete", className: "p-4", children: _jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsxs(Button, { variant: "destructive", className: "w-full", disabled: isDeleting, children: [_jsx(Trash2, { className: "mr-2 h-4 w-4" }), "Delete feature"] }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete feature?" }), _jsxs(AlertDialogDescription, { children: ["This will permanently delete ", _jsx("strong", { children: selectedNode.name }), " (", selectedNode.featureId, "). This action cannot be undone.", selectedNode.state === 'running' ? (_jsx(_Fragment, { children: " This feature has a running agent that will be stopped." })) : null] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: isDeleting, children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", disabled: isDeleting, onClick: () => onDelete(selectedNode.featureId), children: isDeleting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Deleting\u2026"] })) : ('Delete') })] })] })] }) })] })) : null] })) : null }));
37
+ : undefined, children: selectedNode ? (_jsxs("div", { className: "flex-1 overflow-y-auto", children: [_jsxs("div", { "data-testid": "feature-drawer-status", className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: lifecycleDisplayLabels[selectedNode.lifecycle] }), _jsx(StateBadge, { data: selectedNode }), selectedNode.progress > 0 ? (_jsxs("div", { "data-testid": "feature-drawer-progress", className: "flex flex-col gap-1", children: [_jsxs("div", { className: "text-muted-foreground flex items-center justify-between text-xs", children: [_jsx("span", { children: "Progress" }), _jsxs("span", { children: [selectedNode.progress, "%"] })] }), _jsx("div", { className: "bg-muted h-2 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', featureNodeStateConfig[selectedNode.state].progressClass), style: { width: `${selectedNode.progress}%` } }) })] })) : null] }), selectedNode.pr ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsx(PrInfoSection, { pr: selectedNode.pr })] })) : null, _jsx(DetailsSection, { data: selectedNode })] })) : null }));
40
38
  }
41
39
  function StateBadge({ data }) {
42
40
  const config = featureNodeStateConfig[data.state];
@@ -44,10 +42,10 @@ function StateBadge({ data }) {
44
42
  return (_jsxs("div", { className: cn('flex items-center gap-2 rounded-full px-3 py-1.5 text-sm font-medium', config.badgeBgClass, config.badgeClass), children: [data.state === 'running' ? (_jsx(CometSpinner, { size: "sm", className: "shrink-0" })) : (_jsx(Icon, { className: "h-4 w-4 shrink-0" })), _jsx("span", { children: config.label })] }));
45
43
  }
46
44
  function DetailsSection({ data }) {
47
- const hasAnyDetail = data.description ?? data.agentType ?? data.runtime ?? data.blockedBy ?? data.errorMessage;
45
+ const hasAnyDetail = data.agentType ?? data.runtime ?? data.blockedBy ?? data.errorMessage;
48
46
  if (!hasAnyDetail)
49
47
  return null;
50
- return (_jsxs("div", { "data-testid": "feature-drawer-details", className: "flex flex-col gap-3 p-4", children: [data.description ? _jsx(DetailRow, { label: "Description", value: data.description }) : null, data.agentType ? _jsx(DetailRow, { label: "Agent", value: data.agentType }) : null, data.runtime ? _jsx(DetailRow, { label: "Runtime", value: data.runtime }) : null, data.blockedBy ? _jsx(DetailRow, { label: "Blocked by", value: data.blockedBy }) : null, data.errorMessage ? _jsx(DetailRow, { label: "Error", value: data.errorMessage }) : null] }));
48
+ return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-details", className: "flex flex-col gap-3 p-4", children: [data.agentType ? _jsx(DetailRow, { label: "Agent", value: data.agentType }) : null, data.runtime ? _jsx(DetailRow, { label: "Runtime", value: data.runtime }) : null, data.blockedBy ? _jsx(DetailRow, { label: "Blocked by", value: data.blockedBy }) : null, data.errorMessage ? _jsx(DetailRow, { label: "Error", value: data.errorMessage }) : null] })] }));
51
49
  }
52
50
  function DetailRow({ label, value }) {
53
51
  return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: label }), _jsx("span", { className: "text-sm", children: value })] }));
@@ -60,7 +58,3 @@ const prStatusStyles = {
60
58
  function PrInfoSection({ pr }) {
61
59
  return (_jsx("div", { "data-testid": "feature-drawer-pr", className: "border-border mx-4 rounded-lg border", children: _jsxs("div", { className: "space-y-3 px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("a", { href: pr.url, target: "_blank", rel: "noopener noreferrer", className: "text-primary flex items-center gap-1.5 text-sm font-semibold underline underline-offset-2", children: ["PR #", pr.number, _jsx(ExternalLink, { className: "h-3.5 w-3.5" })] }), _jsx(Badge, { className: prStatusStyles[pr.status], children: pr.status })] }), pr.ciStatus ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "CI Status" }), _jsx(CiStatusBadge, { status: pr.ciStatus })] })) : null, pr.commitHash ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Commit" }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3.5 w-3.5" }), _jsx("code", { className: "bg-muted text-foreground rounded-md px-1.5 py-0.5 font-mono text-[11px]", children: pr.commitHash.slice(0, 7) })] })] })) : null] }) }));
62
60
  }
63
- function DrawerActions({ repositoryPath, branch, specPath, }) {
64
- const actions = useFeatureActions({ repositoryPath, branch, specPath });
65
- return (_jsx("div", { className: "flex gap-2 px-4 pb-3", children: _jsx(OpenActionMenu, { actions: actions, repositoryPath: repositoryPath, showSpecs: !!specPath }) }));
66
- }
@@ -3,10 +3,14 @@ import { FeatureDrawer } from './feature-drawer.js';
3
3
  declare const meta: Meta<typeof FeatureDrawer>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof FeatureDrawer>;
6
+ /** Feature drawer rendered inside a full-page context — starts open. Primary story. */
7
+ export declare const Default: Story;
6
8
  export declare const Running: Story;
7
9
  export declare const ActionRequired: Story;
8
10
  export declare const Done: Story;
9
11
  export declare const Blocked: Story;
12
+ /** Review lifecycle + running state — matches the look/feel of review pending-action drawers. */
13
+ export declare const ReviewInProgress: Story;
10
14
  export declare const Error: Story;
11
15
  /** Minimal data — only required fields, no optional details section. */
12
16
  export declare const MinimalData: Story;
@@ -24,7 +28,7 @@ export declare const NoRepositoryPath: Story;
24
28
  * (API routes are not available in Storybook).
25
29
  */
26
30
  export declare const WithActionButtons: Story;
27
- /** FeatureDrawer with a delete button in the footer. */
31
+ /** FeatureDrawer with a delete icon button in the header. */
28
32
  export declare const WithDeleteButton: Story;
29
33
  /** FeatureDrawer showing the delete button in loading/disabled state. */
30
34
  export declare const DeletingState: Story;
@@ -38,4 +42,6 @@ export declare const DoneWithPartialPr: Story;
38
42
  export declare const PrStatusOpen: Story;
39
43
  /** PR with Merged status — purple badge. */
40
44
  export declare const PrStatusMerged: Story;
45
+ /** Feature drawer rendered inside a full-page context — starts open. */
46
+ export declare const InDrawer: Story;
41
47
  //# sourceMappingURL=feature-drawer.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,aAAa,CAOpC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAgG5C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAMF,wEAAwE;AACxE,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,SAAS,EAAE,KAqBvB,CAAC;AAmEF,0DAA0D;AAC1D,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC;AA6CF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAMF,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAoCF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,kBAAkB,EAAE,KAEhC,CAAC;AA0BF,wEAAwE;AACxE,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,YAAY,EAAE,KAU1B,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC"}
1
+ {"version":3,"file":"feature-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,aAAa,CAOpC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAC;AAiH5C,uFAAuF;AACvF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,iGAAiG;AACjG,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAMF,wEAAwE;AACxE,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,SAAS,EAAE,KAqBvB,CAAC;AAmEF,0DAA0D;AAC1D,eAAO,MAAM,SAAS,EAAE,KAEvB,CAAC;AA6CF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAMF,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAoCF,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,kBAAkB,EAAE,KAEhC,CAAC;AA0BF,wEAAwE;AACxE,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,YAAY,EAAE,KAU1B,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,cAAc,EAAE,KAE5B,CAAC;AAuBF,wEAAwE;AACxE,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC"}
@@ -4,7 +4,7 @@ import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/g
4
4
  import { FeatureDrawer } from './feature-drawer.js';
5
5
  import { Button } from '../../ui/button.js';
6
6
  const meta = {
7
- title: 'Composed/FeatureDrawer',
7
+ title: 'Drawers/Feature/FeatureDrawer',
8
8
  component: FeatureDrawer,
9
9
  tags: ['autodocs'],
10
10
  parameters: {
@@ -78,6 +78,22 @@ const errorData = {
78
78
  repositoryPath: '/home/user/my-repo',
79
79
  branch: 'feat/email-service',
80
80
  };
81
+ const reviewInProgressData = {
82
+ name: 'Auth Module',
83
+ description: 'Implement OAuth2 authentication flow',
84
+ featureId: '#f6',
85
+ lifecycle: 'review',
86
+ state: 'running',
87
+ progress: 0,
88
+ agentType: 'claude-code',
89
+ repositoryPath: '/home/user/my-repo',
90
+ branch: 'feat/auth-module',
91
+ pr: {
92
+ url: 'https://github.com/org/repo/pull/17',
93
+ number: 17,
94
+ status: PrStatus.Open,
95
+ },
96
+ };
81
97
  /* ---------------------------------------------------------------------------
82
98
  * Trigger wrapper — starts closed, click to open
83
99
  * ------------------------------------------------------------------------- */
@@ -88,6 +104,10 @@ function DrawerTrigger({ data, label }) {
88
104
  /* ---------------------------------------------------------------------------
89
105
  * Per-state stories
90
106
  * ------------------------------------------------------------------------- */
107
+ /** Feature drawer rendered inside a full-page context — starts open. Primary story. */
108
+ export const Default = {
109
+ render: () => _jsx(FeatureDrawerShellTemplate, { data: runningData }),
110
+ };
91
111
  export const Running = {
92
112
  render: () => _jsx(DrawerTrigger, { data: runningData, label: "Open Running" }),
93
113
  };
@@ -100,6 +120,10 @@ export const Done = {
100
120
  export const Blocked = {
101
121
  render: () => _jsx(DrawerTrigger, { data: blockedData, label: "Open Blocked" }),
102
122
  };
123
+ /** Review lifecycle + running state — matches the look/feel of review pending-action drawers. */
124
+ export const ReviewInProgress = {
125
+ render: () => _jsx(DrawerTrigger, { data: reviewInProgressData, label: "Open Review In Progress" }),
126
+ };
103
127
  export const Error = {
104
128
  render: () => _jsx(DrawerTrigger, { data: errorData, label: "Open Error" }),
105
129
  };
@@ -218,7 +242,7 @@ function DrawerTriggerWithDelete({ data, label, isDeleting = false, }) {
218
242
  const [selected, setSelected] = useState(null);
219
243
  return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setSelected(data), children: label }), _jsx(FeatureDrawer, { selectedNode: selected, onClose: () => setSelected(null), onDelete: noop, isDeleting: isDeleting })] }));
220
244
  }
221
- /** FeatureDrawer with a delete button in the footer. */
245
+ /** FeatureDrawer with a delete icon button in the header. */
222
246
  export const WithDeleteButton = {
223
247
  render: () => _jsx(DrawerTriggerWithDelete, { data: doneData, label: "Open With Delete" }),
224
248
  };
@@ -270,3 +294,14 @@ export const PrStatusOpen = {
270
294
  export const PrStatusMerged = {
271
295
  render: () => _jsx(DrawerTrigger, { data: doneWithPrData, label: "Open PR Status: Merged" }),
272
296
  };
297
+ /* ---------------------------------------------------------------------------
298
+ * In-drawer story — full page context, starts open
299
+ * ------------------------------------------------------------------------- */
300
+ function FeatureDrawerShellTemplate({ data }) {
301
+ const [selected, setSelected] = useState(data);
302
+ return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setSelected(data), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(FeatureDrawer, { selectedNode: selected, onClose: () => setSelected(null) })] }));
303
+ }
304
+ /** Feature drawer rendered inside a full-page context — starts open. */
305
+ export const InDrawer = {
306
+ render: () => _jsx(FeatureDrawerShellTemplate, { data: runningData }),
307
+ };
@@ -1,3 +1,4 @@
1
+ export { ControlCenterDrawer, type ControlCenterDrawerProps, computeDrawerView, type DrawerView, } from './control-center-drawer/index.js';
1
2
  export { AddRepositoryNode, type AddRepositoryNodeData, type AddRepositoryNodeType, } from './add-repository-node/index.js';
2
3
  export { ElapsedTime, formatElapsed } from './elapsed-time/index.js';
3
4
  export { EmptyState, type EmptyStateProps } from './empty-state/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,KAAK,UAAU,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,3 +1,4 @@
1
+ export { ControlCenterDrawer, computeDrawerView, } from './control-center-drawer/index.js';
1
2
  export { AddRepositoryNode, } from './add-repository-node/index.js';
2
3
  export { ElapsedTime, formatElapsed } from './elapsed-time/index.js';
3
4
  export { EmptyState } from './empty-state/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"merge-review.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;AAgChF,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,YAAoB,EACpB,WAAmB,GACpB,EAAE,gBAAgB,2CA4IlB"}
1
+ {"version":3,"file":"merge-review.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;AAgChF,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,YAAoB,EACpB,WAAmB,GACpB,EAAE,gBAAgB,2CA2IlB"}
@@ -9,7 +9,7 @@ function PhaseList({ phases }) {
9
9
  }
10
10
  export function MergeReview({ data, onApprove, onReject, isProcessing = false, isRejecting = false, }) {
11
11
  const { pr, diffSummary, phases, branch, warning } = data;
12
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex-1 space-y-4 overflow-y-auto p-4", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "mt-1.5 h-2.5 w-2.5 shrink-0 rounded-full bg-emerald-500" }), _jsxs("div", { className: "flex-1", children: [_jsx("h2", { className: "text-foreground text-sm font-bold", children: "Merge Review" }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs leading-relaxed", children: pr
12
+ return (_jsxs("div", { className: "flex flex-1 flex-col", children: [_jsxs("div", { className: "flex-1 space-y-4 overflow-y-auto p-4", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "mt-1.5 h-2.5 w-2.5 shrink-0 rounded-full bg-emerald-500" }), _jsxs("div", { className: "flex-1", children: [_jsx("h2", { className: "text-foreground text-sm font-bold", children: "Merge Review" }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs leading-relaxed", children: pr
13
13
  ? 'Review the pull request details and approve to merge.'
14
- : 'Review the changes and approve to merge.' })] })] }), branch ? (_jsx("div", { className: "border-border rounded-lg border", children: _jsxs("div", { className: "flex items-center gap-2 px-4 py-3", children: [_jsx(GitBranch, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx(Badge, { variant: "secondary", className: "font-mono text-[11px]", children: branch.source }), _jsx(ArrowRight, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx(Badge, { variant: "outline", className: "font-mono text-[11px]", children: branch.target })] }) })) : null, pr ? (_jsx("div", { className: "border-border rounded-lg border", children: _jsxs("div", { className: "space-y-3 px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("a", { href: pr.url, target: "_blank", rel: "noopener noreferrer", className: "text-primary flex items-center gap-1.5 text-sm font-semibold underline underline-offset-2", children: ["PR #", pr.number, _jsx(ExternalLink, { className: "h-3.5 w-3.5" })] }), _jsx(Badge, { variant: "outline", className: "text-xs", children: pr.status })] }), pr.ciStatus ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "CI Status" }), _jsx(CiStatusBadge, { status: pr.ciStatus })] })) : null, pr.commitHash ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Commit" }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3.5 w-3.5" }), _jsx("code", { className: "bg-muted text-foreground rounded-md px-1.5 py-0.5 font-mono text-[11px]", children: pr.commitHash.slice(0, 7) })] })] })) : null] }) })) : null, diffSummary ? (_jsx("div", { className: "border-border rounded-lg border", children: _jsxs("div", { className: "px-4 py-3", children: [_jsxs("div", { className: "mb-3 flex items-center gap-2", children: [_jsx(FileDiff, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "text-foreground text-xs font-semibold", children: "Changes" })] }), _jsxs("div", { className: "grid grid-cols-4 gap-3", children: [_jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-foreground text-sm font-bold", children: diffSummary.filesChanged }), _jsx("div", { className: "text-muted-foreground text-[10px]", children: "files" })] }), _jsxs("div", { className: "text-center", children: [_jsxs("div", { className: "text-sm font-bold text-green-600", children: ["+", diffSummary.additions] }), _jsx("div", { className: "text-muted-foreground text-[10px]", children: "additions" })] }), _jsxs("div", { className: "text-center", children: [_jsxs("div", { className: "text-sm font-bold text-red-600", children: ["-", diffSummary.deletions] }), _jsx("div", { className: "text-muted-foreground text-[10px]", children: "deletions" })] }), _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-foreground text-sm font-bold", children: diffSummary.commitCount }), _jsx("div", { className: "text-muted-foreground text-[10px]", children: "commits" })] })] })] }) })) : warning ? (_jsx("div", { className: "border-border rounded-lg border", children: _jsxs("div", { className: "flex items-center gap-2 px-4 py-3", children: [_jsx(AlertTriangle, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "text-muted-foreground text-xs", children: warning })] }) })) : null, phases && phases.length > 0 ? _jsx(PhaseList, { phases: phases }) : null] }), _jsx(DrawerActionBar, { onReject: onReject, onApprove: onApprove, approveLabel: "Approve Merge", approveIcon: isProcessing ? (_jsx(Loader2, { className: "mr-1.5 h-4 w-4 animate-spin" })) : (_jsx(GitMerge, { className: "mr-1.5 h-4 w-4" })), revisionPlaceholder: "Ask AI to revise before merging...", rejectDialogTitle: "Reject Merge", isProcessing: isProcessing, isRejecting: isRejecting })] }));
14
+ : 'Review the changes and approve to merge.' })] })] }), branch ? (_jsx("div", { className: "border-border rounded-lg border", children: _jsxs("div", { className: "flex items-center gap-2 px-4 py-3", children: [_jsx(GitBranch, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx(Badge, { variant: "secondary", className: "font-mono text-[11px]", children: branch.source }), _jsx(ArrowRight, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx(Badge, { variant: "outline", className: "font-mono text-[11px]", children: branch.target })] }) })) : null, pr ? (_jsx("div", { className: "border-border rounded-lg border", children: _jsxs("div", { className: "space-y-3 px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("a", { href: pr.url, target: "_blank", rel: "noopener noreferrer", className: "text-primary flex items-center gap-1.5 text-sm font-semibold underline underline-offset-2", children: ["PR #", pr.number, _jsx(ExternalLink, { className: "h-3.5 w-3.5" })] }), _jsx(Badge, { variant: "outline", className: "text-xs", children: pr.status })] }), pr.ciStatus ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "CI Status" }), _jsx(CiStatusBadge, { status: pr.ciStatus })] })) : null, pr.commitHash ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Commit" }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3.5 w-3.5" }), _jsx("code", { className: "bg-muted text-foreground rounded-md px-1.5 py-0.5 font-mono text-[11px]", children: pr.commitHash.slice(0, 7) })] })] })) : null] }) })) : null, diffSummary ? (_jsx("div", { className: "border-border rounded-lg border", children: _jsxs("div", { className: "px-4 py-3", children: [_jsxs("div", { className: "mb-3 flex items-center gap-2", children: [_jsx(FileDiff, { className: "text-muted-foreground h-4 w-4" }), _jsx("span", { className: "text-foreground text-xs font-semibold", children: "Changes" })] }), _jsxs("div", { className: "grid grid-cols-4 gap-3", children: [_jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-foreground text-sm font-bold", children: diffSummary.filesChanged }), _jsx("div", { className: "text-muted-foreground text-[10px]", children: "files" })] }), _jsxs("div", { className: "text-center", children: [_jsxs("div", { className: "text-sm font-bold text-green-600", children: ["+", diffSummary.additions] }), _jsx("div", { className: "text-muted-foreground text-[10px]", children: "additions" })] }), _jsxs("div", { className: "text-center", children: [_jsxs("div", { className: "text-sm font-bold text-red-600", children: ["-", diffSummary.deletions] }), _jsx("div", { className: "text-muted-foreground text-[10px]", children: "deletions" })] }), _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-foreground text-sm font-bold", children: diffSummary.commitCount }), _jsx("div", { className: "text-muted-foreground text-[10px]", children: "commits" })] })] })] }) })) : warning ? (_jsx("div", { className: "border-border rounded-lg border", children: _jsxs("div", { className: "flex items-center gap-2 px-4 py-3", children: [_jsx(AlertTriangle, { className: "text-muted-foreground h-4 w-4 shrink-0" }), _jsx("span", { className: "text-muted-foreground text-xs", children: warning })] }) })) : null, phases && phases.length > 0 ? _jsx(PhaseList, { phases: phases }) : null] }), _jsx(DrawerActionBar, { onReject: onReject, onApprove: onApprove, approveLabel: "Approve Merge", approveIcon: isProcessing ? (_jsx(Loader2, { className: "mr-1.5 h-4 w-4 animate-spin" })) : (_jsx(GitMerge, { className: "mr-1.5 h-4 w-4" })), revisionPlaceholder: "Ask AI to revise before merging...", isProcessing: isProcessing, isRejecting: isRejecting })] }));
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"merge-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAsC1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1C,kDAAkD;AAClD,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AA8BtD,0CAA0C;AAC1C,eAAO,MAAM,QAAQ,EAAE,WAYtB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAa9B,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,YAAY,EAAE,WAiB1B,CAAC"}
1
+ {"version":3,"file":"merge-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/merge-review/merge-review.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAsC1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AAE1C,kDAAkD;AAClD,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,SAAS,EAAE,KAQvB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,YAAY,EAAE,KAS1B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AA6BtD,0CAA0C;AAC1C,eAAO,MAAM,QAAQ,EAAE,WAYtB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAa9B,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,YAAY,EAAE,WAiB1B,CAAC"}
@@ -34,7 +34,7 @@ const defaultActions = {
34
34
  };
35
35
  /* ─── Standalone MergeReview ─── */
36
36
  const meta = {
37
- title: 'Common/MergeReview',
37
+ title: 'Drawers/Review/MergeReview',
38
38
  component: MergeReview,
39
39
  tags: ['autodocs'],
40
40
  parameters: {
@@ -133,7 +133,6 @@ export const WithPhases = {
133
133
  },
134
134
  };
135
135
  const drawerMeta = {
136
- title: 'Common/MergeReviewDrawer',
137
136
  component: MergeReviewDrawer,
138
137
  tags: ['autodocs'],
139
138
  parameters: {
@@ -27,7 +27,7 @@ export function PrdQuestionnaire({ data, selections, onSelect, onApprove, onReje
27
27
  }, [onSelect, isLastStep, selectSound]);
28
28
  if (total === 0)
29
29
  return null;
30
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex-1 space-y-4 overflow-y-auto p-4", children: [showHeader ? (_jsxs("div", { className: "border-border flex items-start gap-3 border-b pb-3", children: [_jsx("div", { className: "mt-1.5 h-2 w-2 shrink-0 rounded-full bg-amber-500" }), _jsxs("div", { className: "flex-1", children: [_jsx("h3", { className: "text-foreground mb-1.5 text-sm font-bold", children: question }), _jsx("p", { className: "text-muted-foreground text-xs leading-relaxed", children: context })] })] })) : null, _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("label", { className: "text-foreground min-w-0 flex-1 text-sm font-semibold", children: currentQuestion.question }), _jsx("div", { className: "mt-1.5 flex shrink-0 gap-1", children: questions.map((q, idx) => (_jsx("button", { type: "button", "aria-label": `Go to question ${idx + 1}`, className: cn('h-1.5 rounded-full transition-all duration-200', idx === currentStep ? 'bg-primary w-4' : 'w-1.5', idx !== currentStep && selections[q.id] ? 'bg-primary/50' : '', idx !== currentStep && !selections[q.id] ? 'bg-muted-foreground/25' : ''), onClick: () => {
30
+ return (_jsxs("div", { className: "flex flex-1 flex-col", children: [_jsxs("div", { className: "flex-1 space-y-4 overflow-y-auto p-4", children: [showHeader ? (_jsxs("div", { className: "border-border flex items-start gap-3 border-b pb-3", children: [_jsx("div", { className: "mt-1.5 h-2 w-2 shrink-0 rounded-full bg-amber-500" }), _jsxs("div", { className: "flex-1", children: [_jsx("h3", { className: "text-foreground mb-1.5 text-sm font-bold", children: question }), _jsx("p", { className: "text-muted-foreground text-xs leading-relaxed", children: context })] })] })) : null, _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("label", { className: "text-foreground min-w-0 flex-1 text-sm font-semibold", children: currentQuestion.question }), _jsx("div", { className: "mt-1.5 flex shrink-0 gap-1", children: questions.map((q, idx) => (_jsx("button", { type: "button", "aria-label": `Go to question ${idx + 1}`, className: cn('h-1.5 rounded-full transition-all duration-200', idx === currentStep ? 'bg-primary w-4' : 'w-1.5', idx !== currentStep && selections[q.id] ? 'bg-primary/50' : '', idx !== currentStep && !selections[q.id] ? 'bg-muted-foreground/25' : ''), onClick: () => {
31
31
  navigateSound.play();
32
32
  setCurrentStep(idx);
33
33
  } }, q.id))) })] }), _jsx("div", { className: "space-y-2", children: currentQuestion.options.map((opt, optIdx) => {
@@ -1 +1 @@
1
- {"version":3,"file":"prd-questionnaire.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAiKpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAkBvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAU/C,sJAAsJ;AACtJ,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,KAczB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,WAAW,EAAE,KA8BzB,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,sBAAsB,CAAC,CAAC;AA0C3D,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,EAAE,WAWtB,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,EAAE,WAepC,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAW9B,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,WAY3B,CAAC;AAaF,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,EAAE,KAQ9B,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
1
+ {"version":3,"file":"prd-questionnaire.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAiKpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAkBvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAU/C,sJAAsJ;AACtJ,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,cAAc,EAAE,KAW5B,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,WAAW,EAAE,KAczB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,EAAE,KAStB,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,WAAW,EAAE,KA8BzB,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAyC3D,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,EAAE,WAWtB,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,EAAE,WAepC,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAW9B,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,WAY3B,CAAC;AAaF,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,EAAE,KAQ9B,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
@@ -144,7 +144,7 @@ function InteractiveQuestionnaire({ selections: initialSelections = {}, ...props
144
144
  }
145
145
  /* ─── Standalone PrdQuestionnaire ─── */
146
146
  const meta = {
147
- title: 'Composed/PrdQuestionnaire',
147
+ title: 'Drawers/Review/PrdQuestionnaire',
148
148
  component: PrdQuestionnaire,
149
149
  tags: ['autodocs'],
150
150
  parameters: {
@@ -228,7 +228,6 @@ export const MinimalData = {
228
228
  } })),
229
229
  };
230
230
  const drawerMeta = {
231
- title: 'Composed/PrdQuestionnaireDrawer',
232
231
  component: PrdQuestionnaireDrawer,
233
232
  tags: ['autodocs'],
234
233
  parameters: {
@@ -1 +1 @@
1
- {"version":3,"file":"repository-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-drawer.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,qBAAqB,2CA2ExE"}
1
+ {"version":3,"file":"repository-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-drawer.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,qBAAqB,2CA+ExE"}
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback } from 'react';
3
4
  import { Code2, Terminal, FolderOpen } from 'lucide-react';
4
5
  import { BaseDrawer } from '../../common/base-drawer/index.js';
5
6
  import { DrawerTitle, DrawerDescription } from '../../ui/drawer.js';
@@ -7,8 +8,11 @@ import { Separator } from '../../ui/separator.js';
7
8
  import { ActionButton } from '../../common/action-button/index.js';
8
9
  import { useRepositoryActions } from './use-repository-actions.js';
9
10
  export function RepositoryDrawer({ data, onClose }) {
11
+ const handleClose = useCallback(() => {
12
+ onClose();
13
+ }, [onClose]);
10
14
  const actions = useRepositoryActions(data?.repositoryPath ? { repositoryPath: data.repositoryPath } : null);
11
- return (_jsx(BaseDrawer, { open: data !== null, onClose: onClose, size: "sm", modal: false, "data-testid": "repository-drawer", deployTarget: data?.repositoryPath
15
+ return (_jsx(BaseDrawer, { open: data !== null, onClose: handleClose, size: "md", modal: false, "data-testid": "repository-drawer", deployTarget: data?.repositoryPath
12
16
  ? {
13
17
  targetId: data.repositoryPath,
14
18
  targetType: 'repository',
@@ -6,4 +6,6 @@ type Story = StoryObj<typeof RepositoryDrawer>;
6
6
  export declare const Default: Story;
7
7
  export declare const LongPath: Story;
8
8
  export declare const WithoutPath: Story;
9
+ /** Repository drawer rendered inside a full-page context — starts open. */
10
+ export declare const InDrawer: Story;
9
11
  //# sourceMappingURL=repository-drawer.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAOvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAqB/C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC"}
1
+ {"version":3,"file":"repository-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAOvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAqB/C,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAIzB,CAAC;AAuBF,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC"}
@@ -3,7 +3,7 @@ import { useState } from 'react';
3
3
  import { Button } from '../../ui/button.js';
4
4
  import { RepositoryDrawer } from './repository-drawer.js';
5
5
  const meta = {
6
- title: 'Composed/RepositoryDrawer',
6
+ title: 'Drawers/Feature/RepositoryDrawer',
7
7
  component: RepositoryDrawer,
8
8
  tags: ['autodocs'],
9
9
  parameters: {
@@ -21,7 +21,7 @@ function DrawerTrigger({ data, label }) {
21
21
  return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setSelected(data), children: label }), _jsx(RepositoryDrawer, { data: selected, onClose: () => setSelected(null) })] }));
22
22
  }
23
23
  export const Default = {
24
- render: () => _jsx(DrawerTrigger, { data: repoData, label: "Open Repository" }),
24
+ render: () => _jsx(RepositoryDrawerShellTemplate, { data: repoData }),
25
25
  };
26
26
  export const LongPath = {
27
27
  render: () => (_jsx(DrawerTrigger, { data: {
@@ -32,3 +32,14 @@ export const LongPath = {
32
32
  export const WithoutPath = {
33
33
  render: () => (_jsx(DrawerTrigger, { data: { ...repoData, repositoryPath: undefined }, label: "Open Without Path" })),
34
34
  };
35
+ /* ---------------------------------------------------------------------------
36
+ * Shell template — full page context, starts open (matches ReviewDrawerShell pattern)
37
+ * ------------------------------------------------------------------------- */
38
+ function RepositoryDrawerShellTemplate({ data }) {
39
+ const [selected, setSelected] = useState(data);
40
+ return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setSelected(data), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(RepositoryDrawer, { data: selected, onClose: () => setSelected(null) })] }));
41
+ }
42
+ /** Repository drawer rendered inside a full-page context — starts open. */
43
+ export const InDrawer = {
44
+ render: () => _jsx(RepositoryDrawerShellTemplate, { data: repoData }),
45
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"review-drawer-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE,sBAAsB,2CAwHxB"}
1
+ {"version":3,"file":"review-drawer-shell.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,GACT,EAAE,sBAAsB,2CAyHxB"}
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback } from 'react';
3
4
  import { Loader2, Trash2, Play, Square } from 'lucide-react';
4
5
  import { BaseDrawer } from '../../common/base-drawer/index.js';
5
6
  import { DrawerTitle, DrawerDescription } from '../../ui/drawer.js';
6
7
  import { Button } from '../../ui/button.js';
7
- import { Separator } from '../../ui/separator.js';
8
8
  import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '../../ui/alert-dialog.js';
9
9
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../ui/tooltip.js';
10
10
  import { OpenActionMenu } from '../../common/open-action-menu/index.js';
@@ -14,6 +14,9 @@ import { DeploymentStatusBadge } from '../../common/deployment-status-badge/inde
14
14
  import { useDeployAction } from '../../../hooks/use-deploy-action.js';
15
15
  import { featureFlags } from '../../../lib/feature-flags.js';
16
16
  export function ReviewDrawerShell({ open, onClose, featureName, featureDescription, featureId, repositoryPath, branch, specPath, onDelete, isDeleting, children, }) {
17
+ const handleClose = useCallback(() => {
18
+ onClose();
19
+ }, [onClose]);
17
20
  const actionsInput = repositoryPath && branch ? { repositoryPath, branch, specPath } : null;
18
21
  const actions = useFeatureActions(actionsInput);
19
22
  const deployTargetInput = featureId && repositoryPath && branch
@@ -21,5 +24,5 @@ export function ReviewDrawerShell({ open, onClose, featureName, featureDescripti
21
24
  : null;
22
25
  const deployAction = useDeployAction(deployTargetInput);
23
26
  const isDeploymentActive = deployAction.status === 'Booting' || deployAction.status === 'Ready';
24
- return (_jsxs(BaseDrawer, { open: open, onClose: onClose, size: "md", modal: false, "data-testid": "review-drawer", header: _jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "feature-drawer-header", children: [_jsx(DrawerTitle, { children: featureName }), featureDescription ? (_jsx(DrawerDescription, { children: featureDescription })) : featureId ? (_jsx(DrawerDescription, { className: "sr-only", children: featureId })) : null] }), actionsInput ? (_jsxs("div", { className: "flex items-center gap-2 pt-2", children: [_jsx(OpenActionMenu, { actions: actions, repositoryPath: actionsInput.repositoryPath, showSpecs: !!specPath }), featureFlags.envDeploy && deployTargetInput ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeploymentActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeploymentActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) })) : null, featureFlags.envDeploy && isDeploymentActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url })) : null, onDelete && featureId ? (_jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Delete feature", disabled: isDeleting, className: "text-muted-foreground hover:text-destructive ml-auto", "data-testid": "review-drawer-delete", children: isDeleting ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : (_jsx(Trash2, { className: "size-4" })) }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete feature?" }), _jsxs(AlertDialogDescription, { children: ["This will permanently delete ", _jsx("strong", { children: featureName }), " (", featureId, "). This action cannot be undone."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: isDeleting, children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", disabled: isDeleting, onClick: () => onDelete(featureId), children: isDeleting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Deleting\u2026"] })) : ('Delete') })] })] })] })) : null] })) : null] }), children: [_jsx(Separator, {}), _jsx("div", { className: "flex min-h-0 flex-1 flex-col", children: children })] }));
27
+ return (_jsx(BaseDrawer, { open: open, onClose: handleClose, size: "md", modal: false, "data-testid": "review-drawer", header: _jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "feature-drawer-header", children: [_jsx(DrawerTitle, { children: featureName }), featureDescription ? (_jsx(DrawerDescription, { children: featureDescription })) : featureId ? (_jsx(DrawerDescription, { className: "sr-only", children: featureId })) : null] }), actionsInput ? (_jsxs("div", { className: "flex items-center gap-2 pt-2", children: [_jsx(OpenActionMenu, { actions: actions, repositoryPath: actionsInput.repositoryPath, showSpecs: !!specPath }), featureFlags.envDeploy && deployTargetInput ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(ActionButton, { label: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server', onClick: isDeploymentActive ? deployAction.stop : deployAction.deploy, loading: deployAction.deployLoading || deployAction.stopLoading, error: !!deployAction.deployError, icon: isDeploymentActive ? Square : Play, iconOnly: true, variant: "outline", size: "icon-sm" }) }) }), _jsx(TooltipContent, { children: isDeploymentActive ? 'Stop Dev Server' : 'Start Dev Server' })] }) })) : null, featureFlags.envDeploy && isDeploymentActive ? (_jsx(DeploymentStatusBadge, { status: deployAction.status, url: deployAction.url })) : null, onDelete && featureId ? (_jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Delete feature", disabled: isDeleting, className: "text-muted-foreground hover:text-destructive ml-auto", "data-testid": "review-drawer-delete", children: isDeleting ? (_jsx(Loader2, { className: "size-4 animate-spin" })) : (_jsx(Trash2, { className: "size-4" })) }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: "Delete feature?" }), _jsxs(AlertDialogDescription, { children: ["This will permanently delete ", _jsx("strong", { children: featureName }), " (", featureId, "). This action cannot be undone."] })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { disabled: isDeleting, children: "Cancel" }), _jsx(AlertDialogAction, { variant: "destructive", disabled: isDeleting, onClick: () => onDelete(featureId), children: isDeleting ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }), "Deleting\u2026"] })) : ('Delete') })] })] })] })) : null] })) : null] }), children: children }));
25
28
  }
@@ -3,7 +3,7 @@ import { useState } from 'react';
3
3
  import { fn } from '@storybook/test';
4
4
  import { ReviewDrawerShell } from './review-drawer-shell.js';
5
5
  const meta = {
6
- title: 'Composed/ReviewDrawerShell',
6
+ title: 'Drawers/Review/ReviewDrawerShell',
7
7
  component: ReviewDrawerShell,
8
8
  tags: ['autodocs'],
9
9
  parameters: {
@@ -1 +1 @@
1
- {"version":3,"file":"tech-decisions-review.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,wBAAwB,EAAgB,MAAM,gCAAgC,CAAC;AAgH7F,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,YAAoB,EACpB,WAAmB,GACpB,EAAE,wBAAwB,kDA6C1B"}
1
+ {"version":3,"file":"tech-decisions-review.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,wBAAwB,EAAgB,MAAM,gCAAgC,CAAC;AAgH7F,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,YAAoB,EACpB,WAAmB,GACpB,EAAE,wBAAwB,kDA4C1B"}
@@ -38,5 +38,5 @@ export function TechDecisionsReview({ data, onApprove, onReject, isProcessing =
38
38
  const { summary, decisions } = data;
39
39
  if (decisions.length === 0)
40
40
  return null;
41
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsxs("div", { className: "flex-1 space-y-4 overflow-y-auto p-4", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "mt-1.5 h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500" }), _jsxs("div", { className: "flex-1", children: [_jsx("h2", { className: "text-foreground text-sm font-bold", children: "Technical Implementation Plan Review" }), summary ? (_jsx("p", { className: "text-muted-foreground mt-1 text-xs leading-relaxed", children: summary })) : null] })] }), _jsxs("div", { className: "flex items-center gap-2 pt-1", children: [_jsx(GitCompareArrows, { className: "text-primary h-4 w-4" }), _jsx("h3", { className: "text-foreground text-sm font-bold", children: "Technical Decisions" })] }), decisions.map((decision, i) => (_jsx(DecisionCard, { decision: decision, index: i }, decision.title)))] }), _jsx(DrawerActionBar, { onReject: onReject, onApprove: onApprove, approveLabel: "Approve Plan", approveIcon: _jsx(Check, { className: "mr-1.5 h-4 w-4" }), revisionPlaceholder: "Ask AI to revise the plan...", rejectDialogTitle: "Reject Plan", isProcessing: isProcessing, isRejecting: isRejecting })] }));
41
+ return (_jsxs("div", { className: "flex flex-1 flex-col", children: [_jsxs("div", { className: "flex-1 space-y-4 overflow-y-auto p-4", children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "mt-1.5 h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500" }), _jsxs("div", { className: "flex-1", children: [_jsx("h2", { className: "text-foreground text-sm font-bold", children: "Technical Implementation Plan Review" }), summary ? (_jsx("p", { className: "text-muted-foreground mt-1 text-xs leading-relaxed", children: summary })) : null] })] }), _jsxs("div", { className: "flex items-center gap-2 pt-1", children: [_jsx(GitCompareArrows, { className: "text-primary h-4 w-4" }), _jsx("h3", { className: "text-foreground text-sm font-bold", children: "Technical Decisions" })] }), decisions.map((decision, i) => (_jsx(DecisionCard, { decision: decision, index: i }, decision.title)))] }), _jsx(DrawerActionBar, { onReject: onReject, onApprove: onApprove, approveLabel: "Approve Plan", approveIcon: _jsx(Check, { className: "mr-1.5 h-4 w-4" }), revisionPlaceholder: "Ask AI to revise the plan...", isProcessing: isProcessing, isRejecting: isRejecting })] }));
42
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tech-decisions-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AA0C9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAc1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAElD,oHAAoH;AACpH,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AA8BxD,uCAAuC;AACvC,eAAO,MAAM,QAAQ,EAAE,WAWtB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAY9B,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,WAa3B,CAAC;AAIF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
1
+ {"version":3,"file":"tech-decisions-review.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AA0C9D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAc1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAElD,oHAAoH;AACpH,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,uBAAuB;AACvB,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,cAAc,EAAE,KAM5B,CAAC;AAIF,KAAK,WAAW,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AA6BxD,uCAAuC;AACvC,eAAO,MAAM,QAAQ,EAAE,WAWtB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,WAY9B,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,aAAa,EAAE,WAa3B,CAAC;AAIF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,cAAc,EAAE,KAO5B,CAAC"}
@@ -36,7 +36,7 @@ const mockData = {
36
36
  };
37
37
  /* ─── Standalone TechDecisionsReview ─── */
38
38
  const meta = {
39
- title: 'Composed/TechDecisionsReview',
39
+ title: 'Drawers/Review/TechDecisionsReview',
40
40
  component: TechDecisionsReview,
41
41
  tags: ['autodocs'],
42
42
  parameters: {
@@ -80,7 +80,6 @@ export const NoTechnologies = {
80
80
  },
81
81
  };
82
82
  const drawerMeta = {
83
- title: 'Composed/TechDecisionsDrawer',
84
83
  component: TechDecisionsDrawer,
85
84
  tags: ['autodocs'],
86
85
  parameters: {
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAgB1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAc5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CAoczF"}
1
+ {"version":3,"file":"control-center-inner.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-inner.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAU5E,UAAU,uBAAuB;IAC/B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,YAAY,EAAE,IAAI,EAAE,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,uBAAuB,2CAwJzF"}