@shepai/cli 1.57.0 → 1.59.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 (195) hide show
  1. package/dist/src/presentation/web/app/page.d.ts.map +1 -1
  2. package/dist/src/presentation/web/app/page.js +9 -0
  3. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-button.d.ts.map +1 -1
  4. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-button.js +4 -2
  5. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.d.ts +2 -0
  6. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.d.ts.map +1 -1
  7. package/dist/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.js +6 -0
  8. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.d.ts +5 -0
  9. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.d.ts.map +1 -0
  10. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.js +14 -0
  11. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts +12 -0
  12. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.d.ts.map +1 -0
  13. package/dist/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.js +20 -0
  14. package/dist/src/presentation/web/components/common/ci-status-badge/index.d.ts +2 -0
  15. package/dist/src/presentation/web/components/common/ci-status-badge/index.d.ts.map +1 -0
  16. package/dist/src/presentation/web/components/common/ci-status-badge/index.js +1 -0
  17. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
  18. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +13 -2
  19. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +8 -0
  20. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
  21. package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +41 -0
  22. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +9 -0
  23. package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
  24. package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
  25. package/dist/src/presentation/web/components/common/merge-review/merge-review.js +2 -12
  26. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  27. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +9 -0
  28. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  29. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +3 -3
  30. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +0 -1
  31. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  32. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +1 -31
  33. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
  34. package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +5 -1
  35. package/dist/tsconfig.build.tsbuildinfo +1 -1
  36. package/package.json +1 -1
  37. package/web/.next/BUILD_ID +1 -1
  38. package/web/.next/build-manifest.json +2 -2
  39. package/web/.next/cache/.previewinfo +1 -1
  40. package/web/.next/cache/.rscinfo +1 -1
  41. package/web/.next/cache/.tsbuildinfo +1 -1
  42. package/web/.next/cache/config.json +3 -3
  43. package/web/.next/fallback-build-manifest.json +2 -2
  44. package/web/.next/prerender-manifest.json +3 -3
  45. package/web/.next/required-server-files.js +1 -1
  46. package/web/.next/required-server-files.json +1 -1
  47. package/web/.next/server/app/_global-error/page.js +1 -1
  48. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  49. package/web/.next/server/app/_global-error.html +2 -2
  50. package/web/.next/server/app/_global-error.rsc +1 -1
  51. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  52. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  53. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  54. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  56. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +17 -1
  57. package/web/.next/server/app/_not-found/page.js +2 -2
  58. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  59. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/api/dialog/pick-files/route.js +1 -1
  61. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  62. package/web/.next/server/app/page/server-reference-manifest.json +41 -41
  63. package/web/.next/server/app/page.js +2 -3
  64. package/web/.next/server/app/page.js.nft.json +1 -1
  65. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/tools/page/server-reference-manifest.json +17 -1
  67. package/web/.next/server/app/tools/page.js +2 -2
  68. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  69. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/version/page/server-reference-manifest.json +17 -1
  71. package/web/.next/server/app/version/page.js +2 -2
  72. package/web/.next/server/app/version/page.js.nft.json +1 -1
  73. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  74. package/web/.next/server/chunks/{[root-of-the-server]__332c8d91._.js → [root-of-the-server]__a6bf88cc._.js} +2 -2
  75. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +4 -0
  76. package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -0
  77. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
  78. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -0
  79. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
  80. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -0
  81. package/web/.next/server/chunks/ssr/[root-of-the-server]__86c7bba5._.js +9 -0
  82. package/web/.next/server/chunks/ssr/[root-of-the-server]__86c7bba5._.js.map +1 -0
  83. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +12 -0
  84. package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -0
  85. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__dbd220d2._.js → server/chunks/ssr/[root-of-the-server]__b79b0516._.js} +2 -2
  86. package/web/.next/server/chunks/ssr/{[root-of-the-server]__dbd220d2._.js.map → [root-of-the-server]__b79b0516._.js.map} +1 -1
  87. package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__847521e6._.js → server/chunks/ssr/[root-of-the-server]__bced1185._.js} +2 -2
  88. package/web/.next/server/chunks/ssr/{[root-of-the-server]__847521e6._.js.map → [root-of-the-server]__bced1185._.js.map} +1 -1
  89. package/web/.next/server/chunks/ssr/{[root-of-the-server]__757c7912._.js → [root-of-the-server]__f7f90528._.js} +2 -2
  90. package/web/.next/server/chunks/ssr/{[root-of-the-server]__757c7912._.js.map → [root-of-the-server]__f7f90528._.js.map} +1 -1
  91. package/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
  92. package/web/.next/server/chunks/ssr/{_0e2c2b4f._.js → _027596cf._.js} +2 -2
  93. package/web/.next/server/chunks/ssr/_027596cf._.js.map +1 -0
  94. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  95. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  97. package/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js.map +1 -1
  98. package/web/.next/server/pages/500.html +2 -2
  99. package/web/.next/server/server-reference-manifest.js +1 -1
  100. package/web/.next/server/server-reference-manifest.json +63 -42
  101. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  102. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  103. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  104. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  105. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js +1 -1
  106. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  107. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  108. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  109. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  110. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  111. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  112. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  113. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  114. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +17 -1
  115. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js +2 -2
  116. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  117. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  118. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-files/route.js +1 -1
  119. package/web/.next/standalone/src/presentation/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  120. package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +41 -41
  121. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +2 -3
  122. package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
  123. package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
  124. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +17 -1
  125. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js +2 -2
  126. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
  127. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  128. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +17 -1
  129. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js +2 -2
  130. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
  131. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  132. package/web/.next/standalone/src/presentation/web/.next/server/chunks/{[root-of-the-server]__332c8d91._.js → [root-of-the-server]__a6bf88cc._.js} +2 -2
  133. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +4 -0
  134. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
  135. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
  136. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__86c7bba5._.js +9 -0
  137. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +12 -0
  138. package/web/.next/{server/chunks/ssr/[root-of-the-server]__dbd220d2._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__b79b0516._.js} +2 -2
  139. package/web/.next/{server/chunks/ssr/[root-of-the-server]__847521e6._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__bced1185._.js} +2 -2
  140. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__757c7912._.js → [root-of-the-server]__f7f90528._.js} +2 -2
  141. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fbc89707._.js +1 -1
  142. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_0e2c2b4f._.js → _027596cf._.js} +2 -2
  143. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  144. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_ed0934e5._.js +1 -1
  145. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  146. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  147. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +63 -42
  148. package/web/.next/standalone/src/presentation/web/app/page.tsx +9 -0
  149. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-button.tsx +24 -15
  150. package/web/.next/standalone/src/presentation/web/components/common/add-repository-node/add-repository-node.stories.tsx +12 -0
  151. package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/ci-status-badge.stories.tsx +27 -0
  152. package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/ci-status-badge.tsx +29 -0
  153. package/web/.next/standalone/src/presentation/web/components/common/ci-status-badge/index.ts +1 -0
  154. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +53 -0
  155. package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +61 -1
  156. package/web/.next/standalone/src/presentation/web/components/common/feature-node/feature-node-state-config.ts +9 -0
  157. package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.tsx +1 -29
  158. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +10 -0
  159. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx +0 -41
  160. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +2 -7
  161. package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +6 -0
  162. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  163. package/web/.next/static/chunks/4f7d89c9e09aed99.js +10 -0
  164. package/web/.next/static/chunks/{ef237b70209d9853.js → 67459433cc866344.js} +1 -1
  165. package/web/.next/static/chunks/{7138c478667158d0.js → 6d33cb9af6245c98.js} +1 -1
  166. package/web/.next/static/chunks/b511c65023ec1889.css +2 -0
  167. package/web/.next/static/chunks/d85b95e893db08bc.js +1 -0
  168. package/web/.next/trace +1 -1
  169. package/web/.next/trace-build +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +0 -9
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js.map +0 -1
  172. package/web/.next/server/chunks/ssr/[root-of-the-server]__48c68a96._.js +0 -12
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__48c68a96._.js.map +0 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__950afd5e._.js +0 -3
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__950afd5e._.js.map +0 -1
  176. package/web/.next/server/chunks/ssr/_0e2c2b4f._.js.map +0 -1
  177. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_a836bb2a.js +0 -3
  178. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_a836bb2a.js.map +0 -1
  179. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_f1dd7791.js +0 -3
  180. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_f1dd7791.js.map +0 -1
  181. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_ea925032.js +0 -3
  182. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_ea925032.js.map +0 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2d1a8e37._.js +0 -9
  184. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__48c68a96._.js +0 -12
  185. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__950afd5e._.js +0 -3
  186. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_a836bb2a.js +0 -3
  187. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_f1dd7791.js +0 -3
  188. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_ea925032.js +0 -3
  189. package/web/.next/static/chunks/225de19e886a62ab.js +0 -10
  190. package/web/.next/static/chunks/4651f20be1a3b7d7.css +0 -2
  191. package/web/.next/static/chunks/a1f2befd62b321c0.js +0 -1
  192. /package/web/.next/server/chunks/{[root-of-the-server]__332c8d91._.js.map → [root-of-the-server]__a6bf88cc._.js.map} +0 -0
  193. /package/web/.next/static/{V2579MPjpJ_hqKjPsmMlR → xjc1tfvwTdK1Xv5Id2oaO}/_buildManifest.js +0 -0
  194. /package/web/.next/static/{V2579MPjpJ_hqKjPsmMlR → xjc1tfvwTdK1Xv5Id2oaO}/_clientMiddlewareManifest.json +0 -0
  195. /package/web/.next/static/{V2579MPjpJ_hqKjPsmMlR → xjc1tfvwTdK1Xv5Id2oaO}/_ssgManifest.js +0 -0
@@ -1,9 +1,45 @@
1
1
  {
2
2
  "node": {
3
- "60f7f22fb9e333f67ad58167be0c70550f76e3b676": {
3
+ "00f283d375a68f16f486b4d96a73d29642d70e2c49": {
4
+ "workers": {
5
+ "app/_not-found/page": {
6
+ "moduleId": 66973,
7
+ "async": false,
8
+ "exportedName": "pickFolder",
9
+ "filename": "src/presentation/web/app/actions/pick-folder.ts"
10
+ },
11
+ "app/page": {
12
+ "moduleId": 16555,
13
+ "async": false,
14
+ "exportedName": "pickFolder",
15
+ "filename": "src/presentation/web/app/actions/pick-folder.ts"
16
+ },
17
+ "app/tools/page": {
18
+ "moduleId": 19036,
19
+ "async": false,
20
+ "exportedName": "pickFolder",
21
+ "filename": "src/presentation/web/app/actions/pick-folder.ts"
22
+ },
23
+ "app/version/page": {
24
+ "moduleId": 86139,
25
+ "async": false,
26
+ "exportedName": "pickFolder",
27
+ "filename": "src/presentation/web/app/actions/pick-folder.ts"
28
+ }
29
+ },
30
+ "layer": {
31
+ "app/_not-found/page": "action-browser",
32
+ "app/page": "action-browser",
33
+ "app/tools/page": "action-browser",
34
+ "app/version/page": "action-browser"
35
+ },
36
+ "filename": "src/presentation/web/app/actions/pick-folder.ts",
37
+ "exportedName": "pickFolder"
38
+ },
39
+ "604b2436c25d3184a91e706af2aee635c1ebd4a82d": {
4
40
  "workers": {
5
41
  "app/page": {
6
- "moduleId": 4510,
42
+ "moduleId": 16555,
7
43
  "async": false,
8
44
  "exportedName": "approveFeature",
9
45
  "filename": "src/presentation/web/app/actions/approve-feature.ts"
@@ -15,10 +51,10 @@
15
51
  "filename": "src/presentation/web/app/actions/approve-feature.ts",
16
52
  "exportedName": "approveFeature"
17
53
  },
18
- "60a4e0164673c8bc1d87ee21164f4f33ed750943c3": {
54
+ "606b19bfa1c0b5083719b9769235270652970ac528": {
19
55
  "workers": {
20
56
  "app/page": {
21
- "moduleId": 4510,
57
+ "moduleId": 16555,
22
58
  "async": false,
23
59
  "exportedName": "rejectFeature",
24
60
  "filename": "src/presentation/web/app/actions/reject-feature.ts"
@@ -30,10 +66,10 @@
30
66
  "filename": "src/presentation/web/app/actions/reject-feature.ts",
31
67
  "exportedName": "rejectFeature"
32
68
  },
33
- "40e91f55e92f3aab97479c09c043102a587c0e0d0e": {
69
+ "40ab134a3e230ca75ec945b21530996f28478eaebd": {
34
70
  "workers": {
35
71
  "app/page": {
36
- "moduleId": 4510,
72
+ "moduleId": 16555,
37
73
  "async": false,
38
74
  "exportedName": "getFeatureArtifact",
39
75
  "filename": "src/presentation/web/app/actions/get-feature-artifact.ts"
@@ -45,10 +81,10 @@
45
81
  "filename": "src/presentation/web/app/actions/get-feature-artifact.ts",
46
82
  "exportedName": "getFeatureArtifact"
47
83
  },
48
- "40453c4100e8bb0f9e318bfcfbe9fc0ceb8b75e1f7": {
84
+ "4089deaf16fedc6a345e56ad7bfc988b487e34eefa": {
49
85
  "workers": {
50
86
  "app/page": {
51
- "moduleId": 4510,
87
+ "moduleId": 16555,
52
88
  "async": false,
53
89
  "exportedName": "getResearchArtifact",
54
90
  "filename": "src/presentation/web/app/actions/get-research-artifact.ts"
@@ -60,10 +96,10 @@
60
96
  "filename": "src/presentation/web/app/actions/get-research-artifact.ts",
61
97
  "exportedName": "getResearchArtifact"
62
98
  },
63
- "00f4eab6722fd6a22f18738f2d411bca6aa771147b": {
99
+ "004b4a427a9b3db7f8002cfc69e453961d25caa5c5": {
64
100
  "workers": {
65
101
  "app/page": {
66
- "moduleId": 4510,
102
+ "moduleId": 16555,
67
103
  "async": false,
68
104
  "exportedName": "getWorkflowDefaults",
69
105
  "filename": "src/presentation/web/app/actions/get-workflow-defaults.ts"
@@ -75,10 +111,10 @@
75
111
  "filename": "src/presentation/web/app/actions/get-workflow-defaults.ts",
76
112
  "exportedName": "getWorkflowDefaults"
77
113
  },
78
- "407199288e8e7d84193f4f001ba5c9e791d68186c3": {
114
+ "402a4ec8d26f9c9f41e698de41dd62bd38c3094f15": {
79
115
  "workers": {
80
116
  "app/page": {
81
- "moduleId": 4510,
117
+ "moduleId": 16555,
82
118
  "async": false,
83
119
  "exportedName": "getMergeReviewData",
84
120
  "filename": "src/presentation/web/app/actions/get-merge-review-data.ts"
@@ -90,10 +126,10 @@
90
126
  "filename": "src/presentation/web/app/actions/get-merge-review-data.ts",
91
127
  "exportedName": "getMergeReviewData"
92
128
  },
93
- "4048bf9e5685b4e673ea0358836b9d555a599905f5": {
129
+ "40548f2101be4900dc1959a49650c2e0006397bd9a": {
94
130
  "workers": {
95
131
  "app/page": {
96
- "moduleId": 4510,
132
+ "moduleId": 16555,
97
133
  "async": false,
98
134
  "exportedName": "openIde",
99
135
  "filename": "src/presentation/web/app/actions/open-ide.ts"
@@ -105,10 +141,10 @@
105
141
  "filename": "src/presentation/web/app/actions/open-ide.ts",
106
142
  "exportedName": "openIde"
107
143
  },
108
- "40cafd7014cc8993aba594914b88ec2b4d2a5d6f9a": {
144
+ "40586217019fa643c0babbbde4463a3cc1c92294e3": {
109
145
  "workers": {
110
146
  "app/page": {
111
- "moduleId": 4510,
147
+ "moduleId": 16555,
112
148
  "async": false,
113
149
  "exportedName": "openShell",
114
150
  "filename": "src/presentation/web/app/actions/open-shell.ts"
@@ -120,10 +156,10 @@
120
156
  "filename": "src/presentation/web/app/actions/open-shell.ts",
121
157
  "exportedName": "openShell"
122
158
  },
123
- "40884a86d5c92522c25faf7a5eba9e8860faab1c9c": {
159
+ "40515f42aff14843ca67f2bd609b840bdda32955f9": {
124
160
  "workers": {
125
161
  "app/page": {
126
- "moduleId": 4510,
162
+ "moduleId": 16555,
127
163
  "async": false,
128
164
  "exportedName": "openFolder",
129
165
  "filename": "src/presentation/web/app/actions/open-folder.ts"
@@ -135,25 +171,10 @@
135
171
  "filename": "src/presentation/web/app/actions/open-folder.ts",
136
172
  "exportedName": "openFolder"
137
173
  },
138
- "004760a0efa55a18175f4eae285c7666da36f2aaf3": {
139
- "workers": {
140
- "app/page": {
141
- "moduleId": 4510,
142
- "async": false,
143
- "exportedName": "pickFolder",
144
- "filename": "src/presentation/web/app/actions/pick-folder.ts"
145
- }
146
- },
147
- "layer": {
148
- "app/page": "action-browser"
149
- },
150
- "filename": "src/presentation/web/app/actions/pick-folder.ts",
151
- "exportedName": "pickFolder"
152
- },
153
- "400ce58b45c3a6d27dc5430fab6ff5d608fdf9d798": {
174
+ "40d08b0d92d2b703d3db56e765e35375751ac01684": {
154
175
  "workers": {
155
176
  "app/page": {
156
- "moduleId": 4510,
177
+ "moduleId": 16555,
157
178
  "async": false,
158
179
  "exportedName": "createFeature",
159
180
  "filename": "src/presentation/web/app/actions/create-feature.ts"
@@ -165,10 +186,10 @@
165
186
  "filename": "src/presentation/web/app/actions/create-feature.ts",
166
187
  "exportedName": "createFeature"
167
188
  },
168
- "4012a355d40514d64e25d8821a6467a18a27ed7556": {
189
+ "4041951039830c9a9b9643f88550f93dec377c5f3f": {
169
190
  "workers": {
170
191
  "app/page": {
171
- "moduleId": 4510,
192
+ "moduleId": 16555,
172
193
  "async": false,
173
194
  "exportedName": "deleteFeature",
174
195
  "filename": "src/presentation/web/app/actions/delete-feature.ts"
@@ -180,10 +201,10 @@
180
201
  "filename": "src/presentation/web/app/actions/delete-feature.ts",
181
202
  "exportedName": "deleteFeature"
182
203
  },
183
- "408d4d1c0a2f9fde0c18abaf9e2f477d060a65fb31": {
204
+ "40fbe3ea2311abba27bc48c26f5508fb7025e4f58a": {
184
205
  "workers": {
185
206
  "app/page": {
186
- "moduleId": 4510,
207
+ "moduleId": 16555,
187
208
  "async": false,
188
209
  "exportedName": "addRepository",
189
210
  "filename": "src/presentation/web/app/actions/add-repository.ts"
@@ -195,10 +216,10 @@
195
216
  "filename": "src/presentation/web/app/actions/add-repository.ts",
196
217
  "exportedName": "addRepository"
197
218
  },
198
- "400034429aeafce8e2a1fa82e2786c7899d47e2430": {
219
+ "404aff2a63b14ad2f9b6417055e6f2ba87fe90e911": {
199
220
  "workers": {
200
221
  "app/page": {
201
- "moduleId": 4510,
222
+ "moduleId": 16555,
202
223
  "async": false,
203
224
  "exportedName": "deleteRepository",
204
225
  "filename": "src/presentation/web/app/actions/delete-repository.ts"
@@ -212,5 +233,5 @@
212
233
  }
213
234
  },
214
235
  "edge": {},
215
- "encryptionKey": "e/JLE86x7YjRigPGZiByLlNElJs6bEMqHfLqHyWcbUw="
236
+ "encryptionKey": "/62RwJFHaetWcHvJhUZemNYnHwGJ6+ItihS+zZR0WQw="
216
237
  }
@@ -104,6 +104,15 @@ export default async function HomePage() {
104
104
  ...(run?.agentType && { agentType: run.agentType as FeatureNodeData['agentType'] }),
105
105
  ...(run?.error && { errorMessage: run.error }),
106
106
  ...(blockedBy && { blockedBy }),
107
+ ...(feature.pr && {
108
+ pr: {
109
+ url: feature.pr.url,
110
+ number: feature.pr.number,
111
+ status: feature.pr.status,
112
+ ciStatus: feature.pr.ciStatus,
113
+ commitHash: feature.pr.commitHash,
114
+ },
115
+ }),
107
116
  };
108
117
 
109
118
  const featureNodeId = `feat-${feature.id}`;
@@ -1,7 +1,9 @@
1
1
  'use client';
2
2
 
3
3
  import { useState } from 'react';
4
- import { Plus, Loader2 } from 'lucide-react';
4
+ import { FolderPlus, Loader2 } from 'lucide-react';
5
+ import { Button } from '@/components/ui/button';
6
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
5
7
  import { pickFolder } from './pick-folder';
6
8
 
7
9
  interface AddRepositoryButtonProps {
@@ -25,19 +27,26 @@ export function AddRepositoryButton({ onSelect }: AddRepositoryButtonProps) {
25
27
  }
26
28
 
27
29
  return (
28
- <button
29
- type="button"
30
- data-testid="add-repository-button"
31
- onClick={handleClick}
32
- disabled={loading}
33
- className="border-muted-foreground/30 flex cursor-pointer items-center gap-2 rounded-full border-2 border-dashed px-3 py-1.5 text-xs transition-colors hover:border-blue-500 hover:text-blue-500 disabled:cursor-wait disabled:opacity-60"
34
- >
35
- {loading ? (
36
- <Loader2 className="h-3.5 w-3.5 shrink-0 animate-spin" />
37
- ) : (
38
- <Plus className="h-3.5 w-3.5 shrink-0" />
39
- )}
40
- <span className="font-medium">{loading ? 'Opening...' : 'Add Repository'}</span>
41
- </button>
30
+ <TooltipProvider>
31
+ <Tooltip>
32
+ <TooltipTrigger asChild>
33
+ <Button
34
+ variant="ghost"
35
+ size="icon"
36
+ aria-label="Add Repository"
37
+ data-testid="add-repository-button"
38
+ onClick={handleClick}
39
+ disabled={loading}
40
+ >
41
+ {loading ? (
42
+ <Loader2 className="h-5 w-5 animate-spin" />
43
+ ) : (
44
+ <FolderPlus className="h-5 w-5" />
45
+ )}
46
+ </Button>
47
+ </TooltipTrigger>
48
+ <TooltipContent>Add Repository</TooltipContent>
49
+ </Tooltip>
50
+ </TooltipProvider>
42
51
  );
43
52
  }
@@ -2,6 +2,7 @@ import { useMemo } from 'react';
2
2
  import type { Meta, StoryObj } from '@storybook/react';
3
3
  import { ReactFlowProvider, ReactFlow } from '@xyflow/react';
4
4
  import { AddRepositoryNode } from './add-repository-node';
5
+ import { AddRepositoryButton } from './add-repository-button';
5
6
  import type { AddRepositoryNodeData, AddRepositoryNodeType } from './add-repository-node-config';
6
7
 
7
8
  const nodeTypes = { addRepositoryNode: AddRepositoryNode };
@@ -56,3 +57,14 @@ export const WithCallback: Story = {
56
57
  },
57
58
  render: (args) => <AddRepositoryNodeCanvas data={args} />,
58
59
  };
60
+
61
+ // --- Add Repository Button (top bar icon) stories ---
62
+
63
+ /** Add Repository button as it appears in the top bar alongside other toggles */
64
+ export const TopBarButton: StoryObj = {
65
+ render: () => (
66
+ <div className="flex gap-1">
67
+ <AddRepositoryButton onSelect={() => undefined} />
68
+ </div>
69
+ ),
70
+ };
@@ -0,0 +1,27 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { CiStatus } from '@shepai/core/domain/generated/output';
3
+ import { CiStatusBadge } from './ci-status-badge';
4
+
5
+ const meta: Meta<typeof CiStatusBadge> = {
6
+ title: 'Common/CiStatusBadge',
7
+ component: CiStatusBadge,
8
+ tags: ['autodocs'],
9
+ };
10
+
11
+ export default meta;
12
+ type Story = StoryObj<typeof CiStatusBadge>;
13
+
14
+ /** CI passed — green badge with check icon. */
15
+ export const Success: Story = {
16
+ args: { status: CiStatus.Success },
17
+ };
18
+
19
+ /** CI pending — yellow badge with animated spinner. */
20
+ export const Pending: Story = {
21
+ args: { status: CiStatus.Pending },
22
+ };
23
+
24
+ /** CI failed — red badge with X icon. */
25
+ export const Failure: Story = {
26
+ args: { status: CiStatus.Failure },
27
+ };
@@ -0,0 +1,29 @@
1
+ import { CheckCircle2, Loader2, XCircle } from 'lucide-react';
2
+ import { CiStatus } from '@shepai/core/domain/generated/output';
3
+ import { Badge } from '@/components/ui/badge';
4
+
5
+ export function CiStatusBadge({ status }: { status: CiStatus }) {
6
+ switch (status) {
7
+ case CiStatus.Success:
8
+ return (
9
+ <Badge className="border-transparent bg-green-50 text-green-700 hover:bg-green-50">
10
+ <CheckCircle2 className="mr-1 h-3.5 w-3.5" />
11
+ Passing
12
+ </Badge>
13
+ );
14
+ case CiStatus.Pending:
15
+ return (
16
+ <Badge className="border-transparent bg-yellow-50 text-yellow-700 hover:bg-yellow-50">
17
+ <Loader2 className="mr-1 h-3.5 w-3.5 animate-spin" />
18
+ Pending
19
+ </Badge>
20
+ );
21
+ case CiStatus.Failure:
22
+ return (
23
+ <Badge className="border-transparent bg-red-50 text-red-700 hover:bg-red-50">
24
+ <XCircle className="mr-1 h-3.5 w-3.5" />
25
+ Failing
26
+ </Badge>
27
+ );
28
+ }
29
+ }
@@ -0,0 +1 @@
1
+ export { CiStatusBadge } from './ci-status-badge';
@@ -1,5 +1,6 @@
1
1
  import { useState } from 'react';
2
2
  import type { Meta, StoryObj } from '@storybook/react';
3
+ import { PrStatus, CiStatus } from '@shepai/core/domain/generated/output';
3
4
  import { FeatureDrawer } from './feature-drawer';
4
5
  import type { FeatureNodeData } from '@/components/common/feature-node';
5
6
  import type { FeatureLifecyclePhase, FeatureNodeState } from '@/components/common/feature-node';
@@ -353,3 +354,55 @@ export const DeletingState: Story = {
353
354
  export const DeleteRunningAgent: Story = {
354
355
  render: () => <DrawerTriggerWithDelete data={runningData} label="Open Running Agent Delete" />,
355
356
  };
357
+
358
+ /* ---------------------------------------------------------------------------
359
+ * PR info stories
360
+ * ------------------------------------------------------------------------- */
361
+
362
+ const doneWithPrData: FeatureNodeData = {
363
+ ...doneData,
364
+ pr: {
365
+ url: 'https://github.com/org/repo/pull/42',
366
+ number: 42,
367
+ status: PrStatus.Merged,
368
+ ciStatus: CiStatus.Success,
369
+ commitHash: 'abc1234567890def',
370
+ },
371
+ };
372
+
373
+ const doneWithPartialPrData: FeatureNodeData = {
374
+ ...doneData,
375
+ pr: {
376
+ url: 'https://github.com/org/repo/pull/99',
377
+ number: 99,
378
+ status: PrStatus.Merged,
379
+ },
380
+ };
381
+
382
+ /** Done feature with full PR card — number, status, CI, commit hash. */
383
+ export const DoneWithPr: Story = {
384
+ render: () => <DrawerTrigger data={doneWithPrData} label="Open Done + PR" />,
385
+ };
386
+
387
+ /** Done feature with partial PR data — no CI status, no commit hash. */
388
+ export const DoneWithPartialPr: Story = {
389
+ render: () => <DrawerTrigger data={doneWithPartialPrData} label="Open Done + Partial PR" />,
390
+ };
391
+
392
+ /** PR with Open status — blue badge. */
393
+ export const PrStatusOpen: Story = {
394
+ render: () => (
395
+ <DrawerTrigger
396
+ data={{
397
+ ...doneWithPrData,
398
+ pr: { ...doneWithPrData.pr!, status: PrStatus.Open, ciStatus: CiStatus.Pending },
399
+ }}
400
+ label="Open PR Status: Open"
401
+ />
402
+ ),
403
+ };
404
+
405
+ /** PR with Merged status — purple badge. */
406
+ export const PrStatusMerged: Story = {
407
+ render: () => <DrawerTrigger data={doneWithPrData} label="Open PR Status: Merged" />,
408
+ };
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { XIcon, Loader2, Trash2 } from 'lucide-react';
3
+ import { XIcon, Loader2, Trash2, ExternalLink, GitCommitHorizontal } from 'lucide-react';
4
+ import { PrStatus } from '@shepai/core/domain/generated/output';
4
5
  import { cn } from '@/lib/utils';
5
6
  import { OpenActionMenu } from '@/components/common/open-action-menu';
6
7
  import {
@@ -11,6 +12,7 @@ import {
11
12
  DrawerDescription,
12
13
  } from '@/components/ui/drawer';
13
14
  import { Button } from '@/components/ui/button';
15
+ import { Badge } from '@/components/ui/badge';
14
16
  import { Separator } from '@/components/ui/separator';
15
17
  import { CometSpinner } from '@/components/ui/comet-spinner';
16
18
  import {
@@ -24,6 +26,7 @@ import {
24
26
  AlertDialogTitle,
25
27
  AlertDialogTrigger,
26
28
  } from '@/components/ui/alert-dialog';
29
+ import { CiStatusBadge } from '@/components/common/ci-status-badge';
27
30
  import { featureNodeStateConfig, lifecycleDisplayLabels } from '@/components/common/feature-node';
28
31
  import type { FeatureNodeData } from '@/components/common/feature-node';
29
32
  import { useFeatureActions } from './use-feature-actions';
@@ -108,6 +111,14 @@ export function FeatureDrawer({
108
111
  ) : null}
109
112
  </div>
110
113
 
114
+ {/* PR info */}
115
+ {selectedNode.pr ? (
116
+ <>
117
+ <Separator />
118
+ <PrInfoSection pr={selectedNode.pr} />
119
+ </>
120
+ ) : null}
121
+
111
122
  <Separator />
112
123
 
113
124
  {/* Details */}
@@ -213,6 +224,55 @@ function DetailRow({ label, value }: { label: string; value: string }) {
213
224
  );
214
225
  }
215
226
 
227
+ const prStatusStyles: Record<PrStatus, string> = {
228
+ [PrStatus.Open]: 'border-transparent bg-blue-50 text-blue-700 hover:bg-blue-50',
229
+ [PrStatus.Merged]: 'border-transparent bg-purple-50 text-purple-700 hover:bg-purple-50',
230
+ [PrStatus.Closed]: 'border-transparent bg-red-50 text-red-700 hover:bg-red-50',
231
+ };
232
+
233
+ function PrInfoSection({ pr }: { pr: NonNullable<FeatureNodeData['pr']> }) {
234
+ return (
235
+ <div data-testid="feature-drawer-pr" className="border-border mx-4 rounded-lg border">
236
+ <div className="space-y-3 px-4 py-3">
237
+ {/* PR number + link */}
238
+ <div className="flex items-center justify-between">
239
+ <a
240
+ href={pr.url}
241
+ target="_blank"
242
+ rel="noopener noreferrer"
243
+ className="text-primary flex items-center gap-1.5 text-sm font-semibold underline underline-offset-2"
244
+ >
245
+ PR #{pr.number}
246
+ <ExternalLink className="h-3.5 w-3.5" />
247
+ </a>
248
+ <Badge className={prStatusStyles[pr.status]}>{pr.status}</Badge>
249
+ </div>
250
+
251
+ {/* CI status */}
252
+ {pr.ciStatus ? (
253
+ <div className="flex items-center justify-between">
254
+ <span className="text-muted-foreground text-xs font-medium">CI Status</span>
255
+ <CiStatusBadge status={pr.ciStatus} />
256
+ </div>
257
+ ) : null}
258
+
259
+ {/* Commit hash */}
260
+ {pr.commitHash ? (
261
+ <div className="flex items-center justify-between">
262
+ <span className="text-muted-foreground text-xs font-medium">Commit</span>
263
+ <div className="flex items-center gap-1.5">
264
+ <GitCommitHorizontal className="text-muted-foreground h-3.5 w-3.5" />
265
+ <code className="bg-muted text-foreground rounded-md px-1.5 py-0.5 font-mono text-[11px]">
266
+ {pr.commitHash.slice(0, 7)}
267
+ </code>
268
+ </div>
269
+ </div>
270
+ ) : null}
271
+ </div>
272
+ </div>
273
+ );
274
+ }
275
+
216
276
  function DrawerActions({
217
277
  repositoryPath,
218
278
  branch,
@@ -1,5 +1,6 @@
1
1
  import { Loader2, CircleAlert, CircleCheck, Ban, CircleX, type LucideIcon } from 'lucide-react';
2
2
  import type { Node } from '@xyflow/react';
3
+ import type { PrStatus, CiStatus } from '@shepai/core/domain/generated/output';
3
4
  import type { AgentTypeValue } from './agent-type-icons';
4
5
 
5
6
  export type FeatureNodeState =
@@ -60,6 +61,14 @@ export interface FeatureNodeData {
60
61
  errorMessage?: string;
61
62
  /** Agent executor type (e.g. "claude-code", "cursor"). */
62
63
  agentType?: AgentTypeValue;
64
+ /** PR metadata for features with an associated pull request */
65
+ pr?: {
66
+ url: string;
67
+ number: number;
68
+ status: PrStatus;
69
+ ciStatus?: CiStatus;
70
+ commitHash?: string;
71
+ };
63
72
  onAction?: () => void;
64
73
  onSettings?: () => void;
65
74
  showHandles?: boolean;
@@ -1,11 +1,9 @@
1
1
  'use client';
2
2
 
3
3
  import {
4
- CheckCircle2,
5
4
  ExternalLink,
6
5
  GitMerge,
7
6
  Loader2,
8
- XCircle,
9
7
  AlertTriangle,
10
8
  FileDiff,
11
9
  GitCommitHorizontal,
@@ -13,37 +11,11 @@ import {
13
11
  ArrowRight,
14
12
  Layers,
15
13
  } from 'lucide-react';
16
- import { CiStatus } from '@shepai/core/domain/generated/output';
17
14
  import { Badge } from '@/components/ui/badge';
15
+ import { CiStatusBadge } from '@/components/common/ci-status-badge';
18
16
  import { DrawerActionBar } from '@/components/common/drawer-action-bar';
19
17
  import type { MergeReviewProps, MergeReviewPhase } from './merge-review-config';
20
18
 
21
- function CiStatusBadge({ status }: { status: CiStatus }) {
22
- switch (status) {
23
- case CiStatus.Success:
24
- return (
25
- <Badge className="border-transparent bg-green-50 text-green-700 hover:bg-green-50">
26
- <CheckCircle2 className="mr-1 h-3.5 w-3.5" />
27
- Passing
28
- </Badge>
29
- );
30
- case CiStatus.Pending:
31
- return (
32
- <Badge className="border-transparent bg-yellow-50 text-yellow-700 hover:bg-yellow-50">
33
- <Loader2 className="mr-1 h-3.5 w-3.5 animate-spin" />
34
- Pending
35
- </Badge>
36
- );
37
- case CiStatus.Failure:
38
- return (
39
- <Badge className="border-transparent bg-red-50 text-red-700 hover:bg-red-50">
40
- <XCircle className="mr-1 h-3.5 w-3.5" />
41
- Failing
42
- </Badge>
43
- );
44
- }
45
- }
46
-
47
19
  function PhaseList({ phases }: { phases: MergeReviewPhase[] }) {
48
20
  return (
49
21
  <div className="border-border rounded-lg border">
@@ -329,6 +329,16 @@ export function ControlCenterInner({ initialNodes, initialEdges }: ControlCenter
329
329
  return () => window.removeEventListener('shep:open-create-drawer', handler);
330
330
  }, [handleAddFeature]);
331
331
 
332
+ // Listen for global "add repository" events from the top bar button
333
+ useEffect(() => {
334
+ const handler = (e: Event) => {
335
+ const path = (e as CustomEvent<{ path: string }>).detail.path;
336
+ handleAddRepository(path);
337
+ };
338
+ window.addEventListener('shep:add-repository', handler);
339
+ return () => window.removeEventListener('shep:add-repository', handler);
340
+ }, [handleAddRepository]);
341
+
332
342
  // Listen for notification "Review" clicks to open the relevant drawer
333
343
  useEffect(() => {
334
344
  const handler = (e: Event) => {
@@ -608,44 +608,3 @@ export const InteractiveWithRepository: Story = {
608
608
  onRepositoryAdd: () => undefined,
609
609
  },
610
610
  };
611
-
612
- // Story to visually verify the Add Repository button does not overlap the ThemeToggle.
613
- // The simulated ThemeToggle (top-3 right-3, 40×40 px) is rendered as an overlay so
614
- // reviewers can confirm the mr-16 (64 px) gap keeps the Panel clear of the toggle zone.
615
- export const AddRepositoryButtonClearanceCheck: Story = {
616
- decorators: [
617
- (Story) => (
618
- <div style={{ height: '100vh', position: 'relative' }}>
619
- <Story />
620
- {/* Simulated ThemeToggle at top-3 right-3 (same position as AppShell) */}
621
- <div
622
- style={{
623
- position: 'absolute',
624
- top: 12,
625
- right: 12,
626
- width: 40,
627
- height: 40,
628
- background: 'rgba(255, 0, 0, 0.35)',
629
- border: '2px dashed red',
630
- borderRadius: 6,
631
- display: 'flex',
632
- alignItems: 'center',
633
- justifyContent: 'center',
634
- fontSize: 10,
635
- pointerEvents: 'none',
636
- zIndex: 50,
637
- }}
638
- >
639
- Theme
640
- </div>
641
- </div>
642
- ),
643
- ],
644
- args: {
645
- nodes: repoFeatureNodes,
646
- edges: repoFeatureEdges,
647
- onNodeAction: () => undefined,
648
- onNodeSettings: () => undefined,
649
- onRepositorySelect: () => undefined,
650
- },
651
- };