@shepai/cli 1.76.0 → 1.77.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 (239) hide show
  1. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts +1 -0
  2. package/dist/packages/core/src/application/ports/output/agents/feature-agent-process.interface.d.ts.map +1 -1
  3. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts +4 -1
  4. package/dist/packages/core/src/application/ports/output/services/spec-initializer.interface.d.ts.map +1 -1
  5. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +5 -2
  7. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +2 -0
  8. package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
  9. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts +220 -0
  10. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.d.ts.map +1 -0
  11. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/fast-feature-agent-graph.js +66 -0
  12. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts +1 -0
  13. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.d.ts.map +1 -1
  14. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-process.service.js +3 -0
  15. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts +1 -0
  16. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.d.ts.map +1 -1
  17. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/feature-agent-worker.js +10 -1
  18. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.d.ts.map +1 -1
  19. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/lifecycle-context.js +1 -0
  20. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts +21 -0
  21. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.d.ts.map +1 -0
  22. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/fast-implement.node.js +60 -0
  23. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts +25 -0
  24. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts.map +1 -0
  25. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.js +176 -0
  26. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts +1 -1
  27. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.d.ts.map +1 -1
  28. package/dist/packages/core/src/infrastructure/services/spec/spec-initializer.service.js +8 -3
  29. package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
  30. package/dist/src/presentation/cli/commands/feat/new.command.js +2 -0
  31. package/dist/src/presentation/web/app/actions/create-feature.d.ts +2 -0
  32. package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
  33. package/dist/src/presentation/web/app/actions/create-feature.js +3 -1
  34. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +2 -0
  35. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
  36. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +5 -1
  37. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +18 -0
  38. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
  39. package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +49 -0
  40. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  41. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +28 -4
  42. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts +4 -1
  43. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  44. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +6 -3
  45. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
  46. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +1 -0
  47. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
  48. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +71 -2
  49. package/dist/src/presentation/web/hooks/use-graph-state.d.ts +2 -0
  50. package/dist/src/presentation/web/hooks/use-graph-state.d.ts.map +1 -1
  51. package/dist/src/presentation/web/hooks/use-graph-state.js +4 -0
  52. package/dist/src/presentation/web/hooks/use-viewport-persistence.d.ts +1 -0
  53. package/dist/src/presentation/web/hooks/use-viewport-persistence.d.ts.map +1 -1
  54. package/dist/tsconfig.build.tsbuildinfo +1 -1
  55. package/package.json +1 -1
  56. package/web/.next/BUILD_ID +1 -1
  57. package/web/.next/build-manifest.json +2 -2
  58. package/web/.next/cache/.previewinfo +1 -1
  59. package/web/.next/cache/.rscinfo +1 -1
  60. package/web/.next/cache/.tsbuildinfo +1 -1
  61. package/web/.next/cache/config.json +3 -3
  62. package/web/.next/fallback-build-manifest.json +2 -2
  63. package/web/.next/prerender-manifest.json +3 -3
  64. package/web/.next/required-server-files.js +1 -1
  65. package/web/.next/required-server-files.json +1 -1
  66. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +16 -16
  67. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  68. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +19 -19
  70. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  71. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  73. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  74. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  75. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +16 -16
  76. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  77. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  78. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +19 -19
  79. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  80. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  82. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  83. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  85. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  86. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/app/_global-error.html +2 -2
  88. package/web/.next/server/app/_global-error.rsc +1 -1
  89. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  90. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  91. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  92. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  93. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  94. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  95. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  96. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  97. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  99. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  100. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  101. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  102. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  103. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
  105. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
  106. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  107. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +1 -1
  114. package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -1
  115. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  116. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
  117. package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  118. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  119. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +1 -1
  121. package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  123. package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  125. package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
  126. package/web/.next/server/chunks/ssr/{_a3854150._.js → _2a862f34._.js} +2 -2
  127. package/web/.next/server/chunks/ssr/{_a3854150._.js.map → _2a862f34._.js.map} +1 -1
  128. package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  129. package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  131. package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  133. package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -1
  134. package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +2 -2
  135. package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
  137. package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +2 -2
  139. package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
  141. package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  143. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  145. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  146. package/web/.next/server/pages/500.html +2 -2
  147. package/web/.next/server/server-reference-manifest.js +1 -1
  148. package/web/.next/server/server-reference-manifest.json +22 -22
  149. package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
  150. package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +2 -2
  151. package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
  152. package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
  153. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +16 -16
  154. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  155. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  156. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +19 -19
  157. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  158. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  159. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  160. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  161. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  162. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +16 -16
  163. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  164. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  165. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +19 -19
  166. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  167. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  168. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
  169. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  170. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  171. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
  172. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  173. package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  174. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
  175. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
  176. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  177. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  178. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  179. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  180. package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  181. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  182. package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  183. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  184. package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  185. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  186. package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  187. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  188. package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  189. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  190. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
  191. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
  192. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +2 -2
  193. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
  194. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +2 -2
  195. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +1 -1
  196. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
  197. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +2 -2
  198. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
  199. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +1 -1
  200. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
  201. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
  202. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_a3854150._.js → _2a862f34._.js} +2 -2
  203. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
  204. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
  205. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +1 -1
  206. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +2 -2
  207. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
  208. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +2 -2
  209. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
  210. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
  211. package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  212. package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
  213. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
  214. package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +22 -22
  215. package/web/.next/standalone/src/presentation/web/app/actions/create-feature.ts +6 -1
  216. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +57 -0
  217. package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +21 -0
  218. package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +32 -4
  219. package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +9 -4
  220. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx +81 -2
  221. package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +1 -1
  222. package/web/.next/standalone/src/presentation/web/hooks/use-graph-state.ts +7 -0
  223. package/web/.next/standalone/src/presentation/web/hooks/use-viewport-persistence.ts +2 -0
  224. package/web/.next/standalone/src/presentation/web/server.js +1 -1
  225. package/web/.next/static/chunks/{293231ccc0b144fa.js → 5968047406179daf.js} +1 -1
  226. package/web/.next/static/chunks/{255140c45a023ff4.js → 6a45ff0fe9faf80e.js} +1 -1
  227. package/web/.next/static/chunks/{9a765e022ef2b815.js → 7ea9e0b8236d5f48.js} +1 -1
  228. package/web/.next/static/chunks/{6931ae67c2484ddf.js → a3a1392c422107d6.js} +1 -1
  229. package/web/.next/static/chunks/{3bc2a07d02372939.js → c558d0da468011b6.js} +1 -1
  230. package/web/.next/static/chunks/{c1dbeb3307dab443.js → ce67a6fcc19c61dc.js} +3 -3
  231. package/web/.next/static/chunks/d5b885838e1da36a.js +1 -0
  232. package/web/.next/static/chunks/{d7786685ec8efe10.js → e8637d52f6093074.js} +1 -1
  233. package/web/.next/static/chunks/{716547ef8d13139d.js → efaf0f0eb50be73f.js} +1 -1
  234. package/web/.next/trace +1 -1
  235. package/web/.next/trace-build +1 -1
  236. package/web/.next/static/chunks/11a6c88ffcbac93f.js +0 -1
  237. /package/web/.next/static/{L6_6jZ4TnQuuDXIF5GZEf → TkQduVaaKmOXMiLB6CK5h}/_buildManifest.js +0 -0
  238. /package/web/.next/static/{L6_6jZ4TnQuuDXIF5GZEf → TkQduVaaKmOXMiLB6CK5h}/_clientMiddlewareManifest.json +0 -0
  239. /package/web/.next/static/{L6_6jZ4TnQuuDXIF5GZEf → TkQduVaaKmOXMiLB6CK5h}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[93995,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(69845),e=a.i(52313),f=a.i(25674);let g=(0,f.createServerReference)("40738daa5fb3ae0213ca8fb8a70bdf5bf4b6e3b129",f.callServer,void 0,f.findSourceMapURL,"createFeature");var h=a.i(87148),h=h,i=a.i(25700);let j=(0,i.default)("file",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]]);var k=a.i(42642),k=k;let l=(0,i.default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]),m=(0,i.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);var n=a.i(26915),n=n;let o=(0,i.default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);var p=a.i(51969),p=p,q=a.i(85536),r=a.i(19884);a.i(78454);var s=a.i(24255),t=a.i(2824),u=a.i(18948),v=a.i(90920);function w({className:a,...c}){return(0,b.jsx)("textarea",{"data-slot":"textarea",className:(0,q.cn)("placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input field-sizing-content min-h-[80px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...c})}var x=a.i(66873),y=c.forwardRef((a,c)=>(0,b.jsx)(x.Primitive.label,{...a,ref:c,onMouseDown:b=>{b.target.closest("button, input, select, textarea")||(a.onMouseDown?.(b),!b.defaultPrevented&&b.detail>1&&b.preventDefault())}}));y.displayName="Label",a.s(["Label",()=>y,"Root",()=>y],59967);var z=a.i(59967),z=z;let A=(0,a.i(42261).cva)("text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),B=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(z.Root,{ref:d,className:(0,q.cn)(A(),a),...c}));B.displayName=z.Root.displayName;var p=p;let C=(0,i.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);var D=a.i(6175),E=a.i(7420),F=a.i(59653),G=a.i(17329),H=a.i(74432),I=a.i(14272),J="Checkbox",[K,L]=(0,E.createContextScope)(J),[M,N]=K(J);function O(a){let{__scopeCheckbox:d,checked:e,children:f,defaultChecked:g,disabled:h,form:i,name:j,onCheckedChange:k,required:l,value:m="on",internal_do_not_use_render:n}=a,[o,p]=(0,G.useControllableState)({prop:e,defaultProp:g??!1,onChange:k,caller:J}),[q,r]=c.useState(null),[s,t]=c.useState(null),u=c.useRef(!1),v=!q||!!i||!!q.closest("form"),w={checked:o,disabled:h,setChecked:p,control:q,setControl:r,name:j,form:i,value:m,hasConsumerStoppedPropagationRef:u,required:l,defaultChecked:!W(g)&&g,isFormControl:v,bubbleInput:s,setBubbleInput:t};return(0,b.jsx)(M,{scope:d,...w,children:"function"==typeof n?n(w):f})}var P="CheckboxTrigger",Q=c.forwardRef(({__scopeCheckbox:a,onKeyDown:d,onClick:e,...f},g)=>{let{control:h,value:i,disabled:j,checked:k,required:l,setControl:m,setChecked:n,hasConsumerStoppedPropagationRef:o,isFormControl:p,bubbleInput:q}=N(P,a),r=(0,D.useComposedRefs)(g,m),s=c.useRef(k);return c.useEffect(()=>{let a=h?.form;if(a){let b=()=>n(s.current);return a.addEventListener("reset",b),()=>a.removeEventListener("reset",b)}},[h,n]),(0,b.jsx)(x.Primitive.button,{type:"button",role:"checkbox","aria-checked":W(k)?"mixed":k,"aria-required":l,"data-state":X(k),"data-disabled":j?"":void 0,disabled:j,value:i,...f,ref:r,onKeyDown:(0,F.composeEventHandlers)(d,a=>{"Enter"===a.key&&a.preventDefault()}),onClick:(0,F.composeEventHandlers)(e,a=>{n(a=>!!W(a)||!a),q&&p&&(o.current=a.isPropagationStopped(),o.current||a.stopPropagation())})})});Q.displayName=P;var R=c.forwardRef((a,c)=>{let{__scopeCheckbox:d,name:e,checked:f,defaultChecked:g,required:h,disabled:i,value:j,onCheckedChange:k,form:l,...m}=a;return(0,b.jsx)(O,{__scopeCheckbox:d,checked:f,defaultChecked:g,disabled:i,required:h,onCheckedChange:k,name:e,form:l,value:j,internal_do_not_use_render:({isFormControl:a})=>(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(Q,{...m,ref:c,__scopeCheckbox:d}),a&&(0,b.jsx)(V,{__scopeCheckbox:d})]})})});R.displayName=J;var S="CheckboxIndicator",T=c.forwardRef((a,c)=>{let{__scopeCheckbox:d,forceMount:e,...f}=a,g=N(S,d);return(0,b.jsx)(I.Presence,{present:e||W(g.checked)||!0===g.checked,children:(0,b.jsx)(x.Primitive.span,{"data-state":X(g.checked),"data-disabled":g.disabled?"":void 0,...f,ref:c,style:{pointerEvents:"none",...a.style}})})});T.displayName=S;var U="CheckboxBubbleInput",V=c.forwardRef(({__scopeCheckbox:a,...d},e)=>{let f,{control:g,hasConsumerStoppedPropagationRef:h,checked:i,defaultChecked:j,required:k,disabled:l,name:m,value:n,form:o,bubbleInput:p,setBubbleInput:q}=N(U,a),r=(0,D.useComposedRefs)(e,q),s=(f=c.useRef({value:i,previous:i}),c.useMemo(()=>(f.current.value!==i&&(f.current.previous=f.current.value,f.current.value=i),f.current.previous),[i])),t=(0,H.useSize)(g);c.useEffect(()=>{if(!p)return;let a=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,b=!h.current;if(s!==i&&a){let c=new Event("click",{bubbles:b});p.indeterminate=W(i),a.call(p,!W(i)&&i),p.dispatchEvent(c)}},[p,s,i,h]);let u=c.useRef(!W(i)&&i);return(0,b.jsx)(x.Primitive.input,{type:"checkbox","aria-hidden":!0,defaultChecked:j??u.current,required:k,disabled:l,name:m,value:n,form:o,...d,tabIndex:-1,ref:r,style:{...d.style,...t,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function W(a){return"indeterminate"===a}function X(a){return W(a)?"indeterminate":a?"checked":"unchecked"}V.displayName=U,a.s(["Checkbox",()=>R,"CheckboxIndicator",()=>T,"Indicator",()=>T,"Root",()=>R,"createCheckboxScope",()=>L,"unstable_BubbleInput",()=>V,"unstable_CheckboxBubbleInput",()=>V,"unstable_CheckboxProvider",()=>O,"unstable_CheckboxTrigger",()=>Q,"unstable_Provider",()=>O,"unstable_Trigger",()=>Q],27835);var Y=a.i(27835),Y=Y;function Z({className:a,...c}){return(0,b.jsx)(Y.Root,{"data-slot":"checkbox",className:(0,q.cn)("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground data-[state=indeterminate]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 cursor-pointer rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...c,children:(0,b.jsx)(Y.Indicator,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none",children:"indeterminate"===c.checked?(0,b.jsx)(C,{className:"size-3.5"}):(0,b.jsx)(p.default,{className:"size-3.5"})})})}function $({id:a,label:c,description:d,checked:e,onCheckedChange:f,disabled:g}){return(0,b.jsxs)("div",{className:"flex items-start gap-2",children:[(0,b.jsx)(Z,{id:a,className:"mt-0.75",checked:e,onCheckedChange:a=>f(!0===a),disabled:g}),(0,b.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,b.jsx)(B,{htmlFor:a,className:"cursor-pointer text-sm font-medium",children:c}),d?(0,b.jsx)(B,{htmlFor:a,className:"text-muted-foreground cursor-pointer text-xs font-normal",children:d}):null]})]})}function _({label:a,description:c,parentAriaLabel:d,options:e,value:f,onValueChange:g,disabled:h}){let i=e.filter(a=>f[a.id]).length,j=i===e.length,k=i>0&&!j,l=`${a.toLowerCase().replace(/\s+/g,"-")}-group`;return(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{className:"flex items-start gap-2",children:[(0,b.jsx)(Z,{id:l,className:"mt-0.75",checked:k?"indeterminate":j,onCheckedChange:()=>{let a=i<e.length,b={};for(let c of e)b[c.id]=a;g(b)},disabled:h,"aria-label":d??`${a} select all`}),(0,b.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,b.jsx)(B,{htmlFor:l,className:"cursor-pointer text-sm font-medium",children:a}),c?(0,b.jsx)(B,{htmlFor:l,className:"text-muted-foreground cursor-pointer text-xs font-normal",children:c}):null]})]}),(0,b.jsx)("div",{className:"flex flex-col gap-3 pl-6",children:e.map(a=>(0,b.jsx)($,{id:a.id,label:a.label,description:a.description,checked:f[a.id]??!1,onCheckedChange:b=>{var c;return c=a.id,void g({...f,[c]:b})},disabled:h},a.id))})]})}var aa=a.i(58339),ab=a.i(58761),ac=a.i(51473),ad=a.i(59675),ae=a.i(5472),af=a.i(75988),ag=a.i(80930),ah=a.i(90986),ai=a.i(16164),aj=a.i(45291),ak="Popover",[al,am]=(0,E.createContextScope)(ak,[af.createPopperScope]),an=(0,af.createPopperScope)(),[ao,ap]=al(ak),aq=a=>{let{__scopePopover:d,children:e,open:f,defaultOpen:g,onOpenChange:h,modal:i=!1}=a,j=an(d),k=c.useRef(null),[l,m]=c.useState(!1),[n,o]=(0,G.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:ak});return(0,b.jsx)(af.Root,{...j,children:(0,b.jsx)(ao,{scope:d,contentId:(0,ae.useId)(),triggerRef:k,open:n,onOpenChange:o,onOpenToggle:c.useCallback(()=>o(a=>!a),[o]),hasCustomAnchor:l,onCustomAnchorAdd:c.useCallback(()=>m(!0),[]),onCustomAnchorRemove:c.useCallback(()=>m(!1),[]),modal:i,children:e})})};aq.displayName=ak;var ar="PopoverAnchor",as=c.forwardRef((a,d)=>{let{__scopePopover:e,...f}=a,g=ap(ar,e),h=an(e),{onCustomAnchorAdd:i,onCustomAnchorRemove:j}=g;return c.useEffect(()=>(i(),()=>j()),[i,j]),(0,b.jsx)(af.Anchor,{...h,...f,ref:d})});as.displayName=ar;var at="PopoverTrigger",au=c.forwardRef((a,c)=>{let{__scopePopover:d,...e}=a,f=ap(at,d),g=an(d),h=(0,D.useComposedRefs)(c,f.triggerRef),i=(0,b.jsx)(x.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":f.open,"aria-controls":f.contentId,"data-state":aI(f.open),...e,ref:h,onClick:(0,F.composeEventHandlers)(a.onClick,f.onOpenToggle)});return f.hasCustomAnchor?i:(0,b.jsx)(af.Anchor,{asChild:!0,...g,children:i})});au.displayName=at;var av="PopoverPortal",[aw,ax]=al(av,{forceMount:void 0}),ay=a=>{let{__scopePopover:c,forceMount:d,children:e,container:f}=a,g=ap(av,c);return(0,b.jsx)(aw,{scope:c,forceMount:d,children:(0,b.jsx)(I.Presence,{present:d||g.open,children:(0,b.jsx)(ag.Portal,{asChild:!0,container:f,children:e})})})};ay.displayName=av;var az="PopoverContent",aA=c.forwardRef((a,c)=>{let d=ax(az,a.__scopePopover),{forceMount:e=d.forceMount,...f}=a,g=ap(az,a.__scopePopover);return(0,b.jsx)(I.Presence,{present:e||g.open,children:g.modal?(0,b.jsx)(aC,{...f,ref:c}):(0,b.jsx)(aD,{...f,ref:c})})});aA.displayName=az;var aB=(0,ah.createSlot)("PopoverContent.RemoveScroll"),aC=c.forwardRef((a,d)=>{let e=ap(az,a.__scopePopover),f=c.useRef(null),g=(0,D.useComposedRefs)(d,f),h=c.useRef(!1);return c.useEffect(()=>{let a=f.current;if(a)return(0,ai.hideOthers)(a)},[]),(0,b.jsx)(aj.RemoveScroll,{as:aB,allowPinchZoom:!0,children:(0,b.jsx)(aE,{...a,ref:g,trapFocus:e.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,F.composeEventHandlers)(a.onCloseAutoFocus,a=>{a.preventDefault(),h.current||e.triggerRef.current?.focus()}),onPointerDownOutside:(0,F.composeEventHandlers)(a.onPointerDownOutside,a=>{let b=a.detail.originalEvent,c=0===b.button&&!0===b.ctrlKey;h.current=2===b.button||c},{checkForDefaultPrevented:!1}),onFocusOutside:(0,F.composeEventHandlers)(a.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1})})})}),aD=c.forwardRef((a,d)=>{let e=ap(az,a.__scopePopover),f=c.useRef(!1),g=c.useRef(!1);return(0,b.jsx)(aE,{...a,ref:d,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:b=>{a.onCloseAutoFocus?.(b),b.defaultPrevented||(f.current||e.triggerRef.current?.focus(),b.preventDefault()),f.current=!1,g.current=!1},onInteractOutside:b=>{a.onInteractOutside?.(b),b.defaultPrevented||(f.current=!0,"pointerdown"===b.detail.originalEvent.type&&(g.current=!0));let c=b.target;e.triggerRef.current?.contains(c)&&b.preventDefault(),"focusin"===b.detail.originalEvent.type&&g.current&&b.preventDefault()}})}),aE=c.forwardRef((a,c)=>{let{__scopePopover:d,trapFocus:e,onOpenAutoFocus:f,onCloseAutoFocus:g,disableOutsidePointerEvents:h,onEscapeKeyDown:i,onPointerDownOutside:j,onFocusOutside:k,onInteractOutside:l,...m}=a,n=ap(az,d),o=an(d);return(0,ac.useFocusGuards)(),(0,b.jsx)(ad.FocusScope,{asChild:!0,loop:!0,trapped:e,onMountAutoFocus:f,onUnmountAutoFocus:g,children:(0,b.jsx)(ab.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:h,onInteractOutside:l,onEscapeKeyDown:i,onPointerDownOutside:j,onFocusOutside:k,onDismiss:()=>n.onOpenChange(!1),children:(0,b.jsx)(af.Content,{"data-state":aI(n.open),role:"dialog",id:n.contentId,...o,...m,ref:c,style:{...m.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),aF="PopoverClose",aG=c.forwardRef((a,c)=>{let{__scopePopover:d,...e}=a,f=ap(aF,d);return(0,b.jsx)(x.Primitive.button,{type:"button",...e,ref:c,onClick:(0,F.composeEventHandlers)(a.onClick,()=>f.onOpenChange(!1))})});aG.displayName=aF;var aH=c.forwardRef((a,c)=>{let{__scopePopover:d,...e}=a,f=an(d);return(0,b.jsx)(af.Arrow,{...f,...e,ref:c})});function aI(a){return a?"open":"closed"}aH.displayName="PopoverArrow",a.s(["Anchor",()=>as,"Arrow",()=>aH,"Close",()=>aG,"Content",()=>aA,"Popover",()=>aq,"PopoverAnchor",()=>as,"PopoverArrow",()=>aH,"PopoverClose",()=>aG,"PopoverContent",()=>aA,"PopoverPortal",()=>ay,"PopoverTrigger",()=>au,"Portal",()=>ay,"Root",()=>aq,"Trigger",()=>au,"createPopoverScope",()=>am],61452);var aJ=a.i(61452),aJ=aJ;let aK=aJ.Root,aL=aJ.Trigger;aJ.Anchor;let aM=c.forwardRef(({className:a,align:c="center",sideOffset:d=4,...e},f)=>(0,b.jsx)(aJ.Portal,{children:(0,b.jsx)(aJ.Content,{ref:f,align:c,sideOffset:d,className:(0,q.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none",a),...e})}));aM.displayName=aJ.Content.displayName;var aN=a.i(96213);async function aO(){let a=await fetch("/api/dialog/pick-files",{method:"POST"});if(!a.ok)throw Error("Failed to open file dialog");let b=await a.json();return b.cancelled?null:b.files}let aP=[{id:"allowPrd",label:"PRD",description:"Auto-approve requirements move to planning."},{id:"allowPlan",label:"Plan",description:"Auto-approve planning move to implementation."},{id:"allowMerge",label:"Merge",description:"Auto-approve merge move to Done."}],aQ={allowPrd:!1,allowPlan:!1,allowMerge:!1};function aR({open:a,onClose:d,onSubmit:e,repositoryPath:f,isSubmitting:g=!1,workflowDefaults:i,features:j,initialParentId:k}){let l=(0,r.useSoundAction)("create"),m=i?.approvalGates??aQ,n=i?.push??!1,o=i?.openPr??!1,[p,q]=(0,c.useState)(""),[v,x]=(0,c.useState)([]),[y,z]=(0,c.useState)({...m}),[A,C]=(0,c.useState)(n),[D,E]=(0,c.useState)(o),[F,G]=(0,c.useState)(void 0);(0,c.useEffect)(()=>{i&&(z({...i.approvalGates}),C(i.push),E(i.openPr))},[i]),(0,c.useEffect)(()=>{a&&k&&G(k)},[a,k]);let H=(0,c.useCallback)(()=>{q(""),x([]),z({...m}),C(n),E(o),G(void 0)},[m,n,o]),I=""!==p.trim()||v.length>0,{attemptClose:J}=(0,aN.useGuardedDrawerClose)({open:a,isDirty:I,onClose:d,onReset:H}),K=(0,c.useCallback)(a=>{a.preventDefault(),p.trim()&&(l.play(),e({description:p.trim(),attachments:v,repositoryPath:f,approvalGates:{allowPrd:y.allowPrd??!1,allowPlan:y.allowPlan??!1,allowMerge:y.allowMerge??!1},push:A||D,openPr:D,...F?{parentId:F}:{}}),H())},[p,v,y,f,e,A,D,F,l,H]),L=(0,c.useCallback)(async()=>{try{let a=await aO();a&&x(b=>[...b,...a])}catch{}},[]),M=(0,c.useCallback)(a=>{x(b=>b.filter(b=>b.path!==a))},[]),N=j&&j.length>0;return(0,b.jsx)(s.BaseDrawer,{open:a,onClose:J,size:"md",modal:!1,dismissOnOutsideClick:!0,"data-testid":"feature-create-drawer",header:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("div",{className:"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500"}),(0,b.jsx)(t.DrawerTitle,{children:"NEW FEATURE"})]}),g?(0,b.jsx)(t.DrawerDescription,{asChild:!0,children:(0,b.jsx)("div",{children:(0,b.jsx)(aa.Badge,{variant:"secondary",children:"Creating..."})})}):null]}),footer:(0,b.jsxs)("div",{className:"flex flex-row justify-end gap-2",children:[(0,b.jsx)(u.Button,{variant:"outline",onClick:J,disabled:g,children:"Cancel"}),(0,b.jsx)(u.Button,{type:"submit",form:"create-feature-form",disabled:!p.trim()||g,children:g?"Creating...":"+ Create Feature"})]}),children:(0,b.jsx)("div",{className:"overflow-y-auto p-4",children:(0,b.jsxs)("form",{id:"create-feature-form",onSubmit:K,className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{htmlFor:"feature-description",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"DESCRIBE YOUR FEATURE"}),(0,b.jsx)(w,{id:"feature-description",placeholder:"e.g. Add GitHub OAuth login with callback handling and token refresh...",value:p,onChange:a=>q(a.target.value),rows:4,required:!0,disabled:g})]}),N?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{htmlFor:"parent-feature",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"PARENT FEATURE"}),(0,b.jsx)(aS,{features:j,value:F,onChange:G,disabled:g})]}):null,(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"APPROVE"}),(0,b.jsx)(_,{label:"Autonomous Mode",description:"YOLO!",parentAriaLabel:"Auto approve all",options:aP,value:y,onValueChange:z,disabled:g})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"GIT"}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)($,{id:"push",label:"Push",description:"Push branch to remote after implementation.",checked:A||D,onCheckedChange:C,disabled:D||g}),(0,b.jsx)($,{id:"open-pr",label:"Create PR",description:"Open a pull request after pushing.",checked:D,onCheckedChange:E,disabled:g})]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)(B,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:["ATTACHMENTS",v.length>0&&(0,b.jsxs)("span",{className:"text-muted-foreground/60 ml-1.5",children:["(",v.length,")"]})]}),(0,b.jsxs)(u.Button,{type:"button",variant:"outline",size:"xs",onClick:L,disabled:g,children:[(0,b.jsx)(h.default,{className:"size-3"}),"Add Files"]})]}),v.length>0&&(0,b.jsx)("div",{className:"flex flex-col gap-2",children:v.map(a=>(0,b.jsx)(aT,{file:a,onRemove:()=>M(a.path),disabled:g},a.path))})]})]})})})}function aS({features:a,value:d,onChange:e,disabled:f}){let[g,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),k=(0,c.useRef)(null),l=a.find(a=>a.id===d),m=i.trim()?a.filter(a=>a.name.toLowerCase().includes(i.toLowerCase())||a.id.toLowerCase().includes(i.toLowerCase())):a,n=(0,c.useCallback)(a=>{e(a),h(!1),j("")},[e]);return(0,c.useEffect)(()=>{g?setTimeout(()=>k.current?.focus(),0):j("")},[g]),(0,b.jsxs)(aK,{open:g,onOpenChange:h,children:[(0,b.jsx)(aL,{asChild:!0,children:(0,b.jsxs)("button",{id:"parent-feature",type:"button",role:"combobox","aria-expanded":g,"aria-label":"Parent Feature",disabled:f,"data-testid":"parent-feature-combobox",className:(0,q.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!l&&"text-muted-foreground"),children:[(0,b.jsx)("span",{className:"truncate",children:l?`${l.name} (${l.id.slice(0,8)})`:"Select parent feature..."}),(0,b.jsx)(o,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,b.jsx)(aM,{className:"w-80 p-0",align:"start","data-testid":"parent-feature-combobox-content",children:(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("div",{className:"border-b p-2",children:(0,b.jsx)(v.Input,{ref:k,placeholder:"Search features...",value:i,onChange:a=>j(a.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"parent-feature-search"})}),(0,b.jsxs)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Features",children:[(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":void 0===d,onClick:()=>n(void 0),className:(0,q.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",void 0===d&&"bg-accent/50"),"data-testid":"parent-feature-option-none",children:[(0,b.jsx)(p.default,{className:(0,q.cn)("h-4 w-4 shrink-0",void 0!==d&&"invisible")}),(0,b.jsx)("span",{className:"text-muted-foreground italic",children:"No parent"})]}),0===m.length&&i?(0,b.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:"No features found."}):m.map(a=>(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":d===a.id,onClick:()=>n(a.id),className:(0,q.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",d===a.id&&"bg-accent/50"),"data-testid":`parent-feature-option-${a.id}`,children:[(0,b.jsx)(p.default,{className:(0,q.cn)("h-4 w-4 shrink-0",d!==a.id&&"invisible")}),(0,b.jsxs)("span",{className:"truncate",children:[a.name," ",(0,b.jsxs)("span",{className:"text-muted-foreground font-mono text-xs",children:["(",a.id.slice(0,8),")"]})]})]},a.id))]})]})})]})}function aT({file:a,onRemove:c,disabled:d}){var e,f,g;let h,i=(h=(e=a.name).lastIndexOf("."))>=0?e.slice(h).toLowerCase():"",o=(f=i,aU.has(f)?l:".pdf"===f?k.default:aV.has(f)?m:j),p=".pdf"===(g=i)?"bg-red-50 text-red-600":aU.has(g)?"bg-blue-50 text-blue-600":aV.has(g)?"bg-emerald-50 text-emerald-600":"bg-gray-50 text-gray-600";return(0,b.jsxs)("div",{className:"flex items-center gap-3 rounded-md border p-2",children:[(0,b.jsx)("div",{className:(0,q.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded",p),children:(0,b.jsx)(o,{className:"h-4 w-4"})}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,b.jsx)("span",{className:"truncate text-sm font-medium",children:a.name}),(0,b.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:a.path}),(0,b.jsx)("span",{className:"text-muted-foreground text-xs",children:function(a){if(0===a)return"0 B";let b=Math.floor(Math.log(a)/Math.log(1024));return`${(a/Math.pow(1024,b)).toFixed(+(0!==b))} ${["B","KB","MB","GB"][b]}`}(a.size)})]}),(0,b.jsx)(u.Button,{type:"button",variant:"ghost",size:"icon-xs",onClick:c,disabled:d,"aria-label":`Remove ${a.name}`,children:(0,b.jsx)(n.default,{className:"h-3 w-3"})})]})}let aU=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]),aV=new Set([".ts",".tsx",".js",".jsx",".json",".yaml",".yml",".xml",".html",".css",".md"]);function aW({repositoryPath:a,initialParentId:f,features:h,workflowDefaults:i}){let j=(0,d.useRouter)(),[k,l]=(0,c.useState)(!1),m=(0,d.usePathname)().startsWith("/create"),n=!k&&m;(0,c.useEffect)(()=>{!m&&k&&l(!1)},[m,k]);let o=(0,c.useCallback)(()=>{j.push("/")},[j]),p=(0,c.useCallback)(a=>{l(!0),j.push("/"),g(a).then(b=>{b.error?e.toast.error(b.error):window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:b.feature.id,name:b.feature.name,description:b.feature.description,repositoryPath:b.feature.repositoryPath,parentId:a.parentId}}))}).catch(()=>{e.toast.error("Failed to create feature"),l(!1)})},[j]);return(0,b.jsx)(aR,{open:n,onClose:o,onSubmit:p,repositoryPath:a,features:h,workflowDefaults:i,initialParentId:f,isSubmitting:k})}a.s(["CreateDrawerClient",()=>aW],93995)}];
1
+ module.exports=[93995,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(69845),e=a.i(52313),f=a.i(25674);let g=(0,f.createServerReference)("40b375f34d6baa6de4a490c2a3b7590410ddfecb74",f.callServer,void 0,f.findSourceMapURL,"createFeature");var h=a.i(87148),h=h,i=a.i(25700);let j=(0,i.default)("file",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]]);var k=a.i(42642),k=k;let l=(0,i.default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]),m=(0,i.default)("code",[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]]);var n=a.i(26915),n=n;let o=(0,i.default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);var p=a.i(51969),p=p,q=a.i(85536),r=a.i(19884);a.i(78454);var s=a.i(24255),t=a.i(2824),u=a.i(18948),v=a.i(90920);function w({className:a,...c}){return(0,b.jsx)("textarea",{"data-slot":"textarea",className:(0,q.cn)("placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input field-sizing-content min-h-[80px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...c})}var x=a.i(66873),y=c.forwardRef((a,c)=>(0,b.jsx)(x.Primitive.label,{...a,ref:c,onMouseDown:b=>{b.target.closest("button, input, select, textarea")||(a.onMouseDown?.(b),!b.defaultPrevented&&b.detail>1&&b.preventDefault())}}));y.displayName="Label",a.s(["Label",()=>y,"Root",()=>y],59967);var z=a.i(59967),z=z;let A=(0,a.i(42261).cva)("text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),B=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(z.Root,{ref:d,className:(0,q.cn)(A(),a),...c}));B.displayName=z.Root.displayName;var p=p;let C=(0,i.default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);var D=a.i(6175),E=a.i(7420),F=a.i(59653),G=a.i(17329),H=a.i(74432),I=a.i(14272),J="Checkbox",[K,L]=(0,E.createContextScope)(J),[M,N]=K(J);function O(a){let{__scopeCheckbox:d,checked:e,children:f,defaultChecked:g,disabled:h,form:i,name:j,onCheckedChange:k,required:l,value:m="on",internal_do_not_use_render:n}=a,[o,p]=(0,G.useControllableState)({prop:e,defaultProp:g??!1,onChange:k,caller:J}),[q,r]=c.useState(null),[s,t]=c.useState(null),u=c.useRef(!1),v=!q||!!i||!!q.closest("form"),w={checked:o,disabled:h,setChecked:p,control:q,setControl:r,name:j,form:i,value:m,hasConsumerStoppedPropagationRef:u,required:l,defaultChecked:!W(g)&&g,isFormControl:v,bubbleInput:s,setBubbleInput:t};return(0,b.jsx)(M,{scope:d,...w,children:"function"==typeof n?n(w):f})}var P="CheckboxTrigger",Q=c.forwardRef(({__scopeCheckbox:a,onKeyDown:d,onClick:e,...f},g)=>{let{control:h,value:i,disabled:j,checked:k,required:l,setControl:m,setChecked:n,hasConsumerStoppedPropagationRef:o,isFormControl:p,bubbleInput:q}=N(P,a),r=(0,D.useComposedRefs)(g,m),s=c.useRef(k);return c.useEffect(()=>{let a=h?.form;if(a){let b=()=>n(s.current);return a.addEventListener("reset",b),()=>a.removeEventListener("reset",b)}},[h,n]),(0,b.jsx)(x.Primitive.button,{type:"button",role:"checkbox","aria-checked":W(k)?"mixed":k,"aria-required":l,"data-state":X(k),"data-disabled":j?"":void 0,disabled:j,value:i,...f,ref:r,onKeyDown:(0,F.composeEventHandlers)(d,a=>{"Enter"===a.key&&a.preventDefault()}),onClick:(0,F.composeEventHandlers)(e,a=>{n(a=>!!W(a)||!a),q&&p&&(o.current=a.isPropagationStopped(),o.current||a.stopPropagation())})})});Q.displayName=P;var R=c.forwardRef((a,c)=>{let{__scopeCheckbox:d,name:e,checked:f,defaultChecked:g,required:h,disabled:i,value:j,onCheckedChange:k,form:l,...m}=a;return(0,b.jsx)(O,{__scopeCheckbox:d,checked:f,defaultChecked:g,disabled:i,required:h,onCheckedChange:k,name:e,form:l,value:j,internal_do_not_use_render:({isFormControl:a})=>(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(Q,{...m,ref:c,__scopeCheckbox:d}),a&&(0,b.jsx)(V,{__scopeCheckbox:d})]})})});R.displayName=J;var S="CheckboxIndicator",T=c.forwardRef((a,c)=>{let{__scopeCheckbox:d,forceMount:e,...f}=a,g=N(S,d);return(0,b.jsx)(I.Presence,{present:e||W(g.checked)||!0===g.checked,children:(0,b.jsx)(x.Primitive.span,{"data-state":X(g.checked),"data-disabled":g.disabled?"":void 0,...f,ref:c,style:{pointerEvents:"none",...a.style}})})});T.displayName=S;var U="CheckboxBubbleInput",V=c.forwardRef(({__scopeCheckbox:a,...d},e)=>{let f,{control:g,hasConsumerStoppedPropagationRef:h,checked:i,defaultChecked:j,required:k,disabled:l,name:m,value:n,form:o,bubbleInput:p,setBubbleInput:q}=N(U,a),r=(0,D.useComposedRefs)(e,q),s=(f=c.useRef({value:i,previous:i}),c.useMemo(()=>(f.current.value!==i&&(f.current.previous=f.current.value,f.current.value=i),f.current.previous),[i])),t=(0,H.useSize)(g);c.useEffect(()=>{if(!p)return;let a=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"checked").set,b=!h.current;if(s!==i&&a){let c=new Event("click",{bubbles:b});p.indeterminate=W(i),a.call(p,!W(i)&&i),p.dispatchEvent(c)}},[p,s,i,h]);let u=c.useRef(!W(i)&&i);return(0,b.jsx)(x.Primitive.input,{type:"checkbox","aria-hidden":!0,defaultChecked:j??u.current,required:k,disabled:l,name:m,value:n,form:o,...d,tabIndex:-1,ref:r,style:{...d.style,...t,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});function W(a){return"indeterminate"===a}function X(a){return W(a)?"indeterminate":a?"checked":"unchecked"}V.displayName=U,a.s(["Checkbox",()=>R,"CheckboxIndicator",()=>T,"Indicator",()=>T,"Root",()=>R,"createCheckboxScope",()=>L,"unstable_BubbleInput",()=>V,"unstable_CheckboxBubbleInput",()=>V,"unstable_CheckboxProvider",()=>O,"unstable_CheckboxTrigger",()=>Q,"unstable_Provider",()=>O,"unstable_Trigger",()=>Q],27835);var Y=a.i(27835),Y=Y;function Z({className:a,...c}){return(0,b.jsx)(Y.Root,{"data-slot":"checkbox",className:(0,q.cn)("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground data-[state=indeterminate]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 cursor-pointer rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",a),...c,children:(0,b.jsx)(Y.Indicator,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none",children:"indeterminate"===c.checked?(0,b.jsx)(C,{className:"size-3.5"}):(0,b.jsx)(p.default,{className:"size-3.5"})})})}function $({id:a,label:c,description:d,checked:e,onCheckedChange:f,disabled:g}){return(0,b.jsxs)("div",{className:"flex items-start gap-2",children:[(0,b.jsx)(Z,{id:a,className:"mt-0.75",checked:e,onCheckedChange:a=>f(!0===a),disabled:g}),(0,b.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,b.jsx)(B,{htmlFor:a,className:"cursor-pointer text-sm font-medium",children:c}),d?(0,b.jsx)(B,{htmlFor:a,className:"text-muted-foreground cursor-pointer text-xs font-normal",children:d}):null]})]})}function _({label:a,description:c,parentAriaLabel:d,options:e,value:f,onValueChange:g,disabled:h}){let i=e.filter(a=>f[a.id]).length,j=i===e.length,k=i>0&&!j,l=`${a.toLowerCase().replace(/\s+/g,"-")}-group`;return(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{className:"flex items-start gap-2",children:[(0,b.jsx)(Z,{id:l,className:"mt-0.75",checked:k?"indeterminate":j,onCheckedChange:()=>{let a=i<e.length,b={};for(let c of e)b[c.id]=a;g(b)},disabled:h,"aria-label":d??`${a} select all`}),(0,b.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,b.jsx)(B,{htmlFor:l,className:"cursor-pointer text-sm font-medium",children:a}),c?(0,b.jsx)(B,{htmlFor:l,className:"text-muted-foreground cursor-pointer text-xs font-normal",children:c}):null]})]}),(0,b.jsx)("div",{className:"flex flex-col gap-3 pl-6",children:e.map(a=>(0,b.jsx)($,{id:a.id,label:a.label,description:a.description,checked:f[a.id]??!1,onCheckedChange:b=>{var c;return c=a.id,void g({...f,[c]:b})},disabled:h},a.id))})]})}var aa=a.i(58339),ab=a.i(58761),ac=a.i(51473),ad=a.i(59675),ae=a.i(5472),af=a.i(75988),ag=a.i(80930),ah=a.i(90986),ai=a.i(16164),aj=a.i(45291),ak="Popover",[al,am]=(0,E.createContextScope)(ak,[af.createPopperScope]),an=(0,af.createPopperScope)(),[ao,ap]=al(ak),aq=a=>{let{__scopePopover:d,children:e,open:f,defaultOpen:g,onOpenChange:h,modal:i=!1}=a,j=an(d),k=c.useRef(null),[l,m]=c.useState(!1),[n,o]=(0,G.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:ak});return(0,b.jsx)(af.Root,{...j,children:(0,b.jsx)(ao,{scope:d,contentId:(0,ae.useId)(),triggerRef:k,open:n,onOpenChange:o,onOpenToggle:c.useCallback(()=>o(a=>!a),[o]),hasCustomAnchor:l,onCustomAnchorAdd:c.useCallback(()=>m(!0),[]),onCustomAnchorRemove:c.useCallback(()=>m(!1),[]),modal:i,children:e})})};aq.displayName=ak;var ar="PopoverAnchor",as=c.forwardRef((a,d)=>{let{__scopePopover:e,...f}=a,g=ap(ar,e),h=an(e),{onCustomAnchorAdd:i,onCustomAnchorRemove:j}=g;return c.useEffect(()=>(i(),()=>j()),[i,j]),(0,b.jsx)(af.Anchor,{...h,...f,ref:d})});as.displayName=ar;var at="PopoverTrigger",au=c.forwardRef((a,c)=>{let{__scopePopover:d,...e}=a,f=ap(at,d),g=an(d),h=(0,D.useComposedRefs)(c,f.triggerRef),i=(0,b.jsx)(x.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":f.open,"aria-controls":f.contentId,"data-state":aI(f.open),...e,ref:h,onClick:(0,F.composeEventHandlers)(a.onClick,f.onOpenToggle)});return f.hasCustomAnchor?i:(0,b.jsx)(af.Anchor,{asChild:!0,...g,children:i})});au.displayName=at;var av="PopoverPortal",[aw,ax]=al(av,{forceMount:void 0}),ay=a=>{let{__scopePopover:c,forceMount:d,children:e,container:f}=a,g=ap(av,c);return(0,b.jsx)(aw,{scope:c,forceMount:d,children:(0,b.jsx)(I.Presence,{present:d||g.open,children:(0,b.jsx)(ag.Portal,{asChild:!0,container:f,children:e})})})};ay.displayName=av;var az="PopoverContent",aA=c.forwardRef((a,c)=>{let d=ax(az,a.__scopePopover),{forceMount:e=d.forceMount,...f}=a,g=ap(az,a.__scopePopover);return(0,b.jsx)(I.Presence,{present:e||g.open,children:g.modal?(0,b.jsx)(aC,{...f,ref:c}):(0,b.jsx)(aD,{...f,ref:c})})});aA.displayName=az;var aB=(0,ah.createSlot)("PopoverContent.RemoveScroll"),aC=c.forwardRef((a,d)=>{let e=ap(az,a.__scopePopover),f=c.useRef(null),g=(0,D.useComposedRefs)(d,f),h=c.useRef(!1);return c.useEffect(()=>{let a=f.current;if(a)return(0,ai.hideOthers)(a)},[]),(0,b.jsx)(aj.RemoveScroll,{as:aB,allowPinchZoom:!0,children:(0,b.jsx)(aE,{...a,ref:g,trapFocus:e.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,F.composeEventHandlers)(a.onCloseAutoFocus,a=>{a.preventDefault(),h.current||e.triggerRef.current?.focus()}),onPointerDownOutside:(0,F.composeEventHandlers)(a.onPointerDownOutside,a=>{let b=a.detail.originalEvent,c=0===b.button&&!0===b.ctrlKey;h.current=2===b.button||c},{checkForDefaultPrevented:!1}),onFocusOutside:(0,F.composeEventHandlers)(a.onFocusOutside,a=>a.preventDefault(),{checkForDefaultPrevented:!1})})})}),aD=c.forwardRef((a,d)=>{let e=ap(az,a.__scopePopover),f=c.useRef(!1),g=c.useRef(!1);return(0,b.jsx)(aE,{...a,ref:d,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:b=>{a.onCloseAutoFocus?.(b),b.defaultPrevented||(f.current||e.triggerRef.current?.focus(),b.preventDefault()),f.current=!1,g.current=!1},onInteractOutside:b=>{a.onInteractOutside?.(b),b.defaultPrevented||(f.current=!0,"pointerdown"===b.detail.originalEvent.type&&(g.current=!0));let c=b.target;e.triggerRef.current?.contains(c)&&b.preventDefault(),"focusin"===b.detail.originalEvent.type&&g.current&&b.preventDefault()}})}),aE=c.forwardRef((a,c)=>{let{__scopePopover:d,trapFocus:e,onOpenAutoFocus:f,onCloseAutoFocus:g,disableOutsidePointerEvents:h,onEscapeKeyDown:i,onPointerDownOutside:j,onFocusOutside:k,onInteractOutside:l,...m}=a,n=ap(az,d),o=an(d);return(0,ac.useFocusGuards)(),(0,b.jsx)(ad.FocusScope,{asChild:!0,loop:!0,trapped:e,onMountAutoFocus:f,onUnmountAutoFocus:g,children:(0,b.jsx)(ab.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:h,onInteractOutside:l,onEscapeKeyDown:i,onPointerDownOutside:j,onFocusOutside:k,onDismiss:()=>n.onOpenChange(!1),children:(0,b.jsx)(af.Content,{"data-state":aI(n.open),role:"dialog",id:n.contentId,...o,...m,ref:c,style:{...m.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),aF="PopoverClose",aG=c.forwardRef((a,c)=>{let{__scopePopover:d,...e}=a,f=ap(aF,d);return(0,b.jsx)(x.Primitive.button,{type:"button",...e,ref:c,onClick:(0,F.composeEventHandlers)(a.onClick,()=>f.onOpenChange(!1))})});aG.displayName=aF;var aH=c.forwardRef((a,c)=>{let{__scopePopover:d,...e}=a,f=an(d);return(0,b.jsx)(af.Arrow,{...f,...e,ref:c})});function aI(a){return a?"open":"closed"}aH.displayName="PopoverArrow",a.s(["Anchor",()=>as,"Arrow",()=>aH,"Close",()=>aG,"Content",()=>aA,"Popover",()=>aq,"PopoverAnchor",()=>as,"PopoverArrow",()=>aH,"PopoverClose",()=>aG,"PopoverContent",()=>aA,"PopoverPortal",()=>ay,"PopoverTrigger",()=>au,"Portal",()=>ay,"Root",()=>aq,"Trigger",()=>au,"createPopoverScope",()=>am],61452);var aJ=a.i(61452),aJ=aJ;let aK=aJ.Root,aL=aJ.Trigger;aJ.Anchor;let aM=c.forwardRef(({className:a,align:c="center",sideOffset:d=4,...e},f)=>(0,b.jsx)(aJ.Portal,{children:(0,b.jsx)(aJ.Content,{ref:f,align:c,sideOffset:d,className:(0,q.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 rounded-md border p-4 shadow-md outline-none",a),...e})}));aM.displayName=aJ.Content.displayName;var aN=a.i(96213);async function aO(){let a=await fetch("/api/dialog/pick-files",{method:"POST"});if(!a.ok)throw Error("Failed to open file dialog");let b=await a.json();return b.cancelled?null:b.files}let aP=[{id:"allowPrd",label:"PRD",description:"Auto-approve requirements move to planning."},{id:"allowPlan",label:"Plan",description:"Auto-approve planning move to implementation."},{id:"allowMerge",label:"Merge",description:"Auto-approve merge move to Done."}],aQ={allowPrd:!1,allowPlan:!1,allowMerge:!1};function aR({open:a,onClose:d,onSubmit:e,repositoryPath:f,isSubmitting:g=!1,workflowDefaults:i,features:j,initialParentId:k}){let l=(0,r.useSoundAction)("create"),m=i?.approvalGates??aQ,n=i?.push??!1,o=i?.openPr??!1,[p,q]=(0,c.useState)(""),[v,x]=(0,c.useState)([]),[y,z]=(0,c.useState)({...m}),[A,C]=(0,c.useState)(n),[D,E]=(0,c.useState)(o),[F,G]=(0,c.useState)(void 0),[H,I]=(0,c.useState)(!1);(0,c.useEffect)(()=>{i&&(z({...i.approvalGates}),C(i.push),E(i.openPr))},[i]),(0,c.useEffect)(()=>{a&&k&&G(k)},[a,k]);let J=(0,c.useCallback)(()=>{q(""),x([]),z({...m}),C(n),E(o),G(void 0),I(!1)},[m,n,o]),K=""!==p.trim()||v.length>0,{attemptClose:L}=(0,aN.useGuardedDrawerClose)({open:a,isDirty:K,onClose:d,onReset:J}),M=(0,c.useCallback)(a=>{a.preventDefault(),p.trim()&&(l.play(),e({description:p.trim(),attachments:v,repositoryPath:f,approvalGates:{allowPrd:y.allowPrd??!1,allowPlan:y.allowPlan??!1,allowMerge:y.allowMerge??!1},push:A||D,openPr:D,fast:H,...F?{parentId:F}:{}}),J())},[p,v,y,f,e,A,D,H,F,l,J]),N=(0,c.useCallback)(async()=>{try{let a=await aO();a&&x(b=>[...b,...a])}catch{}},[]),O=(0,c.useCallback)(a=>{x(b=>b.filter(b=>b.path!==a))},[]),P=j&&j.length>0;return(0,b.jsx)(s.BaseDrawer,{open:a,onClose:L,size:"md",modal:!1,dismissOnOutsideClick:!0,"data-testid":"feature-create-drawer",header:(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)("div",{className:"h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500"}),(0,b.jsx)(t.DrawerTitle,{children:"NEW FEATURE"})]}),g?(0,b.jsx)(t.DrawerDescription,{asChild:!0,children:(0,b.jsx)("div",{children:(0,b.jsx)(aa.Badge,{variant:"secondary",children:"Creating..."})})}):null]}),footer:(0,b.jsxs)("div",{className:"flex flex-row justify-end gap-2",children:[(0,b.jsx)(u.Button,{variant:"outline",onClick:L,disabled:g,children:"Cancel"}),(0,b.jsx)(u.Button,{type:"submit",form:"create-feature-form",disabled:!p.trim()||g,children:g?"Creating...":"+ Create Feature"})]}),children:(0,b.jsx)("div",{className:"overflow-y-auto p-4",children:(0,b.jsxs)("form",{id:"create-feature-form",onSubmit:M,className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{htmlFor:"feature-description",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"DESCRIBE YOUR FEATURE"}),(0,b.jsx)(w,{id:"feature-description",placeholder:"e.g. Add GitHub OAuth login with callback handling and token refresh...",value:p,onChange:a=>q(a.target.value),rows:4,required:!0,disabled:g})]}),P?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{htmlFor:"parent-feature",className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"PARENT FEATURE"}),(0,b.jsx)(aS,{features:j,value:F,onChange:G,disabled:g})]}):null,(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"MODE"}),(0,b.jsx)($,{id:"fast-mode",label:"Fast Mode",description:"Skip SDLC phases and implement directly from your prompt.",checked:H,onCheckedChange:I,disabled:g})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"APPROVE"}),(0,b.jsx)(_,{label:"Autonomous Mode",description:"YOLO!",parentAriaLabel:"Auto approve all",options:aP,value:y,onValueChange:z,disabled:g})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)(B,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:"GIT"}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)($,{id:"push",label:"Push",description:"Push branch to remote after implementation.",checked:A||D,onCheckedChange:C,disabled:D||g}),(0,b.jsx)($,{id:"open-pr",label:"Create PR",description:"Open a pull request after pushing.",checked:D,onCheckedChange:E,disabled:g})]})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsxs)("div",{className:"flex items-center justify-between",children:[(0,b.jsxs)(B,{className:"text-muted-foreground text-xs font-semibold tracking-wider",children:["ATTACHMENTS",v.length>0&&(0,b.jsxs)("span",{className:"text-muted-foreground/60 ml-1.5",children:["(",v.length,")"]})]}),(0,b.jsxs)(u.Button,{type:"button",variant:"outline",size:"xs",onClick:N,disabled:g,children:[(0,b.jsx)(h.default,{className:"size-3"}),"Add Files"]})]}),v.length>0&&(0,b.jsx)("div",{className:"flex flex-col gap-2",children:v.map(a=>(0,b.jsx)(aT,{file:a,onRemove:()=>O(a.path),disabled:g},a.path))})]})]})})})}function aS({features:a,value:d,onChange:e,disabled:f}){let[g,h]=(0,c.useState)(!1),[i,j]=(0,c.useState)(""),k=(0,c.useRef)(null),l=a.find(a=>a.id===d),m=i.trim()?a.filter(a=>a.name.toLowerCase().includes(i.toLowerCase())||a.id.toLowerCase().includes(i.toLowerCase())):a,n=(0,c.useCallback)(a=>{e(a),h(!1),j("")},[e]);return(0,c.useEffect)(()=>{g?setTimeout(()=>k.current?.focus(),0):j("")},[g]),(0,b.jsxs)(aK,{open:g,onOpenChange:h,children:[(0,b.jsx)(aL,{asChild:!0,children:(0,b.jsxs)("button",{id:"parent-feature",type:"button",role:"combobox","aria-expanded":g,"aria-label":"Parent Feature",disabled:f,"data-testid":"parent-feature-combobox",className:(0,q.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!l&&"text-muted-foreground"),children:[(0,b.jsx)("span",{className:"truncate",children:l?`${l.name} (${l.id.slice(0,8)})`:"Select parent feature..."}),(0,b.jsx)(o,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,b.jsx)(aM,{className:"w-80 p-0",align:"start","data-testid":"parent-feature-combobox-content",children:(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("div",{className:"border-b p-2",children:(0,b.jsx)(v.Input,{ref:k,placeholder:"Search features...",value:i,onChange:a=>j(a.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"parent-feature-search"})}),(0,b.jsxs)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Features",children:[(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":void 0===d,onClick:()=>n(void 0),className:(0,q.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",void 0===d&&"bg-accent/50"),"data-testid":"parent-feature-option-none",children:[(0,b.jsx)(p.default,{className:(0,q.cn)("h-4 w-4 shrink-0",void 0!==d&&"invisible")}),(0,b.jsx)("span",{className:"text-muted-foreground italic",children:"No parent"})]}),0===m.length&&i?(0,b.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:"No features found."}):m.map(a=>(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":d===a.id,onClick:()=>n(a.id),className:(0,q.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",d===a.id&&"bg-accent/50"),"data-testid":`parent-feature-option-${a.id}`,children:[(0,b.jsx)(p.default,{className:(0,q.cn)("h-4 w-4 shrink-0",d!==a.id&&"invisible")}),(0,b.jsxs)("span",{className:"truncate",children:[a.name," ",(0,b.jsxs)("span",{className:"text-muted-foreground font-mono text-xs",children:["(",a.id.slice(0,8),")"]})]})]},a.id))]})]})})]})}function aT({file:a,onRemove:c,disabled:d}){var e,f,g;let h,i=(h=(e=a.name).lastIndexOf("."))>=0?e.slice(h).toLowerCase():"",o=(f=i,aU.has(f)?l:".pdf"===f?k.default:aV.has(f)?m:j),p=".pdf"===(g=i)?"bg-red-50 text-red-600":aU.has(g)?"bg-blue-50 text-blue-600":aV.has(g)?"bg-emerald-50 text-emerald-600":"bg-gray-50 text-gray-600";return(0,b.jsxs)("div",{className:"flex items-center gap-3 rounded-md border p-2",children:[(0,b.jsx)("div",{className:(0,q.cn)("flex h-8 w-8 shrink-0 items-center justify-center rounded",p),children:(0,b.jsx)(o,{className:"h-4 w-4"})}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,b.jsx)("span",{className:"truncate text-sm font-medium",children:a.name}),(0,b.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:a.path}),(0,b.jsx)("span",{className:"text-muted-foreground text-xs",children:function(a){if(0===a)return"0 B";let b=Math.floor(Math.log(a)/Math.log(1024));return`${(a/Math.pow(1024,b)).toFixed(+(0!==b))} ${["B","KB","MB","GB"][b]}`}(a.size)})]}),(0,b.jsx)(u.Button,{type:"button",variant:"ghost",size:"icon-xs",onClick:c,disabled:d,"aria-label":`Remove ${a.name}`,children:(0,b.jsx)(n.default,{className:"h-3 w-3"})})]})}let aU=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]),aV=new Set([".ts",".tsx",".js",".jsx",".json",".yaml",".yml",".xml",".html",".css",".md"]);function aW({repositoryPath:a,initialParentId:f,features:h,workflowDefaults:i}){let j=(0,d.useRouter)(),[k,l]=(0,c.useState)(!1),m=(0,d.usePathname)().startsWith("/create"),n=!k&&m;(0,c.useEffect)(()=>{!m&&k&&l(!1)},[m,k]);let o=(0,c.useCallback)(()=>{j.push("/")},[j]),p=(0,c.useCallback)(a=>{l(!0),j.push("/"),g(a).then(b=>{b.error?e.toast.error(b.error):window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:b.feature.id,name:b.feature.name,description:b.feature.description,repositoryPath:b.feature.repositoryPath,parentId:a.parentId}}))}).catch(()=>{e.toast.error("Failed to create feature"),l(!1)})},[j]);return(0,b.jsx)(aR,{open:n,onClose:o,onSubmit:p,repositoryPath:a,features:h,workflowDefaults:i,initialParentId:f,isSubmitting:k})}a.s(["CreateDrawerClient",()=>aW],93995)}];
2
2
 
3
3
  //# sourceMappingURL=744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map