@shepai/cli 1.66.4 → 1.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +21 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts +15 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.stories.js +16 -2
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts +12 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.js +284 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts +33 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.js +210 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +56 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +32 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/index.js +2 -0
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts +0 -4
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts +1 -1
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.js +18 -12
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts +4 -6
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js +5 -13
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js +2 -13
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +2 -10
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.js +21 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts +1 -1
- package/dist/src/presentation/web/components/common/feature-create-drawer/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +14 -20
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +7 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +37 -2
- package/dist/src/presentation/web/components/common/index.d.ts +1 -0
- package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.js +1 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.js +2 -2
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.js +1 -2
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.js +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.js +1 -2
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.js +5 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-drawer.stories.js +13 -2
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +5 -2
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.js +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.js +1 -2
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +20 -215
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +2 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +5 -5
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/page/build-manifest.json +3 -3
- package/web/.next/server/app/page/server-reference-manifest.json +88 -88
- package/web/.next/server/app/page.js +1 -1
- package/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/build-manifest.json +3 -3
- package/web/.next/server/app/skills/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/build-manifest.json +3 -3
- package/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +3 -3
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +3 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js → [root-of-the-server]__2ffb27f1._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js.map → [root-of-the-server]__2ffb27f1._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +9 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__f648005b._.js.map → [root-of-the-server]__e41b5eec._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_23c92688._.js +6 -0
- package/web/.next/server/chunks/ssr/_23c92688._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_28993370._.js +1 -1
- package/web/.next/server/chunks/ssr/_28993370._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_49bf495c._.js +3 -0
- package/web/.next/server/chunks/ssr/_49bf495c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_690ea95f._.js +3 -0
- package/web/.next/server/chunks/ssr/{_2900ed94._.js.map → _690ea95f._.js.map} +1 -1
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_c52cace8._.js → server/chunks/ssr/_725584e5._.js} +2 -2
- package/web/.next/server/chunks/ssr/_725584e5._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +115 -115
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/page/server-reference-manifest.json +88 -88
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_a53cb908._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__08ba9bd3._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{[root-of-the-server]__f5830fa9._.js → [root-of-the-server]__2ffb27f1._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__551fb7e1._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__7f4180a1._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__9add7c3a._.js +4 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e41b5eec._.js +9 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__eaf6100f._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_23c92688._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_28993370._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_49bf495c._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_690ea95f._.js +3 -0
- package/web/.next/{server/chunks/ssr/_c52cace8._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_725584e5._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +115 -115
- package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.stories.tsx +16 -2
- package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +35 -6
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.stories.tsx +285 -0
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/control-center-drawer.tsx +650 -0
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/drawer-view.ts +82 -0
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/index.ts +2 -0
- package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.ts +0 -4
- package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.tsx +5 -14
- package/web/.next/standalone/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx +58 -51
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx +42 -1
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx +2 -16
- package/web/.next/standalone/src/presentation/web/components/common/feature-create-drawer/index.ts +1 -0
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.tsx +55 -2
- package/web/.next/standalone/src/presentation/web/components/common/feature-drawer/feature-drawer.tsx +97 -106
- package/web/.next/standalone/src/presentation/web/components/common/index.ts +6 -0
- package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.stories.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/common/merge-review/merge-review.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.stories.tsx +28 -2
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-drawer.tsx +7 -2
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.tsx +1 -1
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +7 -6
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/features/control-center/control-center-inner.tsx +30 -348
- package/web/.next/standalone/src/presentation/web/components/features/control-center/use-control-center-state.ts +2 -1
- package/web/.next/standalone/src/presentation/web/components/features/features-canvas/features-canvas.tsx +5 -1
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/38ca82d1243738e3.js +1 -0
- package/web/.next/static/chunks/{35f41ba0a6d626d7.js → 491ae2bbae40857c.js} +1 -1
- package/web/.next/static/chunks/4b6cc9f65260f2bd.js +2 -0
- package/web/.next/static/chunks/67599679ca9ac863.js +1 -0
- package/web/.next/static/chunks/{e0073669b6bc24df.js → 6ece250c7d0ec203.js} +1 -1
- package/web/.next/static/chunks/a186bbb822ccb655.css +2 -0
- package/web/.next/static/chunks/a5c59952485e875e.js +1 -0
- package/web/.next/static/chunks/{8c60d1bd87239066.js → a9626385607910b3.js} +1 -1
- package/web/.next/static/chunks/c1c15470a7b058c8.js +1 -0
- package/web/.next/static/chunks/caa2e7e1618e2179.js +1 -0
- package/web/.next/static/chunks/ed799a306922f03e.js +10 -0
- package/web/.next/static/chunks/fb703cf73aba2eb8.js +1 -0
- package/web/.next/static/chunks/{turbopack-b6b5b4f015327a9a.js → turbopack-958ac34b879d0dce.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +0 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +0 -9
- package/web/.next/server/chunks/ssr/_2900ed94._.js +0 -3
- package/web/.next/server/chunks/ssr/_6978d868._.js +0 -3
- package/web/.next/server/chunks/ssr/_6978d868._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_85965278._.js +0 -6
- package/web/.next/server/chunks/ssr/_85965278._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_c52cace8._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_623b646a._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6bb51fac._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c1f0f2a8._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f648005b._.js +0 -9
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_2900ed94._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6978d868._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_85965278._.js +0 -6
- package/web/.next/static/chunks/41a2adc09edfffaf.js +0 -1
- package/web/.next/static/chunks/5054c72b1c8f5912.js +0 -1
- package/web/.next/static/chunks/5f6d9f4647fc3093.js +0 -10
- package/web/.next/static/chunks/96f49affaceab206.css +0 -2
- package/web/.next/static/chunks/a6d1d774260fc927.js +0 -2
- package/web/.next/static/chunks/c0fdd832fc4ee8eb.js +0 -1
- package/web/.next/static/chunks/de70ba984363673f.js +0 -1
- package/web/.next/static/chunks/f5fb2f182ae9b015.js +0 -1
- /package/web/.next/static/{XGbKxw26cOCJQ-711YxBw → GdqfiIUVMj2wj_3lbrUqd}/_buildManifest.js +0 -0
- /package/web/.next/static/{XGbKxw26cOCJQ-711YxBw → GdqfiIUVMj2wj_3lbrUqd}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{XGbKxw26cOCJQ-711YxBw → GdqfiIUVMj2wj_3lbrUqd}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
4
|
+
import { Button } from '../../ui/button.js';
|
|
5
|
+
import { ControlCenterDrawer } from './control-center-drawer.js';
|
|
6
|
+
const meta = {
|
|
7
|
+
title: 'Drawers/ControlCenterDrawer',
|
|
8
|
+
component: ControlCenterDrawer,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: 'fullscreen',
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
export default meta;
|
|
15
|
+
/* ---------------------------------------------------------------------------
|
|
16
|
+
* Fixtures
|
|
17
|
+
* ------------------------------------------------------------------------- */
|
|
18
|
+
const featureView = {
|
|
19
|
+
type: 'feature',
|
|
20
|
+
node: {
|
|
21
|
+
name: 'Auth Module',
|
|
22
|
+
description: 'Implement OAuth2 authentication flow',
|
|
23
|
+
featureId: '#f1',
|
|
24
|
+
lifecycle: 'implementation',
|
|
25
|
+
state: 'running',
|
|
26
|
+
progress: 45,
|
|
27
|
+
agentType: 'claude-code',
|
|
28
|
+
repositoryPath: '/home/user/my-repo',
|
|
29
|
+
branch: 'feat/auth-module',
|
|
30
|
+
specPath: '/home/user/my-repo/specs/001-auth-module',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const featureDoneView = {
|
|
34
|
+
type: 'feature',
|
|
35
|
+
node: {
|
|
36
|
+
name: 'Payment Gateway',
|
|
37
|
+
description: 'Stripe integration for subscriptions',
|
|
38
|
+
featureId: '#f3',
|
|
39
|
+
lifecycle: 'maintain',
|
|
40
|
+
state: 'done',
|
|
41
|
+
progress: 100,
|
|
42
|
+
runtime: '1h 42m',
|
|
43
|
+
repositoryPath: '/home/user/my-repo',
|
|
44
|
+
branch: 'feat/payment-gateway',
|
|
45
|
+
pr: {
|
|
46
|
+
url: 'https://github.com/org/repo/pull/42',
|
|
47
|
+
number: 42,
|
|
48
|
+
status: PrStatus.Merged,
|
|
49
|
+
ciStatus: CiStatus.Success,
|
|
50
|
+
commitHash: 'abc1234567890',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
const featureErrorView = {
|
|
55
|
+
type: 'feature',
|
|
56
|
+
node: {
|
|
57
|
+
name: 'Email Service',
|
|
58
|
+
description: 'Transactional email with SendGrid',
|
|
59
|
+
featureId: '#f5',
|
|
60
|
+
lifecycle: 'review',
|
|
61
|
+
state: 'error',
|
|
62
|
+
progress: 30,
|
|
63
|
+
errorMessage: 'Build failed: type mismatch in auth middleware',
|
|
64
|
+
repositoryPath: '/home/user/my-repo',
|
|
65
|
+
branch: 'feat/email-service',
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
const prdReviewView = {
|
|
69
|
+
type: 'prd-review',
|
|
70
|
+
node: {
|
|
71
|
+
name: 'API Rate Limiting',
|
|
72
|
+
description: 'Sliding window rate limiting for public endpoints',
|
|
73
|
+
featureId: 'feat-abc123',
|
|
74
|
+
lifecycle: 'requirements',
|
|
75
|
+
state: 'action-required',
|
|
76
|
+
progress: 0,
|
|
77
|
+
repositoryPath: '/home/user/my-repo',
|
|
78
|
+
branch: 'feat/api-rate-limiting',
|
|
79
|
+
specPath: '/home/user/my-repo/specs/002-rate-limiting',
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
const techReviewView = {
|
|
83
|
+
type: 'tech-review',
|
|
84
|
+
node: {
|
|
85
|
+
name: 'Search Index',
|
|
86
|
+
description: 'Elasticsearch full-text search integration',
|
|
87
|
+
featureId: 'feat-def456',
|
|
88
|
+
lifecycle: 'implementation',
|
|
89
|
+
state: 'action-required',
|
|
90
|
+
progress: 0,
|
|
91
|
+
repositoryPath: '/home/user/my-repo',
|
|
92
|
+
branch: 'feat/search-index',
|
|
93
|
+
specPath: '/home/user/my-repo/specs/003-search',
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
const mergeReviewView = {
|
|
97
|
+
type: 'merge-review',
|
|
98
|
+
node: {
|
|
99
|
+
name: 'Auth Module',
|
|
100
|
+
description: 'OAuth2 authentication flow',
|
|
101
|
+
featureId: 'feat-ghi789',
|
|
102
|
+
lifecycle: 'review',
|
|
103
|
+
state: 'action-required',
|
|
104
|
+
progress: 100,
|
|
105
|
+
repositoryPath: '/home/user/my-repo',
|
|
106
|
+
branch: 'feat/auth-module',
|
|
107
|
+
specPath: '/home/user/my-repo/specs/001-auth-module',
|
|
108
|
+
pr: {
|
|
109
|
+
url: 'https://github.com/org/repo/pull/17',
|
|
110
|
+
number: 17,
|
|
111
|
+
status: PrStatus.Open,
|
|
112
|
+
ciStatus: CiStatus.Success,
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
const createView = {
|
|
117
|
+
type: 'feature-create',
|
|
118
|
+
repositoryPath: '/home/user/my-repo',
|
|
119
|
+
features: [
|
|
120
|
+
{ id: 'feat-abc123', name: 'API Rate Limiting' },
|
|
121
|
+
{ id: 'feat-def456', name: 'Search Index' },
|
|
122
|
+
],
|
|
123
|
+
workflowDefaults: {
|
|
124
|
+
approvalGates: { allowPrd: true, allowPlan: false, allowMerge: false },
|
|
125
|
+
push: true,
|
|
126
|
+
openPr: false,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
const repositoryView = {
|
|
130
|
+
type: 'repository',
|
|
131
|
+
data: {
|
|
132
|
+
id: 'repo-1',
|
|
133
|
+
name: 'my-awesome-app',
|
|
134
|
+
repositoryPath: '/home/user/my-awesome-app',
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
/* ---------------------------------------------------------------------------
|
|
138
|
+
* Trigger wrapper
|
|
139
|
+
* ------------------------------------------------------------------------- */
|
|
140
|
+
function Trigger({ view, label }) {
|
|
141
|
+
const [activeView, setActiveView] = useState(null);
|
|
142
|
+
return (_jsxs("div", { className: "flex h-screen items-start p-4", children: [_jsx(Button, { variant: "outline", onClick: () => setActiveView(view), children: label }), _jsx(ControlCenterDrawer, { view: activeView, onClose: () => setActiveView(null), onDelete: (_id) => undefined, onCreateSubmit: () => setActiveView(null) })] }));
|
|
143
|
+
}
|
|
144
|
+
/* ---------------------------------------------------------------------------
|
|
145
|
+
* Stories — one per view type
|
|
146
|
+
* ------------------------------------------------------------------------- */
|
|
147
|
+
/** Feature info view — running state with progress. Default story. */
|
|
148
|
+
export const Default = {
|
|
149
|
+
render: () => _jsx(Trigger, { view: featureView, label: "Open Feature (Running)" }),
|
|
150
|
+
};
|
|
151
|
+
/** Feature info view — completed (maintain lifecycle, done state, merged PR). */
|
|
152
|
+
export const FeatureDone = {
|
|
153
|
+
render: () => _jsx(Trigger, { view: featureDoneView, label: "Open Feature (Done + PR)" }),
|
|
154
|
+
};
|
|
155
|
+
/** Feature info view — error state. */
|
|
156
|
+
export const FeatureError = {
|
|
157
|
+
render: () => _jsx(Trigger, { view: featureErrorView, label: "Open Feature (Error)" }),
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* PRD review view — loads questionnaire data via server action.
|
|
161
|
+
* Shows spinner in Storybook (no real API available).
|
|
162
|
+
*/
|
|
163
|
+
export const PrdReview = {
|
|
164
|
+
render: () => _jsx(Trigger, { view: prdReviewView, label: "Open PRD Review" }),
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* Tech decisions review view — loads research artifact via server action.
|
|
168
|
+
* Shows spinner in Storybook.
|
|
169
|
+
*/
|
|
170
|
+
export const TechReview = {
|
|
171
|
+
render: () => _jsx(Trigger, { view: techReviewView, label: "Open Tech Review" }),
|
|
172
|
+
};
|
|
173
|
+
/**
|
|
174
|
+
* Merge review view — loads merge review data via server action.
|
|
175
|
+
* Shows spinner in Storybook.
|
|
176
|
+
*/
|
|
177
|
+
export const MergeReview = {
|
|
178
|
+
render: () => _jsx(Trigger, { view: mergeReviewView, label: "Open Merge Review" }),
|
|
179
|
+
};
|
|
180
|
+
/** Feature create form. */
|
|
181
|
+
export const FeatureCreate = {
|
|
182
|
+
render: () => _jsx(Trigger, { view: createView, label: "Open Create Feature" }),
|
|
183
|
+
};
|
|
184
|
+
/** Repository actions view. */
|
|
185
|
+
export const Repository = {
|
|
186
|
+
render: () => _jsx(Trigger, { view: repositoryView, label: "Open Repository" }),
|
|
187
|
+
};
|
|
188
|
+
/* ---------------------------------------------------------------------------
|
|
189
|
+
* Interactive switcher — cycle through all views
|
|
190
|
+
* ------------------------------------------------------------------------- */
|
|
191
|
+
const allViews = [
|
|
192
|
+
{ label: 'Feature (Running)', view: featureView },
|
|
193
|
+
{ label: 'Feature (Done)', view: featureDoneView },
|
|
194
|
+
{ label: 'Feature (Error)', view: featureErrorView },
|
|
195
|
+
{ label: 'PRD Review', view: prdReviewView },
|
|
196
|
+
{ label: 'Tech Review', view: techReviewView },
|
|
197
|
+
{ label: 'Merge Review', view: mergeReviewView },
|
|
198
|
+
{ label: 'Create Feature', view: createView },
|
|
199
|
+
{ label: 'Repository', view: repositoryView },
|
|
200
|
+
];
|
|
201
|
+
function AllViewsSwitcher() {
|
|
202
|
+
const [activeView, setActiveView] = useState(null);
|
|
203
|
+
return (_jsxs("div", { className: "flex h-screen", children: [_jsxs("div", { className: "flex flex-col gap-2 p-4", children: [_jsx("span", { className: "text-muted-foreground mb-2 text-xs font-semibold tracking-wider uppercase", children: "Select view" }), allViews.map(({ label, view }) => (_jsx("button", { type: "button", onClick: () => setActiveView(view), className: `rounded-md px-3 py-1.5 text-left text-sm ${activeView?.type === view.type
|
|
204
|
+
? 'bg-primary text-primary-foreground'
|
|
205
|
+
: 'bg-muted hover:bg-muted/80'}`, children: label }, label))), _jsx("button", { type: "button", onClick: () => setActiveView(null), className: "bg-destructive/10 text-destructive hover:bg-destructive/20 mt-2 rounded-md px-3 py-1.5 text-left text-sm", children: "Close drawer" })] }), _jsx(ControlCenterDrawer, { view: activeView, onClose: () => setActiveView(null), onDelete: (_id) => undefined, onCreateSubmit: () => setActiveView(null) })] }));
|
|
206
|
+
}
|
|
207
|
+
/** Interactive — click any view type to open that drawer panel. */
|
|
208
|
+
export const AllViews = {
|
|
209
|
+
render: () => _jsx(AllViewsSwitcher, {}),
|
|
210
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { FeatureNodeData } from '../../common/feature-node/index.js';
|
|
2
|
+
import type { RepositoryNodeData } from '../../common/repository-node/index.js';
|
|
3
|
+
import type { ParentFeatureOption } from '../../common/feature-create-drawer/feature-create-drawer.js';
|
|
4
|
+
import type { WorkflowDefaults } from '../../../app/actions/get-workflow-defaults.js';
|
|
5
|
+
/**
|
|
6
|
+
* Discriminated union representing every possible drawer state in the control center.
|
|
7
|
+
* Only one view can be active at a time.
|
|
8
|
+
*/
|
|
9
|
+
export type DrawerView =
|
|
10
|
+
/** Generic feature info (running, done, blocked, error, or unhandled action-required phases) */
|
|
11
|
+
{
|
|
12
|
+
type: 'feature';
|
|
13
|
+
node: FeatureNodeData;
|
|
14
|
+
}
|
|
15
|
+
/** requirements lifecycle + action-required → PRD questionnaire */
|
|
16
|
+
| {
|
|
17
|
+
type: 'prd-review';
|
|
18
|
+
node: FeatureNodeData;
|
|
19
|
+
}
|
|
20
|
+
/** implementation lifecycle + action-required → tech decisions review */
|
|
21
|
+
| {
|
|
22
|
+
type: 'tech-review';
|
|
23
|
+
node: FeatureNodeData;
|
|
24
|
+
}
|
|
25
|
+
/** review lifecycle + action-required|error → merge review */
|
|
26
|
+
| {
|
|
27
|
+
type: 'merge-review';
|
|
28
|
+
node: FeatureNodeData;
|
|
29
|
+
}
|
|
30
|
+
/** Feature creation form */
|
|
31
|
+
| {
|
|
32
|
+
type: 'feature-create';
|
|
33
|
+
repositoryPath: string;
|
|
34
|
+
initialParentId?: string;
|
|
35
|
+
features: ParentFeatureOption[];
|
|
36
|
+
workflowDefaults?: WorkflowDefaults;
|
|
37
|
+
}
|
|
38
|
+
/** Repository node actions */
|
|
39
|
+
| {
|
|
40
|
+
type: 'repository';
|
|
41
|
+
data: RepositoryNodeData;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Derives the active DrawerView from control-center state.
|
|
45
|
+
* Priority: feature-create > selected-node (prd/tech/merge/feature) > repository
|
|
46
|
+
*/
|
|
47
|
+
export declare function computeDrawerView({ selectedNode, isCreateDrawerOpen, pendingRepositoryPath, pendingParentFeatureId, selectedRepoNode, features, workflowDefaults, }: {
|
|
48
|
+
selectedNode: FeatureNodeData | null;
|
|
49
|
+
isCreateDrawerOpen: boolean;
|
|
50
|
+
pendingRepositoryPath: string;
|
|
51
|
+
pendingParentFeatureId: string | undefined;
|
|
52
|
+
selectedRepoNode: RepositoryNodeData | null;
|
|
53
|
+
features: ParentFeatureOption[];
|
|
54
|
+
workflowDefaults: WorkflowDefaults | undefined;
|
|
55
|
+
}): DrawerView | null;
|
|
56
|
+
//# sourceMappingURL=drawer-view.d.ts.map
|
package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawer-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/drawer-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iEAAiE,CAAC;AAC3G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,UAAU;AACpB,gGAAgG;AAC9F;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AAC5C,mEAAmE;GACjE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AAC/C,yEAAyE;GACvE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AAChD,8DAA8D;GAC5D;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AACjD,4BAA4B;GAC1B;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AACH,8BAA8B;GAC5B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAErD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAChD,GAAG,UAAU,GAAG,IAAI,CAgCpB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives the active DrawerView from control-center state.
|
|
3
|
+
* Priority: feature-create > selected-node (prd/tech/merge/feature) > repository
|
|
4
|
+
*/
|
|
5
|
+
export function computeDrawerView({ selectedNode, isCreateDrawerOpen, pendingRepositoryPath, pendingParentFeatureId, selectedRepoNode, features, workflowDefaults, }) {
|
|
6
|
+
if (isCreateDrawerOpen) {
|
|
7
|
+
return {
|
|
8
|
+
type: 'feature-create',
|
|
9
|
+
repositoryPath: pendingRepositoryPath,
|
|
10
|
+
initialParentId: pendingParentFeatureId,
|
|
11
|
+
features,
|
|
12
|
+
workflowDefaults,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
if (selectedNode) {
|
|
16
|
+
if (selectedNode.lifecycle === 'requirements' && selectedNode.state === 'action-required') {
|
|
17
|
+
return { type: 'prd-review', node: selectedNode };
|
|
18
|
+
}
|
|
19
|
+
if (selectedNode.lifecycle === 'implementation' && selectedNode.state === 'action-required') {
|
|
20
|
+
return { type: 'tech-review', node: selectedNode };
|
|
21
|
+
}
|
|
22
|
+
if (selectedNode.lifecycle === 'review' &&
|
|
23
|
+
(selectedNode.state === 'action-required' || selectedNode.state === 'error')) {
|
|
24
|
+
return { type: 'merge-review', node: selectedNode };
|
|
25
|
+
}
|
|
26
|
+
return { type: 'feature', node: selectedNode };
|
|
27
|
+
}
|
|
28
|
+
if (selectedRepoNode) {
|
|
29
|
+
return { type: 'repository', data: selectedRepoNode };
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/control-center-drawer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.d.ts
CHANGED
|
@@ -10,14 +10,10 @@ export interface DrawerActionBarProps {
|
|
|
10
10
|
approveIcon?: ReactNode;
|
|
11
11
|
/** Placeholder for the inline revision input */
|
|
12
12
|
revisionPlaceholder?: string;
|
|
13
|
-
/** Title for the reject feedback dialog */
|
|
14
|
-
rejectDialogTitle?: string;
|
|
15
13
|
/** Whether an approval/processing operation is in flight */
|
|
16
14
|
isProcessing?: boolean;
|
|
17
15
|
/** Whether a reject operation is in flight */
|
|
18
16
|
isRejecting?: boolean;
|
|
19
|
-
/** Whether to show the reject button (defaults to true when onReject is provided) */
|
|
20
|
-
showRejectButton?: boolean;
|
|
21
17
|
/** Content rendered between revision input and action buttons (e.g. progress bar) */
|
|
22
18
|
children?: ReactNode;
|
|
23
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer-action-bar-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kCAAkC;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"drawer-action-bar-config.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/drawer-action-bar/drawer-action-bar-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kCAAkC;IAClC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB"}
|
package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { DrawerActionBarProps } from './drawer-action-bar-config.js';
|
|
2
|
-
export declare function DrawerActionBar({ onReject, onApprove, approveLabel, approveIcon, revisionPlaceholder,
|
|
2
|
+
export declare function DrawerActionBar({ onReject, onApprove, approveLabel, approveIcon, revisionPlaceholder, isProcessing, isRejecting, children, }: DrawerActionBarProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=drawer-action-bar.d.ts.map
|
package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer-action-bar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drawer-action-bar.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,YAAoB,EACpB,WAAmB,EACnB,QAAQ,GACT,EAAE,oBAAoB,2CAkEtB"}
|
|
@@ -1,21 +1,27 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { Send } from 'lucide-react';
|
|
5
5
|
import { Button } from '../../ui/button.js';
|
|
6
|
-
import {
|
|
7
|
-
import { DrawerRevisionInput } from '../../common/drawer-revision-input/index.js';
|
|
6
|
+
import { Input } from '../../ui/input.js';
|
|
8
7
|
import { useSoundAction } from '../../../hooks/use-sound-action.js';
|
|
9
|
-
export function DrawerActionBar({ onReject, onApprove, approveLabel, approveIcon, revisionPlaceholder,
|
|
10
|
-
const [
|
|
8
|
+
export function DrawerActionBar({ onReject, onApprove, approveLabel, approveIcon, revisionPlaceholder, isProcessing = false, isRejecting = false, children, }) {
|
|
9
|
+
const [chatInput, setChatInput] = useState('');
|
|
11
10
|
const approveSound = useSoundAction('approve');
|
|
12
|
-
const rejectSound = useSoundAction('reject');
|
|
13
11
|
const disabled = isProcessing || isRejecting;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
function handleRevisionSubmit(e) {
|
|
13
|
+
e.preventDefault();
|
|
14
|
+
const text = chatInput.trim();
|
|
15
|
+
if (!text || !onReject)
|
|
16
|
+
return;
|
|
17
|
+
onReject(text);
|
|
18
|
+
setChatInput('');
|
|
19
|
+
}
|
|
20
|
+
return (_jsxs("div", { className: "border-border shrink-0 border-t", children: [children, onReject ? (_jsxs("form", { onSubmit: handleRevisionSubmit, className: "flex items-center gap-2 p-4", children: [_jsx(Input, { type: "text", placeholder: revisionPlaceholder ?? 'Ask AI to revise...', "aria-label": revisionPlaceholder ?? 'Ask AI to revise...', disabled: disabled, value: chatInput, onChange: (e) => setChatInput(e.target.value), className: "flex-1" }), _jsx(Button, { type: "submit", variant: "secondary", size: "icon", "aria-label": "Send", disabled: disabled, children: _jsx(Send, {}) }), _jsxs(Button, { type: "button", disabled: disabled, onClick: () => {
|
|
18
21
|
approveSound.play();
|
|
19
22
|
onApprove();
|
|
20
|
-
}, children: [approveIcon, approveLabel] })] })
|
|
23
|
+
}, children: [approveIcon, approveLabel] })] })) : (_jsx("div", { className: "flex items-center gap-2 px-4 pb-4", children: _jsxs(Button, { type: "button", className: "flex-1", disabled: disabled, onClick: () => {
|
|
24
|
+
approveSound.play();
|
|
25
|
+
onApprove();
|
|
26
|
+
}, children: [approveIcon, approveLabel] }) }))] }));
|
|
21
27
|
}
|
package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.d.ts
CHANGED
|
@@ -7,14 +7,12 @@ type Story = StoryObj<typeof DrawerActionBar>;
|
|
|
7
7
|
export declare const Default: Story;
|
|
8
8
|
/** With approve icon. */
|
|
9
9
|
export declare const WithIcon: Story;
|
|
10
|
-
/** With
|
|
10
|
+
/** With revision input — single line: chat input, send, approve. */
|
|
11
11
|
export declare const WithReject: Story;
|
|
12
|
-
/** Processing state —
|
|
12
|
+
/** Processing state — all controls disabled. */
|
|
13
13
|
export declare const Processing: Story;
|
|
14
|
-
/** Rejecting state —
|
|
14
|
+
/** Rejecting state — all controls disabled. */
|
|
15
15
|
export declare const Rejecting: Story;
|
|
16
|
-
/**
|
|
16
|
+
/** Custom revision placeholder. */
|
|
17
17
|
export declare const WithRevisionInput: Story;
|
|
18
|
-
/** Custom reject dialog title. */
|
|
19
|
-
export declare const CustomRejectTitle: Story;
|
|
20
18
|
//# sourceMappingURL=drawer-action-bar.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawer-action-bar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAkBtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9C,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,yBAAyB;AACzB,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"drawer-action-bar.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,eAAe,CAkBtC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9C,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,yBAAyB;AACzB,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,UAAU,EAAE,KAMxB,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,iBAAiB,EAAE,KAM/B,CAAC"}
|
package/dist/src/presentation/web/components/common/drawer-action-bar/drawer-action-bar.stories.js
CHANGED
|
@@ -3,7 +3,7 @@ import { fn } from '@storybook/test';
|
|
|
3
3
|
import { Check } from 'lucide-react';
|
|
4
4
|
import { DrawerActionBar } from './drawer-action-bar.js';
|
|
5
5
|
const meta = {
|
|
6
|
-
title: '
|
|
6
|
+
title: 'Drawers/Base/DrawerActionBar',
|
|
7
7
|
component: DrawerActionBar,
|
|
8
8
|
tags: ['autodocs'],
|
|
9
9
|
parameters: {
|
|
@@ -27,14 +27,14 @@ export const WithIcon = {
|
|
|
27
27
|
approveIcon: _jsx(Check, { className: "mr-1.5 h-4 w-4" }),
|
|
28
28
|
},
|
|
29
29
|
};
|
|
30
|
-
/** With
|
|
30
|
+
/** With revision input — single line: chat input, send, approve. */
|
|
31
31
|
export const WithReject = {
|
|
32
32
|
args: {
|
|
33
33
|
onReject: fn().mockName('onReject'),
|
|
34
34
|
approveLabel: 'Approve',
|
|
35
35
|
},
|
|
36
36
|
};
|
|
37
|
-
/** Processing state —
|
|
37
|
+
/** Processing state — all controls disabled. */
|
|
38
38
|
export const Processing = {
|
|
39
39
|
args: {
|
|
40
40
|
onReject: fn().mockName('onReject'),
|
|
@@ -42,7 +42,7 @@ export const Processing = {
|
|
|
42
42
|
isProcessing: true,
|
|
43
43
|
},
|
|
44
44
|
};
|
|
45
|
-
/** Rejecting state —
|
|
45
|
+
/** Rejecting state — all controls disabled. */
|
|
46
46
|
export const Rejecting = {
|
|
47
47
|
args: {
|
|
48
48
|
onReject: fn().mockName('onReject'),
|
|
@@ -50,7 +50,7 @@ export const Rejecting = {
|
|
|
50
50
|
isRejecting: true,
|
|
51
51
|
},
|
|
52
52
|
};
|
|
53
|
-
/**
|
|
53
|
+
/** Custom revision placeholder. */
|
|
54
54
|
export const WithRevisionInput = {
|
|
55
55
|
args: {
|
|
56
56
|
onReject: fn().mockName('onReject'),
|
|
@@ -58,11 +58,3 @@ export const WithRevisionInput = {
|
|
|
58
58
|
revisionPlaceholder: 'Ask AI to revise the plan...',
|
|
59
59
|
},
|
|
60
60
|
};
|
|
61
|
-
/** Custom reject dialog title. */
|
|
62
|
-
export const CustomRejectTitle = {
|
|
63
|
-
args: {
|
|
64
|
-
onReject: fn().mockName('onReject'),
|
|
65
|
-
approveLabel: 'Approve Plan',
|
|
66
|
-
rejectDialogTitle: 'Reject Plan',
|
|
67
|
-
},
|
|
68
|
-
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"feature-create-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAC;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,YAAY,EAAE,cAAc,EAAE,MAAM,0DAA0D,CAAC;AAE/F,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,kGAAkG;IAClG,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,cAAc,EACd,YAAoB,EACpB,gBAAgB,EAChB,QAAQ,EACR,eAAe,GAChB,EAAE,wBAAwB,2CA0Q1B"}
|
package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.js
CHANGED
|
@@ -12,7 +12,6 @@ import { Textarea } from '../../ui/textarea.js';
|
|
|
12
12
|
import { Label } from '../../ui/label.js';
|
|
13
13
|
import { CheckboxGroup } from '../../ui/checkbox-group.js';
|
|
14
14
|
import { CheckboxGroupItem } from '../../ui/checkbox-group-item.js';
|
|
15
|
-
import { Separator } from '../../ui/separator.js';
|
|
16
15
|
import { Badge } from '../../ui/badge.js';
|
|
17
16
|
import { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover.js';
|
|
18
17
|
import { pickFiles } from './pick-files.js';
|
|
@@ -27,8 +26,6 @@ const EMPTY_GATES = {
|
|
|
27
26
|
allowMerge: false,
|
|
28
27
|
};
|
|
29
28
|
export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, isSubmitting = false, workflowDefaults, features, initialParentId, }) {
|
|
30
|
-
const drawerOpenSound = useSoundAction('drawer-open');
|
|
31
|
-
const drawerCloseSound = useSoundAction('drawer-close');
|
|
32
29
|
const createSound = useSoundAction('create');
|
|
33
30
|
const defaultGates = workflowDefaults?.approvalGates ?? EMPTY_GATES;
|
|
34
31
|
const defaultPush = workflowDefaults?.push ?? false;
|
|
@@ -40,13 +37,6 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
|
|
|
40
37
|
const [push, setPush] = useState(defaultPush);
|
|
41
38
|
const [openPr, setOpenPr] = useState(defaultOpenPr);
|
|
42
39
|
const [parentId, setParentId] = useState(undefined);
|
|
43
|
-
// Play drawer-open sound when the drawer opens
|
|
44
|
-
const playDrawerOpen = drawerOpenSound.play;
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
if (open) {
|
|
47
|
-
playDrawerOpen();
|
|
48
|
-
}
|
|
49
|
-
}, [open, playDrawerOpen]);
|
|
50
40
|
// Sync state when workflowDefaults load asynchronously
|
|
51
41
|
useEffect(() => {
|
|
52
42
|
if (workflowDefaults) {
|
|
@@ -71,10 +61,9 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
|
|
|
71
61
|
setParentId(undefined);
|
|
72
62
|
}, [defaultGates, defaultPush, defaultOpenPr]);
|
|
73
63
|
const handleClose = useCallback(() => {
|
|
74
|
-
drawerCloseSound.play();
|
|
75
64
|
resetForm();
|
|
76
65
|
onClose();
|
|
77
|
-
}, [onClose, resetForm
|
|
66
|
+
}, [onClose, resetForm]);
|
|
78
67
|
const handleSubmit = useCallback((e) => {
|
|
79
68
|
e.preventDefault();
|
|
80
69
|
if (!name.trim())
|
|
@@ -124,7 +113,7 @@ export function FeatureCreateDrawer({ open, onClose, onSubmit, repositoryPath, i
|
|
|
124
113
|
setAttachments((prev) => prev.filter((f) => f.path !== path));
|
|
125
114
|
}, []);
|
|
126
115
|
const hasFeatures = features && features.length > 0;
|
|
127
|
-
return (
|
|
116
|
+
return (_jsx(BaseDrawer, { open: open, onClose: handleClose, size: "md", modal: false, "data-testid": "feature-create-drawer", header: _jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "h-2.5 w-2.5 shrink-0 rounded-full bg-blue-500" }), _jsx(DrawerTitle, { children: "NEW FEATURE" })] }), _jsx(DrawerDescription, { asChild: true, children: _jsx("div", { children: _jsx(Badge, { variant: "secondary", children: "Creating..." }) }) })] }), footer: _jsxs("div", { className: "flex flex-row justify-end gap-2", children: [_jsx(Button, { variant: "outline", onClick: handleClose, disabled: isSubmitting, children: "Cancel" }), _jsx(Button, { type: "submit", form: "create-feature-form", disabled: !name.trim() || isSubmitting, children: isSubmitting ? 'Creating...' : '+ Create Feature' })] }), children: _jsx("div", { className: "overflow-y-auto p-4", children: _jsxs("form", { id: "create-feature-form", onSubmit: handleSubmit, className: "flex flex-col gap-4", children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "feature-name", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "FEATURE NAME" }), _jsx(Input, { id: "feature-name", placeholder: "e.g. GitHub OAuth Login", value: name, onChange: (e) => setName(e.target.value), required: true, disabled: isSubmitting })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "feature-description", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "DESCRIPTION" }), _jsx(Textarea, { id: "feature-description", placeholder: "Describe what this feature does...", value: description, onChange: (e) => setDescription(e.target.value), rows: 4, disabled: isSubmitting })] }), hasFeatures ? (_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { htmlFor: "parent-feature", className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "PARENT FEATURE" }), _jsx(ParentFeatureCombobox, { features: features, value: parentId, onChange: setParentId, disabled: isSubmitting })] })) : null, _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "APPROVE" }), _jsx(CheckboxGroup, { label: "Autonomous Mode", description: "YOLO!", parentAriaLabel: "Auto approve all", options: AUTO_APPROVE_OPTIONS, value: approvalGates, onValueChange: setApprovalGates, disabled: isSubmitting })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Label, { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: "GIT" }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsx(CheckboxGroupItem, { id: "push", label: "Push", description: "Push branch to remote after implementation.", checked: push || openPr, onCheckedChange: setPush, disabled: openPr || isSubmitting }), _jsx(CheckboxGroupItem, { id: "open-pr", label: "Create PR", description: "Open a pull request after pushing.", checked: openPr, onCheckedChange: setOpenPr, disabled: isSubmitting })] })] }), _jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs(Label, { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: ["ATTACHMENTS", attachments.length > 0 && (_jsxs("span", { className: "text-muted-foreground/60 ml-1.5", children: ["(", attachments.length, ")"] }))] }), _jsxs(Button, { type: "button", variant: "outline", size: "xs", onClick: handleAddFiles, disabled: isSubmitting, children: [_jsx(PlusIcon, { className: "size-3" }), "Add Files"] })] }), attachments.length > 0 && (_jsx("div", { className: "flex flex-col gap-2", children: attachments.map((file) => (_jsx(AttachmentCard, { file: file, onRemove: () => handleRemoveFile(file.path), disabled: isSubmitting }, file.path))) }))] })] }) }) }));
|
|
128
117
|
}
|
|
129
118
|
function ParentFeatureCombobox({ features, value, onChange, disabled, }) {
|
|
130
119
|
const [open, setOpen] = useState(false);
|
|
@@ -84,15 +84,7 @@ export declare const PrChecked: Story;
|
|
|
84
84
|
* `shep settings workflow` and are read at mount time via `getWorkflowDefaults()`.
|
|
85
85
|
*/
|
|
86
86
|
export declare const WithWorkflowDefaults: Story;
|
|
87
|
-
/**
|
|
88
|
-
|
|
89
|
-
* and click "Add Files" to attach files via the native OS file picker.
|
|
90
|
-
*
|
|
91
|
-
* **Submitted data** is displayed in a styled panel showing `FeatureCreatePayload`
|
|
92
|
-
* with `{ name, description, attachments, repositoryPath, approvalGates }`.
|
|
93
|
-
*
|
|
94
|
-
* In Storybook, the native picker won't work (no backend), but submitted data
|
|
95
|
-
* would show the paths if files were attached programmatically.
|
|
96
|
-
*/
|
|
87
|
+
/** Feature create drawer rendered inside a full-page context — starts open. */
|
|
88
|
+
export declare const InDrawer: Story;
|
|
97
89
|
export declare const Interactive: Story;
|
|
98
90
|
//# sourceMappingURL=feature-create-drawer.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-create-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAS9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAyB1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAiDlD,uFAAuF;AACvF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAMhC,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAYF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-create-drawer.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAS9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,mBAAmB,CAyB1C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAiDlD,uFAAuF;AACvF,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAiBvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAMhC,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAYF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAWlC,CAAC;AAgDF,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,EAAE,KAEtB,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,KAsCzB,CAAC"}
|
|
@@ -37,7 +37,7 @@ import { Button } from '../../ui/button.js';
|
|
|
37
37
|
* with full absolute paths, filenames, and sizes
|
|
38
38
|
*/
|
|
39
39
|
const meta = {
|
|
40
|
-
title: '
|
|
40
|
+
title: 'Drawers/Feature/FeatureCreateDrawer',
|
|
41
41
|
component: FeatureCreateDrawer,
|
|
42
42
|
tags: ['autodocs'],
|
|
43
43
|
parameters: {
|
|
@@ -244,6 +244,26 @@ export const WithWorkflowDefaults = {
|
|
|
244
244
|
* In Storybook, the native picker won't work (no backend), but submitted data
|
|
245
245
|
* would show the paths if files were attached programmatically.
|
|
246
246
|
*/
|
|
247
|
+
/* ---------------------------------------------------------------------------
|
|
248
|
+
* In-drawer story — full page context, starts open
|
|
249
|
+
* ------------------------------------------------------------------------- */
|
|
250
|
+
function CreateDrawerShellTemplate() {
|
|
251
|
+
const [open, setOpen] = useState(true);
|
|
252
|
+
return (_jsxs("div", { style: { height: '100vh', background: '#f8fafc', padding: '2rem' }, children: [_jsx("button", { type: "button", onClick: () => setOpen(true), style: { padding: '8px 16px', border: '1px solid #ccc', borderRadius: '6px' }, children: "Open Drawer" }), _jsx(FeatureCreateDrawer, { open: open, onClose: () => {
|
|
253
|
+
setOpen(false);
|
|
254
|
+
logClose();
|
|
255
|
+
}, onSubmit: (data) => {
|
|
256
|
+
logSubmit(data);
|
|
257
|
+
setOpen(false);
|
|
258
|
+
}, repositoryPath: "/Users/dev/my-repo" })] }));
|
|
259
|
+
}
|
|
260
|
+
/** Feature create drawer rendered inside a full-page context — starts open. */
|
|
261
|
+
export const InDrawer = {
|
|
262
|
+
render: () => _jsx(CreateDrawerShellTemplate, {}),
|
|
263
|
+
};
|
|
264
|
+
/* ---------------------------------------------------------------------------
|
|
265
|
+
* Interactive story — full paths shown in submitted data panel
|
|
266
|
+
* ------------------------------------------------------------------------- */
|
|
247
267
|
export const Interactive = {
|
|
248
268
|
render: function InteractiveRender() {
|
|
249
269
|
const [open, setOpen] = useState(false);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { FeatureCreateDrawer, type FeatureCreateDrawerProps, type FeatureCreatePayload, type FileAttachment, } from './feature-create-drawer.js';
|
|
1
|
+
export { FeatureCreateDrawer, type FeatureCreateDrawerProps, type FeatureCreatePayload, type FileAttachment, type ParentFeatureOption, } from './feature-create-drawer.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-create-drawer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC"}
|