@shepai/cli 1.182.0 → 1.182.1-pr550.9abbae3

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 (524) hide show
  1. package/apis/json-schema/Application.yaml +7 -0
  2. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts +1 -1
  3. package/dist/packages/core/src/application/ports/output/repositories/application-repository.interface.d.ts.map +1 -1
  4. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts +8 -1
  5. package/dist/packages/core/src/application/ports/output/services/git-pr-service.interface.d.ts.map +1 -1
  6. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts +3 -3
  7. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.d.ts.map +1 -1
  8. package/dist/packages/core/src/application/use-cases/applications/create-application.use-case.js +13 -21
  9. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts +19 -3
  10. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.d.ts.map +1 -1
  11. package/dist/packages/core/src/application/use-cases/applications/list-applications.use-case.js +37 -4
  12. package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.d.ts +30 -0
  13. package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.d.ts.map +1 -0
  14. package/dist/packages/core/src/application/use-cases/applications/resume-application-workflow.use-case.js +122 -0
  15. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts +13 -1
  16. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.d.ts.map +1 -1
  17. package/dist/packages/core/src/application/use-cases/repositories/import-github-repository.use-case.js +44 -5
  18. package/dist/packages/core/src/domain/generated/output.d.ts +8 -0
  19. package/dist/packages/core/src/domain/generated/output.d.ts.map +1 -1
  20. package/dist/packages/core/src/infrastructure/di/container.d.ts.map +1 -1
  21. package/dist/packages/core/src/infrastructure/di/container.js +5 -0
  22. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts +2 -0
  23. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.d.ts.map +1 -1
  24. package/dist/packages/core/src/infrastructure/persistence/sqlite/mappers/application.mapper.js +4 -0
  25. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.d.ts +5 -0
  26. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.d.ts.map +1 -0
  27. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/058-add-setup-complete-to-applications.js +10 -0
  28. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.d.ts +5 -0
  29. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.d.ts.map +1 -0
  30. package/dist/packages/core/src/infrastructure/persistence/sqlite/migrations/059-add-agent-session-id-to-applications.js +10 -0
  31. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts +1 -1
  32. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.d.ts.map +1 -1
  33. package/dist/packages/core/src/infrastructure/repositories/sqlite-application.repository.js +10 -2
  34. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.d.ts.map +1 -1
  35. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/node-helpers.js +4 -1
  36. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.d.ts.map +1 -1
  37. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/fast-implement.prompt.js +4 -1
  38. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.d.ts.map +1 -1
  39. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/implement.prompt.js +4 -1
  40. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.d.ts.map +1 -1
  41. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/merge-prompts.js +11 -6
  42. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.d.ts +2 -2
  43. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.d.ts.map +1 -1
  44. package/dist/packages/core/src/infrastructure/services/agents/feature-agent/nodes/prompts/pr-branding.js +2 -2
  45. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts +1 -0
  46. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.d.ts.map +1 -1
  47. package/dist/packages/core/src/infrastructure/services/git/git-pr.service.js +18 -2
  48. package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts +16 -5
  49. package/dist/packages/core/src/infrastructure/services/git/pr-branding.d.ts.map +1 -1
  50. package/dist/packages/core/src/infrastructure/services/git/pr-branding.js +38 -7
  51. package/dist/src/presentation/web/app/api/applications/[id]/resume/route.d.ts +20 -0
  52. package/dist/src/presentation/web/app/api/applications/[id]/resume/route.d.ts.map +1 -0
  53. package/dist/src/presentation/web/app/api/applications/[id]/resume/route.js +25 -0
  54. package/dist/src/presentation/web/app/api/applications/[id]/route.d.ts +19 -0
  55. package/dist/src/presentation/web/app/api/applications/[id]/route.d.ts.map +1 -0
  56. package/dist/src/presentation/web/app/api/applications/[id]/route.js +46 -0
  57. package/dist/src/presentation/web/app/api/applications/route.d.ts +9 -0
  58. package/dist/src/presentation/web/app/api/applications/route.d.ts.map +1 -0
  59. package/dist/src/presentation/web/app/api/applications/route.js +20 -0
  60. package/dist/src/presentation/web/app/application/[id]/page.d.ts +4 -4
  61. package/dist/src/presentation/web/app/application/[id]/page.d.ts.map +1 -1
  62. package/dist/src/presentation/web/app/application/[id]/page.js +2 -61
  63. package/dist/src/presentation/web/app/applications/page.d.ts +2 -0
  64. package/dist/src/presentation/web/app/applications/page.d.ts.map +1 -0
  65. package/dist/src/presentation/web/app/applications/page.js +5 -0
  66. package/dist/src/presentation/web/components/assistant-ui/thread.js +2 -2
  67. package/dist/src/presentation/web/components/common/application-node/application-node.d.ts.map +1 -1
  68. package/dist/src/presentation/web/components/common/application-node/application-node.js +3 -37
  69. package/dist/src/presentation/web/components/features/application-page/application-page-loader.d.ts +4 -0
  70. package/dist/src/presentation/web/components/features/application-page/application-page-loader.d.ts.map +1 -0
  71. package/dist/src/presentation/web/components/features/application-page/application-page-loader.js +47 -0
  72. package/dist/src/presentation/web/components/features/application-page/application-page.d.ts.map +1 -1
  73. package/dist/src/presentation/web/components/features/application-page/application-page.js +75 -54
  74. package/dist/src/presentation/web/components/features/application-page/application-page.stories.d.ts.map +1 -1
  75. package/dist/src/presentation/web/components/features/application-page/application-page.stories.js +1 -0
  76. package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts +3 -1
  77. package/dist/src/presentation/web/components/features/application-page/run-dev-button.d.ts.map +1 -1
  78. package/dist/src/presentation/web/components/features/application-page/run-dev-button.js +6 -2
  79. package/dist/src/presentation/web/components/features/applications/application-card.d.ts +7 -0
  80. package/dist/src/presentation/web/components/features/applications/application-card.d.ts.map +1 -0
  81. package/dist/src/presentation/web/components/features/applications/application-card.js +82 -0
  82. package/dist/src/presentation/web/components/features/applications/application-card.stories.d.ts +13 -0
  83. package/dist/src/presentation/web/components/features/applications/application-card.stories.d.ts.map +1 -0
  84. package/dist/src/presentation/web/components/features/applications/application-card.stories.js +69 -0
  85. package/dist/src/presentation/web/components/features/applications/applications-page-client.d.ts +5 -0
  86. package/dist/src/presentation/web/components/features/applications/applications-page-client.d.ts.map +1 -0
  87. package/dist/src/presentation/web/components/features/applications/applications-page-client.js +28 -0
  88. package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.d.ts +10 -0
  89. package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.d.ts.map +1 -0
  90. package/dist/src/presentation/web/components/features/applications/applications-page-client.stories.js +93 -0
  91. package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts +3 -1
  92. package/dist/src/presentation/web/components/features/chat/ChatComposer.d.ts.map +1 -1
  93. package/dist/src/presentation/web/components/features/chat/ChatComposer.js +2 -2
  94. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts +3 -1
  95. package/dist/src/presentation/web/components/features/chat/ChatTab.d.ts.map +1 -1
  96. package/dist/src/presentation/web/components/features/chat/ChatTab.js +4 -3
  97. package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts +6 -1
  98. package/dist/src/presentation/web/components/features/chat/StepTracker.d.ts.map +1 -1
  99. package/dist/src/presentation/web/components/features/chat/StepTracker.js +23 -20
  100. package/dist/src/presentation/web/components/features/control-center/control-center-inner.d.ts.map +1 -1
  101. package/dist/src/presentation/web/components/features/control-center/control-center-inner.js +3 -2
  102. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts +3 -1
  103. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.d.ts.map +1 -1
  104. package/dist/src/presentation/web/components/features/features-canvas/features-canvas.js +2 -2
  105. package/dist/src/presentation/web/components/features/settings/language-settings-section.d.ts.map +1 -1
  106. package/dist/src/presentation/web/components/features/settings/language-settings-section.js +1 -0
  107. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts +1 -0
  108. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.d.ts.map +1 -1
  109. package/dist/src/presentation/web/components/features/settings/language-settings-section.stories.js +5 -0
  110. package/dist/src/presentation/web/components/features/settings/settings-page-client.d.ts.map +1 -1
  111. package/dist/src/presentation/web/components/features/settings/settings-page-client.js +23 -3
  112. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.d.ts.map +1 -1
  113. package/dist/src/presentation/web/components/layouts/app-sidebar/app-sidebar.js +2 -2
  114. package/dist/src/presentation/web/lib/derive-app-status.d.ts +23 -0
  115. package/dist/src/presentation/web/lib/derive-app-status.d.ts.map +1 -0
  116. package/dist/src/presentation/web/lib/derive-app-status.js +89 -0
  117. package/dist/src/presentation/web/lib/i18n.d.ts.map +1 -1
  118. package/dist/src/presentation/web/lib/i18n.js +3 -0
  119. package/dist/translations/ar/web.json +2 -1
  120. package/dist/translations/de/web.json +2 -1
  121. package/dist/translations/en/web.json +2 -1
  122. package/dist/translations/es/web.json +2 -1
  123. package/dist/translations/fr/web.json +2 -1
  124. package/dist/translations/he/web.json +2 -1
  125. package/dist/translations/pt/web.json +2 -1
  126. package/dist/translations/ru/web.json +2 -1
  127. package/dist/translations/uk/web.json +2 -1
  128. package/dist/tsconfig.build.tsbuildinfo +1 -1
  129. package/package.json +1 -1
  130. package/web/.next/BUILD_ID +1 -1
  131. package/web/.next/app-path-routes-manifest.json +4 -0
  132. package/web/.next/build-manifest.json +2 -2
  133. package/web/.next/fallback-build-manifest.json +2 -2
  134. package/web/.next/prerender-manifest.json +3 -3
  135. package/web/.next/required-server-files.js +3 -3
  136. package/web/.next/required-server-files.json +3 -3
  137. package/web/.next/routes-manifest.json +28 -0
  138. package/web/.next/server/app/(dashboard)/@drawer/adopt/page/server-reference-manifest.json +32 -32
  139. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js +5 -5
  140. package/web/.next/server/app/(dashboard)/@drawer/adopt/page.js.nft.json +1 -1
  141. package/web/.next/server/app/(dashboard)/@drawer/adopt/page_client-reference-manifest.js +1 -1
  142. package/web/.next/server/app/(dashboard)/@drawer/chat/page/server-reference-manifest.json +30 -30
  143. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js +5 -5
  144. package/web/.next/server/app/(dashboard)/@drawer/chat/page.js.nft.json +1 -1
  145. package/web/.next/server/app/(dashboard)/@drawer/chat/page_client-reference-manifest.js +1 -1
  146. package/web/.next/server/app/(dashboard)/@drawer/create/page/server-reference-manifest.json +33 -33
  147. package/web/.next/server/app/(dashboard)/@drawer/create/page.js +5 -5
  148. package/web/.next/server/app/(dashboard)/@drawer/create/page.js.nft.json +1 -1
  149. package/web/.next/server/app/(dashboard)/@drawer/create/page_client-reference-manifest.js +1 -1
  150. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
  151. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js +5 -5
  152. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  153. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  154. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page/server-reference-manifest.json +41 -41
  155. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js +5 -5
  156. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page.js.nft.json +1 -1
  157. package/web/.next/server/app/(dashboard)/@drawer/feature/[featureId]/page_client-reference-manifest.js +1 -1
  158. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
  159. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js +5 -5
  160. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  161. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  162. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
  163. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js +5 -5
  164. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page.js.nft.json +1 -1
  165. package/web/.next/server/app/(dashboard)/@drawer/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  166. package/web/.next/server/app/(dashboard)/chat/page/server-reference-manifest.json +30 -30
  167. package/web/.next/server/app/(dashboard)/chat/page.js +5 -5
  168. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  169. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  170. package/web/.next/server/app/(dashboard)/create/page/server-reference-manifest.json +33 -33
  171. package/web/.next/server/app/(dashboard)/create/page.js +5 -5
  172. package/web/.next/server/app/(dashboard)/create/page.js.nft.json +1 -1
  173. package/web/.next/server/app/(dashboard)/create/page_client-reference-manifest.js +1 -1
  174. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page/server-reference-manifest.json +41 -41
  175. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js +5 -5
  176. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page.js.nft.json +1 -1
  177. package/web/.next/server/app/(dashboard)/feature/[featureId]/[tab]/page_client-reference-manifest.js +1 -1
  178. package/web/.next/server/app/(dashboard)/feature/[featureId]/page/server-reference-manifest.json +41 -41
  179. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js +5 -5
  180. package/web/.next/server/app/(dashboard)/feature/[featureId]/page.js.nft.json +1 -1
  181. package/web/.next/server/app/(dashboard)/feature/[featureId]/page_client-reference-manifest.js +1 -1
  182. package/web/.next/server/app/(dashboard)/page/server-reference-manifest.json +30 -30
  183. package/web/.next/server/app/(dashboard)/page.js +5 -5
  184. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  185. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  186. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page/server-reference-manifest.json +31 -31
  187. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js +5 -5
  188. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page.js.nft.json +1 -1
  189. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/[tab]/page_client-reference-manifest.js +1 -1
  190. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page/server-reference-manifest.json +31 -31
  191. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js +5 -5
  192. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page.js.nft.json +1 -1
  193. package/web/.next/server/app/(dashboard)/repository/[repositoryId]/page_client-reference-manifest.js +1 -1
  194. package/web/.next/server/app/_global-error/page.js +1 -1
  195. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  196. package/web/.next/server/app/_global-error.html +2 -2
  197. package/web/.next/server/app/_global-error.rsc +1 -1
  198. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  199. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  200. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  201. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  202. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  203. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +7 -7
  204. package/web/.next/server/app/_not-found/page.js +1 -1
  205. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  206. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  207. package/web/.next/server/app/api/applications/[id]/resume/route/app-paths-manifest.json +3 -0
  208. package/web/.next/server/app/api/applications/[id]/resume/route/build-manifest.json +11 -0
  209. package/web/.next/server/app/api/applications/[id]/resume/route/server-reference-manifest.json +4 -0
  210. package/web/.next/server/app/api/applications/[id]/resume/route.js +7 -0
  211. package/web/.next/server/app/api/applications/[id]/resume/route.js.map +5 -0
  212. package/web/.next/server/app/api/applications/[id]/resume/route.js.nft.json +1 -0
  213. package/web/.next/server/app/api/applications/[id]/resume/route_client-reference-manifest.js +2 -0
  214. package/web/.next/server/app/api/applications/[id]/route/app-paths-manifest.json +3 -0
  215. package/web/.next/server/app/api/applications/[id]/route/build-manifest.json +11 -0
  216. package/web/.next/server/app/api/applications/[id]/route/server-reference-manifest.json +4 -0
  217. package/web/.next/server/app/api/applications/[id]/route.js +7 -0
  218. package/web/.next/server/app/api/applications/[id]/route.js.map +5 -0
  219. package/web/.next/server/app/api/applications/[id]/route.js.nft.json +1 -0
  220. package/web/.next/server/app/api/applications/[id]/route_client-reference-manifest.js +2 -0
  221. package/web/.next/server/app/api/applications/route/app-paths-manifest.json +3 -0
  222. package/web/.next/server/app/api/applications/route/build-manifest.json +11 -0
  223. package/web/.next/server/app/api/applications/route/server-reference-manifest.json +4 -0
  224. package/web/.next/server/app/api/applications/route.js +7 -0
  225. package/web/.next/server/app/api/applications/route.js.map +5 -0
  226. package/web/.next/server/app/api/applications/route.js.nft.json +1 -0
  227. package/web/.next/server/app/api/applications/route_client-reference-manifest.js +2 -0
  228. package/web/.next/server/app/api/attachments/preview/route.js.nft.json +1 -1
  229. package/web/.next/server/app/api/evidence/route.js.nft.json +1 -1
  230. package/web/.next/server/app/api/graph-data/route.js.nft.json +1 -1
  231. package/web/.next/server/app/api/interactive/chat/[featureId]/messages/route.js.nft.json +1 -1
  232. package/web/.next/server/app/application/[id]/page/server-reference-manifest.json +45 -30
  233. package/web/.next/server/app/application/[id]/page.js +3 -3
  234. package/web/.next/server/app/application/[id]/page.js.nft.json +1 -1
  235. package/web/.next/server/app/application/[id]/page_client-reference-manifest.js +1 -1
  236. package/web/.next/server/app/applications/page/app-paths-manifest.json +3 -0
  237. package/web/.next/server/app/applications/page/build-manifest.json +18 -0
  238. package/web/.next/server/app/applications/page/next-font-manifest.json +6 -0
  239. package/web/.next/server/app/applications/page/react-loadable-manifest.json +1 -0
  240. package/web/.next/server/app/applications/page/server-reference-manifest.json +230 -0
  241. package/web/.next/server/app/applications/page.js +19 -0
  242. package/web/.next/server/app/applications/page.js.map +5 -0
  243. package/web/.next/server/app/applications/page.js.nft.json +1 -0
  244. package/web/.next/server/app/applications/page_client-reference-manifest.js +2 -0
  245. package/web/.next/server/app/features/page/server-reference-manifest.json +7 -7
  246. package/web/.next/server/app/features/page.js +1 -1
  247. package/web/.next/server/app/features/page.js.nft.json +1 -1
  248. package/web/.next/server/app/features/page_client-reference-manifest.js +1 -1
  249. package/web/.next/server/app/settings/page/server-reference-manifest.json +10 -10
  250. package/web/.next/server/app/settings/page.js +1 -1
  251. package/web/.next/server/app/settings/page.js.nft.json +1 -1
  252. package/web/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  253. package/web/.next/server/app/skills/page/server-reference-manifest.json +15 -15
  254. package/web/.next/server/app/skills/page.js +1 -1
  255. package/web/.next/server/app/skills/page.js.nft.json +1 -1
  256. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  257. package/web/.next/server/app/tools/page/server-reference-manifest.json +13 -13
  258. package/web/.next/server/app/tools/page.js +1 -1
  259. package/web/.next/server/app/tools/page.js.nft.json +1 -1
  260. package/web/.next/server/app/tools/page_client-reference-manifest.js +1 -1
  261. package/web/.next/server/app/version/page/server-reference-manifest.json +7 -7
  262. package/web/.next/server/app/version/page.js +1 -1
  263. package/web/.next/server/app/version/page.js.nft.json +1 -1
  264. package/web/.next/server/app/version/page_client-reference-manifest.js +1 -1
  265. package/web/.next/server/app-paths-manifest.json +4 -0
  266. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_[id]_route_actions_e31b426d.js +3 -0
  267. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_[id]_route_actions_e31b426d.js.map +1 -0
  268. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_route_actions_2b7d20d0.js +3 -0
  269. package/web/.next/server/chunks/744ca_web__next-internal_server_app_api_applications_route_actions_2b7d20d0.js.map +1 -0
  270. package/web/.next/server/chunks/[root-of-the-server]__3bb635e8._.js +3 -0
  271. package/web/.next/server/chunks/[root-of-the-server]__3bb635e8._.js.map +1 -0
  272. package/web/.next/server/chunks/[root-of-the-server]__a402b567._.js +1 -1
  273. package/web/.next/server/chunks/[root-of-the-server]__ac0027b4._.js +3 -0
  274. package/web/.next/server/chunks/[root-of-the-server]__ac0027b4._.js.map +1 -0
  275. package/web/.next/server/chunks/[root-of-the-server]__b2a4bfcc._.js.map +1 -1
  276. package/web/.next/server/chunks/[root-of-the-server]__cd67a84c._.js.map +1 -1
  277. package/web/.next/server/chunks/[root-of-the-server]__ce82df38._.js +3 -0
  278. package/web/.next/server/chunks/[root-of-the-server]__ce82df38._.js.map +1 -0
  279. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_applications_[id]_resume_route_actions_3a66d646.js +3 -0
  280. package/web/.next/server/chunks/f3a1f__next-internal_server_app_api_applications_[id]_resume_route_actions_3a66d646.js.map +1 -0
  281. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4f9eef62.js +3 -0
  282. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_adopt_page_actions_4f9eef62.js.map +1 -0
  283. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_ffa16a22.js +3 -0
  284. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_@drawer_chat_page_actions_ffa16a22.js.map +1 -0
  285. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_a1a998f9.js +3 -0
  286. package/web/.next/server/chunks/ssr/744ca_web__next-internal_server_app_(dashboard)_chat_page_actions_a1a998f9.js.map +1 -0
  287. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js +1 -1
  288. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_create-drawer-client_tsx_5e26fc0a._.js.map +1 -1
  289. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js +2 -2
  290. package/web/.next/server/chunks/ssr/744ca_web_components_common_control-center-drawer_feature-drawer-client_tsx_e9755fc8._.js.map +1 -1
  291. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js +3 -0
  292. package/web/.next/server/chunks/ssr/744ca_web_components_features_applications_applications-page-client_tsx_d0db9938._.js.map +1 -0
  293. package/web/.next/server/chunks/ssr/[root-of-the-server]__04f4895b._.js +3 -0
  294. package/web/.next/server/chunks/ssr/[root-of-the-server]__04f4895b._.js.map +1 -0
  295. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js +1 -1
  296. package/web/.next/server/chunks/ssr/[root-of-the-server]__17dadd08._.js.map +1 -1
  297. package/web/.next/server/chunks/ssr/[root-of-the-server]__1925bef0._.js +1 -1
  298. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js +1 -1
  299. package/web/.next/server/chunks/ssr/[root-of-the-server]__1a9687c4._.js.map +1 -1
  300. package/web/.next/server/chunks/ssr/[root-of-the-server]__347fd0f6._.js +3 -0
  301. package/web/.next/server/chunks/ssr/[root-of-the-server]__347fd0f6._.js.map +1 -0
  302. package/web/.next/server/chunks/ssr/[root-of-the-server]__46dd2baf._.js +3 -0
  303. package/web/.next/server/chunks/ssr/[root-of-the-server]__46dd2baf._.js.map +1 -0
  304. package/web/.next/server/chunks/ssr/[root-of-the-server]__4ee8be85._.js +1 -1
  305. package/web/.next/server/chunks/ssr/[root-of-the-server]__73cb4ff6._.js +3 -0
  306. package/web/.next/server/chunks/ssr/[root-of-the-server]__73cb4ff6._.js.map +1 -0
  307. package/web/.next/server/chunks/ssr/{[root-of-the-server]__87bc4dac._.js → [root-of-the-server]__86ff0bc5._.js} +3 -3
  308. package/web/.next/server/chunks/ssr/[root-of-the-server]__86ff0bc5._.js.map +1 -0
  309. package/web/.next/server/chunks/ssr/[root-of-the-server]__91c50abe._.js +3 -0
  310. package/web/.next/server/chunks/ssr/[root-of-the-server]__91c50abe._.js.map +1 -0
  311. package/web/.next/server/chunks/ssr/[root-of-the-server]__a48af49f._.js +3 -0
  312. package/web/.next/server/chunks/ssr/[root-of-the-server]__a48af49f._.js.map +1 -0
  313. package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js +1 -1
  314. package/web/.next/server/chunks/ssr/[root-of-the-server]__bb391c45._.js.map +1 -1
  315. package/web/.next/server/chunks/ssr/[root-of-the-server]__d5e22d1a._.js +3 -0
  316. package/web/.next/server/chunks/ssr/{[root-of-the-server]__7aa484f5._.js.map → [root-of-the-server]__d5e22d1a._.js.map} +1 -1
  317. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js +1 -1
  318. package/web/.next/server/chunks/ssr/[root-of-the-server]__dd3e834e._.js.map +1 -1
  319. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0aa2bcb._.js +3 -0
  320. package/web/.next/server/chunks/ssr/[root-of-the-server]__e0aa2bcb._.js.map +1 -0
  321. package/web/.next/server/chunks/ssr/[root-of-the-server]__e265da61._.js +1 -1
  322. package/web/.next/server/chunks/ssr/[root-of-the-server]__ef0b8905._.js +12 -0
  323. package/web/.next/server/chunks/ssr/[root-of-the-server]__ef0b8905._.js.map +1 -0
  324. package/web/.next/server/chunks/ssr/[root-of-the-server]__f5614810._.js +3 -0
  325. package/web/.next/server/chunks/ssr/{[root-of-the-server]__090f24cb._.js.map → [root-of-the-server]__f5614810._.js.map} +1 -1
  326. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe5db6b2._.js +3 -0
  327. package/web/.next/server/chunks/ssr/[root-of-the-server]__fe5db6b2._.js.map +1 -0
  328. package/web/.next/server/chunks/ssr/_0f9d0acd._.js +3 -0
  329. package/web/.next/server/chunks/ssr/_0f9d0acd._.js.map +1 -0
  330. package/web/.next/server/chunks/ssr/{_177d29c6._.js → _17af2817._.js} +2 -2
  331. package/web/.next/server/chunks/ssr/{_177d29c6._.js.map → _17af2817._.js.map} +1 -1
  332. package/web/.next/server/chunks/ssr/_1879404a._.js +1 -1
  333. package/web/.next/server/chunks/ssr/_1879404a._.js.map +1 -1
  334. package/web/.next/server/chunks/ssr/_295fffde._.js.map +1 -1
  335. package/web/.next/server/chunks/ssr/_29b8ed64._.js +3 -0
  336. package/web/.next/server/chunks/ssr/_29b8ed64._.js.map +1 -0
  337. package/web/.next/server/chunks/ssr/_2bc302d1._.js +3 -0
  338. package/web/.next/server/chunks/ssr/_2bc302d1._.js.map +1 -0
  339. package/web/.next/server/chunks/ssr/_3683083e._.js +3 -0
  340. package/web/.next/server/chunks/ssr/_3683083e._.js.map +1 -0
  341. package/web/.next/server/chunks/ssr/_45496654._.js.map +1 -1
  342. package/web/.next/server/chunks/ssr/_4b57bcc3._.js +9 -0
  343. package/web/.next/server/chunks/ssr/_4b57bcc3._.js.map +1 -0
  344. package/web/.next/server/chunks/ssr/_519d77a9._.js +3 -0
  345. package/web/.next/server/chunks/ssr/_519d77a9._.js.map +1 -0
  346. package/web/.next/server/chunks/ssr/_56b9d60f._.js +1 -1
  347. package/web/.next/server/chunks/ssr/_56b9d60f._.js.map +1 -1
  348. package/web/.next/server/chunks/ssr/{_503102fc._.js → _58b8982b._.js} +2 -2
  349. package/web/.next/server/chunks/ssr/_58b8982b._.js.map +1 -0
  350. package/web/.next/server/chunks/ssr/_7e5e3270._.js +3 -0
  351. package/web/.next/server/chunks/ssr/_7e5e3270._.js.map +1 -0
  352. package/web/.next/server/chunks/ssr/_8c3086bf._.js +3 -0
  353. package/web/.next/server/chunks/ssr/_8c3086bf._.js.map +1 -0
  354. package/web/.next/server/chunks/ssr/_9173e475._.js +21 -0
  355. package/web/.next/server/chunks/ssr/_9173e475._.js.map +1 -0
  356. package/web/.next/server/chunks/ssr/_946a7fc6._.js +1 -1
  357. package/web/.next/server/chunks/ssr/_946a7fc6._.js.map +1 -1
  358. package/web/.next/server/chunks/ssr/_b4cc51d4._.js +3 -0
  359. package/web/.next/server/chunks/ssr/_b4cc51d4._.js.map +1 -0
  360. package/web/.next/server/chunks/ssr/_b5093a26._.js +3 -0
  361. package/web/.next/server/chunks/ssr/_b5093a26._.js.map +1 -0
  362. package/web/.next/server/chunks/ssr/_bc03ac82._.js +4 -0
  363. package/web/.next/server/chunks/ssr/_bc03ac82._.js.map +1 -0
  364. package/web/.next/server/chunks/ssr/_e65abbd1._.js +3 -0
  365. package/web/.next/server/chunks/ssr/_e65abbd1._.js.map +1 -0
  366. package/web/.next/server/chunks/ssr/_f20557ff._.js +3 -0
  367. package/web/.next/server/chunks/ssr/_f20557ff._.js.map +1 -0
  368. package/web/.next/server/chunks/ssr/_f86fc1bf._.js +1 -1
  369. package/web/.next/server/chunks/ssr/_f86fc1bf._.js.map +1 -1
  370. package/web/.next/server/chunks/ssr/_f8c55130._.js +1 -1
  371. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js +1 -1
  372. package/web/.next/server/chunks/ssr/b1a17_presentation_web_components_features_settings_settings-page-client_tsx_6ed9d5f8._.js.map +1 -1
  373. package/web/.next/server/chunks/ssr/f3a1f_components_common_control-center-drawer_repository-drawer-client_tsx_39a00c03._.js +1 -1
  374. package/web/.next/server/chunks/ssr/node_modules__pnpm_28a53b5d._.js +3 -0
  375. package/web/.next/server/chunks/ssr/node_modules__pnpm_28a53b5d._.js.map +1 -0
  376. package/web/.next/server/chunks/ssr/src_presentation_web_47181610._.js +3 -0
  377. package/web/.next/server/chunks/ssr/src_presentation_web_47181610._.js.map +1 -0
  378. package/web/.next/server/chunks/ssr/src_presentation_web_5d3f4199._.js +3 -0
  379. package/web/.next/server/chunks/ssr/src_presentation_web_5d3f4199._.js.map +1 -0
  380. package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js +1 -1
  381. package/web/.next/server/chunks/ssr/src_presentation_web_6159fef8._.js.map +1 -1
  382. package/web/.next/server/chunks/ssr/src_presentation_web_61d96ba8._.js +3 -0
  383. package/web/.next/server/chunks/ssr/src_presentation_web_61d96ba8._.js.map +1 -0
  384. package/web/.next/server/chunks/ssr/src_presentation_web_6994959a._.js +3 -0
  385. package/web/.next/server/chunks/ssr/src_presentation_web_6994959a._.js.map +1 -0
  386. package/web/.next/server/chunks/ssr/src_presentation_web_77dadf68._.js +32 -0
  387. package/web/.next/server/chunks/ssr/src_presentation_web_77dadf68._.js.map +1 -0
  388. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js +3 -0
  389. package/web/.next/server/chunks/ssr/src_presentation_web_9a543843._.js.map +1 -0
  390. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_c3f6f57e.js +3 -0
  391. package/web/.next/server/chunks/ssr/src_presentation_web__next-internal_server_app_(dashboard)_page_actions_c3f6f57e.js.map +1 -0
  392. package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js +1 -1
  393. package/web/.next/server/chunks/ssr/src_presentation_web_ad42cc73._.js.map +1 -1
  394. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_8514dfcd._.js +32 -0
  395. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_8514dfcd._.js.map +1 -0
  396. package/web/.next/server/chunks/ssr/src_presentation_web_b95ed206._.js +3 -0
  397. package/web/.next/server/chunks/ssr/src_presentation_web_b95ed206._.js.map +1 -0
  398. package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js +3 -0
  399. package/web/.next/server/chunks/ssr/src_presentation_web_bade80bd._.js.map +1 -0
  400. package/web/.next/server/chunks/ssr/src_presentation_web_c543cf3e._.js +3 -0
  401. package/web/.next/server/chunks/ssr/src_presentation_web_c543cf3e._.js.map +1 -0
  402. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js +1 -1
  403. package/web/.next/server/chunks/ssr/src_presentation_web_components_895e5bfa._.js.map +1 -1
  404. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js +1 -1
  405. package/web/.next/server/chunks/ssr/src_presentation_web_components_common_base-drawer_base-drawer_tsx_97dfbbc8._.js.map +1 -1
  406. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js +1 -1
  407. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_skills_8a174cac._.js.map +1 -1
  408. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_dropdown-menu_tsx_229332e3._.js +3 -0
  409. package/web/.next/server/chunks/ssr/src_presentation_web_components_ui_dropdown-menu_tsx_229332e3._.js.map +1 -0
  410. package/web/.next/server/chunks/ssr/translations_1562ae1a._.js +3 -0
  411. package/web/.next/server/chunks/ssr/translations_1562ae1a._.js.map +1 -0
  412. package/web/.next/server/pages/500.html +2 -2
  413. package/web/.next/server/server-reference-manifest.js +1 -1
  414. package/web/.next/server/server-reference-manifest.json +184 -72
  415. package/web/.next/static/chunks/{b4aa3a83f2451e07.js → 05becd66afb22d37.js} +1 -1
  416. package/web/.next/static/chunks/1bd2a325f95d3211.js +2 -0
  417. package/web/.next/static/chunks/2cbe80f8e84d59a8.js +1 -0
  418. package/web/.next/static/chunks/37e434e579ecfa02.js +1 -0
  419. package/web/.next/static/chunks/3aaae7ceefe72828.js +7 -0
  420. package/web/.next/static/chunks/3d1543ff12dfaff1.js +1 -0
  421. package/web/.next/static/chunks/{ac22076c64634ac1.js → 4b8bedfda131650a.js} +1 -1
  422. package/web/.next/static/chunks/{83fc7ea32e18c9a5.js → 4ea617a22e21fb04.js} +1 -1
  423. package/web/.next/static/chunks/53f12c1844f881af.js +1 -0
  424. package/web/.next/static/chunks/5795b9f399523c9e.js +1 -0
  425. package/web/.next/static/chunks/{2fe20598e1b4793a.js → 6b2859ea368e7df3.js} +3 -3
  426. package/web/.next/static/chunks/71c7fe96accaab17.js +19 -0
  427. package/web/.next/static/chunks/792fffaa4af33248.js +1 -0
  428. package/web/.next/static/chunks/{87a0df5389e06641.js → 7b6c91400184cb4d.js} +1 -1
  429. package/web/.next/static/chunks/83ba6946af31cdc4.js +3 -0
  430. package/web/.next/static/chunks/897771202f55ecfe.js +1 -0
  431. package/web/.next/static/chunks/9d9bf7403612ae86.js +1 -0
  432. package/web/.next/static/chunks/{be2e80436bc15812.js → a9d2a436d682fded.js} +3 -3
  433. package/web/.next/static/chunks/adf16efe8bac05e9.css +1 -0
  434. package/web/.next/static/chunks/{ceff12f8a2e5bc08.js → ae2fcb50ea0d8652.js} +1 -1
  435. package/web/.next/static/chunks/b0474319e5a50043.js +1 -0
  436. package/web/.next/static/chunks/b85532fb1545927c.js +5 -0
  437. package/web/.next/static/chunks/{33dc7a1041f4ab64.js → b8acda37576199f1.js} +1 -1
  438. package/web/.next/static/chunks/c788a245f6898401.js +1 -0
  439. package/web/.next/static/chunks/d0bcde99ca2878d1.js +1 -0
  440. package/web/.next/static/chunks/{de7de1db2a8788dd.js → ed714d3a13ff6c16.js} +1 -1
  441. package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js +0 -3
  442. package/web/.next/server/chunks/ssr/[root-of-the-server]__013a0318._.js.map +0 -1
  443. package/web/.next/server/chunks/ssr/[root-of-the-server]__090f24cb._.js +0 -3
  444. package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js +0 -12
  445. package/web/.next/server/chunks/ssr/[root-of-the-server]__24756fa9._.js.map +0 -1
  446. package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js +0 -3
  447. package/web/.next/server/chunks/ssr/[root-of-the-server]__70986695._.js.map +0 -1
  448. package/web/.next/server/chunks/ssr/[root-of-the-server]__7aa484f5._.js +0 -3
  449. package/web/.next/server/chunks/ssr/[root-of-the-server]__87bc4dac._.js.map +0 -1
  450. package/web/.next/server/chunks/ssr/[root-of-the-server]__a3a4ddef._.js +0 -3
  451. package/web/.next/server/chunks/ssr/[root-of-the-server]__a3a4ddef._.js.map +0 -1
  452. package/web/.next/server/chunks/ssr/[root-of-the-server]__a4222b95._.js +0 -3
  453. package/web/.next/server/chunks/ssr/[root-of-the-server]__a4222b95._.js.map +0 -1
  454. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js +0 -3
  455. package/web/.next/server/chunks/ssr/[root-of-the-server]__a5ea76a6._.js.map +0 -1
  456. package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js +0 -3
  457. package/web/.next/server/chunks/ssr/[root-of-the-server]__a6f2b763._.js.map +0 -1
  458. package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js +0 -3
  459. package/web/.next/server/chunks/ssr/[root-of-the-server]__f3ca7bea._.js.map +0 -1
  460. package/web/.next/server/chunks/ssr/_0277d3b5._.js +0 -21
  461. package/web/.next/server/chunks/ssr/_0277d3b5._.js.map +0 -1
  462. package/web/.next/server/chunks/ssr/_21cc662b._.js +0 -3
  463. package/web/.next/server/chunks/ssr/_21cc662b._.js.map +0 -1
  464. package/web/.next/server/chunks/ssr/_44531b76._.js +0 -9
  465. package/web/.next/server/chunks/ssr/_44531b76._.js.map +0 -1
  466. package/web/.next/server/chunks/ssr/_503102fc._.js.map +0 -1
  467. package/web/.next/server/chunks/ssr/_575fe3ee._.js +0 -3
  468. package/web/.next/server/chunks/ssr/_575fe3ee._.js.map +0 -1
  469. package/web/.next/server/chunks/ssr/_869a3a15._.js +0 -3
  470. package/web/.next/server/chunks/ssr/_869a3a15._.js.map +0 -1
  471. package/web/.next/server/chunks/ssr/_a7184dfa._.js +0 -3
  472. package/web/.next/server/chunks/ssr/_a7184dfa._.js.map +0 -1
  473. package/web/.next/server/chunks/ssr/_b227ff50._.js +0 -3
  474. package/web/.next/server/chunks/ssr/_b227ff50._.js.map +0 -1
  475. package/web/.next/server/chunks/ssr/_e071ba48._.js +0 -3
  476. package/web/.next/server/chunks/ssr/_e071ba48._.js.map +0 -1
  477. package/web/.next/server/chunks/ssr/_eff1b518._.js +0 -3
  478. package/web/.next/server/chunks/ssr/_eff1b518._.js.map +0 -1
  479. package/web/.next/server/chunks/ssr/_f227429a._.js +0 -3
  480. package/web/.next/server/chunks/ssr/_f227429a._.js.map +0 -1
  481. package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js +0 -3
  482. package/web/.next/server/chunks/ssr/src_presentation_web_36f2bc45._.js.map +0 -1
  483. package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js +0 -3
  484. package/web/.next/server/chunks/ssr/src_presentation_web_486908de._.js.map +0 -1
  485. package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js +0 -3
  486. package/web/.next/server/chunks/ssr/src_presentation_web_5c3596bc._.js.map +0 -1
  487. package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js +0 -3
  488. package/web/.next/server/chunks/ssr/src_presentation_web_6326f81e._.js.map +0 -1
  489. package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js +0 -3
  490. package/web/.next/server/chunks/ssr/src_presentation_web_6b2fdcd8._.js.map +0 -1
  491. package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js +0 -3
  492. package/web/.next/server/chunks/ssr/src_presentation_web_74703c9f._.js.map +0 -1
  493. package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js +0 -3
  494. package/web/.next/server/chunks/ssr/src_presentation_web_a8056dac._.js.map +0 -1
  495. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js +0 -32
  496. package/web/.next/server/chunks/ssr/src_presentation_web_app_actions_open-ide_ts_baaca5d5._.js.map +0 -1
  497. package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js +0 -3
  498. package/web/.next/server/chunks/ssr/src_presentation_web_b00bfb08._.js.map +0 -1
  499. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js +0 -3
  500. package/web/.next/server/chunks/ssr/src_presentation_web_ca99d62d._.js.map +0 -1
  501. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js +0 -3
  502. package/web/.next/server/chunks/ssr/src_presentation_web_components_features_control-center_7ac3562e._.js.map +0 -1
  503. package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js +0 -3
  504. package/web/.next/server/chunks/ssr/src_presentation_web_f1edcf5e._.js.map +0 -1
  505. package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js +0 -3
  506. package/web/.next/server/chunks/ssr/src_presentation_web_f9436804._.js.map +0 -1
  507. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js +0 -3
  508. package/web/.next/server/chunks/ssr/translations_23dd5e7e._.js.map +0 -1
  509. package/web/.next/static/chunks/06b9d6dbf635c370.css +0 -1
  510. package/web/.next/static/chunks/1ae0cf5be30ef398.js +0 -1
  511. package/web/.next/static/chunks/2424ab50273fe1d9.js +0 -7
  512. package/web/.next/static/chunks/6afd16b2fe544054.js +0 -2
  513. package/web/.next/static/chunks/7604027076448f2b.js +0 -19
  514. package/web/.next/static/chunks/8c9016ab8c1f6204.js +0 -1
  515. package/web/.next/static/chunks/927442d2628f6e22.js +0 -1
  516. package/web/.next/static/chunks/94e8559ae19a16e1.js +0 -1
  517. package/web/.next/static/chunks/a0cfca1e5fd467e9.js +0 -1
  518. package/web/.next/static/chunks/a2531137c7d36d54.js +0 -7
  519. package/web/.next/static/chunks/b87904ecdddde972.js +0 -1
  520. package/web/.next/static/chunks/b99506a6f7bc2fa8.js +0 -1
  521. package/web/.next/static/chunks/e4f0ca20b62bd66f.js +0 -1
  522. /package/web/.next/static/{EVCmRtpgNX9ebXGb-bV1G → tAvYhk4e_F_yStLz4wtDg}/_buildManifest.js +0 -0
  523. /package/web/.next/static/{EVCmRtpgNX9ebXGb-bV1G → tAvYhk4e_F_yStLz4wtDg}/_clientMiddlewareManifest.json +0 -0
  524. /package/web/.next/static/{EVCmRtpgNX9ebXGb-bV1G → tAvYhk4e_F_yStLz4wtDg}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ module.exports=[10606,a=>{"use strict";var b=a.i(51969);a.s(["CheckIcon",()=>b.default])},18615,a=>{"use strict";let b=(0,a.i(25700).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);a.s(["RotateCcw",()=>b],18615)},83886,a=>{"use strict";let b=(0,a.i(25700).default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);a.s(["Eye",()=>b],83886)},96853,a=>{"use strict";let b=(0,a.i(25700).default)("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);a.s(["default",()=>b])},69428,a=>{"use strict";let b=(0,a.i(25700).default)("clipboard-list",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}],["path",{d:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);a.s(["ClipboardList",()=>b],69428)},42527,a=>{"use strict";let b=(0,a.i(25700).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",()=>b],42527)},58683,a=>{"use strict";var b=a.i(25674);let c=(0,b.createServerReference)("4033fa30fe771d213d836267fca1d2bc348edc0463",b.callServer,void 0,b.findSourceMapURL,"addRepository");a.s(["addRepository",()=>c])},38702,16223,a=>{"use strict";var b=a.i(12656),c=a.i(85536);function d({icon:a,title:d,description:e,action:f,className:g,...h}){return(0,b.jsxs)("div",{className:(0,c.cn)("flex flex-col items-center gap-4 px-4 py-12 text-center",g),...h,children:[a?(0,b.jsx)("div",{className:"text-muted-foreground",children:a}):null,(0,b.jsx)("h3",{className:"text-lg font-semibold",children:d}),e?(0,b.jsx)("p",{className:"text-muted-foreground max-w-md text-sm",children:e}):null,f?(0,b.jsx)("div",{className:"mt-2",children:f}):null]})}a.s(["EmptyState",()=>d],16223),a.s([],38702)},79794,a=>{"use strict";let b=(0,a.i(25700).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],79794)},93193,61189,a=>{"use strict";var b=a.i(91857);function c(a,b,c,d){return"processing"===b?{label:"In Progress",dotClass:"bg-violet-500",borderClass:"",pulse:!0,previewDisabled:!0}:"awaiting_input"===b?{label:"Action Required",dotClass:"bg-amber-500",borderClass:"border-amber-500/60",pulse:!0,previewDisabled:!0}:"interrupted"===d?{label:"Interrupted",dotClass:"bg-amber-500",borderClass:"border-amber-500/60",pulse:!1,previewDisabled:!0}:"failed"===d?{label:"Failed",dotClass:"bg-red-500",borderClass:"border-red-500/60",pulse:!1,previewDisabled:!0}:"building"===d?{label:"In Progress",dotClass:"bg-violet-500",borderClass:"",pulse:!0,previewDisabled:!0}:c?{label:"Live",dotClass:"bg-emerald-500",borderClass:"",pulse:!0,previewDisabled:!1}:"Error"===a?{label:"Error",dotClass:"bg-red-500",borderClass:"border-red-500/60",pulse:!1,previewDisabled:!0}:{label:"Ready",dotClass:"bg-sky-500",borderClass:"",pulse:!1,previewDisabled:!1}}a.s(["TriangleAlert",()=>b.default],93193),a.s(["deriveAppLiveStatus",()=>c],61189)},47050,a=>{"use strict";var b=a.i(25674);let c=(0,b.createServerReference)("4019e9b366eba6e7ae533d69ad430786e1d105d3f7",b.callServer,void 0,b.findSourceMapURL,"deleteApplication");a.s(["deleteApplication",()=>c])},57411,a=>{"use strict";var b=a.i(12656),c=a.i(96960),d=a.i(93967),e=a.i(32791),f=a.i(88064),g=a.i(82014),h=a.i(3942),i=a.i(69428),j=a.i(71716),k=a.i(72016),l=a.i(2807);a.i(90370);var m=a.i(24640),n=a.i(85536),o=a.i(25674);let p=(0,o.createServerReference)("40a0177b9f2aa86822c61e9a614f071fe7717b8bda",o.callServer,void 0,o.findSourceMapURL,"createProjectAndFeature"),q=(0,o.createServerReference)("4007c40d988784c0b9cc291fff583c56299825ace2",o.callServer,void 0,o.findSourceMapURL,"createApplication");var r=a.i(61781);a.i(307);var s=a.i(30931);a.i(48822);var t=a.i(16911),u=a.i(82934),v=a.i(75192),w=a.i(9260);let x=["application","fast","spec"],y={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 z({onRepositorySelect:a,onApplicationCreated:g,onClose:h,className:i}){let{t:o}=(0,m.useTranslation)("web"),[z,A]=(0,c.useState)(""),[B,C]=(0,c.useState)(void 0),[D,E]=(0,c.useState)(void 0),[F,G]=(0,c.useState)("application"),[H,I]=(0,c.useState)(!1),[J,K]=(0,c.useState)(null),[L,M]=(0,c.useState)(!1),N=(0,c.useRef)(null),O=(0,w.useAttachments)(),P=(0,c.useCallback)(()=>{G(a=>{let b=x.indexOf(a);return x[(b+1)%x.length]})},[]);(0,c.useEffect)(()=>{let a=a=>{"Escape"===a.key&&h&&h(),"Tab"===a.key&&a.shiftKey&&(a.preventDefault(),P())};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[h,P]);let Q=(0,c.useCallback)(async()=>{if(z.trim()&&!H){I(!0),K(null);try{if("application"===F){let a=await q({description:z.trim(),agentType:B,modelOverride:D,initialPrompt:z.trim()});if(a.error){K(a.error),I(!1);return}a.application&&g?.(a.application.id)}else{let b=await p({description:z.trim(),attachments:O.completedAttachments.map(a=>({path:a.path,name:a.name,notes:a.notes})),agentType:B,model:D,fast:"fast"===F});if(b.error){K(b.error),I(!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}}))}}catch{K("Something went wrong. Please try again."),I(!1)}}},[z,H,F,O.completedAttachments,B,D,a,g]),R=(0,c.useCallback)(a=>{"Enter"===a.key&&(a.ctrlKey||a.metaKey)&&(a.preventDefault(),Q())},[Q]),S=(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();O.addAttachment(c)}}catch{}},[O.addAttachment]),T=(0,c.useCallback)(a=>{A(a),N.current?.focus()},[]),U=y[F],V=U.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)(t.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:()=>M(!0),onBlur:()=>M(!1),onDragEnter:O.handleDragEnter,onDragLeave:O.handleDragLeave,onDragOver:O.handleDragOver,onDrop:O.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]",L&&"ring-ring/50 border-ring shadow-md ring-[3px] dark:border-orange-500/40 dark:ring-orange-500/25",O.isDragOver&&"border-primary/50 bg-primary/5",H&&"opacity-70"),children:[(0,b.jsx)("textarea",{ref:N,rows:2,autoFocus:!0,value:z,onChange:a=>A(a.target.value),onKeyDown:R,onPaste:O.handlePaste,placeholder:U.placeholder,disabled:H,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"}),O.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:O.attachments.map(a=>(0,b.jsx)(s.AttachmentChip,{name:a.name,size:a.size,mimeType:a.mimeType,path:a.path,onRemove:()=>O.removeAttachment(a.id),loading:a.loading,notes:a.notes,onNotesChange:b=>O.updateNotes(a.id,b)},a.id))}):null,O.uploadError?(0,b.jsx)("p",{className:"text-destructive px-4 pb-2 text-xs",children:O.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)(r.AgentModelPicker,{initialAgentType:B??"claude-code",initialModel:D??"claude-sonnet-4-6",mode:"override",showInstallStatus:!0,onAgentModelChange:(a,b)=>{C(a),E(b)},className:"w-55"}),(0,b.jsx)("div",{className:"flex-1"}),(0,b.jsxs)(v.DropdownMenu,{children:[(0,b.jsx)(v.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)(V,{className:"h-3.5 w-3.5"}),U.label]},F),(0,b.jsx)(j.ChevronDown,{className:"h-3 w-3 opacity-50"})]})}),(0,b.jsx)(v.DropdownMenuContent,{align:"end",className:"min-w-[160px]",children:x.map(a=>{let c=y[a],d=c.icon,e=F===a;return(0,b.jsxs)(v.DropdownMenuItem,{onClick:()=>G(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)})})]}),(0,b.jsxs)(u.Tooltip,{children:[(0,b.jsx)(u.TooltipTrigger,{asChild:!0,children:(0,b.jsx)("button",{type:"button",onClick:S,disabled:H,"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)(u.TooltipContent,{side:"top",children:o("chat.attachFiles")})]}),(0,b.jsx)("button",{type:"button",onClick:Q,disabled:!z.trim()||H,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:H?(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"})})]})]}),J?(0,b.jsx)("p",{className:"text-destructive mt-2 text-center text-sm",children:J}):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:U.suggestions.map(a=>(0,b.jsx)("button",{type:"button",onClick:()=>T(a),disabled:H,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))},F)]})]})}a.s(["ControlCenterEmptyState",()=>z],57411)}];
2
+
3
+ //# sourceMappingURL=_7e5e3270._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/rotate-ccw.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/eye.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/minus.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/clipboard-list.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/folder-plus.ts","../../../../../../../src/presentation/web/app/actions/data%3A5b3741%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/common/empty-state/empty-state.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/lib/derive-app-status.ts","../../../../../../../src/presentation/web/app/actions/data%3A95fcdd%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/components/features/control-center/control-center-empty-state.tsx","../../../../../../../src/presentation/web/app/actions/data%3A027b12%20%3Ctext/javascript%3E","../../../../../../../src/presentation/web/app/actions/data%3A5a94d7%20%3Ctext/javascript%3E"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8', key: '1357e3' }],\n ['path', { d: 'M3 3v5h5', key: '1xhq8a' }],\n];\n\n/**\n * @component @name RotateCcw\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4IiAvPgogIDxwYXRoIGQ9Ik0zIDN2NWg1IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/rotate-ccw\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 RotateCcw = createLucideIcon('rotate-ccw', __iconNode);\n\nexport default RotateCcw;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n key: '1nclc0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3', key: '1v7zrd' }],\n];\n\n/**\n * @component @name Eye\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi4wNjIgMTIuMzQ4YTEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgMTkuODc2IDAgMSAxIDAgMCAxIDAgLjY5NiAxMC43NSAxMC43NSAwIDAgMS0xOS44NzYgMCIgLz4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/eye\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 Eye = createLucideIcon('eye', __iconNode);\n\nexport default Eye;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'M5 12h14', key: '1ays0h' }]];\n\n/**\n * @component @name Minus\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNSAxMmgxNCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/minus\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 Minus = createLucideIcon('minus', __iconNode);\n\nexport default Minus;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '8', height: '4', x: '8', y: '2', rx: '1', ry: '1', key: 'tgr4d6' }],\n [\n 'path',\n {\n d: 'M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2',\n key: '116196',\n },\n ],\n ['path', { d: 'M12 11h4', key: '1jrz19' }],\n ['path', { d: 'M12 16h4', key: 'n85exb' }],\n ['path', { d: 'M8 11h.01', key: '1dfujw' }],\n ['path', { d: 'M8 16h.01', key: '18s6g9' }],\n];\n\n/**\n * @component @name ClipboardList\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iOCIgaGVpZ2h0PSI0IiB4PSI4IiB5PSIyIiByeD0iMSIgcnk9IjEiIC8+CiAgPHBhdGggZD0iTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiAvPgogIDxwYXRoIGQ9Ik0xMiAxMWg0IiAvPgogIDxwYXRoIGQ9Ik0xMiAxNmg0IiAvPgogIDxwYXRoIGQ9Ik04IDExaC4wMSIgLz4KICA8cGF0aCBkPSJNOCAxNmguMDEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/clipboard-list\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 ClipboardList = createLucideIcon('clipboard-list', __iconNode);\n\nexport default ClipboardList;\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","/* __next_internal_action_entry_do_not_use__ [{\"4033fa30fe771d213d836267fca1d2bc348edc0463\":\"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(\"4033fa30fe771d213d836267fca1d2bc348edc0463\",callServer,void 0,findSourceMapURL,\"addRepository\");export{$$RSC_SERVER_ACTION_0 as addRepository};","import type { ReactNode, HTMLAttributes } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface EmptyStateProps extends HTMLAttributes<HTMLDivElement> {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n action,\n className,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn('flex flex-col items-center gap-4 px-4 py-12 text-center', className)}\n {...props}\n >\n {icon ? <div className=\"text-muted-foreground\">{icon}</div> : null}\n <h3 className=\"text-lg font-semibold\">{title}</h3>\n {description ? <p className=\"text-muted-foreground max-w-md text-sm\">{description}</p> : null}\n {action ? <div className=\"mt-2\">{action}</div> : null}\n </div>\n );\n}\n","import 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","/**\n * Shared status derivation for application cards, canvas nodes, and\n * the application page status pill.\n *\n * Priority (highest wins):\n *\n * - `processing` → \"In Progress\" (agent actively running a turn)\n * - `awaiting_input` → \"Action Required\" (agent blocked on user input)\n * - effectiveStatus → from use case (interrupted/failed/running)\n * - deployment live → \"Live\" (dev server running)\n * - persisted Error → \"Error\"\n * - otherwise → \"Ready\" (idle, no issues)\n */\n\nexport interface AppLiveStatus {\n label: string;\n dotClass: string;\n borderClass: string;\n pulse: boolean;\n /** Whether the preview/deploy action should be disabled in this state. */\n previewDisabled: boolean;\n}\n\nexport function deriveAppLiveStatus(\n persistedStatus: string,\n turnStatus: string,\n hasDeployment: boolean,\n effectiveStatus?: string\n): AppLiveStatus {\n // Live turn status takes highest priority (real-time SSE)\n if (turnStatus === 'processing') {\n return {\n label: 'In Progress',\n dotClass: 'bg-violet-500',\n borderClass: '',\n pulse: true,\n previewDisabled: true,\n };\n }\n if (turnStatus === 'awaiting_input') {\n return {\n label: 'Action Required',\n dotClass: 'bg-amber-500',\n borderClass: 'border-amber-500/60',\n pulse: true,\n previewDisabled: true,\n };\n }\n\n // Use case-computed effective status (from workflow steps)\n if (effectiveStatus === 'interrupted') {\n return {\n label: 'Interrupted',\n dotClass: 'bg-amber-500',\n borderClass: 'border-amber-500/60',\n pulse: false,\n previewDisabled: true,\n };\n }\n if (effectiveStatus === 'failed') {\n return {\n label: 'Failed',\n dotClass: 'bg-red-500',\n borderClass: 'border-red-500/60',\n pulse: false,\n previewDisabled: true,\n };\n }\n if (effectiveStatus === 'building') {\n return {\n label: 'In Progress',\n dotClass: 'bg-violet-500',\n borderClass: '',\n pulse: true,\n previewDisabled: true,\n };\n }\n\n // Deployment state\n if (hasDeployment) {\n return {\n label: 'Live',\n dotClass: 'bg-emerald-500',\n borderClass: '',\n pulse: true,\n previewDisabled: false,\n };\n }\n\n // Persisted entity status\n if (persistedStatus === 'Error') {\n return {\n label: 'Error',\n dotClass: 'bg-red-500',\n borderClass: 'border-red-500/60',\n pulse: false,\n previewDisabled: true,\n };\n }\n\n return {\n label: 'Ready',\n dotClass: 'bg-sky-500',\n borderClass: '',\n pulse: false,\n previewDisabled: false,\n };\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"4019e9b366eba6e7ae533d69ad430786e1d105d3f7\":\"deleteApplication\"},\"src/presentation/web/app/actions/delete-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(\"4019e9b366eba6e7ae533d69ad430786e1d105d3f7\",callServer,void 0,findSourceMapURL,\"deleteApplication\");export{$$RSC_SERVER_ACTION_0 as deleteApplication};","'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 { 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 const [overrideAgent, setOverrideAgent] = useState<string | undefined>(undefined);\n const [overrideModel, setOverrideModel] = useState<string | undefined>(undefined);\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 // 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 if (e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n cycleBuildMode();\n }\n };\n window.addEventListener('keydown', handleGlobalKeyDown);\n return () => window.removeEventListener('keydown', handleGlobalKeyDown);\n }, [onClose, cycleBuildMode]);\n\n const handleSubmit = useCallback(async () => {\n if (!description.trim() || submitting) return;\n\n setSubmitting(true);\n setError(null);\n\n try {\n if (buildMode === 'application') {\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: buildMode === '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 buildMode,\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[buildMode];\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 ?? 'claude-code'}\n initialModel={overrideModel ?? 'claude-sonnet-4-6'}\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 */}\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={buildMode}\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 = buildMode === 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\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={buildMode}\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__ [{\"40a0177b9f2aa86822c61e9a614f071fe7717b8bda\":\"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(\"40a0177b9f2aa86822c61e9a614f071fe7717b8bda\",callServer,void 0,findSourceMapURL,\"createProjectAndFeature\");export{$$RSC_SERVER_ACTION_0 as createProjectAndFeature};","/* __next_internal_action_entry_do_not_use__ [{\"4007c40d988784c0b9cc291fff583c56299825ace2\":\"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(\"4007c40d988784c0b9cc291fff583c56299825ace2\",callServer,void 0,findSourceMapURL,\"createApplication\");export{$$RSC_SERVER_ACTION_0 as createApplication};"],"names":[],"mappings":"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","ignoreList":[0,1,3,4,7]}
@@ -0,0 +1,3 @@
1
+ module.exports=[16605,a=>{"use strict";let b=(0,a.i(25700).default)("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);a.s(["Trash2",()=>b],16605)},93967,32791,9260,a=>{"use strict";let b=(0,a.i(25700).default)("send-horizontal",[["path",{d:"M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z",key:"117uat"}],["path",{d:"M6 12h16",key:"s4cdu5"}]]);a.s(["SendHorizontal",()=>b],93967);var c=a.i(5e4);a.s(["Paperclip",()=>c.default],32791);var d=a.i(96960);let e=new Set(["txt","md","csv","json","yaml","yml","xml","html","css","js","ts","jsx","tsx","py","rb","go","rs","java","kt","c","cpp","h","hpp","cs","swift","sh","bash","zsh","fish","ps1","bat","cmd","sql","graphql","proto","toml","ini","cfg","conf","env","dockerfile","makefile","cmake","gradle","sbt","lock","sum","mod","png","jpg","jpeg","gif","svg","webp","bmp","ico","avif","pdf","doc","docx","xls","xlsx","ppt","pptx","odt","ods","odp","zip","tar","gz","bz2","xz","7z","rar","log","diff","patch"]);function f(){let[a,b]=(0,d.useState)([]),[c,f]=(0,d.useState)(null),[g,h]=(0,d.useState)(!1),i=(0,d.useRef)(0),j=(0,d.useRef)(crypto.randomUUID()),k=(0,d.useCallback)(async a=>{for(let b of(f(null),a)){if(b.size>0xa00000)return void f(`"${b.name}" exceeds 10 MB limit`);let a=function(a){let b=a.lastIndexOf(".");return b>0?a.slice(b+1).toLowerCase():null}(b.name);if(a&&!e.has(a))return void f(`File type "${a}" is not allowed`)}for(let c of a){let a=crypto.randomUUID();b(b=>[...b,{id:a,name:c.name,size:c.size,mimeType:c.type||"application/octet-stream",path:"",loading:!0}]);try{let d=new FormData;d.append("file",c),d.append("sessionId",j.current);let e=await fetch("/api/attachments/upload",{method:"POST",body:d});if(!e.ok){let c=await e.json().catch(()=>({error:"Upload failed"}));b(b=>b.filter(b=>b.id!==a)),f(c.error??"Upload failed");return}let g=await e.json();b(b=>b.some(b=>b.id!==a&&b.path===g.path)?b.filter(b=>b.id!==a):b.map(b=>b.id===a?{...g,id:a,loading:!1}:b))}catch{b(b=>b.filter(b=>b.id!==a)),f("Upload failed")}}},[]),l=(0,d.useCallback)(a=>{a.preventDefault(),a.stopPropagation(),i.current+=1,1===i.current&&h(!0)},[]),m=(0,d.useCallback)(a=>{a.preventDefault(),a.stopPropagation(),i.current-=1,0===i.current&&h(!1)},[]),n=(0,d.useCallback)(a=>{a.preventDefault(),a.stopPropagation()},[]),o=(0,d.useCallback)(a=>{a.preventDefault(),a.stopPropagation(),i.current=0,h(!1);let b=Array.from(a.dataTransfer.files);b.length>0&&k(b)},[k]),p=(0,d.useCallback)(a=>{let b=a.clipboardData?.items;if(!b)return;let c=[];for(let a of Array.from(b))if("file"===a.kind){let b=a.getAsFile();b&&c.push(b)}c.length>0&&(a.preventDefault(),k(c))},[k]),q=(0,d.useCallback)(a=>{b(b=>b.filter(b=>b.id!==a))},[]),r=(0,d.useCallback)((a,c)=>{b(b=>b.map(b=>b.id===a?{...b,notes:c}:b))},[]),s=(0,d.useCallback)(a=>{b(b=>b.some(b=>b.path===a.path)?b:[...b,{...a,loading:!1}])},[]),t=(0,d.useCallback)(()=>{b([]),f(null)},[]),u=a.filter(a=>!a.loading);return{attachments:a,completedAttachments:u,uploadError:c,isDragOver:g,handleFiles:k,handleDragEnter:l,handleDragLeave:m,handleDragOver:n,handleDrop:o,handlePaste:p,addAttachment:s,removeAttachment:q,updateNotes:r,clearAttachments:t}}a.s(["useAttachments",()=>f],9260)},91857,a=>{"use strict";let b=(0,a.i(25700).default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);a.s(["default",()=>b])},42642,a=>{"use strict";let b=(0,a.i(25700).default)("file-text",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);a.s(["default",()=>b])},5e4,a=>{"use strict";let b=(0,a.i(25700).default)("paperclip",[["path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",key:"1miecu"}]]);a.s(["default",()=>b])},22366,73998,52751,a=>{"use strict";var b=a.i(7052);a.s(["Loader2Icon",()=>b.default],22366);var c=a.i(76096);a.s(["DownloadIcon",()=>c.default],73998);let d=(0,a.i(25700).default)("sticky-note",[["path",{d:"M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z",key:"1dfntj"}],["path",{d:"M15 3v5a1 1 0 0 0 1 1h5",key:"6s6qgf"}]]);a.s(["StickyNoteIcon",()=>d],52751)},79620,a=>{"use strict";var b=a.i(12656),c=a.i(85536);function d({className:a,...d}){return(0,b.jsx)("textarea",{"data-slot":"textarea",className:(0,c.cn)("placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input field-sizing-content min-h-[80px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",a),...d})}a.s(["Textarea",()=>d])},26633,45902,50596,a=>{"use strict";var b=a.i(50049);a.s(["VisuallyHidden",0,b],26633);let c=(0,a.i(25700).default)("file",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]]);a.s(["default",()=>c],45902),a.s(["FileIcon",()=>c],50596)},307,30931,a=>{"use strict";var b=a.i(12656),c=a.i(2807),d=a.i(22366),e=a.i(73998),f=a.i(52751),g=a.i(85536),h=a.i(45670),i=a.i(79620),j=a.i(82934),k=a.i(26633),l=a.i(50596),m=a.i(42642),m=m;let n=(0,a.i(25700).default)("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);var o=a.i(40617),o=o;a.i(18948);let p=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]),q=new Set([".ts",".tsx",".js",".jsx",".json",".yaml",".yml",".xml",".html",".css",".md"]);function r(a){if(0===a)return"0 B";let b=Math.floor(Math.log(a)/Math.log(1024));return`${(a/Math.pow(1024,b)).toFixed(+(0!==b))} ${["B","KB","MB","GB"][b]}`}let s=new Set([".png",".jpg",".jpeg",".gif",".svg",".webp",".ico",".bmp"]);function t(a,b){let c=new URLSearchParams({path:a,mimeType:b});return`/api/attachments/preview?${c.toString()}`}function u({name:a,size:u,mimeType:v,path:w,onRemove:x,loading:y=!1,disabled:z=!1,notes:A,onNotesChange:B}){let C,D,E=(C=a.lastIndexOf("."))>=0?a.slice(C).toLowerCase():"",F=p.has(E)?n:".pdf"===E?m.default:q.has(E)?o.default:l.FileIcon,G=".pdf"===E?"bg-red-50 text-red-600":p.has(E)?"bg-blue-50 text-blue-600":q.has(E)?"bg-emerald-50 text-emerald-600":"bg-gray-50 text-gray-600",H=(D=a.lastIndexOf("."))>=0&&s.has(a.slice(D).toLowerCase());if(y)return(0,b.jsx)("div",{className:"flex h-12 w-12 items-center justify-center rounded-md border",children:(0,b.jsx)(d.Loader2Icon,{className:"text-muted-foreground h-5 w-5 animate-spin"})});if(H){let d=(0,b.jsxs)("button",{type:"button",className:"relative block cursor-pointer rounded-md",children:[(0,b.jsx)("img",{src:t(w,v),alt:a,title:a,className:"h-12 w-12 rounded-md border object-cover transition-opacity hover:opacity-80"}),A?(0,b.jsx)("span",{className:"ring-background absolute -right-1 -bottom-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500 text-white shadow-sm ring-2",children:(0,b.jsx)(f.StickyNoteIcon,{className:"h-2.5 w-2.5"})}):null]});return(0,b.jsx)(j.TooltipProvider,{delayDuration:200,children:(0,b.jsxs)(h.Dialog,{children:[(0,b.jsxs)(j.Tooltip,{children:[(0,b.jsxs)("div",{className:"group relative",children:[(0,b.jsx)(j.TooltipTrigger,{asChild:!0,children:(0,b.jsx)(h.DialogTrigger,{asChild:!0,children:d})}),!z&&(0,b.jsx)("button",{type:"button",onClick:x,className:"absolute -top-1.5 -right-1.5 hidden h-5 w-5 cursor-pointer items-center justify-center rounded-full bg-black/70 text-white group-hover:flex","aria-label":`Remove ${a}`,children:(0,b.jsx)(c.X,{className:"h-3 w-3"})})]}),A?(0,b.jsx)(j.TooltipContent,{side:"top",sideOffset:10,className:"z-[80] max-w-[220px]",children:(0,b.jsx)("p",{className:"line-clamp-5 text-xs leading-snug whitespace-pre-wrap",children:A})}):null]}),(0,b.jsxs)(h.DialogContent,{className:"max-w-3xl gap-0 overflow-hidden border-0 p-0 [&>button:last-child]:!cursor-pointer [&>button:last-child]:!rounded-full [&>button:last-child]:!bg-black/70 [&>button:last-child]:!p-1.5 [&>button:last-child]:!text-white [&>button:last-child]:!opacity-100 [&>button:last-child]:!shadow-lg [&>button:last-child]:!backdrop-blur-md [&>button:last-child]:hover:!bg-black/90",children:[(0,b.jsx)(k.VisuallyHidden.Root,{children:(0,b.jsxs)(h.DialogTitle,{children:["Preview: ",a]})}),(0,b.jsx)("div",{className:"relative bg-black/90",children:(0,b.jsx)("img",{src:t(w,v),alt:a,className:"h-auto max-h-[70vh] w-full object-contain"})}),(0,b.jsxs)("div",{className:"bg-background flex flex-col gap-2 px-4 py-3",children:[(0,b.jsxs)("div",{className:"flex items-center gap-3",children:[(0,b.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col",children:[(0,b.jsx)("span",{className:"truncate text-sm font-medium",children:a}),(0,b.jsx)("span",{className:"text-muted-foreground text-xs",children:r(u)})]}),(0,b.jsx)("a",{href:t(w,v),download:a,className:"text-muted-foreground hover:text-foreground shrink-0 cursor-pointer rounded p-1.5 transition-colors","aria-label":`Download ${a}`,children:(0,b.jsx)(e.DownloadIcon,{className:"h-4 w-4"})})]}),B?(0,b.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,b.jsx)(i.Textarea,{placeholder:"Add notes about this image…",value:A??"",onChange:a=>B(a.target.value),rows:2,className:"resize-none text-sm","aria-label":"Image notes"}),A?.trim()?(0,b.jsx)("span",{className:"text-muted-foreground text-xs",children:"Auto-saved"}):null]}):A?(0,b.jsx)("p",{className:"text-muted-foreground text-sm whitespace-pre-wrap",children:A}):null]})]})]})})}return(0,b.jsxs)("div",{className:"group relative flex items-center gap-2 rounded-full border py-1 ps-2 pe-3",children:[(0,b.jsx)("div",{className:(0,g.cn)("flex h-6 w-6 shrink-0 items-center justify-center rounded-full",G),children:(0,b.jsx)(F,{className:"h-3 w-3"})}),(0,b.jsx)("span",{className:"max-w-[120px] truncate text-sm",children:a}),(0,b.jsx)("span",{className:"text-muted-foreground text-xs",children:r(u)}),!z&&(0,b.jsx)("button",{type:"button",onClick:x,className:"absolute -top-1.5 -right-1.5 hidden h-5 w-5 cursor-pointer items-center justify-center rounded-full bg-black/70 text-white group-hover:flex","aria-label":`Remove ${a}`,children:(0,b.jsx)(c.X,{className:"h-3 w-3"})})]})}a.s(["AttachmentChip",()=>u],30931),a.s([],307)},76096,a=>{"use strict";let b=(0,a.i(25700).default)("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]);a.s(["default",()=>b])},4019,a=>{"use strict";let b=(0,a.i(25700).default)("circle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);a.s(["Circle",()=>b],4019)},71716,a=>{"use strict";let b=(0,a.i(25700).default)("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);a.s(["ChevronDown",()=>b],71716)},2811,a=>{"use strict";let b=(0,a.i(25700).default)("circle-check",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);a.s(["default",()=>b])},2065,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"useMergedRef",{enumerable:!0,get:function(){return e}});let d=a.r(96960);function e(a,b){let c=(0,d.useRef)(null),e=(0,d.useRef)(null);return(0,d.useCallback)(d=>{if(null===d){let a=c.current;a&&(c.current=null,a());let b=e.current;b&&(e.current=null,b())}else a&&(c.current=f(a,d)),b&&(e.current=f(b,d))},[a,b])}function f(a,b){if("function"!=typeof a)return a.current=b,()=>{a.current=null};{let c=a(b);return"function"==typeof c?c:()=>a(null)}}("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)},61712,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0}),Object.defineProperty(c,"warnOnce",{enumerable:!0,get:function(){return d}});let d=a=>{}},27478,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={getDeploymentId:function(){return f},getDeploymentIdQueryOrEmptyString:function(){return g}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});function f(){return!1}function g(){return""}}];
2
+
3
+ //# sourceMappingURL=_8c3086bf._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/trash-2.ts","../../../../../../../src/presentation/web/hooks/use-attachments.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/send-horizontal.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/triangle-alert.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/file-text.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/paperclip.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/sticky-note.ts","../../../../../../../src/presentation/web/components/ui/textarea.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/file.ts","../../../../../../../src/presentation/web/components/common/attachment-chip/attachment-chip.tsx","../../../../../../../src/presentation/web/components/common/attachment-card/attachment-card.tsx","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/image.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/download.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/circle.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/chevron-down.ts","../../../../../../../node_modules/.pnpm/lucide-react%400.563.0_react%4019.2.4/node_modules/lucide-react/src/icons/circle-check.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/client/use-merged-ref.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/utils/warn-once.ts","../../../../../../../node_modules/.pnpm/next%4016.1.6_%40babel%2Bcore%407.29.0_%40playwright%2Btest%401.58.1_react-dom%4019.2.4_react%4019.2.4__react%4019.2.4/node_modules/next/src/shared/lib/deployment-id.ts"],"sourcesContent":["import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M10 11v6', key: 'nco0om' }],\n ['path', { d: 'M14 11v6', key: 'outv1u' }],\n ['path', { d: 'M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6', key: 'miytrc' }],\n ['path', { d: 'M3 6h18', key: 'd0wm0j' }],\n ['path', { d: 'M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2', key: 'e791ji' }],\n];\n\n/**\n * @component @name Trash2\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTAgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTQgMTF2NiIgLz4KICA8cGF0aCBkPSJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiAvPgogIDxwYXRoIGQ9Ik0zIDZoMTgiIC8+CiAgPHBhdGggZD0iTTggNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjIiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/trash-2\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Trash2 = createLucideIcon('trash-2', __iconNode);\n\nexport default Trash2;\n","'use client';\n\nimport { useState, useCallback, useRef } from 'react';\n\nconst MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB\n\n/** Minimal set of known-safe extensions (same as feature-create-drawer). */\nconst ALLOWED_EXTENSIONS = new Set([\n 'txt',\n 'md',\n 'csv',\n 'json',\n 'yaml',\n 'yml',\n 'xml',\n 'html',\n 'css',\n 'js',\n 'ts',\n 'jsx',\n 'tsx',\n 'py',\n 'rb',\n 'go',\n 'rs',\n 'java',\n 'kt',\n 'c',\n 'cpp',\n 'h',\n 'hpp',\n 'cs',\n 'swift',\n 'sh',\n 'bash',\n 'zsh',\n 'fish',\n 'ps1',\n 'bat',\n 'cmd',\n 'sql',\n 'graphql',\n 'proto',\n 'toml',\n 'ini',\n 'cfg',\n 'conf',\n 'env',\n 'dockerfile',\n 'makefile',\n 'cmake',\n 'gradle',\n 'sbt',\n 'lock',\n 'sum',\n 'mod',\n 'png',\n 'jpg',\n 'jpeg',\n 'gif',\n 'svg',\n 'webp',\n 'bmp',\n 'ico',\n 'avif',\n 'pdf',\n 'doc',\n 'docx',\n 'xls',\n 'xlsx',\n 'ppt',\n 'pptx',\n 'odt',\n 'ods',\n 'odp',\n 'zip',\n 'tar',\n 'gz',\n 'bz2',\n 'xz',\n '7z',\n 'rar',\n 'log',\n 'diff',\n 'patch',\n]);\n\nfunction getExtension(filename: string): string | null {\n const idx = filename.lastIndexOf('.');\n return idx > 0 ? filename.slice(idx + 1).toLowerCase() : null;\n}\n\nexport interface FormAttachment {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n path: string;\n loading?: boolean;\n notes?: string;\n}\n\nexport function useAttachments() {\n const [attachments, setAttachments] = useState<FormAttachment[]>([]);\n const [uploadError, setUploadError] = useState<string | null>(null);\n const [isDragOver, setIsDragOver] = useState(false);\n const dragCounterRef = useRef(0);\n const sessionIdRef = useRef(crypto.randomUUID());\n\n const handleFiles = useCallback(async (fileList: File[]) => {\n setUploadError(null);\n\n for (const file of fileList) {\n if (file.size > MAX_FILE_SIZE) {\n setUploadError(`\"${file.name}\" exceeds 10 MB limit`);\n return;\n }\n const ext = getExtension(file.name);\n if (ext && !ALLOWED_EXTENSIONS.has(ext)) {\n setUploadError(`File type \"${ext}\" is not allowed`);\n return;\n }\n }\n\n for (const file of fileList) {\n const tempId = crypto.randomUUID();\n\n setAttachments((prev) => [\n ...prev,\n {\n id: tempId,\n name: file.name,\n size: file.size,\n mimeType: file.type || 'application/octet-stream',\n path: '',\n loading: true,\n },\n ]);\n\n try {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('sessionId', sessionIdRef.current);\n\n const res = await fetch('/api/attachments/upload', {\n method: 'POST',\n body: formData,\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: 'Upload failed' }));\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError(body.error ?? 'Upload failed');\n return;\n }\n\n const uploaded = await res.json();\n setAttachments((prev) => {\n const isDupe = prev.some((a) => a.id !== tempId && a.path === uploaded.path);\n if (isDupe) return prev.filter((a) => a.id !== tempId);\n return prev.map((a) =>\n a.id === tempId ? { ...uploaded, id: tempId, loading: false } : a\n );\n });\n } catch {\n setAttachments((prev) => prev.filter((a) => a.id !== tempId));\n setUploadError('Upload failed');\n }\n }\n }, []);\n\n const handleDragEnter = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current += 1;\n if (dragCounterRef.current === 1) setIsDragOver(true);\n }, []);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current -= 1;\n if (dragCounterRef.current === 0) setIsDragOver(false);\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n dragCounterRef.current = 0;\n setIsDragOver(false);\n const files = Array.from(e.dataTransfer.files);\n if (files.length > 0) void handleFiles(files);\n },\n [handleFiles]\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n const items = e.clipboardData?.items;\n if (!items) return;\n const files: File[] = [];\n for (const item of Array.from(items)) {\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (file) files.push(file);\n }\n }\n if (files.length > 0) {\n e.preventDefault();\n void handleFiles(files);\n }\n },\n [handleFiles]\n );\n\n const removeAttachment = useCallback((id: string) => {\n setAttachments((prev) => prev.filter((a) => a.id !== id));\n }, []);\n\n const updateNotes = useCallback((id: string, notes: string) => {\n setAttachments((prev) => prev.map((a) => (a.id === id ? { ...a, notes } : a)));\n }, []);\n\n const addAttachment = useCallback((file: Omit<FormAttachment, 'loading'>) => {\n setAttachments((prev) => {\n const isDupe = prev.some((a) => a.path === file.path);\n if (isDupe) return prev;\n return [...prev, { ...file, loading: false }];\n });\n }, []);\n\n const clearAttachments = useCallback(() => {\n setAttachments([]);\n setUploadError(null);\n }, []);\n\n const completedAttachments = attachments.filter((a) => !a.loading);\n\n return {\n attachments,\n completedAttachments,\n uploadError,\n isDragOver,\n handleFiles,\n handleDragEnter,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handlePaste,\n addAttachment,\n removeAttachment,\n updateNotes,\n clearAttachments,\n };\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M3.714 3.048a.498.498 0 0 0-.683.627l2.843 7.627a2 2 0 0 1 0 1.396l-2.842 7.627a.498.498 0 0 0 .682.627l18-8.5a.5.5 0 0 0 0-.904z',\n key: '117uat',\n },\n ],\n ['path', { d: 'M6 12h16', key: 's4cdu5' }],\n];\n\n/**\n * @component @name SendHorizontal\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMy43MTQgMy4wNDhhLjQ5OC40OTggMCAwIDAtLjY4My42MjdsMi44NDMgNy42MjdhMiAyIDAgMCAxIDAgMS4zOTZsLTIuODQyIDcuNjI3YS40OTguNDk4IDAgMCAwIC42ODIuNjI3bDE4LTguNWEuNS41IDAgMCAwIDAtLjkwNHoiIC8+CiAgPHBhdGggZD0iTTYgMTJoMTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/send-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 SendHorizontal = createLucideIcon('send-horizontal', __iconNode);\n\nexport default SendHorizontal;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3',\n key: 'wmoenq',\n },\n ],\n ['path', { d: 'M12 9v4', key: 'juzpu7' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n];\n\n/**\n * @component @name TriangleAlert\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiIC8+CiAgPHBhdGggZD0iTTEyIDl2NCIgLz4KICA8cGF0aCBkPSJNMTIgMTdoLjAxIiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/triangle-alert\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 TriangleAlert = createLucideIcon('triangle-alert', __iconNode);\n\nexport default TriangleAlert;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n ['path', { d: 'M10 9H8', key: 'b1mrlr' }],\n ['path', { d: 'M16 13H8', key: 't4e002' }],\n ['path', { d: 'M16 17H8', key: 'z1uh3a' }],\n];\n\n/**\n * @component @name FileText\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KICA8cGF0aCBkPSJNMTAgOUg4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxM0g4IiAvPgogIDxwYXRoIGQ9Ik0xNiAxN0g4IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/file-text\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 FileText = createLucideIcon('file-text', __iconNode);\n\nexport default FileText;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'm16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551',\n key: '1miecu',\n },\n ],\n];\n\n/**\n * @component @name Paperclip\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtMTYgNi04LjQxNCA4LjU4NmEyIDIgMCAwIDAgMi44MjkgMi44MjlsOC40MTQtOC41ODZhNCA0IDAgMSAwLTUuNjU3LTUuNjU3bC04LjM3OSA4LjU1MWE2IDYgMCAxIDAgOC40ODUgOC40ODVsOC4zNzktOC41NTEiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/paperclip\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 Paperclip = createLucideIcon('paperclip', __iconNode);\n\nexport default Paperclip;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M21 9a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 15 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2z',\n key: '1dfntj',\n },\n ],\n ['path', { d: 'M15 3v5a1 1 0 0 0 1 1h5', key: '6s6qgf' }],\n];\n\n/**\n * @component @name StickyNote\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMjEgOWEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTUgM0g1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yeiIgLz4KICA8cGF0aCBkPSJNMTUgM3Y1YTEgMSAwIDAgMCAxIDFoNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/sticky-note\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 StickyNote = createLucideIcon('sticky-note', __iconNode);\n\nexport default StickyNote;\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input field-sizing-content min-h-[80px] w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n key: '1oefj6',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5', key: 'wfsgrz' }],\n];\n\n/**\n * @component @name File\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIgLz4KICA8cGF0aCBkPSJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/file\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 File = createLucideIcon('file', __iconNode);\n\nexport default File;\n","/* eslint-disable @next/next/no-img-element -- Local file preview requires raw <img>, not next/image */\n'use client';\n\nimport { X, Loader2Icon, DownloadIcon, StickyNoteIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Dialog, DialogTrigger, DialogContent, DialogTitle } from '@/components/ui/dialog';\nimport { Textarea } from '@/components/ui/textarea';\nimport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from '@/components/ui/tooltip';\nimport { VisuallyHidden } from 'radix-ui';\nimport {\n formatFileSize,\n getFileIcon,\n getFileIconColor,\n} from '@/components/common/attachment-card/attachment-card';\n\nexport interface AttachmentChipProps {\n name: string;\n size: number;\n mimeType: string;\n path: string;\n onRemove: () => void;\n loading?: boolean;\n disabled?: boolean;\n /** Optional notes attached to this image */\n notes?: string;\n /** Callback when user edits notes in the preview modal */\n onNotesChange?: (notes: string) => void;\n}\n\nconst IMAGE_EXTS = new Set(['.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp', '.ico', '.bmp']);\n\nfunction isImage(name: string): boolean {\n const dot = name.lastIndexOf('.');\n return dot >= 0 && IMAGE_EXTS.has(name.slice(dot).toLowerCase());\n}\n\nfunction previewUrl(path: string, mimeType: string): string {\n const params = new URLSearchParams({ path, mimeType });\n return `/api/attachments/preview?${params.toString()}`;\n}\n\nfunction getExtension(filename: string): string {\n const dot = filename.lastIndexOf('.');\n return dot >= 0 ? filename.slice(dot).toLowerCase() : '';\n}\n\nexport function AttachmentChip({\n name,\n size,\n mimeType,\n path,\n onRemove,\n loading = false,\n disabled = false,\n notes,\n onNotesChange,\n}: AttachmentChipProps) {\n const ext = getExtension(name);\n const Icon = getFileIcon(ext);\n const iconColorClass = getFileIconColor(ext);\n const imageFile = isImage(name);\n\n if (loading) {\n return (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border\">\n <Loader2Icon className=\"text-muted-foreground h-5 w-5 animate-spin\" />\n </div>\n );\n }\n\n if (imageFile) {\n const thumbnail = (\n <button type=\"button\" className=\"relative block cursor-pointer rounded-md\">\n <img\n src={previewUrl(path, mimeType)}\n alt={name}\n title={name}\n className=\"h-12 w-12 rounded-md border object-cover transition-opacity hover:opacity-80\"\n />\n {notes ? (\n <span className=\"ring-background absolute -right-1 -bottom-1 flex h-4 w-4 items-center justify-center rounded-full bg-amber-500 text-white shadow-sm ring-2\">\n <StickyNoteIcon className=\"h-2.5 w-2.5\" />\n </span>\n ) : null}\n </button>\n );\n\n return (\n <TooltipProvider delayDuration={200}>\n <Dialog>\n <Tooltip>\n <div className=\"group relative\">\n <TooltipTrigger asChild>\n <DialogTrigger asChild>{thumbnail}</DialogTrigger>\n </TooltipTrigger>\n {!disabled && (\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"absolute -top-1.5 -right-1.5 hidden h-5 w-5 cursor-pointer items-center justify-center rounded-full bg-black/70 text-white group-hover:flex\"\n aria-label={`Remove ${name}`}\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n {notes ? (\n <TooltipContent side=\"top\" sideOffset={10} className=\"z-[80] max-w-[220px]\">\n <p className=\"line-clamp-5 text-xs leading-snug whitespace-pre-wrap\">{notes}</p>\n </TooltipContent>\n ) : null}\n </Tooltip>\n <DialogContent className=\"max-w-3xl gap-0 overflow-hidden border-0 p-0 [&>button:last-child]:!cursor-pointer [&>button:last-child]:!rounded-full [&>button:last-child]:!bg-black/70 [&>button:last-child]:!p-1.5 [&>button:last-child]:!text-white [&>button:last-child]:!opacity-100 [&>button:last-child]:!shadow-lg [&>button:last-child]:!backdrop-blur-md [&>button:last-child]:hover:!bg-black/90\">\n <VisuallyHidden.Root>\n <DialogTitle>Preview: {name}</DialogTitle>\n </VisuallyHidden.Root>\n <div className=\"relative bg-black/90\">\n <img\n src={previewUrl(path, mimeType)}\n alt={name}\n className=\"h-auto max-h-[70vh] w-full object-contain\"\n />\n </div>\n <div className=\"bg-background flex flex-col gap-2 px-4 py-3\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-sm font-medium\">{name}</span>\n <span className=\"text-muted-foreground text-xs\">{formatFileSize(size)}</span>\n </div>\n <a\n href={previewUrl(path, mimeType)}\n download={name}\n className=\"text-muted-foreground hover:text-foreground shrink-0 cursor-pointer rounded p-1.5 transition-colors\"\n aria-label={`Download ${name}`}\n >\n <DownloadIcon className=\"h-4 w-4\" />\n </a>\n </div>\n {onNotesChange ? (\n <div className=\"flex flex-col gap-1\">\n <Textarea\n placeholder=\"Add notes about this image…\"\n value={notes ?? ''}\n onChange={(e) => onNotesChange(e.target.value)}\n rows={2}\n className=\"resize-none text-sm\"\n aria-label=\"Image notes\"\n />\n {notes?.trim() ? (\n <span className=\"text-muted-foreground text-xs\">Auto-saved</span>\n ) : null}\n </div>\n ) : notes ? (\n <p className=\"text-muted-foreground text-sm whitespace-pre-wrap\">{notes}</p>\n ) : null}\n </div>\n </DialogContent>\n </Dialog>\n </TooltipProvider>\n );\n }\n\n return (\n <div className=\"group relative flex items-center gap-2 rounded-full border py-1 ps-2 pe-3\">\n <div\n className={cn(\n 'flex h-6 w-6 shrink-0 items-center justify-center rounded-full',\n iconColorClass\n )}\n >\n <Icon className=\"h-3 w-3\" />\n </div>\n <span className=\"max-w-[120px] truncate text-sm\">{name}</span>\n <span className=\"text-muted-foreground text-xs\">{formatFileSize(size)}</span>\n {!disabled && (\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"absolute -top-1.5 -right-1.5 hidden h-5 w-5 cursor-pointer items-center justify-center rounded-full bg-black/70 text-white group-hover:flex\"\n aria-label={`Remove ${name}`}\n >\n <X className=\"h-3 w-3\" />\n </button>\n )}\n </div>\n );\n}\n","import type { LucideIcon } from 'lucide-react';\nimport { FileIcon, FileTextIcon, ImageIcon, CodeIcon, Trash2Icon, Loader2Icon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { Button } from '@/components/ui/button';\n\nexport interface AttachmentCardProps {\n name: string;\n size: number;\n mimeType: string;\n onRemove: () => void;\n loading?: boolean;\n disabled?: boolean;\n /** Optional secondary text shown below the filename (e.g. file path). */\n subtitle?: string;\n}\n\nexport function AttachmentCard({\n name,\n size,\n mimeType: _mimeType,\n onRemove,\n loading = false,\n disabled = false,\n subtitle,\n}: AttachmentCardProps) {\n const ext = getExtension(name);\n const Icon = getFileIcon(ext);\n const iconColorClass = getFileIconColor(ext);\n\n return (\n <div className=\"flex items-center gap-3 rounded-md border p-2\">\n <div\n className={cn('flex h-8 w-8 shrink-0 items-center justify-center rounded', iconColorClass)}\n >\n <Icon className=\"h-4 w-4\" />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <span className=\"truncate text-sm font-medium\">{name}</span>\n {subtitle ? (\n <span className=\"text-muted-foreground truncate text-xs\">{subtitle}</span>\n ) : null}\n <span className=\"text-muted-foreground text-xs\">\n {loading ? 'Uploading...' : formatFileSize(size)}\n </span>\n </div>\n {loading ? (\n <Loader2Icon className=\"text-muted-foreground h-4 w-4 animate-spin\" />\n ) : (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={onRemove}\n disabled={disabled}\n aria-label={`Remove ${name}`}\n >\n <Trash2Icon className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n );\n}\n\nfunction getExtension(filename: string): string {\n const dot = filename.lastIndexOf('.');\n return dot >= 0 ? filename.slice(dot).toLowerCase() : '';\n}\n\nconst IMAGE_EXTS = new Set(['.png', '.jpg', '.jpeg', '.gif', '.svg', '.webp', '.ico', '.bmp']);\nconst CODE_EXTS = new Set([\n '.ts',\n '.tsx',\n '.js',\n '.jsx',\n '.json',\n '.yaml',\n '.yml',\n '.xml',\n '.html',\n '.css',\n '.md',\n]);\n\nexport function getFileIcon(ext: string): LucideIcon {\n if (IMAGE_EXTS.has(ext)) return ImageIcon;\n if (ext === '.pdf') return FileTextIcon;\n if (CODE_EXTS.has(ext)) return CodeIcon;\n return FileIcon;\n}\n\nexport function getFileIconColor(ext: string): string {\n if (ext === '.pdf') return 'bg-red-50 text-red-600';\n if (IMAGE_EXTS.has(ext)) return 'bg-blue-50 text-blue-600';\n if (CODE_EXTS.has(ext)) return 'bg-emerald-50 text-emerald-600';\n return 'bg-gray-50 text-gray-600';\n}\n\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n const units = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return `${(bytes / Math.pow(1024, i)).toFixed(i === 0 ? 0 : 1)} ${units[i]}`;\n}\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2', key: '1m3agn' }],\n ['circle', { cx: '9', cy: '9', r: '2', key: 'af1f0g' }],\n ['path', { d: 'm21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21', key: '1xmnt7' }],\n];\n\n/**\n * @component @name Image\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cmVjdCB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHg9IjMiIHk9IjMiIHJ4PSIyIiByeT0iMiIgLz4KICA8Y2lyY2xlIGN4PSI5IiBjeT0iOSIgcj0iMiIgLz4KICA8cGF0aCBkPSJtMjEgMTUtMy4wODYtMy4wODZhMiAyIDAgMCAwLTIuODI4IDBMNiAyMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/image\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 Image = createLucideIcon('image', __iconNode);\n\nexport default Image;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['path', { d: 'M12 15V3', key: 'm9g1x1' }],\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4', key: 'ih7n3h' }],\n ['path', { d: 'm7 10 5 5 5-5', key: 'brsn70' }],\n];\n\n/**\n * @component @name Download\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMTIgMTVWMyIgLz4KICA8cGF0aCBkPSJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgLz4KICA8cGF0aCBkPSJtNyAxMCA1IDUgNS01IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/download\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 Download = createLucideIcon('download', __iconNode);\n\nexport default Download;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }]];\n\n/**\n * @component @name Circle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/circle\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 Circle = createLucideIcon('circle', __iconNode);\n\nexport default Circle;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6', key: 'qrunsl' }]];\n\n/**\n * @component @name ChevronDown\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJtNiA5IDYgNiA2LTYiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/chevron-down\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ChevronDown = createLucideIcon('chevron-down', __iconNode);\n\nexport default ChevronDown;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'm9 12 2 2 4-4', key: 'dzmm74' }],\n];\n\n/**\n * @component @name CircleCheck\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJtOSAxMiAyIDIgNC00IiAvPgo8L3N2Zz4K) - https://lucide.dev/icons/circle-check\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 CircleCheck = createLucideIcon('circle-check', __iconNode);\n\nexport default CircleCheck;\n","import { useCallback, useRef, type Ref } from 'react'\n\n// This is a compatibility hook to support React 18 and 19 refs.\n// In 19, a cleanup function from refs may be returned.\n// In 18, returning a cleanup function creates a warning.\n// Since we take userspace refs, we don't know ahead of time if a cleanup function will be returned.\n// This implements cleanup functions with the old behavior in 18.\n// We know refs are always called alternating with `null` and then `T`.\n// So a call with `null` means we need to call the previous cleanup functions.\nexport function useMergedRef<TElement>(\n refA: Ref<TElement>,\n refB: Ref<TElement>\n): Ref<TElement> {\n const cleanupA = useRef<(() => void) | null>(null)\n const cleanupB = useRef<(() => void) | null>(null)\n\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return useCallback(\n (current: TElement | null): void => {\n if (current === null) {\n const cleanupFnA = cleanupA.current\n if (cleanupFnA) {\n cleanupA.current = null\n cleanupFnA()\n }\n const cleanupFnB = cleanupB.current\n if (cleanupFnB) {\n cleanupB.current = null\n cleanupFnB()\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current)\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current)\n }\n }\n },\n [refA, refB]\n )\n}\n\nfunction applyRef<TElement>(\n refA: NonNullable<Ref<TElement>>,\n current: TElement\n) {\n if (typeof refA === 'function') {\n const cleanup = refA(current)\n if (typeof cleanup === 'function') {\n return cleanup\n } else {\n return () => refA(null)\n }\n } else {\n refA.current = current\n return () => {\n refA.current = null\n }\n }\n}\n","let warnOnce = (_: string) => {}\nif (process.env.NODE_ENV !== 'production') {\n const warnings = new Set<string>()\n warnOnce = (msg: string) => {\n if (!warnings.has(msg)) {\n console.warn(msg)\n }\n warnings.add(msg)\n }\n}\n\nexport { warnOnce }\n","// This could also be a variable instead of a function, but some unit tests want to change the ID at\n// runtime. Even though that would never happen in a real deployment.\nexport function getDeploymentId(): string | undefined {\n return process.env.NEXT_DEPLOYMENT_ID\n}\n\nexport function getDeploymentIdQueryOrEmptyString(): string {\n let deploymentId = getDeploymentId()\n if (deploymentId) {\n return `?dpl=${deploymentId}`\n }\n return ''\n}\n"],"names":["useMergedRef","refA","refB","cleanupA","useRef","cleanupB","useCallback","current","cleanupFnA","cleanupFnB","applyRef","cleanup","warnOnce","_","process","env","NODE_ENV","warnings","Set","msg","has","console","warn","add","getDeploymentId","getDeploymentIdQueryOrEmptyString","NEXT_DEPLOYMENT_ID","deploymentId"],"mappings":"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","ignoreList":[0,2,6,8,11,13,14,16,17,18]}