@shepai/cli 1.77.1-pr244.c979f34 → 1.77.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apis/json-schema/Settings.yaml +0 -3
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.d.ts.map +1 -1
- package/dist/packages/core/src/domain/factories/settings-defaults.factory.js +2 -7
- package/dist/packages/core/src/domain/generated/output.d.ts +0 -21
- package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/container.js +0 -6
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts +0 -6
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/settings.mapper.js +0 -17
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations.js +0 -27
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/repositories/sqlite-settings.repository.js +3 -13
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +2 -1
- package/dist/packages/core/src/infrastructure/services/settings.service.d.ts +0 -10
- package/dist/packages/core/src/infrastructure/services/settings.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/settings.service.js +0 -15
- package/dist/src/presentation/web/app/layout.d.ts.map +1 -1
- package/dist/src/presentation/web/app/layout.js +1 -3
- 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 +1 -2
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +1 -2
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.js +1 -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 +1 -2
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.js +1 -2
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-shell/app-shell.js +1 -3
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts +1 -3
- 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 +4 -3
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.js +0 -4
- package/dist/src/presentation/web/lib/feature-flags.d.ts +2 -14
- package/dist/src/presentation/web/lib/feature-flags.d.ts.map +1 -1
- package/dist/src/presentation/web/lib/feature-flags.js +4 -39
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +0 -1
- package/web/.next/build-manifest.json +5 -5
- package/web/.next/cache/.previewinfo +1 -1
- package/web/.next/cache/.rscinfo +1 -1
- package/web/.next/cache/.tsbuildinfo +1 -1
- package/web/.next/cache/config.json +3 -3
- package/web/.next/fallback-build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +1 -1
- package/web/.next/required-server-files.json +1 -1
- package/web/.next/routes-manifest.json +0 -6
- package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +16 -16
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js +8 -9
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +8 -9
- 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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +8 -9
- 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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +16 -16
- package/web/.next/server/app/(dashboard)/create/page.js +8 -9
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +19 -19
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +8 -9
- 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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/page.js +8 -9
- 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/build-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +8 -9
- 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/page/build-manifest.json +3 -3
- package/web/.next/server/app/_global-error/page.js +3 -4
- package/web/.next/server/app/_global-error/page.js.nft.json +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/build-manifest.json +3 -3
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js +8 -10
- 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/skills/page/build-manifest.json +3 -3
- package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/skills/page.js +9 -12
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/build-manifest.json +3 -3
- package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/tools/page.js +8 -10
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/build-manifest.json +3 -3
- package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/version/page.js +8 -9
- 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/app-paths-manifest.json +0 -1
- package/web/.next/server/chunks/403f9_next_dist_esm_build_templates_app-route_4d623b8e.js.map +1 -1
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_8eeee4db._.js → server/chunks/ssr/403f9_next_dist_6c821c12._.js} +3 -3
- package/web/.next/server/chunks/ssr/{403f9_next_dist_190bdc35._.js.map → 403f9_next_dist_6c821c12._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_builtin_global-error_5fefc4d7.js +3 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_client_components_builtin_global-error_5fefc4d7.js.map +1 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_d738ab66._.js +3 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_d738ab66._.js.map +1 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_0f115902.js +4 -0
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_0f115902.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_16235e5e._.js → server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_8e8822d6.js} +3 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_8e8822d6.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/_f4d222d6._.js → server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_9d039634.js} +3 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_9d039634.js.map +1 -0
- package/web/.next/server/chunks/ssr/{403f9_next_dist_esm_build_templates_app-page_2eacac96.js → 403f9_next_dist_esm_build_templates_app-page_bec3d8d3.js} +3 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_bec3d8d3.js.map +1 -0
- package/web/.next/server/chunks/ssr/{403f9_next_dist_esm_build_templates_app-page_46d6bf1b.js → 403f9_next_dist_esm_build_templates_app-page_c27615b6.js} +3 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c27615b6.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c9978986.js → server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d302115b.js} +3 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d302115b.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_6c70ecca.js → server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_dbf21e04.js} +3 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_dbf21e04.js.map +1 -0
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js.map +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__c3c963c6._.js.map → [root-of-the-server]__2018e25f._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__357d99f9._.js.map → [root-of-the-server]__249c74f6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__3b4af5ae._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__c9777776._.js.map → [root-of-the-server]__3b4af5ae._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__11033878._.js.map → [root-of-the-server]__6b17a22d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +4 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6ee2450e._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__23b5ca2c._.js.map → [root-of-the-server]__6ee2450e._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__fdc75809._.js.map → [root-of-the-server]__804c006d._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__80e5bed2._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8a947500._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__0880ff0e._.js.map → [root-of-the-server]__8a947500._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c18f84a4._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__5edfc56b._.js.map → [root-of-the-server]__c18f84a4._.js.map} +1 -1
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__09af7f56._.js → server/chunks/ssr/[root-of-the-server]__c37779e6._.js} +2 -2
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__09af7f56._.js.map → [root-of-the-server]__c37779e6._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fa87595c._.js +3 -0
- package/web/.next/server/chunks/ssr/{[root-of-the-server]__8c88ef55._.js.map → [root-of-the-server]__fa87595c._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_07c2a32a._.js +9 -0
- package/web/.next/server/chunks/ssr/_07c2a32a._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e9d6bf7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_88c4dab8._.js → _3197d5cb._.js} +2 -2
- package/web/.next/server/chunks/ssr/_3197d5cb._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
- package/web/.next/server/chunks/ssr/_380c6567._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
- package/web/.next/server/chunks/ssr/_44cce4e0._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_5ee4f5a7._.js +7 -0
- package/web/.next/server/chunks/ssr/_5ee4f5a7._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
- package/web/.next/server/chunks/ssr/_61351ed3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_6640df4c._.js +6 -0
- package/web/.next/server/chunks/ssr/_6640df4c._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_6e08ce21._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
- package/web/.next/server/chunks/ssr/_8400c8bb._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_ed11dcd6._.js → _884ddade._.js} +3 -3
- package/web/.next/server/chunks/ssr/{403f9_next_dist_esm_build_templates_app-page_d82f78f0.js.map → _884ddade._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_9f940437._.js +3 -0
- package/web/.next/server/chunks/ssr/_9f940437._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_6887cba3._.js → _ad8a094f._.js} +3 -3
- package/web/.next/server/chunks/ssr/_ad8a094f._.js.map +1 -0
- package/web/.next/{standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_190bdc35._.js → server/chunks/ssr/_dc379243._.js} +3 -3
- package/web/.next/server/chunks/ssr/_dc379243._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_e806976d._.js +3 -0
- package/web/.next/server/chunks/ssr/_e806976d._.js.map +1 -0
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +2 -2
- package/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +13 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js.map +1 -0
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_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/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_tabs_tsx_b226ea9b._.js +3 -0
- package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_tabs_tsx_b226ea9b._.js.map +1 -0
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/500.html +2 -2
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +22 -59
- package/web/.next/standalone/src/presentation/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/src/presentation/web/.next/app-path-routes-manifest.json +0 -1
- package/web/.next/standalone/src/presentation/web/.next/build-manifest.json +5 -5
- package/web/.next/standalone/src/presentation/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/required-server-files.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/routes-manifest.json +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +16 -16
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js +8 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +19 -19
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +8 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +8 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +16 -16
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js +8 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +19 -19
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +8 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js +8 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +14 -14
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +8 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js +3 -4
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js +8 -10
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js +9 -12
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js +8 -10
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/build-manifest.json +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js +8 -9
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app-paths-manifest.json +0 -1
- package/web/.next/{server/chunks/ssr/_8eeee4db._.js → standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_6c821c12._.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_client_components_builtin_global-error_5fefc4d7.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_d738ab66._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_0f115902.js +4 -0
- package/web/.next/{server/chunks/ssr/_16235e5e._.js → standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_8e8822d6.js} +3 -3
- package/web/.next/{server/chunks/ssr/_f4d222d6._.js → standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_9d039634.js} +3 -3
- package/web/.next/{server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_54b1e179.js → standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_bec3d8d3.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{403f9_next_dist_esm_build_templates_app-page_46d6bf1b.js → 403f9_next_dist_esm_build_templates_app-page_c27615b6.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{403f9_next_dist_esm_build_templates_app-page_ce6dae5d.js → 403f9_next_dist_esm_build_templates_app-page_d302115b.js} +3 -3
- package/web/.next/{server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_6c70ecca.js → standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_dbf21e04.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_da7eef33.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_0a9251aa.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__17a611f0._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__2018e25f._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__249c74f6._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__3b4af5ae._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__45dbf93d._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6258349c._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6cbc1149._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6ee2450e._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__80e5bed2._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8a947500._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__94a6d275._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aad040c0._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c18f84a4._.js +3 -0
- package/web/.next/{server/chunks/ssr/[root-of-the-server]__09af7f56._.js → standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c37779e6._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__e062a6de._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fa87595c._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_07c2a32a._.js +9 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_0e9d6bf7._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_88c4dab8._.js → _3197d5cb._.js} +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_380c6567._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_44cce4e0._.js +4 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_5ee4f5a7._.js +7 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_61351ed3._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6640df4c._.js +6 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_8400c8bb._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_ed11dcd6._.js → _884ddade._.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9f940437._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/{_6887cba3._.js → _ad8a094f._.js} +3 -3
- package/web/.next/{server/chunks/ssr/403f9_next_dist_190bdc35._.js → standalone/src/presentation/web/.next/server/chunks/ssr/_dc379243._.js} +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_e806976d._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_163038ba._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_30d7eeda._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_459cb687._.js +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_565a14f8._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_67178b88._.js +13 -0
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_021a05f2.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_components_ui_tabs_tsx_b226ea9b._.js +3 -0
- package/web/.next/standalone/src/presentation/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/standalone/src/presentation/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/src/presentation/web/.next/server/server-reference-manifest.json +22 -59
- package/web/.next/standalone/src/presentation/web/app/layout.tsx +1 -5
- package/web/.next/standalone/src/presentation/web/components/common/base-drawer/base-drawer.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/common/control-center-drawer/repository-drawer-client.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/common/repository-node/repository-node.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/common/review-drawer-shell/review-drawer-shell.tsx +1 -2
- package/web/.next/standalone/src/presentation/web/components/layouts/app-shell/app-shell.tsx +0 -3
- package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.stories.tsx +0 -5
- package/web/.next/standalone/src/presentation/web/components/layouts/app-sidebar/app-sidebar.tsx +3 -15
- package/web/.next/standalone/src/presentation/web/lib/feature-flags.ts +4 -47
- package/web/.next/standalone/src/presentation/web/server.js +1 -1
- package/web/.next/static/chunks/{98e3a7cf58fc912a.js → 00adfce42dbbd5ef.js} +1 -1
- package/web/.next/static/chunks/{d4d8f0a137bd2eb4.js → 07f00e2e73d322d2.js} +3 -3
- package/web/.next/static/chunks/{0b7bccc8f636dd5b.js → 0853e1358b862314.js} +1 -1
- package/web/.next/static/chunks/1f5c93a8b939416d.js +5 -0
- package/web/.next/static/chunks/3f205fd6adbfd20a.js +7 -0
- package/web/.next/static/chunks/424982cd78174a1a.js +1 -0
- package/web/.next/static/chunks/4a3b3cfcc85e7254.js +1 -0
- package/web/.next/static/chunks/4e7375d89f61c79d.js +4 -0
- package/web/.next/static/chunks/5d0a6417c4e4e545.js +1 -0
- package/web/.next/static/chunks/7194d56ee0c66306.js +1 -0
- package/web/.next/static/chunks/7e6f572625c82efd.js +1 -0
- package/web/.next/static/chunks/8b6a6c28b4f733d0.js +1 -0
- package/web/.next/static/chunks/{8946a56bec2830be.js → 8b8d01272ba4aebd.js} +1 -1
- package/web/.next/static/chunks/{8530c7b12f46a61e.js → 8cbc99412f24eb01.js} +1 -1
- package/web/.next/static/chunks/9215b6fb973482c5.js +1 -0
- package/web/.next/static/chunks/ab411f151f1b87cc.js +1 -0
- package/web/.next/static/chunks/b6c507fc42d9a277.js +1 -0
- package/web/.next/static/chunks/c6ade368deec2ef6.js +1 -0
- package/web/.next/static/chunks/e12fff3b57456bc2.css +2 -0
- package/web/.next/static/chunks/{c596c91507fdc622.js → ec76915c456404e6.js} +1 -1
- package/web/.next/static/chunks/{turbopack-080e470ea902d0ba.js → turbopack-05820f781f3ffc22.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/types/link.d.ts +0 -1
- package/web/.next/types/routes.d.ts +1 -2
- package/web/.next/types/validator.ts +0 -9
- package/apis/json-schema/FeatureFlags.yaml +0 -21
- package/dist/src/presentation/web/app/actions/load-settings.d.ts +0 -9
- package/dist/src/presentation/web/app/actions/load-settings.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/load-settings.js +0 -33
- package/dist/src/presentation/web/app/actions/update-settings.d.ts +0 -11
- package/dist/src/presentation/web/app/actions/update-settings.d.ts.map +0 -1
- package/dist/src/presentation/web/app/actions/update-settings.js +0 -45
- package/dist/src/presentation/web/app/global-error.d.ts +0 -7
- package/dist/src/presentation/web/app/global-error.d.ts.map +0 -1
- package/dist/src/presentation/web/app/global-error.js +0 -5
- package/dist/src/presentation/web/app/settings/page.d.ts +0 -4
- package/dist/src/presentation/web/app/settings/page.d.ts.map +0 -1
- package/dist/src/presentation/web/app/settings/page.js +0 -12
- package/dist/src/presentation/web/components/common/editor-type-icons.d.ts +0 -8
- package/dist/src/presentation/web/components/common/editor-type-icons.d.ts.map +0 -1
- package/dist/src/presentation/web/components/common/editor-type-icons.js +0 -42
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts +0 -6
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +0 -75
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +0 -16
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +0 -36
- package/dist/src/presentation/web/components/features/settings/database-settings-section.d.ts +0 -6
- package/dist/src/presentation/web/components/features/settings/database-settings-section.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/database-settings-section.js +0 -8
- package/dist/src/presentation/web/components/features/settings/database-settings-section.stories.d.ts +0 -15
- package/dist/src/presentation/web/components/features/settings/database-settings-section.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/database-settings-section.stories.js +0 -22
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +0 -6
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +0 -54
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts +0 -15
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +0 -27
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts +0 -6
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +0 -45
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts +0 -16
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +0 -37
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts +0 -6
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.js +0 -68
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts +0 -16
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.js +0 -62
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts +0 -8
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +0 -245
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +0 -15
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +0 -39
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts +0 -6
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +0 -76
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts +0 -16
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +0 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +0 -55
- package/dist/src/presentation/web/components/ui/switch.d.ts +0 -7
- package/dist/src/presentation/web/components/ui/switch.d.ts.map +0 -1
- package/dist/src/presentation/web/components/ui/switch.js +0 -8
- package/dist/src/presentation/web/hooks/feature-flags-context.d.ts +0 -19
- package/dist/src/presentation/web/hooks/feature-flags-context.d.ts.map +0 -1
- package/dist/src/presentation/web/hooks/feature-flags-context.js +0 -20
- package/web/.next/server/app/settings/page/app-paths-manifest.json +0 -3
- package/web/.next/server/app/settings/page/build-manifest.json +0 -18
- package/web/.next/server/app/settings/page/next-font-manifest.json +0 -6
- package/web/.next/server/app/settings/page/react-loadable-manifest.json +0 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +0 -50
- package/web/.next/server/app/settings/page.js +0 -18
- package/web/.next/server/app/settings/page.js.map +0 -5
- package/web/.next/server/app/settings/page.js.nft.json +0 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +0 -2
- package/web/.next/server/chunks/ssr/403f9_next_dist_31ea46d3._.js +0 -6
- package/web/.next/server/chunks/ssr/403f9_next_dist_31ea46d3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_c9d9b4d7._.js +0 -6
- package/web/.next/server/chunks/ssr/403f9_next_dist_c9d9b4d7._.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_compiled_dc550646._.js +0 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_compiled_dc550646._.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_3981ee1d._.js +0 -3
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_3981ee1d._.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2eacac96.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_46d6bf1b.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_54b1e179.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_6c70ecca.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c9978986.js +0 -4
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_c9978986.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_ce6dae5d.js +0 -4
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_ce6dae5d.js.map +0 -1
- package/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d82f78f0.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0880ff0e._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__5edfc56b._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__8c88ef55._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ad2b2a3c._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__ad2b2a3c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js +0 -4
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js.map +0 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +0 -4
- package/web/.next/server/chunks/ssr/_16235e5e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_3a4c94e3._.js +0 -3
- package/web/.next/server/chunks/ssr/_3a4c94e3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_4093a637._.js +0 -5
- package/web/.next/server/chunks/ssr/_4093a637._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_5428b384._.js +0 -3
- package/web/.next/server/chunks/ssr/_5428b384._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_6645f218._.js +0 -21
- package/web/.next/server/chunks/ssr/_6645f218._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_6887cba3._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_88c4dab8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_8eeee4db._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_956601a1._.js +0 -9
- package/web/.next/server/chunks/ssr/_956601a1._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_9d11d025._.js +0 -7
- package/web/.next/server/chunks/ssr/_9d11d025._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a37f5f18._.js +0 -13
- package/web/.next/server/chunks/ssr/_a37f5f18._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_a445a23e._.js +0 -4
- package/web/.next/server/chunks/ssr/_a445a23e._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_c26c679f._.js +0 -3
- package/web/.next/server/chunks/ssr/_c26c679f._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_caf6533c._.js +0 -3
- package/web/.next/server/chunks/ssr/_caf6533c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_d4b20e29._.js +0 -3
- package/web/.next/server/chunks/ssr/_d4b20e29._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_ed11dcd6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f38b49fe._.js +0 -3
- package/web/.next/server/chunks/ssr/_f38b49fe._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f4d222d6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_f7f6173c._.js +0 -3
- package/web/.next/server/chunks/ssr/_f7f6173c._.js.map +0 -1
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +0 -3
- package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +0 -1
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +0 -3
- package/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +0 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_global-error_tsx_14c389b5._.js +0 -3
- package/web/.next/server/chunks/ssr/src_presentation_web_app_global-error_tsx_14c389b5._.js.map +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/app-paths-manifest.json +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/build-manifest.json +0 -18
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/next-font-manifest.json +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/react-loadable-manifest.json +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page/server-reference-manifest.json +0 -50
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page.js +0 -18
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page.js.map +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page.js.nft.json +0 -1
- package/web/.next/standalone/src/presentation/web/.next/server/app/settings/page_client-reference-manifest.js +0 -2
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_31ea46d3._.js +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_c9d9b4d7._.js +0 -6
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_compiled_dc550646._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_3981ee1d._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_2eacac96.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_54b1e179.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/403f9_next_dist_esm_build_templates_app-page_d82f78f0.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__0880ff0e._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__1c870feb._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__23b5ca2c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__357d99f9._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__4be9a9bb._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__52485955._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__5edfc56b._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__6eb2a2b0._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__8c88ef55._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__ad2b2a3c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__aea328fd._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c3c963c6._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__c9777776._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__f0d8d054._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fd36b8bf._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_3a4c94e3._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_4093a637._.js +0 -5
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_5428b384._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_6645f218._.js +0 -21
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_956601a1._.js +0 -9
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_9d11d025._.js +0 -7
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a37f5f18._.js +0 -13
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_a445a23e._.js +0 -4
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_c26c679f._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_caf6533c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_d4b20e29._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_f38b49fe._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/_f7f6173c._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/f7870_sonner_dist_index_mjs_dbf63824._.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +0 -3
- package/web/.next/standalone/src/presentation/web/.next/server/chunks/ssr/src_presentation_web_app_global-error_tsx_14c389b5._.js +0 -3
- package/web/.next/standalone/src/presentation/web/app/actions/load-settings.ts +0 -43
- package/web/.next/standalone/src/presentation/web/app/actions/update-settings.ts +0 -73
- package/web/.next/standalone/src/presentation/web/app/global-error.tsx +0 -23
- package/web/.next/standalone/src/presentation/web/app/settings/page.tsx +0 -27
- package/web/.next/standalone/src/presentation/web/components/common/editor-type-icons.tsx +0 -84
- package/web/.next/standalone/src/presentation/web/components/features/settings/agent-settings-section.stories.tsx +0 -43
- package/web/.next/standalone/src/presentation/web/components/features/settings/agent-settings-section.tsx +0 -183
- package/web/.next/standalone/src/presentation/web/components/features/settings/database-settings-section.stories.tsx +0 -28
- package/web/.next/standalone/src/presentation/web/components/features/settings/database-settings-section.tsx +0 -43
- package/web/.next/standalone/src/presentation/web/components/features/settings/environment-settings-section.stories.tsx +0 -33
- package/web/.next/standalone/src/presentation/web/components/features/settings/environment-settings-section.tsx +0 -125
- package/web/.next/standalone/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.tsx +0 -44
- package/web/.next/standalone/src/presentation/web/components/features/settings/feature-flags-settings-section.tsx +0 -94
- package/web/.next/standalone/src/presentation/web/components/features/settings/notification-settings-section.stories.tsx +0 -71
- package/web/.next/standalone/src/presentation/web/components/features/settings/notification-settings-section.tsx +0 -178
- package/web/.next/standalone/src/presentation/web/components/features/settings/settings-page-client.stories.tsx +0 -46
- package/web/.next/standalone/src/presentation/web/components/features/settings/settings-page-client.tsx +0 -706
- package/web/.next/standalone/src/presentation/web/components/features/settings/workflow-settings-section.stories.tsx +0 -62
- package/web/.next/standalone/src/presentation/web/components/features/settings/workflow-settings-section.tsx +0 -274
- package/web/.next/standalone/src/presentation/web/components/ui/switch.tsx +0 -35
- package/web/.next/standalone/src/presentation/web/hooks/feature-flags-context.tsx +0 -30
- package/web/.next/standalone/src/presentation/web/public/icons/editors/vscode.svg +0 -3
- package/web/.next/standalone/src/presentation/web/public/icons/editors/windsurf.svg +0 -4
- package/web/.next/standalone/src/presentation/web/public/icons/editors/zed.svg +0 -4
- package/web/.next/static/chunks/120e17fda1419d01.js +0 -1
- package/web/.next/static/chunks/3479d6ae297e5410.css +0 -2
- package/web/.next/static/chunks/356ebc89a2a97627.js +0 -1
- package/web/.next/static/chunks/36d88ff9f7db4eb9.js +0 -1
- package/web/.next/static/chunks/55c131b6fc504375.js +0 -1
- package/web/.next/static/chunks/6bc55aa5ad2095ac.js +0 -3
- package/web/.next/static/chunks/700501f5ac2bb320.js +0 -1
- package/web/.next/static/chunks/730cb306a35d6396.js +0 -1
- package/web/.next/static/chunks/7ea835cf2a6ae94b.js +0 -1
- package/web/.next/static/chunks/89aac43287d73b02.js +0 -1
- package/web/.next/static/chunks/8beb0ab10e6c953c.js +0 -1
- package/web/.next/static/chunks/907556417091ee06.js +0 -11
- package/web/.next/static/chunks/92ba0981701fda34.js +0 -2
- package/web/.next/static/chunks/aa6cc6df962a3fc0.js +0 -3
- package/web/.next/static/chunks/c17b075a71a85424.js +0 -1
- package/web/.next/static/chunks/c63d1c145c5a07dc.js +0 -1
- package/web/.next/static/chunks/eb9841ec4d80af01.js +0 -1
- package/web/.next/static/chunks/fc00e1b83852da4e.js +0 -1
- package/web/public/icons/editors/vscode.svg +0 -3
- package/web/public/icons/editors/windsurf.svg +0 -4
- package/web/public/icons/editors/zed.svg +0 -4
- /package/web/.next/server/chunks/ssr/{[root-of-the-server]__52485955._.js.map → [root-of-the-server]__80e5bed2._.js.map} +0 -0
- /package/web/.next/static/{YWzkM_I8raXDlPfEwO-Xo → kPTTy-YsS3np6cPgsciL2}/_buildManifest.js +0 -0
- /package/web/.next/static/{YWzkM_I8raXDlPfEwO-Xo → kPTTy-YsS3np6cPgsciL2}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{YWzkM_I8raXDlPfEwO-Xo → kPTTy-YsS3np6cPgsciL2}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[92163,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(17300),e=a.i(41305),f=a.i(85536),g=a.i(88064),h=a.i(87926),i=a.i(25700);let j=(0,i.default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]),k=(0,i.default)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);var l=a.i(63698),m=a.i(53170),n=a.i(56926),o=a.i(4019),p=a.i(67075);let q=(0,i.default)("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);var r=a.i(18948),s=a.i(82934),t=a.i(98410),u=a.i(72016),v=a.i(71238),w=a.i(24255);let x={linux:"Linux",darwin:"macOS",win32:"Windows"},y={ide:{label:"IDE",icon:k},"cli-agent":{label:"CLI Agent",icon:l.Terminal},vcs:{label:"VCS",icon:m.GitBranch},terminal:{label:"Terminal",icon:l.Terminal}};function z({status:a}){return"available"===a?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400",children:[(0,b.jsx)(u.Check,{className:"h-3 w-3"}),"Installed"]}):"error"===a?(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400",children:"Error"}):(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400",children:"Missing"})}function A({tool:a,open:d,onClose:e,onRefresh:f,autoStart:i}){let[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),{logs:p,status:s,startInstall:A}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)("idle"),[g,h]=(0,c.useState)(null),i=(0,c.useRef)(null),j=(0,c.useCallback)(()=>{i.current&&(i.current.close(),i.current=null)},[]);return(0,c.useEffect)(()=>j,[j]),{logs:b,status:e,result:g,startInstall:(0,c.useCallback)(()=>{j(),d([]),h(null),f("streaming");let b=new EventSource(`/api/tools/${a}/install/stream`);i.current=b,b.onmessage=a=>{d(b=>[...b,a.data])},b.addEventListener("done",a=>{let b=JSON.parse(a.data);h(b),f("error"===b.status?"error":"done"),j()}),b.onerror=()=>{f("error"),j()}},[a,j])}}(a.id),B=(0,c.useRef)(null),C=(0,c.useRef)(!0),D=(0,c.useRef)(!1),E="available"===a.status.status,F="error"===a.status.status,G=E&&!!a.openDirectory,H=!E&&!F&&a.autoInstall;async function I(){o(!0);try{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})}finally{o(!1)}}(0,c.useEffect)(()=>{d&&i&&H&&"idle"===s&&!D.current&&(D.current=!0,A()),d||(D.current=!1)},[d,i,H,s,A]);let J=(0,c.useCallback)(()=>{let a=B.current;a&&(C.current=a.scrollTop+a.clientHeight>=a.scrollHeight-50)},[]);(0,c.useEffect)(()=>{C.current&&B.current&&(B.current.scrollTop=B.current.scrollHeight)},[p,s]),(0,c.useEffect)(()=>{"done"===s&&f&&f()},[s,f]);let K=(0,b.jsxs)("div",{className:"flex flex-col gap-1.5 pr-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:24,height:24,className:"shrink-0 dark:invert"}):(0,b.jsx)(q,{className:"text-muted-foreground h-6 w-6 shrink-0"}),(0,b.jsx)("h2",{className:"text-base font-bold",children:a.name}),(0,b.jsx)(z,{status:a.status.status})]}),(0,b.jsx)("div",{className:"flex items-center gap-2",children:a.tags.map(a=>{let c=y[a]??{label:a,icon:k},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]",children:[(0,b.jsx)(d,{className:"h-3 w-3"}),c.label]},a)})})]});return(0,b.jsx)(w.BaseDrawer,{open:d,onClose:e,size:"md",modal:!0,title:a.name,header:K,"data-testid":"tool-detail-drawer",children:(0,b.jsxs)("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-4",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:a.description}),a.author||a.platforms?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",children:[a.author?(0,b.jsxs)("span",{className:"text-muted-foreground",children:["by"," ",a.website?(0,b.jsx)("a",{href:a.website,target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline",children:a.author}):(0,b.jsx)("span",{className:"text-foreground",children:a.author})]}):null,a.platforms&&a.platforms.length>0?(0,b.jsx)("span",{className:"text-muted-foreground",children:a.platforms.map(a=>x[a]??a).join(" · ")}):null]}):null,a.installCommand?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install command"}),(0,b.jsxs)("div",{className:"relative rounded-md bg-zinc-900 text-zinc-100",children:[(0,b.jsx)("pre",{className:"overflow-x-auto px-3 py-2.5 pr-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap",children:(0,b.jsx)("code",{children:a.installCommand})}),(0,b.jsxs)(r.Button,{variant:"ghost",size:"sm",className:"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100",onClick:function(){a.installCommand&&navigator.clipboard.writeText(a.installCommand).then(()=>{m(!0),setTimeout(()=>m(!1),2e3)})},"aria-label":l?"Copied!":"Copy install command",children:[l?(0,b.jsx)(u.Check,{className:"h-3.5 w-3.5 text-emerald-500"}):(0,b.jsx)(t.Copy,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"ml-1 text-[10px]",children:l?"Copied!":"Copy"})]})]})]}):null,(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[H?(0,b.jsxs)(r.Button,{size:"sm",onClick:A,disabled:"streaming"===s,"aria-label":`Install ${a.name}`,className:"cursor-pointer",children:["streaming"===s?(0,b.jsx)(g.Loader2,{className:"mr-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(j,{className:"mr-1.5 h-3.5 w-3.5"}),"streaming"===s?"Installing...":"Install"]}):null,G?(0,b.jsxs)(r.Button,{size:"sm",variant:"outline",onClick:()=>void I(),disabled:n,"aria-label":`Launch ${a.name}`,className:"cursor-pointer",children:[n?(0,b.jsx)(g.Loader2,{className:"mr-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"mr-1.5 h-3.5 w-3.5"}),"Launch"]}):null,a.documentationUrl?(0,b.jsx)(r.Button,{variant:"outline",size:"sm",className:"cursor-pointer",asChild:!0,children:(0,b.jsxs)("a",{href:a.documentationUrl,target:"_blank",rel:"noopener noreferrer",children:["Docs",(0,b.jsx)(v.ExternalLink,{className:"ml-1 h-3 w-3"})]})}):null]}),("streaming"===s||"done"===s||"error"===s)&&p.length>0?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install log"}),(0,b.jsxs)("div",{ref:B,onScroll:J,className:"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100","data-testid":"tool-install-log",children:[p.map((a,c)=>(0,b.jsx)("div",{className:"break-all whitespace-pre-wrap",children:a},c)),"done"===s?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-emerald-400",children:"Installation complete"}):null,"error"===s?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-red-400",children:"Installation failed"}):null]})]}):null]})})}let B={ide:{label:"IDE",icon:k},"cli-agent":{label:"CLI Agent",icon:l.Terminal},vcs:{label:"VCS",icon:m.GitBranch},terminal:{label:"Terminal",icon:l.Terminal}};function C({tool:a,onRefresh:d,className:e}){let[i,l]=(0,c.useState)(!1),[m,t]=(0,c.useState)(!1),[u,v]=(0,c.useTransition)(),w="available"===a.status.status,x="error"===a.status.status,y=w&&!!a.openDirectory;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{"data-testid":"tool-card",onClick:function(){t(!1),l(!0)},className:(0,f.cn)("bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md",e),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-start justify-between gap-2",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:20,height:20,className:"shrink-0 dark:invert"}):(0,b.jsx)(q,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,b.jsx)("h3",{"data-testid":"tool-card-name",className:"truncate text-sm font-bold",children:a.name})]}),(0,b.jsx)("div",{"data-testid":"tool-card-tags",className:"flex shrink-0 items-center gap-1",children:a.tags.map(a=>{let c=B[a]??{label:a,icon:k},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]",children:[(0,b.jsx)(d,{className:"h-2.5 w-2.5"}),c.label]},a)})})]}),(0,b.jsx)("p",{"data-testid":"tool-card-summary",className:"text-muted-foreground mt-1 truncate text-xs",children:a.summary}),(0,b.jsxs)("div",{className:"mt-auto flex items-center justify-between pt-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[x&&"error"===a.status.status?(0,b.jsxs)("span",{className:"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400",title:a.status.errorMessage,children:[(0,b.jsx)(n.CircleX,{className:"h-3 w-3 shrink-0"}),a.status.errorMessage??"Error"]}):w?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(p.CheckCircle2,{className:"h-3 w-3"}),"Installed"]}):(0,b.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-[10px]",children:[(0,b.jsx)(o.Circle,{className:"h-3 w-3"}),"Not installed"]}),a.required?(0,b.jsx)(s.TooltipProvider,{children:(0,b.jsxs)(s.Tooltip,{children:[(0,b.jsx)(s.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400",children:"Required"})}),(0,b.jsx)(s.TooltipContent,{side:"top",children:"This tool is required for Shep to function properly"})]})}):null]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:w&&y?(0,b.jsxs)(r.Button,{size:"sm",variant:"outline",onClick:function(b){b.stopPropagation(),v(async()=>{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})})},disabled:u,"aria-label":`Launch ${a.name}`,"data-testid":"tool-card-launch-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[u?(0,b.jsx)(g.Loader2,{className:"mr-1 h-3 w-3 animate-spin"}):(0,b.jsx)(h.Rocket,{className:"mr-1 h-3 w-3"}),"Launch"]}):w||x?null:(0,b.jsxs)(r.Button,{size:"sm",variant:"default",onClick:function(b){b.stopPropagation(),t(a.autoInstall),l(!0)},"aria-label":`Install ${a.name}`,"data-testid":"tool-card-install-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[(0,b.jsx)(j,{className:"mr-1 h-3 w-3"}),"Install"]})})]})]}),(0,b.jsx)(A,{tool:a,open:i,onClose:()=>l(!1),onRefresh:d,autoStart:m})]})}let D={all:()=>!0,ide:a=>a.tags.includes("ide"),"cli-agent":a=>a.tags.includes("cli-agent"),vcs:a=>a.tags.includes("vcs"),terminal:a=>a.tags.includes("terminal")};function E({tools:a,className:g}){let[h,i]=(0,c.useState)(a),[j,k]=(0,c.useState)("all"),l=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/tools");if(a.ok){let b=await a.json();i(b)}}catch{}},[]),m=h.filter(D[j]);return(0,b.jsxs)("div",{"data-testid":"tools-page-client",className:(0,f.cn)("space-y-4",g),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(d.Wrench,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Tools"}),(0,b.jsxs)("span",{className:"text-muted-foreground text-[10px]",children:[h.filter(a=>"available"===a.status.status).length,"/",h.length," installed"]})]}),(0,b.jsxs)(e.Tabs,{value:j,onValueChange:a=>k(a),"data-testid":"tools-page-tabs",children:[(0,b.jsxs)(e.TabsList,{className:"h-7",children:[(0,b.jsx)(e.TabsTrigger,{value:"all","data-testid":"tools-tab-all",className:"px-2.5 text-xs",children:"All"}),(0,b.jsx)(e.TabsTrigger,{value:"ide","data-testid":"tools-tab-ide",className:"px-2.5 text-xs",children:"IDEs"}),(0,b.jsx)(e.TabsTrigger,{value:"cli-agent","data-testid":"tools-tab-cli-agent",className:"px-2.5 text-xs",children:"CLI Agents"}),(0,b.jsx)(e.TabsTrigger,{value:"vcs","data-testid":"tools-tab-vcs",className:"px-2.5 text-xs",children:"Version Control"}),(0,b.jsx)(e.TabsTrigger,{value:"terminal","data-testid":"tools-tab-terminal",className:"px-2.5 text-xs",children:"Terminals"})]}),(0,b.jsx)(e.TabsContent,{value:j,className:"mt-3",children:0===m.length?(0,b.jsxs)("div",{"data-testid":"tools-page-empty",className:"text-muted-foreground flex flex-col items-center justify-center py-12 text-center",children:[(0,b.jsx)(d.Wrench,{className:"mb-2 h-6 w-6 opacity-20"}),(0,b.jsx)("p",{className:"text-xs",children:"No tools in this category."})]}):(0,b.jsx)("div",{"data-testid":"tools-page-grid",className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:m.map(a=>(0,b.jsx)(C,{tool:a,onRefresh:l},a.id))})})]})]})}a.s(["ToolsPageClient",()=>E],92163)}];
|
|
1
|
+
module.exports=[92163,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(17300),e=a.i(41305),f=a.i(85536),g=a.i(88064),h=a.i(25700);let i=(0,h.default)("rocket",[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]]),j=(0,h.default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]),k=(0,h.default)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);var l=a.i(63698),m=a.i(53170),n=a.i(56926),o=a.i(4019),p=a.i(67075);let q=(0,h.default)("package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);var r=a.i(18948),s=a.i(82934),t=a.i(98410),u=a.i(72016),v=a.i(71238),w=a.i(24255);let x={linux:"Linux",darwin:"macOS",win32:"Windows"},y={ide:{label:"IDE",icon:k},"cli-agent":{label:"CLI Agent",icon:l.Terminal},vcs:{label:"VCS",icon:m.GitBranch},terminal:{label:"Terminal",icon:l.Terminal}};function z({status:a}){return"available"===a?(0,b.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400",children:[(0,b.jsx)(u.Check,{className:"h-3 w-3"}),"Installed"]}):"error"===a?(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400",children:"Error"}):(0,b.jsx)("span",{className:"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400",children:"Missing"})}function A({tool:a,open:d,onClose:e,onRefresh:f,autoStart:h}){let[l,m]=(0,c.useState)(!1),[n,o]=(0,c.useState)(!1),{logs:p,status:s,startInstall:A}=function(a){let[b,d]=(0,c.useState)([]),[e,f]=(0,c.useState)("idle"),[g,h]=(0,c.useState)(null),i=(0,c.useRef)(null),j=(0,c.useCallback)(()=>{i.current&&(i.current.close(),i.current=null)},[]);return(0,c.useEffect)(()=>j,[j]),{logs:b,status:e,result:g,startInstall:(0,c.useCallback)(()=>{j(),d([]),h(null),f("streaming");let b=new EventSource(`/api/tools/${a}/install/stream`);i.current=b,b.onmessage=a=>{d(b=>[...b,a.data])},b.addEventListener("done",a=>{let b=JSON.parse(a.data);h(b),f("error"===b.status?"error":"done"),j()}),b.onerror=()=>{f("error"),j()}},[a,j])}}(a.id),B=(0,c.useRef)(null),C=(0,c.useRef)(!0),D=(0,c.useRef)(!1),E="available"===a.status.status,F="error"===a.status.status,G=E&&!!a.openDirectory,H=!E&&!F&&a.autoInstall;async function I(){o(!0);try{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})}finally{o(!1)}}(0,c.useEffect)(()=>{d&&h&&H&&"idle"===s&&!D.current&&(D.current=!0,A()),d||(D.current=!1)},[d,h,H,s,A]);let J=(0,c.useCallback)(()=>{let a=B.current;a&&(C.current=a.scrollTop+a.clientHeight>=a.scrollHeight-50)},[]);(0,c.useEffect)(()=>{C.current&&B.current&&(B.current.scrollTop=B.current.scrollHeight)},[p,s]),(0,c.useEffect)(()=>{"done"===s&&f&&f()},[s,f]);let K=(0,b.jsxs)("div",{className:"flex flex-col gap-1.5 pr-6",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:24,height:24,className:"shrink-0 dark:invert"}):(0,b.jsx)(q,{className:"text-muted-foreground h-6 w-6 shrink-0"}),(0,b.jsx)("h2",{className:"text-base font-bold",children:a.name}),(0,b.jsx)(z,{status:a.status.status})]}),(0,b.jsx)("div",{className:"flex items-center gap-2",children:a.tags.map(a=>{let c=y[a]??{label:a,icon:k},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]",children:[(0,b.jsx)(d,{className:"h-3 w-3"}),c.label]},a)})})]});return(0,b.jsx)(w.BaseDrawer,{open:d,onClose:e,size:"md",modal:!0,title:a.name,header:K,"data-testid":"tool-detail-drawer",children:(0,b.jsxs)("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-4",children:[(0,b.jsx)("p",{className:"text-muted-foreground text-sm",children:a.description}),a.author||a.platforms?(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",children:[a.author?(0,b.jsxs)("span",{className:"text-muted-foreground",children:["by"," ",a.website?(0,b.jsx)("a",{href:a.website,target:"_blank",rel:"noopener noreferrer",className:"text-foreground hover:underline",children:a.author}):(0,b.jsx)("span",{className:"text-foreground",children:a.author})]}):null,a.platforms&&a.platforms.length>0?(0,b.jsx)("span",{className:"text-muted-foreground",children:a.platforms.map(a=>x[a]??a).join(" · ")}):null]}):null,a.installCommand?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install command"}),(0,b.jsxs)("div",{className:"relative rounded-md bg-zinc-900 text-zinc-100",children:[(0,b.jsx)("pre",{className:"overflow-x-auto px-3 py-2.5 pr-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap",children:(0,b.jsx)("code",{children:a.installCommand})}),(0,b.jsxs)(r.Button,{variant:"ghost",size:"sm",className:"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100",onClick:function(){a.installCommand&&navigator.clipboard.writeText(a.installCommand).then(()=>{m(!0),setTimeout(()=>m(!1),2e3)})},"aria-label":l?"Copied!":"Copy install command",children:[l?(0,b.jsx)(u.Check,{className:"h-3.5 w-3.5 text-emerald-500"}):(0,b.jsx)(t.Copy,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"ml-1 text-[10px]",children:l?"Copied!":"Copy"})]})]})]}):null,(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[H?(0,b.jsxs)(r.Button,{size:"sm",onClick:A,disabled:"streaming"===s,"aria-label":`Install ${a.name}`,className:"cursor-pointer",children:["streaming"===s?(0,b.jsx)(g.Loader2,{className:"mr-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(j,{className:"mr-1.5 h-3.5 w-3.5"}),"streaming"===s?"Installing...":"Install"]}):null,G?(0,b.jsxs)(r.Button,{size:"sm",variant:"outline",onClick:()=>void I(),disabled:n,"aria-label":`Launch ${a.name}`,className:"cursor-pointer",children:[n?(0,b.jsx)(g.Loader2,{className:"mr-1.5 h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(i,{className:"mr-1.5 h-3.5 w-3.5"}),"Launch"]}):null,a.documentationUrl?(0,b.jsx)(r.Button,{variant:"outline",size:"sm",className:"cursor-pointer",asChild:!0,children:(0,b.jsxs)("a",{href:a.documentationUrl,target:"_blank",rel:"noopener noreferrer",children:["Docs",(0,b.jsx)(v.ExternalLink,{className:"ml-1 h-3 w-3"})]})}):null]}),("streaming"===s||"done"===s||"error"===s)&&p.length>0?(0,b.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,b.jsx)("span",{className:"text-muted-foreground text-xs font-semibold tracking-wide uppercase",children:"Install log"}),(0,b.jsxs)("div",{ref:B,onScroll:J,className:"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100","data-testid":"tool-install-log",children:[p.map((a,c)=>(0,b.jsx)("div",{className:"break-all whitespace-pre-wrap",children:a},c)),"done"===s?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-emerald-400",children:"Installation complete"}):null,"error"===s?(0,b.jsx)("div",{className:"mt-2 border-t border-zinc-700 pt-2 text-red-400",children:"Installation failed"}):null]})]}):null]})})}let B={ide:{label:"IDE",icon:k},"cli-agent":{label:"CLI Agent",icon:l.Terminal},vcs:{label:"VCS",icon:m.GitBranch},terminal:{label:"Terminal",icon:l.Terminal}};function C({tool:a,onRefresh:d,className:e}){let[h,l]=(0,c.useState)(!1),[m,t]=(0,c.useState)(!1),[u,v]=(0,c.useTransition)(),w="available"===a.status.status,x="error"===a.status.status,y=w&&!!a.openDirectory;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("div",{"data-testid":"tool-card",onClick:function(){t(!1),l(!0)},className:(0,f.cn)("bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md",e),children:[(0,b.jsxs)("div",{className:"mb-2 flex items-start justify-between gap-2",children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[a.iconUrl?(0,b.jsx)("img",{src:a.iconUrl,alt:"",width:20,height:20,className:"shrink-0 dark:invert"}):(0,b.jsx)(q,{className:"text-muted-foreground h-5 w-5 shrink-0"}),(0,b.jsx)("h3",{"data-testid":"tool-card-name",className:"truncate text-sm font-bold",children:a.name})]}),(0,b.jsx)("div",{"data-testid":"tool-card-tags",className:"flex shrink-0 items-center gap-1",children:a.tags.map(a=>{let c=B[a]??{label:a,icon:k},d=c.icon;return(0,b.jsxs)("span",{className:"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]",children:[(0,b.jsx)(d,{className:"h-2.5 w-2.5"}),c.label]},a)})})]}),(0,b.jsx)("p",{"data-testid":"tool-card-summary",className:"text-muted-foreground mt-1 truncate text-xs",children:a.summary}),(0,b.jsxs)("div",{className:"mt-auto flex items-center justify-between pt-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[x&&"error"===a.status.status?(0,b.jsxs)("span",{className:"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400",title:a.status.errorMessage,children:[(0,b.jsx)(n.CircleX,{className:"h-3 w-3 shrink-0"}),a.status.errorMessage??"Error"]}):w?(0,b.jsxs)("span",{className:"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400",children:[(0,b.jsx)(p.CheckCircle2,{className:"h-3 w-3"}),"Installed"]}):(0,b.jsxs)("span",{className:"text-muted-foreground flex items-center gap-1 text-[10px]",children:[(0,b.jsx)(o.Circle,{className:"h-3 w-3"}),"Not installed"]}),a.required?(0,b.jsx)(s.TooltipProvider,{children:(0,b.jsxs)(s.Tooltip,{children:[(0,b.jsx)(s.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("span",{className:"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400",children:"Required"})}),(0,b.jsx)(s.TooltipContent,{side:"top",children:"This tool is required for Shep to function properly"})]})}):null]}),(0,b.jsx)("div",{className:"flex items-center gap-1",children:w&&y?(0,b.jsxs)(r.Button,{size:"sm",variant:"outline",onClick:function(b){b.stopPropagation(),v(async()=>{await fetch(`/api/tools/${a.id}/launch`,{method:"POST"})})},disabled:u,"aria-label":`Launch ${a.name}`,"data-testid":"tool-card-launch-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[u?(0,b.jsx)(g.Loader2,{className:"mr-1 h-3 w-3 animate-spin"}):(0,b.jsx)(i,{className:"mr-1 h-3 w-3"}),"Launch"]}):w||x?null:(0,b.jsxs)(r.Button,{size:"sm",variant:"default",onClick:function(b){b.stopPropagation(),t(a.autoInstall),l(!0)},"aria-label":`Install ${a.name}`,"data-testid":"tool-card-install-button",className:"h-7 cursor-pointer rounded-md px-3 text-xs",children:[(0,b.jsx)(j,{className:"mr-1 h-3 w-3"}),"Install"]})})]})]}),(0,b.jsx)(A,{tool:a,open:h,onClose:()=>l(!1),onRefresh:d,autoStart:m})]})}let D={all:()=>!0,ide:a=>a.tags.includes("ide"),"cli-agent":a=>a.tags.includes("cli-agent"),vcs:a=>a.tags.includes("vcs"),terminal:a=>a.tags.includes("terminal")};function E({tools:a,className:g}){let[h,i]=(0,c.useState)(a),[j,k]=(0,c.useState)("all"),l=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/tools");if(a.ok){let b=await a.json();i(b)}}catch{}},[]),m=h.filter(D[j]);return(0,b.jsxs)("div",{"data-testid":"tools-page-client",className:(0,f.cn)("space-y-4",g),children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(d.Wrench,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Tools"}),(0,b.jsxs)("span",{className:"text-muted-foreground text-[10px]",children:[h.filter(a=>"available"===a.status.status).length,"/",h.length," installed"]})]}),(0,b.jsxs)(e.Tabs,{value:j,onValueChange:a=>k(a),"data-testid":"tools-page-tabs",children:[(0,b.jsxs)(e.TabsList,{className:"h-7",children:[(0,b.jsx)(e.TabsTrigger,{value:"all","data-testid":"tools-tab-all",className:"px-2.5 text-xs",children:"All"}),(0,b.jsx)(e.TabsTrigger,{value:"ide","data-testid":"tools-tab-ide",className:"px-2.5 text-xs",children:"IDEs"}),(0,b.jsx)(e.TabsTrigger,{value:"cli-agent","data-testid":"tools-tab-cli-agent",className:"px-2.5 text-xs",children:"CLI Agents"}),(0,b.jsx)(e.TabsTrigger,{value:"vcs","data-testid":"tools-tab-vcs",className:"px-2.5 text-xs",children:"Version Control"}),(0,b.jsx)(e.TabsTrigger,{value:"terminal","data-testid":"tools-tab-terminal",className:"px-2.5 text-xs",children:"Terminals"})]}),(0,b.jsx)(e.TabsContent,{value:j,className:"mt-3",children:0===m.length?(0,b.jsxs)("div",{"data-testid":"tools-page-empty",className:"text-muted-foreground flex flex-col items-center justify-center py-12 text-center",children:[(0,b.jsx)(d.Wrench,{className:"mb-2 h-6 w-6 opacity-20"}),(0,b.jsx)("p",{className:"text-xs",children:"No tools in this category."})]}):(0,b.jsx)("div",{"data-testid":"tools-page-grid",className:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4",children:m.map(a=>(0,b.jsx)(C,{tool:a,onRefresh:l},a.id))})})]})]})}a.s(["ToolsPageClient",()=>E],92163)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=src_presentation_web_components_features_tools_tools-page-client_tsx_3d0aa70c._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../../src/presentation/web/hooks/use-tool-install-stream.ts","../../../../../../../src/presentation/web/components/features/tools/tool-detail-drawer.tsx","../../../../../../../src/presentation/web/components/features/tools/tool-card.tsx","../../../../../../../src/presentation/web/components/features/tools/tools-page-client.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/package.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/download.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/monitor.ts"],"sourcesContent":["'use client';\n\nimport { useState, useRef, useCallback, useEffect } from 'react';\nimport type { ToolInstallationStatus } from '@shepai/core/domain/generated/output';\n\nexport type InstallStreamStatus = 'idle' | 'streaming' | 'done' | 'error';\n\nexport interface UseToolInstallStreamResult {\n logs: string[];\n status: InstallStreamStatus;\n result: ToolInstallationStatus | null;\n startInstall: () => void;\n}\n\nexport function useToolInstallStream(toolId: string): UseToolInstallStreamResult {\n const [logs, setLogs] = useState<string[]>([]);\n const [status, setStatus] = useState<InstallStreamStatus>('idle');\n const [result, setResult] = useState<ToolInstallationStatus | null>(null);\n const esRef = useRef<EventSource | null>(null);\n\n const cleanup = useCallback(() => {\n if (esRef.current) {\n esRef.current.close();\n esRef.current = null;\n }\n }, []);\n\n // Cleanup on unmount\n useEffect(() => cleanup, [cleanup]);\n\n const startInstall = useCallback(() => {\n cleanup();\n setLogs([]);\n setResult(null);\n setStatus('streaming');\n\n const es = new EventSource(`/api/tools/${toolId}/install/stream`);\n esRef.current = es;\n\n es.onmessage = (event: MessageEvent) => {\n setLogs((prev) => [...prev, event.data]);\n };\n\n es.addEventListener('done', (event: MessageEvent) => {\n const installResult: ToolInstallationStatus = JSON.parse(event.data);\n setResult(installResult);\n setStatus(installResult.status === 'error' ? 'error' : 'done');\n cleanup();\n });\n\n es.onerror = () => {\n setStatus('error');\n cleanup();\n };\n }, [toolId, cleanup]);\n\n return { logs, status, result, startInstall };\n}\n","'use client';\n\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport {\n Copy,\n Check,\n ExternalLink,\n Download,\n Rocket,\n Loader2,\n Monitor,\n Terminal,\n GitBranch,\n Package,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { BaseDrawer } from '@/components/common/base-drawer/base-drawer';\nimport { useToolInstallStream } from '@/hooks/use-tool-install-stream';\nimport type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nconst PLATFORM_LABELS: Record<string, string> = {\n linux: 'Linux',\n darwin: 'macOS',\n win32: 'Windows',\n};\n\nexport interface ToolDetailDrawerProps {\n tool: ToolItem;\n open: boolean;\n onClose: () => void;\n onRefresh?: () => Promise<void>;\n autoStart?: boolean;\n}\n\nconst TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {\n ide: { label: 'IDE', icon: Monitor },\n 'cli-agent': { label: 'CLI Agent', icon: Terminal },\n vcs: { label: 'VCS', icon: GitBranch },\n terminal: { label: 'Terminal', icon: Terminal },\n};\n\nconst AUTO_SCROLL_THRESHOLD = 50;\n\nfunction StatusBadge({ status }: { status: string }) {\n if (status === 'available') {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400\">\n <Check className=\"h-3 w-3\" />\n Installed\n </span>\n );\n }\n if (status === 'error') {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400\">\n Error\n </span>\n );\n }\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400\">\n Missing\n </span>\n );\n}\n\nexport function ToolDetailDrawer({\n tool,\n open,\n onClose,\n onRefresh,\n autoStart,\n}: ToolDetailDrawerProps) {\n const [copied, setCopied] = useState(false);\n const [isLaunching, setIsLaunching] = useState(false);\n const { logs, status, startInstall } = useToolInstallStream(tool.id);\n const logRef = useRef<HTMLDivElement>(null);\n const isAtBottomRef = useRef(true);\n const autoStartedRef = useRef(false);\n\n const isInstalled = tool.status.status === 'available';\n const isError = tool.status.status === 'error';\n const canLaunch = isInstalled && Boolean(tool.openDirectory);\n const canInstall = !isInstalled && !isError && tool.autoInstall;\n\n // Auto-start install when drawer opens with autoStart flag\n useEffect(() => {\n if (open && autoStart && canInstall && status === 'idle' && !autoStartedRef.current) {\n autoStartedRef.current = true;\n startInstall();\n }\n if (!open) {\n autoStartedRef.current = false;\n }\n }, [open, autoStart, canInstall, status, startInstall]);\n\n function handleCopy() {\n if (!tool.installCommand) return;\n void navigator.clipboard.writeText(tool.installCommand).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n\n async function handleLaunch() {\n setIsLaunching(true);\n try {\n await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });\n } finally {\n setIsLaunching(false);\n }\n }\n\n const handleScroll = useCallback(() => {\n const el = logRef.current;\n if (!el) return;\n isAtBottomRef.current =\n el.scrollTop + el.clientHeight >= el.scrollHeight - AUTO_SCROLL_THRESHOLD;\n }, []);\n\n useEffect(() => {\n if (isAtBottomRef.current && logRef.current) {\n logRef.current.scrollTop = logRef.current.scrollHeight;\n }\n }, [logs, status]);\n\n // Refresh tool status after install completes\n useEffect(() => {\n if (status === 'done' && onRefresh) {\n void onRefresh();\n }\n }, [status, onRefresh]);\n\n const header = (\n <div className=\"flex flex-col gap-1.5 pr-6\">\n <div className=\"flex items-center gap-2\">\n {tool.iconUrl ? (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img src={tool.iconUrl} alt=\"\" width={24} height={24} className=\"shrink-0 dark:invert\" />\n ) : (\n <Package className=\"text-muted-foreground h-6 w-6 shrink-0\" />\n )}\n <h2 className=\"text-base font-bold\">{tool.name}</h2>\n <StatusBadge status={tool.status.status} />\n </div>\n <div className=\"flex items-center gap-2\">\n {tool.tags.map((tag) => {\n const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };\n const TagIcon = config.icon;\n return (\n <span\n key={tag}\n className=\"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]\"\n >\n <TagIcon className=\"h-3 w-3\" />\n {config.label}\n </span>\n );\n })}\n </div>\n </div>\n );\n\n return (\n <BaseDrawer\n open={open}\n onClose={onClose}\n size=\"md\"\n modal\n title={tool.name}\n header={header}\n data-testid=\"tool-detail-drawer\"\n >\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4\">\n {/* Description */}\n <p className=\"text-muted-foreground text-sm\">{tool.description}</p>\n\n {/* Meta info row: author + platforms */}\n {tool.author || tool.platforms ? (\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs\">\n {tool.author ? (\n <span className=\"text-muted-foreground\">\n by{' '}\n {tool.website ? (\n <a\n href={tool.website}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground hover:underline\"\n >\n {tool.author}\n </a>\n ) : (\n <span className=\"text-foreground\">{tool.author}</span>\n )}\n </span>\n ) : null}\n {tool.platforms && tool.platforms.length > 0 ? (\n <span className=\"text-muted-foreground\">\n {tool.platforms.map((p) => PLATFORM_LABELS[p] ?? p).join(' · ')}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Install Command */}\n {tool.installCommand ? (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Install command\n </span>\n <div className=\"relative rounded-md bg-zinc-900 text-zinc-100\">\n <pre className=\"overflow-x-auto px-3 py-2.5 pr-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap\">\n <code>{tool.installCommand}</code>\n </pre>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100\"\n onClick={handleCopy}\n aria-label={copied ? 'Copied!' : 'Copy install command'}\n >\n {copied ? (\n <Check className=\"h-3.5 w-3.5 text-emerald-500\" />\n ) : (\n <Copy className=\"h-3.5 w-3.5\" />\n )}\n <span className=\"ml-1 text-[10px]\">{copied ? 'Copied!' : 'Copy'}</span>\n </Button>\n </div>\n </div>\n ) : null}\n\n {/* Action Bar */}\n <div className=\"flex items-center gap-2\">\n {canInstall ? (\n <Button\n size=\"sm\"\n onClick={startInstall}\n disabled={status === 'streaming'}\n aria-label={`Install ${tool.name}`}\n className=\"cursor-pointer\"\n >\n {status === 'streaming' ? (\n <Loader2 className=\"mr-1.5 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Download className=\"mr-1.5 h-3.5 w-3.5\" />\n )}\n {status === 'streaming' ? 'Installing...' : 'Install'}\n </Button>\n ) : null}\n {canLaunch ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => void handleLaunch()}\n disabled={isLaunching}\n aria-label={`Launch ${tool.name}`}\n className=\"cursor-pointer\"\n >\n {isLaunching ? (\n <Loader2 className=\"mr-1.5 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Rocket className=\"mr-1.5 h-3.5 w-3.5\" />\n )}\n Launch\n </Button>\n ) : null}\n {tool.documentationUrl ? (\n <Button variant=\"outline\" size=\"sm\" className=\"cursor-pointer\" asChild>\n <a href={tool.documentationUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Docs\n <ExternalLink className=\"ml-1 h-3 w-3\" />\n </a>\n </Button>\n ) : null}\n </div>\n\n {/* Install Log */}\n {(status === 'streaming' || status === 'done' || status === 'error') && logs.length > 0 ? (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Install log\n </span>\n <div\n ref={logRef}\n onScroll={handleScroll}\n className=\"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100\"\n data-testid=\"tool-install-log\"\n >\n {logs.map((line, idx) => (\n // eslint-disable-next-line react/no-array-index-key -- logs are append-only, never reorder\n <div key={idx} className=\"break-all whitespace-pre-wrap\">\n {line}\n </div>\n ))}\n {status === 'done' ? (\n <div className=\"mt-2 border-t border-zinc-700 pt-2 text-emerald-400\">\n Installation complete\n </div>\n ) : null}\n {status === 'error' ? (\n <div className=\"mt-2 border-t border-zinc-700 pt-2 text-red-400\">\n Installation failed\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\nimport {\n Loader2,\n Rocket,\n Download,\n Monitor,\n Terminal,\n GitBranch,\n CircleX,\n Circle,\n CheckCircle2,\n Package,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport { ToolDetailDrawer } from './tool-detail-drawer';\nimport type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolCardProps {\n tool: ToolItem;\n onRefresh?: () => Promise<void>;\n className?: string;\n}\n\nconst TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {\n ide: { label: 'IDE', icon: Monitor },\n 'cli-agent': { label: 'CLI Agent', icon: Terminal },\n vcs: { label: 'VCS', icon: GitBranch },\n terminal: { label: 'Terminal', icon: Terminal },\n};\n\nexport function ToolCard({ tool, onRefresh, className }: ToolCardProps) {\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [autoStartInstall, setAutoStartInstall] = useState(false);\n const [isPending, startTransition] = useTransition();\n\n const isInstalled = tool.status.status === 'available';\n const isError = tool.status.status === 'error';\n const canLaunch = isInstalled && Boolean(tool.openDirectory);\n\n function handleLaunch(e: React.MouseEvent) {\n e.stopPropagation();\n startTransition(async () => {\n await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });\n });\n }\n\n function handleCardClick() {\n setAutoStartInstall(false);\n setDrawerOpen(true);\n }\n\n function handleInstallClick(e: React.MouseEvent) {\n e.stopPropagation();\n setAutoStartInstall(tool.autoInstall);\n setDrawerOpen(true);\n }\n\n return (\n <>\n <div\n data-testid=\"tool-card\"\n onClick={handleCardClick}\n className={cn(\n 'bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md',\n className\n )}\n >\n {/* Top row: icon + name left, tag badges right */}\n <div className=\"mb-2 flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {tool.iconUrl ? (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img\n src={tool.iconUrl}\n alt=\"\"\n width={20}\n height={20}\n className=\"shrink-0 dark:invert\"\n />\n ) : (\n <Package className=\"text-muted-foreground h-5 w-5 shrink-0\" />\n )}\n <h3 data-testid=\"tool-card-name\" className=\"truncate text-sm font-bold\">\n {tool.name}\n </h3>\n </div>\n <div data-testid=\"tool-card-tags\" className=\"flex shrink-0 items-center gap-1\">\n {tool.tags.map((tag) => {\n const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };\n const TagIcon = config.icon;\n return (\n <span\n key={tag}\n className=\"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]\"\n >\n <TagIcon className=\"h-2.5 w-2.5\" />\n {config.label}\n </span>\n );\n })}\n </div>\n </div>\n\n {/* Summary */}\n <p data-testid=\"tool-card-summary\" className=\"text-muted-foreground mt-1 truncate text-xs\">\n {tool.summary}\n </p>\n\n {/* Bottom section — pushed to bottom */}\n <div className=\"mt-auto flex items-center justify-between pt-3\">\n {/* Status text */}\n <div className=\"flex items-center gap-2\">\n {isError && tool.status.status === 'error' ? (\n <span\n className=\"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400\"\n title={tool.status.errorMessage}\n >\n <CircleX className=\"h-3 w-3 shrink-0\" />\n {tool.status.errorMessage ?? 'Error'}\n </span>\n ) : isInstalled ? (\n <span className=\"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Installed\n </span>\n ) : (\n <span className=\"text-muted-foreground flex items-center gap-1 text-[10px]\">\n <Circle className=\"h-3 w-3\" />\n Not installed\n </span>\n )}\n {tool.required ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400\">\n Required\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n This tool is required for Shep to function properly\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1\">\n {isInstalled && canLaunch ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleLaunch}\n disabled={isPending}\n aria-label={`Launch ${tool.name}`}\n data-testid=\"tool-card-launch-button\"\n className=\"h-7 cursor-pointer rounded-md px-3 text-xs\"\n >\n {isPending ? (\n <Loader2 className=\"mr-1 h-3 w-3 animate-spin\" />\n ) : (\n <Rocket className=\"mr-1 h-3 w-3\" />\n )}\n Launch\n </Button>\n ) : !isInstalled && !isError ? (\n <Button\n size=\"sm\"\n variant=\"default\"\n onClick={handleInstallClick}\n aria-label={`Install ${tool.name}`}\n data-testid=\"tool-card-install-button\"\n className=\"h-7 cursor-pointer rounded-md px-3 text-xs\"\n >\n <Download className=\"mr-1 h-3 w-3\" />\n Install\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n\n <ToolDetailDrawer\n tool={tool}\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n onRefresh={onRefresh}\n autoStart={autoStartInstall}\n />\n </>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Wrench } from 'lucide-react';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { cn } from '@/lib/utils';\nimport { ToolCard } from './tool-card';\nimport type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolsPageClientProps {\n tools: ToolItem[];\n className?: string;\n}\n\ntype TabValue = 'all' | 'ide' | 'cli-agent' | 'vcs' | 'terminal';\n\nconst TAB_FILTER: Record<TabValue, (tool: ToolItem) => boolean> = {\n all: () => true,\n ide: (tool) => tool.tags.includes('ide'),\n 'cli-agent': (tool) => tool.tags.includes('cli-agent'),\n vcs: (tool) => tool.tags.includes('vcs'),\n terminal: (tool) => tool.tags.includes('terminal'),\n};\n\nexport function ToolsPageClient({ tools: initialTools, className }: ToolsPageClientProps) {\n const [tools, setTools] = useState<ToolItem[]>(initialTools);\n const [activeTab, setActiveTab] = useState<TabValue>('all');\n\n const refreshTools = useCallback(async () => {\n try {\n const res = await fetch('/api/tools');\n if (res.ok) {\n const updated = (await res.json()) as ToolItem[];\n setTools(updated);\n }\n } catch {\n // Silently ignore refresh errors; user can re-navigate to refresh\n }\n }, []);\n\n const filtered = tools.filter(TAB_FILTER[activeTab]);\n\n return (\n <div data-testid=\"tools-page-client\" className={cn('space-y-4', className)}>\n {/* Compact header */}\n <div className=\"flex items-center gap-2\">\n <Wrench className=\"text-muted-foreground h-4 w-4\" />\n <h1 className=\"text-sm font-bold tracking-tight\">Tools</h1>\n <span className=\"text-muted-foreground text-[10px]\">\n {tools.filter((t) => t.status.status === 'available').length}/{tools.length} installed\n </span>\n </div>\n\n <Tabs\n value={activeTab}\n onValueChange={(value) => setActiveTab(value as TabValue)}\n data-testid=\"tools-page-tabs\"\n >\n <TabsList className=\"h-7\">\n <TabsTrigger value=\"all\" data-testid=\"tools-tab-all\" className=\"px-2.5 text-xs\">\n All\n </TabsTrigger>\n <TabsTrigger value=\"ide\" data-testid=\"tools-tab-ide\" className=\"px-2.5 text-xs\">\n IDEs\n </TabsTrigger>\n <TabsTrigger\n value=\"cli-agent\"\n data-testid=\"tools-tab-cli-agent\"\n className=\"px-2.5 text-xs\"\n >\n CLI Agents\n </TabsTrigger>\n <TabsTrigger value=\"vcs\" data-testid=\"tools-tab-vcs\" className=\"px-2.5 text-xs\">\n Version Control\n </TabsTrigger>\n <TabsTrigger value=\"terminal\" data-testid=\"tools-tab-terminal\" className=\"px-2.5 text-xs\">\n Terminals\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value={activeTab} className=\"mt-3\">\n {filtered.length === 0 ? (\n <div\n data-testid=\"tools-page-empty\"\n className=\"text-muted-foreground flex flex-col items-center justify-center py-12 text-center\"\n >\n <Wrench className=\"mb-2 h-6 w-6 opacity-20\" />\n <p className=\"text-xs\">No tools in this category.</p>\n </div>\n ) : (\n <div\n data-testid=\"tools-page-grid\"\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\"\n >\n {filtered.map((tool) => (\n <ToolCard key={tool.id} tool={tool} onRefresh={refreshTools} />\n ))}\n </div>\n )}\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z',\n key: '1a0edw',\n },\n ],\n ['path', { d: 'M12 22V12', key: 'd0xqtd' }],\n ['polyline', { points: '3.29 7 12 12 20.71 7', key: 'ousv84' }],\n ['path', { d: 'm7.5 4.27 9 5.15', key: '1c824w' }],\n];\n\n/**\n * @component @name Package\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/package\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Package = createLucideIcon('package', __iconNode);\n\nexport default Package;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 15V3', key: 'm9g1x1' }],\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n ['path', { d: 'm7 10 5 5 5-5', key: 'brsn70' }],\n];\n\n/**\n * @component @name Download\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/download\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Download = createLucideIcon('download', __iconNode);\n\nexport default Download;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', key: '48i651' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21', key: '1svkeh' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21', key: 'vw1qmm' }],\n];\n\n/**\n * @component @name Monitor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/monitor\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Monitor = createLucideIcon('monitor', __iconNode);\n\nexport default Monitor;\n"],"names":[],"mappings":"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","ignoreList":[4,5,6]}
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/presentation/web/hooks/use-tool-install-stream.ts","../../../../../../../src/presentation/web/components/features/tools/tool-detail-drawer.tsx","../../../../../../../src/presentation/web/components/features/tools/tool-card.tsx","../../../../../../../src/presentation/web/components/features/tools/tools-page-client.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/package.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/rocket.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/download.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/monitor.ts"],"sourcesContent":["'use client';\n\nimport { useState, useRef, useCallback, useEffect } from 'react';\nimport type { ToolInstallationStatus } from '@shepai/core/domain/generated/output';\n\nexport type InstallStreamStatus = 'idle' | 'streaming' | 'done' | 'error';\n\nexport interface UseToolInstallStreamResult {\n logs: string[];\n status: InstallStreamStatus;\n result: ToolInstallationStatus | null;\n startInstall: () => void;\n}\n\nexport function useToolInstallStream(toolId: string): UseToolInstallStreamResult {\n const [logs, setLogs] = useState<string[]>([]);\n const [status, setStatus] = useState<InstallStreamStatus>('idle');\n const [result, setResult] = useState<ToolInstallationStatus | null>(null);\n const esRef = useRef<EventSource | null>(null);\n\n const cleanup = useCallback(() => {\n if (esRef.current) {\n esRef.current.close();\n esRef.current = null;\n }\n }, []);\n\n // Cleanup on unmount\n useEffect(() => cleanup, [cleanup]);\n\n const startInstall = useCallback(() => {\n cleanup();\n setLogs([]);\n setResult(null);\n setStatus('streaming');\n\n const es = new EventSource(`/api/tools/${toolId}/install/stream`);\n esRef.current = es;\n\n es.onmessage = (event: MessageEvent) => {\n setLogs((prev) => [...prev, event.data]);\n };\n\n es.addEventListener('done', (event: MessageEvent) => {\n const installResult: ToolInstallationStatus = JSON.parse(event.data);\n setResult(installResult);\n setStatus(installResult.status === 'error' ? 'error' : 'done');\n cleanup();\n });\n\n es.onerror = () => {\n setStatus('error');\n cleanup();\n };\n }, [toolId, cleanup]);\n\n return { logs, status, result, startInstall };\n}\n","'use client';\n\nimport { useState, useRef, useEffect, useCallback } from 'react';\nimport {\n Copy,\n Check,\n ExternalLink,\n Download,\n Rocket,\n Loader2,\n Monitor,\n Terminal,\n GitBranch,\n Package,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { BaseDrawer } from '@/components/common/base-drawer/base-drawer';\nimport { useToolInstallStream } from '@/hooks/use-tool-install-stream';\nimport type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nconst PLATFORM_LABELS: Record<string, string> = {\n linux: 'Linux',\n darwin: 'macOS',\n win32: 'Windows',\n};\n\nexport interface ToolDetailDrawerProps {\n tool: ToolItem;\n open: boolean;\n onClose: () => void;\n onRefresh?: () => Promise<void>;\n autoStart?: boolean;\n}\n\nconst TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {\n ide: { label: 'IDE', icon: Monitor },\n 'cli-agent': { label: 'CLI Agent', icon: Terminal },\n vcs: { label: 'VCS', icon: GitBranch },\n terminal: { label: 'Terminal', icon: Terminal },\n};\n\nconst AUTO_SCROLL_THRESHOLD = 50;\n\nfunction StatusBadge({ status }: { status: string }) {\n if (status === 'available') {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-emerald-100 px-2 py-0.5 text-xs font-medium text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400\">\n <Check className=\"h-3 w-3\" />\n Installed\n </span>\n );\n }\n if (status === 'error') {\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-red-100 px-2 py-0.5 text-xs font-medium text-red-700 dark:bg-red-900/30 dark:text-red-400\">\n Error\n </span>\n );\n }\n return (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-amber-100 px-2 py-0.5 text-xs font-medium text-amber-700 dark:bg-amber-900/30 dark:text-amber-400\">\n Missing\n </span>\n );\n}\n\nexport function ToolDetailDrawer({\n tool,\n open,\n onClose,\n onRefresh,\n autoStart,\n}: ToolDetailDrawerProps) {\n const [copied, setCopied] = useState(false);\n const [isLaunching, setIsLaunching] = useState(false);\n const { logs, status, startInstall } = useToolInstallStream(tool.id);\n const logRef = useRef<HTMLDivElement>(null);\n const isAtBottomRef = useRef(true);\n const autoStartedRef = useRef(false);\n\n const isInstalled = tool.status.status === 'available';\n const isError = tool.status.status === 'error';\n const canLaunch = isInstalled && Boolean(tool.openDirectory);\n const canInstall = !isInstalled && !isError && tool.autoInstall;\n\n // Auto-start install when drawer opens with autoStart flag\n useEffect(() => {\n if (open && autoStart && canInstall && status === 'idle' && !autoStartedRef.current) {\n autoStartedRef.current = true;\n startInstall();\n }\n if (!open) {\n autoStartedRef.current = false;\n }\n }, [open, autoStart, canInstall, status, startInstall]);\n\n function handleCopy() {\n if (!tool.installCommand) return;\n void navigator.clipboard.writeText(tool.installCommand).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n\n async function handleLaunch() {\n setIsLaunching(true);\n try {\n await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });\n } finally {\n setIsLaunching(false);\n }\n }\n\n const handleScroll = useCallback(() => {\n const el = logRef.current;\n if (!el) return;\n isAtBottomRef.current =\n el.scrollTop + el.clientHeight >= el.scrollHeight - AUTO_SCROLL_THRESHOLD;\n }, []);\n\n useEffect(() => {\n if (isAtBottomRef.current && logRef.current) {\n logRef.current.scrollTop = logRef.current.scrollHeight;\n }\n }, [logs, status]);\n\n // Refresh tool status after install completes\n useEffect(() => {\n if (status === 'done' && onRefresh) {\n void onRefresh();\n }\n }, [status, onRefresh]);\n\n const header = (\n <div className=\"flex flex-col gap-1.5 pr-6\">\n <div className=\"flex items-center gap-2\">\n {tool.iconUrl ? (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img src={tool.iconUrl} alt=\"\" width={24} height={24} className=\"shrink-0 dark:invert\" />\n ) : (\n <Package className=\"text-muted-foreground h-6 w-6 shrink-0\" />\n )}\n <h2 className=\"text-base font-bold\">{tool.name}</h2>\n <StatusBadge status={tool.status.status} />\n </div>\n <div className=\"flex items-center gap-2\">\n {tool.tags.map((tag) => {\n const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };\n const TagIcon = config.icon;\n return (\n <span\n key={tag}\n className=\"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[10px]\"\n >\n <TagIcon className=\"h-3 w-3\" />\n {config.label}\n </span>\n );\n })}\n </div>\n </div>\n );\n\n return (\n <BaseDrawer\n open={open}\n onClose={onClose}\n size=\"md\"\n modal\n title={tool.name}\n header={header}\n data-testid=\"tool-detail-drawer\"\n >\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4\">\n {/* Description */}\n <p className=\"text-muted-foreground text-sm\">{tool.description}</p>\n\n {/* Meta info row: author + platforms */}\n {tool.author || tool.platforms ? (\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs\">\n {tool.author ? (\n <span className=\"text-muted-foreground\">\n by{' '}\n {tool.website ? (\n <a\n href={tool.website}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-foreground hover:underline\"\n >\n {tool.author}\n </a>\n ) : (\n <span className=\"text-foreground\">{tool.author}</span>\n )}\n </span>\n ) : null}\n {tool.platforms && tool.platforms.length > 0 ? (\n <span className=\"text-muted-foreground\">\n {tool.platforms.map((p) => PLATFORM_LABELS[p] ?? p).join(' · ')}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Install Command */}\n {tool.installCommand ? (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Install command\n </span>\n <div className=\"relative rounded-md bg-zinc-900 text-zinc-100\">\n <pre className=\"overflow-x-auto px-3 py-2.5 pr-16 font-mono text-xs leading-relaxed break-all whitespace-pre-wrap\">\n <code>{tool.installCommand}</code>\n </pre>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"absolute top-1.5 right-1.5 h-7 cursor-pointer px-2 text-zinc-400 hover:text-zinc-100\"\n onClick={handleCopy}\n aria-label={copied ? 'Copied!' : 'Copy install command'}\n >\n {copied ? (\n <Check className=\"h-3.5 w-3.5 text-emerald-500\" />\n ) : (\n <Copy className=\"h-3.5 w-3.5\" />\n )}\n <span className=\"ml-1 text-[10px]\">{copied ? 'Copied!' : 'Copy'}</span>\n </Button>\n </div>\n </div>\n ) : null}\n\n {/* Action Bar */}\n <div className=\"flex items-center gap-2\">\n {canInstall ? (\n <Button\n size=\"sm\"\n onClick={startInstall}\n disabled={status === 'streaming'}\n aria-label={`Install ${tool.name}`}\n className=\"cursor-pointer\"\n >\n {status === 'streaming' ? (\n <Loader2 className=\"mr-1.5 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Download className=\"mr-1.5 h-3.5 w-3.5\" />\n )}\n {status === 'streaming' ? 'Installing...' : 'Install'}\n </Button>\n ) : null}\n {canLaunch ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => void handleLaunch()}\n disabled={isLaunching}\n aria-label={`Launch ${tool.name}`}\n className=\"cursor-pointer\"\n >\n {isLaunching ? (\n <Loader2 className=\"mr-1.5 h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Rocket className=\"mr-1.5 h-3.5 w-3.5\" />\n )}\n Launch\n </Button>\n ) : null}\n {tool.documentationUrl ? (\n <Button variant=\"outline\" size=\"sm\" className=\"cursor-pointer\" asChild>\n <a href={tool.documentationUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Docs\n <ExternalLink className=\"ml-1 h-3 w-3\" />\n </a>\n </Button>\n ) : null}\n </div>\n\n {/* Install Log */}\n {(status === 'streaming' || status === 'done' || status === 'error') && logs.length > 0 ? (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Install log\n </span>\n <div\n ref={logRef}\n onScroll={handleScroll}\n className=\"max-h-60 overflow-auto rounded-md bg-zinc-900 p-3 font-mono text-xs leading-relaxed text-zinc-100\"\n data-testid=\"tool-install-log\"\n >\n {logs.map((line, idx) => (\n // eslint-disable-next-line react/no-array-index-key -- logs are append-only, never reorder\n <div key={idx} className=\"break-all whitespace-pre-wrap\">\n {line}\n </div>\n ))}\n {status === 'done' ? (\n <div className=\"mt-2 border-t border-zinc-700 pt-2 text-emerald-400\">\n Installation complete\n </div>\n ) : null}\n {status === 'error' ? (\n <div className=\"mt-2 border-t border-zinc-700 pt-2 text-red-400\">\n Installation failed\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\nimport {\n Loader2,\n Rocket,\n Download,\n Monitor,\n Terminal,\n GitBranch,\n CircleX,\n Circle,\n CheckCircle2,\n Package,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';\nimport { cn } from '@/lib/utils';\nimport { ToolDetailDrawer } from './tool-detail-drawer';\nimport type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolCardProps {\n tool: ToolItem;\n onRefresh?: () => Promise<void>;\n className?: string;\n}\n\nconst TAG_CONFIG: Record<string, { label: string; icon: typeof Monitor }> = {\n ide: { label: 'IDE', icon: Monitor },\n 'cli-agent': { label: 'CLI Agent', icon: Terminal },\n vcs: { label: 'VCS', icon: GitBranch },\n terminal: { label: 'Terminal', icon: Terminal },\n};\n\nexport function ToolCard({ tool, onRefresh, className }: ToolCardProps) {\n const [drawerOpen, setDrawerOpen] = useState(false);\n const [autoStartInstall, setAutoStartInstall] = useState(false);\n const [isPending, startTransition] = useTransition();\n\n const isInstalled = tool.status.status === 'available';\n const isError = tool.status.status === 'error';\n const canLaunch = isInstalled && Boolean(tool.openDirectory);\n\n function handleLaunch(e: React.MouseEvent) {\n e.stopPropagation();\n startTransition(async () => {\n await fetch(`/api/tools/${tool.id}/launch`, { method: 'POST' });\n });\n }\n\n function handleCardClick() {\n setAutoStartInstall(false);\n setDrawerOpen(true);\n }\n\n function handleInstallClick(e: React.MouseEvent) {\n e.stopPropagation();\n setAutoStartInstall(tool.autoInstall);\n setDrawerOpen(true);\n }\n\n return (\n <>\n <div\n data-testid=\"tool-card\"\n onClick={handleCardClick}\n className={cn(\n 'bg-card group flex h-30 w-full cursor-pointer flex-col rounded-lg border p-3 transition-shadow hover:shadow-md',\n className\n )}\n >\n {/* Top row: icon + name left, tag badges right */}\n <div className=\"mb-2 flex items-start justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {tool.iconUrl ? (\n /* eslint-disable-next-line @next/next/no-img-element */\n <img\n src={tool.iconUrl}\n alt=\"\"\n width={20}\n height={20}\n className=\"shrink-0 dark:invert\"\n />\n ) : (\n <Package className=\"text-muted-foreground h-5 w-5 shrink-0\" />\n )}\n <h3 data-testid=\"tool-card-name\" className=\"truncate text-sm font-bold\">\n {tool.name}\n </h3>\n </div>\n <div data-testid=\"tool-card-tags\" className=\"flex shrink-0 items-center gap-1\">\n {tool.tags.map((tag) => {\n const config = TAG_CONFIG[tag] ?? { label: tag, icon: Monitor };\n const TagIcon = config.icon;\n return (\n <span\n key={tag}\n className=\"text-muted-foreground/70 inline-flex items-center gap-0.5 text-[9px]\"\n >\n <TagIcon className=\"h-2.5 w-2.5\" />\n {config.label}\n </span>\n );\n })}\n </div>\n </div>\n\n {/* Summary */}\n <p data-testid=\"tool-card-summary\" className=\"text-muted-foreground mt-1 truncate text-xs\">\n {tool.summary}\n </p>\n\n {/* Bottom section — pushed to bottom */}\n <div className=\"mt-auto flex items-center justify-between pt-3\">\n {/* Status text */}\n <div className=\"flex items-center gap-2\">\n {isError && tool.status.status === 'error' ? (\n <span\n className=\"flex items-center gap-1 truncate text-[10px] text-red-600 dark:text-red-400\"\n title={tool.status.errorMessage}\n >\n <CircleX className=\"h-3 w-3 shrink-0\" />\n {tool.status.errorMessage ?? 'Error'}\n </span>\n ) : isInstalled ? (\n <span className=\"flex items-center gap-1 text-[10px] text-emerald-600 dark:text-emerald-400\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Installed\n </span>\n ) : (\n <span className=\"text-muted-foreground flex items-center gap-1 text-[10px]\">\n <Circle className=\"h-3 w-3\" />\n Not installed\n </span>\n )}\n {tool.required ? (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"rounded bg-amber-100 px-1.5 py-0.5 text-[9px] font-medium text-amber-700 dark:bg-amber-900/50 dark:text-amber-400\">\n Required\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">\n This tool is required for Shep to function properly\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ) : null}\n </div>\n\n {/* Action buttons */}\n <div className=\"flex items-center gap-1\">\n {isInstalled && canLaunch ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={handleLaunch}\n disabled={isPending}\n aria-label={`Launch ${tool.name}`}\n data-testid=\"tool-card-launch-button\"\n className=\"h-7 cursor-pointer rounded-md px-3 text-xs\"\n >\n {isPending ? (\n <Loader2 className=\"mr-1 h-3 w-3 animate-spin\" />\n ) : (\n <Rocket className=\"mr-1 h-3 w-3\" />\n )}\n Launch\n </Button>\n ) : !isInstalled && !isError ? (\n <Button\n size=\"sm\"\n variant=\"default\"\n onClick={handleInstallClick}\n aria-label={`Install ${tool.name}`}\n data-testid=\"tool-card-install-button\"\n className=\"h-7 cursor-pointer rounded-md px-3 text-xs\"\n >\n <Download className=\"mr-1 h-3 w-3\" />\n Install\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n\n <ToolDetailDrawer\n tool={tool}\n open={drawerOpen}\n onClose={() => setDrawerOpen(false)}\n onRefresh={onRefresh}\n autoStart={autoStartInstall}\n />\n </>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Wrench } from 'lucide-react';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { cn } from '@/lib/utils';\nimport { ToolCard } from './tool-card';\nimport type { ToolItem } from '@shepai/core/application/use-cases/tools/list-tools.use-case';\n\nexport interface ToolsPageClientProps {\n tools: ToolItem[];\n className?: string;\n}\n\ntype TabValue = 'all' | 'ide' | 'cli-agent' | 'vcs' | 'terminal';\n\nconst TAB_FILTER: Record<TabValue, (tool: ToolItem) => boolean> = {\n all: () => true,\n ide: (tool) => tool.tags.includes('ide'),\n 'cli-agent': (tool) => tool.tags.includes('cli-agent'),\n vcs: (tool) => tool.tags.includes('vcs'),\n terminal: (tool) => tool.tags.includes('terminal'),\n};\n\nexport function ToolsPageClient({ tools: initialTools, className }: ToolsPageClientProps) {\n const [tools, setTools] = useState<ToolItem[]>(initialTools);\n const [activeTab, setActiveTab] = useState<TabValue>('all');\n\n const refreshTools = useCallback(async () => {\n try {\n const res = await fetch('/api/tools');\n if (res.ok) {\n const updated = (await res.json()) as ToolItem[];\n setTools(updated);\n }\n } catch {\n // Silently ignore refresh errors; user can re-navigate to refresh\n }\n }, []);\n\n const filtered = tools.filter(TAB_FILTER[activeTab]);\n\n return (\n <div data-testid=\"tools-page-client\" className={cn('space-y-4', className)}>\n {/* Compact header */}\n <div className=\"flex items-center gap-2\">\n <Wrench className=\"text-muted-foreground h-4 w-4\" />\n <h1 className=\"text-sm font-bold tracking-tight\">Tools</h1>\n <span className=\"text-muted-foreground text-[10px]\">\n {tools.filter((t) => t.status.status === 'available').length}/{tools.length} installed\n </span>\n </div>\n\n <Tabs\n value={activeTab}\n onValueChange={(value) => setActiveTab(value as TabValue)}\n data-testid=\"tools-page-tabs\"\n >\n <TabsList className=\"h-7\">\n <TabsTrigger value=\"all\" data-testid=\"tools-tab-all\" className=\"px-2.5 text-xs\">\n All\n </TabsTrigger>\n <TabsTrigger value=\"ide\" data-testid=\"tools-tab-ide\" className=\"px-2.5 text-xs\">\n IDEs\n </TabsTrigger>\n <TabsTrigger\n value=\"cli-agent\"\n data-testid=\"tools-tab-cli-agent\"\n className=\"px-2.5 text-xs\"\n >\n CLI Agents\n </TabsTrigger>\n <TabsTrigger value=\"vcs\" data-testid=\"tools-tab-vcs\" className=\"px-2.5 text-xs\">\n Version Control\n </TabsTrigger>\n <TabsTrigger value=\"terminal\" data-testid=\"tools-tab-terminal\" className=\"px-2.5 text-xs\">\n Terminals\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value={activeTab} className=\"mt-3\">\n {filtered.length === 0 ? (\n <div\n data-testid=\"tools-page-empty\"\n className=\"text-muted-foreground flex flex-col items-center justify-center py-12 text-center\"\n >\n <Wrench className=\"mb-2 h-6 w-6 opacity-20\" />\n <p className=\"text-xs\">No tools in this category.</p>\n </div>\n ) : (\n <div\n data-testid=\"tools-page-grid\"\n className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\"\n >\n {filtered.map((tool) => (\n <ToolCard key={tool.id} tool={tool} onRefresh={refreshTools} />\n ))}\n </div>\n )}\n </TabsContent>\n </Tabs>\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z',\n key: '1a0edw',\n },\n ],\n ['path', { d: 'M12 22V12', key: 'd0xqtd' }],\n ['polyline', { points: '3.29 7 12 12 20.71 7', key: 'ousv84' }],\n ['path', { d: 'm7.5 4.27 9 5.15', key: '1c824w' }],\n];\n\n/**\n * @component @name Package\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/package\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Package = createLucideIcon('package', __iconNode);\n\nexport default Package;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z',\n key: 'm3kijz',\n },\n ],\n [\n 'path',\n {\n d: 'm12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z',\n key: '1fmvmk',\n },\n ],\n ['path', { d: 'M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0', key: '1f8sc4' }],\n ['path', { d: 'M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5', key: 'qeys4' }],\n];\n\n/**\n * @component @name Rocket\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/rocket\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Rocket = createLucideIcon('rocket', __iconNode);\n\nexport default Rocket;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 15V3', key: 'm9g1x1' }],\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n ['path', { d: 'm7 10 5 5 5-5', key: 'brsn70' }],\n];\n\n/**\n * @component @name Download\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/download\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Download = createLucideIcon('download', __iconNode);\n\nexport default Download;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '20', height: '14', x: '2', y: '3', rx: '2', key: '48i651' }],\n ['line', { x1: '8', x2: '16', y1: '21', y2: '21', key: '1svkeh' }],\n ['line', { x1: '12', x2: '12', y1: '17', y2: '21', key: 'vw1qmm' }],\n];\n\n/**\n * @component @name Monitor\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/monitor\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Monitor = createLucideIcon('monitor', __iconNode);\n\nexport default Monitor;\n"],"names":[],"mappings":"wDGEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,ODFA,EAAA,EAAA,CAAA,CAAA,oBG8BA,CAAA,GAAM,EAAA,CAAA,EAAS,CAAA,AAAT,CAAS,AAAT,CAAS,AAAT,CAAS,CAAA,CAAA,CAAA,EAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,4GArBhD,CAAA,ADAD,CAAA,ACAC,KACA,CDAD,ACCG,CDDH,CAAA,ACCM,CAAA,ADDN,CCCM,ADDN,CCCM,ADDN,CCCM,CAAA,CAAA,CAAA,+FACE,QAAA,EAET,CACA,CAAC,OAAQ,CAAA,AAAE,EAAA,yCAA6C,CAAA,CAAA,CAAA,CAAA,AAAK,QAAA,CAAU,CAAA,EACtE,CAAA,MAAQ,CAAA,AAAE,EAAA,0CAA8C,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CACzE,8BCA8C,CCAF,ADAE,CCAF,ADAE,CCAF,ADAE,CCAF,ADAE,KAhBjC,CCAA,CAAA,ADAG,CCAH,ADAG,CAAA,ACAH,CAAA,ADAG,kCACA,wDAAkD,CAAU,CAAA,SACjE,CCAA,ADAA,kBAAsB,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAK,CCAD,ADAC,CCAD,ADAC,CAAA,ACAD,CAAA,ADAC,MAAU,ECAD,CAAA,mCAFpC,CAAA,ADAA,WCAe,CAAA,ADAV,MCAkB,CDAD,ACAC,CAAA,ADAD,CCAC,ADAD,CAAA,ACAC,CAAA,ADAD,ACAO,CAAA,CAAG,IAAK,EAAG,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,AAAI,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,4BAC5C,CDApB,ACAoB,CDApB,ACAoB,CDApB,ACAoB,CDApB,ACAoB,CDApB,ACAoB,AAAM,CDA1B,ACA0B,CAAA,ADA1B,CCA0B,ADA1B,wCCCW,CAAA,ADAX,CCAW,ADAX,CCAW,ADAX,CCAW,ADAX,CAAA,WCA+B,CDAC,ICAK,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,GLHpE,IAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,MAAA,EAAA,EAAA,CAAA,CAAA,OEwBA,CAAA,ACbS,GDaH,EAAA,CAAA,EAAU,CAAA,ACZL,CAAA,ADYK,CAAA,CAAA,KAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAxBG,CAwBQ,AAvB1C,CAuB0C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CApB7C,AAoB6C,CCpB7C,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CDAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CDAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CAAA,ACAA,CDAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CAAA,ACAA,CAAA,ADAA,CCAA,ADAA,CAAA,ACAA,CDAA,ACAA,CDAA,ACAA,CAAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA,CCAA,ADAA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","ignoreList":[4,5,6,7]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
module.exports=[41305,63496,77127,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(59653),e=a.i(7420),f=a.i(6175),g=a.i(90986);function h(a){let d=a+"CollectionProvider",[h,i]=(0,e.createContextScope)(d),[j,k]=h(d,{collectionRef:{current:null},itemMap:new Map}),l=a=>{let{scope:d,children:e}=a,f=c.default.useRef(null),g=c.default.useRef(new Map).current;return(0,b.jsx)(j,{scope:d,itemMap:g,collectionRef:f,children:e})};l.displayName=d;let m=a+"CollectionSlot",n=(0,g.createSlot)(m),o=c.default.forwardRef((a,c)=>{let{scope:d,children:e}=a,g=k(m,d),h=(0,f.useComposedRefs)(c,g.collectionRef);return(0,b.jsx)(n,{ref:h,children:e})});o.displayName=m;let p=a+"CollectionItemSlot",q="data-radix-collection-item",r=(0,g.createSlot)(p),s=c.default.forwardRef((a,d)=>{let{scope:e,children:g,...h}=a,i=c.default.useRef(null),j=(0,f.useComposedRefs)(d,i),l=k(p,e);return c.default.useEffect(()=>(l.itemMap.set(i,{ref:i,...h}),()=>void l.itemMap.delete(i))),(0,b.jsx)(r,{...{[q]:""},ref:j,children:g})});return s.displayName=p,[{Provider:l,Slot:o,ItemSlot:s},function(b){let d=k(a+"CollectionConsumer",b);return c.default.useCallback(()=>{let a=d.collectionRef.current;if(!a)return[];let b=Array.from(a.querySelectorAll(`[${q}]`));return Array.from(d.itemMap.values()).sort((a,c)=>b.indexOf(a.ref.current)-b.indexOf(c.ref.current))},[d.collectionRef,d.itemMap])},i]}var i=new WeakMap;function j(a,b){var c,d;let e,f,g;if("at"in Array.prototype)return Array.prototype.at.call(a,b);let h=(c=a,d=b,e=c.length,(g=(f=k(d))>=0?f:e+f)<0||g>=e?-1:g);return -1===h?void 0:a[h]}function k(a){return a!=a||0===a?0:Math.trunc(a)}(class a extends Map{#a;constructor(a){super(a),this.#a=[...super.keys()],i.set(this,!0)}set(a,b){return i.get(this)&&(this.has(a)?this.#a[this.#a.indexOf(a)]=a:this.#a.push(a)),super.set(a,b),this}insert(a,b,c){let d,e=this.has(b),f=this.#a.length,g=k(a),h=g>=0?g:f+g,i=h<0||h>=f?-1:h;if(i===this.size||e&&i===this.size-1||-1===i)return this.set(b,c),this;let j=this.size+ +!e;g<0&&h++;let l=[...this.#a],m=!1;for(let a=h;a<j;a++)if(h===a){let f=l[a];l[a]===b&&(f=l[a+1]),e&&this.delete(b),d=this.get(f),this.set(b,c)}else{m||l[a-1]!==b||(m=!0);let c=l[m?a:a-1],e=d;d=this.get(c),this.delete(c),this.set(c,e)}return this}with(b,c,d){let e=new a(this);return e.insert(b,c,d),e}before(a){let b=this.#a.indexOf(a)-1;if(!(b<0))return this.entryAt(b)}setBefore(a,b,c){let d=this.#a.indexOf(a);return -1===d?this:this.insert(d,b,c)}after(a){let b=this.#a.indexOf(a);if(-1!==(b=-1===b||b===this.size-1?-1:b+1))return this.entryAt(b)}setAfter(a,b,c){let d=this.#a.indexOf(a);return -1===d?this:this.insert(d+1,b,c)}first(){return this.entryAt(0)}last(){return this.entryAt(-1)}clear(){return this.#a=[],super.clear()}delete(a){let b=super.delete(a);return b&&this.#a.splice(this.#a.indexOf(a),1),b}deleteAt(a){let b=this.keyAt(a);return void 0!==b&&this.delete(b)}at(a){let b=j(this.#a,a);if(void 0!==b)return this.get(b)}entryAt(a){let b=j(this.#a,a);if(void 0!==b)return[b,this.get(b)]}indexOf(a){return this.#a.indexOf(a)}keyAt(a){return j(this.#a,a)}from(a,b){let c=this.indexOf(a);if(-1===c)return;let d=c+b;return d<0&&(d=0),d>=this.size&&(d=this.size-1),this.at(d)}keyFrom(a,b){let c=this.indexOf(a);if(-1===c)return;let d=c+b;return d<0&&(d=0),d>=this.size&&(d=this.size-1),this.keyAt(d)}find(a,b){let c=0;for(let d of this){if(Reflect.apply(a,b,[d,c,this]))return d;c++}}findIndex(a,b){let c=0;for(let d of this){if(Reflect.apply(a,b,[d,c,this]))return c;c++}return -1}filter(b,c){let d=[],e=0;for(let a of this)Reflect.apply(b,c,[a,e,this])&&d.push(a),e++;return new a(d)}map(b,c){let d=[],e=0;for(let a of this)d.push([a[0],Reflect.apply(b,c,[a,e,this])]),e++;return new a(d)}reduce(...a){let[b,c]=a,d=0,e=c??this.at(0);for(let c of this)e=0===d&&1===a.length?c:Reflect.apply(b,this,[e,c,d,this]),d++;return e}reduceRight(...a){let[b,c]=a,d=c??this.at(-1);for(let c=this.size-1;c>=0;c--){let e=this.at(c);d=c===this.size-1&&1===a.length?e:Reflect.apply(b,this,[d,e,c,this])}return d}toSorted(b){return new a([...this.entries()].sort(b))}toReversed(){let b=new a;for(let a=this.size-1;a>=0;a--){let c=this.keyAt(a),d=this.get(c);b.set(c,d)}return b}toSpliced(...b){let c=[...this.entries()];return c.splice(...b),new a(c)}slice(b,c){let d=new a,e=this.size-1;if(void 0===b)return d;b<0&&(b+=this.size),void 0!==c&&c>0&&(e=c-1);for(let a=b;a<=e;a++){let b=this.keyAt(a),c=this.get(b);d.set(b,c)}return d}every(a,b){let c=0;for(let d of this){if(!Reflect.apply(a,b,[d,c,this]))return!1;c++}return!0}some(a,b){let c=0;for(let d of this){if(Reflect.apply(a,b,[d,c,this]))return!0;c++}return!1}}),a.s(["createCollection",()=>h],63496);var l=a.i(5472),m=a.i(66873),n=a.i(79406),o=a.i(17329),p=a.i(48939),q="rovingFocusGroup.onEntryFocus",r={bubbles:!1,cancelable:!0},s="RovingFocusGroup",[t,u,v]=h(s),[w,x]=(0,e.createContextScope)(s,[v]),[y,z]=w(s),A=c.forwardRef((a,c)=>(0,b.jsx)(t.Provider,{scope:a.__scopeRovingFocusGroup,children:(0,b.jsx)(t.Slot,{scope:a.__scopeRovingFocusGroup,children:(0,b.jsx)(B,{...a,ref:c})})}));A.displayName=s;var B=c.forwardRef((a,e)=>{let{__scopeRovingFocusGroup:g,orientation:h,loop:i=!1,dir:j,currentTabStopId:k,defaultCurrentTabStopId:l,onCurrentTabStopIdChange:t,onEntryFocus:v,preventScrollOnEntryFocus:w=!1,...x}=a,z=c.useRef(null),A=(0,f.useComposedRefs)(e,z),B=(0,p.useDirection)(j),[C,D]=(0,o.useControllableState)({prop:k,defaultProp:l??null,onChange:t,caller:s}),[E,G]=c.useState(!1),H=(0,n.useCallbackRef)(v),I=u(g),J=c.useRef(!1),[K,L]=c.useState(0);return c.useEffect(()=>{let a=z.current;if(a)return a.addEventListener(q,H),()=>a.removeEventListener(q,H)},[H]),(0,b.jsx)(y,{scope:g,orientation:h,dir:B,loop:i,currentTabStopId:C,onItemFocus:c.useCallback(a=>D(a),[D]),onItemShiftTab:c.useCallback(()=>G(!0),[]),onFocusableItemAdd:c.useCallback(()=>L(a=>a+1),[]),onFocusableItemRemove:c.useCallback(()=>L(a=>a-1),[]),children:(0,b.jsx)(m.Primitive.div,{tabIndex:E||0===K?-1:0,"data-orientation":h,...x,ref:A,style:{outline:"none",...a.style},onMouseDown:(0,d.composeEventHandlers)(a.onMouseDown,()=>{J.current=!0}),onFocus:(0,d.composeEventHandlers)(a.onFocus,a=>{let b=!J.current;if(a.target===a.currentTarget&&b&&!E){let b=new CustomEvent(q,r);if(a.currentTarget.dispatchEvent(b),!b.defaultPrevented){let a=I().filter(a=>a.focusable);F([a.find(a=>a.active),a.find(a=>a.id===C),...a].filter(Boolean).map(a=>a.ref.current),w)}}J.current=!1}),onBlur:(0,d.composeEventHandlers)(a.onBlur,()=>G(!1))})})}),C="RovingFocusGroupItem",D=c.forwardRef((a,e)=>{let{__scopeRovingFocusGroup:f,focusable:g=!0,active:h=!1,tabStopId:i,children:j,...k}=a,n=(0,l.useId)(),o=i||n,p=z(C,f),q=p.currentTabStopId===o,r=u(f),{onFocusableItemAdd:s,onFocusableItemRemove:v,currentTabStopId:w}=p;return c.useEffect(()=>{if(g)return s(),()=>v()},[g,s,v]),(0,b.jsx)(t.ItemSlot,{scope:f,id:o,focusable:g,active:h,children:(0,b.jsx)(m.Primitive.span,{tabIndex:q?0:-1,"data-orientation":p.orientation,...k,ref:e,onMouseDown:(0,d.composeEventHandlers)(a.onMouseDown,a=>{g?p.onItemFocus(o):a.preventDefault()}),onFocus:(0,d.composeEventHandlers)(a.onFocus,()=>p.onItemFocus(o)),onKeyDown:(0,d.composeEventHandlers)(a.onKeyDown,a=>{if("Tab"===a.key&&a.shiftKey)return void p.onItemShiftTab();if(a.target!==a.currentTarget)return;let b=function(a,b,c){var d;let e=(d=a.key,"rtl"!==c?d:"ArrowLeft"===d?"ArrowRight":"ArrowRight"===d?"ArrowLeft":d);if(!("vertical"===b&&["ArrowLeft","ArrowRight"].includes(e))&&!("horizontal"===b&&["ArrowUp","ArrowDown"].includes(e)))return E[e]}(a,p.orientation,p.dir);if(void 0!==b){if(a.metaKey||a.ctrlKey||a.altKey||a.shiftKey)return;a.preventDefault();let e=r().filter(a=>a.focusable).map(a=>a.ref.current);if("last"===b)e.reverse();else if("prev"===b||"next"===b){var c,d;"prev"===b&&e.reverse();let f=e.indexOf(a.currentTarget);e=p.loop?(c=e,d=f+1,c.map((a,b)=>c[(d+b)%c.length])):e.slice(f+1)}setTimeout(()=>F(e))}}),children:"function"==typeof j?j({isCurrentTabStop:q,hasTabStop:null!=w}):j})})});D.displayName=C;var E={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function F(a,b=!1){let c=document.activeElement;for(let d of a)if(d===c||(d.focus({preventScroll:b}),document.activeElement!==c))return}a.s(["Item",()=>D,"Root",()=>A,"createRovingFocusGroupScope",()=>x],77127);var G=a.i(14272),H="Tabs",[I,J]=(0,e.createContextScope)(H,[x]),K=x(),[L,M]=I(H),N=c.forwardRef((a,c)=>{let{__scopeTabs:d,value:e,onValueChange:f,defaultValue:g,orientation:h="horizontal",dir:i,activationMode:j="automatic",...k}=a,n=(0,p.useDirection)(i),[q,r]=(0,o.useControllableState)({prop:e,onChange:f,defaultProp:g??"",caller:H});return(0,b.jsx)(L,{scope:d,baseId:(0,l.useId)(),value:q,onValueChange:r,orientation:h,dir:n,activationMode:j,children:(0,b.jsx)(m.Primitive.div,{dir:n,"data-orientation":h,...k,ref:c})})});N.displayName=H;var O="TabsList",P=c.forwardRef((a,c)=>{let{__scopeTabs:d,loop:e=!0,...f}=a,g=M(O,d),h=K(d);return(0,b.jsx)(A,{asChild:!0,...h,orientation:g.orientation,dir:g.dir,loop:e,children:(0,b.jsx)(m.Primitive.div,{role:"tablist","aria-orientation":g.orientation,...f,ref:c})})});P.displayName=O;var Q="TabsTrigger",R=c.forwardRef((a,c)=>{let{__scopeTabs:e,value:f,disabled:g=!1,...h}=a,i=M(Q,e),j=K(e),k=U(i.baseId,f),l=V(i.baseId,f),n=f===i.value;return(0,b.jsx)(D,{asChild:!0,...j,focusable:!g,active:n,children:(0,b.jsx)(m.Primitive.button,{type:"button",role:"tab","aria-selected":n,"aria-controls":l,"data-state":n?"active":"inactive","data-disabled":g?"":void 0,disabled:g,id:k,...h,ref:c,onMouseDown:(0,d.composeEventHandlers)(a.onMouseDown,a=>{g||0!==a.button||!1!==a.ctrlKey?a.preventDefault():i.onValueChange(f)}),onKeyDown:(0,d.composeEventHandlers)(a.onKeyDown,a=>{[" ","Enter"].includes(a.key)&&i.onValueChange(f)}),onFocus:(0,d.composeEventHandlers)(a.onFocus,()=>{let a="manual"!==i.activationMode;n||g||!a||i.onValueChange(f)})})})});R.displayName=Q;var S="TabsContent",T=c.forwardRef((a,d)=>{let{__scopeTabs:e,value:f,forceMount:g,children:h,...i}=a,j=M(S,e),k=U(j.baseId,f),l=V(j.baseId,f),n=f===j.value,o=c.useRef(n);return c.useEffect(()=>{let a=requestAnimationFrame(()=>o.current=!1);return()=>cancelAnimationFrame(a)},[]),(0,b.jsx)(G.Presence,{present:g||n,children:({present:c})=>(0,b.jsx)(m.Primitive.div,{"data-state":n?"active":"inactive","data-orientation":j.orientation,role:"tabpanel","aria-labelledby":k,hidden:!c,id:l,tabIndex:0,...i,ref:d,style:{...a.style,animationDuration:o.current?"0s":void 0},children:c&&h})})});function U(a,b){return`${a}-trigger-${b}`}function V(a,b){return`${a}-content-${b}`}T.displayName=S,a.s(["Content",()=>T,"List",()=>P,"Root",()=>N,"Tabs",()=>N,"TabsContent",()=>T,"TabsList",()=>P,"TabsTrigger",()=>R,"Trigger",()=>R,"createTabsScope",()=>J],287);var W=a.i(287),W=W,X=a.i(85536);let Y=W.Root,Z=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(W.List,{ref:d,className:(0,X.cn)("bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1",a),...c}));Z.displayName=W.List.displayName;let $=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(W.Trigger,{ref:d,className:(0,X.cn)("ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow",a),...c}));$.displayName=W.Trigger.displayName;let _=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(W.Content,{ref:d,className:(0,X.cn)("ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none",a),...c}));_.displayName=W.Content.displayName,a.s(["Tabs",()=>Y,"TabsContent",()=>_,"TabsList",()=>Z,"TabsTrigger",()=>$],41305)}];
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=src_presentation_web_components_ui_tabs_tsx_b226ea9b._.js.map
|
package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_tabs_tsx_b226ea9b._.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-roving-focus%401.1.11_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.10__%40type_61b1e57265158db0f110fd8c0c27aeba/node_modules/%40radix-ui/react-roving-focus/dist/index.mjs","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-tabs%401.1.13_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.10__%40types%2Breact%40_68a385a9eea120600bb372a91de22b00/node_modules/%40radix-ui/react-tabs/dist/index.mjs","../../../../../../../src/presentation/web/components/ui/tabs.tsx","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-collection%401.1.7_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.10__%40types%2Br_2988d950cbd44144aec5e6ce60804441/node_modules/%40radix-ui/react-collection/dist/index.mjs"],"sourcesContent":["\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'bg-muted text-muted-foreground inline-flex h-9 items-center justify-center rounded-lg p-1',\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'ring-offset-background focus-visible:ring-ring data-[state=active]:bg-background data-[state=active]:text-foreground inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow',\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ComponentRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none',\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":[],"mappings":"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","ignoreList":[0,1,3]}
|
|
@@ -8,12 +8,12 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [],
|
|
10
10
|
"rootMainFiles": [
|
|
11
|
-
"static/chunks/
|
|
11
|
+
"static/chunks/5d0a6417c4e4e545.js",
|
|
12
12
|
"static/chunks/84a181ff3270fd9f.js",
|
|
13
|
+
"static/chunks/07f00e2e73d322d2.js",
|
|
13
14
|
"static/chunks/cfe4dc9904fcfddb.js",
|
|
14
15
|
"static/chunks/4b6cc9f65260f2bd.js",
|
|
15
|
-
"static/chunks/
|
|
16
|
-
"static/chunks/turbopack-080e470ea902d0ba.js"
|
|
16
|
+
"static/chunks/turbopack-05820f781f3ffc22.js"
|
|
17
17
|
]
|
|
18
18
|
};
|
|
19
19
|
globalThis.__BUILD_MANIFEST.lowPriorityFiles = [
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
2
|
-
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/
|
|
1
|
+
<!DOCTYPE html><!--kPTTy_YsS3np6cPgsciL2--><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/5d0a6417c4e4e545.js"/><script src="/_next/static/chunks/84a181ff3270fd9f.js" async=""></script><script src="/_next/static/chunks/07f00e2e73d322d2.js" async=""></script><script src="/_next/static/chunks/cfe4dc9904fcfddb.js" async=""></script><script src="/_next/static/chunks/4b6cc9f65260f2bd.js" async=""></script><script src="/_next/static/chunks/turbopack-05820f781f3ffc22.js" async=""></script><script src="/_next/static/chunks/ab02eec995295bef.js" async=""></script><script src="/_next/static/chunks/fe70e73feb07bcfd.js" async=""></script><title>500: Internal Server Error.</title><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}
|
|
2
|
+
@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/5d0a6417c4e4e545.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[40799,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n3:I[73006,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n4:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"ViewportBoundary\"]\n9:I[66658,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"MetadataBoundary\"]\nb:I[42726,[\"/_next/static/chunks/ab02eec995295bef.js\",\"/_next/static/chunks/fe70e73feb07bcfd.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"kPTTy-YsS3np6cPgsciL2\",\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"title\",null,{\"children\":\"500: Internal Server Error.\"}]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"lineHeight\":\"48px\"},\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}\\n@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"paddingRight\":23,\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\"},\"children\":\"500\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"28px\"},\"children\":\"Internal Server Error.\"}]}]]}]}]}]]}],[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/ab02eec995295bef.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/fe70e73feb07bcfd.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\na:[]\n"])</script></body></html>
|