@agent-native/core 0.76.3 → 0.76.4

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 (421) hide show
  1. package/corpus/core/CHANGELOG.md +6 -0
  2. package/corpus/core/package.json +1 -1
  3. package/corpus/core/src/client/AgentPanel.tsx +3 -3
  4. package/corpus/core/src/client/AgentTaskCard.tsx +2 -1
  5. package/corpus/core/src/client/AppearancePicker.tsx +1 -1
  6. package/corpus/core/src/client/AssistantChat.tsx +3 -3
  7. package/corpus/core/src/client/CommandMenu.tsx +4 -4
  8. package/corpus/core/src/client/ErrorBoundary.tsx +1 -1
  9. package/corpus/core/src/client/MultiTabAssistantChat.tsx +11 -11
  10. package/corpus/core/src/client/NewWorkspaceAppFlow.tsx +5 -5
  11. package/corpus/core/src/client/components/ui/dropdown-menu.tsx +9 -9
  12. package/corpus/core/src/client/components/ui/sheet.tsx +1 -1
  13. package/corpus/core/src/client/composer/ComposerPlusMenu.tsx +6 -6
  14. package/corpus/core/src/client/composer/MentionPopover.tsx +4 -4
  15. package/corpus/core/src/client/composer/PastedTextChip.tsx +3 -3
  16. package/corpus/core/src/client/composer/PromptComposer.tsx +3 -3
  17. package/corpus/core/src/client/composer/TiptapComposer.tsx +16 -16
  18. package/corpus/core/src/client/guided-questions.tsx +6 -8
  19. package/corpus/core/src/client/i18n.tsx +2 -2
  20. package/corpus/core/src/client/integrations/IntegrationCard.tsx +2 -2
  21. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +4 -4
  22. package/corpus/core/src/client/notifications/NotificationsBell.tsx +3 -3
  23. package/corpus/core/src/client/onboarding/OnboardingBanner.tsx +3 -3
  24. package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +17 -10
  25. package/corpus/core/src/client/org/OrgSwitcher.tsx +13 -11
  26. package/corpus/core/src/client/org/TeamPage.tsx +2 -2
  27. package/corpus/core/src/client/settings/AgentsSection.tsx +3 -3
  28. package/corpus/core/src/client/settings/AutomationsSection.tsx +3 -3
  29. package/corpus/core/src/client/settings/SecretsSection.tsx +2 -2
  30. package/corpus/core/src/client/settings/SettingsPanel.tsx +5 -7
  31. package/corpus/core/src/client/settings/SettingsSection.tsx +1 -1
  32. package/corpus/core/src/client/settings/UsageSection.tsx +3 -3
  33. package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +3 -3
  34. package/corpus/core/src/client/sharing/ShareButton.tsx +7 -7
  35. package/corpus/core/src/client/sharing/ShareDialog.tsx +3 -3
  36. package/corpus/core/src/styles/agent-conversation.css +10 -10
  37. package/corpus/core/src/styles/blocks.css +2 -2
  38. package/corpus/core/src/styles/rich-markdown-editor.css +2 -2
  39. package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +1 -1
  40. package/corpus/templates/analytics/app/components/ui/alert-dialog.tsx +1 -1
  41. package/corpus/templates/analytics/app/components/ui/alert.tsx +1 -1
  42. package/corpus/templates/analytics/app/components/ui/breadcrumb.tsx +1 -1
  43. package/corpus/templates/analytics/app/components/ui/calendar.tsx +6 -6
  44. package/corpus/templates/analytics/app/components/ui/carousel.tsx +6 -6
  45. package/corpus/templates/analytics/app/components/ui/command.tsx +2 -2
  46. package/corpus/templates/analytics/app/components/ui/context-menu.tsx +9 -9
  47. package/corpus/templates/analytics/app/components/ui/date-picker.tsx +1 -1
  48. package/corpus/templates/analytics/app/components/ui/dialog.tsx +2 -2
  49. package/corpus/templates/analytics/app/components/ui/drawer.tsx +1 -1
  50. package/corpus/templates/analytics/app/components/ui/dropdown-menu.tsx +9 -9
  51. package/corpus/templates/analytics/app/components/ui/input-otp.tsx +1 -1
  52. package/corpus/templates/analytics/app/components/ui/menubar.tsx +9 -9
  53. package/corpus/templates/analytics/app/components/ui/navigation-menu.tsx +3 -3
  54. package/corpus/templates/analytics/app/components/ui/pagination.tsx +4 -4
  55. package/corpus/templates/analytics/app/components/ui/scroll-area.tsx +1 -1
  56. package/corpus/templates/analytics/app/components/ui/select.tsx +3 -3
  57. package/corpus/templates/analytics/app/components/ui/sheet.tsx +2 -2
  58. package/corpus/templates/analytics/app/components/ui/sidebar.tsx +6 -6
  59. package/corpus/templates/analytics/app/components/ui/table.tsx +2 -2
  60. package/corpus/templates/analytics/app/components/ui/toast.tsx +3 -3
  61. package/corpus/templates/assets/app/components/layout/Layout.tsx +2 -2
  62. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +12 -12
  63. package/corpus/templates/assets/app/components/ui/alert-dialog.tsx +1 -1
  64. package/corpus/templates/assets/app/components/ui/alert.tsx +1 -1
  65. package/corpus/templates/assets/app/components/ui/breadcrumb.tsx +1 -1
  66. package/corpus/templates/assets/app/components/ui/dialog.tsx +2 -2
  67. package/corpus/templates/assets/app/components/ui/dropdown-menu.tsx +9 -9
  68. package/corpus/templates/assets/app/components/ui/pagination.tsx +4 -4
  69. package/corpus/templates/assets/app/components/ui/scroll-area.tsx +1 -1
  70. package/corpus/templates/assets/app/components/ui/select.tsx +3 -3
  71. package/corpus/templates/assets/app/components/ui/sheet.tsx +2 -2
  72. package/corpus/templates/assets/app/components/ui/table.tsx +2 -2
  73. package/corpus/templates/assets/app/routes/library.tsx +3 -3
  74. package/corpus/templates/assets/app/routes/settings.tsx +1 -1
  75. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +5 -5
  76. package/corpus/templates/brain/app/components/ui/dropdown-menu.tsx +9 -9
  77. package/corpus/templates/brain/app/components/ui/select.tsx +3 -3
  78. package/corpus/templates/brain/app/components/ui/sheet.tsx +2 -2
  79. package/corpus/templates/brain/app/components/ui/table.tsx +2 -2
  80. package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +6 -6
  81. package/corpus/templates/calendar/app/components/calendar/GoogleSetupWizard.tsx +3 -3
  82. package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +11 -9
  83. package/corpus/templates/calendar/app/components/ui/alert-dialog.tsx +1 -1
  84. package/corpus/templates/calendar/app/components/ui/alert.tsx +1 -1
  85. package/corpus/templates/calendar/app/components/ui/breadcrumb.tsx +1 -1
  86. package/corpus/templates/calendar/app/components/ui/calendar.tsx +5 -5
  87. package/corpus/templates/calendar/app/components/ui/carousel.tsx +6 -6
  88. package/corpus/templates/calendar/app/components/ui/command.tsx +2 -2
  89. package/corpus/templates/calendar/app/components/ui/context-menu.tsx +9 -9
  90. package/corpus/templates/calendar/app/components/ui/dialog.tsx +2 -2
  91. package/corpus/templates/calendar/app/components/ui/drawer.tsx +1 -1
  92. package/corpus/templates/calendar/app/components/ui/dropdown-menu.tsx +9 -9
  93. package/corpus/templates/calendar/app/components/ui/input-otp.tsx +1 -1
  94. package/corpus/templates/calendar/app/components/ui/menubar.tsx +9 -9
  95. package/corpus/templates/calendar/app/components/ui/navigation-menu.tsx +3 -3
  96. package/corpus/templates/calendar/app/components/ui/pagination.tsx +4 -4
  97. package/corpus/templates/calendar/app/components/ui/scroll-area.tsx +1 -1
  98. package/corpus/templates/calendar/app/components/ui/select.tsx +3 -3
  99. package/corpus/templates/calendar/app/components/ui/sheet.tsx +2 -2
  100. package/corpus/templates/calendar/app/components/ui/sidebar.tsx +6 -6
  101. package/corpus/templates/calendar/app/components/ui/sonner.tsx +1 -1
  102. package/corpus/templates/calendar/app/components/ui/table.tsx +2 -2
  103. package/corpus/templates/calendar/app/components/ui/toast.tsx +3 -3
  104. package/corpus/templates/calendar/app/pages/Settings.tsx +5 -5
  105. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +9 -9
  106. package/corpus/templates/chat/app/components/ui/alert-dialog.tsx +1 -1
  107. package/corpus/templates/chat/app/components/ui/alert.tsx +1 -1
  108. package/corpus/templates/chat/app/components/ui/breadcrumb.tsx +1 -1
  109. package/corpus/templates/chat/app/components/ui/calendar.tsx +5 -5
  110. package/corpus/templates/chat/app/components/ui/carousel.tsx +6 -6
  111. package/corpus/templates/chat/app/components/ui/command.tsx +2 -2
  112. package/corpus/templates/chat/app/components/ui/context-menu.tsx +9 -9
  113. package/corpus/templates/chat/app/components/ui/dialog.tsx +2 -2
  114. package/corpus/templates/chat/app/components/ui/drawer.tsx +1 -1
  115. package/corpus/templates/chat/app/components/ui/dropdown-menu.tsx +9 -9
  116. package/corpus/templates/chat/app/components/ui/input-otp.tsx +1 -1
  117. package/corpus/templates/chat/app/components/ui/menubar.tsx +9 -9
  118. package/corpus/templates/chat/app/components/ui/navigation-menu.tsx +3 -3
  119. package/corpus/templates/chat/app/components/ui/pagination.tsx +4 -4
  120. package/corpus/templates/chat/app/components/ui/scroll-area.tsx +1 -1
  121. package/corpus/templates/chat/app/components/ui/select.tsx +3 -3
  122. package/corpus/templates/chat/app/components/ui/sheet.tsx +2 -2
  123. package/corpus/templates/chat/app/components/ui/sidebar.tsx +6 -6
  124. package/corpus/templates/chat/app/components/ui/table.tsx +2 -2
  125. package/corpus/templates/chat/app/components/ui/toast.tsx +3 -3
  126. package/corpus/templates/clips/app/components/capture-install-options.tsx +3 -3
  127. package/corpus/templates/clips/app/components/editable-recording-title.tsx +1 -1
  128. package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +3 -3
  129. package/corpus/templates/clips/app/components/library/folder-tree.tsx +5 -5
  130. package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -3
  131. package/corpus/templates/clips/app/components/library/organization-switcher.tsx +4 -4
  132. package/corpus/templates/clips/app/components/library/recording-card.tsx +11 -11
  133. package/corpus/templates/clips/app/components/library/search-bar.tsx +4 -4
  134. package/corpus/templates/clips/app/components/library/space-card.tsx +1 -1
  135. package/corpus/templates/clips/app/components/library/tag-input.tsx +1 -1
  136. package/corpus/templates/clips/app/components/meetings/quick-ask-sidebar.tsx +2 -2
  137. package/corpus/templates/clips/app/components/recorder/camera-visualizer.tsx +2 -2
  138. package/corpus/templates/clips/app/components/recorder/microphone-visualizer.tsx +1 -1
  139. package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +4 -4
  140. package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +1 -1
  141. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +2 -2
  142. package/corpus/templates/clips/app/components/ui/alert-dialog.tsx +1 -1
  143. package/corpus/templates/clips/app/components/ui/alert.tsx +1 -1
  144. package/corpus/templates/clips/app/components/ui/breadcrumb.tsx +1 -1
  145. package/corpus/templates/clips/app/components/ui/calendar.tsx +5 -5
  146. package/corpus/templates/clips/app/components/ui/carousel.tsx +6 -6
  147. package/corpus/templates/clips/app/components/ui/command.tsx +2 -2
  148. package/corpus/templates/clips/app/components/ui/context-menu.tsx +9 -9
  149. package/corpus/templates/clips/app/components/ui/dialog.tsx +2 -2
  150. package/corpus/templates/clips/app/components/ui/drawer.tsx +1 -1
  151. package/corpus/templates/clips/app/components/ui/dropdown-menu.tsx +9 -9
  152. package/corpus/templates/clips/app/components/ui/input-otp.tsx +1 -1
  153. package/corpus/templates/clips/app/components/ui/menubar.tsx +9 -9
  154. package/corpus/templates/clips/app/components/ui/navigation-menu.tsx +3 -3
  155. package/corpus/templates/clips/app/components/ui/pagination.tsx +4 -4
  156. package/corpus/templates/clips/app/components/ui/scroll-area.tsx +1 -1
  157. package/corpus/templates/clips/app/components/ui/select.tsx +3 -3
  158. package/corpus/templates/clips/app/components/ui/sheet.tsx +2 -2
  159. package/corpus/templates/clips/app/components/ui/sidebar.tsx +6 -6
  160. package/corpus/templates/clips/app/components/ui/table.tsx +2 -2
  161. package/corpus/templates/clips/app/components/ui/toast.tsx +3 -3
  162. package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +1 -1
  163. package/corpus/templates/clips/app/components/workspace/insights-hub.tsx +2 -2
  164. package/corpus/templates/clips/app/components/workspace/invite-dialog.tsx +2 -2
  165. package/corpus/templates/clips/app/components/workspace/top-creators-table.tsx +6 -6
  166. package/corpus/templates/clips/app/components/workspace/top-videos-table.tsx +2 -2
  167. package/corpus/templates/clips/app/routes/_app.dictate.tsx +4 -4
  168. package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +7 -7
  169. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +1 -1
  170. package/corpus/templates/clips/app/routes/download.tsx +2 -2
  171. package/corpus/templates/clips/app/routes/invite.$token.tsx +2 -2
  172. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +3 -3
  173. package/corpus/templates/clips/app/routes/record.tsx +5 -5
  174. package/corpus/templates/clips/app/routes/share.$shareId.tsx +7 -7
  175. package/corpus/templates/content/app/components/EmptyState.tsx +1 -1
  176. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +17 -17
  177. package/corpus/templates/content/app/components/layout/Layout.tsx +2 -2
  178. package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +10 -9
  179. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +10 -6
  180. package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +3 -3
  181. package/corpus/templates/content/app/components/ui/alert-dialog.tsx +1 -1
  182. package/corpus/templates/content/app/components/ui/dialog.tsx +2 -2
  183. package/corpus/templates/content/app/components/ui/dropdown-menu.tsx +9 -9
  184. package/corpus/templates/content/app/components/ui/scroll-area.tsx +1 -1
  185. package/corpus/templates/content/app/components/ui/sheet.tsx +2 -2
  186. package/corpus/templates/content/app/components/ui/table.tsx +2 -2
  187. package/corpus/templates/content/app/components/ui/toast.tsx +3 -3
  188. package/corpus/templates/design/app/components/layout/Layout.tsx +3 -3
  189. package/corpus/templates/design/app/components/layout/Sidebar.tsx +3 -3
  190. package/corpus/templates/design/app/components/ui/alert-dialog.tsx +1 -1
  191. package/corpus/templates/design/app/components/ui/alert.tsx +1 -1
  192. package/corpus/templates/design/app/components/ui/breadcrumb.tsx +1 -1
  193. package/corpus/templates/design/app/components/ui/calendar.tsx +5 -5
  194. package/corpus/templates/design/app/components/ui/carousel.tsx +6 -6
  195. package/corpus/templates/design/app/components/ui/command.tsx +2 -2
  196. package/corpus/templates/design/app/components/ui/context-menu.tsx +9 -9
  197. package/corpus/templates/design/app/components/ui/dialog.tsx +2 -2
  198. package/corpus/templates/design/app/components/ui/drawer.tsx +1 -1
  199. package/corpus/templates/design/app/components/ui/dropdown-menu.tsx +9 -9
  200. package/corpus/templates/design/app/components/ui/input-otp.tsx +1 -1
  201. package/corpus/templates/design/app/components/ui/menubar.tsx +9 -9
  202. package/corpus/templates/design/app/components/ui/navigation-menu.tsx +3 -3
  203. package/corpus/templates/design/app/components/ui/pagination.tsx +4 -4
  204. package/corpus/templates/design/app/components/ui/scroll-area.tsx +1 -1
  205. package/corpus/templates/design/app/components/ui/select.tsx +3 -3
  206. package/corpus/templates/design/app/components/ui/sheet.tsx +2 -2
  207. package/corpus/templates/design/app/components/ui/sidebar.tsx +6 -6
  208. package/corpus/templates/design/app/components/ui/table.tsx +2 -2
  209. package/corpus/templates/design/app/components/ui/toast.tsx +3 -3
  210. package/corpus/templates/design/app/pages/DesignSystems.tsx +6 -8
  211. package/corpus/templates/design/app/pages/Index.tsx +8 -8
  212. package/corpus/templates/design/app/pages/NotFound.tsx +1 -1
  213. package/corpus/templates/design/app/pages/Templates.tsx +2 -2
  214. package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
  215. package/corpus/templates/forms/app/components/ui/alert-dialog.tsx +1 -1
  216. package/corpus/templates/forms/app/components/ui/alert.tsx +1 -1
  217. package/corpus/templates/forms/app/components/ui/breadcrumb.tsx +1 -1
  218. package/corpus/templates/forms/app/components/ui/calendar.tsx +9 -6
  219. package/corpus/templates/forms/app/components/ui/carousel.tsx +6 -6
  220. package/corpus/templates/forms/app/components/ui/command.tsx +2 -2
  221. package/corpus/templates/forms/app/components/ui/context-menu.tsx +9 -9
  222. package/corpus/templates/forms/app/components/ui/dialog.tsx +2 -2
  223. package/corpus/templates/forms/app/components/ui/drawer.tsx +1 -1
  224. package/corpus/templates/forms/app/components/ui/dropdown-menu.tsx +9 -9
  225. package/corpus/templates/forms/app/components/ui/input-otp.tsx +1 -1
  226. package/corpus/templates/forms/app/components/ui/menubar.tsx +9 -9
  227. package/corpus/templates/forms/app/components/ui/navigation-menu.tsx +3 -3
  228. package/corpus/templates/forms/app/components/ui/pagination.tsx +4 -4
  229. package/corpus/templates/forms/app/components/ui/scroll-area.tsx +1 -1
  230. package/corpus/templates/forms/app/components/ui/select.tsx +3 -3
  231. package/corpus/templates/forms/app/components/ui/sheet.tsx +2 -2
  232. package/corpus/templates/forms/app/components/ui/sidebar.tsx +6 -6
  233. package/corpus/templates/forms/app/components/ui/table.tsx +2 -2
  234. package/corpus/templates/forms/app/components/ui/toast.tsx +3 -3
  235. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +18 -18
  236. package/corpus/templates/forms/app/pages/FormsListPage.tsx +9 -9
  237. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +4 -4
  238. package/corpus/templates/macros/app/components/ui/alert-dialog.tsx +1 -1
  239. package/corpus/templates/macros/app/components/ui/alert.tsx +1 -1
  240. package/corpus/templates/macros/app/components/ui/breadcrumb.tsx +1 -1
  241. package/corpus/templates/macros/app/components/ui/command.tsx +2 -2
  242. package/corpus/templates/macros/app/components/ui/context-menu.tsx +9 -9
  243. package/corpus/templates/macros/app/components/ui/dialog.tsx +2 -2
  244. package/corpus/templates/macros/app/components/ui/drawer.tsx +1 -1
  245. package/corpus/templates/macros/app/components/ui/dropdown-menu.tsx +9 -9
  246. package/corpus/templates/macros/app/components/ui/menubar.tsx +9 -9
  247. package/corpus/templates/macros/app/components/ui/navigation-menu.tsx +3 -3
  248. package/corpus/templates/macros/app/components/ui/pagination.tsx +4 -4
  249. package/corpus/templates/macros/app/components/ui/scroll-area.tsx +1 -1
  250. package/corpus/templates/macros/app/components/ui/select.tsx +3 -3
  251. package/corpus/templates/macros/app/components/ui/sheet.tsx +2 -2
  252. package/corpus/templates/macros/app/components/ui/table.tsx +2 -2
  253. package/corpus/templates/macros/app/components/ui/toast.tsx +3 -3
  254. package/corpus/templates/macros/app/routes/_index.tsx +2 -2
  255. package/corpus/templates/macros/app/routes/analytics.tsx +1 -1
  256. package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +6 -6
  257. package/corpus/templates/mail/app/components/email/AttachmentStrip.tsx +2 -2
  258. package/corpus/templates/mail/app/components/email/EmailListItem.tsx +5 -5
  259. package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +5 -5
  260. package/corpus/templates/mail/app/components/email/MobileActionBar.tsx +3 -3
  261. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +10 -10
  262. package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +1 -1
  263. package/corpus/templates/mail/app/components/layout/SearchBar.tsx +3 -3
  264. package/corpus/templates/mail/app/components/ui/alert-dialog.tsx +1 -1
  265. package/corpus/templates/mail/app/components/ui/alert.tsx +1 -1
  266. package/corpus/templates/mail/app/components/ui/breadcrumb.tsx +1 -1
  267. package/corpus/templates/mail/app/components/ui/calendar.tsx +4 -4
  268. package/corpus/templates/mail/app/components/ui/carousel.tsx +6 -6
  269. package/corpus/templates/mail/app/components/ui/command.tsx +2 -2
  270. package/corpus/templates/mail/app/components/ui/context-menu.tsx +9 -9
  271. package/corpus/templates/mail/app/components/ui/dialog.tsx +2 -2
  272. package/corpus/templates/mail/app/components/ui/drawer.tsx +1 -1
  273. package/corpus/templates/mail/app/components/ui/dropdown-menu.tsx +9 -9
  274. package/corpus/templates/mail/app/components/ui/input-otp.tsx +1 -1
  275. package/corpus/templates/mail/app/components/ui/menubar.tsx +9 -9
  276. package/corpus/templates/mail/app/components/ui/navigation-menu.tsx +3 -3
  277. package/corpus/templates/mail/app/components/ui/pagination.tsx +4 -4
  278. package/corpus/templates/mail/app/components/ui/scroll-area.tsx +1 -1
  279. package/corpus/templates/mail/app/components/ui/select.tsx +3 -3
  280. package/corpus/templates/mail/app/components/ui/sheet.tsx +2 -2
  281. package/corpus/templates/mail/app/components/ui/sidebar.tsx +6 -6
  282. package/corpus/templates/mail/app/components/ui/sonner.tsx +2 -2
  283. package/corpus/templates/mail/app/components/ui/table.tsx +2 -2
  284. package/corpus/templates/mail/app/components/ui/toast.tsx +3 -3
  285. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +10 -10
  286. package/corpus/templates/plan/app/components/ui/alert-dialog.tsx +1 -1
  287. package/corpus/templates/plan/app/components/ui/alert.tsx +1 -1
  288. package/corpus/templates/plan/app/components/ui/breadcrumb.tsx +1 -1
  289. package/corpus/templates/plan/app/components/ui/calendar.tsx +5 -5
  290. package/corpus/templates/plan/app/components/ui/carousel.tsx +6 -6
  291. package/corpus/templates/plan/app/components/ui/command.tsx +2 -2
  292. package/corpus/templates/plan/app/components/ui/context-menu.tsx +9 -9
  293. package/corpus/templates/plan/app/components/ui/dialog.tsx +2 -2
  294. package/corpus/templates/plan/app/components/ui/drawer.tsx +1 -1
  295. package/corpus/templates/plan/app/components/ui/dropdown-menu.tsx +9 -9
  296. package/corpus/templates/plan/app/components/ui/input-otp.tsx +1 -1
  297. package/corpus/templates/plan/app/components/ui/menubar.tsx +9 -9
  298. package/corpus/templates/plan/app/components/ui/navigation-menu.tsx +3 -3
  299. package/corpus/templates/plan/app/components/ui/pagination.tsx +4 -4
  300. package/corpus/templates/plan/app/components/ui/scroll-area.tsx +1 -1
  301. package/corpus/templates/plan/app/components/ui/select.tsx +3 -3
  302. package/corpus/templates/plan/app/components/ui/sheet.tsx +2 -2
  303. package/corpus/templates/plan/app/components/ui/sidebar.tsx +6 -6
  304. package/corpus/templates/plan/app/components/ui/table.tsx +2 -2
  305. package/corpus/templates/plan/app/components/ui/toast.tsx +3 -3
  306. package/corpus/templates/slides/app/components/layout/Layout.tsx +1 -1
  307. package/corpus/templates/slides/app/components/ui/alert-dialog.tsx +1 -1
  308. package/corpus/templates/slides/app/components/ui/alert.tsx +1 -1
  309. package/corpus/templates/slides/app/components/ui/breadcrumb.tsx +1 -1
  310. package/corpus/templates/slides/app/components/ui/calendar.tsx +5 -5
  311. package/corpus/templates/slides/app/components/ui/carousel.tsx +6 -6
  312. package/corpus/templates/slides/app/components/ui/command.tsx +2 -2
  313. package/corpus/templates/slides/app/components/ui/context-menu.tsx +9 -9
  314. package/corpus/templates/slides/app/components/ui/dialog.tsx +2 -2
  315. package/corpus/templates/slides/app/components/ui/drawer.tsx +1 -1
  316. package/corpus/templates/slides/app/components/ui/dropdown-menu.tsx +9 -9
  317. package/corpus/templates/slides/app/components/ui/input-otp.tsx +1 -1
  318. package/corpus/templates/slides/app/components/ui/menubar.tsx +9 -9
  319. package/corpus/templates/slides/app/components/ui/navigation-menu.tsx +3 -3
  320. package/corpus/templates/slides/app/components/ui/pagination.tsx +4 -4
  321. package/corpus/templates/slides/app/components/ui/scroll-area.tsx +1 -1
  322. package/corpus/templates/slides/app/components/ui/select.tsx +3 -3
  323. package/corpus/templates/slides/app/components/ui/sheet.tsx +2 -2
  324. package/corpus/templates/slides/app/components/ui/sidebar.tsx +6 -6
  325. package/corpus/templates/slides/app/components/ui/table.tsx +2 -2
  326. package/corpus/templates/slides/app/components/ui/toast.tsx +3 -3
  327. package/corpus/templates/videos/app/components/ui/alert-dialog.tsx +1 -1
  328. package/corpus/templates/videos/app/components/ui/alert.tsx +1 -1
  329. package/corpus/templates/videos/app/components/ui/breadcrumb.tsx +1 -1
  330. package/corpus/templates/videos/app/components/ui/calendar.tsx +5 -5
  331. package/corpus/templates/videos/app/components/ui/carousel.tsx +6 -6
  332. package/corpus/templates/videos/app/components/ui/command.tsx +2 -2
  333. package/corpus/templates/videos/app/components/ui/context-menu.tsx +9 -9
  334. package/corpus/templates/videos/app/components/ui/dialog.tsx +2 -2
  335. package/corpus/templates/videos/app/components/ui/drawer.tsx +1 -1
  336. package/corpus/templates/videos/app/components/ui/dropdown-menu.tsx +9 -9
  337. package/corpus/templates/videos/app/components/ui/input-otp.tsx +1 -1
  338. package/corpus/templates/videos/app/components/ui/menubar.tsx +9 -9
  339. package/corpus/templates/videos/app/components/ui/navigation-menu.tsx +3 -3
  340. package/corpus/templates/videos/app/components/ui/pagination.tsx +4 -4
  341. package/corpus/templates/videos/app/components/ui/scroll-area.tsx +1 -1
  342. package/corpus/templates/videos/app/components/ui/select.tsx +3 -3
  343. package/corpus/templates/videos/app/components/ui/sheet.tsx +2 -2
  344. package/corpus/templates/videos/app/components/ui/sidebar.tsx +6 -6
  345. package/corpus/templates/videos/app/components/ui/table.tsx +2 -2
  346. package/corpus/templates/videos/app/components/ui/toast.tsx +3 -3
  347. package/dist/client/AgentPanel.js +3 -3
  348. package/dist/client/AgentPanel.js.map +1 -1
  349. package/dist/client/AgentTaskCard.d.ts.map +1 -1
  350. package/dist/client/AgentTaskCard.js +1 -1
  351. package/dist/client/AgentTaskCard.js.map +1 -1
  352. package/dist/client/AppearancePicker.js +1 -1
  353. package/dist/client/AppearancePicker.js.map +1 -1
  354. package/dist/client/AssistantChat.js +3 -3
  355. package/dist/client/AssistantChat.js.map +1 -1
  356. package/dist/client/CommandMenu.js +4 -4
  357. package/dist/client/CommandMenu.js.map +1 -1
  358. package/dist/client/ErrorBoundary.js +1 -1
  359. package/dist/client/ErrorBoundary.js.map +1 -1
  360. package/dist/client/MultiTabAssistantChat.js +9 -9
  361. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  362. package/dist/client/NewWorkspaceAppFlow.js +5 -5
  363. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  364. package/dist/client/components/ui/dropdown-menu.js +6 -6
  365. package/dist/client/components/ui/dropdown-menu.js.map +1 -1
  366. package/dist/client/components/ui/sheet.js +1 -1
  367. package/dist/client/components/ui/sheet.js.map +1 -1
  368. package/dist/client/composer/ComposerPlusMenu.js +5 -5
  369. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  370. package/dist/client/composer/MentionPopover.js +4 -4
  371. package/dist/client/composer/MentionPopover.js.map +1 -1
  372. package/dist/client/composer/PastedTextChip.js +2 -2
  373. package/dist/client/composer/PastedTextChip.js.map +1 -1
  374. package/dist/client/composer/PromptComposer.js +3 -3
  375. package/dist/client/composer/PromptComposer.js.map +1 -1
  376. package/dist/client/composer/TiptapComposer.js +12 -12
  377. package/dist/client/composer/TiptapComposer.js.map +1 -1
  378. package/dist/client/guided-questions.d.ts.map +1 -1
  379. package/dist/client/guided-questions.js +5 -5
  380. package/dist/client/guided-questions.js.map +1 -1
  381. package/dist/client/i18n.js +2 -2
  382. package/dist/client/i18n.js.map +1 -1
  383. package/dist/client/integrations/IntegrationCard.js +1 -1
  384. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  385. package/dist/client/integrations/IntegrationsPanel.js +4 -4
  386. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  387. package/dist/client/notifications/NotificationsBell.js +3 -3
  388. package/dist/client/notifications/NotificationsBell.js.map +1 -1
  389. package/dist/client/onboarding/OnboardingBanner.js +3 -3
  390. package/dist/client/onboarding/OnboardingBanner.js.map +1 -1
  391. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  392. package/dist/client/onboarding/OnboardingPanel.js +15 -10
  393. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  394. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  395. package/dist/client/org/OrgSwitcher.js +7 -7
  396. package/dist/client/org/OrgSwitcher.js.map +1 -1
  397. package/dist/client/org/TeamPage.js +2 -2
  398. package/dist/client/org/TeamPage.js.map +1 -1
  399. package/dist/client/settings/AgentsSection.js +3 -3
  400. package/dist/client/settings/AgentsSection.js.map +1 -1
  401. package/dist/client/settings/AutomationsSection.js +2 -2
  402. package/dist/client/settings/AutomationsSection.js.map +1 -1
  403. package/dist/client/settings/SecretsSection.js +2 -2
  404. package/dist/client/settings/SecretsSection.js.map +1 -1
  405. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  406. package/dist/client/settings/SettingsPanel.js +4 -4
  407. package/dist/client/settings/SettingsPanel.js.map +1 -1
  408. package/dist/client/settings/SettingsSection.js +1 -1
  409. package/dist/client/settings/SettingsSection.js.map +1 -1
  410. package/dist/client/settings/UsageSection.js +2 -2
  411. package/dist/client/settings/UsageSection.js.map +1 -1
  412. package/dist/client/settings/VoiceTranscriptionSection.js +3 -3
  413. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  414. package/dist/client/sharing/ShareButton.js +6 -6
  415. package/dist/client/sharing/ShareButton.js.map +1 -1
  416. package/dist/client/sharing/ShareDialog.js +3 -3
  417. package/dist/client/sharing/ShareDialog.js.map +1 -1
  418. package/dist/styles/agent-conversation.css +10 -10
  419. package/dist/styles/blocks.css +2 -2
  420. package/dist/styles/rich-markdown-editor.css +2 -2
  421. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TeamPage.js","sourceRoot":"","sources":["../../../src/client/org/TeamPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo, useRef, useState, type ReactNode } from \"react\";\nimport {\n IconBuilding,\n IconUserPlus,\n IconTrash,\n IconCrown,\n IconShieldCheck,\n IconLoader2,\n IconCheck,\n IconPencil,\n IconAt,\n IconX,\n IconKey,\n IconCopy,\n IconRefresh,\n IconEye,\n IconEyeOff,\n IconCloudUpload,\n IconFileImport,\n IconPlus,\n IconAlertTriangle,\n} from \"@tabler/icons-react\";\nimport {\n useOrg,\n useOrgMembers,\n useOrgInvitations,\n useCreateOrg,\n useUpdateOrg,\n useBulkInviteMembers,\n useChangeMemberRole,\n useAcceptInvitation,\n useRemoveMember,\n useSwitchOrg,\n useSetOrgDomain,\n useSetA2ASecret,\n useSyncA2ASecret,\n useJoinByDomain,\n type InviteRole,\n type SyncA2ASecretResult,\n} from \"./hooks.js\";\nimport type { DomainMatchOrg } from \"../../org/types.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nexport interface TeamPageProps {\n /**\n * Optional wrapper around the page contents. Templates pass their own Layout\n * component so the Team page renders inside the template's chrome.\n */\n layout?: (children: ReactNode) => ReactNode;\n /**\n * Title shown at the top of the page. Defaults to \"Team\".\n */\n title?: string;\n /**\n * Description shown on the \"Create an Organization\" card. Defaults to\n * \"Set up a team to collaborate with your colleagues.\"\n */\n createOrgDescription?: string;\n /**\n * Class applied to the outer max-width container. Templates can use this to\n * tweak page width.\n */\n className?: string;\n}\n\nfunction RoleIcon({ role }: { role: string }) {\n if (role === \"owner\")\n return <IconCrown className=\"h-3.5 w-3.5 text-amber-500\" />;\n if (role === \"admin\")\n return <IconShieldCheck className=\"h-3.5 w-3.5 text-blue-500\" />;\n return null;\n}\n\nfunction ErrorText({ error }: { error: unknown }) {\n if (!error) return null;\n return (\n <p className=\"text-xs text-red-500\">\n {error instanceof Error ? error.message : String(error)}\n </p>\n );\n}\n\nfunction PendingInvitationsCard() {\n const { data: org } = useOrg();\n const acceptInvitation = useAcceptInvitation();\n\n if (!org?.pendingInvitations?.length) return null;\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">Pending Invitations</h3>\n {org.pendingInvitations.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between rounded-md border border-border p-3\"\n >\n <div>\n <div className=\"text-sm font-medium\">{inv.orgName}</div>\n <div className=\"text-xs text-muted-foreground\">\n Invited by {inv.invitedBy}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => acceptInvitation.mutate(inv.id)}\n disabled={acceptInvitation.isPending}\n className=\"rounded-md bg-green-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-green-700 disabled:opacity-50\"\n >\n {acceptInvitation.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Accept\"\n )}\n </button>\n </div>\n ))}\n <ErrorText error={acceptInvitation.error} />\n </section>\n );\n}\n\nfunction JoinByDomainCard({ matches }: { matches: DomainMatchOrg[] }) {\n const joinByDomain = useJoinByDomain();\n const [pendingId, setPendingId] = useState<string | null>(null);\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">Join your team</h3>\n <p className=\"text-sm text-muted-foreground\">\n {matches.length === 1\n ? `An organization matching your email domain already exists. Join it to collaborate with your teammates.`\n : `Organizations matching your email domain already exist. Join one to collaborate with your teammates.`}\n </p>\n <div className=\"space-y-2\">\n {matches.map((m) => (\n <div\n key={m.orgId}\n className=\"flex items-center justify-between rounded-md border border-border p-3\"\n >\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-md bg-blue-600/10\">\n <IconBuilding className=\"h-4 w-4 text-blue-600\" />\n </div>\n <div className=\"text-sm font-medium\">{m.orgName}</div>\n </div>\n <button\n type=\"button\"\n disabled={joinByDomain.isPending && pendingId === m.orgId}\n onClick={() => {\n setPendingId(m.orgId);\n joinByDomain.mutate(m.orgId, {\n onSettled: () => setPendingId(null),\n });\n }}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {joinByDomain.isPending && pendingId === m.orgId ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Join\"\n )}\n </button>\n </div>\n ))}\n </div>\n <ErrorText error={joinByDomain.error} />\n </section>\n );\n}\n\nfunction CreateOrgCard({ description }: { description?: string }) {\n const createOrg = useCreateOrg();\n const [name, setName] = useState(\"\");\n const [showForm, setShowForm] = useState(false);\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">Create an Organization</h3>\n <p className=\"text-sm text-muted-foreground\">\n {description || \"Set up a team to collaborate with your colleagues.\"}\n </p>\n {!showForm ? (\n <button\n type=\"button\"\n onClick={() => setShowForm(true)}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90\"\n >\n Create organization\n </button>\n ) : (\n <div className=\"space-y-2\">\n <input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g. Acme Inc.\"\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n disabled={!name.trim() || createOrg.isPending}\n onClick={() =>\n createOrg.mutate(name.trim(), {\n onSuccess: () => {\n setName(\"\");\n setShowForm(false);\n },\n })\n }\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {createOrg.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Create\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowForm(false);\n setName(\"\");\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n <ErrorText error={createOrg.error} />\n </div>\n )}\n </section>\n );\n}\n\nfunction OrgNameDisplay({ name, canEdit }: { name: string; canEdit: boolean }) {\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(name);\n const updateOrg = useUpdateOrg();\n\n if (!canEdit) return <div className=\"text-sm font-medium\">{name}</div>;\n\n if (!editing) {\n return (\n <button\n type=\"button\"\n onClick={() => {\n setDraft(name);\n setEditing(true);\n }}\n className=\"group flex items-center gap-1.5 text-sm font-medium hover:text-foreground/80\"\n >\n {name}\n <IconPencil className=\"h-3 w-3 text-muted-foreground opacity-0 group-hover:opacity-100\" />\n </button>\n );\n }\n\n function save() {\n const trimmed = draft.trim();\n if (!trimmed || trimmed === name) {\n setEditing(false);\n return;\n }\n updateOrg.mutate(trimmed, { onSuccess: () => setEditing(false) });\n }\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <input\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") save();\n if (e.key === \"Escape\") setEditing(false);\n }}\n onBlur={save}\n className=\"rounded border border-border bg-background px-1.5 py-0.5 text-sm font-medium focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <ErrorText error={updateOrg.error} />\n </div>\n );\n}\n\nfunction MembersCard() {\n const { data: org } = useOrg();\n const { data: membersData, isLoading: isLoadingMembers } = useOrgMembers();\n const { data: invitationsData } = useOrgInvitations();\n const removeMember = useRemoveMember();\n const switchOrg = useSwitchOrg();\n\n const [showInviteForm, setShowInviteForm] = useState(false);\n\n if (!org?.orgId) return null;\n\n const isOwner = org.role === \"owner\";\n const isOwnerOrAdmin = isOwner || org.role === \"admin\";\n const members = membersData?.members ?? [];\n const pendingInvites = invitationsData?.invitations ?? [];\n const hasMultipleOrgs = (org.orgs?.length ?? 0) > 1;\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-blue-600/10\">\n <IconBuilding className=\"h-5 w-5 text-blue-600\" />\n </div>\n <div>\n <OrgNameDisplay name={org.orgName ?? \"\"} canEdit={isOwnerOrAdmin} />\n <div className=\"text-xs text-muted-foreground\">\n {members.length} member{members.length !== 1 ? \"s\" : \"\"} · You are{\" \"}\n {org.role}\n </div>\n </div>\n </div>\n {hasMultipleOrgs && (\n <select\n value={org.orgId ?? \"\"}\n onChange={(e) => switchOrg.mutate(e.target.value || null)}\n disabled={switchOrg.isPending}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-xs\"\n >\n {org.orgs.map((o) => (\n <option key={o.orgId} value={o.orgId}>\n {o.orgName}\n </option>\n ))}\n </select>\n )}\n </div>\n\n <div className=\"border-t border-border pt-3 space-y-1\">\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide mb-2\">\n Members\n </div>\n {isLoadingMembers && members.length === 0 && (\n <>\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className=\"flex items-center justify-between py-1.5 px-2\"\n >\n <div className=\"flex items-center gap-2\">\n <div\n className=\"h-3.5 rounded bg-muted animate-pulse\"\n style={{ width: `${140 + i * 30}px` }}\n />\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n </div>\n </div>\n ))}\n </>\n )}\n {members.map((m) => (\n <MemberRow\n key={m.email}\n email={m.email}\n role={m.role}\n isCurrentUser={m.email === org.email}\n currentUserRole={org.role ?? null}\n />\n ))}\n {pendingInvites.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between py-1.5 px-2 opacity-60\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{inv.email}</span>\n <RoleIcon role={inv.role} />\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n Invited{inv.role === \"admin\" ? \" · admin\" : \"\"}\n </span>\n </div>\n </div>\n ))}\n </div>\n\n {isOwnerOrAdmin && (\n <div className=\"border-t border-border pt-3\">\n {!showInviteForm ? (\n <button\n type=\"button\"\n onClick={() => setShowInviteForm(true)}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconUserPlus className=\"h-3.5 w-3.5\" />\n Invite members\n </button>\n ) : (\n <BulkInviteForm\n currentUserRole={org.role}\n onClose={() => setShowInviteForm(false)}\n />\n )}\n </div>\n )}\n\n {isOwnerOrAdmin && (\n <DomainSettingsSection\n domain={org.allowedDomain}\n ownerEmail={org.email}\n />\n )}\n\n {isOwner && <A2ASecretSection secret={org.a2aSecret} />}\n\n <ErrorText error={removeMember.error} />\n <ErrorText error={switchOrg.error} />\n </section>\n );\n}\n\nfunction MemberRow({\n email,\n role,\n isCurrentUser,\n currentUserRole,\n}: {\n email: string;\n role: string;\n isCurrentUser: boolean;\n currentUserRole: string | null;\n}) {\n const removeMember = useRemoveMember();\n const changeRole = useChangeMemberRole();\n const [editing, setEditing] = useState(false);\n const [confirmingRemove, setConfirmingRemove] = useState(false);\n\n // Owners can manage admins + members. Admins can only manage members.\n // Owners themselves are immutable through this UI; current user can't\n // edit their own role here.\n const canManage =\n role !== \"owner\" &&\n !isCurrentUser &&\n (currentUserRole === \"owner\" ||\n (currentUserRole === \"admin\" && role === \"member\"));\n\n return (\n <div className=\"flex items-center justify-between py-1.5 px-2 rounded hover:bg-accent/30\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{email}</span>\n <RoleIcon role={role} />\n {isCurrentUser && (\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n You\n </span>\n )}\n {role === \"admin\" && (\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-blue-600\">\n Admin\n </span>\n )}\n </div>\n {canManage && (\n <div className=\"flex items-center gap-1\">\n {editing ? (\n <select\n autoFocus\n value={role}\n onChange={(e) => {\n const next = e.target.value === \"admin\" ? \"admin\" : \"member\";\n if (next !== role) {\n changeRole.mutate(\n { email, role: next },\n { onSuccess: () => setEditing(false) },\n );\n } else {\n setEditing(false);\n }\n }}\n onBlur={() => setEditing(false)}\n disabled={changeRole.isPending}\n className=\"rounded-md border border-border bg-background px-1.5 py-0.5 text-[11px]\"\n >\n <option value=\"member\">Member</option>\n <option value=\"admin\">Admin</option>\n </select>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setEditing(true)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Change role</TooltipContent>\n </Tooltip>\n )}\n {confirmingRemove ? (\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => setConfirmingRemove(false)}\n className=\"rounded px-1.5 py-0.5 text-[11px] text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={removeMember.isPending}\n onClick={() =>\n removeMember.mutate(email, {\n onSettled: () => setConfirmingRemove(false),\n })\n }\n className=\"rounded bg-red-500 px-1.5 py-0.5 text-[11px] text-white hover:bg-red-600 disabled:opacity-50\"\n >\n Remove\n </button>\n </div>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n disabled={removeMember.isPending}\n onClick={() => setConfirmingRemove(true)}\n className=\"text-muted-foreground hover:text-red-500 disabled:opacity-50\"\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Remove member</TooltipContent>\n </Tooltip>\n )}\n </div>\n )}\n </div>\n );\n}\n\ninterface DraftInvite {\n email: string;\n role: InviteRole;\n}\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nfunction parseEmailList(input: string): string[] {\n return Array.from(\n new Set(\n input\n .split(/[\\s,;]+/)\n .map((s) => s.trim().toLowerCase())\n .filter(Boolean),\n ),\n );\n}\n\nfunction parseCsvEmails(text: string): string[] {\n // Tolerant CSV parse — split on lines, then on commas, take any cell\n // that looks like an email. Handles \"name,email,role\" rows or just\n // \"email\" per line. A robust full CSV parser would be overkill here.\n const cells: string[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n for (const cell of line.split(\",\")) {\n const trimmed = cell.trim().replace(/^\"|\"$/g, \"\");\n if (trimmed) cells.push(trimmed);\n }\n }\n return Array.from(\n new Set(cells.filter((c) => EMAIL_RE.test(c)).map((c) => c.toLowerCase())),\n );\n}\n\nfunction BulkInviteForm({\n currentUserRole,\n onClose,\n}: {\n currentUserRole: string | null;\n onClose: () => void;\n}) {\n const bulkInvite = useBulkInviteMembers();\n const fileRef = useRef<HTMLInputElement>(null);\n const [drafts, setDrafts] = useState<DraftInvite[]>([\n { email: \"\", role: \"member\" },\n ]);\n const [pasteOpen, setPasteOpen] = useState(false);\n const [pasteValue, setPasteValue] = useState(\"\");\n const [pasteRole, setPasteRole] = useState<InviteRole>(\"member\");\n const [resultBanner, setResultBanner] = useState<{\n succeeded: number;\n failed: { email: string; error: string }[];\n } | null>(null);\n\n const canSetAdmin = currentUserRole === \"owner\";\n\n const validDrafts = useMemo(\n () =>\n drafts\n .map((d) => ({ ...d, email: d.email.trim().toLowerCase() }))\n .filter((d) => EMAIL_RE.test(d.email)),\n [drafts],\n );\n\n function setDraft(index: number, patch: Partial<DraftInvite>) {\n setDrafts((prev) =>\n prev.map((d, i) => (i === index ? { ...d, ...patch } : d)),\n );\n }\n\n function appendEmails(emails: string[], role: InviteRole) {\n if (!emails.length) return;\n setDrafts((prev) => {\n const existing = new Set(\n prev.map((d) => d.email.trim().toLowerCase()).filter(Boolean),\n );\n const fresh: DraftInvite[] = [];\n for (const e of emails) {\n if (!existing.has(e)) {\n fresh.push({ email: e, role });\n existing.add(e);\n }\n }\n // If the only existing row is an empty placeholder, drop it.\n const cleaned = prev.filter(\n (d, i) => !(i === 0 && !d.email.trim() && prev.length === 1),\n );\n return [...cleaned, ...fresh];\n });\n }\n\n function handleFile(file: File) {\n file.text().then((text) => {\n const emails = parseCsvEmails(text);\n if (emails.length) {\n appendEmails(emails, \"member\");\n } else {\n setResultBanner({\n succeeded: 0,\n failed: [{ email: file.name, error: \"No valid emails found in CSV\" }],\n });\n }\n });\n }\n\n async function submit() {\n setResultBanner(null);\n const dedup = new Map<string, DraftInvite>();\n for (const d of validDrafts) {\n // canSetAdmin guard mirrors server-side enforcement so an admin-only\n // user editing the form can't even attempt to grant admin (they'd\n // get a 403 anyway).\n const role = canSetAdmin ? d.role : \"member\";\n dedup.set(d.email, { ...d, role });\n }\n const invites = Array.from(dedup.values());\n if (invites.length === 0) return;\n\n const result = await bulkInvite.mutateAsync(invites);\n setResultBanner({\n succeeded: result.succeeded.length,\n failed: result.failed,\n });\n\n // Wipe drafts that succeeded; leave failed ones so the user can fix\n // and retry. If everything succeeded, reset to a single blank row.\n const failedEmails = new Set(result.failed.map((f) => f.email));\n setDrafts((prev) => {\n const remaining = prev.filter((d) =>\n failedEmails.has(d.email.trim().toLowerCase()),\n );\n return remaining.length > 0 ? remaining : [{ email: \"\", role: \"member\" }];\n });\n\n // Auto-close on full success.\n if (result.failed.length === 0 && result.succeeded.length > 0) {\n setTimeout(() => onClose(), 1200);\n }\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n {drafts.map((draft, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <input\n type=\"email\"\n value={draft.email}\n onChange={(e) => setDraft(i, { email: e.target.value })}\n placeholder=\"colleague@company.com\"\n className=\"flex-1 rounded-md border border-border bg-background px-3 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus={i === drafts.length - 1}\n />\n <select\n value={draft.role}\n onChange={(e) =>\n setDraft(i, {\n role: e.target.value === \"admin\" ? \"admin\" : \"member\",\n })\n }\n disabled={!canSetAdmin}\n title={\n canSetAdmin\n ? undefined\n : \"Only the organization owner can invite admins\"\n }\n className=\"rounded-md border border-border bg-background px-2 py-1.5 text-xs disabled:opacity-50\"\n >\n <option value=\"member\">Member</option>\n <option value=\"admin\">Admin</option>\n </select>\n {drafts.length > 1 && (\n <button\n type=\"button\"\n onClick={() =>\n setDrafts((prev) => prev.filter((_, j) => j !== i))\n }\n className=\"text-muted-foreground hover:text-red-500\"\n >\n <IconX className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() =>\n setDrafts((prev) => [...prev, { email: \"\", role: \"member\" }])\n }\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n Add another\n </button>\n <button\n type=\"button\"\n onClick={() => setPasteOpen((v) => !v)}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconUserPlus className=\"h-3.5 w-3.5\" />\n Paste many\n </button>\n <button\n type=\"button\"\n onClick={() => fileRef.current?.click()}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconFileImport className=\"h-3.5 w-3.5\" />\n Import CSV\n </button>\n <input\n ref={fileRef}\n type=\"file\"\n accept=\".csv,text/csv,text/plain\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n // reset so re-uploading the same file re-fires onChange\n e.target.value = \"\";\n }}\n />\n </div>\n\n {pasteOpen && (\n <div className=\"space-y-2 rounded-md border border-border p-3\">\n <div className=\"text-xs font-medium text-muted-foreground\">\n Paste emails (comma, space, or newline separated)\n </div>\n <textarea\n value={pasteValue}\n onChange={(e) => setPasteValue(e.target.value)}\n rows={4}\n placeholder=\"alice@acme.com, bob@acme.com&#10;charlie@acme.com\"\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n />\n <div className=\"flex items-center gap-2\">\n <select\n value={pasteRole}\n onChange={(e) =>\n setPasteRole(e.target.value === \"admin\" ? \"admin\" : \"member\")\n }\n disabled={!canSetAdmin}\n className=\"rounded-md border border-border bg-background px-2 py-1.5 text-xs disabled:opacity-50\"\n >\n <option value=\"member\">Add as members</option>\n <option value=\"admin\">Add as admins</option>\n </select>\n <button\n type=\"button\"\n onClick={() => {\n appendEmails(parseEmailList(pasteValue), pasteRole);\n setPasteValue(\"\");\n setPasteOpen(false);\n }}\n disabled={parseEmailList(pasteValue).length === 0}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n Add\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setPasteValue(\"\");\n setPasteOpen(false);\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n disabled={validDrafts.length === 0 || bulkInvite.isPending}\n onClick={submit}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {bulkInvite.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <span className=\"inline-flex items-center gap-1\">\n <IconCheck className=\"h-3.5 w-3.5\" />\n Send {validDrafts.length || \"\"}{\" \"}\n {validDrafts.length === 1 ? \"invite\" : \"invites\"}\n </span>\n )}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Close\n </button>\n </div>\n\n <p className=\"text-[11px] text-muted-foreground\">\n Each invitee signs in with this exact email to accept.\n {canSetAdmin\n ? \" Admins can manage members and workspace settings.\"\n : \" Only the organization owner can grant admin access.\"}\n </p>\n\n {resultBanner && (\n <div className=\"space-y-1 rounded-md border border-border bg-accent/30 p-2.5\">\n {resultBanner.succeeded > 0 && (\n <p className=\"text-[11px] text-green-600\">\n <IconCheck className=\"inline h-3 w-3 -mt-0.5\" /> Sent{\" \"}\n {resultBanner.succeeded}{\" \"}\n {resultBanner.succeeded === 1 ? \"invite\" : \"invites\"}.\n </p>\n )}\n {resultBanner.failed.length > 0 && (\n <ul className=\"space-y-0.5 text-[11px] text-red-500\">\n {resultBanner.failed.map((f) => (\n <li key={f.email}>\n <IconAlertTriangle className=\"inline h-3 w-3 -mt-0.5 mr-1\" />\n {f.email}: {f.error}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n <ErrorText error={bulkInvite.error} />\n </div>\n );\n}\n\nfunction DomainSettingsSection({\n domain,\n ownerEmail,\n}: {\n domain: string | null;\n ownerEmail: string;\n}) {\n const setOrgDomain = useSetOrgDomain();\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(domain ?? \"\");\n\n const ownDomain = ownerEmail.split(\"@\")[1]?.toLowerCase() ?? \"\";\n\n function save() {\n const trimmed = draft.trim().toLowerCase();\n if (trimmed === (domain ?? \"\")) {\n setEditing(false);\n return;\n }\n setOrgDomain.mutate(trimmed || null, {\n onSuccess: () => setEditing(false),\n });\n }\n\n return (\n <div className=\"border-t border-border pt-3 space-y-2\">\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n Email domain auto-join\n </div>\n <p className=\"text-[11px] text-muted-foreground\">\n Anyone who signs up with an email at this domain will join your\n organization automatically. You can only set your own email domain (\n {ownDomain || \"—\"}); free email providers like gmail.com or outlook.com\n aren&apos;t allowed.\n </p>\n {!editing ? (\n <div className=\"flex items-center gap-2\">\n {domain ? (\n <>\n <span className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm\">\n <IconAt className=\"h-3.5 w-3.5 text-muted-foreground\" />\n {domain}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => {\n setDraft(domain);\n setEditing(true);\n }}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Edit domain</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n disabled={setOrgDomain.isPending}\n onClick={() => setOrgDomain.mutate(null)}\n className=\"text-muted-foreground hover:text-red-500 disabled:opacity-50\"\n >\n <IconX className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Remove domain</TooltipContent>\n </Tooltip>\n </>\n ) : (\n <button\n type=\"button\"\n onClick={() => {\n setDraft(ownDomain);\n setEditing(true);\n }}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconAt className=\"h-3.5 w-3.5\" />\n Allow {ownDomain || \"your domain\"} to auto-join\n </button>\n )}\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") save();\n if (e.key === \"Escape\") setEditing(false);\n }}\n placeholder={ownDomain || \"example.com\"}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <button\n type=\"button\"\n disabled={setOrgDomain.isPending}\n onClick={save}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {setOrgDomain.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => setEditing(false)}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n )}\n <ErrorText error={setOrgDomain.error} />\n </div>\n );\n}\n\nfunction A2ASecretSection({ secret }: { secret: string | null | undefined }) {\n const setA2ASecret = useSetA2ASecret();\n const syncA2ASecret = useSyncA2ASecret();\n const [revealed, setRevealed] = useState(false);\n const [copied, setCopied] = useState(false);\n const [pasteMode, setPasteMode] = useState(false);\n const [pasteValue, setPasteValue] = useState(\"\");\n const [syncResult, setSyncResult] = useState<SyncA2ASecretResult | null>(\n null,\n );\n\n function copyToClipboard() {\n if (!secret) return;\n navigator.clipboard.writeText(secret).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n\n // Push the current secret to all connected apps. Optionally pass the\n // PREVIOUS secret as `signSecret` so the receiving apps (which still\n // hold the previous value) can verify the JWT.\n function syncToApps(signSecret?: string) {\n setSyncResult(null);\n syncA2ASecret.mutate(signSecret ? { signSecret } : undefined, {\n onSuccess: (result) => {\n setSyncResult(result);\n },\n });\n }\n\n function regenerate() {\n setA2ASecret.mutate(undefined, {\n onSuccess: (result) => {\n setRevealed(false);\n // Auto-sync the new secret to all connected apps. Sign with the\n // PREVIOUS secret (which peers still hold) so verification on\n // their side succeeds and they accept the new value.\n syncToApps(result.previousSecret ?? undefined);\n },\n });\n }\n\n function saveSecret() {\n const trimmed = pasteValue.trim();\n if (!trimmed) return;\n setA2ASecret.mutate(trimmed, {\n onSuccess: (result) => {\n setPasteMode(false);\n setPasteValue(\"\");\n // Same auto-sync flow as regenerate: peers verify with the\n // previous secret, then update to the new pasted value.\n syncToApps(result.previousSecret ?? undefined);\n },\n });\n }\n\n const masked = secret ? \"****\" + secret.slice(-8) : \"Not set\";\n\n return (\n <div className=\"border-t border-border pt-3 space-y-2\">\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n Cross-app authentication\n </div>\n <p className=\"text-[11px] text-muted-foreground\">\n This secret authenticates cross-app delegation (e.g. Dispatch to\n Analytics). All apps in your organization need the same secret.\n </p>\n\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm font-mono\">\n <IconKey className=\"h-3.5 w-3.5 text-muted-foreground\" />\n {revealed && secret ? secret : masked}\n </span>\n {secret && (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setRevealed(!revealed)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n {revealed ? (\n <IconEyeOff className=\"h-3.5 w-3.5\" />\n ) : (\n <IconEye className=\"h-3.5 w-3.5\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {revealed ? \"Hide secret\" : \"Reveal secret\"}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={copyToClipboard}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n {copied ? (\n <IconCheck className=\"h-3.5 w-3.5 text-green-500\" />\n ) : (\n <IconCopy className=\"h-3.5 w-3.5\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>Copy secret</TooltipContent>\n </Tooltip>\n </>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={regenerate}\n disabled={setA2ASecret.isPending || syncA2ASecret.isPending}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50 disabled:opacity-50\"\n >\n {setA2ASecret.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <IconRefresh className=\"h-3.5 w-3.5\" />\n )}\n Regenerate\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Regenerate secret and sync to connected apps\n </TooltipContent>\n </Tooltip>\n {secret && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => syncToApps()}\n disabled={setA2ASecret.isPending || syncA2ASecret.isPending}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50 disabled:opacity-50\"\n >\n {syncA2ASecret.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <IconCloudUpload className=\"h-3.5 w-3.5\" />\n )}\n Sync to apps\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Push this secret to every connected app\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {syncA2ASecret.isPending && (\n <p className=\"text-[11px] text-muted-foreground\">\n Syncing to connected apps…\n </p>\n )}\n\n {syncResult && !syncA2ASecret.isPending && (\n <div className=\"space-y-1\">\n <p className=\"text-[11px] text-muted-foreground\">\n Synced to {syncResult.succeeded}/{syncResult.total} app\n {syncResult.total === 1 ? \"\" : \"s\"}\n {syncResult.failed > 0 ? ` (${syncResult.failed} failed)` : \"\"}.\n </p>\n {syncResult.failed > 0 && (\n <ul className=\"text-[11px] text-red-500 list-disc pl-5 space-y-0.5\">\n {syncResult.results\n .filter((r) => !r.ok)\n .map((r) => (\n <li key={r.id}>\n {r.name}: {r.error || `HTTP ${r.status ?? \"?\"}`}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n {!pasteMode ? (\n <button\n type=\"button\"\n onClick={() => setPasteMode(true)}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconKey className=\"h-3.5 w-3.5\" />\n Paste secret from another app\n </button>\n ) : (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={pasteValue}\n onChange={(e) => setPasteValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSecret();\n if (e.key === \"Escape\") {\n setPasteMode(false);\n setPasteValue(\"\");\n }\n }}\n placeholder=\"Paste A2A secret\"\n className=\"flex-1 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm font-mono focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <button\n type=\"button\"\n disabled={!pasteValue.trim() || setA2ASecret.isPending}\n onClick={saveSecret}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {setA2ASecret.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setPasteMode(false);\n setPasteValue(\"\");\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n )}\n\n <ErrorText error={setA2ASecret.error} />\n <ErrorText error={syncA2ASecret.error} />\n </div>\n );\n}\n\n/**\n * Default Team management page. Templates can route directly to this component\n * or wrap it with their own Layout via the `layout` prop.\n */\nexport function TeamPage({\n layout,\n title = \"Team\",\n createOrgDescription,\n className,\n}: TeamPageProps) {\n const { data: org, isLoading } = useOrg();\n\n const content = (\n <div className={`space-y-6 max-w-2xl ${className ?? \"\"}`}>\n <h2 className=\"text-2xl font-bold tracking-tight\">{title}</h2>\n\n {isLoading && (\n <section className=\"rounded-lg border border-border bg-card p-6\">\n <div className=\"text-sm text-muted-foreground\">Loading…</div>\n </section>\n )}\n\n {!isLoading && (\n <>\n <PendingInvitationsCard />\n {!org?.orgId ? (\n <>\n {org?.domainMatches && org.domainMatches.length > 0 && (\n <JoinByDomainCard matches={org.domainMatches} />\n )}\n <CreateOrgCard description={createOrgDescription} />\n </>\n ) : (\n <MembersCard />\n )}\n </>\n )}\n </div>\n );\n\n const wrapped = (\n <TooltipProvider delayDuration={200}>{content}</TooltipProvider>\n );\n\n return layout ? <>{layout(wrapped)}</> : wrapped;\n}\n"]}
1
+ {"version":3,"file":"TeamPage.js","sourceRoot":"","sources":["../../../src/client/org/TeamPage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo, useRef, useState, type ReactNode } from \"react\";\nimport {\n IconBuilding,\n IconUserPlus,\n IconTrash,\n IconCrown,\n IconShieldCheck,\n IconLoader2,\n IconCheck,\n IconPencil,\n IconAt,\n IconX,\n IconKey,\n IconCopy,\n IconRefresh,\n IconEye,\n IconEyeOff,\n IconCloudUpload,\n IconFileImport,\n IconPlus,\n IconAlertTriangle,\n} from \"@tabler/icons-react\";\nimport {\n useOrg,\n useOrgMembers,\n useOrgInvitations,\n useCreateOrg,\n useUpdateOrg,\n useBulkInviteMembers,\n useChangeMemberRole,\n useAcceptInvitation,\n useRemoveMember,\n useSwitchOrg,\n useSetOrgDomain,\n useSetA2ASecret,\n useSyncA2ASecret,\n useJoinByDomain,\n type InviteRole,\n type SyncA2ASecretResult,\n} from \"./hooks.js\";\nimport type { DomainMatchOrg } from \"../../org/types.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nexport interface TeamPageProps {\n /**\n * Optional wrapper around the page contents. Templates pass their own Layout\n * component so the Team page renders inside the template's chrome.\n */\n layout?: (children: ReactNode) => ReactNode;\n /**\n * Title shown at the top of the page. Defaults to \"Team\".\n */\n title?: string;\n /**\n * Description shown on the \"Create an Organization\" card. Defaults to\n * \"Set up a team to collaborate with your colleagues.\"\n */\n createOrgDescription?: string;\n /**\n * Class applied to the outer max-width container. Templates can use this to\n * tweak page width.\n */\n className?: string;\n}\n\nfunction RoleIcon({ role }: { role: string }) {\n if (role === \"owner\")\n return <IconCrown className=\"h-3.5 w-3.5 text-amber-500\" />;\n if (role === \"admin\")\n return <IconShieldCheck className=\"h-3.5 w-3.5 text-blue-500\" />;\n return null;\n}\n\nfunction ErrorText({ error }: { error: unknown }) {\n if (!error) return null;\n return (\n <p className=\"text-xs text-red-500\">\n {error instanceof Error ? error.message : String(error)}\n </p>\n );\n}\n\nfunction PendingInvitationsCard() {\n const { data: org } = useOrg();\n const acceptInvitation = useAcceptInvitation();\n\n if (!org?.pendingInvitations?.length) return null;\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">Pending Invitations</h3>\n {org.pendingInvitations.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between rounded-md border border-border p-3\"\n >\n <div>\n <div className=\"text-sm font-medium\">{inv.orgName}</div>\n <div className=\"text-xs text-muted-foreground\">\n Invited by {inv.invitedBy}\n </div>\n </div>\n <button\n type=\"button\"\n onClick={() => acceptInvitation.mutate(inv.id)}\n disabled={acceptInvitation.isPending}\n className=\"rounded-md bg-green-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-green-700 disabled:opacity-50\"\n >\n {acceptInvitation.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Accept\"\n )}\n </button>\n </div>\n ))}\n <ErrorText error={acceptInvitation.error} />\n </section>\n );\n}\n\nfunction JoinByDomainCard({ matches }: { matches: DomainMatchOrg[] }) {\n const joinByDomain = useJoinByDomain();\n const [pendingId, setPendingId] = useState<string | null>(null);\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">Join your team</h3>\n <p className=\"text-sm text-muted-foreground\">\n {matches.length === 1\n ? `An organization matching your email domain already exists. Join it to collaborate with your teammates.`\n : `Organizations matching your email domain already exist. Join one to collaborate with your teammates.`}\n </p>\n <div className=\"space-y-2\">\n {matches.map((m) => (\n <div\n key={m.orgId}\n className=\"flex items-center justify-between rounded-md border border-border p-3\"\n >\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-md bg-blue-600/10\">\n <IconBuilding className=\"h-4 w-4 text-blue-600\" />\n </div>\n <div className=\"text-sm font-medium\">{m.orgName}</div>\n </div>\n <button\n type=\"button\"\n disabled={joinByDomain.isPending && pendingId === m.orgId}\n onClick={() => {\n setPendingId(m.orgId);\n joinByDomain.mutate(m.orgId, {\n onSettled: () => setPendingId(null),\n });\n }}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {joinByDomain.isPending && pendingId === m.orgId ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Join\"\n )}\n </button>\n </div>\n ))}\n </div>\n <ErrorText error={joinByDomain.error} />\n </section>\n );\n}\n\nfunction CreateOrgCard({ description }: { description?: string }) {\n const createOrg = useCreateOrg();\n const [name, setName] = useState(\"\");\n const [showForm, setShowForm] = useState(false);\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-3\">\n <h3 className=\"text-sm font-medium\">Create an Organization</h3>\n <p className=\"text-sm text-muted-foreground\">\n {description || \"Set up a team to collaborate with your colleagues.\"}\n </p>\n {!showForm ? (\n <button\n type=\"button\"\n onClick={() => setShowForm(true)}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90\"\n >\n Create organization\n </button>\n ) : (\n <div className=\"space-y-2\">\n <input\n type=\"text\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder=\"e.g. Acme Inc.\"\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n disabled={!name.trim() || createOrg.isPending}\n onClick={() =>\n createOrg.mutate(name.trim(), {\n onSuccess: () => {\n setName(\"\");\n setShowForm(false);\n },\n })\n }\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {createOrg.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Create\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowForm(false);\n setName(\"\");\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n <ErrorText error={createOrg.error} />\n </div>\n )}\n </section>\n );\n}\n\nfunction OrgNameDisplay({ name, canEdit }: { name: string; canEdit: boolean }) {\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(name);\n const updateOrg = useUpdateOrg();\n\n if (!canEdit) return <div className=\"text-sm font-medium\">{name}</div>;\n\n if (!editing) {\n return (\n <button\n type=\"button\"\n onClick={() => {\n setDraft(name);\n setEditing(true);\n }}\n className=\"group flex items-center gap-1.5 text-sm font-medium hover:text-foreground/80\"\n >\n {name}\n <IconPencil className=\"h-3 w-3 text-muted-foreground opacity-0 group-hover:opacity-100\" />\n </button>\n );\n }\n\n function save() {\n const trimmed = draft.trim();\n if (!trimmed || trimmed === name) {\n setEditing(false);\n return;\n }\n updateOrg.mutate(trimmed, { onSuccess: () => setEditing(false) });\n }\n\n return (\n <div className=\"flex items-center gap-1.5\">\n <input\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") save();\n if (e.key === \"Escape\") setEditing(false);\n }}\n onBlur={save}\n className=\"rounded border border-border bg-background px-1.5 py-0.5 text-sm font-medium focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <ErrorText error={updateOrg.error} />\n </div>\n );\n}\n\nfunction MembersCard() {\n const { data: org } = useOrg();\n const { data: membersData, isLoading: isLoadingMembers } = useOrgMembers();\n const { data: invitationsData } = useOrgInvitations();\n const removeMember = useRemoveMember();\n const switchOrg = useSwitchOrg();\n\n const [showInviteForm, setShowInviteForm] = useState(false);\n\n if (!org?.orgId) return null;\n\n const isOwner = org.role === \"owner\";\n const isOwnerOrAdmin = isOwner || org.role === \"admin\";\n const members = membersData?.members ?? [];\n const pendingInvites = invitationsData?.invitations ?? [];\n const hasMultipleOrgs = (org.orgs?.length ?? 0) > 1;\n\n return (\n <section className=\"rounded-lg border border-border bg-card p-4 space-y-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-9 w-9 items-center justify-center rounded-lg bg-blue-600/10\">\n <IconBuilding className=\"h-5 w-5 text-blue-600\" />\n </div>\n <div>\n <OrgNameDisplay name={org.orgName ?? \"\"} canEdit={isOwnerOrAdmin} />\n <div className=\"text-xs text-muted-foreground\">\n {members.length} member{members.length !== 1 ? \"s\" : \"\"} · You are{\" \"}\n {org.role}\n </div>\n </div>\n </div>\n {hasMultipleOrgs && (\n <select\n value={org.orgId ?? \"\"}\n onChange={(e) => switchOrg.mutate(e.target.value || null)}\n disabled={switchOrg.isPending}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-xs\"\n >\n {org.orgs.map((o) => (\n <option key={o.orgId} value={o.orgId}>\n {o.orgName}\n </option>\n ))}\n </select>\n )}\n </div>\n\n <div className=\"border-t border-border pt-3 space-y-1\">\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide mb-2\">\n Members\n </div>\n {isLoadingMembers && members.length === 0 && (\n <>\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className=\"flex items-center justify-between py-1.5 px-2\"\n >\n <div className=\"flex items-center gap-2\">\n <div\n className=\"h-3.5 rounded bg-muted animate-pulse\"\n style={{ width: `${140 + i * 30}px` }}\n />\n <div className=\"h-3.5 w-3.5 rounded bg-muted animate-pulse\" />\n </div>\n </div>\n ))}\n </>\n )}\n {members.map((m) => (\n <MemberRow\n key={m.email}\n email={m.email}\n role={m.role}\n isCurrentUser={m.email === org.email}\n currentUserRole={org.role ?? null}\n />\n ))}\n {pendingInvites.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between py-1.5 px-2 opacity-60\"\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{inv.email}</span>\n <RoleIcon role={inv.role} />\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n Invited{inv.role === \"admin\" ? \" · admin\" : \"\"}\n </span>\n </div>\n </div>\n ))}\n </div>\n\n {isOwnerOrAdmin && (\n <div className=\"border-t border-border pt-3\">\n {!showInviteForm ? (\n <button\n type=\"button\"\n onClick={() => setShowInviteForm(true)}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconUserPlus className=\"h-3.5 w-3.5\" />\n Invite members\n </button>\n ) : (\n <BulkInviteForm\n currentUserRole={org.role}\n onClose={() => setShowInviteForm(false)}\n />\n )}\n </div>\n )}\n\n {isOwnerOrAdmin && (\n <DomainSettingsSection\n domain={org.allowedDomain}\n ownerEmail={org.email}\n />\n )}\n\n {isOwner && <A2ASecretSection secret={org.a2aSecret} />}\n\n <ErrorText error={removeMember.error} />\n <ErrorText error={switchOrg.error} />\n </section>\n );\n}\n\nfunction MemberRow({\n email,\n role,\n isCurrentUser,\n currentUserRole,\n}: {\n email: string;\n role: string;\n isCurrentUser: boolean;\n currentUserRole: string | null;\n}) {\n const removeMember = useRemoveMember();\n const changeRole = useChangeMemberRole();\n const [editing, setEditing] = useState(false);\n const [confirmingRemove, setConfirmingRemove] = useState(false);\n\n // Owners can manage admins + members. Admins can only manage members.\n // Owners themselves are immutable through this UI; current user can't\n // edit their own role here.\n const canManage =\n role !== \"owner\" &&\n !isCurrentUser &&\n (currentUserRole === \"owner\" ||\n (currentUserRole === \"admin\" && role === \"member\"));\n\n return (\n <div className=\"flex items-center justify-between py-1.5 px-2 rounded hover:bg-accent/30\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{email}</span>\n <RoleIcon role={role} />\n {isCurrentUser && (\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-muted-foreground\">\n You\n </span>\n )}\n {role === \"admin\" && (\n <span className=\"rounded border border-border px-1.5 py-0.5 text-[10px] text-blue-600\">\n Admin\n </span>\n )}\n </div>\n {canManage && (\n <div className=\"flex items-center gap-1\">\n {editing ? (\n <select\n autoFocus\n value={role}\n onChange={(e) => {\n const next = e.target.value === \"admin\" ? \"admin\" : \"member\";\n if (next !== role) {\n changeRole.mutate(\n { email, role: next },\n { onSuccess: () => setEditing(false) },\n );\n } else {\n setEditing(false);\n }\n }}\n onBlur={() => setEditing(false)}\n disabled={changeRole.isPending}\n className=\"rounded-md border border-border bg-background px-1.5 py-0.5 text-[11px]\"\n >\n <option value=\"member\">Member</option>\n <option value=\"admin\">Admin</option>\n </select>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setEditing(true)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Change role</TooltipContent>\n </Tooltip>\n )}\n {confirmingRemove ? (\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={() => setConfirmingRemove(false)}\n className=\"rounded px-1.5 py-0.5 text-[11px] text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={removeMember.isPending}\n onClick={() =>\n removeMember.mutate(email, {\n onSettled: () => setConfirmingRemove(false),\n })\n }\n className=\"rounded bg-red-500 px-1.5 py-0.5 text-[11px] text-white hover:bg-red-600 disabled:opacity-50\"\n >\n Remove\n </button>\n </div>\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n disabled={removeMember.isPending}\n onClick={() => setConfirmingRemove(true)}\n className=\"text-muted-foreground hover:text-red-500 disabled:opacity-50\"\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Remove member</TooltipContent>\n </Tooltip>\n )}\n </div>\n )}\n </div>\n );\n}\n\ninterface DraftInvite {\n email: string;\n role: InviteRole;\n}\n\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nfunction parseEmailList(input: string): string[] {\n return Array.from(\n new Set(\n input\n .split(/[\\s,;]+/)\n .map((s) => s.trim().toLowerCase())\n .filter(Boolean),\n ),\n );\n}\n\nfunction parseCsvEmails(text: string): string[] {\n // Tolerant CSV parse — split on lines, then on commas, take any cell\n // that looks like an email. Handles \"name,email,role\" rows or just\n // \"email\" per line. A robust full CSV parser would be overkill here.\n const cells: string[] = [];\n for (const line of text.split(/\\r?\\n/)) {\n for (const cell of line.split(\",\")) {\n const trimmed = cell.trim().replace(/^\"|\"$/g, \"\");\n if (trimmed) cells.push(trimmed);\n }\n }\n return Array.from(\n new Set(cells.filter((c) => EMAIL_RE.test(c)).map((c) => c.toLowerCase())),\n );\n}\n\nfunction BulkInviteForm({\n currentUserRole,\n onClose,\n}: {\n currentUserRole: string | null;\n onClose: () => void;\n}) {\n const bulkInvite = useBulkInviteMembers();\n const fileRef = useRef<HTMLInputElement>(null);\n const [drafts, setDrafts] = useState<DraftInvite[]>([\n { email: \"\", role: \"member\" },\n ]);\n const [pasteOpen, setPasteOpen] = useState(false);\n const [pasteValue, setPasteValue] = useState(\"\");\n const [pasteRole, setPasteRole] = useState<InviteRole>(\"member\");\n const [resultBanner, setResultBanner] = useState<{\n succeeded: number;\n failed: { email: string; error: string }[];\n } | null>(null);\n\n const canSetAdmin = currentUserRole === \"owner\";\n\n const validDrafts = useMemo(\n () =>\n drafts\n .map((d) => ({ ...d, email: d.email.trim().toLowerCase() }))\n .filter((d) => EMAIL_RE.test(d.email)),\n [drafts],\n );\n\n function setDraft(index: number, patch: Partial<DraftInvite>) {\n setDrafts((prev) =>\n prev.map((d, i) => (i === index ? { ...d, ...patch } : d)),\n );\n }\n\n function appendEmails(emails: string[], role: InviteRole) {\n if (!emails.length) return;\n setDrafts((prev) => {\n const existing = new Set(\n prev.map((d) => d.email.trim().toLowerCase()).filter(Boolean),\n );\n const fresh: DraftInvite[] = [];\n for (const e of emails) {\n if (!existing.has(e)) {\n fresh.push({ email: e, role });\n existing.add(e);\n }\n }\n // If the only existing row is an empty placeholder, drop it.\n const cleaned = prev.filter(\n (d, i) => !(i === 0 && !d.email.trim() && prev.length === 1),\n );\n return [...cleaned, ...fresh];\n });\n }\n\n function handleFile(file: File) {\n file.text().then((text) => {\n const emails = parseCsvEmails(text);\n if (emails.length) {\n appendEmails(emails, \"member\");\n } else {\n setResultBanner({\n succeeded: 0,\n failed: [{ email: file.name, error: \"No valid emails found in CSV\" }],\n });\n }\n });\n }\n\n async function submit() {\n setResultBanner(null);\n const dedup = new Map<string, DraftInvite>();\n for (const d of validDrafts) {\n // canSetAdmin guard mirrors server-side enforcement so an admin-only\n // user editing the form can't even attempt to grant admin (they'd\n // get a 403 anyway).\n const role = canSetAdmin ? d.role : \"member\";\n dedup.set(d.email, { ...d, role });\n }\n const invites = Array.from(dedup.values());\n if (invites.length === 0) return;\n\n const result = await bulkInvite.mutateAsync(invites);\n setResultBanner({\n succeeded: result.succeeded.length,\n failed: result.failed,\n });\n\n // Wipe drafts that succeeded; leave failed ones so the user can fix\n // and retry. If everything succeeded, reset to a single blank row.\n const failedEmails = new Set(result.failed.map((f) => f.email));\n setDrafts((prev) => {\n const remaining = prev.filter((d) =>\n failedEmails.has(d.email.trim().toLowerCase()),\n );\n return remaining.length > 0 ? remaining : [{ email: \"\", role: \"member\" }];\n });\n\n // Auto-close on full success.\n if (result.failed.length === 0 && result.succeeded.length > 0) {\n setTimeout(() => onClose(), 1200);\n }\n }\n\n return (\n <div className=\"space-y-3\">\n <div className=\"space-y-2\">\n {drafts.map((draft, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <input\n type=\"email\"\n value={draft.email}\n onChange={(e) => setDraft(i, { email: e.target.value })}\n placeholder=\"colleague@company.com\"\n className=\"flex-1 rounded-md border border-border bg-background px-3 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus={i === drafts.length - 1}\n />\n <select\n value={draft.role}\n onChange={(e) =>\n setDraft(i, {\n role: e.target.value === \"admin\" ? \"admin\" : \"member\",\n })\n }\n disabled={!canSetAdmin}\n title={\n canSetAdmin\n ? undefined\n : \"Only the organization owner can invite admins\"\n }\n className=\"rounded-md border border-border bg-background px-2 py-1.5 text-xs disabled:opacity-50\"\n >\n <option value=\"member\">Member</option>\n <option value=\"admin\">Admin</option>\n </select>\n {drafts.length > 1 && (\n <button\n type=\"button\"\n onClick={() =>\n setDrafts((prev) => prev.filter((_, j) => j !== i))\n }\n className=\"text-muted-foreground hover:text-red-500\"\n >\n <IconX className=\"h-3.5 w-3.5\" />\n </button>\n )}\n </div>\n ))}\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <button\n type=\"button\"\n onClick={() =>\n setDrafts((prev) => [...prev, { email: \"\", role: \"member\" }])\n }\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n Add another\n </button>\n <button\n type=\"button\"\n onClick={() => setPasteOpen((v) => !v)}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconUserPlus className=\"h-3.5 w-3.5\" />\n Paste many\n </button>\n <button\n type=\"button\"\n onClick={() => fileRef.current?.click()}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconFileImport className=\"h-3.5 w-3.5\" />\n Import CSV\n </button>\n <input\n ref={fileRef}\n type=\"file\"\n accept=\".csv,text/csv,text/plain\"\n className=\"hidden\"\n onChange={(e) => {\n const file = e.target.files?.[0];\n if (file) handleFile(file);\n // reset so re-uploading the same file re-fires onChange\n e.target.value = \"\";\n }}\n />\n </div>\n\n {pasteOpen && (\n <div className=\"space-y-2 rounded-md border border-border p-3\">\n <div className=\"text-xs font-medium text-muted-foreground\">\n Paste emails (comma, space, or newline separated)\n </div>\n <textarea\n value={pasteValue}\n onChange={(e) => setPasteValue(e.target.value)}\n rows={4}\n placeholder=\"alice@acme.com, bob@acme.com&#10;charlie@acme.com\"\n className=\"w-full rounded-md border border-border bg-background px-3 py-2 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n />\n <div className=\"flex items-center gap-2\">\n <select\n value={pasteRole}\n onChange={(e) =>\n setPasteRole(e.target.value === \"admin\" ? \"admin\" : \"member\")\n }\n disabled={!canSetAdmin}\n className=\"rounded-md border border-border bg-background px-2 py-1.5 text-xs disabled:opacity-50\"\n >\n <option value=\"member\">Add as members</option>\n <option value=\"admin\">Add as admins</option>\n </select>\n <button\n type=\"button\"\n onClick={() => {\n appendEmails(parseEmailList(pasteValue), pasteRole);\n setPasteValue(\"\");\n setPasteOpen(false);\n }}\n disabled={parseEmailList(pasteValue).length === 0}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n Add\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setPasteValue(\"\");\n setPasteOpen(false);\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n disabled={validDrafts.length === 0 || bulkInvite.isPending}\n onClick={submit}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {bulkInvite.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <span className=\"inline-flex items-center gap-1\">\n <IconCheck className=\"h-3.5 w-3.5\" />\n Send {validDrafts.length || \"\"}{\" \"}\n {validDrafts.length === 1 ? \"invite\" : \"invites\"}\n </span>\n )}\n </button>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Close\n </button>\n </div>\n\n <p className=\"text-[11px] text-muted-foreground\">\n Each invitee signs in with this exact email to accept.\n {canSetAdmin\n ? \" Admins can manage members and workspace settings.\"\n : \" Only the organization owner can grant admin access.\"}\n </p>\n\n {resultBanner && (\n <div className=\"space-y-1 rounded-md border border-border bg-accent/30 p-2.5\">\n {resultBanner.succeeded > 0 && (\n <p className=\"text-[11px] text-green-600\">\n <IconCheck className=\"inline h-3 w-3 -mt-0.5\" /> Sent{\" \"}\n {resultBanner.succeeded}{\" \"}\n {resultBanner.succeeded === 1 ? \"invite\" : \"invites\"}.\n </p>\n )}\n {resultBanner.failed.length > 0 && (\n <ul className=\"space-y-0.5 text-[11px] text-red-500\">\n {resultBanner.failed.map((f) => (\n <li key={f.email}>\n <IconAlertTriangle className=\"inline h-3 w-3 -mt-0.5 me-1\" />\n {f.email}: {f.error}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n <ErrorText error={bulkInvite.error} />\n </div>\n );\n}\n\nfunction DomainSettingsSection({\n domain,\n ownerEmail,\n}: {\n domain: string | null;\n ownerEmail: string;\n}) {\n const setOrgDomain = useSetOrgDomain();\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState(domain ?? \"\");\n\n const ownDomain = ownerEmail.split(\"@\")[1]?.toLowerCase() ?? \"\";\n\n function save() {\n const trimmed = draft.trim().toLowerCase();\n if (trimmed === (domain ?? \"\")) {\n setEditing(false);\n return;\n }\n setOrgDomain.mutate(trimmed || null, {\n onSuccess: () => setEditing(false),\n });\n }\n\n return (\n <div className=\"border-t border-border pt-3 space-y-2\">\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n Email domain auto-join\n </div>\n <p className=\"text-[11px] text-muted-foreground\">\n Anyone who signs up with an email at this domain will join your\n organization automatically. You can only set your own email domain (\n {ownDomain || \"—\"}); free email providers like gmail.com or outlook.com\n aren&apos;t allowed.\n </p>\n {!editing ? (\n <div className=\"flex items-center gap-2\">\n {domain ? (\n <>\n <span className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm\">\n <IconAt className=\"h-3.5 w-3.5 text-muted-foreground\" />\n {domain}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => {\n setDraft(domain);\n setEditing(true);\n }}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <IconPencil className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Edit domain</TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n disabled={setOrgDomain.isPending}\n onClick={() => setOrgDomain.mutate(null)}\n className=\"text-muted-foreground hover:text-red-500 disabled:opacity-50\"\n >\n <IconX className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Remove domain</TooltipContent>\n </Tooltip>\n </>\n ) : (\n <button\n type=\"button\"\n onClick={() => {\n setDraft(ownDomain);\n setEditing(true);\n }}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconAt className=\"h-3.5 w-3.5\" />\n Allow {ownDomain || \"your domain\"} to auto-join\n </button>\n )}\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") save();\n if (e.key === \"Escape\") setEditing(false);\n }}\n placeholder={ownDomain || \"example.com\"}\n className=\"rounded-md border border-border bg-background px-2.5 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <button\n type=\"button\"\n disabled={setOrgDomain.isPending}\n onClick={save}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {setOrgDomain.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => setEditing(false)}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n )}\n <ErrorText error={setOrgDomain.error} />\n </div>\n );\n}\n\nfunction A2ASecretSection({ secret }: { secret: string | null | undefined }) {\n const setA2ASecret = useSetA2ASecret();\n const syncA2ASecret = useSyncA2ASecret();\n const [revealed, setRevealed] = useState(false);\n const [copied, setCopied] = useState(false);\n const [pasteMode, setPasteMode] = useState(false);\n const [pasteValue, setPasteValue] = useState(\"\");\n const [syncResult, setSyncResult] = useState<SyncA2ASecretResult | null>(\n null,\n );\n\n function copyToClipboard() {\n if (!secret) return;\n navigator.clipboard.writeText(secret).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }\n\n // Push the current secret to all connected apps. Optionally pass the\n // PREVIOUS secret as `signSecret` so the receiving apps (which still\n // hold the previous value) can verify the JWT.\n function syncToApps(signSecret?: string) {\n setSyncResult(null);\n syncA2ASecret.mutate(signSecret ? { signSecret } : undefined, {\n onSuccess: (result) => {\n setSyncResult(result);\n },\n });\n }\n\n function regenerate() {\n setA2ASecret.mutate(undefined, {\n onSuccess: (result) => {\n setRevealed(false);\n // Auto-sync the new secret to all connected apps. Sign with the\n // PREVIOUS secret (which peers still hold) so verification on\n // their side succeeds and they accept the new value.\n syncToApps(result.previousSecret ?? undefined);\n },\n });\n }\n\n function saveSecret() {\n const trimmed = pasteValue.trim();\n if (!trimmed) return;\n setA2ASecret.mutate(trimmed, {\n onSuccess: (result) => {\n setPasteMode(false);\n setPasteValue(\"\");\n // Same auto-sync flow as regenerate: peers verify with the\n // previous secret, then update to the new pasted value.\n syncToApps(result.previousSecret ?? undefined);\n },\n });\n }\n\n const masked = secret ? \"****\" + secret.slice(-8) : \"Not set\";\n\n return (\n <div className=\"border-t border-border pt-3 space-y-2\">\n <div className=\"text-xs font-medium text-muted-foreground uppercase tracking-wide\">\n Cross-app authentication\n </div>\n <p className=\"text-[11px] text-muted-foreground\">\n This secret authenticates cross-app delegation (e.g. Dispatch to\n Analytics). All apps in your organization need the same secret.\n </p>\n\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm font-mono\">\n <IconKey className=\"h-3.5 w-3.5 text-muted-foreground\" />\n {revealed && secret ? secret : masked}\n </span>\n {secret && (\n <>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => setRevealed(!revealed)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n {revealed ? (\n <IconEyeOff className=\"h-3.5 w-3.5\" />\n ) : (\n <IconEye className=\"h-3.5 w-3.5\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>\n {revealed ? \"Hide secret\" : \"Reveal secret\"}\n </TooltipContent>\n </Tooltip>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={copyToClipboard}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n {copied ? (\n <IconCheck className=\"h-3.5 w-3.5 text-green-500\" />\n ) : (\n <IconCopy className=\"h-3.5 w-3.5\" />\n )}\n </button>\n </TooltipTrigger>\n <TooltipContent>Copy secret</TooltipContent>\n </Tooltip>\n </>\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={regenerate}\n disabled={setA2ASecret.isPending || syncA2ASecret.isPending}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50 disabled:opacity-50\"\n >\n {setA2ASecret.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <IconRefresh className=\"h-3.5 w-3.5\" />\n )}\n Regenerate\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Regenerate secret and sync to connected apps\n </TooltipContent>\n </Tooltip>\n {secret && (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => syncToApps()}\n disabled={setA2ASecret.isPending || syncA2ASecret.isPending}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50 disabled:opacity-50\"\n >\n {syncA2ASecret.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n <IconCloudUpload className=\"h-3.5 w-3.5\" />\n )}\n Sync to apps\n </button>\n </TooltipTrigger>\n <TooltipContent>\n Push this secret to every connected app\n </TooltipContent>\n </Tooltip>\n )}\n </div>\n\n {syncA2ASecret.isPending && (\n <p className=\"text-[11px] text-muted-foreground\">\n Syncing to connected apps…\n </p>\n )}\n\n {syncResult && !syncA2ASecret.isPending && (\n <div className=\"space-y-1\">\n <p className=\"text-[11px] text-muted-foreground\">\n Synced to {syncResult.succeeded}/{syncResult.total} app\n {syncResult.total === 1 ? \"\" : \"s\"}\n {syncResult.failed > 0 ? ` (${syncResult.failed} failed)` : \"\"}.\n </p>\n {syncResult.failed > 0 && (\n <ul className=\"text-[11px] text-red-500 list-disc ps-5 space-y-0.5\">\n {syncResult.results\n .filter((r) => !r.ok)\n .map((r) => (\n <li key={r.id}>\n {r.name}: {r.error || `HTTP ${r.status ?? \"?\"}`}\n </li>\n ))}\n </ul>\n )}\n </div>\n )}\n\n {!pasteMode ? (\n <button\n type=\"button\"\n onClick={() => setPasteMode(true)}\n className=\"flex items-center gap-1.5 rounded-md border border-border px-2.5 py-1.5 text-xs font-medium hover:bg-accent/50\"\n >\n <IconKey className=\"h-3.5 w-3.5\" />\n Paste secret from another app\n </button>\n ) : (\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n value={pasteValue}\n onChange={(e) => setPasteValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSecret();\n if (e.key === \"Escape\") {\n setPasteMode(false);\n setPasteValue(\"\");\n }\n }}\n placeholder=\"Paste A2A secret\"\n className=\"flex-1 rounded-md border border-border bg-background px-2.5 py-1.5 text-sm font-mono focus:outline-none focus:ring-1 focus:ring-foreground\"\n autoFocus\n />\n <button\n type=\"button\"\n disabled={!pasteValue.trim() || setA2ASecret.isPending}\n onClick={saveSecret}\n className=\"rounded-md bg-foreground px-3 py-1.5 text-xs font-medium text-background hover:opacity-90 disabled:opacity-50\"\n >\n {setA2ASecret.isPending ? (\n <IconLoader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : (\n \"Save\"\n )}\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setPasteMode(false);\n setPasteValue(\"\");\n }}\n className=\"rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n </div>\n )}\n\n <ErrorText error={setA2ASecret.error} />\n <ErrorText error={syncA2ASecret.error} />\n </div>\n );\n}\n\n/**\n * Default Team management page. Templates can route directly to this component\n * or wrap it with their own Layout via the `layout` prop.\n */\nexport function TeamPage({\n layout,\n title = \"Team\",\n createOrgDescription,\n className,\n}: TeamPageProps) {\n const { data: org, isLoading } = useOrg();\n\n const content = (\n <div className={`space-y-6 max-w-2xl ${className ?? \"\"}`}>\n <h2 className=\"text-2xl font-bold tracking-tight\">{title}</h2>\n\n {isLoading && (\n <section className=\"rounded-lg border border-border bg-card p-6\">\n <div className=\"text-sm text-muted-foreground\">Loading…</div>\n </section>\n )}\n\n {!isLoading && (\n <>\n <PendingInvitationsCard />\n {!org?.orgId ? (\n <>\n {org?.domainMatches && org.domainMatches.length > 0 && (\n <JoinByDomainCard matches={org.domainMatches} />\n )}\n <CreateOrgCard description={createOrgDescription} />\n </>\n ) : (\n <MembersCard />\n )}\n </>\n )}\n </div>\n );\n\n const wrapped = (\n <TooltipProvider delayDuration={200}>{content}</TooltipProvider>\n );\n\n return layout ? <>{layout(wrapped)}</> : wrapped;\n}\n"]}
@@ -29,7 +29,7 @@ function AgentEditPopover({ agent, onSave, onDelete, onClose, }) {
29
29
  description: description.trim() || undefined,
30
30
  });
31
31
  };
32
- return (_jsx("div", { ref: popoverRef, className: "absolute right-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg", children: _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("input", { value: name, onChange: (e) => setName(e.target.value), onKeyDown: (e) => {
32
+ return (_jsx("div", { ref: popoverRef, className: "absolute end-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg", children: _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("input", { value: name, onChange: (e) => setName(e.target.value), onKeyDown: (e) => {
33
33
  if (e.key === "Enter")
34
34
  handleSave();
35
35
  if (e.key === "Escape")
@@ -71,7 +71,7 @@ function AgentAddPopover({ onAdd, onClose, }) {
71
71
  return;
72
72
  onAdd(name.trim(), url.trim(), description.trim());
73
73
  };
74
- return (_jsx("div", { ref: popoverRef, className: "absolute right-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg", children: _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("input", { ref: nameRef, value: name, onChange: (e) => setName(e.target.value), onKeyDown: (e) => {
74
+ return (_jsx("div", { ref: popoverRef, className: "absolute end-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg", children: _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("input", { ref: nameRef, value: name, onChange: (e) => setName(e.target.value), onKeyDown: (e) => {
75
75
  if (e.key === "Enter")
76
76
  handleAdd();
77
77
  if (e.key === "Escape")
@@ -191,7 +191,7 @@ export function AgentsSection() {
191
191
  return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between mb-2", children: [_jsx("div", { className: "text-[10px] text-muted-foreground", children: "@-mention agents in chat to delegate tasks via A2A." }), _jsxs("div", { className: "relative", children: [_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => {
192
192
  setShowAdd(!showAdd);
193
193
  setEditingAgent(null);
194
- }, className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", children: showAdd ? _jsx(IconX, { size: 12 }) : _jsx(IconPlus, { size: 12 }) }) }), _jsx(TooltipContent, { children: "Add agent" })] }), showAdd && (_jsx(AgentAddPopover, { onAdd: handleAdd, onClose: () => setShowAdd(false) }))] })] }), loading ? (_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "h-6 w-full rounded bg-muted/50 animate-pulse" }), _jsx("div", { className: "h-6 w-3/4 rounded bg-muted/50 animate-pulse" })] })) : agents.length === 0 ? (_jsxs("button", { onClick: () => setShowAdd(true), className: "flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30", children: [_jsx(IconPlus, { size: 12, className: "shrink-0" }), "Add agent"] })) : (_jsxs("div", { className: "flex flex-col gap-0.5", children: [agents.map((agent) => (_jsxs("div", { className: "group relative", children: [_jsxs("div", { className: "flex w-full items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent/30", children: [_jsx("span", { className: "text-[11px] font-medium text-foreground truncate shrink-0", children: agent.name }), _jsx("span", { className: "flex-1 text-[10px] text-muted-foreground/60 truncate text-right", children: agent.url }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => {
194
+ }, className: "flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50", children: showAdd ? _jsx(IconX, { size: 12 }) : _jsx(IconPlus, { size: 12 }) }) }), _jsx(TooltipContent, { children: "Add agent" })] }), showAdd && (_jsx(AgentAddPopover, { onAdd: handleAdd, onClose: () => setShowAdd(false) }))] })] }), loading ? (_jsxs("div", { className: "space-y-1.5", children: [_jsx("div", { className: "h-6 w-full rounded bg-muted/50 animate-pulse" }), _jsx("div", { className: "h-6 w-3/4 rounded bg-muted/50 animate-pulse" })] })) : agents.length === 0 ? (_jsxs("button", { onClick: () => setShowAdd(true), className: "flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30", children: [_jsx(IconPlus, { size: 12, className: "shrink-0" }), "Add agent"] })) : (_jsxs("div", { className: "flex flex-col gap-0.5", children: [agents.map((agent) => (_jsxs("div", { className: "group relative", children: [_jsxs("div", { className: "flex w-full items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent/30", children: [_jsx("span", { className: "text-[11px] font-medium text-foreground truncate shrink-0", children: agent.name }), _jsx("span", { className: "flex-1 text-[10px] text-muted-foreground/60 truncate text-end", children: agent.url }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { onClick: () => {
195
195
  setEditingAgent(editingAgent === agent.id ? null : agent.id);
196
196
  setShowAdd(false);
197
197
  }, className: "shrink-0 rounded p-0.5 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-foreground hover:bg-accent/50", children: _jsx(IconPencil, { size: 11 }) }) }), _jsx(TooltipContent, { children: "Edit agent" })] })] }), editingAgent === agent.id && (_jsx(AgentEditPopover, { agent: agent, onSave: handleSave, onDelete: handleDelete, onClose: () => setEditingAgent(null) }))] }, agent.id))), _jsxs("button", { onClick: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"AgentsSection.js","sourceRoot":"","sources":["../../../src/client/settings/AgentsSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport {\n getRemoteAgentIdFromPath,\n isRemoteAgentPath,\n remoteAgentResourcePath,\n} from \"../../resources/metadata.js\";\nimport { useState, useEffect, useRef, useCallback } from \"react\";\nimport { IconPlus, IconPencil, IconTrash, IconX } from \"@tabler/icons-react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\ninterface AgentInfo {\n id: string;\n path: string;\n name: string;\n url: string;\n description?: string;\n}\n\nfunction AgentEditPopover({\n agent,\n onSave,\n onDelete,\n onClose,\n}: {\n agent: AgentInfo;\n onSave: (agent: AgentInfo) => void;\n onDelete: (id: string) => void;\n onClose: () => void;\n}) {\n const [name, setName] = useState(agent.name);\n const [url, setUrl] = useState(agent.url);\n const [description, setDescription] = useState(agent.description ?? \"\");\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [onClose]);\n\n const handleSave = () => {\n if (!name.trim() || !url.trim()) return;\n onSave({\n ...agent,\n name: name.trim(),\n url: url.trim(),\n description: description.trim() || undefined,\n });\n };\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute right-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <input\n value={name}\n onChange={(e) => setName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Name\"\n />\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"URL (e.g. http://localhost:8085)\"\n />\n <input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div className=\"flex items-center justify-between pt-0.5\">\n <button\n onClick={() => onDelete(agent.id)}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-red-400 hover:bg-red-900/20\"\n >\n <IconTrash size={10} />\n Remove\n </button>\n <div className=\"flex gap-1\">\n <button\n onClick={onClose}\n className=\"rounded px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={!name.trim() || !url.trim()}\n className=\"rounded bg-accent px-2 py-0.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction AgentAddPopover({\n onAdd,\n onClose,\n}: {\n onAdd: (name: string, url: string, description: string) => void;\n onClose: () => void;\n}) {\n const [name, setName] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const nameRef = useRef<HTMLInputElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const t = setTimeout(() => nameRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }, []);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [onClose]);\n\n const handleAdd = () => {\n if (!name.trim() || !url.trim()) return;\n onAdd(name.trim(), url.trim(), description.trim());\n };\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute right-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <input\n ref={nameRef}\n value={name}\n onChange={(e) => setName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Name\"\n />\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"URL (e.g. http://localhost:8085)\"\n />\n <input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div className=\"flex justify-end gap-1 pt-0.5\">\n <button\n onClick={onClose}\n className=\"rounded px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n onClick={handleAdd}\n disabled={!name.trim() || !url.trim()}\n className=\"rounded bg-accent px-2 py-0.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n Add\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport function AgentsSection() {\n const [agents, setAgents] = useState<AgentInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [editingAgent, setEditingAgent] = useState<string | null>(null);\n const [showAdd, setShowAdd] = useState(false);\n\n const fetchAgents = useCallback(async () => {\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/resources?scope=all\"),\n );\n if (!res.ok) return;\n const data = await res.json();\n const agentResources = (data.resources ?? []).filter(\n (r: { path: string }) => isRemoteAgentPath(r.path),\n );\n const parsed = await Promise.all(\n agentResources.map(async (r: { id: string; path: string }) => {\n try {\n const detail = await fetch(\n agentNativePath(`/_agent-native/resources/${r.id}`),\n );\n if (!detail.ok) return null;\n const d = await detail.json();\n const config = JSON.parse(d.content);\n return {\n id: r.id,\n path: r.path,\n name: config.name,\n url: config.url,\n description: config.description,\n };\n } catch {\n return null;\n }\n }),\n );\n setAgents(parsed.filter(Boolean));\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchAgents();\n }, [fetchAgents]);\n\n const handleAdd = async (name: string, url: string, description: string) => {\n const id = name.toLowerCase().replace(/[^a-z0-9-]/g, \"-\");\n const agentJson = JSON.stringify(\n {\n id,\n name,\n description: description || undefined,\n url,\n color: \"#6B7280\",\n },\n null,\n 2,\n );\n\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/resources\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n path: remoteAgentResourcePath(id),\n content: agentJson,\n shared: true,\n }),\n });\n if (res.ok) {\n setShowAdd(false);\n fetchAgents();\n }\n } catch {}\n };\n\n const handleSave = async (agent: AgentInfo) => {\n const agentJson = JSON.stringify(\n {\n id: getRemoteAgentIdFromPath(agent.path),\n name: agent.name,\n description: agent.description || undefined,\n url: agent.url,\n color: \"#6B7280\",\n },\n null,\n 2,\n );\n\n try {\n const res = await fetch(\n agentNativePath(`/_agent-native/resources/${agent.id}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ content: agentJson }),\n },\n );\n if (res.ok) {\n setEditingAgent(null);\n fetchAgents();\n }\n } catch {}\n };\n\n const handleDelete = async (agentId: string) => {\n try {\n const res = await fetch(\n agentNativePath(`/_agent-native/resources/${agentId}`),\n {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n if (res.ok) {\n setEditingAgent(null);\n fetchAgents();\n }\n } catch {}\n };\n\n return (\n <div>\n {/* Header with + button */}\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"text-[10px] text-muted-foreground\">\n @-mention agents in chat to delegate tasks via A2A.\n </div>\n <div className=\"relative\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => {\n setShowAdd(!showAdd);\n setEditingAgent(null);\n }}\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n {showAdd ? <IconX size={12} /> : <IconPlus size={12} />}\n </button>\n </TooltipTrigger>\n <TooltipContent>Add agent</TooltipContent>\n </Tooltip>\n {showAdd && (\n <AgentAddPopover\n onAdd={handleAdd}\n onClose={() => setShowAdd(false)}\n />\n )}\n </div>\n </div>\n\n {/* Agent list */}\n {loading ? (\n <div className=\"space-y-1.5\">\n <div className=\"h-6 w-full rounded bg-muted/50 animate-pulse\" />\n <div className=\"h-6 w-3/4 rounded bg-muted/50 animate-pulse\" />\n </div>\n ) : agents.length === 0 ? (\n <button\n onClick={() => setShowAdd(true)}\n className=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30\"\n >\n <IconPlus size={12} className=\"shrink-0\" />\n Add agent\n </button>\n ) : (\n <div className=\"flex flex-col gap-0.5\">\n {agents.map((agent) => (\n <div key={agent.id} className=\"group relative\">\n <div className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent/30\">\n <span className=\"text-[11px] font-medium text-foreground truncate shrink-0\">\n {agent.name}\n </span>\n <span className=\"flex-1 text-[10px] text-muted-foreground/60 truncate text-right\">\n {agent.url}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => {\n setEditingAgent(\n editingAgent === agent.id ? null : agent.id,\n );\n setShowAdd(false);\n }}\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-foreground hover:bg-accent/50\"\n >\n <IconPencil size={11} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Edit agent</TooltipContent>\n </Tooltip>\n </div>\n {editingAgent === agent.id && (\n <AgentEditPopover\n agent={agent}\n onSave={handleSave}\n onDelete={handleDelete}\n onClose={() => setEditingAgent(null)}\n />\n )}\n </div>\n ))}\n <button\n onClick={() => {\n setShowAdd(true);\n setEditingAgent(null);\n }}\n className=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30\"\n >\n <IconPlus size={12} className=\"shrink-0\" />\n Add agent\n </button>\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"AgentsSection.js","sourceRoot":"","sources":["../../../src/client/settings/AgentsSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import { agentNativePath } from \"../api-path.js\";\nimport {\n getRemoteAgentIdFromPath,\n isRemoteAgentPath,\n remoteAgentResourcePath,\n} from \"../../resources/metadata.js\";\nimport { useState, useEffect, useRef, useCallback } from \"react\";\nimport { IconPlus, IconPencil, IconTrash, IconX } from \"@tabler/icons-react\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\ninterface AgentInfo {\n id: string;\n path: string;\n name: string;\n url: string;\n description?: string;\n}\n\nfunction AgentEditPopover({\n agent,\n onSave,\n onDelete,\n onClose,\n}: {\n agent: AgentInfo;\n onSave: (agent: AgentInfo) => void;\n onDelete: (id: string) => void;\n onClose: () => void;\n}) {\n const [name, setName] = useState(agent.name);\n const [url, setUrl] = useState(agent.url);\n const [description, setDescription] = useState(agent.description ?? \"\");\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [onClose]);\n\n const handleSave = () => {\n if (!name.trim() || !url.trim()) return;\n onSave({\n ...agent,\n name: name.trim(),\n url: url.trim(),\n description: description.trim() || undefined,\n });\n };\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute end-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <input\n value={name}\n onChange={(e) => setName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Name\"\n />\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"URL (e.g. http://localhost:8085)\"\n />\n <input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSave();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div className=\"flex items-center justify-between pt-0.5\">\n <button\n onClick={() => onDelete(agent.id)}\n className=\"flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] text-red-400 hover:bg-red-900/20\"\n >\n <IconTrash size={10} />\n Remove\n </button>\n <div className=\"flex gap-1\">\n <button\n onClick={onClose}\n className=\"rounded px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={!name.trim() || !url.trim()}\n className=\"rounded bg-accent px-2 py-0.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n Save\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction AgentAddPopover({\n onAdd,\n onClose,\n}: {\n onAdd: (name: string, url: string, description: string) => void;\n onClose: () => void;\n}) {\n const [name, setName] = useState(\"\");\n const [url, setUrl] = useState(\"\");\n const [description, setDescription] = useState(\"\");\n const nameRef = useRef<HTMLInputElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const t = setTimeout(() => nameRef.current?.focus(), 50);\n return () => clearTimeout(t);\n }, []);\n\n useEffect(() => {\n function handleClick(e: MouseEvent) {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n }\n document.addEventListener(\"mousedown\", handleClick);\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [onClose]);\n\n const handleAdd = () => {\n if (!name.trim() || !url.trim()) return;\n onAdd(name.trim(), url.trim(), description.trim());\n };\n\n return (\n <div\n ref={popoverRef}\n className=\"absolute end-0 top-full z-50 mt-1 w-64 rounded-lg border border-border bg-popover p-2.5 shadow-lg\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <input\n ref={nameRef}\n value={name}\n onChange={(e) => setName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Name\"\n />\n <input\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"URL (e.g. http://localhost:8085)\"\n />\n <input\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleAdd();\n if (e.key === \"Escape\") onClose();\n }}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-[11px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\"\n placeholder=\"Description (optional)\"\n />\n <div className=\"flex justify-end gap-1 pt-0.5\">\n <button\n onClick={onClose}\n className=\"rounded px-2 py-0.5 text-[10px] text-muted-foreground hover:text-foreground\"\n >\n Cancel\n </button>\n <button\n onClick={handleAdd}\n disabled={!name.trim() || !url.trim()}\n className=\"rounded bg-accent px-2 py-0.5 text-[10px] font-medium text-foreground hover:bg-accent/80 disabled:opacity-40\"\n >\n Add\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport function AgentsSection() {\n const [agents, setAgents] = useState<AgentInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [editingAgent, setEditingAgent] = useState<string | null>(null);\n const [showAdd, setShowAdd] = useState(false);\n\n const fetchAgents = useCallback(async () => {\n try {\n const res = await fetch(\n agentNativePath(\"/_agent-native/resources?scope=all\"),\n );\n if (!res.ok) return;\n const data = await res.json();\n const agentResources = (data.resources ?? []).filter(\n (r: { path: string }) => isRemoteAgentPath(r.path),\n );\n const parsed = await Promise.all(\n agentResources.map(async (r: { id: string; path: string }) => {\n try {\n const detail = await fetch(\n agentNativePath(`/_agent-native/resources/${r.id}`),\n );\n if (!detail.ok) return null;\n const d = await detail.json();\n const config = JSON.parse(d.content);\n return {\n id: r.id,\n path: r.path,\n name: config.name,\n url: config.url,\n description: config.description,\n };\n } catch {\n return null;\n }\n }),\n );\n setAgents(parsed.filter(Boolean));\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchAgents();\n }, [fetchAgents]);\n\n const handleAdd = async (name: string, url: string, description: string) => {\n const id = name.toLowerCase().replace(/[^a-z0-9-]/g, \"-\");\n const agentJson = JSON.stringify(\n {\n id,\n name,\n description: description || undefined,\n url,\n color: \"#6B7280\",\n },\n null,\n 2,\n );\n\n try {\n const res = await fetch(agentNativePath(\"/_agent-native/resources\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n path: remoteAgentResourcePath(id),\n content: agentJson,\n shared: true,\n }),\n });\n if (res.ok) {\n setShowAdd(false);\n fetchAgents();\n }\n } catch {}\n };\n\n const handleSave = async (agent: AgentInfo) => {\n const agentJson = JSON.stringify(\n {\n id: getRemoteAgentIdFromPath(agent.path),\n name: agent.name,\n description: agent.description || undefined,\n url: agent.url,\n color: \"#6B7280\",\n },\n null,\n 2,\n );\n\n try {\n const res = await fetch(\n agentNativePath(`/_agent-native/resources/${agent.id}`),\n {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ content: agentJson }),\n },\n );\n if (res.ok) {\n setEditingAgent(null);\n fetchAgents();\n }\n } catch {}\n };\n\n const handleDelete = async (agentId: string) => {\n try {\n const res = await fetch(\n agentNativePath(`/_agent-native/resources/${agentId}`),\n {\n method: \"DELETE\",\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n if (res.ok) {\n setEditingAgent(null);\n fetchAgents();\n }\n } catch {}\n };\n\n return (\n <div>\n {/* Header with + button */}\n <div className=\"flex items-center justify-between mb-2\">\n <div className=\"text-[10px] text-muted-foreground\">\n @-mention agents in chat to delegate tasks via A2A.\n </div>\n <div className=\"relative\">\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => {\n setShowAdd(!showAdd);\n setEditingAgent(null);\n }}\n className=\"flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:text-foreground hover:bg-accent/50\"\n >\n {showAdd ? <IconX size={12} /> : <IconPlus size={12} />}\n </button>\n </TooltipTrigger>\n <TooltipContent>Add agent</TooltipContent>\n </Tooltip>\n {showAdd && (\n <AgentAddPopover\n onAdd={handleAdd}\n onClose={() => setShowAdd(false)}\n />\n )}\n </div>\n </div>\n\n {/* Agent list */}\n {loading ? (\n <div className=\"space-y-1.5\">\n <div className=\"h-6 w-full rounded bg-muted/50 animate-pulse\" />\n <div className=\"h-6 w-3/4 rounded bg-muted/50 animate-pulse\" />\n </div>\n ) : agents.length === 0 ? (\n <button\n onClick={() => setShowAdd(true)}\n className=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30\"\n >\n <IconPlus size={12} className=\"shrink-0\" />\n Add agent\n </button>\n ) : (\n <div className=\"flex flex-col gap-0.5\">\n {agents.map((agent) => (\n <div key={agent.id} className=\"group relative\">\n <div className=\"flex w-full items-center gap-2 rounded-md px-2 py-1.5 hover:bg-accent/30\">\n <span className=\"text-[11px] font-medium text-foreground truncate shrink-0\">\n {agent.name}\n </span>\n <span className=\"flex-1 text-[10px] text-muted-foreground/60 truncate text-end\">\n {agent.url}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={() => {\n setEditingAgent(\n editingAgent === agent.id ? null : agent.id,\n );\n setShowAdd(false);\n }}\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-foreground hover:bg-accent/50\"\n >\n <IconPencil size={11} />\n </button>\n </TooltipTrigger>\n <TooltipContent>Edit agent</TooltipContent>\n </Tooltip>\n </div>\n {editingAgent === agent.id && (\n <AgentEditPopover\n agent={agent}\n onSave={handleSave}\n onDelete={handleDelete}\n onClose={() => setEditingAgent(null)}\n />\n )}\n </div>\n ))}\n <button\n onClick={() => {\n setShowAdd(true);\n setEditingAgent(null);\n }}\n className=\"flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-[11px] text-muted-foreground hover:text-foreground hover:bg-accent/30\"\n >\n <IconPlus size={12} className=\"shrink-0\" />\n Add agent\n </button>\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -163,9 +163,9 @@ export function AutomationsSection() {
163
163
  if (loading) {
164
164
  return (_jsxs("div", { className: "flex items-center gap-1.5 text-[10px] text-muted-foreground", children: [_jsx(IconLoader2, { size: 10, className: "animate-spin" }), "Loading..."] }));
165
165
  }
166
- return (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsxs(Popover, { open: newOpen, onOpenChange: setNewOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-[10px] font-medium text-muted-foreground hover:text-foreground hover:bg-accent/40", children: [_jsx(IconPlus, { size: 10 }), "New Automation"] }) }), _jsxs(PopoverContent, { align: "start", sideOffset: 6, collisionPadding: 8, className: "z-[260] w-[calc(100vw-24px)] max-w-[380px] p-3", children: [_jsx("p", { className: "px-1 pb-2 text-sm font-semibold text-foreground", children: "New automation" }), _jsx(PromptComposer, { autoFocus: true, placeholder: "Describe what you want to automate...", draftScope: "automations:create", onSubmit: handleNewSubmit }), _jsx("div", { className: "mt-2", children: _jsxs("select", { value: newScope, onChange: (e) => setNewScope(e.target.value), className: "w-full cursor-pointer rounded-md border border-input bg-background px-3 py-1.5 text-[12px] text-foreground", children: [_jsx("option", { value: "personal", children: "Personal" }), _jsx("option", { value: "organization", children: "Organization" })] }) })] })] }), automations.length > 0 && (_jsxs("button", { type: "button", onClick: handleFireTestEvent, className: "inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-[10px] font-medium text-muted-foreground hover:text-foreground hover:bg-accent/40", children: [_jsx(IconPlayerPlay, { size: 10 }), "Fire Test Event"] }))] }), automations.length === 0 ? (_jsx("p", { className: "text-[10px] text-muted-foreground", children: "No automations yet. Click \"New Automation\" to create one, or ask the agent to set up a scheduled or event-triggered task." })) : (automations.map((item) => (_jsxs("div", { className: "rounded-md border border-border px-2.5 py-2 bg-accent/30", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-muted-foreground shrink-0", children: item.schedule ? (_jsx(IconClock, { size: 11 })) : (_jsx(IconBolt, { size: 11 })) }), _jsx("span", { className: "text-[11px] font-medium text-foreground truncate capitalize", children: item.name })] }), item.scheduleDescription && (_jsx("p", { className: "text-[10px] text-muted-foreground mt-0.5 ml-[17px]", children: item.scheduleDescription })), item.schedule && !item.scheduleDescription && (_jsx("p", { className: "text-[10px] text-muted-foreground mt-0.5 ml-[17px] font-mono", children: item.schedule }))] }), _jsxs("div", { className: "flex items-center gap-1.5 shrink-0", children: [_jsx(StatusBadge, { status: item.lastStatus }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => handleToggle(item), disabled: togglingId === item.id, className: `rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide ${item.enabled
166
+ return (_jsxs("div", { className: "space-y-2", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsxs(Popover, { open: newOpen, onOpenChange: setNewOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-[10px] font-medium text-muted-foreground hover:text-foreground hover:bg-accent/40", children: [_jsx(IconPlus, { size: 10 }), "New Automation"] }) }), _jsxs(PopoverContent, { align: "start", sideOffset: 6, collisionPadding: 8, className: "z-[260] w-[calc(100vw-24px)] max-w-[380px] p-3", children: [_jsx("p", { className: "px-1 pb-2 text-sm font-semibold text-foreground", children: "New automation" }), _jsx(PromptComposer, { autoFocus: true, placeholder: "Describe what you want to automate...", draftScope: "automations:create", onSubmit: handleNewSubmit }), _jsx("div", { className: "mt-2", children: _jsxs("select", { value: newScope, onChange: (e) => setNewScope(e.target.value), className: "w-full cursor-pointer rounded-md border border-input bg-background px-3 py-1.5 text-[12px] text-foreground", children: [_jsx("option", { value: "personal", children: "Personal" }), _jsx("option", { value: "organization", children: "Organization" })] }) })] })] }), automations.length > 0 && (_jsxs("button", { type: "button", onClick: handleFireTestEvent, className: "inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-[10px] font-medium text-muted-foreground hover:text-foreground hover:bg-accent/40", children: [_jsx(IconPlayerPlay, { size: 10 }), "Fire Test Event"] }))] }), automations.length === 0 ? (_jsx("p", { className: "text-[10px] text-muted-foreground", children: "No automations yet. Click \"New Automation\" to create one, or ask the agent to set up a scheduled or event-triggered task." })) : (automations.map((item) => (_jsxs("div", { className: "rounded-md border border-border px-2.5 py-2 bg-accent/30", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "text-muted-foreground shrink-0", children: item.schedule ? (_jsx(IconClock, { size: 11 })) : (_jsx(IconBolt, { size: 11 })) }), _jsx("span", { className: "text-[11px] font-medium text-foreground truncate capitalize", children: item.name })] }), item.scheduleDescription && (_jsx("p", { className: "text-[10px] text-muted-foreground mt-0.5 ms-[17px]", children: item.scheduleDescription })), item.schedule && !item.scheduleDescription && (_jsx("p", { className: "text-[10px] text-muted-foreground mt-0.5 ms-[17px] font-mono", children: item.schedule }))] }), _jsxs("div", { className: "flex items-center gap-1.5 shrink-0", children: [_jsx(StatusBadge, { status: item.lastStatus }), _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => handleToggle(item), disabled: togglingId === item.id, className: `rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide ${item.enabled
167
167
  ? "bg-green-500/15 text-green-500"
168
- : "bg-accent/60 text-muted-foreground"} hover:opacity-80 disabled:opacity-40`, children: togglingId === item.id ? (_jsx(IconLoader2, { size: 10, className: "animate-spin" })) : item.enabled ? ("On") : ("Off") }) }), _jsx(TooltipContent, { children: item.enabled ? "Disable" : "Enable" })] }), confirmDeleteId === item.id ? (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { type: "button", onClick: () => handleDelete(item), disabled: deletingId === item.id, className: "rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide bg-red-500/15 text-red-500 hover:bg-red-500/25 disabled:opacity-40", children: deletingId === item.id ? (_jsx(IconLoader2, { size: 10, className: "animate-spin" })) : ("Confirm") }), _jsx("button", { type: "button", onClick: () => setConfirmDeleteId(null), className: "rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide bg-accent/60 text-muted-foreground hover:text-foreground", children: "Cancel" })] })) : (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => setConfirmDeleteId(item.id), className: "text-muted-foreground hover:text-red-500 disabled:opacity-40", children: _jsx(IconTrash, { size: 12 }) }) }), _jsx(TooltipContent, { children: "Delete" })] }))] })] }), item.lastRun && (_jsxs("p", { className: "text-[10px] text-muted-foreground mt-1 ml-[17px]", children: ["Last run:", " ", new Date(item.lastRun).toLocaleString(undefined, {
168
+ : "bg-accent/60 text-muted-foreground"} hover:opacity-80 disabled:opacity-40`, children: togglingId === item.id ? (_jsx(IconLoader2, { size: 10, className: "animate-spin" })) : item.enabled ? ("On") : ("Off") }) }), _jsx(TooltipContent, { children: item.enabled ? "Disable" : "Enable" })] }), confirmDeleteId === item.id ? (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { type: "button", onClick: () => handleDelete(item), disabled: deletingId === item.id, className: "rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide bg-red-500/15 text-red-500 hover:bg-red-500/25 disabled:opacity-40", children: deletingId === item.id ? (_jsx(IconLoader2, { size: 10, className: "animate-spin" })) : ("Confirm") }), _jsx("button", { type: "button", onClick: () => setConfirmDeleteId(null), className: "rounded px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide bg-accent/60 text-muted-foreground hover:text-foreground", children: "Cancel" })] })) : (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", onClick: () => setConfirmDeleteId(item.id), className: "text-muted-foreground hover:text-red-500 disabled:opacity-40", children: _jsx(IconTrash, { size: 12 }) }) }), _jsx(TooltipContent, { children: "Delete" })] }))] })] }), item.lastRun && (_jsxs("p", { className: "text-[10px] text-muted-foreground mt-1 ms-[17px]", children: ["Last run:", " ", new Date(item.lastRun).toLocaleString(undefined, {
169
169
  month: "short",
170
170
  day: "numeric",
171
171
  hour: "numeric",