@shipit-ai/cli 1.173.1 → 1.174.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/packages/core/src/application/ports/output/services/mcp-server-browser.interface.d.ts +9 -1
- package/dist/packages/core/src/application/ports/output/services/mcp-server-browser.interface.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.d.ts +7 -3
- package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.d.ts.map +1 -1
- package/dist/packages/core/src/application/use-cases/mcp-servers/fetch-mcp-server-tools.use-case.js +6 -5
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/di/modules/web-tokens.module.js +4 -0
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.d.ts +12 -0
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.schema.js +11 -1
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.d.ts +10 -2
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.d.ts.map +1 -1
- package/dist/packages/core/src/infrastructure/services/mcp-server-browser/mcp-server-browser.service.js +96 -14
- package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.d.ts +1 -1
- package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.d.ts.map +1 -1
- package/dist/src/presentation/web/app/actions/fetch-mcp-server-tools.js +2 -2
- package/dist/src/presentation/web/app/mcp-servers/page.d.ts.map +1 -1
- package/dist/src/presentation/web/app/mcp-servers/page.js +3 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.d.ts +19 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.js +106 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.d.ts +11 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-connect-instructions.stories.js +18 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-card.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-card.js +2 -8
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.d.ts +2 -2
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.js +26 -9
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-detail-drawer.stories.js +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.d.ts +45 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-server-icon.js +138 -0
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.d.ts +2 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.js +8 -8
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-servers-page-client.stories.js +2 -2
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.d.ts +17 -13
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.js +21 -34
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/mcp-servers/mcp-tool-list.stories.js +7 -8
- package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.d.ts +29 -0
- package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.d.ts.map +1 -0
- package/dist/src/presentation/web/components/features/mcp-servers/vendor-brand-icons.js +25 -0
- package/dist/translations/ar/web.json +8 -2
- package/dist/translations/de/web.json +8 -2
- package/dist/translations/en/web.json +8 -2
- package/dist/translations/es/web.json +8 -2
- package/dist/translations/fr/web.json +8 -2
- package/dist/translations/he/web.json +8 -2
- package/dist/translations/pt/web.json +8 -2
- package/dist/translations/ru/web.json +8 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +3 -3
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/required-server-files.js +2 -2
- package/web/.next/required-server-files.json +2 -2
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
- package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
- package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
- package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
- package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
- package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
- package/web/.next/server/app/mcp-servers/page/server-reference-manifest.json +13 -13
- package/web/.next/server/app/mcp-servers/page.js.nft.json +1 -1
- package/web/.next/server/app/mcp-servers/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/plugins/page/server-reference-manifest.json +15 -15
- package/web/.next/server/app/plugins/page.js.nft.json +1 -1
- package/web/.next/server/app/plugins/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/settings/page/server-reference-manifest.json +12 -12
- package/web/.next/server/app/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/tools/page.js.nft.json +1 -1
- package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
- package/web/.next/server/app/version/page.js.nft.json +1 -1
- package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
- package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/0j.8_web_components_features_mcp-servers_mcp-servers-page-client_tsx_0dda8ih._.js +10 -0
- package/web/.next/server/chunks/ssr/0j.8_web_components_features_mcp-servers_mcp-servers-page-client_tsx_0dda8ih._.js.map +1 -0
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0mwao26._.js +3 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0mwao26._.js.map +1 -0
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13pshs0._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__13pshs0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
- package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
- package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_1031n_-._.js → _083k45~._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_1031n_-._.js.map → _083k45~._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_12i_bjl._.js → _087x~el._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_12i_bjl._.js.map → _087x~el._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
- package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
- package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0xn_dfh._.js → _0bknjp-._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0xn_dfh._.js.map → _0bknjp-._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
- package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
- package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0fswe4r._.js +3 -0
- package/web/.next/server/chunks/ssr/_0fswe4r._.js.map +1 -0
- package/web/.next/server/chunks/ssr/{_0z6p8yi._.js → _0glox21._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0z6p8yi._.js.map → _0glox21._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
- package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
- package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_096x3u~._.js → _0vq0c0x._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_096x3u~._.js.map → _0vq0c0x._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
- package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
- package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
- package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
- package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0~g5-.e._.js +3 -0
- package/web/.next/server/chunks/ssr/_0~g5-.e._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
- package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_mcp-servers_page_actions_0d.r4q..js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_mcp-servers_page_actions_0d.r4q..js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
- package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +57 -57
- package/web/.next/static/chunks/{07c0dde.-8.3e.js → 030tqac1cx-fj.js} +1 -1
- package/web/.next/static/chunks/{0242vp5_56bjp.js → 093...bdsa2vi.js} +1 -1
- package/web/.next/static/chunks/0a~-dbzk6tkpw.css +1 -0
- package/web/.next/static/chunks/{0j~279np0vu13.js → 0c.5-5ohi38wu.js} +1 -1
- package/web/.next/static/chunks/{0k3fxd~lsx6h_.js → 0djvgyu139qht.js} +1 -1
- package/web/.next/static/chunks/{084nyl7us-xbo.js → 0etn4uwpbu0p..js} +1 -1
- package/web/.next/static/chunks/0fzx4yzxqtc6v.js +1 -0
- package/web/.next/static/chunks/{0sgbbtfp4hspl.js → 0gz0lgz7pvrb5.js} +1 -1
- package/web/.next/static/chunks/0iey6w_th4w6t.js +1 -0
- package/web/.next/static/chunks/{15lkkh2eg.w0h.js → 0mukkm1m79wpt.js} +1 -1
- package/web/.next/static/chunks/{0cgfywkcky60_.js → 0ou6vmrmvv4.f.js} +1 -1
- package/web/.next/static/chunks/{15zjq.s38l64~.js → 0q1rh6cwq8q~e.js} +1 -1
- package/web/.next/static/chunks/{0xjj0-wsaziot.js → 0w9~abfpfmxwe.js} +1 -1
- package/web/.next/static/chunks/{0vscxcwhltksg.js → 0zwhmf.myybu0.js} +3 -3
- package/web/.next/static/chunks/{10j-adknfho63.js → 10rtagfoabp3b.js} +1 -1
- package/web/.next/static/chunks/{11rfk7fre_6t2.js → 113fyg.4c74k~.js} +1 -1
- package/web/.next/static/chunks/{16nbcfv~__pas.js → 11n8b8mq7xbv9.js} +1 -1
- package/web/.next/static/chunks/11v7w0zh-u9s8.js +8 -0
- package/web/.next/static/chunks/{0kv2-9owuv51~.js → 164.6ma3h~kkp.js} +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b~nfa6._.js +0 -3
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0b~nfa6._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0ia4o6_._.js +0 -3
- package/web/.next/server/chunks/ssr/_0ia4o6_._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_0o.xc6x._.js +0 -3
- package/web/.next/server/chunks/ssr/_0o.xc6x._.js.map +0 -1
- package/web/.next/static/chunks/00h433i5-1v_-.css +0 -1
- package/web/.next/static/chunks/0jl9-2_wjbofj.js +0 -1
- package/web/.next/static/chunks/0r9cddoy0xkhk.js +0 -1
- package/web/.next/static/chunks/123j391jw_zg4.js +0 -1
- /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_buildManifest.js +0 -0
- /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{soqWMnDMQRLxRyIj13kVU → G6UvAet1r3tmTZHz91Byx}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,96646,92568,e=>{"use strict";var t=e.i(54864);let n=(0,t.default)("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);e.s(["Play",0,n],96646);let r=(0,t.default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);e.s(["Square",0,r],92568)},56719,e=>{"use strict";var t=e.i(62854);e.s(["FocusScope",0,t])},72714,e=>{"use strict";var t=e.i(96871),n=e.i(79561),r=e.i(73423),a=e.i(31777),o=e.i(35364),l=e.i(8361);e.s(["ActionButton",0,function({label:e,onClick:i,loading:u,error:s,icon:d,iconOnly:c=!1,variant:f="outline",size:p="sm"}){let m=(0,l.useSoundAction)("click");return(0,t.jsxs)(o.Button,{variant:f,size:p,"aria-label":e,disabled:u,onClick:()=>{m.play(),i()},className:(0,a.cn)("gap-1.5",s&&"text-destructive hover:text-destructive",!s&&c&&"ghost"===f&&"text-muted-foreground cursor-pointer rounded-full transition-colors hover:text-blue-500"),children:[u?(0,t.jsx)(n.LoaderCircle,{className:"size-4 animate-spin"}):s?(0,t.jsx)(r.CircleAlert,{className:"size-4"}):(0,t.jsx)(d,{className:"size-4"}),c?null:e]})}])},81803,e=>{"use strict";e.i(72714),e.s([])},99348,17466,45811,e=>{"use strict";let t;var n=e.i(96871),r=e.i(16539),a=e.i(79561),o=e.i(84735),l=e.i(70727),i=e.i(17406),u=e.i(2828),s=e.i(2287),d=e.i(96976);let c=(0,d.createServerReference)("40cef2f5e7950631202da23d187425ea4f6c6902bf",d.callServer,void 0,d.findSourceMapURL,"getDeploymentLogs");function f({open:e,onOpenChange:t,targetId:a}){let{logs:o,isConnected:l}=function(e){let[t,n]=(0,r.useState)([]),[a,o]=(0,r.useState)(!1),l=(0,r.useRef)(null),i=(0,r.useCallback)(()=>{l.current&&(l.current.close(),l.current=null),o(!1)},[]);return(0,r.useEffect)(()=>{if(!e){n([]),o(!1);return}c(e).then(e=>{e&&n(e)}).catch(()=>{});let t=new EventSource(`/api/deployment-logs?targetId=${e}`);return l.current=t,t.onopen=()=>{o(!0)},t.addEventListener("log",e=>{let t=JSON.parse(e.data);n(e=>[...e,t])}),t.onerror=()=>{o(!1)},()=>{t.close(),l.current=null}},[e,i]),{logs:t,isConnected:a}}(e?a:null);return(0,n.jsx)(p,{open:e,onOpenChange:t,logs:o,isConnected:l})}function p({open:e,onOpenChange:t,logs:a,isConnected:o}){let i=(0,r.useRef)(null),u=(0,r.useRef)(!0),d=(0,r.useCallback)(()=>{let e=i.current;e&&(u.current=e.scrollTop+e.clientHeight>=e.scrollHeight-50)},[]);return(0,r.useEffect)(()=>{u.current&&i.current&&(i.current.scrollTop=i.current.scrollHeight)},[a]),(0,n.jsx)(s.Dialog,{open:e,onOpenChange:t,children:(0,n.jsxs)(s.DialogContent,{className:"flex h-[calc(100vh-48px)] max-h-[calc(100vh-48px)] w-full max-w-[calc(100vw-48px)] flex-col gap-0 bg-zinc-950 p-0 text-zinc-100 sm:rounded-lg","aria-describedby":void 0,children:[(0,n.jsxs)(s.DialogHeader,{className:"flex flex-row items-center justify-between border-b border-zinc-800 px-4 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(l.Terminal,{className:"h-4 w-4 text-zinc-400"}),(0,n.jsx)(s.DialogTitle,{className:"text-sm font-medium text-zinc-100",children:"Server Logs"})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2 pe-8",children:[(0,n.jsx)("span",{className:`inline-block h-2 w-2 rounded-full ${o?"bg-green-500":"bg-zinc-500"}`}),(0,n.jsx)("span",{className:"text-xs text-zinc-400",children:o?"Connected":"Disconnected"})]})]}),(0,n.jsxs)("div",{ref:i,onScroll:d,className:"flex-1 overflow-auto p-4 font-mono text-sm leading-relaxed",children:[0===a.length?(0,n.jsx)("p",{className:"text-zinc-500",children:"Waiting for log output..."}):a.map(e=>(0,n.jsx)(m,{entry:e},`${e.timestamp}-${e.stream}-${e.line}`)),!o&&a.length>0&&(0,n.jsx)("div",{className:"mt-2 border-t border-zinc-800 pt-2 text-zinc-500",children:"[Server stopped]"})]})]})})}function m({entry:e}){return(0,n.jsx)("div",{"data-stream":e.stream,className:"stderr"===e.stream?"text-red-400":"text-zinc-200",children:(0,n.jsx)("span",{className:"break-all whitespace-pre-wrap",children:e.line})})}let g="text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-7 items-center justify-center rounded-[3px]";e.s(["DeploymentStatusBadge",0,function({status:e,url:t,targetId:s}){let[d,c]=(0,r.useState)(!1),p=s&&(e===i.DeploymentState.Booting||e===i.DeploymentState.Ready);switch(e){case i.DeploymentState.Booting:return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex items-center gap-1 pl-1",children:[(0,n.jsx)(a.LoaderCircle,{className:"size-3 animate-spin text-blue-500"}),(0,n.jsx)("span",{className:"text-muted-foreground text-[11px]",children:"Starting..."}),p?(0,n.jsx)(u.TooltipProvider,{delayDuration:300,children:(0,n.jsxs)(u.Tooltip,{children:[(0,n.jsx)(u.TooltipTrigger,{asChild:!0,children:(0,n.jsx)("button",{type:"button","aria-label":"View server logs",className:g,onClick:e=>{e.stopPropagation(),c(!0)},children:(0,n.jsx)(l.Terminal,{className:"size-3.5"})})}),(0,n.jsx)(u.TooltipContent,{side:"bottom",className:"text-xs",children:"Server logs"})]})}):null]}),p?(0,n.jsx)(f,{open:d,onOpenChange:c,targetId:s}):null]});case i.DeploymentState.Ready:return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex translate-y-px items-center gap-1 pl-1",children:[(0,n.jsx)("span",{className:"inline-block size-1.5 rounded-full bg-green-500"}),t?(0,n.jsxs)("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-0.5 text-[11px] text-green-600 hover:text-green-500 dark:text-green-400 dark:hover:text-green-300",onClick:e=>e.stopPropagation(),children:[t,(0,n.jsx)(o.ExternalLink,{className:"size-2.5 shrink-0"})]}):(0,n.jsx)("span",{className:"text-[11px] text-green-600 dark:text-green-400",children:"Ready"}),p?(0,n.jsx)(u.TooltipProvider,{delayDuration:300,children:(0,n.jsxs)(u.Tooltip,{children:[(0,n.jsx)(u.TooltipTrigger,{asChild:!0,children:(0,n.jsx)("button",{type:"button","aria-label":"View server logs",className:g,onClick:e=>{e.stopPropagation(),c(!0)},children:(0,n.jsx)(l.Terminal,{className:"size-3.5"})})}),(0,n.jsx)(u.TooltipContent,{side:"bottom",className:"text-xs",children:"Server logs"})]})}):null]}),p?(0,n.jsx)(f,{open:d,onOpenChange:c,targetId:s}):null]});default:return null}}],17466),e.s([],99348);var h=e.i(8558),v=e.i(94983);let w=r.default.createContext({drawerRef:{current:null},overlayRef:{current:null},onPress:()=>{},onRelease:()=>{},onDrag:()=>{},onNestedDrag:()=>{},onNestedOpenChange:()=>{},onNestedRelease:()=>{},openProp:void 0,dismissible:!1,isOpen:!1,isDragging:!1,keyboardIsOpen:{current:!1},snapPointsOffset:null,snapPoints:null,handleOnly:!1,modal:!1,shouldFade:!1,activeSnapPoint:null,onOpenChange:()=>{},setActiveSnapPoint:()=>{},closeDrawer:()=>{},direction:"bottom",shouldAnimate:{current:!0},shouldScaleBackground:!1,setBackgroundColorOnScale:!0,noBodyStyles:!1,container:null,autoFocus:!1}),x=()=>{let e=r.default.useContext(w);if(!e)throw Error("useDrawerContext must be used within a Drawer.Root");return e};function y(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function b(){return j(/^iPhone/)||j(/^iPad/)||j(/^Mac/)&&navigator.maxTouchPoints>1}function j(e){return"u">typeof window&&null!=window.navigator?e.test(window.navigator.platform):void 0}!function(e){if(!e||"u"<typeof document)return;let t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}("[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\n[data-state=closed]\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}");let C="u">typeof window?r.useLayoutEffect:r.useEffect;function T(...e){return(...t)=>{for(let n of e)"function"==typeof n&&n(...t)}}let R="u">typeof document&&window.visualViewport;function D(e){let t=window.getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY)}function E(e){for(D(e)&&(e=e.parentElement);e&&!D(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}let S=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]),k=0;function N(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function $(e){let t=document.scrollingElement||document.documentElement;for(;e&&e!==t;){let t=E(e);if(t!==document.documentElement&&t!==document.body&&t!==e){let n=t.getBoundingClientRect().top,r=e.getBoundingClientRect().top;e.getBoundingClientRect().bottom>t.getBoundingClientRect().bottom+24&&(t.scrollTop+=r-n)}e=t.parentElement}}function P(e){return e instanceof HTMLInputElement&&!S.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}function M(...e){return r.useCallback(function(...e){return t=>e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}(...e),e)}let z=new WeakMap;function O(e,t,n=!1){if(!e||!(e instanceof HTMLElement))return;let r={};Object.entries(t).forEach(([t,n])=>{t.startsWith("--")?e.style.setProperty(t,n):(r[t]=e.style[t],e.style[t]=n)}),n||z.set(e,r)}let L=e=>{switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}};function F(e,t){if(!e)return null;let n=window.getComputedStyle(e),r=n.transform||n.webkitTransform||n.mozTransform,a=r.match(/^matrix3d\((.+)\)$/);return a?parseFloat(a[1].split(", ")[L(t)?13:12]):(a=r.match(/^matrix\((.+)\)$/))?parseFloat(a[1].split(", ")[L(t)?5:4]):null}function B(e,t){if(!e)return()=>{};let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}let A=[.32,.72,0,1],I="vaul-dragging";function H(e){let t=r.default.useRef(e);return r.default.useEffect(()=>{t.current=e}),r.default.useMemo(()=>(...e)=>null==t.current?void 0:t.current.call(t,...e),[])}function W({prop:e,defaultProp:t,onChange:n=()=>{}}){let[a,o]=function({defaultProp:e,onChange:t}){let n=r.default.useState(e),[a]=n,o=r.default.useRef(a),l=H(t);return r.default.useEffect(()=>{o.current!==a&&(l(a),o.current=a)},[a,o,l]),n}({defaultProp:t,onChange:n}),l=void 0!==e,i=l?e:a,u=H(n);return[i,r.default.useCallback(t=>{if(l){let n="function"==typeof t?t(e):t;n!==e&&u(n)}else o(t)},[l,e,o,u])]}let q=()=>()=>{},U=null;function Y({open:e,onOpenChange:n,children:a,onDrag:o,onRelease:l,snapPoints:i,shouldScaleBackground:u=!1,setBackgroundColorOnScale:s=!0,closeThreshold:d=.25,scrollLockTimeout:c=100,dismissible:f=!0,handleOnly:p=!1,fadeFromIndex:m=i&&i.length-1,activeSnapPoint:g,setActiveSnapPoint:h,fixed:x,modal:j=!0,onClose:D,nested:S,noBodyStyles:M=!1,direction:B="bottom",defaultOpen:H=!1,disablePreventScroll:q=!0,snapToSequentialPoint:X=!1,preventScrollRestoration:V=!1,repositionInputs:K=!0,onAnimationEnd:J,container:_,autoFocus:G=!1}){var Q,Z;let[ee=!1,et]=W({defaultProp:H,prop:e,onChange:e=>{null==n||n(e),e||S||eP(),setTimeout(()=>{null==J||J(e)},500),e&&!j&&"u">typeof window&&window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"}),e||(document.body.style.pointerEvents="auto")}}),[en,er]=r.default.useState(!1),[ea,eo]=r.default.useState(!1),[el,ei]=r.default.useState(!1),eu=r.default.useRef(null),es=r.default.useRef(null),ed=r.default.useRef(null),ec=r.default.useRef(null),ef=r.default.useRef(null),ep=r.default.useRef(!1),em=r.default.useRef(null),eg=r.default.useRef(0),eh=r.default.useRef(!1),ev=r.default.useRef(!H),ew=r.default.useRef(0),ex=r.default.useRef(null),ey=r.default.useRef((null==(Q=ex.current)?void 0:Q.getBoundingClientRect().height)||0),eb=r.default.useRef((null==(Z=ex.current)?void 0:Z.getBoundingClientRect().width)||0),ej=r.default.useRef(0),eC=r.default.useCallback(e=>{i&&e===eS.length-1&&(es.current=new Date)},[]),{activeSnapPoint:eT,activeSnapPointIndex:eR,setActiveSnapPoint:eD,onRelease:eE,snapPointsOffset:eS,onDrag:ek,shouldFade:eN,getPercentageDragged:e$}=function({activeSnapPointProp:e,setActiveSnapPointProp:t,snapPoints:n,drawerRef:a,overlayRef:o,fadeFromIndex:l,onSnapPointChange:i,direction:u="bottom",container:s,snapToSequentialPoint:d}){let[c,f]=W({prop:e,defaultProp:null==n?void 0:n[0],onChange:t}),[p,m]=r.default.useState("u">typeof window?{innerWidth:window.innerWidth,innerHeight:window.innerHeight}:void 0);r.default.useEffect(()=>{function e(){m({innerWidth:window.innerWidth,innerHeight:window.innerHeight})}return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let g=r.default.useMemo(()=>c===(null==n?void 0:n[n.length-1])||null,[n,c]),h=r.default.useMemo(()=>{var e;return null!=(e=null==n?void 0:n.findIndex(e=>e===c))?e:null},[n,c]),v=n&&n.length>0&&(l||0===l)&&!Number.isNaN(l)&&n[l]===c||!n,w=r.default.useMemo(()=>{var e;let t=s?{width:s.getBoundingClientRect().width,height:s.getBoundingClientRect().height}:"u">typeof window?{width:window.innerWidth,height:window.innerHeight}:{width:0,height:0};return null!=(e=null==n?void 0:n.map(e=>{let n="string"==typeof e,r=0;if(n&&(r=parseInt(e,10)),L(u)){let a=n?r:p?e*t.height:0;return p?"bottom"===u?t.height-a:-t.height+a:a}let a=n?r:p?e*t.width:0;return p?"right"===u?t.width-a:-t.width+a:a}))?e:[]},[n,p,s]),x=r.default.useMemo(()=>null!==h?null==w?void 0:w[h]:null,[w,h]),y=r.default.useCallback(e=>{var t;let r=null!=(t=null==w?void 0:w.findIndex(t=>t===e))?t:null;i(r),O(a.current,{transition:`transform 0.5s cubic-bezier(${A.join(",")})`,transform:L(u)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`}),w&&r!==w.length-1&&void 0!==l&&r!==l&&r<l?O(o.current,{transition:`opacity 0.5s cubic-bezier(${A.join(",")})`,opacity:"0"}):O(o.current,{transition:`opacity 0.5s cubic-bezier(${A.join(",")})`,opacity:"1"}),f(null==n?void 0:n[Math.max(r,0)])},[a.current,n,w,l,o,f]);return r.default.useEffect(()=>{if(c||e){var t;let r=null!=(t=null==n?void 0:n.findIndex(t=>t===e||t===c))?t:-1;w&&-1!==r&&"number"==typeof w[r]&&y(w[r])}},[c,e,n,w,y]),{isLastSnapPoint:g,activeSnapPoint:c,shouldFade:v,getPercentageDragged:function(e,t){if(!n||"number"!=typeof h||!w||void 0===l)return null;let r=h===l-1;if(h>=l&&t)return 0;if(r&&!t)return 1;if(!v&&!r)return null;let a=r?h+1:h-1,o=e/Math.abs(r?w[a]-w[a-1]:w[a+1]-w[a]);return r?1-o:o},setActiveSnapPoint:f,activeSnapPointIndex:h,onRelease:function({draggedDistance:e,closeDrawer:t,velocity:r,dismissible:a}){if(void 0===l)return;let i="bottom"===u||"right"===u?(null!=x?x:0)-e:(null!=x?x:0)+e,s=h===l-1,c=0===h,f=e>0;if(s&&O(o.current,{transition:`opacity 0.5s cubic-bezier(${A.join(",")})`}),!d&&r>2&&!f)return void(a?t():y(w[0]));if(!d&&r>2&&f&&w&&n)return void y(w[n.length-1]);let p=null==w?void 0:w.reduce((e,t)=>"number"!=typeof e||"number"!=typeof t?e:Math.abs(t-i)<Math.abs(e-i)?t:e),m=L(u)?window.innerHeight:window.innerWidth;if(r>.4&&Math.abs(e)<.4*m){let e=f?1:-1;return e>0&&g&&n?void y(w[n.length-1]):void(c&&e<0&&a&&t(),null===h||y(w[h+e]))}y(p)},onDrag:function({draggedDistance:e}){if(null===x)return;let t="bottom"===u||"right"===u?x-e:x+e;("bottom"===u||"right"===u)&&t<w[w.length-1]||("top"===u||"left"===u)&&t>w[w.length-1]||O(a.current,{transform:L(u)?`translate3d(0, ${t}px, 0)`:`translate3d(${t}px, 0, 0)`})},snapPointsOffset:w}}({snapPoints:i,activeSnapPointProp:g,setActiveSnapPointProp:h,drawerRef:ex,fadeFromIndex:m,overlayRef:eu,onSnapPointChange:eC,direction:B,container:_,snapToSequentialPoint:X});!function(e={}){let{isDisabled:n}=e;C(()=>{if(!n){var e,r,a;let n,o,l,i,u,s,d;return 1==++k&&b()&&(l=0,i=window.pageXOffset,u=window.pageYOffset,s=T((e=document.documentElement,r="paddingRight",a=`${window.innerWidth-document.documentElement.clientWidth}px`,n=e.style[r],e.style[r]=a,()=>{e.style[r]=n})),window.scrollTo(0,0),d=T(N(document,"touchstart",e=>{((o=E(e.target))!==document.documentElement||o!==document.body)&&(l=e.changedTouches[0].pageY)},{passive:!1,capture:!0}),N(document,"touchmove",e=>{if(!o||o===document.documentElement||o===document.body)return void e.preventDefault();let t=e.changedTouches[0].pageY,n=o.scrollTop,r=o.scrollHeight-o.clientHeight;0!==r&&((n<=0&&t>l||n>=r&&t<l)&&e.preventDefault(),l=t)},{passive:!1,capture:!0}),N(document,"touchend",e=>{let t=e.target;P(t)&&t!==document.activeElement&&(e.preventDefault(),t.style.transform="translateY(-2000px)",t.focus(),requestAnimationFrame(()=>{t.style.transform=""}))},{passive:!1,capture:!0}),N(document,"focus",e=>{let t=e.target;P(t)&&(t.style.transform="translateY(-2000px)",requestAnimationFrame(()=>{t.style.transform="",R&&(R.height<window.innerHeight?requestAnimationFrame(()=>{$(t)}):R.addEventListener("resize",()=>$(t),{once:!0}))}))},!0),N(window,"scroll",()=>{window.scrollTo(0,0)})),t=()=>{s(),d(),window.scrollTo(i,u)}),()=>{0==--k&&(null==t||t())}}},[n])}({isDisabled:!ee||ea||!j||el||!en||!K||!q});let{restorePositionSetting:eP}=function({isOpen:e,modal:t,nested:n,hasBeenOpened:a,preventScrollRestoration:o,noBodyStyles:l}){let[i,u]=r.default.useState(()=>"u">typeof window?window.location.href:""),s=r.default.useRef(0),d=r.default.useCallback(()=>{if(y()&&null===U&&e&&!l){U={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left,height:document.body.style.height,right:"unset"};let{scrollX:e,innerHeight:t}=window;document.body.style.setProperty("position","fixed","important"),Object.assign(document.body.style,{top:`${-s.current}px`,left:`${-e}px`,right:"0px",height:"auto"}),window.setTimeout(()=>window.requestAnimationFrame(()=>{let e=t-window.innerHeight;e&&s.current>=t&&(document.body.style.top=`${-(s.current+e)}px`)}),300)}},[e]),c=r.default.useCallback(()=>{if(y()&&null!==U&&!l){let e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);Object.assign(document.body.style,U),window.requestAnimationFrame(()=>{o&&i!==window.location.href?u(window.location.href):window.scrollTo(t,e)}),U=null}},[i]);return r.default.useEffect(()=>{function e(){s.current=window.scrollY}return e(),window.addEventListener("scroll",e),()=>{window.removeEventListener("scroll",e)}},[]),r.default.useEffect(()=>{if(t)return()=>{"u"<typeof document||document.querySelector("[data-vaul-drawer]")||c()}},[t,c]),r.default.useEffect(()=>{!n&&a&&(e?(window.matchMedia("(display-mode: standalone)").matches||d(),t||window.setTimeout(()=>{c()},500)):c())},[e,a,i,t,n,d,c]),{restorePositionSetting:c}}({isOpen:ee,modal:j,nested:null!=S&&S,hasBeenOpened:en,preventScrollRestoration:V,noBodyStyles:M});function eM(){return(window.innerWidth-26)/window.innerWidth}function ez(e,t){var n;let r=e,a=null==(n=window.getSelection())?void 0:n.toString(),o=ex.current?F(ex.current,B):null,l=new Date;if("SELECT"===r.tagName||r.hasAttribute("data-vaul-no-drag")||r.closest("[data-vaul-no-drag]"))return!1;if("right"===B||"left"===B)return!0;if(es.current&&l.getTime()-es.current.getTime()<500)return!1;if(null!==o&&("bottom"===B?o>0:o<0))return!0;if(a&&a.length>0)return!1;if(ef.current&&l.getTime()-ef.current.getTime()<c&&0===o||t)return ef.current=l,!1;for(;r;){if(r.scrollHeight>r.clientHeight){if(0!==r.scrollTop)return ef.current=new Date,!1;if("dialog"===r.getAttribute("role"))break}r=r.parentNode}return!0}function eO(e){ea&&ex.current&&(ex.current.classList.remove(I),ep.current=!1,eo(!1),ec.current=new Date),null==D||D(),e||et(!1),setTimeout(()=>{i&&eD(i[0])},500)}function eL(){if(!ex.current)return;let e=document.querySelector("[data-vaul-drawer-wrapper]"),t=F(ex.current,B);O(ex.current,{transform:"translate3d(0, 0, 0)",transition:`transform 0.5s cubic-bezier(${A.join(",")})`}),O(eu.current,{transition:`opacity 0.5s cubic-bezier(${A.join(",")})`,opacity:"1"}),u&&t&&t>0&&ee&&O(e,{borderRadius:"8px",overflow:"hidden",...L(B)?{transform:`scale(${eM()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,transformOrigin:"top"}:{transform:`scale(${eM()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,transformOrigin:"left"},transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${A.join(",")})`},!0)}return r.default.useEffect(()=>{window.requestAnimationFrame(()=>{ev.current=!0})},[]),r.default.useEffect(()=>{var e;function t(){if(ex.current&&K&&(P(document.activeElement)||eh.current)){var e;let t=(null==(e=window.visualViewport)?void 0:e.height)||0,n=window.innerHeight,r=n-t,a=ex.current.getBoundingClientRect().height||0;ej.current||(ej.current=a);let o=ex.current.getBoundingClientRect().top;if(Math.abs(ew.current-r)>60&&(eh.current=!eh.current),i&&i.length>0&&eS&&eR&&(r+=eS[eR]||0),ew.current=r,a>t||eh.current){let e=ex.current.getBoundingClientRect().height,l=e;e>t&&(l=t-(a>.8*n?o:26)),x?ex.current.style.height=`${e-Math.max(r,0)}px`:ex.current.style.height=`${Math.max(l,t-o)}px`}else{let e;e=navigator.userAgent,"u">typeof window&&(/Firefox/.test(e)&&/Mobile/.test(e)||/FxiOS/.test(e))||(ex.current.style.height=`${ej.current}px`)}i&&i.length>0&&!eh.current?ex.current.style.bottom="0px":ex.current.style.bottom=`${Math.max(r,0)}px`}}return null==(e=window.visualViewport)||e.addEventListener("resize",t),()=>{var e;return null==(e=window.visualViewport)?void 0:e.removeEventListener("resize",t)}},[eR,i,eS]),r.default.useEffect(()=>(ee&&(O(document.documentElement,{scrollBehavior:"auto"}),es.current=new Date),()=>{!function(e,t){if(!e||!(e instanceof HTMLElement))return;let n=z.get(e);n&&(e.style[t]=n[t])}(document.documentElement,"scrollBehavior")}),[ee]),r.default.useEffect(()=>{j||window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"})},[j]),r.default.createElement(v.Root,{defaultOpen:H,onOpenChange:e=>{(f||e)&&(e?er(!0):eO(!0),et(e))},open:ee},r.default.createElement(w.Provider,{value:{activeSnapPoint:eT,snapPoints:i,setActiveSnapPoint:eD,drawerRef:ex,overlayRef:eu,onOpenChange:n,onPress:function(e){var t,n;!f&&!i||(!ex.current||ex.current.contains(e.target))&&(ey.current=(null==(t=ex.current)?void 0:t.getBoundingClientRect().height)||0,eb.current=(null==(n=ex.current)?void 0:n.getBoundingClientRect().width)||0,eo(!0),ed.current=new Date,b()&&window.addEventListener("touchend",()=>ep.current=!1,{once:!0}),e.target.setPointerCapture(e.pointerId),eg.current=L(B)?e.pageY:e.pageX)},onRelease:function(e){var t,n;if(!ea||!ex.current)return;ex.current.classList.remove(I),ep.current=!1,eo(!1),ec.current=new Date;let r=F(ex.current,B);if(!e||!ez(e.target,!1)||!r||Number.isNaN(r)||null===ed.current)return;let a=ec.current.getTime()-ed.current.getTime(),o=eg.current-(L(B)?e.pageY:e.pageX),u=Math.abs(o)/a;if(u>.05&&(ei(!0),setTimeout(()=>{ei(!1)},200)),i){eE({draggedDistance:o*("bottom"===B||"right"===B?1:-1),closeDrawer:eO,velocity:u,dismissible:f}),null==l||l(e,!0);return}if("bottom"===B||"right"===B?o>0:o<0){eL(),null==l||l(e,!0);return}if(u>.4){eO(),null==l||l(e,!1);return}let s=Math.min(null!=(t=ex.current.getBoundingClientRect().height)?t:0,window.innerHeight),c=Math.min(null!=(n=ex.current.getBoundingClientRect().width)?n:0,window.innerWidth);if(Math.abs(r)>=("left"===B||"right"===B?c:s)*d){eO(),null==l||l(e,!1);return}null==l||l(e,!0),eL()},onDrag:function(e){if(ex.current&&ea){let t="bottom"===B||"right"===B?1:-1,n=(eg.current-(L(B)?e.pageY:e.pageX))*t,r=n>0,a=i&&!f&&!r;if(a&&0===eR)return;let l=Math.abs(n),s=document.querySelector("[data-vaul-drawer-wrapper]"),d=l/("bottom"===B||"top"===B?ey.current:eb.current),c=e$(l,r);if(null!==c&&(d=c),a&&d>=1||!ep.current&&!ez(e.target,r))return;if(ex.current.classList.add(I),ep.current=!0,O(ex.current,{transition:"none"}),O(eu.current,{transition:"none"}),i&&ek({draggedDistance:n}),r&&!i){let e=Math.min(-(8*(Math.log(n+1)-2)*1),0)*t;O(ex.current,{transform:L(B)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`});return}let p=1-d;if((eN||m&&eR===m-1)&&(null==o||o(e,d),O(eu.current,{opacity:`${p}`,transition:"none"},!0)),s&&eu.current&&u){let e=Math.min(eM()+d*(1-eM()),1),t=8-8*d,n=Math.max(0,14-14*d);O(s,{borderRadius:`${t}px`,transform:L(B)?`scale(${e}) translate3d(0, ${n}px, 0)`:`scale(${e}) translate3d(${n}px, 0, 0)`,transition:"none"},!0)}if(!i){let e=l*t;O(ex.current,{transform:L(B)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})}}},dismissible:f,shouldAnimate:ev,handleOnly:p,isOpen:ee,isDragging:ea,shouldFade:eN,closeDrawer:eO,onNestedDrag:function(e,t){if(t<0)return;let n=(window.innerWidth-16)/window.innerWidth,r=n+t*(1-n),a=-16+16*t;O(ex.current,{transform:L(B)?`scale(${r}) translate3d(0, ${a}px, 0)`:`scale(${r}) translate3d(${a}px, 0, 0)`,transition:"none"})},onNestedOpenChange:function(e){let t=e?(window.innerWidth-16)/window.innerWidth:1,n=e?-16:0;em.current&&window.clearTimeout(em.current),O(ex.current,{transition:`transform 0.5s cubic-bezier(${A.join(",")})`,transform:L(B)?`scale(${t}) translate3d(0, ${n}px, 0)`:`scale(${t}) translate3d(${n}px, 0, 0)`}),!e&&ex.current&&(em.current=setTimeout(()=>{let e=F(ex.current,B);O(ex.current,{transition:"none",transform:L(B)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})},500))},onNestedRelease:function(e,t){let n=L(B)?window.innerHeight:window.innerWidth,r=t?(n-16)/n:1,a=t?-16:0;t&&O(ex.current,{transition:`transform 0.5s cubic-bezier(${A.join(",")})`,transform:L(B)?`scale(${r}) translate3d(0, ${a}px, 0)`:`scale(${r}) translate3d(${a}px, 0, 0)`})},keyboardIsOpen:eh,modal:j,snapPointsOffset:eS,activeSnapPointIndex:eR,direction:B,shouldScaleBackground:u,setBackgroundColorOnScale:s,noBodyStyles:M,container:_,autoFocus:G}},a))}let X=r.default.forwardRef(function({...e},t){let{overlayRef:n,snapPoints:a,onRelease:o,shouldFade:l,isOpen:i,modal:u,shouldAnimate:s}=x(),d=M(t,n),c=a&&a.length>0;if(!u)return null;let f=r.default.useCallback(e=>o(e),[o]);return r.default.createElement(v.Overlay,{onMouseUp:f,ref:d,"data-vaul-overlay":"","data-vaul-snap-points":i&&c?"true":"false","data-vaul-snap-points-overlay":i&&l?"true":"false","data-vaul-animate":(null==s?void 0:s.current)?"true":"false",...e})});X.displayName="Drawer.Overlay";let V=r.default.forwardRef(function({onPointerDownOutside:e,style:t,onOpenAutoFocus:n,...a},o){let{drawerRef:l,onPress:i,onRelease:u,onDrag:s,keyboardIsOpen:d,snapPointsOffset:c,activeSnapPointIndex:f,modal:p,isOpen:m,direction:g,snapPoints:h,container:w,handleOnly:y,shouldAnimate:b,autoFocus:j}=x(),[C,T]=r.default.useState(!1),R=M(o,l),D=r.default.useRef(null),E=r.default.useRef(null),S=r.default.useRef(!1),k=h&&h.length>0;function N(e){D.current=null,S.current=!1,u(e)}return!function(){let{direction:e,isOpen:t,shouldScaleBackground:n,setBackgroundColorOnScale:a,noBodyStyles:o}=x(),l=r.default.useRef(null),i=(0,r.useMemo)(()=>document.body.style.backgroundColor,[]);function u(){return(window.innerWidth-26)/window.innerWidth}r.default.useEffect(()=>{if(t&&n){l.current&&clearTimeout(l.current);let t=document.querySelector("[data-vaul-drawer-wrapper]")||document.querySelector("[vaul-drawer-wrapper]");if(!t)return;!function(...e){}(a&&!o?B(document.body,{background:"black"}):q,B(t,{transformOrigin:L(e)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${A.join(",")})`}));let n=B(t,{borderRadius:"8px",overflow:"hidden",...L(e)?{transform:`scale(${u()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`}:{transform:`scale(${u()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`}});return()=>{n(),l.current=window.setTimeout(()=>{i?document.body.style.background=i:document.body.style.removeProperty("background")},500)}}},[t,n,i])}(),r.default.useEffect(()=>{k&&window.requestAnimationFrame(()=>{T(!0)})},[]),r.default.createElement(v.Content,{"data-vaul-drawer-direction":g,"data-vaul-drawer":"","data-vaul-delayed-snap-points":C?"true":"false","data-vaul-snap-points":m&&k?"true":"false","data-vaul-custom-container":w?"true":"false","data-vaul-animate":(null==b?void 0:b.current)?"true":"false",...a,ref:R,style:c&&c.length>0?{"--snap-point-height":`${c[null!=f?f:0]}px`,...t}:t,onPointerDown:e=>{y||(null==a.onPointerDown||a.onPointerDown.call(a,e),D.current={x:e.pageX,y:e.pageY},i(e))},onOpenAutoFocus:e=>{null==n||n(e),j||e.preventDefault()},onPointerDownOutside:t=>{(null==e||e(t),!p||t.defaultPrevented)?t.preventDefault():d.current&&(d.current=!1)},onFocusOutside:e=>{if(!p)return void e.preventDefault()},onPointerMove:e=>{if(E.current=e,y||(null==a.onPointerMove||a.onPointerMove.call(a,e),!D.current))return;let t=e.pageY-D.current.y,n=e.pageX-D.current.x,r="touch"===e.pointerType?10:2;((e,t,n=0)=>{if(S.current)return!0;let r=Math.abs(e.y),a=Math.abs(e.x),o=a>r,l=["bottom","right"].includes(t)?1:-1;if("left"===t||"right"===t){if(!(e.x*l<0)&&a>=0&&a<=n)return o}else if(!(e.y*l<0)&&r>=0&&r<=n)return!o;return S.current=!0,!0})({x:n,y:t},g,r)?s(e):(Math.abs(n)>r||Math.abs(t)>r)&&(D.current=null)},onPointerUp:e=>{null==a.onPointerUp||a.onPointerUp.call(a,e),D.current=null,S.current=!1,u(e)},onPointerOut:e=>{null==a.onPointerOut||a.onPointerOut.call(a,e),N(E.current)},onContextMenu:e=>{null==a.onContextMenu||a.onContextMenu.call(a,e),E.current&&N(E.current)}})});V.displayName="Drawer.Content";let K=r.default.forwardRef(function({preventCycle:e=!1,children:t,...n},a){let{closeDrawer:o,isDragging:l,snapPoints:i,activeSnapPoint:u,setActiveSnapPoint:s,dismissible:d,handleOnly:c,isOpen:f,onPress:p,onDrag:m}=x(),g=r.default.useRef(null),h=r.default.useRef(!1);function v(){g.current&&window.clearTimeout(g.current),h.current=!1}return r.default.createElement("div",{onClick:function(){h.current?v():window.setTimeout(()=>{!function(){if(l||e||h.current)return v();if(v(),!i||0===i.length){d||o();return}if(u===i[i.length-1]&&d)return o();let t=i.findIndex(e=>e===u);-1===t||s(i[t+1])}()},120)},onPointerCancel:v,onPointerDown:e=>{c&&p(e),g.current=window.setTimeout(()=>{h.current=!0},250)},onPointerMove:e=>{c&&m(e)},ref:a,"data-vaul-drawer-visible":f?"true":"false","data-vaul-handle":"","aria-hidden":"true",...n},r.default.createElement("span",{"data-vaul-handle-hitarea":"","aria-hidden":"true"},t))});K.displayName="Drawer.Handle";let J={Root:Y,NestedRoot:function({onDrag:e,onOpenChange:t,open:n,...a}){let{onNestedDrag:o,onNestedOpenChange:l,onNestedRelease:i}=x();if(!o)throw Error("Drawer.NestedRoot must be placed in another drawer");return r.default.createElement(Y,{nested:!0,open:n,onClose:()=>{l(!1)},onDrag:(t,n)=>{o(t,n),null==e||e(t,n)},onOpenChange:e=>{e&&l(e),null==t||t(e)},onRelease:i,...a})},Content:V,Overlay:X,Trigger:v.Trigger,Portal:function(e){let t=x(),{container:n=t.container,...a}=e;return r.default.createElement(v.Portal,{container:n,...a})},Handle:K,Close:v.Close,Title:v.Title,Description:v.Description};var _=e.i(31777);function G({...e}){return(0,n.jsx)(J.Portal,{"data-slot":"drawer-portal",...e})}e.s(["Drawer",0,function({...e}){return(0,n.jsx)(J.Root,{"data-slot":"drawer",...e})},"DrawerContent",0,function({className:e,children:t,direction:r="bottom",showCloseButton:a=!0,...o}){return(0,n.jsx)(G,{children:(0,n.jsxs)(J.Content,{"data-slot":"drawer-content",className:(0,_.cn)("editorial-shadow fixed z-50 flex flex-col","bg-white/80 backdrop-blur-xl dark:bg-[#1e293bd9]","bottom"===r&&"inset-x-0 bottom-0 mb-24 rounded-t-lg border-t","top"===r&&"inset-x-0 top-0 mt-24 rounded-b-lg border-b","right"===r&&"inset-y-0 right-0 h-full w-3/4 border-l","left"===r&&"inset-y-0 left-0 h-full w-3/4 border-r",e),style:{"--initial-transform":"calc(100% + 8px)",userSelect:"text",...o.style??{}},...o,children:[t,a?(0,n.jsxs)(J.Close,{className:"ring-offset-background focus:ring-ring absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none",children:[(0,n.jsx)(h.XIcon,{className:"size-4"}),(0,n.jsx)("span",{className:"sr-only",children:"Close"})]}):null]})})},"DrawerDescription",0,function({className:e,...t}){return(0,n.jsx)(J.Description,{"data-slot":"drawer-description",className:(0,_.cn)("text-muted-foreground text-sm",e),...t})},"DrawerFooter",0,function({className:e,...t}){return(0,n.jsx)("div",{"data-slot":"drawer-footer",className:(0,_.cn)("mt-auto flex flex-col gap-2 p-4",e),...t})},"DrawerHeader",0,function({className:e,...t}){return(0,n.jsx)("div",{"data-slot":"drawer-header",className:(0,_.cn)("flex flex-col gap-1.5 p-4",e),...t})},"DrawerOverlay",0,function({className:e,...t}){return(0,n.jsx)(J.Overlay,{"data-slot":"drawer-overlay",className:(0,_.cn)("fixed inset-0 z-50 bg-black/40 backdrop-blur-[2px] dark:bg-black/50",e),...t})},"DrawerTitle",0,function({className:e,...t}){return(0,n.jsx)(J.Title,{"data-slot":"drawer-title",className:(0,_.cn)("text-foreground font-semibold",e),...t})}],45811)},8537,e=>{"use strict";var t=e.i(16539),n=e.i(18354),r=e.i(96976);let a=(0,r.createServerReference)("40e07d3c61ce3521b92b0052c0d9fbc6653f9d106b",r.callServer,void 0,r.findSourceMapURL,"deployFeature"),o=(0,r.createServerReference)("40fc7edc32b96e3dfd434a4da1f6391a03a5de3c56",r.callServer,void 0,r.findSourceMapURL,"deployRepository"),l=(0,r.createServerReference)("40911b2a18951e5b623eed9df0e00acdb276e7e91d",r.callServer,void 0,r.findSourceMapURL,"stopDeployment"),i=(0,r.createServerReference)("40ec6ad963249c2d9447be7d559fcda0b2270eaee5",r.callServer,void 0,r.findSourceMapURL,"getDeploymentStatus"),u=(0,n.createLogger)("[useDeployAction]");e.s(["useDeployAction",0,function(e){let[n,r]=(0,t.useState)(!1),[s,d]=(0,t.useState)(!1),[c,f]=(0,t.useState)(null),[p,m]=(0,t.useState)(null),[g,h]=(0,t.useState)(null),v=(0,t.useRef)(null),w=(0,t.useRef)(!0),x=(0,t.useRef)(p);(0,t.useEffect)(()=>{x.current=p},[p]),(0,t.useEffect)(()=>(w.current=!0,()=>{w.current=!1}),[]),(0,t.useEffect)(()=>()=>{v.current&&clearInterval(v.current)},[]);let y=(0,t.useCallback)(()=>{v.current&&(u.debug("stopping polling"),clearInterval(v.current),v.current=null)},[]),b=(0,t.useCallback)(e=>{y(),u.debug(`starting polling for "${e}" every 3000ms`),v.current=setInterval(async()=>{let t;if(!w.current)return void y();try{t=await i(e)}catch(t){u.warn(`poll fetch failed for "${e}":`,t),w.current&&(m(null),h(null),y());return}w.current&&(t&&"Stopped"!==t.state?(t.state!==x.current&&u.info(`poll state changed: ${x.current} → ${t.state}, url=${t.url}`),m(t.state),h(t.url)):(u.info(`poll result: ${t?`state=${t.state}`:"null (deployment gone)"} — stopping poll`),m(null),h(null),y()))},3e3)},[y]),j=(0,t.useCallback)(async()=>{if(!e)return void u.warn("deploy() called but input is null — no-op");if(n)return void u.warn("deploy() called but already loading — no-op");u.info(`deploy() — targetType="${e.targetType}", targetId="${e.targetId}", repositoryPath="${e.repositoryPath}"`),r(!0),f(null);try{let t="feature"===e.targetType?await a(e.targetId):await o(e.repositoryPath);if(u.info("server action result:",t),!w.current)return void u.warn("component unmounted after deploy — discarding result");if(t.success)u.info(`deploy succeeded — initial state=${t.state}, starting polling`),m(t.state??null),h(null),b(e.targetId);else{let e=t.error??"An unexpected error occurred";u.warn(`deploy failed: ${e}`),f(e)}}catch(t){if(!w.current)return;let e=t instanceof Error?t.message:"An unexpected error occurred";u.error(`deploy threw exception: ${e}`,t),f(e)}finally{w.current&&r(!1)}},[e,n,b]),C=(0,t.useCallback)(async()=>{if(e&&!s){u.info(`stop() — targetId="${e.targetId}"`),d(!0);try{let t=await l(e.targetId);if(u.info("stop result:",t),!w.current)return;t.success&&(y(),m(null),h(null))}catch(e){u.warn("stop error (non-critical):",e)}finally{w.current&&d(!1)}}},[e,s,y]);return{deploy:j,stop:C,deployLoading:n,stopLoading:s,deployError:c,status:p,url:g}}],8537)},11495,e=>{"use strict";var t=e.i(96871),n=e.i(16539),r=e.i(8558),a=e.i(96646),o=e.i(92568),l=e.i(94237),i=e.i(56719),u=e.i(31777);e.i(81803);var s=e.i(72714);e.i(99348);var d=e.i(17466),c=e.i(45811),f=e.i(25235),p=e.i(2828);e.i(26759);var m=e.i(97164),g=e.i(8537),h=e.i(75921);let v=(0,l.cva)("",{variants:{size:{sm:"w-96",md:"w-2xl",lg:"w-[772px]"}},defaultVariants:{size:"sm"}});function w({deployTarget:e}){let n=(0,g.useDeployAction)(e),r="Booting"===n.status||"Ready"===n.status;return(0,t.jsxs)("div",{"data-testid":"base-drawer-deploy-bar",className:"flex items-center gap-2 px-4 pt-3 pb-3",children:[(0,t.jsx)(p.TooltipProvider,{children:(0,t.jsxs)(p.Tooltip,{children:[(0,t.jsx)(p.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{children:(0,t.jsx)(s.ActionButton,{label:r?"Stop Dev Server":"Start Dev Server",onClick:r?n.stop:n.deploy,loading:n.deployLoading||n.stopLoading,error:!!n.deployError,icon:r?o.Square:a.Play,iconOnly:!0,variant:"outline",size:"icon-sm"})})}),(0,t.jsx)(p.TooltipContent,{children:r?"Stop Dev Server":"Start Dev Server"})]})}),r?(0,t.jsx)(d.DeploymentStatusBadge,{status:n.status,url:n.url,targetId:e.targetId}):null]})}e.s(["BaseDrawer",0,function({open:e,onClose:a,modal:o=!1,dismissOnOutsideClick:l=!1,title:s="Drawer",size:d,header:p,children:g,footer:x,className:y,"data-testid":b,deployTarget:j}){let{i18n:C}=(0,m.useTranslation)(),T=(0,h.useFeatureFlags)(),R=(0,n.useRef)(null),D=(0,n.useRef)(null),E="rtl"===C.dir()?"left":"right",S=(0,n.useCallback)(()=>{D.current=document.activeElement},[]),k=(0,n.useCallback)(e=>{D.current&&"function"==typeof D.current.focus&&(e.preventDefault(),D.current.focus(),D.current=null)},[]);return(0,n.useEffect)(()=>{if(!e||o)return;let t=e=>{"Escape"===e.key&&(e.stopPropagation(),a())};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e,o,a]),(0,n.useEffect)(()=>{if(!e||o)return;let t=l?'[role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]':'[data-no-drawer-close], [role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]',n=e=>!!e&&!!(R.current?.contains(e)||e.closest(t)),r=null,i=e=>{r=e.target},u=e=>{let t=r;r=null;let o=e.target;!document.body.contains(o)||n(o)||n(t)||a()};return document.addEventListener("pointerdown",i,!0),document.addEventListener("click",u),()=>{document.removeEventListener("pointerdown",i,!0),document.removeEventListener("click",u)}},[e,o,a,l]),(0,t.jsxs)(c.Drawer,{direction:E,modal:o,handleOnly:!0,open:e,onOpenChange:e=>{e||a()},children:[o?(0,t.jsx)(c.DrawerOverlay,{}):null,(0,t.jsxs)(c.DrawerContent,{ref:R,direction:E,showCloseButton:!1,className:(0,u.cn)(v({size:d}),"bg-white/80 backdrop-blur-xl dark:bg-[#1e293bd9]",y),"data-testid":b,onInteractOutside:o?void 0:e=>e.preventDefault(),...!o?{"aria-modal":!0}:{},children:[(0,t.jsx)(c.DrawerTitle,{asChild:!0,children:(0,t.jsx)("span",{className:"sr-only",children:s})}),(0,t.jsx)(c.DrawerDescription,{asChild:!0,children:(0,t.jsx)("span",{className:"sr-only",children:s})}),(0,t.jsx)(i.FocusScope.Root,{trapped:!o,loop:!o,asChild:!0,onMountAutoFocus:S,onUnmountAutoFocus:k,children:(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:[(0,t.jsxs)("button",{type:"button","aria-label":"Close",onClick:a,className:"ring-offset-background focus:ring-ring absolute end-3 top-2 z-50 rounded-sm p-1 opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden","data-testid":b?`${b}-close-button`:void 0,children:[(0,t.jsx)(r.XIcon,{className:"size-4"}),(0,t.jsx)("span",{className:"sr-only",children:"Close"})]}),p?(0,t.jsx)(c.DrawerHeader,{className:"shrink-0",children:p}):null,p?(0,t.jsx)(f.Separator,{}):null,T.envDeploy&&j?(0,t.jsx)(w,{deployTarget:j}):null,(0,t.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:g}),x?(0,t.jsx)(c.DrawerFooter,{className:"shrink-0",children:x}):null]})})]})]})}])}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,96646,92568,e=>{"use strict";var t=e.i(54864);let n=(0,t.default)("play",[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]);e.s(["Play",0,n],96646);let r=(0,t.default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);e.s(["Square",0,r],92568)},56719,e=>{"use strict";var t=e.i(62854);e.s(["FocusScope",0,t])},72714,e=>{"use strict";var t=e.i(96871),n=e.i(79561),r=e.i(73423),a=e.i(31777),o=e.i(35364),l=e.i(8361);e.s(["ActionButton",0,function({label:e,onClick:i,loading:u,error:s,icon:d,iconOnly:c=!1,variant:f="outline",size:p="sm"}){let m=(0,l.useSoundAction)("click");return(0,t.jsxs)(o.Button,{variant:f,size:p,"aria-label":e,disabled:u,onClick:()=>{m.play(),i()},className:(0,a.cn)("gap-1.5",s&&"text-destructive hover:text-destructive",!s&&c&&"ghost"===f&&"text-muted-foreground cursor-pointer rounded-full transition-colors hover:text-blue-500"),children:[u?(0,t.jsx)(n.LoaderCircle,{className:"size-4 animate-spin"}):s?(0,t.jsx)(r.CircleAlert,{className:"size-4"}):(0,t.jsx)(d,{className:"size-4"}),c?null:e]})}])},81803,e=>{"use strict";e.i(72714),e.s([])},99348,17466,45811,e=>{"use strict";let t;var n=e.i(96871),r=e.i(16539),a=e.i(79561),o=e.i(84735),l=e.i(70727),i=e.i(17406),u=e.i(2828),s=e.i(2287),d=e.i(96976);let c=(0,d.createServerReference)("408264038b9ac0d4443d9cd072bb855620e4329c4e",d.callServer,void 0,d.findSourceMapURL,"getDeploymentLogs");function f({open:e,onOpenChange:t,targetId:a}){let{logs:o,isConnected:l}=function(e){let[t,n]=(0,r.useState)([]),[a,o]=(0,r.useState)(!1),l=(0,r.useRef)(null),i=(0,r.useCallback)(()=>{l.current&&(l.current.close(),l.current=null),o(!1)},[]);return(0,r.useEffect)(()=>{if(!e){n([]),o(!1);return}c(e).then(e=>{e&&n(e)}).catch(()=>{});let t=new EventSource(`/api/deployment-logs?targetId=${e}`);return l.current=t,t.onopen=()=>{o(!0)},t.addEventListener("log",e=>{let t=JSON.parse(e.data);n(e=>[...e,t])}),t.onerror=()=>{o(!1)},()=>{t.close(),l.current=null}},[e,i]),{logs:t,isConnected:a}}(e?a:null);return(0,n.jsx)(p,{open:e,onOpenChange:t,logs:o,isConnected:l})}function p({open:e,onOpenChange:t,logs:a,isConnected:o}){let i=(0,r.useRef)(null),u=(0,r.useRef)(!0),d=(0,r.useCallback)(()=>{let e=i.current;e&&(u.current=e.scrollTop+e.clientHeight>=e.scrollHeight-50)},[]);return(0,r.useEffect)(()=>{u.current&&i.current&&(i.current.scrollTop=i.current.scrollHeight)},[a]),(0,n.jsx)(s.Dialog,{open:e,onOpenChange:t,children:(0,n.jsxs)(s.DialogContent,{className:"flex h-[calc(100vh-48px)] max-h-[calc(100vh-48px)] w-full max-w-[calc(100vw-48px)] flex-col gap-0 bg-zinc-950 p-0 text-zinc-100 sm:rounded-lg","aria-describedby":void 0,children:[(0,n.jsxs)(s.DialogHeader,{className:"flex flex-row items-center justify-between border-b border-zinc-800 px-4 py-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)(l.Terminal,{className:"h-4 w-4 text-zinc-400"}),(0,n.jsx)(s.DialogTitle,{className:"text-sm font-medium text-zinc-100",children:"Server Logs"})]}),(0,n.jsxs)("div",{className:"flex items-center gap-2 pe-8",children:[(0,n.jsx)("span",{className:`inline-block h-2 w-2 rounded-full ${o?"bg-green-500":"bg-zinc-500"}`}),(0,n.jsx)("span",{className:"text-xs text-zinc-400",children:o?"Connected":"Disconnected"})]})]}),(0,n.jsxs)("div",{ref:i,onScroll:d,className:"flex-1 overflow-auto p-4 font-mono text-sm leading-relaxed",children:[0===a.length?(0,n.jsx)("p",{className:"text-zinc-500",children:"Waiting for log output..."}):a.map(e=>(0,n.jsx)(m,{entry:e},`${e.timestamp}-${e.stream}-${e.line}`)),!o&&a.length>0&&(0,n.jsx)("div",{className:"mt-2 border-t border-zinc-800 pt-2 text-zinc-500",children:"[Server stopped]"})]})]})})}function m({entry:e}){return(0,n.jsx)("div",{"data-stream":e.stream,className:"stderr"===e.stream?"text-red-400":"text-zinc-200",children:(0,n.jsx)("span",{className:"break-all whitespace-pre-wrap",children:e.line})})}let g="text-muted-foreground hover:bg-foreground/8 hover:text-foreground inline-flex size-7 items-center justify-center rounded-[3px]";e.s(["DeploymentStatusBadge",0,function({status:e,url:t,targetId:s}){let[d,c]=(0,r.useState)(!1),p=s&&(e===i.DeploymentState.Booting||e===i.DeploymentState.Ready);switch(e){case i.DeploymentState.Booting:return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex items-center gap-1 pl-1",children:[(0,n.jsx)(a.LoaderCircle,{className:"size-3 animate-spin text-blue-500"}),(0,n.jsx)("span",{className:"text-muted-foreground text-[11px]",children:"Starting..."}),p?(0,n.jsx)(u.TooltipProvider,{delayDuration:300,children:(0,n.jsxs)(u.Tooltip,{children:[(0,n.jsx)(u.TooltipTrigger,{asChild:!0,children:(0,n.jsx)("button",{type:"button","aria-label":"View server logs",className:g,onClick:e=>{e.stopPropagation(),c(!0)},children:(0,n.jsx)(l.Terminal,{className:"size-3.5"})})}),(0,n.jsx)(u.TooltipContent,{side:"bottom",className:"text-xs",children:"Server logs"})]})}):null]}),p?(0,n.jsx)(f,{open:d,onOpenChange:c,targetId:s}):null]});case i.DeploymentState.Ready:return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"flex translate-y-px items-center gap-1 pl-1",children:[(0,n.jsx)("span",{className:"inline-block size-1.5 rounded-full bg-green-500"}),t?(0,n.jsxs)("a",{href:t,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-0.5 text-[11px] text-green-600 hover:text-green-500 dark:text-green-400 dark:hover:text-green-300",onClick:e=>e.stopPropagation(),children:[t,(0,n.jsx)(o.ExternalLink,{className:"size-2.5 shrink-0"})]}):(0,n.jsx)("span",{className:"text-[11px] text-green-600 dark:text-green-400",children:"Ready"}),p?(0,n.jsx)(u.TooltipProvider,{delayDuration:300,children:(0,n.jsxs)(u.Tooltip,{children:[(0,n.jsx)(u.TooltipTrigger,{asChild:!0,children:(0,n.jsx)("button",{type:"button","aria-label":"View server logs",className:g,onClick:e=>{e.stopPropagation(),c(!0)},children:(0,n.jsx)(l.Terminal,{className:"size-3.5"})})}),(0,n.jsx)(u.TooltipContent,{side:"bottom",className:"text-xs",children:"Server logs"})]})}):null]}),p?(0,n.jsx)(f,{open:d,onOpenChange:c,targetId:s}):null]});default:return null}}],17466),e.s([],99348);var h=e.i(8558),v=e.i(94983);let w=r.default.createContext({drawerRef:{current:null},overlayRef:{current:null},onPress:()=>{},onRelease:()=>{},onDrag:()=>{},onNestedDrag:()=>{},onNestedOpenChange:()=>{},onNestedRelease:()=>{},openProp:void 0,dismissible:!1,isOpen:!1,isDragging:!1,keyboardIsOpen:{current:!1},snapPointsOffset:null,snapPoints:null,handleOnly:!1,modal:!1,shouldFade:!1,activeSnapPoint:null,onOpenChange:()=>{},setActiveSnapPoint:()=>{},closeDrawer:()=>{},direction:"bottom",shouldAnimate:{current:!0},shouldScaleBackground:!1,setBackgroundColorOnScale:!0,noBodyStyles:!1,container:null,autoFocus:!1}),x=()=>{let e=r.default.useContext(w);if(!e)throw Error("useDrawerContext must be used within a Drawer.Root");return e};function y(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)}function b(){return j(/^iPhone/)||j(/^iPad/)||j(/^Mac/)&&navigator.maxTouchPoints>1}function j(e){return"u">typeof window&&null!=window.navigator?e.test(window.navigator.platform):void 0}!function(e){if(!e||"u"<typeof document)return;let t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}("[data-vaul-drawer]{touch-action:none;will-change:transform;transition:transform .5s cubic-bezier(.32, .72, 0, 1);animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=open]{animation-name:slideFromBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=bottom][data-state=closed]{animation-name:slideToBottom}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=open]{animation-name:slideFromTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=top][data-state=closed]{animation-name:slideToTop}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=open]{animation-name:slideFromLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=left][data-state=closed]{animation-name:slideToLeft}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=open]{animation-name:slideFromRight}[data-vaul-drawer][data-vaul-snap-points=false][data-vaul-drawer-direction=right][data-state=closed]{animation-name:slideToRight}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--initial-transform,100%),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}[data-vaul-drawer][data-vaul-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--initial-transform,100%),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=top]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=bottom]{transform:translate3d(0,var(--snap-point-height,0),0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=left]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-drawer][data-vaul-delayed-snap-points=true][data-vaul-drawer-direction=right]{transform:translate3d(var(--snap-point-height,0),0,0)}[data-vaul-overlay][data-vaul-snap-points=false]{animation-duration:.5s;animation-timing-function:cubic-bezier(0.32,0.72,0,1)}[data-vaul-overlay][data-vaul-snap-points=false][data-state=open]{animation-name:fadeIn}[data-vaul-overlay][data-state=closed]{animation-name:fadeOut}[data-vaul-animate=false]{animation:none!important}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:0;transition:opacity .5s cubic-bezier(.32, .72, 0, 1)}[data-vaul-overlay][data-vaul-snap-points=true]{opacity:1}[data-vaul-drawer]:not([data-vaul-custom-container=true])::after{content:'';position:absolute;background:inherit;background-color:inherit}[data-vaul-drawer][data-vaul-drawer-direction=top]::after{top:initial;bottom:100%;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=bottom]::after{top:100%;bottom:initial;left:0;right:0;height:200%}[data-vaul-drawer][data-vaul-drawer-direction=left]::after{left:initial;right:100%;top:0;bottom:0;width:200%}[data-vaul-drawer][data-vaul-drawer-direction=right]::after{left:100%;right:initial;top:0;bottom:0;width:200%}[data-vaul-overlay][data-vaul-snap-points=true]:not([data-vaul-snap-points-overlay=true]):not(\n[data-state=closed]\n){opacity:0}[data-vaul-overlay][data-vaul-snap-points-overlay=true]{opacity:1}[data-vaul-handle]{display:block;position:relative;opacity:.7;background:#e2e2e4;margin-left:auto;margin-right:auto;height:5px;width:32px;border-radius:1rem;touch-action:pan-y}[data-vaul-handle]:active,[data-vaul-handle]:hover{opacity:1}[data-vaul-handle-hitarea]{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:max(100%,2.75rem);height:max(100%,2.75rem);touch-action:inherit}@media (hover:hover) and (pointer:fine){[data-vaul-drawer]{user-select:none}}@media (pointer:fine){[data-vaul-handle-hitarea]:{width:100%;height:100%}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeOut{to{opacity:0}}@keyframes slideFromBottom{from{transform:translate3d(0,var(--initial-transform,100%),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToBottom{to{transform:translate3d(0,var(--initial-transform,100%),0)}}@keyframes slideFromTop{from{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}to{transform:translate3d(0,0,0)}}@keyframes slideToTop{to{transform:translate3d(0,calc(var(--initial-transform,100%) * -1),0)}}@keyframes slideFromLeft{from{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToLeft{to{transform:translate3d(calc(var(--initial-transform,100%) * -1),0,0)}}@keyframes slideFromRight{from{transform:translate3d(var(--initial-transform,100%),0,0)}to{transform:translate3d(0,0,0)}}@keyframes slideToRight{to{transform:translate3d(var(--initial-transform,100%),0,0)}}");let C="u">typeof window?r.useLayoutEffect:r.useEffect;function T(...e){return(...t)=>{for(let n of e)"function"==typeof n&&n(...t)}}let R="u">typeof document&&window.visualViewport;function D(e){let t=window.getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowX+t.overflowY)}function E(e){for(D(e)&&(e=e.parentElement);e&&!D(e);)e=e.parentElement;return e||document.scrollingElement||document.documentElement}let S=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]),k=0;function N(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function $(e){let t=document.scrollingElement||document.documentElement;for(;e&&e!==t;){let t=E(e);if(t!==document.documentElement&&t!==document.body&&t!==e){let n=t.getBoundingClientRect().top,r=e.getBoundingClientRect().top;e.getBoundingClientRect().bottom>t.getBoundingClientRect().bottom+24&&(t.scrollTop+=r-n)}e=t.parentElement}}function P(e){return e instanceof HTMLInputElement&&!S.has(e.type)||e instanceof HTMLTextAreaElement||e instanceof HTMLElement&&e.isContentEditable}function M(...e){return r.useCallback(function(...e){return t=>e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}(...e),e)}let z=new WeakMap;function O(e,t,n=!1){if(!e||!(e instanceof HTMLElement))return;let r={};Object.entries(t).forEach(([t,n])=>{t.startsWith("--")?e.style.setProperty(t,n):(r[t]=e.style[t],e.style[t]=n)}),n||z.set(e,r)}let L=e=>{switch(e){case"top":case"bottom":return!0;case"left":case"right":return!1;default:return e}};function F(e,t){if(!e)return null;let n=window.getComputedStyle(e),r=n.transform||n.webkitTransform||n.mozTransform,a=r.match(/^matrix3d\((.+)\)$/);return a?parseFloat(a[1].split(", ")[L(t)?13:12]):(a=r.match(/^matrix\((.+)\)$/))?parseFloat(a[1].split(", ")[L(t)?5:4]):null}function B(e,t){if(!e)return()=>{};let n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}}let A=[.32,.72,0,1],I="vaul-dragging";function H(e){let t=r.default.useRef(e);return r.default.useEffect(()=>{t.current=e}),r.default.useMemo(()=>(...e)=>null==t.current?void 0:t.current.call(t,...e),[])}function W({prop:e,defaultProp:t,onChange:n=()=>{}}){let[a,o]=function({defaultProp:e,onChange:t}){let n=r.default.useState(e),[a]=n,o=r.default.useRef(a),l=H(t);return r.default.useEffect(()=>{o.current!==a&&(l(a),o.current=a)},[a,o,l]),n}({defaultProp:t,onChange:n}),l=void 0!==e,i=l?e:a,u=H(n);return[i,r.default.useCallback(t=>{if(l){let n="function"==typeof t?t(e):t;n!==e&&u(n)}else o(t)},[l,e,o,u])]}let q=()=>()=>{},U=null;function Y({open:e,onOpenChange:n,children:a,onDrag:o,onRelease:l,snapPoints:i,shouldScaleBackground:u=!1,setBackgroundColorOnScale:s=!0,closeThreshold:d=.25,scrollLockTimeout:c=100,dismissible:f=!0,handleOnly:p=!1,fadeFromIndex:m=i&&i.length-1,activeSnapPoint:g,setActiveSnapPoint:h,fixed:x,modal:j=!0,onClose:D,nested:S,noBodyStyles:M=!1,direction:B="bottom",defaultOpen:H=!1,disablePreventScroll:q=!0,snapToSequentialPoint:X=!1,preventScrollRestoration:V=!1,repositionInputs:K=!0,onAnimationEnd:J,container:_,autoFocus:G=!1}){var Q,Z;let[ee=!1,et]=W({defaultProp:H,prop:e,onChange:e=>{null==n||n(e),e||S||eP(),setTimeout(()=>{null==J||J(e)},500),e&&!j&&"u">typeof window&&window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"}),e||(document.body.style.pointerEvents="auto")}}),[en,er]=r.default.useState(!1),[ea,eo]=r.default.useState(!1),[el,ei]=r.default.useState(!1),eu=r.default.useRef(null),es=r.default.useRef(null),ed=r.default.useRef(null),ec=r.default.useRef(null),ef=r.default.useRef(null),ep=r.default.useRef(!1),em=r.default.useRef(null),eg=r.default.useRef(0),eh=r.default.useRef(!1),ev=r.default.useRef(!H),ew=r.default.useRef(0),ex=r.default.useRef(null),ey=r.default.useRef((null==(Q=ex.current)?void 0:Q.getBoundingClientRect().height)||0),eb=r.default.useRef((null==(Z=ex.current)?void 0:Z.getBoundingClientRect().width)||0),ej=r.default.useRef(0),eC=r.default.useCallback(e=>{i&&e===eS.length-1&&(es.current=new Date)},[]),{activeSnapPoint:eT,activeSnapPointIndex:eR,setActiveSnapPoint:eD,onRelease:eE,snapPointsOffset:eS,onDrag:ek,shouldFade:eN,getPercentageDragged:e$}=function({activeSnapPointProp:e,setActiveSnapPointProp:t,snapPoints:n,drawerRef:a,overlayRef:o,fadeFromIndex:l,onSnapPointChange:i,direction:u="bottom",container:s,snapToSequentialPoint:d}){let[c,f]=W({prop:e,defaultProp:null==n?void 0:n[0],onChange:t}),[p,m]=r.default.useState("u">typeof window?{innerWidth:window.innerWidth,innerHeight:window.innerHeight}:void 0);r.default.useEffect(()=>{function e(){m({innerWidth:window.innerWidth,innerHeight:window.innerHeight})}return window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let g=r.default.useMemo(()=>c===(null==n?void 0:n[n.length-1])||null,[n,c]),h=r.default.useMemo(()=>{var e;return null!=(e=null==n?void 0:n.findIndex(e=>e===c))?e:null},[n,c]),v=n&&n.length>0&&(l||0===l)&&!Number.isNaN(l)&&n[l]===c||!n,w=r.default.useMemo(()=>{var e;let t=s?{width:s.getBoundingClientRect().width,height:s.getBoundingClientRect().height}:"u">typeof window?{width:window.innerWidth,height:window.innerHeight}:{width:0,height:0};return null!=(e=null==n?void 0:n.map(e=>{let n="string"==typeof e,r=0;if(n&&(r=parseInt(e,10)),L(u)){let a=n?r:p?e*t.height:0;return p?"bottom"===u?t.height-a:-t.height+a:a}let a=n?r:p?e*t.width:0;return p?"right"===u?t.width-a:-t.width+a:a}))?e:[]},[n,p,s]),x=r.default.useMemo(()=>null!==h?null==w?void 0:w[h]:null,[w,h]),y=r.default.useCallback(e=>{var t;let r=null!=(t=null==w?void 0:w.findIndex(t=>t===e))?t:null;i(r),O(a.current,{transition:`transform 0.5s cubic-bezier(${A.join(",")})`,transform:L(u)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`}),w&&r!==w.length-1&&void 0!==l&&r!==l&&r<l?O(o.current,{transition:`opacity 0.5s cubic-bezier(${A.join(",")})`,opacity:"0"}):O(o.current,{transition:`opacity 0.5s cubic-bezier(${A.join(",")})`,opacity:"1"}),f(null==n?void 0:n[Math.max(r,0)])},[a.current,n,w,l,o,f]);return r.default.useEffect(()=>{if(c||e){var t;let r=null!=(t=null==n?void 0:n.findIndex(t=>t===e||t===c))?t:-1;w&&-1!==r&&"number"==typeof w[r]&&y(w[r])}},[c,e,n,w,y]),{isLastSnapPoint:g,activeSnapPoint:c,shouldFade:v,getPercentageDragged:function(e,t){if(!n||"number"!=typeof h||!w||void 0===l)return null;let r=h===l-1;if(h>=l&&t)return 0;if(r&&!t)return 1;if(!v&&!r)return null;let a=r?h+1:h-1,o=e/Math.abs(r?w[a]-w[a-1]:w[a+1]-w[a]);return r?1-o:o},setActiveSnapPoint:f,activeSnapPointIndex:h,onRelease:function({draggedDistance:e,closeDrawer:t,velocity:r,dismissible:a}){if(void 0===l)return;let i="bottom"===u||"right"===u?(null!=x?x:0)-e:(null!=x?x:0)+e,s=h===l-1,c=0===h,f=e>0;if(s&&O(o.current,{transition:`opacity 0.5s cubic-bezier(${A.join(",")})`}),!d&&r>2&&!f)return void(a?t():y(w[0]));if(!d&&r>2&&f&&w&&n)return void y(w[n.length-1]);let p=null==w?void 0:w.reduce((e,t)=>"number"!=typeof e||"number"!=typeof t?e:Math.abs(t-i)<Math.abs(e-i)?t:e),m=L(u)?window.innerHeight:window.innerWidth;if(r>.4&&Math.abs(e)<.4*m){let e=f?1:-1;return e>0&&g&&n?void y(w[n.length-1]):void(c&&e<0&&a&&t(),null===h||y(w[h+e]))}y(p)},onDrag:function({draggedDistance:e}){if(null===x)return;let t="bottom"===u||"right"===u?x-e:x+e;("bottom"===u||"right"===u)&&t<w[w.length-1]||("top"===u||"left"===u)&&t>w[w.length-1]||O(a.current,{transform:L(u)?`translate3d(0, ${t}px, 0)`:`translate3d(${t}px, 0, 0)`})},snapPointsOffset:w}}({snapPoints:i,activeSnapPointProp:g,setActiveSnapPointProp:h,drawerRef:ex,fadeFromIndex:m,overlayRef:eu,onSnapPointChange:eC,direction:B,container:_,snapToSequentialPoint:X});!function(e={}){let{isDisabled:n}=e;C(()=>{if(!n){var e,r,a;let n,o,l,i,u,s,d;return 1==++k&&b()&&(l=0,i=window.pageXOffset,u=window.pageYOffset,s=T((e=document.documentElement,r="paddingRight",a=`${window.innerWidth-document.documentElement.clientWidth}px`,n=e.style[r],e.style[r]=a,()=>{e.style[r]=n})),window.scrollTo(0,0),d=T(N(document,"touchstart",e=>{((o=E(e.target))!==document.documentElement||o!==document.body)&&(l=e.changedTouches[0].pageY)},{passive:!1,capture:!0}),N(document,"touchmove",e=>{if(!o||o===document.documentElement||o===document.body)return void e.preventDefault();let t=e.changedTouches[0].pageY,n=o.scrollTop,r=o.scrollHeight-o.clientHeight;0!==r&&((n<=0&&t>l||n>=r&&t<l)&&e.preventDefault(),l=t)},{passive:!1,capture:!0}),N(document,"touchend",e=>{let t=e.target;P(t)&&t!==document.activeElement&&(e.preventDefault(),t.style.transform="translateY(-2000px)",t.focus(),requestAnimationFrame(()=>{t.style.transform=""}))},{passive:!1,capture:!0}),N(document,"focus",e=>{let t=e.target;P(t)&&(t.style.transform="translateY(-2000px)",requestAnimationFrame(()=>{t.style.transform="",R&&(R.height<window.innerHeight?requestAnimationFrame(()=>{$(t)}):R.addEventListener("resize",()=>$(t),{once:!0}))}))},!0),N(window,"scroll",()=>{window.scrollTo(0,0)})),t=()=>{s(),d(),window.scrollTo(i,u)}),()=>{0==--k&&(null==t||t())}}},[n])}({isDisabled:!ee||ea||!j||el||!en||!K||!q});let{restorePositionSetting:eP}=function({isOpen:e,modal:t,nested:n,hasBeenOpened:a,preventScrollRestoration:o,noBodyStyles:l}){let[i,u]=r.default.useState(()=>"u">typeof window?window.location.href:""),s=r.default.useRef(0),d=r.default.useCallback(()=>{if(y()&&null===U&&e&&!l){U={position:document.body.style.position,top:document.body.style.top,left:document.body.style.left,height:document.body.style.height,right:"unset"};let{scrollX:e,innerHeight:t}=window;document.body.style.setProperty("position","fixed","important"),Object.assign(document.body.style,{top:`${-s.current}px`,left:`${-e}px`,right:"0px",height:"auto"}),window.setTimeout(()=>window.requestAnimationFrame(()=>{let e=t-window.innerHeight;e&&s.current>=t&&(document.body.style.top=`${-(s.current+e)}px`)}),300)}},[e]),c=r.default.useCallback(()=>{if(y()&&null!==U&&!l){let e=-parseInt(document.body.style.top,10),t=-parseInt(document.body.style.left,10);Object.assign(document.body.style,U),window.requestAnimationFrame(()=>{o&&i!==window.location.href?u(window.location.href):window.scrollTo(t,e)}),U=null}},[i]);return r.default.useEffect(()=>{function e(){s.current=window.scrollY}return e(),window.addEventListener("scroll",e),()=>{window.removeEventListener("scroll",e)}},[]),r.default.useEffect(()=>{if(t)return()=>{"u"<typeof document||document.querySelector("[data-vaul-drawer]")||c()}},[t,c]),r.default.useEffect(()=>{!n&&a&&(e?(window.matchMedia("(display-mode: standalone)").matches||d(),t||window.setTimeout(()=>{c()},500)):c())},[e,a,i,t,n,d,c]),{restorePositionSetting:c}}({isOpen:ee,modal:j,nested:null!=S&&S,hasBeenOpened:en,preventScrollRestoration:V,noBodyStyles:M});function eM(){return(window.innerWidth-26)/window.innerWidth}function ez(e,t){var n;let r=e,a=null==(n=window.getSelection())?void 0:n.toString(),o=ex.current?F(ex.current,B):null,l=new Date;if("SELECT"===r.tagName||r.hasAttribute("data-vaul-no-drag")||r.closest("[data-vaul-no-drag]"))return!1;if("right"===B||"left"===B)return!0;if(es.current&&l.getTime()-es.current.getTime()<500)return!1;if(null!==o&&("bottom"===B?o>0:o<0))return!0;if(a&&a.length>0)return!1;if(ef.current&&l.getTime()-ef.current.getTime()<c&&0===o||t)return ef.current=l,!1;for(;r;){if(r.scrollHeight>r.clientHeight){if(0!==r.scrollTop)return ef.current=new Date,!1;if("dialog"===r.getAttribute("role"))break}r=r.parentNode}return!0}function eO(e){ea&&ex.current&&(ex.current.classList.remove(I),ep.current=!1,eo(!1),ec.current=new Date),null==D||D(),e||et(!1),setTimeout(()=>{i&&eD(i[0])},500)}function eL(){if(!ex.current)return;let e=document.querySelector("[data-vaul-drawer-wrapper]"),t=F(ex.current,B);O(ex.current,{transform:"translate3d(0, 0, 0)",transition:`transform 0.5s cubic-bezier(${A.join(",")})`}),O(eu.current,{transition:`opacity 0.5s cubic-bezier(${A.join(",")})`,opacity:"1"}),u&&t&&t>0&&ee&&O(e,{borderRadius:"8px",overflow:"hidden",...L(B)?{transform:`scale(${eM()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`,transformOrigin:"top"}:{transform:`scale(${eM()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`,transformOrigin:"left"},transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${A.join(",")})`},!0)}return r.default.useEffect(()=>{window.requestAnimationFrame(()=>{ev.current=!0})},[]),r.default.useEffect(()=>{var e;function t(){if(ex.current&&K&&(P(document.activeElement)||eh.current)){var e;let t=(null==(e=window.visualViewport)?void 0:e.height)||0,n=window.innerHeight,r=n-t,a=ex.current.getBoundingClientRect().height||0;ej.current||(ej.current=a);let o=ex.current.getBoundingClientRect().top;if(Math.abs(ew.current-r)>60&&(eh.current=!eh.current),i&&i.length>0&&eS&&eR&&(r+=eS[eR]||0),ew.current=r,a>t||eh.current){let e=ex.current.getBoundingClientRect().height,l=e;e>t&&(l=t-(a>.8*n?o:26)),x?ex.current.style.height=`${e-Math.max(r,0)}px`:ex.current.style.height=`${Math.max(l,t-o)}px`}else{let e;e=navigator.userAgent,"u">typeof window&&(/Firefox/.test(e)&&/Mobile/.test(e)||/FxiOS/.test(e))||(ex.current.style.height=`${ej.current}px`)}i&&i.length>0&&!eh.current?ex.current.style.bottom="0px":ex.current.style.bottom=`${Math.max(r,0)}px`}}return null==(e=window.visualViewport)||e.addEventListener("resize",t),()=>{var e;return null==(e=window.visualViewport)?void 0:e.removeEventListener("resize",t)}},[eR,i,eS]),r.default.useEffect(()=>(ee&&(O(document.documentElement,{scrollBehavior:"auto"}),es.current=new Date),()=>{!function(e,t){if(!e||!(e instanceof HTMLElement))return;let n=z.get(e);n&&(e.style[t]=n[t])}(document.documentElement,"scrollBehavior")}),[ee]),r.default.useEffect(()=>{j||window.requestAnimationFrame(()=>{document.body.style.pointerEvents="auto"})},[j]),r.default.createElement(v.Root,{defaultOpen:H,onOpenChange:e=>{(f||e)&&(e?er(!0):eO(!0),et(e))},open:ee},r.default.createElement(w.Provider,{value:{activeSnapPoint:eT,snapPoints:i,setActiveSnapPoint:eD,drawerRef:ex,overlayRef:eu,onOpenChange:n,onPress:function(e){var t,n;!f&&!i||(!ex.current||ex.current.contains(e.target))&&(ey.current=(null==(t=ex.current)?void 0:t.getBoundingClientRect().height)||0,eb.current=(null==(n=ex.current)?void 0:n.getBoundingClientRect().width)||0,eo(!0),ed.current=new Date,b()&&window.addEventListener("touchend",()=>ep.current=!1,{once:!0}),e.target.setPointerCapture(e.pointerId),eg.current=L(B)?e.pageY:e.pageX)},onRelease:function(e){var t,n;if(!ea||!ex.current)return;ex.current.classList.remove(I),ep.current=!1,eo(!1),ec.current=new Date;let r=F(ex.current,B);if(!e||!ez(e.target,!1)||!r||Number.isNaN(r)||null===ed.current)return;let a=ec.current.getTime()-ed.current.getTime(),o=eg.current-(L(B)?e.pageY:e.pageX),u=Math.abs(o)/a;if(u>.05&&(ei(!0),setTimeout(()=>{ei(!1)},200)),i){eE({draggedDistance:o*("bottom"===B||"right"===B?1:-1),closeDrawer:eO,velocity:u,dismissible:f}),null==l||l(e,!0);return}if("bottom"===B||"right"===B?o>0:o<0){eL(),null==l||l(e,!0);return}if(u>.4){eO(),null==l||l(e,!1);return}let s=Math.min(null!=(t=ex.current.getBoundingClientRect().height)?t:0,window.innerHeight),c=Math.min(null!=(n=ex.current.getBoundingClientRect().width)?n:0,window.innerWidth);if(Math.abs(r)>=("left"===B||"right"===B?c:s)*d){eO(),null==l||l(e,!1);return}null==l||l(e,!0),eL()},onDrag:function(e){if(ex.current&&ea){let t="bottom"===B||"right"===B?1:-1,n=(eg.current-(L(B)?e.pageY:e.pageX))*t,r=n>0,a=i&&!f&&!r;if(a&&0===eR)return;let l=Math.abs(n),s=document.querySelector("[data-vaul-drawer-wrapper]"),d=l/("bottom"===B||"top"===B?ey.current:eb.current),c=e$(l,r);if(null!==c&&(d=c),a&&d>=1||!ep.current&&!ez(e.target,r))return;if(ex.current.classList.add(I),ep.current=!0,O(ex.current,{transition:"none"}),O(eu.current,{transition:"none"}),i&&ek({draggedDistance:n}),r&&!i){let e=Math.min(-(8*(Math.log(n+1)-2)*1),0)*t;O(ex.current,{transform:L(B)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`});return}let p=1-d;if((eN||m&&eR===m-1)&&(null==o||o(e,d),O(eu.current,{opacity:`${p}`,transition:"none"},!0)),s&&eu.current&&u){let e=Math.min(eM()+d*(1-eM()),1),t=8-8*d,n=Math.max(0,14-14*d);O(s,{borderRadius:`${t}px`,transform:L(B)?`scale(${e}) translate3d(0, ${n}px, 0)`:`scale(${e}) translate3d(${n}px, 0, 0)`,transition:"none"},!0)}if(!i){let e=l*t;O(ex.current,{transform:L(B)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})}}},dismissible:f,shouldAnimate:ev,handleOnly:p,isOpen:ee,isDragging:ea,shouldFade:eN,closeDrawer:eO,onNestedDrag:function(e,t){if(t<0)return;let n=(window.innerWidth-16)/window.innerWidth,r=n+t*(1-n),a=-16+16*t;O(ex.current,{transform:L(B)?`scale(${r}) translate3d(0, ${a}px, 0)`:`scale(${r}) translate3d(${a}px, 0, 0)`,transition:"none"})},onNestedOpenChange:function(e){let t=e?(window.innerWidth-16)/window.innerWidth:1,n=e?-16:0;em.current&&window.clearTimeout(em.current),O(ex.current,{transition:`transform 0.5s cubic-bezier(${A.join(",")})`,transform:L(B)?`scale(${t}) translate3d(0, ${n}px, 0)`:`scale(${t}) translate3d(${n}px, 0, 0)`}),!e&&ex.current&&(em.current=setTimeout(()=>{let e=F(ex.current,B);O(ex.current,{transition:"none",transform:L(B)?`translate3d(0, ${e}px, 0)`:`translate3d(${e}px, 0, 0)`})},500))},onNestedRelease:function(e,t){let n=L(B)?window.innerHeight:window.innerWidth,r=t?(n-16)/n:1,a=t?-16:0;t&&O(ex.current,{transition:`transform 0.5s cubic-bezier(${A.join(",")})`,transform:L(B)?`scale(${r}) translate3d(0, ${a}px, 0)`:`scale(${r}) translate3d(${a}px, 0, 0)`})},keyboardIsOpen:eh,modal:j,snapPointsOffset:eS,activeSnapPointIndex:eR,direction:B,shouldScaleBackground:u,setBackgroundColorOnScale:s,noBodyStyles:M,container:_,autoFocus:G}},a))}let X=r.default.forwardRef(function({...e},t){let{overlayRef:n,snapPoints:a,onRelease:o,shouldFade:l,isOpen:i,modal:u,shouldAnimate:s}=x(),d=M(t,n),c=a&&a.length>0;if(!u)return null;let f=r.default.useCallback(e=>o(e),[o]);return r.default.createElement(v.Overlay,{onMouseUp:f,ref:d,"data-vaul-overlay":"","data-vaul-snap-points":i&&c?"true":"false","data-vaul-snap-points-overlay":i&&l?"true":"false","data-vaul-animate":(null==s?void 0:s.current)?"true":"false",...e})});X.displayName="Drawer.Overlay";let V=r.default.forwardRef(function({onPointerDownOutside:e,style:t,onOpenAutoFocus:n,...a},o){let{drawerRef:l,onPress:i,onRelease:u,onDrag:s,keyboardIsOpen:d,snapPointsOffset:c,activeSnapPointIndex:f,modal:p,isOpen:m,direction:g,snapPoints:h,container:w,handleOnly:y,shouldAnimate:b,autoFocus:j}=x(),[C,T]=r.default.useState(!1),R=M(o,l),D=r.default.useRef(null),E=r.default.useRef(null),S=r.default.useRef(!1),k=h&&h.length>0;function N(e){D.current=null,S.current=!1,u(e)}return!function(){let{direction:e,isOpen:t,shouldScaleBackground:n,setBackgroundColorOnScale:a,noBodyStyles:o}=x(),l=r.default.useRef(null),i=(0,r.useMemo)(()=>document.body.style.backgroundColor,[]);function u(){return(window.innerWidth-26)/window.innerWidth}r.default.useEffect(()=>{if(t&&n){l.current&&clearTimeout(l.current);let t=document.querySelector("[data-vaul-drawer-wrapper]")||document.querySelector("[vaul-drawer-wrapper]");if(!t)return;!function(...e){}(a&&!o?B(document.body,{background:"black"}):q,B(t,{transformOrigin:L(e)?"top":"left",transitionProperty:"transform, border-radius",transitionDuration:"0.5s",transitionTimingFunction:`cubic-bezier(${A.join(",")})`}));let n=B(t,{borderRadius:"8px",overflow:"hidden",...L(e)?{transform:`scale(${u()}) translate3d(0, calc(env(safe-area-inset-top) + 14px), 0)`}:{transform:`scale(${u()}) translate3d(calc(env(safe-area-inset-top) + 14px), 0, 0)`}});return()=>{n(),l.current=window.setTimeout(()=>{i?document.body.style.background=i:document.body.style.removeProperty("background")},500)}}},[t,n,i])}(),r.default.useEffect(()=>{k&&window.requestAnimationFrame(()=>{T(!0)})},[]),r.default.createElement(v.Content,{"data-vaul-drawer-direction":g,"data-vaul-drawer":"","data-vaul-delayed-snap-points":C?"true":"false","data-vaul-snap-points":m&&k?"true":"false","data-vaul-custom-container":w?"true":"false","data-vaul-animate":(null==b?void 0:b.current)?"true":"false",...a,ref:R,style:c&&c.length>0?{"--snap-point-height":`${c[null!=f?f:0]}px`,...t}:t,onPointerDown:e=>{y||(null==a.onPointerDown||a.onPointerDown.call(a,e),D.current={x:e.pageX,y:e.pageY},i(e))},onOpenAutoFocus:e=>{null==n||n(e),j||e.preventDefault()},onPointerDownOutside:t=>{(null==e||e(t),!p||t.defaultPrevented)?t.preventDefault():d.current&&(d.current=!1)},onFocusOutside:e=>{if(!p)return void e.preventDefault()},onPointerMove:e=>{if(E.current=e,y||(null==a.onPointerMove||a.onPointerMove.call(a,e),!D.current))return;let t=e.pageY-D.current.y,n=e.pageX-D.current.x,r="touch"===e.pointerType?10:2;((e,t,n=0)=>{if(S.current)return!0;let r=Math.abs(e.y),a=Math.abs(e.x),o=a>r,l=["bottom","right"].includes(t)?1:-1;if("left"===t||"right"===t){if(!(e.x*l<0)&&a>=0&&a<=n)return o}else if(!(e.y*l<0)&&r>=0&&r<=n)return!o;return S.current=!0,!0})({x:n,y:t},g,r)?s(e):(Math.abs(n)>r||Math.abs(t)>r)&&(D.current=null)},onPointerUp:e=>{null==a.onPointerUp||a.onPointerUp.call(a,e),D.current=null,S.current=!1,u(e)},onPointerOut:e=>{null==a.onPointerOut||a.onPointerOut.call(a,e),N(E.current)},onContextMenu:e=>{null==a.onContextMenu||a.onContextMenu.call(a,e),E.current&&N(E.current)}})});V.displayName="Drawer.Content";let K=r.default.forwardRef(function({preventCycle:e=!1,children:t,...n},a){let{closeDrawer:o,isDragging:l,snapPoints:i,activeSnapPoint:u,setActiveSnapPoint:s,dismissible:d,handleOnly:c,isOpen:f,onPress:p,onDrag:m}=x(),g=r.default.useRef(null),h=r.default.useRef(!1);function v(){g.current&&window.clearTimeout(g.current),h.current=!1}return r.default.createElement("div",{onClick:function(){h.current?v():window.setTimeout(()=>{!function(){if(l||e||h.current)return v();if(v(),!i||0===i.length){d||o();return}if(u===i[i.length-1]&&d)return o();let t=i.findIndex(e=>e===u);-1===t||s(i[t+1])}()},120)},onPointerCancel:v,onPointerDown:e=>{c&&p(e),g.current=window.setTimeout(()=>{h.current=!0},250)},onPointerMove:e=>{c&&m(e)},ref:a,"data-vaul-drawer-visible":f?"true":"false","data-vaul-handle":"","aria-hidden":"true",...n},r.default.createElement("span",{"data-vaul-handle-hitarea":"","aria-hidden":"true"},t))});K.displayName="Drawer.Handle";let J={Root:Y,NestedRoot:function({onDrag:e,onOpenChange:t,open:n,...a}){let{onNestedDrag:o,onNestedOpenChange:l,onNestedRelease:i}=x();if(!o)throw Error("Drawer.NestedRoot must be placed in another drawer");return r.default.createElement(Y,{nested:!0,open:n,onClose:()=>{l(!1)},onDrag:(t,n)=>{o(t,n),null==e||e(t,n)},onOpenChange:e=>{e&&l(e),null==t||t(e)},onRelease:i,...a})},Content:V,Overlay:X,Trigger:v.Trigger,Portal:function(e){let t=x(),{container:n=t.container,...a}=e;return r.default.createElement(v.Portal,{container:n,...a})},Handle:K,Close:v.Close,Title:v.Title,Description:v.Description};var _=e.i(31777);function G({...e}){return(0,n.jsx)(J.Portal,{"data-slot":"drawer-portal",...e})}e.s(["Drawer",0,function({...e}){return(0,n.jsx)(J.Root,{"data-slot":"drawer",...e})},"DrawerContent",0,function({className:e,children:t,direction:r="bottom",showCloseButton:a=!0,...o}){return(0,n.jsx)(G,{children:(0,n.jsxs)(J.Content,{"data-slot":"drawer-content",className:(0,_.cn)("editorial-shadow fixed z-50 flex flex-col","bg-white/80 backdrop-blur-xl dark:bg-[#1e293bd9]","bottom"===r&&"inset-x-0 bottom-0 mb-24 rounded-t-lg border-t","top"===r&&"inset-x-0 top-0 mt-24 rounded-b-lg border-b","right"===r&&"inset-y-0 right-0 h-full w-3/4 border-l","left"===r&&"inset-y-0 left-0 h-full w-3/4 border-r",e),style:{"--initial-transform":"calc(100% + 8px)",userSelect:"text",...o.style??{}},...o,children:[t,a?(0,n.jsxs)(J.Close,{className:"ring-offset-background focus:ring-ring absolute end-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none",children:[(0,n.jsx)(h.XIcon,{className:"size-4"}),(0,n.jsx)("span",{className:"sr-only",children:"Close"})]}):null]})})},"DrawerDescription",0,function({className:e,...t}){return(0,n.jsx)(J.Description,{"data-slot":"drawer-description",className:(0,_.cn)("text-muted-foreground text-sm",e),...t})},"DrawerFooter",0,function({className:e,...t}){return(0,n.jsx)("div",{"data-slot":"drawer-footer",className:(0,_.cn)("mt-auto flex flex-col gap-2 p-4",e),...t})},"DrawerHeader",0,function({className:e,...t}){return(0,n.jsx)("div",{"data-slot":"drawer-header",className:(0,_.cn)("flex flex-col gap-1.5 p-4",e),...t})},"DrawerOverlay",0,function({className:e,...t}){return(0,n.jsx)(J.Overlay,{"data-slot":"drawer-overlay",className:(0,_.cn)("fixed inset-0 z-50 bg-black/40 backdrop-blur-[2px] dark:bg-black/50",e),...t})},"DrawerTitle",0,function({className:e,...t}){return(0,n.jsx)(J.Title,{"data-slot":"drawer-title",className:(0,_.cn)("text-foreground font-semibold",e),...t})}],45811)},8537,e=>{"use strict";var t=e.i(16539),n=e.i(18354),r=e.i(96976);let a=(0,r.createServerReference)("4012c0cf81875c39140d181e3f25fd2b8c88402207",r.callServer,void 0,r.findSourceMapURL,"deployFeature"),o=(0,r.createServerReference)("405c06493a65b3b37370309492d25e9b4124071fb4",r.callServer,void 0,r.findSourceMapURL,"deployRepository"),l=(0,r.createServerReference)("409bedb415a08a5dd259dda953e078ad00bf8ce4ae",r.callServer,void 0,r.findSourceMapURL,"stopDeployment"),i=(0,r.createServerReference)("4036da83fc5a5d24cf2546b4134ffb406ab748776b",r.callServer,void 0,r.findSourceMapURL,"getDeploymentStatus"),u=(0,n.createLogger)("[useDeployAction]");e.s(["useDeployAction",0,function(e){let[n,r]=(0,t.useState)(!1),[s,d]=(0,t.useState)(!1),[c,f]=(0,t.useState)(null),[p,m]=(0,t.useState)(null),[g,h]=(0,t.useState)(null),v=(0,t.useRef)(null),w=(0,t.useRef)(!0),x=(0,t.useRef)(p);(0,t.useEffect)(()=>{x.current=p},[p]),(0,t.useEffect)(()=>(w.current=!0,()=>{w.current=!1}),[]),(0,t.useEffect)(()=>()=>{v.current&&clearInterval(v.current)},[]);let y=(0,t.useCallback)(()=>{v.current&&(u.debug("stopping polling"),clearInterval(v.current),v.current=null)},[]),b=(0,t.useCallback)(e=>{y(),u.debug(`starting polling for "${e}" every 3000ms`),v.current=setInterval(async()=>{let t;if(!w.current)return void y();try{t=await i(e)}catch(t){u.warn(`poll fetch failed for "${e}":`,t),w.current&&(m(null),h(null),y());return}w.current&&(t&&"Stopped"!==t.state?(t.state!==x.current&&u.info(`poll state changed: ${x.current} → ${t.state}, url=${t.url}`),m(t.state),h(t.url)):(u.info(`poll result: ${t?`state=${t.state}`:"null (deployment gone)"} — stopping poll`),m(null),h(null),y()))},3e3)},[y]),j=(0,t.useCallback)(async()=>{if(!e)return void u.warn("deploy() called but input is null — no-op");if(n)return void u.warn("deploy() called but already loading — no-op");u.info(`deploy() — targetType="${e.targetType}", targetId="${e.targetId}", repositoryPath="${e.repositoryPath}"`),r(!0),f(null);try{let t="feature"===e.targetType?await a(e.targetId):await o(e.repositoryPath);if(u.info("server action result:",t),!w.current)return void u.warn("component unmounted after deploy — discarding result");if(t.success)u.info(`deploy succeeded — initial state=${t.state}, starting polling`),m(t.state??null),h(null),b(e.targetId);else{let e=t.error??"An unexpected error occurred";u.warn(`deploy failed: ${e}`),f(e)}}catch(t){if(!w.current)return;let e=t instanceof Error?t.message:"An unexpected error occurred";u.error(`deploy threw exception: ${e}`,t),f(e)}finally{w.current&&r(!1)}},[e,n,b]),C=(0,t.useCallback)(async()=>{if(e&&!s){u.info(`stop() — targetId="${e.targetId}"`),d(!0);try{let t=await l(e.targetId);if(u.info("stop result:",t),!w.current)return;t.success&&(y(),m(null),h(null))}catch(e){u.warn("stop error (non-critical):",e)}finally{w.current&&d(!1)}}},[e,s,y]);return{deploy:j,stop:C,deployLoading:n,stopLoading:s,deployError:c,status:p,url:g}}],8537)},11495,e=>{"use strict";var t=e.i(96871),n=e.i(16539),r=e.i(8558),a=e.i(96646),o=e.i(92568),l=e.i(94237),i=e.i(56719),u=e.i(31777);e.i(81803);var s=e.i(72714);e.i(99348);var d=e.i(17466),c=e.i(45811),f=e.i(25235),p=e.i(2828);e.i(26759);var m=e.i(97164),g=e.i(8537),h=e.i(75921);let v=(0,l.cva)("",{variants:{size:{sm:"w-96",md:"w-2xl",lg:"w-[772px]"}},defaultVariants:{size:"sm"}});function w({deployTarget:e}){let n=(0,g.useDeployAction)(e),r="Booting"===n.status||"Ready"===n.status;return(0,t.jsxs)("div",{"data-testid":"base-drawer-deploy-bar",className:"flex items-center gap-2 px-4 pt-3 pb-3",children:[(0,t.jsx)(p.TooltipProvider,{children:(0,t.jsxs)(p.Tooltip,{children:[(0,t.jsx)(p.TooltipTrigger,{asChild:!0,children:(0,t.jsx)("span",{children:(0,t.jsx)(s.ActionButton,{label:r?"Stop Dev Server":"Start Dev Server",onClick:r?n.stop:n.deploy,loading:n.deployLoading||n.stopLoading,error:!!n.deployError,icon:r?o.Square:a.Play,iconOnly:!0,variant:"outline",size:"icon-sm"})})}),(0,t.jsx)(p.TooltipContent,{children:r?"Stop Dev Server":"Start Dev Server"})]})}),r?(0,t.jsx)(d.DeploymentStatusBadge,{status:n.status,url:n.url,targetId:e.targetId}):null]})}e.s(["BaseDrawer",0,function({open:e,onClose:a,modal:o=!1,dismissOnOutsideClick:l=!1,title:s="Drawer",size:d,header:p,children:g,footer:x,className:y,"data-testid":b,deployTarget:j}){let{i18n:C}=(0,m.useTranslation)(),T=(0,h.useFeatureFlags)(),R=(0,n.useRef)(null),D=(0,n.useRef)(null),E="rtl"===C.dir()?"left":"right",S=(0,n.useCallback)(()=>{D.current=document.activeElement},[]),k=(0,n.useCallback)(e=>{D.current&&"function"==typeof D.current.focus&&(e.preventDefault(),D.current.focus(),D.current=null)},[]);return(0,n.useEffect)(()=>{if(!e||o)return;let t=e=>{"Escape"===e.key&&(e.stopPropagation(),a())};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[e,o,a]),(0,n.useEffect)(()=>{if(!e||o)return;let t=l?'[role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]':'[data-no-drawer-close], [role="alertdialog"], [role="dialog"], [role="menu"], [role="listbox"], [data-radix-popper-content-wrapper]',n=e=>!!e&&!!(R.current?.contains(e)||e.closest(t)),r=null,i=e=>{r=e.target},u=e=>{let t=r;r=null;let o=e.target;!document.body.contains(o)||n(o)||n(t)||a()};return document.addEventListener("pointerdown",i,!0),document.addEventListener("click",u),()=>{document.removeEventListener("pointerdown",i,!0),document.removeEventListener("click",u)}},[e,o,a,l]),(0,t.jsxs)(c.Drawer,{direction:E,modal:o,handleOnly:!0,open:e,onOpenChange:e=>{e||a()},children:[o?(0,t.jsx)(c.DrawerOverlay,{}):null,(0,t.jsxs)(c.DrawerContent,{ref:R,direction:E,showCloseButton:!1,className:(0,u.cn)(v({size:d}),"bg-white/80 backdrop-blur-xl dark:bg-[#1e293bd9]",y),"data-testid":b,onInteractOutside:o?void 0:e=>e.preventDefault(),...!o?{"aria-modal":!0}:{},children:[(0,t.jsx)(c.DrawerTitle,{asChild:!0,children:(0,t.jsx)("span",{className:"sr-only",children:s})}),(0,t.jsx)(c.DrawerDescription,{asChild:!0,children:(0,t.jsx)("span",{className:"sr-only",children:s})}),(0,t.jsx)(i.FocusScope.Root,{trapped:!o,loop:!o,asChild:!0,onMountAutoFocus:S,onUnmountAutoFocus:k,children:(0,t.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:[(0,t.jsxs)("button",{type:"button","aria-label":"Close",onClick:a,className:"ring-offset-background focus:ring-ring absolute end-3 top-2 z-50 rounded-sm p-1 opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden","data-testid":b?`${b}-close-button`:void 0,children:[(0,t.jsx)(r.XIcon,{className:"size-4"}),(0,t.jsx)("span",{className:"sr-only",children:"Close"})]}),p?(0,t.jsx)(c.DrawerHeader,{className:"shrink-0",children:p}):null,p?(0,t.jsx)(f.Separator,{}):null,T.envDeploy&&j?(0,t.jsx)(w,{deployTarget:j}):null,(0,t.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-hidden",children:g}),x?(0,t.jsx)(c.DrawerFooter,{className:"shrink-0",children:x}):null]})})]})]})}])}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,41952,e=>{"use strict";var t=e.i(96871),i=e.i(16539),n=e.i(51818),s=e.i(70727),a=e.i(60589),o=e.i(91060),l=e.i(54864);let r=(0,l.default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]),c=(0,l.default)("flag",[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]),d=(0,l.default)("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);var u=e.i(99413),g=e.i(85202);let p=(0,l.default)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]),m=(0,l.default)("layout-list",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}],["path",{d:"M14 4h7",key:"3xa0d5"}],["path",{d:"M14 9h7",key:"1icrd9"}],["path",{d:"M14 15h7",key:"1mj8o2"}],["path",{d:"M14 20h7",key:"11slyb"}]]);var h=e.i(68316);e.i(26759);var f=e.i(97164),x=e.i(31777),v=e.i(9749),b=e.i(84812),b=b,w=e.i(68637),y=e.i(84735),j=e.i(81481),k=e.i(41957),S=e.i(51911),C=e.i(2828);function M({label:e,description:i,htmlFor:n,tooltip:s,children:a}){let o=s??i;return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-4 border-b py-2.5 last:border-b-0",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,t.jsx)(k.Label,{htmlFor:n,className:"cursor-pointer text-sm font-normal whitespace-nowrap",children:e}),o?(0,t.jsxs)(C.Tooltip,{children:[(0,t.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(j.Info,{className:"text-muted-foreground/40 hover:text-muted-foreground h-3.5 w-3.5 shrink-0 cursor-help transition-colors"})}),(0,t.jsx)(C.TooltipContent,{side:"top",className:"max-w-64 text-[11px] leading-relaxed",children:(0,t.jsx)("span",{className:"text-muted-foreground",children:o})})]}):null]}),i?(0,t.jsx)("p",{className:"text-muted-foreground text-[11px] leading-tight",children:i}):null]}),(0,t.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:a})]})}function P({label:e,description:i,id:n,testId:s,checked:a,onChange:o,disabled:l,tooltip:r}){return(0,t.jsx)(M,{label:e,description:i,htmlFor:n,tooltip:r,children:(0,t.jsx)(S.Switch,{id:n,"data-testid":s,checked:a,onCheckedChange:o,disabled:l,className:(0,x.cn)("cursor-pointer",l&&"cursor-not-allowed opacity-50")})})}function I({icon:e,title:i,description:n,badge:s,testId:a,tooltip:o,tooltipLinks:l,children:r}){return(0,t.jsxs)("div",{className:"bg-background rounded-lg border","data-testid":a,children:[(0,t.jsxs)("div",{className:"bg-muted/30 border-b px-4 py-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(e,{className:"text-muted-foreground h-3.5 w-3.5"}),(0,t.jsx)("h2",{className:"text-sm font-semibold",children:i}),o?(0,t.jsxs)(C.Tooltip,{children:[(0,t.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(j.Info,{className:"text-muted-foreground/40 hover:text-muted-foreground h-3.5 w-3.5 shrink-0 cursor-help transition-colors"})}),(0,t.jsxs)(C.TooltipContent,{side:"bottom",className:"max-w-72 text-[11px] leading-relaxed",children:[(0,t.jsx)("p",{className:"text-muted-foreground",children:o}),null!=l&&l.length>0?(0,t.jsx)("div",{className:"border-border/50 mt-1.5 flex flex-col gap-0.5 border-t pt-1.5",children:l.map(e=>(0,t.jsxs)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:"text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5 text-[10px] tracking-wide transition-colors",children:[(0,t.jsx)(y.ExternalLink,{className:"h-2.5 w-2.5 shrink-0 opacity-50"}),e.label]},e.href))}):null]})]}):null,s?(0,t.jsx)("span",{className:"bg-muted text-muted-foreground rounded px-1.5 py-0.5 text-[9px] font-medium tracking-wider uppercase",children:s}):null]}),(0,t.jsx)("p",{className:"text-muted-foreground mt-0.5 text-[11px]",children:n})]}),(0,t.jsx)("div",{className:"px-4",children:r})]})}function T({id:e,testId:i,value:n,onChange:s,onBlur:a,placeholder:o,min:l=1,max:r,step:c=1,suffix:d}){let{t:u}=(0,f.useTranslation)("web"),g=""===n?void 0:parseInt(n,10);return(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center overflow-hidden rounded-md border",children:[(0,t.jsx)("button",{type:"button",onClick:()=>{s(String(Math.max(l,(g??parseInt(o,10))-c)))},onMouseUp:a,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-r transition-colors","aria-label":u("common.decrease"),children:(0,t.jsx)(b.default,{className:"h-3 w-3"})}),(0,t.jsx)("input",{id:e,"data-testid":i,type:"text",inputMode:"numeric",pattern:"[0-9]*",value:n,placeholder:o,onChange:e=>{s(e.target.value.replace(/[^0-9]/g,""))},onBlur:a,className:"h-8 w-14 bg-transparent text-center text-xs outline-none"}),(0,t.jsx)("button",{type:"button",onClick:()=>{let e;e=g??parseInt(o,10),s(String(null!=r?Math.min(r,e+c):e+c))},onMouseUp:a,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-l transition-colors","aria-label":u("common.increase"),children:(0,t.jsx)(w.Plus,{className:"h-3 w-3"})})]}),d?(0,t.jsx)("span",{className:"text-muted-foreground text-[11px]",children:d}):null]})}function N({children:e}){return(0,t.jsx)("div",{className:"border-b pt-3 pb-1",children:(0,t.jsx)("span",{className:"text-muted-foreground text-[10px] font-semibold tracking-wider uppercase",children:e})})}function A({settings:e}){let{t:s}=(0,f.useTranslation)("web"),[a,o]=(0,i.useState)(e.agent.type);return(0,t.jsx)(I,{icon:n.Bot,title:s("settings.agent.sectionTitle"),description:s("settings.agent.sectionDescription"),testId:"agent-settings-section",tooltip:s("settings.agent.hint"),tooltipLinks:[{label:s("settings.agent.links.agentSystem"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/architecture/agent-system.md"},{label:s("settings.agent.links.addingAgents"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/development/adding-agents.md"},{label:s("settings.agent.links.configurationGuide"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/guides/configuration.md"}],children:(0,t.jsx)(M,{label:s("settings.agent.agentAndModel"),description:s("settings.agent.agentAndModelDescription"),tooltip:"Changing the agent switches which AI CLI tool runs your features. Each agent has different capabilities, speed, and cost tradeoffs.",htmlFor:"agent-model-picker",children:(0,t.jsx)(v.AgentModelPicker,{initialAgentType:a,initialModel:e.models.default,mode:"settings",onAgentModelChange:e=>o(e),className:"w-55"})})})}var D=e.i(60112),F=e.i(47373),L=e.i(81846),R=e.i(96976);let E=(0,R.createServerReference)("40172d64abad86495f132c1126033292992bb050f2",R.callServer,void 0,R.findSourceMapURL,"updateSettingsAction");var B=e.i(17406),z=e.i(30342),U=e.i(50579),q=e.i(89048);function H(e){return(0,t.jsx)(U.Code,{className:(0,x.cn)("h-4 w-4",e.className),...e})}function K({className:e}){return(0,t.jsx)(z.default,{src:"/icons/editors/vscode.svg",alt:"VS Code",width:24,height:24,className:(0,x.cn)("rounded-sm object-contain",e)})}function W({className:e}){return(0,t.jsx)(z.default,{src:"/icons/agents/cursor.jpeg",alt:"Cursor",width:24,height:24,className:(0,x.cn)("rounded-sm object-contain",e)})}function O({className:e}){return(0,t.jsx)(z.default,{src:"/icons/editors/windsurf.svg",alt:"Windsurf",width:24,height:24,className:(0,x.cn)("rounded-sm object-contain",e)})}function V({className:e}){return(0,t.jsx)(z.default,{src:"/icons/editors/zed.svg",alt:"Zed",width:24,height:24,className:(0,x.cn)("rounded-sm object-contain",e)})}function $({className:e,...i}){return(0,t.jsx)(q.Rocket,{className:(0,x.cn)("h-4 w-4",e),...i})}K.displayName="VsCodeIcon",W.displayName="CursorEditorIcon",O.displayName="WindsurfIcon",V.displayName="ZedIcon",$.displayName="AntigravityIcon";let _={vscode:K,cursor:W,windsurf:O,zed:V,antigravity:$},G=[{id:"vscode",name:"VS Code",available:!0},{id:"cursor",name:"Cursor",available:!0},{id:"windsurf",name:"Windsurf",available:!0},{id:"zed",name:"Zed",available:!0},{id:"antigravity",name:"Antigravity",available:!0}],Z=[{id:"bash",name:"Bash",available:!0},{id:"zsh",name:"Zsh",available:!0},{id:"fish",name:"Fish",available:!0}];function X({settings:e,availableEditors:n,availableShells:a,availableTerminals:o}){let{t:l}=(0,f.useTranslation)("web"),[,r]=(0,i.useTransition)(),[c,d]=(0,i.useState)(e.environment.defaultEditor),[u,g]=(0,i.useState)(e.environment.shellPreference),[p,m]=(0,i.useState)(e.environment.terminalPreference??B.TerminalType.System),h=o??[{id:B.TerminalType.System,name:l("settings.environment.systemTerminal"),available:!0}];function v(e){r(async()=>{let t=await E(e);t.success||D.toast.error(t.error??l("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:s.Terminal,title:l("settings.environment.sectionTitle"),description:l("settings.environment.sectionDescription"),testId:"environment-settings-section",tooltip:l("settings.environment.hint"),tooltipLinks:[{label:l("settings.environment.links.configurationGuide"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/guides/configuration.md"}],children:[(0,t.jsx)(M,{label:l("settings.environment.defaultEditor"),description:l("settings.environment.defaultEditorDescription"),tooltip:"The editor that opens when you click 'Launch' on a tool card or when ShipIT needs to open a file for review.",htmlFor:"default-editor",children:(0,t.jsxs)(F.Select,{value:c,onValueChange:e=>{d(e),v({environment:{defaultEditor:e,shellPreference:u,terminalPreference:p}})},children:[(0,t.jsx)(F.SelectTrigger,{id:"default-editor","data-testid":"editor-select",className:"w-64 cursor-pointer text-xs",children:(0,t.jsx)(F.SelectValue,{})}),(0,t.jsx)(F.SelectContent,{children:(n??G).map(e=>{var i;let n=(i=e.id)&&i in _?_[i]:H;return(0,t.jsx)(F.SelectItem,{value:e.id,disabled:!e.available,children:(0,t.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[(0,t.jsx)(n,{className:"h-4 w-4 shrink-0"}),e.name,(0,t.jsx)(L.Badge,{variant:"outline",className:(0,x.cn)("ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal",e.available?"border-emerald-500/30 text-emerald-500":"border-muted-foreground/30 text-muted-foreground"),children:e.available?"Installed":"Not Installed"})]})},e.id)})})]})}),(0,t.jsx)(M,{label:l("settings.environment.shell"),description:l("settings.environment.shellDescription"),tooltip:"Controls which shell runs generated scripts like install commands and git operations. Match this to your daily driver shell.",htmlFor:"shell-preference",children:(0,t.jsxs)(F.Select,{value:u,onValueChange:e=>{g(e),v({environment:{defaultEditor:c,shellPreference:e,terminalPreference:p}})},children:[(0,t.jsx)(F.SelectTrigger,{id:"shell-preference","data-testid":"shell-select",className:"w-64 cursor-pointer text-xs",children:(0,t.jsx)(F.SelectValue,{})}),(0,t.jsx)(F.SelectContent,{children:(a??Z).map(e=>(0,t.jsx)(F.SelectItem,{value:e.id,disabled:!e.available,children:(0,t.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[e.name,(0,t.jsx)(L.Badge,{variant:"outline",className:(0,x.cn)("ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal",e.available?"border-emerald-500/30 text-emerald-500":"border-muted-foreground/30 text-muted-foreground"),children:e.available?"Installed":"Not Installed"})]})},e.id))})]})}),(0,t.jsx)(M,{label:l("settings.environment.terminal"),description:l("settings.environment.terminalDescription"),tooltip:"The terminal emulator launched when opening shell sessions from the web UI. Only affects web-launched terminals, not CLI usage.",htmlFor:"terminal-preference",children:(0,t.jsxs)(F.Select,{value:p,onValueChange:e=>{m(e),v({environment:{defaultEditor:c,shellPreference:u,terminalPreference:e}})},children:[(0,t.jsx)(F.SelectTrigger,{id:"terminal-preference","data-testid":"terminal-select",className:"w-64 cursor-pointer text-xs",children:(0,t.jsx)(F.SelectValue,{})}),(0,t.jsx)(F.SelectContent,{children:h.map(e=>(0,t.jsx)(F.SelectItem,{value:e.id,disabled:!e.available,children:(0,t.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[e.name,(0,t.jsx)(L.Badge,{variant:"outline",className:(0,x.cn)("ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal",e.available?"border-emerald-500/30 text-emerald-500":"border-muted-foreground/30 text-muted-foreground"),children:e.available?"Installed":"Not Installed"})]})},e.id))})]})})]})}function Y(e,t={}){let i=t.autoArchiveEnabled??e.autoArchiveEnabled,n=parseInt(t.autoArchiveDelay??e.autoArchiveDelay,10);return{workflow:{openPrOnImplementationComplete:t.openPr??e.openPr,approvalGateDefaults:{pushOnImplementationComplete:t.pushOnComplete??e.pushOnComplete,allowPrd:t.allowPrd??e.allowPrd,allowPlan:t.allowPlan??e.allowPlan,allowMerge:t.allowMerge??e.allowMerge},enableEvidence:t.enableEvidence??e.enableEvidence,commitEvidence:t.commitEvidence??e.commitEvidence,ciWatchEnabled:t.ciWatchEnabled??e.ciWatchEnabled,defaultFastMode:t.defaultFastMode??e.defaultFastMode,autoArchiveDelayMinutes:i?Number.isNaN(n)||n<1?10:n:0}}}function Q({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),[o,l]=(0,i.useState)(e.workflow.openPrOnImplementationComplete),[r,c]=(0,i.useState)(e.workflow.approvalGateDefaults.pushOnImplementationComplete),[d,u]=(0,i.useState)(e.workflow.approvalGateDefaults.allowPrd),[g,p]=(0,i.useState)(e.workflow.approvalGateDefaults.allowPlan),[m,h]=(0,i.useState)(e.workflow.approvalGateDefaults.allowMerge),[x,v]=(0,i.useState)(e.workflow.enableEvidence),[b,w]=(0,i.useState)(e.workflow.commitEvidence),[y,j]=(0,i.useState)(!1!==e.workflow.ciWatchEnabled),[k,S]=(0,i.useState)(!1!==e.workflow.defaultFastMode),[C,A]=(0,i.useState)((e.workflow.autoArchiveDelayMinutes??10)>0),[F,L]=(0,i.useState)(String(e.workflow.autoArchiveDelayMinutes??10));function R(){return{openPr:o,pushOnComplete:r,allowPrd:d,allowPlan:g,allowMerge:m,enableEvidence:x,commitEvidence:b,ciWatchEnabled:y,defaultFastMode:k,autoArchiveEnabled:C,autoArchiveDelay:F}}function B(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:a.GitBranch,title:n("settings.workflow.title"),description:n("settings.workflow.sectionDescription"),testId:"workflow-settings-section",tooltip:n("settings.workflow.hint"),tooltipLinks:[{label:n("settings.workflow.links.approvalGates"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/016-hitl-approval-gates/spec.yaml"},{label:n("settings.workflow.links.pushAndPrFlags"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/037-feature-pr-push-flags/spec.yaml"}],children:[(0,t.jsx)(P,{label:n("settings.workflow.defaultFastMode"),description:n("settings.workflow.defaultFastModeDescription"),tooltip:"When enabled, new features skip the PRD and Plan phases and go straight to implementation. Useful for quick fixes, risky for complex features.",id:"default-fast-mode",testId:"switch-default-fast-mode",checked:k,onChange:e=>{S(e),B(Y(R(),{defaultFastMode:e}))}}),(0,t.jsx)(N,{children:n("settings.workflow.subsections.approve")}),(0,t.jsx)(P,{label:n("settings.workflow.autoApprovePrd"),description:n("settings.workflow.autoApprovePrdDescription"),tooltip:"Automatically approves the requirements document without pausing for your review. Saves time but you lose the chance to refine requirements before planning.",id:"allow-prd",testId:"switch-allow-prd",checked:d,onChange:e=>{u(e),B(Y(R(),{allowPrd:e}))}}),(0,t.jsx)(P,{label:n("settings.workflow.autoApprovePlan"),description:n("settings.workflow.autoApprovePlanDescription"),tooltip:"Automatically approves the implementation plan. The agent proceeds to coding without waiting for your plan review.",id:"allow-plan",testId:"switch-allow-plan",checked:g,onChange:e=>{p(e),B(Y(R(),{allowPlan:e}))}}),(0,t.jsx)(P,{label:n("settings.workflow.autoApproveMerge"),description:n("settings.workflow.autoApproveMergeDescription"),tooltip:"Automatically merges the PR after implementation without requiring your final review. Use with caution on production branches.",id:"allow-merge",testId:"switch-allow-merge",checked:m,onChange:e=>{h(e),B(Y(R(),{allowMerge:e}))}}),(0,t.jsx)(N,{children:n("settings.workflow.subsections.evidence")}),(0,t.jsx)(P,{label:n("settings.workflow.collectEvidence"),description:n("settings.workflow.collectEvidenceDescription"),tooltip:"Captures screenshots and test outputs during implementation as proof of work. Useful for audit trails and PR documentation.",id:"enable-evidence",testId:"switch-enable-evidence",checked:x,onChange:e=>{v(e),e?B(Y(R(),{enableEvidence:e})):(w(!1),B(Y(R(),{enableEvidence:e,commitEvidence:!1})))}}),(0,t.jsx)(P,{label:n("settings.workflow.addEvidenceToPr"),description:n("settings.workflow.addEvidenceToPrDescription"),tooltip:"Attaches collected evidence artifacts (screenshots, logs) directly to the pull request description.",id:"commit-evidence",testId:"switch-commit-evidence",checked:b,disabled:!x||!o,onChange:e=>{w(e),B(Y(R(),{commitEvidence:e}))}}),(0,t.jsx)(N,{children:n("settings.workflow.subsections.git")}),(0,t.jsx)(P,{label:n("settings.workflow.pushOnComplete"),description:n("settings.workflow.pushOnCompleteDescription"),tooltip:"Automatically pushes the implementation branch to the remote repository when the agent finishes coding.",id:"push-on-complete",testId:"switch-push-on-complete",checked:r,onChange:e=>{c(e),B(Y(R(),{pushOnComplete:e}))}}),(0,t.jsx)(P,{label:n("settings.workflow.openPrOnComplete"),description:n("settings.workflow.openPrOnCompleteDescription"),tooltip:"Creates a pull request automatically after pushing. Combined with push-on-complete, this fully automates the delivery pipeline.",id:"open-pr",testId:"switch-open-pr",checked:o,onChange:e=>{l(e),e?B(Y(R(),{openPr:e})):(w(!1),B(Y(R(),{openPr:e,commitEvidence:!1})))}}),(0,t.jsx)(P,{label:n("settings.workflow.watchCiAfterPush"),description:n("settings.workflow.watchCiAfterPushDescription"),tooltip:"Monitors CI/CD pipeline status after pushing and can attempt fixes if tests fail. Disable if you prefer to handle CI failures manually.",id:"ci-watch-enabled",testId:"switch-ci-watch-enabled",checked:y,onChange:e=>{j(e),B(Y(R(),{ciWatchEnabled:e}))}}),(0,t.jsx)(N,{children:"Archive"}),(0,t.jsx)(P,{label:"Auto-archive completed",description:"Automatically archive features after they reach the completed state",tooltip:"Automatically archives features from the control center canvas after they reach the completed state, keeping the board clean.",id:"auto-archive-enabled",testId:"switch-auto-archive-enabled",checked:C,onChange:e=>{A(e),B(Y(R(),{autoArchiveEnabled:e}))}}),(0,t.jsx)(M,{label:"Archive delay",description:"Minutes to wait after completion before archiving (1-1440)",tooltip:"How long to wait after a feature completes before archiving it. Gives you time to review results before the feature moves off the board.",htmlFor:"auto-archive-delay",children:(0,t.jsx)(T,{id:"auto-archive-delay",testId:"input-auto-archive-delay",value:F,placeholder:"10",min:1,max:1440,suffix:"min",onChange:e=>{L(e)},onBlur:()=>{if(!C)return;let e=parseInt(F,10),t=Number.isNaN(e)?10:Math.min(1440,Math.max(1,e));L(String(t)),B(Y(R(),{autoArchiveDelay:String(t)}))}})})]})}function J(e){if(""===e)return;let t=parseInt(e,10);return Number.isNaN(t)||t<=0?void 0:t}function ee({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),[a,l]=(0,i.useState)(null!=e.workflow.ciMaxFixAttempts?String(e.workflow.ciMaxFixAttempts):""),[r,c]=(0,i.useState)(null!=e.workflow.ciWatchTimeoutMs?String(Math.round(e.workflow.ciWatchTimeoutMs/1e3)):""),[d,u]=(0,i.useState)(null!=e.workflow.ciLogMaxChars?String(e.workflow.ciLogMaxChars):""),[g,p]=(0,i.useState)(null!=e.workflow.ciWatchPollIntervalSeconds?String(e.workflow.ciWatchPollIntervalSeconds):""),[m,h]=(0,i.useState)(!1!==e.workflow.hideCiStatus),x=null!=e.workflow.ciMaxFixAttempts?String(e.workflow.ciMaxFixAttempts):"",v=null!=e.workflow.ciWatchTimeoutMs?String(Math.round(e.workflow.ciWatchTimeoutMs/1e3)):"",b=null!=e.workflow.ciLogMaxChars?String(e.workflow.ciLogMaxChars):"",w=null!=e.workflow.ciWatchPollIntervalSeconds?String(e.workflow.ciWatchPollIntervalSeconds):"";function y(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}function j(e){let t=J(e.ciTimeout??r);return{workflow:{ciMaxFixAttempts:J(e.ciMaxFix??a),ciWatchTimeoutMs:null!=t?1e3*t:void 0,ciLogMaxChars:J(e.ciLogMax??d),ciWatchPollIntervalSeconds:J(e.ciPollInterval??g),hideCiStatus:e.hideCiStatus??m}}}return(0,t.jsxs)(I,{icon:o.Activity,title:n("settings.ci.title"),description:n("settings.ci.description"),testId:"ci-settings-section",tooltip:n("settings.ci.hint"),tooltipLinks:[{label:n("settings.ci.links.cicdPipeline"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/development/cicd.md"},{label:n("settings.ci.links.ciSecurityGates"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/003-cicd-security-gates/spec.md"}],children:[(0,t.jsx)(M,{label:n("settings.ci.maxFixAttempts"),description:n("settings.ci.maxFixAttemptsDescription"),tooltip:"How many times the agent will attempt to fix failing CI checks before giving up. Higher values increase the chance of auto-resolution but consume more agent time and API calls.",htmlFor:"ci-max-fix",children:(0,t.jsx)(T,{id:"ci-max-fix",testId:"ci-max-fix-input",placeholder:"3",value:a,onChange:l,onBlur:()=>{a!==x&&y(j({ciMaxFix:a}))},min:1,max:10})}),(0,t.jsx)(M,{label:n("settings.ci.watchTimeout"),description:n("settings.ci.watchTimeoutDescription"),tooltip:"Maximum time the agent will wait for CI to finish. If CI hasn't completed within this window, the agent stops watching. Increase for repos with slow CI pipelines.",htmlFor:"ci-timeout",children:(0,t.jsx)(T,{id:"ci-timeout",testId:"ci-timeout-input",placeholder:"300",value:r,onChange:c,onBlur:()=>{r!==v&&y(j({ciTimeout:r}))},min:30,step:30,suffix:"sec"})}),(0,t.jsx)(M,{label:n("settings.ci.maxLogSize"),description:n("settings.ci.maxLogSizeDescription"),tooltip:"CI logs beyond this character limit are truncated before being sent to the agent for analysis. Keeps agent context focused and avoids excessive token usage.",htmlFor:"ci-log-max",children:(0,t.jsx)(T,{id:"ci-log-max",testId:"ci-log-max-input",placeholder:"50000",value:d,onChange:u,onBlur:()=>{d!==b&&y(j({ciLogMax:d}))},min:1e3,step:5e3,suffix:"chars"})}),(0,t.jsx)(M,{label:n("settings.ci.pollInterval"),description:n("settings.ci.pollIntervalDescription"),tooltip:"How frequently the agent checks GitHub for CI status updates. Lower values give faster feedback but increase API call volume.",htmlFor:"ci-poll-interval",children:(0,t.jsx)(T,{id:"ci-poll-interval",testId:"ci-poll-interval-input",placeholder:"30",value:g,onChange:p,onBlur:()=>{g!==w&&y(j({ciPollInterval:g}))},min:5,step:5,suffix:"sec"})}),(0,t.jsx)(P,{label:n("settings.ci.hideCiStatus"),description:n("settings.ci.hideCiStatusDescription"),tooltip:"When enabled, CI status indicators are hidden from the feature drawer and merge review panels. Useful if you monitor CI through GitHub directly.",id:"hide-ci-status",testId:"switch-hide-ci-status",checked:m,onChange:e=>{h(e),y(j({hideCiStatus:e}))}})]})}var et=e.i(27069),ei=e.i(91967),en=e.i(22353),es=e.i(9413),ea=e.i(36567),eo=e.i(75649),el=e.i(9641),er=e.i(70391),ec=e.i(85565),ed=e.i(87099),eu=["PageUp","PageDown"],eg=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],ep={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},em="Slider",[eh,ef,ex]=(0,ed.createCollection)(em),[ev,eb]=(0,es.createContextScope)(em,[ex]),[ew,ey]=ev(em),ej=i.forwardRef((e,n)=>{let{name:s,min:a=0,max:o=100,step:l=1,orientation:r="horizontal",disabled:c=!1,minStepsBetweenThumbs:d=0,defaultValue:u=[a],value:g,onValueChange:p=()=>{},onValueCommit:m=()=>{},inverted:h=!1,form:f,...x}=e,v=i.useRef(new Set),b=i.useRef(0),w="horizontal"===r,[y=[],j]=(0,ea.useControllableState)({prop:g,defaultProp:u,onChange:e=>{let t=[...v.current];t[b.current]?.focus(),p(e)}}),k=i.useRef(y);function S(e,t,{commit:i}={commit:!1}){let n,s=(String(l).split(".")[1]||"").length,r=Math.round((Math.round((e-a)/l)*l+a)*(n=Math.pow(10,s)))/n,c=(0,et.clamp)(r,[a,o]);j((e=[])=>{let n=function(e=[],t,i){let n=[...e];return n[i]=t,n.sort((e,t)=>e-t)}(e,c,t);if(!function(e,t){if(t>0)return Math.min(...e.slice(0,-1).map((t,i)=>e[i+1]-t))>=t;return!0}(n,d*l))return e;{b.current=n.indexOf(c);let t=String(n)!==String(e);return t&&i&&m(n),t?n:e}})}return(0,t.jsx)(ew,{scope:e.__scopeSlider,name:s,disabled:c,min:a,max:o,valueIndexToChangeRef:b,thumbs:v.current,values:y,orientation:r,form:f,children:(0,t.jsx)(eh.Provider,{scope:e.__scopeSlider,children:(0,t.jsx)(eh.Slot,{scope:e.__scopeSlider,children:(0,t.jsx)(w?eC:eM,{"aria-disabled":c,"data-disabled":c?"":void 0,...x,ref:n,onPointerDown:(0,ei.composeEventHandlers)(x.onPointerDown,()=>{c||(k.current=y)}),min:a,max:o,inverted:h,onSlideStart:c?void 0:function(e){let t=function(e,t){if(1===e.length)return 0;let i=e.map(e=>Math.abs(e-t)),n=Math.min(...i);return i.indexOf(n)}(y,e);S(e,t)},onSlideMove:c?void 0:function(e){S(e,b.current)},onSlideEnd:c?void 0:function(){let e=k.current[b.current];y[b.current]!==e&&m(y)},onHomeKeyDown:()=>!c&&S(a,0,{commit:!0}),onEndKeyDown:()=>!c&&S(o,y.length-1,{commit:!0}),onStepKeyDown:({event:e,direction:t})=>{if(!c){let i=eu.includes(e.key)||e.shiftKey&&eg.includes(e.key),n=b.current;S(y[n]+l*(i?10:1)*t,n,{commit:!0})}}})})})})});ej.displayName=em;var[ek,eS]=ev(em,{startEdge:"left",endEdge:"right",size:"width",direction:1}),eC=i.forwardRef((e,n)=>{let{min:s,max:a,dir:o,inverted:l,onSlideStart:r,onSlideMove:c,onSlideEnd:d,onStepKeyDown:u,...g}=e,[p,m]=i.useState(null),h=(0,en.useComposedRefs)(n,e=>m(e)),f=i.useRef(void 0),x=(0,eo.useDirection)(o),v="ltr"===x,b=v&&!l||!v&&l;function w(e){let t=f.current||p.getBoundingClientRect(),i=eB([0,t.width],b?[s,a]:[a,s]);return f.current=t,i(e-t.left)}return(0,t.jsx)(ek,{scope:e.__scopeSlider,startEdge:b?"left":"right",endEdge:b?"right":"left",direction:b?1:-1,size:"width",children:(0,t.jsx)(eP,{dir:x,"data-orientation":"horizontal",...g,ref:h,style:{...g.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:e=>{let t=w(e.clientX);r?.(t)},onSlideMove:e=>{let t=w(e.clientX);c?.(t)},onSlideEnd:()=>{f.current=void 0,d?.()},onStepKeyDown:e=>{let t=ep[b?"from-left":"from-right"].includes(e.key);u?.({event:e,direction:t?-1:1})}})})}),eM=i.forwardRef((e,n)=>{let{min:s,max:a,inverted:o,onSlideStart:l,onSlideMove:r,onSlideEnd:c,onStepKeyDown:d,...u}=e,g=i.useRef(null),p=(0,en.useComposedRefs)(n,g),m=i.useRef(void 0),h=!o;function f(e){let t=m.current||g.current.getBoundingClientRect(),i=eB([0,t.height],h?[a,s]:[s,a]);return m.current=t,i(e-t.top)}return(0,t.jsx)(ek,{scope:e.__scopeSlider,startEdge:h?"bottom":"top",endEdge:h?"top":"bottom",size:"height",direction:h?1:-1,children:(0,t.jsx)(eP,{"data-orientation":"vertical",...u,ref:p,style:{...u.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:e=>{let t=f(e.clientY);l?.(t)},onSlideMove:e=>{let t=f(e.clientY);r?.(t)},onSlideEnd:()=>{m.current=void 0,c?.()},onStepKeyDown:e=>{let t=ep[h?"from-bottom":"from-top"].includes(e.key);d?.({event:e,direction:t?-1:1})}})})}),eP=i.forwardRef((e,i)=>{let{__scopeSlider:n,onSlideStart:s,onSlideMove:a,onSlideEnd:o,onHomeKeyDown:l,onEndKeyDown:r,onStepKeyDown:c,...d}=e,u=ey(em,n);return(0,t.jsx)(ec.Primitive.span,{...d,ref:i,onKeyDown:(0,ei.composeEventHandlers)(e.onKeyDown,e=>{"Home"===e.key?(l(e),e.preventDefault()):"End"===e.key?(r(e),e.preventDefault()):eu.concat(eg).includes(e.key)&&(c(e),e.preventDefault())}),onPointerDown:(0,ei.composeEventHandlers)(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),u.thumbs.has(t)?t.focus():s(e)}),onPointerMove:(0,ei.composeEventHandlers)(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:(0,ei.composeEventHandlers)(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),o(e))})})}),eI="SliderTrack",eT=i.forwardRef((e,i)=>{let{__scopeSlider:n,...s}=e,a=ey(eI,n);return(0,t.jsx)(ec.Primitive.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...s,ref:i})});eT.displayName=eI;var eN="SliderRange",eA=i.forwardRef((e,n)=>{let{__scopeSlider:s,...a}=e,o=ey(eN,s),l=eS(eN,s),r=i.useRef(null),c=(0,en.useComposedRefs)(n,r),d=o.values.length,u=o.values.map(e=>eE(e,o.min,o.max)),g=d>1?Math.min(...u):0,p=100-Math.max(...u);return(0,t.jsx)(ec.Primitive.span,{"data-orientation":o.orientation,"data-disabled":o.disabled?"":void 0,...a,ref:c,style:{...e.style,[l.startEdge]:g+"%",[l.endEdge]:p+"%"}})});eA.displayName=eN;var eD="SliderThumb",eF=i.forwardRef((e,n)=>{let s=ef(e.__scopeSlider),[a,o]=i.useState(null),l=(0,en.useComposedRefs)(n,e=>o(e)),r=i.useMemo(()=>a?s().findIndex(e=>e.ref.current===a):-1,[s,a]);return(0,t.jsx)(eL,{...e,ref:l,index:r})}),eL=i.forwardRef((e,n)=>{var s,a,o,l,r;let c,d,{__scopeSlider:u,index:g,name:p,...m}=e,h=ey(eD,u),f=eS(eD,u),[x,v]=i.useState(null),b=(0,en.useComposedRefs)(n,e=>v(e)),w=!x||h.form||!!x.closest("form"),y=(0,er.useSize)(x),j=h.values[g],k=void 0===j?0:eE(j,h.min,h.max),S=(s=g,(a=h.values.length)>2?`Value ${s+1} of ${a}`:2===a?["Minimum","Maximum"][s]:void 0),C=y?.[f.size],M=C?(o=C,l=k,r=f.direction,d=eB([0,50],[0,c=o/2]),(c-d(l)*r)*r):0;return i.useEffect(()=>{if(x)return h.thumbs.add(x),()=>{h.thumbs.delete(x)}},[x,h.thumbs]),(0,t.jsxs)("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[f.startEdge]:`calc(${k}% + ${M}px)`},children:[(0,t.jsx)(eh.ItemSlot,{scope:e.__scopeSlider,children:(0,t.jsx)(ec.Primitive.span,{role:"slider","aria-label":e["aria-label"]||S,"aria-valuemin":h.min,"aria-valuenow":j,"aria-valuemax":h.max,"aria-orientation":h.orientation,"data-orientation":h.orientation,"data-disabled":h.disabled?"":void 0,tabIndex:h.disabled?void 0:0,...m,ref:b,style:void 0===j?{display:"none"}:e.style,onFocus:(0,ei.composeEventHandlers)(e.onFocus,()=>{h.valueIndexToChangeRef.current=g})})}),w&&(0,t.jsx)(eR,{name:p??(h.name?h.name+(h.values.length>1?"[]":""):void 0),form:h.form,value:j},g)]})});eF.displayName=eD;var eR=i.forwardRef(({__scopeSlider:e,value:n,...s},a)=>{let o=i.useRef(null),l=(0,en.useComposedRefs)(o,a),r=(0,el.usePrevious)(n);return i.useEffect(()=>{let e=o.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set;if(r!==n&&t){let i=new Event("input",{bubbles:!0});t.call(e,n),e.dispatchEvent(i)}},[r,n]),(0,t.jsx)(ec.Primitive.input,{style:{display:"none"},...s,ref:l,defaultValue:n})});function eE(e,t,i){return(0,et.clamp)(100/(i-t)*(e-t),[0,100])}function eB(e,t){return i=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let n=(t[1]-t[0])/(e[1]-e[0]);return t[0]+n*(i-e[0])}}eR.displayName="RadioBubbleInput",e.s(["Range",0,eA,"Root",0,ej,"Slider",0,ej,"SliderRange",0,eA,"SliderThumb",0,eF,"SliderTrack",0,eT,"Thumb",0,eF,"Track",0,eT,"createSliderScope",0,eb],98207);var ez=e.i(98207),ez=ez;function eU({className:e,defaultValue:n,value:s,min:a=0,max:o=100,...l}){let r=i.useMemo(()=>Array.isArray(s)?s:Array.isArray(n)?n:[a,o],[s,n,a,o]);return(0,t.jsxs)(ez.Root,{"data-slot":"slider",defaultValue:n,value:s,min:a,max:o,className:(0,x.cn)("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",e),...l,children:[(0,t.jsx)(ez.Track,{"data-slot":"slider-track",className:(0,x.cn)("bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"),children:(0,t.jsx)(ez.Range,{"data-slot":"slider-range",className:(0,x.cn)("bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full")})}),Array.from({length:r.length},(e,i)=>(0,t.jsx)(ez.Thumb,{"data-slot":"slider-thumb",className:"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"},i))]})}let eq=[60,120,300,600,900,1800,2700,3600,7200,10800,14400,21600,28800,43200,86400],eH=eq.length-1;function eK(e){let t=0,i=Math.abs(e-eq[0]);for(let n=1;n<eq.length;n++){let s=Math.abs(e-eq[n]);s<i&&(i=s,t=n)}return t}function eW({id:e,testId:n,value:s,onChange:a,onBlur:o,defaultSeconds:l=1800}){var r;let c,d,u=(""===s?l:parseInt(s,10))||l,[g,p]=(0,i.useState)(()=>eK(u)),m=eK(u);m!==g&&eq[g]!==u&&p(m);let h=(0,i.useCallback)(([e])=>{p(e),a(String(eq[e]))},[a]);return(0,t.jsxs)("div",{className:"flex w-55 items-center gap-2",children:[(0,t.jsx)(eU,{id:e,"data-testid":n,min:0,max:eH,step:1,value:[g],onValueChange:h,onValueCommit:()=>o(),className:"min-w-0 flex-1"}),(0,t.jsx)("span",{className:"text-muted-foreground shrink-0 text-end text-xs tabular-nums",children:(c=Math.floor((r=eq[g])/3600),d=Math.round(r%3600/60),0===c?`${d}m`:0===d?`${c}h`:`${c}h ${d}m`)})]})}function eO(e){if(void 0===e)return;let t=function(e){if(""===e)return;let t=parseInt(e,10);return Number.isNaN(t)||t<=0?void 0:t}(e);return null!=t?1e3*t:void 0}function eV({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.workflow.stageTimeouts,o=e.workflow.analyzeRepoTimeouts,[l,r]=(0,i.useState)(String(Math.round((a?.analyzeMs??18e5)/1e3))),[c,d]=(0,i.useState)(String(Math.round((a?.requirementsMs??18e5)/1e3))),[g,p]=(0,i.useState)(String(Math.round((a?.researchMs??18e5)/1e3))),[m,h]=(0,i.useState)(String(Math.round((a?.planMs??18e5)/1e3))),[x,v]=(0,i.useState)(String(Math.round((a?.implementMs??18e5)/1e3))),[b,w]=(0,i.useState)(String(Math.round((a?.mergeMs??18e5)/1e3))),[y,j]=(0,i.useState)(String(Math.round((o?.analyzeMs??6e5)/1e3))),k=a?.analyzeMs!=null?String(Math.round(a.analyzeMs/1e3)):"",S=a?.requirementsMs!=null?String(Math.round(a.requirementsMs/1e3)):"",C=a?.researchMs!=null?String(Math.round(a.researchMs/1e3)):"",P=a?.planMs!=null?String(Math.round(a.planMs/1e3)):"",T=a?.implementMs!=null?String(Math.round(a.implementMs/1e3)):"",A=a?.mergeMs!=null?String(Math.round(a.mergeMs/1e3)):"",F=o?.analyzeMs!=null?String(Math.round(o.analyzeMs/1e3)):"";function L(e){return{workflow:{stageTimeouts:{analyzeMs:eO(e.analyzeTimeout??l),requirementsMs:eO(e.requirementsTimeout??c),researchMs:eO(e.researchTimeout??g),planMs:eO(e.planTimeout??m),implementMs:eO(e.implementTimeout??x),mergeMs:eO(e.mergeTimeout??b)},analyzeRepoTimeouts:{analyzeMs:eO(e.analyzeRepoTimeout??y)}}}}function R(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:u.Timer,title:n("settings.stageTimeouts.title"),description:n("settings.stageTimeouts.description"),testId:"stage-timeouts-settings-section",tooltip:n("settings.stageTimeouts.hint"),children:[(0,t.jsx)(N,{children:n("settings.stageTimeouts.subsections.featureAgent")}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.analyze"),description:n("settings.stageTimeouts.analyzeDescription"),htmlFor:"timeout-analyze",children:(0,t.jsx)(eW,{id:"timeout-analyze",testId:"timeout-analyze-input",value:l,onChange:r,onBlur:()=>{l!==k&&R(L({analyzeTimeout:l}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.requirements"),description:n("settings.stageTimeouts.requirementsDescription"),htmlFor:"timeout-requirements",children:(0,t.jsx)(eW,{id:"timeout-requirements",testId:"timeout-requirements-input",value:c,onChange:d,onBlur:()=>{c!==S&&R(L({requirementsTimeout:c}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.research"),description:n("settings.stageTimeouts.researchDescription"),htmlFor:"timeout-research",children:(0,t.jsx)(eW,{id:"timeout-research",testId:"timeout-research-input",value:g,onChange:p,onBlur:()=>{g!==C&&R(L({researchTimeout:g}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.plan"),description:n("settings.stageTimeouts.planDescription"),htmlFor:"timeout-plan",children:(0,t.jsx)(eW,{id:"timeout-plan",testId:"timeout-plan-input",value:m,onChange:h,onBlur:()=>{m!==P&&R(L({planTimeout:m}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.implement"),description:n("settings.stageTimeouts.implementDescription"),htmlFor:"timeout-implement",children:(0,t.jsx)(eW,{id:"timeout-implement",testId:"timeout-implement-input",value:x,onChange:v,onBlur:()=>{x!==T&&R(L({implementTimeout:x}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.merge"),description:n("settings.stageTimeouts.mergeDescription"),htmlFor:"timeout-merge",children:(0,t.jsx)(eW,{id:"timeout-merge",testId:"timeout-merge-input",value:b,onChange:w,onBlur:()=>{b!==A&&R(L({mergeTimeout:b}))},defaultSeconds:1800})}),(0,t.jsx)(N,{children:n("settings.stageTimeouts.subsections.analyzeRepoAgent")}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.analyze"),description:n("settings.stageTimeouts.analyzeDescription"),htmlFor:"timeout-analyze-repo",children:(0,t.jsx)(eW,{id:"timeout-analyze-repo",testId:"timeout-analyze-repo-input",value:y,onChange:j,onBlur:()=>{y!==F&&R(L({analyzeRepoTimeout:y}))},defaultSeconds:600})})]})}function e$({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),[a,o]=(0,i.useState)(e.notifications.inApp.enabled),[l,c]=(0,i.useState)({...e.notifications.events});function d(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}function u(e={}){return{notifications:{inApp:{enabled:e.inApp??a},events:e.events??l}}}return(0,t.jsxs)(I,{icon:r,title:n("settings.notifications.title"),description:n("settings.notifications.sectionDescription"),testId:"notification-settings-section",tooltip:n("settings.notifications.hint"),tooltipLinks:[{label:n("settings.notifications.links.notificationSystem"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/021-agent-notifications/spec.yaml"}],children:[(0,t.jsx)(N,{children:n("settings.notifications.channels")}),(0,t.jsx)(P,{label:n("settings.notifications.inAppLabel"),description:n("settings.notifications.inAppDescription"),tooltip:"Master toggle for in-app toast notifications. When disabled, no event toasts will appear regardless of individual event settings below.",id:"notif-in-app",testId:"switch-in-app",checked:a,onChange:e=>{o(e),d(u({inApp:e}))}}),(0,t.jsx)(N,{children:n("settings.notifications.subsections.agentEvents")}),(0,t.jsx)(P,{label:n("settings.notifications.events.agentStarted"),tooltip:"Controls whether you receive an in-app toast notification when an agent begins working on a feature.",id:"notif-event-agentStarted",testId:"switch-event-agentStarted",checked:l.agentStarted,onChange:e=>{let t={...l,agentStarted:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.phaseCompleted"),tooltip:"Controls whether you receive an in-app toast notification when an agent completes a workflow phase (e.g., requirements, planning, implementation).",id:"notif-event-phaseCompleted",testId:"switch-event-phaseCompleted",checked:l.phaseCompleted,onChange:e=>{let t={...l,phaseCompleted:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.waitingApproval"),tooltip:"Controls whether you receive an in-app toast notification when a feature is paused and waiting for your approval to continue.",id:"notif-event-waitingApproval",testId:"switch-event-waitingApproval",checked:l.waitingApproval,onChange:e=>{let t={...l,waitingApproval:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.agentCompleted"),tooltip:"Controls whether you receive an in-app toast notification when an agent finishes all work on a feature successfully.",id:"notif-event-agentCompleted",testId:"switch-event-agentCompleted",checked:l.agentCompleted,onChange:e=>{let t={...l,agentCompleted:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.agentFailed"),tooltip:"Controls whether you receive an in-app toast notification when an agent encounters an error and stops working on a feature.",id:"notif-event-agentFailed",testId:"switch-event-agentFailed",checked:l.agentFailed,onChange:e=>{let t={...l,agentFailed:e};c(t),d(u({events:t}))}}),(0,t.jsx)(N,{children:n("settings.notifications.subsections.pullRequestEvents")}),(0,t.jsx)(P,{label:n("settings.notifications.events.prMerged"),tooltip:"Controls whether you receive an in-app toast notification when a feature's pull request is merged into the target branch.",id:"notif-event-prMerged",testId:"switch-event-prMerged",checked:l.prMerged,onChange:e=>{let t={...l,prMerged:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.prClosed"),tooltip:"Controls whether you receive an in-app toast notification when a feature's pull request is closed without merging.",id:"notif-event-prClosed",testId:"switch-event-prClosed",checked:l.prClosed,onChange:e=>{let t={...l,prClosed:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.prChecksPassed"),tooltip:"Controls whether you receive an in-app toast notification when all CI checks pass on a feature's pull request.",id:"notif-event-prChecksPassed",testId:"switch-event-prChecksPassed",checked:l.prChecksPassed,onChange:e=>{let t={...l,prChecksPassed:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.prChecksFailed"),tooltip:"Controls whether you receive an in-app toast notification when CI checks fail on a feature's pull request.",id:"notif-event-prChecksFailed",testId:"switch-event-prChecksFailed",checked:l.prChecksFailed,onChange:e=>{let t={...l,prChecksFailed:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.prBlocked"),tooltip:"Controls whether you receive an in-app toast notification when a pull request is blocked by merge conflicts or branch protection rules.",id:"notif-event-prBlocked",testId:"switch-event-prBlocked",checked:l.prBlocked,onChange:e=>{let t={...l,prBlocked:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.mergeReviewReady"),tooltip:"Controls whether you receive an in-app toast notification when a feature's PR passes all checks and is ready for your merge review.",id:"notif-event-mergeReviewReady",testId:"switch-event-mergeReviewReady",checked:l.mergeReviewReady,onChange:e=>{let t={...l,mergeReviewReady:e};c(t),d(u({events:t}))}})]})}function e_({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.featureFlags??{skills:!1,envDeploy:!1,debug:!1,githubImport:!1,adoptBranch:!1,gitRebaseSync:!1,reactFileManager:!1,plugins:!1,mcpServers:!1},[o,l]=(0,i.useState)({...a});function r(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:c,title:n("settings.featureFlags.title"),description:n("settings.featureFlags.sectionDescription"),badge:n("settings.featureFlags.badge"),testId:"feature-flags-settings-section",tooltip:n("settings.featureFlags.hint"),children:[(0,t.jsx)(P,{label:n("settings.featureFlags.skills"),description:n("settings.featureFlags.skillsDescription"),tooltip:"Enables the Skills page in the sidebar for browsing and managing Claude Code skills.",id:"flag-skills",testId:"switch-flag-skills",checked:o.skills,onChange:e=>{let t={...o,skills:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.deployments"),description:n("settings.featureFlags.deploymentsDescription"),tooltip:"Enables experimental deployment features for environment management.",id:"flag-envDeploy",testId:"switch-flag-envDeploy",checked:o.envDeploy,onChange:e=>{let t={...o,envDeploy:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.debug"),description:n("settings.featureFlags.debugDescription"),tooltip:"Shows additional debugging information in the UI for troubleshooting.",id:"flag-debug",testId:"switch-flag-debug",checked:o.debug,onChange:e=>{let t={...o,debug:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.githubImport"),description:n("settings.featureFlags.githubImportDescription"),tooltip:"Enables importing repositories directly from GitHub.",id:"flag-githubImport",testId:"switch-flag-githubImport",checked:o.githubImport,onChange:e=>{let t={...o,githubImport:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.adoptBranch"),description:n("settings.featureFlags.adoptBranchDescription"),tooltip:"Enables adopting existing git branches as ShipIT features.",id:"flag-adoptBranch",testId:"switch-flag-adoptBranch",checked:o.adoptBranch,onChange:e=>{let t={...o,adoptBranch:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.gitRebaseSync"),description:n("settings.featureFlags.gitRebaseSyncDescription"),tooltip:"Uses git rebase instead of merge when syncing feature branches with the upstream branch.",id:"flag-gitRebaseSync",testId:"switch-flag-gitRebaseSync",checked:o.gitRebaseSync,onChange:e=>{let t={...o,gitRebaseSync:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.reactFileManager"),description:n("settings.featureFlags.reactFileManagerDescription"),tooltip:"Replaces the native file picker dialog with a React-based file browser for selecting project folders.",id:"flag-reactFileManager",testId:"switch-flag-reactFileManager",checked:o.reactFileManager,onChange:e=>{let t={...o,reactFileManager:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.plugins"),description:e.litellmProxy?.baseUrl?n("settings.featureFlags.pluginsDescription"):`${n("settings.featureFlags.pluginsDescription")} — ${n("plugins.noProxy")}`,tooltip:"Enables the Plugins page for browsing and managing Claude Code plugins from a LiteLLM marketplace. Requires a LiteLLM proxy URL to be configured.",id:"flag-plugins",testId:"switch-flag-plugins",checked:o.plugins,disabled:!e.litellmProxy?.baseUrl,onChange:e=>{let t={...o,plugins:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.mcpServers"),description:e.litellmProxy?.baseUrl?n("settings.featureFlags.mcpServersDescription"):`${n("settings.featureFlags.mcpServersDescription")} — ${n("mcpServers.noProxy")}`,tooltip:"Enables the MCP Servers page for viewing MCP servers deployed on your LiteLLM proxy. Requires a LiteLLM proxy URL to be configured.",id:"flag-mcp-servers",testId:"switch-flag-mcp-servers",checked:o.mcpServers,disabled:!e.litellmProxy?.baseUrl,onChange:e=>{let t={...o,mcpServers:e};l(t),r({featureFlags:t})}})]})}function eG({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.interactiveAgent??{enabled:!0,autoTimeoutMinutes:15,maxConcurrentSessions:3},[o,l]=(0,i.useState)(a.enabled),[r,c]=(0,i.useState)(String(a.autoTimeoutMinutes)),[d,u]=(0,i.useState)(String(a.maxConcurrentSessions));function p(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:g.MessageSquare,title:n("settings.interactiveAgent.title"),description:n("settings.interactiveAgent.description"),testId:"interactive-agent-settings-section",tooltip:n("settings.interactiveAgent.hint"),children:[(0,t.jsx)(P,{label:n("settings.interactiveAgent.enableChatTab"),description:n("settings.interactiveAgent.enableChatTabDescription"),tooltip:"Shows or hides the Chat tab on feature detail pages. When enabled, you can have interactive conversations with the agent about a specific feature.",id:"interactive-agent-enabled",testId:"switch-interactive-agent-enabled",checked:o,onChange:e=>{l(e),p({interactiveAgent:{enabled:e,autoTimeoutMinutes:parseInt(r,10)||15,maxConcurrentSessions:parseInt(d,10)||3}})}}),(0,t.jsx)(M,{label:n("settings.interactiveAgent.autoTimeout"),description:n("settings.interactiveAgent.autoTimeoutDescription"),tooltip:"Minutes of inactivity before a chat agent session is automatically terminated. Prevents idle agent processes from consuming resources indefinitely.",htmlFor:"interactive-agent-timeout",children:(0,t.jsx)(T,{id:"interactive-agent-timeout",testId:"input-interactive-agent-timeout",value:r,placeholder:"15",min:1,max:120,suffix:"min",onChange:c,onBlur:()=>{let e=parseInt(r,10),t=Number.isNaN(e)?15:Math.min(120,Math.max(1,e));c(String(t)),p({interactiveAgent:{enabled:o,autoTimeoutMinutes:t,maxConcurrentSessions:parseInt(d,10)||3}})}})}),(0,t.jsx)(M,{label:n("settings.interactiveAgent.maxConcurrentSessions"),description:n("settings.interactiveAgent.maxConcurrentSessionsDescription"),tooltip:"Maximum number of interactive agent sessions that can run simultaneously. Each session spawns a separate agent process, so higher values use more CPU and memory.",htmlFor:"interactive-agent-sessions",children:(0,t.jsx)(T,{id:"interactive-agent-sessions",testId:"input-interactive-agent-sessions",value:d,placeholder:"3",min:1,max:10,onChange:u,onBlur:()=>{let e=parseInt(d,10),t=Number.isNaN(e)?3:Math.min(10,Math.max(1,e));u(String(t)),p({interactiveAgent:{enabled:o,autoTimeoutMinutes:parseInt(r,10)||15,maxConcurrentSessions:t}})}})})]})}function eZ({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.fabLayout??{swapPosition:!1},[o,l]=(0,i.useState)(a.swapPosition);return(0,t.jsx)(I,{icon:p,title:n("settings.fabLayout.title"),description:n("settings.fabLayout.description"),testId:"fab-layout-settings-section",tooltip:n("settings.fabLayout.hint"),children:(0,t.jsx)(P,{label:n("settings.fabLayout.swapPosition"),description:n("settings.fabLayout.swapPositionDescription"),tooltip:"Swaps the Create button (bottom-right) and Chat button (bottom-left) positions on the control center canvas.",id:"fab-swap-position",testId:"switch-fab-swap-position",checked:o,onChange:e=>{var t;l(e),t={fabLayout:{swapPosition:e}},s(async()=>{let e=await E(t);e.success||D.toast.error(e.error??n("settings.failedToSave"))})}})})}function eX({shipitAiHome:e,dbFileSize:i}){let{t:n}=(0,f.useTranslation)("web");return(0,t.jsxs)(I,{icon:d,title:n("settings.database.title"),description:n("settings.database.sectionDescription"),testId:"database-settings-section",tooltip:n("settings.database.hint"),tooltipLinks:[{label:n("settings.database.links.settingsService"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/architecture/settings-service.md"},{label:n("settings.database.links.settingsSpec"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/005-global-settings-service/spec.md"}],children:[(0,t.jsx)(M,{label:n("settings.database.location"),description:n("settings.database.locationDescription"),tooltip:"The directory where ShipIT stores its SQLite database, logs, and configuration files. Change this via the SHIPIT_AI_HOME environment variable.",children:(0,t.jsx)("span",{className:"text-muted-foreground max-w-50 truncate font-mono text-xs","data-testid":"shipit-ai-home-path",children:e})}),(0,t.jsx)(M,{label:n("settings.database.size"),tooltip:"Current size of the SQLite database file on disk. Large databases may slow down startup; consider archiving old features if this grows significantly.",children:(0,t.jsx)("span",{className:"text-muted-foreground text-xs","data-testid":"db-file-size",children:i})})]})}var eY=e.i(37628),eY=eY,eQ=e.i(81391),eQ=eQ;let eJ=(0,R.createServerReference)("40216652c202f875b8309a621bf0c0910e25006701",R.callServer,void 0,R.findSourceMapURL,"addMarketplaceAction");var e0=e.i(98127),e1=e.i(35364);function e3({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),[a,o]=(0,i.useState)(e.litellmProxy?.baseUrl??""),[l,r]=(0,i.useState)(e.litellmProxy?.apiKey??""),[c,d]=(0,i.useState)("idle"),[u,g]=(0,i.useState)(!1),p=e.litellmProxy?.baseUrl??"",m=e.litellmProxy?.apiKey??"";function x(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}function v(e){let t=e?.baseUrl??a;return{litellmProxy:{baseUrl:t,apiKey:e?.apiKey??l,marketplaceEnabled:!!t}}}async function b(){if(a){g(!0),d("idle");try{let e=`${a.replace(/\/+$/,"")}/claude-code/marketplace.json`,t=await eJ(e);d(t.success?"success":"failed"),t.success?D.toast.success(n("settings.litellmProxy.testSuccess")):D.toast.error(n("settings.litellmProxy.testFailed"))}catch{d("failed"),D.toast.error(n("settings.litellmProxy.testFailed"))}finally{g(!1)}}}return(0,t.jsxs)(I,{icon:h.Server,title:n("settings.litellmProxy.title"),description:n("settings.litellmProxy.description"),testId:"litellm-proxy-settings-section",tooltip:n("settings.litellmProxy.hint"),children:[(0,t.jsx)(M,{label:n("settings.litellmProxy.baseUrl"),description:n("settings.litellmProxy.baseUrlDescription"),tooltip:"The base URL of your LiteLLM proxy server. This is used to fetch the plugin marketplace catalog and route model requests.",htmlFor:"litellm-proxy-url",children:(0,t.jsx)(e0.Input,{id:"litellm-proxy-url","data-testid":"litellm-proxy-url-input",type:"text",placeholder:"http://localhost:4000",value:a,onChange:e=>{o(e.target.value),d("idle")},onBlur:()=>{a!==p&&x(v({baseUrl:a}))},className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.apiKey"),description:n("settings.litellmProxy.apiKeyDescription"),tooltip:"A virtual API key for authenticating with the LiteLLM proxy. Stored locally alongside other agent credentials.",htmlFor:"litellm-api-key",children:(0,t.jsx)(e0.Input,{id:"litellm-api-key","data-testid":"litellm-api-key-input",type:"password",placeholder:"sk-...",value:l,onChange:e=>r(e.target.value),onBlur:()=>{l!==m&&x(v({apiKey:l}))},className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.testConnection"),tooltip:"Attempt to connect to the proxy and fetch the marketplace catalog to verify the configuration is correct.",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(e1.Button,{variant:"outline",size:"sm","data-testid":"litellm-test-connection-btn",disabled:!a||u,onClick:b,className:"cursor-pointer text-xs",children:u?n("settings.saving"):n("settings.litellmProxy.testConnection")}),"success"===c&&(0,t.jsx)(eY.default,{className:"h-4 w-4 text-emerald-500","data-testid":"litellm-test-success"}),"failed"===c&&(0,t.jsx)(eQ.default,{className:"text-destructive h-4 w-4","data-testid":"litellm-test-failed"})]})})]})}let e5=(0,l.default)("route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);var e4=e.i(48306);let e2=new Set(["claude-code","gemini-cli","codex-cli"]),e8=new Set(["cursor","copilot-cli"]);function e6({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.agent.type,o=e.litellmProxy?.claudeCode,[l,r]=(0,i.useState)(function(e){switch(e.agent.type){case"claude-code":return e.litellmProxy?.claudeCode?.routingMode??B.LiteLLMProxyRoutingMode.direct;case"gemini-cli":return e.litellmProxy?.geminiCli?.routingMode??B.LiteLLMProxyRoutingMode.direct;case"codex-cli":return e.litellmProxy?.codexCli?.routingMode??B.LiteLLMProxyRoutingMode.direct;default:return B.LiteLLMProxyRoutingMode.direct}}(e)),[c,d]=(0,i.useState)(o?.customHeaders??""),[u,g]=(0,i.useState)(o?.sonnetModel??""),[p,m]=(0,i.useState)(o?.haikuModel??""),[h,x]=(0,i.useState)(o?.opusModel??""),v=o?.customHeaders??"",b=o?.sonnetModel??"",w=o?.haikuModel??"",y=o?.opusModel??"",j=l!==B.LiteLLMProxyRoutingMode.direct,k=e2.has(a),S=e8.has(a),C=e.litellmProxy?.baseUrl??"",P=e.litellmProxy?.apiKey??"";function T(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}function N(e){let t=function(e){switch(e){case"claude-code":return"claudeCode";case"gemini-cli":return"geminiCli";case"codex-cli":return"codexCli";default:return null}}(a);return t?"claude-code"===a?{litellmProxy:{claudeCode:{routingMode:e?.routingMode??l,customHeaders:e?.customHeaders??c,sonnetModel:e?.sonnetModel??u,haikuModel:e?.haikuModel??p,opusModel:e?.opusModel??h}}}:{litellmProxy:{[t]:{routingMode:e?.routingMode??l}}}:{}}if(!k&&!S)return(0,t.jsx)(I,{icon:e5,title:n("settings.litellmProxy.routing.title"),description:n("settings.litellmProxy.routing.description"),testId:"litellm-proxy-routing-section",tooltip:n("settings.litellmProxy.routing.hint"),children:(0,t.jsx)(M,{label:"",description:n("settings.litellmProxy.routing.notSupported"),children:(0,t.jsx)("span",{})})});if(S){let e="cursor"===a,i=C?e?`${C.replace(/\/+$/,"")}/cursor`:C:"";return(0,t.jsx)(I,{icon:e5,title:n("settings.litellmProxy.routing.title"),description:n("settings.litellmProxy.routing.description"),testId:"litellm-proxy-routing-section",tooltip:n("settings.litellmProxy.routing.hint"),children:(0,t.jsx)(M,{label:e?n("settings.litellmProxy.routing.cursorInstructions"):n("settings.litellmProxy.routing.copilotInstructions"),description:e?n("settings.litellmProxy.routing.cursorDescription"):n("settings.litellmProxy.routing.copilotDescription"),children:(0,t.jsxs)("div",{className:"w-64 space-y-2",children:[(0,t.jsx)("code",{className:"bg-muted block rounded px-2 py-1 text-xs break-all",children:i}),e&&P?(0,t.jsx)("code",{className:"bg-muted block rounded px-2 py-1 text-xs break-all",children:P}):null]})})})}return(0,t.jsxs)(I,{icon:e5,title:n("settings.litellmProxy.routing.title"),description:n("settings.litellmProxy.routing.description"),testId:"litellm-proxy-routing-section",tooltip:n("settings.litellmProxy.routing.hint"),children:[(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.mode"),description:n("settings.litellmProxy.routing.modeDescription"),htmlFor:"litellm-routing-mode",children:(0,t.jsxs)(F.Select,{value:l,onValueChange:function(e){r(e),T(N({routingMode:e}))},children:[(0,t.jsx)(F.SelectTrigger,{id:"litellm-routing-mode","data-testid":"litellm-routing-mode-select",className:"w-48 text-xs",children:(0,t.jsx)(F.SelectValue,{})}),(0,t.jsxs)(F.SelectContent,{children:[(0,t.jsx)(F.SelectItem,{value:B.LiteLLMProxyRoutingMode.direct,children:n("settings.litellmProxy.routing.modeDirect")}),(0,t.jsx)(F.SelectItem,{value:B.LiteLLMProxyRoutingMode.proxy,children:n("settings.litellmProxy.routing.modeProxy")}),"claude-code"===a&&(0,t.jsx)(F.SelectItem,{value:B.LiteLLMProxyRoutingMode.passthrough,children:n("settings.litellmProxy.routing.modePassthrough")})]})]})}),l===B.LiteLLMProxyRoutingMode.passthrough&&(0,t.jsx)(M,{label:"",description:n("settings.litellmProxy.routing.passthroughHelp"),children:(0,t.jsx)("span",{})}),j&&"claude-code"===a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.customHeaders"),description:n("settings.litellmProxy.routing.customHeadersDescription"),htmlFor:"litellm-custom-headers",children:(0,t.jsx)(e4.Textarea,{id:"litellm-custom-headers","data-testid":"litellm-custom-headers-input",placeholder:"x-litellm-customer-id: my-user\nx-litellm-tags: project:acme",value:c,onChange:e=>d(e.target.value),onBlur:()=>{c!==v&&T(N({customHeaders:c}))},rows:3,className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.sonnetModel"),description:n("settings.litellmProxy.routing.modelOverrideDescription"),htmlFor:"litellm-sonnet-model",children:(0,t.jsx)(e0.Input,{id:"litellm-sonnet-model","data-testid":"litellm-sonnet-model-input",type:"text",placeholder:"claude-sonnet-4-6",value:u,onChange:e=>g(e.target.value),onBlur:()=>{u!==b&&T(N({sonnetModel:u}))},className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.haikuModel"),htmlFor:"litellm-haiku-model",children:(0,t.jsx)(e0.Input,{id:"litellm-haiku-model","data-testid":"litellm-haiku-model-input",type:"text",placeholder:"claude-haiku-4-5",value:p,onChange:e=>m(e.target.value),onBlur:()=>{p!==w&&T(N({haikuModel:p}))},className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.opusModel"),htmlFor:"litellm-opus-model",children:(0,t.jsx)(e0.Input,{id:"litellm-opus-model","data-testid":"litellm-opus-model-input",type:"text",placeholder:"claude-opus-4-6",value:h,onChange:e=>x(e.target.value),onBlur:()=>{h!==y&&T(N({opusModel:h}))},className:"w-64 text-xs"})})]}):null]})}let e7=[{id:"agent",labelKey:"settings.sections.agent",icon:n.Bot},{id:"environment",labelKey:"settings.sections.environment",icon:s.Terminal},{id:"workflow",labelKey:"settings.sections.workflow",icon:a.GitBranch},{id:"ci",labelKey:"settings.sections.ci",icon:o.Activity},{id:"stage-timeouts",labelKey:"settings.sections.timeouts",icon:u.Timer},{id:"notifications",labelKey:"settings.sections.notifications",icon:r},{id:"feature-flags",labelKey:"settings.sections.flags",icon:c},{id:"interactive-agent",labelKey:"settings.sections.chat",icon:g.MessageSquare},{id:"fab-layout",labelKey:"settings.sections.layout",icon:p},{id:"database",labelKey:"settings.sections.database",icon:d},{id:"litellm-proxy",labelKey:"settings.sections.proxy",icon:h.Server}],e9=[{id:"all",labelKey:"settings.sections.all",icon:m},...e7];e.s(["SettingsPageClient",0,function({settings:e,shipitAiHome:n,dbFileSize:s,availableTerminals:a,availableEditors:o,availableShells:l}){let{t:r}=(0,f.useTranslation)("web"),[c,d]=(0,i.useState)("all"),[u,g]=(0,i.useState)("agent");return(0,i.useEffect)(()=>{if("all"!==c)return;let e=e7.map(e=>document.getElementById(`section-${e.id}`)).filter(Boolean);if(0===e.length)return;let t=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&g(t.target.id.replace("section-",""))},{rootMargin:"-65px 0px -60% 0px",threshold:0});for(let i of e)t.observe(i);return()=>t.disconnect()},[c]),(0,t.jsxs)("div",{"data-testid":"settings-page-client",className:"max-w-5xl px-8 pt-8",children:[(0,t.jsxs)("div",{className:"bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10 pb-4 backdrop-blur",children:[(0,t.jsxs)("div",{className:"mb-4 space-y-1.5",children:[(0,t.jsx)("span",{className:"text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase",children:"Developer Portal"}),(0,t.jsx)("div",{className:"flex items-baseline gap-3",children:(0,t.jsx)("h1",{className:"text-foreground text-3xl font-black tracking-tight",children:r("settings.title")})})]}),(0,t.jsx)("nav",{className:"bg-card editorial-shadow flex flex-wrap items-center gap-0.5 rounded-lg p-1",children:e9.map(e=>{let i=e.icon,n=c===e.id||"all"===c&&"all"!==e.id&&u===e.id;return(0,t.jsxs)("button",{type:"button",onClick:()=>d(e.id),className:(0,x.cn)("flex cursor-pointer items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-bold transition-all",n?"bg-muted text-primary shadow-sm ring-1 ring-slate-200/70 dark:ring-slate-700/50":"text-muted-foreground hover:text-foreground hover:bg-accent/50"),children:[(0,t.jsx)(i,{className:"h-3 w-3"}),(0,t.jsx)("span",{className:"hidden sm:inline",children:r(e.labelKey)})]},e.id)})})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[("all"===c||"agent"===c)&&(0,t.jsx)("div",{id:"section-agent",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(A,{settings:e})}),("all"===c||"environment"===c)&&(0,t.jsx)("div",{id:"section-environment",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(X,{settings:e,availableEditors:o,availableShells:l,availableTerminals:a})}),("all"===c||"workflow"===c)&&(0,t.jsx)("div",{id:"section-workflow",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(Q,{settings:e})}),("all"===c||"ci"===c)&&(0,t.jsx)("div",{id:"section-ci",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(ee,{settings:e})}),("all"===c||"stage-timeouts"===c)&&(0,t.jsx)("div",{id:"section-stage-timeouts",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(eV,{settings:e})}),("all"===c||"notifications"===c)&&(0,t.jsx)("div",{id:"section-notifications",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(e$,{settings:e})}),("all"===c||"feature-flags"===c)&&(0,t.jsx)("div",{id:"section-feature-flags",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(e_,{settings:e})}),("all"===c||"interactive-agent"===c)&&(0,t.jsx)("div",{id:"section-interactive-agent",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(eG,{settings:e})}),("all"===c||"fab-layout"===c)&&(0,t.jsx)("div",{id:"section-fab-layout",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(eZ,{settings:e})}),("all"===c||"database"===c)&&(0,t.jsx)("div",{id:"section-database",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(eX,{shipitAiHome:n,dbFileSize:s})}),("all"===c||"litellm-proxy"===c)&&(0,t.jsxs)("div",{id:"section-litellm-proxy",className:"scroll-mt-18 rounded-lg",children:[(0,t.jsx)(e3,{settings:e}),e.litellmProxy?.baseUrl?(0,t.jsx)(e6,{settings:e}):null]})]})]})}],41952)}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,41952,e=>{"use strict";var t=e.i(96871),i=e.i(16539),n=e.i(51818),s=e.i(70727),a=e.i(60589),o=e.i(91060),l=e.i(54864);let r=(0,l.default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]),c=(0,l.default)("flag",[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]),d=(0,l.default)("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);var u=e.i(99413),g=e.i(85202);let p=(0,l.default)("layout-grid",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]]),m=(0,l.default)("layout-list",[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}],["path",{d:"M14 4h7",key:"3xa0d5"}],["path",{d:"M14 9h7",key:"1icrd9"}],["path",{d:"M14 15h7",key:"1mj8o2"}],["path",{d:"M14 20h7",key:"11slyb"}]]);var h=e.i(68316);e.i(26759);var f=e.i(97164),x=e.i(31777),v=e.i(9749),b=e.i(84812),b=b,w=e.i(68637),y=e.i(84735),j=e.i(81481),k=e.i(41957),S=e.i(51911),C=e.i(2828);function M({label:e,description:i,htmlFor:n,tooltip:s,children:a}){let o=s??i;return(0,t.jsxs)("div",{className:"flex items-center justify-between gap-4 border-b py-2.5 last:border-b-0",children:[(0,t.jsxs)("div",{className:"min-w-0",children:[(0,t.jsxs)("span",{className:"flex items-center gap-1.5",children:[(0,t.jsx)(k.Label,{htmlFor:n,className:"cursor-pointer text-sm font-normal whitespace-nowrap",children:e}),o?(0,t.jsxs)(C.Tooltip,{children:[(0,t.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(j.Info,{className:"text-muted-foreground/40 hover:text-muted-foreground h-3.5 w-3.5 shrink-0 cursor-help transition-colors"})}),(0,t.jsx)(C.TooltipContent,{side:"top",className:"max-w-64 text-[11px] leading-relaxed",children:(0,t.jsx)("span",{className:"text-muted-foreground",children:o})})]}):null]}),i?(0,t.jsx)("p",{className:"text-muted-foreground text-[11px] leading-tight",children:i}):null]}),(0,t.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:a})]})}function P({label:e,description:i,id:n,testId:s,checked:a,onChange:o,disabled:l,tooltip:r}){return(0,t.jsx)(M,{label:e,description:i,htmlFor:n,tooltip:r,children:(0,t.jsx)(S.Switch,{id:n,"data-testid":s,checked:a,onCheckedChange:o,disabled:l,className:(0,x.cn)("cursor-pointer",l&&"cursor-not-allowed opacity-50")})})}function I({icon:e,title:i,description:n,badge:s,testId:a,tooltip:o,tooltipLinks:l,children:r}){return(0,t.jsxs)("div",{className:"bg-background rounded-lg border","data-testid":a,children:[(0,t.jsxs)("div",{className:"bg-muted/30 border-b px-4 py-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(e,{className:"text-muted-foreground h-3.5 w-3.5"}),(0,t.jsx)("h2",{className:"text-sm font-semibold",children:i}),o?(0,t.jsxs)(C.Tooltip,{children:[(0,t.jsx)(C.TooltipTrigger,{asChild:!0,children:(0,t.jsx)(j.Info,{className:"text-muted-foreground/40 hover:text-muted-foreground h-3.5 w-3.5 shrink-0 cursor-help transition-colors"})}),(0,t.jsxs)(C.TooltipContent,{side:"bottom",className:"max-w-72 text-[11px] leading-relaxed",children:[(0,t.jsx)("p",{className:"text-muted-foreground",children:o}),null!=l&&l.length>0?(0,t.jsx)("div",{className:"border-border/50 mt-1.5 flex flex-col gap-0.5 border-t pt-1.5",children:l.map(e=>(0,t.jsxs)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:"text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5 text-[10px] tracking-wide transition-colors",children:[(0,t.jsx)(y.ExternalLink,{className:"h-2.5 w-2.5 shrink-0 opacity-50"}),e.label]},e.href))}):null]})]}):null,s?(0,t.jsx)("span",{className:"bg-muted text-muted-foreground rounded px-1.5 py-0.5 text-[9px] font-medium tracking-wider uppercase",children:s}):null]}),(0,t.jsx)("p",{className:"text-muted-foreground mt-0.5 text-[11px]",children:n})]}),(0,t.jsx)("div",{className:"px-4",children:r})]})}function T({id:e,testId:i,value:n,onChange:s,onBlur:a,placeholder:o,min:l=1,max:r,step:c=1,suffix:d}){let{t:u}=(0,f.useTranslation)("web"),g=""===n?void 0:parseInt(n,10);return(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsxs)("div",{className:"flex items-center overflow-hidden rounded-md border",children:[(0,t.jsx)("button",{type:"button",onClick:()=>{s(String(Math.max(l,(g??parseInt(o,10))-c)))},onMouseUp:a,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-r transition-colors","aria-label":u("common.decrease"),children:(0,t.jsx)(b.default,{className:"h-3 w-3"})}),(0,t.jsx)("input",{id:e,"data-testid":i,type:"text",inputMode:"numeric",pattern:"[0-9]*",value:n,placeholder:o,onChange:e=>{s(e.target.value.replace(/[^0-9]/g,""))},onBlur:a,className:"h-8 w-14 bg-transparent text-center text-xs outline-none"}),(0,t.jsx)("button",{type:"button",onClick:()=>{let e;e=g??parseInt(o,10),s(String(null!=r?Math.min(r,e+c):e+c))},onMouseUp:a,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-l transition-colors","aria-label":u("common.increase"),children:(0,t.jsx)(w.Plus,{className:"h-3 w-3"})})]}),d?(0,t.jsx)("span",{className:"text-muted-foreground text-[11px]",children:d}):null]})}function N({children:e}){return(0,t.jsx)("div",{className:"border-b pt-3 pb-1",children:(0,t.jsx)("span",{className:"text-muted-foreground text-[10px] font-semibold tracking-wider uppercase",children:e})})}function A({settings:e}){let{t:s}=(0,f.useTranslation)("web"),[a,o]=(0,i.useState)(e.agent.type);return(0,t.jsx)(I,{icon:n.Bot,title:s("settings.agent.sectionTitle"),description:s("settings.agent.sectionDescription"),testId:"agent-settings-section",tooltip:s("settings.agent.hint"),tooltipLinks:[{label:s("settings.agent.links.agentSystem"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/architecture/agent-system.md"},{label:s("settings.agent.links.addingAgents"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/development/adding-agents.md"},{label:s("settings.agent.links.configurationGuide"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/guides/configuration.md"}],children:(0,t.jsx)(M,{label:s("settings.agent.agentAndModel"),description:s("settings.agent.agentAndModelDescription"),tooltip:"Changing the agent switches which AI CLI tool runs your features. Each agent has different capabilities, speed, and cost tradeoffs.",htmlFor:"agent-model-picker",children:(0,t.jsx)(v.AgentModelPicker,{initialAgentType:a,initialModel:e.models.default,mode:"settings",onAgentModelChange:e=>o(e),className:"w-55"})})})}var D=e.i(60112),F=e.i(47373),L=e.i(81846),R=e.i(96976);let E=(0,R.createServerReference)("40dd0e9a4486c4b055a0c816971cc6ca042b814b39",R.callServer,void 0,R.findSourceMapURL,"updateSettingsAction");var B=e.i(17406),z=e.i(30342),U=e.i(50579),q=e.i(89048);function H(e){return(0,t.jsx)(U.Code,{className:(0,x.cn)("h-4 w-4",e.className),...e})}function K({className:e}){return(0,t.jsx)(z.default,{src:"/icons/editors/vscode.svg",alt:"VS Code",width:24,height:24,className:(0,x.cn)("rounded-sm object-contain",e)})}function W({className:e}){return(0,t.jsx)(z.default,{src:"/icons/agents/cursor.jpeg",alt:"Cursor",width:24,height:24,className:(0,x.cn)("rounded-sm object-contain",e)})}function O({className:e}){return(0,t.jsx)(z.default,{src:"/icons/editors/windsurf.svg",alt:"Windsurf",width:24,height:24,className:(0,x.cn)("rounded-sm object-contain",e)})}function V({className:e}){return(0,t.jsx)(z.default,{src:"/icons/editors/zed.svg",alt:"Zed",width:24,height:24,className:(0,x.cn)("rounded-sm object-contain",e)})}function $({className:e,...i}){return(0,t.jsx)(q.Rocket,{className:(0,x.cn)("h-4 w-4",e),...i})}K.displayName="VsCodeIcon",W.displayName="CursorEditorIcon",O.displayName="WindsurfIcon",V.displayName="ZedIcon",$.displayName="AntigravityIcon";let _={vscode:K,cursor:W,windsurf:O,zed:V,antigravity:$},G=[{id:"vscode",name:"VS Code",available:!0},{id:"cursor",name:"Cursor",available:!0},{id:"windsurf",name:"Windsurf",available:!0},{id:"zed",name:"Zed",available:!0},{id:"antigravity",name:"Antigravity",available:!0}],Z=[{id:"bash",name:"Bash",available:!0},{id:"zsh",name:"Zsh",available:!0},{id:"fish",name:"Fish",available:!0}];function X({settings:e,availableEditors:n,availableShells:a,availableTerminals:o}){let{t:l}=(0,f.useTranslation)("web"),[,r]=(0,i.useTransition)(),[c,d]=(0,i.useState)(e.environment.defaultEditor),[u,g]=(0,i.useState)(e.environment.shellPreference),[p,m]=(0,i.useState)(e.environment.terminalPreference??B.TerminalType.System),h=o??[{id:B.TerminalType.System,name:l("settings.environment.systemTerminal"),available:!0}];function v(e){r(async()=>{let t=await E(e);t.success||D.toast.error(t.error??l("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:s.Terminal,title:l("settings.environment.sectionTitle"),description:l("settings.environment.sectionDescription"),testId:"environment-settings-section",tooltip:l("settings.environment.hint"),tooltipLinks:[{label:l("settings.environment.links.configurationGuide"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/guides/configuration.md"}],children:[(0,t.jsx)(M,{label:l("settings.environment.defaultEditor"),description:l("settings.environment.defaultEditorDescription"),tooltip:"The editor that opens when you click 'Launch' on a tool card or when ShipIT needs to open a file for review.",htmlFor:"default-editor",children:(0,t.jsxs)(F.Select,{value:c,onValueChange:e=>{d(e),v({environment:{defaultEditor:e,shellPreference:u,terminalPreference:p}})},children:[(0,t.jsx)(F.SelectTrigger,{id:"default-editor","data-testid":"editor-select",className:"w-64 cursor-pointer text-xs",children:(0,t.jsx)(F.SelectValue,{})}),(0,t.jsx)(F.SelectContent,{children:(n??G).map(e=>{var i;let n=(i=e.id)&&i in _?_[i]:H;return(0,t.jsx)(F.SelectItem,{value:e.id,disabled:!e.available,children:(0,t.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[(0,t.jsx)(n,{className:"h-4 w-4 shrink-0"}),e.name,(0,t.jsx)(L.Badge,{variant:"outline",className:(0,x.cn)("ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal",e.available?"border-emerald-500/30 text-emerald-500":"border-muted-foreground/30 text-muted-foreground"),children:e.available?"Installed":"Not Installed"})]})},e.id)})})]})}),(0,t.jsx)(M,{label:l("settings.environment.shell"),description:l("settings.environment.shellDescription"),tooltip:"Controls which shell runs generated scripts like install commands and git operations. Match this to your daily driver shell.",htmlFor:"shell-preference",children:(0,t.jsxs)(F.Select,{value:u,onValueChange:e=>{g(e),v({environment:{defaultEditor:c,shellPreference:e,terminalPreference:p}})},children:[(0,t.jsx)(F.SelectTrigger,{id:"shell-preference","data-testid":"shell-select",className:"w-64 cursor-pointer text-xs",children:(0,t.jsx)(F.SelectValue,{})}),(0,t.jsx)(F.SelectContent,{children:(a??Z).map(e=>(0,t.jsx)(F.SelectItem,{value:e.id,disabled:!e.available,children:(0,t.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[e.name,(0,t.jsx)(L.Badge,{variant:"outline",className:(0,x.cn)("ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal",e.available?"border-emerald-500/30 text-emerald-500":"border-muted-foreground/30 text-muted-foreground"),children:e.available?"Installed":"Not Installed"})]})},e.id))})]})}),(0,t.jsx)(M,{label:l("settings.environment.terminal"),description:l("settings.environment.terminalDescription"),tooltip:"The terminal emulator launched when opening shell sessions from the web UI. Only affects web-launched terminals, not CLI usage.",htmlFor:"terminal-preference",children:(0,t.jsxs)(F.Select,{value:p,onValueChange:e=>{m(e),v({environment:{defaultEditor:c,shellPreference:u,terminalPreference:e}})},children:[(0,t.jsx)(F.SelectTrigger,{id:"terminal-preference","data-testid":"terminal-select",className:"w-64 cursor-pointer text-xs",children:(0,t.jsx)(F.SelectValue,{})}),(0,t.jsx)(F.SelectContent,{children:h.map(e=>(0,t.jsx)(F.SelectItem,{value:e.id,disabled:!e.available,children:(0,t.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[e.name,(0,t.jsx)(L.Badge,{variant:"outline",className:(0,x.cn)("ml-auto px-1.5 py-0 text-[10px] leading-4 font-normal",e.available?"border-emerald-500/30 text-emerald-500":"border-muted-foreground/30 text-muted-foreground"),children:e.available?"Installed":"Not Installed"})]})},e.id))})]})})]})}function Y(e,t={}){let i=t.autoArchiveEnabled??e.autoArchiveEnabled,n=parseInt(t.autoArchiveDelay??e.autoArchiveDelay,10);return{workflow:{openPrOnImplementationComplete:t.openPr??e.openPr,approvalGateDefaults:{pushOnImplementationComplete:t.pushOnComplete??e.pushOnComplete,allowPrd:t.allowPrd??e.allowPrd,allowPlan:t.allowPlan??e.allowPlan,allowMerge:t.allowMerge??e.allowMerge},enableEvidence:t.enableEvidence??e.enableEvidence,commitEvidence:t.commitEvidence??e.commitEvidence,ciWatchEnabled:t.ciWatchEnabled??e.ciWatchEnabled,defaultFastMode:t.defaultFastMode??e.defaultFastMode,autoArchiveDelayMinutes:i?Number.isNaN(n)||n<1?10:n:0}}}function Q({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),[o,l]=(0,i.useState)(e.workflow.openPrOnImplementationComplete),[r,c]=(0,i.useState)(e.workflow.approvalGateDefaults.pushOnImplementationComplete),[d,u]=(0,i.useState)(e.workflow.approvalGateDefaults.allowPrd),[g,p]=(0,i.useState)(e.workflow.approvalGateDefaults.allowPlan),[m,h]=(0,i.useState)(e.workflow.approvalGateDefaults.allowMerge),[x,v]=(0,i.useState)(e.workflow.enableEvidence),[b,w]=(0,i.useState)(e.workflow.commitEvidence),[y,j]=(0,i.useState)(!1!==e.workflow.ciWatchEnabled),[k,S]=(0,i.useState)(!1!==e.workflow.defaultFastMode),[C,A]=(0,i.useState)((e.workflow.autoArchiveDelayMinutes??10)>0),[F,L]=(0,i.useState)(String(e.workflow.autoArchiveDelayMinutes??10));function R(){return{openPr:o,pushOnComplete:r,allowPrd:d,allowPlan:g,allowMerge:m,enableEvidence:x,commitEvidence:b,ciWatchEnabled:y,defaultFastMode:k,autoArchiveEnabled:C,autoArchiveDelay:F}}function B(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:a.GitBranch,title:n("settings.workflow.title"),description:n("settings.workflow.sectionDescription"),testId:"workflow-settings-section",tooltip:n("settings.workflow.hint"),tooltipLinks:[{label:n("settings.workflow.links.approvalGates"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/016-hitl-approval-gates/spec.yaml"},{label:n("settings.workflow.links.pushAndPrFlags"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/037-feature-pr-push-flags/spec.yaml"}],children:[(0,t.jsx)(P,{label:n("settings.workflow.defaultFastMode"),description:n("settings.workflow.defaultFastModeDescription"),tooltip:"When enabled, new features skip the PRD and Plan phases and go straight to implementation. Useful for quick fixes, risky for complex features.",id:"default-fast-mode",testId:"switch-default-fast-mode",checked:k,onChange:e=>{S(e),B(Y(R(),{defaultFastMode:e}))}}),(0,t.jsx)(N,{children:n("settings.workflow.subsections.approve")}),(0,t.jsx)(P,{label:n("settings.workflow.autoApprovePrd"),description:n("settings.workflow.autoApprovePrdDescription"),tooltip:"Automatically approves the requirements document without pausing for your review. Saves time but you lose the chance to refine requirements before planning.",id:"allow-prd",testId:"switch-allow-prd",checked:d,onChange:e=>{u(e),B(Y(R(),{allowPrd:e}))}}),(0,t.jsx)(P,{label:n("settings.workflow.autoApprovePlan"),description:n("settings.workflow.autoApprovePlanDescription"),tooltip:"Automatically approves the implementation plan. The agent proceeds to coding without waiting for your plan review.",id:"allow-plan",testId:"switch-allow-plan",checked:g,onChange:e=>{p(e),B(Y(R(),{allowPlan:e}))}}),(0,t.jsx)(P,{label:n("settings.workflow.autoApproveMerge"),description:n("settings.workflow.autoApproveMergeDescription"),tooltip:"Automatically merges the PR after implementation without requiring your final review. Use with caution on production branches.",id:"allow-merge",testId:"switch-allow-merge",checked:m,onChange:e=>{h(e),B(Y(R(),{allowMerge:e}))}}),(0,t.jsx)(N,{children:n("settings.workflow.subsections.evidence")}),(0,t.jsx)(P,{label:n("settings.workflow.collectEvidence"),description:n("settings.workflow.collectEvidenceDescription"),tooltip:"Captures screenshots and test outputs during implementation as proof of work. Useful for audit trails and PR documentation.",id:"enable-evidence",testId:"switch-enable-evidence",checked:x,onChange:e=>{v(e),e?B(Y(R(),{enableEvidence:e})):(w(!1),B(Y(R(),{enableEvidence:e,commitEvidence:!1})))}}),(0,t.jsx)(P,{label:n("settings.workflow.addEvidenceToPr"),description:n("settings.workflow.addEvidenceToPrDescription"),tooltip:"Attaches collected evidence artifacts (screenshots, logs) directly to the pull request description.",id:"commit-evidence",testId:"switch-commit-evidence",checked:b,disabled:!x||!o,onChange:e=>{w(e),B(Y(R(),{commitEvidence:e}))}}),(0,t.jsx)(N,{children:n("settings.workflow.subsections.git")}),(0,t.jsx)(P,{label:n("settings.workflow.pushOnComplete"),description:n("settings.workflow.pushOnCompleteDescription"),tooltip:"Automatically pushes the implementation branch to the remote repository when the agent finishes coding.",id:"push-on-complete",testId:"switch-push-on-complete",checked:r,onChange:e=>{c(e),B(Y(R(),{pushOnComplete:e}))}}),(0,t.jsx)(P,{label:n("settings.workflow.openPrOnComplete"),description:n("settings.workflow.openPrOnCompleteDescription"),tooltip:"Creates a pull request automatically after pushing. Combined with push-on-complete, this fully automates the delivery pipeline.",id:"open-pr",testId:"switch-open-pr",checked:o,onChange:e=>{l(e),e?B(Y(R(),{openPr:e})):(w(!1),B(Y(R(),{openPr:e,commitEvidence:!1})))}}),(0,t.jsx)(P,{label:n("settings.workflow.watchCiAfterPush"),description:n("settings.workflow.watchCiAfterPushDescription"),tooltip:"Monitors CI/CD pipeline status after pushing and can attempt fixes if tests fail. Disable if you prefer to handle CI failures manually.",id:"ci-watch-enabled",testId:"switch-ci-watch-enabled",checked:y,onChange:e=>{j(e),B(Y(R(),{ciWatchEnabled:e}))}}),(0,t.jsx)(N,{children:"Archive"}),(0,t.jsx)(P,{label:"Auto-archive completed",description:"Automatically archive features after they reach the completed state",tooltip:"Automatically archives features from the control center canvas after they reach the completed state, keeping the board clean.",id:"auto-archive-enabled",testId:"switch-auto-archive-enabled",checked:C,onChange:e=>{A(e),B(Y(R(),{autoArchiveEnabled:e}))}}),(0,t.jsx)(M,{label:"Archive delay",description:"Minutes to wait after completion before archiving (1-1440)",tooltip:"How long to wait after a feature completes before archiving it. Gives you time to review results before the feature moves off the board.",htmlFor:"auto-archive-delay",children:(0,t.jsx)(T,{id:"auto-archive-delay",testId:"input-auto-archive-delay",value:F,placeholder:"10",min:1,max:1440,suffix:"min",onChange:e=>{L(e)},onBlur:()=>{if(!C)return;let e=parseInt(F,10),t=Number.isNaN(e)?10:Math.min(1440,Math.max(1,e));L(String(t)),B(Y(R(),{autoArchiveDelay:String(t)}))}})})]})}function J(e){if(""===e)return;let t=parseInt(e,10);return Number.isNaN(t)||t<=0?void 0:t}function ee({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),[a,l]=(0,i.useState)(null!=e.workflow.ciMaxFixAttempts?String(e.workflow.ciMaxFixAttempts):""),[r,c]=(0,i.useState)(null!=e.workflow.ciWatchTimeoutMs?String(Math.round(e.workflow.ciWatchTimeoutMs/1e3)):""),[d,u]=(0,i.useState)(null!=e.workflow.ciLogMaxChars?String(e.workflow.ciLogMaxChars):""),[g,p]=(0,i.useState)(null!=e.workflow.ciWatchPollIntervalSeconds?String(e.workflow.ciWatchPollIntervalSeconds):""),[m,h]=(0,i.useState)(!1!==e.workflow.hideCiStatus),x=null!=e.workflow.ciMaxFixAttempts?String(e.workflow.ciMaxFixAttempts):"",v=null!=e.workflow.ciWatchTimeoutMs?String(Math.round(e.workflow.ciWatchTimeoutMs/1e3)):"",b=null!=e.workflow.ciLogMaxChars?String(e.workflow.ciLogMaxChars):"",w=null!=e.workflow.ciWatchPollIntervalSeconds?String(e.workflow.ciWatchPollIntervalSeconds):"";function y(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}function j(e){let t=J(e.ciTimeout??r);return{workflow:{ciMaxFixAttempts:J(e.ciMaxFix??a),ciWatchTimeoutMs:null!=t?1e3*t:void 0,ciLogMaxChars:J(e.ciLogMax??d),ciWatchPollIntervalSeconds:J(e.ciPollInterval??g),hideCiStatus:e.hideCiStatus??m}}}return(0,t.jsxs)(I,{icon:o.Activity,title:n("settings.ci.title"),description:n("settings.ci.description"),testId:"ci-settings-section",tooltip:n("settings.ci.hint"),tooltipLinks:[{label:n("settings.ci.links.cicdPipeline"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/development/cicd.md"},{label:n("settings.ci.links.ciSecurityGates"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/003-cicd-security-gates/spec.md"}],children:[(0,t.jsx)(M,{label:n("settings.ci.maxFixAttempts"),description:n("settings.ci.maxFixAttemptsDescription"),tooltip:"How many times the agent will attempt to fix failing CI checks before giving up. Higher values increase the chance of auto-resolution but consume more agent time and API calls.",htmlFor:"ci-max-fix",children:(0,t.jsx)(T,{id:"ci-max-fix",testId:"ci-max-fix-input",placeholder:"3",value:a,onChange:l,onBlur:()=>{a!==x&&y(j({ciMaxFix:a}))},min:1,max:10})}),(0,t.jsx)(M,{label:n("settings.ci.watchTimeout"),description:n("settings.ci.watchTimeoutDescription"),tooltip:"Maximum time the agent will wait for CI to finish. If CI hasn't completed within this window, the agent stops watching. Increase for repos with slow CI pipelines.",htmlFor:"ci-timeout",children:(0,t.jsx)(T,{id:"ci-timeout",testId:"ci-timeout-input",placeholder:"300",value:r,onChange:c,onBlur:()=>{r!==v&&y(j({ciTimeout:r}))},min:30,step:30,suffix:"sec"})}),(0,t.jsx)(M,{label:n("settings.ci.maxLogSize"),description:n("settings.ci.maxLogSizeDescription"),tooltip:"CI logs beyond this character limit are truncated before being sent to the agent for analysis. Keeps agent context focused and avoids excessive token usage.",htmlFor:"ci-log-max",children:(0,t.jsx)(T,{id:"ci-log-max",testId:"ci-log-max-input",placeholder:"50000",value:d,onChange:u,onBlur:()=>{d!==b&&y(j({ciLogMax:d}))},min:1e3,step:5e3,suffix:"chars"})}),(0,t.jsx)(M,{label:n("settings.ci.pollInterval"),description:n("settings.ci.pollIntervalDescription"),tooltip:"How frequently the agent checks GitHub for CI status updates. Lower values give faster feedback but increase API call volume.",htmlFor:"ci-poll-interval",children:(0,t.jsx)(T,{id:"ci-poll-interval",testId:"ci-poll-interval-input",placeholder:"30",value:g,onChange:p,onBlur:()=>{g!==w&&y(j({ciPollInterval:g}))},min:5,step:5,suffix:"sec"})}),(0,t.jsx)(P,{label:n("settings.ci.hideCiStatus"),description:n("settings.ci.hideCiStatusDescription"),tooltip:"When enabled, CI status indicators are hidden from the feature drawer and merge review panels. Useful if you monitor CI through GitHub directly.",id:"hide-ci-status",testId:"switch-hide-ci-status",checked:m,onChange:e=>{h(e),y(j({hideCiStatus:e}))}})]})}var et=e.i(27069),ei=e.i(91967),en=e.i(22353),es=e.i(9413),ea=e.i(36567),eo=e.i(75649),el=e.i(9641),er=e.i(70391),ec=e.i(85565),ed=e.i(87099),eu=["PageUp","PageDown"],eg=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],ep={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},em="Slider",[eh,ef,ex]=(0,ed.createCollection)(em),[ev,eb]=(0,es.createContextScope)(em,[ex]),[ew,ey]=ev(em),ej=i.forwardRef((e,n)=>{let{name:s,min:a=0,max:o=100,step:l=1,orientation:r="horizontal",disabled:c=!1,minStepsBetweenThumbs:d=0,defaultValue:u=[a],value:g,onValueChange:p=()=>{},onValueCommit:m=()=>{},inverted:h=!1,form:f,...x}=e,v=i.useRef(new Set),b=i.useRef(0),w="horizontal"===r,[y=[],j]=(0,ea.useControllableState)({prop:g,defaultProp:u,onChange:e=>{let t=[...v.current];t[b.current]?.focus(),p(e)}}),k=i.useRef(y);function S(e,t,{commit:i}={commit:!1}){let n,s=(String(l).split(".")[1]||"").length,r=Math.round((Math.round((e-a)/l)*l+a)*(n=Math.pow(10,s)))/n,c=(0,et.clamp)(r,[a,o]);j((e=[])=>{let n=function(e=[],t,i){let n=[...e];return n[i]=t,n.sort((e,t)=>e-t)}(e,c,t);if(!function(e,t){if(t>0)return Math.min(...e.slice(0,-1).map((t,i)=>e[i+1]-t))>=t;return!0}(n,d*l))return e;{b.current=n.indexOf(c);let t=String(n)!==String(e);return t&&i&&m(n),t?n:e}})}return(0,t.jsx)(ew,{scope:e.__scopeSlider,name:s,disabled:c,min:a,max:o,valueIndexToChangeRef:b,thumbs:v.current,values:y,orientation:r,form:f,children:(0,t.jsx)(eh.Provider,{scope:e.__scopeSlider,children:(0,t.jsx)(eh.Slot,{scope:e.__scopeSlider,children:(0,t.jsx)(w?eC:eM,{"aria-disabled":c,"data-disabled":c?"":void 0,...x,ref:n,onPointerDown:(0,ei.composeEventHandlers)(x.onPointerDown,()=>{c||(k.current=y)}),min:a,max:o,inverted:h,onSlideStart:c?void 0:function(e){let t=function(e,t){if(1===e.length)return 0;let i=e.map(e=>Math.abs(e-t)),n=Math.min(...i);return i.indexOf(n)}(y,e);S(e,t)},onSlideMove:c?void 0:function(e){S(e,b.current)},onSlideEnd:c?void 0:function(){let e=k.current[b.current];y[b.current]!==e&&m(y)},onHomeKeyDown:()=>!c&&S(a,0,{commit:!0}),onEndKeyDown:()=>!c&&S(o,y.length-1,{commit:!0}),onStepKeyDown:({event:e,direction:t})=>{if(!c){let i=eu.includes(e.key)||e.shiftKey&&eg.includes(e.key),n=b.current;S(y[n]+l*(i?10:1)*t,n,{commit:!0})}}})})})})});ej.displayName=em;var[ek,eS]=ev(em,{startEdge:"left",endEdge:"right",size:"width",direction:1}),eC=i.forwardRef((e,n)=>{let{min:s,max:a,dir:o,inverted:l,onSlideStart:r,onSlideMove:c,onSlideEnd:d,onStepKeyDown:u,...g}=e,[p,m]=i.useState(null),h=(0,en.useComposedRefs)(n,e=>m(e)),f=i.useRef(void 0),x=(0,eo.useDirection)(o),v="ltr"===x,b=v&&!l||!v&&l;function w(e){let t=f.current||p.getBoundingClientRect(),i=eB([0,t.width],b?[s,a]:[a,s]);return f.current=t,i(e-t.left)}return(0,t.jsx)(ek,{scope:e.__scopeSlider,startEdge:b?"left":"right",endEdge:b?"right":"left",direction:b?1:-1,size:"width",children:(0,t.jsx)(eP,{dir:x,"data-orientation":"horizontal",...g,ref:h,style:{...g.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:e=>{let t=w(e.clientX);r?.(t)},onSlideMove:e=>{let t=w(e.clientX);c?.(t)},onSlideEnd:()=>{f.current=void 0,d?.()},onStepKeyDown:e=>{let t=ep[b?"from-left":"from-right"].includes(e.key);u?.({event:e,direction:t?-1:1})}})})}),eM=i.forwardRef((e,n)=>{let{min:s,max:a,inverted:o,onSlideStart:l,onSlideMove:r,onSlideEnd:c,onStepKeyDown:d,...u}=e,g=i.useRef(null),p=(0,en.useComposedRefs)(n,g),m=i.useRef(void 0),h=!o;function f(e){let t=m.current||g.current.getBoundingClientRect(),i=eB([0,t.height],h?[a,s]:[s,a]);return m.current=t,i(e-t.top)}return(0,t.jsx)(ek,{scope:e.__scopeSlider,startEdge:h?"bottom":"top",endEdge:h?"top":"bottom",size:"height",direction:h?1:-1,children:(0,t.jsx)(eP,{"data-orientation":"vertical",...u,ref:p,style:{...u.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:e=>{let t=f(e.clientY);l?.(t)},onSlideMove:e=>{let t=f(e.clientY);r?.(t)},onSlideEnd:()=>{m.current=void 0,c?.()},onStepKeyDown:e=>{let t=ep[h?"from-bottom":"from-top"].includes(e.key);d?.({event:e,direction:t?-1:1})}})})}),eP=i.forwardRef((e,i)=>{let{__scopeSlider:n,onSlideStart:s,onSlideMove:a,onSlideEnd:o,onHomeKeyDown:l,onEndKeyDown:r,onStepKeyDown:c,...d}=e,u=ey(em,n);return(0,t.jsx)(ec.Primitive.span,{...d,ref:i,onKeyDown:(0,ei.composeEventHandlers)(e.onKeyDown,e=>{"Home"===e.key?(l(e),e.preventDefault()):"End"===e.key?(r(e),e.preventDefault()):eu.concat(eg).includes(e.key)&&(c(e),e.preventDefault())}),onPointerDown:(0,ei.composeEventHandlers)(e.onPointerDown,e=>{let t=e.target;t.setPointerCapture(e.pointerId),e.preventDefault(),u.thumbs.has(t)?t.focus():s(e)}),onPointerMove:(0,ei.composeEventHandlers)(e.onPointerMove,e=>{e.target.hasPointerCapture(e.pointerId)&&a(e)}),onPointerUp:(0,ei.composeEventHandlers)(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&(t.releasePointerCapture(e.pointerId),o(e))})})}),eI="SliderTrack",eT=i.forwardRef((e,i)=>{let{__scopeSlider:n,...s}=e,a=ey(eI,n);return(0,t.jsx)(ec.Primitive.span,{"data-disabled":a.disabled?"":void 0,"data-orientation":a.orientation,...s,ref:i})});eT.displayName=eI;var eN="SliderRange",eA=i.forwardRef((e,n)=>{let{__scopeSlider:s,...a}=e,o=ey(eN,s),l=eS(eN,s),r=i.useRef(null),c=(0,en.useComposedRefs)(n,r),d=o.values.length,u=o.values.map(e=>eE(e,o.min,o.max)),g=d>1?Math.min(...u):0,p=100-Math.max(...u);return(0,t.jsx)(ec.Primitive.span,{"data-orientation":o.orientation,"data-disabled":o.disabled?"":void 0,...a,ref:c,style:{...e.style,[l.startEdge]:g+"%",[l.endEdge]:p+"%"}})});eA.displayName=eN;var eD="SliderThumb",eF=i.forwardRef((e,n)=>{let s=ef(e.__scopeSlider),[a,o]=i.useState(null),l=(0,en.useComposedRefs)(n,e=>o(e)),r=i.useMemo(()=>a?s().findIndex(e=>e.ref.current===a):-1,[s,a]);return(0,t.jsx)(eL,{...e,ref:l,index:r})}),eL=i.forwardRef((e,n)=>{var s,a,o,l,r;let c,d,{__scopeSlider:u,index:g,name:p,...m}=e,h=ey(eD,u),f=eS(eD,u),[x,v]=i.useState(null),b=(0,en.useComposedRefs)(n,e=>v(e)),w=!x||h.form||!!x.closest("form"),y=(0,er.useSize)(x),j=h.values[g],k=void 0===j?0:eE(j,h.min,h.max),S=(s=g,(a=h.values.length)>2?`Value ${s+1} of ${a}`:2===a?["Minimum","Maximum"][s]:void 0),C=y?.[f.size],M=C?(o=C,l=k,r=f.direction,d=eB([0,50],[0,c=o/2]),(c-d(l)*r)*r):0;return i.useEffect(()=>{if(x)return h.thumbs.add(x),()=>{h.thumbs.delete(x)}},[x,h.thumbs]),(0,t.jsxs)("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[f.startEdge]:`calc(${k}% + ${M}px)`},children:[(0,t.jsx)(eh.ItemSlot,{scope:e.__scopeSlider,children:(0,t.jsx)(ec.Primitive.span,{role:"slider","aria-label":e["aria-label"]||S,"aria-valuemin":h.min,"aria-valuenow":j,"aria-valuemax":h.max,"aria-orientation":h.orientation,"data-orientation":h.orientation,"data-disabled":h.disabled?"":void 0,tabIndex:h.disabled?void 0:0,...m,ref:b,style:void 0===j?{display:"none"}:e.style,onFocus:(0,ei.composeEventHandlers)(e.onFocus,()=>{h.valueIndexToChangeRef.current=g})})}),w&&(0,t.jsx)(eR,{name:p??(h.name?h.name+(h.values.length>1?"[]":""):void 0),form:h.form,value:j},g)]})});eF.displayName=eD;var eR=i.forwardRef(({__scopeSlider:e,value:n,...s},a)=>{let o=i.useRef(null),l=(0,en.useComposedRefs)(o,a),r=(0,el.usePrevious)(n);return i.useEffect(()=>{let e=o.current;if(!e)return;let t=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set;if(r!==n&&t){let i=new Event("input",{bubbles:!0});t.call(e,n),e.dispatchEvent(i)}},[r,n]),(0,t.jsx)(ec.Primitive.input,{style:{display:"none"},...s,ref:l,defaultValue:n})});function eE(e,t,i){return(0,et.clamp)(100/(i-t)*(e-t),[0,100])}function eB(e,t){return i=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let n=(t[1]-t[0])/(e[1]-e[0]);return t[0]+n*(i-e[0])}}eR.displayName="RadioBubbleInput",e.s(["Range",0,eA,"Root",0,ej,"Slider",0,ej,"SliderRange",0,eA,"SliderThumb",0,eF,"SliderTrack",0,eT,"Thumb",0,eF,"Track",0,eT,"createSliderScope",0,eb],98207);var ez=e.i(98207),ez=ez;function eU({className:e,defaultValue:n,value:s,min:a=0,max:o=100,...l}){let r=i.useMemo(()=>Array.isArray(s)?s:Array.isArray(n)?n:[a,o],[s,n,a,o]);return(0,t.jsxs)(ez.Root,{"data-slot":"slider",defaultValue:n,value:s,min:a,max:o,className:(0,x.cn)("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",e),...l,children:[(0,t.jsx)(ez.Track,{"data-slot":"slider-track",className:(0,x.cn)("bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"),children:(0,t.jsx)(ez.Range,{"data-slot":"slider-range",className:(0,x.cn)("bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full")})}),Array.from({length:r.length},(e,i)=>(0,t.jsx)(ez.Thumb,{"data-slot":"slider-thumb",className:"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"},i))]})}let eq=[60,120,300,600,900,1800,2700,3600,7200,10800,14400,21600,28800,43200,86400],eH=eq.length-1;function eK(e){let t=0,i=Math.abs(e-eq[0]);for(let n=1;n<eq.length;n++){let s=Math.abs(e-eq[n]);s<i&&(i=s,t=n)}return t}function eW({id:e,testId:n,value:s,onChange:a,onBlur:o,defaultSeconds:l=1800}){var r;let c,d,u=(""===s?l:parseInt(s,10))||l,[g,p]=(0,i.useState)(()=>eK(u)),m=eK(u);m!==g&&eq[g]!==u&&p(m);let h=(0,i.useCallback)(([e])=>{p(e),a(String(eq[e]))},[a]);return(0,t.jsxs)("div",{className:"flex w-55 items-center gap-2",children:[(0,t.jsx)(eU,{id:e,"data-testid":n,min:0,max:eH,step:1,value:[g],onValueChange:h,onValueCommit:()=>o(),className:"min-w-0 flex-1"}),(0,t.jsx)("span",{className:"text-muted-foreground shrink-0 text-end text-xs tabular-nums",children:(c=Math.floor((r=eq[g])/3600),d=Math.round(r%3600/60),0===c?`${d}m`:0===d?`${c}h`:`${c}h ${d}m`)})]})}function eO(e){if(void 0===e)return;let t=function(e){if(""===e)return;let t=parseInt(e,10);return Number.isNaN(t)||t<=0?void 0:t}(e);return null!=t?1e3*t:void 0}function eV({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.workflow.stageTimeouts,o=e.workflow.analyzeRepoTimeouts,[l,r]=(0,i.useState)(String(Math.round((a?.analyzeMs??18e5)/1e3))),[c,d]=(0,i.useState)(String(Math.round((a?.requirementsMs??18e5)/1e3))),[g,p]=(0,i.useState)(String(Math.round((a?.researchMs??18e5)/1e3))),[m,h]=(0,i.useState)(String(Math.round((a?.planMs??18e5)/1e3))),[x,v]=(0,i.useState)(String(Math.round((a?.implementMs??18e5)/1e3))),[b,w]=(0,i.useState)(String(Math.round((a?.mergeMs??18e5)/1e3))),[y,j]=(0,i.useState)(String(Math.round((o?.analyzeMs??6e5)/1e3))),k=a?.analyzeMs!=null?String(Math.round(a.analyzeMs/1e3)):"",S=a?.requirementsMs!=null?String(Math.round(a.requirementsMs/1e3)):"",C=a?.researchMs!=null?String(Math.round(a.researchMs/1e3)):"",P=a?.planMs!=null?String(Math.round(a.planMs/1e3)):"",T=a?.implementMs!=null?String(Math.round(a.implementMs/1e3)):"",A=a?.mergeMs!=null?String(Math.round(a.mergeMs/1e3)):"",F=o?.analyzeMs!=null?String(Math.round(o.analyzeMs/1e3)):"";function L(e){return{workflow:{stageTimeouts:{analyzeMs:eO(e.analyzeTimeout??l),requirementsMs:eO(e.requirementsTimeout??c),researchMs:eO(e.researchTimeout??g),planMs:eO(e.planTimeout??m),implementMs:eO(e.implementTimeout??x),mergeMs:eO(e.mergeTimeout??b)},analyzeRepoTimeouts:{analyzeMs:eO(e.analyzeRepoTimeout??y)}}}}function R(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:u.Timer,title:n("settings.stageTimeouts.title"),description:n("settings.stageTimeouts.description"),testId:"stage-timeouts-settings-section",tooltip:n("settings.stageTimeouts.hint"),children:[(0,t.jsx)(N,{children:n("settings.stageTimeouts.subsections.featureAgent")}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.analyze"),description:n("settings.stageTimeouts.analyzeDescription"),htmlFor:"timeout-analyze",children:(0,t.jsx)(eW,{id:"timeout-analyze",testId:"timeout-analyze-input",value:l,onChange:r,onBlur:()=>{l!==k&&R(L({analyzeTimeout:l}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.requirements"),description:n("settings.stageTimeouts.requirementsDescription"),htmlFor:"timeout-requirements",children:(0,t.jsx)(eW,{id:"timeout-requirements",testId:"timeout-requirements-input",value:c,onChange:d,onBlur:()=>{c!==S&&R(L({requirementsTimeout:c}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.research"),description:n("settings.stageTimeouts.researchDescription"),htmlFor:"timeout-research",children:(0,t.jsx)(eW,{id:"timeout-research",testId:"timeout-research-input",value:g,onChange:p,onBlur:()=>{g!==C&&R(L({researchTimeout:g}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.plan"),description:n("settings.stageTimeouts.planDescription"),htmlFor:"timeout-plan",children:(0,t.jsx)(eW,{id:"timeout-plan",testId:"timeout-plan-input",value:m,onChange:h,onBlur:()=>{m!==P&&R(L({planTimeout:m}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.implement"),description:n("settings.stageTimeouts.implementDescription"),htmlFor:"timeout-implement",children:(0,t.jsx)(eW,{id:"timeout-implement",testId:"timeout-implement-input",value:x,onChange:v,onBlur:()=>{x!==T&&R(L({implementTimeout:x}))},defaultSeconds:1800})}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.merge"),description:n("settings.stageTimeouts.mergeDescription"),htmlFor:"timeout-merge",children:(0,t.jsx)(eW,{id:"timeout-merge",testId:"timeout-merge-input",value:b,onChange:w,onBlur:()=>{b!==A&&R(L({mergeTimeout:b}))},defaultSeconds:1800})}),(0,t.jsx)(N,{children:n("settings.stageTimeouts.subsections.analyzeRepoAgent")}),(0,t.jsx)(M,{label:n("settings.stageTimeouts.analyze"),description:n("settings.stageTimeouts.analyzeDescription"),htmlFor:"timeout-analyze-repo",children:(0,t.jsx)(eW,{id:"timeout-analyze-repo",testId:"timeout-analyze-repo-input",value:y,onChange:j,onBlur:()=>{y!==F&&R(L({analyzeRepoTimeout:y}))},defaultSeconds:600})})]})}function e$({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),[a,o]=(0,i.useState)(e.notifications.inApp.enabled),[l,c]=(0,i.useState)({...e.notifications.events});function d(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}function u(e={}){return{notifications:{inApp:{enabled:e.inApp??a},events:e.events??l}}}return(0,t.jsxs)(I,{icon:r,title:n("settings.notifications.title"),description:n("settings.notifications.sectionDescription"),testId:"notification-settings-section",tooltip:n("settings.notifications.hint"),tooltipLinks:[{label:n("settings.notifications.links.notificationSystem"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/021-agent-notifications/spec.yaml"}],children:[(0,t.jsx)(N,{children:n("settings.notifications.channels")}),(0,t.jsx)(P,{label:n("settings.notifications.inAppLabel"),description:n("settings.notifications.inAppDescription"),tooltip:"Master toggle for in-app toast notifications. When disabled, no event toasts will appear regardless of individual event settings below.",id:"notif-in-app",testId:"switch-in-app",checked:a,onChange:e=>{o(e),d(u({inApp:e}))}}),(0,t.jsx)(N,{children:n("settings.notifications.subsections.agentEvents")}),(0,t.jsx)(P,{label:n("settings.notifications.events.agentStarted"),tooltip:"Controls whether you receive an in-app toast notification when an agent begins working on a feature.",id:"notif-event-agentStarted",testId:"switch-event-agentStarted",checked:l.agentStarted,onChange:e=>{let t={...l,agentStarted:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.phaseCompleted"),tooltip:"Controls whether you receive an in-app toast notification when an agent completes a workflow phase (e.g., requirements, planning, implementation).",id:"notif-event-phaseCompleted",testId:"switch-event-phaseCompleted",checked:l.phaseCompleted,onChange:e=>{let t={...l,phaseCompleted:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.waitingApproval"),tooltip:"Controls whether you receive an in-app toast notification when a feature is paused and waiting for your approval to continue.",id:"notif-event-waitingApproval",testId:"switch-event-waitingApproval",checked:l.waitingApproval,onChange:e=>{let t={...l,waitingApproval:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.agentCompleted"),tooltip:"Controls whether you receive an in-app toast notification when an agent finishes all work on a feature successfully.",id:"notif-event-agentCompleted",testId:"switch-event-agentCompleted",checked:l.agentCompleted,onChange:e=>{let t={...l,agentCompleted:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.agentFailed"),tooltip:"Controls whether you receive an in-app toast notification when an agent encounters an error and stops working on a feature.",id:"notif-event-agentFailed",testId:"switch-event-agentFailed",checked:l.agentFailed,onChange:e=>{let t={...l,agentFailed:e};c(t),d(u({events:t}))}}),(0,t.jsx)(N,{children:n("settings.notifications.subsections.pullRequestEvents")}),(0,t.jsx)(P,{label:n("settings.notifications.events.prMerged"),tooltip:"Controls whether you receive an in-app toast notification when a feature's pull request is merged into the target branch.",id:"notif-event-prMerged",testId:"switch-event-prMerged",checked:l.prMerged,onChange:e=>{let t={...l,prMerged:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.prClosed"),tooltip:"Controls whether you receive an in-app toast notification when a feature's pull request is closed without merging.",id:"notif-event-prClosed",testId:"switch-event-prClosed",checked:l.prClosed,onChange:e=>{let t={...l,prClosed:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.prChecksPassed"),tooltip:"Controls whether you receive an in-app toast notification when all CI checks pass on a feature's pull request.",id:"notif-event-prChecksPassed",testId:"switch-event-prChecksPassed",checked:l.prChecksPassed,onChange:e=>{let t={...l,prChecksPassed:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.prChecksFailed"),tooltip:"Controls whether you receive an in-app toast notification when CI checks fail on a feature's pull request.",id:"notif-event-prChecksFailed",testId:"switch-event-prChecksFailed",checked:l.prChecksFailed,onChange:e=>{let t={...l,prChecksFailed:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.prBlocked"),tooltip:"Controls whether you receive an in-app toast notification when a pull request is blocked by merge conflicts or branch protection rules.",id:"notif-event-prBlocked",testId:"switch-event-prBlocked",checked:l.prBlocked,onChange:e=>{let t={...l,prBlocked:e};c(t),d(u({events:t}))}}),(0,t.jsx)(P,{label:n("settings.notifications.events.mergeReviewReady"),tooltip:"Controls whether you receive an in-app toast notification when a feature's PR passes all checks and is ready for your merge review.",id:"notif-event-mergeReviewReady",testId:"switch-event-mergeReviewReady",checked:l.mergeReviewReady,onChange:e=>{let t={...l,mergeReviewReady:e};c(t),d(u({events:t}))}})]})}function e_({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.featureFlags??{skills:!1,envDeploy:!1,debug:!1,githubImport:!1,adoptBranch:!1,gitRebaseSync:!1,reactFileManager:!1,plugins:!1,mcpServers:!1},[o,l]=(0,i.useState)({...a});function r(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:c,title:n("settings.featureFlags.title"),description:n("settings.featureFlags.sectionDescription"),badge:n("settings.featureFlags.badge"),testId:"feature-flags-settings-section",tooltip:n("settings.featureFlags.hint"),children:[(0,t.jsx)(P,{label:n("settings.featureFlags.skills"),description:n("settings.featureFlags.skillsDescription"),tooltip:"Enables the Skills page in the sidebar for browsing and managing Claude Code skills.",id:"flag-skills",testId:"switch-flag-skills",checked:o.skills,onChange:e=>{let t={...o,skills:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.deployments"),description:n("settings.featureFlags.deploymentsDescription"),tooltip:"Enables experimental deployment features for environment management.",id:"flag-envDeploy",testId:"switch-flag-envDeploy",checked:o.envDeploy,onChange:e=>{let t={...o,envDeploy:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.debug"),description:n("settings.featureFlags.debugDescription"),tooltip:"Shows additional debugging information in the UI for troubleshooting.",id:"flag-debug",testId:"switch-flag-debug",checked:o.debug,onChange:e=>{let t={...o,debug:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.githubImport"),description:n("settings.featureFlags.githubImportDescription"),tooltip:"Enables importing repositories directly from GitHub.",id:"flag-githubImport",testId:"switch-flag-githubImport",checked:o.githubImport,onChange:e=>{let t={...o,githubImport:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.adoptBranch"),description:n("settings.featureFlags.adoptBranchDescription"),tooltip:"Enables adopting existing git branches as ShipIT features.",id:"flag-adoptBranch",testId:"switch-flag-adoptBranch",checked:o.adoptBranch,onChange:e=>{let t={...o,adoptBranch:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.gitRebaseSync"),description:n("settings.featureFlags.gitRebaseSyncDescription"),tooltip:"Uses git rebase instead of merge when syncing feature branches with the upstream branch.",id:"flag-gitRebaseSync",testId:"switch-flag-gitRebaseSync",checked:o.gitRebaseSync,onChange:e=>{let t={...o,gitRebaseSync:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.reactFileManager"),description:n("settings.featureFlags.reactFileManagerDescription"),tooltip:"Replaces the native file picker dialog with a React-based file browser for selecting project folders.",id:"flag-reactFileManager",testId:"switch-flag-reactFileManager",checked:o.reactFileManager,onChange:e=>{let t={...o,reactFileManager:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.plugins"),description:e.litellmProxy?.baseUrl?n("settings.featureFlags.pluginsDescription"):`${n("settings.featureFlags.pluginsDescription")} — ${n("plugins.noProxy")}`,tooltip:"Enables the Plugins page for browsing and managing Claude Code plugins from a LiteLLM marketplace. Requires a LiteLLM proxy URL to be configured.",id:"flag-plugins",testId:"switch-flag-plugins",checked:o.plugins,disabled:!e.litellmProxy?.baseUrl,onChange:e=>{let t={...o,plugins:e};l(t),r({featureFlags:t})}}),(0,t.jsx)(P,{label:n("settings.featureFlags.mcpServers"),description:e.litellmProxy?.baseUrl?n("settings.featureFlags.mcpServersDescription"):`${n("settings.featureFlags.mcpServersDescription")} — ${n("mcpServers.noProxy")}`,tooltip:"Enables the MCP Servers page for viewing MCP servers deployed on your LiteLLM proxy. Requires a LiteLLM proxy URL to be configured.",id:"flag-mcp-servers",testId:"switch-flag-mcp-servers",checked:o.mcpServers,disabled:!e.litellmProxy?.baseUrl,onChange:e=>{let t={...o,mcpServers:e};l(t),r({featureFlags:t})}})]})}function eG({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.interactiveAgent??{enabled:!0,autoTimeoutMinutes:15,maxConcurrentSessions:3},[o,l]=(0,i.useState)(a.enabled),[r,c]=(0,i.useState)(String(a.autoTimeoutMinutes)),[d,u]=(0,i.useState)(String(a.maxConcurrentSessions));function p(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}return(0,t.jsxs)(I,{icon:g.MessageSquare,title:n("settings.interactiveAgent.title"),description:n("settings.interactiveAgent.description"),testId:"interactive-agent-settings-section",tooltip:n("settings.interactiveAgent.hint"),children:[(0,t.jsx)(P,{label:n("settings.interactiveAgent.enableChatTab"),description:n("settings.interactiveAgent.enableChatTabDescription"),tooltip:"Shows or hides the Chat tab on feature detail pages. When enabled, you can have interactive conversations with the agent about a specific feature.",id:"interactive-agent-enabled",testId:"switch-interactive-agent-enabled",checked:o,onChange:e=>{l(e),p({interactiveAgent:{enabled:e,autoTimeoutMinutes:parseInt(r,10)||15,maxConcurrentSessions:parseInt(d,10)||3}})}}),(0,t.jsx)(M,{label:n("settings.interactiveAgent.autoTimeout"),description:n("settings.interactiveAgent.autoTimeoutDescription"),tooltip:"Minutes of inactivity before a chat agent session is automatically terminated. Prevents idle agent processes from consuming resources indefinitely.",htmlFor:"interactive-agent-timeout",children:(0,t.jsx)(T,{id:"interactive-agent-timeout",testId:"input-interactive-agent-timeout",value:r,placeholder:"15",min:1,max:120,suffix:"min",onChange:c,onBlur:()=>{let e=parseInt(r,10),t=Number.isNaN(e)?15:Math.min(120,Math.max(1,e));c(String(t)),p({interactiveAgent:{enabled:o,autoTimeoutMinutes:t,maxConcurrentSessions:parseInt(d,10)||3}})}})}),(0,t.jsx)(M,{label:n("settings.interactiveAgent.maxConcurrentSessions"),description:n("settings.interactiveAgent.maxConcurrentSessionsDescription"),tooltip:"Maximum number of interactive agent sessions that can run simultaneously. Each session spawns a separate agent process, so higher values use more CPU and memory.",htmlFor:"interactive-agent-sessions",children:(0,t.jsx)(T,{id:"interactive-agent-sessions",testId:"input-interactive-agent-sessions",value:d,placeholder:"3",min:1,max:10,onChange:u,onBlur:()=>{let e=parseInt(d,10),t=Number.isNaN(e)?3:Math.min(10,Math.max(1,e));u(String(t)),p({interactiveAgent:{enabled:o,autoTimeoutMinutes:parseInt(r,10)||15,maxConcurrentSessions:t}})}})})]})}function eZ({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.fabLayout??{swapPosition:!1},[o,l]=(0,i.useState)(a.swapPosition);return(0,t.jsx)(I,{icon:p,title:n("settings.fabLayout.title"),description:n("settings.fabLayout.description"),testId:"fab-layout-settings-section",tooltip:n("settings.fabLayout.hint"),children:(0,t.jsx)(P,{label:n("settings.fabLayout.swapPosition"),description:n("settings.fabLayout.swapPositionDescription"),tooltip:"Swaps the Create button (bottom-right) and Chat button (bottom-left) positions on the control center canvas.",id:"fab-swap-position",testId:"switch-fab-swap-position",checked:o,onChange:e=>{var t;l(e),t={fabLayout:{swapPosition:e}},s(async()=>{let e=await E(t);e.success||D.toast.error(e.error??n("settings.failedToSave"))})}})})}function eX({shipitAiHome:e,dbFileSize:i}){let{t:n}=(0,f.useTranslation)("web");return(0,t.jsxs)(I,{icon:d,title:n("settings.database.title"),description:n("settings.database.sectionDescription"),testId:"database-settings-section",tooltip:n("settings.database.hint"),tooltipLinks:[{label:n("settings.database.links.settingsService"),href:"https://github.com/jrmatherly/shipit/blob/main/docs/architecture/settings-service.md"},{label:n("settings.database.links.settingsSpec"),href:"https://github.com/jrmatherly/shipit/blob/main/specs/005-global-settings-service/spec.md"}],children:[(0,t.jsx)(M,{label:n("settings.database.location"),description:n("settings.database.locationDescription"),tooltip:"The directory where ShipIT stores its SQLite database, logs, and configuration files. Change this via the SHIPIT_AI_HOME environment variable.",children:(0,t.jsx)("span",{className:"text-muted-foreground max-w-50 truncate font-mono text-xs","data-testid":"shipit-ai-home-path",children:e})}),(0,t.jsx)(M,{label:n("settings.database.size"),tooltip:"Current size of the SQLite database file on disk. Large databases may slow down startup; consider archiving old features if this grows significantly.",children:(0,t.jsx)("span",{className:"text-muted-foreground text-xs","data-testid":"db-file-size",children:i})})]})}var eY=e.i(37628),eY=eY,eQ=e.i(81391),eQ=eQ;let eJ=(0,R.createServerReference)("404f44d7fe0e8c191245932d8a0bf4e33f231da34a",R.callServer,void 0,R.findSourceMapURL,"addMarketplaceAction");var e0=e.i(98127),e1=e.i(35364);function e4({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),[a,o]=(0,i.useState)(e.litellmProxy?.baseUrl??""),[l,r]=(0,i.useState)(e.litellmProxy?.apiKey??""),[c,d]=(0,i.useState)("idle"),[u,g]=(0,i.useState)(!1),p=e.litellmProxy?.baseUrl??"",m=e.litellmProxy?.apiKey??"";function x(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}function v(e){let t=e?.baseUrl??a;return{litellmProxy:{baseUrl:t,apiKey:e?.apiKey??l,marketplaceEnabled:!!t}}}async function b(){if(a){g(!0),d("idle");try{let e=`${a.replace(/\/+$/,"")}/claude-code/marketplace.json`,t=await eJ(e);d(t.success?"success":"failed"),t.success?D.toast.success(n("settings.litellmProxy.testSuccess")):D.toast.error(n("settings.litellmProxy.testFailed"))}catch{d("failed"),D.toast.error(n("settings.litellmProxy.testFailed"))}finally{g(!1)}}}return(0,t.jsxs)(I,{icon:h.Server,title:n("settings.litellmProxy.title"),description:n("settings.litellmProxy.description"),testId:"litellm-proxy-settings-section",tooltip:n("settings.litellmProxy.hint"),children:[(0,t.jsx)(M,{label:n("settings.litellmProxy.baseUrl"),description:n("settings.litellmProxy.baseUrlDescription"),tooltip:"The base URL of your LiteLLM proxy server. This is used to fetch the plugin marketplace catalog and route model requests.",htmlFor:"litellm-proxy-url",children:(0,t.jsx)(e0.Input,{id:"litellm-proxy-url","data-testid":"litellm-proxy-url-input",type:"text",placeholder:"http://localhost:4000",value:a,onChange:e=>{o(e.target.value),d("idle")},onBlur:()=>{a!==p&&x(v({baseUrl:a}))},className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.apiKey"),description:n("settings.litellmProxy.apiKeyDescription"),tooltip:"A virtual API key for authenticating with the LiteLLM proxy. Stored locally alongside other agent credentials.",htmlFor:"litellm-api-key",children:(0,t.jsx)(e0.Input,{id:"litellm-api-key","data-testid":"litellm-api-key-input",type:"password",placeholder:"sk-...",value:l,onChange:e=>r(e.target.value),onBlur:()=>{l!==m&&x(v({apiKey:l}))},className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.testConnection"),tooltip:"Attempt to connect to the proxy and fetch the marketplace catalog to verify the configuration is correct.",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(e1.Button,{variant:"outline",size:"sm","data-testid":"litellm-test-connection-btn",disabled:!a||u,onClick:b,className:"cursor-pointer text-xs",children:u?n("settings.saving"):n("settings.litellmProxy.testConnection")}),"success"===c&&(0,t.jsx)(eY.default,{className:"h-4 w-4 text-emerald-500","data-testid":"litellm-test-success"}),"failed"===c&&(0,t.jsx)(eQ.default,{className:"text-destructive h-4 w-4","data-testid":"litellm-test-failed"})]})})]})}let e3=(0,l.default)("route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);var e5=e.i(48306);let e8=new Set(["claude-code","gemini-cli","codex-cli"]),e2=new Set(["cursor","copilot-cli"]);function e6({settings:e}){let{t:n}=(0,f.useTranslation)("web"),[,s]=(0,i.useTransition)(),a=e.agent.type,o=e.litellmProxy?.claudeCode,[l,r]=(0,i.useState)(function(e){switch(e.agent.type){case"claude-code":return e.litellmProxy?.claudeCode?.routingMode??B.LiteLLMProxyRoutingMode.direct;case"gemini-cli":return e.litellmProxy?.geminiCli?.routingMode??B.LiteLLMProxyRoutingMode.direct;case"codex-cli":return e.litellmProxy?.codexCli?.routingMode??B.LiteLLMProxyRoutingMode.direct;default:return B.LiteLLMProxyRoutingMode.direct}}(e)),[c,d]=(0,i.useState)(o?.customHeaders??""),[u,g]=(0,i.useState)(o?.sonnetModel??""),[p,m]=(0,i.useState)(o?.haikuModel??""),[h,x]=(0,i.useState)(o?.opusModel??""),v=o?.customHeaders??"",b=o?.sonnetModel??"",w=o?.haikuModel??"",y=o?.opusModel??"",j=l!==B.LiteLLMProxyRoutingMode.direct,k=e8.has(a),S=e2.has(a),C=e.litellmProxy?.baseUrl??"",P=e.litellmProxy?.apiKey??"";function T(e){s(async()=>{let t=await E(e);t.success||D.toast.error(t.error??n("settings.failedToSave"))})}function N(e){let t=function(e){switch(e){case"claude-code":return"claudeCode";case"gemini-cli":return"geminiCli";case"codex-cli":return"codexCli";default:return null}}(a);return t?"claude-code"===a?{litellmProxy:{claudeCode:{routingMode:e?.routingMode??l,customHeaders:e?.customHeaders??c,sonnetModel:e?.sonnetModel??u,haikuModel:e?.haikuModel??p,opusModel:e?.opusModel??h}}}:{litellmProxy:{[t]:{routingMode:e?.routingMode??l}}}:{}}if(!k&&!S)return(0,t.jsx)(I,{icon:e3,title:n("settings.litellmProxy.routing.title"),description:n("settings.litellmProxy.routing.description"),testId:"litellm-proxy-routing-section",tooltip:n("settings.litellmProxy.routing.hint"),children:(0,t.jsx)(M,{label:"",description:n("settings.litellmProxy.routing.notSupported"),children:(0,t.jsx)("span",{})})});if(S){let e="cursor"===a,i=C?e?`${C.replace(/\/+$/,"")}/cursor`:C:"";return(0,t.jsx)(I,{icon:e3,title:n("settings.litellmProxy.routing.title"),description:n("settings.litellmProxy.routing.description"),testId:"litellm-proxy-routing-section",tooltip:n("settings.litellmProxy.routing.hint"),children:(0,t.jsx)(M,{label:e?n("settings.litellmProxy.routing.cursorInstructions"):n("settings.litellmProxy.routing.copilotInstructions"),description:e?n("settings.litellmProxy.routing.cursorDescription"):n("settings.litellmProxy.routing.copilotDescription"),children:(0,t.jsxs)("div",{className:"w-64 space-y-2",children:[(0,t.jsx)("code",{className:"bg-muted block rounded px-2 py-1 text-xs break-all",children:i}),e&&P?(0,t.jsx)("code",{className:"bg-muted block rounded px-2 py-1 text-xs break-all",children:P}):null]})})})}return(0,t.jsxs)(I,{icon:e3,title:n("settings.litellmProxy.routing.title"),description:n("settings.litellmProxy.routing.description"),testId:"litellm-proxy-routing-section",tooltip:n("settings.litellmProxy.routing.hint"),children:[(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.mode"),description:n("settings.litellmProxy.routing.modeDescription"),htmlFor:"litellm-routing-mode",children:(0,t.jsxs)(F.Select,{value:l,onValueChange:function(e){r(e),T(N({routingMode:e}))},children:[(0,t.jsx)(F.SelectTrigger,{id:"litellm-routing-mode","data-testid":"litellm-routing-mode-select",className:"w-48 text-xs",children:(0,t.jsx)(F.SelectValue,{})}),(0,t.jsxs)(F.SelectContent,{children:[(0,t.jsx)(F.SelectItem,{value:B.LiteLLMProxyRoutingMode.direct,children:n("settings.litellmProxy.routing.modeDirect")}),(0,t.jsx)(F.SelectItem,{value:B.LiteLLMProxyRoutingMode.proxy,children:n("settings.litellmProxy.routing.modeProxy")}),"claude-code"===a&&(0,t.jsx)(F.SelectItem,{value:B.LiteLLMProxyRoutingMode.passthrough,children:n("settings.litellmProxy.routing.modePassthrough")})]})]})}),l===B.LiteLLMProxyRoutingMode.passthrough&&(0,t.jsx)(M,{label:"",description:n("settings.litellmProxy.routing.passthroughHelp"),children:(0,t.jsx)("span",{})}),j&&"claude-code"===a?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.customHeaders"),description:n("settings.litellmProxy.routing.customHeadersDescription"),htmlFor:"litellm-custom-headers",children:(0,t.jsx)(e5.Textarea,{id:"litellm-custom-headers","data-testid":"litellm-custom-headers-input",placeholder:"x-litellm-customer-id: my-user\nx-litellm-tags: project:acme",value:c,onChange:e=>d(e.target.value),onBlur:()=>{c!==v&&T(N({customHeaders:c}))},rows:3,className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.sonnetModel"),description:n("settings.litellmProxy.routing.modelOverrideDescription"),htmlFor:"litellm-sonnet-model",children:(0,t.jsx)(e0.Input,{id:"litellm-sonnet-model","data-testid":"litellm-sonnet-model-input",type:"text",placeholder:"claude-sonnet-4-6",value:u,onChange:e=>g(e.target.value),onBlur:()=>{u!==b&&T(N({sonnetModel:u}))},className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.haikuModel"),htmlFor:"litellm-haiku-model",children:(0,t.jsx)(e0.Input,{id:"litellm-haiku-model","data-testid":"litellm-haiku-model-input",type:"text",placeholder:"claude-haiku-4-5",value:p,onChange:e=>m(e.target.value),onBlur:()=>{p!==w&&T(N({haikuModel:p}))},className:"w-64 text-xs"})}),(0,t.jsx)(M,{label:n("settings.litellmProxy.routing.opusModel"),htmlFor:"litellm-opus-model",children:(0,t.jsx)(e0.Input,{id:"litellm-opus-model","data-testid":"litellm-opus-model-input",type:"text",placeholder:"claude-opus-4-6",value:h,onChange:e=>x(e.target.value),onBlur:()=>{h!==y&&T(N({opusModel:h}))},className:"w-64 text-xs"})})]}):null]})}let e7=[{id:"agent",labelKey:"settings.sections.agent",icon:n.Bot},{id:"environment",labelKey:"settings.sections.environment",icon:s.Terminal},{id:"workflow",labelKey:"settings.sections.workflow",icon:a.GitBranch},{id:"ci",labelKey:"settings.sections.ci",icon:o.Activity},{id:"stage-timeouts",labelKey:"settings.sections.timeouts",icon:u.Timer},{id:"notifications",labelKey:"settings.sections.notifications",icon:r},{id:"feature-flags",labelKey:"settings.sections.flags",icon:c},{id:"interactive-agent",labelKey:"settings.sections.chat",icon:g.MessageSquare},{id:"fab-layout",labelKey:"settings.sections.layout",icon:p},{id:"database",labelKey:"settings.sections.database",icon:d},{id:"litellm-proxy",labelKey:"settings.sections.proxy",icon:h.Server}],e9=[{id:"all",labelKey:"settings.sections.all",icon:m},...e7];e.s(["SettingsPageClient",0,function({settings:e,shipitAiHome:n,dbFileSize:s,availableTerminals:a,availableEditors:o,availableShells:l}){let{t:r}=(0,f.useTranslation)("web"),[c,d]=(0,i.useState)("all"),[u,g]=(0,i.useState)("agent");return(0,i.useEffect)(()=>{if("all"!==c)return;let e=e7.map(e=>document.getElementById(`section-${e.id}`)).filter(Boolean);if(0===e.length)return;let t=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&g(t.target.id.replace("section-",""))},{rootMargin:"-65px 0px -60% 0px",threshold:0});for(let i of e)t.observe(i);return()=>t.disconnect()},[c]),(0,t.jsxs)("div",{"data-testid":"settings-page-client",className:"max-w-5xl px-8 pt-8",children:[(0,t.jsxs)("div",{className:"bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10 pb-4 backdrop-blur",children:[(0,t.jsxs)("div",{className:"mb-4 space-y-1.5",children:[(0,t.jsx)("span",{className:"text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase",children:"Developer Portal"}),(0,t.jsx)("div",{className:"flex items-baseline gap-3",children:(0,t.jsx)("h1",{className:"text-foreground text-3xl font-black tracking-tight",children:r("settings.title")})})]}),(0,t.jsx)("nav",{className:"bg-card editorial-shadow flex flex-wrap items-center gap-0.5 rounded-lg p-1",children:e9.map(e=>{let i=e.icon,n=c===e.id||"all"===c&&"all"!==e.id&&u===e.id;return(0,t.jsxs)("button",{type:"button",onClick:()=>d(e.id),className:(0,x.cn)("flex cursor-pointer items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-bold transition-all",n?"bg-muted text-primary shadow-sm ring-1 ring-slate-200/70 dark:ring-slate-700/50":"text-muted-foreground hover:text-foreground hover:bg-accent/50"),children:[(0,t.jsx)(i,{className:"h-3 w-3"}),(0,t.jsx)("span",{className:"hidden sm:inline",children:r(e.labelKey)})]},e.id)})})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-3",children:[("all"===c||"agent"===c)&&(0,t.jsx)("div",{id:"section-agent",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(A,{settings:e})}),("all"===c||"environment"===c)&&(0,t.jsx)("div",{id:"section-environment",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(X,{settings:e,availableEditors:o,availableShells:l,availableTerminals:a})}),("all"===c||"workflow"===c)&&(0,t.jsx)("div",{id:"section-workflow",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(Q,{settings:e})}),("all"===c||"ci"===c)&&(0,t.jsx)("div",{id:"section-ci",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(ee,{settings:e})}),("all"===c||"stage-timeouts"===c)&&(0,t.jsx)("div",{id:"section-stage-timeouts",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(eV,{settings:e})}),("all"===c||"notifications"===c)&&(0,t.jsx)("div",{id:"section-notifications",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(e$,{settings:e})}),("all"===c||"feature-flags"===c)&&(0,t.jsx)("div",{id:"section-feature-flags",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(e_,{settings:e})}),("all"===c||"interactive-agent"===c)&&(0,t.jsx)("div",{id:"section-interactive-agent",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(eG,{settings:e})}),("all"===c||"fab-layout"===c)&&(0,t.jsx)("div",{id:"section-fab-layout",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(eZ,{settings:e})}),("all"===c||"database"===c)&&(0,t.jsx)("div",{id:"section-database",className:"scroll-mt-18 rounded-lg",children:(0,t.jsx)(eX,{shipitAiHome:n,dbFileSize:s})}),("all"===c||"litellm-proxy"===c)&&(0,t.jsxs)("div",{id:"section-litellm-proxy",className:"scroll-mt-18 rounded-lg",children:[(0,t.jsx)(e4,{settings:e}),e.litellmProxy?.baseUrl?(0,t.jsx)(e6,{settings:e}):null]})]})]})}],41952)}]);
|