@shipit-ai/cli 1.168.0 → 1.169.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/src/presentation/web/components/features/settings/agent-settings-section.d.ts +3 -3
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.js +23 -102
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts +2 -3
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/agent-settings-section.stories.js +18 -22
- package/dist/src/presentation/web/components/features/settings/ci-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/ci-settings-section.js +14 -5
- package/dist/src/presentation/web/components/features/settings/database-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/database-settings-section.js +14 -4
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts +9 -3
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.js +75 -65
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/environment-settings-section.stories.js +20 -18
- package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/fab-layout-settings-section.js +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts +3 -3
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.js +48 -50
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/feature-flags-settings-section.stories.js +25 -25
- package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/interactive-agent-settings-section.js +3 -3
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts +3 -3
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.js +64 -47
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/notification-settings-section.stories.js +32 -24
- package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.js +27 -378
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts +2 -0
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-page-client.stories.js +13 -0
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts +8 -8
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.js +3 -6
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.js +7 -7
- package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.js +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts +3 -3
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.js +118 -165
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.d.ts.map +1 -1
- package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js +26 -64
- package/dist/src/presentation/web/components/ui/tooltip.d.ts.map +1 -1
- package/dist/src/presentation/web/components/ui/tooltip.js +3 -3
- package/dist/translations/ar/web.json +1 -0
- package/dist/translations/de/web.json +1 -0
- package/dist/translations/en/web.json +1 -0
- package/dist/translations/es/web.json +1 -0
- package/dist/translations/fr/web.json +1 -0
- package/dist/translations/he/web.json +1 -0
- package/dist/translations/pt/web.json +1 -0
- package/dist/translations/ru/web.json +1 -0
- 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/settings/page/server-reference-manifest.json +11 -11
- 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/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
- package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
- package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__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]__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]__0qxd563._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0qxd563._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0rvrr1j._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__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/{_08_079y._.js → _01qdxy2._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_08_079y._.js.map → _01qdxy2._.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/_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/_0a_8rlj._.js +3 -0
- package/web/.next/server/chunks/ssr/{_0mi5qj~._.js.map → _0a_8rlj._.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/_0n.magx._.js +1 -1
- package/web/.next/server/chunks/ssr/_0n.magx._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
- package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0txr945._.js → _0pa1dkv._.js} +2 -2
- package/web/.next/server/chunks/ssr/_0pa1dkv._.js.map +1 -0
- 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/_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/{_0r04xhw._.js → _0wor25i._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0r04xhw._.js.map → _0wor25i._.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/_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_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 +50 -50
- package/web/.next/static/chunks/{01znjuvi5t9~q.js → 00m_fbc2z1gyi.js} +3 -3
- package/web/.next/static/chunks/{0ygtupas8pxdi.js → 09f2lesd_dd3~.js} +1 -1
- package/web/.next/static/chunks/0c0dau5pmseko.js +1 -0
- package/web/.next/static/chunks/{078lp287u~c~b.js → 0dq50gtgaj63f.js} +1 -1
- package/web/.next/static/chunks/{06nsv-_ec9ehn.js → 0k0j7anrbg-of.js} +1 -1
- package/web/.next/static/chunks/{17c31c1biwfyi.js → 0o33urrd3lk~u.js} +1 -1
- package/web/.next/static/chunks/0u_27fdqa2jeg.js +1 -0
- package/web/.next/static/chunks/0xwh.0u-dexsl.js +1 -0
- package/web/.next/static/chunks/0yibymrb2j05t.css +1 -0
- package/web/.next/static/chunks/103xnw203o9k1.js +1 -0
- package/web/.next/static/chunks/{0cv09-g0prv4o.js → 11vbir.u7_zf7.js} +1 -1
- package/web/.next/static/chunks/{133q8d69p6cl0.js → 121v1_d_dfk2k.js} +1 -1
- package/web/.next/static/chunks/{0_xww9bsde~1x.js → 12axopx66pocj.js} +1 -1
- package/web/.next/static/chunks/{0hg8qgtv~kuys.js → 183ehj-b80a~o.js} +1 -1
- package/web/.next/static/chunks/{0_v4t6gzx.332.js → 1874_wt9rit96.js} +1 -1
- package/web/.next/server/chunks/ssr/_0mi5qj~._.js +0 -3
- package/web/.next/server/chunks/ssr/_0txr945._.js.map +0 -1
- package/web/.next/static/chunks/033sl_l5o3uo8.css +0 -1
- package/web/.next/static/chunks/04r9m_5p953mf.js +0 -1
- package/web/.next/static/chunks/07i3-aamszsoh.js +0 -1
- package/web/.next/static/chunks/0ee1d3_y40g9f.js +0 -1
- package/web/.next/static/chunks/15mks7_3venc1.js +0 -1
- /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → SNdaKJ9fpre8tUMRe1jlA}/_buildManifest.js +0 -0
- /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → SNdaKJ9fpre8tUMRe1jlA}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{LQMB6QAutWzPQnLUZG96y → SNdaKJ9fpre8tUMRe1jlA}/_ssgManifest.js +0 -0
package/dist/src/presentation/web/components/features/settings/settings-section-utils.stories.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { fn } from 'storybook/test';
|
|
3
3
|
import { Settings } from 'lucide-react';
|
|
4
|
-
import { SettingsRow, SwitchRow, SettingsSection, NumberStepper, SubsectionLabel,
|
|
4
|
+
import { SettingsRow, SwitchRow, SettingsSection, NumberStepper, SubsectionLabel, } from './settings-section-utils.js';
|
|
5
5
|
/**
|
|
6
6
|
* settings-section-utils exports multiple reusable settings row components.
|
|
7
7
|
* Stories demonstrate each component individually and in composition.
|
|
@@ -13,7 +13,10 @@ function SwitchRowDemo() {
|
|
|
13
13
|
return (_jsx("div", { className: "w-96 rounded-lg border", children: _jsxs("div", { className: "px-4", children: [_jsx(SwitchRow, { label: "Auto-save", description: "Automatically save changes", id: "auto-save", testId: "switch-auto-save", checked: true, onChange: fn() }), _jsx(SwitchRow, { label: "Notifications", id: "notifications", testId: "switch-notifications", checked: false, onChange: fn() }), _jsx(SwitchRow, { label: "Experimental features", description: "Enable unstable features (may cause issues)", id: "experimental", testId: "switch-experimental", checked: false, onChange: fn(), disabled: true })] }) }));
|
|
14
14
|
}
|
|
15
15
|
function SettingsSectionDemo() {
|
|
16
|
-
return (_jsx("div", { className: "w-96", children: _jsxs(SettingsSection, { icon: Settings, title: "General Settings", description: "Configure general application behavior", testId: "general-settings",
|
|
16
|
+
return (_jsx("div", { className: "w-96", children: _jsxs(SettingsSection, { icon: Settings, title: "General Settings", description: "Configure general application behavior", testId: "general-settings", tooltip: "Configure the agent model used for all AI-powered operations. Changes take effect on the next agent run.", tooltipLinks: [
|
|
17
|
+
{ label: 'Documentation', href: 'https://docs.example.com' },
|
|
18
|
+
{ label: 'Getting started guide', href: 'https://docs.example.com/start' },
|
|
19
|
+
], children: [_jsx(SwitchRow, { label: "Show tooltips", id: "tooltips", testId: "switch-tooltips", checked: true, onChange: fn() }), _jsx(SwitchRow, { label: "Compact mode", id: "compact", testId: "switch-compact", checked: false, onChange: fn() })] }) }));
|
|
17
20
|
}
|
|
18
21
|
function NumberStepperDemo() {
|
|
19
22
|
return (_jsxs("div", { className: "flex flex-col gap-4 p-4", children: [_jsx(NumberStepper, { id: "timeout", testId: "stepper-timeout", value: "30", onChange: fn(), onBlur: fn(), placeholder: "30", min: 1, max: 300, suffix: "seconds" }), _jsx(NumberStepper, { id: "retries", testId: "stepper-retries", value: "3", onChange: fn(), onBlur: fn(), placeholder: "3", min: 0, max: 10 })] }));
|
|
@@ -40,9 +43,6 @@ export const NumberSteppers = {
|
|
|
40
43
|
export const SubsectionLabelExample = {
|
|
41
44
|
render: () => (_jsxs("div", { className: "w-80 rounded-lg border px-4", children: [_jsx(SubsectionLabel, { children: "Advanced Options" }), _jsx("div", { className: "text-muted-foreground py-2 text-sm", children: "Content below subsection label" }), _jsx(SubsectionLabel, { children: "Developer Options" }), _jsx("div", { className: "text-muted-foreground py-2 text-sm", children: "More content here" })] })),
|
|
42
45
|
};
|
|
43
|
-
export const
|
|
44
|
-
render: () =>
|
|
45
|
-
{ label: 'Documentation', href: 'https://docs.example.com' },
|
|
46
|
-
{ label: 'Getting started guide', href: 'https://docs.example.com/start' },
|
|
47
|
-
], children: "Configure the agent model used for all AI-powered operations. Changes take effect on the next agent run." }) })),
|
|
46
|
+
export const SectionWithTooltip = {
|
|
47
|
+
render: () => _jsx(SettingsSectionDemo, {}),
|
|
48
48
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage-timeouts-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/stage-timeouts-settings-section.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIvE;AAED,wBAAgB,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,iCAAiC,
|
|
1
|
+
{"version":3,"file":"stage-timeouts-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/stage-timeouts-settings-section.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AAGxE,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIvE;AAED,wBAAgB,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,iCAAiC,2CA6N3F"}
|
package/dist/src/presentation/web/components/features/settings/stage-timeouts-settings-section.js
CHANGED
|
@@ -77,7 +77,7 @@ export function StageTimeoutsSettingsSection({ settings }) {
|
|
|
77
77
|
}
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
-
return (_jsxs(SettingsSection, { icon: Timer, title: t('settings.stageTimeouts.title'), description: t('settings.stageTimeouts.description'), testId: "stage-timeouts-settings-section", children: [_jsx(SubsectionLabel, { children: t('settings.stageTimeouts.subsections.featureAgent') }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.analyze'), description: t('settings.stageTimeouts.analyzeDescription'), htmlFor: "timeout-analyze", children: _jsx(TimeoutSlider, { id: "timeout-analyze", testId: "timeout-analyze-input", value: analyzeTimeout, onChange: setAnalyzeTimeout, onBlur: () => {
|
|
80
|
+
return (_jsxs(SettingsSection, { icon: Timer, title: t('settings.stageTimeouts.title'), description: t('settings.stageTimeouts.description'), testId: "stage-timeouts-settings-section", tooltip: t('settings.stageTimeouts.hint'), children: [_jsx(SubsectionLabel, { children: t('settings.stageTimeouts.subsections.featureAgent') }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.analyze'), description: t('settings.stageTimeouts.analyzeDescription'), htmlFor: "timeout-analyze", children: _jsx(TimeoutSlider, { id: "timeout-analyze", testId: "timeout-analyze-input", value: analyzeTimeout, onChange: setAnalyzeTimeout, onBlur: () => {
|
|
81
81
|
if (analyzeTimeout !== originalAnalyzeTimeout)
|
|
82
82
|
save(buildPayload({ analyzeTimeout }));
|
|
83
83
|
}, defaultSeconds: 1800 }) }), _jsx(SettingsRow, { label: t('settings.stageTimeouts.requirements'), description: t('settings.stageTimeouts.requirementsDescription'), htmlFor: "timeout-requirements", children: _jsx(TimeoutSlider, { id: "timeout-requirements", testId: "timeout-requirements-input", value: requirementsTimeout, onChange: setRequirementsTimeout, onBlur: () => {
|
package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Settings } from '../../../../../../packages/core/src/domain/generated/output.js';
|
|
2
2
|
export interface WorkflowSettingsSectionProps {
|
|
3
|
-
|
|
3
|
+
settings: Settings;
|
|
4
4
|
}
|
|
5
|
-
export declare function WorkflowSettingsSection({
|
|
5
|
+
export declare function WorkflowSettingsSection({ settings }: WorkflowSettingsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
//# sourceMappingURL=workflow-settings-section.d.ts.map
|
package/dist/src/presentation/web/components/features/settings/workflow-settings-section.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow-settings-section.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AASxE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAsDD,wBAAgB,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,4BAA4B,2CAsOjF"}
|
|
@@ -1,178 +1,131 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useTransition
|
|
4
|
-
import { GitBranch
|
|
3
|
+
import { useState, useTransition } from 'react';
|
|
4
|
+
import { GitBranch } from 'lucide-react';
|
|
5
5
|
import { toast } from 'sonner';
|
|
6
|
-
import {
|
|
7
|
-
import { Label } from '../../ui/label.js';
|
|
8
|
-
import { Input } from '../../ui/input.js';
|
|
9
|
-
import { Switch } from '../../ui/switch.js';
|
|
10
|
-
import { Separator } from '../../ui/separator.js';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
11
7
|
import { updateSettingsAction } from '../../../app/actions/update-settings.js';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const [hideCiStatus, setHideCiStatus] = useState(workflow.hideCiStatus !== false);
|
|
25
|
-
// Per-stage timeout states (seconds for display)
|
|
26
|
-
// Defaults: feature agent stages = 1_800_000 ms (1800s), analyze-repo = 600_000 ms (600s)
|
|
27
|
-
const st = workflow.stageTimeouts;
|
|
28
|
-
const [analyzeTimeout, setAnalyzeTimeout] = useState(String(Math.round((st?.analyzeMs ?? 1_800_000) / 1000)));
|
|
29
|
-
const [requirementsTimeout, setRequirementsTimeout] = useState(String(Math.round((st?.requirementsMs ?? 1_800_000) / 1000)));
|
|
30
|
-
const [researchTimeout, setResearchTimeout] = useState(String(Math.round((st?.researchMs ?? 1_800_000) / 1000)));
|
|
31
|
-
const [planTimeout, setPlanTimeout] = useState(String(Math.round((st?.planMs ?? 1_800_000) / 1000)));
|
|
32
|
-
const [implementTimeout, setImplementTimeout] = useState(String(Math.round((st?.implementMs ?? 1_800_000) / 1000)));
|
|
33
|
-
const [mergeTimeout, setMergeTimeout] = useState(String(Math.round((st?.mergeMs ?? 1_800_000) / 1000)));
|
|
34
|
-
// Analyze-repo agent timeout state
|
|
35
|
-
const art = workflow.analyzeRepoTimeouts;
|
|
36
|
-
const [analyzeRepoTimeout, setAnalyzeRepoTimeout] = useState(String(Math.round((art?.analyzeMs ?? 600_000) / 1000)));
|
|
37
|
-
const [isPending, startTransition] = useTransition();
|
|
38
|
-
const [showSaved, setShowSaved] = useState(false);
|
|
39
|
-
const prevPendingRef = useRef(false);
|
|
40
|
-
useEffect(() => {
|
|
41
|
-
if (prevPendingRef.current && !isPending) {
|
|
42
|
-
setShowSaved(true);
|
|
43
|
-
const timer = setTimeout(() => setShowSaved(false), 2000);
|
|
44
|
-
return () => clearTimeout(timer);
|
|
45
|
-
}
|
|
46
|
-
prevPendingRef.current = isPending;
|
|
47
|
-
}, [isPending]);
|
|
48
|
-
function parseOptionalInt(value) {
|
|
49
|
-
if (value === '')
|
|
50
|
-
return undefined;
|
|
51
|
-
const n = parseInt(value, 10);
|
|
52
|
-
return Number.isNaN(n) || n <= 0 ? undefined : n;
|
|
53
|
-
}
|
|
54
|
-
function secondsToMs(val) {
|
|
55
|
-
const n = parseOptionalInt(val);
|
|
56
|
-
return n != null ? n * 1000 : undefined;
|
|
57
|
-
}
|
|
58
|
-
function buildPayload(overrides = {}) {
|
|
59
|
-
const timeoutSeconds = parseOptionalInt(overrides.ciTimeout ?? ciTimeout);
|
|
60
|
-
return {
|
|
61
|
-
workflow: {
|
|
62
|
-
openPrOnImplementationComplete: overrides.openPr ?? openPr,
|
|
63
|
-
approvalGateDefaults: {
|
|
64
|
-
pushOnImplementationComplete: overrides.pushOnComplete ?? pushOnComplete,
|
|
65
|
-
allowPrd: overrides.allowPrd ?? allowPrd,
|
|
66
|
-
allowPlan: overrides.allowPlan ?? allowPlan,
|
|
67
|
-
allowMerge: overrides.allowMerge ?? allowMerge,
|
|
68
|
-
},
|
|
69
|
-
ciWatchEnabled: overrides.ciWatchEnabled ?? ciWatchEnabled,
|
|
70
|
-
hideCiStatus: overrides.hideCiStatus ?? hideCiStatus,
|
|
71
|
-
ciMaxFixAttempts: parseOptionalInt(overrides.ciMaxFix ?? ciMaxFix),
|
|
72
|
-
ciWatchTimeoutMs: timeoutSeconds != null ? timeoutSeconds * 1000 : undefined,
|
|
73
|
-
ciLogMaxChars: parseOptionalInt(overrides.ciLogMax ?? ciLogMax),
|
|
74
|
-
ciWatchPollIntervalSeconds: parseOptionalInt(overrides.ciPollInterval ?? ciPollInterval),
|
|
75
|
-
stageTimeouts: {
|
|
76
|
-
analyzeMs: secondsToMs(overrides.analyzeTimeout ?? analyzeTimeout),
|
|
77
|
-
requirementsMs: secondsToMs(overrides.requirementsTimeout ?? requirementsTimeout),
|
|
78
|
-
researchMs: secondsToMs(overrides.researchTimeout ?? researchTimeout),
|
|
79
|
-
planMs: secondsToMs(overrides.planTimeout ?? planTimeout),
|
|
80
|
-
implementMs: secondsToMs(overrides.implementTimeout ?? implementTimeout),
|
|
81
|
-
mergeMs: secondsToMs(overrides.mergeTimeout ?? mergeTimeout),
|
|
82
|
-
},
|
|
83
|
-
analyzeRepoTimeouts: {
|
|
84
|
-
analyzeMs: secondsToMs(overrides.analyzeRepoTimeout ?? analyzeRepoTimeout),
|
|
85
|
-
},
|
|
8
|
+
import { SettingsSection, SettingsRow, SwitchRow, NumberStepper, SubsectionLabel, } from './settings-section-utils.js';
|
|
9
|
+
function buildWorkflowPayload(state, overrides = {}) {
|
|
10
|
+
const archiveEnabled = overrides.autoArchiveEnabled ?? state.autoArchiveEnabled;
|
|
11
|
+
const archiveDelay = parseInt(overrides.autoArchiveDelay ?? state.autoArchiveDelay, 10);
|
|
12
|
+
return {
|
|
13
|
+
workflow: {
|
|
14
|
+
openPrOnImplementationComplete: overrides.openPr ?? state.openPr,
|
|
15
|
+
approvalGateDefaults: {
|
|
16
|
+
pushOnImplementationComplete: overrides.pushOnComplete ?? state.pushOnComplete,
|
|
17
|
+
allowPrd: overrides.allowPrd ?? state.allowPrd,
|
|
18
|
+
allowPlan: overrides.allowPlan ?? state.allowPlan,
|
|
19
|
+
allowMerge: overrides.allowMerge ?? state.allowMerge,
|
|
86
20
|
},
|
|
21
|
+
enableEvidence: overrides.enableEvidence ?? state.enableEvidence,
|
|
22
|
+
commitEvidence: overrides.commitEvidence ?? state.commitEvidence,
|
|
23
|
+
ciWatchEnabled: overrides.ciWatchEnabled ?? state.ciWatchEnabled,
|
|
24
|
+
defaultFastMode: overrides.defaultFastMode ?? state.defaultFastMode,
|
|
25
|
+
autoArchiveDelayMinutes: archiveEnabled
|
|
26
|
+
? Number.isNaN(archiveDelay) || archiveDelay < 1
|
|
27
|
+
? 10
|
|
28
|
+
: archiveDelay
|
|
29
|
+
: 0,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function WorkflowSettingsSection({ settings }) {
|
|
34
|
+
const { t } = useTranslation('web');
|
|
35
|
+
const [, startTransition] = useTransition();
|
|
36
|
+
const [openPr, setOpenPr] = useState(settings.workflow.openPrOnImplementationComplete);
|
|
37
|
+
const [pushOnComplete, setPushOnComplete] = useState(settings.workflow.approvalGateDefaults.pushOnImplementationComplete);
|
|
38
|
+
const [allowPrd, setAllowPrd] = useState(settings.workflow.approvalGateDefaults.allowPrd);
|
|
39
|
+
const [allowPlan, setAllowPlan] = useState(settings.workflow.approvalGateDefaults.allowPlan);
|
|
40
|
+
const [allowMerge, setAllowMerge] = useState(settings.workflow.approvalGateDefaults.allowMerge);
|
|
41
|
+
const [enableEvidence, setEnableEvidence] = useState(settings.workflow.enableEvidence);
|
|
42
|
+
const [commitEvidence, setCommitEvidence] = useState(settings.workflow.commitEvidence);
|
|
43
|
+
const [ciWatchEnabled, setCiWatchEnabled] = useState(settings.workflow.ciWatchEnabled !== false);
|
|
44
|
+
const [defaultFastMode, setDefaultFastMode] = useState(settings.workflow.defaultFastMode !== false);
|
|
45
|
+
const [autoArchiveEnabled, setAutoArchiveEnabled] = useState((settings.workflow.autoArchiveDelayMinutes ?? 10) > 0);
|
|
46
|
+
const [autoArchiveDelay, setAutoArchiveDelay] = useState(String(settings.workflow.autoArchiveDelayMinutes ?? 10));
|
|
47
|
+
function getState() {
|
|
48
|
+
return {
|
|
49
|
+
openPr,
|
|
50
|
+
pushOnComplete,
|
|
51
|
+
allowPrd,
|
|
52
|
+
allowPlan,
|
|
53
|
+
allowMerge,
|
|
54
|
+
enableEvidence,
|
|
55
|
+
commitEvidence,
|
|
56
|
+
ciWatchEnabled,
|
|
57
|
+
defaultFastMode,
|
|
58
|
+
autoArchiveEnabled,
|
|
59
|
+
autoArchiveDelay,
|
|
87
60
|
};
|
|
88
61
|
}
|
|
89
|
-
function save(
|
|
62
|
+
function save(payload) {
|
|
90
63
|
startTransition(async () => {
|
|
91
|
-
const result = await updateSettingsAction(
|
|
64
|
+
const result = await updateSettingsAction(payload);
|
|
92
65
|
if (!result.success) {
|
|
93
|
-
toast.error(result.error ?? '
|
|
66
|
+
toast.error(result.error ?? t('settings.failedToSave'));
|
|
94
67
|
}
|
|
95
68
|
});
|
|
96
69
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
{
|
|
159
|
-
key: 'mergeTimeout',
|
|
160
|
-
label: 'Merge',
|
|
161
|
-
defaultSeconds: 1800,
|
|
162
|
-
state: mergeTimeout,
|
|
163
|
-
setter: setMergeTimeout,
|
|
164
|
-
original: originalMergeTimeout,
|
|
165
|
-
},
|
|
166
|
-
];
|
|
167
|
-
const ANALYZE_REPO_FIELDS = [
|
|
168
|
-
{
|
|
169
|
-
key: 'analyzeRepoTimeout',
|
|
170
|
-
label: 'Analyze',
|
|
171
|
-
defaultSeconds: 600,
|
|
172
|
-
state: analyzeRepoTimeout,
|
|
173
|
-
setter: setAnalyzeRepoTimeout,
|
|
174
|
-
original: originalAnalyzeRepoTimeout,
|
|
175
|
-
},
|
|
176
|
-
];
|
|
177
|
-
return (_jsxs(Card, { id: "workflow", className: "scroll-mt-6", "data-testid": "workflow-settings-section", children: [_jsxs(CardHeader, { children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(GitBranch, { className: "text-muted-foreground h-4 w-4" }), _jsx(CardTitle, { children: "Workflow" })] }), isPending ? _jsx("span", { className: "text-muted-foreground text-xs", children: "Saving..." }) : null, showSaved && !isPending ? (_jsxs("span", { className: "flex items-center gap-1 text-xs text-green-600", children: [_jsx(Check, { className: "h-3 w-3" }), "Saved"] })) : null] }), _jsx(CardDescription, { children: "Configure PR behavior, approval gates, and CI settings" })] }), _jsxs(CardContent, { className: "space-y-4", children: [_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "open-pr", children: "Open PR on implementation complete" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Automatically create a pull request when the agent finishes" })] }), _jsx(Switch, { id: "open-pr", "data-testid": "switch-open-pr", checked: openPr, onCheckedChange: (v) => handleSwitchChange('openPr', setOpenPr, v) })] }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "push-on-complete", children: "Push on implementation complete" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Push the branch to remote when implementation is done" })] }), _jsx(Switch, { id: "push-on-complete", "data-testid": "switch-push-on-complete", checked: pushOnComplete, onCheckedChange: (v) => handleSwitchChange('pushOnComplete', setPushOnComplete, v) })] })] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsx("h3", { className: "text-sm font-semibold", children: "Approval Gates" }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "allow-prd", children: "PRD auto-approval" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Skip manual approval for product requirement documents" })] }), _jsx(Switch, { id: "allow-prd", "data-testid": "switch-allow-prd", checked: allowPrd, onCheckedChange: (v) => handleSwitchChange('allowPrd', setAllowPrd, v) })] }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "allow-plan", children: "Plan auto-approval" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Skip manual approval for implementation plans" })] }), _jsx(Switch, { id: "allow-plan", "data-testid": "switch-allow-plan", checked: allowPlan, onCheckedChange: (v) => handleSwitchChange('allowPlan', setAllowPlan, v) })] }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "allow-merge", children: "Merge auto-approval" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Skip manual approval for PR merges" })] }), _jsx(Switch, { id: "allow-merge", "data-testid": "switch-allow-merge", checked: allowMerge, onCheckedChange: (v) => handleSwitchChange('allowMerge', setAllowMerge, v) })] })] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsx("h3", { className: "text-sm font-semibold", children: "CI Settings" }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "ci-watch-enabled", children: "CI watch/fix loop" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Watch CI status after push and auto-fix failures. Disable to avoid GitHub API rate limits." })] }), _jsx(Switch, { id: "ci-watch-enabled", "data-testid": "switch-ci-watch-enabled", checked: ciWatchEnabled, onCheckedChange: (v) => handleSwitchChange('ciWatchEnabled', setCiWatchEnabled, v) })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "ci-max-fix", children: "Max fix attempts" }), _jsx(Input, { id: "ci-max-fix", "data-testid": "ci-max-fix-input", type: "text", inputMode: "numeric", pattern: "[0-9]*", min: 1, max: 10, placeholder: "e.g., 3", value: ciMaxFix, onChange: (e) => setCiMaxFix(e.target.value), onBlur: () => handleFieldBlur('ciMaxFix', ciMaxFix, originalCiMaxFix) }), _jsx("p", { className: "text-muted-foreground text-xs", children: "How many times the agent retries fixing CI failures" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "ci-timeout", children: "Watch timeout (seconds)" }), _jsx(Input, { id: "ci-timeout", "data-testid": "ci-timeout-input", type: "text", inputMode: "numeric", pattern: "[0-9]*", placeholder: "e.g., 300", value: ciTimeout, onChange: (e) => setCiTimeout(e.target.value), onBlur: () => handleFieldBlur('ciTimeout', ciTimeout, originalCiTimeout) }), _jsx("p", { className: "text-muted-foreground text-xs", children: "How long to wait for CI to complete before timing out" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "ci-log-max", children: "Max log characters" }), _jsx(Input, { id: "ci-log-max", "data-testid": "ci-log-max-input", type: "text", inputMode: "numeric", pattern: "[0-9]*", placeholder: "e.g., 50000", value: ciLogMax, onChange: (e) => setCiLogMax(e.target.value), onBlur: () => handleFieldBlur('ciLogMax', ciLogMax, originalCiLogMax) }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Maximum characters to capture from CI logs" })] }), _jsxs("div", { className: "space-y-1.5", children: [_jsx(Label, { htmlFor: "ci-poll-interval", children: "Poll interval (seconds)" }), _jsx(Input, { id: "ci-poll-interval", "data-testid": "ci-poll-interval-input", type: "text", inputMode: "numeric", pattern: "[0-9]*", placeholder: "e.g., 30", value: ciPollInterval, onChange: (e) => setCiPollInterval(e.target.value), onBlur: () => handleFieldBlur('ciPollInterval', ciPollInterval, originalCiPollInterval) }), _jsx("p", { className: "text-muted-foreground text-xs", children: "How often to poll GitHub for CI run status updates" })] }), _jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx(Label, { htmlFor: "hide-ci-status", children: "Hide CI Status" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Hide CI status badges from feature drawer and merge review" })] }), _jsx(Switch, { id: "hide-ci-status", "data-testid": "hide-ci-status-switch", checked: hideCiStatus, onCheckedChange: (v) => handleSwitchChange('hideCiStatus', setHideCiStatus, v) })] })] }), _jsx(Separator, {}), _jsxs("div", { className: "space-y-3", children: [_jsx("h3", { className: "text-sm font-semibold", children: "Stage Timeouts" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Maximum execution time per agent stage" }), _jsx("h4", { className: "text-muted-foreground text-xs font-semibold tracking-wider uppercase", children: "Feature Agent" }), FEATURE_AGENT_FIELDS.map((field) => (_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx(Label, { htmlFor: `stage-timeout-${field.key}`, children: field.label }), _jsx(TimeoutSlider, { id: `stage-timeout-${field.key}`, testId: `stage-timeout-${field.key}-input`, value: field.state, onChange: field.setter, onBlur: () => handleFieldBlur(field.key, field.state, field.original), defaultSeconds: field.defaultSeconds })] }, field.key))), _jsx("h4", { className: "text-muted-foreground pt-2 text-xs font-semibold tracking-wider uppercase", children: "Analyze Repository Agent" }), ANALYZE_REPO_FIELDS.map((field) => (_jsxs("div", { className: "flex items-center justify-between gap-4", children: [_jsx(Label, { htmlFor: `stage-timeout-${field.key}`, children: field.label }), _jsx(TimeoutSlider, { id: `stage-timeout-${field.key}`, testId: `stage-timeout-${field.key}-input`, value: field.state, onChange: field.setter, onBlur: () => handleFieldBlur(field.key, field.state, field.original), defaultSeconds: field.defaultSeconds })] }, field.key)))] })] })] }));
|
|
70
|
+
return (_jsxs(SettingsSection, { icon: GitBranch, title: t('settings.workflow.title'), description: t('settings.workflow.sectionDescription'), testId: "workflow-settings-section", tooltip: t('settings.workflow.hint'), tooltipLinks: [
|
|
71
|
+
{
|
|
72
|
+
label: t('settings.workflow.links.approvalGates'),
|
|
73
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/specs/016-hitl-approval-gates/spec.yaml',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
label: t('settings.workflow.links.pushAndPrFlags'),
|
|
77
|
+
href: 'https://github.com/jrmatherly/shipit/blob/main/specs/037-feature-pr-push-flags/spec.yaml',
|
|
78
|
+
},
|
|
79
|
+
], children: [_jsx(SwitchRow, { label: t('settings.workflow.defaultFastMode'), description: t('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: defaultFastMode, onChange: (v) => {
|
|
80
|
+
setDefaultFastMode(v);
|
|
81
|
+
save(buildWorkflowPayload(getState(), { defaultFastMode: v }));
|
|
82
|
+
} }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.approve') }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePrd'), description: t('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: allowPrd, onChange: (v) => {
|
|
83
|
+
setAllowPrd(v);
|
|
84
|
+
save(buildWorkflowPayload(getState(), { allowPrd: v }));
|
|
85
|
+
} }), _jsx(SwitchRow, { label: t('settings.workflow.autoApprovePlan'), description: t('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: allowPlan, onChange: (v) => {
|
|
86
|
+
setAllowPlan(v);
|
|
87
|
+
save(buildWorkflowPayload(getState(), { allowPlan: v }));
|
|
88
|
+
} }), _jsx(SwitchRow, { label: t('settings.workflow.autoApproveMerge'), description: t('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: allowMerge, onChange: (v) => {
|
|
89
|
+
setAllowMerge(v);
|
|
90
|
+
save(buildWorkflowPayload(getState(), { allowMerge: v }));
|
|
91
|
+
} }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.evidence') }), _jsx(SwitchRow, { label: t('settings.workflow.collectEvidence'), description: t('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: enableEvidence, onChange: (v) => {
|
|
92
|
+
setEnableEvidence(v);
|
|
93
|
+
if (!v) {
|
|
94
|
+
setCommitEvidence(false);
|
|
95
|
+
save(buildWorkflowPayload(getState(), { enableEvidence: v, commitEvidence: false }));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
save(buildWorkflowPayload(getState(), { enableEvidence: v }));
|
|
99
|
+
}
|
|
100
|
+
} }), _jsx(SwitchRow, { label: t('settings.workflow.addEvidenceToPr'), description: t('settings.workflow.addEvidenceToPrDescription'), tooltip: "Attaches collected evidence artifacts (screenshots, logs) directly to the pull request description.", id: "commit-evidence", testId: "switch-commit-evidence", checked: commitEvidence, disabled: !enableEvidence || !openPr, onChange: (v) => {
|
|
101
|
+
setCommitEvidence(v);
|
|
102
|
+
save(buildWorkflowPayload(getState(), { commitEvidence: v }));
|
|
103
|
+
} }), _jsx(SubsectionLabel, { children: t('settings.workflow.subsections.git') }), _jsx(SwitchRow, { label: t('settings.workflow.pushOnComplete'), description: t('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: pushOnComplete, onChange: (v) => {
|
|
104
|
+
setPushOnComplete(v);
|
|
105
|
+
save(buildWorkflowPayload(getState(), { pushOnComplete: v }));
|
|
106
|
+
} }), _jsx(SwitchRow, { label: t('settings.workflow.openPrOnComplete'), description: t('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: openPr, onChange: (v) => {
|
|
107
|
+
setOpenPr(v);
|
|
108
|
+
if (!v) {
|
|
109
|
+
setCommitEvidence(false);
|
|
110
|
+
save(buildWorkflowPayload(getState(), { openPr: v, commitEvidence: false }));
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
save(buildWorkflowPayload(getState(), { openPr: v }));
|
|
114
|
+
}
|
|
115
|
+
} }), _jsx(SwitchRow, { label: t('settings.workflow.watchCiAfterPush'), description: t('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: ciWatchEnabled, onChange: (v) => {
|
|
116
|
+
setCiWatchEnabled(v);
|
|
117
|
+
save(buildWorkflowPayload(getState(), { ciWatchEnabled: v }));
|
|
118
|
+
} }), _jsx(SubsectionLabel, { children: "Archive" }), _jsx(SwitchRow, { 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: autoArchiveEnabled, onChange: (v) => {
|
|
119
|
+
setAutoArchiveEnabled(v);
|
|
120
|
+
save(buildWorkflowPayload(getState(), { autoArchiveEnabled: v }));
|
|
121
|
+
} }), _jsx(SettingsRow, { 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: _jsx(NumberStepper, { id: "auto-archive-delay", testId: "input-auto-archive-delay", value: autoArchiveDelay, placeholder: "10", min: 1, max: 1440, suffix: "min", onChange: (v) => {
|
|
122
|
+
setAutoArchiveDelay(v);
|
|
123
|
+
}, onBlur: () => {
|
|
124
|
+
if (!autoArchiveEnabled)
|
|
125
|
+
return;
|
|
126
|
+
const n = parseInt(autoArchiveDelay, 10);
|
|
127
|
+
const clamped = Number.isNaN(n) ? 10 : Math.min(1440, Math.max(1, n));
|
|
128
|
+
setAutoArchiveDelay(String(clamped));
|
|
129
|
+
save(buildWorkflowPayload(getState(), { autoArchiveDelay: String(clamped) }));
|
|
130
|
+
} }) })] }));
|
|
178
131
|
}
|
|
@@ -12,5 +12,5 @@ export default meta;
|
|
|
12
12
|
type Story = StoryObj<typeof meta>;
|
|
13
13
|
export declare const Default: Story;
|
|
14
14
|
export declare const AllEnabled: Story;
|
|
15
|
-
export declare const
|
|
15
|
+
export declare const EvidenceDisabled: Story;
|
|
16
16
|
//# sourceMappingURL=workflow-settings-section.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-settings-section.stories.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/web/components/features/settings/workflow-settings-section.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAKtE,QAAA,MAAM,IAAI;;;;;;;CAOsC,CAAC;AAEjD,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAIrB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAqBxB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAW9B,CAAC"}
|
package/dist/src/presentation/web/components/features/settings/workflow-settings-section.stories.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { WorkflowSettingsSection } from './workflow-settings-section.js';
|
|
2
|
+
import { createDefaultSettings } from '../../../../../../packages/core/src/domain/factories/settings-defaults.factory.js';
|
|
3
|
+
const baseSettings = createDefaultSettings();
|
|
2
4
|
const meta = {
|
|
3
5
|
title: 'Features/Settings/WorkflowSettingsSection',
|
|
4
6
|
component: WorkflowSettingsSection,
|
|
@@ -10,80 +12,40 @@ const meta = {
|
|
|
10
12
|
export default meta;
|
|
11
13
|
export const Default = {
|
|
12
14
|
args: {
|
|
13
|
-
|
|
14
|
-
openPrOnImplementationComplete: false,
|
|
15
|
-
approvalGateDefaults: {
|
|
16
|
-
allowPrd: false,
|
|
17
|
-
allowPlan: false,
|
|
18
|
-
allowMerge: false,
|
|
19
|
-
pushOnImplementationComplete: false,
|
|
20
|
-
},
|
|
21
|
-
ciWatchEnabled: true,
|
|
22
|
-
enableEvidence: false,
|
|
23
|
-
commitEvidence: false,
|
|
24
|
-
defaultFastMode: true,
|
|
25
|
-
},
|
|
15
|
+
settings: baseSettings,
|
|
26
16
|
},
|
|
27
17
|
};
|
|
28
18
|
export const AllEnabled = {
|
|
29
19
|
args: {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
implementMs: 600000,
|
|
47
|
-
mergeMs: 600000,
|
|
20
|
+
settings: {
|
|
21
|
+
...baseSettings,
|
|
22
|
+
workflow: {
|
|
23
|
+
...baseSettings.workflow,
|
|
24
|
+
openPrOnImplementationComplete: true,
|
|
25
|
+
approvalGateDefaults: {
|
|
26
|
+
allowPrd: true,
|
|
27
|
+
allowPlan: true,
|
|
28
|
+
allowMerge: true,
|
|
29
|
+
pushOnImplementationComplete: true,
|
|
30
|
+
},
|
|
31
|
+
enableEvidence: true,
|
|
32
|
+
commitEvidence: true,
|
|
33
|
+
ciWatchEnabled: true,
|
|
34
|
+
defaultFastMode: true,
|
|
35
|
+
autoArchiveDelayMinutes: 15,
|
|
48
36
|
},
|
|
49
|
-
analyzeRepoTimeouts: {
|
|
50
|
-
analyzeMs: 600000,
|
|
51
|
-
},
|
|
52
|
-
ciWatchEnabled: true,
|
|
53
|
-
enableEvidence: true,
|
|
54
|
-
commitEvidence: true,
|
|
55
|
-
defaultFastMode: true,
|
|
56
37
|
},
|
|
57
38
|
},
|
|
58
39
|
};
|
|
59
|
-
export const
|
|
40
|
+
export const EvidenceDisabled = {
|
|
60
41
|
args: {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
pushOnImplementationComplete: false,
|
|
68
|
-
},
|
|
69
|
-
ciMaxFixAttempts: 5,
|
|
70
|
-
ciWatchTimeoutMs: 600000,
|
|
71
|
-
ciLogMaxChars: 100000,
|
|
72
|
-
stageTimeouts: {
|
|
73
|
-
analyzeMs: 1200000,
|
|
74
|
-
requirementsMs: 1200000,
|
|
75
|
-
researchMs: 1200000,
|
|
76
|
-
planMs: 1200000,
|
|
77
|
-
implementMs: 1200000,
|
|
78
|
-
mergeMs: 1200000,
|
|
79
|
-
},
|
|
80
|
-
analyzeRepoTimeouts: {
|
|
81
|
-
analyzeMs: 1200000,
|
|
42
|
+
settings: {
|
|
43
|
+
...baseSettings,
|
|
44
|
+
workflow: {
|
|
45
|
+
...baseSettings.workflow,
|
|
46
|
+
enableEvidence: false,
|
|
47
|
+
commitEvidence: false,
|
|
82
48
|
},
|
|
83
|
-
ciWatchEnabled: true,
|
|
84
|
-
enableEvidence: false,
|
|
85
|
-
commitEvidence: false,
|
|
86
|
-
defaultFastMode: true,
|
|
87
49
|
},
|
|
88
50
|
},
|
|
89
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIvD,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,iBAAS,eAAe,CAAC,EACvB,aAAgC,EAChC,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,2CAQxD;AAED,iBAAS,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEhF;AAED,iBAAS,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAE1F;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,UAAc,EACd,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/web/components/ui/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIvD,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,iBAAS,eAAe,CAAC,EACvB,aAAgC,EAChC,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,2CAQxD;AAED,iBAAS,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEhF;AAED,iBAAS,cAAc,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAE1F;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,UAAc,EACd,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAgBvD;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { Tooltip as TooltipPrimitive } from 'radix-ui';
|
|
4
4
|
import { cn } from '../../lib/utils.js';
|
|
5
5
|
/** Default tooltip hover delay (ms) for canvas nodes and UI controls. */
|
|
@@ -13,7 +13,7 @@ function Tooltip({ ...props }) {
|
|
|
13
13
|
function TooltipTrigger({ ...props }) {
|
|
14
14
|
return _jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
15
15
|
}
|
|
16
|
-
function TooltipContent({ className, sideOffset =
|
|
17
|
-
return (_jsx(TooltipPrimitive.Portal, { children:
|
|
16
|
+
function TooltipContent({ className, sideOffset = 4, children, ...props }) {
|
|
17
|
+
return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset: sideOffset, className: cn('glass-blur editorial-shadow text-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-lg px-3 py-2 text-xs text-balance', className), ...props, children: children }) }));
|
|
18
18
|
}
|
|
19
19
|
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|