@shipit-ai/cli 1.167.0 → 1.168.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/antigravity.json +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/bash.json +1 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor-cli.json +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/cursor.json +1 -1
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/fish.json +1 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/powershell.json +1 -0
- package/dist/packages/core/src/infrastructure/services/tool-installer/tools/zsh.json +1 -0
- package/dist/src/presentation/web/app/actions/get-merge-review-data.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/get-merge-review-data.js +5 -1
- package/dist/src/presentation/web/app/actions/open-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/open-shell.js +5 -1
- package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
- package/dist/src/presentation/web/app/layout.js +15 -2
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/base-drawer/base-drawer.js +47 -10
- package/dist/src/presentation/web/components/common/page-header/page-header.d.ts +3 -1
- package/dist/src/presentation/web/components/common/page-header/page-header.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/page-header/page-header.js +8 -2
- 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 +6 -1
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.d.ts +9 -1
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.js +12 -6
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.js +5 -1
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.js +15 -0
- package/dist/src/presentation/web/components/features/chat/ChatSheet.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/chat/ChatSheet.js +18 -5
- 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 +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +5 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +43 -45
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts +5 -2
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.js +8 -5
- package/dist/src/presentation/web/components/features/skills/category-filter.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/skills/category-filter.js +12 -2
- package/dist/src/presentation/web/components/features/skills/skill-card.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/skills/skill-card.js +3 -3
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/skills/skill-detail-drawer.js +27 -1
- package/dist/src/presentation/web/components/features/skills/skill-list.js +2 -2
- package/dist/src/presentation/web/components/features/skills/skills-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/skills/skills-page-client.js +2 -2
- package/dist/src/presentation/web/components/features/tools/tool-card.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/tools/tool-card.js +20 -11
- package/dist/src/presentation/web/components/features/tools/tool-detail-drawer.js +1 -1
- package/dist/src/presentation/web/components/features/tools/tools-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/tools/tools-page-client.js +6 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +39 -43
- package/dist/src/presentation/web/components/ui/card.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/card.js +9 -1
- package/dist/src/presentation/web/components/ui/drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/drawer.js +8 -2
- package/dist/src/presentation/web/lib/path-sanitizers.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/path-sanitizers.js +5 -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 +3 -3
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +1 -1
- 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/chat/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +2 -2
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +2 -2
- 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]/[tab]/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
- 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)/chat/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/create/page.js +1 -1
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +2 -2
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +2 -2
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js +1 -1
- 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]/[tab]/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
- 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 +1 -1
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/dialog/pick-files/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/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/settings/page/next-font-manifest.json +6 -2
- package/web/.next/server/app/settings/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/settings/page.js +1 -1
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- 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/next-font-manifest.json +6 -2
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js +1 -1
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0_-chcy._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0e9p7em._.js.map +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0c0dui7._.js +3 -0
- package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0c0dui7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uy_5rw._.js → [root-of-the-server]__0ge~xny._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0uy_5rw._.js.map → [root-of-the-server]__0ge~xny._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0jy4nha._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0jy4nha._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0e5cv3q._.js → [root-of-the-server]__0n~o-g-._.js} +2 -2
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0n~o-g-._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__02.89uf._.js → [root-of-the-server]__0qda~yi._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__02.89uf._.js.map → [root-of-the-server]__0qda~yi._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0c0xoi_._.js → [root-of-the-server]__0qxd563._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0c0xoi_._.js.map → [root-of-the-server]__0qxd563._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0r5zhk.._.js → [root-of-the-server]__0t~u8sd._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0r5zhk.._.js.map → [root-of-the-server]__0t~u8sd._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__04rq9lr._.js → [root-of-the-server]__10tll_l._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__04rq9lr._.js.map → [root-of-the-server]__10tll_l._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0-09vq7._.js +1 -1
- package/web/.next/server/chunks/ssr/_0-09vq7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
- package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0mvhe_2._.js → _08_079y._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0mvhe_2._.js.map → _08_079y._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_09r54oy._.js +7 -0
- package/web/.next/server/chunks/ssr/_09r54oy._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
- package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0dy8.0k._.js +3 -0
- package/web/.next/server/chunks/ssr/_0dy8.0k._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0l2~~pi._.js +3 -0
- package/web/.next/server/chunks/ssr/_0l2~~pi._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0mi5qj~._.js +3 -0
- package/web/.next/server/chunks/ssr/_0mi5qj~._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0n.magx._.js +1 -1
- package/web/.next/server/chunks/ssr/_0n.magx._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0l10ccg._.js → _0r04xhw._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0l10ccg._.js.map → _0r04xhw._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_00k65h-._.js → _0txr945._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0txr945._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0vjw-e_._.js +7 -0
- package/web/.next/server/chunks/ssr/_0vjw-e_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0hwjfpu._.js → _0~0jkp_._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0~0jkp_._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
- package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_0y11iiz._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_0sk2qdt._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_0aji.op._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/next-font-manifest.js +1 -1
- package/web/.next/server/next-font-manifest.json +60 -2
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +50 -50
- package/web/.next/static/chunks/{05enics63g._-.js → 0-ud~1jj7chzu.js} +4 -4
- package/web/.next/static/chunks/01znjuvi5t9~q.js +5 -0
- package/web/.next/static/chunks/033sl_l5o3uo8.css +1 -0
- package/web/.next/static/chunks/04r9m_5p953mf.js +1 -0
- package/web/.next/static/chunks/{11~m1ei9bh269.js → 06nsv-_ec9ehn.js} +1 -1
- package/web/.next/static/chunks/{0qqe9hx_txhso.js → 078lp287u~c~b.js} +1 -1
- package/web/.next/static/chunks/07i3-aamszsoh.js +1 -0
- package/web/.next/static/chunks/{0n3u~4ytndfyd.js → 0_v4t6gzx.332.js} +1 -1
- package/web/.next/static/chunks/{0hti2r43x0~b7.js → 0_xww9bsde~1x.js} +1 -1
- package/web/.next/static/chunks/{0.8ue6wwr7ni~.js → 0cv09-g0prv4o.js} +1 -1
- package/web/.next/static/chunks/0ee1d3_y40g9f.js +1 -0
- package/web/.next/static/chunks/0hg8qgtv~kuys.js +1 -0
- package/web/.next/static/chunks/{11bi612fz8agh.js → 0in4l8mne5y~_.js} +1 -1
- package/web/.next/static/chunks/0inayq2zzadja.js +1 -0
- package/web/.next/static/chunks/{0t3xjndx2s1_j.css → 0j.1nx3ly591i.css} +1 -0
- package/web/.next/static/chunks/0o4m0k3642219.js +1 -0
- package/web/.next/static/chunks/0pt-d18f7zxvv.js +1 -0
- package/web/.next/static/chunks/0udlnp30o1kjd.js +5 -0
- package/web/.next/static/chunks/{13w6ziae82sjy.js → 0ygtupas8pxdi.js} +1 -1
- package/web/.next/static/chunks/12pd180jp8zu..js +5 -0
- package/web/.next/static/chunks/{028x3z97mchhz.js → 133q8d69p6cl0.js} +1 -1
- package/web/.next/static/chunks/13fcwhkw7dle2.js +1 -0
- package/web/.next/static/chunks/13q1peb_t9vj8.js +1 -0
- package/web/.next/static/chunks/15mks7_3venc1.js +1 -0
- package/web/.next/static/chunks/{0_.x~txb5da7d.js → 17c31c1biwfyi.js} +1 -1
- package/web/.next/static/media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2 +0 -0
- package/web/.next/static/media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 +0 -0
- package/web/.next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 +0 -0
- package/web/.next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 +0 -0
- package/web/.next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 +0 -0
- package/web/.next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 +0 -0
- package/web/.next/static/media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2 +0 -0
- package/web/package.json +2 -2
- package/web/public/favicon.svg +10 -0
- package/web/public/icons/tools/antigravity.svg +1 -0
- package/web/public/icons/tools/bash.svg +38 -0
- package/web/public/icons/tools/cursor-cli.svg +12 -0
- package/web/public/icons/tools/cursor.svg +1 -0
- package/web/public/icons/tools/fish.svg +153 -0
- package/web/public/icons/tools/powershell.svg +29 -0
- package/web/public/icons/tools/zsh.svg +1 -0
- package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js +0 -3
- package/web/.next/server/chunks/ssr/08qz_lucide-react_dist_esm_icons_0zwb4s4._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0lslgap._.js +0 -7
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0lslgap._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_00k65h-._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_08i-c2n._.js +0 -3
- package/web/.next/server/chunks/ssr/_08i-c2n._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0e5cv3q._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0hwjfpu._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0mo6j.n._.js +0 -3
- package/web/.next/server/chunks/ssr/_0mo6j.n._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0phryzt._.js +0 -3
- package/web/.next/server/chunks/ssr/_0phryzt._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_12un22l._.js +0 -7
- package/web/.next/server/chunks/ssr/_12un22l._.js.map +0 -1
- package/web/.next/static/chunks/0-lu0b1ewsb0_.js +0 -1
- package/web/.next/static/chunks/01~dudieyb7wl.js +0 -5
- package/web/.next/static/chunks/02kpdawdtqcxm.js +0 -1
- package/web/.next/static/chunks/044f5piy5pt5t.js +0 -1
- package/web/.next/static/chunks/04~sw.nhpwy6s.css +0 -1
- package/web/.next/static/chunks/0_9k2ybutuphq.js +0 -1
- package/web/.next/static/chunks/0jo5-_q.1n69j.js +0 -1
- package/web/.next/static/chunks/0m5~9kij3s~81.js +0 -1
- package/web/.next/static/chunks/0pyz97q7eg0jz.js +0 -1
- package/web/.next/static/chunks/0q~uf2s33.48w.js +0 -1
- package/web/.next/static/chunks/0vx7ldqj8436q.js +0 -5
- package/web/.next/static/chunks/15m2wfd5k_7fj.js +0 -1
- package/web/.next/static/chunks/16.83v.xq8bn9.js +0 -1
- package/web/.next/static/chunks/164dnpi666fv_.js +0 -5
- /package/web/.next/static/{ksBer6au8b_fS1_7dCF2D → LQMB6QAutWzPQnLUZG96y}/_buildManifest.js +0 -0
- /package/web/.next/static/{ksBer6au8b_fS1_7dCF2D → LQMB6QAutWzPQnLUZG96y}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{ksBer6au8b_fS1_7dCF2D → LQMB6QAutWzPQnLUZG96y}/_ssgManifest.js +0 -0
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"summary": "Bourne Again Shell - default shell on most Linux systems",
|
|
4
4
|
"description": "GNU Bash is a Unix shell and command language. It is the default shell on most Linux distributions and was the default on macOS until Catalina.",
|
|
5
5
|
"tags": ["shell"],
|
|
6
|
+
"iconUrl": "/icons/tools/bash.svg",
|
|
6
7
|
"author": "GNU Project",
|
|
7
8
|
"website": "https://www.gnu.org/software/bash/",
|
|
8
9
|
"platforms": ["linux", "darwin", "win32"],
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"author": "Anysphere",
|
|
7
7
|
"website": "https://cursor.com",
|
|
8
8
|
"platforms": ["linux", "darwin", "win32"],
|
|
9
|
-
"iconUrl": "
|
|
9
|
+
"iconUrl": "/icons/tools/cursor-cli.svg",
|
|
10
10
|
"binary": "cursor-agent",
|
|
11
11
|
"packageManager": "curl",
|
|
12
12
|
"commands": {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"author": "Anysphere",
|
|
7
7
|
"website": "https://cursor.com",
|
|
8
8
|
"platforms": ["linux", "darwin", "win32"],
|
|
9
|
-
"iconUrl": "
|
|
9
|
+
"iconUrl": "/icons/tools/cursor.svg",
|
|
10
10
|
"binary": "cursor",
|
|
11
11
|
"packageManager": "manual",
|
|
12
12
|
"commands": {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"summary": "Friendly Interactive Shell with smart features",
|
|
4
4
|
"description": "Fish is a smart and user-friendly command line shell with features like autosuggestions, syntax highlighting, and web-based configuration.",
|
|
5
5
|
"tags": ["shell"],
|
|
6
|
+
"iconUrl": "/icons/tools/fish.svg",
|
|
6
7
|
"author": "Fish Shell Contributors",
|
|
7
8
|
"website": "https://fishshell.com/",
|
|
8
9
|
"platforms": ["linux", "darwin"],
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"summary": "Cross-platform task automation shell from Microsoft",
|
|
4
4
|
"description": "PowerShell is a cross-platform task automation solution with a command-line shell, scripting language, and configuration management framework.",
|
|
5
5
|
"tags": ["shell"],
|
|
6
|
+
"iconUrl": "/icons/tools/powershell.svg",
|
|
6
7
|
"author": "Microsoft",
|
|
7
8
|
"website": "https://github.com/PowerShell/PowerShell",
|
|
8
9
|
"platforms": ["linux", "darwin", "win32"],
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"summary": "Z shell - default shell on macOS since Catalina",
|
|
4
4
|
"description": "Zsh is a powerful shell with advanced features like improved tab completion, globbing, and plugin support via frameworks like Oh My Zsh.",
|
|
5
5
|
"tags": ["shell"],
|
|
6
|
+
"iconUrl": "/icons/tools/zsh.svg",
|
|
6
7
|
"author": "Paul Falstad",
|
|
7
8
|
"website": "https://www.zsh.org/",
|
|
8
9
|
"platforms": ["linux", "darwin"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-merge-review-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,sDAAsD,CAAC;AAI9D,KAAK,wBAAwB,GAAG,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAwDpE,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,
|
|
1
|
+
{"version":3,"file":"get-merge-review-data.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/get-merge-review-data.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,sDAAsD,CAAC;AAI9D,KAAK,wBAAwB,GAAG,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAwDpE,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA4I7F"}
|
|
@@ -130,7 +130,11 @@ export async function getMergeReviewData(featureId) {
|
|
|
130
130
|
isWithinRoot(resolvedEvidenceDir, resolvedHome)) {
|
|
131
131
|
const resolvedManifest = realpathOrNull(join(resolvedEvidenceDir, 'manifest.json'));
|
|
132
132
|
if (resolvedManifest && isWithinRoot(resolvedManifest, resolvedEvidenceDir)) {
|
|
133
|
-
//
|
|
133
|
+
// SECURITY: resolvedManifest validated by realpathOrNull + isWithinRoot
|
|
134
|
+
// containment on line 159. featureId flows through SHA-256 hash in
|
|
135
|
+
// computeEvidenceDir (hex-only output neutralizes injection). Double
|
|
136
|
+
// containment check: home dir → evidence dir → manifest. Alert
|
|
137
|
+
// js/path-injection #27 dismissed as false positive.
|
|
134
138
|
const raw = JSON.parse(readFileSync(resolvedManifest, 'utf-8'));
|
|
135
139
|
// Pass the UNRESOLVED evidenceDir so returned paths share the
|
|
136
140
|
// same root form the evidence route's prefix check expects.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AAmDA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"open-shell.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/app/actions/open-shell.ts"],"names":[],"mappings":"AAmDA,UAAU,cAAc;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgG9E"}
|
|
@@ -77,7 +77,11 @@ export async function openShell(input) {
|
|
|
77
77
|
// shell treats as a single literal argument to `cd`.
|
|
78
78
|
const escapedPath = shellEscapePosixPath(targetPath);
|
|
79
79
|
const command = config.openDirectory.replaceAll('{dir}', escapedPath);
|
|
80
|
-
//
|
|
80
|
+
// SECURITY: targetPath from realpathSync (must exist on disk); single-quote
|
|
81
|
+
// shell-escaped via shellEscapePosixPath; localhost-only server action.
|
|
82
|
+
// shell:true is required by tool configs using `cd {dir} && exec <tool>`.
|
|
83
|
+
// CodeQL flags this because it does not model custom sanitizer functions —
|
|
84
|
+
// alert js/command-line-injection #29 dismissed as false positive.
|
|
81
85
|
const child = spawn(command, [], {
|
|
82
86
|
detached: true,
|
|
83
87
|
stdio: 'ignore',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/web/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,6BAA6B,CAAC;AACrC,OAAO,2CAA2C,CAAC;AACnD,OAAO,eAAe,CAAC;AAyBvB,sFAAsF;AACtF,eAAO,MAAM,OAAO,kBAAkB,CAAC;AAEvC,eAAO,MAAM,QAAQ,EAAE,QAStB,CAAC;AAEF,wBAA8B,UAAU,CAAC,EACvC,QAAQ,GACT,EAAE,QAAQ,CAAC;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC,oDAkCD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cookies } from 'next/headers';
|
|
3
|
+
import { Inter } from 'next/font/google';
|
|
3
4
|
import '@xyflow/react/dist/base.css';
|
|
4
5
|
import '@cubone/react-file-manager/dist/style.css';
|
|
5
6
|
import './globals.css';
|
|
@@ -13,13 +14,25 @@ import { QueryProvider } from '../components/providers/query-provider.js';
|
|
|
13
14
|
import { I18nProvider } from '../components/providers/i18n-provider.js';
|
|
14
15
|
import { getLanguagePreference } from '../lib/language.js';
|
|
15
16
|
import { RouteAnnouncer } from '../components/common/route-announcer/route-announcer.js';
|
|
17
|
+
/*
|
|
18
|
+
* Inter as the primary brand font for editorial palette adoption.
|
|
19
|
+
* Loaded via next/font/google so it's self-hosted at build time
|
|
20
|
+
* (no runtime CDN fetch, aligns with ShipIT's offline-capable ethos).
|
|
21
|
+
* Exposed as --font-inter; globals.css wires it into --font-sans.
|
|
22
|
+
* See .scratchpad/plans/stitch-developer-portal-adaptation.md §2.1.
|
|
23
|
+
*/
|
|
24
|
+
const inter = Inter({
|
|
25
|
+
subsets: ['latin'],
|
|
26
|
+
display: 'swap',
|
|
27
|
+
variable: '--font-inter',
|
|
28
|
+
});
|
|
16
29
|
/** Force dynamic rendering for all pages since they depend on client-side context. */
|
|
17
30
|
export const dynamic = 'force-dynamic';
|
|
18
31
|
export const metadata = {
|
|
19
32
|
title: 'ShipIT AI',
|
|
20
33
|
description: 'Autonomous AI Native SDLC Platform - Automate the development cycle from idea to deploy',
|
|
21
34
|
icons: [
|
|
22
|
-
{ rel: 'icon', url: '/
|
|
35
|
+
{ rel: 'icon', url: '/favicon.svg', type: 'image/svg+xml' },
|
|
23
36
|
{ rel: 'icon', url: '/favicon-32x32.png', sizes: '32x32', type: 'image/png' },
|
|
24
37
|
{ rel: 'apple-touch-icon', url: '/apple-touch-icon.png', sizes: '180x180' },
|
|
25
38
|
],
|
|
@@ -32,7 +45,7 @@ export default async function RootLayout({ children, }) {
|
|
|
32
45
|
getFeatureFlags(),
|
|
33
46
|
getFabLayout(),
|
|
34
47
|
]);
|
|
35
|
-
return (_jsxs("html", { lang: language, dir: dir, suppressHydrationWarning: true, children: [_jsx("head", { children: _jsx("script", { dangerouslySetInnerHTML: {
|
|
48
|
+
return (_jsxs("html", { lang: language, dir: dir, className: inter.variable, suppressHydrationWarning: true, children: [_jsx("head", { children: _jsx("script", { dangerouslySetInnerHTML: {
|
|
36
49
|
__html: `(function(){try{var d=document.documentElement,t=localStorage.getItem('shipit-ai-theme'),s=window.matchMedia('(prefers-color-scheme: dark)').matches;if(t==='dark'||(t==='system'&&s)||(!t&&s)){d.classList.add('dark')}}catch(e){}})();`,
|
|
37
50
|
} }) }), _jsxs("body", { className: "min-h-screen antialiased", children: [_jsx(RouteAnnouncer, {}), _jsx(I18nProvider, { initialLanguage: language, children: _jsx(QueryProvider, { children: _jsx(FeatureFlagsProvider, { flags: flags, children: _jsx(FabLayoutProvider, { layout: fabLayout, children: _jsx(AppShell, { sidebarOpen: sidebarOpen, children: children }) }) }) }) }), _jsx(Toaster, { position: "bottom-center" })] })] }));
|
|
38
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,QAAA,MAAM,cAAc;;8EAWlB,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAa,EACb,qBAA6B,EAC7B,KAAgB,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,GACb,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"base-drawer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/base-drawer/base-drawer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBlE,OAAO,EAAmB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAGpF,QAAA,MAAM,cAAc;;8EAWlB,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,OAAO,cAAc,CAAC;IAC1E,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yGAAyG;IACzG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,OAAO,EACP,KAAa,EACb,qBAA6B,EAC7B,KAAgB,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,GACb,EAAE,eAAe,2CAqLjB"}
|
|
@@ -60,35 +60,72 @@ export function BaseDrawer({ open, onClose, modal = false, dismissOnOutsideClick
|
|
|
60
60
|
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
61
61
|
}, [open, modal, onClose]);
|
|
62
62
|
// Close when clicking outside the drawer panel (no overlay needed — canvas stays draggable).
|
|
63
|
-
//
|
|
63
|
+
//
|
|
64
|
+
// Uses `click` (not `pointerdown`) as the trigger so canvas drags don't close the drawer,
|
|
65
|
+
// but tracks the `pointerdown` target separately. When the user presses the mouse on an
|
|
66
|
+
// in-drawer control that opens a portaled popover (Radix Select, DropdownMenu, Popover),
|
|
67
|
+
// Radix calls preventDefault on pointerdown and opens its portal over the trigger. By
|
|
68
|
+
// the time pointerup fires, the cursor is over the portal overlay, and Chrome computes
|
|
69
|
+
// the `click` event's target as the common ancestor of pointerdown/pointerup — which is
|
|
70
|
+
// `<body>` because the portal is detached from the drawer subtree. Without tracking the
|
|
71
|
+
// pointerdown origin we would misread this as an outside click and close the drawer.
|
|
64
72
|
useEffect(() => {
|
|
65
73
|
if (!open || modal)
|
|
66
74
|
return;
|
|
75
|
+
// When dismissOnOutsideClick is false (default), also respect data-no-drawer-close guards.
|
|
76
|
+
const ignoreSelector = dismissOnOutsideClick
|
|
77
|
+
? '[role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]'
|
|
78
|
+
: '[data-no-drawer-close], [role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]';
|
|
79
|
+
/** True when `el` is inside the drawer or an explicitly-ignored overlay. */
|
|
80
|
+
const isInsideOrIgnored = (el) => {
|
|
81
|
+
if (!el)
|
|
82
|
+
return false;
|
|
83
|
+
if (contentRef.current?.contains(el))
|
|
84
|
+
return true;
|
|
85
|
+
if (el.closest(ignoreSelector))
|
|
86
|
+
return true;
|
|
87
|
+
return false;
|
|
88
|
+
};
|
|
89
|
+
// Track the most recent pointerdown target so the click handler can check
|
|
90
|
+
// where the gesture ORIGINATED, not just where it landed.
|
|
91
|
+
let pointerDownOrigin = null;
|
|
92
|
+
const handlePointerDown = (e) => {
|
|
93
|
+
pointerDownOrigin = e.target;
|
|
94
|
+
};
|
|
67
95
|
const handleClick = (e) => {
|
|
96
|
+
const origin = pointerDownOrigin;
|
|
97
|
+
// Clear for the next gesture regardless of outcome.
|
|
98
|
+
pointerDownOrigin = null;
|
|
68
99
|
const target = e.target;
|
|
69
100
|
// If the clicked element was unmounted by React before the event reached
|
|
70
101
|
// the document (e.g. a "Next" button removed on the last step), it is no
|
|
71
102
|
// longer in the DOM tree — treat it as an internal click, not an outside one.
|
|
72
103
|
if (!document.body.contains(target))
|
|
73
104
|
return;
|
|
74
|
-
|
|
105
|
+
// Click landed inside the drawer or a protected overlay.
|
|
106
|
+
if (isInsideOrIgnored(target))
|
|
75
107
|
return;
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
: '[data-no-drawer-close], [role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]';
|
|
81
|
-
if (target.closest(ignoreSelector))
|
|
108
|
+
// Click landed outside, but the gesture ORIGINATED inside the drawer or a
|
|
109
|
+
// protected overlay (e.g. a Radix Select trigger whose portal stole the
|
|
110
|
+
// pointerup target). This is not a real outside click — bail out.
|
|
111
|
+
if (isInsideOrIgnored(origin))
|
|
82
112
|
return;
|
|
83
113
|
onClose();
|
|
84
114
|
};
|
|
115
|
+
document.addEventListener('pointerdown', handlePointerDown, true);
|
|
85
116
|
document.addEventListener('click', handleClick);
|
|
86
|
-
return () =>
|
|
117
|
+
return () => {
|
|
118
|
+
document.removeEventListener('pointerdown', handlePointerDown, true);
|
|
119
|
+
document.removeEventListener('click', handleClick);
|
|
120
|
+
};
|
|
87
121
|
}, [open, modal, onClose, dismissOnOutsideClick]);
|
|
88
122
|
return (_jsxs(Drawer, { direction: drawerDirection, modal: modal, handleOnly: true, open: open, onOpenChange: (isOpen) => {
|
|
89
123
|
if (!isOpen)
|
|
90
124
|
onClose();
|
|
91
|
-
}, children: [modal ? _jsx(DrawerOverlay, {}) : null, _jsxs(DrawerContent, { ref: contentRef, direction: drawerDirection, showCloseButton: false, className: cn(drawerVariants({ size }),
|
|
125
|
+
}, children: [modal ? _jsx(DrawerOverlay, {}) : null, _jsxs(DrawerContent, { ref: contentRef, direction: drawerDirection, showCloseButton: false, className: cn(drawerVariants({ size }),
|
|
126
|
+
// Editorial glass treatment: semi-transparent with backdrop blur in BOTH modes
|
|
127
|
+
// for polished depth. Light mode uses white/80, dark mode uses card surface/85.
|
|
128
|
+
'bg-white/80 backdrop-blur-xl dark:bg-[#1e293bd9]', className), "data-testid": testId, onInteractOutside: modal ? undefined : (e) => e.preventDefault(), ...(!modal ? { 'aria-modal': true } : {}), children: [_jsx(DrawerTitle, { asChild: true, children: _jsx("span", { className: "sr-only", children: title }) }), _jsx(DrawerDescription, { asChild: true, children: _jsx("span", { className: "sr-only", children: title }) }), _jsx(FocusScope.Root, { trapped: !modal, loop: !modal, asChild: true, onMountAutoFocus: handleMountAutoFocus, onUnmountAutoFocus: handleUnmountAutoFocus, children: _jsxs("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsxs("button", { type: "button", "aria-label": "Close", onClick: onClose, className: "ring-offset-background focus:ring-ring absolute end-3 top-2 z-50 rounded-sm p-1 opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden", "data-testid": testId ? `${testId}-close-button` : undefined, children: [_jsx(XIcon, { className: "size-4" }), _jsx("span", { className: "sr-only", children: "Close" })] }), header ? _jsx(DrawerHeader, { className: "shrink-0", children: header }) : null, header ? _jsx(Separator, {}) : null, featureFlags.envDeploy && deployTarget ? (_jsx(DeployBar, { deployTarget: deployTarget })) : null, _jsx("div", { className: "flex min-h-0 flex-1 flex-col overflow-hidden", children: children }), footer ? _jsx(DrawerFooter, { className: "shrink-0", children: footer }) : null] }) })] })] }));
|
|
92
129
|
}
|
|
93
130
|
function DeployBar({ deployTarget }) {
|
|
94
131
|
const deployAction = useDeployAction(deployTarget);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export interface PageHeaderProps {
|
|
2
2
|
title: string;
|
|
3
3
|
description?: string;
|
|
4
|
+
/** Optional eyebrow label above the title (e.g., "DEVELOPER PORTAL") */
|
|
5
|
+
eyebrow?: string;
|
|
4
6
|
children?: React.ReactNode;
|
|
5
7
|
className?: string;
|
|
6
8
|
}
|
|
7
|
-
export declare function PageHeader({ title, description, children, className }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function PageHeader({ title, description, eyebrow, children, className }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
8
10
|
//# sourceMappingURL=page-header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/page-header/page-header.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"page-header.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/page-header/page-header.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAQD,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,2CAmB/F"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from '../../../lib/utils.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/*
|
|
4
|
+
* PageHeader — Stitch editorial page header pattern.
|
|
5
|
+
* Renders: tiny uppercase eyebrow → large bold title → muted description.
|
|
6
|
+
* Matches the tools-page-client.tsx header treatment.
|
|
7
|
+
* See .scratchpad/stitch/shipit-developer-portal/src/App.tsx:161
|
|
8
|
+
*/
|
|
9
|
+
export function PageHeader({ title, description, eyebrow, children, className }) {
|
|
10
|
+
return (_jsxs("header", { className: cn('flex items-center justify-between gap-4', className), children: [_jsxs("div", { className: "space-y-1.5", children: [eyebrow ? (_jsx("span", { className: "text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase", children: eyebrow })) : null, _jsx("div", { className: "flex items-baseline gap-3", children: _jsx("h1", { className: "text-foreground text-3xl font-black tracking-tight", children: title }) }), description ? (_jsx("p", { className: "text-muted-foreground text-sm font-medium", children: description })) : null] }), children ? _jsx("div", { "data-slot": "actions", children: children }) : null] }));
|
|
5
11
|
}
|
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":"AAqCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,
|
|
1
|
+
{"version":3,"file":"repository-node.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/repository-node/repository-node.tsx"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AASnE,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,2CA+cA"}
|
|
@@ -88,7 +88,12 @@ export function RepositoryNode({ data, selected, }) {
|
|
|
88
88
|
}, className: "nodrag relative cursor-pointer text-violet-500 hover:text-violet-600 dark:text-violet-400 dark:hover:text-violet-300", children: [_jsx(MessageSquare, { className: "h-3 w-3" }), _jsx(ChatDotIndicator, { status: chatTurnStatus })] }) }), _jsx(TooltipContent, { children: t('repositoryNode.chatWithAgent') })] }) }), _jsx(FeatureSessionsDropdown, { repositoryPath: data.repositoryPath, includeWorktrees: true, onCreateFromSession: handleCreateFromSession })] })) : null, data.onAdd ? _jsx("div", { className: "ms-1.5" }) : null, data.onAdd ? (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("button", { "aria-label": t('repositoryNode.newFeature'), "data-testid": "repository-node-add-button", onClick: (e) => {
|
|
89
89
|
e.stopPropagation();
|
|
90
90
|
data.onAdd?.();
|
|
91
|
-
}, className: cn(
|
|
91
|
+
}, className: cn(
|
|
92
|
+
// Editorial palette: primary sky blue in both light and dark
|
|
93
|
+
// (was previously dark:bg-amber-500 which clashes with the
|
|
94
|
+
// Stitch editorial dark palette). Uses --color-primary via
|
|
95
|
+
// bg-primary so any future primary shifts propagate here.
|
|
96
|
+
'bg-primary hover:bg-primary/90 flex h-6 shrink-0 cursor-pointer items-center gap-0.5 rounded px-1.5 text-[11px] font-bold text-white transition-colors', data.pulseAdd && 'animate-pulse-cta'), children: [_jsx(Plus, { className: "h-3 w-3" }), _jsx("span", { className: "translate-y-px", children: t('repositoryNode.new') })] }) }), _jsx(TooltipContent, { side: "top", children: t('repositoryNode.newFeature') })] }) })) : null] })] }), data.branch ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-info", className: "text-muted-foreground border-border/50 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" }), t('repositoryNode.behind', { count: data.behindCount })] })) : null] }) }), data.commitMessage ? (_jsx("div", { "data-testid": "repository-node-commit-info", className: "text-muted-foreground border-border/50 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 ms-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' ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-not-repo", className: "text-muted-foreground border-border/50 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-border/50 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: t('repositoryNode.notAGitRepository') })] }) })] })) : data.gitInfoStatus !== 'ready' ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-testid": "repository-node-git-loading", className: "border-border/50 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-border/50 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-border/50 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: "me-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: t('repositoryNode.starting') }))] })) : (_jsxs("span", { className: "text-muted-foreground inline-flex items-baseline gap-2", children: [_jsx("span", { children: t('repositoryNode.run') }), _jsx("span", { className: "text-muted-foreground/50 text-[10px]", children: t('repositoryNode.startLocalEnvironment') })] })), _jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("span", { className: cn('ms-auto flex items-center', !isDeploymentActive &&
|
|
92
97
|
!deployAction.deployError &&
|
|
93
98
|
'[&_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
|
|
94
99
|
? t('repositoryNode.retry')
|
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
export interface ShipitAiLogoProps {
|
|
2
2
|
className?: string;
|
|
3
|
+
/** Icon size in px. Default 24. */
|
|
3
4
|
size?: number;
|
|
4
5
|
variant?: 'default' | 'dev';
|
|
6
|
+
/**
|
|
7
|
+
* When true, the full brandmark (icon + "SHIPIT AI" + "ENTERPRISE PORTAL"
|
|
8
|
+
* eyebrow) renders. When false, only the icon renders — used for the
|
|
9
|
+
* collapsed sidebar state. Mirrors Stitch's Logo `isOpen` prop.
|
|
10
|
+
* See .scratchpad/stitch/shipit-developer-portal/src/components/Logo.tsx:9
|
|
11
|
+
*/
|
|
12
|
+
isOpen?: boolean;
|
|
5
13
|
}
|
|
6
|
-
export declare function ShipitAiLogo({ className, size, variant }: ShipitAiLogoProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function ShipitAiLogo({ className, size, variant, isOpen, }: ShipitAiLogoProps): import("react/jsx-runtime").JSX.Element;
|
|
7
15
|
//# sourceMappingURL=shipit-ai-logo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shipit-ai-logo.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shipit-ai-logo.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/shipit-ai-logo/shipit-ai-logo.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAWD,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,IAAS,EACT,OAAmB,EACnB,MAAa,GACd,EAAE,iBAAiB,2CAoEnB"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import Image from 'next/image';
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
2
|
import { cn } from '../../../lib/utils.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
/*
|
|
4
|
+
* ShipIT AI logo — Stitch editorial box/neural-circuit design.
|
|
5
|
+
* Inline SVG so `currentColor` resolves from the parent's text color,
|
|
6
|
+
* which means the box strokes automatically adapt to light/dark mode
|
|
7
|
+
* via the sidebar's --sidebar-foreground CSS variable. The neural
|
|
8
|
+
* circuit paths use the editorial sky blue via the `text-primary` class.
|
|
9
|
+
*
|
|
10
|
+
* Ported from .scratchpad/stitch/shipit-developer-portal/src/components/Logo.tsx:9-77
|
|
11
|
+
*/
|
|
12
|
+
export function ShipitAiLogo({ className, size = 24, variant = 'default', isOpen = true, }) {
|
|
13
|
+
return (_jsxs("div", { className: cn('flex items-center gap-3', className), children: [_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", width: size, height: size, className: cn('shrink-0', variant === 'dev' && 'opacity-80'), "aria-hidden": true, children: [_jsx("path", { d: "M21 7.5L12 3L3 7.5V16.5L12 21L21 16.5V7.5Z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M3 7.5L12 12L21 7.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M12 12V21", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsxs("g", { className: "text-primary", children: [_jsx("path", { d: "M12 12C12 12 15 9 15 6C15 3 12 2 12 2", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", className: "animate-pulse" }), _jsx("path", { d: "M12 12C12 12 9 9 9 6C9 3 12 2 12 2", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", className: "animate-pulse", style: { animationDelay: '0.5s' } }), _jsx("circle", { cx: "15", cy: "6", r: "1", fill: "currentColor" }), _jsx("circle", { cx: "9", cy: "6", r: "1", fill: "currentColor" }), _jsx("circle", { cx: "12", cy: "2", r: "1", fill: "currentColor" })] })] }), isOpen ? (_jsxs("div", { className: "flex flex-col leading-none", children: [_jsxs("span", { className: "text-foreground flex items-center gap-1 text-xl font-black tracking-tighter", children: ["SHIPIT ", _jsx("span", { className: "text-primary", children: "AI" })] }), _jsx("span", { className: "mt-0.5 text-[8px] font-bold tracking-[0.2em] text-slate-400 uppercase", children: "Enterprise Portal" })] })) : null] }));
|
|
8
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-collapse-toggle.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,
|
|
1
|
+
{"version":3,"file":"sidebar-collapse-toggle.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-collapse-toggle/sidebar-collapse-toggle.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,SAAS,EAAE,EAAE,0BAA0B,2CAmC9E"}
|
|
@@ -20,5 +20,9 @@ export function SidebarCollapseToggle({ className }) {
|
|
|
20
20
|
}
|
|
21
21
|
toggleSidebar();
|
|
22
22
|
};
|
|
23
|
-
return (_jsx(
|
|
23
|
+
return (_jsx(Button, { "data-testid": "sidebar-collapse-toggle", variant: "ghost", size: "icon", className: cn(
|
|
24
|
+
// Generous hit area: full sidebar-menu-button size in both expanded
|
|
25
|
+
// and collapsed modes so the toggle is easy to click regardless of
|
|
26
|
+
// sidebar state. The icon stays centered via flex.
|
|
27
|
+
'flex cursor-pointer items-center justify-center', 'size-8 group-data-[collapsible=icon]:size-8!', className), onClick: handleClick, "aria-label": label, children: _jsx(PanelLeft, { className: "size-4" }) }));
|
|
24
28
|
}
|
package/dist/src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar-nav-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"sidebar-nav-item.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/common/sidebar-nav-item/sidebar-nav-item.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiBD,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAc,EAAE,EAAE,mBAAmB,2CAa9F"}
|
|
@@ -3,6 +3,21 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import Link from 'next/link';
|
|
4
4
|
import { SidebarMenuItem, SidebarMenuButton } from '../../ui/sidebar.js';
|
|
5
5
|
import { useSoundAction } from '../../../hooks/use-sound-action.js';
|
|
6
|
+
/*
|
|
7
|
+
* Sidebar nav item with Stitch editorial active state.
|
|
8
|
+
* Active state styling is applied via attribute selectors on the
|
|
9
|
+
* data-active attribute that SidebarMenuButton writes when isActive=true.
|
|
10
|
+
* Using an attribute selector avoids a hydration mismatch: the `active`
|
|
11
|
+
* prop flows from usePathname() which can return different values during
|
|
12
|
+
* SSR vs the first client render, so any conditional className based on
|
|
13
|
+
* it would not match between server and client. data-active is written
|
|
14
|
+
* once after hydration by the shadcn primitive, so CSS targeting it is
|
|
15
|
+
* stable across both trees.
|
|
16
|
+
*
|
|
17
|
+
* The editorial active styling (text-primary, ring, subtle shadow,
|
|
18
|
+
* font-semibold) is declared in globals.css under the
|
|
19
|
+
* [data-sidebar=menu-button][data-active=true] selector.
|
|
20
|
+
*/
|
|
6
21
|
export function SidebarNavItem({ icon: Icon, label, href, active = false }) {
|
|
7
22
|
const navigateSound = useSoundAction('navigate');
|
|
8
23
|
return (_jsx(SidebarMenuItem, { "data-testid": "sidebar-nav-item", children: _jsx(SidebarMenuButton, { asChild: true, isActive: active, tooltip: label, children: _jsxs(Link, { href: href, onClick: () => navigateSound.play(), children: [_jsx(Icon, {}), _jsx("span", { children: label })] }) }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatSheet.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/chat/ChatSheet.tsx"],"names":[],"mappings":"AA4DA,wBAAgB,eAAe,4CAua9B"}
|
|
@@ -5,6 +5,7 @@ import { useTranslation } from 'react-i18next';
|
|
|
5
5
|
import { MessageSquare, X, Bot, GripVertical, Maximize2, Minimize2 } from 'lucide-react';
|
|
6
6
|
import { cn } from '../../../lib/utils.js';
|
|
7
7
|
import { Button } from '../../ui/button.js';
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from '../../ui/tooltip.js';
|
|
8
9
|
import { ChatTab } from './ChatTab.js';
|
|
9
10
|
import { ChatDotIndicator } from './ChatDotIndicator.js';
|
|
10
11
|
import { useTurnStatus } from '../../../hooks/turn-statuses-provider.js';
|
|
@@ -259,16 +260,28 @@ export function GlobalChatPopup() {
|
|
|
259
260
|
};
|
|
260
261
|
document.addEventListener('mousemove', onMove);
|
|
261
262
|
document.addEventListener('mouseup', onUp);
|
|
262
|
-
}, className: "absolute end-0 bottom-0 z-10 h-4 w-4 cursor-se-resize" })) : null] })) : null,
|
|
263
|
-
|
|
264
|
-
|
|
263
|
+
}, className: "absolute end-0 bottom-0 z-10 h-4 w-4 cursor-se-resize" })) : null] })) : null, _jsx(ChatFabWrapper, { swapPosition: swapPosition, sidebarState: sidebarState, isMaximized: isMaximized, children: _jsxs(Tooltip, { ...(isOpen ? { open: false } : {}), children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs(Button, { size: "icon", onClick: toggle, "data-chat-fab": "true", "data-chat-open": isOpen ? 'true' : 'false', "aria-label": t('chat.shipitAiChat'), className: cn(
|
|
264
|
+
// Stitch editorial refresh: use the primary sky token instead of the legacy
|
|
265
|
+
// violet accent so the Chat FAB matches the rest of the editorial palette.
|
|
266
|
+
// (bg-primary is #2563eb light / #3b82f6 dark)
|
|
267
|
+
//
|
|
268
|
+
// className here is a STATIC string literal — NO conditional branches.
|
|
269
|
+
// The open-state visual lift (ring-2) is applied via a CSS attribute
|
|
270
|
+
// selector on [data-chat-fab="true"][data-chat-open="true"] in globals.css.
|
|
271
|
+
// Keeping the className pure and static prevents hydration-mismatch
|
|
272
|
+
// drift between SSR and client HMR bundles during dev.
|
|
273
|
+
//
|
|
274
|
+
// Hover uses scale + brightness (NOT translate) so the button stays
|
|
275
|
+
// centered under the cursor and does not break Radix tooltip hover
|
|
276
|
+
// tracking via flapping pointer events.
|
|
277
|
+
'bg-primary text-primary-foreground editorial-shadow relative h-14 w-14 rounded-full shadow-lg transition-all duration-200 hover:scale-[1.05] hover:shadow-xl hover:brightness-110 active:scale-95'), children: [_jsx(MessageSquare, { className: cn('absolute h-7 w-7 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100') }), _jsx(X, { className: cn('absolute h-6 w-6 stroke-[2.5] transition-all duration-200', isOpen ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0') }), !isOpen && (_jsx(ChatDotIndicator, { status: globalChatTurnStatus, className: "end-0 top-0" }))] }) }), _jsxs(TooltipContent, { side: "top", sideOffset: 12, className: "text-center", children: [_jsx("p", { className: "text-xs font-medium whitespace-nowrap", children: t('chat.shipitAiChat') }), _jsxs("p", { className: "mt-0.5 flex items-center justify-center gap-1 text-[10px] opacity-60", children: [_jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u2318" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "\u21E7" }), _jsx("kbd", { className: "bg-background/15 rounded px-1 py-px font-mono", children: "K" })] })] })] }) })] }));
|
|
265
278
|
}
|
|
266
279
|
/** Wrapper for the Chat FAB that handles position swapping. */
|
|
267
280
|
function ChatFabWrapper({ swapPosition, sidebarState, isMaximized, children, }) {
|
|
268
281
|
const { i18n } = useTranslation('web');
|
|
269
282
|
const isRtl = i18n.dir() === 'rtl';
|
|
270
283
|
if (!swapPosition) {
|
|
271
|
-
return (_jsx("div", { className: cn('
|
|
284
|
+
return (_jsx("div", { className: cn('fixed end-8 bottom-6 z-30', isMaximized && 'hidden'), children: children }));
|
|
272
285
|
}
|
|
273
286
|
// Swapped: chat FAB moves to start side, tracking sidebar width
|
|
274
287
|
const sidebarOffset = sidebarState === 'expanded'
|
|
@@ -277,5 +290,5 @@ function ChatFabWrapper({ swapPosition, sidebarState, isMaximized, children, })
|
|
|
277
290
|
const positionStyle = isRtl
|
|
278
291
|
? { right: sidebarOffset, transition: 'right 200ms ease-in-out' }
|
|
279
292
|
: { left: sidebarOffset, transition: 'left 200ms ease-in-out' };
|
|
280
|
-
return (_jsx("div", { className: cn('
|
|
293
|
+
return (_jsx("div", { className: cn('fixed bottom-6 z-30', isMaximized && 'hidden'), style: positionStyle, children: children }));
|
|
281
294
|
}
|
|
@@ -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":"AA0BA,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,
|
|
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":"AA0BA,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,kDAwM9B"}
|
package/dist/src/presentation/web/components/features/control-center/control-center-empty-state.js
CHANGED
|
@@ -75,7 +75,7 @@ export function ControlCenterEmptyState({ onRepositorySelect, className, }) {
|
|
|
75
75
|
}, []);
|
|
76
76
|
if (agentReady === null)
|
|
77
77
|
return null;
|
|
78
|
-
return (_jsxs("div", { "data-testid": "control-center-empty-state", className: cn('relative flex h-full w-full flex-col items-center justify-center px-8', className), children: [!agentReady ? (_jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (_jsxs("div", { className: "animate-in fade-in flex w-full max-w-
|
|
78
|
+
return (_jsxs("div", { "data-testid": "control-center-empty-state", className: cn('relative flex h-full w-full flex-col items-center justify-center px-8', className), children: [!agentReady ? (_jsx(WelcomeAgentSetup, { onComplete: handleAgentSetupComplete })) : (_jsxs("div", { className: "animate-in fade-in bg-card editorial-shadow flex w-full max-w-lg flex-col items-center rounded-2xl border border-slate-200/50 p-10 duration-300 dark:border-slate-700/50", children: [_jsx("h1", { className: "text-foreground text-center text-4xl font-bold tracking-tight", children: t('emptyState.addProject') }), _jsxs("p", { className: "text-muted-foreground mt-3 text-center text-base leading-relaxed", children: [t('emptyState.addProjectDescription'), _jsx("br", {}), t('emptyState.addProjectDescriptionLine2')] }), _jsxs("div", { className: "mt-8 flex w-full flex-col gap-3", children: [_jsx(AgentAuthBanner, { status: authStatus, onRetry: handleRetryAuth }), _jsx(ToolStatusRow, { label: t('emptyState.git'), status: toolStatus?.git ?? null, missingHint: t('emptyState.gitRequired') }), _jsx(ToolStatusRow, { label: t('emptyState.githubCli'), status: toolStatus?.gh ?? null, missingHint: t('emptyState.githubCliRequired') })] }), _jsxs("button", { type: "button", "data-testid": "empty-state-add-repository", onClick: handlePickerClick, disabled: loading, className: "bg-primary text-primary-foreground hover:bg-primary/90 mt-10 flex w-full cursor-pointer items-center justify-center gap-2.5 rounded-xl px-6 py-4 text-base font-bold tracking-wide shadow-lg transition-all duration-200 hover:-translate-y-0.5 hover:shadow-xl active:scale-[0.98] disabled:cursor-wait disabled:opacity-50", children: [loading ? (_jsx(LoaderCircle, { className: "h-5 w-5 animate-spin" })) : (_jsx(FolderOpen, { className: "h-5 w-5" })), loading ? t('emptyState.opening') : t('emptyState.chooseFolder')] }), _jsx("p", { className: "text-muted-foreground mt-3 text-center text-sm", children: t('emptyState.folderHint') })] })), agentReady ? (_jsxs("div", { className: "absolute bottom-8 flex flex-col items-center", style: {
|
|
79
79
|
animationDelay: '400ms',
|
|
80
80
|
animationDuration: '600ms',
|
|
81
81
|
animationFillMode: 'both',
|
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":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOvF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,qCAAqC,CAAC;AAGlG,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,kBAAkB,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAChE,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,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAID,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,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":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAOvF,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,qCAAqC,CAAC;AAGlG,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,kBAAkB,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAChE,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,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAID,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,UAAU,GACX,EAAE,mBAAmB,2CA6IrB"}
|
|
@@ -71,5 +71,9 @@ export function FeaturesCanvas({ nodes, edges, selectedFeatureId, selectedReposi
|
|
|
71
71
|
}, [isEmpty]);
|
|
72
72
|
const fallbackEmptyState = isEmpty && !emptyState ? (_jsx(EmptyState, { title: t('canvas.noFeatures'), description: t('canvas.noFeaturesDescription'), action: _jsxs(Button, { onClick: onAddFeature, children: [_jsx(Plus, { className: "me-2 h-4 w-4" }), t('canvas.newFeature')] }) })) : null;
|
|
73
73
|
const overlayContent = emptyState ?? fallbackEmptyState;
|
|
74
|
-
return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true,
|
|
74
|
+
return (_jsxs("div", { "data-testid": isEmpty ? 'features-canvas-empty' : 'features-canvas', "data-no-drawer-close": true,
|
|
75
|
+
// Canvas background uses --color-background in both modes so it inherits
|
|
76
|
+
// the editorial surface (#f8fafc light / #0b0f19 dark). Previously
|
|
77
|
+
// hardcoded #f6f7f8 in light mode only.
|
|
78
|
+
className: "bg-background pointer-events-auto relative h-full w-full", 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 }, className: "[&_.react-flow__pane]:!cursor-default", children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 24, size: 1, color: "#b8bcc4", className: "dark:[&_circle]:!fill-white/[0.1]" }), !isEmpty && toolbar ? (_jsx(Panel, { position: "top-right", className: "!me-3 !mt-3", children: toolbar })) : null] }), 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] }));
|
|
75
79
|
}
|
package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings-page-client.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/settings-page-client.tsx"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EACV,QAAQ,EAGT,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AA6BzE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;CACpC;AAoDD,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,EAAE,uBAAuB,2CA2+BzB"}
|