@shepai/cli 1.78.1-pr241.ee88d2d → 1.78.1-pr246.ca9db57
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/apis/json-schema/Attachment.yaml +31 -0
- package/apis/json-schema/Feature.yaml +5 -0
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts +3 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/features/create/create-feature.use-case.js +35 -3
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts +7 -1
- package/dist/packages/core/src/application/use-cases/features/create/types.d.ts.map +1 -1
- package/dist/packages/core/src/domain/generated/output.d.ts +33 -0
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +3 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts +1 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/feature.mapper.js +4 -0
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +11 -0
- package/dist/packages/core/src/infrastructure/services/attachment-storage.service.d.ts +28 -0
- package/dist/packages/core/src/infrastructure/services/attachment-storage.service.d.ts.map +1 -0
- package/dist/packages/core/src/infrastructure/services/attachment-storage.service.js +125 -0
- package/dist/src/presentation/cli/commands/feat/new.command.d.ts.map +1 -1
- package/dist/src/presentation/cli/commands/feat/new.command.js +21 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -14
- package/dist/src/presentation/web/app/actions/compose-user-input.d.ts +7 -0
- package/dist/src/presentation/web/app/actions/compose-user-input.d.ts.map +1 -0
- package/dist/src/presentation/web/app/actions/compose-user-input.js +7 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts +1 -0
- package/dist/src/presentation/web/app/actions/create-feature.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/create-feature.js +3 -9
- package/dist/src/presentation/web/app/api/attachments/upload/route.d.ts +3 -0
- package/dist/src/presentation/web/app/api/attachments/upload/route.d.ts.map +1 -0
- package/dist/src/presentation/web/app/api/attachments/upload/route.js +101 -0
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts +1 -7
- package/dist/src/presentation/web/app/build-feature-node-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-feature-node-data.js +1 -7
- package/dist/src/presentation/web/app/build-graph-nodes.js +3 -7
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.d.ts +16 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.js +53 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.d.ts +12 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/attachment-card/attachment-card.stories.js +55 -0
- package/dist/src/presentation/web/components/common/attachment-card/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/attachment-card/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/attachment-card/index.js +1 -0
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts +19 -7
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/drawer-view.js +6 -6
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +85 -48
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.d.ts +11 -2
- 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 +194 -59
- package/dist/src/presentation/web/components/common/feature-create-drawer/feature-create-drawer.stories.d.ts +6 -0
- 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 +18 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts +9 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.js +60 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts +47 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/feature-drawer/feature-drawer.stories.js +307 -0
- package/dist/src/presentation/web/components/common/feature-drawer/index.d.ts +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-drawer/index.js +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +0 -12
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.d.ts +4 -3
- package/dist/src/presentation/web/components/common/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/index.js +4 -3
- package/dist/src/presentation/web/components/common/merge-review/index.d.ts +2 -1
- package/dist/src/presentation/web/components/common/merge-review/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/merge-review/index.js +1 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts +3 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review-drawer.js +8 -0
- package/dist/src/presentation/web/components/common/merge-review/merge-review.stories.d.ts +8 -0
- 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 +33 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts +2 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/prd-questionnaire/index.js +1 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts +3 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire-drawer.js +8 -0
- package/dist/src/presentation/web/components/common/prd-questionnaire/prd-questionnaire.stories.d.ts +10 -0
- 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 +38 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/index.js +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts +26 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell-config.js +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts +3 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +29 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts +14 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.stories.js +33 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts +2 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/tech-decisions-review/index.js +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts +3 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-drawer.js +8 -0
- package/dist/src/presentation/web/components/common/tech-decisions-review/tech-decisions-review.stories.d.ts +8 -0
- 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 +29 -1
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts +3 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/index.js +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts +21 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs-config.js +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts +3 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.js +12 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts +16 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/common/tech-review-tabs/tech-review-tabs.stories.js +110 -0
- package/dist/src/presentation/web/next.config.d.ts.map +1 -1
- package/dist/src/presentation/web/next.config.js +6 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +1 -1
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +3 -0
- package/web/.next/required-server-files.json +3 -0
- package/web/.next/routes-manifest.json +6 -6
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +38 -68
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +18 -18
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +38 -68
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- 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/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/upload/route/app-paths-manifest.json +3 -0
- package/web/.next/server/app/api/attachments/upload/route.js +7 -0
- package/web/.next/server/app/api/attachments/upload/route.js.nft.json +1 -0
- package/web/.next/server/app/api/attachments/upload/route_client-reference-manifest.js +2 -0
- package/web/.next/server/app/settings/page/server-reference-manifest.json +5 -5
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- 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/server-reference-manifest.json +6 -6
- 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/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_attachments_upload_route_actions_48fe4a8f.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.js +3 -0
- package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5d87af2e._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__ae824a5b._.js → [root-of-the-server]__a337ca5c._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a337ca5c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3a4cef4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_3e88ce9d._.js → _06db7efd._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_3e88ce9d._.js.map → _06db7efd._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1e3cf73b._.js +1 -1
- package/web/.next/server/chunks/ssr/_1e3cf73b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_34fbed18._.js +1 -1
- package/web/.next/server/chunks/ssr/_34fbed18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_887258d0._.js → _4031d614._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_887258d0._.js.map → _4031d614._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_5c4ce700._.js +3 -0
- package/web/.next/server/chunks/ssr/{_5d4e7151._.js.map → _5c4ce700._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_63868199._.js +1 -1
- package/web/.next/server/chunks/ssr/_63868199._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js +1 -1
- package/web/.next/server/chunks/ssr/_8dacd1e7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_4b251edf._.js → _c66a5a32._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_4b251edf._.js.map → _c66a5a32._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js +3 -0
- package/web/.next/server/chunks/ssr/node_modules__pnpm_5412e589._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_(dashboard)_get-graph-data_ts_b018483e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js +2 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_c4348b8a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_80b5b4bc._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_80b5b4bc._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_82416b8f._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_82416b8f._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js +2 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_e4510d10._.js.map +1 -1
- 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 +64 -108
- package/web/.next/static/chunks/{2a24ac257fc1c10b.js → 1f57d0c949dbb44d.js} +1 -1
- package/web/.next/static/chunks/27a7dd213b6da211.js +1 -0
- package/web/.next/static/chunks/{a2a8c7488178523b.js → 294840464b615929.js} +2 -2
- package/web/.next/static/chunks/2a0156732d824304.js +1 -0
- package/web/.next/static/chunks/55cfb5d3bc98f2e9.js +1 -0
- package/web/.next/static/chunks/6a3e8ea6e1fd2113.js +1 -0
- package/web/.next/static/chunks/{40b4ba55a08cc340.js → 6beed3db056fe481.js} +1 -1
- package/web/.next/static/chunks/{1ed35030fddfaf83.js → 76ddfd21093dc7e7.js} +1 -1
- package/web/.next/static/chunks/b0c8d477fe52559a.js +1 -0
- package/web/.next/static/chunks/{1943a885d38cec14.js → ca4247da9701312c.js} +2 -2
- package/web/.next/static/chunks/e933e992fdc663fb.js +1 -0
- package/web/.next/static/chunks/f6f770ab32a69286.css +2 -0
- package/web/.next/static/chunks/{bdf60cf8dc75a90f.js → f7ed5cfe0c81a863.js} +1 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts +0 -17
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-phase-timings.js +0 -25
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts +0 -18
- package/dist/src/presentation/web/app/actions/get-feature-plan.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/get-feature-plan.js +0 -31
- package/dist/src/presentation/web/app/api/feature-logs/route.d.ts +0 -16
- package/dist/src/presentation/web/app/api/feature-logs/route.d.ts.map +0 -1
- package/dist/src/presentation/web/app/api/feature-logs/route.js +0 -184
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts +0 -8
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.js +0 -90
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts +0 -20
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/activity-tab.stories.js +0 -252
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts +0 -31
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.js +0 -123
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts +0 -20
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/feature-drawer-tabs.stories.js +0 -315
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts +0 -3
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/index.js +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts +0 -7
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.js +0 -35
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts +0 -18
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/log-tab.stories.js +0 -89
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts +0 -6
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.js +0 -78
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts +0 -28
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js +0 -157
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts +0 -8
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.js +0 -40
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts +0 -22
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.js +0 -188
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts +0 -30
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.js +0 -100
- package/dist/src/presentation/web/hooks/use-feature-logs.d.ts +0 -7
- package/dist/src/presentation/web/hooks/use-feature-logs.d.ts.map +0 -1
- package/dist/src/presentation/web/hooks/use-feature-logs.js +0 -52
- package/web/.next/server/app/api/feature-logs/route/app-paths-manifest.json +0 -3
- package/web/.next/server/app/api/feature-logs/route.js +0 -6
- package/web/.next/server/app/api/feature-logs/route.js.nft.json +0 -1
- package/web/.next/server/app/api/feature-logs/route_client-reference-manifest.js +0 -2
- package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js +0 -3
- package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js +0 -12
- package/web/.next/server/chunks/[root-of-the-server]__91d44424._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ae824a5b._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_08bf9375._.js +0 -3
- package/web/.next/server/chunks/ssr/_08bf9375._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5d4e7151._.js +0 -3
- package/web/.next/server/chunks/ssr/_e7eb01d5._.js +0 -3
- package/web/.next/server/chunks/ssr/_e7eb01d5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js +0 -3
- package/web/.next/server/chunks/ssr/node_modules__pnpm_d80c1060._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_7efa14ca._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_b59d79db._.js.map +0 -1
- package/web/.next/static/chunks/1ac497a4b2a7a143.js +0 -1
- package/web/.next/static/chunks/201456645dc32523.js +0 -1
- package/web/.next/static/chunks/46de72d1231c72e6.js +0 -1
- package/web/.next/static/chunks/54f920b6a940da52.js +0 -1
- package/web/.next/static/chunks/96bab6d3820504f3.css +0 -2
- package/web/.next/static/chunks/a1c2ecb710b44081.js +0 -1
- package/web/.next/static/chunks/b590b965ec136ece.js +0 -1
- /package/web/.next/server/app/api/{feature-logs → attachments/upload}/route/build-manifest.json +0 -0
- /package/web/.next/server/app/api/{feature-logs → attachments/upload}/route/server-reference-manifest.json +0 -0
- /package/web/.next/server/app/api/{feature-logs → attachments/upload}/route.js.map +0 -0
- /package/web/.next/server/chunks/{744ca_web__next-internal_server_app_api_feature-logs_route_actions_177445e7.js.map → 744ca_web__next-internal_server_app_api_attachments_upload_route_actions_48fe4a8f.js.map} +0 -0
- /package/web/.next/static/{nOcqEXIvW4HbIOdPWtEmW → 2GTN_fvpyiJGx65yUAuBB}/_buildManifest.js +0 -0
- /package/web/.next/static/{nOcqEXIvW4HbIOdPWtEmW → 2GTN_fvpyiJGx65yUAuBB}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{nOcqEXIvW4HbIOdPWtEmW → 2GTN_fvpyiJGx65yUAuBB}/_ssgManifest.js +0 -0
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { ExternalLink, GitBranch, GitCommitHorizontal } from 'lucide-react';
|
|
4
|
-
import { PrStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
5
|
-
import { cn } from '../../../lib/utils.js';
|
|
6
|
-
import { Badge } from '../../ui/badge.js';
|
|
7
|
-
import { Separator } from '../../ui/separator.js';
|
|
8
|
-
import { CiStatusBadge } from '../../common/ci-status-badge/index.js';
|
|
9
|
-
import { CometSpinner } from '../../ui/comet-spinner.js';
|
|
10
|
-
import { featureNodeStateConfig, lifecycleDisplayLabels } from '../../common/feature-node/index.js';
|
|
11
|
-
import { getAgentTypeIcon, agentTypeLabels, } from '../../common/feature-node/agent-type-icons.js';
|
|
12
|
-
export function OverviewTab({ data }) {
|
|
13
|
-
return (_jsxs(_Fragment, { children: [_jsxs("div", { "data-testid": "feature-drawer-status", className: "flex flex-col gap-3 p-4", children: [_jsx("div", { className: "text-muted-foreground text-xs font-semibold tracking-wider", children: lifecycleDisplayLabels[data.lifecycle] }), _jsx(FeatureStateBadge, { data: data }), data.progress > 0 ? (_jsxs("div", { "data-testid": "feature-drawer-progress", className: "flex flex-col gap-1", children: [_jsxs("div", { className: "text-muted-foreground flex items-center justify-between text-xs", children: [_jsx("span", { children: "Progress" }), _jsxs("span", { children: [data.progress, "%"] })] }), _jsx("div", { className: "bg-muted h-2 w-full overflow-hidden rounded-full", children: _jsx("div", { className: cn('h-full rounded-full transition-all', featureNodeStateConfig[data.state].progressClass), style: { width: `${data.progress}%` } }) })] })) : null] }), _jsx(FeatureInfo, { data: data }), data.pr ? (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsx(FeaturePrInfo, { pr: data.pr })] })) : null, _jsx(FeatureDetails, { data: data })] }));
|
|
14
|
-
}
|
|
15
|
-
function FeatureStateBadge({ data }) {
|
|
16
|
-
const config = featureNodeStateConfig[data.state];
|
|
17
|
-
const Icon = config.icon;
|
|
18
|
-
return (_jsxs("div", { className: cn('flex items-center gap-2 rounded-full px-3 py-1.5 text-sm font-medium', config.badgeBgClass, config.badgeClass), children: [data.state === 'running' ? (_jsx(CometSpinner, { size: "sm", className: "shrink-0" })) : (_jsx(Icon, { className: "h-4 w-4 shrink-0" })), _jsx("span", { children: config.label })] }));
|
|
19
|
-
}
|
|
20
|
-
// ── Feature Info section ─────────────────────────────────────────────
|
|
21
|
-
function formatRelativeTime(timestamp) {
|
|
22
|
-
const now = Date.now();
|
|
23
|
-
const time = typeof timestamp === 'string' ? new Date(timestamp).getTime() : timestamp;
|
|
24
|
-
const diffMs = now - time;
|
|
25
|
-
const diffSec = Math.floor(diffMs / 1000);
|
|
26
|
-
const diffMin = Math.floor(diffSec / 60);
|
|
27
|
-
const diffHr = Math.floor(diffMin / 60);
|
|
28
|
-
const diffDay = Math.floor(diffHr / 24);
|
|
29
|
-
if (diffDay > 30) {
|
|
30
|
-
return new Date(time).toLocaleDateString(undefined, {
|
|
31
|
-
year: 'numeric',
|
|
32
|
-
month: 'short',
|
|
33
|
-
day: 'numeric',
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
if (diffDay > 0)
|
|
37
|
-
return `${diffDay} day${diffDay === 1 ? '' : 's'} ago`;
|
|
38
|
-
if (diffHr > 0)
|
|
39
|
-
return `${diffHr} hour${diffHr === 1 ? '' : 's'} ago`;
|
|
40
|
-
if (diffMin > 0)
|
|
41
|
-
return `${diffMin} minute${diffMin === 1 ? '' : 's'} ago`;
|
|
42
|
-
return 'just now';
|
|
43
|
-
}
|
|
44
|
-
function FeatureInfo({ data }) {
|
|
45
|
-
const repoName = data.repositoryName ?? data.repositoryPath.split('/').filter(Boolean).at(-1) ?? '';
|
|
46
|
-
const hasInfo = Boolean(repoName) ||
|
|
47
|
-
Boolean(data.branch) ||
|
|
48
|
-
Boolean(data.summary) ||
|
|
49
|
-
Boolean(data.userQuery) ||
|
|
50
|
-
Boolean(data.createdAt);
|
|
51
|
-
if (!hasInfo)
|
|
52
|
-
return null;
|
|
53
|
-
return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-info", className: "flex flex-col gap-3 p-4", children: [repoName ? _jsx(DetailRow, { label: "Repository", value: repoName }) : null, data.branch ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Branch" }), _jsxs("span", { className: "flex items-center gap-1.5 text-sm", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0" }), _jsx("code", { className: "bg-muted rounded px-1 py-0.5 font-mono text-xs", children: data.branch }), data.baseBranch ? (_jsxs("span", { className: "text-muted-foreground text-xs", children: ["from ", data.baseBranch] })) : null] })] })) : null, data.userQuery ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "User Query" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.userQuery })] })) : null, data.summary ? (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Summary" }), _jsx("span", { className: "text-sm leading-relaxed", children: data.summary })] })) : null, data.createdAt ? (_jsx(DetailRow, { label: "Created", value: formatRelativeTime(data.createdAt) })) : null] })] }));
|
|
54
|
-
}
|
|
55
|
-
// ── PR Info section ──────────────────────────────────────────────────
|
|
56
|
-
const prStatusStyles = {
|
|
57
|
-
[PrStatus.Open]: 'border-transparent bg-blue-50 text-blue-700 hover:bg-blue-50',
|
|
58
|
-
[PrStatus.Merged]: 'border-transparent bg-purple-50 text-purple-700 hover:bg-purple-50',
|
|
59
|
-
[PrStatus.Closed]: 'border-transparent bg-red-50 text-red-700 hover:bg-red-50',
|
|
60
|
-
};
|
|
61
|
-
function FeaturePrInfo({ pr }) {
|
|
62
|
-
return (_jsx("div", { "data-testid": "feature-drawer-pr", className: "border-border mx-4 rounded-lg border", children: _jsxs("div", { className: "space-y-3 px-4 py-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("a", { href: pr.url, target: "_blank", rel: "noopener noreferrer", className: "text-primary flex items-center gap-1.5 text-sm font-semibold underline underline-offset-2", children: ["PR #", pr.number, _jsx(ExternalLink, { className: "h-3.5 w-3.5" })] }), _jsx(Badge, { className: prStatusStyles[pr.status], children: pr.status })] }), pr.ciStatus ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "CI Status" }), _jsx(CiStatusBadge, { status: pr.ciStatus })] })) : null, pr.commitHash ? (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Commit" }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3.5 w-3.5" }), _jsx("code", { className: "bg-muted text-foreground rounded-md px-1.5 py-0.5 font-mono text-[11px]", children: pr.commitHash.slice(0, 7) })] })] })) : null] }) }));
|
|
63
|
-
}
|
|
64
|
-
// ── Details section ──────────────────────────────────────────────────
|
|
65
|
-
function FeatureDetails({ data }) {
|
|
66
|
-
const hasAnyDetail = data.agentType ?? data.runtime ?? data.blockedBy ?? data.errorMessage;
|
|
67
|
-
if (!hasAnyDetail)
|
|
68
|
-
return null;
|
|
69
|
-
return (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { "data-testid": "feature-drawer-details", className: "flex flex-col gap-3 p-4", children: [data.agentType ? _jsx(AgentDetailRow, { agentType: data.agentType }) : null, data.runtime ? _jsx(DetailRow, { label: "Runtime", value: data.runtime }) : null, data.blockedBy ? _jsx(DetailRow, { label: "Blocked by", value: data.blockedBy }) : null, data.errorMessage ? _jsx(DetailRow, { label: "Error", value: data.errorMessage }) : null] })] }));
|
|
70
|
-
}
|
|
71
|
-
function AgentDetailRow({ agentType }) {
|
|
72
|
-
const Icon = getAgentTypeIcon(agentType);
|
|
73
|
-
const label = agentTypeLabels[agentType] ?? agentType;
|
|
74
|
-
return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Agent" }), _jsxs("span", { className: "flex items-center gap-2 text-sm", children: [_jsx(Icon, { className: "h-4 w-4 shrink-0" }), label] })] }));
|
|
75
|
-
}
|
|
76
|
-
function DetailRow({ label, value }) {
|
|
77
|
-
return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: label }), _jsx("span", { className: "text-sm", children: value })] }));
|
|
78
|
-
}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { OverviewTab } from './overview-tab.js';
|
|
3
|
-
declare const meta: Meta<typeof OverviewTab>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof OverviewTab>;
|
|
6
|
-
/** Default — full data with status, progress, PR card, and details. */
|
|
7
|
-
export declare const Default: Story;
|
|
8
|
-
/** Feature with no PR — PR card is hidden. */
|
|
9
|
-
export declare const NoPr: Story;
|
|
10
|
-
/** Feature with 0% progress — progress bar is hidden. */
|
|
11
|
-
export declare const NoProgress: Story;
|
|
12
|
-
/** Completed feature in deploy phase with merged PR. */
|
|
13
|
-
export declare const DoneWithMergedPr: Story;
|
|
14
|
-
/** Blocked feature showing blocked-by detail. */
|
|
15
|
-
export declare const Blocked: Story;
|
|
16
|
-
/** Error state showing error message detail. */
|
|
17
|
-
export declare const Error: Story;
|
|
18
|
-
/** Minimal data — only required fields, no optional details or PR. */
|
|
19
|
-
export declare const Minimal: Story;
|
|
20
|
-
/** Requirements phase. */
|
|
21
|
-
export declare const RequirementsPhase: Story;
|
|
22
|
-
/** Research phase. */
|
|
23
|
-
export declare const ResearchPhase: Story;
|
|
24
|
-
/** Review phase. */
|
|
25
|
-
export declare const ReviewPhase: Story;
|
|
26
|
-
/** Maintain phase. */
|
|
27
|
-
export declare const MaintainPhase: Story;
|
|
28
|
-
//# sourceMappingURL=overview-tab.stories.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"overview-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,WAAW,CAclC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC,CAAC;AA0G1C,uEAAuE;AACvE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,IAAI,EAAE,KAElB,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,UAAU,EAAE,KAExB,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,gBAAgB,EAAE,KAE9B,CAAC;AAEF,iDAAiD;AACjD,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,KAAK,EAAE,KAEnB,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAMF,0BAA0B;AAC1B,eAAO,MAAM,iBAAiB,EAAE,KAE/B,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,KAEzB,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,aAAa,EAAE,KAE3B,CAAC"}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/overview-tab.stories.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PrStatus, CiStatus } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
3
|
-
import { OverviewTab } from './overview-tab.js';
|
|
4
|
-
const meta = {
|
|
5
|
-
title: 'Drawers/Feature/Tabs/OverviewTab',
|
|
6
|
-
component: OverviewTab,
|
|
7
|
-
tags: ['autodocs'],
|
|
8
|
-
parameters: {
|
|
9
|
-
layout: 'fullscreen',
|
|
10
|
-
},
|
|
11
|
-
decorators: [
|
|
12
|
-
(Story) => (_jsx("div", { style: { height: '600px', width: '400px', border: '1px solid var(--color-border)' }, children: _jsx(Story, {}) })),
|
|
13
|
-
],
|
|
14
|
-
};
|
|
15
|
-
export default meta;
|
|
16
|
-
/* ---------------------------------------------------------------------------
|
|
17
|
-
* Data fixtures
|
|
18
|
-
* ------------------------------------------------------------------------- */
|
|
19
|
-
const fullData = {
|
|
20
|
-
name: 'Auth Module',
|
|
21
|
-
description: 'Implement OAuth2 authentication flow with multiple providers',
|
|
22
|
-
featureId: '#f1',
|
|
23
|
-
lifecycle: 'implementation',
|
|
24
|
-
state: 'running',
|
|
25
|
-
progress: 65,
|
|
26
|
-
agentType: 'claude-code',
|
|
27
|
-
runtime: '2h 15m',
|
|
28
|
-
repositoryPath: '/home/user/my-repo',
|
|
29
|
-
branch: 'feat/auth-module',
|
|
30
|
-
pr: {
|
|
31
|
-
url: 'https://github.com/org/repo/pull/42',
|
|
32
|
-
number: 42,
|
|
33
|
-
status: PrStatus.Open,
|
|
34
|
-
ciStatus: CiStatus.Pending,
|
|
35
|
-
commitHash: 'abc1234567890def',
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
const noPrData = {
|
|
39
|
-
name: 'Search Index',
|
|
40
|
-
description: 'Elasticsearch full-text search setup',
|
|
41
|
-
featureId: '#f4',
|
|
42
|
-
lifecycle: 'implementation',
|
|
43
|
-
state: 'running',
|
|
44
|
-
progress: 40,
|
|
45
|
-
agentType: 'claude-code',
|
|
46
|
-
repositoryPath: '/home/user/my-repo',
|
|
47
|
-
branch: 'feat/search-index',
|
|
48
|
-
};
|
|
49
|
-
const noProgressData = {
|
|
50
|
-
name: 'API Rate Limiting',
|
|
51
|
-
description: 'Implement sliding window rate limiting for public endpoints',
|
|
52
|
-
featureId: '#bi1',
|
|
53
|
-
lifecycle: 'requirements',
|
|
54
|
-
state: 'action-required',
|
|
55
|
-
progress: 0,
|
|
56
|
-
repositoryPath: '/home/user/my-repo',
|
|
57
|
-
branch: 'feat/api-rate-limiting',
|
|
58
|
-
};
|
|
59
|
-
const doneData = {
|
|
60
|
-
name: 'Payment Gateway',
|
|
61
|
-
description: 'Stripe integration for subscriptions',
|
|
62
|
-
featureId: '#f3',
|
|
63
|
-
lifecycle: 'deploy',
|
|
64
|
-
state: 'done',
|
|
65
|
-
progress: 100,
|
|
66
|
-
runtime: '1h 42m',
|
|
67
|
-
repositoryPath: '/home/user/my-repo',
|
|
68
|
-
branch: 'feat/payment-gateway',
|
|
69
|
-
pr: {
|
|
70
|
-
url: 'https://github.com/org/repo/pull/55',
|
|
71
|
-
number: 55,
|
|
72
|
-
status: PrStatus.Merged,
|
|
73
|
-
ciStatus: CiStatus.Success,
|
|
74
|
-
commitHash: 'def4567890abc123',
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
const blockedData = {
|
|
78
|
-
name: 'Email Service',
|
|
79
|
-
description: 'Transactional email with SendGrid',
|
|
80
|
-
featureId: '#f5',
|
|
81
|
-
lifecycle: 'implementation',
|
|
82
|
-
state: 'blocked',
|
|
83
|
-
progress: 20,
|
|
84
|
-
blockedBy: 'Auth Module',
|
|
85
|
-
repositoryPath: '/home/user/my-repo',
|
|
86
|
-
branch: 'feat/email-service',
|
|
87
|
-
};
|
|
88
|
-
const errorData = {
|
|
89
|
-
name: 'Notification System',
|
|
90
|
-
description: 'Real-time notifications via WebSockets',
|
|
91
|
-
featureId: '#f6',
|
|
92
|
-
lifecycle: 'review',
|
|
93
|
-
state: 'error',
|
|
94
|
-
progress: 30,
|
|
95
|
-
errorMessage: 'Build failed: type mismatch in NotificationHandler',
|
|
96
|
-
repositoryPath: '/home/user/my-repo',
|
|
97
|
-
branch: 'feat/notifications',
|
|
98
|
-
};
|
|
99
|
-
const minimalData = {
|
|
100
|
-
name: 'Minimal Feature',
|
|
101
|
-
featureId: '#f0',
|
|
102
|
-
lifecycle: 'requirements',
|
|
103
|
-
state: 'creating',
|
|
104
|
-
progress: 0,
|
|
105
|
-
repositoryPath: '/home/user/my-repo',
|
|
106
|
-
branch: '',
|
|
107
|
-
};
|
|
108
|
-
/* ---------------------------------------------------------------------------
|
|
109
|
-
* Stories
|
|
110
|
-
* ------------------------------------------------------------------------- */
|
|
111
|
-
/** Default — full data with status, progress, PR card, and details. */
|
|
112
|
-
export const Default = {
|
|
113
|
-
args: { data: fullData },
|
|
114
|
-
};
|
|
115
|
-
/** Feature with no PR — PR card is hidden. */
|
|
116
|
-
export const NoPr = {
|
|
117
|
-
args: { data: noPrData },
|
|
118
|
-
};
|
|
119
|
-
/** Feature with 0% progress — progress bar is hidden. */
|
|
120
|
-
export const NoProgress = {
|
|
121
|
-
args: { data: noProgressData },
|
|
122
|
-
};
|
|
123
|
-
/** Completed feature in deploy phase with merged PR. */
|
|
124
|
-
export const DoneWithMergedPr = {
|
|
125
|
-
args: { data: doneData },
|
|
126
|
-
};
|
|
127
|
-
/** Blocked feature showing blocked-by detail. */
|
|
128
|
-
export const Blocked = {
|
|
129
|
-
args: { data: blockedData },
|
|
130
|
-
};
|
|
131
|
-
/** Error state showing error message detail. */
|
|
132
|
-
export const Error = {
|
|
133
|
-
args: { data: errorData },
|
|
134
|
-
};
|
|
135
|
-
/** Minimal data — only required fields, no optional details or PR. */
|
|
136
|
-
export const Minimal = {
|
|
137
|
-
args: { data: minimalData },
|
|
138
|
-
};
|
|
139
|
-
/* ---------------------------------------------------------------------------
|
|
140
|
-
* Lifecycle phase stories
|
|
141
|
-
* ------------------------------------------------------------------------- */
|
|
142
|
-
/** Requirements phase. */
|
|
143
|
-
export const RequirementsPhase = {
|
|
144
|
-
args: { data: { ...noPrData, lifecycle: 'requirements' } },
|
|
145
|
-
};
|
|
146
|
-
/** Research phase. */
|
|
147
|
-
export const ResearchPhase = {
|
|
148
|
-
args: { data: { ...noPrData, lifecycle: 'research' } },
|
|
149
|
-
};
|
|
150
|
-
/** Review phase. */
|
|
151
|
-
export const ReviewPhase = {
|
|
152
|
-
args: { data: { ...noPrData, lifecycle: 'review' } },
|
|
153
|
-
};
|
|
154
|
-
/** Maintain phase. */
|
|
155
|
-
export const MaintainPhase = {
|
|
156
|
-
args: { data: { ...noPrData, lifecycle: 'maintain' } },
|
|
157
|
-
};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { PlanData } from '../../../app/actions/get-feature-plan.js';
|
|
2
|
-
export interface PlanTabProps {
|
|
3
|
-
plan: PlanData | null;
|
|
4
|
-
loading: boolean;
|
|
5
|
-
error: string | null;
|
|
6
|
-
}
|
|
7
|
-
export declare function PlanTab({ plan, loading, error }: PlanTabProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
//# sourceMappingURL=plan-tab.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plan-tab.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,gCAAgC,CAAC;AAE7E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAoBD,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,2CAgD7D"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Loader2, Circle, Check, Eye } from 'lucide-react';
|
|
4
|
-
import { AlertCircle, ListTodo } from 'lucide-react';
|
|
5
|
-
import { Badge } from '../../ui/badge.js';
|
|
6
|
-
const planStateBadgeStyles = {
|
|
7
|
-
Requirements: 'border-transparent bg-blue-50 text-blue-700 hover:bg-blue-50',
|
|
8
|
-
ClarificationRequired: 'border-transparent bg-amber-50 text-amber-700 hover:bg-amber-50',
|
|
9
|
-
Ready: 'border-transparent bg-green-50 text-green-700 hover:bg-green-50',
|
|
10
|
-
};
|
|
11
|
-
const taskStateConfig = {
|
|
12
|
-
Todo: { icon: Circle, colorClass: 'text-muted-foreground' },
|
|
13
|
-
'Work in Progress': { icon: Loader2, colorClass: 'text-blue-600', spinning: true },
|
|
14
|
-
Done: { icon: Check, colorClass: 'text-emerald-600' },
|
|
15
|
-
Review: { icon: Eye, colorClass: 'text-amber-600' },
|
|
16
|
-
};
|
|
17
|
-
const defaultTaskConfig = { icon: Circle, colorClass: 'text-muted-foreground' };
|
|
18
|
-
export function PlanTab({ plan, loading, error }) {
|
|
19
|
-
if (loading) {
|
|
20
|
-
return (_jsx("div", { "data-testid": "plan-tab-loading", className: "flex items-center justify-center p-8", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) }));
|
|
21
|
-
}
|
|
22
|
-
if (error) {
|
|
23
|
-
return (_jsxs("div", { className: "flex items-center gap-2 p-4 text-sm text-red-600", children: [_jsx(AlertCircle, { className: "h-4 w-4 shrink-0" }), _jsx("span", { children: error })] }));
|
|
24
|
-
}
|
|
25
|
-
if (!plan) {
|
|
26
|
-
return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-2 p-8", children: [_jsx(ListTodo, { className: "text-muted-foreground h-8 w-8" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "No plan created yet" })] }));
|
|
27
|
-
}
|
|
28
|
-
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Plan State" }), _jsx(Badge, { className: planStateBadgeStyles[plan.state] ?? 'border-transparent bg-gray-50 text-gray-700', children: plan.state })] }), plan.overview ? (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Overview" }), _jsx("p", { className: "text-sm leading-relaxed", children: plan.overview })] })) : null, _jsx(TaskList, { tasks: plan.tasks })] }));
|
|
29
|
-
}
|
|
30
|
-
function TaskList({ tasks }) {
|
|
31
|
-
if (tasks.length === 0) {
|
|
32
|
-
return (_jsx("div", { className: "flex flex-col items-center justify-center gap-2 py-4", children: _jsx("p", { className: "text-muted-foreground text-sm", children: "No tasks defined yet" }) }));
|
|
33
|
-
}
|
|
34
|
-
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-muted-foreground text-xs font-medium", children: "Tasks" }), _jsx("div", { "data-testid": "plan-task-list", className: "flex flex-col gap-2", children: tasks.map((task, index) => (_jsx(TaskItem, { task: task, index: index }, task.title || `task-${index}`))) })] }));
|
|
35
|
-
}
|
|
36
|
-
function TaskItem({ task, index }) {
|
|
37
|
-
const config = taskStateConfig[task.state] ?? defaultTaskConfig;
|
|
38
|
-
const Icon = config.icon;
|
|
39
|
-
return (_jsxs("div", { "data-testid": `plan-task-${index}`, className: `flex items-start gap-2 rounded-md border px-3 py-2 ${config.colorClass}`, children: [_jsx(Icon, { className: `mt-0.5 h-4 w-4 shrink-0 ${config.spinning ? 'animate-spin' : ''}` }), _jsxs("div", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "text-sm font-medium", children: task.title }), task.description ? (_jsx("span", { className: "text-muted-foreground text-xs", children: task.description })) : null] })] }));
|
|
40
|
-
}
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import { PlanTab } from './plan-tab.js';
|
|
3
|
-
declare const meta: Meta<typeof PlanTab>;
|
|
4
|
-
export default meta;
|
|
5
|
-
type Story = StoryObj<typeof PlanTab>;
|
|
6
|
-
/** Default — plan with tasks in various states (Todo, WIP, Done, Review). */
|
|
7
|
-
export declare const Default: Story;
|
|
8
|
-
/** All tasks completed. */
|
|
9
|
-
export declare const AllTasksDone: Story;
|
|
10
|
-
/** Draft plan in Requirements state. */
|
|
11
|
-
export declare const DraftPlan: Story;
|
|
12
|
-
/** Plan requiring clarification — ClarificationRequired state badge. */
|
|
13
|
-
export declare const ClarificationRequired: Story;
|
|
14
|
-
/** Plan with overview but no tasks defined yet. */
|
|
15
|
-
export declare const NoTasks: Story;
|
|
16
|
-
/** Loading state — spinner displayed while data is being fetched. */
|
|
17
|
-
export declare const Loading: Story;
|
|
18
|
-
/** Empty state — no plan created yet. */
|
|
19
|
-
export declare const Empty: Story;
|
|
20
|
-
/** Error state — inline error message. */
|
|
21
|
-
export declare const Error: Story;
|
|
22
|
-
//# sourceMappingURL=plan-tab.stories.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plan-tab.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/plan-tab.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAc9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,CAAC;AA0HtC,6EAA6E;AAC7E,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,2BAA2B;AAC3B,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,SAAS,EAAE,KAMvB,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,EAAE,KAMnC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC"}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { PlanTab } from './plan-tab.js';
|
|
3
|
-
const meta = {
|
|
4
|
-
title: 'Drawers/Feature/Tabs/PlanTab',
|
|
5
|
-
component: PlanTab,
|
|
6
|
-
tags: ['autodocs'],
|
|
7
|
-
parameters: {
|
|
8
|
-
layout: 'fullscreen',
|
|
9
|
-
},
|
|
10
|
-
decorators: [
|
|
11
|
-
(Story) => (_jsx("div", { style: { height: '600px', width: '400px', border: '1px solid var(--color-border)' }, children: _jsx(Story, {}) })),
|
|
12
|
-
],
|
|
13
|
-
};
|
|
14
|
-
export default meta;
|
|
15
|
-
/* ---------------------------------------------------------------------------
|
|
16
|
-
* Data fixtures
|
|
17
|
-
* ------------------------------------------------------------------------- */
|
|
18
|
-
const mixedTasksPlan = {
|
|
19
|
-
state: 'Ready',
|
|
20
|
-
overview: 'Implement OAuth2 authentication flow with support for Google and GitHub identity providers. The implementation includes token management, callback handling, and user profile sync.',
|
|
21
|
-
tasks: [
|
|
22
|
-
{
|
|
23
|
-
title: 'Set up OAuth provider configuration',
|
|
24
|
-
description: 'Configure Google and GitHub OAuth apps with client IDs and secrets',
|
|
25
|
-
state: 'Done',
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
title: 'Implement callback handler',
|
|
29
|
-
description: 'Handle OAuth callback with authorization code exchange',
|
|
30
|
-
state: 'Done',
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
title: 'Add token refresh logic',
|
|
34
|
-
description: 'Implement silent token refresh using refresh tokens stored in httpOnly cookies',
|
|
35
|
-
state: 'Work in Progress',
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
title: 'Create user profile sync',
|
|
39
|
-
description: 'Sync user profile data from identity providers on login',
|
|
40
|
-
state: 'Todo',
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
title: 'Write integration tests',
|
|
44
|
-
description: 'Test the full OAuth flow with mocked providers',
|
|
45
|
-
state: 'Todo',
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
title: 'Update API documentation',
|
|
49
|
-
description: 'Document new authentication endpoints and flows',
|
|
50
|
-
state: 'Review',
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
};
|
|
54
|
-
const allDonePlan = {
|
|
55
|
-
state: 'Ready',
|
|
56
|
-
overview: 'All implementation tasks for the rate limiting feature have been completed successfully.',
|
|
57
|
-
tasks: [
|
|
58
|
-
{
|
|
59
|
-
title: 'Design sliding window algorithm',
|
|
60
|
-
description: 'Implement Redis-backed sliding window counter',
|
|
61
|
-
state: 'Done',
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
title: 'Add rate limit middleware',
|
|
65
|
-
description: 'Express middleware that checks rate limits per IP',
|
|
66
|
-
state: 'Done',
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
title: 'Configure limits per endpoint',
|
|
70
|
-
description: 'Set different rate limits for public vs authenticated endpoints',
|
|
71
|
-
state: 'Done',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
title: 'Add rate limit headers',
|
|
75
|
-
description: 'Include X-RateLimit-* headers in responses',
|
|
76
|
-
state: 'Done',
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
};
|
|
80
|
-
const draftPlan = {
|
|
81
|
-
state: 'Requirements',
|
|
82
|
-
overview: 'Initial plan for implementing the notification system. Requirements are still being gathered.',
|
|
83
|
-
tasks: [
|
|
84
|
-
{
|
|
85
|
-
title: 'Define notification types',
|
|
86
|
-
description: 'Enumerate all notification events and their payloads',
|
|
87
|
-
state: 'Todo',
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
title: 'Set up WebSocket server',
|
|
91
|
-
description: 'Configure Socket.io with Redis adapter for horizontal scaling',
|
|
92
|
-
state: 'Todo',
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
title: 'Implement notification store',
|
|
96
|
-
description: 'Persist notifications in database with read/unread tracking',
|
|
97
|
-
state: 'Todo',
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
};
|
|
101
|
-
const clarificationPlan = {
|
|
102
|
-
state: 'ClarificationRequired',
|
|
103
|
-
overview: 'Plan requires clarification on the scope of the email template system.',
|
|
104
|
-
tasks: [
|
|
105
|
-
{
|
|
106
|
-
title: 'Set up email provider',
|
|
107
|
-
description: 'Configure SendGrid API integration',
|
|
108
|
-
state: 'Done',
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
title: 'Create template engine',
|
|
112
|
-
description: 'Implement Handlebars-based email template rendering',
|
|
113
|
-
state: 'Todo',
|
|
114
|
-
},
|
|
115
|
-
],
|
|
116
|
-
};
|
|
117
|
-
const noTasksPlan = {
|
|
118
|
-
state: 'Requirements',
|
|
119
|
-
overview: 'Plan overview is available but no tasks have been defined yet.',
|
|
120
|
-
tasks: [],
|
|
121
|
-
};
|
|
122
|
-
/* ---------------------------------------------------------------------------
|
|
123
|
-
* Stories
|
|
124
|
-
* ------------------------------------------------------------------------- */
|
|
125
|
-
/** Default — plan with tasks in various states (Todo, WIP, Done, Review). */
|
|
126
|
-
export const Default = {
|
|
127
|
-
args: {
|
|
128
|
-
plan: mixedTasksPlan,
|
|
129
|
-
loading: false,
|
|
130
|
-
error: null,
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
/** All tasks completed. */
|
|
134
|
-
export const AllTasksDone = {
|
|
135
|
-
args: {
|
|
136
|
-
plan: allDonePlan,
|
|
137
|
-
loading: false,
|
|
138
|
-
error: null,
|
|
139
|
-
},
|
|
140
|
-
};
|
|
141
|
-
/** Draft plan in Requirements state. */
|
|
142
|
-
export const DraftPlan = {
|
|
143
|
-
args: {
|
|
144
|
-
plan: draftPlan,
|
|
145
|
-
loading: false,
|
|
146
|
-
error: null,
|
|
147
|
-
},
|
|
148
|
-
};
|
|
149
|
-
/** Plan requiring clarification — ClarificationRequired state badge. */
|
|
150
|
-
export const ClarificationRequired = {
|
|
151
|
-
args: {
|
|
152
|
-
plan: clarificationPlan,
|
|
153
|
-
loading: false,
|
|
154
|
-
error: null,
|
|
155
|
-
},
|
|
156
|
-
};
|
|
157
|
-
/** Plan with overview but no tasks defined yet. */
|
|
158
|
-
export const NoTasks = {
|
|
159
|
-
args: {
|
|
160
|
-
plan: noTasksPlan,
|
|
161
|
-
loading: false,
|
|
162
|
-
error: null,
|
|
163
|
-
},
|
|
164
|
-
};
|
|
165
|
-
/** Loading state — spinner displayed while data is being fetched. */
|
|
166
|
-
export const Loading = {
|
|
167
|
-
args: {
|
|
168
|
-
plan: null,
|
|
169
|
-
loading: true,
|
|
170
|
-
error: null,
|
|
171
|
-
},
|
|
172
|
-
};
|
|
173
|
-
/** Empty state — no plan created yet. */
|
|
174
|
-
export const Empty = {
|
|
175
|
-
args: {
|
|
176
|
-
plan: null,
|
|
177
|
-
loading: false,
|
|
178
|
-
error: null,
|
|
179
|
-
},
|
|
180
|
-
};
|
|
181
|
-
/** Error state — inline error message. */
|
|
182
|
-
export const Error = {
|
|
183
|
-
args: {
|
|
184
|
-
plan: null,
|
|
185
|
-
loading: false,
|
|
186
|
-
error: 'Failed to load plan data. Please try again.',
|
|
187
|
-
},
|
|
188
|
-
};
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/** State for a single tab's data, loading, and error. */
|
|
2
|
-
export interface TabState<T = unknown> {
|
|
3
|
-
data: T | null;
|
|
4
|
-
loading: boolean;
|
|
5
|
-
error: string | null;
|
|
6
|
-
}
|
|
7
|
-
/** A function that fetches data for a tab given a feature ID. */
|
|
8
|
-
export type TabFetcher<T = unknown> = (featureId: string) => Promise<T>;
|
|
9
|
-
/** Map of tab keys to their fetcher functions. */
|
|
10
|
-
export type TabFetchers<K extends string> = Record<K, TabFetcher>;
|
|
11
|
-
/** Return type of the useTabDataFetch hook. */
|
|
12
|
-
export interface UseTabDataFetchResult<K extends string> {
|
|
13
|
-
/** Per-tab state (data, loading, error). */
|
|
14
|
-
tabs: Record<K, TabState>;
|
|
15
|
-
/** Fetch data for a tab. Uses cache if already fetched. */
|
|
16
|
-
fetchTab: (tab: K) => Promise<void>;
|
|
17
|
-
/** Force re-fetch for a tab, bypassing cache. */
|
|
18
|
-
refreshTab: (tab: K) => Promise<void>;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Custom hook for lazy-loading tab data with per-tab caching.
|
|
22
|
-
*
|
|
23
|
-
* - Fetches data only when a tab is explicitly activated via fetchTab().
|
|
24
|
-
* - Caches results so revisiting a loaded tab is instant.
|
|
25
|
-
* - Clears all cached data when featureId changes.
|
|
26
|
-
* - Supports force re-fetch via refreshTab() for SSE-driven updates.
|
|
27
|
-
* - Uses ref-based callbacks to avoid stale closures (matches useArtifactFetch pattern).
|
|
28
|
-
*/
|
|
29
|
-
export declare function useTabDataFetch<K extends string>(featureId: string, fetchers: TabFetchers<K>): UseTabDataFetchResult<K>;
|
|
30
|
-
//# sourceMappingURL=use-tab-data-fetch.d.ts.map
|
package/dist/src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-tab-data-fetch.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/feature-drawer-tabs/use-tab-data-fetch.ts"],"names":[],"mappings":"AAIA,yDAAyD;AACzD,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,iEAAiE;AACjE,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAExE,kDAAkD;AAClD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAElE,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM;IACrD,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,iDAAiD;IACjD,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAMD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAC9C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAmG1B"}
|