@shepai/cli 1.122.0 → 1.122.1-pr373.cb974c2

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 (362) hide show
  1. package/dist/src/presentation/web/app/actions/execute-query.d.ts +7 -0
  2. package/dist/src/presentation/web/app/actions/execute-query.d.ts.map +1 -0
  3. package/dist/src/presentation/web/app/actions/execute-query.js +55 -0
  4. package/dist/src/presentation/web/app/actions/get-table-rows.d.ts +10 -0
  5. package/dist/src/presentation/web/app/actions/get-table-rows.d.ts.map +1 -0
  6. package/dist/src/presentation/web/app/actions/get-table-rows.js +55 -0
  7. package/dist/src/presentation/web/app/actions/get-table-schema.d.ts +13 -0
  8. package/dist/src/presentation/web/app/actions/get-table-schema.d.ts.map +1 -0
  9. package/dist/src/presentation/web/app/actions/get-table-schema.js +27 -0
  10. package/dist/src/presentation/web/app/actions/list-tables.d.ts +10 -0
  11. package/dist/src/presentation/web/app/actions/list-tables.d.ts.map +1 -0
  12. package/dist/src/presentation/web/app/actions/list-tables.js +19 -0
  13. package/dist/src/presentation/web/app/database/page.d.ts +4 -0
  14. package/dist/src/presentation/web/app/database/page.d.ts.map +1 -0
  15. package/dist/src/presentation/web/app/database/page.js +15 -0
  16. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.d.ts.map +1 -1
  17. package/dist/src/presentation/web/components/common/control-center-drawer/feature-drawer-client.js +4 -0
  18. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.d.ts.map +1 -1
  19. package/dist/src/presentation/web/components/features/control-center/use-control-center-state.js +6 -2
  20. package/dist/src/presentation/web/components/features/database/cell-value-dialog.d.ts +8 -0
  21. package/dist/src/presentation/web/components/features/database/cell-value-dialog.d.ts.map +1 -0
  22. package/dist/src/presentation/web/components/features/database/cell-value-dialog.js +7 -0
  23. package/dist/src/presentation/web/components/features/database/cell-value-dialog.stories.d.ts +10 -0
  24. package/dist/src/presentation/web/components/features/database/cell-value-dialog.stories.d.ts.map +1 -0
  25. package/dist/src/presentation/web/components/features/database/cell-value-dialog.stories.js +48 -0
  26. package/dist/src/presentation/web/components/features/database/database-page-client.d.ts +13 -0
  27. package/dist/src/presentation/web/components/features/database/database-page-client.d.ts.map +1 -0
  28. package/dist/src/presentation/web/components/features/database/database-page-client.js +74 -0
  29. package/dist/src/presentation/web/components/features/database/database-page-client.stories.d.ts +9 -0
  30. package/dist/src/presentation/web/components/features/database/database-page-client.stories.d.ts.map +1 -0
  31. package/dist/src/presentation/web/components/features/database/database-page-client.stories.js +78 -0
  32. package/dist/src/presentation/web/components/features/database/query-runner.d.ts +9 -0
  33. package/dist/src/presentation/web/components/features/database/query-runner.d.ts.map +1 -0
  34. package/dist/src/presentation/web/components/features/database/query-runner.js +53 -0
  35. package/dist/src/presentation/web/components/features/database/query-runner.stories.d.ts +9 -0
  36. package/dist/src/presentation/web/components/features/database/query-runner.stories.d.ts.map +1 -0
  37. package/dist/src/presentation/web/components/features/database/query-runner.stories.js +55 -0
  38. package/dist/src/presentation/web/components/features/database/row-browser.d.ts +11 -0
  39. package/dist/src/presentation/web/components/features/database/row-browser.d.ts.map +1 -0
  40. package/dist/src/presentation/web/components/features/database/row-browser.js +42 -0
  41. package/dist/src/presentation/web/components/features/database/row-browser.stories.d.ts +14 -0
  42. package/dist/src/presentation/web/components/features/database/row-browser.stories.d.ts.map +1 -0
  43. package/dist/src/presentation/web/components/features/database/row-browser.stories.js +120 -0
  44. package/dist/src/presentation/web/components/features/database/schema-viewer.d.ts +7 -0
  45. package/dist/src/presentation/web/components/features/database/schema-viewer.d.ts.map +1 -0
  46. package/dist/src/presentation/web/components/features/database/schema-viewer.js +14 -0
  47. package/dist/src/presentation/web/components/features/database/schema-viewer.stories.d.ts +11 -0
  48. package/dist/src/presentation/web/components/features/database/schema-viewer.stories.d.ts.map +1 -0
  49. package/dist/src/presentation/web/components/features/database/schema-viewer.stories.js +67 -0
  50. package/dist/src/presentation/web/components/features/database/table-list.d.ts +8 -0
  51. package/dist/src/presentation/web/components/features/database/table-list.d.ts.map +1 -0
  52. package/dist/src/presentation/web/components/features/database/table-list.js +19 -0
  53. package/dist/src/presentation/web/components/features/database/table-list.stories.d.ts +10 -0
  54. package/dist/src/presentation/web/components/features/database/table-list.stories.d.ts.map +1 -0
  55. package/dist/src/presentation/web/components/features/database/table-list.stories.js +66 -0
  56. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  57. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  58. package/dist/src/presentation/web/components/ui/table.d.ts +11 -0
  59. package/dist/src/presentation/web/components/ui/table.d.ts.map +1 -0
  60. package/dist/src/presentation/web/components/ui/table.js +28 -0
  61. package/dist/src/presentation/web/lib/server-container.d.ts +1 -2
  62. package/dist/src/presentation/web/lib/server-container.d.ts.map +1 -1
  63. package/dist/src/presentation/web/lib/server-db.d.ts +16 -0
  64. package/dist/src/presentation/web/lib/server-db.d.ts.map +1 -0
  65. package/dist/src/presentation/web/lib/server-db.js +10 -0
  66. package/dist/src/presentation/web/lib/sql-validation.d.ts +7 -0
  67. package/dist/src/presentation/web/lib/sql-validation.d.ts.map +1 -0
  68. package/dist/src/presentation/web/lib/sql-validation.js +17 -0
  69. package/dist/tsconfig.build.tsbuildinfo +1 -1
  70. package/package.json +1 -1
  71. package/web/.next/BUILD_ID +1 -1
  72. package/web/.next/app-path-routes-manifest.json +1 -0
  73. package/web/.next/build-manifest.json +6 -6
  74. package/web/.next/fallback-build-manifest.json +2 -2
  75. package/web/.next/prerender-manifest.json +3 -3
  76. package/web/.next/required-server-files.js +3 -3
  77. package/web/.next/required-server-files.json +3 -3
  78. package/web/.next/routes-manifest.json +6 -0
  79. package/web/.next/server/app/(dashboard)/@drawer/create/page/build-manifest.json +4 -4
  80. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +22 -22
  81. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +1 -1
  82. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  83. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  84. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  85. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  86. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +1 -1
  87. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  88. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  89. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/build-manifest.json +4 -4
  90. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +28 -28
  91. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +1 -1
  92. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  93. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/build-manifest.json +4 -4
  95. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  96. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +1 -1
  97. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  98. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  99. package/web/.next/server/app/(dashboard)/create/page/build-manifest.json +4 -4
  100. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +22 -22
  101. package/web/.next/server/app/(dashboard)/create/page.js +1 -1
  102. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  103. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/build-manifest.json +4 -4
  105. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +28 -28
  106. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +1 -1
  107. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  108. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/build-manifest.json +4 -4
  110. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +28 -28
  111. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +1 -1
  112. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  113. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  114. package/web/.next/server/app/(dashboard)/page/build-manifest.json +4 -4
  115. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +20 -20
  116. package/web/.next/server/app/(dashboard)/page.js +1 -1
  117. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  118. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  119. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/build-manifest.json +4 -4
  120. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +20 -20
  121. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +1 -1
  122. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  123. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  124. package/web/.next/server/app/_global-error/page/build-manifest.json +4 -4
  125. package/web/.next/server/app/_global-error.html +2 -2
  126. package/web/.next/server/app/_global-error.rsc +1 -1
  127. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  128. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  129. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  130. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  131. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  132. package/web/.next/server/app/_not-found/page/build-manifest.json +4 -4
  133. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  134. package/web/.next/server/app/_not-found/page.js +1 -1
  135. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  136. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/api/attachments/preview/route.js +1 -1
  138. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  139. package/web/.next/server/app/api/evidence/route.js +1 -1
  140. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  141. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  142. package/web/.next/server/app/database/page/app-paths-manifest.json +3 -0
  143. package/web/.next/server/app/database/page/build-manifest.json +18 -0
  144. package/web/.next/server/app/database/page/next-font-manifest.json +6 -0
  145. package/web/.next/server/app/database/page/react-loadable-manifest.json +1 -0
  146. package/web/.next/server/app/database/page/server-reference-manifest.json +80 -0
  147. package/web/.next/server/app/database/page.js +16 -0
  148. package/web/.next/server/app/database/page.js.map +5 -0
  149. package/web/.next/server/app/database/page.js.nft.json +1 -0
  150. package/web/.next/server/app/database/page_client-reference-manifest.js +2 -0
  151. package/web/.next/server/app/settings/page/build-manifest.json +4 -4
  152. package/web/.next/server/app/settings/page/server-reference-manifest.json +6 -6
  153. package/web/.next/server/app/settings/page.js +1 -1
  154. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  155. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  156. package/web/.next/server/app/skills/page/build-manifest.json +4 -4
  157. package/web/.next/server/app/skills/page/server-reference-manifest.json +6 -6
  158. package/web/.next/server/app/skills/page.js +1 -1
  159. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  160. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  161. package/web/.next/server/app/tools/page/build-manifest.json +4 -4
  162. package/web/.next/server/app/tools/page/server-reference-manifest.json +6 -6
  163. package/web/.next/server/app/tools/page.js +1 -1
  164. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  165. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  166. package/web/.next/server/app/version/page/build-manifest.json +4 -4
  167. package/web/.next/server/app/version/page/server-reference-manifest.json +1 -1
  168. package/web/.next/server/app/version/page.js +2 -2
  169. package/web/.next/server/app/version/page.js.nft.json +1 -1
  170. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  171. package/web/.next/server/app-paths-manifest.json +1 -0
  172. package/web/.next/server/chunks/[root-of-the-server]__0866d2b5._.js.map +1 -1
  173. package/web/.next/server/chunks/[root-of-the-server]__42b7ab55._.js.map +1 -1
  174. package/web/.next/server/chunks/{[root-of-the-server]__53013576._.js → [root-of-the-server]__7d63f9a4._.js} +2 -2
  175. package/web/.next/server/chunks/[root-of-the-server]__9191749c._.js.map +1 -1
  176. package/web/.next/server/chunks/[root-of-the-server]__9a136c79._.js.map +1 -1
  177. package/web/.next/server/chunks/{[root-of-the-server]__92078db6._.js → [root-of-the-server]__a1c7c02a._.js} +2 -2
  178. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  179. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js.map +1 -1
  180. package/web/.next/server/chunks/[root-of-the-server]__a5879003._.js.map +1 -1
  181. package/web/.next/server/chunks/[root-of-the-server]__b2f9a412._.js.map +1 -1
  182. package/web/.next/server/chunks/[root-of-the-server]__b4102cc7._.js.map +1 -1
  183. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  184. package/web/.next/server/chunks/[root-of-the-server]__d2c18946._.js.map +1 -1
  185. package/web/.next/server/chunks/[root-of-the-server]__d8037e14._.js.map +1 -1
  186. package/web/.next/server/chunks/[root-of-the-server]__d9d410a8._.js.map +1 -1
  187. package/web/.next/server/chunks/[root-of-the-server]__e247a485._.js.map +1 -1
  188. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  189. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js +1 -1
  191. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_@drawer_repository_[repositoryId]_page_actions_f30d0343.js.map +1 -1
  192. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js +1 -1
  193. package/web/.next/server/chunks/ssr/8ba4b_server_app_(dashboard)_repository_[repositoryId]_page_actions_9f1775bb.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/{[root-of-the-server]__06fef644._.js → [root-of-the-server]__07a39ff2._.js} +2 -2
  195. package/web/.next/server/chunks/ssr/[root-of-the-server]__07a39ff2._.js.map +1 -0
  196. package/web/.next/server/chunks/ssr/[root-of-the-server]__11033878._.js +4 -0
  197. package/web/.next/server/chunks/ssr/{[root-of-the-server]__6b17a22d._.js.map → [root-of-the-server]__11033878._.js.map} +1 -1
  198. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a0bbce4._.js +3 -0
  199. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a0bbce4._.js.map +1 -0
  200. package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js +1 -1
  201. package/web/.next/server/chunks/ssr/[root-of-the-server]__2698e9f4._.js.map +1 -1
  202. package/web/.next/server/chunks/ssr/[root-of-the-server]__33cee851._.js +3 -0
  203. package/web/.next/server/chunks/ssr/[root-of-the-server]__33cee851._.js.map +1 -0
  204. package/web/.next/server/chunks/ssr/[root-of-the-server]__4bb4b155._.js +4 -0
  205. package/web/.next/server/chunks/ssr/[root-of-the-server]__4bb4b155._.js.map +1 -0
  206. package/web/.next/server/chunks/ssr/[root-of-the-server]__590dfc34._.js +4 -0
  207. package/web/.next/server/chunks/ssr/[root-of-the-server]__590dfc34._.js.map +1 -0
  208. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js +2 -2
  209. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bb00d90._.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/[root-of-the-server]__743e777a._.js +4 -0
  211. package/web/.next/server/chunks/ssr/[root-of-the-server]__743e777a._.js.map +1 -0
  212. package/web/.next/server/chunks/ssr/[root-of-the-server]__7a939e4e._.js +4 -0
  213. package/web/.next/server/chunks/ssr/{[root-of-the-server]__a022445f._.js.map → [root-of-the-server]__7a939e4e._.js.map} +1 -1
  214. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js +1 -1
  215. package/web/.next/server/chunks/ssr/[root-of-the-server]__8e3bf5d7._.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__930c8634._.js +3 -0
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__930c8634._.js.map +1 -0
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__b724df9e._.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js +1 -1
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__c07f9f79._.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js +1 -1
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__c605a375._.js.map +1 -1
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__fdc75809._.js +4 -0
  224. package/web/.next/server/chunks/ssr/{[root-of-the-server]__804c006d._.js.map → [root-of-the-server]__fdc75809._.js.map} +1 -1
  225. package/web/.next/server/chunks/ssr/_05ca281a._.js +3 -0
  226. package/web/.next/server/chunks/ssr/_05ca281a._.js.map +1 -0
  227. package/web/.next/server/chunks/ssr/_061c1da2._.js +3 -0
  228. package/web/.next/server/chunks/ssr/_061c1da2._.js.map +1 -0
  229. package/web/.next/server/chunks/ssr/_0e6034fc._.js +3 -0
  230. package/web/.next/server/chunks/ssr/_0e6034fc._.js.map +1 -0
  231. package/web/.next/server/chunks/ssr/_150e66ba._.js +3 -0
  232. package/web/.next/server/chunks/ssr/_150e66ba._.js.map +1 -0
  233. package/web/.next/server/chunks/ssr/_2f6f48b8._.js +1 -1
  234. package/web/.next/server/chunks/ssr/_2f6f48b8._.js.map +1 -1
  235. package/web/.next/server/chunks/ssr/_34ba40e0._.js +3 -0
  236. package/web/.next/server/chunks/ssr/_34ba40e0._.js.map +1 -0
  237. package/web/.next/server/chunks/ssr/_5b809cd2._.js +4 -0
  238. package/web/.next/server/chunks/ssr/_5b809cd2._.js.map +1 -0
  239. package/web/.next/server/chunks/ssr/{_9f1ab4ee._.js → _5d618f84._.js} +2 -2
  240. package/web/.next/server/chunks/ssr/{_9f1ab4ee._.js.map → _5d618f84._.js.map} +1 -1
  241. package/web/.next/server/chunks/ssr/_6552e0aa._.js +3 -0
  242. package/web/.next/server/chunks/ssr/_6552e0aa._.js.map +1 -0
  243. package/web/.next/server/chunks/ssr/_81f88d15._.js +7 -0
  244. package/web/.next/server/chunks/ssr/_81f88d15._.js.map +1 -0
  245. package/web/.next/server/chunks/ssr/_93d2a00c._.js +3 -0
  246. package/web/.next/server/chunks/ssr/_93d2a00c._.js.map +1 -0
  247. package/web/.next/server/chunks/ssr/_a37f5f18._.js +1 -1
  248. package/web/.next/server/chunks/ssr/_ad5819d0._.js +3 -0
  249. package/web/.next/server/chunks/ssr/_ad5819d0._.js.map +1 -0
  250. package/web/.next/server/chunks/ssr/{_f1a649e3._.js → _d506bca5._.js} +2 -2
  251. package/web/.next/server/chunks/ssr/{_f1a649e3._.js.map → _d506bca5._.js.map} +1 -1
  252. package/web/.next/server/chunks/ssr/_e1854141._.js +3 -0
  253. package/web/.next/server/chunks/ssr/_e1854141._.js.map +1 -0
  254. package/web/.next/server/chunks/ssr/_f9959908._.js +3 -0
  255. package/web/.next/server/chunks/ssr/_f9959908._.js.map +1 -0
  256. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_database_database-page-client_tsx_b853607a._.js +3 -0
  257. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_database_database-page-client_tsx_b853607a._.js.map +1 -0
  258. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  259. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  260. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js +3 -0
  261. package/web/.next/server/chunks/ssr/node_modules__pnpm_026172d1._.js.map +1 -0
  262. package/web/.next/server/chunks/ssr/node_modules__pnpm_8b0ea744._.js +3 -0
  263. package/web/.next/server/chunks/ssr/node_modules__pnpm_8b0ea744._.js.map +1 -0
  264. package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js +2 -2
  265. package/web/.next/server/chunks/ssr/src_presentation_web_5f039db1._.js.map +1 -1
  266. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js +1 -1
  267. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_2a52b697.js.map +1 -1
  268. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js +1 -1
  269. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_skills_page_actions_1fa8042e.js.map +1 -1
  270. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js +1 -1
  271. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_tools_page_actions_24684200.js.map +1 -1
  272. package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js +2 -2
  273. package/web/.next/server/chunks/ssr/src_presentation_web_c4337169._.js.map +1 -1
  274. package/web/.next/server/chunks/ssr/src_presentation_web_components_bf50c527._.js +1 -1
  275. package/web/.next/server/chunks/ssr/src_presentation_web_components_de814675._.js +1 -1
  276. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_components_e599bb8c._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +1 -1
  279. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +1 -1
  280. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_scroll-area_tsx_53ae5be7._.js +3 -0
  281. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_scroll-area_tsx_53ae5be7._.js.map +1 -0
  282. package/web/.next/server/middleware-build-manifest.js +4 -4
  283. package/web/.next/server/pages/500.html +2 -2
  284. package/web/.next/server/server-reference-manifest.js +1 -1
  285. package/web/.next/server/server-reference-manifest.json +101 -34
  286. package/web/.next/static/chunks/0b8f2e223e1b82f4.js +1 -0
  287. package/web/.next/static/chunks/0e57fc72bf0bc5ba.js +1 -0
  288. package/web/.next/static/chunks/22a1d0eb174f3da9.js +1 -0
  289. package/web/.next/static/chunks/401118947e7159e0.js +1 -0
  290. package/web/.next/static/chunks/40b6bcf1a2de4a0f.js +1 -0
  291. package/web/.next/static/chunks/471c323a18da4918.js +1 -0
  292. package/web/.next/static/chunks/495b4bee62b00caa.js +1 -0
  293. package/web/.next/static/chunks/5aab343372a98721.js +1 -0
  294. package/web/.next/static/chunks/70e04b1108d151c3.js +11 -0
  295. package/web/.next/static/chunks/{9c2f294bf748b4ba.js → 899529af3e08bf94.js} +2 -2
  296. package/web/.next/static/chunks/{9076710a2df38d14.js → 96fc208419afac9e.js} +1 -1
  297. package/web/.next/static/chunks/b3914c0aae76742b.css +1 -0
  298. package/web/.next/static/chunks/b4160eaf4deda4e7.js +1 -0
  299. package/web/.next/static/chunks/b65702b701417ae2.js +1 -0
  300. package/web/.next/static/chunks/c2c0d4e71c36199f.js +1 -0
  301. package/web/.next/static/chunks/c7e793951b20a67f.js +1 -0
  302. package/web/.next/static/chunks/cb440c7f33e135f4.js +1 -0
  303. package/web/.next/static/chunks/{0dfc3b1cff4bdcc2.js → cb46d75dfac954a5.js} +2 -2
  304. package/web/.next/static/chunks/dd702ceaee4a5c0d.js +1 -0
  305. package/web/.next/static/chunks/e6b8baa05827f641.js +1 -0
  306. package/web/.next/static/chunks/{turbopack-426d9bc2450816ba.js → turbopack-b1685b5f87ad1d60.js} +1 -1
  307. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js +0 -3
  308. package/web/.next/server/chunks/ssr/7f428_lucide-react_dist_esm_icons_d0119342._.js.map +0 -1
  309. package/web/.next/server/chunks/ssr/[root-of-the-server]__06fef644._.js.map +0 -1
  310. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js +0 -3
  311. package/web/.next/server/chunks/ssr/[root-of-the-server]__545792ab._.js.map +0 -1
  312. package/web/.next/server/chunks/ssr/[root-of-the-server]__6b17a22d._.js +0 -4
  313. package/web/.next/server/chunks/ssr/[root-of-the-server]__804c006d._.js +0 -4
  314. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js +0 -4
  315. package/web/.next/server/chunks/ssr/[root-of-the-server]__8c553503._.js.map +0 -1
  316. package/web/.next/server/chunks/ssr/[root-of-the-server]__9f155c0e._.js +0 -3
  317. package/web/.next/server/chunks/ssr/[root-of-the-server]__9f155c0e._.js.map +0 -1
  318. package/web/.next/server/chunks/ssr/[root-of-the-server]__a022445f._.js +0 -4
  319. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js +0 -4
  320. package/web/.next/server/chunks/ssr/[root-of-the-server]__a7de2711._.js.map +0 -1
  321. package/web/.next/server/chunks/ssr/_0dc2cfd3._.js +0 -3
  322. package/web/.next/server/chunks/ssr/_0dc2cfd3._.js.map +0 -1
  323. package/web/.next/server/chunks/ssr/_0e506641._.js +0 -7
  324. package/web/.next/server/chunks/ssr/_0e506641._.js.map +0 -1
  325. package/web/.next/server/chunks/ssr/_135edb9c._.js +0 -3
  326. package/web/.next/server/chunks/ssr/_135edb9c._.js.map +0 -1
  327. package/web/.next/server/chunks/ssr/_1bb131c4._.js +0 -3
  328. package/web/.next/server/chunks/ssr/_1bb131c4._.js.map +0 -1
  329. package/web/.next/server/chunks/ssr/_6d26a08f._.js +0 -3
  330. package/web/.next/server/chunks/ssr/_6d26a08f._.js.map +0 -1
  331. package/web/.next/server/chunks/ssr/_6e403a1e._.js +0 -3
  332. package/web/.next/server/chunks/ssr/_6e403a1e._.js.map +0 -1
  333. package/web/.next/server/chunks/ssr/_75f4ccb3._.js +0 -3
  334. package/web/.next/server/chunks/ssr/_75f4ccb3._.js.map +0 -1
  335. package/web/.next/server/chunks/ssr/_b5fc318a._.js +0 -3
  336. package/web/.next/server/chunks/ssr/_b5fc318a._.js.map +0 -1
  337. package/web/.next/server/chunks/ssr/_cc77a143._.js +0 -3
  338. package/web/.next/server/chunks/ssr/_cc77a143._.js.map +0 -1
  339. package/web/.next/server/chunks/ssr/_fffd4212._.js +0 -3
  340. package/web/.next/server/chunks/ssr/_fffd4212._.js.map +0 -1
  341. package/web/.next/server/chunks/ssr/node_modules__pnpm_b59e4b16._.js +0 -3
  342. package/web/.next/server/chunks/ssr/node_modules__pnpm_b59e4b16._.js.map +0 -1
  343. package/web/.next/static/chunks/0d2af96e64960ef5.css +0 -1
  344. package/web/.next/static/chunks/1c206da59596f056.js +0 -1
  345. package/web/.next/static/chunks/2429cf8757ddad34.js +0 -1
  346. package/web/.next/static/chunks/303a1217006489b9.js +0 -1
  347. package/web/.next/static/chunks/39dc15636654a1e3.js +0 -1
  348. package/web/.next/static/chunks/3e9320301a0cac8b.js +0 -1
  349. package/web/.next/static/chunks/447e720f6cf54767.js +0 -1
  350. package/web/.next/static/chunks/4562ee849ea13c3a.js +0 -1
  351. package/web/.next/static/chunks/53e9eda219a7f61c.js +0 -1
  352. package/web/.next/static/chunks/7bc5806d9f82cc79.js +0 -11
  353. package/web/.next/static/chunks/845d8e58a91014e6.js +0 -1
  354. package/web/.next/static/chunks/84a181ff3270fd9f.js +0 -1
  355. package/web/.next/static/chunks/96eeeb28e06de78c.js +0 -1
  356. package/web/.next/static/chunks/e2ef95d904c360f3.js +0 -1
  357. package/web/.next/static/chunks/ed3a602003bcb31b.js +0 -1
  358. /package/web/.next/server/chunks/{[root-of-the-server]__53013576._.js.map → [root-of-the-server]__7d63f9a4._.js.map} +0 -0
  359. /package/web/.next/server/chunks/{[root-of-the-server]__92078db6._.js.map → [root-of-the-server]__a1c7c02a._.js.map} +0 -0
  360. /package/web/.next/static/{t8J3jMT2l7HfCuusAPC-b → 4xrMEp5YYiIKE3f9RD6L-}/_buildManifest.js +0 -0
  361. /package/web/.next/static/{t8J3jMT2l7HfCuusAPC-b → 4xrMEp5YYiIKE3f9RD6L-}/_clientMiddlewareManifest.json +0 -0
  362. /package/web/.next/static/{t8J3jMT2l7HfCuusAPC-b → 4xrMEp5YYiIKE3f9RD6L-}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/components/features/database/table-list.tsx","../../../../../../../src/presentation/web/components/ui/table.tsx","../../../../../../../src/presentation/web/components/features/database/cell-value-dialog.tsx","../../../../../../../src/presentation/web/components/features/database/row-browser.tsx","../../../../../../../src/presentation/web/components/features/database/schema-viewer.tsx","../../../../../../../src/presentation/web/lib/sql-validation.ts","../../../../../../../src/presentation/web/components/features/database/query-runner.tsx","../../../../../../../src/presentation/web/components/features/database/database-page-client.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/columns-3.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/table-2.ts"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Badge } from '@/components/ui/badge';\nimport { Input } from '@/components/ui/input';\nimport { ScrollArea } from '@/components/ui/scroll-area';\nimport type { TableInfo } from '@/app/actions/list-tables';\n\nconst SEARCH_THRESHOLD = 10;\n\nexport interface TableListProps {\n tables: TableInfo[];\n selectedTable: string | null;\n onSelectTable: (tableName: string) => void;\n}\n\nexport function TableList({ tables, selectedTable, onSelectTable }: TableListProps) {\n const [search, setSearch] = useState('');\n\n const filteredTables =\n search.length > 0\n ? tables.filter((t) => t.name.toLowerCase().includes(search.toLowerCase()))\n : tables;\n\n if (tables.length === 0) {\n return (\n <div className=\"text-muted-foreground p-4 text-center text-sm\" data-testid=\"table-list-empty\">\n No tables found\n </div>\n );\n }\n\n return (\n <div className=\"flex h-full flex-col\" data-testid=\"table-list\">\n {tables.length > SEARCH_THRESHOLD && (\n <div className=\"border-border border-b px-2 py-2\">\n <Input\n placeholder=\"Filter tables...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"h-7 text-xs\"\n data-testid=\"table-list-search\"\n />\n </div>\n )}\n <ScrollArea className=\"flex-1\">\n <div className=\"flex flex-col gap-0.5 p-1.5\">\n {filteredTables.map((table) => (\n <button\n key={table.name}\n onClick={() => onSelectTable(table.name)}\n className={`flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-left text-sm transition-colors ${\n selectedTable === table.name\n ? 'bg-primary/10 text-primary font-medium'\n : 'text-foreground hover:bg-muted/50'\n }`}\n data-testid={`table-item-${table.name}`}\n >\n <span className=\"truncate font-mono text-xs\">{table.name}</span>\n <Badge\n variant={selectedTable === table.name ? 'default' : 'secondary'}\n className=\"ml-2 h-5 shrink-0 px-1.5 text-[10px]\"\n >\n {table.rowCount.toLocaleString()}\n </Badge>\n </button>\n ))}\n {filteredTables.length === 0 && search.length > 0 && (\n <div className=\"text-muted-foreground p-4 text-center text-xs\">\n No tables matching &quot;{search}&quot;\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\n return (\n <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\">\n <table\n data-slot=\"table\"\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return <thead data-slot=\"table-header\" className={cn('[&_tr]:border-b', className)} {...props} />;\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return (\n <tbody\n data-slot=\"table-body\"\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn('bg-muted/50 border-t font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('text-muted-foreground mt-4 text-sm', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","'use client';\n\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';\nimport { ScrollArea } from '@/components/ui/scroll-area';\n\nexport interface CellValueDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n columnName: string;\n value: string;\n}\n\nexport function CellValueDialog({ open, onOpenChange, columnName, value }: CellValueDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>{columnName}</DialogTitle>\n </DialogHeader>\n <ScrollArea className=\"max-h-[60vh]\">\n <pre className=\"text-sm break-all whitespace-pre-wrap\" data-testid=\"cell-value-content\">\n {value}\n </pre>\n </ScrollArea>\n </DialogContent>\n </Dialog>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { Button } from '@/components/ui/button';\nimport { ChevronLeft, ChevronRight, Loader2 } from 'lucide-react';\nimport { CellValueDialog } from './cell-value-dialog';\n\nconst MAX_CELL_LENGTH = 100;\n\nexport interface RowBrowserProps {\n columns: string[];\n rows: Record<string, unknown>[];\n totalRows: number;\n page: number;\n pageSize: number;\n onPageChange: (page: number) => void;\n loading?: boolean;\n}\n\nfunction formatCellDisplay(value: unknown): string {\n if (value === null || value === undefined) {\n return 'NULL';\n }\n return String(value);\n}\n\nfunction isTruncated(value: string): boolean {\n return value.length > MAX_CELL_LENGTH;\n}\n\nfunction truncate(value: string): string {\n if (isTruncated(value)) {\n return `${value.slice(0, MAX_CELL_LENGTH)}...`;\n }\n return value;\n}\n\nexport function RowBrowser({\n columns,\n rows,\n totalRows,\n page,\n pageSize,\n onPageChange,\n loading,\n}: RowBrowserProps) {\n const [dialogState, setDialogState] = useState<{\n open: boolean;\n columnName: string;\n value: string;\n }>({ open: false, columnName: '', value: '' });\n\n const totalPages = Math.max(1, Math.ceil(totalRows / pageSize));\n const isFirstPage = page === 0;\n const isLastPage = page >= totalPages - 1;\n\n if (loading) {\n return (\n <div\n className=\"text-muted-foreground flex items-center justify-center gap-2 p-12 text-sm\"\n data-testid=\"row-browser-loading\"\n >\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Loading rows...\n </div>\n );\n }\n\n if (rows.length === 0 && totalRows === 0) {\n return (\n <div\n className=\"text-muted-foreground flex items-center justify-center p-12 text-sm\"\n data-testid=\"row-browser-empty\"\n >\n This table has no rows\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-3\" data-testid=\"row-browser\">\n {/* Pagination bar */}\n <div className=\"flex items-center justify-between\" data-testid=\"row-browser-pagination\">\n <span className=\"text-muted-foreground text-xs tabular-nums\">\n {totalRows.toLocaleString()} row{totalRows !== 1 ? 's' : ''} &middot; Page {page + 1} of{' '}\n {totalPages}\n </span>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n onClick={() => onPageChange(page - 1)}\n disabled={isFirstPage}\n data-testid=\"row-browser-prev\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-7 w-7\"\n onClick={() => onPageChange(page + 1)}\n disabled={isLastPage}\n data-testid=\"row-browser-next\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n {/* Data table */}\n <div className=\"border-border overflow-auto rounded-md border\">\n <Table>\n <TableHeader>\n <TableRow className=\"bg-muted/50 hover:bg-muted/50\">\n {columns.map((col) => (\n <TableHead key={col} className=\"font-mono text-xs font-medium whitespace-nowrap\">\n {col}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row, rowIdx) => (\n // eslint-disable-next-line react/no-array-index-key\n <TableRow key={rowIdx}>\n {columns.map((col) => {\n const display = formatCellDisplay(row[col]);\n const truncated = isTruncated(display);\n return (\n <TableCell key={col} className=\"max-w-[300px] py-1.5 font-mono text-xs\">\n {truncated ? (\n <button\n className=\"text-primary cursor-pointer text-left underline-offset-2 hover:underline\"\n onClick={() =>\n setDialogState({ open: true, columnName: col, value: display })\n }\n title=\"Click to view full value\"\n >\n {truncate(display)}\n </button>\n ) : (\n <span className={display === 'NULL' ? 'text-muted-foreground italic' : ''}>\n {display}\n </span>\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n\n <CellValueDialog\n open={dialogState.open}\n onOpenChange={(open) => setDialogState((s) => ({ ...s, open }))}\n columnName={dialogState.columnName}\n value={dialogState.value}\n />\n </div>\n );\n}\n","'use client';\n\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { Badge } from '@/components/ui/badge';\nimport { Loader2 } from 'lucide-react';\nimport type { ColumnInfo } from '@/app/actions/get-table-schema';\n\nexport interface SchemaViewerProps {\n columns: ColumnInfo[];\n loading?: boolean;\n}\n\nexport function SchemaViewer({ columns, loading }: SchemaViewerProps) {\n if (loading) {\n return (\n <div\n className=\"text-muted-foreground flex items-center justify-center gap-2 p-12 text-sm\"\n data-testid=\"schema-viewer-loading\"\n >\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Loading schema...\n </div>\n );\n }\n\n if (columns.length === 0) {\n return (\n <div\n className=\"text-muted-foreground flex items-center justify-center p-12 text-sm\"\n data-testid=\"schema-viewer-empty\"\n >\n No column information available\n </div>\n );\n }\n\n return (\n <div data-testid=\"schema-viewer\">\n <div className=\"border-border overflow-auto rounded-md border\">\n <Table>\n <TableHeader>\n <TableRow className=\"bg-muted/50 hover:bg-muted/50\">\n <TableHead className=\"font-mono text-xs font-medium\">Name</TableHead>\n <TableHead className=\"font-mono text-xs font-medium\">Type</TableHead>\n <TableHead className=\"font-mono text-xs font-medium\">Nullable</TableHead>\n <TableHead className=\"font-mono text-xs font-medium\">Default</TableHead>\n <TableHead className=\"font-mono text-xs font-medium\">Primary Key</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {columns.map((col) => (\n <TableRow key={col.name}>\n <TableCell className=\"font-mono text-xs font-medium\">{col.name}</TableCell>\n <TableCell>\n <Badge variant=\"outline\" className=\"font-mono text-[10px]\">\n {col.type || 'any'}\n </Badge>\n </TableCell>\n <TableCell className=\"text-xs\">\n {col.notnull ? (\n <span className=\"text-muted-foreground\">No</span>\n ) : (\n <span>Yes</span>\n )}\n </TableCell>\n <TableCell className=\"text-muted-foreground font-mono text-xs\">\n {col.defaultValue ?? <span className=\"italic\">None</span>}\n </TableCell>\n <TableCell>\n {col.primaryKey ? (\n <Badge\n variant=\"default\"\n className=\"text-[10px]\"\n data-testid={`pk-badge-${col.name}`}\n >\n PK\n </Badge>\n ) : null}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </div>\n );\n}\n","/**\n * Client-safe SQL validation utilities.\n * These are extracted from the execute-query server action so they can be\n * used for instant client-side feedback without a server round-trip.\n */\n\nconst WRITE_KEYWORDS_PATTERN =\n /^\\s*(INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|ATTACH|DETACH|REINDEX|VACUUM)\\b/i;\n\nconst CTE_WRITE_PATTERN = /^\\s*WITH\\b[\\s\\S]*?\\b(INSERT|UPDATE|DELETE)\\b/i;\n\nfunction stripSqlComments(sql: string): string {\n return sql\n .replace(/--[^\\n]*/g, '')\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n .trim();\n}\n\nexport function isWriteQuery(sql: string): boolean {\n const normalized = stripSqlComments(sql);\n return WRITE_KEYWORDS_PATTERN.test(normalized) || CTE_WRITE_PATTERN.test(normalized);\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Button } from '@/components/ui/button';\nimport { Label } from '@/components/ui/label';\nimport { Textarea } from '@/components/ui/textarea';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { Play, Loader2, AlertCircle } from 'lucide-react';\nimport { isWriteQuery } from '@/lib/sql-validation';\nimport { CellValueDialog } from './cell-value-dialog';\n\nconst MAX_CELL_LENGTH = 100;\n\nexport interface QueryRunnerProps {\n onExecute: (sql: string) => Promise<{\n columns?: string[];\n rows?: Record<string, unknown>[];\n error?: string;\n }>;\n}\n\nfunction formatCellDisplay(value: unknown): string {\n if (value === null || value === undefined) {\n return 'NULL';\n }\n return String(value);\n}\n\nexport function QueryRunner({ onExecute }: QueryRunnerProps) {\n const [sql, setSql] = useState('');\n const [result, setResult] = useState<{\n columns?: string[];\n rows?: Record<string, unknown>[];\n error?: string;\n } | null>(null);\n const [clientError, setClientError] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [dialogState, setDialogState] = useState<{\n open: boolean;\n columnName: string;\n value: string;\n }>({ open: false, columnName: '', value: '' });\n\n const handleExecute = async () => {\n setClientError(null);\n setResult(null);\n\n const trimmed = sql.trim();\n if (!trimmed) {\n setClientError('Query cannot be empty');\n return;\n }\n\n if (isWriteQuery(trimmed)) {\n setClientError(\n 'Write operations are not allowed. Only SELECT and PRAGMA queries are permitted.'\n );\n return;\n }\n\n setLoading(true);\n try {\n const res = await onExecute(trimmed);\n setResult(res);\n } finally {\n setLoading(false);\n }\n };\n\n const error = clientError ?? result?.error;\n\n return (\n <div className=\"flex flex-col gap-4\" data-testid=\"query-runner\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"sql-query\" className=\"text-xs font-medium\">\n SQL Query\n </Label>\n <Textarea\n id=\"sql-query\"\n placeholder=\"SELECT * FROM features LIMIT 10\"\n value={sql}\n onChange={(e) => setSql(e.target.value)}\n className=\"bg-muted/30 font-mono text-xs\"\n rows={4}\n data-testid=\"query-runner-input\"\n />\n <div className=\"flex justify-end\">\n <Button\n onClick={handleExecute}\n disabled={loading || sql.trim().length === 0}\n size=\"sm\"\n className=\"gap-1.5\"\n data-testid=\"query-runner-execute\"\n >\n {loading ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <Play className=\"h-3.5 w-3.5\" />\n )}\n {loading ? 'Executing...' : 'Execute'}\n </Button>\n </div>\n </div>\n\n {error ? (\n <div\n className=\"bg-destructive/10 text-destructive flex items-start gap-2 rounded-md border border-red-200 p-3 text-sm dark:border-red-900\"\n role=\"alert\"\n aria-live=\"polite\"\n data-testid=\"query-runner-error\"\n >\n <AlertCircle className=\"mt-0.5 h-4 w-4 shrink-0\" />\n <span className=\"text-xs\">{error}</span>\n </div>\n ) : null}\n\n {result?.columns && result.rows ? (\n <div data-testid=\"query-runner-results\">\n <div className=\"text-muted-foreground mb-2 text-xs\">\n {result.rows.length} row{result.rows.length !== 1 ? 's' : ''} returned\n </div>\n <div className=\"border-border overflow-auto rounded-md border\">\n <Table>\n <TableHeader>\n <TableRow className=\"bg-muted/50 hover:bg-muted/50\">\n {result.columns.map((col) => (\n <TableHead\n key={col}\n className=\"font-mono text-xs font-medium whitespace-nowrap\"\n >\n {col}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {result.rows.map((row, rowIdx) => (\n // eslint-disable-next-line react/no-array-index-key\n <TableRow key={rowIdx}>\n {result.columns!.map((col) => {\n const display = formatCellDisplay(row[col]);\n const truncated = display.length > MAX_CELL_LENGTH;\n return (\n <TableCell key={col} className=\"max-w-[300px] py-1.5 font-mono text-xs\">\n {truncated ? (\n <button\n className=\"text-primary cursor-pointer text-left underline-offset-2 hover:underline\"\n onClick={() =>\n setDialogState({ open: true, columnName: col, value: display })\n }\n title=\"Click to view full value\"\n >\n {display.slice(0, MAX_CELL_LENGTH)}...\n </button>\n ) : (\n <span\n className={display === 'NULL' ? 'text-muted-foreground italic' : ''}\n >\n {display}\n </span>\n )}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </div>\n ) : null}\n\n <CellValueDialog\n open={dialogState.open}\n onOpenChange={(open) => setDialogState((s) => ({ ...s, open }))}\n columnName={dialogState.columnName}\n value={dialogState.value}\n />\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Database, Table2, Code2, Columns3 } from 'lucide-react';\nimport { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs';\nimport { TableList } from './table-list';\nimport { RowBrowser } from './row-browser';\nimport { SchemaViewer } from './schema-viewer';\nimport { QueryRunner } from './query-runner';\nimport type { TableInfo } from '@/app/actions/list-tables';\nimport type { ColumnInfo, GetTableSchemaResult } from '@/app/actions/get-table-schema';\nimport type { GetTableRowsResult } from '@/app/actions/get-table-rows';\nimport type { ExecuteQueryResult } from '@/app/actions/execute-query';\n\ntype TabValue = 'data' | 'schema' | 'query';\n\nexport interface DatabasePageClientProps {\n initialTables: TableInfo[];\n fetchRows: (tableName: string, page: number) => Promise<GetTableRowsResult>;\n fetchSchema: (tableName: string) => Promise<GetTableSchemaResult>;\n runQuery: (sql: string) => Promise<ExecuteQueryResult>;\n className?: string;\n}\n\nexport function DatabasePageClient({\n initialTables,\n fetchRows: fetchRowsAction,\n fetchSchema: fetchSchemaAction,\n runQuery,\n className,\n}: DatabasePageClientProps) {\n const [selectedTable, setSelectedTable] = useState<string | null>(null);\n const [activeTab, setActiveTab] = useState<TabValue>('data');\n\n // Row browser state\n const [columns, setColumns] = useState<string[]>([]);\n const [rows, setRows] = useState<Record<string, unknown>[]>([]);\n const [totalRows, setTotalRows] = useState(0);\n const [page, setPage] = useState(0);\n const [pageSize, setPageSize] = useState(50);\n const [rowsLoading, setRowsLoading] = useState(false);\n\n // Schema state\n const [schemaColumns, setSchemaColumns] = useState<ColumnInfo[]>([]);\n const [schemaLoading, setSchemaLoading] = useState(false);\n\n const fetchRows = useCallback(\n async (tableName: string, pageNum: number) => {\n setRowsLoading(true);\n try {\n const result = await fetchRowsAction(tableName, pageNum);\n if (result.error) {\n setColumns([]);\n setRows([]);\n setTotalRows(0);\n return;\n }\n setColumns(result.columns ?? []);\n setRows(result.rows ?? []);\n setTotalRows(result.totalRows ?? 0);\n setPage(result.page ?? 0);\n setPageSize(result.pageSize ?? 50);\n } finally {\n setRowsLoading(false);\n }\n },\n [fetchRowsAction]\n );\n\n const fetchSchema = useCallback(\n async (tableName: string) => {\n setSchemaLoading(true);\n try {\n const result = await fetchSchemaAction(tableName);\n if (result.error) {\n setSchemaColumns([]);\n return;\n }\n setSchemaColumns(result.columns ?? []);\n } finally {\n setSchemaLoading(false);\n }\n },\n [fetchSchemaAction]\n );\n\n const handleSelectTable = useCallback(\n (tableName: string) => {\n setSelectedTable(tableName);\n setPage(0);\n setActiveTab('data');\n fetchRows(tableName, 0);\n fetchSchema(tableName);\n },\n [fetchRows, fetchSchema]\n );\n\n const handlePageChange = useCallback(\n (newPage: number) => {\n if (selectedTable) {\n setPage(newPage);\n fetchRows(selectedTable, newPage);\n }\n },\n [selectedTable, fetchRows]\n );\n\n const handleExecuteQuery = useCallback(\n async (sql: string) => {\n return runQuery(sql);\n },\n [runQuery]\n );\n\n return (\n <div data-testid=\"database-page-client\" className={`flex flex-col ${className ?? ''}`}>\n {/* Header */}\n <div className=\"mb-3 flex items-center gap-2.5 pt-1\">\n <div className=\"bg-primary/10 flex h-7 w-7 items-center justify-center rounded-md\">\n <Database className=\"text-primary h-4 w-4\" />\n </div>\n <div>\n <h1 className=\"text-sm font-semibold tracking-tight\">Database Browser</h1>\n <p className=\"text-muted-foreground text-xs\">\n {initialTables.length} table{initialTables.length !== 1 ? 's' : ''}\n </p>\n </div>\n </div>\n\n {/* Main layout: sidebar + content */}\n <div className=\"flex min-h-0 flex-1 gap-3\">\n {/* Sidebar: Table list */}\n <div className=\"border-border bg-card flex w-56 flex-col rounded-lg border\">\n <div className=\"border-border border-b px-3 py-2\">\n <span className=\"text-muted-foreground text-xs font-medium tracking-wider uppercase\">\n Tables\n </span>\n </div>\n <div className=\"min-h-0 flex-1\">\n <TableList\n tables={initialTables}\n selectedTable={selectedTable}\n onSelectTable={handleSelectTable}\n />\n </div>\n </div>\n\n {/* Main content area */}\n <div className=\"flex min-w-0 flex-1 flex-col\">\n {selectedTable ? (\n <div className=\"border-border bg-card flex min-h-0 flex-1 flex-col rounded-lg border\">\n {/* Table name header + tabs */}\n <div className=\"border-border flex items-center justify-between border-b px-4 py-2\">\n <span className=\"font-mono text-sm font-medium\">{selectedTable}</span>\n <Tabs\n value={activeTab}\n onValueChange={(v) => setActiveTab(v as TabValue)}\n data-testid=\"database-tabs\"\n >\n <TabsList className=\"h-7\">\n <TabsTrigger\n value=\"data\"\n className=\"gap-1.5 px-2.5 text-xs\"\n data-testid=\"tab-data\"\n >\n <Table2 className=\"h-3 w-3\" />\n Data\n </TabsTrigger>\n <TabsTrigger\n value=\"schema\"\n className=\"gap-1.5 px-2.5 text-xs\"\n data-testid=\"tab-schema\"\n >\n <Columns3 className=\"h-3 w-3\" />\n Schema\n </TabsTrigger>\n <TabsTrigger\n value=\"query\"\n className=\"gap-1.5 px-2.5 text-xs\"\n data-testid=\"tab-query\"\n >\n <Code2 className=\"h-3 w-3\" />\n Query\n </TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n\n {/* Tab content */}\n <div className=\"min-h-0 flex-1 overflow-auto p-4\">\n {activeTab === 'data' && (\n <RowBrowser\n columns={columns}\n rows={rows}\n totalRows={totalRows}\n page={page}\n pageSize={pageSize}\n onPageChange={handlePageChange}\n loading={rowsLoading}\n />\n )}\n {activeTab === 'schema' && (\n <SchemaViewer columns={schemaColumns} loading={schemaLoading} />\n )}\n {activeTab === 'query' && <QueryRunner onExecute={handleExecuteQuery} />}\n </div>\n </div>\n ) : (\n <div className=\"border-border bg-card flex flex-1 flex-col items-center justify-center rounded-lg border\">\n <div className=\"bg-muted/50 mb-3 flex h-12 w-12 items-center justify-center rounded-full\">\n <Database className=\"text-muted-foreground h-6 w-6\" />\n </div>\n <p className=\"text-muted-foreground text-sm\">Select a table to browse its data</p>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', key: 'afitv7' }],\n ['path', { d: 'M9 3v18', key: 'fh3hqa' }],\n ['path', { d: 'M15 3v18', key: '14nvp0' }],\n];\n\n/**\n * @component @name Columns3\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiAvPgogIDxwYXRoIGQ9Ik05IDN2MTgiIC8+CiAgPHBhdGggZD0iTTE1IDN2MTgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/columns-3\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 Columns3 = createLucideIcon('columns-3', __iconNode);\n\nexport default Columns3;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18',\n key: 'gugj83',\n },\n ],\n];\n\n/**\n * @component @name Table2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNOSAzSDVhMiAyIDAgMCAwLTIgMnY0bTYtNmgxMGEyIDIgMCAwIDEgMiAydjRNOSAzdjE4bTAgMGgxMGEyIDIgMCAwIDAgMi0yVjlNOSAyMUg1YTIgMiAwIDAgMS0yLTJWOW0wIDBoMTgiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/table-2\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 Table2 = createLucideIcon('table-2', __iconNode);\n\nexport default Table2;\n"],"names":[],"mappings":"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","ignoreList":[8,9]}
@@ -1,3 +1,3 @@
1
- module.exports=[79020,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(83886),e=a.i(25700);let f=(0,e.default)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var g=a.i(72016),h=a.i(34644),i=a.i(63698),j=a.i(53170);let k=(0,e.default)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]),l=(0,e.default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]),m=(0,e.default)("flag",[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]),n=(0,e.default)("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);var o=a.i(96853),o=o,p=a.i(67837),q=a.i(71238);let r=(0,e.default)("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]),s=(0,e.default)("timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);var t=a.i(52313),u=a.i(85536),v=a.i(584),w=a.i(90920),x=a.i(18948),y=a.i(96867),z=a.i(82934),A=a.i(55690),B=a.i(48972),C=a.i(59653),D=a.i(63496),E=a.i(6175),F=a.i(7420),G=a.i(48939),H=a.i(58761),I=a.i(51473),J=a.i(59675),K=a.i(5472),L=a.i(75988),M=a.i(80930),N=a.i(66873),O=a.i(90986),P=a.i(79406),Q=a.i(17329),R=a.i(61476),S=a.i(64005),T=a.i(50049),U=a.i(16164),V=a.i(45291),W=[" ","Enter","ArrowUp","ArrowDown"],X=[" ","Enter"],Y="Select",[Z,$,_]=(0,D.createCollection)(Y),[aa,ab]=(0,F.createContextScope)(Y,[_,L.createPopperScope]),ac=(0,L.createPopperScope)(),[ad,ae]=aa(Y),[af,ag]=aa(Y),ah=a=>{let{__scopeSelect:d,children:e,open:f,defaultOpen:g,onOpenChange:h,value:i,defaultValue:j,onValueChange:k,dir:l,name:m,autoComplete:n,disabled:o,required:p,form:q}=a,r=ac(d),[s,t]=c.useState(null),[u,v]=c.useState(null),[w,x]=c.useState(!1),y=(0,G.useDirection)(l),[z,A]=(0,Q.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:Y}),[B,C]=(0,Q.useControllableState)({prop:i,defaultProp:j,onChange:k,caller:Y}),D=c.useRef(null),E=!s||q||!!s.closest("form"),[F,H]=c.useState(new Set),I=Array.from(F).map(a=>a.props.value).join(";");return(0,b.jsx)(L.Root,{...r,children:(0,b.jsxs)(ad,{required:p,scope:d,trigger:s,onTriggerChange:t,valueNode:u,onValueNodeChange:v,valueNodeHasChildren:w,onValueNodeHasChildrenChange:x,contentId:(0,K.useId)(),value:B,onValueChange:C,open:z,onOpenChange:A,dir:y,triggerPointerDownPosRef:D,disabled:o,children:[(0,b.jsx)(Z.Provider,{scope:d,children:(0,b.jsx)(af,{scope:a.__scopeSelect,onNativeOptionAdd:c.useCallback(a=>{H(b=>new Set(b).add(a))},[]),onNativeOptionRemove:c.useCallback(a=>{H(b=>{let c=new Set(b);return c.delete(a),c})},[]),children:e})}),E?(0,b.jsxs)(aW,{"aria-hidden":!0,required:p,tabIndex:-1,name:m,autoComplete:n,value:B,onChange:a=>C(a.target.value),disabled:o,form:q,children:[void 0===B?(0,b.jsx)("option",{value:""}):null,Array.from(F)]},I):null]})})};ah.displayName=Y;var ai="SelectTrigger",aj=c.forwardRef((a,d)=>{let{__scopeSelect:e,disabled:f=!1,...g}=a,h=ac(e),i=ae(ai,e),j=i.disabled||f,k=(0,E.useComposedRefs)(d,i.onTriggerChange),l=$(e),m=c.useRef("touch"),[n,o,p]=aY(a=>{let b=l().filter(a=>!a.disabled),c=b.find(a=>a.value===i.value),d=aZ(b,a,c);void 0!==d&&i.onValueChange(d.value)}),q=a=>{j||(i.onOpenChange(!0),p()),a&&(i.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return(0,b.jsx)(L.Anchor,{asChild:!0,...h,children:(0,b.jsx)(N.Primitive.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:j,"data-disabled":j?"":void 0,"data-placeholder":aX(i.value)?"":void 0,...g,ref:k,onClick:(0,C.composeEventHandlers)(g.onClick,a=>{a.currentTarget.focus(),"mouse"!==m.current&&q(a)}),onPointerDown:(0,C.composeEventHandlers)(g.onPointerDown,a=>{m.current=a.pointerType;let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),0===a.button&&!1===a.ctrlKey&&"mouse"===a.pointerType&&(q(a),a.preventDefault())}),onKeyDown:(0,C.composeEventHandlers)(g.onKeyDown,a=>{let b=""!==n.current;a.ctrlKey||a.altKey||a.metaKey||1!==a.key.length||o(a.key),(!b||" "!==a.key)&&W.includes(a.key)&&(q(),a.preventDefault())})})})});aj.displayName=ai;var ak="SelectValue",al=c.forwardRef((a,c)=>{let{__scopeSelect:d,className:e,style:f,children:g,placeholder:h="",...i}=a,j=ae(ak,d),{onValueNodeHasChildrenChange:k}=j,l=void 0!==g,m=(0,E.useComposedRefs)(c,j.onValueNodeChange);return(0,R.useLayoutEffect)(()=>{k(l)},[k,l]),(0,b.jsx)(N.Primitive.span,{...i,ref:m,style:{pointerEvents:"none"},children:aX(j.value)?(0,b.jsx)(b.Fragment,{children:h}):g})});al.displayName=ak;var am=c.forwardRef((a,c)=>{let{__scopeSelect:d,children:e,...f}=a;return(0,b.jsx)(N.Primitive.span,{"aria-hidden":!0,...f,ref:c,children:e||"▼"})});am.displayName="SelectIcon";var an=a=>(0,b.jsx)(M.Portal,{asChild:!0,...a});an.displayName="SelectPortal";var ao="SelectContent",ap=c.forwardRef((a,d)=>{let e=ae(ao,a.__scopeSelect),[f,g]=c.useState();return((0,R.useLayoutEffect)(()=>{g(new DocumentFragment)},[]),e.open)?(0,b.jsx)(at,{...a,ref:d}):f?A.createPortal((0,b.jsx)(aq,{scope:a.__scopeSelect,children:(0,b.jsx)(Z.Slot,{scope:a.__scopeSelect,children:(0,b.jsx)("div",{children:a.children})})}),f):null});ap.displayName=ao;var[aq,ar]=aa(ao),as=(0,O.createSlot)("SelectContent.RemoveScroll"),at=c.forwardRef((a,d)=>{let{__scopeSelect:e,position:f="item-aligned",onCloseAutoFocus:g,onEscapeKeyDown:h,onPointerDownOutside:i,side:j,sideOffset:k,align:l,alignOffset:m,arrowPadding:n,collisionBoundary:o,collisionPadding:p,sticky:q,hideWhenDetached:r,avoidCollisions:s,...t}=a,u=ae(ao,e),[v,w]=c.useState(null),[x,y]=c.useState(null),z=(0,E.useComposedRefs)(d,a=>w(a)),[A,B]=c.useState(null),[D,F]=c.useState(null),G=$(e),[K,L]=c.useState(!1),M=c.useRef(!1);c.useEffect(()=>{if(v)return(0,U.hideOthers)(v)},[v]),(0,I.useFocusGuards)();let N=c.useCallback(a=>{let[b,...c]=G().map(a=>a.ref.current),[d]=c.slice(-1),e=document.activeElement;for(let c of a)if(c===e||(c?.scrollIntoView({block:"nearest"}),c===b&&x&&(x.scrollTop=0),c===d&&x&&(x.scrollTop=x.scrollHeight),c?.focus(),document.activeElement!==e))return},[G,x]),O=c.useCallback(()=>N([A,v]),[N,A,v]);c.useEffect(()=>{K&&O()},[K,O]);let{onOpenChange:P,triggerPointerDownPosRef:Q}=u;c.useEffect(()=>{if(v){let a={x:0,y:0},b=b=>{a={x:Math.abs(Math.round(b.pageX)-(Q.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(Q.current?.y??0))}},c=c=>{a.x<=10&&a.y<=10?c.preventDefault():v.contains(c.target)||P(!1),document.removeEventListener("pointermove",b),Q.current=null};return null!==Q.current&&(document.addEventListener("pointermove",b),document.addEventListener("pointerup",c,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",b),document.removeEventListener("pointerup",c,{capture:!0})}}},[v,P,Q]),c.useEffect(()=>{let a=()=>P(!1);return window.addEventListener("blur",a),window.addEventListener("resize",a),()=>{window.removeEventListener("blur",a),window.removeEventListener("resize",a)}},[P]);let[R,S]=aY(a=>{let b=G().filter(a=>!a.disabled),c=b.find(a=>a.ref.current===document.activeElement),d=aZ(b,a,c);d&&setTimeout(()=>d.ref.current.focus())}),T=c.useCallback((a,b,c)=>{let d=!M.current&&!c;(void 0!==u.value&&u.value===b||d)&&(B(a),d&&(M.current=!0))},[u.value]),W=c.useCallback(()=>v?.focus(),[v]),X=c.useCallback((a,b,c)=>{let d=!M.current&&!c;(void 0!==u.value&&u.value===b||d)&&F(a)},[u.value]),Y="popper"===f?av:au,Z=Y===av?{side:j,sideOffset:k,align:l,alignOffset:m,arrowPadding:n,collisionBoundary:o,collisionPadding:p,sticky:q,hideWhenDetached:r,avoidCollisions:s}:{};return(0,b.jsx)(aq,{scope:e,content:v,viewport:x,onViewportChange:y,itemRefCallback:T,selectedItem:A,onItemLeave:W,itemTextRefCallback:X,focusSelectedItem:O,selectedItemText:D,position:f,isPositioned:K,searchRef:R,children:(0,b.jsx)(V.RemoveScroll,{as:as,allowPinchZoom:!0,children:(0,b.jsx)(J.FocusScope,{asChild:!0,trapped:u.open,onMountAutoFocus:a=>{a.preventDefault()},onUnmountAutoFocus:(0,C.composeEventHandlers)(g,a=>{u.trigger?.focus({preventScroll:!0}),a.preventDefault()}),children:(0,b.jsx)(H.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:h,onPointerDownOutside:i,onFocusOutside:a=>a.preventDefault(),onDismiss:()=>u.onOpenChange(!1),children:(0,b.jsx)(Y,{role:"listbox",id:u.contentId,"data-state":u.open?"open":"closed",dir:u.dir,onContextMenu:a=>a.preventDefault(),...t,...Z,onPlaced:()=>L(!0),ref:z,style:{display:"flex",flexDirection:"column",outline:"none",...t.style},onKeyDown:(0,C.composeEventHandlers)(t.onKeyDown,a=>{let b=a.ctrlKey||a.altKey||a.metaKey;if("Tab"===a.key&&a.preventDefault(),b||1!==a.key.length||S(a.key),["ArrowUp","ArrowDown","Home","End"].includes(a.key)){let b=G().filter(a=>!a.disabled).map(a=>a.ref.current);if(["ArrowUp","End"].includes(a.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(a.key)){let c=a.target,d=b.indexOf(c);b=b.slice(d+1)}setTimeout(()=>N(b)),a.preventDefault()}})})})})})})});at.displayName="SelectContentImpl";var au=c.forwardRef((a,d)=>{let{__scopeSelect:e,onPlaced:f,...g}=a,h=ae(ao,e),i=ar(ao,e),[j,k]=c.useState(null),[l,m]=c.useState(null),n=(0,E.useComposedRefs)(d,a=>m(a)),o=$(e),p=c.useRef(!1),q=c.useRef(!0),{viewport:r,selectedItem:s,selectedItemText:t,focusSelectedItem:u}=i,v=c.useCallback(()=>{if(h.trigger&&h.valueNode&&j&&l&&r&&s&&t){let a=h.trigger.getBoundingClientRect(),b=l.getBoundingClientRect(),c=h.valueNode.getBoundingClientRect(),d=t.getBoundingClientRect();if("rtl"!==h.dir){let e=d.left-b.left,f=c.left-e,g=a.left-f,h=a.width+g,i=Math.max(h,b.width),k=window.innerWidth-10,l=(0,B.clamp)(f,[10,Math.max(10,k-i)]);j.style.minWidth=h+"px",j.style.left=l+"px"}else{let e=b.right-d.right,f=window.innerWidth-c.right-e,g=window.innerWidth-a.right-f,h=a.width+g,i=Math.max(h,b.width),k=window.innerWidth-10,l=(0,B.clamp)(f,[10,Math.max(10,k-i)]);j.style.minWidth=h+"px",j.style.right=l+"px"}let e=o(),g=window.innerHeight-20,i=r.scrollHeight,k=window.getComputedStyle(l),m=parseInt(k.borderTopWidth,10),n=parseInt(k.paddingTop,10),q=parseInt(k.borderBottomWidth,10),u=m+n+i+parseInt(k.paddingBottom,10)+q,v=Math.min(5*s.offsetHeight,u),w=window.getComputedStyle(r),x=parseInt(w.paddingTop,10),y=parseInt(w.paddingBottom,10),z=a.top+a.height/2-10,A=s.offsetHeight/2,C=m+n+(s.offsetTop+A);if(C<=z){let a=e.length>0&&s===e[e.length-1].ref.current;j.style.bottom="0px";let b=Math.max(g-z,A+(a?y:0)+(l.clientHeight-r.offsetTop-r.offsetHeight)+q);j.style.height=C+b+"px"}else{let a=e.length>0&&s===e[0].ref.current;j.style.top="0px";let b=Math.max(z,m+r.offsetTop+(a?x:0)+A);j.style.height=b+(u-C)+"px",r.scrollTop=C-z+r.offsetTop}j.style.margin="10px 0",j.style.minHeight=v+"px",j.style.maxHeight=g+"px",f?.(),requestAnimationFrame(()=>p.current=!0)}},[o,h.trigger,h.valueNode,j,l,r,s,t,h.dir,f]);(0,R.useLayoutEffect)(()=>v(),[v]);let[w,x]=c.useState();(0,R.useLayoutEffect)(()=>{l&&x(window.getComputedStyle(l).zIndex)},[l]);let y=c.useCallback(a=>{a&&!0===q.current&&(v(),u?.(),q.current=!1)},[v,u]);return(0,b.jsx)(aw,{scope:e,contentWrapper:j,shouldExpandOnScrollRef:p,onScrollButtonChange:y,children:(0,b.jsx)("div",{ref:k,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:w},children:(0,b.jsx)(N.Primitive.div,{...g,ref:n,style:{boxSizing:"border-box",maxHeight:"100%",...g.style}})})})});au.displayName="SelectItemAlignedPosition";var av=c.forwardRef((a,c)=>{let{__scopeSelect:d,align:e="start",collisionPadding:f=10,...g}=a,h=ac(d);return(0,b.jsx)(L.Content,{...h,...g,ref:c,align:e,collisionPadding:f,style:{boxSizing:"border-box",...g.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});av.displayName="SelectPopperPosition";var[aw,ax]=aa(ao,{}),ay="SelectViewport",az=c.forwardRef((a,d)=>{let{__scopeSelect:e,nonce:f,...g}=a,h=ar(ay,e),i=ax(ay,e),j=(0,E.useComposedRefs)(d,h.onViewportChange),k=c.useRef(0);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:f}),(0,b.jsx)(Z.Slot,{scope:e,children:(0,b.jsx)(N.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...g,ref:j,style:{position:"relative",flex:1,overflow:"hidden auto",...g.style},onScroll:(0,C.composeEventHandlers)(g.onScroll,a=>{let b=a.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:d}=i;if(d?.current&&c){let a=Math.abs(k.current-b.scrollTop);if(a>0){let d=window.innerHeight-20,e=Math.max(parseFloat(c.style.minHeight),parseFloat(c.style.height));if(e<d){let f=e+a,g=Math.min(d,f),h=f-g;c.style.height=g+"px","0px"===c.style.bottom&&(b.scrollTop=h>0?h:0,c.style.justifyContent="flex-end")}}}k.current=b.scrollTop})})})]})});az.displayName=ay;var aA="SelectGroup",[aB,aC]=aa(aA),aD=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=(0,K.useId)();return(0,b.jsx)(aB,{scope:d,id:f,children:(0,b.jsx)(N.Primitive.div,{role:"group","aria-labelledby":f,...e,ref:c})})});aD.displayName=aA;var aE="SelectLabel",aF=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=aC(aE,d);return(0,b.jsx)(N.Primitive.div,{id:f.id,...e,ref:c})});aF.displayName=aE;var aG="SelectItem",[aH,aI]=aa(aG),aJ=c.forwardRef((a,d)=>{let{__scopeSelect:e,value:f,disabled:g=!1,textValue:h,...i}=a,j=ae(aG,e),k=ar(aG,e),l=j.value===f,[m,n]=c.useState(h??""),[o,p]=c.useState(!1),q=(0,E.useComposedRefs)(d,a=>k.itemRefCallback?.(a,f,g)),r=(0,K.useId)(),s=c.useRef("touch"),t=()=>{g||(j.onValueChange(f),j.onOpenChange(!1))};if(""===f)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,b.jsx)(aH,{scope:e,value:f,disabled:g,textId:r,isSelected:l,onItemTextChange:c.useCallback(a=>{n(b=>b||(a?.textContent??"").trim())},[]),children:(0,b.jsx)(Z.ItemSlot,{scope:e,value:f,disabled:g,textValue:m,children:(0,b.jsx)(N.Primitive.div,{role:"option","aria-labelledby":r,"data-highlighted":o?"":void 0,"aria-selected":l&&o,"data-state":l?"checked":"unchecked","aria-disabled":g||void 0,"data-disabled":g?"":void 0,tabIndex:g?void 0:-1,...i,ref:q,onFocus:(0,C.composeEventHandlers)(i.onFocus,()=>p(!0)),onBlur:(0,C.composeEventHandlers)(i.onBlur,()=>p(!1)),onClick:(0,C.composeEventHandlers)(i.onClick,()=>{"mouse"!==s.current&&t()}),onPointerUp:(0,C.composeEventHandlers)(i.onPointerUp,()=>{"mouse"===s.current&&t()}),onPointerDown:(0,C.composeEventHandlers)(i.onPointerDown,a=>{s.current=a.pointerType}),onPointerMove:(0,C.composeEventHandlers)(i.onPointerMove,a=>{s.current=a.pointerType,g?k.onItemLeave?.():"mouse"===s.current&&a.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,C.composeEventHandlers)(i.onPointerLeave,a=>{a.currentTarget===document.activeElement&&k.onItemLeave?.()}),onKeyDown:(0,C.composeEventHandlers)(i.onKeyDown,a=>{(k.searchRef?.current===""||" "!==a.key)&&(X.includes(a.key)&&t()," "===a.key&&a.preventDefault())})})})})});aJ.displayName=aG;var aK="SelectItemText",aL=c.forwardRef((a,d)=>{let{__scopeSelect:e,className:f,style:g,...h}=a,i=ae(aK,e),j=ar(aK,e),k=aI(aK,e),l=ag(aK,e),[m,n]=c.useState(null),o=(0,E.useComposedRefs)(d,a=>n(a),k.onItemTextChange,a=>j.itemTextRefCallback?.(a,k.value,k.disabled)),p=m?.textContent,q=c.useMemo(()=>(0,b.jsx)("option",{value:k.value,disabled:k.disabled,children:p},k.value),[k.disabled,k.value,p]),{onNativeOptionAdd:r,onNativeOptionRemove:s}=l;return(0,R.useLayoutEffect)(()=>(r(q),()=>s(q)),[r,s,q]),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(N.Primitive.span,{id:k.textId,...h,ref:o}),k.isSelected&&i.valueNode&&!i.valueNodeHasChildren?A.createPortal(h.children,i.valueNode):null]})});aL.displayName=aK;var aM="SelectItemIndicator",aN=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return aI(aM,d).isSelected?(0,b.jsx)(N.Primitive.span,{"aria-hidden":!0,...e,ref:c}):null});aN.displayName=aM;var aO="SelectScrollUpButton",aP=c.forwardRef((a,d)=>{let e=ar(aO,a.__scopeSelect),f=ax(aO,a.__scopeSelect),[g,h]=c.useState(!1),i=(0,E.useComposedRefs)(d,f.onScrollButtonChange);return(0,R.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){h(b.scrollTop>0)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(aS,{...a,ref:i,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop-b.offsetHeight)}}):null});aP.displayName=aO;var aQ="SelectScrollDownButton",aR=c.forwardRef((a,d)=>{let e=ar(aQ,a.__scopeSelect),f=ax(aQ,a.__scopeSelect),[g,h]=c.useState(!1),i=(0,E.useComposedRefs)(d,f.onScrollButtonChange);return(0,R.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){let a=b.scrollHeight-b.clientHeight;h(Math.ceil(b.scrollTop)<a)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(aS,{...a,ref:i,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop+b.offsetHeight)}}):null});aR.displayName=aQ;var aS=c.forwardRef((a,d)=>{let{__scopeSelect:e,onAutoScroll:f,...g}=a,h=ar("SelectScrollButton",e),i=c.useRef(null),j=$(e),k=c.useCallback(()=>{null!==i.current&&(window.clearInterval(i.current),i.current=null)},[]);return c.useEffect(()=>()=>k(),[k]),(0,R.useLayoutEffect)(()=>{let a=j().find(a=>a.ref.current===document.activeElement);a?.ref.current?.scrollIntoView({block:"nearest"})},[j]),(0,b.jsx)(N.Primitive.div,{"aria-hidden":!0,...g,ref:d,style:{flexShrink:0,...g.style},onPointerDown:(0,C.composeEventHandlers)(g.onPointerDown,()=>{null===i.current&&(i.current=window.setInterval(f,50))}),onPointerMove:(0,C.composeEventHandlers)(g.onPointerMove,()=>{h.onItemLeave?.(),null===i.current&&(i.current=window.setInterval(f,50))}),onPointerLeave:(0,C.composeEventHandlers)(g.onPointerLeave,()=>{k()})})}),aT=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return(0,b.jsx)(N.Primitive.div,{"aria-hidden":!0,...e,ref:c})});aT.displayName="SelectSeparator";var aU="SelectArrow",aV=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=ac(d),g=ae(aU,d),h=ar(aU,d);return g.open&&"popper"===h.position?(0,b.jsx)(L.Arrow,{...f,...e,ref:c}):null});aV.displayName=aU;var aW=c.forwardRef(({__scopeSelect:a,value:d,...e},f)=>{let g=c.useRef(null),h=(0,E.useComposedRefs)(f,g),i=(0,S.usePrevious)(d);return c.useEffect(()=>{let a=g.current;if(!a)return;let b=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(i!==d&&b){let c=new Event("change",{bubbles:!0});b.call(a,d),a.dispatchEvent(c)}},[i,d]),(0,b.jsx)(N.Primitive.select,{...e,style:{...T.VISUALLY_HIDDEN_STYLES,...e.style},ref:h,defaultValue:d})});function aX(a){return""===a||void 0===a}function aY(a){let b=(0,P.useCallbackRef)(a),d=c.useRef(""),e=c.useRef(0),f=c.useCallback(a=>{let c=d.current+a;b(c),function a(b){d.current=b,window.clearTimeout(e.current),""!==b&&(e.current=window.setTimeout(()=>a(""),1e3))}(c)},[b]),g=c.useCallback(()=>{d.current="",window.clearTimeout(e.current)},[]);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),[d,f,g]}function aZ(a,b,c){var d,e;let f=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,g=c?a.indexOf(c):-1,h=(d=a,e=Math.max(g,0),d.map((a,b)=>d[(e+b)%d.length]));1===f.length&&(h=h.filter(a=>a!==c));let i=h.find(a=>a.textValue.toLowerCase().startsWith(f.toLowerCase()));return i!==c?i:void 0}aW.displayName="SelectBubbleInput",a.s(["Arrow",()=>aV,"Content",()=>ap,"Group",()=>aD,"Icon",()=>am,"Item",()=>aJ,"ItemIndicator",()=>aN,"ItemText",()=>aL,"Label",()=>aF,"Portal",()=>an,"Root",()=>ah,"ScrollDownButton",()=>aR,"ScrollUpButton",()=>aP,"Select",()=>ah,"SelectArrow",()=>aV,"SelectContent",()=>ap,"SelectGroup",()=>aD,"SelectIcon",()=>am,"SelectItem",()=>aJ,"SelectItemIndicator",()=>aN,"SelectItemText",()=>aL,"SelectLabel",()=>aF,"SelectPortal",()=>an,"SelectScrollDownButton",()=>aR,"SelectScrollUpButton",()=>aP,"SelectSeparator",()=>aT,"SelectTrigger",()=>aj,"SelectValue",()=>al,"SelectViewport",()=>az,"Separator",()=>aT,"Trigger",()=>aj,"Value",()=>al,"Viewport",()=>az,"createSelectScope",()=>ab],16252);var a$=a.i(16252),a$=a$,a_=a.i(71716);let a0=(0,e.default)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),a1=a$.Root;a$.Group;let a2=a$.Value,a3=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(a$.Trigger,{ref:e,className:(0,u.cn)("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",a),...d,children:[c,(0,b.jsx)(a$.Icon,{asChild:!0,children:(0,b.jsx)(a_.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));a3.displayName=a$.Trigger.displayName;let a4=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(a$.ScrollUpButton,{ref:d,className:(0,u.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(a0,{className:"h-4 w-4"})}));a4.displayName=a$.ScrollUpButton.displayName;let a5=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(a$.ScrollDownButton,{ref:d,className:(0,u.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(a_.ChevronDown,{className:"h-4 w-4"})}));a5.displayName=a$.ScrollDownButton.displayName;let a6=c.forwardRef(({className:a,children:c,position:d="popper",...e},f)=>(0,b.jsx)(a$.Portal,{children:(0,b.jsxs)(a$.Content,{ref:f,className:(0,u.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md","popper"===d&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:d,...e,children:[(0,b.jsx)(a4,{}),(0,b.jsx)(a$.Viewport,{className:(0,u.cn)("p-1","popper"===d&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:c}),(0,b.jsx)(a5,{})]})}));a6.displayName=a$.Content.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(a$.Label,{ref:d,className:(0,u.cn)("px-2 py-1.5 text-sm font-semibold",a),...c})).displayName=a$.Label.displayName;let a7=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(a$.Item,{ref:e,className:(0,u.cn)("focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...d,children:[(0,b.jsx)("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(a$.ItemIndicator,{children:(0,b.jsx)(g.Check,{className:"h-4 w-4"})})}),(0,b.jsx)(a$.ItemText,{children:c})]}));a7.displayName=a$.Item.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(a$.Separator,{ref:d,className:(0,u.cn)("bg-muted -mx-1 my-1 h-px",a),...c})).displayName=a$.Separator.displayName;var a8=a.i(25674);let a9=(0,a8.createServerReference)("40da994f4b354f5d46e44312d29617eb6e8de03c37",a8.callServer,void 0,a8.findSourceMapURL,"updateSettingsAction");var ba=a.i(46847),bb=a.i(61640),bc=a.i(44447),bd=a.i(87926);function be(a){return(0,b.jsx)(bc.Code,{className:(0,u.cn)("h-4 w-4",a.className),...a})}function bf({className:a}){return(0,b.jsx)(bb.default,{src:"/icons/editors/vscode.svg",alt:"VS Code",width:24,height:24,className:(0,u.cn)("rounded-sm object-contain",a)})}function bg({className:a}){return(0,b.jsx)(bb.default,{src:"/icons/agents/cursor.jpeg",alt:"Cursor",width:24,height:24,className:(0,u.cn)("rounded-sm object-contain",a)})}function bh({className:a}){return(0,b.jsx)(bb.default,{src:"/icons/editors/windsurf.svg",alt:"Windsurf",width:24,height:24,className:(0,u.cn)("rounded-sm object-contain",a)})}function bi({className:a}){return(0,b.jsx)(bb.default,{src:"/icons/editors/zed.svg",alt:"Zed",width:24,height:24,className:(0,u.cn)("rounded-sm object-contain",a)})}function bj({className:a,...c}){return(0,b.jsx)(bd.Rocket,{className:(0,u.cn)("h-4 w-4",a),...c})}bf.displayName="VsCodeIcon",bg.displayName="CursorEditorIcon",bh.displayName="WindsurfIcon",bi.displayName="ZedIcon",bj.displayName="AntigravityIcon";let bk={vscode:bf,cursor:bg,windsurf:bh,zed:bi,antigravity:bj};var bl=a.i(61781),bm=a.i(74432),bn=["PageUp","PageDown"],bo=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],bp={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},bq="Slider",[br,bs,bt]=(0,D.createCollection)(bq),[bu,bv]=(0,F.createContextScope)(bq,[bt]),[bw,bx]=bu(bq),by=c.forwardRef((a,d)=>{let{name:e,min:f=0,max:g=100,step:h=1,orientation:i="horizontal",disabled:j=!1,minStepsBetweenThumbs:k=0,defaultValue:l=[f],value:m,onValueChange:n=()=>{},onValueCommit:o=()=>{},inverted:p=!1,form:q,...r}=a,s=c.useRef(new Set),t=c.useRef(0),u="horizontal"===i,[v=[],w]=(0,Q.useControllableState)({prop:m,defaultProp:l,onChange:a=>{let b=[...s.current];b[t.current]?.focus(),n(a)}}),x=c.useRef(v);function y(a,b,{commit:c}={commit:!1}){let d,e=(String(h).split(".")[1]||"").length,i=Math.round((Math.round((a-f)/h)*h+f)*(d=Math.pow(10,e)))/d,j=(0,B.clamp)(i,[f,g]);w((a=[])=>{let d=function(a=[],b,c){let d=[...a];return d[c]=b,d.sort((a,b)=>a-b)}(a,j,b);if(!function(a,b){if(b>0)return Math.min(...a.slice(0,-1).map((b,c)=>a[c+1]-b))>=b;return!0}(d,k*h))return a;{t.current=d.indexOf(j);let b=String(d)!==String(a);return b&&c&&o(d),b?d:a}})}return(0,b.jsx)(bw,{scope:a.__scopeSlider,name:e,disabled:j,min:f,max:g,valueIndexToChangeRef:t,thumbs:s.current,values:v,orientation:i,form:q,children:(0,b.jsx)(br.Provider,{scope:a.__scopeSlider,children:(0,b.jsx)(br.Slot,{scope:a.__scopeSlider,children:(0,b.jsx)(u?bB:bC,{"aria-disabled":j,"data-disabled":j?"":void 0,...r,ref:d,onPointerDown:(0,C.composeEventHandlers)(r.onPointerDown,()=>{j||(x.current=v)}),min:f,max:g,inverted:p,onSlideStart:j?void 0:function(a){let b=function(a,b){if(1===a.length)return 0;let c=a.map(a=>Math.abs(a-b)),d=Math.min(...c);return c.indexOf(d)}(v,a);y(a,b)},onSlideMove:j?void 0:function(a){y(a,t.current)},onSlideEnd:j?void 0:function(){let a=x.current[t.current];v[t.current]!==a&&o(v)},onHomeKeyDown:()=>!j&&y(f,0,{commit:!0}),onEndKeyDown:()=>!j&&y(g,v.length-1,{commit:!0}),onStepKeyDown:({event:a,direction:b})=>{if(!j){let c=bn.includes(a.key)||a.shiftKey&&bo.includes(a.key),d=t.current;y(v[d]+h*(c?10:1)*b,d,{commit:!0})}}})})})})});by.displayName=bq;var[bz,bA]=bu(bq,{startEdge:"left",endEdge:"right",size:"width",direction:1}),bB=c.forwardRef((a,d)=>{let{min:e,max:f,dir:g,inverted:h,onSlideStart:i,onSlideMove:j,onSlideEnd:k,onStepKeyDown:l,...m}=a,[n,o]=c.useState(null),p=(0,E.useComposedRefs)(d,a=>o(a)),q=c.useRef(void 0),r=(0,G.useDirection)(g),s="ltr"===r,t=s&&!h||!s&&h;function u(a){let b=q.current||n.getBoundingClientRect(),c=bN([0,b.width],t?[e,f]:[f,e]);return q.current=b,c(a-b.left)}return(0,b.jsx)(bz,{scope:a.__scopeSlider,startEdge:t?"left":"right",endEdge:t?"right":"left",direction:t?1:-1,size:"width",children:(0,b.jsx)(bD,{dir:r,"data-orientation":"horizontal",...m,ref:p,style:{...m.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:a=>{let b=u(a.clientX);i?.(b)},onSlideMove:a=>{let b=u(a.clientX);j?.(b)},onSlideEnd:()=>{q.current=void 0,k?.()},onStepKeyDown:a=>{let b=bp[t?"from-left":"from-right"].includes(a.key);l?.({event:a,direction:b?-1:1})}})})}),bC=c.forwardRef((a,d)=>{let{min:e,max:f,inverted:g,onSlideStart:h,onSlideMove:i,onSlideEnd:j,onStepKeyDown:k,...l}=a,m=c.useRef(null),n=(0,E.useComposedRefs)(d,m),o=c.useRef(void 0),p=!g;function q(a){let b=o.current||m.current.getBoundingClientRect(),c=bN([0,b.height],p?[f,e]:[e,f]);return o.current=b,c(a-b.top)}return(0,b.jsx)(bz,{scope:a.__scopeSlider,startEdge:p?"bottom":"top",endEdge:p?"top":"bottom",size:"height",direction:p?1:-1,children:(0,b.jsx)(bD,{"data-orientation":"vertical",...l,ref:n,style:{...l.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:a=>{let b=q(a.clientY);h?.(b)},onSlideMove:a=>{let b=q(a.clientY);i?.(b)},onSlideEnd:()=>{o.current=void 0,j?.()},onStepKeyDown:a=>{let b=bp[p?"from-bottom":"from-top"].includes(a.key);k?.({event:a,direction:b?-1:1})}})})}),bD=c.forwardRef((a,c)=>{let{__scopeSlider:d,onSlideStart:e,onSlideMove:f,onSlideEnd:g,onHomeKeyDown:h,onEndKeyDown:i,onStepKeyDown:j,...k}=a,l=bx(bq,d);return(0,b.jsx)(N.Primitive.span,{...k,ref:c,onKeyDown:(0,C.composeEventHandlers)(a.onKeyDown,a=>{"Home"===a.key?(h(a),a.preventDefault()):"End"===a.key?(i(a),a.preventDefault()):bn.concat(bo).includes(a.key)&&(j(a),a.preventDefault())}),onPointerDown:(0,C.composeEventHandlers)(a.onPointerDown,a=>{let b=a.target;b.setPointerCapture(a.pointerId),a.preventDefault(),l.thumbs.has(b)?b.focus():e(a)}),onPointerMove:(0,C.composeEventHandlers)(a.onPointerMove,a=>{a.target.hasPointerCapture(a.pointerId)&&f(a)}),onPointerUp:(0,C.composeEventHandlers)(a.onPointerUp,a=>{let b=a.target;b.hasPointerCapture(a.pointerId)&&(b.releasePointerCapture(a.pointerId),g(a))})})}),bE="SliderTrack",bF=c.forwardRef((a,c)=>{let{__scopeSlider:d,...e}=a,f=bx(bE,d);return(0,b.jsx)(N.Primitive.span,{"data-disabled":f.disabled?"":void 0,"data-orientation":f.orientation,...e,ref:c})});bF.displayName=bE;var bG="SliderRange",bH=c.forwardRef((a,d)=>{let{__scopeSlider:e,...f}=a,g=bx(bG,e),h=bA(bG,e),i=c.useRef(null),j=(0,E.useComposedRefs)(d,i),k=g.values.length,l=g.values.map(a=>bM(a,g.min,g.max)),m=k>1?Math.min(...l):0,n=100-Math.max(...l);return(0,b.jsx)(N.Primitive.span,{"data-orientation":g.orientation,"data-disabled":g.disabled?"":void 0,...f,ref:j,style:{...a.style,[h.startEdge]:m+"%",[h.endEdge]:n+"%"}})});bH.displayName=bG;var bI="SliderThumb",bJ=c.forwardRef((a,d)=>{let e=bs(a.__scopeSlider),[f,g]=c.useState(null),h=(0,E.useComposedRefs)(d,a=>g(a)),i=c.useMemo(()=>f?e().findIndex(a=>a.ref.current===f):-1,[e,f]);return(0,b.jsx)(bK,{...a,ref:h,index:i})}),bK=c.forwardRef((a,d)=>{var e,f,g,h,i;let j,k,{__scopeSlider:l,index:m,name:n,...o}=a,p=bx(bI,l),q=bA(bI,l),[r,s]=c.useState(null),t=(0,E.useComposedRefs)(d,a=>s(a)),u=!r||p.form||!!r.closest("form"),v=(0,bm.useSize)(r),w=p.values[m],x=void 0===w?0:bM(w,p.min,p.max),y=(e=m,(f=p.values.length)>2?`Value ${e+1} of ${f}`:2===f?["Minimum","Maximum"][e]:void 0),z=v?.[q.size],A=z?(g=z,h=x,i=q.direction,k=bN([0,50],[0,j=g/2]),(j-k(h)*i)*i):0;return c.useEffect(()=>{if(r)return p.thumbs.add(r),()=>{p.thumbs.delete(r)}},[r,p.thumbs]),(0,b.jsxs)("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[q.startEdge]:`calc(${x}% + ${A}px)`},children:[(0,b.jsx)(br.ItemSlot,{scope:a.__scopeSlider,children:(0,b.jsx)(N.Primitive.span,{role:"slider","aria-label":a["aria-label"]||y,"aria-valuemin":p.min,"aria-valuenow":w,"aria-valuemax":p.max,"aria-orientation":p.orientation,"data-orientation":p.orientation,"data-disabled":p.disabled?"":void 0,tabIndex:p.disabled?void 0:0,...o,ref:t,style:void 0===w?{display:"none"}:a.style,onFocus:(0,C.composeEventHandlers)(a.onFocus,()=>{p.valueIndexToChangeRef.current=m})})}),u&&(0,b.jsx)(bL,{name:n??(p.name?p.name+(p.values.length>1?"[]":""):void 0),form:p.form,value:w},m)]})});bJ.displayName=bI;var bL=c.forwardRef(({__scopeSlider:a,value:d,...e},f)=>{let g=c.useRef(null),h=(0,E.useComposedRefs)(g,f),i=(0,S.usePrevious)(d);return c.useEffect(()=>{let a=g.current;if(!a)return;let b=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set;if(i!==d&&b){let c=new Event("input",{bubbles:!0});b.call(a,d),a.dispatchEvent(c)}},[i,d]),(0,b.jsx)(N.Primitive.input,{style:{display:"none"},...e,ref:h,defaultValue:d})});function bM(a,b,c){return(0,B.clamp)(100/(c-b)*(a-b),[0,100])}function bN(a,b){return c=>{if(a[0]===a[1]||b[0]===b[1])return b[0];let d=(b[1]-b[0])/(a[1]-a[0]);return b[0]+d*(c-a[0])}}bL.displayName="RadioBubbleInput",a.s(["Range",()=>bH,"Root",()=>by,"Slider",()=>by,"SliderRange",()=>bH,"SliderThumb",()=>bJ,"SliderTrack",()=>bF,"Thumb",()=>bJ,"Track",()=>bF,"createSliderScope",()=>bv],61569);var bO=a.i(61569),bO=bO;function bP({className:a,defaultValue:d,value:e,min:f=0,max:g=100,...h}){let i=c.useMemo(()=>Array.isArray(e)?e:Array.isArray(d)?d:[f,g],[e,d,f,g]);return(0,b.jsxs)(bO.Root,{"data-slot":"slider",defaultValue:d,value:e,min:f,max:g,className:(0,u.cn)("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",a),...h,children:[(0,b.jsx)(bO.Track,{"data-slot":"slider-track",className:(0,u.cn)("bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"),children:(0,b.jsx)(bO.Range,{"data-slot":"slider-range",className:(0,u.cn)("bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full")})}),Array.from({length:i.length},(a,c)=>(0,b.jsx)(bO.Thumb,{"data-slot":"slider-thumb",className:"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"},c))]})}let bQ=[60,120,300,600,900,1800,2700,3600,7200,10800,14400,21600,28800,43200,86400],bR=bQ.length-1;function bS(a){let b=0,c=Math.abs(a-bQ[0]);for(let d=1;d<bQ.length;d++){let e=Math.abs(a-bQ[d]);e<c&&(c=e,b=d)}return b}function bT({id:a,testId:d,value:e,onChange:f,onBlur:g,defaultSeconds:h=1800}){var i;let j,k,l=(""===e?h:parseInt(e,10))||h,[m,n]=(0,c.useState)(()=>bS(l)),o=bS(l);o!==m&&bQ[m]!==l&&n(o);let p=(0,c.useCallback)(([a])=>{n(a),f(String(bQ[a]))},[f]);return(0,b.jsxs)("div",{className:"flex w-55 items-center gap-2",children:[(0,b.jsx)(bP,{id:a,"data-testid":d,min:0,max:bR,step:1,value:[m],onValueChange:p,onValueCommit:()=>g(),className:"min-w-0 flex-1"}),(0,b.jsx)("span",{className:"text-muted-foreground shrink-0 text-right text-xs tabular-nums",children:(j=Math.floor((i=bQ[m])/3600),k=Math.round(i%3600/60),0===j?`${k}m`:0===k?`${j}h`:`${j}h ${k}m`)})]})}let bU=[{value:ba.AgentAuthMethod.Session,label:"Session"},{value:ba.AgentAuthMethod.Token,label:"Token"}],bV=[{value:ba.EditorType.VsCode,label:"VS Code"},{value:ba.EditorType.Cursor,label:"Cursor"},{value:ba.EditorType.Windsurf,label:"Windsurf"},{value:ba.EditorType.Zed,label:"Zed"},{value:ba.EditorType.Antigravity,label:"Antigravity"}],bW=[{value:"bash",label:"Bash"},{value:"zsh",label:"Zsh"},{value:"fish",label:"Fish"}],bX=[{id:"agent",label:"Agent",icon:h.Bot},{id:"environment",label:"Environment",icon:i.Terminal},{id:"workflow",label:"Workflow",icon:j.GitBranch},{id:"ci",label:"CI",icon:k},{id:"stage-timeouts",label:"Timeouts",icon:s},{id:"notifications",label:"Notifications",icon:l},{id:"feature-flags",label:"Flags",icon:m},{id:"database",label:"Database",icon:n}];function bY({label:a,description:c,htmlFor:d,children:e}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4 border-b py-2.5 last:border-b-0",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)(v.Label,{htmlFor:d,className:"cursor-pointer text-sm font-normal whitespace-nowrap",children:a}),c?(0,b.jsx)("p",{className:"text-muted-foreground text-[11px] leading-tight",children:c}):null]}),(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:e})]})}function bZ({label:a,description:c,id:d,testId:e,checked:f,onChange:g,disabled:h}){return(0,b.jsx)(bY,{label:a,description:c,htmlFor:d,children:(0,b.jsx)(y.Switch,{id:d,"data-testid":e,checked:f,onCheckedChange:g,disabled:h,className:(0,u.cn)("cursor-pointer",h&&"cursor-not-allowed opacity-50")})})}function b$({icon:a,title:c,description:d,badge:e,testId:f,children:g}){return(0,b.jsxs)("div",{className:"bg-background rounded-lg border","data-testid":f,children:[(0,b.jsxs)("div",{className:"bg-muted/30 border-b px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(a,{className:"text-muted-foreground h-3.5 w-3.5"}),(0,b.jsx)("h2",{className:"text-sm font-semibold",children:c}),e?(0,b.jsx)("span",{className:"bg-muted text-muted-foreground rounded px-1.5 py-0.5 text-[9px] font-medium tracking-wider uppercase",children:e}):null]}),(0,b.jsx)("p",{className:"text-muted-foreground mt-0.5 text-[11px]",children:d})]}),(0,b.jsx)("div",{className:"px-4",children:g})]})}function b_({id:a,testId:c,value:d,onChange:e,onBlur:f,placeholder:g,min:h=1,max:i,step:j=1,suffix:k}){let l=""===d?void 0:parseInt(d,10);return(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center overflow-hidden rounded-md border",children:[(0,b.jsx)("button",{type:"button",onClick:()=>{e(String(Math.max(h,(l??parseInt(g,10))-j)))},onMouseUp:f,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-r transition-colors","aria-label":"Decrease",children:(0,b.jsx)(o.default,{className:"h-3 w-3"})}),(0,b.jsx)("input",{id:a,"data-testid":c,type:"text",inputMode:"numeric",pattern:"[0-9]*",value:d,placeholder:g,onChange:a=>{e(a.target.value.replace(/[^0-9]/g,""))},onBlur:f,className:"h-8 w-14 bg-transparent text-center text-xs outline-none"}),(0,b.jsx)("button",{type:"button",onClick:()=>{let a;a=l??parseInt(g,10),e(String(null!=i?Math.min(i,a+j):a+j))},onMouseUp:f,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-l transition-colors","aria-label":"Increase",children:(0,b.jsx)(p.Plus,{className:"h-3 w-3"})})]}),k?(0,b.jsx)("span",{className:"text-muted-foreground text-[11px]",children:k}):null]})}function b0({children:a}){return(0,b.jsx)("div",{className:"border-b pt-3 pb-1",children:(0,b.jsx)("span",{className:"text-muted-foreground text-[10px] font-semibold tracking-wider uppercase",children:a})})}function b1({children:a,links:c}){return(0,b.jsxs)("div",{className:"hidden pt-2 lg:block",children:[(0,b.jsx)("p",{className:"text-muted-foreground/70 text-[11px] leading-relaxed",children:a}),null!=c&&c.length>0?(0,b.jsx)("div",{className:"mt-2 flex flex-col gap-1",children:c.map(a=>(0,b.jsxs)("a",{href:a.href,target:"_blank",rel:"noopener noreferrer",className:"text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-[10px] transition-colors",children:[(0,b.jsx)(q.ExternalLink,{className:"h-2.5 w-2.5"}),a.label]},a.href))}):null]})}function b2({settings:a,shepHome:e,dbFileSize:o,availableTerminals:p}){let{showSaving:q,showSaved:v,save:y}=function(){let[a,b]=(0,c.useTransition)(),[d,e]=(0,c.useState)(!1),[f,g]=(0,c.useState)(!1),h=(0,c.useRef)(null),i=(0,c.useRef)(!1);return(0,c.useEffect)(()=>{a&&!d&&(e(!0),i.current=!1,h.current=setTimeout(()=>{h.current=null,i.current&&(e(!1),g(!0),setTimeout(()=>g(!1),2e3))},350)),!a&&d&&(i.current=!0,h.current||(e(!1),g(!0),setTimeout(()=>g(!1),2e3)))},[a,d]),{showSaving:d,showSaved:f,save:(0,c.useCallback)(a=>{b(async()=>{let b=await a9(a);b.success||t.toast.error(b.error??"Failed to save settings")})},[b])}}(),A=a.featureFlags??{skills:!1,envDeploy:!1,debug:!1},[B,C]=(0,c.useState)(a.agent.type),D=a.agent.authMethod,[E,F]=(0,c.useState)(a.agent.token??""),[G,H]=(0,c.useState)(!1),[I,J]=(0,c.useState)(a.environment.defaultEditor),[K,L]=(0,c.useState)(a.environment.shellPreference),[M,N]=(0,c.useState)(a.environment.terminalPreference??ba.TerminalType.System),O=p?p.filter(a=>a.available):[{id:ba.TerminalType.System,name:"System Terminal",available:!0}],[P,Q]=(0,c.useState)(a.workflow.openPrOnImplementationComplete),[R,S]=(0,c.useState)(a.workflow.approvalGateDefaults.pushOnImplementationComplete),[T,U]=(0,c.useState)(a.workflow.approvalGateDefaults.allowPrd),[V,W]=(0,c.useState)(a.workflow.approvalGateDefaults.allowPlan),[X,Y]=(0,c.useState)(a.workflow.approvalGateDefaults.allowMerge),[Z,$]=(0,c.useState)(a.workflow.enableEvidence),[_,aa]=(0,c.useState)(a.workflow.commitEvidence),[ab,ac]=(0,c.useState)(!1!==a.workflow.ciWatchEnabled),[ad,ae]=(0,c.useState)(null!=a.workflow.ciMaxFixAttempts?String(a.workflow.ciMaxFixAttempts):""),[af,ag]=(0,c.useState)(null!=a.workflow.ciWatchTimeoutMs?String(Math.round(a.workflow.ciWatchTimeoutMs/1e3)):""),[ah,ai]=(0,c.useState)(null!=a.workflow.ciLogMaxChars?String(a.workflow.ciLogMaxChars):""),[aj,ak]=(0,c.useState)(null!=a.workflow.ciWatchPollIntervalSeconds?String(a.workflow.ciWatchPollIntervalSeconds):""),al=a.workflow.stageTimeouts,[am,an]=(0,c.useState)(String(Math.round((al?.analyzeMs??18e5)/1e3))),[ao,ap]=(0,c.useState)(String(Math.round((al?.requirementsMs??18e5)/1e3))),[aq,ar]=(0,c.useState)(String(Math.round((al?.researchMs??18e5)/1e3))),[as,at]=(0,c.useState)(String(Math.round((al?.planMs??18e5)/1e3))),[au,av]=(0,c.useState)(String(Math.round((al?.implementMs??18e5)/1e3))),[aw,ax]=(0,c.useState)(String(Math.round((al?.mergeMs??18e5)/1e3))),ay=a.workflow.analyzeRepoTimeouts,[az,aA]=(0,c.useState)(String(Math.round((ay?.analyzeMs??6e5)/1e3))),[aB,aC]=(0,c.useState)(a.notifications.inApp.enabled),[aD,aE]=(0,c.useState)(a.notifications.browser.enabled),[aF,aG]=(0,c.useState)(a.notifications.desktop.enabled),[aH,aI]=(0,c.useState)({...a.notifications.events}),[aJ,aK]=(0,c.useState)({...A}),aL=null!=a.workflow.ciMaxFixAttempts?String(a.workflow.ciMaxFixAttempts):"",aM=null!=a.workflow.ciWatchTimeoutMs?String(Math.round(a.workflow.ciWatchTimeoutMs/1e3)):"",aN=null!=a.workflow.ciLogMaxChars?String(a.workflow.ciLogMaxChars):"",aO=null!=a.workflow.ciWatchPollIntervalSeconds?String(a.workflow.ciWatchPollIntervalSeconds):"",aP=al?.analyzeMs!=null?String(Math.round(al.analyzeMs/1e3)):"",aQ=al?.requirementsMs!=null?String(Math.round(al.requirementsMs/1e3)):"",aR=al?.researchMs!=null?String(Math.round(al.researchMs/1e3)):"",aS=al?.planMs!=null?String(Math.round(al.planMs/1e3)):"",aT=al?.implementMs!=null?String(Math.round(al.implementMs/1e3)):"",aU=al?.mergeMs!=null?String(Math.round(al.mergeMs/1e3)):"",aV=ay?.analyzeMs!=null?String(Math.round(ay.analyzeMs/1e3)):"";function aW(a){if(""===a)return;let b=parseInt(a,10);return Number.isNaN(b)||b<=0?void 0:b}function aX(a){if(void 0===a)return;let b=aW(a);return null!=b?1e3*b:void 0}function aY(a={}){let b=aW(a.ciTimeout??af);return{workflow:{openPrOnImplementationComplete:a.openPr??P,approvalGateDefaults:{pushOnImplementationComplete:a.pushOnComplete??R,allowPrd:a.allowPrd??T,allowPlan:a.allowPlan??V,allowMerge:a.allowMerge??X},enableEvidence:a.enableEvidence??Z,commitEvidence:a.commitEvidence??_,ciWatchEnabled:a.ciWatchEnabled??ab,ciMaxFixAttempts:aW(a.ciMaxFix??ad),ciWatchTimeoutMs:null!=b?1e3*b:void 0,ciLogMaxChars:aW(a.ciLogMax??ah),ciWatchPollIntervalSeconds:aW(a.ciPollInterval??aj),stageTimeouts:{analyzeMs:aX(a.analyzeTimeout??am),requirementsMs:aX(a.requirementsTimeout??ao),researchMs:aX(a.researchTimeout??aq),planMs:aX(a.planTimeout??as),implementMs:aX(a.implementTimeout??au),mergeMs:aX(a.mergeTimeout??aw)},analyzeRepoTimeouts:{analyzeMs:aX(a.analyzeRepoTimeout??az)}}}}function aZ(a={}){return{notifications:{inApp:{enabled:a.inApp??aB},browser:{enabled:a.browser??aD},desktop:{enabled:a.desktop??aF},events:a.events??aH}}}let[a$,a_]=(0,c.useState)("agent");(0,c.useEffect)(()=>{let a=bX.map(a=>document.getElementById(`section-${a.id}`)).filter(Boolean);if(0===a.length)return;let b=new IntersectionObserver(a=>{for(let b of a)b.isIntersecting&&a_(b.target.id.replace("section-",""))},{rootMargin:"-65px 0px -60% 0px",threshold:0});for(let c of a)b.observe(c);return()=>b.disconnect()},[]);let a0=(0,c.useCallback)(a=>{let b=document.getElementById(`section-${a}`);b&&(b.scrollIntoView({behavior:"smooth",block:"start"}),b.style.animation="none",b.offsetHeight,b.style.animation="section-flash 1s ease-out")},[]);return(0,b.jsxs)("div",{"data-testid":"settings-page-client",className:"max-w-5xl",children:[(0,b.jsx)("div",{className:"bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10 grid grid-cols-1 gap-x-5 pt-6 pb-4 backdrop-blur lg:grid-cols-[1fr_280px]",children:(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(r,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Settings"}),(0,b.jsxs)("span",{className:"relative h-4 w-16",children:[(0,b.jsx)("span",{className:(0,u.cn)("text-muted-foreground absolute inset-0 flex items-center text-xs transition-opacity duration-300",q?"opacity-100":"opacity-0"),children:"Saving..."}),(0,b.jsxs)("span",{className:(0,u.cn)("absolute inset-0 flex items-center gap-1 text-xs text-green-600 transition-opacity duration-300",v&&!q?"opacity-100":"opacity-0"),children:[(0,b.jsx)(g.Check,{className:"h-3 w-3"}),"Saved"]})]}),(0,b.jsx)("nav",{className:"ml-auto flex items-center gap-0.5",children:bX.map(a=>{let c=a.icon,d=a$===a.id;return(0,b.jsxs)("button",{type:"button",onClick:()=>a0(a.id),className:(0,u.cn)("flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-all",d?"bg-accent text-foreground font-medium":"text-muted-foreground/60 hover:text-foreground hover:bg-accent/50"),children:[(0,b.jsx)(c,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:a.label})]},a.id)})})]})}),(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{id:"section-agent",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:h.Bot,title:"Agent",description:"AI coding agent and authentication",testId:"agent-settings-section",children:[(0,b.jsx)(bY,{label:"Agent & Model",description:"Provider and model for all operations",htmlFor:"agent-model-picker",children:(0,b.jsx)(bl.AgentModelPicker,{initialAgentType:B,initialModel:a.models.default,mode:"settings",onAgentModelChange:a=>C(a),className:"w-55"})}),(0,b.jsx)(bY,{label:"Authentication",description:"How the agent authenticates",htmlFor:"auth-method",children:(0,b.jsx)(z.TooltipProvider,{children:(0,b.jsxs)(z.Tooltip,{children:[(0,b.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("div",{children:(0,b.jsxs)(a1,{value:D,disabled:!0,children:[(0,b.jsx)(a3,{id:"auth-method","data-testid":"auth-method-select",className:"w-55 cursor-not-allowed text-xs opacity-60",children:(0,b.jsx)(a2,{})}),(0,b.jsx)(a6,{children:bU.map(a=>(0,b.jsx)(a7,{value:a.value,children:a.label},a.value))})]})})}),(0,b.jsx)(z.TooltipContent,{children:"Coming soon"})]})})}),D===ba.AgentAuthMethod.Token&&(0,b.jsx)(bY,{label:"API Token",htmlFor:"agent-token",children:(0,b.jsxs)("div",{className:"relative w-45",children:[(0,b.jsx)(w.Input,{id:"agent-token","data-testid":"agent-token-input",type:G?"text":"password",value:E,onChange:a=>F(a.target.value),onBlur:()=>{E!==(a.agent.token??"")&&y(function(a={}){let b={type:B,authMethod:D,...a},c={type:b.type,authMethod:b.authMethod};return b.authMethod===ba.AgentAuthMethod.Token&&(c.token=a.token??E),{agent:c}}({token:E}))},placeholder:"Enter token",className:"pr-8"}),(0,b.jsx)(x.Button,{type:"button",variant:"ghost",size:"sm",className:"absolute top-0 right-0 h-full px-2 hover:bg-transparent",onClick:()=>H(!G),"data-testid":"toggle-token-visibility","aria-label":G?"Hide token":"Show token",children:G?(0,b.jsx)(f,{className:"h-3 w-3"}):(0,b.jsx)(d.Eye,{className:"h-3 w-3"})})]})})]}),(0,b.jsx)(b1,{links:[{label:"Agent system",href:"https://github.com/shep-ai/cli/blob/main/docs/architecture/agent-system.md"},{label:"Adding agents",href:"https://github.com/shep-ai/cli/blob/main/docs/development/adding-agents.md"},{label:"Configuration guide",href:"https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md"}],children:"Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session."})]}),(0,b.jsxs)("div",{id:"section-environment",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:i.Terminal,title:"Environment",description:"Editor, shell, and terminal preferences",testId:"environment-settings-section",children:[(0,b.jsx)(bY,{label:"Default Editor",description:"Editor launched for file operations",htmlFor:"default-editor",children:(0,b.jsxs)(a1,{value:I,onValueChange:a=>{J(a),y({environment:{defaultEditor:a,shellPreference:K,terminalPreference:M}})},children:[(0,b.jsx)(a3,{id:"default-editor","data-testid":"editor-select",className:"w-55 cursor-pointer text-xs",children:(0,b.jsx)(a2,{})}),(0,b.jsx)(a6,{children:bV.map(a=>{var c;let d=(c=a.value)&&c in bk?bk[c]:be;return(0,b.jsx)(a7,{value:a.value,children:(0,b.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[(0,b.jsx)(d,{className:"h-4 w-4 shrink-0"}),a.label]})},a.value)})})]})}),(0,b.jsx)(bY,{label:"Shell",description:"Default shell for generated scripts",htmlFor:"shell-preference",children:(0,b.jsxs)(a1,{value:K,onValueChange:a=>{L(a),y({environment:{defaultEditor:I,shellPreference:a,terminalPreference:M}})},children:[(0,b.jsx)(a3,{id:"shell-preference","data-testid":"shell-select",className:"w-55 cursor-pointer text-xs",children:(0,b.jsx)(a2,{})}),(0,b.jsx)(a6,{children:bW.map(a=>(0,b.jsx)(a7,{value:a.value,children:a.label},a.value))})]})}),(0,b.jsx)(bY,{label:"Terminal",description:"Terminal emulator for shell sessions",htmlFor:"terminal-preference",children:(0,b.jsxs)(a1,{value:M,onValueChange:a=>{N(a),y({environment:{defaultEditor:I,shellPreference:K,terminalPreference:a}})},children:[(0,b.jsx)(a3,{id:"terminal-preference","data-testid":"terminal-select",className:"w-55 cursor-pointer text-xs",children:(0,b.jsx)(a2,{})}),(0,b.jsx)(a6,{children:O.map(a=>(0,b.jsx)(a7,{value:a.id,children:a.name},a.id))})]})})]}),(0,b.jsx)(b1,{links:[{label:"Configuration guide",href:"https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md"}],children:"Your preferred editor opens files for review. The shell setting controls generated scripts. The terminal emulator is launched when opening shell sessions from the web UI."})]}),(0,b.jsxs)("div",{id:"section-workflow",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:j.GitBranch,title:"Workflow",description:"Automation behavior after implementation",testId:"workflow-settings-section",children:[(0,b.jsx)(b0,{children:"Approve"}),(0,b.jsx)(bZ,{label:"Auto-approve PRD",description:"Skip manual review of requirements",id:"allow-prd",testId:"switch-allow-prd",checked:T,onChange:a=>{U(a),y(aY({allowPrd:a}))}}),(0,b.jsx)(bZ,{label:"Auto-approve Plan",description:"Skip manual review of implementation plan",id:"allow-plan",testId:"switch-allow-plan",checked:V,onChange:a=>{W(a),y(aY({allowPlan:a}))}}),(0,b.jsx)(bZ,{label:"Auto-approve Merge",description:"Merge without manual review",id:"allow-merge",testId:"switch-allow-merge",checked:X,onChange:a=>{Y(a),y(aY({allowMerge:a}))}}),(0,b.jsx)(b0,{children:"Evidence"}),(0,b.jsx)(bZ,{label:"Collect evidence",description:"Capture screenshots and artifacts after implementation",id:"enable-evidence",testId:"switch-enable-evidence",checked:Z,onChange:a=>{$(a),a?y(aY({enableEvidence:a})):(aa(!1),y(aY({enableEvidence:a,commitEvidence:!1})))}}),(0,b.jsx)(bZ,{label:"Add evidence to PR",description:"Include evidence in the pull request body",id:"commit-evidence",testId:"switch-commit-evidence",checked:_,disabled:!Z||!P,onChange:a=>{aa(a),y(aY({commitEvidence:a}))}}),(0,b.jsx)(b0,{children:"Git"}),(0,b.jsx)(bZ,{label:"Push on complete",description:"Push to remote when implementation finishes",id:"push-on-complete",testId:"switch-push-on-complete",checked:R,onChange:a=>{S(a),y(aY({pushOnComplete:a}))}}),(0,b.jsx)(bZ,{label:"Open PR on complete",description:"Create a pull request when done",id:"open-pr",testId:"switch-open-pr",checked:P,onChange:a=>{Q(a),a?y(aY({openPr:a})):(aa(!1),y(aY({openPr:a,commitEvidence:!1})))}}),(0,b.jsx)(bZ,{label:"Watch CI after push",description:"Monitor CI and auto-fix failures. Disable to avoid rate limits.",id:"ci-watch-enabled",testId:"switch-ci-watch-enabled",checked:ab,onChange:a=>{ac(a),y(aY({ciWatchEnabled:a}))}})]}),(0,b.jsx)(b1,{links:[{label:"Approval gates",href:"https://github.com/shep-ai/cli/blob/main/specs/016-hitl-approval-gates/spec.yaml"},{label:"Push & PR flags",href:"https://github.com/shep-ai/cli/blob/main/specs/037-feature-pr-push-flags/spec.yaml"}],children:"Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation."})]}),(0,b.jsxs)("div",{id:"section-ci",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:k,title:"Continuous Integration",description:"Limits and timeouts for CI monitoring",testId:"ci-settings-section",children:[(0,b.jsx)(bY,{label:"Max fix attempts",description:"Agent retries on failing CI",htmlFor:"ci-max-fix",children:(0,b.jsx)(b_,{id:"ci-max-fix",testId:"ci-max-fix-input",placeholder:"3",value:ad,onChange:ae,onBlur:()=>{ad!==aL&&y(aY({ciMaxFix:ad}))},min:1,max:10})}),(0,b.jsx)(bY,{label:"Watch timeout",description:"Max wait for CI completion",htmlFor:"ci-timeout",children:(0,b.jsx)(b_,{id:"ci-timeout",testId:"ci-timeout-input",placeholder:"300",value:af,onChange:ag,onBlur:()=>{af!==aM&&y(aY({ciTimeout:af}))},min:30,step:30,suffix:"sec"})}),(0,b.jsx)(bY,{label:"Max log size",description:"Truncate CI logs beyond this limit",htmlFor:"ci-log-max",children:(0,b.jsx)(b_,{id:"ci-log-max",testId:"ci-log-max-input",placeholder:"50000",value:ah,onChange:ai,onBlur:()=>{ah!==aN&&y(aY({ciLogMax:ah}))},min:1e3,step:5e3,suffix:"chars"})}),(0,b.jsx)(bY,{label:"Poll interval",description:"How often to check GitHub for CI status updates",htmlFor:"ci-poll-interval",children:(0,b.jsx)(b_,{id:"ci-poll-interval",testId:"ci-poll-interval-input",placeholder:"30",value:aj,onChange:ak,onBlur:()=>{aj!==aO&&y(aY({ciPollInterval:aj}))},min:5,step:5,suffix:"sec"})})]}),(0,b.jsx)(b1,{links:[{label:"CI/CD pipeline",href:"https://github.com/shep-ai/cli/blob/main/docs/development/cicd.md"},{label:"CI security gates",href:"https://github.com/shep-ai/cli/blob/main/specs/003-cicd-security-gates/spec.md"}],children:"When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis."})]}),(0,b.jsxs)("div",{id:"section-stage-timeouts",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:s,title:"Stage Timeouts",description:"Maximum execution time per agent stage",testId:"stage-timeouts-settings-section",children:[(0,b.jsx)(b0,{children:"Feature Agent"}),(0,b.jsx)(bY,{label:"Analyze",description:"Repository analysis timeout",htmlFor:"timeout-analyze",children:(0,b.jsx)(bT,{id:"timeout-analyze",testId:"timeout-analyze-input",value:am,onChange:an,onBlur:()=>{am!==aP&&y(aY({analyzeTimeout:am}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Requirements",description:"Requirements gathering timeout",htmlFor:"timeout-requirements",children:(0,b.jsx)(bT,{id:"timeout-requirements",testId:"timeout-requirements-input",value:ao,onChange:ap,onBlur:()=>{ao!==aQ&&y(aY({requirementsTimeout:ao}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Research",description:"Technical research timeout",htmlFor:"timeout-research",children:(0,b.jsx)(bT,{id:"timeout-research",testId:"timeout-research-input",value:aq,onChange:ar,onBlur:()=>{aq!==aR&&y(aY({researchTimeout:aq}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Plan",description:"Implementation planning timeout",htmlFor:"timeout-plan",children:(0,b.jsx)(bT,{id:"timeout-plan",testId:"timeout-plan-input",value:as,onChange:at,onBlur:()=>{as!==aS&&y(aY({planTimeout:as}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Implement",description:"Code implementation timeout",htmlFor:"timeout-implement",children:(0,b.jsx)(bT,{id:"timeout-implement",testId:"timeout-implement-input",value:au,onChange:av,onBlur:()=>{au!==aT&&y(aY({implementTimeout:au}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Merge",description:"PR creation and merge timeout",htmlFor:"timeout-merge",children:(0,b.jsx)(bT,{id:"timeout-merge",testId:"timeout-merge-input",value:aw,onChange:ax,onBlur:()=>{aw!==aU&&y(aY({mergeTimeout:aw}))},defaultSeconds:1800})}),(0,b.jsx)(b0,{children:"Analyze Repository Agent"}),(0,b.jsx)(bY,{label:"Analyze",description:"Repository analysis timeout",htmlFor:"timeout-analyze-repo",children:(0,b.jsx)(bT,{id:"timeout-analyze-repo",testId:"timeout-analyze-repo-input",value:az,onChange:aA,onBlur:()=>{az!==aV&&y(aY({analyzeRepoTimeout:az}))},defaultSeconds:600})})]}),(0,b.jsx)(b1,{children:"Each agent has independently configurable stage timeouts. When a stage exceeds its timeout, the agent is terminated. Longer timeouts are useful for complex implementations. Feature agent defaults to 30 minutes per stage. Analyze repository agent defaults to 10 minutes."})]}),(0,b.jsxs)("div",{id:"section-notifications",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:l,title:"Notifications",description:"How and when you get notified",testId:"notification-settings-section",children:[(0,b.jsx)(b0,{children:"Channels"}),(0,b.jsx)(bZ,{label:"In-app",description:"Notifications inside the Shep UI",id:"notif-in-app",testId:"switch-in-app",checked:aB,onChange:a=>{aC(a),y(aZ({inApp:a}))}}),(0,b.jsx)(bZ,{label:"Browser",description:"Push notifications via the browser",id:"notif-browser",testId:"switch-browser",checked:aD,onChange:a=>{aE(a),y(aZ({browser:a}))}}),(0,b.jsx)(bZ,{label:"Desktop",description:"Native OS notifications",id:"notif-desktop",testId:"switch-desktop",checked:aF,onChange:a=>{aG(a),y(aZ({desktop:a}))}}),(0,b.jsx)(b0,{children:"Agent Events"}),(0,b.jsx)(bZ,{label:"Agent started",id:"notif-event-agentStarted",testId:"switch-event-agentStarted",checked:aH.agentStarted,onChange:a=>{let b={...aH,agentStarted:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"Phase completed",id:"notif-event-phaseCompleted",testId:"switch-event-phaseCompleted",checked:aH.phaseCompleted,onChange:a=>{let b={...aH,phaseCompleted:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"Waiting approval",id:"notif-event-waitingApproval",testId:"switch-event-waitingApproval",checked:aH.waitingApproval,onChange:a=>{let b={...aH,waitingApproval:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"Agent completed",id:"notif-event-agentCompleted",testId:"switch-event-agentCompleted",checked:aH.agentCompleted,onChange:a=>{let b={...aH,agentCompleted:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"Agent failed",id:"notif-event-agentFailed",testId:"switch-event-agentFailed",checked:aH.agentFailed,onChange:a=>{let b={...aH,agentFailed:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(b0,{children:"Pull Request Events"}),(0,b.jsx)(bZ,{label:"PR merged",id:"notif-event-prMerged",testId:"switch-event-prMerged",checked:aH.prMerged,onChange:a=>{let b={...aH,prMerged:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"PR closed",id:"notif-event-prClosed",testId:"switch-event-prClosed",checked:aH.prClosed,onChange:a=>{let b={...aH,prClosed:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"PR checks passed",id:"notif-event-prChecksPassed",testId:"switch-event-prChecksPassed",checked:aH.prChecksPassed,onChange:a=>{let b={...aH,prChecksPassed:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"PR checks failed",id:"notif-event-prChecksFailed",testId:"switch-event-prChecksFailed",checked:aH.prChecksFailed,onChange:a=>{let b={...aH,prChecksFailed:a};aI(b),y(aZ({events:b}))}})]}),(0,b.jsx)(b1,{links:[{label:"Notification system",href:"https://github.com/shep-ai/cli/blob/main/specs/021-agent-notifications/spec.yaml"}],children:"Three notification channels keep you in the loop: in-app toasts, browser push notifications, and native desktop alerts. Fine-tune which agent lifecycle events trigger a notification."})]}),(0,b.jsxs)("div",{id:"section-feature-flags",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:m,title:"Feature Flags",description:"Enable or disable experimental features",badge:"Experimental",testId:"feature-flags-settings-section",children:[(0,b.jsx)(bZ,{label:"Skills",description:"Enable the skills system for agent capabilities",id:"flag-skills",testId:"switch-flag-skills",checked:aJ.skills,onChange:a=>{let b={...aJ,skills:a};aK(b),y({featureFlags:b})}}),(0,b.jsx)(bZ,{label:"Deployments",description:"Enable environment deployment workflows",id:"flag-envDeploy",testId:"switch-flag-envDeploy",checked:aJ.envDeploy,onChange:a=>{let b={...aJ,envDeploy:a};aK(b),y({featureFlags:b})}}),(0,b.jsx)(bZ,{label:"Debug",description:"Show debug panels and verbose logging",id:"flag-debug",testId:"switch-flag-debug",checked:aJ.debug,onChange:a=>{let b={...aJ,debug:a};aK(b),y({featureFlags:b})}})]}),(0,b.jsx)(b1,{children:"Experimental features that are still under development. Enable at your own risk — they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting."})]}),(0,b.jsxs)("div",{id:"section-database",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:n,title:"Database",description:"Local storage information",testId:"database-settings-section",children:[(0,b.jsx)(bY,{label:"Location",description:"Path to the local SQLite database",children:(0,b.jsx)("span",{className:"text-muted-foreground max-w-50 truncate font-mono text-xs","data-testid":"shep-home-path",children:e})}),(0,b.jsx)(bY,{label:"Size",children:(0,b.jsx)("span",{className:"text-muted-foreground text-xs","data-testid":"db-file-size",children:o})})]}),(0,b.jsx)(b1,{links:[{label:"Settings service",href:"https://github.com/shep-ai/cli/blob/main/docs/architecture/settings-service.md"},{label:"Settings spec",href:"https://github.com/shep-ai/cli/blob/main/specs/005-global-settings-service/spec.md"}],children:"All settings are stored in a local SQLite database at ~/.shep/data. The database uses a singleton record pattern with automatic migrations on startup."})]})]})]})}a.s(["SettingsPageClient",()=>b2],79020)}];
1
+ module.exports=[79020,a=>{"use strict";var b=a.i(10973),c=a.i(96960),d=a.i(83886),e=a.i(25700);let f=(0,e.default)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);var g=a.i(72016),h=a.i(34644),i=a.i(63698),j=a.i(53170);let k=(0,e.default)("activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]),l=(0,e.default)("bell",[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]]),m=(0,e.default)("flag",[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]]);var n=a.i(40423),o=a.i(96853),o=o,p=a.i(67837),q=a.i(71238);let r=(0,e.default)("settings-2",[["path",{d:"M14 17H5",key:"gfn3mx"}],["path",{d:"M19 7h-9",key:"6i9tg"}],["circle",{cx:"17",cy:"17",r:"3",key:"18b49y"}],["circle",{cx:"7",cy:"7",r:"3",key:"dfmy0x"}]]),s=(0,e.default)("timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);var t=a.i(52313),u=a.i(85536),v=a.i(584),w=a.i(90920),x=a.i(18948),y=a.i(96867),z=a.i(82934),A=a.i(55690),B=a.i(48972),C=a.i(59653),D=a.i(63496),E=a.i(6175),F=a.i(7420),G=a.i(48939),H=a.i(58761),I=a.i(51473),J=a.i(59675),K=a.i(5472),L=a.i(75988),M=a.i(80930),N=a.i(66873),O=a.i(90986),P=a.i(79406),Q=a.i(17329),R=a.i(61476),S=a.i(64005),T=a.i(50049),U=a.i(16164),V=a.i(45291),W=[" ","Enter","ArrowUp","ArrowDown"],X=[" ","Enter"],Y="Select",[Z,$,_]=(0,D.createCollection)(Y),[aa,ab]=(0,F.createContextScope)(Y,[_,L.createPopperScope]),ac=(0,L.createPopperScope)(),[ad,ae]=aa(Y),[af,ag]=aa(Y),ah=a=>{let{__scopeSelect:d,children:e,open:f,defaultOpen:g,onOpenChange:h,value:i,defaultValue:j,onValueChange:k,dir:l,name:m,autoComplete:n,disabled:o,required:p,form:q}=a,r=ac(d),[s,t]=c.useState(null),[u,v]=c.useState(null),[w,x]=c.useState(!1),y=(0,G.useDirection)(l),[z,A]=(0,Q.useControllableState)({prop:f,defaultProp:g??!1,onChange:h,caller:Y}),[B,C]=(0,Q.useControllableState)({prop:i,defaultProp:j,onChange:k,caller:Y}),D=c.useRef(null),E=!s||q||!!s.closest("form"),[F,H]=c.useState(new Set),I=Array.from(F).map(a=>a.props.value).join(";");return(0,b.jsx)(L.Root,{...r,children:(0,b.jsxs)(ad,{required:p,scope:d,trigger:s,onTriggerChange:t,valueNode:u,onValueNodeChange:v,valueNodeHasChildren:w,onValueNodeHasChildrenChange:x,contentId:(0,K.useId)(),value:B,onValueChange:C,open:z,onOpenChange:A,dir:y,triggerPointerDownPosRef:D,disabled:o,children:[(0,b.jsx)(Z.Provider,{scope:d,children:(0,b.jsx)(af,{scope:a.__scopeSelect,onNativeOptionAdd:c.useCallback(a=>{H(b=>new Set(b).add(a))},[]),onNativeOptionRemove:c.useCallback(a=>{H(b=>{let c=new Set(b);return c.delete(a),c})},[]),children:e})}),E?(0,b.jsxs)(aW,{"aria-hidden":!0,required:p,tabIndex:-1,name:m,autoComplete:n,value:B,onChange:a=>C(a.target.value),disabled:o,form:q,children:[void 0===B?(0,b.jsx)("option",{value:""}):null,Array.from(F)]},I):null]})})};ah.displayName=Y;var ai="SelectTrigger",aj=c.forwardRef((a,d)=>{let{__scopeSelect:e,disabled:f=!1,...g}=a,h=ac(e),i=ae(ai,e),j=i.disabled||f,k=(0,E.useComposedRefs)(d,i.onTriggerChange),l=$(e),m=c.useRef("touch"),[n,o,p]=aY(a=>{let b=l().filter(a=>!a.disabled),c=b.find(a=>a.value===i.value),d=aZ(b,a,c);void 0!==d&&i.onValueChange(d.value)}),q=a=>{j||(i.onOpenChange(!0),p()),a&&(i.triggerPointerDownPosRef.current={x:Math.round(a.pageX),y:Math.round(a.pageY)})};return(0,b.jsx)(L.Anchor,{asChild:!0,...h,children:(0,b.jsx)(N.Primitive.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:j,"data-disabled":j?"":void 0,"data-placeholder":aX(i.value)?"":void 0,...g,ref:k,onClick:(0,C.composeEventHandlers)(g.onClick,a=>{a.currentTarget.focus(),"mouse"!==m.current&&q(a)}),onPointerDown:(0,C.composeEventHandlers)(g.onPointerDown,a=>{m.current=a.pointerType;let b=a.target;b.hasPointerCapture(a.pointerId)&&b.releasePointerCapture(a.pointerId),0===a.button&&!1===a.ctrlKey&&"mouse"===a.pointerType&&(q(a),a.preventDefault())}),onKeyDown:(0,C.composeEventHandlers)(g.onKeyDown,a=>{let b=""!==n.current;a.ctrlKey||a.altKey||a.metaKey||1!==a.key.length||o(a.key),(!b||" "!==a.key)&&W.includes(a.key)&&(q(),a.preventDefault())})})})});aj.displayName=ai;var ak="SelectValue",al=c.forwardRef((a,c)=>{let{__scopeSelect:d,className:e,style:f,children:g,placeholder:h="",...i}=a,j=ae(ak,d),{onValueNodeHasChildrenChange:k}=j,l=void 0!==g,m=(0,E.useComposedRefs)(c,j.onValueNodeChange);return(0,R.useLayoutEffect)(()=>{k(l)},[k,l]),(0,b.jsx)(N.Primitive.span,{...i,ref:m,style:{pointerEvents:"none"},children:aX(j.value)?(0,b.jsx)(b.Fragment,{children:h}):g})});al.displayName=ak;var am=c.forwardRef((a,c)=>{let{__scopeSelect:d,children:e,...f}=a;return(0,b.jsx)(N.Primitive.span,{"aria-hidden":!0,...f,ref:c,children:e||"▼"})});am.displayName="SelectIcon";var an=a=>(0,b.jsx)(M.Portal,{asChild:!0,...a});an.displayName="SelectPortal";var ao="SelectContent",ap=c.forwardRef((a,d)=>{let e=ae(ao,a.__scopeSelect),[f,g]=c.useState();return((0,R.useLayoutEffect)(()=>{g(new DocumentFragment)},[]),e.open)?(0,b.jsx)(at,{...a,ref:d}):f?A.createPortal((0,b.jsx)(aq,{scope:a.__scopeSelect,children:(0,b.jsx)(Z.Slot,{scope:a.__scopeSelect,children:(0,b.jsx)("div",{children:a.children})})}),f):null});ap.displayName=ao;var[aq,ar]=aa(ao),as=(0,O.createSlot)("SelectContent.RemoveScroll"),at=c.forwardRef((a,d)=>{let{__scopeSelect:e,position:f="item-aligned",onCloseAutoFocus:g,onEscapeKeyDown:h,onPointerDownOutside:i,side:j,sideOffset:k,align:l,alignOffset:m,arrowPadding:n,collisionBoundary:o,collisionPadding:p,sticky:q,hideWhenDetached:r,avoidCollisions:s,...t}=a,u=ae(ao,e),[v,w]=c.useState(null),[x,y]=c.useState(null),z=(0,E.useComposedRefs)(d,a=>w(a)),[A,B]=c.useState(null),[D,F]=c.useState(null),G=$(e),[K,L]=c.useState(!1),M=c.useRef(!1);c.useEffect(()=>{if(v)return(0,U.hideOthers)(v)},[v]),(0,I.useFocusGuards)();let N=c.useCallback(a=>{let[b,...c]=G().map(a=>a.ref.current),[d]=c.slice(-1),e=document.activeElement;for(let c of a)if(c===e||(c?.scrollIntoView({block:"nearest"}),c===b&&x&&(x.scrollTop=0),c===d&&x&&(x.scrollTop=x.scrollHeight),c?.focus(),document.activeElement!==e))return},[G,x]),O=c.useCallback(()=>N([A,v]),[N,A,v]);c.useEffect(()=>{K&&O()},[K,O]);let{onOpenChange:P,triggerPointerDownPosRef:Q}=u;c.useEffect(()=>{if(v){let a={x:0,y:0},b=b=>{a={x:Math.abs(Math.round(b.pageX)-(Q.current?.x??0)),y:Math.abs(Math.round(b.pageY)-(Q.current?.y??0))}},c=c=>{a.x<=10&&a.y<=10?c.preventDefault():v.contains(c.target)||P(!1),document.removeEventListener("pointermove",b),Q.current=null};return null!==Q.current&&(document.addEventListener("pointermove",b),document.addEventListener("pointerup",c,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",b),document.removeEventListener("pointerup",c,{capture:!0})}}},[v,P,Q]),c.useEffect(()=>{let a=()=>P(!1);return window.addEventListener("blur",a),window.addEventListener("resize",a),()=>{window.removeEventListener("blur",a),window.removeEventListener("resize",a)}},[P]);let[R,S]=aY(a=>{let b=G().filter(a=>!a.disabled),c=b.find(a=>a.ref.current===document.activeElement),d=aZ(b,a,c);d&&setTimeout(()=>d.ref.current.focus())}),T=c.useCallback((a,b,c)=>{let d=!M.current&&!c;(void 0!==u.value&&u.value===b||d)&&(B(a),d&&(M.current=!0))},[u.value]),W=c.useCallback(()=>v?.focus(),[v]),X=c.useCallback((a,b,c)=>{let d=!M.current&&!c;(void 0!==u.value&&u.value===b||d)&&F(a)},[u.value]),Y="popper"===f?av:au,Z=Y===av?{side:j,sideOffset:k,align:l,alignOffset:m,arrowPadding:n,collisionBoundary:o,collisionPadding:p,sticky:q,hideWhenDetached:r,avoidCollisions:s}:{};return(0,b.jsx)(aq,{scope:e,content:v,viewport:x,onViewportChange:y,itemRefCallback:T,selectedItem:A,onItemLeave:W,itemTextRefCallback:X,focusSelectedItem:O,selectedItemText:D,position:f,isPositioned:K,searchRef:R,children:(0,b.jsx)(V.RemoveScroll,{as:as,allowPinchZoom:!0,children:(0,b.jsx)(J.FocusScope,{asChild:!0,trapped:u.open,onMountAutoFocus:a=>{a.preventDefault()},onUnmountAutoFocus:(0,C.composeEventHandlers)(g,a=>{u.trigger?.focus({preventScroll:!0}),a.preventDefault()}),children:(0,b.jsx)(H.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:h,onPointerDownOutside:i,onFocusOutside:a=>a.preventDefault(),onDismiss:()=>u.onOpenChange(!1),children:(0,b.jsx)(Y,{role:"listbox",id:u.contentId,"data-state":u.open?"open":"closed",dir:u.dir,onContextMenu:a=>a.preventDefault(),...t,...Z,onPlaced:()=>L(!0),ref:z,style:{display:"flex",flexDirection:"column",outline:"none",...t.style},onKeyDown:(0,C.composeEventHandlers)(t.onKeyDown,a=>{let b=a.ctrlKey||a.altKey||a.metaKey;if("Tab"===a.key&&a.preventDefault(),b||1!==a.key.length||S(a.key),["ArrowUp","ArrowDown","Home","End"].includes(a.key)){let b=G().filter(a=>!a.disabled).map(a=>a.ref.current);if(["ArrowUp","End"].includes(a.key)&&(b=b.slice().reverse()),["ArrowUp","ArrowDown"].includes(a.key)){let c=a.target,d=b.indexOf(c);b=b.slice(d+1)}setTimeout(()=>N(b)),a.preventDefault()}})})})})})})});at.displayName="SelectContentImpl";var au=c.forwardRef((a,d)=>{let{__scopeSelect:e,onPlaced:f,...g}=a,h=ae(ao,e),i=ar(ao,e),[j,k]=c.useState(null),[l,m]=c.useState(null),n=(0,E.useComposedRefs)(d,a=>m(a)),o=$(e),p=c.useRef(!1),q=c.useRef(!0),{viewport:r,selectedItem:s,selectedItemText:t,focusSelectedItem:u}=i,v=c.useCallback(()=>{if(h.trigger&&h.valueNode&&j&&l&&r&&s&&t){let a=h.trigger.getBoundingClientRect(),b=l.getBoundingClientRect(),c=h.valueNode.getBoundingClientRect(),d=t.getBoundingClientRect();if("rtl"!==h.dir){let e=d.left-b.left,f=c.left-e,g=a.left-f,h=a.width+g,i=Math.max(h,b.width),k=window.innerWidth-10,l=(0,B.clamp)(f,[10,Math.max(10,k-i)]);j.style.minWidth=h+"px",j.style.left=l+"px"}else{let e=b.right-d.right,f=window.innerWidth-c.right-e,g=window.innerWidth-a.right-f,h=a.width+g,i=Math.max(h,b.width),k=window.innerWidth-10,l=(0,B.clamp)(f,[10,Math.max(10,k-i)]);j.style.minWidth=h+"px",j.style.right=l+"px"}let e=o(),g=window.innerHeight-20,i=r.scrollHeight,k=window.getComputedStyle(l),m=parseInt(k.borderTopWidth,10),n=parseInt(k.paddingTop,10),q=parseInt(k.borderBottomWidth,10),u=m+n+i+parseInt(k.paddingBottom,10)+q,v=Math.min(5*s.offsetHeight,u),w=window.getComputedStyle(r),x=parseInt(w.paddingTop,10),y=parseInt(w.paddingBottom,10),z=a.top+a.height/2-10,A=s.offsetHeight/2,C=m+n+(s.offsetTop+A);if(C<=z){let a=e.length>0&&s===e[e.length-1].ref.current;j.style.bottom="0px";let b=Math.max(g-z,A+(a?y:0)+(l.clientHeight-r.offsetTop-r.offsetHeight)+q);j.style.height=C+b+"px"}else{let a=e.length>0&&s===e[0].ref.current;j.style.top="0px";let b=Math.max(z,m+r.offsetTop+(a?x:0)+A);j.style.height=b+(u-C)+"px",r.scrollTop=C-z+r.offsetTop}j.style.margin="10px 0",j.style.minHeight=v+"px",j.style.maxHeight=g+"px",f?.(),requestAnimationFrame(()=>p.current=!0)}},[o,h.trigger,h.valueNode,j,l,r,s,t,h.dir,f]);(0,R.useLayoutEffect)(()=>v(),[v]);let[w,x]=c.useState();(0,R.useLayoutEffect)(()=>{l&&x(window.getComputedStyle(l).zIndex)},[l]);let y=c.useCallback(a=>{a&&!0===q.current&&(v(),u?.(),q.current=!1)},[v,u]);return(0,b.jsx)(aw,{scope:e,contentWrapper:j,shouldExpandOnScrollRef:p,onScrollButtonChange:y,children:(0,b.jsx)("div",{ref:k,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:w},children:(0,b.jsx)(N.Primitive.div,{...g,ref:n,style:{boxSizing:"border-box",maxHeight:"100%",...g.style}})})})});au.displayName="SelectItemAlignedPosition";var av=c.forwardRef((a,c)=>{let{__scopeSelect:d,align:e="start",collisionPadding:f=10,...g}=a,h=ac(d);return(0,b.jsx)(L.Content,{...h,...g,ref:c,align:e,collisionPadding:f,style:{boxSizing:"border-box",...g.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});av.displayName="SelectPopperPosition";var[aw,ax]=aa(ao,{}),ay="SelectViewport",az=c.forwardRef((a,d)=>{let{__scopeSelect:e,nonce:f,...g}=a,h=ar(ay,e),i=ax(ay,e),j=(0,E.useComposedRefs)(d,h.onViewportChange),k=c.useRef(0);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:f}),(0,b.jsx)(Z.Slot,{scope:e,children:(0,b.jsx)(N.Primitive.div,{"data-radix-select-viewport":"",role:"presentation",...g,ref:j,style:{position:"relative",flex:1,overflow:"hidden auto",...g.style},onScroll:(0,C.composeEventHandlers)(g.onScroll,a=>{let b=a.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:d}=i;if(d?.current&&c){let a=Math.abs(k.current-b.scrollTop);if(a>0){let d=window.innerHeight-20,e=Math.max(parseFloat(c.style.minHeight),parseFloat(c.style.height));if(e<d){let f=e+a,g=Math.min(d,f),h=f-g;c.style.height=g+"px","0px"===c.style.bottom&&(b.scrollTop=h>0?h:0,c.style.justifyContent="flex-end")}}}k.current=b.scrollTop})})})]})});az.displayName=ay;var aA="SelectGroup",[aB,aC]=aa(aA),aD=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=(0,K.useId)();return(0,b.jsx)(aB,{scope:d,id:f,children:(0,b.jsx)(N.Primitive.div,{role:"group","aria-labelledby":f,...e,ref:c})})});aD.displayName=aA;var aE="SelectLabel",aF=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=aC(aE,d);return(0,b.jsx)(N.Primitive.div,{id:f.id,...e,ref:c})});aF.displayName=aE;var aG="SelectItem",[aH,aI]=aa(aG),aJ=c.forwardRef((a,d)=>{let{__scopeSelect:e,value:f,disabled:g=!1,textValue:h,...i}=a,j=ae(aG,e),k=ar(aG,e),l=j.value===f,[m,n]=c.useState(h??""),[o,p]=c.useState(!1),q=(0,E.useComposedRefs)(d,a=>k.itemRefCallback?.(a,f,g)),r=(0,K.useId)(),s=c.useRef("touch"),t=()=>{g||(j.onValueChange(f),j.onOpenChange(!1))};if(""===f)throw Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return(0,b.jsx)(aH,{scope:e,value:f,disabled:g,textId:r,isSelected:l,onItemTextChange:c.useCallback(a=>{n(b=>b||(a?.textContent??"").trim())},[]),children:(0,b.jsx)(Z.ItemSlot,{scope:e,value:f,disabled:g,textValue:m,children:(0,b.jsx)(N.Primitive.div,{role:"option","aria-labelledby":r,"data-highlighted":o?"":void 0,"aria-selected":l&&o,"data-state":l?"checked":"unchecked","aria-disabled":g||void 0,"data-disabled":g?"":void 0,tabIndex:g?void 0:-1,...i,ref:q,onFocus:(0,C.composeEventHandlers)(i.onFocus,()=>p(!0)),onBlur:(0,C.composeEventHandlers)(i.onBlur,()=>p(!1)),onClick:(0,C.composeEventHandlers)(i.onClick,()=>{"mouse"!==s.current&&t()}),onPointerUp:(0,C.composeEventHandlers)(i.onPointerUp,()=>{"mouse"===s.current&&t()}),onPointerDown:(0,C.composeEventHandlers)(i.onPointerDown,a=>{s.current=a.pointerType}),onPointerMove:(0,C.composeEventHandlers)(i.onPointerMove,a=>{s.current=a.pointerType,g?k.onItemLeave?.():"mouse"===s.current&&a.currentTarget.focus({preventScroll:!0})}),onPointerLeave:(0,C.composeEventHandlers)(i.onPointerLeave,a=>{a.currentTarget===document.activeElement&&k.onItemLeave?.()}),onKeyDown:(0,C.composeEventHandlers)(i.onKeyDown,a=>{(k.searchRef?.current===""||" "!==a.key)&&(X.includes(a.key)&&t()," "===a.key&&a.preventDefault())})})})})});aJ.displayName=aG;var aK="SelectItemText",aL=c.forwardRef((a,d)=>{let{__scopeSelect:e,className:f,style:g,...h}=a,i=ae(aK,e),j=ar(aK,e),k=aI(aK,e),l=ag(aK,e),[m,n]=c.useState(null),o=(0,E.useComposedRefs)(d,a=>n(a),k.onItemTextChange,a=>j.itemTextRefCallback?.(a,k.value,k.disabled)),p=m?.textContent,q=c.useMemo(()=>(0,b.jsx)("option",{value:k.value,disabled:k.disabled,children:p},k.value),[k.disabled,k.value,p]),{onNativeOptionAdd:r,onNativeOptionRemove:s}=l;return(0,R.useLayoutEffect)(()=>(r(q),()=>s(q)),[r,s,q]),(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(N.Primitive.span,{id:k.textId,...h,ref:o}),k.isSelected&&i.valueNode&&!i.valueNodeHasChildren?A.createPortal(h.children,i.valueNode):null]})});aL.displayName=aK;var aM="SelectItemIndicator",aN=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return aI(aM,d).isSelected?(0,b.jsx)(N.Primitive.span,{"aria-hidden":!0,...e,ref:c}):null});aN.displayName=aM;var aO="SelectScrollUpButton",aP=c.forwardRef((a,d)=>{let e=ar(aO,a.__scopeSelect),f=ax(aO,a.__scopeSelect),[g,h]=c.useState(!1),i=(0,E.useComposedRefs)(d,f.onScrollButtonChange);return(0,R.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){h(b.scrollTop>0)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(aS,{...a,ref:i,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop-b.offsetHeight)}}):null});aP.displayName=aO;var aQ="SelectScrollDownButton",aR=c.forwardRef((a,d)=>{let e=ar(aQ,a.__scopeSelect),f=ax(aQ,a.__scopeSelect),[g,h]=c.useState(!1),i=(0,E.useComposedRefs)(d,f.onScrollButtonChange);return(0,R.useLayoutEffect)(()=>{if(e.viewport&&e.isPositioned){let a=function(){let a=b.scrollHeight-b.clientHeight;h(Math.ceil(b.scrollTop)<a)},b=e.viewport;return a(),b.addEventListener("scroll",a),()=>b.removeEventListener("scroll",a)}},[e.viewport,e.isPositioned]),g?(0,b.jsx)(aS,{...a,ref:i,onAutoScroll:()=>{let{viewport:a,selectedItem:b}=e;a&&b&&(a.scrollTop=a.scrollTop+b.offsetHeight)}}):null});aR.displayName=aQ;var aS=c.forwardRef((a,d)=>{let{__scopeSelect:e,onAutoScroll:f,...g}=a,h=ar("SelectScrollButton",e),i=c.useRef(null),j=$(e),k=c.useCallback(()=>{null!==i.current&&(window.clearInterval(i.current),i.current=null)},[]);return c.useEffect(()=>()=>k(),[k]),(0,R.useLayoutEffect)(()=>{let a=j().find(a=>a.ref.current===document.activeElement);a?.ref.current?.scrollIntoView({block:"nearest"})},[j]),(0,b.jsx)(N.Primitive.div,{"aria-hidden":!0,...g,ref:d,style:{flexShrink:0,...g.style},onPointerDown:(0,C.composeEventHandlers)(g.onPointerDown,()=>{null===i.current&&(i.current=window.setInterval(f,50))}),onPointerMove:(0,C.composeEventHandlers)(g.onPointerMove,()=>{h.onItemLeave?.(),null===i.current&&(i.current=window.setInterval(f,50))}),onPointerLeave:(0,C.composeEventHandlers)(g.onPointerLeave,()=>{k()})})}),aT=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a;return(0,b.jsx)(N.Primitive.div,{"aria-hidden":!0,...e,ref:c})});aT.displayName="SelectSeparator";var aU="SelectArrow",aV=c.forwardRef((a,c)=>{let{__scopeSelect:d,...e}=a,f=ac(d),g=ae(aU,d),h=ar(aU,d);return g.open&&"popper"===h.position?(0,b.jsx)(L.Arrow,{...f,...e,ref:c}):null});aV.displayName=aU;var aW=c.forwardRef(({__scopeSelect:a,value:d,...e},f)=>{let g=c.useRef(null),h=(0,E.useComposedRefs)(f,g),i=(0,S.usePrevious)(d);return c.useEffect(()=>{let a=g.current;if(!a)return;let b=Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype,"value").set;if(i!==d&&b){let c=new Event("change",{bubbles:!0});b.call(a,d),a.dispatchEvent(c)}},[i,d]),(0,b.jsx)(N.Primitive.select,{...e,style:{...T.VISUALLY_HIDDEN_STYLES,...e.style},ref:h,defaultValue:d})});function aX(a){return""===a||void 0===a}function aY(a){let b=(0,P.useCallbackRef)(a),d=c.useRef(""),e=c.useRef(0),f=c.useCallback(a=>{let c=d.current+a;b(c),function a(b){d.current=b,window.clearTimeout(e.current),""!==b&&(e.current=window.setTimeout(()=>a(""),1e3))}(c)},[b]),g=c.useCallback(()=>{d.current="",window.clearTimeout(e.current)},[]);return c.useEffect(()=>()=>window.clearTimeout(e.current),[]),[d,f,g]}function aZ(a,b,c){var d,e;let f=b.length>1&&Array.from(b).every(a=>a===b[0])?b[0]:b,g=c?a.indexOf(c):-1,h=(d=a,e=Math.max(g,0),d.map((a,b)=>d[(e+b)%d.length]));1===f.length&&(h=h.filter(a=>a!==c));let i=h.find(a=>a.textValue.toLowerCase().startsWith(f.toLowerCase()));return i!==c?i:void 0}aW.displayName="SelectBubbleInput",a.s(["Arrow",()=>aV,"Content",()=>ap,"Group",()=>aD,"Icon",()=>am,"Item",()=>aJ,"ItemIndicator",()=>aN,"ItemText",()=>aL,"Label",()=>aF,"Portal",()=>an,"Root",()=>ah,"ScrollDownButton",()=>aR,"ScrollUpButton",()=>aP,"Select",()=>ah,"SelectArrow",()=>aV,"SelectContent",()=>ap,"SelectGroup",()=>aD,"SelectIcon",()=>am,"SelectItem",()=>aJ,"SelectItemIndicator",()=>aN,"SelectItemText",()=>aL,"SelectLabel",()=>aF,"SelectPortal",()=>an,"SelectScrollDownButton",()=>aR,"SelectScrollUpButton",()=>aP,"SelectSeparator",()=>aT,"SelectTrigger",()=>aj,"SelectValue",()=>al,"SelectViewport",()=>az,"Separator",()=>aT,"Trigger",()=>aj,"Value",()=>al,"Viewport",()=>az,"createSelectScope",()=>ab],16252);var a$=a.i(16252),a$=a$,a_=a.i(71716);let a0=(0,e.default)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),a1=a$.Root;a$.Group;let a2=a$.Value,a3=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(a$.Trigger,{ref:e,className:(0,u.cn)("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-sm focus:ring-1 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",a),...d,children:[c,(0,b.jsx)(a$.Icon,{asChild:!0,children:(0,b.jsx)(a_.ChevronDown,{className:"h-4 w-4 opacity-50"})})]}));a3.displayName=a$.Trigger.displayName;let a4=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(a$.ScrollUpButton,{ref:d,className:(0,u.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(a0,{className:"h-4 w-4"})}));a4.displayName=a$.ScrollUpButton.displayName;let a5=c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(a$.ScrollDownButton,{ref:d,className:(0,u.cn)("flex cursor-default items-center justify-center py-1",a),...c,children:(0,b.jsx)(a_.ChevronDown,{className:"h-4 w-4"})}));a5.displayName=a$.ScrollDownButton.displayName;let a6=c.forwardRef(({className:a,children:c,position:d="popper",...e},f)=>(0,b.jsx)(a$.Portal,{children:(0,b.jsxs)(a$.Content,{ref:f,className:(0,u.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md","popper"===d&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",a),position:d,...e,children:[(0,b.jsx)(a4,{}),(0,b.jsx)(a$.Viewport,{className:(0,u.cn)("p-1","popper"===d&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:c}),(0,b.jsx)(a5,{})]})}));a6.displayName=a$.Content.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(a$.Label,{ref:d,className:(0,u.cn)("px-2 py-1.5 text-sm font-semibold",a),...c})).displayName=a$.Label.displayName;let a7=c.forwardRef(({className:a,children:c,...d},e)=>(0,b.jsxs)(a$.Item,{ref:e,className:(0,u.cn)("focus:bg-accent focus:text-accent-foreground relative flex w-full cursor-default items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",a),...d,children:[(0,b.jsx)("span",{className:"absolute right-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,b.jsx)(a$.ItemIndicator,{children:(0,b.jsx)(g.Check,{className:"h-4 w-4"})})}),(0,b.jsx)(a$.ItemText,{children:c})]}));a7.displayName=a$.Item.displayName,c.forwardRef(({className:a,...c},d)=>(0,b.jsx)(a$.Separator,{ref:d,className:(0,u.cn)("bg-muted -mx-1 my-1 h-px",a),...c})).displayName=a$.Separator.displayName;var a8=a.i(25674);let a9=(0,a8.createServerReference)("409286dacae73a2708fb9d653fe7bbbe7c63a46ae3",a8.callServer,void 0,a8.findSourceMapURL,"updateSettingsAction");var ba=a.i(46847),bb=a.i(61640),bc=a.i(44447),bd=a.i(87926);function be(a){return(0,b.jsx)(bc.Code,{className:(0,u.cn)("h-4 w-4",a.className),...a})}function bf({className:a}){return(0,b.jsx)(bb.default,{src:"/icons/editors/vscode.svg",alt:"VS Code",width:24,height:24,className:(0,u.cn)("rounded-sm object-contain",a)})}function bg({className:a}){return(0,b.jsx)(bb.default,{src:"/icons/agents/cursor.jpeg",alt:"Cursor",width:24,height:24,className:(0,u.cn)("rounded-sm object-contain",a)})}function bh({className:a}){return(0,b.jsx)(bb.default,{src:"/icons/editors/windsurf.svg",alt:"Windsurf",width:24,height:24,className:(0,u.cn)("rounded-sm object-contain",a)})}function bi({className:a}){return(0,b.jsx)(bb.default,{src:"/icons/editors/zed.svg",alt:"Zed",width:24,height:24,className:(0,u.cn)("rounded-sm object-contain",a)})}function bj({className:a,...c}){return(0,b.jsx)(bd.Rocket,{className:(0,u.cn)("h-4 w-4",a),...c})}bf.displayName="VsCodeIcon",bg.displayName="CursorEditorIcon",bh.displayName="WindsurfIcon",bi.displayName="ZedIcon",bj.displayName="AntigravityIcon";let bk={vscode:bf,cursor:bg,windsurf:bh,zed:bi,antigravity:bj};var bl=a.i(61781),bm=a.i(74432),bn=["PageUp","PageDown"],bo=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],bp={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},bq="Slider",[br,bs,bt]=(0,D.createCollection)(bq),[bu,bv]=(0,F.createContextScope)(bq,[bt]),[bw,bx]=bu(bq),by=c.forwardRef((a,d)=>{let{name:e,min:f=0,max:g=100,step:h=1,orientation:i="horizontal",disabled:j=!1,minStepsBetweenThumbs:k=0,defaultValue:l=[f],value:m,onValueChange:n=()=>{},onValueCommit:o=()=>{},inverted:p=!1,form:q,...r}=a,s=c.useRef(new Set),t=c.useRef(0),u="horizontal"===i,[v=[],w]=(0,Q.useControllableState)({prop:m,defaultProp:l,onChange:a=>{let b=[...s.current];b[t.current]?.focus(),n(a)}}),x=c.useRef(v);function y(a,b,{commit:c}={commit:!1}){let d,e=(String(h).split(".")[1]||"").length,i=Math.round((Math.round((a-f)/h)*h+f)*(d=Math.pow(10,e)))/d,j=(0,B.clamp)(i,[f,g]);w((a=[])=>{let d=function(a=[],b,c){let d=[...a];return d[c]=b,d.sort((a,b)=>a-b)}(a,j,b);if(!function(a,b){if(b>0)return Math.min(...a.slice(0,-1).map((b,c)=>a[c+1]-b))>=b;return!0}(d,k*h))return a;{t.current=d.indexOf(j);let b=String(d)!==String(a);return b&&c&&o(d),b?d:a}})}return(0,b.jsx)(bw,{scope:a.__scopeSlider,name:e,disabled:j,min:f,max:g,valueIndexToChangeRef:t,thumbs:s.current,values:v,orientation:i,form:q,children:(0,b.jsx)(br.Provider,{scope:a.__scopeSlider,children:(0,b.jsx)(br.Slot,{scope:a.__scopeSlider,children:(0,b.jsx)(u?bB:bC,{"aria-disabled":j,"data-disabled":j?"":void 0,...r,ref:d,onPointerDown:(0,C.composeEventHandlers)(r.onPointerDown,()=>{j||(x.current=v)}),min:f,max:g,inverted:p,onSlideStart:j?void 0:function(a){let b=function(a,b){if(1===a.length)return 0;let c=a.map(a=>Math.abs(a-b)),d=Math.min(...c);return c.indexOf(d)}(v,a);y(a,b)},onSlideMove:j?void 0:function(a){y(a,t.current)},onSlideEnd:j?void 0:function(){let a=x.current[t.current];v[t.current]!==a&&o(v)},onHomeKeyDown:()=>!j&&y(f,0,{commit:!0}),onEndKeyDown:()=>!j&&y(g,v.length-1,{commit:!0}),onStepKeyDown:({event:a,direction:b})=>{if(!j){let c=bn.includes(a.key)||a.shiftKey&&bo.includes(a.key),d=t.current;y(v[d]+h*(c?10:1)*b,d,{commit:!0})}}})})})})});by.displayName=bq;var[bz,bA]=bu(bq,{startEdge:"left",endEdge:"right",size:"width",direction:1}),bB=c.forwardRef((a,d)=>{let{min:e,max:f,dir:g,inverted:h,onSlideStart:i,onSlideMove:j,onSlideEnd:k,onStepKeyDown:l,...m}=a,[n,o]=c.useState(null),p=(0,E.useComposedRefs)(d,a=>o(a)),q=c.useRef(void 0),r=(0,G.useDirection)(g),s="ltr"===r,t=s&&!h||!s&&h;function u(a){let b=q.current||n.getBoundingClientRect(),c=bN([0,b.width],t?[e,f]:[f,e]);return q.current=b,c(a-b.left)}return(0,b.jsx)(bz,{scope:a.__scopeSlider,startEdge:t?"left":"right",endEdge:t?"right":"left",direction:t?1:-1,size:"width",children:(0,b.jsx)(bD,{dir:r,"data-orientation":"horizontal",...m,ref:p,style:{...m.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:a=>{let b=u(a.clientX);i?.(b)},onSlideMove:a=>{let b=u(a.clientX);j?.(b)},onSlideEnd:()=>{q.current=void 0,k?.()},onStepKeyDown:a=>{let b=bp[t?"from-left":"from-right"].includes(a.key);l?.({event:a,direction:b?-1:1})}})})}),bC=c.forwardRef((a,d)=>{let{min:e,max:f,inverted:g,onSlideStart:h,onSlideMove:i,onSlideEnd:j,onStepKeyDown:k,...l}=a,m=c.useRef(null),n=(0,E.useComposedRefs)(d,m),o=c.useRef(void 0),p=!g;function q(a){let b=o.current||m.current.getBoundingClientRect(),c=bN([0,b.height],p?[f,e]:[e,f]);return o.current=b,c(a-b.top)}return(0,b.jsx)(bz,{scope:a.__scopeSlider,startEdge:p?"bottom":"top",endEdge:p?"top":"bottom",size:"height",direction:p?1:-1,children:(0,b.jsx)(bD,{"data-orientation":"vertical",...l,ref:n,style:{...l.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:a=>{let b=q(a.clientY);h?.(b)},onSlideMove:a=>{let b=q(a.clientY);i?.(b)},onSlideEnd:()=>{o.current=void 0,j?.()},onStepKeyDown:a=>{let b=bp[p?"from-bottom":"from-top"].includes(a.key);k?.({event:a,direction:b?-1:1})}})})}),bD=c.forwardRef((a,c)=>{let{__scopeSlider:d,onSlideStart:e,onSlideMove:f,onSlideEnd:g,onHomeKeyDown:h,onEndKeyDown:i,onStepKeyDown:j,...k}=a,l=bx(bq,d);return(0,b.jsx)(N.Primitive.span,{...k,ref:c,onKeyDown:(0,C.composeEventHandlers)(a.onKeyDown,a=>{"Home"===a.key?(h(a),a.preventDefault()):"End"===a.key?(i(a),a.preventDefault()):bn.concat(bo).includes(a.key)&&(j(a),a.preventDefault())}),onPointerDown:(0,C.composeEventHandlers)(a.onPointerDown,a=>{let b=a.target;b.setPointerCapture(a.pointerId),a.preventDefault(),l.thumbs.has(b)?b.focus():e(a)}),onPointerMove:(0,C.composeEventHandlers)(a.onPointerMove,a=>{a.target.hasPointerCapture(a.pointerId)&&f(a)}),onPointerUp:(0,C.composeEventHandlers)(a.onPointerUp,a=>{let b=a.target;b.hasPointerCapture(a.pointerId)&&(b.releasePointerCapture(a.pointerId),g(a))})})}),bE="SliderTrack",bF=c.forwardRef((a,c)=>{let{__scopeSlider:d,...e}=a,f=bx(bE,d);return(0,b.jsx)(N.Primitive.span,{"data-disabled":f.disabled?"":void 0,"data-orientation":f.orientation,...e,ref:c})});bF.displayName=bE;var bG="SliderRange",bH=c.forwardRef((a,d)=>{let{__scopeSlider:e,...f}=a,g=bx(bG,e),h=bA(bG,e),i=c.useRef(null),j=(0,E.useComposedRefs)(d,i),k=g.values.length,l=g.values.map(a=>bM(a,g.min,g.max)),m=k>1?Math.min(...l):0,n=100-Math.max(...l);return(0,b.jsx)(N.Primitive.span,{"data-orientation":g.orientation,"data-disabled":g.disabled?"":void 0,...f,ref:j,style:{...a.style,[h.startEdge]:m+"%",[h.endEdge]:n+"%"}})});bH.displayName=bG;var bI="SliderThumb",bJ=c.forwardRef((a,d)=>{let e=bs(a.__scopeSlider),[f,g]=c.useState(null),h=(0,E.useComposedRefs)(d,a=>g(a)),i=c.useMemo(()=>f?e().findIndex(a=>a.ref.current===f):-1,[e,f]);return(0,b.jsx)(bK,{...a,ref:h,index:i})}),bK=c.forwardRef((a,d)=>{var e,f,g,h,i;let j,k,{__scopeSlider:l,index:m,name:n,...o}=a,p=bx(bI,l),q=bA(bI,l),[r,s]=c.useState(null),t=(0,E.useComposedRefs)(d,a=>s(a)),u=!r||p.form||!!r.closest("form"),v=(0,bm.useSize)(r),w=p.values[m],x=void 0===w?0:bM(w,p.min,p.max),y=(e=m,(f=p.values.length)>2?`Value ${e+1} of ${f}`:2===f?["Minimum","Maximum"][e]:void 0),z=v?.[q.size],A=z?(g=z,h=x,i=q.direction,k=bN([0,50],[0,j=g/2]),(j-k(h)*i)*i):0;return c.useEffect(()=>{if(r)return p.thumbs.add(r),()=>{p.thumbs.delete(r)}},[r,p.thumbs]),(0,b.jsxs)("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[q.startEdge]:`calc(${x}% + ${A}px)`},children:[(0,b.jsx)(br.ItemSlot,{scope:a.__scopeSlider,children:(0,b.jsx)(N.Primitive.span,{role:"slider","aria-label":a["aria-label"]||y,"aria-valuemin":p.min,"aria-valuenow":w,"aria-valuemax":p.max,"aria-orientation":p.orientation,"data-orientation":p.orientation,"data-disabled":p.disabled?"":void 0,tabIndex:p.disabled?void 0:0,...o,ref:t,style:void 0===w?{display:"none"}:a.style,onFocus:(0,C.composeEventHandlers)(a.onFocus,()=>{p.valueIndexToChangeRef.current=m})})}),u&&(0,b.jsx)(bL,{name:n??(p.name?p.name+(p.values.length>1?"[]":""):void 0),form:p.form,value:w},m)]})});bJ.displayName=bI;var bL=c.forwardRef(({__scopeSlider:a,value:d,...e},f)=>{let g=c.useRef(null),h=(0,E.useComposedRefs)(g,f),i=(0,S.usePrevious)(d);return c.useEffect(()=>{let a=g.current;if(!a)return;let b=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value").set;if(i!==d&&b){let c=new Event("input",{bubbles:!0});b.call(a,d),a.dispatchEvent(c)}},[i,d]),(0,b.jsx)(N.Primitive.input,{style:{display:"none"},...e,ref:h,defaultValue:d})});function bM(a,b,c){return(0,B.clamp)(100/(c-b)*(a-b),[0,100])}function bN(a,b){return c=>{if(a[0]===a[1]||b[0]===b[1])return b[0];let d=(b[1]-b[0])/(a[1]-a[0]);return b[0]+d*(c-a[0])}}bL.displayName="RadioBubbleInput",a.s(["Range",()=>bH,"Root",()=>by,"Slider",()=>by,"SliderRange",()=>bH,"SliderThumb",()=>bJ,"SliderTrack",()=>bF,"Thumb",()=>bJ,"Track",()=>bF,"createSliderScope",()=>bv],61569);var bO=a.i(61569),bO=bO;function bP({className:a,defaultValue:d,value:e,min:f=0,max:g=100,...h}){let i=c.useMemo(()=>Array.isArray(e)?e:Array.isArray(d)?d:[f,g],[e,d,f,g]);return(0,b.jsxs)(bO.Root,{"data-slot":"slider",defaultValue:d,value:e,min:f,max:g,className:(0,u.cn)("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",a),...h,children:[(0,b.jsx)(bO.Track,{"data-slot":"slider-track",className:(0,u.cn)("bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"),children:(0,b.jsx)(bO.Range,{"data-slot":"slider-range",className:(0,u.cn)("bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full")})}),Array.from({length:i.length},(a,c)=>(0,b.jsx)(bO.Thumb,{"data-slot":"slider-thumb",className:"border-primary ring-ring/50 block size-4 shrink-0 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"},c))]})}let bQ=[60,120,300,600,900,1800,2700,3600,7200,10800,14400,21600,28800,43200,86400],bR=bQ.length-1;function bS(a){let b=0,c=Math.abs(a-bQ[0]);for(let d=1;d<bQ.length;d++){let e=Math.abs(a-bQ[d]);e<c&&(c=e,b=d)}return b}function bT({id:a,testId:d,value:e,onChange:f,onBlur:g,defaultSeconds:h=1800}){var i;let j,k,l=(""===e?h:parseInt(e,10))||h,[m,n]=(0,c.useState)(()=>bS(l)),o=bS(l);o!==m&&bQ[m]!==l&&n(o);let p=(0,c.useCallback)(([a])=>{n(a),f(String(bQ[a]))},[f]);return(0,b.jsxs)("div",{className:"flex w-55 items-center gap-2",children:[(0,b.jsx)(bP,{id:a,"data-testid":d,min:0,max:bR,step:1,value:[m],onValueChange:p,onValueCommit:()=>g(),className:"min-w-0 flex-1"}),(0,b.jsx)("span",{className:"text-muted-foreground shrink-0 text-right text-xs tabular-nums",children:(j=Math.floor((i=bQ[m])/3600),k=Math.round(i%3600/60),0===j?`${k}m`:0===k?`${j}h`:`${j}h ${k}m`)})]})}let bU=[{value:ba.AgentAuthMethod.Session,label:"Session"},{value:ba.AgentAuthMethod.Token,label:"Token"}],bV=[{value:ba.EditorType.VsCode,label:"VS Code"},{value:ba.EditorType.Cursor,label:"Cursor"},{value:ba.EditorType.Windsurf,label:"Windsurf"},{value:ba.EditorType.Zed,label:"Zed"},{value:ba.EditorType.Antigravity,label:"Antigravity"}],bW=[{value:"bash",label:"Bash"},{value:"zsh",label:"Zsh"},{value:"fish",label:"Fish"}],bX=[{id:"agent",label:"Agent",icon:h.Bot},{id:"environment",label:"Environment",icon:i.Terminal},{id:"workflow",label:"Workflow",icon:j.GitBranch},{id:"ci",label:"CI",icon:k},{id:"stage-timeouts",label:"Timeouts",icon:s},{id:"notifications",label:"Notifications",icon:l},{id:"feature-flags",label:"Flags",icon:m},{id:"database",label:"Database",icon:n.Database}];function bY({label:a,description:c,htmlFor:d,children:e}){return(0,b.jsxs)("div",{className:"flex items-center justify-between gap-4 border-b py-2.5 last:border-b-0",children:[(0,b.jsxs)("div",{className:"min-w-0",children:[(0,b.jsx)(v.Label,{htmlFor:d,className:"cursor-pointer text-sm font-normal whitespace-nowrap",children:a}),c?(0,b.jsx)("p",{className:"text-muted-foreground text-[11px] leading-tight",children:c}):null]}),(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:e})]})}function bZ({label:a,description:c,id:d,testId:e,checked:f,onChange:g,disabled:h}){return(0,b.jsx)(bY,{label:a,description:c,htmlFor:d,children:(0,b.jsx)(y.Switch,{id:d,"data-testid":e,checked:f,onCheckedChange:g,disabled:h,className:(0,u.cn)("cursor-pointer",h&&"cursor-not-allowed opacity-50")})})}function b$({icon:a,title:c,description:d,badge:e,testId:f,children:g}){return(0,b.jsxs)("div",{className:"bg-background rounded-lg border","data-testid":f,children:[(0,b.jsxs)("div",{className:"bg-muted/30 border-b px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(a,{className:"text-muted-foreground h-3.5 w-3.5"}),(0,b.jsx)("h2",{className:"text-sm font-semibold",children:c}),e?(0,b.jsx)("span",{className:"bg-muted text-muted-foreground rounded px-1.5 py-0.5 text-[9px] font-medium tracking-wider uppercase",children:e}):null]}),(0,b.jsx)("p",{className:"text-muted-foreground mt-0.5 text-[11px]",children:d})]}),(0,b.jsx)("div",{className:"px-4",children:g})]})}function b_({id:a,testId:c,value:d,onChange:e,onBlur:f,placeholder:g,min:h=1,max:i,step:j=1,suffix:k}){let l=""===d?void 0:parseInt(d,10);return(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)("div",{className:"flex items-center overflow-hidden rounded-md border",children:[(0,b.jsx)("button",{type:"button",onClick:()=>{e(String(Math.max(h,(l??parseInt(g,10))-j)))},onMouseUp:f,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-r transition-colors","aria-label":"Decrease",children:(0,b.jsx)(o.default,{className:"h-3 w-3"})}),(0,b.jsx)("input",{id:a,"data-testid":c,type:"text",inputMode:"numeric",pattern:"[0-9]*",value:d,placeholder:g,onChange:a=>{e(a.target.value.replace(/[^0-9]/g,""))},onBlur:f,className:"h-8 w-14 bg-transparent text-center text-xs outline-none"}),(0,b.jsx)("button",{type:"button",onClick:()=>{let a;a=l??parseInt(g,10),e(String(null!=i?Math.min(i,a+j):a+j))},onMouseUp:f,className:"text-muted-foreground hover:bg-muted hover:text-foreground flex h-8 w-7 cursor-pointer items-center justify-center border-l transition-colors","aria-label":"Increase",children:(0,b.jsx)(p.Plus,{className:"h-3 w-3"})})]}),k?(0,b.jsx)("span",{className:"text-muted-foreground text-[11px]",children:k}):null]})}function b0({children:a}){return(0,b.jsx)("div",{className:"border-b pt-3 pb-1",children:(0,b.jsx)("span",{className:"text-muted-foreground text-[10px] font-semibold tracking-wider uppercase",children:a})})}function b1({children:a,links:c}){return(0,b.jsxs)("div",{className:"hidden pt-2 lg:block",children:[(0,b.jsx)("p",{className:"text-muted-foreground/70 text-[11px] leading-relaxed",children:a}),null!=c&&c.length>0?(0,b.jsx)("div",{className:"mt-2 flex flex-col gap-1",children:c.map(a=>(0,b.jsxs)("a",{href:a.href,target:"_blank",rel:"noopener noreferrer",className:"text-muted-foreground hover:text-foreground inline-flex items-center gap-1 text-[10px] transition-colors",children:[(0,b.jsx)(q.ExternalLink,{className:"h-2.5 w-2.5"}),a.label]},a.href))}):null]})}function b2({settings:a,shepHome:e,dbFileSize:o,availableTerminals:p}){let{showSaving:q,showSaved:v,save:y}=function(){let[a,b]=(0,c.useTransition)(),[d,e]=(0,c.useState)(!1),[f,g]=(0,c.useState)(!1),h=(0,c.useRef)(null),i=(0,c.useRef)(!1);return(0,c.useEffect)(()=>{a&&!d&&(e(!0),i.current=!1,h.current=setTimeout(()=>{h.current=null,i.current&&(e(!1),g(!0),setTimeout(()=>g(!1),2e3))},350)),!a&&d&&(i.current=!0,h.current||(e(!1),g(!0),setTimeout(()=>g(!1),2e3)))},[a,d]),{showSaving:d,showSaved:f,save:(0,c.useCallback)(a=>{b(async()=>{let b=await a9(a);b.success||t.toast.error(b.error??"Failed to save settings")})},[b])}}(),A=a.featureFlags??{skills:!1,envDeploy:!1,debug:!1},[B,C]=(0,c.useState)(a.agent.type),D=a.agent.authMethod,[E,F]=(0,c.useState)(a.agent.token??""),[G,H]=(0,c.useState)(!1),[I,J]=(0,c.useState)(a.environment.defaultEditor),[K,L]=(0,c.useState)(a.environment.shellPreference),[M,N]=(0,c.useState)(a.environment.terminalPreference??ba.TerminalType.System),O=p?p.filter(a=>a.available):[{id:ba.TerminalType.System,name:"System Terminal",available:!0}],[P,Q]=(0,c.useState)(a.workflow.openPrOnImplementationComplete),[R,S]=(0,c.useState)(a.workflow.approvalGateDefaults.pushOnImplementationComplete),[T,U]=(0,c.useState)(a.workflow.approvalGateDefaults.allowPrd),[V,W]=(0,c.useState)(a.workflow.approvalGateDefaults.allowPlan),[X,Y]=(0,c.useState)(a.workflow.approvalGateDefaults.allowMerge),[Z,$]=(0,c.useState)(a.workflow.enableEvidence),[_,aa]=(0,c.useState)(a.workflow.commitEvidence),[ab,ac]=(0,c.useState)(!1!==a.workflow.ciWatchEnabled),[ad,ae]=(0,c.useState)(null!=a.workflow.ciMaxFixAttempts?String(a.workflow.ciMaxFixAttempts):""),[af,ag]=(0,c.useState)(null!=a.workflow.ciWatchTimeoutMs?String(Math.round(a.workflow.ciWatchTimeoutMs/1e3)):""),[ah,ai]=(0,c.useState)(null!=a.workflow.ciLogMaxChars?String(a.workflow.ciLogMaxChars):""),[aj,ak]=(0,c.useState)(null!=a.workflow.ciWatchPollIntervalSeconds?String(a.workflow.ciWatchPollIntervalSeconds):""),al=a.workflow.stageTimeouts,[am,an]=(0,c.useState)(String(Math.round((al?.analyzeMs??18e5)/1e3))),[ao,ap]=(0,c.useState)(String(Math.round((al?.requirementsMs??18e5)/1e3))),[aq,ar]=(0,c.useState)(String(Math.round((al?.researchMs??18e5)/1e3))),[as,at]=(0,c.useState)(String(Math.round((al?.planMs??18e5)/1e3))),[au,av]=(0,c.useState)(String(Math.round((al?.implementMs??18e5)/1e3))),[aw,ax]=(0,c.useState)(String(Math.round((al?.mergeMs??18e5)/1e3))),ay=a.workflow.analyzeRepoTimeouts,[az,aA]=(0,c.useState)(String(Math.round((ay?.analyzeMs??6e5)/1e3))),[aB,aC]=(0,c.useState)(a.notifications.inApp.enabled),[aD,aE]=(0,c.useState)(a.notifications.browser.enabled),[aF,aG]=(0,c.useState)(a.notifications.desktop.enabled),[aH,aI]=(0,c.useState)({...a.notifications.events}),[aJ,aK]=(0,c.useState)({...A}),aL=null!=a.workflow.ciMaxFixAttempts?String(a.workflow.ciMaxFixAttempts):"",aM=null!=a.workflow.ciWatchTimeoutMs?String(Math.round(a.workflow.ciWatchTimeoutMs/1e3)):"",aN=null!=a.workflow.ciLogMaxChars?String(a.workflow.ciLogMaxChars):"",aO=null!=a.workflow.ciWatchPollIntervalSeconds?String(a.workflow.ciWatchPollIntervalSeconds):"",aP=al?.analyzeMs!=null?String(Math.round(al.analyzeMs/1e3)):"",aQ=al?.requirementsMs!=null?String(Math.round(al.requirementsMs/1e3)):"",aR=al?.researchMs!=null?String(Math.round(al.researchMs/1e3)):"",aS=al?.planMs!=null?String(Math.round(al.planMs/1e3)):"",aT=al?.implementMs!=null?String(Math.round(al.implementMs/1e3)):"",aU=al?.mergeMs!=null?String(Math.round(al.mergeMs/1e3)):"",aV=ay?.analyzeMs!=null?String(Math.round(ay.analyzeMs/1e3)):"";function aW(a){if(""===a)return;let b=parseInt(a,10);return Number.isNaN(b)||b<=0?void 0:b}function aX(a){if(void 0===a)return;let b=aW(a);return null!=b?1e3*b:void 0}function aY(a={}){let b=aW(a.ciTimeout??af);return{workflow:{openPrOnImplementationComplete:a.openPr??P,approvalGateDefaults:{pushOnImplementationComplete:a.pushOnComplete??R,allowPrd:a.allowPrd??T,allowPlan:a.allowPlan??V,allowMerge:a.allowMerge??X},enableEvidence:a.enableEvidence??Z,commitEvidence:a.commitEvidence??_,ciWatchEnabled:a.ciWatchEnabled??ab,ciMaxFixAttempts:aW(a.ciMaxFix??ad),ciWatchTimeoutMs:null!=b?1e3*b:void 0,ciLogMaxChars:aW(a.ciLogMax??ah),ciWatchPollIntervalSeconds:aW(a.ciPollInterval??aj),stageTimeouts:{analyzeMs:aX(a.analyzeTimeout??am),requirementsMs:aX(a.requirementsTimeout??ao),researchMs:aX(a.researchTimeout??aq),planMs:aX(a.planTimeout??as),implementMs:aX(a.implementTimeout??au),mergeMs:aX(a.mergeTimeout??aw)},analyzeRepoTimeouts:{analyzeMs:aX(a.analyzeRepoTimeout??az)}}}}function aZ(a={}){return{notifications:{inApp:{enabled:a.inApp??aB},browser:{enabled:a.browser??aD},desktop:{enabled:a.desktop??aF},events:a.events??aH}}}let[a$,a_]=(0,c.useState)("agent");(0,c.useEffect)(()=>{let a=bX.map(a=>document.getElementById(`section-${a.id}`)).filter(Boolean);if(0===a.length)return;let b=new IntersectionObserver(a=>{for(let b of a)b.isIntersecting&&a_(b.target.id.replace("section-",""))},{rootMargin:"-65px 0px -60% 0px",threshold:0});for(let c of a)b.observe(c);return()=>b.disconnect()},[]);let a0=(0,c.useCallback)(a=>{let b=document.getElementById(`section-${a}`);b&&(b.scrollIntoView({behavior:"smooth",block:"start"}),b.style.animation="none",b.offsetHeight,b.style.animation="section-flash 1s ease-out")},[]);return(0,b.jsxs)("div",{"data-testid":"settings-page-client",className:"max-w-5xl",children:[(0,b.jsx)("div",{className:"bg-background/95 supports-backdrop-filter:bg-background/80 sticky top-0 z-10 grid grid-cols-1 gap-x-5 pt-6 pb-4 backdrop-blur lg:grid-cols-[1fr_280px]",children:(0,b.jsxs)("div",{className:"flex items-center gap-2",children:[(0,b.jsx)(r,{className:"text-muted-foreground h-4 w-4"}),(0,b.jsx)("h1",{className:"text-sm font-bold tracking-tight",children:"Settings"}),(0,b.jsxs)("span",{className:"relative h-4 w-16",children:[(0,b.jsx)("span",{className:(0,u.cn)("text-muted-foreground absolute inset-0 flex items-center text-xs transition-opacity duration-300",q?"opacity-100":"opacity-0"),children:"Saving..."}),(0,b.jsxs)("span",{className:(0,u.cn)("absolute inset-0 flex items-center gap-1 text-xs text-green-600 transition-opacity duration-300",v&&!q?"opacity-100":"opacity-0"),children:[(0,b.jsx)(g.Check,{className:"h-3 w-3"}),"Saved"]})]}),(0,b.jsx)("nav",{className:"ml-auto flex items-center gap-0.5",children:bX.map(a=>{let c=a.icon,d=a$===a.id;return(0,b.jsxs)("button",{type:"button",onClick:()=>a0(a.id),className:(0,u.cn)("flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-all",d?"bg-accent text-foreground font-medium":"text-muted-foreground/60 hover:text-foreground hover:bg-accent/50"),children:[(0,b.jsx)(c,{className:"h-3 w-3"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:a.label})]},a.id)})})]})}),(0,b.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,b.jsxs)("div",{id:"section-agent",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:h.Bot,title:"Agent",description:"AI coding agent and authentication",testId:"agent-settings-section",children:[(0,b.jsx)(bY,{label:"Agent & Model",description:"Provider and model for all operations",htmlFor:"agent-model-picker",children:(0,b.jsx)(bl.AgentModelPicker,{initialAgentType:B,initialModel:a.models.default,mode:"settings",onAgentModelChange:a=>C(a),className:"w-55"})}),(0,b.jsx)(bY,{label:"Authentication",description:"How the agent authenticates",htmlFor:"auth-method",children:(0,b.jsx)(z.TooltipProvider,{children:(0,b.jsxs)(z.Tooltip,{children:[(0,b.jsx)(z.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("div",{children:(0,b.jsxs)(a1,{value:D,disabled:!0,children:[(0,b.jsx)(a3,{id:"auth-method","data-testid":"auth-method-select",className:"w-55 cursor-not-allowed text-xs opacity-60",children:(0,b.jsx)(a2,{})}),(0,b.jsx)(a6,{children:bU.map(a=>(0,b.jsx)(a7,{value:a.value,children:a.label},a.value))})]})})}),(0,b.jsx)(z.TooltipContent,{children:"Coming soon"})]})})}),D===ba.AgentAuthMethod.Token&&(0,b.jsx)(bY,{label:"API Token",htmlFor:"agent-token",children:(0,b.jsxs)("div",{className:"relative w-45",children:[(0,b.jsx)(w.Input,{id:"agent-token","data-testid":"agent-token-input",type:G?"text":"password",value:E,onChange:a=>F(a.target.value),onBlur:()=>{E!==(a.agent.token??"")&&y(function(a={}){let b={type:B,authMethod:D,...a},c={type:b.type,authMethod:b.authMethod};return b.authMethod===ba.AgentAuthMethod.Token&&(c.token=a.token??E),{agent:c}}({token:E}))},placeholder:"Enter token",className:"pr-8"}),(0,b.jsx)(x.Button,{type:"button",variant:"ghost",size:"sm",className:"absolute top-0 right-0 h-full px-2 hover:bg-transparent",onClick:()=>H(!G),"data-testid":"toggle-token-visibility","aria-label":G?"Hide token":"Show token",children:G?(0,b.jsx)(f,{className:"h-3 w-3"}):(0,b.jsx)(d.Eye,{className:"h-3 w-3"})})]})})]}),(0,b.jsx)(b1,{links:[{label:"Agent system",href:"https://github.com/shep-ai/cli/blob/main/docs/architecture/agent-system.md"},{label:"Adding agents",href:"https://github.com/shep-ai/cli/blob/main/docs/development/adding-agents.md"},{label:"Configuration guide",href:"https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md"}],children:"Choose which AI coding agent powers your features. Each agent supports different models and capabilities. Authentication is resolved automatically via your active session."})]}),(0,b.jsxs)("div",{id:"section-environment",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:i.Terminal,title:"Environment",description:"Editor, shell, and terminal preferences",testId:"environment-settings-section",children:[(0,b.jsx)(bY,{label:"Default Editor",description:"Editor launched for file operations",htmlFor:"default-editor",children:(0,b.jsxs)(a1,{value:I,onValueChange:a=>{J(a),y({environment:{defaultEditor:a,shellPreference:K,terminalPreference:M}})},children:[(0,b.jsx)(a3,{id:"default-editor","data-testid":"editor-select",className:"w-55 cursor-pointer text-xs",children:(0,b.jsx)(a2,{})}),(0,b.jsx)(a6,{children:bV.map(a=>{var c;let d=(c=a.value)&&c in bk?bk[c]:be;return(0,b.jsx)(a7,{value:a.value,children:(0,b.jsxs)("span",{className:"flex items-center gap-2 text-xs",children:[(0,b.jsx)(d,{className:"h-4 w-4 shrink-0"}),a.label]})},a.value)})})]})}),(0,b.jsx)(bY,{label:"Shell",description:"Default shell for generated scripts",htmlFor:"shell-preference",children:(0,b.jsxs)(a1,{value:K,onValueChange:a=>{L(a),y({environment:{defaultEditor:I,shellPreference:a,terminalPreference:M}})},children:[(0,b.jsx)(a3,{id:"shell-preference","data-testid":"shell-select",className:"w-55 cursor-pointer text-xs",children:(0,b.jsx)(a2,{})}),(0,b.jsx)(a6,{children:bW.map(a=>(0,b.jsx)(a7,{value:a.value,children:a.label},a.value))})]})}),(0,b.jsx)(bY,{label:"Terminal",description:"Terminal emulator for shell sessions",htmlFor:"terminal-preference",children:(0,b.jsxs)(a1,{value:M,onValueChange:a=>{N(a),y({environment:{defaultEditor:I,shellPreference:K,terminalPreference:a}})},children:[(0,b.jsx)(a3,{id:"terminal-preference","data-testid":"terminal-select",className:"w-55 cursor-pointer text-xs",children:(0,b.jsx)(a2,{})}),(0,b.jsx)(a6,{children:O.map(a=>(0,b.jsx)(a7,{value:a.id,children:a.name},a.id))})]})})]}),(0,b.jsx)(b1,{links:[{label:"Configuration guide",href:"https://github.com/shep-ai/cli/blob/main/docs/guides/configuration.md"}],children:"Your preferred editor opens files for review. The shell setting controls generated scripts. The terminal emulator is launched when opening shell sessions from the web UI."})]}),(0,b.jsxs)("div",{id:"section-workflow",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:j.GitBranch,title:"Workflow",description:"Automation behavior after implementation",testId:"workflow-settings-section",children:[(0,b.jsx)(b0,{children:"Approve"}),(0,b.jsx)(bZ,{label:"Auto-approve PRD",description:"Skip manual review of requirements",id:"allow-prd",testId:"switch-allow-prd",checked:T,onChange:a=>{U(a),y(aY({allowPrd:a}))}}),(0,b.jsx)(bZ,{label:"Auto-approve Plan",description:"Skip manual review of implementation plan",id:"allow-plan",testId:"switch-allow-plan",checked:V,onChange:a=>{W(a),y(aY({allowPlan:a}))}}),(0,b.jsx)(bZ,{label:"Auto-approve Merge",description:"Merge without manual review",id:"allow-merge",testId:"switch-allow-merge",checked:X,onChange:a=>{Y(a),y(aY({allowMerge:a}))}}),(0,b.jsx)(b0,{children:"Evidence"}),(0,b.jsx)(bZ,{label:"Collect evidence",description:"Capture screenshots and artifacts after implementation",id:"enable-evidence",testId:"switch-enable-evidence",checked:Z,onChange:a=>{$(a),a?y(aY({enableEvidence:a})):(aa(!1),y(aY({enableEvidence:a,commitEvidence:!1})))}}),(0,b.jsx)(bZ,{label:"Add evidence to PR",description:"Include evidence in the pull request body",id:"commit-evidence",testId:"switch-commit-evidence",checked:_,disabled:!Z||!P,onChange:a=>{aa(a),y(aY({commitEvidence:a}))}}),(0,b.jsx)(b0,{children:"Git"}),(0,b.jsx)(bZ,{label:"Push on complete",description:"Push to remote when implementation finishes",id:"push-on-complete",testId:"switch-push-on-complete",checked:R,onChange:a=>{S(a),y(aY({pushOnComplete:a}))}}),(0,b.jsx)(bZ,{label:"Open PR on complete",description:"Create a pull request when done",id:"open-pr",testId:"switch-open-pr",checked:P,onChange:a=>{Q(a),a?y(aY({openPr:a})):(aa(!1),y(aY({openPr:a,commitEvidence:!1})))}}),(0,b.jsx)(bZ,{label:"Watch CI after push",description:"Monitor CI and auto-fix failures. Disable to avoid rate limits.",id:"ci-watch-enabled",testId:"switch-ci-watch-enabled",checked:ab,onChange:a=>{ac(a),y(aY({ciWatchEnabled:a}))}})]}),(0,b.jsx)(b1,{links:[{label:"Approval gates",href:"https://github.com/shep-ai/cli/blob/main/specs/016-hitl-approval-gates/spec.yaml"},{label:"Push & PR flags",href:"https://github.com/shep-ai/cli/blob/main/specs/037-feature-pr-push-flags/spec.yaml"}],children:"Control how autonomous each feature run is. Auto-approve skips the human review pause at each phase. Push and PR options control what happens after successful implementation."})]}),(0,b.jsxs)("div",{id:"section-ci",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:k,title:"Continuous Integration",description:"Limits and timeouts for CI monitoring",testId:"ci-settings-section",children:[(0,b.jsx)(bY,{label:"Max fix attempts",description:"Agent retries on failing CI",htmlFor:"ci-max-fix",children:(0,b.jsx)(b_,{id:"ci-max-fix",testId:"ci-max-fix-input",placeholder:"3",value:ad,onChange:ae,onBlur:()=>{ad!==aL&&y(aY({ciMaxFix:ad}))},min:1,max:10})}),(0,b.jsx)(bY,{label:"Watch timeout",description:"Max wait for CI completion",htmlFor:"ci-timeout",children:(0,b.jsx)(b_,{id:"ci-timeout",testId:"ci-timeout-input",placeholder:"300",value:af,onChange:ag,onBlur:()=>{af!==aM&&y(aY({ciTimeout:af}))},min:30,step:30,suffix:"sec"})}),(0,b.jsx)(bY,{label:"Max log size",description:"Truncate CI logs beyond this limit",htmlFor:"ci-log-max",children:(0,b.jsx)(b_,{id:"ci-log-max",testId:"ci-log-max-input",placeholder:"50000",value:ah,onChange:ai,onBlur:()=>{ah!==aN&&y(aY({ciLogMax:ah}))},min:1e3,step:5e3,suffix:"chars"})}),(0,b.jsx)(bY,{label:"Poll interval",description:"How often to check GitHub for CI status updates",htmlFor:"ci-poll-interval",children:(0,b.jsx)(b_,{id:"ci-poll-interval",testId:"ci-poll-interval-input",placeholder:"30",value:aj,onChange:ak,onBlur:()=>{aj!==aO&&y(aY({ciPollInterval:aj}))},min:5,step:5,suffix:"sec"})})]}),(0,b.jsx)(b1,{links:[{label:"CI/CD pipeline",href:"https://github.com/shep-ai/cli/blob/main/docs/development/cicd.md"},{label:"CI security gates",href:"https://github.com/shep-ai/cli/blob/main/specs/003-cicd-security-gates/spec.md"}],children:"When a feature completes, the agent can watch CI and auto-fix failures. These limits prevent runaway retries and control how much log output is sent to the agent for analysis."})]}),(0,b.jsxs)("div",{id:"section-stage-timeouts",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:s,title:"Stage Timeouts",description:"Maximum execution time per agent stage",testId:"stage-timeouts-settings-section",children:[(0,b.jsx)(b0,{children:"Feature Agent"}),(0,b.jsx)(bY,{label:"Analyze",description:"Repository analysis timeout",htmlFor:"timeout-analyze",children:(0,b.jsx)(bT,{id:"timeout-analyze",testId:"timeout-analyze-input",value:am,onChange:an,onBlur:()=>{am!==aP&&y(aY({analyzeTimeout:am}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Requirements",description:"Requirements gathering timeout",htmlFor:"timeout-requirements",children:(0,b.jsx)(bT,{id:"timeout-requirements",testId:"timeout-requirements-input",value:ao,onChange:ap,onBlur:()=>{ao!==aQ&&y(aY({requirementsTimeout:ao}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Research",description:"Technical research timeout",htmlFor:"timeout-research",children:(0,b.jsx)(bT,{id:"timeout-research",testId:"timeout-research-input",value:aq,onChange:ar,onBlur:()=>{aq!==aR&&y(aY({researchTimeout:aq}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Plan",description:"Implementation planning timeout",htmlFor:"timeout-plan",children:(0,b.jsx)(bT,{id:"timeout-plan",testId:"timeout-plan-input",value:as,onChange:at,onBlur:()=>{as!==aS&&y(aY({planTimeout:as}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Implement",description:"Code implementation timeout",htmlFor:"timeout-implement",children:(0,b.jsx)(bT,{id:"timeout-implement",testId:"timeout-implement-input",value:au,onChange:av,onBlur:()=>{au!==aT&&y(aY({implementTimeout:au}))},defaultSeconds:1800})}),(0,b.jsx)(bY,{label:"Merge",description:"PR creation and merge timeout",htmlFor:"timeout-merge",children:(0,b.jsx)(bT,{id:"timeout-merge",testId:"timeout-merge-input",value:aw,onChange:ax,onBlur:()=>{aw!==aU&&y(aY({mergeTimeout:aw}))},defaultSeconds:1800})}),(0,b.jsx)(b0,{children:"Analyze Repository Agent"}),(0,b.jsx)(bY,{label:"Analyze",description:"Repository analysis timeout",htmlFor:"timeout-analyze-repo",children:(0,b.jsx)(bT,{id:"timeout-analyze-repo",testId:"timeout-analyze-repo-input",value:az,onChange:aA,onBlur:()=>{az!==aV&&y(aY({analyzeRepoTimeout:az}))},defaultSeconds:600})})]}),(0,b.jsx)(b1,{children:"Each agent has independently configurable stage timeouts. When a stage exceeds its timeout, the agent is terminated. Longer timeouts are useful for complex implementations. Feature agent defaults to 30 minutes per stage. Analyze repository agent defaults to 10 minutes."})]}),(0,b.jsxs)("div",{id:"section-notifications",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:l,title:"Notifications",description:"How and when you get notified",testId:"notification-settings-section",children:[(0,b.jsx)(b0,{children:"Channels"}),(0,b.jsx)(bZ,{label:"In-app",description:"Notifications inside the Shep UI",id:"notif-in-app",testId:"switch-in-app",checked:aB,onChange:a=>{aC(a),y(aZ({inApp:a}))}}),(0,b.jsx)(bZ,{label:"Browser",description:"Push notifications via the browser",id:"notif-browser",testId:"switch-browser",checked:aD,onChange:a=>{aE(a),y(aZ({browser:a}))}}),(0,b.jsx)(bZ,{label:"Desktop",description:"Native OS notifications",id:"notif-desktop",testId:"switch-desktop",checked:aF,onChange:a=>{aG(a),y(aZ({desktop:a}))}}),(0,b.jsx)(b0,{children:"Agent Events"}),(0,b.jsx)(bZ,{label:"Agent started",id:"notif-event-agentStarted",testId:"switch-event-agentStarted",checked:aH.agentStarted,onChange:a=>{let b={...aH,agentStarted:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"Phase completed",id:"notif-event-phaseCompleted",testId:"switch-event-phaseCompleted",checked:aH.phaseCompleted,onChange:a=>{let b={...aH,phaseCompleted:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"Waiting approval",id:"notif-event-waitingApproval",testId:"switch-event-waitingApproval",checked:aH.waitingApproval,onChange:a=>{let b={...aH,waitingApproval:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"Agent completed",id:"notif-event-agentCompleted",testId:"switch-event-agentCompleted",checked:aH.agentCompleted,onChange:a=>{let b={...aH,agentCompleted:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"Agent failed",id:"notif-event-agentFailed",testId:"switch-event-agentFailed",checked:aH.agentFailed,onChange:a=>{let b={...aH,agentFailed:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(b0,{children:"Pull Request Events"}),(0,b.jsx)(bZ,{label:"PR merged",id:"notif-event-prMerged",testId:"switch-event-prMerged",checked:aH.prMerged,onChange:a=>{let b={...aH,prMerged:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"PR closed",id:"notif-event-prClosed",testId:"switch-event-prClosed",checked:aH.prClosed,onChange:a=>{let b={...aH,prClosed:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"PR checks passed",id:"notif-event-prChecksPassed",testId:"switch-event-prChecksPassed",checked:aH.prChecksPassed,onChange:a=>{let b={...aH,prChecksPassed:a};aI(b),y(aZ({events:b}))}}),(0,b.jsx)(bZ,{label:"PR checks failed",id:"notif-event-prChecksFailed",testId:"switch-event-prChecksFailed",checked:aH.prChecksFailed,onChange:a=>{let b={...aH,prChecksFailed:a};aI(b),y(aZ({events:b}))}})]}),(0,b.jsx)(b1,{links:[{label:"Notification system",href:"https://github.com/shep-ai/cli/blob/main/specs/021-agent-notifications/spec.yaml"}],children:"Three notification channels keep you in the loop: in-app toasts, browser push notifications, and native desktop alerts. Fine-tune which agent lifecycle events trigger a notification."})]}),(0,b.jsxs)("div",{id:"section-feature-flags",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:m,title:"Feature Flags",description:"Enable or disable experimental features",badge:"Experimental",testId:"feature-flags-settings-section",children:[(0,b.jsx)(bZ,{label:"Skills",description:"Enable the skills system for agent capabilities",id:"flag-skills",testId:"switch-flag-skills",checked:aJ.skills,onChange:a=>{let b={...aJ,skills:a};aK(b),y({featureFlags:b})}}),(0,b.jsx)(bZ,{label:"Deployments",description:"Enable environment deployment workflows",id:"flag-envDeploy",testId:"switch-flag-envDeploy",checked:aJ.envDeploy,onChange:a=>{let b={...aJ,envDeploy:a};aK(b),y({featureFlags:b})}}),(0,b.jsx)(bZ,{label:"Debug",description:"Show debug panels and verbose logging",id:"flag-debug",testId:"switch-flag-debug",checked:aJ.debug,onChange:a=>{let b={...aJ,debug:a};aK(b),y({featureFlags:b})}})]}),(0,b.jsx)(b1,{children:"Experimental features that are still under development. Enable at your own risk — they may change or be removed in future versions. Debug mode adds verbose logging useful for troubleshooting."})]}),(0,b.jsxs)("div",{id:"section-database",className:"grid scroll-mt-18 grid-cols-1 gap-x-5 rounded-lg lg:grid-cols-[1fr_280px]",children:[(0,b.jsxs)(b$,{icon:n.Database,title:"Database",description:"Local storage information",testId:"database-settings-section",children:[(0,b.jsx)(bY,{label:"Location",description:"Path to the local SQLite database",children:(0,b.jsx)("span",{className:"text-muted-foreground max-w-50 truncate font-mono text-xs","data-testid":"shep-home-path",children:e})}),(0,b.jsx)(bY,{label:"Size",children:(0,b.jsx)("span",{className:"text-muted-foreground text-xs","data-testid":"db-file-size",children:o})})]}),(0,b.jsx)(b1,{links:[{label:"Settings service",href:"https://github.com/shep-ai/cli/blob/main/docs/architecture/settings-service.md"},{label:"Settings spec",href:"https://github.com/shep-ai/cli/blob/main/specs/005-global-settings-service/spec.md"}],children:"All settings are stored in a local SQLite database at ~/.shep/data. The database uses a singleton record pattern with automatic migrations on startup."})]})]})]})}a.s(["SettingsPageClient",()=>b2],79020)}];
2
2
 
3
3
  //# sourceMappingURL=b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map