@shipit-ai/cli 1.174.0 → 1.174.1-pr20.dba624c

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.
Files changed (187) hide show
  1. package/dist/packages/core/src/infrastructure/services/tool-installer/tools/codex-cli.json +1 -1
  2. package/dist/tsconfig.build.tsbuildinfo +1 -1
  3. package/package.json +6 -6
  4. package/web/.next/BUILD_ID +1 -1
  5. package/web/.next/build-manifest.json +3 -3
  6. package/web/.next/fallback-build-manifest.json +3 -3
  7. package/web/.next/prerender-manifest.json +3 -3
  8. package/web/.next/required-server-files.js +3 -3
  9. package/web/.next/required-server-files.json +3 -3
  10. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +29 -29
  11. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  12. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  13. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +27 -27
  14. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  15. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  16. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +31 -31
  17. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  18. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  19. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  20. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  21. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  22. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +37 -37
  23. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  24. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  25. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  26. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  29. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  30. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  31. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +27 -27
  32. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  33. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  34. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +31 -31
  35. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  36. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  37. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +37 -37
  38. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +37 -37
  41. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  42. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  43. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +27 -27
  44. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  45. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  46. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +28 -28
  47. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  48. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  49. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +28 -28
  50. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/_global-error.html +1 -1
  53. package/web/.next/server/app/_global-error.rsc +1 -1
  54. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  56. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  57. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  58. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  59. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +6 -6
  60. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  61. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  63. package/web/.next/server/app/api/dialog/pick-files/route.js.nft.json +1 -1
  64. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  65. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  66. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  67. package/web/.next/server/app/mcp-servers/page/server-reference-manifest.json +13 -13
  68. package/web/.next/server/app/mcp-servers/page.js.nft.json +1 -1
  69. package/web/.next/server/app/mcp-servers/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/plugins/page/server-reference-manifest.json +15 -15
  71. package/web/.next/server/app/plugins/page.js.nft.json +1 -1
  72. package/web/.next/server/app/plugins/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/settings/page/server-reference-manifest.json +12 -12
  74. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  75. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/skills/page/server-reference-manifest.json +11 -11
  77. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  78. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/tools/page/server-reference-manifest.json +11 -11
  80. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  81. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/version/page/server-reference-manifest.json +6 -6
  83. package/web/.next/server/app/version/page.js.nft.json +1 -1
  84. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  85. package/web/.next/server/chunks/[root-of-the-server]__0tb~wwk._.js +1 -1
  86. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js +1 -1
  87. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_create-drawer-client_tsx_0g70fc5._.js.map +1 -1
  88. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js +2 -2
  89. package/web/.next/server/chunks/ssr/0j.8_web_components_common_control-center-drawer_feature-drawer-client_tsx_104cna.._.js.map +1 -1
  90. package/web/.next/server/chunks/ssr/0j.8_web_components_features_mcp-servers_mcp-servers-page-client_tsx_0dda8ih._.js +1 -1
  91. package/web/.next/server/chunks/ssr/0j.8_web_components_features_mcp-servers_mcp-servers-page-client_tsx_0dda8ih._.js.map +1 -1
  92. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js +1 -1
  93. package/web/.next/server/chunks/ssr/0ukq_presentation_web_components_features_settings_settings-page-client_tsx_0j1uius._.js.map +1 -1
  94. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js +1 -1
  95. package/web/.next/server/chunks/ssr/11y9_components_common_control-center-drawer_repository-drawer-client_tsx_09z.znp._.js.map +1 -1
  96. package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js +1 -1
  97. package/web/.next/server/chunks/ssr/[root-of-the-server]__0.5ojmt._.js.map +1 -1
  98. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js +1 -1
  99. package/web/.next/server/chunks/ssr/[root-of-the-server]__05_qc0n._.js.map +1 -1
  100. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js +1 -1
  101. package/web/.next/server/chunks/ssr/[root-of-the-server]__0ge~xny._.js.map +1 -1
  102. package/web/.next/server/chunks/ssr/[root-of-the-server]__0mwao26._.js +1 -1
  103. package/web/.next/server/chunks/ssr/[root-of-the-server]__0mwao26._.js.map +1 -1
  104. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js +1 -1
  105. package/web/.next/server/chunks/ssr/[root-of-the-server]__0qda~yi._.js.map +1 -1
  106. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rv1gci._.js +1 -1
  107. package/web/.next/server/chunks/ssr/[root-of-the-server]__0tq2syh._.js +1 -1
  108. package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js +1 -1
  109. package/web/.next/server/chunks/ssr/[root-of-the-server]__0t~u8sd._.js.map +1 -1
  110. package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js +1 -1
  111. package/web/.next/server/chunks/ssr/[root-of-the-server]__10tll_l._.js.map +1 -1
  112. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js +1 -1
  113. package/web/.next/server/chunks/ssr/[root-of-the-server]__12j29w-._.js.map +1 -1
  114. package/web/.next/server/chunks/ssr/{_0bknjp-._.js → _01.73dm._.js} +2 -2
  115. package/web/.next/server/chunks/ssr/{_0bknjp-._.js.map → _01.73dm._.js.map} +1 -1
  116. package/web/.next/server/chunks/ssr/_01sesw0._.js +1 -1
  117. package/web/.next/server/chunks/ssr/_01sesw0._.js.map +1 -1
  118. package/web/.next/server/chunks/ssr/_069y.js._.js +2 -2
  119. package/web/.next/server/chunks/ssr/_069y.js._.js.map +1 -1
  120. package/web/.next/server/chunks/ssr/_0__4si~._.js +1 -1
  121. package/web/.next/server/chunks/ssr/_0__4si~._.js.map +1 -1
  122. package/web/.next/server/chunks/ssr/_0_m17kl._.js +1 -1
  123. package/web/.next/server/chunks/ssr/_0_m17kl._.js.map +1 -1
  124. package/web/.next/server/chunks/ssr/{_087x~el._.js → _0ajzmj-._.js} +2 -2
  125. package/web/.next/server/chunks/ssr/{_087x~el._.js.map → _0ajzmj-._.js.map} +1 -1
  126. package/web/.next/server/chunks/ssr/_0d4miu.._.js +1 -1
  127. package/web/.next/server/chunks/ssr/_0d4miu.._.js.map +1 -1
  128. package/web/.next/server/chunks/ssr/_0e8ern9._.js +1 -1
  129. package/web/.next/server/chunks/ssr/_0e8ern9._.js.map +1 -1
  130. package/web/.next/server/chunks/ssr/_0fswe4r._.js +1 -1
  131. package/web/.next/server/chunks/ssr/_0fswe4r._.js.map +1 -1
  132. package/web/.next/server/chunks/ssr/{_0glox21._.js → _0mbb.7k._.js} +2 -2
  133. package/web/.next/server/chunks/ssr/{_0glox21._.js.map → _0mbb.7k._.js.map} +1 -1
  134. package/web/.next/server/chunks/ssr/_0p3~u8u._.js +2 -2
  135. package/web/.next/server/chunks/ssr/_0p3~u8u._.js.map +1 -1
  136. package/web/.next/server/chunks/ssr/_0r.3n~3._.js +1 -1
  137. package/web/.next/server/chunks/ssr/_0r.3n~3._.js.map +1 -1
  138. package/web/.next/server/chunks/ssr/_0t59q8r._.js +1 -1
  139. package/web/.next/server/chunks/ssr/_0t59q8r._.js.map +1 -1
  140. package/web/.next/server/chunks/ssr/_0vq0c0x._.js +1 -1
  141. package/web/.next/server/chunks/ssr/_0vq0c0x._.js.map +1 -1
  142. package/web/.next/server/chunks/ssr/_0vyfc4b._.js +1 -1
  143. package/web/.next/server/chunks/ssr/_0vyfc4b._.js.map +1 -1
  144. package/web/.next/server/chunks/ssr/_0w-_hww._.js +1 -1
  145. package/web/.next/server/chunks/ssr/_0w-_hww._.js.map +1 -1
  146. package/web/.next/server/chunks/ssr/_0zk-h5w._.js +1 -1
  147. package/web/.next/server/chunks/ssr/_0zk-h5w._.js.map +1 -1
  148. package/web/.next/server/chunks/ssr/_0~7lwu_._.js +1 -1
  149. package/web/.next/server/chunks/ssr/_0~7lwu_._.js.map +1 -1
  150. package/web/.next/server/chunks/ssr/_1161g9x._.js +1 -1
  151. package/web/.next/server/chunks/ssr/_1161g9x._.js.map +1 -1
  152. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_mcp-servers_page_actions_0d.r4q..js +1 -1
  153. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_mcp-servers_page_actions_0d.r4q..js.map +1 -1
  154. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js +1 -1
  155. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_plugins_page_actions_0rdndum.js.map +1 -1
  156. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js +1 -1
  157. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_05m2q~u.js.map +1 -1
  158. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js +1 -1
  159. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_0.6zk.t.js.map +1 -1
  160. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_0pjb_re._.js +1 -1
  161. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_0w2wqvu._.js +1 -1
  162. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js +1 -1
  163. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_0l3oxx9._.js.map +1 -1
  164. package/web/.next/server/middleware-build-manifest.js +3 -3
  165. package/web/.next/server/pages/500.html +1 -1
  166. package/web/.next/server/server-reference-manifest.js +1 -1
  167. package/web/.next/server/server-reference-manifest.json +57 -57
  168. package/web/.next/static/chunks/{0fzx4yzxqtc6v.js → 0-m4rnec155i1.js} +1 -1
  169. package/web/.next/static/chunks/{11v7w0zh-u9s8.js → 02940.vqpqt~w.js} +1 -1
  170. package/web/.next/static/chunks/{0q1rh6cwq8q~e.js → 094xbjw.1t41_.js} +1 -1
  171. package/web/.next/static/chunks/{0djvgyu139qht.js → 0_bfubsp9neaf.js} +1 -1
  172. package/web/.next/static/chunks/{0etn4uwpbu0p..js → 0g304jt8qhu-~.js} +1 -1
  173. package/web/.next/static/chunks/{0ou6vmrmvv4.f.js → 0k4d8i58i.mo0.js} +1 -1
  174. package/web/.next/static/chunks/{0c.5-5ohi38wu.js → 0lb_dekd7d4xu.js} +1 -1
  175. package/web/.next/static/chunks/{030tqac1cx-fj.js → 0lc14m5evyhuu.js} +1 -1
  176. package/web/.next/static/chunks/{11n8b8mq7xbv9.js → 0lt_ok~0hysqu.js} +1 -1
  177. package/web/.next/static/chunks/{0w9~abfpfmxwe.js → 0nct2gnbj84mf.js} +1 -1
  178. package/web/.next/static/chunks/{113fyg.4c74k~.js → 0nm97zmm.ri8o.js} +1 -1
  179. package/web/.next/static/chunks/{0iey6w_th4w6t.js → 0y~7z3sw~k~a3.js} +1 -1
  180. package/web/.next/static/chunks/{164.6ma3h~kkp.js → 0~5w460yes32a.js} +2 -2
  181. package/web/.next/static/chunks/{093...bdsa2vi.js → 13wohdlnw9eid.js} +1 -1
  182. package/web/.next/static/chunks/{0mukkm1m79wpt.js → 15lkkh2eg.w0h.js} +1 -1
  183. package/web/.next/static/chunks/{0zwhmf.myybu0.js → 15qu-.zhd9f48.js} +3 -3
  184. package/web/public/icons/tools/openai.svg +1 -0
  185. /package/web/.next/static/{G6UvAet1r3tmTZHz91Byx → MgGhOZyXLY0dmh1EnLE2U}/_buildManifest.js +0 -0
  186. /package/web/.next/static/{G6UvAet1r3tmTZHz91Byx → MgGhOZyXLY0dmh1EnLE2U}/_clientMiddlewareManifest.js +0 -0
  187. /package/web/.next/static/{G6UvAet1r3tmTZHz91Byx → MgGhOZyXLY0dmh1EnLE2U}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/external-link.ts","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../../src/presentation/web/components/common/base-drawer/index.ts","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-switch%401.2.6_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.14__%40types%2Breact_e3738c514c10df2ef7e24af5ee461853/node_modules/%40radix-ui/react-switch/dist/index.mjs","../../../../../../../src/presentation/web/components/ui/switch.tsx","../../../../../../../src/presentation/web/components/ui/card.tsx","../../../../../../../src/presentation/web/components/common/empty-state/empty-state.tsx","../../../../../../../src/presentation/web/components/common/page-header/page-header.tsx","../../../../../../../src/presentation/web/components/features/plugins/plugins-page-client.tsx","../../../../../../../src/presentation/web/components/features/plugins/plugin-card.tsx","../../../../../../../src/presentation/web/components/features/plugins/plugin-detail-drawer.tsx","../../../../../../../src/presentation/web/app/actions/data%3A1ee2ae%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A0fc95c%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A856c58%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A1248ef%20%3Ctext/javascript%3E"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19h8', key: 'baeox8' }],\n ['path', { d: 'm4 17 6-6-6-6', key: '1yngyt' }],\n];\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTloOCIgLz4KICA8cGF0aCBkPSJtNCAxNyA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Terminal = createLucideIcon('terminal', __iconNode);\n\nexport default Terminal;\n","export { BaseDrawer, type BaseDrawerProps } from './base-drawer';\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 rtl:data-[state=checked]:-translate-x-[calc(100%-2px)]'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\n/*\n * Card — shadcn primitive extended with Stitch's editorial-shadow utility.\n * The `editorial-shadow` class (globals.css) replaces the old `shadow` class\n * with a subtle shadow + ring combination that gives cards a \"lifted\" look\n * and renders consistently against the editorial surface palette in both\n * light and dark modes. The `border` class stays for explicit border visibility\n * in dense grids; editorial-shadow's ring provides the soft lift on top.\n */\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('bg-card text-card-foreground editorial-shadow rounded-xl border', className)}\n {...props}\n />\n )\n);\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('leading-none font-semibold tracking-tight', className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n )\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import type { ReactNode, HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center gap-4 px-4 py-12 text-center', className)}\n {...props}\n >\n {icon ? <div className=\"text-muted-foreground\">{icon}</div> : null}\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description ? <p className=\"text-muted-foreground max-w-md text-sm\">{description}</p> : null}\n {action ? <div className=\"mt-2\">{action}</div> : null}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n /** Optional eyebrow label above the title (e.g., \"DEVELOPER PORTAL\") */\n eyebrow?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\n/*\n * PageHeader — Stitch editorial page header pattern.\n * Renders: tiny uppercase eyebrow → large bold title → muted description.\n * Matches the tools-page-client.tsx header treatment.\n * See .scratchpad/stitch/shipit-developer-portal/src/App.tsx:161\n */\nexport function PageHeader({ title, description, eyebrow, children, className }: PageHeaderProps) {\n return (\n <header className={cn('flex items-center justify-between gap-4', className)}>\n <div className=\"space-y-1.5\">\n {eyebrow ? (\n <span className=\"text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase\">\n {eyebrow}\n </span>\n ) : null}\n <div className=\"flex items-baseline gap-3\">\n <h1 className=\"text-foreground text-3xl font-black tracking-tight\">{title}</h1>\n </div>\n {description ? (\n <p className=\"text-muted-foreground text-sm font-medium\">{description}</p>\n ) : null}\n </div>\n {children ? <div data-slot=\"actions\">{children}</div> : null}\n </header>\n );\n}\n","'use client';\n\nimport { useState, useMemo, useEffect, useTransition } from 'react';\nimport { Search, Blocks, AlertCircle } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { PageHeader } from '@/components/common/page-header';\nimport { EmptyState } from '@/components/common/empty-state';\nimport { PluginCard } from './plugin-card';\nimport { PluginDetailDrawer } from './plugin-detail-drawer';\nimport { useTranslation } from 'react-i18next';\nimport { fetchPluginCatalogAction } from '@/app/actions/fetch-plugin-catalog';\nimport { installPluginAction } from '@/app/actions/install-plugin';\nimport { uninstallPluginAction } from '@/app/actions/uninstall-plugin';\nimport { togglePluginAction } from '@/app/actions/toggle-plugin';\nimport type {\n PluginMarketplaceEntry,\n InstalledPlugin,\n} from '@shipit-ai/core/application/ports/output/services/plugin-marketplace.interface';\n\nexport interface PluginsPageClientProps {\n proxyConfigured: boolean;\n isClaudeCode: boolean;\n}\n\nexport function PluginsPageClient({ proxyConfigured, isClaudeCode }: PluginsPageClientProps) {\n const { t } = useTranslation('web');\n const [, startTransition] = useTransition();\n const [searchQuery, setSearchQuery] = useState('');\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [statusFilter, setStatusFilter] = useState<'installed' | 'not-installed' | null>(null);\n const [selectedPlugin, setSelectedPlugin] = useState<PluginMarketplaceEntry | null>(null);\n const [plugins, setPlugins] = useState<PluginMarketplaceEntry[]>([]);\n const [installedPlugins, setInstalledPlugins] = useState<InstalledPlugin[]>([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (!proxyConfigured) {\n setLoading(false);\n return;\n }\n fetchPluginCatalogAction().then((result) => {\n setPlugins(result.plugins);\n setInstalledPlugins(result.installedPlugins);\n setLoading(false);\n });\n }, [proxyConfigured]);\n\n const categories = useMemo(() => {\n const cats = new Set<string>();\n for (const p of plugins) {\n if (p.category) cats.add(p.category);\n }\n return Array.from(cats).sort();\n }, [plugins]);\n\n const filteredPlugins = useMemo(() => {\n const query = searchQuery.toLowerCase();\n return plugins.filter((p) => {\n if (activeCategory && p.category !== activeCategory) return false;\n if (statusFilter) {\n const isInstalled = !!installedPlugins.find((ip) => ip.id.startsWith(`${p.name}@`));\n if (statusFilter === 'installed' && !isInstalled) return false;\n if (statusFilter === 'not-installed' && isInstalled) return false;\n }\n if (query) {\n const matchesName = p.name.toLowerCase().includes(query);\n const matchesDescription = p.description.toLowerCase().includes(query);\n if (!matchesName && !matchesDescription) return false;\n }\n return true;\n });\n }, [plugins, searchQuery, activeCategory, statusFilter, installedPlugins]);\n\n const getInstalled = (pluginName: string) =>\n installedPlugins.find((ip) => ip.id.startsWith(`${pluginName}@`));\n\n const handleInstall = (pluginName: string) => {\n startTransition(async () => {\n const result = await installPluginAction(pluginName, 'default');\n if (result.success) {\n toast.success(`${pluginName} installed`);\n const catalog = await fetchPluginCatalogAction();\n setInstalledPlugins(catalog.installedPlugins);\n } else {\n toast.error(result.error ?? 'Installation failed');\n }\n });\n };\n\n const handleUninstall = (pluginName: string) => {\n startTransition(async () => {\n const result = await uninstallPluginAction(pluginName, 'default');\n if (result.success) {\n toast.success(`${pluginName} uninstalled`);\n const catalog = await fetchPluginCatalogAction();\n setInstalledPlugins(catalog.installedPlugins);\n } else {\n toast.error(result.error ?? 'Uninstallation failed');\n }\n });\n };\n\n const handleToggle = (pluginName: string, enabled: boolean) => {\n startTransition(async () => {\n const result = await togglePluginAction(pluginName, 'default', enabled);\n if (result.success) {\n toast.success(`${pluginName} ${enabled ? 'enabled' : 'disabled'}`);\n const catalog = await fetchPluginCatalogAction();\n setInstalledPlugins(catalog.installedPlugins);\n } else {\n toast.error(result.error ?? 'Toggle failed');\n }\n });\n };\n\n if (!isClaudeCode) {\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n <EmptyState icon={<AlertCircle className=\"size-10\" />} title={t('plugins.wrongAgent')} />\n </div>\n );\n }\n\n if (!proxyConfigured) {\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n <EmptyState icon={<AlertCircle className=\"size-10\" />} title={t('plugins.noProxy')} />\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n <div className=\"text-muted-foreground text-center text-sm\">\n {t('accessibility.loading')}...\n </div>\n </div>\n );\n }\n\n if (plugins.length === 0) {\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n <EmptyState icon={<Blocks className=\"size-10\" />} title={t('plugins.emptyState')} />\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2\" />\n <Input\n placeholder={t('plugins.searchPlaceholder')}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"ps-9\"\n data-testid=\"plugin-search\"\n />\n </div>\n\n {/* Filter pills */}\n <div className=\"flex flex-wrap items-center gap-4\">\n {/* Category */}\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant={activeCategory === null ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setActiveCategory(null)}\n >\n {t('plugins.allCategories')}\n </Button>\n {categories.map((cat) => (\n <Button\n key={cat}\n variant={activeCategory === cat ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setActiveCategory(cat === activeCategory ? null : cat)}\n >\n {cat}\n </Button>\n ))}\n </div>\n\n <div className=\"bg-border h-6 w-px\" />\n\n {/* Status */}\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant={statusFilter === null ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setStatusFilter(null)}\n >\n All Status\n </Button>\n <Button\n variant={statusFilter === 'installed' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setStatusFilter(statusFilter === 'installed' ? null : 'installed')}\n >\n {t('plugins.installed')}\n </Button>\n <Button\n variant={statusFilter === 'not-installed' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() =>\n setStatusFilter(statusFilter === 'not-installed' ? null : 'not-installed')\n }\n >\n {t('plugins.notInstalled')}\n </Button>\n </div>\n </div>\n\n {/* Plugin grid */}\n {filteredPlugins.length > 0 ? (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredPlugins.map((plugin) => (\n <PluginCard\n key={plugin.name}\n plugin={plugin}\n installed={getInstalled(plugin.name)}\n onSelect={setSelectedPlugin}\n onToggle={handleToggle}\n />\n ))}\n </div>\n ) : (\n <EmptyState\n icon={<Search className=\"size-10\" />}\n title={t('plugins.emptyState')}\n action={\n <Button\n variant=\"outline\"\n onClick={() => {\n setSearchQuery('');\n setActiveCategory(null);\n setStatusFilter(null);\n }}\n >\n {t('plugins.clearFilters')}\n </Button>\n }\n />\n )}\n\n {/* Detail drawer */}\n <PluginDetailDrawer\n plugin={selectedPlugin}\n installed={selectedPlugin ? getInstalled(selectedPlugin.name) : undefined}\n open={!!selectedPlugin}\n onClose={() => setSelectedPlugin(null)}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n}\n","'use client';\n\nimport { Card } from '@/components/ui/card';\nimport { Badge } from '@/components/ui/badge';\nimport { Switch } from '@/components/ui/switch';\nimport type {\n PluginMarketplaceEntry,\n InstalledPlugin,\n} from '@shipit-ai/core/application/ports/output/services/plugin-marketplace.interface';\nimport { useTranslation } from 'react-i18next';\n\nexport interface PluginCardProps {\n plugin: PluginMarketplaceEntry;\n installed?: InstalledPlugin;\n onSelect: (plugin: PluginMarketplaceEntry) => void;\n onToggle?: (pluginName: string, enabled: boolean) => void;\n}\n\nexport function PluginCard({ plugin, installed, onSelect, onToggle }: PluginCardProps) {\n const { t } = useTranslation('web');\n\n return (\n <Card\n className=\"cursor-pointer p-5 transition-all duration-300 hover:scale-[1.02] hover:shadow-md hover:ring-slate-300 dark:hover:ring-slate-600\"\n role=\"button\"\n tabIndex={0}\n onClick={() => onSelect(plugin)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(plugin);\n }\n }}\n data-testid={`plugin-card-${plugin.name}`}\n >\n <h3 className=\"text-foreground text-sm leading-tight font-bold tracking-tight\">\n {plugin.name}\n </h3>\n\n {plugin.version ? (\n <p className=\"text-muted-foreground mt-1 font-mono text-xs\">v{plugin.version}</p>\n ) : null}\n\n <p className=\"text-muted-foreground mt-3 line-clamp-2 text-xs leading-relaxed\">\n {plugin.description}\n </p>\n\n <div className=\"mt-4 flex flex-wrap items-center gap-1.5\">\n {plugin.category ? <Badge variant=\"outline\">{plugin.category}</Badge> : null}\n {installed ? (\n <Badge variant=\"secondary\">{t('plugins.installed')}</Badge>\n ) : (\n <Badge variant=\"outline\" className=\"opacity-50\">\n {t('plugins.notInstalled')}\n </Badge>\n )}\n </div>\n\n {installed ? (\n <div\n className=\"mt-3 flex items-center gap-2\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Switch\n checked={installed.enabled}\n onCheckedChange={(checked) => onToggle?.(plugin.name, checked)}\n data-testid={`plugin-toggle-${plugin.name}`}\n />\n <span className=\"text-muted-foreground text-xs\">\n {installed.enabled ? t('plugins.disable') : t('plugins.enable')}\n </span>\n </div>\n ) : null}\n </Card>\n );\n}\n","'use client';\n\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport { Separator } from '@/components/ui/separator';\nimport { ExternalLink } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport type {\n PluginMarketplaceEntry,\n InstalledPlugin,\n} from '@shipit-ai/core/application/ports/output/services/plugin-marketplace.interface';\n\nexport interface PluginDetailDrawerProps {\n plugin: PluginMarketplaceEntry | null;\n installed?: InstalledPlugin;\n open: boolean;\n onClose: () => void;\n onInstall?: (pluginName: string) => void;\n onUninstall?: (pluginName: string) => void;\n}\n\nfunction getSourceUrl(plugin: PluginMarketplaceEntry): string | null {\n const { source } = plugin;\n if (source.source === 'github' && source.repo) {\n return `https://github.com/${source.repo}`;\n }\n if ((source.source === 'url' || source.source === 'git-subdir') && source.url) {\n try {\n const url = new URL(source.url);\n if (url.protocol === 'https:') return source.url;\n } catch {\n // Invalid URL — don't render as link\n }\n }\n return null;\n}\n\nexport function PluginDetailDrawer({\n plugin,\n installed,\n open,\n onClose,\n onInstall,\n onUninstall,\n}: PluginDetailDrawerProps) {\n const { t } = useTranslation('web');\n\n if (!plugin) return null;\n\n const sourceUrl = getSourceUrl(plugin);\n\n return (\n <BaseDrawer open={open} onClose={onClose}>\n <DrawerTitle className=\"text-foreground text-lg font-bold tracking-tight\">\n {plugin.name}\n </DrawerTitle>\n <DrawerDescription className=\"text-muted-foreground mt-1 text-sm\">\n {plugin.description}\n </DrawerDescription>\n\n <Separator className=\"my-4\" />\n\n <div className=\"space-y-3\">\n {plugin.version ? (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground text-sm\">{t('plugins.version')}</span>\n <span className=\"font-mono text-sm\">v{plugin.version}</span>\n </div>\n ) : null}\n\n {plugin.category ? (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground text-sm\">{t('plugins.category')}</span>\n <Badge variant=\"outline\">{plugin.category}</Badge>\n </div>\n ) : null}\n\n {sourceUrl ? (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground text-sm\">{t('plugins.source')}</span>\n <a\n href={sourceUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:text-primary/80 inline-flex items-center gap-1 text-sm underline underline-offset-2\"\n >\n {plugin.source.repo ?? 'Repository'}\n <ExternalLink className=\"size-3\" />\n </a>\n </div>\n ) : null}\n\n {plugin.keywords && plugin.keywords.length > 0 ? (\n <div className=\"flex flex-wrap gap-1.5 pt-2\">\n {plugin.keywords.map((kw) => (\n <Badge key={kw} variant=\"outline\" className=\"text-xs\">\n {kw}\n </Badge>\n ))}\n </div>\n ) : null}\n </div>\n\n <Separator className=\"my-4\" />\n\n <div className=\"flex gap-2\">\n {installed ? (\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => onUninstall?.(plugin.name)}\n data-testid=\"plugin-uninstall-button\"\n >\n {t('plugins.uninstall')}\n </Button>\n ) : (\n <Button\n size=\"sm\"\n onClick={() => onInstall?.(plugin.name)}\n data-testid=\"plugin-install-button\"\n >\n {t('plugins.install')}\n </Button>\n )}\n </div>\n </BaseDrawer>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"0056adde2335dbad34baa2f15ab49f46ac803f2279\":{\"name\":\"fetchPluginCatalogAction\"}},\"src/presentation/web/app/actions/fetch-plugin-catalog.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"0056adde2335dbad34baa2f15ab49f46ac803f2279\",callServer,void 0,findSourceMapURL,\"fetchPluginCatalogAction\");export{$$RSC_SERVER_ACTION_0 as fetchPluginCatalogAction};","/* __next_internal_action_entry_do_not_use__ [{\"70b71b81308b4fb8586fa59f8634bdb61436a720cc\":{\"name\":\"installPluginAction\"}},\"src/presentation/web/app/actions/install-plugin.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"70b71b81308b4fb8586fa59f8634bdb61436a720cc\",callServer,void 0,findSourceMapURL,\"installPluginAction\");export{$$RSC_SERVER_ACTION_0 as installPluginAction};","/* __next_internal_action_entry_do_not_use__ [{\"60990bfa4beb38bb74e4ac874b7b85a37dc3b96f32\":{\"name\":\"uninstallPluginAction\"}},\"src/presentation/web/app/actions/uninstall-plugin.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60990bfa4beb38bb74e4ac874b7b85a37dc3b96f32\",callServer,void 0,findSourceMapURL,\"uninstallPluginAction\");export{$$RSC_SERVER_ACTION_0 as uninstallPluginAction};","/* __next_internal_action_entry_do_not_use__ [{\"70afadc20e937a79a2e714a2876abb1e1313994862\":{\"name\":\"togglePluginAction\"}},\"src/presentation/web/app/actions/toggle-plugin.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"70afadc20e937a79a2e714a2876abb1e1313994862\",callServer,void 0,findSourceMapURL,\"togglePluginAction\");export{$$RSC_SERVER_ACTION_0 as togglePluginAction};"],"names":["SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProvider","useSwitchContext","Switch","props","forwardedRef","__scopeSwitch","name","checked","checkedProp","defaultChecked","required","disabled","value","onCheckedChange","form","switchProps","button","setButton","composedRefs","node","hasConsumerStoppedPropagationRef","isFormControl","closest","setChecked","prop","defaultProp","onChange","caller","scope","children","type","role","getState","ref","onClick","event","prevChecked","current","isPropagationStopped","stopPropagation","SwitchBubbleInput","control","bubbles","style","transform","displayName","THUMB_NAME","SwitchThumb","thumbProps","context","span","BUBBLE_INPUT_NAME","controlSize","input","inputProto","window","HTMLInputElement","prototype","descriptor","Object","getOwnPropertyDescriptor","set","Event","call","dispatchEvent","tabIndex","position","pointerEvents","opacity","margin","Root","Thumb","Card","className","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","EmptyState","icon","title","description","action","PageHeader","eyebrow","PluginCard","plugin","installed","onSelect","onToggle","t","onKeyDown","e","key","preventDefault","version","category","variant","enabled"],"mappings":"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","ignoreList":[0,1,3]}
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/external-link.ts","../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/terminal.ts","../../../../../../../src/presentation/web/components/common/base-drawer/index.ts","../../../../../../../node_modules/.pnpm/%40radix-ui%2Breact-switch%401.2.6_%40types%2Breact-dom%4019.2.3_%40types%2Breact%4019.2.14__%40types%2Breact_e3738c514c10df2ef7e24af5ee461853/node_modules/%40radix-ui/react-switch/dist/index.mjs","../../../../../../../src/presentation/web/components/ui/switch.tsx","../../../../../../../src/presentation/web/components/ui/card.tsx","../../../../../../../src/presentation/web/components/common/empty-state/empty-state.tsx","../../../../../../../src/presentation/web/components/common/page-header/page-header.tsx","../../../../../../../src/presentation/web/components/features/plugins/plugins-page-client.tsx","../../../../../../../src/presentation/web/components/features/plugins/plugin-card.tsx","../../../../../../../src/presentation/web/components/features/plugins/plugin-detail-drawer.tsx","../../../../../../../src/presentation/web/app/actions/data%3Affa6f8%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A7ad17f%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ae98351%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A4e19b1%20%3Ctext/javascript%3E"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M15 3h6v6', key: '1q9fwt' }],\n ['path', { d: 'M10 14 21 3', key: 'gplh6r' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', key: 'a6xqqp' }],\n];\n\n/**\n * @component @name ExternalLink\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTUgM2g2djYiIC8+CiAgPHBhdGggZD0iTTEwIDE0IDIxIDMiIC8+CiAgPHBhdGggZD0iTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/external-link\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ExternalLink = createLucideIcon('external-link', __iconNode);\n\nexport default ExternalLink;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 19h8', key: 'baeox8' }],\n ['path', { d: 'm4 17 6-6-6-6', key: '1yngyt' }],\n];\n\n/**\n * @component @name Terminal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTloOCIgLz4KICA8cGF0aCBkPSJtNCAxNyA2LTYtNi02IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/terminal\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Terminal = createLucideIcon('terminal', __iconNode);\n\nexport default Terminal;\n","export { BaseDrawer, type BaseDrawerProps } from './base-drawer';\n","\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\n\nimport { cn } from '@/lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'bg-background dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 rtl:data-[state=checked]:-translate-x-[calc(100%-2px)]'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\n/*\n * Card — shadcn primitive extended with Stitch's editorial-shadow utility.\n * The `editorial-shadow` class (globals.css) replaces the old `shadow` class\n * with a subtle shadow + ring combination that gives cards a \"lifted\" look\n * and renders consistently against the editorial surface palette in both\n * light and dark modes. The `border` class stays for explicit border visibility\n * in dense grids; editorial-shadow's ring provides the soft lift on top.\n */\nconst Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('bg-card text-card-foreground editorial-shadow rounded-xl border', className)}\n {...props}\n />\n )\n);\nCard.displayName = 'Card';\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex flex-col space-y-1.5 p-6', className)} {...props} />\n )\n);\nCardHeader.displayName = 'CardHeader';\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('leading-none font-semibold tracking-tight', className)}\n {...props}\n />\n )\n);\nCardTitle.displayName = 'CardTitle';\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />\n )\n);\nCardDescription.displayName = 'CardDescription';\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />\n )\n);\nCardContent.displayName = 'CardContent';\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center p-6 pt-0', className)} {...props} />\n )\n);\nCardFooter.displayName = 'CardFooter';\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","import type { ReactNode, HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center gap-4 px-4 py-12 text-center', className)}\n {...props}\n >\n {icon ? <div className=\"text-muted-foreground\">{icon}</div> : null}\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description ? <p className=\"text-muted-foreground max-w-md text-sm\">{description}</p> : null}\n {action ? <div className=\"mt-2\">{action}</div> : null}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport interface PageHeaderProps {\n title: string;\n description?: string;\n /** Optional eyebrow label above the title (e.g., \"DEVELOPER PORTAL\") */\n eyebrow?: string;\n children?: React.ReactNode;\n className?: string;\n}\n\n/*\n * PageHeader — Stitch editorial page header pattern.\n * Renders: tiny uppercase eyebrow → large bold title → muted description.\n * Matches the tools-page-client.tsx header treatment.\n * See .scratchpad/stitch/shipit-developer-portal/src/App.tsx:161\n */\nexport function PageHeader({ title, description, eyebrow, children, className }: PageHeaderProps) {\n return (\n <header className={cn('flex items-center justify-between gap-4', className)}>\n <div className=\"space-y-1.5\">\n {eyebrow ? (\n <span className=\"text-[10px] font-bold tracking-[0.2em] text-slate-400 uppercase\">\n {eyebrow}\n </span>\n ) : null}\n <div className=\"flex items-baseline gap-3\">\n <h1 className=\"text-foreground text-3xl font-black tracking-tight\">{title}</h1>\n </div>\n {description ? (\n <p className=\"text-muted-foreground text-sm font-medium\">{description}</p>\n ) : null}\n </div>\n {children ? <div data-slot=\"actions\">{children}</div> : null}\n </header>\n );\n}\n","'use client';\n\nimport { useState, useMemo, useEffect, useTransition } from 'react';\nimport { Search, Blocks, AlertCircle } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { PageHeader } from '@/components/common/page-header';\nimport { EmptyState } from '@/components/common/empty-state';\nimport { PluginCard } from './plugin-card';\nimport { PluginDetailDrawer } from './plugin-detail-drawer';\nimport { useTranslation } from 'react-i18next';\nimport { fetchPluginCatalogAction } from '@/app/actions/fetch-plugin-catalog';\nimport { installPluginAction } from '@/app/actions/install-plugin';\nimport { uninstallPluginAction } from '@/app/actions/uninstall-plugin';\nimport { togglePluginAction } from '@/app/actions/toggle-plugin';\nimport type {\n PluginMarketplaceEntry,\n InstalledPlugin,\n} from '@shipit-ai/core/application/ports/output/services/plugin-marketplace.interface';\n\nexport interface PluginsPageClientProps {\n proxyConfigured: boolean;\n isClaudeCode: boolean;\n}\n\nexport function PluginsPageClient({ proxyConfigured, isClaudeCode }: PluginsPageClientProps) {\n const { t } = useTranslation('web');\n const [, startTransition] = useTransition();\n const [searchQuery, setSearchQuery] = useState('');\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n const [statusFilter, setStatusFilter] = useState<'installed' | 'not-installed' | null>(null);\n const [selectedPlugin, setSelectedPlugin] = useState<PluginMarketplaceEntry | null>(null);\n const [plugins, setPlugins] = useState<PluginMarketplaceEntry[]>([]);\n const [installedPlugins, setInstalledPlugins] = useState<InstalledPlugin[]>([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (!proxyConfigured) {\n setLoading(false);\n return;\n }\n fetchPluginCatalogAction().then((result) => {\n setPlugins(result.plugins);\n setInstalledPlugins(result.installedPlugins);\n setLoading(false);\n });\n }, [proxyConfigured]);\n\n const categories = useMemo(() => {\n const cats = new Set<string>();\n for (const p of plugins) {\n if (p.category) cats.add(p.category);\n }\n return Array.from(cats).sort();\n }, [plugins]);\n\n const filteredPlugins = useMemo(() => {\n const query = searchQuery.toLowerCase();\n return plugins.filter((p) => {\n if (activeCategory && p.category !== activeCategory) return false;\n if (statusFilter) {\n const isInstalled = !!installedPlugins.find((ip) => ip.id.startsWith(`${p.name}@`));\n if (statusFilter === 'installed' && !isInstalled) return false;\n if (statusFilter === 'not-installed' && isInstalled) return false;\n }\n if (query) {\n const matchesName = p.name.toLowerCase().includes(query);\n const matchesDescription = p.description.toLowerCase().includes(query);\n if (!matchesName && !matchesDescription) return false;\n }\n return true;\n });\n }, [plugins, searchQuery, activeCategory, statusFilter, installedPlugins]);\n\n const getInstalled = (pluginName: string) =>\n installedPlugins.find((ip) => ip.id.startsWith(`${pluginName}@`));\n\n const handleInstall = (pluginName: string) => {\n startTransition(async () => {\n const result = await installPluginAction(pluginName, 'default');\n if (result.success) {\n toast.success(`${pluginName} installed`);\n const catalog = await fetchPluginCatalogAction();\n setInstalledPlugins(catalog.installedPlugins);\n } else {\n toast.error(result.error ?? 'Installation failed');\n }\n });\n };\n\n const handleUninstall = (pluginName: string) => {\n startTransition(async () => {\n const result = await uninstallPluginAction(pluginName, 'default');\n if (result.success) {\n toast.success(`${pluginName} uninstalled`);\n const catalog = await fetchPluginCatalogAction();\n setInstalledPlugins(catalog.installedPlugins);\n } else {\n toast.error(result.error ?? 'Uninstallation failed');\n }\n });\n };\n\n const handleToggle = (pluginName: string, enabled: boolean) => {\n startTransition(async () => {\n const result = await togglePluginAction(pluginName, 'default', enabled);\n if (result.success) {\n toast.success(`${pluginName} ${enabled ? 'enabled' : 'disabled'}`);\n const catalog = await fetchPluginCatalogAction();\n setInstalledPlugins(catalog.installedPlugins);\n } else {\n toast.error(result.error ?? 'Toggle failed');\n }\n });\n };\n\n if (!isClaudeCode) {\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n <EmptyState icon={<AlertCircle className=\"size-10\" />} title={t('plugins.wrongAgent')} />\n </div>\n );\n }\n\n if (!proxyConfigured) {\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n <EmptyState icon={<AlertCircle className=\"size-10\" />} title={t('plugins.noProxy')} />\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n <div className=\"text-muted-foreground text-center text-sm\">\n {t('accessibility.loading')}...\n </div>\n </div>\n );\n }\n\n if (plugins.length === 0) {\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n <EmptyState icon={<Blocks className=\"size-10\" />} title={t('plugins.emptyState')} />\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-8 p-8\">\n <PageHeader eyebrow=\"Developer Portal\" title={t('plugins.title')} />\n\n {/* Search */}\n <div className=\"relative\">\n <Search className=\"text-muted-foreground absolute top-1/2 left-3 size-4 -translate-y-1/2\" />\n <Input\n placeholder={t('plugins.searchPlaceholder')}\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"ps-9\"\n data-testid=\"plugin-search\"\n />\n </div>\n\n {/* Filter pills */}\n <div className=\"flex flex-wrap items-center gap-4\">\n {/* Category */}\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant={activeCategory === null ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setActiveCategory(null)}\n >\n {t('plugins.allCategories')}\n </Button>\n {categories.map((cat) => (\n <Button\n key={cat}\n variant={activeCategory === cat ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setActiveCategory(cat === activeCategory ? null : cat)}\n >\n {cat}\n </Button>\n ))}\n </div>\n\n <div className=\"bg-border h-6 w-px\" />\n\n {/* Status */}\n <div className=\"flex flex-wrap gap-2\">\n <Button\n variant={statusFilter === null ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setStatusFilter(null)}\n >\n All Status\n </Button>\n <Button\n variant={statusFilter === 'installed' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => setStatusFilter(statusFilter === 'installed' ? null : 'installed')}\n >\n {t('plugins.installed')}\n </Button>\n <Button\n variant={statusFilter === 'not-installed' ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() =>\n setStatusFilter(statusFilter === 'not-installed' ? null : 'not-installed')\n }\n >\n {t('plugins.notInstalled')}\n </Button>\n </div>\n </div>\n\n {/* Plugin grid */}\n {filteredPlugins.length > 0 ? (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {filteredPlugins.map((plugin) => (\n <PluginCard\n key={plugin.name}\n plugin={plugin}\n installed={getInstalled(plugin.name)}\n onSelect={setSelectedPlugin}\n onToggle={handleToggle}\n />\n ))}\n </div>\n ) : (\n <EmptyState\n icon={<Search className=\"size-10\" />}\n title={t('plugins.emptyState')}\n action={\n <Button\n variant=\"outline\"\n onClick={() => {\n setSearchQuery('');\n setActiveCategory(null);\n setStatusFilter(null);\n }}\n >\n {t('plugins.clearFilters')}\n </Button>\n }\n />\n )}\n\n {/* Detail drawer */}\n <PluginDetailDrawer\n plugin={selectedPlugin}\n installed={selectedPlugin ? getInstalled(selectedPlugin.name) : undefined}\n open={!!selectedPlugin}\n onClose={() => setSelectedPlugin(null)}\n onInstall={handleInstall}\n onUninstall={handleUninstall}\n />\n </div>\n );\n}\n","'use client';\n\nimport { Card } from '@/components/ui/card';\nimport { Badge } from '@/components/ui/badge';\nimport { Switch } from '@/components/ui/switch';\nimport type {\n PluginMarketplaceEntry,\n InstalledPlugin,\n} from '@shipit-ai/core/application/ports/output/services/plugin-marketplace.interface';\nimport { useTranslation } from 'react-i18next';\n\nexport interface PluginCardProps {\n plugin: PluginMarketplaceEntry;\n installed?: InstalledPlugin;\n onSelect: (plugin: PluginMarketplaceEntry) => void;\n onToggle?: (pluginName: string, enabled: boolean) => void;\n}\n\nexport function PluginCard({ plugin, installed, onSelect, onToggle }: PluginCardProps) {\n const { t } = useTranslation('web');\n\n return (\n <Card\n className=\"cursor-pointer p-5 transition-all duration-300 hover:scale-[1.02] hover:shadow-md hover:ring-slate-300 dark:hover:ring-slate-600\"\n role=\"button\"\n tabIndex={0}\n onClick={() => onSelect(plugin)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(plugin);\n }\n }}\n data-testid={`plugin-card-${plugin.name}`}\n >\n <h3 className=\"text-foreground text-sm leading-tight font-bold tracking-tight\">\n {plugin.name}\n </h3>\n\n {plugin.version ? (\n <p className=\"text-muted-foreground mt-1 font-mono text-xs\">v{plugin.version}</p>\n ) : null}\n\n <p className=\"text-muted-foreground mt-3 line-clamp-2 text-xs leading-relaxed\">\n {plugin.description}\n </p>\n\n <div className=\"mt-4 flex flex-wrap items-center gap-1.5\">\n {plugin.category ? <Badge variant=\"outline\">{plugin.category}</Badge> : null}\n {installed ? (\n <Badge variant=\"secondary\">{t('plugins.installed')}</Badge>\n ) : (\n <Badge variant=\"outline\" className=\"opacity-50\">\n {t('plugins.notInstalled')}\n </Badge>\n )}\n </div>\n\n {installed ? (\n <div\n className=\"mt-3 flex items-center gap-2\"\n onClick={(e) => e.stopPropagation()}\n onKeyDown={(e) => e.stopPropagation()}\n >\n <Switch\n checked={installed.enabled}\n onCheckedChange={(checked) => onToggle?.(plugin.name, checked)}\n data-testid={`plugin-toggle-${plugin.name}`}\n />\n <span className=\"text-muted-foreground text-xs\">\n {installed.enabled ? t('plugins.disable') : t('plugins.enable')}\n </span>\n </div>\n ) : null}\n </Card>\n );\n}\n","'use client';\n\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport { Separator } from '@/components/ui/separator';\nimport { ExternalLink } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport type {\n PluginMarketplaceEntry,\n InstalledPlugin,\n} from '@shipit-ai/core/application/ports/output/services/plugin-marketplace.interface';\n\nexport interface PluginDetailDrawerProps {\n plugin: PluginMarketplaceEntry | null;\n installed?: InstalledPlugin;\n open: boolean;\n onClose: () => void;\n onInstall?: (pluginName: string) => void;\n onUninstall?: (pluginName: string) => void;\n}\n\nfunction getSourceUrl(plugin: PluginMarketplaceEntry): string | null {\n const { source } = plugin;\n if (source.source === 'github' && source.repo) {\n return `https://github.com/${source.repo}`;\n }\n if ((source.source === 'url' || source.source === 'git-subdir') && source.url) {\n try {\n const url = new URL(source.url);\n if (url.protocol === 'https:') return source.url;\n } catch {\n // Invalid URL — don't render as link\n }\n }\n return null;\n}\n\nexport function PluginDetailDrawer({\n plugin,\n installed,\n open,\n onClose,\n onInstall,\n onUninstall,\n}: PluginDetailDrawerProps) {\n const { t } = useTranslation('web');\n\n if (!plugin) return null;\n\n const sourceUrl = getSourceUrl(plugin);\n\n return (\n <BaseDrawer open={open} onClose={onClose}>\n <DrawerTitle className=\"text-foreground text-lg font-bold tracking-tight\">\n {plugin.name}\n </DrawerTitle>\n <DrawerDescription className=\"text-muted-foreground mt-1 text-sm\">\n {plugin.description}\n </DrawerDescription>\n\n <Separator className=\"my-4\" />\n\n <div className=\"space-y-3\">\n {plugin.version ? (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground text-sm\">{t('plugins.version')}</span>\n <span className=\"font-mono text-sm\">v{plugin.version}</span>\n </div>\n ) : null}\n\n {plugin.category ? (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground text-sm\">{t('plugins.category')}</span>\n <Badge variant=\"outline\">{plugin.category}</Badge>\n </div>\n ) : null}\n\n {sourceUrl ? (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground text-sm\">{t('plugins.source')}</span>\n <a\n href={sourceUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary hover:text-primary/80 inline-flex items-center gap-1 text-sm underline underline-offset-2\"\n >\n {plugin.source.repo ?? 'Repository'}\n <ExternalLink className=\"size-3\" />\n </a>\n </div>\n ) : null}\n\n {plugin.keywords && plugin.keywords.length > 0 ? (\n <div className=\"flex flex-wrap gap-1.5 pt-2\">\n {plugin.keywords.map((kw) => (\n <Badge key={kw} variant=\"outline\" className=\"text-xs\">\n {kw}\n </Badge>\n ))}\n </div>\n ) : null}\n </div>\n\n <Separator className=\"my-4\" />\n\n <div className=\"flex gap-2\">\n {installed ? (\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => onUninstall?.(plugin.name)}\n data-testid=\"plugin-uninstall-button\"\n >\n {t('plugins.uninstall')}\n </Button>\n ) : (\n <Button\n size=\"sm\"\n onClick={() => onInstall?.(plugin.name)}\n data-testid=\"plugin-install-button\"\n >\n {t('plugins.install')}\n </Button>\n )}\n </div>\n </BaseDrawer>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"00b021266017371029fb071455f1fbb32182853346\":{\"name\":\"fetchPluginCatalogAction\"}},\"src/presentation/web/app/actions/fetch-plugin-catalog.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"00b021266017371029fb071455f1fbb32182853346\",callServer,void 0,findSourceMapURL,\"fetchPluginCatalogAction\");export{$$RSC_SERVER_ACTION_0 as fetchPluginCatalogAction};","/* __next_internal_action_entry_do_not_use__ [{\"70a943b6b49308c0bbc4c171c596ae046ffee357e5\":{\"name\":\"installPluginAction\"}},\"src/presentation/web/app/actions/install-plugin.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"70a943b6b49308c0bbc4c171c596ae046ffee357e5\",callServer,void 0,findSourceMapURL,\"installPluginAction\");export{$$RSC_SERVER_ACTION_0 as installPluginAction};","/* __next_internal_action_entry_do_not_use__ [{\"60d8232347e32bbc56a009f93220b4fdbd6a91f8f1\":{\"name\":\"uninstallPluginAction\"}},\"src/presentation/web/app/actions/uninstall-plugin.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60d8232347e32bbc56a009f93220b4fdbd6a91f8f1\",callServer,void 0,findSourceMapURL,\"uninstallPluginAction\");export{$$RSC_SERVER_ACTION_0 as uninstallPluginAction};","/* __next_internal_action_entry_do_not_use__ [{\"70ff5590d80b41fbc295b046844af80491d68e8dc6\":{\"name\":\"togglePluginAction\"}},\"src/presentation/web/app/actions/toggle-plugin.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"70ff5590d80b41fbc295b046844af80491d68e8dc6\",callServer,void 0,findSourceMapURL,\"togglePluginAction\");export{$$RSC_SERVER_ACTION_0 as togglePluginAction};"],"names":["SWITCH_NAME","createSwitchContext","createSwitchScope","SwitchProvider","useSwitchContext","Switch","props","forwardedRef","__scopeSwitch","name","checked","checkedProp","defaultChecked","required","disabled","value","onCheckedChange","form","switchProps","button","setButton","composedRefs","node","hasConsumerStoppedPropagationRef","isFormControl","closest","setChecked","prop","defaultProp","onChange","caller","scope","children","type","role","getState","ref","onClick","event","prevChecked","current","isPropagationStopped","stopPropagation","SwitchBubbleInput","control","bubbles","style","transform","displayName","THUMB_NAME","SwitchThumb","thumbProps","context","span","BUBBLE_INPUT_NAME","controlSize","input","inputProto","window","HTMLInputElement","prototype","descriptor","Object","getOwnPropertyDescriptor","set","Event","call","dispatchEvent","tabIndex","position","pointerEvents","opacity","margin","Root","Thumb","Card","className","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","EmptyState","icon","title","description","action","PageHeader","eyebrow","PluginCard","plugin","installed","onSelect","onToggle","t","onKeyDown","e","key","preventDefault","version","category","variant","enabled"],"mappings":"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","ignoreList":[0,1,3]}
@@ -1,3 +1,3 @@
1
- module.exports=[99829,a=>{"use strict";let b=(0,a.i(97624).default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);a.s(["ChevronsUpDown",0,b],99829)},85959,a=>{"use strict";var b=a.i(53083),c=a.i(11321),d=a.i(40674),e=a.i(52313),f=a.i(6120);let g=(0,f.createServerReference)("40dfb3d4f5a3f9feaa46aed2f738170ff13769b274",f.callServer,void 0,f.findSourceMapURL,"adoptBranch"),h=(0,f.createServerReference)("402a9e32bb0a7fd6ab4f81b354d43c117f22e3680b",f.callServer,void 0,f.findSourceMapURL,"listBranches");var i=a.i(60197),j=a.i(95881),k=a.i(99829),l=a.i(37545),m=a.i(20901);a.i(78454);var n=a.i(24255),o=a.i(2824),p=a.i(18948),q=a.i(90920),r=a.i(58860),s=a.i(50950),t=a.i(85536);let u=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",a),...c}));u.displayName="Command";let v=c.forwardRef(({className:a,...c},d)=>(0,b.jsxs)("div",{className:"flex items-center border-b px-3",children:[(0,b.jsx)(s.Search,{className:"me-2 h-4 w-4 shrink-0 opacity-50"}),(0,b.jsx)("input",{ref:d,className:(0,t.cn)("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50",a),...c})]}));v.displayName="CommandInput";let w=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("max-h-[300px] overflow-x-hidden overflow-y-auto",a),...c}));w.displayName="CommandList";let x=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("text-muted-foreground py-6 text-center text-sm",a),...c}));x.displayName="CommandEmpty";let y=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("text-foreground overflow-hidden p-1",a),...c}));y.displayName="CommandGroup";let z=c.forwardRef(({className:a,selected:c,...d},e)=>(0,b.jsx)("button",{ref:e,type:"button","data-selected":c,className:(0,t.cn)("relative flex w-full cursor-default items-center rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none","hover:bg-accent hover:text-accent-foreground","data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground","disabled:pointer-events-none disabled:opacity-50",a),...d}));z.displayName="CommandItem",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("bg-border -mx-1 h-px",a),...c})).displayName="CommandSeparator";var A=a.i(53823);function B({open:a,onClose:d,onSubmit:e,isSubmitting:f=!1,error:g,repositories:h=[],selectedRepositoryPath:s,onRepositoryChange:C,branches:D=[],branchesLoading:E=!1}){let[F,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(""),L=(0,c.useRef)(null),[M,N]=(0,c.useState)(!1),[O,P]=(0,c.useState)(""),Q=(0,c.useRef)(null),R=h.find(a=>a.path===s),S=!!s;(0,c.useEffect)(()=>{a||(G(""),K(""),I(!1),N(!1),P(""))},[a]),(0,c.useEffect)(()=>{G(""),K("")},[s]);let T=(0,c.useCallback)(a=>{a.preventDefault();let b=F.trim();b&&s&&!f&&e(b,s)},[F,s,f,e]),U=(0,c.useCallback)(()=>{G(""),K(""),d()},[d]),V=(0,c.useCallback)(a=>{G(a),K(a),I(!1)},[]),W=(0,c.useCallback)(a=>{K(a.target.value),H||I(!0)},[H]),X=(0,c.useCallback)(a=>{if("Enter"===a.key){a.preventDefault();let b=J.trim();b&&(G(b),I(!1))}"Escape"===a.key&&(I(!1),K(F))},[J,F]),Y=(0,c.useCallback)(a=>{C?.(a),N(!1),P("")},[C]),Z=D.filter(a=>a.toLowerCase().includes(J.toLowerCase())),$=O.trim()?h.filter(a=>a.name.toLowerCase().includes(O.toLowerCase())||a.path.toLowerCase().includes(O.toLowerCase())):h;(0,c.useEffect)(()=>{M?setTimeout(()=>Q.current?.focus(),0):P("")},[M]);let _=!F.trim()||!s||f,aa=(0,b.jsxs)("div",{children:[(0,b.jsxs)(o.DrawerTitle,{className:"flex items-center gap-2",children:[(0,b.jsx)(l.GitBranch,{className:"h-4 w-4"}),"Adopt Branch"]}),(0,b.jsx)(o.DrawerDescription,{className:"text-muted-foreground text-sm",children:"Import an existing git branch into ShipIT's feature tracking"})]});return(0,b.jsx)(n.BaseDrawer,{open:a,onClose:U,size:"sm",modal:!1,header:aa,"data-testid":"adopt-branch-drawer",children:(0,b.jsxs)("form",{onSubmit:T,className:"flex flex-1 flex-col",children:[(0,b.jsx)("div",{className:"flex-1 overflow-y-auto p-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(r.Label,{children:"Repository"}),(0,b.jsxs)(A.Popover,{open:M,onOpenChange:N,children:[(0,b.jsx)(A.PopoverTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button",role:"combobox","aria-expanded":M,"aria-label":"Repository",disabled:f,"data-testid":"adopt-repo-combobox",className:(0,t.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!R&&"text-muted-foreground"),children:[(0,b.jsx)("span",{className:"truncate",children:R?R.name:"Select repository..."}),(0,b.jsx)(k.ChevronsUpDown,{className:"ms-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,b.jsx)(A.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"adopt-repo-combobox-content",children:(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("div",{className:"border-b p-2",children:(0,b.jsx)(q.Input,{ref:Q,placeholder:"Search repositories...",value:O,onChange:a=>P(a.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"adopt-repo-search"})}),(0,b.jsx)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Repositories",children:0===$.length?(0,b.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:"No repositories found."}):$.map(a=>(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":s===a.path,onClick:()=>Y(a.path),className:(0,t.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",s===a.path&&"bg-accent/50"),"data-testid":`adopt-repo-option-${a.id}`,children:[(0,b.jsx)(j.CheckIcon,{className:(0,t.cn)("h-4 w-4 shrink-0",s!==a.path&&"invisible")}),(0,b.jsxs)("span",{className:"flex flex-col items-start truncate",children:[(0,b.jsx)("span",{className:"truncate",children:a.name}),(0,b.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:a.path})]})]},a.id))})]})})]}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs",children:"Select the repository that contains the branch you want to adopt."})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(r.Label,{htmlFor:"branch-name",children:"Branch name"}),(0,b.jsxs)(A.Popover,{open:H,onOpenChange:I,children:[(0,b.jsx)(A.PopoverTrigger,{asChild:!0,children:(0,b.jsxs)(p.Button,{variant:"outline",role:"combobox","aria-expanded":H,"aria-invalid":!!g,"aria-describedby":g?"adopt-branch-error-msg":void 0,disabled:f||!S,className:"w-full justify-between font-normal","data-testid":"adopt-branch-input",children:[(0,b.jsx)("span",{className:"truncate",children:S?E?"Loading branches...":F||"Select a branch...":"Select a repository first..."}),(0,b.jsx)(k.ChevronsUpDown,{className:"ms-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,b.jsx)(A.PopoverContent,{className:"w-[var(--radix-popover-trigger-width)] p-0",align:"start",children:(0,b.jsxs)(u,{children:[(0,b.jsx)(v,{ref:L,placeholder:"Search branches...",value:J,onChange:W,onKeyDown:X,"data-testid":"adopt-branch-search"}),(0,b.jsxs)(w,{children:[!E&&0===Z.length&&(0,b.jsx)(x,{children:0===D.length?"No branches found.":J?"No match — press Enter to use this value.":"No branches available."}),E?(0,b.jsx)(x,{children:(0,b.jsx)(m.LoaderCircle,{className:"mx-auto h-4 w-4 animate-spin"})}):null,Z.length>0&&(0,b.jsx)(y,{children:Z.map(a=>(0,b.jsxs)(z,{selected:a===F,onClick:()=>V(a),children:[(0,b.jsx)(i.Check,{className:(0,t.cn)("me-2 h-4 w-4",a===F?"opacity-100":"opacity-0")}),(0,b.jsx)(l.GitBranch,{className:"me-2 h-3 w-3 opacity-50"}),a]},a))})]})]})})]}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs",children:S?"Select a branch from the dropdown or type to search. Local and remote branches are shown.":"Please select a repository above to see available branches."})]}),g?(0,b.jsx)("p",{id:"adopt-branch-error-msg",className:"text-destructive text-sm",role:"alert","data-testid":"adopt-branch-error",children:g}):null]})}),(0,b.jsx)("div",{className:"border-t p-4",children:(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(p.Button,{type:"button",variant:"outline",onClick:U,disabled:f,className:"flex-1",children:"Cancel"}),(0,b.jsx)(p.Button,{type:"submit",disabled:_,className:"flex-1","data-testid":"adopt-branch-submit",children:f?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(m.LoaderCircle,{className:"me-2 h-4 w-4 animate-spin"}),"Adopting..."]}):"Adopt Branch"})]})})]})})}a.s(["AdoptDrawerClient",0,function({repositoryPath:a,repositories:f}){let i=(0,d.useRouter)(),j=(0,d.usePathname)(),[k,l]=(0,c.useState)(!1),[m,n]=(0,c.useState)(),[o,p]=(0,c.useState)([]),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(a),u=j.startsWith("/adopt"),v=!k&&u;(0,c.useEffect)(()=>{!u&&k&&l(!1)},[u,k]),(0,c.useEffect)(()=>{u&&(n(void 0),t(a))},[u,a]),(0,c.useEffect)(()=>{u&&s?(r(!0),p([]),h(s).then(p).catch(()=>p([])).finally(()=>r(!1))):p([])},[u,s]);let w=(0,c.useCallback)(()=>{i.push("/")},[i]),x=(0,c.useCallback)(a=>{t(a)},[]),y=(0,c.useCallback)((a,b)=>{n(void 0),l(!0),i.push("/"),g({branchName:a,repositoryPath:b}).then(a=>{a.error?e.toast.error(a.error):(window.dispatchEvent(new CustomEvent("shipit-ai:feature-created",{detail:{featureId:a.feature.id,name:a.feature.name,description:a.feature.description,repositoryPath:a.feature.repositoryPath}})),e.toast.success(`Branch adopted as "${a.feature.name}"`))}).catch(()=>{e.toast.error("Failed to adopt branch"),l(!1)})},[i]);return(0,b.jsx)(B,{open:v,onClose:w,onSubmit:y,isSubmitting:k,error:m,repositories:f,selectedRepositoryPath:s,onRepositoryChange:x,branches:o,branchesLoading:q})}],85959)}];
1
+ module.exports=[99829,a=>{"use strict";let b=(0,a.i(97624).default)("chevrons-up-down",[["path",{d:"m7 15 5 5 5-5",key:"1hf1tw"}],["path",{d:"m7 9 5-5 5 5",key:"sgt6xg"}]]);a.s(["ChevronsUpDown",0,b],99829)},85959,a=>{"use strict";var b=a.i(53083),c=a.i(11321),d=a.i(40674),e=a.i(52313),f=a.i(6120);let g=(0,f.createServerReference)("40d6615da9729802995fcb56fc1a1523d6183da0b1",f.callServer,void 0,f.findSourceMapURL,"adoptBranch"),h=(0,f.createServerReference)("401a9e620898970d7c096af0949efae813b2cfab73",f.callServer,void 0,f.findSourceMapURL,"listBranches");var i=a.i(60197),j=a.i(95881),k=a.i(99829),l=a.i(37545),m=a.i(20901);a.i(78454);var n=a.i(24255),o=a.i(2824),p=a.i(18948),q=a.i(90920),r=a.i(58860),s=a.i(50950),t=a.i(85536);let u=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",a),...c}));u.displayName="Command";let v=c.forwardRef(({className:a,...c},d)=>(0,b.jsxs)("div",{className:"flex items-center border-b px-3",children:[(0,b.jsx)(s.Search,{className:"me-2 h-4 w-4 shrink-0 opacity-50"}),(0,b.jsx)("input",{ref:d,className:(0,t.cn)("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50",a),...c})]}));v.displayName="CommandInput";let w=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("max-h-[300px] overflow-x-hidden overflow-y-auto",a),...c}));w.displayName="CommandList";let x=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("text-muted-foreground py-6 text-center text-sm",a),...c}));x.displayName="CommandEmpty";let y=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("text-foreground overflow-hidden p-1",a),...c}));y.displayName="CommandGroup";let z=c.forwardRef(({className:a,selected:c,...d},e)=>(0,b.jsx)("button",{ref:e,type:"button","data-selected":c,className:(0,t.cn)("relative flex w-full cursor-default items-center rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none","hover:bg-accent hover:text-accent-foreground","data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground","disabled:pointer-events-none disabled:opacity-50",a),...d}));z.displayName="CommandItem",c.forwardRef(({className:a,...c},d)=>(0,b.jsx)("div",{ref:d,className:(0,t.cn)("bg-border -mx-1 h-px",a),...c})).displayName="CommandSeparator";var A=a.i(53823);function B({open:a,onClose:d,onSubmit:e,isSubmitting:f=!1,error:g,repositories:h=[],selectedRepositoryPath:s,onRepositoryChange:C,branches:D=[],branchesLoading:E=!1}){let[F,G]=(0,c.useState)(""),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(""),L=(0,c.useRef)(null),[M,N]=(0,c.useState)(!1),[O,P]=(0,c.useState)(""),Q=(0,c.useRef)(null),R=h.find(a=>a.path===s),S=!!s;(0,c.useEffect)(()=>{a||(G(""),K(""),I(!1),N(!1),P(""))},[a]),(0,c.useEffect)(()=>{G(""),K("")},[s]);let T=(0,c.useCallback)(a=>{a.preventDefault();let b=F.trim();b&&s&&!f&&e(b,s)},[F,s,f,e]),U=(0,c.useCallback)(()=>{G(""),K(""),d()},[d]),V=(0,c.useCallback)(a=>{G(a),K(a),I(!1)},[]),W=(0,c.useCallback)(a=>{K(a.target.value),H||I(!0)},[H]),X=(0,c.useCallback)(a=>{if("Enter"===a.key){a.preventDefault();let b=J.trim();b&&(G(b),I(!1))}"Escape"===a.key&&(I(!1),K(F))},[J,F]),Y=(0,c.useCallback)(a=>{C?.(a),N(!1),P("")},[C]),Z=D.filter(a=>a.toLowerCase().includes(J.toLowerCase())),$=O.trim()?h.filter(a=>a.name.toLowerCase().includes(O.toLowerCase())||a.path.toLowerCase().includes(O.toLowerCase())):h;(0,c.useEffect)(()=>{M?setTimeout(()=>Q.current?.focus(),0):P("")},[M]);let _=!F.trim()||!s||f,aa=(0,b.jsxs)("div",{children:[(0,b.jsxs)(o.DrawerTitle,{className:"flex items-center gap-2",children:[(0,b.jsx)(l.GitBranch,{className:"h-4 w-4"}),"Adopt Branch"]}),(0,b.jsx)(o.DrawerDescription,{className:"text-muted-foreground text-sm",children:"Import an existing git branch into ShipIT's feature tracking"})]});return(0,b.jsx)(n.BaseDrawer,{open:a,onClose:U,size:"sm",modal:!1,header:aa,"data-testid":"adopt-branch-drawer",children:(0,b.jsxs)("form",{onSubmit:T,className:"flex flex-1 flex-col",children:[(0,b.jsx)("div",{className:"flex-1 overflow-y-auto p-4",children:(0,b.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(r.Label,{children:"Repository"}),(0,b.jsxs)(A.Popover,{open:M,onOpenChange:N,children:[(0,b.jsx)(A.PopoverTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button",role:"combobox","aria-expanded":M,"aria-label":"Repository",disabled:f,"data-testid":"adopt-repo-combobox",className:(0,t.cn)("border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",!R&&"text-muted-foreground"),children:[(0,b.jsx)("span",{className:"truncate",children:R?R.name:"Select repository..."}),(0,b.jsx)(k.ChevronsUpDown,{className:"ms-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,b.jsx)(A.PopoverContent,{className:"w-80 p-0",align:"start","data-testid":"adopt-repo-combobox-content",children:(0,b.jsxs)("div",{className:"flex flex-col",children:[(0,b.jsx)("div",{className:"border-b p-2",children:(0,b.jsx)(q.Input,{ref:Q,placeholder:"Search repositories...",value:O,onChange:a=>P(a.target.value),className:"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0","data-testid":"adopt-repo-search"})}),(0,b.jsx)("div",{className:"max-h-48 overflow-y-auto py-1",role:"listbox","aria-label":"Repositories",children:0===$.length?(0,b.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-sm",children:"No repositories found."}):$.map(a=>(0,b.jsxs)("button",{type:"button",role:"option","aria-selected":s===a.path,onClick:()=>Y(a.path),className:(0,t.cn)("hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm",s===a.path&&"bg-accent/50"),"data-testid":`adopt-repo-option-${a.id}`,children:[(0,b.jsx)(j.CheckIcon,{className:(0,t.cn)("h-4 w-4 shrink-0",s!==a.path&&"invisible")}),(0,b.jsxs)("span",{className:"flex flex-col items-start truncate",children:[(0,b.jsx)("span",{className:"truncate",children:a.name}),(0,b.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:a.path})]})]},a.id))})]})})]}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs",children:"Select the repository that contains the branch you want to adopt."})]}),(0,b.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,b.jsx)(r.Label,{htmlFor:"branch-name",children:"Branch name"}),(0,b.jsxs)(A.Popover,{open:H,onOpenChange:I,children:[(0,b.jsx)(A.PopoverTrigger,{asChild:!0,children:(0,b.jsxs)(p.Button,{variant:"outline",role:"combobox","aria-expanded":H,"aria-invalid":!!g,"aria-describedby":g?"adopt-branch-error-msg":void 0,disabled:f||!S,className:"w-full justify-between font-normal","data-testid":"adopt-branch-input",children:[(0,b.jsx)("span",{className:"truncate",children:S?E?"Loading branches...":F||"Select a branch...":"Select a repository first..."}),(0,b.jsx)(k.ChevronsUpDown,{className:"ms-2 h-4 w-4 shrink-0 opacity-50"})]})}),(0,b.jsx)(A.PopoverContent,{className:"w-[var(--radix-popover-trigger-width)] p-0",align:"start",children:(0,b.jsxs)(u,{children:[(0,b.jsx)(v,{ref:L,placeholder:"Search branches...",value:J,onChange:W,onKeyDown:X,"data-testid":"adopt-branch-search"}),(0,b.jsxs)(w,{children:[!E&&0===Z.length&&(0,b.jsx)(x,{children:0===D.length?"No branches found.":J?"No match — press Enter to use this value.":"No branches available."}),E?(0,b.jsx)(x,{children:(0,b.jsx)(m.LoaderCircle,{className:"mx-auto h-4 w-4 animate-spin"})}):null,Z.length>0&&(0,b.jsx)(y,{children:Z.map(a=>(0,b.jsxs)(z,{selected:a===F,onClick:()=>V(a),children:[(0,b.jsx)(i.Check,{className:(0,t.cn)("me-2 h-4 w-4",a===F?"opacity-100":"opacity-0")}),(0,b.jsx)(l.GitBranch,{className:"me-2 h-3 w-3 opacity-50"}),a]},a))})]})]})})]}),(0,b.jsx)("p",{className:"text-muted-foreground text-xs",children:S?"Select a branch from the dropdown or type to search. Local and remote branches are shown.":"Please select a repository above to see available branches."})]}),g?(0,b.jsx)("p",{id:"adopt-branch-error-msg",className:"text-destructive text-sm",role:"alert","data-testid":"adopt-branch-error",children:g}):null]})}),(0,b.jsx)("div",{className:"border-t p-4",children:(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(p.Button,{type:"button",variant:"outline",onClick:U,disabled:f,className:"flex-1",children:"Cancel"}),(0,b.jsx)(p.Button,{type:"submit",disabled:_,className:"flex-1","data-testid":"adopt-branch-submit",children:f?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(m.LoaderCircle,{className:"me-2 h-4 w-4 animate-spin"}),"Adopting..."]}):"Adopt Branch"})]})})]})})}a.s(["AdoptDrawerClient",0,function({repositoryPath:a,repositories:f}){let i=(0,d.useRouter)(),j=(0,d.usePathname)(),[k,l]=(0,c.useState)(!1),[m,n]=(0,c.useState)(),[o,p]=(0,c.useState)([]),[q,r]=(0,c.useState)(!1),[s,t]=(0,c.useState)(a),u=j.startsWith("/adopt"),v=!k&&u;(0,c.useEffect)(()=>{!u&&k&&l(!1)},[u,k]),(0,c.useEffect)(()=>{u&&(n(void 0),t(a))},[u,a]),(0,c.useEffect)(()=>{u&&s?(r(!0),p([]),h(s).then(p).catch(()=>p([])).finally(()=>r(!1))):p([])},[u,s]);let w=(0,c.useCallback)(()=>{i.push("/")},[i]),x=(0,c.useCallback)(a=>{t(a)},[]),y=(0,c.useCallback)((a,b)=>{n(void 0),l(!0),i.push("/"),g({branchName:a,repositoryPath:b}).then(a=>{a.error?e.toast.error(a.error):(window.dispatchEvent(new CustomEvent("shipit-ai:feature-created",{detail:{featureId:a.feature.id,name:a.feature.name,description:a.feature.description,repositoryPath:a.feature.repositoryPath}})),e.toast.success(`Branch adopted as "${a.feature.name}"`))}).catch(()=>{e.toast.error("Failed to adopt branch"),l(!1)})},[i]);return(0,b.jsx)(B,{open:v,onClose:w,onSubmit:y,isSubmitting:k,error:m,repositories:f,selectedRepositoryPath:s,onRepositoryChange:x,branches:o,branchesLoading:q})}],85959)}];
2
2
 
3
3
  //# sourceMappingURL=_0vyfc4b._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/chevrons-up-down.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.tsx","../../../../../../../src/presentation/web/app/actions/data%3Af4415a%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A327fc1%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.tsx","../../../../../../../src/presentation/web/components/ui/command.tsx"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm7 15 5 5 5-5', key: '1hf1tw' }],\n ['path', { d: 'm7 9 5-5 5 5', key: 'sgt6xg' }],\n];\n\n/**\n * @component @name ChevronsUpDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNyAxNSA1IDUgNS01IiAvPgogIDxwYXRoIGQ9Im03IDkgNS01IDUgNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevrons-up-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronsUpDown = createLucideIcon('chevrons-up-down', __iconNode);\n\nexport default ChevronsUpDown;\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useRouter, usePathname } from 'next/navigation';\nimport { toast } from 'sonner';\nimport { adoptBranch } from '@/app/actions/adopt-branch';\nimport { listBranches } from '@/app/actions/list-branches';\nimport { AdoptBranchDrawer } from './adopt-branch-drawer';\nimport type { RepositoryOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\n\nexport interface AdoptDrawerClientProps {\n repositoryPath: string;\n repositories: RepositoryOption[];\n}\n\nexport function AdoptDrawerClient({ repositoryPath, repositories }: AdoptDrawerClientProps) {\n const router = useRouter();\n const pathname = usePathname();\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string>();\n const [branches, setBranches] = useState<string[]>([]);\n const [branchesLoading, setBranchesLoading] = useState(false);\n const [selectedRepoPath, setSelectedRepoPath] = useState(repositoryPath);\n\n const isOnAdoptRoute = pathname.startsWith('/adopt');\n const isOpen = !isSubmitting && isOnAdoptRoute;\n\n // Reset isSubmitting once the route has actually changed away from /adopt\n useEffect(() => {\n if (!isOnAdoptRoute && isSubmitting) {\n setIsSubmitting(false);\n }\n }, [isOnAdoptRoute, isSubmitting]);\n\n // Clear error when drawer reopens and reset selected repo to default\n useEffect(() => {\n if (isOnAdoptRoute) {\n setError(undefined);\n setSelectedRepoPath(repositoryPath);\n }\n }, [isOnAdoptRoute, repositoryPath]);\n\n // Fetch branches when drawer opens AND a repository is selected\n useEffect(() => {\n if (isOnAdoptRoute && selectedRepoPath) {\n setBranchesLoading(true);\n setBranches([]);\n listBranches(selectedRepoPath)\n .then(setBranches)\n .catch(() => setBranches([]))\n .finally(() => setBranchesLoading(false));\n } else {\n setBranches([]);\n }\n }, [isOnAdoptRoute, selectedRepoPath]);\n\n const onClose = useCallback(() => {\n router.push('/');\n }, [router]);\n\n const handleRepositoryChange = useCallback((path: string) => {\n setSelectedRepoPath(path);\n }, []);\n\n const onSubmit = useCallback(\n (branchName: string, repoPath: string) => {\n setError(undefined);\n setIsSubmitting(true);\n router.push('/');\n\n adoptBranch({ branchName, repositoryPath: repoPath })\n .then((result) => {\n if (result.error) {\n toast.error(result.error);\n return;\n }\n window.dispatchEvent(\n new CustomEvent('shipit-ai:feature-created', {\n detail: {\n featureId: result.feature!.id,\n name: result.feature!.name,\n description: result.feature!.description,\n repositoryPath: result.feature!.repositoryPath,\n },\n })\n );\n toast.success(`Branch adopted as \"${result.feature!.name}\"`);\n })\n .catch(() => {\n toast.error('Failed to adopt branch');\n setIsSubmitting(false);\n });\n },\n [router]\n );\n\n return (\n <AdoptBranchDrawer\n open={isOpen}\n onClose={onClose}\n onSubmit={onSubmit}\n isSubmitting={isSubmitting}\n error={error}\n repositories={repositories}\n selectedRepositoryPath={selectedRepoPath}\n onRepositoryChange={handleRepositoryChange}\n branches={branches}\n branchesLoading={branchesLoading}\n />\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40dfb3d4f5a3f9feaa46aed2f738170ff13769b274\":{\"name\":\"adoptBranch\"}},\"src/presentation/web/app/actions/adopt-branch.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40dfb3d4f5a3f9feaa46aed2f738170ff13769b274\",callServer,void 0,findSourceMapURL,\"adoptBranch\");export{$$RSC_SERVER_ACTION_0 as adoptBranch};","/* __next_internal_action_entry_do_not_use__ [{\"402a9e32bb0a7fd6ab4f81b354d43c117f22e3680b\":{\"name\":\"listBranches\"}},\"src/presentation/web/app/actions/list-branches.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402a9e32bb0a7fd6ab4f81b354d43c117f22e3680b\",callServer,void 0,findSourceMapURL,\"listBranches\");export{$$RSC_SERVER_ACTION_0 as listBranches};","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { Check, CheckIcon, ChevronsUpDown, GitBranch, LoaderCircle } from 'lucide-react';\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { cn } from '@/lib/utils';\nimport type { RepositoryOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\n\nexport interface AdoptBranchDrawerProps {\n open: boolean;\n onClose: () => void;\n onSubmit: (branchName: string, repositoryPath: string) => void;\n isSubmitting?: boolean;\n error?: string;\n /** Available repositories for the repository selector */\n repositories?: RepositoryOption[];\n /** Currently selected repository path */\n selectedRepositoryPath?: string;\n /** Callback when user selects a different repository */\n onRepositoryChange?: (repositoryPath: string) => void;\n /** Available branch names for the combobox dropdown */\n branches?: string[];\n /** Whether branches are still loading */\n branchesLoading?: boolean;\n}\n\nexport function AdoptBranchDrawer({\n open,\n onClose,\n onSubmit,\n isSubmitting = false,\n error,\n repositories = [],\n selectedRepositoryPath,\n onRepositoryChange,\n branches = [],\n branchesLoading = false,\n}: AdoptBranchDrawerProps) {\n const [branchName, setBranchName] = useState('');\n const [comboboxOpen, setComboboxOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n const [repoOpen, setRepoOpen] = useState(false);\n const [repoQuery, setRepoQuery] = useState('');\n const repoInputRef = useRef<HTMLInputElement>(null);\n\n const selectedRepo = repositories.find((r) => r.path === selectedRepositoryPath);\n const hasRepo = !!selectedRepositoryPath;\n\n // Reset state when drawer closes\n useEffect(() => {\n if (!open) {\n setBranchName('');\n setInputValue('');\n setComboboxOpen(false);\n setRepoOpen(false);\n setRepoQuery('');\n }\n }, [open]);\n\n // Reset branch selection when repository changes\n useEffect(() => {\n setBranchName('');\n setInputValue('');\n }, [selectedRepositoryPath]);\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = branchName.trim();\n if (!trimmed || !selectedRepositoryPath || isSubmitting) return;\n onSubmit(trimmed, selectedRepositoryPath);\n },\n [branchName, selectedRepositoryPath, isSubmitting, onSubmit]\n );\n\n const handleClose = useCallback(() => {\n setBranchName('');\n setInputValue('');\n onClose();\n }, [onClose]);\n\n const handleSelect = useCallback((branch: string) => {\n setBranchName(branch);\n setInputValue(branch);\n setComboboxOpen(false);\n }, []);\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n if (!comboboxOpen) setComboboxOpen(true);\n },\n [comboboxOpen]\n );\n\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = inputValue.trim();\n if (trimmed) {\n setBranchName(trimmed);\n setComboboxOpen(false);\n }\n }\n if (e.key === 'Escape') {\n setComboboxOpen(false);\n setInputValue(branchName);\n }\n },\n [inputValue, branchName]\n );\n\n const handleRepoSelect = useCallback(\n (path: string) => {\n onRepositoryChange?.(path);\n setRepoOpen(false);\n setRepoQuery('');\n },\n [onRepositoryChange]\n );\n\n const filteredBranches = branches.filter((b) =>\n b.toLowerCase().includes(inputValue.toLowerCase())\n );\n\n const filteredRepos = repoQuery.trim()\n ? repositories.filter(\n (r) =>\n r.name.toLowerCase().includes(repoQuery.toLowerCase()) ||\n r.path.toLowerCase().includes(repoQuery.toLowerCase())\n )\n : repositories;\n\n useEffect(() => {\n if (repoOpen) {\n setTimeout(() => repoInputRef.current?.focus(), 0);\n } else {\n setRepoQuery('');\n }\n }, [repoOpen]);\n\n const isDisabled = !branchName.trim() || !selectedRepositoryPath || isSubmitting;\n\n const header = (\n <div>\n <DrawerTitle className=\"flex items-center gap-2\">\n <GitBranch className=\"h-4 w-4\" />\n Adopt Branch\n </DrawerTitle>\n <DrawerDescription className=\"text-muted-foreground text-sm\">\n Import an existing git branch into ShipIT&apos;s feature tracking\n </DrawerDescription>\n </div>\n );\n\n return (\n <BaseDrawer\n open={open}\n onClose={handleClose}\n size=\"sm\"\n modal={false}\n header={header}\n data-testid=\"adopt-branch-drawer\"\n >\n <form onSubmit={handleSubmit} className=\"flex flex-1 flex-col\">\n <div className=\"flex-1 overflow-y-auto p-4\">\n <div className=\"flex flex-col gap-4\">\n {/* Repository selector */}\n <div className=\"flex flex-col gap-2\">\n <Label>Repository</Label>\n <Popover open={repoOpen} onOpenChange={setRepoOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={repoOpen}\n aria-label=\"Repository\"\n disabled={isSubmitting}\n data-testid=\"adopt-repo-combobox\"\n className={cn(\n 'border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n !selectedRepo && 'text-muted-foreground'\n )}\n >\n <span className=\"truncate\">\n {selectedRepo ? selectedRepo.name : 'Select repository...'}\n </span>\n <ChevronsUpDown className=\"ms-2 h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-80 p-0\"\n align=\"start\"\n data-testid=\"adopt-repo-combobox-content\"\n >\n <div className=\"flex flex-col\">\n <div className=\"border-b p-2\">\n <Input\n ref={repoInputRef}\n placeholder=\"Search repositories...\"\n value={repoQuery}\n onChange={(e) => setRepoQuery(e.target.value)}\n className=\"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0\"\n data-testid=\"adopt-repo-search\"\n />\n </div>\n <div\n className=\"max-h-48 overflow-y-auto py-1\"\n role=\"listbox\"\n aria-label=\"Repositories\"\n >\n {filteredRepos.length === 0 ? (\n <p className=\"text-muted-foreground px-3 py-2 text-sm\">\n No repositories found.\n </p>\n ) : (\n filteredRepos.map((r) => (\n <button\n key={r.id}\n type=\"button\"\n role=\"option\"\n aria-selected={selectedRepositoryPath === r.path}\n onClick={() => handleRepoSelect(r.path)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm',\n selectedRepositoryPath === r.path && 'bg-accent/50'\n )}\n data-testid={`adopt-repo-option-${r.id}`}\n >\n <CheckIcon\n className={cn(\n 'h-4 w-4 shrink-0',\n selectedRepositoryPath !== r.path && 'invisible'\n )}\n />\n <span className=\"flex flex-col items-start truncate\">\n <span className=\"truncate\">{r.name}</span>\n <span className=\"text-muted-foreground truncate text-xs\">\n {r.path}\n </span>\n </span>\n </button>\n ))\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n <p className=\"text-muted-foreground text-xs\">\n Select the repository that contains the branch you want to adopt.\n </p>\n </div>\n\n {/* Branch selector */}\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"branch-name\">Branch name</Label>\n <Popover open={comboboxOpen} onOpenChange={setComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={comboboxOpen}\n aria-invalid={!!error}\n aria-describedby={error ? 'adopt-branch-error-msg' : undefined}\n disabled={isSubmitting || !hasRepo}\n className=\"w-full justify-between font-normal\"\n data-testid=\"adopt-branch-input\"\n >\n <span className=\"truncate\">\n {!hasRepo\n ? 'Select a repository first...'\n : branchesLoading\n ? 'Loading branches...'\n : branchName || 'Select a branch...'}\n </span>\n <ChevronsUpDown className=\"ms-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-[var(--radix-popover-trigger-width)] p-0\"\n align=\"start\"\n >\n <Command>\n <CommandInput\n ref={inputRef}\n placeholder=\"Search branches...\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n data-testid=\"adopt-branch-search\"\n />\n <CommandList>\n {!branchesLoading && filteredBranches.length === 0 && (\n <CommandEmpty>\n {branches.length === 0\n ? 'No branches found.'\n : inputValue\n ? 'No match — press Enter to use this value.'\n : 'No branches available.'}\n </CommandEmpty>\n )}\n {branchesLoading ? (\n <CommandEmpty>\n <LoaderCircle className=\"mx-auto h-4 w-4 animate-spin\" />\n </CommandEmpty>\n ) : null}\n {filteredBranches.length > 0 && (\n <CommandGroup>\n {filteredBranches.map((branch) => (\n <CommandItem\n key={branch}\n selected={branch === branchName}\n onClick={() => handleSelect(branch)}\n >\n <Check\n className={cn(\n 'me-2 h-4 w-4',\n branch === branchName ? 'opacity-100' : 'opacity-0'\n )}\n />\n <GitBranch className=\"me-2 h-3 w-3 opacity-50\" />\n {branch}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n <p className=\"text-muted-foreground text-xs\">\n {hasRepo\n ? 'Select a branch from the dropdown or type to search. Local and remote branches are shown.'\n : 'Please select a repository above to see available branches.'}\n </p>\n </div>\n\n {error ? (\n <p\n id=\"adopt-branch-error-msg\"\n className=\"text-destructive text-sm\"\n role=\"alert\"\n data-testid=\"adopt-branch-error\"\n >\n {error}\n </p>\n ) : null}\n </div>\n </div>\n\n <div className=\"border-t p-4\">\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleClose}\n disabled={isSubmitting}\n className=\"flex-1\"\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={isDisabled}\n className=\"flex-1\"\n data-testid=\"adopt-branch-submit\"\n >\n {isSubmitting ? (\n <>\n <LoaderCircle className=\"me-2 h-4 w-4 animate-spin\" />\n Adopting...\n </>\n ) : (\n 'Adopt Branch'\n )}\n </Button>\n </div>\n </div>\n </form>\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Search } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\n/**\n * Command — minimal combobox primitives for model/item selection.\n *\n * Intentionally avoids the `cmdk` dependency and builds on native React +\n * Tailwind instead. Filtering logic lives in the consumer component.\n */\n\nconst Command = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className\n )}\n {...props}\n />\n )\n);\nCommand.displayName = 'Command';\n\nconst CommandInput = React.forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\">\n <Search className=\"me-2 h-4 w-4 shrink-0 opacity-50\" />\n <input\n ref={ref}\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n </div>\n));\nCommandInput.displayName = 'CommandInput';\n\nconst CommandList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('max-h-[300px] overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n )\n);\nCommandList.displayName = 'CommandList';\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('text-muted-foreground py-6 text-center text-sm', className)}\n {...props}\n />\n )\n);\nCommandEmpty.displayName = 'CommandEmpty';\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-foreground overflow-hidden p-1', className)} {...props} />\n )\n);\nCommandGroup.displayName = 'CommandGroup';\n\ninterface CommandItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n}\n\nconst CommandItem = React.forwardRef<HTMLButtonElement, CommandItemProps>(\n ({ className, selected, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n data-selected={selected}\n className={cn(\n 'relative flex w-full cursor-default items-center rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none',\n 'hover:bg-accent hover:text-accent-foreground',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n )\n);\nCommandItem.displayName = 'CommandItem';\n\nconst CommandSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('bg-border -mx-1 h-px', className)} {...props} />\n )\n);\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n};\n"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%401.7.0_react%4019.2.4/node_modules/lucide-react/src/icons/chevrons-up-down.ts","../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-drawer-client.tsx","../../../../../../../src/presentation/web/app/actions/data%3A165015%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A64be15%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/control-center-drawer/adopt-branch-drawer.tsx","../../../../../../../src/presentation/web/components/ui/command.tsx"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'm7 15 5 5 5-5', key: '1hf1tw' }],\n ['path', { d: 'm7 9 5-5 5 5', key: 'sgt6xg' }],\n];\n\n/**\n * @component @name ChevronsUpDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNyAxNSA1IDUgNS01IiAvPgogIDxwYXRoIGQ9Im03IDkgNS01IDUgNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/chevrons-up-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronsUpDown = createLucideIcon('chevrons-up-down', __iconNode);\n\nexport default ChevronsUpDown;\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useRouter, usePathname } from 'next/navigation';\nimport { toast } from 'sonner';\nimport { adoptBranch } from '@/app/actions/adopt-branch';\nimport { listBranches } from '@/app/actions/list-branches';\nimport { AdoptBranchDrawer } from './adopt-branch-drawer';\nimport type { RepositoryOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\n\nexport interface AdoptDrawerClientProps {\n repositoryPath: string;\n repositories: RepositoryOption[];\n}\n\nexport function AdoptDrawerClient({ repositoryPath, repositories }: AdoptDrawerClientProps) {\n const router = useRouter();\n const pathname = usePathname();\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [error, setError] = useState<string>();\n const [branches, setBranches] = useState<string[]>([]);\n const [branchesLoading, setBranchesLoading] = useState(false);\n const [selectedRepoPath, setSelectedRepoPath] = useState(repositoryPath);\n\n const isOnAdoptRoute = pathname.startsWith('/adopt');\n const isOpen = !isSubmitting && isOnAdoptRoute;\n\n // Reset isSubmitting once the route has actually changed away from /adopt\n useEffect(() => {\n if (!isOnAdoptRoute && isSubmitting) {\n setIsSubmitting(false);\n }\n }, [isOnAdoptRoute, isSubmitting]);\n\n // Clear error when drawer reopens and reset selected repo to default\n useEffect(() => {\n if (isOnAdoptRoute) {\n setError(undefined);\n setSelectedRepoPath(repositoryPath);\n }\n }, [isOnAdoptRoute, repositoryPath]);\n\n // Fetch branches when drawer opens AND a repository is selected\n useEffect(() => {\n if (isOnAdoptRoute && selectedRepoPath) {\n setBranchesLoading(true);\n setBranches([]);\n listBranches(selectedRepoPath)\n .then(setBranches)\n .catch(() => setBranches([]))\n .finally(() => setBranchesLoading(false));\n } else {\n setBranches([]);\n }\n }, [isOnAdoptRoute, selectedRepoPath]);\n\n const onClose = useCallback(() => {\n router.push('/');\n }, [router]);\n\n const handleRepositoryChange = useCallback((path: string) => {\n setSelectedRepoPath(path);\n }, []);\n\n const onSubmit = useCallback(\n (branchName: string, repoPath: string) => {\n setError(undefined);\n setIsSubmitting(true);\n router.push('/');\n\n adoptBranch({ branchName, repositoryPath: repoPath })\n .then((result) => {\n if (result.error) {\n toast.error(result.error);\n return;\n }\n window.dispatchEvent(\n new CustomEvent('shipit-ai:feature-created', {\n detail: {\n featureId: result.feature!.id,\n name: result.feature!.name,\n description: result.feature!.description,\n repositoryPath: result.feature!.repositoryPath,\n },\n })\n );\n toast.success(`Branch adopted as \"${result.feature!.name}\"`);\n })\n .catch(() => {\n toast.error('Failed to adopt branch');\n setIsSubmitting(false);\n });\n },\n [router]\n );\n\n return (\n <AdoptBranchDrawer\n open={isOpen}\n onClose={onClose}\n onSubmit={onSubmit}\n isSubmitting={isSubmitting}\n error={error}\n repositories={repositories}\n selectedRepositoryPath={selectedRepoPath}\n onRepositoryChange={handleRepositoryChange}\n branches={branches}\n branchesLoading={branchesLoading}\n />\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40d6615da9729802995fcb56fc1a1523d6183da0b1\":{\"name\":\"adoptBranch\"}},\"src/presentation/web/app/actions/adopt-branch.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40d6615da9729802995fcb56fc1a1523d6183da0b1\",callServer,void 0,findSourceMapURL,\"adoptBranch\");export{$$RSC_SERVER_ACTION_0 as adoptBranch};","/* __next_internal_action_entry_do_not_use__ [{\"401a9e620898970d7c096af0949efae813b2cfab73\":{\"name\":\"listBranches\"}},\"src/presentation/web/app/actions/list-branches.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"401a9e620898970d7c096af0949efae813b2cfab73\",callServer,void 0,findSourceMapURL,\"listBranches\");export{$$RSC_SERVER_ACTION_0 as listBranches};","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { Check, CheckIcon, ChevronsUpDown, GitBranch, LoaderCircle } from 'lucide-react';\nimport { BaseDrawer } from '@/components/common/base-drawer';\nimport { DrawerTitle, DrawerDescription } from '@/components/ui/drawer';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/ui/command';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport { cn } from '@/lib/utils';\nimport type { RepositoryOption } from '@/components/common/feature-create-drawer/feature-create-drawer';\n\nexport interface AdoptBranchDrawerProps {\n open: boolean;\n onClose: () => void;\n onSubmit: (branchName: string, repositoryPath: string) => void;\n isSubmitting?: boolean;\n error?: string;\n /** Available repositories for the repository selector */\n repositories?: RepositoryOption[];\n /** Currently selected repository path */\n selectedRepositoryPath?: string;\n /** Callback when user selects a different repository */\n onRepositoryChange?: (repositoryPath: string) => void;\n /** Available branch names for the combobox dropdown */\n branches?: string[];\n /** Whether branches are still loading */\n branchesLoading?: boolean;\n}\n\nexport function AdoptBranchDrawer({\n open,\n onClose,\n onSubmit,\n isSubmitting = false,\n error,\n repositories = [],\n selectedRepositoryPath,\n onRepositoryChange,\n branches = [],\n branchesLoading = false,\n}: AdoptBranchDrawerProps) {\n const [branchName, setBranchName] = useState('');\n const [comboboxOpen, setComboboxOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n const [repoOpen, setRepoOpen] = useState(false);\n const [repoQuery, setRepoQuery] = useState('');\n const repoInputRef = useRef<HTMLInputElement>(null);\n\n const selectedRepo = repositories.find((r) => r.path === selectedRepositoryPath);\n const hasRepo = !!selectedRepositoryPath;\n\n // Reset state when drawer closes\n useEffect(() => {\n if (!open) {\n setBranchName('');\n setInputValue('');\n setComboboxOpen(false);\n setRepoOpen(false);\n setRepoQuery('');\n }\n }, [open]);\n\n // Reset branch selection when repository changes\n useEffect(() => {\n setBranchName('');\n setInputValue('');\n }, [selectedRepositoryPath]);\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = branchName.trim();\n if (!trimmed || !selectedRepositoryPath || isSubmitting) return;\n onSubmit(trimmed, selectedRepositoryPath);\n },\n [branchName, selectedRepositoryPath, isSubmitting, onSubmit]\n );\n\n const handleClose = useCallback(() => {\n setBranchName('');\n setInputValue('');\n onClose();\n }, [onClose]);\n\n const handleSelect = useCallback((branch: string) => {\n setBranchName(branch);\n setInputValue(branch);\n setComboboxOpen(false);\n }, []);\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n if (!comboboxOpen) setComboboxOpen(true);\n },\n [comboboxOpen]\n );\n\n const handleInputKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = inputValue.trim();\n if (trimmed) {\n setBranchName(trimmed);\n setComboboxOpen(false);\n }\n }\n if (e.key === 'Escape') {\n setComboboxOpen(false);\n setInputValue(branchName);\n }\n },\n [inputValue, branchName]\n );\n\n const handleRepoSelect = useCallback(\n (path: string) => {\n onRepositoryChange?.(path);\n setRepoOpen(false);\n setRepoQuery('');\n },\n [onRepositoryChange]\n );\n\n const filteredBranches = branches.filter((b) =>\n b.toLowerCase().includes(inputValue.toLowerCase())\n );\n\n const filteredRepos = repoQuery.trim()\n ? repositories.filter(\n (r) =>\n r.name.toLowerCase().includes(repoQuery.toLowerCase()) ||\n r.path.toLowerCase().includes(repoQuery.toLowerCase())\n )\n : repositories;\n\n useEffect(() => {\n if (repoOpen) {\n setTimeout(() => repoInputRef.current?.focus(), 0);\n } else {\n setRepoQuery('');\n }\n }, [repoOpen]);\n\n const isDisabled = !branchName.trim() || !selectedRepositoryPath || isSubmitting;\n\n const header = (\n <div>\n <DrawerTitle className=\"flex items-center gap-2\">\n <GitBranch className=\"h-4 w-4\" />\n Adopt Branch\n </DrawerTitle>\n <DrawerDescription className=\"text-muted-foreground text-sm\">\n Import an existing git branch into ShipIT&apos;s feature tracking\n </DrawerDescription>\n </div>\n );\n\n return (\n <BaseDrawer\n open={open}\n onClose={handleClose}\n size=\"sm\"\n modal={false}\n header={header}\n data-testid=\"adopt-branch-drawer\"\n >\n <form onSubmit={handleSubmit} className=\"flex flex-1 flex-col\">\n <div className=\"flex-1 overflow-y-auto p-4\">\n <div className=\"flex flex-col gap-4\">\n {/* Repository selector */}\n <div className=\"flex flex-col gap-2\">\n <Label>Repository</Label>\n <Popover open={repoOpen} onOpenChange={setRepoOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n role=\"combobox\"\n aria-expanded={repoOpen}\n aria-label=\"Repository\"\n disabled={isSubmitting}\n data-testid=\"adopt-repo-combobox\"\n className={cn(\n 'border-input bg-background ring-offset-background focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n !selectedRepo && 'text-muted-foreground'\n )}\n >\n <span className=\"truncate\">\n {selectedRepo ? selectedRepo.name : 'Select repository...'}\n </span>\n <ChevronsUpDown className=\"ms-2 h-4 w-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-80 p-0\"\n align=\"start\"\n data-testid=\"adopt-repo-combobox-content\"\n >\n <div className=\"flex flex-col\">\n <div className=\"border-b p-2\">\n <Input\n ref={repoInputRef}\n placeholder=\"Search repositories...\"\n value={repoQuery}\n onChange={(e) => setRepoQuery(e.target.value)}\n className=\"h-8 border-0 p-0 text-sm shadow-none focus-visible:ring-0\"\n data-testid=\"adopt-repo-search\"\n />\n </div>\n <div\n className=\"max-h-48 overflow-y-auto py-1\"\n role=\"listbox\"\n aria-label=\"Repositories\"\n >\n {filteredRepos.length === 0 ? (\n <p className=\"text-muted-foreground px-3 py-2 text-sm\">\n No repositories found.\n </p>\n ) : (\n filteredRepos.map((r) => (\n <button\n key={r.id}\n type=\"button\"\n role=\"option\"\n aria-selected={selectedRepositoryPath === r.path}\n onClick={() => handleRepoSelect(r.path)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-center gap-2 px-3 py-2 text-sm',\n selectedRepositoryPath === r.path && 'bg-accent/50'\n )}\n data-testid={`adopt-repo-option-${r.id}`}\n >\n <CheckIcon\n className={cn(\n 'h-4 w-4 shrink-0',\n selectedRepositoryPath !== r.path && 'invisible'\n )}\n />\n <span className=\"flex flex-col items-start truncate\">\n <span className=\"truncate\">{r.name}</span>\n <span className=\"text-muted-foreground truncate text-xs\">\n {r.path}\n </span>\n </span>\n </button>\n ))\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n <p className=\"text-muted-foreground text-xs\">\n Select the repository that contains the branch you want to adopt.\n </p>\n </div>\n\n {/* Branch selector */}\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"branch-name\">Branch name</Label>\n <Popover open={comboboxOpen} onOpenChange={setComboboxOpen}>\n <PopoverTrigger asChild>\n <Button\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={comboboxOpen}\n aria-invalid={!!error}\n aria-describedby={error ? 'adopt-branch-error-msg' : undefined}\n disabled={isSubmitting || !hasRepo}\n className=\"w-full justify-between font-normal\"\n data-testid=\"adopt-branch-input\"\n >\n <span className=\"truncate\">\n {!hasRepo\n ? 'Select a repository first...'\n : branchesLoading\n ? 'Loading branches...'\n : branchName || 'Select a branch...'}\n </span>\n <ChevronsUpDown className=\"ms-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-[var(--radix-popover-trigger-width)] p-0\"\n align=\"start\"\n >\n <Command>\n <CommandInput\n ref={inputRef}\n placeholder=\"Search branches...\"\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleInputKeyDown}\n data-testid=\"adopt-branch-search\"\n />\n <CommandList>\n {!branchesLoading && filteredBranches.length === 0 && (\n <CommandEmpty>\n {branches.length === 0\n ? 'No branches found.'\n : inputValue\n ? 'No match — press Enter to use this value.'\n : 'No branches available.'}\n </CommandEmpty>\n )}\n {branchesLoading ? (\n <CommandEmpty>\n <LoaderCircle className=\"mx-auto h-4 w-4 animate-spin\" />\n </CommandEmpty>\n ) : null}\n {filteredBranches.length > 0 && (\n <CommandGroup>\n {filteredBranches.map((branch) => (\n <CommandItem\n key={branch}\n selected={branch === branchName}\n onClick={() => handleSelect(branch)}\n >\n <Check\n className={cn(\n 'me-2 h-4 w-4',\n branch === branchName ? 'opacity-100' : 'opacity-0'\n )}\n />\n <GitBranch className=\"me-2 h-3 w-3 opacity-50\" />\n {branch}\n </CommandItem>\n ))}\n </CommandGroup>\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n <p className=\"text-muted-foreground text-xs\">\n {hasRepo\n ? 'Select a branch from the dropdown or type to search. Local and remote branches are shown.'\n : 'Please select a repository above to see available branches.'}\n </p>\n </div>\n\n {error ? (\n <p\n id=\"adopt-branch-error-msg\"\n className=\"text-destructive text-sm\"\n role=\"alert\"\n data-testid=\"adopt-branch-error\"\n >\n {error}\n </p>\n ) : null}\n </div>\n </div>\n\n <div className=\"border-t p-4\">\n <div className=\"flex gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleClose}\n disabled={isSubmitting}\n className=\"flex-1\"\n >\n Cancel\n </Button>\n <Button\n type=\"submit\"\n disabled={isDisabled}\n className=\"flex-1\"\n data-testid=\"adopt-branch-submit\"\n >\n {isSubmitting ? (\n <>\n <LoaderCircle className=\"me-2 h-4 w-4 animate-spin\" />\n Adopting...\n </>\n ) : (\n 'Adopt Branch'\n )}\n </Button>\n </div>\n </div>\n </form>\n </BaseDrawer>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Search } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\n/**\n * Command — minimal combobox primitives for model/item selection.\n *\n * Intentionally avoids the `cmdk` dependency and builds on native React +\n * Tailwind instead. Filtering logic lives in the consumer component.\n */\n\nconst Command = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md',\n className\n )}\n {...props}\n />\n )\n);\nCommand.displayName = 'Command';\n\nconst CommandInput = React.forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\">\n <Search className=\"me-2 h-4 w-4 shrink-0 opacity-50\" />\n <input\n ref={ref}\n className={cn(\n 'placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n </div>\n));\nCommandInput.displayName = 'CommandInput';\n\nconst CommandList = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('max-h-[300px] overflow-x-hidden overflow-y-auto', className)}\n {...props}\n />\n )\n);\nCommandList.displayName = 'CommandList';\n\nconst CommandEmpty = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('text-muted-foreground py-6 text-center text-sm', className)}\n {...props}\n />\n )\n);\nCommandEmpty.displayName = 'CommandEmpty';\n\nconst CommandGroup = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('text-foreground overflow-hidden p-1', className)} {...props} />\n )\n);\nCommandGroup.displayName = 'CommandGroup';\n\ninterface CommandItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n selected?: boolean;\n}\n\nconst CommandItem = React.forwardRef<HTMLButtonElement, CommandItemProps>(\n ({ className, selected, ...props }, ref) => (\n <button\n ref={ref}\n type=\"button\"\n data-selected={selected}\n className={cn(\n 'relative flex w-full cursor-default items-center rounded-sm px-2 py-1.5 text-sm transition-colors outline-none select-none',\n 'hover:bg-accent hover:text-accent-foreground',\n 'data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n )\n);\nCommandItem.displayName = 'CommandItem';\n\nconst CommandSeparator = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} className={cn('bg-border -mx-1 h-px', className)} {...props} />\n )\n);\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n};\n"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"uCAmBA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAjB,AAAiB,CAAjB,AAAiB,CAAjB,AAAiB,CAAA,CAAA,CAAA,CAAA,GAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAhBJ,CAgBwB,AAf1D,CAe0D,AAfzD,CAeyD,AAfzD,CAAA,AAeyD,CAAA,AAfzD,CAAA,AAeyD,CAfzD,AAeyD,CAfzD,AAeyD,CAAA,AAfzD,AAAQ,CAeiD,AAfjD,AAAE,CAeyD,CAftD,AAesD,CAftD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAiB,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC9C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAgB,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC/C,6ECJA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OCJ6M,EAAA,EAAA,CAAA,CAAA,MAAsG,IAAMA,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,eCAvI,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAa,AAAqB,EAAC,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,gBCGpc,IAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,CAAA,CAAA,OAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,MACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,OCLA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OASA,IAAM,EAAU,EAAA,UAAgB,CAC9B,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,4FACA,GAED,GAAG,CAAK,IAIf,EAAQ,WAAW,CAAG,UAEtB,IAAM,EAAe,EAAA,UAAgB,CAGnC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IAC1B,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,4CACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,UAAU,qCAClB,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,yJACA,GAED,GAAG,CAAK,OAIf,EAAa,WAAW,CAAG,eAE3B,IAAM,EAAc,EAAA,UAAgB,CAClC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,kDAAmD,GAChE,GAAG,CAAK,IAIf,EAAY,WAAW,CAAG,cAE1B,IAAM,EAAe,EAAA,UAAgB,CACnC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,IAAK,EACL,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,iDAAkD,GAC/D,GAAG,CAAK,IAIf,EAAa,WAAW,CAAG,eAE3B,IAAM,EAAe,EAAA,UAAgB,CACnC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,IAAK,EAAK,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,sCAAuC,GAAa,GAAG,CAAK,IAG7F,EAAa,WAAW,CAAG,eAM3B,IAAM,EAAc,EAAA,UAAgB,CAClC,CAAC,WAAE,CAAS,UAAE,CAAQ,CAAE,GAAG,EAAO,CAAE,IAClC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,IAAK,EACL,KAAK,SACL,gBAAe,EACf,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,6HACA,+CACA,6EACA,mDACA,GAED,GAAG,CAAK,IAIf,EAAY,WAAW,CAAG,cAED,AAKzB,EALyB,UAAgB,CACvC,CAAC,WAAE,CAAS,CAAE,GAAG,EAAO,CAAE,IACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,IAAK,EAAK,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EAAC,uBAAwB,GAAa,GAAG,CAAK,IAG7D,WAAW,CAAG,mBDtF/B,IAAA,EAAA,EAAA,CAAA,CAAA,OAsBO,SAAS,EAAkB,MAChC,CAAI,SACJ,CAAO,UACP,CAAQ,cACR,GAAe,CAAK,OACpB,CAAK,cACL,EAAe,EAAE,wBACjB,CAAsB,oBACtB,CAAkB,UAClB,EAAW,EAAE,iBACb,GAAkB,CAAK,CACA,EACvB,GAAM,CAAC,EAAY,EAAc,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IACvC,CAAC,EAAc,EAAgB,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAS,IAC3C,CAAC,EAAY,EAAc,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IACvC,EAAW,CAAA,EAAA,EAAA,MAAA,AAAM,EAAmB,MACpC,CAAC,EAAU,EAAY,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,GAAS,GACnC,CAAC,EAAW,EAAa,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IACrC,EAAe,CAAA,EAAA,EAAA,MAAA,AAAM,EAAmB,MAExC,EAAe,EAAa,IAAI,CAAE,AAAD,GAAO,EAAE,IAAI,GAAK,GACnD,EAAU,CAAC,CAAC,EAGlB,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACH,IACH,EADS,AACK,IACd,EAAc,IACd,GAAgB,GAChB,GAAY,GACZ,EAAa,IAEjB,EAAG,CAAC,EAAK,EAGT,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,EAAc,IACd,EAAc,GAChB,EAAG,CAAC,EAAuB,EAE3B,IAAM,EAAe,CAAA,EAAA,EAAA,WAAW,AAAX,EACnB,AAAC,IACC,EAAE,cAAc,GAChB,IAAM,EAAU,EAAW,IAAI,GAC1B,GAAY,IAA0B,GAC3C,CADgB,CACP,EAAS,EACpB,EACA,CAAC,EAH0D,AAG9C,EAAwB,EAAc,EAAS,EAGxD,EAAc,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,KAC9B,EAAc,IACd,EAAc,IACd,GACF,EAAG,CAAC,EAAQ,EAEN,EAAe,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,AAAC,IAChC,EAAc,GACd,EAAc,GACd,GAAgB,EAClB,EAAG,EAAE,EAEC,EAAoB,CAAA,EAAA,EAAA,WAAA,AAAW,EACnC,AAAC,IACC,EAAc,EAAE,MAAM,CAAC,KAAK,EACxB,AAAC,GAAc,GAAgB,EACrC,EACA,CAAC,EAAa,EAGV,EAAqB,CAAA,EAAA,EAAA,WAAA,AAAW,EACpC,AAAC,IACC,GAAc,UAAV,EAAE,GAAG,CAAc,CACrB,EAAE,cAAc,GAChB,IAAM,EAAU,EAAW,IAAI,GAC3B,IACF,EAAc,GACd,AAFW,GAEK,GAEpB,CACc,UAAU,CAApB,EAAE,GAAG,GACP,GAAgB,GAChB,EAAc,GAElB,EACA,CAAC,EAAY,EAAW,EAGpB,EAAmB,CAAA,EAAA,EAAA,WAAA,AAAW,EAClC,AAAC,IACC,IAAqB,GACrB,GAAY,GACZ,EAAa,GACf,EACA,CAAC,EAAmB,EAGhB,EAAmB,EAAS,MAAM,CAAC,AAAC,GACxC,EAAE,WAAW,GAAG,QAAQ,CAAC,EAAW,WAAW,KAG3C,EAAgB,EAAU,IAAI,GAChC,EAAa,MAAM,CACjB,AAAC,GACC,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAU,WAAW,KACnD,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,EAAU,WAAW,KAEvD,EAEJ,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,EACF,QADY,GACD,IAAM,EAAa,OAAO,EAAE,QAAS,GAEhD,EAAa,GAEjB,EAAG,CAAC,EAAS,EAEb,IAAM,EAAa,CAAC,EAAW,IAAI,IAAM,CAAC,GAA0B,EAE9D,GACJ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,WACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WAAW,CAAA,CAAC,UAAU,oCACrB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,YAAY,kBAGnC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,iBAAiB,CAAA,CAAC,UAAU,yCAAgC,oEAMjE,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CACT,KAAM,EACN,QAAS,EACT,KAAK,KACL,OAAO,EACP,OAAQ,GACR,cAAY,+BAEZ,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,SAAU,EAAc,UAAU,iCACtC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,sCACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,gCAEb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,gCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,UAAC,eACP,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAO,CAAA,CAAC,KAAM,EAAU,aAAc,YACrC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,OAAO,CAAA,CAAA,WACrB,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACC,KAAK,SACL,KAAK,WACL,gBAAe,EACf,aAAW,aACX,SAAU,EACV,cAAY,sBACZ,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,yPACA,CAAC,GAAgB,mCAGnB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,oBACb,EAAe,EAAa,IAAI,CAAG,yBAEtC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,UAAU,0CAG9B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CACb,UAAU,WACV,MAAM,QACN,cAAY,uCAEZ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,0BACb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,wBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,IAAK,EACL,YAAY,yBACZ,MAAO,EACP,SAAU,AAAC,GAAM,EAAa,EAAE,MAAM,CAAC,KAAK,EAC5C,UAAU,4DACV,cAAY,wBAGhB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,UAAU,gCACV,KAAK,UACL,aAAW,wBAEV,AAAyB,MAAX,MAAM,CACnB,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,mDAA0C,2BAIvD,EAAc,GAAG,CAAC,AAAC,GACjB,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAEC,KAAK,SACL,KAAK,SACL,gBAAe,IAA2B,EAAE,IAAI,CAChD,QAAS,IAAM,EAAiB,EAAE,IAAI,EACtC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,gGACA,IAA2B,EAAE,IAAI,EAAI,gBAEvC,cAAa,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAA,CAAE,WAExC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CACR,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,mBACA,IAA2B,EAAE,IAAI,EAAI,eAGzC,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,UAAU,+CACd,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,oBAAY,EAAE,IAAI,GAClC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,kDACb,EAAE,IAAI,QApBN,EAAE,EAAE,aA8BvB,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yCAAgC,yEAM/C,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,gCACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,QAAQ,uBAAc,gBAC7B,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAO,CAAA,CAAC,KAAM,EAAc,aAAc,YACzC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,OAAO,CAAA,CAAA,WACrB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,UACR,KAAK,WACL,gBAAe,EACf,eAAc,CAAC,CAAC,EAChB,mBAAkB,EAAQ,8BAA2B,EACrD,SAAU,GAAgB,CAAC,EAC3B,UAAU,qCACV,cAAY,+BAEZ,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,oBACb,AAAC,EAEE,EACE,sBACA,GAAc,qBAHhB,iCAKN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,UAAU,0CAG9B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CACb,UAAU,6CACV,MAAM,iBAEN,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,IAAK,EACL,YAAY,qBACZ,MAAO,EACP,SAAU,EACV,UAAW,EACX,cAAY,wBAEd,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,WACE,CAAC,GAA+C,IAA5B,EAAiB,MAAM,EAC1C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACsB,IAApB,EAAS,MAAM,CACZ,qBACA,EACE,4CACA,2BAGT,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,mCAExB,KACH,EAAiB,MAAM,CAAG,GACzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UACE,EAAiB,GAAG,CAAC,AAAC,GACrB,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,CAEC,SAAU,IAAW,EACrB,QAAS,IAAM,EAAa,aAE5B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,UAAW,CAAA,EAAA,EAAA,EAAE,AAAF,EACT,eACA,IAAW,EAAa,cAAgB,eAG5C,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,4BACpB,IAXI,iBAoBrB,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,yCACV,EACG,4FACA,mEAIP,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CACC,GAAG,yBACH,UAAU,2BACV,KAAK,QACL,cAAY,8BAEX,IAED,UAIR,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,wBACb,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,KAAK,SACL,QAAQ,UACR,QAAS,EACT,SAAU,EACV,UAAU,kBACX,WAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,KAAK,SACL,SAAU,EACV,UAAU,SACV,cAAY,+BAEX,EACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,8BAA8B,iBAIxD,0BAQhB,4BH7XO,SAA2B,AAAlB,gBAAoB,CAAc,CAAE,cAAY,CAA0B,EACxF,IAAM,EAAS,CAAA,EAAA,EAAA,SAAA,AAAS,IAClB,EAAW,CAAA,EAAA,EAAA,WAAA,AAAW,IACtB,CAAC,EAAc,EAAgB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GAC3C,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,IAC5B,CAAC,EAAU,EAAY,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,EAAmB,EAAE,EAC/C,CAAC,EAAiB,EAAmB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GACjD,CAAC,EAAkB,EAAoB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,GAEnD,EAAiB,EAAS,UAAU,CAAC,UACrC,EAAS,CAAC,GAAgB,EAGhC,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,CAAC,GAAkB,GACrB,GAAgB,EAEpB,EAAG,CAAC,EAAgB,CAHmB,CAGN,EAGjC,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,IACF,OAAS,GACT,EAFkB,AAEE,GAExB,EAAG,CAAC,EAAgB,EAAe,EAGnC,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,GAAkB,GACpB,GAAmB,GACnB,EAAY,EAAE,EACd,EAAa,CAHyB,EAInC,IAAI,CAAC,GACL,KAAK,CAAC,IAAM,EAAY,EAAE,GAC1B,OAAO,CAAC,IAAM,GAAmB,KAEpC,EAAY,EAAE,CAElB,EAAG,CAAC,EAAgB,EAAiB,EAErC,IAAM,EAAU,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,KAC1B,EAAO,IAAI,CAAC,IACd,EAAG,CAAC,EAAO,EAEL,EAAyB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,AAAC,IAC1C,EAAoB,EACtB,EAAG,EAAE,EAEC,EAAW,CAAA,EAAA,EAAA,WAAA,AAAW,EAC1B,CAAC,EAAoB,KACnB,OAAS,GACT,GAAgB,GAChB,EAAO,IAAI,CAAC,KAEZ,EAAY,YAAE,EAAY,eAAgB,CAAS,GAChD,IAAI,CAAE,AAAD,IACJ,AAAI,EAAO,KAAK,CACd,CADgB,CAChB,KAAK,CAAC,KAAK,CAAC,EAAO,KAAK,GAG1B,OAAO,aAAa,CAClB,IAAI,YAAY,4BAA6B,CAC3C,OAAQ,CACN,UAAW,EAAO,OAAO,CAAE,EAAE,CAC7B,KAAM,EAAO,OAAO,CAAE,IAAI,CAC1B,YAAa,EAAO,OAAO,CAAE,WAAW,CACxC,eAAgB,EAAO,OAAO,CAAE,cAClC,AADgD,CAElD,IAEF,EAAA,KAAK,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,EAAO,OAAO,CAAE,IAAI,CAAC,CAAC,CAAC,EAC7D,GACC,KAAK,CAAC,KACL,EAAA,KAAK,CAAC,KAAK,CAAC,0BACZ,GAAgB,EAClB,EACJ,EACA,CAAC,EAAO,EAGV,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,KAAM,EACN,QAAS,EACT,SAAU,EACV,aAAc,EACd,MAAO,EACP,aAAc,EACd,uBAAwB,EACxB,mBAAoB,EACpB,SAAU,EACV,gBAAiB,GAGvB","ignoreList":[0]}