@shepai/cli 1.202.1-pr606.60460ac → 1.202.2

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 (372) hide show
  1. package/package.json +1 -1
  2. package/web/.next/BUILD_ID +1 -1
  3. package/web/.next/build-manifest.json +2 -2
  4. package/web/.next/fallback-build-manifest.json +2 -2
  5. package/web/.next/prerender-manifest.json +3 -3
  6. package/web/.next/required-server-files.js +2 -2
  7. package/web/.next/required-server-files.json +2 -2
  8. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/react-loadable-manifest.json +4 -4
  9. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +37 -37
  10. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  11. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  12. package/web/.next/server/app/(dashboard)/@drawer/chat/page/react-loadable-manifest.json +4 -4
  13. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +35 -35
  14. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  15. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  16. package/web/.next/server/app/(dashboard)/@drawer/create/page/react-loadable-manifest.json +4 -4
  17. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +38 -38
  18. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  19. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  20. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/react-loadable-manifest.json +4 -4
  21. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +47 -47
  22. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  23. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  25. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +47 -47
  26. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +4 -4
  29. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +36 -36
  30. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  31. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  32. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/react-loadable-manifest.json +4 -4
  33. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +36 -36
  34. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/chat/page/react-loadable-manifest.json +4 -4
  37. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +35 -35
  38. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/control-center/page/react-loadable-manifest.json +4 -4
  41. package/web/.next/server/app/(dashboard)/control-center/page/server-reference-manifest.json +35 -35
  42. package/web/.next/server/app/(dashboard)/control-center/page.js.nft.json +1 -1
  43. package/web/.next/server/app/(dashboard)/control-center/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/create/page/react-loadable-manifest.json +4 -4
  45. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +38 -38
  46. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  47. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  48. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/react-loadable-manifest.json +4 -4
  49. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +47 -47
  50. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  53. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +47 -47
  54. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  55. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  56. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/react-loadable-manifest.json +4 -4
  57. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +36 -36
  58. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  59. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/react-loadable-manifest.json +4 -4
  61. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +36 -36
  62. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/_global-error.html +2 -2
  65. package/web/.next/server/app/_global-error.rsc +1 -1
  66. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  67. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  68. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  69. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  70. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  71. package/web/.next/server/app/_not-found/page/react-loadable-manifest.json +4 -4
  72. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +9 -9
  73. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  74. package/web/.next/server/app/agent-questions/page/react-loadable-manifest.json +4 -4
  75. package/web/.next/server/app/agent-questions/page/server-reference-manifest.json +11 -11
  76. package/web/.next/server/app/agent-questions/page_client-reference-manifest.js +1 -1
  77. package/web/.next/server/app/agents/[agentType]/page/react-loadable-manifest.json +4 -4
  78. package/web/.next/server/app/agents/[agentType]/page/server-reference-manifest.json +13 -13
  79. package/web/.next/server/app/agents/[agentType]/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/agents/page/react-loadable-manifest.json +4 -4
  81. package/web/.next/server/app/agents/page/server-reference-manifest.json +10 -10
  82. package/web/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  83. package/web/.next/server/app/application/[id]/page/react-loadable-manifest.json +4 -4
  84. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +18 -18
  85. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
  86. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
  87. package/web/.next/server/app/application/[id]/supervisor/page/react-loadable-manifest.json +4 -4
  88. package/web/.next/server/app/application/[id]/supervisor/page/server-reference-manifest.json +10 -10
  89. package/web/.next/server/app/application/[id]/supervisor/page_client-reference-manifest.js +1 -1
  90. package/web/.next/server/app/applications/page/react-loadable-manifest.json +4 -4
  91. package/web/.next/server/app/applications/page/server-reference-manifest.json +20 -20
  92. package/web/.next/server/app/applications/page.js.nft.json +1 -1
  93. package/web/.next/server/app/applications/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app/features/page/react-loadable-manifest.json +4 -4
  95. package/web/.next/server/app/features/page/server-reference-manifest.json +31 -31
  96. package/web/.next/server/app/features/page.js.nft.json +1 -1
  97. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  98. package/web/.next/server/app/onboarding/page/react-loadable-manifest.json +4 -4
  99. package/web/.next/server/app/onboarding/page/server-reference-manifest.json +9 -9
  100. package/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  101. package/web/.next/server/app/page/react-loadable-manifest.json +4 -4
  102. package/web/.next/server/app/page/server-reference-manifest.json +9 -9
  103. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  104. package/web/.next/server/app/projects/[slug]/items/[itemId]/page/react-loadable-manifest.json +4 -4
  105. package/web/.next/server/app/projects/[slug]/items/[itemId]/page/server-reference-manifest.json +16 -16
  106. package/web/.next/server/app/projects/[slug]/items/[itemId]/page_client-reference-manifest.js +1 -1
  107. package/web/.next/server/app/projects/[slug]/page/react-loadable-manifest.json +4 -4
  108. package/web/.next/server/app/projects/[slug]/page/server-reference-manifest.json +28 -28
  109. package/web/.next/server/app/projects/[slug]/page_client-reference-manifest.js +1 -1
  110. package/web/.next/server/app/projects/[slug]/pages/page/react-loadable-manifest.json +4 -4
  111. package/web/.next/server/app/projects/[slug]/pages/page/server-reference-manifest.json +12 -12
  112. package/web/.next/server/app/projects/[slug]/pages/page_client-reference-manifest.js +1 -1
  113. package/web/.next/server/app/projects/[slug]/settings/page/react-loadable-manifest.json +4 -4
  114. package/web/.next/server/app/projects/[slug]/settings/page/server-reference-manifest.json +18 -18
  115. package/web/.next/server/app/projects/[slug]/settings/page_client-reference-manifest.js +1 -1
  116. package/web/.next/server/app/projects/page/react-loadable-manifest.json +4 -4
  117. package/web/.next/server/app/projects/page/server-reference-manifest.json +10 -10
  118. package/web/.next/server/app/projects/page_client-reference-manifest.js +1 -1
  119. package/web/.next/server/app/settings/page/react-loadable-manifest.json +4 -4
  120. package/web/.next/server/app/settings/page/server-reference-manifest.json +15 -15
  121. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  122. package/web/.next/server/app/skills/page/react-loadable-manifest.json +4 -4
  123. package/web/.next/server/app/skills/page/server-reference-manifest.json +17 -17
  124. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  125. package/web/.next/server/app/supervisor/feature/[featureId]/page/react-loadable-manifest.json +4 -4
  126. package/web/.next/server/app/supervisor/feature/[featureId]/page/server-reference-manifest.json +10 -10
  127. package/web/.next/server/app/supervisor/feature/[featureId]/page_client-reference-manifest.js +1 -1
  128. package/web/.next/server/app/supervisor/page/react-loadable-manifest.json +4 -4
  129. package/web/.next/server/app/supervisor/page/server-reference-manifest.json +10 -10
  130. package/web/.next/server/app/supervisor/page_client-reference-manifest.js +1 -1
  131. package/web/.next/server/app/supervisor/repo/[repositoryId]/page/react-loadable-manifest.json +4 -4
  132. package/web/.next/server/app/supervisor/repo/[repositoryId]/page/server-reference-manifest.json +10 -10
  133. package/web/.next/server/app/supervisor/repo/[repositoryId]/page_client-reference-manifest.js +1 -1
  134. package/web/.next/server/app/tools/page/react-loadable-manifest.json +4 -4
  135. package/web/.next/server/app/tools/page/server-reference-manifest.json +15 -15
  136. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  137. package/web/.next/server/app/version/page/react-loadable-manifest.json +4 -4
  138. package/web/.next/server/app/version/page/server-reference-manifest.json +9 -9
  139. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  140. package/web/.next/server/chunks/[root-of-the-server]__10e976f3._.js +1 -1
  141. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agent-questions_page_actions_4b694f8d.js +1 -1
  142. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agent-questions_page_actions_4b694f8d.js.map +1 -1
  143. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agents_[agentType]_page_actions_103679a6.js +1 -1
  144. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_agents_[agentType]_page_actions_103679a6.js.map +1 -1
  145. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_projects_[slug]_pages_page_actions_19d50f6c.js +1 -1
  146. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_projects_[slug]_pages_page_actions_19d50f6c.js.map +1 -1
  147. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_items_[itemId]_work-item-detail-client_tsx_d2e02407._.js +1 -1
  148. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_items_[itemId]_work-item-detail-client_tsx_d2e02407._.js.map +1 -1
  149. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_settings_project-settings-client_tsx_e8b85ddc._.js +1 -1
  150. package/web/.next/server/chunks/ssr/744ca_web_app_projects_[slug]_settings_project-settings-client_tsx_e8b85ddc._.js.map +1 -1
  151. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  152. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  153. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js +1 -1
  154. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js.map +1 -1
  155. package/web/.next/server/chunks/ssr/[root-of-the-server]__0af8610a._.js +3 -3
  156. package/web/.next/server/chunks/ssr/[root-of-the-server]__0af8610a._.js.map +1 -1
  157. package/web/.next/server/chunks/ssr/[root-of-the-server]__0b652a2f._.js +1 -1
  158. package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b73253b._.js → [root-of-the-server]__2e388ba3._.js} +2 -2
  159. package/web/.next/server/chunks/ssr/{[root-of-the-server]__8b73253b._.js.map → [root-of-the-server]__2e388ba3._.js.map} +1 -1
  160. package/web/.next/server/chunks/ssr/[root-of-the-server]__56cf47e7._.js +1 -1
  161. package/web/.next/server/chunks/ssr/[root-of-the-server]__56cf47e7._.js.map +1 -1
  162. package/web/.next/server/chunks/ssr/[root-of-the-server]__648730d4._.js +1 -1
  163. package/web/.next/server/chunks/ssr/[root-of-the-server]__68df6415._.js +1 -1
  164. package/web/.next/server/chunks/ssr/[root-of-the-server]__68df6415._.js.map +1 -1
  165. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bc6bf96._.js +1 -1
  166. package/web/.next/server/chunks/ssr/[root-of-the-server]__6bc6bf96._.js.map +1 -1
  167. package/web/.next/server/chunks/ssr/[root-of-the-server]__9852cb08._.js +2 -2
  168. package/web/.next/server/chunks/ssr/[root-of-the-server]__9852cb08._.js.map +1 -1
  169. package/web/.next/server/chunks/ssr/[root-of-the-server]__a1167cec._.js +1 -1
  170. package/web/.next/server/chunks/ssr/[root-of-the-server]__a1167cec._.js.map +1 -1
  171. package/web/.next/server/chunks/ssr/[root-of-the-server]__a12d0ad7._.js +3 -0
  172. package/web/.next/server/chunks/ssr/{[root-of-the-server]__52ca7f88._.js.map → [root-of-the-server]__a12d0ad7._.js.map} +1 -1
  173. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba699bec._.js +1 -1
  174. package/web/.next/server/chunks/ssr/[root-of-the-server]__ba699bec._.js.map +1 -1
  175. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0741ee1._.js +1 -1
  176. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0fa59e6._.js +1 -1
  177. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0fa59e6._.js.map +1 -1
  178. package/web/.next/server/chunks/ssr/[root-of-the-server]__ea26ff90._.js +3 -3
  179. package/web/.next/server/chunks/ssr/[root-of-the-server]__ff0095e3._.js +1 -1
  180. package/web/.next/server/chunks/ssr/_07036593._.js +1 -1
  181. package/web/.next/server/chunks/ssr/_07036593._.js.map +1 -1
  182. package/web/.next/server/chunks/ssr/_0d2a7595._.js +1 -1
  183. package/web/.next/server/chunks/ssr/_0d2a7595._.js.map +1 -1
  184. package/web/.next/server/chunks/ssr/_101de7c3._.js +1 -1
  185. package/web/.next/server/chunks/ssr/_101de7c3._.js.map +1 -1
  186. package/web/.next/server/chunks/ssr/{_db111d21._.js → _10f54ace._.js} +2 -2
  187. package/web/.next/server/chunks/ssr/{_db111d21._.js.map → _10f54ace._.js.map} +1 -1
  188. package/web/.next/server/chunks/ssr/_24fca3cf._.js +1 -1
  189. package/web/.next/server/chunks/ssr/_24fca3cf._.js.map +1 -1
  190. package/web/.next/server/chunks/ssr/{_6ff832ad._.js → _2759af76._.js} +2 -2
  191. package/web/.next/server/chunks/ssr/{_6ff832ad._.js.map → _2759af76._.js.map} +1 -1
  192. package/web/.next/server/chunks/ssr/_2bc48f3d._.js +1 -1
  193. package/web/.next/server/chunks/ssr/_2bc48f3d._.js.map +1 -1
  194. package/web/.next/server/chunks/ssr/{_fb539286._.js → _2bef1982._.js} +2 -2
  195. package/web/.next/server/chunks/ssr/{_fb539286._.js.map → _2bef1982._.js.map} +1 -1
  196. package/web/.next/server/chunks/ssr/_32f66845._.js +1 -1
  197. package/web/.next/server/chunks/ssr/_408848e6._.js +1 -1
  198. package/web/.next/server/chunks/ssr/_408848e6._.js.map +1 -1
  199. package/web/.next/server/chunks/ssr/_40e02782._.js +1 -1
  200. package/web/.next/server/chunks/ssr/_40e02782._.js.map +1 -1
  201. package/web/.next/server/chunks/ssr/_486d45d6._.js +1 -1
  202. package/web/.next/server/chunks/ssr/_486d45d6._.js.map +1 -1
  203. package/web/.next/server/chunks/ssr/{_824d5772._.js → _498cba11._.js} +2 -2
  204. package/web/.next/server/chunks/ssr/{_824d5772._.js.map → _498cba11._.js.map} +1 -1
  205. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  206. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  207. package/web/.next/server/chunks/ssr/_5cbb0e22._.js +1 -1
  208. package/web/.next/server/chunks/ssr/_5cbb0e22._.js.map +1 -1
  209. package/web/.next/server/chunks/ssr/{_5a3edc88._.js → _673be4f1._.js} +2 -2
  210. package/web/.next/server/chunks/ssr/{_5a3edc88._.js.map → _673be4f1._.js.map} +1 -1
  211. package/web/.next/server/chunks/ssr/_7ba67729._.js +1 -1
  212. package/web/.next/server/chunks/ssr/_7ba67729._.js.map +1 -1
  213. package/web/.next/server/chunks/ssr/_805ae1aa._.js +1 -1
  214. package/web/.next/server/chunks/ssr/_805ae1aa._.js.map +1 -1
  215. package/web/.next/server/chunks/ssr/_87cf18c3._.js +1 -1
  216. package/web/.next/server/chunks/ssr/_87cf18c3._.js.map +1 -1
  217. package/web/.next/server/chunks/ssr/_8a700ff4._.js +1 -1
  218. package/web/.next/server/chunks/ssr/_8a700ff4._.js.map +1 -1
  219. package/web/.next/server/chunks/ssr/_95b97274._.js +1 -1
  220. package/web/.next/server/chunks/ssr/_95b97274._.js.map +1 -1
  221. package/web/.next/server/chunks/ssr/{_fbcfaf3a._.js → _9d18d1b1._.js} +2 -2
  222. package/web/.next/server/chunks/ssr/{_fbcfaf3a._.js.map → _9d18d1b1._.js.map} +1 -1
  223. package/web/.next/server/chunks/ssr/{_70ff64a1._.js → _a93687e6._.js} +2 -2
  224. package/web/.next/server/chunks/ssr/{_70ff64a1._.js.map → _a93687e6._.js.map} +1 -1
  225. package/web/.next/server/chunks/ssr/_c2e196ee._.js +1 -1
  226. package/web/.next/server/chunks/ssr/_c2e196ee._.js.map +1 -1
  227. package/web/.next/server/chunks/ssr/_ca3b7bf7._.js +1 -1
  228. package/web/.next/server/chunks/ssr/_ca3b7bf7._.js.map +1 -1
  229. package/web/.next/server/chunks/ssr/_d53224a9._.js +1 -1
  230. package/web/.next/server/chunks/ssr/_d53224a9._.js.map +1 -1
  231. package/web/.next/server/chunks/ssr/_d573dcc2._.js +1 -1
  232. package/web/.next/server/chunks/ssr/_e2671e14._.js +1 -1
  233. package/web/.next/server/chunks/ssr/_e2671e14._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/_ecd45b17._.js +1 -1
  235. package/web/.next/server/chunks/ssr/_ecd45b17._.js.map +1 -1
  236. package/web/.next/server/chunks/ssr/{_f0d45e47._.js → _f46d2018._.js} +2 -2
  237. package/web/.next/server/chunks/ssr/{_f0d45e47._.js.map → _f46d2018._.js.map} +1 -1
  238. package/web/.next/server/chunks/ssr/_f602cc9f._.js +1 -1
  239. package/web/.next/server/chunks/ssr/_f602cc9f._.js.map +1 -1
  240. package/web/.next/server/chunks/ssr/{_20a56008._.js → _f71954a5._.js} +2 -2
  241. package/web/.next/server/chunks/ssr/{_20a56008._.js.map → _f71954a5._.js.map} +1 -1
  242. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  243. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  244. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  245. package/web/.next/server/chunks/ssr/src_presentation_web_0e291f0b._.js +1 -1
  246. package/web/.next/server/chunks/ssr/src_presentation_web_0e291f0b._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/{src_presentation_web_40673f0c._.js → src_presentation_web_16c83ab4._.js} +2 -2
  248. package/web/.next/server/chunks/ssr/{src_presentation_web_40673f0c._.js.map → src_presentation_web_16c83ab4._.js.map} +1 -1
  249. package/web/.next/server/chunks/ssr/src_presentation_web_1d8d177f._.js +1 -1
  250. package/web/.next/server/chunks/ssr/src_presentation_web_1d8d177f._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/src_presentation_web_450b58fc._.js +1 -1
  252. package/web/.next/server/chunks/ssr/src_presentation_web_450b58fc._.js.map +1 -1
  253. package/web/.next/server/chunks/ssr/src_presentation_web_47727150._.js +1 -1
  254. package/web/.next/server/chunks/ssr/src_presentation_web_47727150._.js.map +1 -1
  255. package/web/.next/server/chunks/ssr/src_presentation_web_64fcfc84._.js +1 -1
  256. package/web/.next/server/chunks/ssr/src_presentation_web_64fcfc84._.js.map +1 -1
  257. package/web/.next/server/chunks/ssr/src_presentation_web_74b7bdb2._.js +1 -1
  258. package/web/.next/server/chunks/ssr/src_presentation_web_74b7bdb2._.js.map +1 -1
  259. package/web/.next/server/chunks/ssr/src_presentation_web_82aeca34._.js +1 -1
  260. package/web/.next/server/chunks/ssr/src_presentation_web_82aeca34._.js.map +1 -1
  261. package/web/.next/server/chunks/ssr/src_presentation_web_8a564d47._.js +1 -1
  262. package/web/.next/server/chunks/ssr/src_presentation_web_8a564d47._.js.map +1 -1
  263. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +1 -1
  264. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +1 -1
  265. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_f4f3fad9.js +1 -1
  266. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app__not-found_page_actions_f4f3fad9.js.map +1 -1
  267. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_agents_page_actions_d4bd4711.js +1 -1
  268. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_agents_page_actions_d4bd4711.js.map +1 -1
  269. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_onboarding_page_actions_bb695e8d.js +1 -1
  270. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_onboarding_page_actions_bb695e8d.js.map +1 -1
  271. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_ac47e420.js +1 -1
  272. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_page_actions_ac47e420.js.map +1 -1
  273. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_projects_page_actions_c91a23a8.js +1 -1
  274. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_projects_page_actions_c91a23a8.js.map +1 -1
  275. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_63c2d912.js +1 -1
  276. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_version_page_actions_63c2d912.js.map +1 -1
  277. package/web/.next/server/chunks/ssr/src_presentation_web_a53a3da6._.js +1 -1
  278. package/web/.next/server/chunks/ssr/src_presentation_web_a53a3da6._.js.map +1 -1
  279. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_246617fe._.js +3 -3
  280. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_adopt-local-directory_ts_75f1f28c._.js +1 -1
  281. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_adopt-local-directory_ts_75f1f28c._.js.map +1 -1
  282. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_approve-feature_ts_9453ce8b._.js +1 -1
  283. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-directory_ts_1209d917._.js +1 -1
  284. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-directory_ts_1209d917._.js.map +1 -1
  285. package/web/.next/server/chunks/ssr/src_presentation_web_app_features_feature-tree-page-client_tsx_34c5cbbf._.js +1 -1
  286. package/web/.next/server/chunks/ssr/src_presentation_web_b1b3c26c._.js +1 -1
  287. package/web/.next/server/chunks/ssr/src_presentation_web_b1b3c26c._.js.map +1 -1
  288. package/web/.next/server/chunks/ssr/src_presentation_web_b98a4353._.js +1 -1
  289. package/web/.next/server/chunks/ssr/src_presentation_web_b98a4353._.js.map +1 -1
  290. package/web/.next/server/chunks/ssr/src_presentation_web_c96ca051._.js +1 -1
  291. package/web/.next/server/chunks/ssr/src_presentation_web_c96ca051._.js.map +1 -1
  292. package/web/.next/server/chunks/ssr/{src_presentation_web_e812a69b._.js → src_presentation_web_cb0d2c28._.js} +2 -2
  293. package/web/.next/server/chunks/ssr/{src_presentation_web_e812a69b._.js.map → src_presentation_web_cb0d2c28._.js.map} +1 -1
  294. package/web/.next/server/chunks/ssr/src_presentation_web_components_66643378._.js +1 -1
  295. package/web/.next/server/chunks/ssr/src_presentation_web_components_66643378._.js.map +1 -1
  296. package/web/.next/server/chunks/ssr/src_presentation_web_components_agent-editor_agent-editor-tabs_tsx_d5a954b4._.js +1 -1
  297. package/web/.next/server/chunks/ssr/src_presentation_web_components_agent-editor_agent-editor-tabs_tsx_d5a954b4._.js.map +1 -1
  298. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  299. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/src_presentation_web_d3858f16._.js +1 -1
  301. package/web/.next/server/chunks/ssr/src_presentation_web_d3858f16._.js.map +1 -1
  302. package/web/.next/server/chunks/ssr/src_presentation_web_d7f8130c._.js +1 -1
  303. package/web/.next/server/chunks/ssr/src_presentation_web_d7f8130c._.js.map +1 -1
  304. package/web/.next/server/chunks/ssr/src_presentation_web_dddd8ccd._.js +1 -1
  305. package/web/.next/server/chunks/ssr/src_presentation_web_dddd8ccd._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/src_presentation_web_e13d58b0._.js +1 -1
  307. package/web/.next/server/chunks/ssr/src_presentation_web_e13d58b0._.js.map +1 -1
  308. package/web/.next/server/chunks/ssr/src_presentation_web_ee94a9aa._.js +1 -1
  309. package/web/.next/server/chunks/ssr/src_presentation_web_ee94a9aa._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/src_presentation_web_f0fcfdff._.js +1 -1
  311. package/web/.next/server/chunks/ssr/src_presentation_web_f0fcfdff._.js.map +1 -1
  312. package/web/.next/server/chunks/ssr/src_presentation_web_f17e8516._.js +1 -1
  313. package/web/.next/server/chunks/ssr/src_presentation_web_f17e8516._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/src_presentation_web_f7180fec._.js +1 -1
  315. package/web/.next/server/chunks/ssr/src_presentation_web_f7180fec._.js.map +1 -1
  316. package/web/.next/server/pages/500.html +2 -2
  317. package/web/.next/server/server-reference-manifest.js +1 -1
  318. package/web/.next/server/server-reference-manifest.json +111 -111
  319. package/web/.next/static/chunks/{5faa828877b1e669.js → 03dda23205877d8b.js} +1 -1
  320. package/web/.next/static/chunks/{4bf4f333302e24a4.js → 054e3a5f5ff4db71.js} +1 -1
  321. package/web/.next/static/chunks/{a868014dbe1b4e42.js → 06e58041911c290b.js} +1 -1
  322. package/web/.next/static/chunks/{b5ff852fee23795d.js → 089ef5b749d79ebd.js} +1 -1
  323. package/web/.next/static/chunks/{1a093b13a9d6952e.js → 0d106010c498c198.js} +2 -2
  324. package/web/.next/static/chunks/193e5a0540757f5e.js +1 -0
  325. package/web/.next/static/chunks/{9abc3e68af98e636.js → 25111a2f2597f500.js} +1 -1
  326. package/web/.next/static/chunks/285e724d07901ef6.js +1 -0
  327. package/web/.next/static/chunks/{3c396f63ebefe875.js → 2b2bfc0465b18a7d.js} +1 -1
  328. package/web/.next/static/chunks/{6af99a08ccacdbce.js → 2b436562e69d2827.js} +1 -1
  329. package/web/.next/static/chunks/{8c96a835b3b0dc44.js → 2e3844d0ac487ac7.js} +1 -1
  330. package/web/.next/static/chunks/325859b8a9482427.js +1 -0
  331. package/web/.next/static/chunks/{2773e7b2587bc9cc.js → 44ab458ceb89d85d.js} +1 -1
  332. package/web/.next/static/chunks/4fdf36904f5421a6.js +1 -0
  333. package/web/.next/static/chunks/59004c65d552581c.js +1 -0
  334. package/web/.next/static/chunks/{0edcdc8a2dd06b7a.js → 5c4837e88a3431b8.js} +1 -1
  335. package/web/.next/static/chunks/{a131f868af7f1f7c.js → 74cdd562eb663f72.js} +1 -1
  336. package/web/.next/static/chunks/{0315591c972888a6.js → 7670d76d4ee743e6.js} +1 -1
  337. package/web/.next/static/chunks/{02d88da9fd656fcd.js → 83fc784ce05a701e.js} +1 -1
  338. package/web/.next/static/chunks/{460cedaa85c821e7.js → 8dd4fdd20b103a66.js} +1 -1
  339. package/web/.next/static/chunks/9336bdc7fc319282.js +1 -0
  340. package/web/.next/static/chunks/9d285565922b2de7.js +1 -0
  341. package/web/.next/static/chunks/{45eeca36eabbed23.js → 9f7f2a11937d87eb.js} +1 -1
  342. package/web/.next/static/chunks/{c3931fdbae836be6.js → a7c7bcfb6f7696a3.js} +1 -1
  343. package/web/.next/static/chunks/{9f7985e2a73929a2.js → a8f57d2a12849f32.js} +1 -1
  344. package/web/.next/static/chunks/{0e1c933065a1100a.js → abe98954ccdf29db.js} +1 -1
  345. package/web/.next/static/chunks/{4378715fa2b5e7de.js → b05808da85e8b34c.js} +1 -1
  346. package/web/.next/static/chunks/{b5dc7979d66caa38.js → b5f83e5e1dad23d5.js} +1 -1
  347. package/web/.next/static/chunks/{6d2074fa3453d333.js → b8293a56f257e5a2.js} +1 -1
  348. package/web/.next/static/chunks/{bc5b87e4068ba11d.js → c61c5e97c76dc733.js} +1 -1
  349. package/web/.next/static/chunks/c6b411bf31744ca7.js +1 -0
  350. package/web/.next/static/chunks/{bdaa907bf3d1d932.js → c732d6cc4c5e4343.js} +1 -1
  351. package/web/.next/static/chunks/{25a200f055ae5cba.js → d214d6a670f48d79.js} +1 -1
  352. package/web/.next/static/chunks/{6901861cb53ab483.js → d7b17a93a26e97c8.js} +1 -1
  353. package/web/.next/static/chunks/{a0325f77bbccc63d.js → d8f14fac959a6bd0.js} +1 -1
  354. package/web/.next/static/chunks/{24ea54516dc249c0.js → d98912f5b6cf4938.js} +1 -1
  355. package/web/.next/static/chunks/{21500b3fe3754296.js → df79667c16344317.js} +1 -1
  356. package/web/.next/static/chunks/{05e8df10619fb980.js → ec8f19328ad1ecd4.js} +1 -1
  357. package/web/.next/static/chunks/{e6e6ba783b2e4d14.js → f0157331838ac962.js} +1 -1
  358. package/web/.next/static/chunks/{c687ed21b9518d73.js → f757d865fae71faf.js} +1 -1
  359. package/web/.next/static/chunks/fb3cbb7f575a7128.js +1 -0
  360. package/web/.next/server/chunks/ssr/[root-of-the-server]__52ca7f88._.js +0 -3
  361. package/web/.next/static/chunks/03d7b81c2554d52f.js +0 -1
  362. package/web/.next/static/chunks/15acdaaea57bb459.js +0 -1
  363. package/web/.next/static/chunks/39fe1c1397d5483b.js +0 -1
  364. package/web/.next/static/chunks/495883829026f13f.js +0 -1
  365. package/web/.next/static/chunks/4b3a4f416a6eb1ac.js +0 -1
  366. package/web/.next/static/chunks/4b4160f36cf2a3d6.js +0 -1
  367. package/web/.next/static/chunks/7269537b2188650d.js +0 -1
  368. package/web/.next/static/chunks/b1534b2f3d814fef.js +0 -1
  369. package/web/.next/static/chunks/f6dc1ba364203bb2.js +0 -1
  370. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_buildManifest.js +0 -0
  371. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_clientMiddlewareManifest.json +0 -0
  372. /package/web/.next/static/{My4IQDygZ4BFTXkkKanja → 9zd-B2rWybTaAgE74IKiK}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[857411,a=>{"use strict";var b=a.i(556365),c=a.i(944592),d=a.i(193967),e=a.i(232791),f=a.i(488064),g=a.i(882014),h=a.i(103942),i=a.i(69428),j=a.i(771716),k=a.i(872016),l=a.i(302807);a.i(490370);var m=a.i(224640),n=a.i(385536),o=a.i(289111);let p=(0,o.createServerReference)("40ba17f62f174f4f88aa0ea4a373db347247ae1171",o.callServer,void 0,o.findSourceMapURL,"createProjectAndFeature"),q=(0,o.createServerReference)("40f744f8f8785a86cc8dc9487da8d64ca353d264af",o.callServer,void 0,o.findSourceMapURL,"createApplication");var r=a.i(411117),s=a.i(961781);a.i(200307);var t=a.i(730931);a.i(548822);var u=a.i(85655),v=a.i(182934),w=a.i(675192),x=a.i(409260);let y=["application","fast","spec"],z={application:{icon:g.LayoutGrid,label:"Application",placeholder:"Build a modern e-commerce storefront with product catalog...",suggestions:["A landing page with hero, features, and pricing sections","Full-stack SaaS app with auth, billing, and dashboard","Mobile-first social media app with real-time chat","Personal portfolio with blog and project showcase"]},fast:{icon:h.Zap,label:"Fast",placeholder:"Add a dark mode toggle to the settings page...",suggestions:["Add pagination to the users list endpoint","Fix the broken logout redirect","Add input validation to the signup form","Refactor the API error handling middleware"]},spec:{icon:i.ClipboardList,label:"Spec Driven",placeholder:"Implement a role-based access control system with audit logging...",suggestions:["OAuth2 authentication with SSO and MFA support","Event-driven notification system with email and push","REST API with versioning, rate limiting, and OpenAPI docs","Data pipeline with ETL, validation, and monitoring"]}};function A({onRepositorySelect:a,onApplicationCreated:g,onClose:h,className:i}){let{t:o}=(0,m.useTranslation)("web"),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)(void 0),[E,F]=(0,c.useState)(void 0);(0,c.useEffect)(()=>{(0,r.getDefaultAgentAndModel)().then(a=>{D(b=>b??a.agentType),F(b=>b??a.model)})},[]);let[G,H]=(0,c.useState)("application"),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(null),[M,N]=(0,c.useState)(!1),O=(0,c.useRef)(null),P=(0,x.useAttachments)(),Q=!!a,R=Q?G:"application",S=(0,c.useCallback)(()=>{H(a=>{let b=y.indexOf(a);return y[(b+1)%y.length]})},[]);(0,c.useEffect)(()=>{let b=b=>{"Escape"===b.key&&h&&h(),"Tab"===b.key&&b.shiftKey&&a&&(b.preventDefault(),S())};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[h,S,a]);let T=(0,c.useCallback)(async()=>{if(A.trim()&&!I){J(!0),L(null);try{if("application"!==R&&a){let b=await p({description:A.trim(),attachments:P.completedAttachments.map(a=>({path:a.path,name:a.name,notes:a.notes})),agentType:C,model:E,fast:"fast"===R});if(b.error){L(b.error),J(!1);return}b.repositoryPath&&a?.(b.repositoryPath),b.feature&&b.repositoryPath&&window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:b.feature.id,name:b.feature.name,description:b.feature.description,repositoryPath:b.repositoryPath}}))}else{let a=await q({description:A.trim(),agentType:C,modelOverride:E,initialPrompt:A.trim()});if(a.error){L(a.error),J(!1);return}a.application&&g?.(a.application.id)}}catch{L("Something went wrong. Please try again."),J(!1)}}},[A,I,R,P.completedAttachments,C,E,a,g]),U=(0,c.useCallback)(a=>{"Enter"===a.key&&(a.ctrlKey||a.metaKey)&&(a.preventDefault(),T())},[T]),V=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/dialog/pick-files");if(!a.ok)return;let b=await a.json();if(!b.paths?.length)return;for(let a of b.paths){let b=await fetch("/api/attachments/upload-from-path",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:a,sessionId:"onboarding"})});if(!b.ok)continue;let c=await b.json();P.addAttachment(c)}}catch{}},[P.addAttachment]),W=(0,c.useCallback)(a=>{B(a),O.current?.focus()},[]),X=z[R],Y=X.icon;return(0,b.jsxs)("div",{"data-testid":"control-center-empty-state",className:(0,n.cn)("relative flex h-full w-full flex-col items-center justify-center overflow-hidden px-8",i),children:[(0,b.jsx)("div",{className:"onboard-bg pointer-events-none absolute inset-0 animate-[onboard-fade-in_1.2s_ease-out_both]"}),h?(0,b.jsx)("button",{type:"button",onClick:h,"aria-label":"Close",className:"text-muted-foreground hover:text-foreground hover:bg-accent/50 absolute top-4 right-4 z-10 cursor-pointer rounded p-1.5 transition-colors",children:(0,b.jsx)(l.X,{className:"h-5 w-5"})}):null,(0,b.jsxs)("div",{className:"relative flex w-full max-w-2xl flex-col items-center",children:[(0,b.jsx)("div",{className:"mb-6 animate-[onboard-logo_0.8s_cubic-bezier(0.16,1,0.3,1)_both]",style:{animationDelay:"0ms"},children:(0,b.jsx)(u.ShepLogo,{size:72,className:"text-foreground"})}),(0,b.jsx)("h1",{className:"text-foreground animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-5xl font-extralight tracking-tight",style:{animationDelay:"120ms"},children:"What do you want to build?"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-3 animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-lg leading-relaxed font-light",style:{animationDelay:"220ms"},children:"Describe your idea and Shep creates the project for you."}),(0,b.jsxs)("div",{className:"mt-10 w-full animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both]",style:{animationDelay:"350ms"},children:[(0,b.jsxs)("div",{onFocus:()=>N(!0),onBlur:()=>N(!1),onDragEnter:P.handleDragEnter,onDragLeave:P.handleDragLeave,onDragOver:P.handleDragOver,onDrop:P.handleDrop,className:(0,n.cn)("flex flex-col rounded-xl border transition-all duration-200","border-border/60 bg-background shadow-sm dark:border-white/10 dark:bg-white/[0.04]",M&&"ring-ring/50 border-ring shadow-md ring-[3px] dark:border-orange-500/40 dark:ring-orange-500/25",P.isDragOver&&"border-primary/50 bg-primary/5",I&&"opacity-70"),children:[(0,b.jsx)("textarea",{ref:O,rows:2,autoFocus:!0,value:A,onChange:a=>B(a.target.value),onKeyDown:U,onPaste:P.handlePaste,placeholder:X.placeholder,disabled:I,className:"text-foreground placeholder:text-muted-foreground/60 max-h-[10rem] min-h-[4.5rem] w-full resize-none border-0 bg-transparent px-4 py-3.5 text-sm leading-relaxed focus:outline-none disabled:cursor-not-allowed"}),P.attachments.length>0?(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-2.5 overflow-x-auto overflow-y-visible px-5 pt-2 pb-2",children:P.attachments.map(a=>(0,b.jsx)(t.AttachmentChip,{name:a.name,size:a.size,mimeType:a.mimeType,path:a.path,onRemove:()=>P.removeAttachment(a.id),loading:a.loading,notes:a.notes,onNotesChange:b=>P.updateNotes(a.id,b)},a.id))}):null,P.uploadError?(0,b.jsx)("p",{className:"text-destructive px-4 pb-2 text-xs",children:P.uploadError}):null,(0,b.jsxs)("div",{className:"border-border/60 flex shrink-0 items-center gap-3 border-t px-3 py-2 dark:border-white/10",children:[(0,b.jsx)(s.AgentModelPicker,{initialAgentType:C??"",initialModel:E??"",mode:"override",showInstallStatus:!0,onAgentModelChange:(a,b)=>{D(a),F(b)},className:"w-55"}),(0,b.jsx)("div",{className:"flex-1"}),Q?(0,b.jsxs)(w.DropdownMenu,{children:[(0,b.jsx)(w.DropdownMenuTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button","data-testid":"build-mode-selector",className:"text-muted-foreground hover:text-foreground hover:bg-accent/50 flex cursor-pointer items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors",children:[(0,b.jsxs)("span",{className:"flex animate-[onboard-fade-up_0.25s_ease-out_both] items-center gap-1.5",children:[(0,b.jsx)(Y,{className:"h-3.5 w-3.5"}),X.label]},R),(0,b.jsx)(j.ChevronDown,{className:"h-3 w-3 opacity-50"})]})}),(0,b.jsx)(w.DropdownMenuContent,{align:"end",className:"min-w-[160px]",children:y.map(a=>{let c=z[a],d=c.icon,e=R===a;return(0,b.jsxs)(w.DropdownMenuItem,{onClick:()=>H(a),"data-testid":`build-mode-${a}`,className:"flex items-center gap-2",children:[(0,b.jsx)(d,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"flex-1",children:c.label}),e?(0,b.jsx)(k.Check,{className:"text-foreground h-3.5 w-3.5"}):null]},a)})})]}):null,(0,b.jsxs)(v.Tooltip,{children:[(0,b.jsx)(v.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",onClick:V,disabled:I,"aria-label":o("chat.attachFiles"),className:"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors disabled:opacity-50",children:(0,b.jsx)(e.Paperclip,{className:"h-4 w-4"})})}),(0,b.jsx)(v.TooltipContent,{side:"top",children:o("chat.attachFiles")})]}),(0,b.jsx)("button",{type:"button",onClick:T,disabled:!A.trim()||I,className:(0,n.cn)("bg-foreground text-background inline-flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-lg","hover:bg-foreground/90 disabled:pointer-events-none disabled:opacity-30","transition-all duration-150"),children:I?(0,b.jsx)(f.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(d.SendHorizontal,{className:"h-3.5 w-3.5"})})]})]}),K?(0,b.jsx)("p",{className:"text-destructive mt-2 text-center text-sm",children:K}):null]}),(0,b.jsx)("div",{className:"mt-6 flex animate-[onboard-fade-up_0.4s_ease-out_both] flex-wrap justify-center gap-2",children:X.suggestions.map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>W(a),disabled:I,className:"text-muted-foreground hover:text-foreground border-border/60 hover:border-border hover:bg-accent/50 cursor-pointer rounded-full border px-3.5 py-1.5 text-xs transition-all duration-150 disabled:opacity-50 dark:border-white/10 dark:hover:border-white/20 dark:hover:bg-white/[0.06]",children:a},a))},R)]})]})}a.s(["ControlCenterEmptyState",()=>A],857411)},893741,a=>{"use strict";let b=(0,a.i(225700).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",()=>b],893741)},142527,234379,421434,a=>{"use strict";var b=a.i(225700);let c=(0,b.default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["FolderPlus",()=>c],142527);var d=a.i(556365),e=a.i(944592),f=a.i(503410);let g=(0,b.default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);var h=a.i(403195),i=a.i(488064),j=a.i(893741),k=a.i(952313),l=a.i(645670),m=a.i(118948),n=a.i(359706);async function o(a){let b=new URLSearchParams;a&&b.set("path",a);let c=await fetch(`/api/directory/list?${b.toString()}`);if(!c.ok)throw Error((await c.json().catch(()=>({error:"Failed to load directory"}))).error??"Failed to load directory");return c.json()}function p({currentPath:a,isEditing:b,onToggleEdit:c,onNavigate:g}){let h=(0,e.useRef)(null),[i,k]=(0,e.useState)(a);function l(){k(a),c()}(0,e.useEffect)(()=>{k(a)},[a]),(0,e.useEffect)(()=>{b&&h.current&&(h.current.focus(),h.current.select())},[b]);let m=function(a){if(!a)return[];let b=/^[a-zA-Z]:/.test(a),c=b?"\\":"/",d=a.split(/[\\/]/).filter(Boolean),e=[];for(let a=0;a<d.length;a++){let f=b?d.slice(0,a+1).join(c):c+d.slice(0,a+1).join(c);e.push({label:d[a],path:f})}return e}(a),n=m.length>3,o=n?m.slice(-3):m;return(0,d.jsxs)("div",{className:"border-b px-4 py-3",children:[(0,d.jsx)("h2",{className:"text-foreground mb-2.5 text-sm font-semibold tracking-[-0.01em]",children:"Select Folder"}),b?(0,d.jsx)("input",{ref:h,type:"text",value:i,onChange:a=>k(a.target.value),onKeyDown:a=>{if("Enter"===a.key){let b;a.preventDefault(),(b=i.trim())&&g(b)}"Escape"===a.key&&(a.preventDefault(),l())},onBlur:l,className:"bg-muted/60 border-border focus:ring-ring/20 focus:border-ring w-full rounded-lg border px-3 py-2 font-mono text-xs transition-all outline-none focus:ring-2",placeholder:"Type a path and press Enter...",spellCheck:!1,autoComplete:"off"}):(0,d.jsxs)("div",{className:"bg-muted/40 flex items-center gap-1 rounded-lg px-2.5 py-2",children:[(0,d.jsx)("button",{type:"button",onClick:()=>g("/"),className:"text-muted-foreground hover:text-foreground hover:bg-background shrink-0 rounded px-1.5 py-0.5 font-mono text-xs transition-colors",children:"/"}),n?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.ChevronRight,{className:"text-muted-foreground/30 h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"text-muted-foreground/40 font-mono text-xs",children:"..."})]}):null,o.map((a,b)=>{let c=b===o.length-1;return(0,d.jsxs)("span",{className:"flex shrink-0 items-center gap-1",children:[(0,d.jsx)(f.ChevronRight,{className:"text-muted-foreground/30 h-3 w-3"}),c?(0,d.jsx)("span",{className:"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-medium",children:a.label}):(0,d.jsx)("button",{type:"button",onClick:()=>g(a.path),className:"text-muted-foreground hover:text-foreground hover:bg-background rounded px-1.5 py-0.5 font-mono text-xs transition-colors",children:a.label})]},a.path)}),(0,d.jsx)("div",{className:"flex-1"}),(0,d.jsx)("button",{type:"button",onClick:c,className:"text-muted-foreground/40 hover:text-foreground hover:bg-background shrink-0 rounded p-1 transition-colors","aria-label":"Edit path",children:(0,d.jsx)(j.Pencil,{className:"h-3 w-3"})})]})]})}function q({open:a,onOpenChange:b,onSelect:c,initialPath:j}){let[q,r]=(0,e.useState)([]),[s,t]=(0,e.useState)(""),[u,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(!1),y=(0,e.useRef)(!1),[z,A]=(0,e.useState)(0),B=(0,e.useCallback)(async a=>{v(!0),x(!1);try{let b=await o(a);r(b.entries),t(b.currentPath),A(a=>a+1)}catch(b){let a=b instanceof Error?b.message:"Failed to load directory";k.toast.error(a)}finally{v(!1)}},[]);function C(a){B(a)}function D(){c(null),b(!1)}return(0,e.useEffect)(()=>{a&&!y.current&&(y.current=!0,B(j)),a||(y.current=!1,x(!1))},[a,j,B]),(0,d.jsx)(l.Dialog,{open:a,onOpenChange:a=>{a||D()},children:(0,d.jsxs)(l.DialogContent,{className:"flex h-[min(520px,85dvh)] w-full max-w-[460px] flex-col gap-0 overflow-hidden p-0",onCloseAutoFocus:a=>a.preventDefault(),children:[(0,d.jsx)(l.DialogTitle,{className:"sr-only",children:"Select Folder"}),(0,d.jsx)(l.DialogDescription,{className:"sr-only",children:"Navigate to a folder and select it"}),(0,d.jsx)(p,{currentPath:s,isEditing:w,onToggleEdit:()=>x(a=>!a),onNavigate:C}),(0,d.jsx)(n.ScrollArea,{className:"min-h-0 flex-1",children:u&&0===q.length?(0,d.jsx)("div",{className:"space-y-0.5 p-2",children:Array.from({length:8}).map((a,b)=>(0,d.jsxs)("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2.5",style:{opacity:1-.1*b},children:[(0,d.jsx)("div",{className:"bg-muted h-4 w-4 animate-pulse rounded"}),(0,d.jsx)("div",{className:"bg-muted h-3.5 animate-pulse rounded",style:{width:`${40+35*Math.random()}%`}})]},`skeleton-${b}`))}):0===q.length?(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center py-20",children:[(0,d.jsx)(h.FolderOpen,{className:"text-muted-foreground/25 mb-3 h-10 w-10"}),(0,d.jsx)("p",{className:"text-muted-foreground/60 text-sm",children:"Empty folder"})]}):(0,d.jsx)("div",{className:"p-2",children:q.map((a,b)=>(0,d.jsxs)("button",{type:"button",onClick:()=>C(a.path),className:"folder-row group flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left transition-all hover:bg-[var(--color-primary)]/[0.06] active:scale-[0.997]",style:{animationDelay:`${20*b}ms`},children:[(0,d.jsx)(g,{className:"text-muted-foreground/50 group-hover:text-primary h-[18px] w-[18px] shrink-0 transition-colors"}),(0,d.jsx)("span",{className:"text-foreground min-w-0 flex-1 truncate text-[13px] font-medium",children:a.name}),(0,d.jsx)(f.ChevronRight,{className:"text-muted-foreground/0 group-hover:text-muted-foreground/40 h-3.5 w-3.5 shrink-0 transition-all"})]},a.path))},z)}),(0,d.jsxs)("div",{className:"flex items-center gap-2 border-t px-4 py-3",children:[(0,d.jsx)("p",{className:"text-muted-foreground min-w-0 flex-1 truncate font-mono text-[11px] leading-none",children:s||" "}),(0,d.jsx)(m.Button,{variant:"ghost",size:"sm",onClick:D,className:"text-muted-foreground h-8 shrink-0 px-3 text-xs",children:"Cancel"}),(0,d.jsxs)(m.Button,{size:"sm",onClick:function(){s&&(c(s),b(!1))},disabled:!s||u,className:"h-8 shrink-0 px-5 text-xs font-medium",children:[u?(0,d.jsx)(i.Loader2,{className:"mr-1.5 h-3 w-3 animate-spin"}):null,"Select"]})]})]})})}a.s(["ReactFileManagerDialog",()=>q],234379),a.s([],421434)},446784,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("40d4837169557e75f0be6d0f89f7fea0ff41eb89fc",b.callServer,void 0,b.findSourceMapURL,"addRepository");a.s(["addRepository",()=>c])},479794,233981,281834,316676,a=>{"use strict";let b=(0,a.i(225700).default)("sliders-horizontal",[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]]);a.s(["SlidersHorizontal",()=>b],479794);var c=a.i(556365),d=a.i(944592),e=a.i(867837),f=a.i(488064),g=a.i(302807);a.i(490370);var h=a.i(224640),i=a.i(385536),j=a.i(118948);function k({actions:a,className:b,style:k}){let{t:l}=(0,h.useTranslation)("web"),[m,n]=(0,d.useState)(!1);return(0,d.useEffect)(()=>{if(m)return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a);function a(a){"Escape"===a.key&&n(!1)}},[m]),(0,c.jsxs)(c.Fragment,{children:[m?(0,c.jsx)("div",{"data-testid":"fab-overlay",className:"fixed inset-0 z-40",onClick:()=>n(!1),"aria-hidden":"true"}):null,(0,c.jsxs)("div",{"data-testid":"floating-action-button",className:(0,i.cn)("relative z-50",b),style:k,children:[(0,c.jsx)("div",{className:(0,i.cn)("absolute start-0 bottom-[calc(100%+24px)] flex flex-col items-start gap-2",!m&&"pointer-events-none"),"data-testid":"fab-actions",children:a.map((b,d)=>{let e=(a.length-1-d)*50;return(0,c.jsxs)("button",{"data-testid":`fab-action-${b.id}`,"aria-label":b.label,disabled:b.disabled??b.loading,className:(0,i.cn)("flex h-10 items-center gap-2.5 rounded-full px-4","bg-background text-foreground shadow-md","border-border border","hover:bg-accent hover:text-accent-foreground","disabled:pointer-events-none disabled:opacity-50","text-sm font-medium whitespace-nowrap",m?"translate-y-0 opacity-100":"pointer-events-none translate-y-0 opacity-0"),style:{transition:`opacity ${m?250:120}ms ease-out ${m?e:0}ms, transform ${m?250:120}ms ease-out ${m?e:0}ms`},onClick:()=>{b.onClick(),n(!1)},children:[(0,c.jsx)("span",{className:"flex h-5 w-5 shrink-0 items-center justify-center",children:b.loading?(0,c.jsx)(f.Loader2,{className:"h-4 w-4 animate-spin"}):b.icon}),(0,c.jsx)("span",{children:b.label})]},b.id)})}),(0,c.jsxs)(j.Button,{size:"icon","data-testid":"fab-trigger","aria-label":l(m?"fab.closeActions":"fab.createNew"),className:(0,i.cn)("relative h-14 w-14 rounded-full shadow-lg","bg-indigo-500 text-white hover:bg-indigo-400 dark:bg-indigo-500 dark:hover:bg-indigo-400","transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95"),onClick:()=>n(a=>!a),children:[(0,c.jsx)(e.Plus,{className:(0,i.cn)("absolute h-7 w-7 stroke-[2.5] transition-all",m?"scale-0 rotate-90 opacity-0":"scale-100 rotate-0 opacity-100"),style:{transitionDuration:"250ms"}}),(0,c.jsx)(g.X,{className:(0,i.cn)("absolute h-6 w-6 stroke-[2.5] transition-all",m?"scale-100 rotate-0 opacity-100":"scale-0 -rotate-90 opacity-0"),style:{transitionDuration:"250ms"}})]})]})]})}a.s(["FloatingActionButton",()=>k],233981),a.s([],281834);var l=a.i(645670),m=a.i(390920),n=a.i(289111);let o=(0,n.createServerReference)("40c4d25fb30555d92bf75dd650e2cce9b8be92dc0b",n.callServer,void 0,n.findSourceMapURL,"createProjectFolder");function p({open:a,onOpenChange:b,onCreated:e}){let[g,h]=(0,d.useState)(""),[i,k]=(0,d.useState)(!1),[n,p]=(0,d.useState)(null);(0,d.useEffect)(()=>{a&&(h(""),k(!1),p(null))},[a]);let q=async a=>{a.preventDefault();let c=g.trim();if(!c||i)return;k(!0),p(null);let d=await o(c);if(!d.ok||!d.path){p(d.error??"Failed to create project."),k(!1);return}e(d.path),b(!1)};return(0,c.jsx)(l.Dialog,{open:a,onOpenChange:b,children:(0,c.jsx)(l.DialogContent,{className:"max-w-sm",children:(0,c.jsxs)("form",{onSubmit:q,children:[(0,c.jsxs)(l.DialogHeader,{children:[(0,c.jsx)(l.DialogTitle,{children:"New project"}),(0,c.jsx)(l.DialogDescription,{children:"Create an empty project folder inside your Shep home directory. Git will be initialised automatically when the project is added."})]}),(0,c.jsxs)("div",{className:"py-4",children:[(0,c.jsx)(m.Input,{autoFocus:!0,value:g,onChange:a=>{h(a.target.value),n&&p(null)},placeholder:"my-prototype",disabled:i,"data-testid":"new-project-name-input"}),n?(0,c.jsx)("p",{className:"text-destructive mt-2 text-xs",role:"alert",children:n}):null]}),(0,c.jsxs)(l.DialogFooter,{children:[(0,c.jsx)(j.Button,{type:"button",variant:"ghost",onClick:()=>b(!1),disabled:i,children:"Cancel"}),(0,c.jsx)(j.Button,{type:"submit",disabled:!g.trim()||i,children:i?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(f.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),"Creating…"]}):"Create project"})]})]})})})}a.s(["NewProjectDialog",()=>p],316676)},609615,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("40d0ac4c8ca5c179014f909f203d903942417295df",b.callServer,void 0,b.findSourceMapURL,"archiveFeature");a.s(["archiveFeature",()=>c])},464577,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("40c64b253cb9310f09f151401d5eb06957db761efa",b.callServer,void 0,b.findSourceMapURL,"unarchiveFeature");a.s(["unarchiveFeature",()=>c])},969887,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("783175472a45c2823bb1c4751b36e777308131d27d",b.callServer,void 0,b.findSourceMapURL,"deleteFeature");a.s(["deleteFeature",()=>c])}];
1
+ module.exports=[857411,a=>{"use strict";var b=a.i(556365),c=a.i(944592),d=a.i(193967),e=a.i(232791),f=a.i(488064),g=a.i(882014),h=a.i(103942),i=a.i(69428),j=a.i(771716),k=a.i(872016),l=a.i(302807);a.i(490370);var m=a.i(224640),n=a.i(385536),o=a.i(289111);let p=(0,o.createServerReference)("402a7da73158b6bd6c8fb8ab5b0344dc0e0f08e228",o.callServer,void 0,o.findSourceMapURL,"createProjectAndFeature"),q=(0,o.createServerReference)("402b7881a750d5c7c7125153b65fdd64c555ddcdc2",o.callServer,void 0,o.findSourceMapURL,"createApplication");var r=a.i(644018),s=a.i(961781);a.i(200307);var t=a.i(730931);a.i(548822);var u=a.i(85655),v=a.i(182934),w=a.i(675192),x=a.i(409260);let y=["application","fast","spec"],z={application:{icon:g.LayoutGrid,label:"Application",placeholder:"Build a modern e-commerce storefront with product catalog...",suggestions:["A landing page with hero, features, and pricing sections","Full-stack SaaS app with auth, billing, and dashboard","Mobile-first social media app with real-time chat","Personal portfolio with blog and project showcase"]},fast:{icon:h.Zap,label:"Fast",placeholder:"Add a dark mode toggle to the settings page...",suggestions:["Add pagination to the users list endpoint","Fix the broken logout redirect","Add input validation to the signup form","Refactor the API error handling middleware"]},spec:{icon:i.ClipboardList,label:"Spec Driven",placeholder:"Implement a role-based access control system with audit logging...",suggestions:["OAuth2 authentication with SSO and MFA support","Event-driven notification system with email and push","REST API with versioning, rate limiting, and OpenAPI docs","Data pipeline with ETL, validation, and monitoring"]}};function A({onRepositorySelect:a,onApplicationCreated:g,onClose:h,className:i}){let{t:o}=(0,m.useTranslation)("web"),[A,B]=(0,c.useState)(""),[C,D]=(0,c.useState)(void 0),[E,F]=(0,c.useState)(void 0);(0,c.useEffect)(()=>{(0,r.getDefaultAgentAndModel)().then(a=>{D(b=>b??a.agentType),F(b=>b??a.model)})},[]);let[G,H]=(0,c.useState)("application"),[I,J]=(0,c.useState)(!1),[K,L]=(0,c.useState)(null),[M,N]=(0,c.useState)(!1),O=(0,c.useRef)(null),P=(0,x.useAttachments)(),Q=!!a,R=Q?G:"application",S=(0,c.useCallback)(()=>{H(a=>{let b=y.indexOf(a);return y[(b+1)%y.length]})},[]);(0,c.useEffect)(()=>{let b=b=>{"Escape"===b.key&&h&&h(),"Tab"===b.key&&b.shiftKey&&a&&(b.preventDefault(),S())};return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[h,S,a]);let T=(0,c.useCallback)(async()=>{if(A.trim()&&!I){J(!0),L(null);try{if("application"!==R&&a){let b=await p({description:A.trim(),attachments:P.completedAttachments.map(a=>({path:a.path,name:a.name,notes:a.notes})),agentType:C,model:E,fast:"fast"===R});if(b.error){L(b.error),J(!1);return}b.repositoryPath&&a?.(b.repositoryPath),b.feature&&b.repositoryPath&&window.dispatchEvent(new CustomEvent("shep:feature-created",{detail:{featureId:b.feature.id,name:b.feature.name,description:b.feature.description,repositoryPath:b.repositoryPath}}))}else{let a=await q({description:A.trim(),agentType:C,modelOverride:E,initialPrompt:A.trim()});if(a.error){L(a.error),J(!1);return}a.application&&g?.(a.application.id)}}catch{L("Something went wrong. Please try again."),J(!1)}}},[A,I,R,P.completedAttachments,C,E,a,g]),U=(0,c.useCallback)(a=>{"Enter"===a.key&&(a.ctrlKey||a.metaKey)&&(a.preventDefault(),T())},[T]),V=(0,c.useCallback)(async()=>{try{let a=await fetch("/api/dialog/pick-files");if(!a.ok)return;let b=await a.json();if(!b.paths?.length)return;for(let a of b.paths){let b=await fetch("/api/attachments/upload-from-path",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:a,sessionId:"onboarding"})});if(!b.ok)continue;let c=await b.json();P.addAttachment(c)}}catch{}},[P.addAttachment]),W=(0,c.useCallback)(a=>{B(a),O.current?.focus()},[]),X=z[R],Y=X.icon;return(0,b.jsxs)("div",{"data-testid":"control-center-empty-state",className:(0,n.cn)("relative flex h-full w-full flex-col items-center justify-center overflow-hidden px-8",i),children:[(0,b.jsx)("div",{className:"onboard-bg pointer-events-none absolute inset-0 animate-[onboard-fade-in_1.2s_ease-out_both]"}),h?(0,b.jsx)("button",{type:"button",onClick:h,"aria-label":"Close",className:"text-muted-foreground hover:text-foreground hover:bg-accent/50 absolute top-4 right-4 z-10 cursor-pointer rounded p-1.5 transition-colors",children:(0,b.jsx)(l.X,{className:"h-5 w-5"})}):null,(0,b.jsxs)("div",{className:"relative flex w-full max-w-2xl flex-col items-center",children:[(0,b.jsx)("div",{className:"mb-6 animate-[onboard-logo_0.8s_cubic-bezier(0.16,1,0.3,1)_both]",style:{animationDelay:"0ms"},children:(0,b.jsx)(u.ShepLogo,{size:72,className:"text-foreground"})}),(0,b.jsx)("h1",{className:"text-foreground animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-5xl font-extralight tracking-tight",style:{animationDelay:"120ms"},children:"What do you want to build?"}),(0,b.jsx)("p",{className:"text-muted-foreground mt-3 animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-lg leading-relaxed font-light",style:{animationDelay:"220ms"},children:"Describe your idea and Shep creates the project for you."}),(0,b.jsxs)("div",{className:"mt-10 w-full animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both]",style:{animationDelay:"350ms"},children:[(0,b.jsxs)("div",{onFocus:()=>N(!0),onBlur:()=>N(!1),onDragEnter:P.handleDragEnter,onDragLeave:P.handleDragLeave,onDragOver:P.handleDragOver,onDrop:P.handleDrop,className:(0,n.cn)("flex flex-col rounded-xl border transition-all duration-200","border-border/60 bg-background shadow-sm dark:border-white/10 dark:bg-white/[0.04]",M&&"ring-ring/50 border-ring shadow-md ring-[3px] dark:border-orange-500/40 dark:ring-orange-500/25",P.isDragOver&&"border-primary/50 bg-primary/5",I&&"opacity-70"),children:[(0,b.jsx)("textarea",{ref:O,rows:2,autoFocus:!0,value:A,onChange:a=>B(a.target.value),onKeyDown:U,onPaste:P.handlePaste,placeholder:X.placeholder,disabled:I,className:"text-foreground placeholder:text-muted-foreground/60 max-h-[10rem] min-h-[4.5rem] w-full resize-none border-0 bg-transparent px-4 py-3.5 text-sm leading-relaxed focus:outline-none disabled:cursor-not-allowed"}),P.attachments.length>0?(0,b.jsx)("div",{className:"flex shrink-0 items-center gap-2.5 overflow-x-auto overflow-y-visible px-5 pt-2 pb-2",children:P.attachments.map(a=>(0,b.jsx)(t.AttachmentChip,{name:a.name,size:a.size,mimeType:a.mimeType,path:a.path,onRemove:()=>P.removeAttachment(a.id),loading:a.loading,notes:a.notes,onNotesChange:b=>P.updateNotes(a.id,b)},a.id))}):null,P.uploadError?(0,b.jsx)("p",{className:"text-destructive px-4 pb-2 text-xs",children:P.uploadError}):null,(0,b.jsxs)("div",{className:"border-border/60 flex shrink-0 items-center gap-3 border-t px-3 py-2 dark:border-white/10",children:[(0,b.jsx)(s.AgentModelPicker,{initialAgentType:C??"",initialModel:E??"",mode:"override",showInstallStatus:!0,onAgentModelChange:(a,b)=>{D(a),F(b)},className:"w-55"}),(0,b.jsx)("div",{className:"flex-1"}),Q?(0,b.jsxs)(w.DropdownMenu,{children:[(0,b.jsx)(w.DropdownMenuTrigger,{asChild:!0,children:(0,b.jsxs)("button",{type:"button","data-testid":"build-mode-selector",className:"text-muted-foreground hover:text-foreground hover:bg-accent/50 flex cursor-pointer items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors",children:[(0,b.jsxs)("span",{className:"flex animate-[onboard-fade-up_0.25s_ease-out_both] items-center gap-1.5",children:[(0,b.jsx)(Y,{className:"h-3.5 w-3.5"}),X.label]},R),(0,b.jsx)(j.ChevronDown,{className:"h-3 w-3 opacity-50"})]})}),(0,b.jsx)(w.DropdownMenuContent,{align:"end",className:"min-w-[160px]",children:y.map(a=>{let c=z[a],d=c.icon,e=R===a;return(0,b.jsxs)(w.DropdownMenuItem,{onClick:()=>H(a),"data-testid":`build-mode-${a}`,className:"flex items-center gap-2",children:[(0,b.jsx)(d,{className:"h-3.5 w-3.5"}),(0,b.jsx)("span",{className:"flex-1",children:c.label}),e?(0,b.jsx)(k.Check,{className:"text-foreground h-3.5 w-3.5"}):null]},a)})})]}):null,(0,b.jsxs)(v.Tooltip,{children:[(0,b.jsx)(v.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",onClick:V,disabled:I,"aria-label":o("chat.attachFiles"),className:"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors disabled:opacity-50",children:(0,b.jsx)(e.Paperclip,{className:"h-4 w-4"})})}),(0,b.jsx)(v.TooltipContent,{side:"top",children:o("chat.attachFiles")})]}),(0,b.jsx)("button",{type:"button",onClick:T,disabled:!A.trim()||I,className:(0,n.cn)("bg-foreground text-background inline-flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-lg","hover:bg-foreground/90 disabled:pointer-events-none disabled:opacity-30","transition-all duration-150"),children:I?(0,b.jsx)(f.Loader2,{className:"h-3.5 w-3.5 animate-spin"}):(0,b.jsx)(d.SendHorizontal,{className:"h-3.5 w-3.5"})})]})]}),K?(0,b.jsx)("p",{className:"text-destructive mt-2 text-center text-sm",children:K}):null]}),(0,b.jsx)("div",{className:"mt-6 flex animate-[onboard-fade-up_0.4s_ease-out_both] flex-wrap justify-center gap-2",children:X.suggestions.map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>W(a),disabled:I,className:"text-muted-foreground hover:text-foreground border-border/60 hover:border-border hover:bg-accent/50 cursor-pointer rounded-full border px-3.5 py-1.5 text-xs transition-all duration-150 disabled:opacity-50 dark:border-white/10 dark:hover:border-white/20 dark:hover:bg-white/[0.06]",children:a},a))},R)]})]})}a.s(["ControlCenterEmptyState",()=>A],857411)},893741,a=>{"use strict";let b=(0,a.i(225700).default)("pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);a.s(["Pencil",()=>b],893741)},142527,234379,421434,a=>{"use strict";var b=a.i(225700);let c=(0,b.default)("folder-plus",[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);a.s(["FolderPlus",()=>c],142527);var d=a.i(556365),e=a.i(944592),f=a.i(503410);let g=(0,b.default)("folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);var h=a.i(403195),i=a.i(488064),j=a.i(893741),k=a.i(952313),l=a.i(645670),m=a.i(118948),n=a.i(359706);async function o(a){let b=new URLSearchParams;a&&b.set("path",a);let c=await fetch(`/api/directory/list?${b.toString()}`);if(!c.ok)throw Error((await c.json().catch(()=>({error:"Failed to load directory"}))).error??"Failed to load directory");return c.json()}function p({currentPath:a,isEditing:b,onToggleEdit:c,onNavigate:g}){let h=(0,e.useRef)(null),[i,k]=(0,e.useState)(a);function l(){k(a),c()}(0,e.useEffect)(()=>{k(a)},[a]),(0,e.useEffect)(()=>{b&&h.current&&(h.current.focus(),h.current.select())},[b]);let m=function(a){if(!a)return[];let b=/^[a-zA-Z]:/.test(a),c=b?"\\":"/",d=a.split(/[\\/]/).filter(Boolean),e=[];for(let a=0;a<d.length;a++){let f=b?d.slice(0,a+1).join(c):c+d.slice(0,a+1).join(c);e.push({label:d[a],path:f})}return e}(a),n=m.length>3,o=n?m.slice(-3):m;return(0,d.jsxs)("div",{className:"border-b px-4 py-3",children:[(0,d.jsx)("h2",{className:"text-foreground mb-2.5 text-sm font-semibold tracking-[-0.01em]",children:"Select Folder"}),b?(0,d.jsx)("input",{ref:h,type:"text",value:i,onChange:a=>k(a.target.value),onKeyDown:a=>{if("Enter"===a.key){let b;a.preventDefault(),(b=i.trim())&&g(b)}"Escape"===a.key&&(a.preventDefault(),l())},onBlur:l,className:"bg-muted/60 border-border focus:ring-ring/20 focus:border-ring w-full rounded-lg border px-3 py-2 font-mono text-xs transition-all outline-none focus:ring-2",placeholder:"Type a path and press Enter...",spellCheck:!1,autoComplete:"off"}):(0,d.jsxs)("div",{className:"bg-muted/40 flex items-center gap-1 rounded-lg px-2.5 py-2",children:[(0,d.jsx)("button",{type:"button",onClick:()=>g("/"),className:"text-muted-foreground hover:text-foreground hover:bg-background shrink-0 rounded px-1.5 py-0.5 font-mono text-xs transition-colors",children:"/"}),n?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(f.ChevronRight,{className:"text-muted-foreground/30 h-3 w-3 shrink-0"}),(0,d.jsx)("span",{className:"text-muted-foreground/40 font-mono text-xs",children:"..."})]}):null,o.map((a,b)=>{let c=b===o.length-1;return(0,d.jsxs)("span",{className:"flex shrink-0 items-center gap-1",children:[(0,d.jsx)(f.ChevronRight,{className:"text-muted-foreground/30 h-3 w-3"}),c?(0,d.jsx)("span",{className:"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-medium",children:a.label}):(0,d.jsx)("button",{type:"button",onClick:()=>g(a.path),className:"text-muted-foreground hover:text-foreground hover:bg-background rounded px-1.5 py-0.5 font-mono text-xs transition-colors",children:a.label})]},a.path)}),(0,d.jsx)("div",{className:"flex-1"}),(0,d.jsx)("button",{type:"button",onClick:c,className:"text-muted-foreground/40 hover:text-foreground hover:bg-background shrink-0 rounded p-1 transition-colors","aria-label":"Edit path",children:(0,d.jsx)(j.Pencil,{className:"h-3 w-3"})})]})]})}function q({open:a,onOpenChange:b,onSelect:c,initialPath:j}){let[q,r]=(0,e.useState)([]),[s,t]=(0,e.useState)(""),[u,v]=(0,e.useState)(!1),[w,x]=(0,e.useState)(!1),y=(0,e.useRef)(!1),[z,A]=(0,e.useState)(0),B=(0,e.useCallback)(async a=>{v(!0),x(!1);try{let b=await o(a);r(b.entries),t(b.currentPath),A(a=>a+1)}catch(b){let a=b instanceof Error?b.message:"Failed to load directory";k.toast.error(a)}finally{v(!1)}},[]);function C(a){B(a)}function D(){c(null),b(!1)}return(0,e.useEffect)(()=>{a&&!y.current&&(y.current=!0,B(j)),a||(y.current=!1,x(!1))},[a,j,B]),(0,d.jsx)(l.Dialog,{open:a,onOpenChange:a=>{a||D()},children:(0,d.jsxs)(l.DialogContent,{className:"flex h-[min(520px,85dvh)] w-full max-w-[460px] flex-col gap-0 overflow-hidden p-0",onCloseAutoFocus:a=>a.preventDefault(),children:[(0,d.jsx)(l.DialogTitle,{className:"sr-only",children:"Select Folder"}),(0,d.jsx)(l.DialogDescription,{className:"sr-only",children:"Navigate to a folder and select it"}),(0,d.jsx)(p,{currentPath:s,isEditing:w,onToggleEdit:()=>x(a=>!a),onNavigate:C}),(0,d.jsx)(n.ScrollArea,{className:"min-h-0 flex-1",children:u&&0===q.length?(0,d.jsx)("div",{className:"space-y-0.5 p-2",children:Array.from({length:8}).map((a,b)=>(0,d.jsxs)("div",{className:"flex items-center gap-3 rounded-lg px-3 py-2.5",style:{opacity:1-.1*b},children:[(0,d.jsx)("div",{className:"bg-muted h-4 w-4 animate-pulse rounded"}),(0,d.jsx)("div",{className:"bg-muted h-3.5 animate-pulse rounded",style:{width:`${40+35*Math.random()}%`}})]},`skeleton-${b}`))}):0===q.length?(0,d.jsxs)("div",{className:"flex flex-col items-center justify-center py-20",children:[(0,d.jsx)(h.FolderOpen,{className:"text-muted-foreground/25 mb-3 h-10 w-10"}),(0,d.jsx)("p",{className:"text-muted-foreground/60 text-sm",children:"Empty folder"})]}):(0,d.jsx)("div",{className:"p-2",children:q.map((a,b)=>(0,d.jsxs)("button",{type:"button",onClick:()=>C(a.path),className:"folder-row group flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left transition-all hover:bg-[var(--color-primary)]/[0.06] active:scale-[0.997]",style:{animationDelay:`${20*b}ms`},children:[(0,d.jsx)(g,{className:"text-muted-foreground/50 group-hover:text-primary h-[18px] w-[18px] shrink-0 transition-colors"}),(0,d.jsx)("span",{className:"text-foreground min-w-0 flex-1 truncate text-[13px] font-medium",children:a.name}),(0,d.jsx)(f.ChevronRight,{className:"text-muted-foreground/0 group-hover:text-muted-foreground/40 h-3.5 w-3.5 shrink-0 transition-all"})]},a.path))},z)}),(0,d.jsxs)("div",{className:"flex items-center gap-2 border-t px-4 py-3",children:[(0,d.jsx)("p",{className:"text-muted-foreground min-w-0 flex-1 truncate font-mono text-[11px] leading-none",children:s||" "}),(0,d.jsx)(m.Button,{variant:"ghost",size:"sm",onClick:D,className:"text-muted-foreground h-8 shrink-0 px-3 text-xs",children:"Cancel"}),(0,d.jsxs)(m.Button,{size:"sm",onClick:function(){s&&(c(s),b(!1))},disabled:!s||u,className:"h-8 shrink-0 px-5 text-xs font-medium",children:[u?(0,d.jsx)(i.Loader2,{className:"mr-1.5 h-3 w-3 animate-spin"}):null,"Select"]})]})]})})}a.s(["ReactFileManagerDialog",()=>q],234379),a.s([],421434)},628740,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("40a8e46a1833838a96e4b3f97741ab37054dc3a415",b.callServer,void 0,b.findSourceMapURL,"addRepository");a.s(["addRepository",()=>c])},479794,233981,281834,316676,a=>{"use strict";let b=(0,a.i(225700).default)("sliders-horizontal",[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]]);a.s(["SlidersHorizontal",()=>b],479794);var c=a.i(556365),d=a.i(944592),e=a.i(867837),f=a.i(488064),g=a.i(302807);a.i(490370);var h=a.i(224640),i=a.i(385536),j=a.i(118948);function k({actions:a,className:b,style:k}){let{t:l}=(0,h.useTranslation)("web"),[m,n]=(0,d.useState)(!1);return(0,d.useEffect)(()=>{if(m)return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a);function a(a){"Escape"===a.key&&n(!1)}},[m]),(0,c.jsxs)(c.Fragment,{children:[m?(0,c.jsx)("div",{"data-testid":"fab-overlay",className:"fixed inset-0 z-40",onClick:()=>n(!1),"aria-hidden":"true"}):null,(0,c.jsxs)("div",{"data-testid":"floating-action-button",className:(0,i.cn)("relative z-50",b),style:k,children:[(0,c.jsx)("div",{className:(0,i.cn)("absolute start-0 bottom-[calc(100%+24px)] flex flex-col items-start gap-2",!m&&"pointer-events-none"),"data-testid":"fab-actions",children:a.map((b,d)=>{let e=(a.length-1-d)*50;return(0,c.jsxs)("button",{"data-testid":`fab-action-${b.id}`,"aria-label":b.label,disabled:b.disabled??b.loading,className:(0,i.cn)("flex h-10 items-center gap-2.5 rounded-full px-4","bg-background text-foreground shadow-md","border-border border","hover:bg-accent hover:text-accent-foreground","disabled:pointer-events-none disabled:opacity-50","text-sm font-medium whitespace-nowrap",m?"translate-y-0 opacity-100":"pointer-events-none translate-y-0 opacity-0"),style:{transition:`opacity ${m?250:120}ms ease-out ${m?e:0}ms, transform ${m?250:120}ms ease-out ${m?e:0}ms`},onClick:()=>{b.onClick(),n(!1)},children:[(0,c.jsx)("span",{className:"flex h-5 w-5 shrink-0 items-center justify-center",children:b.loading?(0,c.jsx)(f.Loader2,{className:"h-4 w-4 animate-spin"}):b.icon}),(0,c.jsx)("span",{children:b.label})]},b.id)})}),(0,c.jsxs)(j.Button,{size:"icon","data-testid":"fab-trigger","aria-label":l(m?"fab.closeActions":"fab.createNew"),className:(0,i.cn)("relative h-14 w-14 rounded-full shadow-lg","bg-indigo-500 text-white hover:bg-indigo-400 dark:bg-indigo-500 dark:hover:bg-indigo-400","transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95"),onClick:()=>n(a=>!a),children:[(0,c.jsx)(e.Plus,{className:(0,i.cn)("absolute h-7 w-7 stroke-[2.5] transition-all",m?"scale-0 rotate-90 opacity-0":"scale-100 rotate-0 opacity-100"),style:{transitionDuration:"250ms"}}),(0,c.jsx)(g.X,{className:(0,i.cn)("absolute h-6 w-6 stroke-[2.5] transition-all",m?"scale-100 rotate-0 opacity-100":"scale-0 -rotate-90 opacity-0"),style:{transitionDuration:"250ms"}})]})]})]})}a.s(["FloatingActionButton",()=>k],233981),a.s([],281834);var l=a.i(645670),m=a.i(390920),n=a.i(289111);let o=(0,n.createServerReference)("40da762c4b34966ae0ac466fdc38dd417bb5f12247",n.callServer,void 0,n.findSourceMapURL,"createProjectFolder");function p({open:a,onOpenChange:b,onCreated:e}){let[g,h]=(0,d.useState)(""),[i,k]=(0,d.useState)(!1),[n,p]=(0,d.useState)(null);(0,d.useEffect)(()=>{a&&(h(""),k(!1),p(null))},[a]);let q=async a=>{a.preventDefault();let c=g.trim();if(!c||i)return;k(!0),p(null);let d=await o(c);if(!d.ok||!d.path){p(d.error??"Failed to create project."),k(!1);return}e(d.path),b(!1)};return(0,c.jsx)(l.Dialog,{open:a,onOpenChange:b,children:(0,c.jsx)(l.DialogContent,{className:"max-w-sm",children:(0,c.jsxs)("form",{onSubmit:q,children:[(0,c.jsxs)(l.DialogHeader,{children:[(0,c.jsx)(l.DialogTitle,{children:"New project"}),(0,c.jsx)(l.DialogDescription,{children:"Create an empty project folder inside your Shep home directory. Git will be initialised automatically when the project is added."})]}),(0,c.jsxs)("div",{className:"py-4",children:[(0,c.jsx)(m.Input,{autoFocus:!0,value:g,onChange:a=>{h(a.target.value),n&&p(null)},placeholder:"my-prototype",disabled:i,"data-testid":"new-project-name-input"}),n?(0,c.jsx)("p",{className:"text-destructive mt-2 text-xs",role:"alert",children:n}):null]}),(0,c.jsxs)(l.DialogFooter,{children:[(0,c.jsx)(j.Button,{type:"button",variant:"ghost",onClick:()=>b(!1),disabled:i,children:"Cancel"}),(0,c.jsx)(j.Button,{type:"submit",disabled:!g.trim()||i,children:i?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(f.Loader2,{className:"mr-2 h-4 w-4 animate-spin"}),"Creating…"]}):"Create project"})]})]})})})}a.s(["NewProjectDialog",()=>p],316676)},278135,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("405f73e1d0740c127aafceadc63304676969dbb19a",b.callServer,void 0,b.findSourceMapURL,"archiveFeature");a.s(["archiveFeature",()=>c])},220574,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("4047cfaa45cd7417712356735bfbb78f93a103592a",b.callServer,void 0,b.findSourceMapURL,"unarchiveFeature");a.s(["unarchiveFeature",()=>c])},424530,a=>{"use strict";var b=a.i(289111);let c=(0,b.createServerReference)("782094d73ba803f25ee4b483796e8b0625c3c6564f",b.callServer,void 0,b.findSourceMapURL,"deleteFeature");a.s(["deleteFeature",()=>c])}];
2
2
 
3
- //# sourceMappingURL=_20a56008._.js.map
3
+ //# sourceMappingURL=_f71954a5._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx","../../../../../../../src/presentation/web/app/actions/data%3A388df5%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A4bb77e%20%3Ctext/javascript%3E","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/pencil.ts","../../../../../../../src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-plus.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder.ts","../../../../../../../src/presentation/web/app/actions/data%3A21008c%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/floating-action-button/floating-action-button.tsx","../../../../../../../src/presentation/web/app/actions/data%3A6b414c%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/control-center/new-project-dialog.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/sliders-horizontal.ts","../../../../../../../src/presentation/web/app/actions/data%3Ac5bf50%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A2b3c31%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A7f32d9%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport {\n SendHorizontal,\n Paperclip,\n Loader2,\n LayoutGrid,\n Zap,\n ClipboardList,\n ChevronDown,\n Check,\n X,\n} from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { createProjectAndFeature } from '@/app/actions/create-project-and-feature';\nimport { createApplication } from '@/app/actions/create-application';\nimport { getDefaultAgentAndModel } from '@/app/actions/get-default-agent-and-model';\nimport { AgentModelPicker } from '@/components/features/settings/AgentModelPicker';\nimport { AttachmentChip } from '@/components/common/attachment-chip';\nimport { ShepLogo } from '@/components/common/shep-logo';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { useAttachments } from '@/hooks/use-attachments';\n\ntype BuildMode = 'application' | 'fast' | 'spec';\n\nconst BUILD_MODES: BuildMode[] = ['application', 'fast', 'spec'];\n\nconst BUILD_MODE_CONFIG: Record<\n BuildMode,\n {\n icon: React.ElementType;\n label: string;\n placeholder: string;\n suggestions: string[];\n }\n> = {\n application: {\n icon: LayoutGrid,\n label: 'Application',\n placeholder: 'Build a modern e-commerce storefront with product catalog...',\n suggestions: [\n 'A landing page with hero, features, and pricing sections',\n 'Full-stack SaaS app with auth, billing, and dashboard',\n 'Mobile-first social media app with real-time chat',\n 'Personal portfolio with blog and project showcase',\n ],\n },\n fast: {\n icon: Zap,\n label: 'Fast',\n placeholder: 'Add a dark mode toggle to the settings page...',\n suggestions: [\n 'Add pagination to the users list endpoint',\n 'Fix the broken logout redirect',\n 'Add input validation to the signup form',\n 'Refactor the API error handling middleware',\n ],\n },\n spec: {\n icon: ClipboardList,\n label: 'Spec Driven',\n placeholder: 'Implement a role-based access control system with audit logging...',\n suggestions: [\n 'OAuth2 authentication with SSO and MFA support',\n 'Event-driven notification system with email and push',\n 'REST API with versioning, rate limiting, and OpenAPI docs',\n 'Data pipeline with ETL, validation, and monitoring',\n ],\n },\n};\n\nexport interface ControlCenterEmptyStateProps {\n onRepositorySelect?: (path: string) => void;\n onApplicationCreated?: (applicationId: string) => void;\n onClose?: () => void;\n className?: string;\n}\n\nexport function ControlCenterEmptyState({\n onRepositorySelect,\n onApplicationCreated,\n onClose,\n className,\n}: ControlCenterEmptyStateProps) {\n const { t } = useTranslation('web');\n const [description, setDescription] = useState('');\n // Default agent + model come from the user's settings (the SINGLE\n // source of truth). We seed them from the server action on mount so\n // the picker shows what the system would actually use, and so the\n // values flow through to createApplication even when the user does\n // not interact with the picker. Hardcoding `'claude-code'` here is\n // BANNED — it lies about what's active when the user's settings\n // point elsewhere (e.g. the demo `dev` agent), causing interactive\n // session boots to fail with \"Agent type 'dev' does not support\n // interactive sessions\".\n const [overrideAgent, setOverrideAgent] = useState<string | undefined>(undefined);\n const [overrideModel, setOverrideModel] = useState<string | undefined>(undefined);\n useEffect(() => {\n void getDefaultAgentAndModel().then((d) => {\n setOverrideAgent((prev) => prev ?? d.agentType);\n setOverrideModel((prev) => prev ?? d.model);\n });\n }, []);\n const [buildMode, setBuildMode] = useState<BuildMode>('application');\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isFocused, setIsFocused] = useState(false);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const att = useAttachments();\n\n // Apps-only surface (no onRepositorySelect handler): fast/spec modes don't\n // make sense — there's no canvas to attach a feature to. Force application\n // mode and hide the dropdown so the UI doesn't promise behavior we don't have.\n const showModeDropdown = Boolean(onRepositorySelect);\n const effectiveMode: BuildMode = showModeDropdown ? buildMode : 'application';\n\n // Circular mode switching with Shift+Tab, close overlay with Escape\n const cycleBuildMode = useCallback(() => {\n setBuildMode((prev) => {\n const idx = BUILD_MODES.indexOf(prev);\n return BUILD_MODES[(idx + 1) % BUILD_MODES.length];\n });\n }, []);\n\n useEffect(() => {\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) onClose();\n // Shift+Tab cycles only when the dropdown is actually visible —\n // mutating hidden state would be confusing.\n if (e.key === 'Tab' && e.shiftKey && onRepositorySelect) {\n e.preventDefault();\n cycleBuildMode();\n }\n };\n window.addEventListener('keydown', handleGlobalKeyDown);\n return () => window.removeEventListener('keydown', handleGlobalKeyDown);\n }, [onClose, cycleBuildMode, onRepositorySelect]);\n\n const handleSubmit = useCallback(async () => {\n if (!description.trim() || submitting) return;\n\n setSubmitting(true);\n setError(null);\n\n try {\n // When there's no onRepositorySelect handler (e.g. applications-only\n // surface), fast/spec modes can't navigate to a repository canvas.\n // Route ALL modes through the application creation flow so the user\n // lands on /application/[id] regardless of selected mode.\n const useApplicationFlow = effectiveMode === 'application' || !onRepositorySelect;\n\n if (useApplicationFlow) {\n // The server action creates the app AND synchronously posts the\n // user's prompt as the first interactive chat message, so when we\n // navigate, /application/[id] SSR-loads chat state and the message\n // is visible on first paint. No prompt in the URL, no extra\n // round trip on the client.\n const result = await createApplication({\n description: description.trim(),\n agentType: overrideAgent,\n modelOverride: overrideModel,\n initialPrompt: description.trim(),\n });\n\n if (result.error) {\n setError(result.error);\n setSubmitting(false);\n return;\n }\n\n if (result.application) {\n onApplicationCreated?.(result.application.id);\n }\n } else {\n const result = await createProjectAndFeature({\n description: description.trim(),\n attachments: att.completedAttachments.map((a) => ({\n path: a.path,\n name: a.name,\n notes: a.notes,\n })),\n agentType: overrideAgent,\n model: overrideModel,\n fast: effectiveMode === 'fast',\n });\n\n if (result.error) {\n setError(result.error);\n setSubmitting(false);\n return;\n }\n\n if (result.repositoryPath) {\n onRepositorySelect?.(result.repositoryPath);\n }\n\n if (result.feature && result.repositoryPath) {\n window.dispatchEvent(\n new CustomEvent('shep:feature-created', {\n detail: {\n featureId: result.feature.id,\n name: result.feature.name,\n description: result.feature.description,\n repositoryPath: result.repositoryPath,\n },\n })\n );\n }\n }\n } catch {\n setError('Something went wrong. Please try again.');\n setSubmitting(false);\n }\n }, [\n description,\n submitting,\n effectiveMode,\n att.completedAttachments,\n overrideAgent,\n overrideModel,\n onRepositorySelect,\n onApplicationCreated,\n ]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit]\n );\n\n const handlePickFiles = useCallback(async () => {\n try {\n const res = await fetch('/api/dialog/pick-files');\n if (!res.ok) return;\n const data = (await res.json()) as { paths?: string[] };\n if (!data.paths?.length) return;\n for (const filePath of data.paths) {\n const uploadRes = await fetch('/api/attachments/upload-from-path', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: filePath, sessionId: 'onboarding' }),\n });\n if (!uploadRes.ok) continue;\n const uploaded = (await uploadRes.json()) as {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n path: string;\n };\n att.addAttachment(uploaded);\n }\n } catch {\n // Native picker not available — ignore\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- att.addAttachment is stable\n }, [att.addAttachment]);\n\n const handleSuggestionClick = useCallback((suggestion: string) => {\n setDescription(suggestion);\n textareaRef.current?.focus();\n }, []);\n\n const modeConfig = BUILD_MODE_CONFIG[effectiveMode];\n const ModeIcon = modeConfig.icon;\n\n return (\n <div\n data-testid=\"control-center-empty-state\"\n className={cn(\n 'relative flex h-full w-full flex-col items-center justify-center overflow-hidden px-8',\n className\n )}\n >\n {/* Gradient background — covers canvas dots */}\n <div className=\"onboard-bg pointer-events-none absolute inset-0 animate-[onboard-fade-in_1.2s_ease-out_both]\" />\n\n {/* Close button — only shown when used as overlay */}\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"text-muted-foreground hover:text-foreground hover:bg-accent/50 absolute top-4 right-4 z-10 cursor-pointer rounded p-1.5 transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n ) : null}\n\n <div className=\"relative flex w-full max-w-2xl flex-col items-center\">\n {/* Shep Logo */}\n <div\n className=\"mb-6 animate-[onboard-logo_0.8s_cubic-bezier(0.16,1,0.3,1)_both]\"\n style={{ animationDelay: '0ms' }}\n >\n <ShepLogo size={72} className=\"text-foreground\" />\n </div>\n\n {/* Hero text */}\n <h1\n className=\"text-foreground animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-5xl font-extralight tracking-tight\"\n style={{ animationDelay: '120ms' }}\n >\n What do you want to build?\n </h1>\n <p\n className=\"text-muted-foreground mt-3 animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-lg leading-relaxed font-light\"\n style={{ animationDelay: '220ms' }}\n >\n Describe your idea and Shep creates the project for you.\n </p>\n\n {/* Prompt box */}\n <div\n className=\"mt-10 w-full animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both]\"\n style={{ animationDelay: '350ms' }}\n >\n <div\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onDragEnter={att.handleDragEnter}\n onDragLeave={att.handleDragLeave}\n onDragOver={att.handleDragOver}\n onDrop={att.handleDrop}\n className={cn(\n 'flex flex-col rounded-xl border transition-all duration-200',\n 'border-border/60 bg-background shadow-sm dark:border-white/10 dark:bg-white/[0.04]',\n isFocused &&\n 'ring-ring/50 border-ring shadow-md ring-[3px] dark:border-orange-500/40 dark:ring-orange-500/25',\n att.isDragOver && 'border-primary/50 bg-primary/5',\n submitting && 'opacity-70'\n )}\n >\n {/* Textarea — supports paste for images */}\n <textarea\n ref={textareaRef}\n rows={2}\n autoFocus\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={att.handlePaste}\n placeholder={modeConfig.placeholder}\n disabled={submitting}\n className=\"text-foreground placeholder:text-muted-foreground/60 max-h-[10rem] min-h-[4.5rem] w-full resize-none border-0 bg-transparent px-4 py-3.5 text-sm leading-relaxed focus:outline-none disabled:cursor-not-allowed\"\n />\n\n {/* Attachment chips */}\n {att.attachments.length > 0 ? (\n <div className=\"flex shrink-0 items-center gap-2.5 overflow-x-auto overflow-y-visible px-5 pt-2 pb-2\">\n {att.attachments.map((file) => (\n <AttachmentChip\n key={file.id}\n name={file.name}\n size={file.size}\n mimeType={file.mimeType}\n path={file.path}\n onRemove={() => att.removeAttachment(file.id)}\n loading={file.loading}\n notes={file.notes}\n onNotesChange={(notes) => att.updateNotes(file.id, notes)}\n />\n ))}\n </div>\n ) : null}\n\n {/* Upload error */}\n {att.uploadError ? (\n <p className=\"text-destructive px-4 pb-2 text-xs\">{att.uploadError}</p>\n ) : null}\n\n {/* Controls bar */}\n <div className=\"border-border/60 flex shrink-0 items-center gap-3 border-t px-3 py-2 dark:border-white/10\">\n <AgentModelPicker\n initialAgentType={overrideAgent ?? ''}\n initialModel={overrideModel ?? ''}\n mode=\"override\"\n showInstallStatus\n onAgentModelChange={(agent, model) => {\n setOverrideAgent(agent);\n setOverrideModel(model);\n }}\n className=\"w-55\"\n />\n <div className=\"flex-1\" />\n\n {/* Build mode dropdown — Shift+Tab to cycle. Only shown when\n the surface can actually act on fast/spec (i.e. there's an\n onRepositorySelect handler tied to a canvas). */}\n {showModeDropdown ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-testid=\"build-mode-selector\"\n className=\"text-muted-foreground hover:text-foreground hover:bg-accent/50 flex cursor-pointer items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors\"\n >\n <span\n key={effectiveMode}\n className=\"flex animate-[onboard-fade-up_0.25s_ease-out_both] items-center gap-1.5\"\n >\n <ModeIcon className=\"h-3.5 w-3.5\" />\n {modeConfig.label}\n </span>\n <ChevronDown className=\"h-3 w-3 opacity-50\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"min-w-[160px]\">\n {BUILD_MODES.map((mode) => {\n const cfg = BUILD_MODE_CONFIG[mode];\n const Icon = cfg.icon;\n const isActive = effectiveMode === mode;\n return (\n <DropdownMenuItem\n key={mode}\n onClick={() => setBuildMode(mode)}\n data-testid={`build-mode-${mode}`}\n className=\"flex items-center gap-2\"\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span className=\"flex-1\">{cfg.label}</span>\n {isActive ? <Check className=\"text-foreground h-3.5 w-3.5\" /> : null}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={handlePickFiles}\n disabled={submitting}\n aria-label={t('chat.attachFiles')}\n className=\"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors disabled:opacity-50\"\n >\n <Paperclip className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{t('chat.attachFiles')}</TooltipContent>\n </Tooltip>\n\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!description.trim() || submitting}\n className={cn(\n 'bg-foreground text-background inline-flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-lg',\n 'hover:bg-foreground/90 disabled:pointer-events-none disabled:opacity-30',\n 'transition-all duration-150'\n )}\n >\n {submitting ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <SendHorizontal className=\"h-3.5 w-3.5\" />\n )}\n </button>\n </div>\n </div>\n\n {error ? <p className=\"text-destructive mt-2 text-center text-sm\">{error}</p> : null}\n </div>\n\n {/* Suggestion chips — re-animate on mode change */}\n <div\n key={effectiveMode}\n className=\"mt-6 flex animate-[onboard-fade-up_0.4s_ease-out_both] flex-wrap justify-center gap-2\"\n >\n {modeConfig.suggestions.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n onClick={() => handleSuggestionClick(suggestion)}\n disabled={submitting}\n className=\"text-muted-foreground hover:text-foreground border-border/60 hover:border-border hover:bg-accent/50 cursor-pointer rounded-full border px-3.5 py-1.5 text-xs transition-all duration-150 disabled:opacity-50 dark:border-white/10 dark:hover:border-white/20 dark:hover:bg-white/[0.06]\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40ba17f62f174f4f88aa0ea4a373db347247ae1171\":\"createProjectAndFeature\"},\"src/presentation/web/app/actions/create-project-and-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40ba17f62f174f4f88aa0ea4a373db347247ae1171\",callServer,void 0,findSourceMapURL,\"createProjectAndFeature\");export{$$RSC_SERVER_ACTION_0 as createProjectAndFeature};","/* __next_internal_action_entry_do_not_use__ [{\"40f744f8f8785a86cc8dc9487da8d64ca353d264af\":\"createApplication\"},\"src/presentation/web/app/actions/create-application.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40f744f8f8785a86cc8dc9487da8d64ca353d264af\",callServer,void 0,findSourceMapURL,\"createApplication\");export{$$RSC_SERVER_ACTION_0 as createApplication};","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n];\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIgLz4KICA8cGF0aCBkPSJtMTUgNSA0IDQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/pencil\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 Pencil = createLucideIcon('pencil', __iconNode);\n\nexport default Pencil;\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { ChevronRight, Folder, FolderOpen, Loader2, Pencil } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { ScrollArea } from '@/components/ui/scroll-area';\nimport type {\n DirectoryEntry,\n DirectoryListResponse,\n ReactFileManagerDialogProps,\n} from './react-file-manager-dialog-config';\n\nasync function fetchDirectory(dirPath?: string): Promise<DirectoryListResponse> {\n const params = new URLSearchParams();\n if (dirPath) {\n params.set('path', dirPath);\n }\n const res = await fetch(`/api/directory/list?${params.toString()}`);\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: 'Failed to load directory' }));\n throw new Error(body.error ?? 'Failed to load directory');\n }\n return res.json();\n}\n\nfunction parseBreadcrumbs(currentPath: string) {\n if (!currentPath) return [];\n const isWindows = /^[a-zA-Z]:/.test(currentPath);\n const separator = isWindows ? '\\\\' : '/';\n const parts = currentPath.split(/[\\\\/]/).filter(Boolean);\n\n const crumbs: { label: string; path: string }[] = [];\n for (let i = 0; i < parts.length; i++) {\n const path = isWindows\n ? parts.slice(0, i + 1).join(separator)\n : separator + parts.slice(0, i + 1).join(separator);\n crumbs.push({ label: parts[i], path });\n }\n return crumbs;\n}\n\nconst MAX_VISIBLE_CRUMBS = 3;\n\nfunction AddressBar({\n currentPath,\n isEditing,\n onToggleEdit,\n onNavigate,\n}: {\n currentPath: string;\n isEditing: boolean;\n onToggleEdit: () => void;\n onNavigate: (path: string) => void;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState(currentPath);\n\n useEffect(() => {\n setInputValue(currentPath);\n }, [currentPath]);\n\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n function handleSubmit() {\n const trimmed = inputValue.trim();\n if (trimmed) {\n onNavigate(trimmed);\n }\n }\n\n function closeEdit() {\n setInputValue(currentPath);\n onToggleEdit();\n }\n\n const breadcrumbs = parseBreadcrumbs(currentPath);\n const needsCollapse = breadcrumbs.length > MAX_VISIBLE_CRUMBS;\n const visibleCrumbs = needsCollapse ? breadcrumbs.slice(-MAX_VISIBLE_CRUMBS) : breadcrumbs;\n\n return (\n <div className=\"border-b px-4 py-3\">\n {/* Title */}\n <h2 className=\"text-foreground mb-2.5 text-sm font-semibold tracking-[-0.01em]\">\n Select Folder\n </h2>\n\n {/* Address bar */}\n {isEditing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n closeEdit();\n }\n }}\n onBlur={closeEdit}\n className=\"bg-muted/60 border-border focus:ring-ring/20 focus:border-ring w-full rounded-lg border px-3 py-2 font-mono text-xs transition-all outline-none focus:ring-2\"\n placeholder=\"Type a path and press Enter...\"\n spellCheck={false}\n autoComplete=\"off\"\n />\n ) : (\n <div className=\"bg-muted/40 flex items-center gap-1 rounded-lg px-2.5 py-2\">\n {/* Root */}\n <button\n type=\"button\"\n onClick={() => onNavigate('/')}\n className=\"text-muted-foreground hover:text-foreground hover:bg-background shrink-0 rounded px-1.5 py-0.5 font-mono text-xs transition-colors\"\n >\n /\n </button>\n\n {/* Collapsed middle */}\n {needsCollapse ? (\n <>\n <ChevronRight className=\"text-muted-foreground/30 h-3 w-3 shrink-0\" />\n <span className=\"text-muted-foreground/40 font-mono text-xs\">...</span>\n </>\n ) : null}\n\n {/* Visible crumbs */}\n {visibleCrumbs.map((crumb, i) => {\n const isLast = i === visibleCrumbs.length - 1;\n return (\n <span key={crumb.path} className=\"flex shrink-0 items-center gap-1\">\n <ChevronRight className=\"text-muted-foreground/30 h-3 w-3\" />\n {isLast ? (\n <span className=\"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-medium\">\n {crumb.label}\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={() => onNavigate(crumb.path)}\n className=\"text-muted-foreground hover:text-foreground hover:bg-background rounded px-1.5 py-0.5 font-mono text-xs transition-colors\"\n >\n {crumb.label}\n </button>\n )}\n </span>\n );\n })}\n\n {/* Edit path button — inside the path row */}\n <div className=\"flex-1\" />\n <button\n type=\"button\"\n onClick={onToggleEdit}\n className=\"text-muted-foreground/40 hover:text-foreground hover:bg-background shrink-0 rounded p-1 transition-colors\"\n aria-label=\"Edit path\"\n >\n <Pencil className=\"h-3 w-3\" />\n </button>\n </div>\n )}\n </div>\n );\n}\n\nexport function ReactFileManagerDialog({\n open,\n onOpenChange,\n onSelect,\n initialPath,\n}: ReactFileManagerDialogProps) {\n const [entries, setEntries] = useState<DirectoryEntry[]>([]);\n const [currentPath, setCurrentPath] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [isEditingPath, setIsEditingPath] = useState(false);\n const hasLoadedRef = useRef(false);\n const [renderKey, setRenderKey] = useState(0);\n\n const loadDirectory = useCallback(async (dirPath?: string) => {\n setIsLoading(true);\n setIsEditingPath(false);\n try {\n const data = await fetchDirectory(dirPath);\n setEntries(data.entries);\n setCurrentPath(data.currentPath);\n setRenderKey((k) => k + 1);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load directory';\n toast.error(message);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (open && !hasLoadedRef.current) {\n hasLoadedRef.current = true;\n loadDirectory(initialPath);\n }\n if (!open) {\n hasLoadedRef.current = false;\n setIsEditingPath(false);\n }\n }, [open, initialPath, loadDirectory]);\n\n function handleNavigate(path: string) {\n loadDirectory(path);\n }\n\n function handleSelect() {\n if (currentPath) {\n onSelect(currentPath);\n onOpenChange(false);\n }\n }\n\n function handleCancel() {\n onSelect(null);\n onOpenChange(false);\n }\n\n return (\n <Dialog\n open={open}\n onOpenChange={(isOpen) => {\n if (!isOpen) {\n handleCancel();\n }\n }}\n >\n <DialogContent\n className=\"flex h-[min(520px,85dvh)] w-full max-w-[460px] flex-col gap-0 overflow-hidden p-0\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DialogTitle className=\"sr-only\">Select Folder</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Navigate to a folder and select it\n </DialogDescription>\n\n {/* ── Header with address bar ── */}\n <AddressBar\n currentPath={currentPath}\n isEditing={isEditingPath}\n onToggleEdit={() => setIsEditingPath((v) => !v)}\n onNavigate={handleNavigate}\n />\n\n {/* ── Folder list ── */}\n <ScrollArea className=\"min-h-0 flex-1\">\n {isLoading && entries.length === 0 ? (\n <div className=\"space-y-0.5 p-2\">\n {Array.from({ length: 8 }).map((_, i) => (\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={`skeleton-${i}`}\n className=\"flex items-center gap-3 rounded-lg px-3 py-2.5\"\n style={{ opacity: 1 - i * 0.1 }}\n >\n <div className=\"bg-muted h-4 w-4 animate-pulse rounded\" />\n <div\n className=\"bg-muted h-3.5 animate-pulse rounded\"\n style={{ width: `${40 + Math.random() * 35}%` }}\n />\n </div>\n ))}\n </div>\n ) : entries.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-20\">\n <FolderOpen className=\"text-muted-foreground/25 mb-3 h-10 w-10\" />\n <p className=\"text-muted-foreground/60 text-sm\">Empty folder</p>\n </div>\n ) : (\n <div key={renderKey} className=\"p-2\">\n {entries.map((entry, i) => (\n <button\n key={entry.path}\n type=\"button\"\n onClick={() => handleNavigate(entry.path)}\n className=\"folder-row group flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left transition-all hover:bg-[var(--color-primary)]/[0.06] active:scale-[0.997]\"\n style={{ animationDelay: `${i * 20}ms` }}\n >\n <Folder className=\"text-muted-foreground/50 group-hover:text-primary h-[18px] w-[18px] shrink-0 transition-colors\" />\n <span className=\"text-foreground min-w-0 flex-1 truncate text-[13px] font-medium\">\n {entry.name}\n </span>\n <ChevronRight className=\"text-muted-foreground/0 group-hover:text-muted-foreground/40 h-3.5 w-3.5 shrink-0 transition-all\" />\n </button>\n ))}\n </div>\n )}\n </ScrollArea>\n\n {/* ── Footer ── */}\n <div className=\"flex items-center gap-2 border-t px-4 py-3\">\n <p className=\"text-muted-foreground min-w-0 flex-1 truncate font-mono text-[11px] leading-none\">\n {currentPath || '\\u00A0'}\n </p>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCancel}\n className=\"text-muted-foreground h-8 shrink-0 px-3 text-xs\"\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleSelect}\n disabled={!currentPath || isLoading}\n className=\"h-8 shrink-0 px-5 text-xs font-medium\"\n >\n {isLoading ? <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" /> : null}\n Select\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name FolderPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTB2NiIgLz4KICA8cGF0aCBkPSJNOSAxM2g2IiAvPgogIDxwYXRoIGQ9Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-plus\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 FolderPlus = createLucideIcon('folder-plus', __iconNode);\n\nexport default FolderPlus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name Folder\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/folder\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 Folder = createLucideIcon('folder', __iconNode);\n\nexport default Folder;\n","/* __next_internal_action_entry_do_not_use__ [{\"40d4837169557e75f0be6d0f89f7fea0ff41eb89fc\":\"addRepository\"},\"src/presentation/web/app/actions/add-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40d4837169557e75f0be6d0f89f7fea0ff41eb89fc\",callServer,void 0,findSourceMapURL,\"addRepository\");export{$$RSC_SERVER_ACTION_0 as addRepository};","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { Plus, Loader2, X } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\nexport interface FloatingActionButtonAction {\n /** Unique key for the action. */\n id: string;\n /** Accessible label shown next to the icon. */\n label: string;\n /** Lucide icon component. */\n icon: React.ReactNode;\n /** Called when the action is clicked. */\n onClick: () => void;\n /** Whether the action is currently loading. */\n loading?: boolean;\n /** Whether the action is disabled. */\n disabled?: boolean;\n}\n\nexport interface FloatingActionButtonProps {\n /** Action items shown when the FAB is expanded. */\n actions: FloatingActionButtonAction[];\n /** Additional CSS classes for the wrapper. */\n className?: string;\n /** Inline styles for the wrapper (e.g. dynamic positioning). */\n style?: React.CSSProperties;\n}\n\n/** Stagger delay between each item animation in ms. */\nconst STAGGER_MS = 50;\n\n/** Total animation duration in ms. */\nconst DURATION_MS = 250;\n\n/**\n * (+) FAB with expandable action menu.\n * Renders inline — parent controls positioning.\n */\nexport function FloatingActionButton({ actions, className, style }: FloatingActionButtonProps) {\n const { t } = useTranslation('web');\n const [open, setOpen] = useState(false);\n\n // Close on Escape key\n useEffect(() => {\n if (!open) return;\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open]);\n\n return (\n <>\n {/* Invisible click-outside catcher */}\n {open ? (\n <div\n data-testid=\"fab-overlay\"\n className=\"fixed inset-0 z-40\"\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n ) : null}\n\n <div\n data-testid=\"floating-action-button\"\n className={cn('relative z-50', className)}\n style={style}\n >\n {/* Action chips — expand upward */}\n <div\n className={cn(\n 'absolute start-0 bottom-[calc(100%+24px)] flex flex-col items-start gap-2',\n !open && 'pointer-events-none'\n )}\n data-testid=\"fab-actions\"\n >\n {actions.map((action, i) => {\n const openDelay = (actions.length - 1 - i) * STAGGER_MS;\n\n return (\n <button\n key={action.id}\n data-testid={`fab-action-${action.id}`}\n aria-label={action.label}\n disabled={action.disabled ?? action.loading}\n className={cn(\n 'flex h-10 items-center gap-2.5 rounded-full px-4',\n 'bg-background text-foreground shadow-md',\n 'border-border border',\n 'hover:bg-accent hover:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'text-sm font-medium whitespace-nowrap',\n open ? 'translate-y-0 opacity-100' : 'pointer-events-none translate-y-0 opacity-0'\n )}\n style={{\n transition: `opacity ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms, transform ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms`,\n }}\n onClick={() => {\n action.onClick();\n setOpen(false);\n }}\n >\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {action.loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : action.icon}\n </span>\n <span>{action.label}</span>\n </button>\n );\n })}\n </div>\n\n {/* FAB trigger */}\n <Button\n size=\"icon\"\n data-testid=\"fab-trigger\"\n aria-label={open ? t('fab.closeActions') : t('fab.createNew')}\n className={cn(\n 'relative h-14 w-14 rounded-full shadow-lg',\n 'bg-indigo-500 text-white hover:bg-indigo-400 dark:bg-indigo-500 dark:hover:bg-indigo-400',\n 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95'\n )}\n onClick={() => setOpen((prev) => !prev)}\n >\n <Plus\n className={cn(\n 'absolute h-7 w-7 stroke-[2.5] transition-all',\n open ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100'\n )}\n style={{ transitionDuration: `${DURATION_MS}ms` }}\n />\n <X\n className={cn(\n 'absolute h-6 w-6 stroke-[2.5] transition-all',\n open ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0'\n )}\n style={{ transitionDuration: `${DURATION_MS}ms` }}\n />\n </Button>\n </div>\n </>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40c4d25fb30555d92bf75dd650e2cce9b8be92dc0b\":\"createProjectFolder\"},\"src/presentation/web/app/actions/create-project-folder.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40c4d25fb30555d92bf75dd650e2cce9b8be92dc0b\",callServer,void 0,findSourceMapURL,\"createProjectFolder\");export{$$RSC_SERVER_ACTION_0 as createProjectFolder};","'use client';\n\nimport { useEffect, useState } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { createProjectFolder } from '@/app/actions/create-project-folder';\n\nexport interface NewProjectDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Called with the absolute path of the newly-created project folder. */\n onCreated: (path: string) => void;\n}\n\nexport function NewProjectDialog({ open, onOpenChange, onCreated }: NewProjectDialogProps) {\n const [name, setName] = useState('');\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Reset state every time the dialog opens.\n useEffect(() => {\n if (open) {\n setName('');\n setBusy(false);\n setError(null);\n }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed || busy) return;\n\n setBusy(true);\n setError(null);\n const result = await createProjectFolder(trimmed);\n if (!result.ok || !result.path) {\n setError(result.error ?? 'Failed to create project.');\n setBusy(false);\n return;\n }\n\n // Hand the new path off to the empty state's existing add-repo flow.\n onCreated(result.path);\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-sm\">\n <form onSubmit={handleSubmit}>\n <DialogHeader>\n <DialogTitle>New project</DialogTitle>\n <DialogDescription>\n Create an empty project folder inside your Shep home directory. Git will be\n initialised automatically when the project is added.\n </DialogDescription>\n </DialogHeader>\n <div className=\"py-4\">\n <Input\n autoFocus\n value={name}\n onChange={(e) => {\n setName(e.target.value);\n if (error) setError(null);\n }}\n placeholder=\"my-prototype\"\n disabled={busy}\n data-testid=\"new-project-name-input\"\n />\n {error ? (\n <p className=\"text-destructive mt-2 text-xs\" role=\"alert\">\n {error}\n </p>\n ) : null}\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n disabled={busy}\n >\n Cancel\n </Button>\n <Button type=\"submit\" disabled={!name.trim() || busy}>\n {busy ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Creating…\n </>\n ) : (\n 'Create project'\n )}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M10 5H3', key: '1qgfaw' }],\n ['path', { d: 'M12 19H3', key: 'yhmn1j' }],\n ['path', { d: 'M14 3v4', key: '1sua03' }],\n ['path', { d: 'M16 17v4', key: '1q0r14' }],\n ['path', { d: 'M21 12h-9', key: '1o4lsq' }],\n ['path', { d: 'M21 19h-5', key: '1rlt1p' }],\n ['path', { d: 'M21 5h-7', key: '1oszz2' }],\n ['path', { d: 'M8 10v4', key: 'tgpxqk' }],\n ['path', { d: 'M8 12H3', key: 'a7s4jb' }],\n];\n\n/**\n * @component @name SlidersHorizontal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgNUgzIiAvPgogIDxwYXRoIGQ9Ik0xMiAxOUgzIiAvPgogIDxwYXRoIGQ9Ik0xNCAzdjQiIC8+CiAgPHBhdGggZD0iTTE2IDE3djQiIC8+CiAgPHBhdGggZD0iTTIxIDEyaC05IiAvPgogIDxwYXRoIGQ9Ik0yMSAxOWgtNSIgLz4KICA8cGF0aCBkPSJNMjEgNWgtNyIgLz4KICA8cGF0aCBkPSJNOCAxMHY0IiAvPgogIDxwYXRoIGQ9Ik04IDEySDMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/sliders-horizontal\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 SlidersHorizontal = createLucideIcon('sliders-horizontal', __iconNode);\n\nexport default SlidersHorizontal;\n","/* __next_internal_action_entry_do_not_use__ [{\"40d0ac4c8ca5c179014f909f203d903942417295df\":\"archiveFeature\"},\"src/presentation/web/app/actions/archive-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40d0ac4c8ca5c179014f909f203d903942417295df\",callServer,void 0,findSourceMapURL,\"archiveFeature\");export{$$RSC_SERVER_ACTION_0 as archiveFeature};","/* __next_internal_action_entry_do_not_use__ [{\"40c64b253cb9310f09f151401d5eb06957db761efa\":\"unarchiveFeature\"},\"src/presentation/web/app/actions/unarchive-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40c64b253cb9310f09f151401d5eb06957db761efa\",callServer,void 0,findSourceMapURL,\"unarchiveFeature\");export{$$RSC_SERVER_ACTION_0 as unarchiveFeature};","/* __next_internal_action_entry_do_not_use__ [{\"783175472a45c2823bb1c4751b36e777308131d27d\":\"deleteFeature\"},\"src/presentation/web/app/actions/delete-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"783175472a45c2823bb1c4751b36e777308131d27d\",callServer,void 0,findSourceMapURL,\"deleteFeature\");export{$$RSC_SERVER_ACTION_0 as deleteFeature};"],"names":[],"mappings":"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","ignoreList":[3,5,6,11]}
1
+ {"version":3,"sources":["../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx","../../../../../../../src/presentation/web/app/actions/data%3Ab92f3d%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A0955dd%20%3Ctext/javascript%3E","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/pencil.ts","../../../../../../../src/presentation/web/components/common/react-file-manager-dialog/react-file-manager-dialog.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-plus.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder.ts","../../../../../../../src/presentation/web/app/actions/data%3Ab66261%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/floating-action-button/floating-action-button.tsx","../../../../../../../src/presentation/web/app/actions/data%3A8f3b38%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/control-center/new-project-dialog.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/sliders-horizontal.ts","../../../../../../../src/presentation/web/app/actions/data%3A3416e4%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A8a7f15%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3Ac11708%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport {\n SendHorizontal,\n Paperclip,\n Loader2,\n LayoutGrid,\n Zap,\n ClipboardList,\n ChevronDown,\n Check,\n X,\n} from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { createProjectAndFeature } from '@/app/actions/create-project-and-feature';\nimport { createApplication } from '@/app/actions/create-application';\nimport { getDefaultAgentAndModel } from '@/app/actions/get-default-agent-and-model';\nimport { AgentModelPicker } from '@/components/features/settings/AgentModelPicker';\nimport { AttachmentChip } from '@/components/common/attachment-chip';\nimport { ShepLogo } from '@/components/common/shep-logo';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { useAttachments } from '@/hooks/use-attachments';\n\ntype BuildMode = 'application' | 'fast' | 'spec';\n\nconst BUILD_MODES: BuildMode[] = ['application', 'fast', 'spec'];\n\nconst BUILD_MODE_CONFIG: Record<\n BuildMode,\n {\n icon: React.ElementType;\n label: string;\n placeholder: string;\n suggestions: string[];\n }\n> = {\n application: {\n icon: LayoutGrid,\n label: 'Application',\n placeholder: 'Build a modern e-commerce storefront with product catalog...',\n suggestions: [\n 'A landing page with hero, features, and pricing sections',\n 'Full-stack SaaS app with auth, billing, and dashboard',\n 'Mobile-first social media app with real-time chat',\n 'Personal portfolio with blog and project showcase',\n ],\n },\n fast: {\n icon: Zap,\n label: 'Fast',\n placeholder: 'Add a dark mode toggle to the settings page...',\n suggestions: [\n 'Add pagination to the users list endpoint',\n 'Fix the broken logout redirect',\n 'Add input validation to the signup form',\n 'Refactor the API error handling middleware',\n ],\n },\n spec: {\n icon: ClipboardList,\n label: 'Spec Driven',\n placeholder: 'Implement a role-based access control system with audit logging...',\n suggestions: [\n 'OAuth2 authentication with SSO and MFA support',\n 'Event-driven notification system with email and push',\n 'REST API with versioning, rate limiting, and OpenAPI docs',\n 'Data pipeline with ETL, validation, and monitoring',\n ],\n },\n};\n\nexport interface ControlCenterEmptyStateProps {\n onRepositorySelect?: (path: string) => void;\n onApplicationCreated?: (applicationId: string) => void;\n onClose?: () => void;\n className?: string;\n}\n\nexport function ControlCenterEmptyState({\n onRepositorySelect,\n onApplicationCreated,\n onClose,\n className,\n}: ControlCenterEmptyStateProps) {\n const { t } = useTranslation('web');\n const [description, setDescription] = useState('');\n // Default agent + model come from the user's settings (the SINGLE\n // source of truth). We seed them from the server action on mount so\n // the picker shows what the system would actually use, and so the\n // values flow through to createApplication even when the user does\n // not interact with the picker. Hardcoding `'claude-code'` here is\n // BANNED — it lies about what's active when the user's settings\n // point elsewhere (e.g. the demo `dev` agent), causing interactive\n // session boots to fail with \"Agent type 'dev' does not support\n // interactive sessions\".\n const [overrideAgent, setOverrideAgent] = useState<string | undefined>(undefined);\n const [overrideModel, setOverrideModel] = useState<string | undefined>(undefined);\n useEffect(() => {\n void getDefaultAgentAndModel().then((d) => {\n setOverrideAgent((prev) => prev ?? d.agentType);\n setOverrideModel((prev) => prev ?? d.model);\n });\n }, []);\n const [buildMode, setBuildMode] = useState<BuildMode>('application');\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isFocused, setIsFocused] = useState(false);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const att = useAttachments();\n\n // Apps-only surface (no onRepositorySelect handler): fast/spec modes don't\n // make sense — there's no canvas to attach a feature to. Force application\n // mode and hide the dropdown so the UI doesn't promise behavior we don't have.\n const showModeDropdown = Boolean(onRepositorySelect);\n const effectiveMode: BuildMode = showModeDropdown ? buildMode : 'application';\n\n // Circular mode switching with Shift+Tab, close overlay with Escape\n const cycleBuildMode = useCallback(() => {\n setBuildMode((prev) => {\n const idx = BUILD_MODES.indexOf(prev);\n return BUILD_MODES[(idx + 1) % BUILD_MODES.length];\n });\n }, []);\n\n useEffect(() => {\n const handleGlobalKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && onClose) onClose();\n // Shift+Tab cycles only when the dropdown is actually visible —\n // mutating hidden state would be confusing.\n if (e.key === 'Tab' && e.shiftKey && onRepositorySelect) {\n e.preventDefault();\n cycleBuildMode();\n }\n };\n window.addEventListener('keydown', handleGlobalKeyDown);\n return () => window.removeEventListener('keydown', handleGlobalKeyDown);\n }, [onClose, cycleBuildMode, onRepositorySelect]);\n\n const handleSubmit = useCallback(async () => {\n if (!description.trim() || submitting) return;\n\n setSubmitting(true);\n setError(null);\n\n try {\n // When there's no onRepositorySelect handler (e.g. applications-only\n // surface), fast/spec modes can't navigate to a repository canvas.\n // Route ALL modes through the application creation flow so the user\n // lands on /application/[id] regardless of selected mode.\n const useApplicationFlow = effectiveMode === 'application' || !onRepositorySelect;\n\n if (useApplicationFlow) {\n // The server action creates the app AND synchronously posts the\n // user's prompt as the first interactive chat message, so when we\n // navigate, /application/[id] SSR-loads chat state and the message\n // is visible on first paint. No prompt in the URL, no extra\n // round trip on the client.\n const result = await createApplication({\n description: description.trim(),\n agentType: overrideAgent,\n modelOverride: overrideModel,\n initialPrompt: description.trim(),\n });\n\n if (result.error) {\n setError(result.error);\n setSubmitting(false);\n return;\n }\n\n if (result.application) {\n onApplicationCreated?.(result.application.id);\n }\n } else {\n const result = await createProjectAndFeature({\n description: description.trim(),\n attachments: att.completedAttachments.map((a) => ({\n path: a.path,\n name: a.name,\n notes: a.notes,\n })),\n agentType: overrideAgent,\n model: overrideModel,\n fast: effectiveMode === 'fast',\n });\n\n if (result.error) {\n setError(result.error);\n setSubmitting(false);\n return;\n }\n\n if (result.repositoryPath) {\n onRepositorySelect?.(result.repositoryPath);\n }\n\n if (result.feature && result.repositoryPath) {\n window.dispatchEvent(\n new CustomEvent('shep:feature-created', {\n detail: {\n featureId: result.feature.id,\n name: result.feature.name,\n description: result.feature.description,\n repositoryPath: result.repositoryPath,\n },\n })\n );\n }\n }\n } catch {\n setError('Something went wrong. Please try again.');\n setSubmitting(false);\n }\n }, [\n description,\n submitting,\n effectiveMode,\n att.completedAttachments,\n overrideAgent,\n overrideModel,\n onRepositorySelect,\n onApplicationCreated,\n ]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit]\n );\n\n const handlePickFiles = useCallback(async () => {\n try {\n const res = await fetch('/api/dialog/pick-files');\n if (!res.ok) return;\n const data = (await res.json()) as { paths?: string[] };\n if (!data.paths?.length) return;\n for (const filePath of data.paths) {\n const uploadRes = await fetch('/api/attachments/upload-from-path', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: filePath, sessionId: 'onboarding' }),\n });\n if (!uploadRes.ok) continue;\n const uploaded = (await uploadRes.json()) as {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n path: string;\n };\n att.addAttachment(uploaded);\n }\n } catch {\n // Native picker not available — ignore\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps -- att.addAttachment is stable\n }, [att.addAttachment]);\n\n const handleSuggestionClick = useCallback((suggestion: string) => {\n setDescription(suggestion);\n textareaRef.current?.focus();\n }, []);\n\n const modeConfig = BUILD_MODE_CONFIG[effectiveMode];\n const ModeIcon = modeConfig.icon;\n\n return (\n <div\n data-testid=\"control-center-empty-state\"\n className={cn(\n 'relative flex h-full w-full flex-col items-center justify-center overflow-hidden px-8',\n className\n )}\n >\n {/* Gradient background — covers canvas dots */}\n <div className=\"onboard-bg pointer-events-none absolute inset-0 animate-[onboard-fade-in_1.2s_ease-out_both]\" />\n\n {/* Close button — only shown when used as overlay */}\n {onClose ? (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"text-muted-foreground hover:text-foreground hover:bg-accent/50 absolute top-4 right-4 z-10 cursor-pointer rounded p-1.5 transition-colors\"\n >\n <X className=\"h-5 w-5\" />\n </button>\n ) : null}\n\n <div className=\"relative flex w-full max-w-2xl flex-col items-center\">\n {/* Shep Logo */}\n <div\n className=\"mb-6 animate-[onboard-logo_0.8s_cubic-bezier(0.16,1,0.3,1)_both]\"\n style={{ animationDelay: '0ms' }}\n >\n <ShepLogo size={72} className=\"text-foreground\" />\n </div>\n\n {/* Hero text */}\n <h1\n className=\"text-foreground animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-5xl font-extralight tracking-tight\"\n style={{ animationDelay: '120ms' }}\n >\n What do you want to build?\n </h1>\n <p\n className=\"text-muted-foreground mt-3 animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both] text-center text-lg leading-relaxed font-light\"\n style={{ animationDelay: '220ms' }}\n >\n Describe your idea and Shep creates the project for you.\n </p>\n\n {/* Prompt box */}\n <div\n className=\"mt-10 w-full animate-[onboard-fade-up_0.7s_cubic-bezier(0.16,1,0.3,1)_both]\"\n style={{ animationDelay: '350ms' }}\n >\n <div\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n onDragEnter={att.handleDragEnter}\n onDragLeave={att.handleDragLeave}\n onDragOver={att.handleDragOver}\n onDrop={att.handleDrop}\n className={cn(\n 'flex flex-col rounded-xl border transition-all duration-200',\n 'border-border/60 bg-background shadow-sm dark:border-white/10 dark:bg-white/[0.04]',\n isFocused &&\n 'ring-ring/50 border-ring shadow-md ring-[3px] dark:border-orange-500/40 dark:ring-orange-500/25',\n att.isDragOver && 'border-primary/50 bg-primary/5',\n submitting && 'opacity-70'\n )}\n >\n {/* Textarea — supports paste for images */}\n <textarea\n ref={textareaRef}\n rows={2}\n autoFocus\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={att.handlePaste}\n placeholder={modeConfig.placeholder}\n disabled={submitting}\n className=\"text-foreground placeholder:text-muted-foreground/60 max-h-[10rem] min-h-[4.5rem] w-full resize-none border-0 bg-transparent px-4 py-3.5 text-sm leading-relaxed focus:outline-none disabled:cursor-not-allowed\"\n />\n\n {/* Attachment chips */}\n {att.attachments.length > 0 ? (\n <div className=\"flex shrink-0 items-center gap-2.5 overflow-x-auto overflow-y-visible px-5 pt-2 pb-2\">\n {att.attachments.map((file) => (\n <AttachmentChip\n key={file.id}\n name={file.name}\n size={file.size}\n mimeType={file.mimeType}\n path={file.path}\n onRemove={() => att.removeAttachment(file.id)}\n loading={file.loading}\n notes={file.notes}\n onNotesChange={(notes) => att.updateNotes(file.id, notes)}\n />\n ))}\n </div>\n ) : null}\n\n {/* Upload error */}\n {att.uploadError ? (\n <p className=\"text-destructive px-4 pb-2 text-xs\">{att.uploadError}</p>\n ) : null}\n\n {/* Controls bar */}\n <div className=\"border-border/60 flex shrink-0 items-center gap-3 border-t px-3 py-2 dark:border-white/10\">\n <AgentModelPicker\n initialAgentType={overrideAgent ?? ''}\n initialModel={overrideModel ?? ''}\n mode=\"override\"\n showInstallStatus\n onAgentModelChange={(agent, model) => {\n setOverrideAgent(agent);\n setOverrideModel(model);\n }}\n className=\"w-55\"\n />\n <div className=\"flex-1\" />\n\n {/* Build mode dropdown — Shift+Tab to cycle. Only shown when\n the surface can actually act on fast/spec (i.e. there's an\n onRepositorySelect handler tied to a canvas). */}\n {showModeDropdown ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n type=\"button\"\n data-testid=\"build-mode-selector\"\n className=\"text-muted-foreground hover:text-foreground hover:bg-accent/50 flex cursor-pointer items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors\"\n >\n <span\n key={effectiveMode}\n className=\"flex animate-[onboard-fade-up_0.25s_ease-out_both] items-center gap-1.5\"\n >\n <ModeIcon className=\"h-3.5 w-3.5\" />\n {modeConfig.label}\n </span>\n <ChevronDown className=\"h-3 w-3 opacity-50\" />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"min-w-[160px]\">\n {BUILD_MODES.map((mode) => {\n const cfg = BUILD_MODE_CONFIG[mode];\n const Icon = cfg.icon;\n const isActive = effectiveMode === mode;\n return (\n <DropdownMenuItem\n key={mode}\n onClick={() => setBuildMode(mode)}\n data-testid={`build-mode-${mode}`}\n className=\"flex items-center gap-2\"\n >\n <Icon className=\"h-3.5 w-3.5\" />\n <span className=\"flex-1\">{cfg.label}</span>\n {isActive ? <Check className=\"text-foreground h-3.5 w-3.5\" /> : null}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={handlePickFiles}\n disabled={submitting}\n aria-label={t('chat.attachFiles')}\n className=\"text-muted-foreground hover:text-foreground cursor-pointer rounded p-1 transition-colors disabled:opacity-50\"\n >\n <Paperclip className=\"h-4 w-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{t('chat.attachFiles')}</TooltipContent>\n </Tooltip>\n\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={!description.trim() || submitting}\n className={cn(\n 'bg-foreground text-background inline-flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-lg',\n 'hover:bg-foreground/90 disabled:pointer-events-none disabled:opacity-30',\n 'transition-all duration-150'\n )}\n >\n {submitting ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <SendHorizontal className=\"h-3.5 w-3.5\" />\n )}\n </button>\n </div>\n </div>\n\n {error ? <p className=\"text-destructive mt-2 text-center text-sm\">{error}</p> : null}\n </div>\n\n {/* Suggestion chips — re-animate on mode change */}\n <div\n key={effectiveMode}\n className=\"mt-6 flex animate-[onboard-fade-up_0.4s_ease-out_both] flex-wrap justify-center gap-2\"\n >\n {modeConfig.suggestions.map((suggestion) => (\n <button\n key={suggestion}\n type=\"button\"\n onClick={() => handleSuggestionClick(suggestion)}\n disabled={submitting}\n className=\"text-muted-foreground hover:text-foreground border-border/60 hover:border-border hover:bg-accent/50 cursor-pointer rounded-full border px-3.5 py-1.5 text-xs transition-all duration-150 disabled:opacity-50 dark:border-white/10 dark:hover:border-white/20 dark:hover:bg-white/[0.06]\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"402a7da73158b6bd6c8fb8ab5b0344dc0e0f08e228\":\"createProjectAndFeature\"},\"src/presentation/web/app/actions/create-project-and-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402a7da73158b6bd6c8fb8ab5b0344dc0e0f08e228\",callServer,void 0,findSourceMapURL,\"createProjectAndFeature\");export{$$RSC_SERVER_ACTION_0 as createProjectAndFeature};","/* __next_internal_action_entry_do_not_use__ [{\"402b7881a750d5c7c7125153b65fdd64c555ddcdc2\":\"createApplication\"},\"src/presentation/web/app/actions/create-application.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"402b7881a750d5c7c7125153b65fdd64c555ddcdc2\",callServer,void 0,findSourceMapURL,\"createApplication\");export{$$RSC_SERVER_ACTION_0 as createApplication};","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n];\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIgLz4KICA8cGF0aCBkPSJtMTUgNSA0IDQiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/pencil\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 Pencil = createLucideIcon('pencil', __iconNode);\n\nexport default Pencil;\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { ChevronRight, Folder, FolderOpen, Loader2, Pencil } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { ScrollArea } from '@/components/ui/scroll-area';\nimport type {\n DirectoryEntry,\n DirectoryListResponse,\n ReactFileManagerDialogProps,\n} from './react-file-manager-dialog-config';\n\nasync function fetchDirectory(dirPath?: string): Promise<DirectoryListResponse> {\n const params = new URLSearchParams();\n if (dirPath) {\n params.set('path', dirPath);\n }\n const res = await fetch(`/api/directory/list?${params.toString()}`);\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: 'Failed to load directory' }));\n throw new Error(body.error ?? 'Failed to load directory');\n }\n return res.json();\n}\n\nfunction parseBreadcrumbs(currentPath: string) {\n if (!currentPath) return [];\n const isWindows = /^[a-zA-Z]:/.test(currentPath);\n const separator = isWindows ? '\\\\' : '/';\n const parts = currentPath.split(/[\\\\/]/).filter(Boolean);\n\n const crumbs: { label: string; path: string }[] = [];\n for (let i = 0; i < parts.length; i++) {\n const path = isWindows\n ? parts.slice(0, i + 1).join(separator)\n : separator + parts.slice(0, i + 1).join(separator);\n crumbs.push({ label: parts[i], path });\n }\n return crumbs;\n}\n\nconst MAX_VISIBLE_CRUMBS = 3;\n\nfunction AddressBar({\n currentPath,\n isEditing,\n onToggleEdit,\n onNavigate,\n}: {\n currentPath: string;\n isEditing: boolean;\n onToggleEdit: () => void;\n onNavigate: (path: string) => void;\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState(currentPath);\n\n useEffect(() => {\n setInputValue(currentPath);\n }, [currentPath]);\n\n useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n function handleSubmit() {\n const trimmed = inputValue.trim();\n if (trimmed) {\n onNavigate(trimmed);\n }\n }\n\n function closeEdit() {\n setInputValue(currentPath);\n onToggleEdit();\n }\n\n const breadcrumbs = parseBreadcrumbs(currentPath);\n const needsCollapse = breadcrumbs.length > MAX_VISIBLE_CRUMBS;\n const visibleCrumbs = needsCollapse ? breadcrumbs.slice(-MAX_VISIBLE_CRUMBS) : breadcrumbs;\n\n return (\n <div className=\"border-b px-4 py-3\">\n {/* Title */}\n <h2 className=\"text-foreground mb-2.5 text-sm font-semibold tracking-[-0.01em]\">\n Select Folder\n </h2>\n\n {/* Address bar */}\n {isEditing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n closeEdit();\n }\n }}\n onBlur={closeEdit}\n className=\"bg-muted/60 border-border focus:ring-ring/20 focus:border-ring w-full rounded-lg border px-3 py-2 font-mono text-xs transition-all outline-none focus:ring-2\"\n placeholder=\"Type a path and press Enter...\"\n spellCheck={false}\n autoComplete=\"off\"\n />\n ) : (\n <div className=\"bg-muted/40 flex items-center gap-1 rounded-lg px-2.5 py-2\">\n {/* Root */}\n <button\n type=\"button\"\n onClick={() => onNavigate('/')}\n className=\"text-muted-foreground hover:text-foreground hover:bg-background shrink-0 rounded px-1.5 py-0.5 font-mono text-xs transition-colors\"\n >\n /\n </button>\n\n {/* Collapsed middle */}\n {needsCollapse ? (\n <>\n <ChevronRight className=\"text-muted-foreground/30 h-3 w-3 shrink-0\" />\n <span className=\"text-muted-foreground/40 font-mono text-xs\">...</span>\n </>\n ) : null}\n\n {/* Visible crumbs */}\n {visibleCrumbs.map((crumb, i) => {\n const isLast = i === visibleCrumbs.length - 1;\n return (\n <span key={crumb.path} className=\"flex shrink-0 items-center gap-1\">\n <ChevronRight className=\"text-muted-foreground/30 h-3 w-3\" />\n {isLast ? (\n <span className=\"bg-primary/10 text-primary rounded px-2 py-0.5 font-mono text-xs font-medium\">\n {crumb.label}\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={() => onNavigate(crumb.path)}\n className=\"text-muted-foreground hover:text-foreground hover:bg-background rounded px-1.5 py-0.5 font-mono text-xs transition-colors\"\n >\n {crumb.label}\n </button>\n )}\n </span>\n );\n })}\n\n {/* Edit path button — inside the path row */}\n <div className=\"flex-1\" />\n <button\n type=\"button\"\n onClick={onToggleEdit}\n className=\"text-muted-foreground/40 hover:text-foreground hover:bg-background shrink-0 rounded p-1 transition-colors\"\n aria-label=\"Edit path\"\n >\n <Pencil className=\"h-3 w-3\" />\n </button>\n </div>\n )}\n </div>\n );\n}\n\nexport function ReactFileManagerDialog({\n open,\n onOpenChange,\n onSelect,\n initialPath,\n}: ReactFileManagerDialogProps) {\n const [entries, setEntries] = useState<DirectoryEntry[]>([]);\n const [currentPath, setCurrentPath] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [isEditingPath, setIsEditingPath] = useState(false);\n const hasLoadedRef = useRef(false);\n const [renderKey, setRenderKey] = useState(0);\n\n const loadDirectory = useCallback(async (dirPath?: string) => {\n setIsLoading(true);\n setIsEditingPath(false);\n try {\n const data = await fetchDirectory(dirPath);\n setEntries(data.entries);\n setCurrentPath(data.currentPath);\n setRenderKey((k) => k + 1);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to load directory';\n toast.error(message);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n if (open && !hasLoadedRef.current) {\n hasLoadedRef.current = true;\n loadDirectory(initialPath);\n }\n if (!open) {\n hasLoadedRef.current = false;\n setIsEditingPath(false);\n }\n }, [open, initialPath, loadDirectory]);\n\n function handleNavigate(path: string) {\n loadDirectory(path);\n }\n\n function handleSelect() {\n if (currentPath) {\n onSelect(currentPath);\n onOpenChange(false);\n }\n }\n\n function handleCancel() {\n onSelect(null);\n onOpenChange(false);\n }\n\n return (\n <Dialog\n open={open}\n onOpenChange={(isOpen) => {\n if (!isOpen) {\n handleCancel();\n }\n }}\n >\n <DialogContent\n className=\"flex h-[min(520px,85dvh)] w-full max-w-[460px] flex-col gap-0 overflow-hidden p-0\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n >\n <DialogTitle className=\"sr-only\">Select Folder</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Navigate to a folder and select it\n </DialogDescription>\n\n {/* ── Header with address bar ── */}\n <AddressBar\n currentPath={currentPath}\n isEditing={isEditingPath}\n onToggleEdit={() => setIsEditingPath((v) => !v)}\n onNavigate={handleNavigate}\n />\n\n {/* ── Folder list ── */}\n <ScrollArea className=\"min-h-0 flex-1\">\n {isLoading && entries.length === 0 ? (\n <div className=\"space-y-0.5 p-2\">\n {Array.from({ length: 8 }).map((_, i) => (\n <div\n // eslint-disable-next-line react/no-array-index-key\n key={`skeleton-${i}`}\n className=\"flex items-center gap-3 rounded-lg px-3 py-2.5\"\n style={{ opacity: 1 - i * 0.1 }}\n >\n <div className=\"bg-muted h-4 w-4 animate-pulse rounded\" />\n <div\n className=\"bg-muted h-3.5 animate-pulse rounded\"\n style={{ width: `${40 + Math.random() * 35}%` }}\n />\n </div>\n ))}\n </div>\n ) : entries.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-20\">\n <FolderOpen className=\"text-muted-foreground/25 mb-3 h-10 w-10\" />\n <p className=\"text-muted-foreground/60 text-sm\">Empty folder</p>\n </div>\n ) : (\n <div key={renderKey} className=\"p-2\">\n {entries.map((entry, i) => (\n <button\n key={entry.path}\n type=\"button\"\n onClick={() => handleNavigate(entry.path)}\n className=\"folder-row group flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left transition-all hover:bg-[var(--color-primary)]/[0.06] active:scale-[0.997]\"\n style={{ animationDelay: `${i * 20}ms` }}\n >\n <Folder className=\"text-muted-foreground/50 group-hover:text-primary h-[18px] w-[18px] shrink-0 transition-colors\" />\n <span className=\"text-foreground min-w-0 flex-1 truncate text-[13px] font-medium\">\n {entry.name}\n </span>\n <ChevronRight className=\"text-muted-foreground/0 group-hover:text-muted-foreground/40 h-3.5 w-3.5 shrink-0 transition-all\" />\n </button>\n ))}\n </div>\n )}\n </ScrollArea>\n\n {/* ── Footer ── */}\n <div className=\"flex items-center gap-2 border-t px-4 py-3\">\n <p className=\"text-muted-foreground min-w-0 flex-1 truncate font-mono text-[11px] leading-none\">\n {currentPath || '\\u00A0'}\n </p>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCancel}\n className=\"text-muted-foreground h-8 shrink-0 px-3 text-xs\"\n >\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleSelect}\n disabled={!currentPath || isLoading}\n className=\"h-8 shrink-0 px-5 text-xs font-medium\"\n >\n {isLoading ? <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" /> : null}\n Select\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 10v6', key: '1bos4e' }],\n ['path', { d: 'M9 13h6', key: '1uhe8q' }],\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name FolderPlus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTB2NiIgLz4KICA8cGF0aCBkPSJNOSAxM2g2IiAvPgogIDxwYXRoIGQ9Ik0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/folder-plus\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 FolderPlus = createLucideIcon('folder-plus', __iconNode);\n\nexport default FolderPlus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z',\n key: '1kt360',\n },\n ],\n];\n\n/**\n * @component @name Folder\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/folder\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 Folder = createLucideIcon('folder', __iconNode);\n\nexport default Folder;\n","/* __next_internal_action_entry_do_not_use__ [{\"40a8e46a1833838a96e4b3f97741ab37054dc3a415\":\"addRepository\"},\"src/presentation/web/app/actions/add-repository.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40a8e46a1833838a96e4b3f97741ab37054dc3a415\",callServer,void 0,findSourceMapURL,\"addRepository\");export{$$RSC_SERVER_ACTION_0 as addRepository};","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { Plus, Loader2, X } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\nexport interface FloatingActionButtonAction {\n /** Unique key for the action. */\n id: string;\n /** Accessible label shown next to the icon. */\n label: string;\n /** Lucide icon component. */\n icon: React.ReactNode;\n /** Called when the action is clicked. */\n onClick: () => void;\n /** Whether the action is currently loading. */\n loading?: boolean;\n /** Whether the action is disabled. */\n disabled?: boolean;\n}\n\nexport interface FloatingActionButtonProps {\n /** Action items shown when the FAB is expanded. */\n actions: FloatingActionButtonAction[];\n /** Additional CSS classes for the wrapper. */\n className?: string;\n /** Inline styles for the wrapper (e.g. dynamic positioning). */\n style?: React.CSSProperties;\n}\n\n/** Stagger delay between each item animation in ms. */\nconst STAGGER_MS = 50;\n\n/** Total animation duration in ms. */\nconst DURATION_MS = 250;\n\n/**\n * (+) FAB with expandable action menu.\n * Renders inline — parent controls positioning.\n */\nexport function FloatingActionButton({ actions, className, style }: FloatingActionButtonProps) {\n const { t } = useTranslation('web');\n const [open, setOpen] = useState(false);\n\n // Close on Escape key\n useEffect(() => {\n if (!open) return;\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n setOpen(false);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open]);\n\n return (\n <>\n {/* Invisible click-outside catcher */}\n {open ? (\n <div\n data-testid=\"fab-overlay\"\n className=\"fixed inset-0 z-40\"\n onClick={() => setOpen(false)}\n aria-hidden=\"true\"\n />\n ) : null}\n\n <div\n data-testid=\"floating-action-button\"\n className={cn('relative z-50', className)}\n style={style}\n >\n {/* Action chips — expand upward */}\n <div\n className={cn(\n 'absolute start-0 bottom-[calc(100%+24px)] flex flex-col items-start gap-2',\n !open && 'pointer-events-none'\n )}\n data-testid=\"fab-actions\"\n >\n {actions.map((action, i) => {\n const openDelay = (actions.length - 1 - i) * STAGGER_MS;\n\n return (\n <button\n key={action.id}\n data-testid={`fab-action-${action.id}`}\n aria-label={action.label}\n disabled={action.disabled ?? action.loading}\n className={cn(\n 'flex h-10 items-center gap-2.5 rounded-full px-4',\n 'bg-background text-foreground shadow-md',\n 'border-border border',\n 'hover:bg-accent hover:text-accent-foreground',\n 'disabled:pointer-events-none disabled:opacity-50',\n 'text-sm font-medium whitespace-nowrap',\n open ? 'translate-y-0 opacity-100' : 'pointer-events-none translate-y-0 opacity-0'\n )}\n style={{\n transition: `opacity ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms, transform ${open ? DURATION_MS : 120}ms ease-out ${open ? openDelay : 0}ms`,\n }}\n onClick={() => {\n action.onClick();\n setOpen(false);\n }}\n >\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center\">\n {action.loading ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : action.icon}\n </span>\n <span>{action.label}</span>\n </button>\n );\n })}\n </div>\n\n {/* FAB trigger */}\n <Button\n size=\"icon\"\n data-testid=\"fab-trigger\"\n aria-label={open ? t('fab.closeActions') : t('fab.createNew')}\n className={cn(\n 'relative h-14 w-14 rounded-full shadow-lg',\n 'bg-indigo-500 text-white hover:bg-indigo-400 dark:bg-indigo-500 dark:hover:bg-indigo-400',\n 'transition-all duration-200 hover:scale-105 hover:shadow-xl active:scale-95'\n )}\n onClick={() => setOpen((prev) => !prev)}\n >\n <Plus\n className={cn(\n 'absolute h-7 w-7 stroke-[2.5] transition-all',\n open ? 'scale-0 rotate-90 opacity-0' : 'scale-100 rotate-0 opacity-100'\n )}\n style={{ transitionDuration: `${DURATION_MS}ms` }}\n />\n <X\n className={cn(\n 'absolute h-6 w-6 stroke-[2.5] transition-all',\n open ? 'scale-100 rotate-0 opacity-100' : 'scale-0 -rotate-90 opacity-0'\n )}\n style={{ transitionDuration: `${DURATION_MS}ms` }}\n />\n </Button>\n </div>\n </>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"40da762c4b34966ae0ac466fdc38dd417bb5f12247\":\"createProjectFolder\"},\"src/presentation/web/app/actions/create-project-folder.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"40da762c4b34966ae0ac466fdc38dd417bb5f12247\",callServer,void 0,findSourceMapURL,\"createProjectFolder\");export{$$RSC_SERVER_ACTION_0 as createProjectFolder};","'use client';\n\nimport { useEffect, useState } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Input } from '@/components/ui/input';\nimport { Button } from '@/components/ui/button';\nimport { createProjectFolder } from '@/app/actions/create-project-folder';\n\nexport interface NewProjectDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Called with the absolute path of the newly-created project folder. */\n onCreated: (path: string) => void;\n}\n\nexport function NewProjectDialog({ open, onOpenChange, onCreated }: NewProjectDialogProps) {\n const [name, setName] = useState('');\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Reset state every time the dialog opens.\n useEffect(() => {\n if (open) {\n setName('');\n setBusy(false);\n setError(null);\n }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed || busy) return;\n\n setBusy(true);\n setError(null);\n const result = await createProjectFolder(trimmed);\n if (!result.ok || !result.path) {\n setError(result.error ?? 'Failed to create project.');\n setBusy(false);\n return;\n }\n\n // Hand the new path off to the empty state's existing add-repo flow.\n onCreated(result.path);\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-sm\">\n <form onSubmit={handleSubmit}>\n <DialogHeader>\n <DialogTitle>New project</DialogTitle>\n <DialogDescription>\n Create an empty project folder inside your Shep home directory. Git will be\n initialised automatically when the project is added.\n </DialogDescription>\n </DialogHeader>\n <div className=\"py-4\">\n <Input\n autoFocus\n value={name}\n onChange={(e) => {\n setName(e.target.value);\n if (error) setError(null);\n }}\n placeholder=\"my-prototype\"\n disabled={busy}\n data-testid=\"new-project-name-input\"\n />\n {error ? (\n <p className=\"text-destructive mt-2 text-xs\" role=\"alert\">\n {error}\n </p>\n ) : null}\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n disabled={busy}\n >\n Cancel\n </Button>\n <Button type=\"submit\" disabled={!name.trim() || busy}>\n {busy ? (\n <>\n <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n Creating…\n </>\n ) : (\n 'Create project'\n )}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M10 5H3', key: '1qgfaw' }],\n ['path', { d: 'M12 19H3', key: 'yhmn1j' }],\n ['path', { d: 'M14 3v4', key: '1sua03' }],\n ['path', { d: 'M16 17v4', key: '1q0r14' }],\n ['path', { d: 'M21 12h-9', key: '1o4lsq' }],\n ['path', { d: 'M21 19h-5', key: '1rlt1p' }],\n ['path', { d: 'M21 5h-7', key: '1oszz2' }],\n ['path', { d: 'M8 10v4', key: 'tgpxqk' }],\n ['path', { d: 'M8 12H3', key: 'a7s4jb' }],\n];\n\n/**\n * @component @name SlidersHorizontal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgNUgzIiAvPgogIDxwYXRoIGQ9Ik0xMiAxOUgzIiAvPgogIDxwYXRoIGQ9Ik0xNCAzdjQiIC8+CiAgPHBhdGggZD0iTTE2IDE3djQiIC8+CiAgPHBhdGggZD0iTTIxIDEyaC05IiAvPgogIDxwYXRoIGQ9Ik0yMSAxOWgtNSIgLz4KICA8cGF0aCBkPSJNMjEgNWgtNyIgLz4KICA8cGF0aCBkPSJNOCAxMHY0IiAvPgogIDxwYXRoIGQ9Ik04IDEySDMiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/sliders-horizontal\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 SlidersHorizontal = createLucideIcon('sliders-horizontal', __iconNode);\n\nexport default SlidersHorizontal;\n","/* __next_internal_action_entry_do_not_use__ [{\"405f73e1d0740c127aafceadc63304676969dbb19a\":\"archiveFeature\"},\"src/presentation/web/app/actions/archive-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"405f73e1d0740c127aafceadc63304676969dbb19a\",callServer,void 0,findSourceMapURL,\"archiveFeature\");export{$$RSC_SERVER_ACTION_0 as archiveFeature};","/* __next_internal_action_entry_do_not_use__ [{\"4047cfaa45cd7417712356735bfbb78f93a103592a\":\"unarchiveFeature\"},\"src/presentation/web/app/actions/unarchive-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"4047cfaa45cd7417712356735bfbb78f93a103592a\",callServer,void 0,findSourceMapURL,\"unarchiveFeature\");export{$$RSC_SERVER_ACTION_0 as unarchiveFeature};","/* __next_internal_action_entry_do_not_use__ [{\"782094d73ba803f25ee4b483796e8b0625c3c6564f\":\"deleteFeature\"},\"src/presentation/web/app/actions/delete-feature.ts\",\"\"] */\"use turbopack no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"782094d73ba803f25ee4b483796e8b0625c3c6564f\",callServer,void 0,findSourceMapURL,\"deleteFeature\");export{$$RSC_SERVER_ACTION_0 as deleteFeature};"],"names":[],"mappings":"0DAEA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAWA,EAAA,CAAA,CAAA,QAAA,IAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QCf8N,EAAA,EAAA,CAAA,CAAA,QAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,2BCAvJ,EAAmC,CAAA,EAAA,EAAA,kBAAb,GAAa,AAAqB,EAAC,MAAxB,uCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,qBFkBrc,IAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,CAAA,CAAA,QAAA,IAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,CAAA,CAAA,QAAA,IAAA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAMA,EAAA,EAAA,CAAA,CAAA,QAIA,IAAM,EAA2B,CAAC,cAAe,OAAQ,OAAO,CAE1D,EAQF,CACF,YAAa,CACX,KAAM,EAAA,UAAU,CAChB,MAAO,cACP,YAAa,+DACb,YAAa,CACX,2DACA,wDACA,oDACA,oDACD,AACH,EACA,KAAM,CACJ,KAAM,EAAA,GAAG,CACT,MAAO,OACP,YAAa,iDACb,YAAa,CACX,4CACA,iCACA,0CACA,6CACD,AACH,EACA,KAAM,CACJ,KAAM,EAAA,aAAa,CACnB,MAAO,cACP,YAAa,qEACb,YAAa,CACX,iDACA,uDACA,4DACA,qDAEJ,AADG,CAEL,EASO,SAAS,EAAwB,oBACtC,CAAkB,sBAClB,CAAoB,SACpB,CAAO,WACP,CAAS,CACoB,EAC7B,GAAM,GAAE,CAAC,CAAE,CAAG,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,OACvB,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAUzC,CAAC,EAAe,EAAiB,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,OAA6B,GACjE,CAAC,EAAe,EAAiB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,OAAqB,GACvE,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACH,CAAA,EAAA,EAAA,uBAAA,AAAuB,IAAG,IAAI,CAAC,AAAC,IACnC,EAAiB,AAAC,GAAS,GAAQ,EAAE,SAAS,EAC9C,EAAkB,AAAD,GAAU,GAAQ,EAAE,KAAK,CAC5C,EACF,EAAG,EAAE,EACL,GAAM,CAAC,EAAW,EAAa,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAY,eAChD,CAAC,EAAY,EAAc,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,GAAS,GACvC,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAgB,MAC5C,CAAC,EAAW,EAAa,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,GAAS,GACrC,EAAc,CAAA,EAAA,EAAA,MAAA,AAAM,EAAsB,MAC1C,EAAM,CAAA,EAAA,EAAA,cAAA,AAAc,IAKpB,GAAmB,CAAQ,EAC3B,EAA2B,EAAmB,EAAY,cAG1D,EAAiB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,KACjC,EAAa,AAAC,IACZ,IAAM,EAAM,EAAY,OAAO,CAAC,GAChC,OAAO,CAAW,CAAC,CAAC,GAAM,CAAC,CAAI,EAAY,MAAM,CAAC,AACpD,EACF,EAAG,EAAE,EAEL,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,IAAM,EAAsB,AAAC,IACb,WAAV,EAAE,GAAG,EAAiB,GAAS,IAGrB,QAAV,EAAE,GAAG,EAAc,EAAE,QAAQ,EAAI,IACnC,EAAE,cADqD,AACvC,GAChB,IAEJ,EAEA,OADA,OAAO,gBAAgB,CAAC,UAAW,GAC5B,IAAM,OAAO,mBAAmB,CAAC,UAAW,EACrD,EAAG,CAAC,EAAS,EAAgB,EAAmB,EAEhD,IAAM,EAAe,CAAA,EAAA,EAAA,WAAW,AAAX,EAAY,UAC/B,GAAK,AAAD,EAAa,IAAI,KAAM,GAE3B,GAAc,GACd,EAAS,CAH8B,KAKvC,GAAI,CAOF,GAF6C,CAEzC,eAFuB,CAAmC,EAAC,EAwBxD,CACL,IAAM,EAAS,MAAM,EAAwB,CAC3C,YAAa,EAAY,IAAI,GAC7B,YAAa,EAAI,oBAAoB,CAAC,GAAG,CAAC,AAAC,GAAO,CAAD,CAC/C,KAAM,EAAE,IAAI,CACZ,KAAM,EAAE,IAAI,CACZ,MAAO,EAAE,KAAK,AAChB,CAAC,GACD,UAAW,EACX,MAAO,EACP,KAAwB,SAAlB,CACR,GAEA,GAAI,EAAO,KAAK,CAAE,CAChB,EAAS,EAAO,KAAK,EACrB,GAAc,GACd,MACF,CAEI,EAAO,cAAc,EAAE,AACzB,IAAqB,EAAO,cAAc,EAGxC,EAAO,OAAO,EAAI,EAAO,cAAc,EACzC,AAD2C,OACpC,aAAa,CAClB,IAAI,YAAY,uBAAwB,CACtC,OAAQ,CACN,UAAW,EAAO,OAAO,CAAC,EAAE,CAC5B,KAAM,EAAO,OAAO,CAAC,IAAI,CACzB,YAAa,EAAO,OAAO,CAAC,WAAW,CACvC,eAAgB,EAAO,cACzB,AADuC,CAEzC,GAGN,KAzDwB,CAMtB,IAAM,EAAS,MAAM,EAAkB,CACrC,YAAa,EAAY,IAAI,GAC7B,UAAW,EACX,cAAe,EACf,cAAe,EAAY,IAAI,EACjC,GAEA,GAAI,EAAO,KAAK,CAAE,CAChB,EAAS,EAAO,KAAK,EACrB,GAAc,GACd,MACF,CAEI,EAAO,WAAW,EAAE,AACtB,IAAuB,EAAO,WAAW,CAAC,EAAE,CAEhD,CAoCF,CAAE,KAAM,CACN,EAAS,2CACT,GAAc,EAChB,EACF,EAAG,CACD,EACA,EACA,EACA,EAAI,oBAAoB,CACxB,EACA,EACA,EACA,EACD,EAEK,EAAgB,CAAA,EAAA,EAAA,WAAA,AAAW,EAC/B,AAAC,IACe,UAAV,CAAqB,CAAnB,GAAG,GAAiB,EAAE,OAAO,EAAI,EAAE,OAAA,AAAO,GAAG,CACjD,EAAE,cAAc,GAChB,IAEJ,EACA,CAAC,EAAa,EAGV,EAAkB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,UAClC,GAAI,CACF,IAAM,EAAM,MAAM,MAAM,0BACxB,GAAI,CAAC,EAAI,EAAE,CAAE,OACb,IAAM,EAAQ,MAAM,EAAI,IAAI,GAC5B,GAAI,CAAC,EAAK,KAAK,EAAE,OAAQ,OACzB,IAAK,IAAM,KAAY,EAAK,KAAK,CAAE,CACjC,IAAM,EAAY,MAAM,MAAM,oCAAqC,CACjE,OAAQ,OACR,QAAS,CAAE,eAAgB,kBAAmB,EAC9C,KAAM,KAAK,SAAS,CAAC,CAAE,KAAM,EAAU,UAAW,YAAa,EACjE,GACA,GAAI,CAAC,EAAU,EAAE,CAAE,SACnB,IAAM,EAAY,MAAM,EAAU,IAAI,GAOtC,EAAI,aAAa,CAAC,EACpB,CACF,CAAE,KAAM,CAER,CAEF,EAAG,CAAC,EAAI,aAAa,CAAC,EAEhB,EAAwB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,AAAC,IACzC,EAAe,GACf,EAAY,OAAO,EAAE,OACvB,EAAG,EAAE,EAEC,EAAa,CAAiB,CAAC,EAAc,CAC7C,EAAW,EAAW,IAAI,CAEhC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,cAAY,6BACZ,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,wFACA,aAIF,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,iGAGd,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,EACT,aAAW,QACX,UAAU,qJAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAC,CAAA,CAAC,UAAU,cAEb,KAEJ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,iEAEb,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,UAAU,mEACV,MAAO,CAAE,eAAgB,KAAM,WAE/B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,QAAQ,CAAA,CAAC,KAAM,GAAI,UAAU,sBAIhC,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CACC,UAAU,qIACV,MAAO,CAAE,eAAgB,OAAQ,WAClC,+BAGD,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CACC,UAAU,2IACV,MAAO,CAAE,eAAgB,OAAQ,WAClC,6DAKD,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,UAAU,8EACV,MAAO,CAAE,eAAgB,OAAQ,YAEjC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,QAAS,IAAM,EAAa,IAC5B,OAAQ,IAAM,EAAa,IAC3B,YAAa,EAAI,eAAe,CAChC,YAAa,EAAI,eAAe,CAChC,WAAY,EAAI,cAAc,CAC9B,OAAQ,EAAI,UAAU,CACtB,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,8DACA,qFACA,GACE,kGACF,EAAI,UAAU,EAAI,iCAClB,GAAc,wBAIhB,CAAA,EAAA,EAAA,GAAA,EAAC,WAAA,CACC,IAAK,EACL,KAAM,EACN,SAAS,CAAA,CAAA,EACT,MAAO,EACP,SAAU,AAAC,GAAM,EAAe,EAAE,MAAM,CAAC,KAAK,EAC9C,UAAW,EACX,QAAS,EAAI,WAAW,CACxB,YAAa,EAAW,WAAW,CACnC,SAAU,EACV,UAAU,oNAIX,EAAI,WAAW,CAAC,MAAM,CAAG,EACxB,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,gGACZ,EAAI,WAAW,CAAC,GAAG,CAAE,AAAD,GACnB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAEb,KAAM,EAAK,IAAI,CACf,KAAM,EAAK,IAAI,CACf,SAAU,EAAK,QAAQ,CACvB,KAAM,EAAK,IAAI,CACf,SAAU,IAAM,EAAI,gBAAgB,CAAC,EAAK,EAAE,EAC5C,QAAS,EAAK,OAAO,CACrB,MAAO,EAAK,KAAK,CACjB,cAAe,AAAC,GAAU,EAAI,WAAW,CAAC,EAAK,EAAE,CAAE,IAR9C,EAAK,EAAE,KAYhB,KAGH,EAAI,WAAW,CACd,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,8CAAsC,EAAI,WAAW,GAChE,KAGJ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,sGACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,gBAAgB,CAAA,CACf,iBAAkB,GAAiB,GACnC,aAAc,GAAiB,GAC/B,KAAK,WACL,iBAAiB,CAAA,CAAA,EACjB,mBAAoB,CAAC,EAAO,KAC1B,EAAiB,GACjB,EAAiB,EACnB,EACA,UAAU,SAEZ,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,WAKd,EACC,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,WACX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,mBAAmB,CAAA,CAAC,OAAO,CAAA,CAAA,WAC1B,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CACC,KAAK,SACL,cAAY,sBACZ,UAAU,mKAEV,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAEC,UAAU,oFAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAS,UAAU,gBACnB,EAAW,KAAK,GAJZ,GAMP,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAC,UAAU,4BAG3B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,mBAAmB,CAAA,CAAC,MAAM,MAAM,UAAU,yBACxC,EAAY,GAAG,CAAC,AAAC,IAChB,IAAM,EAAM,CAAiB,CAAC,EAAK,CAC7B,EAAO,EAAI,IAAI,CACf,EAAW,IAAkB,EACnC,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,gBAAgB,CAAA,CAEf,QAAS,IAAM,EAAa,GAC5B,cAAa,CAAC,WAAW,EAAE,EAAA,CAAM,CACjC,UAAU,oCAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAK,UAAU,gBAChB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,kBAAU,EAAI,KAAK,GAClC,EAAW,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CAAC,UAAU,gCAAmC,OAP3D,EAUX,QAGF,KAEJ,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,OAAO,CAAA,WACN,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,OAAO,CAAA,CAAA,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,EACT,SAAU,EACV,aAAY,EAAE,oBACd,UAAU,wHAEV,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,SAAS,CAAA,CAAC,UAAU,gBAGzB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,KAAK,eAAO,EAAE,yBAGhC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,EACT,SAAU,CAAC,EAAY,IAAI,IAAM,EACjC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,mHACA,0EACA,wCAGD,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,6BAEnB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,cAAc,CAAA,CAAC,UAAU,wBAMjC,EAAQ,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,qDAA6C,IAAa,QAIlF,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAEC,UAAU,iGAET,EAAW,WAAW,CAAC,GAAG,CAAC,AAAC,GAC3B,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAEC,KAAK,SACL,QAAS,IAAM,EAAsB,GACrC,SAAU,EACV,UAAU,mSAET,GANI,KALJ,QAkBf,wEGzdA,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAS,CAAT,AAAS,CAAA,AAAT,CAAA,AAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAtBI,CAsBM,AArBxC,CAqBwC,AApBtC,CAoBsC,AApBtC,CAoBsC,AApBtC,CAAA,AAoBsC,CApBtC,AAoBsC,CApBtC,AAoBsC,CApBtC,AAoBsC,CAnBtC,AAmBsC,CAlBpC,AAkBoC,CAlBpC,AAkB8C,CAAA,AAlB3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAET,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAa,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC5C,wFEcA,CAAA,GAAM,EAAA,CAAA,EAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,AAAjB,CAAiB,AAAjB,CAAA,AAAiB,CAAjB,AAAiB,CAAjB,AAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAvB7B,CAuB4C,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAsBgD,CAAA,AAtBhD,CAAA,AAsBgD,CAtBhD,AAsBgD,CAtBhD,AAAQ,AAsBwC,CAtBxC,AAAE,AAsBsC,CAAU,CAtB7C,AAsB6C,CAtB7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAY,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,SAChC,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAW,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,SAGtC,CCDK,ADEH,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,sHACE,CAAA,CAAA,CAAA,QAGX,qDDXA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QEqBA,CDbI,ACaJ,GAAM,EAAA,CAAA,EAAS,CAAA,AAAT,CAAS,AAAT,CAAS,AAAT,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAiB,CAAjB,AAAiB,CAAjB,AAAiB,CAAjB,AAAiB,CAAjB,AAAiB,CAAA,CAAA,CAAA,CAAA,CArBI,CAqBM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAlBtC,AAkBsC,CAjBpC,AAiBoC,CDjBtC,ACiBgD,AAjB9C,CDAF,ACiBgD,ADjBhD,yHCCE,GAAA,CAAA,AAAK,CAAA,CAAA,CAAA,QAGX,CDDW,CAAA,ADPX,IAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAOA,eAAe,EAAe,CAAgB,EAC5C,IAAM,EAAS,IAAI,gBACf,GACF,EAAO,GAAG,CADC,AACA,OAAQ,GAErB,IAAM,EAAM,MAAM,MAAM,CAAC,oBAAoB,EAAE,EAAO,QAAQ,GAAA,CAAI,EAClE,GAAI,CAAC,EAAI,EAAE,CAET,CAFW,KAEL,AAAI,MAAM,CADH,MAAM,EAAI,IAAI,GAAG,KAAK,CAAC,IAAM,CAAC,CAAE,MAAO,2BAA2B,CAAC,CAAA,EAC3D,KAAK,EAAI,4BAEhC,OAAO,EAAI,IAAI,EACjB,CAoBA,SAAS,EAAW,aAClB,CAAW,WACX,CAAS,cACT,CAAY,CACZ,YAAU,CAMX,EACC,IAAM,EAAW,CAAA,EAAA,EAAA,MAAA,AAAM,EAAmB,MACpC,CAAC,EAAY,EAAc,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,GAoB7C,SAAS,IACP,EAAc,GACd,GACF,CArBA,CAAA,EAAA,EAAA,SAAS,AAAT,EAAU,KACR,EAAc,EAChB,EAAG,CAAC,EAAY,EAEhB,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,GAAa,EAAS,OAAO,EAAE,CACjC,EAAS,OAAO,CAAC,KAAK,GACtB,EAAS,OAAO,CAAC,MAAM,GAE3B,EAAG,CAAC,EAAU,EAcd,IAAM,EAvDR,AAuDsB,SAvDb,AAAiB,CAAmB,EAC3C,GAAI,CAAC,EAAa,MAAO,EAAE,CAC3B,IAAM,EAAY,aAAa,IAAI,CAAC,GAC9B,EAAY,EAAY,KAAO,IAC/B,EAAQ,EAAY,KAAK,CAAC,SAAS,MAAM,CAAC,SAE1C,EAA4C,EAAE,CACpD,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,MAAM,CAAE,IAAK,CACrC,IAAM,EAAO,EACT,EAAM,KAAK,CAAC,EAAG,EAAI,GAAG,IAAI,CAAC,GAC3B,EAAY,EAAM,KAAK,CAAC,EAAG,EAAI,GAAG,IAAI,CAAC,GAC3C,EAAO,IAAI,CAAC,CAAE,MAAO,CAAK,CAAC,EAAE,CAAE,MAAK,EACtC,CACA,OAAO,CACT,EAyCuC,GAC/B,EAAgB,EAAY,MAAM,CAxCf,EAwCkB,AACrC,EAAgB,EAAgB,EAAY,KAAK,CAAC,CAAC,GAAsB,EAE/E,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,+BAEb,CAAA,EAAA,EAAA,GAAA,EAAC,KAAA,CAAG,UAAU,2EAAkE,kBAK/E,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CACC,IAAK,EACL,KAAK,OACL,MAAO,EACP,SAAU,AAAC,GAAM,EAAc,EAAE,MAAM,CAAC,KAAK,EAC7C,UAAW,AAAC,IACV,GAAc,UAAV,EAAE,GAAG,CAAc,OACrB,EAAE,cAAc,IA/BpB,EAAU,EAAW,IAAI,KAE7B,EAAW,EA+BL,CACc,UAAU,CAApB,EAAE,GAAG,GACP,EAAE,cAAc,GAChB,IAEJ,EACA,OAAQ,EACR,UAAU,+JACV,YAAY,iCACZ,YAAY,EACZ,aAAa,QAGf,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uEAEb,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAM,EAAW,KAC1B,UAAU,8IACX,MAKA,EACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,8CACxB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,sDAA6C,WAE7D,KAGH,EAAc,GAAG,CAAC,CAAC,EAAO,KACzB,IAAM,EAAS,IAAM,EAAc,MAAM,CAAG,EAC5C,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAsB,UAAU,6CAC/B,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,qCACvB,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,wFACb,EAAM,KAAK,GAGd,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAM,EAAW,EAAM,IAAI,EACpC,UAAU,qIAET,EAAM,KAAK,KAZP,EAAM,IAAI,CAiBzB,GAGA,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,WACf,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACC,KAAK,SACL,QAAS,EACT,UAAU,4GACV,aAAW,qBAEX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,UAAU,mBAM9B,CAEO,SAAS,EAAuB,CACrC,MAAI,cACJ,CAAY,UACZ,CAAQ,aACR,CAAW,CACiB,EAC5B,GAAM,CAAC,EAAS,EAAW,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAmB,EAAE,EACrD,CAAC,EAAa,EAAe,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IACzC,CAAC,EAAW,EAAa,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GACrC,CAAC,EAAe,EAAiB,CAAG,CAAA,EAAA,EAAA,QAAQ,AAAR,GAAS,GAC7C,EAAe,CAAA,EAAA,EAAA,MAAA,AAAM,GAAC,GACtB,CAAC,EAAW,EAAa,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,GAErC,EAAgB,CAAA,EAAA,EAAA,WAAA,AAAW,EAAC,MAAO,IACvC,GAAa,GACb,GAAiB,GACjB,GAAI,CACF,IAAM,EAAO,MAAM,EAAe,GAClC,EAAW,EAAK,OAAO,EACvB,EAAe,EAAK,WAAW,EAC/B,EAAa,AAAC,GAAM,EAAI,EAC1B,CAAE,MAAO,EAAgB,CACvB,IAAM,EAAU,aAAiB,MAAQ,EAAM,OAAO,CAAG,2BACzD,EAAA,KAAK,CAAC,KAAK,CAAC,EACd,QAAU,CACR,GAAa,EACf,CACF,EAAG,EAAE,EAaL,SAAS,EAAe,CAAY,EAClC,EAAc,EAChB,CASA,SAAS,IACP,EAAS,MACT,GAAa,EACf,CAEA,MA3BA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,GAAQ,CAAC,EAAa,OAAO,EAAE,CACjC,EAAa,OAAO,EAAG,EACvB,EAAc,IAEX,IACH,EADS,AACI,OAAO,EAAG,EACvB,GAAiB,GAErB,EAAG,CAAC,EAAM,EAAa,EAAc,EAmBnC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,KAAM,EACN,aAAc,AAAC,IACT,AAAC,GACH,GAEJ,EAHe,SAKf,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,aAAa,CAAA,CACZ,UAAU,oFACV,iBAAkB,AAAC,GAAM,EAAE,cAAc,aAEzC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,CAAC,UAAU,mBAAU,kBACjC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,iBAAiB,CAAA,CAAC,UAAU,mBAAU,uCAKvC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CACC,YAAa,EACb,UAAW,EACX,aAAc,IAAM,EAAiB,AAAC,GAAM,CAAC,GAC7C,WAAY,IAId,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,0BACnB,GAAgC,IAAnB,EAAQ,MAAM,CAC1B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,2BACZ,MAAM,IAAI,CAAC,CAAE,OAAQ,CAAE,GAAG,GAAG,CAAC,CAAC,EAAG,IACjC,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAGC,UAAU,iDACV,MAAO,CAAE,QAAS,EAAQ,GAAJ,CAAQ,YAE9B,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAI,UAAU,2CACf,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,UAAU,uCACV,MAAO,CAAE,MAAO,CAAA,EAAG,GAAK,AAAgB,QAAX,MAAM,GAAQ,CAAC,CAAC,AAAC,MAP3C,CAAC,SAAS,EAAE,EAAA,CAAG,KAYL,IAAnB,EAAQ,MAAM,CAChB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,4DACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,UAAU,CAAA,CAAC,UAAU,4CACtB,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,4CAAmC,oBAGlD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CAAoB,UAAU,eAC5B,EAAQ,GAAG,CAAC,CAAC,EAAO,IACnB,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAEC,KAAK,SACL,QAAS,IAAM,EAAe,EAAM,IAAI,EACxC,UAAU,8JACV,MAAO,CAAE,eAAgB,CAAA,EAAO,GAAJ,EAAO,EAAE,CAAC,AAAC,YAEvC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAO,UAAU,mGAClB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,2EACb,EAAM,IAAI,GAEb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,YAAY,CAAA,CAAC,UAAU,uGAVnB,EAAM,IAAI,IAHX,KAqBd,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,uDACb,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,4FACV,GAAe,MAElB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,QAAQ,QACR,KAAK,KACL,QAAS,EACT,UAAU,2DACX,WAGD,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,KAAK,KACL,QAlGV,CAkGmB,QAlGV,EACH,IACF,EAAS,GACT,GAAa,CAFE,EAInB,EA8FU,SAAU,CAAC,GAAe,EAC1B,UAAU,kDAET,EAAY,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,gCAAmC,KAAK,mBAOpF,sFGvUwM,IAAA,EAAA,EAAA,CAAA,CAAA,QAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,4FI0B7b,CAAA,CAAA,CAAA,CAAA,AAAM,CAAN,CAAM,CAAA,EAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAApB,AAAoB,CAApB,AAAoB,CAAA,AAApB,CAAoB,IAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAvBP,CAClC,AAsB+D,CAAA,AAtB9D,CAAA,AAsB8D,CAtB9D,AAsB8D,CAtB9D,AAsB8D,CAtB9D,AAsB8D,CAtB9D,AAsB8D,CAAA,AAtB9D,CAAQ,AAAR,AAsB8D,CAtBtD,AAAE,AAsBoD,CAAU,CAtB3D,AAsB2D,CAtB3D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAW,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAY,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAW,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAY,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,AAAR,CAAQ,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAa,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAa,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC1C,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAY,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACzC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAW,CAAA,CAAA,CAAA,CAAK,AAAL,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CACxC,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,AAAR,CAAQ,AAAE,EAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,AAAW,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAC1C,4DHXA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,CAAA,CAAA,QAAA,IAAA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QACA,EAAA,EAAA,CAAA,CAAA,QAoCO,SAAS,EAAqB,SAAE,CAAO,CAAE,WAAS,OAAE,CAAK,CAA6B,EAC3F,GAAM,GAAE,CAAC,CAAE,CAAG,CAAA,EAAA,EAAA,cAAA,AAAc,EAAC,OACvB,CAAC,EAAM,EAAQ,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,GAAC,GAcjC,MAXA,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACR,GAAK,CAAD,CAOJ,IAPW,GAMX,SAAS,gBAAgB,CAAC,UAAW,GAC9B,IAAM,SAAS,mBAAmB,CAAC,UAAW,GANrD,SAAS,EAAc,CAAgB,EACjC,AAAU,UAAU,GAAlB,GAAG,EACP,GAAQ,EAEZ,CAGF,EAAG,CAAC,EAAK,EAGP,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WAEG,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,cAAY,cACZ,UAAU,qBACV,QAAS,IAAM,GAAQ,GACvB,cAAY,SAEZ,KAEJ,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CACC,cAAY,yBACZ,UAAW,CAAA,EAAA,EAAA,EAAE,AAAF,EAAG,gBAAiB,GAC/B,MAAO,YAGP,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,CACC,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,4EACA,CAAC,GAAQ,uBAEX,cAAY,uBAEX,EAAQ,GAAG,CAAC,CAAC,EAAQ,KACpB,IAAM,EAAY,CAAC,EAAQ,MAAM,CAAG,GAAI,CAAC,CAnDlC,GAmDsC,AAE7C,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAEC,cAAa,CAAC,WAAW,EAAE,EAAO,EAAE,CAAA,CAAE,CACtC,aAAY,EAAO,KAAK,CACxB,SAAU,EAAO,QAAQ,EAAI,EAAO,OAAO,CAC3C,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,mDACA,0CACA,uBACA,+CACA,mDACA,wCACA,EAAO,4BAA8B,+CAEvC,MAAO,CACL,WAAY,CAAC,QAAQ,EAAE,MAAqB,CAAd,GAAkB,YAAY,EAAE,EAAO,EAAY,EAAE,cAAc,EAAE,EAlEjG,IAkEsH,CAAd,GAAkB,YAAY,EAAE,EAAO,EAAY,EAAE,EAAE,CAAC,AACpK,EACA,QAAS,KACP,EAAO,OAAO,GACd,GAAQ,EACV,YAEA,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,UAAU,6DACb,EAAO,OAAO,CAAG,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,yBAA4B,EAAO,IAAI,GAE9E,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAM,EAAO,KAAK,KAxBd,EAAO,EAAE,CA2BpB,KAIF,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,MAAM,CAAA,CACL,KAAK,OACL,cAAY,cACZ,YAAA,CAAmB,EAAP,EAAS,mBAAwB,GAAF,cAC3C,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,4CACA,2FACA,+EAEF,QAAS,IAAM,EAAQ,AAAC,GAAS,CAAC,aAElC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,IAAI,CAAA,CACH,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,+CACA,EAAO,8BAAgC,kCAEzC,MAAO,CAAE,mBAAoB,GAAG,IAAgB,IAElD,CAAA,EAAA,CAF8C,CAE9C,CAFgD,CAAC,CAEjD,EAAC,EAAA,CAAC,CAAA,CACA,UAAW,CAAA,EAAA,EAAA,EAAA,AAAE,EACX,+CACA,EAAO,iCAAmC,gCAE5C,MAAO,CAAE,mBAAoB,GAAG,IAAgB,QAAJ,EAAE,CAAC,CAM3D,2DEhJA,IAAA,EAAA,EAAA,CAAA,CAAA,QAQA,EAAA,EAAA,CAAA,CAAA,QDZqN,EAAA,EAAA,CAAA,CAAA,QAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,uBCuBnc,SAAS,EAAiB,MAAE,CAAI,CAAE,cAAY,WAAE,CAAS,CAAyB,EACvF,GAAM,CAAC,EAAM,EAAQ,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAC3B,CAAC,EAAM,EAAQ,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,IAC3B,CAAC,EAAO,EAAS,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAgB,MAGlD,CAAA,EAAA,EAAA,SAAA,AAAS,EAAC,KACJ,IACF,EADQ,AACA,IACR,GAAQ,GACR,EAAS,MAEb,EAAG,CAAC,EAAK,EAET,IAAM,EAAe,MAAO,IAC1B,EAAE,cAAc,GAChB,IAAM,EAAU,EAAK,IAAI,GACzB,GAAI,CAAC,GAAW,EAAM,OAEtB,GAAQ,GACR,EAAS,MACT,IAAM,EAAS,MAAM,EAAoB,GACzC,GAAI,CAAC,EAAO,EAAE,EAAI,CAAC,EAAO,IAAI,CAAE,CAC9B,EAAS,EAAO,KAAK,EAAI,6BACzB,EAAQ,IACR,MACF,CAGA,EAAU,EAAO,IAAI,EACrB,GAAa,EACf,EAEA,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAM,EAAM,aAAc,WAChC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,aAAa,CAAA,CAAC,UAAU,oBACvB,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAK,SAAU,YACd,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,WACX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,WAAW,CAAA,UAAC,gBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,iBAAiB,CAAA,UAAC,wIAKrB,CAAA,EAAA,EAAA,IAAA,EAAC,MAAA,CAAI,UAAU,iBACb,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,KAAK,CAAA,CACJ,SAAS,CAAA,CAAA,EACT,MAAO,EACP,SAAU,AAAC,IACT,EAAQ,EAAE,MAAM,CAAC,KAAK,EAClB,GAAO,EAAS,KACtB,EACA,YAAY,eACZ,SAAU,EACV,cAAY,2BAEb,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAE,UAAU,gCAAgC,KAAK,iBAC/C,IAED,QAEN,CAAA,EAAA,EAAA,IAAA,EAAC,EAAA,YAAY,CAAA,WACX,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CACL,KAAK,SACL,QAAQ,QACR,QAAS,IAAM,GAAa,GAC5B,SAAU,WACX,WAGD,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,MAAM,CAAA,CAAC,KAAK,SAAS,SAAU,CAAC,EAAK,IAAI,IAAM,WAC7C,EACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,OAAO,CAAA,CAAC,UAAU,8BAA8B,eAInD,4BAQhB,iEE7G0M,IAAA,EAAA,EAAA,CAAA,CAAA,QAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,yECAjP,IAAA,EAAA,EAAA,CAAA,CAAA,QAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAkC,AAArB,EAAsB,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC,6ECA3P,IAAA,EAAA,EAAA,CAAA,CAAA,QAAsG,IAAM,EAAmC,CAAA,EAAA,EAAA,iBAAb,IAAa,AAAqB,EAAC,KAAxB,wCAAqE,EAAA,UAAU,CAAC,KAAK,EAAE,EAAA,gBAAgB,CAAC","ignoreList":[3,5,6,11]}