@shepai/cli 1.135.3-pr425.d3fbb75 → 1.135.3
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/app/actions/check-agent-auth.d.ts +0 -2
- package/dist/src/presentation/web/app/actions/check-agent-auth.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/check-agent-auth.js +1 -8
- package/dist/src/presentation/web/app/build-graph-nodes.d.ts.map +1 -1
- package/dist/src/presentation/web/app/build-graph-nodes.js +9 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node-state-config.d.ts +0 -17
- 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/feature-node/feature-node-state-config.js +0 -91
- package/dist/src/presentation/web/components/common/feature-node/feature-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.js +64 -54
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/feature-node/feature-node.stories.js +19 -85
- package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/repository-node/repository-node.js +4 -6
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js +9 -35
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts +1 -17
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.stories.js +1 -110
- 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/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts +0 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.js +10 -443
- package/dist/src/presentation/web/lib/layout-with-dagre.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 +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 -3
- package/web/.next/required-server-files.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +48 -63
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +48 -63
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +3 -3
- 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]/[tab]/page/server-reference-manifest.json +60 -75
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +60 -75
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +3 -3
- 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 +44 -59
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +3 -3
- 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 +48 -63
- package/web/.next/server/app/(dashboard)/create/page.js +3 -3
- 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]/[tab]/page/server-reference-manifest.json +60 -75
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +3 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +60 -75
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +3 -3
- 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 +44 -59
- package/web/.next/server/app/(dashboard)/page.js +3 -3
- 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 +44 -59
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +3 -3
- 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 +3 -3
- 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/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- 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 +8 -8
- package/web/.next/server/app/skills/page.js +1 -1
- 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 +8 -8
- package/web/.next/server/app/tools/page.js +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/server-reference-manifest.json +3 -3
- 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/403f9_next_dist_esm_build_templates_app-route_370c43b1.js +1 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_370c43b1.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.js +3 -0
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4e741df2.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_026fdffa.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_026fdffa.js.map +1 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js +3 -0
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_8b91e197.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__47ded061._.js → [root-of-the-server]__31bc28da._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__47ded061._.js.map → [root-of-the-server]__31bc28da._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__68ce373c._.js → [root-of-the-server]__32ecbed9._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdd058b2._.js.map → [root-of-the-server]__32ecbed9._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3ef34e4c._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__43f51aa6._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__7894f27f._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__d48c5b11._.js.map → [root-of-the-server]__7894f27f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__815546bd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__718766da._.js → [root-of-the-server]__90ce4b6d._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__718766da._.js.map → [root-of-the-server]__90ce4b6d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdd058b2._.js → [root-of-the-server]__90f9ae71._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__68ce373c._.js.map → [root-of-the-server]__90f9ae71._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__a5f9c6e5._.js → [root-of-the-server]__96670392._.js} +3 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__96670392._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__9c45d070._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +2 -2
- 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]__b3dbadca._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__b3dbadca._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_02ec1aea._.js +1 -1
- package/web/.next/server/chunks/ssr/_02ec1aea._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_313c9690._.js +3 -0
- package/web/.next/server/chunks/ssr/_313c9690._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_7dca1882._.js +1 -1
- package/web/.next/server/chunks/ssr/_7dca1882._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js +1 -1
- package/web/.next/server/chunks/ssr/_a9f57758._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_b6960ca0._.js +4 -0
- package/web/.next/server/chunks/ssr/_b6960ca0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_40c2d506._.js → _d17bc20a._.js} +2 -2
- package/web/.next/server/chunks/ssr/_d17bc20a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_d8575088._.js +1 -1
- package/web/.next/server/chunks/ssr/_d8575088._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.js +1 -1
- package/web/.next/server/chunks/ssr/_f39a1adb._.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/{src_presentation_web_8ac280c1._.js → src_presentation_web_127fb482._.js} +2 -2
- package/web/.next/server/chunks/ssr/{src_presentation_web_8ac280c1._.js.map → src_presentation_web_127fb482._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_8e7fe0d1._.js +5 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_e4df6dd7._.js.map → src_presentation_web_8e7fe0d1._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_ca051134.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1b176e3c.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_bd9f0dda.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_b9023017._.js +5 -0
- package/web/.next/server/chunks/ssr/{src_presentation_web_53666118._.js.map → src_presentation_web_b9023017._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +1 -1
- 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/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/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +296 -374
- package/web/.next/static/chunks/15e6a74ef39fda73.js +1 -0
- package/web/.next/static/chunks/{c80e7077c2e15d7a.js → 1a9dfc34432387f5.js} +1 -1
- package/web/.next/static/chunks/314b8314f77d6921.js +1 -0
- package/web/.next/static/chunks/3e2d7d07926b05bf.css +1 -0
- package/web/.next/static/chunks/55a1c86671bb1a5b.js +1 -0
- package/web/.next/static/chunks/{6df4c57bc78a94a7.js → 61f7d4f0f0f770a4.js} +1 -1
- package/web/.next/static/chunks/{5240821573a037e3.js → 7875a9370622a064.js} +1 -1
- package/web/.next/static/chunks/{a381d542a7ec04d9.js → 8c42b7752187f48c.js} +2 -2
- package/web/.next/static/chunks/{99351a301567a88e.js → 9154973d61eae190.js} +1 -1
- package/web/.next/static/chunks/c0c287da1631752f.js +1 -0
- package/web/.next/static/chunks/{b4e468a0f9370e0f.js → d5342f9be437afd9.js} +1 -1
- package/web/.next/static/chunks/{b966410b4e88dba6.js → d8a0dd9bfd0f22fa.js} +1 -1
- package/web/.next/static/chunks/e6b87832e1382949.js +1 -0
- package/web/.next/static/chunks/{b5545c62e743df83.js → fdc719494dcd9c92.js} +2 -2
- package/dist/src/presentation/web/app/actions/check-tool-status.d.ts +0 -14
- package/dist/src/presentation/web/app/actions/check-tool-status.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/check-tool-status.js +0 -53
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js +0 -3
- package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_b49d9c97.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_28632197.js.map +0 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js +0 -3
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_10695d37.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6ec59045._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__a5f9c6e5._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__d48c5b11._.js +0 -3
- package/web/.next/server/chunks/ssr/_0ef7c505._.js +0 -3
- package/web/.next/server/chunks/ssr/_0ef7c505._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_40c2d506._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_e69a26ba._.js +0 -4
- package/web/.next/server/chunks/ssr/_e69a26ba._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_53666118._.js +0 -5
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_d95e128d.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_e4df6dd7._.js +0 -5
- package/web/.next/static/chunks/3831dbe7ff6d5717.js +0 -1
- package/web/.next/static/chunks/74a9d144a3e27ce2.js +0 -1
- package/web/.next/static/chunks/8e293101ac271df2.js +0 -1
- package/web/.next/static/chunks/92cd6f523639a6fa.css +0 -1
- package/web/.next/static/chunks/99630cd36967c04f.js +0 -1
- package/web/.next/static/chunks/d0dff217a94d4ee1.js +0 -1
- /package/web/.next/static/{49taRTn4m6kJfWu7WRS6O → p0KCxpQ0DqKcttVypdnix}/_buildManifest.js +0 -0
- /package/web/.next/static/{49taRTn4m6kJfWu7WRS6O → p0KCxpQ0DqKcttVypdnix}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{49taRTn4m6kJfWu7WRS6O → p0KCxpQ0DqKcttVypdnix}/_ssgManifest.js +0 -0
|
@@ -2,13 +2,13 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { expect, fn, waitFor } from '@storybook/test';
|
|
4
4
|
import { ReactFlowProvider, ReactFlow, useNodesState } from '@xyflow/react';
|
|
5
|
-
import { DeploymentState
|
|
5
|
+
import { DeploymentState } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
6
6
|
import { FeatureNode } from './feature-node.js';
|
|
7
7
|
const nodeTypes = { featureNode: FeatureNode };
|
|
8
8
|
/** Renders a single FeatureNode as a proper React Flow node (with node wrapper + pointer events). */
|
|
9
9
|
function FeatureNodeCanvas({ data, style = { width: 600, height: 400 }, }) {
|
|
10
10
|
const nodes = useMemo(() => [{ id: 'node-1', type: 'featureNode', position: { x: 0, y: 0 }, data }], [data]);
|
|
11
|
-
return (_jsx("div", { style: style, children: _jsx(ReactFlowProvider, { children: _jsx(ReactFlow, { nodes: nodes, nodeTypes: nodeTypes, nodesDraggable: false, nodesConnectable: false,
|
|
11
|
+
return (_jsx("div", { style: style, children: _jsx(ReactFlowProvider, { children: _jsx(ReactFlow, { nodes: nodes, nodeTypes: nodeTypes, nodesDraggable: false, nodesConnectable: false, proOptions: { hideAttribution: true }, fitView: true }) }) }));
|
|
12
12
|
}
|
|
13
13
|
const meta = {
|
|
14
14
|
title: 'Composed/FeatureNode',
|
|
@@ -19,17 +19,10 @@ const meta = {
|
|
|
19
19
|
args: {
|
|
20
20
|
name: 'Auth Module',
|
|
21
21
|
description: 'Implement OAuth2 authentication flow',
|
|
22
|
-
featureId: '
|
|
23
|
-
lifecycle: '
|
|
22
|
+
featureId: '#f1',
|
|
23
|
+
lifecycle: 'requirements',
|
|
24
24
|
state: 'running',
|
|
25
25
|
progress: 45,
|
|
26
|
-
agentType: 'claude-code',
|
|
27
|
-
modelId: 'claude-sonnet-4-6',
|
|
28
|
-
repositoryPath: '/home/user/my-repo',
|
|
29
|
-
repositoryName: 'my-repo',
|
|
30
|
-
branch: 'feat/auth-module',
|
|
31
|
-
hasAgentRun: true,
|
|
32
|
-
hasPlan: true,
|
|
33
26
|
},
|
|
34
27
|
};
|
|
35
28
|
export default meta;
|
|
@@ -39,92 +32,66 @@ export const Default = {
|
|
|
39
32
|
const allStatesData = [
|
|
40
33
|
{
|
|
41
34
|
name: 'User Onboarding',
|
|
42
|
-
description: 'Implement guided onboarding wizard
|
|
35
|
+
description: 'Implement guided onboarding wizard',
|
|
43
36
|
featureId: '',
|
|
44
37
|
lifecycle: 'requirements',
|
|
45
38
|
state: 'creating',
|
|
46
39
|
progress: 0,
|
|
47
40
|
repositoryPath: '/home/user/my-repo',
|
|
48
|
-
repositoryName: 'my-repo',
|
|
49
41
|
branch: '',
|
|
50
42
|
},
|
|
51
43
|
{
|
|
52
44
|
name: 'Auth Module',
|
|
53
|
-
description: 'Implement OAuth2 authentication flow
|
|
54
|
-
featureId: '
|
|
45
|
+
description: 'Implement OAuth2 authentication flow',
|
|
46
|
+
featureId: '#f1',
|
|
55
47
|
lifecycle: 'implementation',
|
|
56
48
|
state: 'running',
|
|
57
49
|
progress: 45,
|
|
58
50
|
agentType: 'claude-code',
|
|
59
51
|
modelId: 'claude-sonnet-4-6',
|
|
60
52
|
repositoryPath: '/home/user/my-repo',
|
|
61
|
-
repositoryName: 'my-repo',
|
|
62
53
|
branch: 'feat/auth-module',
|
|
63
|
-
worktreePath: '/home/user/.shep/repos/abc123/wt/feat-auth-module',
|
|
64
|
-
hasAgentRun: true,
|
|
65
|
-
hasPlan: true,
|
|
66
|
-
deployment: { status: DeploymentState.Ready, url: 'http://localhost:3001' },
|
|
67
54
|
},
|
|
68
55
|
{
|
|
69
56
|
name: 'API Rate Limiting',
|
|
70
|
-
description: 'Implement sliding window rate limiting for public
|
|
71
|
-
featureId: '
|
|
57
|
+
description: 'Implement sliding window rate limiting for public...',
|
|
58
|
+
featureId: '#bi1',
|
|
72
59
|
lifecycle: 'requirements',
|
|
73
60
|
state: 'action-required',
|
|
74
61
|
progress: 22,
|
|
75
62
|
agentType: 'claude-code',
|
|
76
63
|
modelId: 'claude-sonnet-4-6',
|
|
77
64
|
repositoryPath: '/home/user/my-repo',
|
|
78
|
-
repositoryName: 'my-repo',
|
|
79
65
|
branch: 'feat/api-rate-limiting',
|
|
80
|
-
worktreePath: '/home/user/.shep/repos/abc123/wt/feat-api-rate-limiting',
|
|
81
|
-
hasAgentRun: true,
|
|
82
|
-
hasPlan: true,
|
|
83
66
|
},
|
|
84
67
|
{
|
|
85
68
|
name: 'Data Pipeline',
|
|
86
69
|
description: 'ETL pipeline for analytics dashboard',
|
|
87
|
-
featureId: '
|
|
70
|
+
featureId: '#bi2',
|
|
88
71
|
lifecycle: 'implementation',
|
|
89
72
|
state: 'action-required',
|
|
90
73
|
progress: 40,
|
|
91
74
|
agentType: 'cursor',
|
|
92
75
|
modelId: 'claude-opus-4-6',
|
|
93
76
|
repositoryPath: '/home/user/my-repo',
|
|
94
|
-
repositoryName: 'my-repo',
|
|
95
77
|
branch: 'feat/data-pipeline',
|
|
96
|
-
worktreePath: '/home/user/.shep/repos/abc123/wt/feat-data-pipeline',
|
|
97
|
-
hasAgentRun: true,
|
|
98
|
-
hasPlan: true,
|
|
99
|
-
deployment: { status: DeploymentState.Booting },
|
|
100
78
|
},
|
|
101
79
|
{
|
|
102
80
|
name: 'Merge Review',
|
|
103
81
|
description: 'PR ready for merge approval',
|
|
104
|
-
featureId: '
|
|
82
|
+
featureId: '#bi3',
|
|
105
83
|
lifecycle: 'review',
|
|
106
84
|
state: 'action-required',
|
|
107
85
|
progress: 90,
|
|
108
86
|
agentType: 'gemini-cli',
|
|
109
87
|
modelId: 'gemini-2.5-pro',
|
|
110
88
|
repositoryPath: '/home/user/my-repo',
|
|
111
|
-
repositoryName: 'my-repo',
|
|
112
89
|
branch: 'feat/merge-review',
|
|
113
|
-
worktreePath: '/home/user/.shep/repos/abc123/wt/feat-merge-review',
|
|
114
|
-
hasAgentRun: true,
|
|
115
|
-
hasPlan: true,
|
|
116
|
-
pr: {
|
|
117
|
-
url: 'https://github.com/user/my-repo/pull/87',
|
|
118
|
-
number: 87,
|
|
119
|
-
status: PrStatus.Open,
|
|
120
|
-
ciStatus: CiStatus.Success,
|
|
121
|
-
mergeable: true,
|
|
122
|
-
},
|
|
123
90
|
},
|
|
124
91
|
{
|
|
125
92
|
name: 'Payment Gateway',
|
|
126
93
|
description: 'Stripe integration for subscriptions',
|
|
127
|
-
featureId: '
|
|
94
|
+
featureId: '#f3',
|
|
128
95
|
lifecycle: 'deploy',
|
|
129
96
|
state: 'done',
|
|
130
97
|
progress: 100,
|
|
@@ -132,24 +99,12 @@ const allStatesData = [
|
|
|
132
99
|
agentType: 'claude-code',
|
|
133
100
|
modelId: 'claude-sonnet-4-6',
|
|
134
101
|
repositoryPath: '/home/user/my-repo',
|
|
135
|
-
repositoryName: 'my-repo',
|
|
136
102
|
branch: 'feat/payment-gateway',
|
|
137
|
-
worktreePath: '/home/user/.shep/repos/abc123/wt/feat-payment-gateway',
|
|
138
|
-
fastMode: true,
|
|
139
|
-
hasAgentRun: true,
|
|
140
|
-
hasPlan: true,
|
|
141
|
-
pr: {
|
|
142
|
-
url: 'https://github.com/user/my-repo/pull/85',
|
|
143
|
-
number: 85,
|
|
144
|
-
status: PrStatus.Merged,
|
|
145
|
-
ciStatus: CiStatus.Success,
|
|
146
|
-
},
|
|
147
|
-
deployment: { status: DeploymentState.Ready, url: 'http://localhost:3002' },
|
|
148
103
|
},
|
|
149
104
|
{
|
|
150
105
|
name: 'Search Index',
|
|
151
106
|
description: 'Elasticsearch full-text search setup',
|
|
152
|
-
featureId: '
|
|
107
|
+
featureId: '#f4',
|
|
153
108
|
lifecycle: 'implementation',
|
|
154
109
|
state: 'blocked',
|
|
155
110
|
progress: 20,
|
|
@@ -157,61 +112,40 @@ const allStatesData = [
|
|
|
157
112
|
agentType: 'claude-code',
|
|
158
113
|
modelId: 'claude-opus-4-6',
|
|
159
114
|
repositoryPath: '/home/user/my-repo',
|
|
160
|
-
repositoryName: 'my-repo',
|
|
161
115
|
branch: 'feat/search-index',
|
|
162
|
-
worktreePath: '/home/user/.shep/repos/abc123/wt/feat-search-index',
|
|
163
|
-
hasAgentRun: true,
|
|
164
|
-
hasPlan: true,
|
|
165
116
|
},
|
|
166
117
|
{
|
|
167
118
|
name: 'Email Service',
|
|
168
119
|
description: 'Transactional email with SendGrid',
|
|
169
|
-
featureId: '
|
|
120
|
+
featureId: '#f5',
|
|
170
121
|
lifecycle: 'review',
|
|
171
122
|
state: 'error',
|
|
172
123
|
progress: 30,
|
|
173
|
-
errorMessage: 'Build failed:
|
|
174
|
-
agentType: '
|
|
175
|
-
modelId: '
|
|
124
|
+
errorMessage: 'Build failed: type mismatch',
|
|
125
|
+
agentType: 'dev',
|
|
126
|
+
modelId: 'gpt-8',
|
|
176
127
|
repositoryPath: '/home/user/my-repo',
|
|
177
|
-
repositoryName: 'my-repo',
|
|
178
128
|
branch: 'feat/email-service',
|
|
179
|
-
worktreePath: '/home/user/.shep/repos/abc123/wt/feat-email-service',
|
|
180
|
-
hasAgentRun: true,
|
|
181
|
-
hasPlan: true,
|
|
182
|
-
pr: {
|
|
183
|
-
url: 'https://github.com/user/my-repo/pull/86',
|
|
184
|
-
number: 86,
|
|
185
|
-
status: PrStatus.Open,
|
|
186
|
-
ciStatus: CiStatus.Failure,
|
|
187
|
-
},
|
|
188
|
-
onRetry: fn(),
|
|
189
129
|
},
|
|
190
130
|
{
|
|
191
131
|
name: 'Notification Service',
|
|
192
132
|
description: 'Push notification integration',
|
|
193
|
-
featureId: '
|
|
133
|
+
featureId: '#f7',
|
|
194
134
|
lifecycle: 'pending',
|
|
195
135
|
state: 'pending',
|
|
196
136
|
progress: 0,
|
|
197
137
|
repositoryPath: '/home/user/my-repo',
|
|
198
|
-
repositoryName: 'my-repo',
|
|
199
138
|
branch: 'feat/notification-service',
|
|
200
|
-
onStart: fn(),
|
|
201
139
|
},
|
|
202
140
|
{
|
|
203
141
|
name: 'Legacy API Cleanup',
|
|
204
142
|
description: 'Remove deprecated REST endpoints',
|
|
205
|
-
featureId: '
|
|
143
|
+
featureId: '#f6',
|
|
206
144
|
lifecycle: 'implementation',
|
|
207
145
|
state: 'deleting',
|
|
208
146
|
progress: 0,
|
|
209
147
|
repositoryPath: '/home/user/my-repo',
|
|
210
|
-
repositoryName: 'my-repo',
|
|
211
148
|
branch: 'feat/legacy-api-cleanup',
|
|
212
|
-
worktreePath: '/home/user/.shep/repos/abc123/wt/feat-legacy-api-cleanup',
|
|
213
|
-
agentType: 'claude-code',
|
|
214
|
-
hasAgentRun: true,
|
|
215
149
|
},
|
|
216
150
|
];
|
|
217
151
|
export const AllStates = {
|
package/dist/src/presentation/web/components/common/repository-node/repository-node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAOnE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,2CA2Z5F"}
|
|
@@ -71,17 +71,15 @@ export function RepositoryNode({ data }) {
|
|
|
71
71
|
e.stopPropagation();
|
|
72
72
|
data.onClick?.();
|
|
73
73
|
}
|
|
74
|
-
}, className: "nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm
|
|
74
|
+
}, className: "nodrag bg-card flex w-[26rem] cursor-pointer flex-col overflow-hidden rounded-xl border shadow-sm", children: [_jsxs("div", { className: "flex items-center gap-3 px-4 py-3", children: [_jsx(Github, { className: "text-muted-foreground h-5 w-5 shrink-0" }), _jsx("span", { "data-testid": "repository-node-name", className: "min-w-0 truncate text-sm font-medium", children: data.name }), _jsxs("div", { className: cn('flex shrink-0 items-center gap-2', (data.repositoryPath ?? data.onAdd) && 'ml-auto'), onClick: (e) => e.stopPropagation(), children: [data.repositoryPath ? (_jsxs(_Fragment, { children: [_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in IDE", onClick: actions.openInIde, loading: actions.ideLoading, error: !!actions.ideError, icon: Code2, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in IDE" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open in Shell", onClick: actions.openInShell, loading: actions.shellLoading, error: !!actions.shellError, icon: Terminal, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open in Shell" })] }) }), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "flex items-center", children: _jsx(ActionButton, { label: "Open Folder", onClick: actions.openFolder, loading: actions.folderLoading, error: !!actions.folderError, icon: FolderOpen, iconOnly: true, variant: "ghost", size: "icon-xs" }) }) }), _jsx(TooltipContent, { children: "Open Folder" })] }) }), _jsx(FeatureSessionsDropdown, { repositoryPath: data.repositoryPath, onCreateFromSession: handleCreateFromSession })] })) : null, data.onAdd ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { "aria-label": "Add feature", "data-testid": "repository-node-add-button", onClick: (e) => {
|
|
75
75
|
e.stopPropagation();
|
|
76
76
|
data.onAdd?.();
|
|
77
77
|
}, className: cn('text-muted-foreground hover:bg-accent dark:hover:bg-accent/50 flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-full transition-colors hover:text-blue-500', data.pulseAdd &&
|
|
78
|
-
'animate-pulse-cta bg-blue-100 text-blue-500 dark:bg-blue-900/40'), children: _jsx(Plus, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Add feature" })] }) })) : null] })] }), data.branch ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-info", className: "text-muted-foreground border-
|
|
78
|
+
'animate-pulse-cta bg-blue-100 text-blue-500 dark:bg-blue-900/40'), children: _jsx(Plus, { className: "h-3.5 w-3.5" }) }) }), _jsx(TooltipContent, { children: "Add feature" })] }) })) : null] })] }), data.branch ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-info", className: "text-muted-foreground border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-3 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1 truncate", "data-testid": "repository-node-branch", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "truncate", children: data.branch })] }), data.behindCount != null && data.behindCount > 0 ? (_jsxs("span", { className: "flex shrink-0 items-center gap-1 whitespace-nowrap text-amber-500", "data-testid": "repository-node-behind", children: [_jsx(ArrowDown, { className: "h-3 w-3 shrink-0" }), data.behindCount, " behind"] })) : null] }) }), data.commitMessage ? (_jsx("div", { "data-testid": "repository-node-commit-info", className: "text-muted-foreground border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate", "data-testid": "repository-node-commit-message", children: data.commitMessage }), data.committer ? (_jsxs("span", { className: "text-muted-foreground/70 ml-auto flex shrink-0 items-center gap-1", "data-testid": "repository-node-committer", children: [_jsx(User, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: data.committer })] })) : null] }) })) : null] })) : data.gitInfoStatus === 'not-a-repo' ? (
|
|
79
79
|
/* Not a git repo — two rows for consistency with loading/ready states */
|
|
80
|
-
_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-not-repo", className: "text-muted-foreground border-
|
|
80
|
+
_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-not-repo", className: "text-muted-foreground border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [_jsx(FolderOpen, { className: "h-3 w-3 shrink-0" }), _jsx("span", { className: "min-w-0 truncate opacity-60", children: data.repositoryPath ?? 'Unknown path' })] }) }), _jsx("div", { className: "text-muted-foreground border-t px-4 py-2", children: _jsxs("div", { className: "flex items-center gap-2 text-xs opacity-40", children: [_jsx(GitBranch, { className: "h-3 w-3 shrink-0" }), _jsx("span", { children: "Not a git repository" })] }) })] })) : data.gitInfoStatus !== 'ready' ? (
|
|
81
81
|
/* Loading — show skeleton placeholders for both rows */
|
|
82
|
-
_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-loading", className: "border-
|
|
83
|
-
!deployAction.deployError &&
|
|
84
|
-
'[&_button]:text-green-600 [&_button]:hover:text-green-700 dark:[&_button]:text-green-400 dark:[&_button]:hover:text-green-300'), children: _jsx(ActionButton, { label: deployAction.deployError
|
|
82
|
+
_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-loading", className: "border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitBranch, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-20 animate-pulse rounded" })] }) }), _jsx("div", { className: "border-t px-4 py-2", children: _jsxs("div", { className: "flex h-4 items-center gap-2 text-xs", children: [_jsx(GitCommitHorizontal, { className: "text-muted-foreground h-3 w-3 shrink-0" }), _jsx("span", { className: "bg-muted h-3 w-36 animate-pulse rounded" })] }) })] })) : null, featureFlags.envDeploy && data.repositoryPath ? (_jsx("div", { "data-testid": "repository-node-dev-preview", className: "border-t px-4 py-2", onClick: (e) => e.stopPropagation(), children: _jsxs("div", { className: "flex items-center gap-2 text-xs", children: [deployAction.deployError ? (_jsx("span", { className: "truncate text-xs text-red-500", children: deployAction.deployError })) : isDeploymentActive ? (_jsxs(_Fragment, { children: [_jsx("span", { className: "mr-0.5 inline-block h-2 w-2 shrink-0 rounded-full bg-green-500" }), deployAction.url ? (_jsx("a", { href: deployAction.url, target: "_blank", rel: "noopener noreferrer", className: "truncate text-green-700 hover:underline dark:text-green-400", children: deployAction.url })) : (_jsx("span", { className: "text-muted-foreground", children: "Starting..." }))] })) : (_jsxs("span", { className: "text-muted-foreground", children: ["Run", _jsx("span", { className: "text-muted-foreground/50 ml-2 text-[10px]", children: "start local environment" })] })), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: "ml-auto flex items-center", children: _jsx(ActionButton, { label: deployAction.deployError
|
|
85
83
|
? 'Retry'
|
|
86
84
|
: isDeploymentActive
|
|
87
85
|
? 'Stop Dev Server'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"control-center-empty-state.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,4BAA4B;IAC3C,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,uBAAuB,CAAC,EACtC,kBAAkB,EAClB,SAAS,GACV,EAAE,4BAA4B,kDAuL9B"}
|
package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { useState, useCallback, useEffect } from 'react';
|
|
4
|
-
import { FolderOpen, Copy, Check, Loader2, CheckCircle2, AlertCircle, Terminal, ChevronDown,
|
|
4
|
+
import { FolderOpen, Copy, Check, Loader2, CheckCircle2, AlertCircle, Terminal, ChevronDown, } from 'lucide-react';
|
|
5
5
|
import { cn } from '../../../lib/utils.js';
|
|
6
6
|
import { pickFolder } from '../../common/add-repository-button/pick-folder.js';
|
|
7
7
|
import { ReactFileManagerDialog } from '../../common/react-file-manager-dialog/index.js';
|
|
8
8
|
import { useFeatureFlags } from '../../../hooks/feature-flags-context.js';
|
|
9
9
|
import { isAgentSetupComplete } from '../../../app/actions/agent-setup-flag.js';
|
|
10
10
|
import { checkAgentAuth } from '../../../app/actions/check-agent-auth.js';
|
|
11
|
-
import { checkToolStatus } from '../../../app/actions/check-tool-status.js';
|
|
12
11
|
import { WelcomeAgentSetup } from './welcome-agent-setup.js';
|
|
13
12
|
const commands = ['cd ~/my-repo', 'shep feat new "sleek dashboard"'];
|
|
14
13
|
export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
@@ -18,7 +17,6 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
|
18
17
|
const [agentReady, setAgentReady] = useState(null);
|
|
19
18
|
const [authStatus, setAuthStatus] = useState(null);
|
|
20
19
|
const [cliExpanded, setCliExpanded] = useState(false);
|
|
21
|
-
const [toolStatus, setToolStatus] = useState(null);
|
|
22
20
|
const { reactFileManager: useReactFileManager } = useFeatureFlags();
|
|
23
21
|
useEffect(() => {
|
|
24
22
|
isAgentSetupComplete().then((done) => {
|
|
@@ -29,7 +27,6 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
|
29
27
|
if (!agentReady)
|
|
30
28
|
return;
|
|
31
29
|
checkAgentAuth().then(setAuthStatus);
|
|
32
|
-
checkToolStatus().then(setToolStatus);
|
|
33
30
|
}, [agentReady]);
|
|
34
31
|
async function handlePickerClick() {
|
|
35
32
|
if (loading)
|
|
@@ -77,7 +74,7 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
|
77
74
|
/* Agent setup wizard — owns its own hero */
|
|
78
75
|
_jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (
|
|
79
76
|
/* Repository step — fade in to match wizard transitions */
|
|
80
|
-
_jsxs("div", { className: "animate-in fade-in flex w-full max-w-md flex-col items-center duration-300", children: [_jsx("h1", { className: "text-foreground/90 text-center text-5xl font-extralight tracking-tight", children: "Add a project" }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: ["Add your project folder to unlock feature creation.", _jsx("br", {}), "Describe what you need \u2014 Shep handles the rest."] }),
|
|
77
|
+
_jsxs("div", { className: "animate-in fade-in flex w-full max-w-md flex-col items-center duration-300", children: [_jsx("h1", { className: "text-foreground/90 text-center text-5xl font-extralight tracking-tight", children: "Add a project" }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-lg leading-relaxed font-light", children: ["Add your project folder to unlock feature creation.", _jsx("br", {}), "Describe what you need \u2014 Shep handles the rest."] }), _jsx("div", { className: "mt-8", children: _jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }) }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "bg-foreground text-background hover:bg-foreground/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-medium shadow-lg transition-all duration-200 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(Loader2, { className: "h-5 w-5 animate-spin" })) : (_jsx(FolderOpen, { className: "h-5 w-5" })), loading ? 'Opening…' : 'Choose a Folder'] }), _jsx("p", { className: "text-muted-foreground/60 mt-3 text-center text-sm", children: "Any folder works \u2014 git will be initialized automatically if needed." })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
|
|
81
78
|
animationDelay: '400ms',
|
|
82
79
|
animationDuration: '600ms',
|
|
83
80
|
animationFillMode: 'both',
|
|
@@ -86,47 +83,24 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
|
86
83
|
setShowReactPicker(false);
|
|
87
84
|
}, onSelect: handleReactPickerSelect })] }));
|
|
88
85
|
}
|
|
89
|
-
/**
|
|
86
|
+
/** Inline status pill — minimal, no background box */
|
|
90
87
|
function AgentAuthBanner({ status, onRetry, }) {
|
|
91
88
|
if (!status) {
|
|
92
|
-
return (
|
|
89
|
+
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Loader2, { className: "text-muted-foreground/50 h-3.5 w-3.5 animate-spin" }), _jsx("span", { className: "text-muted-foreground/50 text-sm", children: "Checking setup\u2026" })] }));
|
|
93
90
|
}
|
|
94
91
|
if (status.installed && status.authenticated) {
|
|
95
|
-
return (
|
|
92
|
+
return (_jsxs("div", { className: "animate-in fade-in flex items-center gap-2", children: [_jsx(CheckCircle2, { className: "h-4 w-4 text-emerald-500" }), _jsxs("span", { className: "text-sm text-emerald-600 dark:text-emerald-400", children: [status.label, " ready"] })] }));
|
|
96
93
|
}
|
|
97
94
|
if (!status.installed) {
|
|
98
|
-
return (_jsxs(
|
|
95
|
+
return (_jsxs("div", { className: "flex flex-col items-center gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 text-amber-500" }), _jsxs("span", { className: "text-sm font-medium text-amber-600 dark:text-amber-400", children: [status.label, " not installed"] })] }), status.binaryName ? (_jsxs("code", { className: "rounded-lg bg-zinc-100 px-3 py-1.5 text-xs text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400", children: ["npm install -g ", status.binaryName] })) : null, _jsx("button", { type: "button", onClick: onRetry, className: "text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: "Re-check" })] }));
|
|
99
96
|
}
|
|
100
|
-
return (_jsxs(
|
|
97
|
+
return (_jsxs("div", { className: "flex flex-col items-center gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 text-amber-500" }), _jsxs("span", { className: "text-sm font-medium text-amber-600 dark:text-amber-400", children: [status.label, " needs authentication"] })] }), status.authCommand ? (_jsx("code", { className: "rounded-lg bg-zinc-100 px-3 py-1.5 text-xs text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400", children: status.authCommand })) : null, _jsxs("div", { className: "flex items-center gap-3", children: [status.binaryName ? (_jsxs("button", { type: "button", "data-testid": "auth-banner-open-terminal", onClick: async () => {
|
|
101
98
|
try {
|
|
102
99
|
const toolId = status.agentType === 'claude-code' ? 'claude-code' : status.agentType;
|
|
103
100
|
await fetch(`/api/tools/${toolId}/launch`, { method: 'POST' });
|
|
104
101
|
}
|
|
105
102
|
catch {
|
|
106
|
-
|
|
103
|
+
// best effort
|
|
107
104
|
}
|
|
108
|
-
}, className: "flex items-center gap-1 text-xs font-medium text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: [_jsx(Terminal, { className: "h-3 w-3" }), "Open ", status.label] })) : null, _jsx("button", { type: "button", onClick: onRetry, className: "text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: "Re-check" })] })] }));
|
|
109
|
-
}
|
|
110
|
-
/** Status row for system tools (git, gh) */
|
|
111
|
-
function ToolStatusRow({ label, status, missingHint, }) {
|
|
112
|
-
if (!status) {
|
|
113
|
-
return (_jsx(ChecklistRow, { icon: _jsx(Loader2, { className: "text-muted-foreground/50 h-4 w-4 animate-spin" }), children: _jsxs("span", { className: "text-muted-foreground/50 text-sm", children: ["Checking ", label, "\u2026"] }) }));
|
|
114
|
-
}
|
|
115
|
-
if (status.installed) {
|
|
116
|
-
return (_jsx(ChecklistRow, { icon: _jsx(CheckCircle2, { className: "h-4 w-4 text-emerald-500" }), children: _jsxs("span", { className: "flex items-baseline gap-2", children: [_jsxs("span", { className: "text-sm text-emerald-600 dark:text-emerald-400", children: [label, " ready"] }), status.version ? (_jsxs("span", { className: "text-muted-foreground/40 text-xs", children: ["v", status.version] })) : null] }) }));
|
|
117
|
-
}
|
|
118
|
-
return (_jsxs(ChecklistRow, { icon: _jsx(AlertCircle, { className: "h-4 w-4 text-amber-500" }), children: [_jsxs("span", { className: "text-sm font-medium text-amber-600 dark:text-amber-400", children: [label, " not found"] }), _jsx("span", { className: "text-muted-foreground/50 text-xs", children: missingHint }), status.installCommand ? _jsx(CopyableCommand, { command: status.installCommand }) : null, status.installUrl ? (_jsxs("a", { href: status.installUrl, target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-1 text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: ["Docs ", _jsx(ExternalLink, { className: "h-3 w-3" })] })) : null] }));
|
|
119
|
-
}
|
|
120
|
-
/** Checklist row: icon pinned left, children stacked vertically and fill width */
|
|
121
|
-
function ChecklistRow({ icon, children }) {
|
|
122
|
-
return (_jsxs("div", { className: "animate-in fade-in flex items-start gap-2.5", children: [_jsx("div", { className: "mt-0.5 shrink-0", children: icon }), _jsx("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: children })] }));
|
|
123
|
-
}
|
|
124
|
-
/** Compact copyable command block — fills available row width */
|
|
125
|
-
function CopyableCommand({ command }) {
|
|
126
|
-
const [copied, setCopied] = useState(false);
|
|
127
|
-
return (_jsxs("button", { type: "button", onClick: async () => {
|
|
128
|
-
await navigator.clipboard.writeText(command);
|
|
129
|
-
setCopied(true);
|
|
130
|
-
setTimeout(() => setCopied(false), 2000);
|
|
131
|
-
}, className: "group/cmd flex cursor-pointer items-center justify-between gap-2 rounded-md bg-zinc-100 py-1 pr-2 pl-2.5 text-left transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:hover:bg-zinc-700", children: [_jsx("code", { className: "min-w-0 truncate text-[11px] leading-relaxed text-zinc-600 dark:text-zinc-300", children: command }), copied ? (_jsx(Check, { className: "h-3 w-3 shrink-0 text-emerald-500" })) : (_jsx(Copy, { className: "h-3 w-3 shrink-0 text-zinc-400 opacity-0 transition-opacity group-hover/cmd:opacity-100" }))] }));
|
|
105
|
+
}, className: "flex items-center gap-1.5 text-xs font-medium text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: [_jsx(Terminal, { className: "h-3 w-3" }), "Open ", status.label] })) : null, _jsx("button", { type: "button", onClick: onRetry, className: "text-xs text-amber-600 underline underline-offset-2 hover:text-amber-800 dark:text-amber-400", children: "Re-check" })] })] }));
|
|
132
106
|
}
|
|
@@ -3,22 +3,6 @@ import { ControlCenterEmptyState } from './control-center-empty-state.js';
|
|
|
3
3
|
declare const meta: Meta<typeof ControlCenterEmptyState>;
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof meta>;
|
|
6
|
-
|
|
7
|
-
export declare const AllToolsReady: Story;
|
|
8
|
-
/** Git is missing — blocks all workflow phases */
|
|
9
|
-
export declare const GitMissing: Story;
|
|
10
|
-
/** GitHub CLI is missing — PR features unavailable */
|
|
11
|
-
export declare const GhCliMissing: Story;
|
|
12
|
-
/** Both git and gh are missing */
|
|
13
|
-
export declare const BothToolsMissing: Story;
|
|
14
|
-
/** Claude Code not installed */
|
|
15
|
-
export declare const ClaudeCodeNotInstalled: Story;
|
|
16
|
-
/** Cursor CLI not installed */
|
|
17
|
-
export declare const CursorCliNotInstalled: Story;
|
|
18
|
-
/** Gemini CLI not installed */
|
|
19
|
-
export declare const GeminiCliNotInstalled: Story;
|
|
20
|
-
/** Agent not installed + tools missing — worst case */
|
|
21
|
-
export declare const EverythingMissing: Story;
|
|
22
|
-
/** With callback — for interaction testing */
|
|
6
|
+
export declare const Default: Story;
|
|
23
7
|
export declare const WithCallback: Story;
|
|
24
8
|
//# sourceMappingURL=control-center-empty-state.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control-center-empty-state.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,uBAAuB,CAc9C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"control-center-empty-state.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,uBAAuB,CAc9C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAErB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAO1B,CAAC"}
|
|
@@ -12,118 +12,9 @@ const meta = {
|
|
|
12
12
|
],
|
|
13
13
|
};
|
|
14
14
|
export default meta;
|
|
15
|
-
const
|
|
16
|
-
agentType: 'claude-code',
|
|
17
|
-
installed: true,
|
|
18
|
-
authenticated: true,
|
|
19
|
-
label: 'Claude Code',
|
|
20
|
-
binaryName: 'claude',
|
|
21
|
-
installCommand: 'curl -fsSL https://claude.ai/install.sh | bash',
|
|
22
|
-
authCommand: null,
|
|
23
|
-
};
|
|
24
|
-
const claudeNotInstalled = {
|
|
25
|
-
agentType: 'claude-code',
|
|
26
|
-
installed: false,
|
|
27
|
-
authenticated: false,
|
|
28
|
-
label: 'Claude Code',
|
|
29
|
-
binaryName: 'claude',
|
|
30
|
-
installCommand: 'curl -fsSL https://claude.ai/install.sh | bash',
|
|
31
|
-
authCommand: 'Install Claude Code first',
|
|
32
|
-
};
|
|
33
|
-
const cursorNotInstalled = {
|
|
34
|
-
agentType: 'cursor',
|
|
35
|
-
installed: false,
|
|
36
|
-
authenticated: false,
|
|
37
|
-
label: 'Cursor CLI',
|
|
38
|
-
binaryName: 'cursor-agent',
|
|
39
|
-
installCommand: 'curl https://cursor.com/install -fsS | bash',
|
|
40
|
-
authCommand: 'Install Cursor CLI first',
|
|
41
|
-
};
|
|
42
|
-
const geminiNotInstalled = {
|
|
43
|
-
agentType: 'gemini-cli',
|
|
44
|
-
installed: false,
|
|
45
|
-
authenticated: false,
|
|
46
|
-
label: 'Gemini CLI',
|
|
47
|
-
binaryName: 'gemini',
|
|
48
|
-
installCommand: 'npm install -g @google/gemini-cli',
|
|
49
|
-
authCommand: 'Install Gemini CLI first',
|
|
50
|
-
};
|
|
51
|
-
const gitReady = {
|
|
52
|
-
installed: true,
|
|
53
|
-
version: '2.43.0',
|
|
54
|
-
installCommand: 'sudo apt-get install -y git',
|
|
55
|
-
installUrl: 'https://git-scm.com',
|
|
56
|
-
};
|
|
57
|
-
const gitMissing = {
|
|
58
|
-
installed: false,
|
|
59
|
-
version: null,
|
|
60
|
-
installCommand: 'sudo apt-get install -y git',
|
|
61
|
-
installUrl: 'https://git-scm.com',
|
|
62
|
-
};
|
|
63
|
-
const ghReady = {
|
|
64
|
-
installed: true,
|
|
65
|
-
version: '2.40.1',
|
|
66
|
-
installCommand: 'sudo apt install gh -y',
|
|
67
|
-
installUrl: 'https://cli.github.com',
|
|
68
|
-
};
|
|
69
|
-
const ghMissing = {
|
|
70
|
-
installed: false,
|
|
71
|
-
version: null,
|
|
72
|
-
installCommand: 'sudo apt install gh -y',
|
|
73
|
-
installUrl: 'https://cli.github.com',
|
|
74
|
-
};
|
|
75
|
-
function setMocks(agent, git, gh) {
|
|
76
|
-
return () => {
|
|
77
|
-
const win = globalThis;
|
|
78
|
-
win.__mockAgentAuth = agent;
|
|
79
|
-
win.__mockToolStatus = { git, gh };
|
|
80
|
-
return () => {
|
|
81
|
-
delete win.__mockAgentAuth;
|
|
82
|
-
delete win.__mockToolStatus;
|
|
83
|
-
};
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
/** All tools installed — the happy path */
|
|
87
|
-
export const AllToolsReady = {
|
|
88
|
-
args: {},
|
|
89
|
-
beforeEach: setMocks(agentReady, gitReady, ghReady),
|
|
90
|
-
};
|
|
91
|
-
/** Git is missing — blocks all workflow phases */
|
|
92
|
-
export const GitMissing = {
|
|
93
|
-
args: {},
|
|
94
|
-
beforeEach: setMocks(agentReady, gitMissing, ghReady),
|
|
95
|
-
};
|
|
96
|
-
/** GitHub CLI is missing — PR features unavailable */
|
|
97
|
-
export const GhCliMissing = {
|
|
98
|
-
args: {},
|
|
99
|
-
beforeEach: setMocks(agentReady, gitReady, ghMissing),
|
|
100
|
-
};
|
|
101
|
-
/** Both git and gh are missing */
|
|
102
|
-
export const BothToolsMissing = {
|
|
103
|
-
args: {},
|
|
104
|
-
beforeEach: setMocks(agentReady, gitMissing, ghMissing),
|
|
105
|
-
};
|
|
106
|
-
/** Claude Code not installed */
|
|
107
|
-
export const ClaudeCodeNotInstalled = {
|
|
108
|
-
args: {},
|
|
109
|
-
beforeEach: setMocks(claudeNotInstalled, gitReady, ghReady),
|
|
110
|
-
};
|
|
111
|
-
/** Cursor CLI not installed */
|
|
112
|
-
export const CursorCliNotInstalled = {
|
|
113
|
-
args: {},
|
|
114
|
-
beforeEach: setMocks(cursorNotInstalled, gitReady, ghReady),
|
|
115
|
-
};
|
|
116
|
-
/** Gemini CLI not installed */
|
|
117
|
-
export const GeminiCliNotInstalled = {
|
|
118
|
-
args: {},
|
|
119
|
-
beforeEach: setMocks(geminiNotInstalled, gitReady, ghReady),
|
|
120
|
-
};
|
|
121
|
-
/** Agent not installed + tools missing — worst case */
|
|
122
|
-
export const EverythingMissing = {
|
|
15
|
+
export const Default = {
|
|
123
16
|
args: {},
|
|
124
|
-
beforeEach: setMocks(claudeNotInstalled, gitMissing, ghMissing),
|
|
125
17
|
};
|
|
126
|
-
/** With callback — for interaction testing */
|
|
127
18
|
export const WithCallback = {
|
|
128
19
|
args: {
|
|
129
20
|
onRepositorySelect: (path) => {
|
package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features-canvas.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMvF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAG9E,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,QAAQ,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAmBD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"features-canvas.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMvF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAG9E,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,QAAQ,CAAC;IACjC,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAmBD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,eAAe,EACf,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,2CA2HrB"}
|
|
@@ -60,5 +60,5 @@ export function FeaturesCanvas({ nodes, edges, selectedFeatureId, defaultViewpor
|
|
|
60
60
|
}, [isEmpty]);
|
|
61
61
|
const fallbackEmptyState = isEmpty && !emptyState ? (_jsx(EmptyState, { title: "No features yet", description: "Get started by creating your first feature.", action: _jsxs(Button, { onClick: onAddFeature, children: [_jsx(Plus, { className: "mr-2 h-4 w-4" }), "New Feature"] }) })) : null;
|
|
62
62
|
const overlayContent = emptyState ?? fallbackEmptyState;
|
|
63
|
-
return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true, className: "dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]", children: [_jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, onMoveEnd: onMoveEnd, defaultViewport: defaultViewport ?? FALLBACK_VIEWPORT, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, proOptions: { hideAttribution: true },
|
|
63
|
+
return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true, className: "dark:bg-background pointer-events-auto relative h-full w-full bg-[#f6f7f8]", children: [_jsxs(ReactFlow, { nodes: enrichedNodes, edges: edges, nodeTypes: nodeTypes, edgeTypes: edgeTypes, onConnect: onConnect, onNodesChange: onNodesChange, onNodeClick: onNodeClick, onPaneClick: onPaneClick, onMoveStart: onCanvasDrag, onMoveEnd: onMoveEnd, defaultViewport: defaultViewport ?? FALLBACK_VIEWPORT, nodesDraggable: false, nodesConnectable: false, elementsSelectable: false, proOptions: { hideAttribution: true }, children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 24, size: 1, color: "#b8bcc4", className: "dark:[&_circle]:!fill-white/[0.1]" }), !isEmpty && (_jsx(Controls, { showInteractive: false, children: onResetViewport ? _jsx(ResetButton, { onResetViewport: onResetViewport }) : null })), toolbar] }), showOverlay && overlayContent ? (_jsx("div", { className: cn('pointer-events-none absolute inset-0 z-10 flex items-center justify-center transition-opacity duration-300', overlayExiting ? 'opacity-0' : 'animate-in fade-in opacity-100 duration-200'), children: _jsx("div", { className: "pointer-events-auto h-full w-full", children: overlayContent }) })) : null] }));
|
|
64
64
|
}
|
package/dist/src/presentation/web/components/features/features-canvas/features-canvas.stories.d.ts
CHANGED
|
@@ -17,5 +17,4 @@ export declare const InteractiveWithRepository: Story;
|
|
|
17
17
|
export declare const WithSavedViewport: Story;
|
|
18
18
|
export declare const ZoomedOutViewport: Story;
|
|
19
19
|
export declare const FastModeFeatures: Story;
|
|
20
|
-
export declare const FullSpectrum: Story;
|
|
21
20
|
//# sourceMappingURL=features-canvas.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features-canvas.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"features-canvas.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/features-canvas/features-canvas.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,cAAc,CAcrC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAwKnC,eAAO,MAAM,KAAK,EAAE,KAMnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAKxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAK3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAK5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KASzB,CAAC;AAoDF,eAAO,MAAM,mCAAmC,EAAE,KAKjD,CAAC;AA4BF,eAAO,MAAM,gCAAgC,EAAE,KAO9C,CAAC;AA0DF,eAAO,MAAM,gCAAgC,EAAE,KAS9C,CAAC;AAiDF,eAAO,MAAM,oBAAoB,EAAE,KAQlC,CAAC;AAqGF,eAAO,MAAM,oCAAoC,EAAE,KAKlD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAMvC,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,KAO/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAO/B,CAAC;AAsEF,eAAO,MAAM,gBAAgB,EAAE,KAM9B,CAAC"}
|