@agent-native/core 0.90.2 → 0.90.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 (530) hide show
  1. package/bin/agent-native.js +25 -3
  2. package/corpus/README.md +2 -2
  3. package/corpus/core/CHANGELOG.md +21 -0
  4. package/corpus/core/bin/agent-native.js +25 -3
  5. package/corpus/core/docs/content/agent-native-toolkit.mdx +87 -80
  6. package/corpus/core/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
  7. package/corpus/core/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
  8. package/corpus/core/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
  9. package/corpus/core/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
  10. package/corpus/core/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
  11. package/corpus/core/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
  12. package/corpus/core/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
  13. package/corpus/core/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
  14. package/corpus/core/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
  15. package/corpus/core/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
  16. package/corpus/core/docs/content/toolkit-agent-ux.mdx +43 -0
  17. package/corpus/core/docs/content/toolkit-app-adapters.mdx +9 -0
  18. package/corpus/core/docs/content/toolkit-collaboration-ui.mdx +12 -0
  19. package/corpus/core/docs/content/toolkit-collaboration.mdx +74 -0
  20. package/corpus/core/docs/content/toolkit-command-navigation.mdx +106 -0
  21. package/corpus/core/docs/content/toolkit-comments-review.mdx +98 -0
  22. package/corpus/core/docs/content/toolkit-history.mdx +95 -0
  23. package/corpus/core/docs/content/toolkit-observability.mdx +41 -0
  24. package/corpus/core/docs/content/toolkit-org-team.mdx +80 -0
  25. package/corpus/core/docs/content/toolkit-resources.mdx +57 -0
  26. package/corpus/core/docs/content/toolkit-settings.mdx +65 -0
  27. package/corpus/core/docs/content/toolkit-setup-connections.mdx +109 -0
  28. package/corpus/core/docs/content/toolkit-sharing-ui.mdx +18 -6
  29. package/corpus/core/docs/content/toolkit-sharing.mdx +81 -0
  30. package/corpus/core/docs/content/toolkit-shell-hooks.mdx +9 -0
  31. package/corpus/core/docs/content/toolkit-ui.mdx +9 -0
  32. package/corpus/core/package.json +35 -1
  33. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +19 -1
  34. package/corpus/core/src/agent/engine/anthropic-engine.ts +25 -1
  35. package/corpus/core/src/agent/engine/index.ts +1 -0
  36. package/corpus/core/src/agent/engine/registry.ts +86 -18
  37. package/corpus/core/src/agent/production-agent.ts +37 -6
  38. package/corpus/core/src/cli/create.ts +35 -0
  39. package/corpus/core/src/cli/design-connect.ts +248 -0
  40. package/corpus/core/src/cli/index.ts +84 -7
  41. package/corpus/core/src/cli/workspacify.ts +34 -0
  42. package/corpus/core/src/client/command-navigation/index.ts +15 -0
  43. package/corpus/core/src/client/comments-review/index.ts +1 -0
  44. package/corpus/core/src/client/history/VersionHistoryPanel.tsx +175 -0
  45. package/corpus/core/src/client/history/index.ts +21 -0
  46. package/corpus/core/src/client/history/use-history.ts +114 -0
  47. package/corpus/core/src/client/index.ts +84 -9
  48. package/corpus/core/src/client/org/OrgSwitcher.tsx +6 -6
  49. package/corpus/core/src/client/org/RequireActiveOrg.tsx +2 -2
  50. package/corpus/core/src/client/org/TeamPage.tsx +3 -3
  51. package/corpus/core/src/client/org/hooks.ts +32 -0
  52. package/corpus/core/src/client/org/index.ts +30 -1
  53. package/corpus/core/src/client/org-team/index.ts +1 -0
  54. package/corpus/core/src/client/review/ReviewStatusBadge.tsx +39 -0
  55. package/corpus/core/src/client/review/ReviewThreadPanel.tsx +278 -0
  56. package/corpus/core/src/client/review/index.ts +30 -0
  57. package/corpus/core/src/client/review/use-review.ts +152 -0
  58. package/corpus/core/src/client/settings/index.ts +11 -1
  59. package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +94 -0
  60. package/corpus/core/src/client/setup-connections/ProviderReadinessBadge.tsx +73 -0
  61. package/corpus/core/src/client/setup-connections/SetupConnectionsPage.tsx +94 -0
  62. package/corpus/core/src/client/setup-connections/index.ts +46 -0
  63. package/corpus/core/src/client/sharing/ShareButton.tsx +20 -14
  64. package/corpus/core/src/client/sharing/ShareDialog.tsx +3 -3
  65. package/corpus/core/src/command-navigation/actions.ts +100 -0
  66. package/corpus/core/src/command-navigation/index.ts +12 -0
  67. package/corpus/core/src/comments-review/index.ts +1 -0
  68. package/corpus/core/src/file-upload/builder.ts +24 -3
  69. package/corpus/core/src/file-upload/types.ts +3 -1
  70. package/corpus/core/src/history/actions/create-resource-version.ts +92 -0
  71. package/corpus/core/src/history/actions/get-resource-version.ts +60 -0
  72. package/corpus/core/src/history/actions/list-resource-history.ts +53 -0
  73. package/corpus/core/src/history/actions/list-resource-versions.ts +43 -0
  74. package/corpus/core/src/history/actions/restore-resource-version.ts +96 -0
  75. package/corpus/core/src/history/index.ts +26 -0
  76. package/corpus/core/src/history/registry.ts +111 -0
  77. package/corpus/core/src/history/store.ts +379 -0
  78. package/corpus/core/src/history/types.ts +69 -0
  79. package/corpus/core/src/index.ts +10 -0
  80. package/corpus/core/src/navigation/index.ts +170 -0
  81. package/corpus/core/src/org/index.ts +8 -0
  82. package/corpus/core/src/org/permissions.ts +30 -0
  83. package/corpus/core/src/org-team/index.ts +1 -0
  84. package/corpus/core/src/private-blob/registry.ts +1 -0
  85. package/corpus/core/src/review/actions/consume-review-feedback.ts +48 -0
  86. package/corpus/core/src/review/actions/create-review-comment.ts +107 -0
  87. package/corpus/core/src/review/actions/delete-review-comment.ts +67 -0
  88. package/corpus/core/src/review/actions/get-review-feedback.ts +54 -0
  89. package/corpus/core/src/review/actions/list-review-comments.ts +53 -0
  90. package/corpus/core/src/review/actions/reply-review-comment.ts +107 -0
  91. package/corpus/core/src/review/actions/resolve-review-thread.ts +67 -0
  92. package/corpus/core/src/review/actions/set-review-status.ts +58 -0
  93. package/corpus/core/src/review/index.ts +31 -0
  94. package/corpus/core/src/review/mentions.ts +44 -0
  95. package/corpus/core/src/review/registry.ts +111 -0
  96. package/corpus/core/src/review/store.ts +690 -0
  97. package/corpus/core/src/review/types.ts +97 -0
  98. package/corpus/core/src/server/action-discovery.ts +54 -0
  99. package/corpus/core/src/server/agent-chat-plugin.ts +6 -0
  100. package/corpus/core/src/server/agent-engine-api-key-route.ts +5 -0
  101. package/corpus/core/src/server/credential-provider.ts +118 -0
  102. package/corpus/core/src/setup-connections/index.ts +89 -0
  103. package/corpus/core/src/setup-connections/onboarding.ts +47 -0
  104. package/corpus/core/src/transcription/builder-transcription.ts +9 -2
  105. package/corpus/core/src/vite/action-types-plugin.ts +52 -0
  106. package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -1
  107. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +2 -2
  108. package/corpus/templates/analytics/app/global.css +22 -10
  109. package/corpus/templates/analytics/app/i18n/zh-TW.ts +6 -1
  110. package/corpus/templates/analytics/app/i18n-data.ts +81 -13
  111. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +2 -2
  112. package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +2 -2
  113. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +528 -108
  114. package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +466 -183
  115. package/corpus/templates/analytics/changelog/2026-07-07-session-replays-load-sooner-show-clearer-activity-timelines-.md +6 -0
  116. package/corpus/templates/assets/actions/_preset-skeleton-validation.ts +11 -11
  117. package/corpus/templates/assets/actions/generate-image.ts +64 -28
  118. package/corpus/templates/assets/app/components/generation/GenerationResults.tsx +1 -1
  119. package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +91 -74
  120. package/corpus/templates/assets/server/lib/generation.ts +29 -4
  121. package/corpus/templates/assets/server/lib/image-processing.ts +131 -0
  122. package/corpus/templates/brain/app/routes/settings.tsx +2 -2
  123. package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +24 -2
  124. package/corpus/templates/calendar/AGENTS.md +3 -0
  125. package/corpus/templates/calendar/actions/create-event.ts +8 -34
  126. package/corpus/templates/calendar/actions/event-action-helpers.ts +52 -0
  127. package/corpus/templates/calendar/actions/manage-event-draft.ts +7 -34
  128. package/corpus/templates/calendar/actions/update-event.ts +10 -23
  129. package/corpus/templates/calendar/app/components/calendar/AttendeeAutocomplete.tsx +79 -6
  130. package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +23 -0
  131. package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +59 -2
  132. package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +40 -1
  133. package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +154 -41
  134. package/corpus/templates/calendar/app/hooks/use-events.ts +6 -0
  135. package/corpus/templates/calendar/app/hooks/use-people.ts +55 -0
  136. package/corpus/templates/calendar/app/i18n/zh-TW.ts +4 -0
  137. package/corpus/templates/calendar/app/i18n-data.ts +40 -0
  138. package/corpus/templates/calendar/changelog/2026-07-07-guest-suggestions-now-find-coworkers-from-your-google-worksp.md +6 -0
  139. package/corpus/templates/calendar/changelog/2026-07-07-you-can-mark-event-guests-as-optional-while-inviting-them-or.md +6 -0
  140. package/corpus/templates/calendar/changelog/2026-07-07-zoom-stays-selected-after-connecting-it-from-a-draft-event.md +6 -0
  141. package/corpus/templates/calendar/server/handlers/events.ts +1 -0
  142. package/corpus/templates/calendar/server/lib/google-calendar.ts +4 -0
  143. package/corpus/templates/calendar/server/plugins/agent-chat.ts +1 -1
  144. package/corpus/templates/calendar/shared/api.ts +2 -0
  145. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +29 -3
  146. package/corpus/templates/clips/actions/create-recording.ts +5 -1
  147. package/corpus/templates/clips/actions/finalize-recording.ts +140 -1
  148. package/corpus/templates/clips/actions/generate-workflow.ts +19 -8
  149. package/corpus/templates/clips/actions/get-clips-ai-prefs.ts +36 -0
  150. package/corpus/templates/clips/actions/import-loom-recording.ts +1 -0
  151. package/corpus/templates/clips/actions/lib/clips-ai-prefs.ts +28 -0
  152. package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +1 -0
  153. package/corpus/templates/clips/actions/regenerate-chapters.ts +21 -7
  154. package/corpus/templates/clips/actions/regenerate-summary.ts +26 -8
  155. package/corpus/templates/clips/actions/regenerate-title.ts +44 -7
  156. package/corpus/templates/clips/actions/request-transcript.ts +31 -0
  157. package/corpus/templates/clips/actions/set-thumbnail.ts +2 -0
  158. package/corpus/templates/clips/actions/update-clips-ai-prefs.ts +50 -0
  159. package/corpus/templates/clips/app/components/library/organization-switcher.tsx +2 -2
  160. package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +7 -2
  161. package/corpus/templates/clips/app/components/player/scrubber-position.ts +9 -0
  162. package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -2
  163. package/corpus/templates/clips/app/components/player/share-dialog.tsx +69 -41
  164. package/corpus/templates/clips/app/components/player/video-player.tsx +38 -1
  165. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +3 -3
  166. package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +9 -19
  167. package/corpus/templates/clips/app/hooks/use-auto-title.ts +25 -10
  168. package/corpus/templates/clips/app/i18n/ar-SA.ts +28 -6
  169. package/corpus/templates/clips/app/i18n/de-DE.ts +28 -6
  170. package/corpus/templates/clips/app/i18n/en-US.ts +29 -6
  171. package/corpus/templates/clips/app/i18n/es-ES.ts +29 -6
  172. package/corpus/templates/clips/app/i18n/fr-FR.ts +30 -6
  173. package/corpus/templates/clips/app/i18n/hi-IN.ts +26 -6
  174. package/corpus/templates/clips/app/i18n/ja-JP.ts +27 -6
  175. package/corpus/templates/clips/app/i18n/ko-KR.ts +28 -6
  176. package/corpus/templates/clips/app/i18n/pt-BR.ts +28 -6
  177. package/corpus/templates/clips/app/i18n/zh-CN.ts +26 -6
  178. package/corpus/templates/clips/app/i18n/zh-TW.ts +25 -6
  179. package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +73 -0
  180. package/corpus/templates/clips/app/routes/_app.settings._index.tsx +1 -0
  181. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +79 -5
  182. package/corpus/templates/clips/app/routes/record.tsx +21 -12
  183. package/corpus/templates/clips/changelog/2026-07-02-recordings-now-wait-for-storage-media-to-serve-before-finishing.md +6 -0
  184. package/corpus/templates/clips/changelog/2026-07-07-a-pending-app-update-no-longer-blocks-screen-recording-updat.md +6 -0
  185. package/corpus/templates/clips/changelog/2026-07-07-ai-tools-can-include-the-full-video-not-just-the-transcript-.md +6 -0
  186. package/corpus/templates/clips/changelog/2026-07-07-chrome-extension-recordings-keep-audio-after-refreshing-tab.md +6 -0
  187. package/corpus/templates/clips/changelog/2026-07-07-clip-playback-progress-now-starts-and-finishes-at-the-right-times.md +6 -0
  188. package/corpus/templates/clips/changelog/2026-07-07-clips-desktop-now-surfaces-meetings-and-dictate-directly-in-.md +6 -0
  189. package/corpus/templates/clips/changelog/2026-07-07-meeting-notes-now-explain-exactly-how-to-start-granola-style.md +6 -0
  190. package/corpus/templates/clips/changelog/2026-07-07-meeting-start-alerts-now-include-separate-start-notes-and-jo.md +6 -0
  191. package/corpus/templates/clips/changelog/2026-07-07-recordings-start-more-predictably-and-newly-saved-clips-refr.md +6 -0
  192. package/corpus/templates/clips/changelog/2026-07-07-sharing-public-clips-now-stays-focused-on-the-normal-link-wi.md +6 -0
  193. package/corpus/templates/clips/chrome-extension/public/manifest.json +1 -1
  194. package/corpus/templates/clips/chrome-extension/src/background.ts +18 -0
  195. package/corpus/templates/clips/chrome-extension/src/offscreen.ts +23 -8
  196. package/corpus/templates/clips/desktop/src/app.tsx +475 -108
  197. package/corpus/templates/clips/desktop/src/hooks/useMediaDevices.ts +19 -7
  198. package/corpus/templates/clips/desktop/src/lib/permissions.ts +2 -0
  199. package/corpus/templates/clips/desktop/src/lib/recorder.ts +27 -21
  200. package/corpus/templates/clips/desktop/src/lib/updater.ts +25 -2
  201. package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +23 -22
  202. package/corpus/templates/clips/desktop/src/styles.css +167 -2
  203. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +8 -1
  204. package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +3 -7
  205. package/corpus/templates/clips/desktop/src-tauri/src/tray_meetings.rs +5 -4
  206. package/corpus/templates/clips/server/routes/_agent-native/clips/user-prefs.put.ts +16 -8
  207. package/corpus/templates/clips/server/routes/api/recordings/[recordingId]/thumbnail.post.ts +1 -0
  208. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +22 -5
  209. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +8 -0
  210. package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +13 -6
  211. package/corpus/templates/clips/shared/clips-ai-prefs.ts +81 -0
  212. package/corpus/templates/clips/shared/finalize-recovery.ts +12 -0
  213. package/corpus/templates/content/actions/delete-document.ts +337 -52
  214. package/corpus/templates/content/changelog/2026-07-07-permanently-deleting-trashed-databases-now-finishes-reliably.md +6 -0
  215. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +16 -1
  216. package/corpus/templates/design/actions/add-localhost-screens.ts +1 -0
  217. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +345 -11
  218. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +89 -14
  219. package/corpus/templates/design/app/components/design/bridge-security.ts +7 -1
  220. package/corpus/templates/design/app/components/design/multi-screen/types.ts +1 -1
  221. package/corpus/templates/design/app/i18n/zh-TW.ts +3 -0
  222. package/corpus/templates/design/app/i18n-data.ts +41 -0
  223. package/corpus/templates/design/changelog/2026-07-07-local-visual-edit-uses-live-app-iframes-for-click-to-edit-pr.md +6 -0
  224. package/corpus/templates/slides/app/pages/DeckEditor.tsx +2 -2
  225. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  226. package/dist/agent/engine/ai-sdk-engine.js +15 -1
  227. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  228. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  229. package/dist/agent/engine/anthropic-engine.js +20 -1
  230. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  231. package/dist/agent/engine/index.d.ts +1 -1
  232. package/dist/agent/engine/index.d.ts.map +1 -1
  233. package/dist/agent/engine/index.js +1 -1
  234. package/dist/agent/engine/index.js.map +1 -1
  235. package/dist/agent/engine/registry.d.ts +14 -0
  236. package/dist/agent/engine/registry.d.ts.map +1 -1
  237. package/dist/agent/engine/registry.js +78 -16
  238. package/dist/agent/engine/registry.js.map +1 -1
  239. package/dist/agent/production-agent.d.ts.map +1 -1
  240. package/dist/agent/production-agent.js +27 -7
  241. package/dist/agent/production-agent.js.map +1 -1
  242. package/dist/cli/create.d.ts.map +1 -1
  243. package/dist/cli/create.js +31 -0
  244. package/dist/cli/create.js.map +1 -1
  245. package/dist/cli/design-connect.d.ts.map +1 -1
  246. package/dist/cli/design-connect.js +186 -0
  247. package/dist/cli/design-connect.js.map +1 -1
  248. package/dist/cli/index.js +76 -9
  249. package/dist/cli/index.js.map +1 -1
  250. package/dist/cli/workspacify.d.ts.map +1 -1
  251. package/dist/cli/workspacify.js +30 -0
  252. package/dist/cli/workspacify.js.map +1 -1
  253. package/dist/client/command-navigation/index.d.ts +4 -0
  254. package/dist/client/command-navigation/index.d.ts.map +1 -0
  255. package/dist/client/command-navigation/index.js +4 -0
  256. package/dist/client/command-navigation/index.js.map +1 -0
  257. package/dist/client/comments-review/index.d.ts +2 -0
  258. package/dist/client/comments-review/index.d.ts.map +1 -0
  259. package/dist/client/comments-review/index.js +2 -0
  260. package/dist/client/comments-review/index.js.map +1 -0
  261. package/dist/client/history/VersionHistoryPanel.d.ts +18 -0
  262. package/dist/client/history/VersionHistoryPanel.d.ts.map +1 -0
  263. package/dist/client/history/VersionHistoryPanel.js +31 -0
  264. package/dist/client/history/VersionHistoryPanel.js.map +1 -0
  265. package/dist/client/history/index.d.ts +3 -0
  266. package/dist/client/history/index.d.ts.map +1 -0
  267. package/dist/client/history/index.js +3 -0
  268. package/dist/client/history/index.js.map +1 -0
  269. package/dist/client/history/use-history.d.ts +58 -0
  270. package/dist/client/history/use-history.d.ts.map +1 -0
  271. package/dist/client/history/use-history.js +24 -0
  272. package/dist/client/history/use-history.js.map +1 -0
  273. package/dist/client/index.d.ts +6 -4
  274. package/dist/client/index.d.ts.map +1 -1
  275. package/dist/client/index.js +6 -4
  276. package/dist/client/index.js.map +1 -1
  277. package/dist/client/org/OrgSwitcher.js +5 -5
  278. package/dist/client/org/OrgSwitcher.js.map +1 -1
  279. package/dist/client/org/RequireActiveOrg.js +2 -2
  280. package/dist/client/org/RequireActiveOrg.js.map +1 -1
  281. package/dist/client/org/TeamPage.js +3 -3
  282. package/dist/client/org/TeamPage.js.map +1 -1
  283. package/dist/client/org/hooks.d.ts +12 -1
  284. package/dist/client/org/hooks.d.ts.map +1 -1
  285. package/dist/client/org/hooks.js +15 -0
  286. package/dist/client/org/hooks.js.map +1 -1
  287. package/dist/client/org/index.d.ts +4 -2
  288. package/dist/client/org/index.d.ts.map +1 -1
  289. package/dist/client/org/index.js +3 -1
  290. package/dist/client/org/index.js.map +1 -1
  291. package/dist/client/org-team/index.d.ts +2 -0
  292. package/dist/client/org-team/index.d.ts.map +1 -0
  293. package/dist/client/org-team/index.js +2 -0
  294. package/dist/client/org-team/index.js.map +1 -0
  295. package/dist/client/review/ReviewStatusBadge.d.ts +7 -0
  296. package/dist/client/review/ReviewStatusBadge.d.ts.map +1 -0
  297. package/dist/client/review/ReviewStatusBadge.js +19 -0
  298. package/dist/client/review/ReviewStatusBadge.js.map +1 -0
  299. package/dist/client/review/ReviewThreadPanel.d.ts +20 -0
  300. package/dist/client/review/ReviewThreadPanel.d.ts.map +1 -0
  301. package/dist/client/review/ReviewThreadPanel.js +84 -0
  302. package/dist/client/review/ReviewThreadPanel.js.map +1 -0
  303. package/dist/client/review/index.d.ts +4 -0
  304. package/dist/client/review/index.d.ts.map +1 -0
  305. package/dist/client/review/index.js +4 -0
  306. package/dist/client/review/index.js.map +1 -0
  307. package/dist/client/review/use-review.d.ts +91 -0
  308. package/dist/client/review/use-review.d.ts.map +1 -0
  309. package/dist/client/review/use-review.js +30 -0
  310. package/dist/client/review/use-review.js.map +1 -0
  311. package/dist/client/settings/index.d.ts +1 -1
  312. package/dist/client/settings/index.d.ts.map +1 -1
  313. package/dist/client/settings/index.js +1 -1
  314. package/dist/client/settings/index.js.map +1 -1
  315. package/dist/client/setup-connections/BuilderConnectCard.d.ts +9 -0
  316. package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -0
  317. package/dist/client/setup-connections/BuilderConnectCard.js +25 -0
  318. package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -0
  319. package/dist/client/setup-connections/ProviderReadinessBadge.d.ts +8 -0
  320. package/dist/client/setup-connections/ProviderReadinessBadge.d.ts.map +1 -0
  321. package/dist/client/setup-connections/ProviderReadinessBadge.js +32 -0
  322. package/dist/client/setup-connections/ProviderReadinessBadge.js.map +1 -0
  323. package/dist/client/setup-connections/SetupConnectionsPage.d.ts +17 -0
  324. package/dist/client/setup-connections/SetupConnectionsPage.d.ts.map +1 -0
  325. package/dist/client/setup-connections/SetupConnectionsPage.js +10 -0
  326. package/dist/client/setup-connections/SetupConnectionsPage.js.map +1 -0
  327. package/dist/client/setup-connections/index.d.ts +7 -0
  328. package/dist/client/setup-connections/index.d.ts.map +1 -0
  329. package/dist/client/setup-connections/index.js +7 -0
  330. package/dist/client/setup-connections/index.js.map +1 -0
  331. package/dist/client/sharing/ShareButton.d.ts +4 -4
  332. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  333. package/dist/client/sharing/ShareButton.js +13 -7
  334. package/dist/client/sharing/ShareButton.js.map +1 -1
  335. package/dist/client/sharing/ShareDialog.js +3 -3
  336. package/dist/client/sharing/ShareDialog.js.map +1 -1
  337. package/dist/collab/awareness.d.ts +2 -2
  338. package/dist/collab/awareness.d.ts.map +1 -1
  339. package/dist/collab/routes.d.ts +1 -1
  340. package/dist/collab/struct-routes.d.ts +1 -1
  341. package/dist/command-navigation/actions.d.ts +25 -0
  342. package/dist/command-navigation/actions.d.ts.map +1 -0
  343. package/dist/command-navigation/actions.js +64 -0
  344. package/dist/command-navigation/actions.js.map +1 -0
  345. package/dist/command-navigation/index.d.ts +4 -0
  346. package/dist/command-navigation/index.d.ts.map +1 -0
  347. package/dist/command-navigation/index.js +4 -0
  348. package/dist/command-navigation/index.js.map +1 -0
  349. package/dist/comments-review/index.d.ts +2 -0
  350. package/dist/comments-review/index.d.ts.map +1 -0
  351. package/dist/comments-review/index.js +2 -0
  352. package/dist/comments-review/index.js.map +1 -0
  353. package/dist/file-upload/builder.d.ts.map +1 -1
  354. package/dist/file-upload/builder.js +18 -2
  355. package/dist/file-upload/builder.js.map +1 -1
  356. package/dist/file-upload/types.d.ts +3 -0
  357. package/dist/file-upload/types.d.ts.map +1 -1
  358. package/dist/file-upload/types.js.map +1 -1
  359. package/dist/history/actions/create-resource-version.d.ts +10 -0
  360. package/dist/history/actions/create-resource-version.d.ts.map +1 -0
  361. package/dist/history/actions/create-resource-version.js +68 -0
  362. package/dist/history/actions/create-resource-version.js.map +1 -0
  363. package/dist/history/actions/get-resource-version.d.ts +10 -0
  364. package/dist/history/actions/get-resource-version.d.ts.map +1 -0
  365. package/dist/history/actions/get-resource-version.js +38 -0
  366. package/dist/history/actions/get-resource-version.js.map +1 -0
  367. package/dist/history/actions/list-resource-history.d.ts +10 -0
  368. package/dist/history/actions/list-resource-history.d.ts.map +1 -0
  369. package/dist/history/actions/list-resource-history.js +45 -0
  370. package/dist/history/actions/list-resource-history.js.map +1 -0
  371. package/dist/history/actions/list-resource-versions.d.ts +10 -0
  372. package/dist/history/actions/list-resource-versions.d.ts.map +1 -0
  373. package/dist/history/actions/list-resource-versions.js +35 -0
  374. package/dist/history/actions/list-resource-versions.js.map +1 -0
  375. package/dist/history/actions/restore-resource-version.d.ts +11 -0
  376. package/dist/history/actions/restore-resource-version.d.ts.map +1 -0
  377. package/dist/history/actions/restore-resource-version.js +59 -0
  378. package/dist/history/actions/restore-resource-version.js.map +1 -0
  379. package/dist/history/index.d.ts +4 -0
  380. package/dist/history/index.d.ts.map +1 -0
  381. package/dist/history/index.js +3 -0
  382. package/dist/history/index.js.map +1 -0
  383. package/dist/history/registry.d.ts +10 -0
  384. package/dist/history/registry.d.ts.map +1 -0
  385. package/dist/history/registry.js +63 -0
  386. package/dist/history/registry.js.map +1 -0
  387. package/dist/history/store.d.ts +34 -0
  388. package/dist/history/store.d.ts.map +1 -0
  389. package/dist/history/store.js +290 -0
  390. package/dist/history/store.js.map +1 -0
  391. package/dist/history/types.d.ts +55 -0
  392. package/dist/history/types.d.ts.map +1 -0
  393. package/dist/history/types.js +2 -0
  394. package/dist/history/types.js.map +1 -0
  395. package/dist/index.d.ts +6 -0
  396. package/dist/index.d.ts.map +1 -1
  397. package/dist/index.js +6 -0
  398. package/dist/index.js.map +1 -1
  399. package/dist/navigation/index.d.ts +53 -0
  400. package/dist/navigation/index.d.ts.map +1 -0
  401. package/dist/navigation/index.js +105 -0
  402. package/dist/navigation/index.js.map +1 -0
  403. package/dist/observability/routes.d.ts +3 -3
  404. package/dist/org/index.d.ts +1 -0
  405. package/dist/org/index.d.ts.map +1 -1
  406. package/dist/org/index.js +1 -0
  407. package/dist/org/index.js.map +1 -1
  408. package/dist/org/permissions.d.ts +7 -0
  409. package/dist/org/permissions.d.ts.map +1 -0
  410. package/dist/org/permissions.js +21 -0
  411. package/dist/org/permissions.js.map +1 -0
  412. package/dist/org-team/index.d.ts +2 -0
  413. package/dist/org-team/index.d.ts.map +1 -0
  414. package/dist/org-team/index.js +2 -0
  415. package/dist/org-team/index.js.map +1 -0
  416. package/dist/private-blob/registry.d.ts.map +1 -1
  417. package/dist/private-blob/registry.js +1 -0
  418. package/dist/private-blob/registry.js.map +1 -1
  419. package/dist/progress/routes.d.ts +1 -1
  420. package/dist/resources/handlers.d.ts +2 -2
  421. package/dist/review/actions/consume-review-feedback.d.ts +10 -0
  422. package/dist/review/actions/consume-review-feedback.d.ts.map +1 -0
  423. package/dist/review/actions/consume-review-feedback.js +35 -0
  424. package/dist/review/actions/consume-review-feedback.js.map +1 -0
  425. package/dist/review/actions/create-review-comment.d.ts +18 -0
  426. package/dist/review/actions/create-review-comment.d.ts.map +1 -0
  427. package/dist/review/actions/create-review-comment.js +81 -0
  428. package/dist/review/actions/create-review-comment.js.map +1 -0
  429. package/dist/review/actions/delete-review-comment.d.ts +11 -0
  430. package/dist/review/actions/delete-review-comment.d.ts.map +1 -0
  431. package/dist/review/actions/delete-review-comment.js +53 -0
  432. package/dist/review/actions/delete-review-comment.js.map +1 -0
  433. package/dist/review/actions/get-review-feedback.d.ts +10 -0
  434. package/dist/review/actions/get-review-feedback.d.ts.map +1 -0
  435. package/dist/review/actions/get-review-feedback.js +45 -0
  436. package/dist/review/actions/get-review-feedback.js.map +1 -0
  437. package/dist/review/actions/list-review-comments.d.ts +13 -0
  438. package/dist/review/actions/list-review-comments.d.ts.map +1 -0
  439. package/dist/review/actions/list-review-comments.js +44 -0
  440. package/dist/review/actions/list-review-comments.js.map +1 -0
  441. package/dist/review/actions/reply-review-comment.d.ts +16 -0
  442. package/dist/review/actions/reply-review-comment.d.ts.map +1 -0
  443. package/dist/review/actions/reply-review-comment.js +84 -0
  444. package/dist/review/actions/reply-review-comment.js.map +1 -0
  445. package/dist/review/actions/resolve-review-thread.d.ts +12 -0
  446. package/dist/review/actions/resolve-review-thread.d.ts.map +1 -0
  447. package/dist/review/actions/resolve-review-thread.js +49 -0
  448. package/dist/review/actions/resolve-review-thread.js.map +1 -0
  449. package/dist/review/actions/set-review-status.d.ts +9 -0
  450. package/dist/review/actions/set-review-status.d.ts.map +1 -0
  451. package/dist/review/actions/set-review-status.js +43 -0
  452. package/dist/review/actions/set-review-status.js.map +1 -0
  453. package/dist/review/index.d.ts +5 -0
  454. package/dist/review/index.d.ts.map +1 -0
  455. package/dist/review/index.js +4 -0
  456. package/dist/review/index.js.map +1 -0
  457. package/dist/review/mentions.d.ts +4 -0
  458. package/dist/review/mentions.d.ts.map +1 -0
  459. package/dist/review/mentions.js +39 -0
  460. package/dist/review/mentions.js.map +1 -0
  461. package/dist/review/registry.d.ts +10 -0
  462. package/dist/review/registry.d.ts.map +1 -0
  463. package/dist/review/registry.js +63 -0
  464. package/dist/review/registry.js.map +1 -0
  465. package/dist/review/store.d.ts +63 -0
  466. package/dist/review/store.d.ts.map +1 -0
  467. package/dist/review/store.js +561 -0
  468. package/dist/review/store.js.map +1 -0
  469. package/dist/review/types.d.ts +77 -0
  470. package/dist/review/types.d.ts.map +1 -0
  471. package/dist/review/types.js +2 -0
  472. package/dist/review/types.js.map +1 -0
  473. package/dist/secrets/routes.d.ts +9 -9
  474. package/dist/server/action-discovery.d.ts.map +1 -1
  475. package/dist/server/action-discovery.js +54 -0
  476. package/dist/server/action-discovery.js.map +1 -1
  477. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  478. package/dist/server/agent-chat-plugin.js +5 -0
  479. package/dist/server/agent-chat-plugin.js.map +1 -1
  480. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  481. package/dist/server/agent-engine-api-key-route.d.ts.map +1 -1
  482. package/dist/server/agent-engine-api-key-route.js +5 -0
  483. package/dist/server/agent-engine-api-key-route.js.map +1 -1
  484. package/dist/server/credential-provider.d.ts +28 -0
  485. package/dist/server/credential-provider.d.ts.map +1 -1
  486. package/dist/server/credential-provider.js +92 -0
  487. package/dist/server/credential-provider.js.map +1 -1
  488. package/dist/setup-connections/index.d.ts +6 -0
  489. package/dist/setup-connections/index.d.ts.map +1 -0
  490. package/dist/setup-connections/index.js +6 -0
  491. package/dist/setup-connections/index.js.map +1 -0
  492. package/dist/setup-connections/onboarding.d.ts +14 -0
  493. package/dist/setup-connections/onboarding.d.ts.map +1 -0
  494. package/dist/setup-connections/onboarding.js +23 -0
  495. package/dist/setup-connections/onboarding.js.map +1 -0
  496. package/dist/transcription/builder-transcription.d.ts +1 -0
  497. package/dist/transcription/builder-transcription.d.ts.map +1 -1
  498. package/dist/transcription/builder-transcription.js +5 -2
  499. package/dist/transcription/builder-transcription.js.map +1 -1
  500. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  501. package/dist/vite/action-types-plugin.js +52 -0
  502. package/dist/vite/action-types-plugin.js.map +1 -1
  503. package/docs/content/agent-native-toolkit.mdx +87 -80
  504. package/docs/content/locales/ar-SA/agent-native-toolkit.mdx +89 -80
  505. package/docs/content/locales/de-DE/agent-native-toolkit.mdx +89 -80
  506. package/docs/content/locales/es-ES/agent-native-toolkit.mdx +89 -80
  507. package/docs/content/locales/fr-FR/agent-native-toolkit.mdx +89 -80
  508. package/docs/content/locales/hi-IN/agent-native-toolkit.mdx +89 -80
  509. package/docs/content/locales/ja-JP/agent-native-toolkit.mdx +89 -80
  510. package/docs/content/locales/ko-KR/agent-native-toolkit.mdx +89 -80
  511. package/docs/content/locales/pt-BR/agent-native-toolkit.mdx +89 -80
  512. package/docs/content/locales/zh-CN/agent-native-toolkit.mdx +89 -80
  513. package/docs/content/locales/zh-TW/agent-native-toolkit.mdx +89 -80
  514. package/docs/content/toolkit-agent-ux.mdx +43 -0
  515. package/docs/content/toolkit-app-adapters.mdx +9 -0
  516. package/docs/content/toolkit-collaboration-ui.mdx +12 -0
  517. package/docs/content/toolkit-collaboration.mdx +74 -0
  518. package/docs/content/toolkit-command-navigation.mdx +106 -0
  519. package/docs/content/toolkit-comments-review.mdx +98 -0
  520. package/docs/content/toolkit-history.mdx +95 -0
  521. package/docs/content/toolkit-observability.mdx +41 -0
  522. package/docs/content/toolkit-org-team.mdx +80 -0
  523. package/docs/content/toolkit-resources.mdx +57 -0
  524. package/docs/content/toolkit-settings.mdx +65 -0
  525. package/docs/content/toolkit-setup-connections.mdx +109 -0
  526. package/docs/content/toolkit-sharing-ui.mdx +18 -6
  527. package/docs/content/toolkit-sharing.mdx +81 -0
  528. package/docs/content/toolkit-shell-hooks.mdx +9 -0
  529. package/docs/content/toolkit-ui.mdx +9 -0
  530. package/package.json +36 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/org-team/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC","sourcesContent":["export * from \"../org/index.js\";\n"]}
@@ -0,0 +1,7 @@
1
+ import type { ReviewStatus } from "../../review/types.js";
2
+ export interface ReviewStatusBadgeProps {
3
+ status: ReviewStatus | null | undefined;
4
+ className?: string;
5
+ }
6
+ export declare function ReviewStatusBadge({ status, className, }: ReviewStatusBadgeProps): import("react").JSX.Element;
7
+ //# sourceMappingURL=ReviewStatusBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewStatusBadge.d.ts","sourceRoot":"","sources":["../../../src/client/review/ReviewStatusBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgBD,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,GACV,EAAE,sBAAsB,+BAaxB"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../utils.js";
3
+ const STATUS_LABELS = {
4
+ draft: "Draft",
5
+ in_review: "In review",
6
+ approved: "Approved",
7
+ changes_requested: "Changes requested",
8
+ };
9
+ const STATUS_CLASSES = {
10
+ draft: "border-muted bg-muted text-muted-foreground",
11
+ in_review: "border-blue-200 bg-blue-50 text-blue-700",
12
+ approved: "border-emerald-200 bg-emerald-50 text-emerald-700",
13
+ changes_requested: "border-amber-200 bg-amber-50 text-amber-800",
14
+ };
15
+ export function ReviewStatusBadge({ status, className, }) {
16
+ const normalized = status ?? "draft";
17
+ return (_jsx("span", { className: cn("inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium", STATUS_CLASSES[normalized], className), children: STATUS_LABELS[normalized] }));
18
+ }
19
+ //# sourceMappingURL=ReviewStatusBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewStatusBadge.js","sourceRoot":"","sources":["../../../src/client/review/ReviewStatusBadge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOjC,MAAM,aAAa,GAAiC;IAClD,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,mBAAmB;CACvC,CAAC;AAEF,MAAM,cAAc,GAAiC;IACnD,KAAK,EAAE,6CAA6C;IACpD,SAAS,EAAE,0CAA0C;IACrD,QAAQ,EAAE,mDAAmD;IAC7D,iBAAiB,EAAE,6CAA6C;CACjE,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,EAChC,MAAM,EACN,SAAS,GACc;IACvB,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,CAAC;IACrC,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,8EAA8E,EAC9E,cAAc,CAAC,UAAU,CAAC,EAC1B,SAAS,CACV,YAEA,aAAa,CAAC,UAAU,CAAC,GACrB,CACR,CAAC;AACJ,CAAC","sourcesContent":["import type { ReviewStatus } from \"../../review/types.js\";\nimport { cn } from \"../utils.js\";\n\nexport interface ReviewStatusBadgeProps {\n status: ReviewStatus | null | undefined;\n className?: string;\n}\n\nconst STATUS_LABELS: Record<ReviewStatus, string> = {\n draft: \"Draft\",\n in_review: \"In review\",\n approved: \"Approved\",\n changes_requested: \"Changes requested\",\n};\n\nconst STATUS_CLASSES: Record<ReviewStatus, string> = {\n draft: \"border-muted bg-muted text-muted-foreground\",\n in_review: \"border-blue-200 bg-blue-50 text-blue-700\",\n approved: \"border-emerald-200 bg-emerald-50 text-emerald-700\",\n changes_requested: \"border-amber-200 bg-amber-50 text-amber-800\",\n};\n\nexport function ReviewStatusBadge({\n status,\n className,\n}: ReviewStatusBadgeProps) {\n const normalized = status ?? \"draft\";\n return (\n <span\n className={cn(\n \"inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-medium\",\n STATUS_CLASSES[normalized],\n className,\n )}\n >\n {STATUS_LABELS[normalized]}\n </span>\n );\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import type { ReviewComment } from "../../review/types.js";
2
+ export interface ReviewThread {
3
+ root: ReviewComment;
4
+ replies: ReviewComment[];
5
+ }
6
+ export interface ReviewThreadPanelProps {
7
+ resourceType: string;
8
+ resourceId: string;
9
+ targetId?: string | null;
10
+ title?: string;
11
+ className?: string;
12
+ includeResolved?: boolean;
13
+ showComposer?: boolean;
14
+ placeholder?: string;
15
+ emptyState?: string;
16
+ onSelectThread?: (thread: ReviewThread) => void;
17
+ }
18
+ export declare function ReviewThreadPanel({ resourceType, resourceId, targetId, title, className, includeResolved, showComposer, placeholder, emptyState, onSelectThread, }: ReviewThreadPanelProps): import("react").JSX.Element;
19
+ export declare function buildReviewThreads(comments: ReviewComment[]): ReviewThread[];
20
+ //# sourceMappingURL=ReviewThreadPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewThreadPanel.d.ts","sourceRoot":"","sources":["../../../src/client/review/ReviewThreadPanel.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAW3D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CACjD;AAED,wBAAgB,iBAAiB,CAAC,EAChC,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,KAAgB,EAChB,SAAS,EACT,eAAsB,EACtB,YAAmB,EACnB,WAAgC,EAChC,UAAsC,EACtC,cAAc,GACf,EAAE,sBAAsB,+BA2KxB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAkB5E"}
@@ -0,0 +1,84 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IconMessageCircle, IconPlus, IconSend, IconTrash, IconCircleCheck, } from "@tabler/icons-react";
3
+ import { useMemo, useState } from "react";
4
+ import { cn } from "../utils.js";
5
+ import { ReviewStatusBadge } from "./ReviewStatusBadge.js";
6
+ import { useCreateReviewComment, useDeleteReviewComment, useReplyReviewComment, useResolveReviewThread, useReviewComments, } from "./use-review.js";
7
+ export function ReviewThreadPanel({ resourceType, resourceId, targetId, title = "Review", className, includeResolved = true, showComposer = true, placeholder = "Add a comment...", emptyState = "No review comments yet.", onSelectThread, }) {
8
+ const [draft, setDraft] = useState("");
9
+ const [replyDrafts, setReplyDrafts] = useState({});
10
+ const comments = useReviewComments({
11
+ resourceType,
12
+ resourceId,
13
+ targetId,
14
+ includeResolved,
15
+ });
16
+ const createComment = useCreateReviewComment();
17
+ const replyComment = useReplyReviewComment();
18
+ const resolveThread = useResolveReviewThread();
19
+ const deleteComment = useDeleteReviewComment();
20
+ const threads = useMemo(() => buildReviewThreads(comments.data?.comments ?? []), [comments.data?.comments]);
21
+ return (_jsxs("section", { className: cn("rounded-lg border border-border bg-card text-card-foreground", className), children: [_jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-border px-4 py-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(IconMessageCircle, { className: "h-4 w-4 text-muted-foreground" }), _jsx("h2", { className: "text-sm font-medium", children: title })] }), _jsx(ReviewStatusBadge, { status: comments.data?.reviewStatus?.status })] }), showComposer ? (_jsxs("form", { className: "border-b border-border p-3", onSubmit: (event) => {
22
+ event.preventDefault();
23
+ const body = draft.trim();
24
+ if (!body)
25
+ return;
26
+ createComment.mutate({ resourceType, resourceId, targetId, body }, { onSuccess: () => setDraft("") });
27
+ }, children: [_jsx("textarea", { value: draft, onChange: (event) => setDraft(event.currentTarget.value), placeholder: placeholder, className: "min-h-20 w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-ring" }), _jsx("div", { className: "mt-2 flex justify-end", children: _jsxs("button", { type: "submit", disabled: !draft.trim() || createComment.isPending, className: "inline-flex h-8 items-center gap-1.5 rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(IconPlus, { className: "h-3.5 w-3.5" }), "Comment"] }) })] })) : null, _jsx("div", { className: "divide-y divide-border", children: comments.isLoading ? (_jsx("div", { className: "px-4 py-6 text-sm text-muted-foreground", children: "Loading comments..." })) : threads.length ? (threads.map((thread) => (_jsxs("article", { className: "px-4 py-3", onClick: () => onSelectThread?.(thread), children: [_jsx(CommentBubble, { comment: thread.root }), thread.replies.length ? (_jsx("div", { className: "mt-3 space-y-3 border-l border-border pl-4", children: thread.replies.map((reply) => (_jsx(CommentBubble, { comment: reply, compact: true }, reply.id))) })) : null, _jsxs("form", { className: "mt-3 flex gap-2", onSubmit: (event) => {
28
+ event.preventDefault();
29
+ const body = replyDrafts[thread.root.id]?.trim();
30
+ if (!body)
31
+ return;
32
+ replyComment.mutate({
33
+ resourceType,
34
+ resourceId,
35
+ commentId: thread.root.id,
36
+ body,
37
+ }, {
38
+ onSuccess: () => setReplyDrafts((current) => ({
39
+ ...current,
40
+ [thread.root.id]: "",
41
+ })),
42
+ });
43
+ }, children: [_jsx("input", { value: replyDrafts[thread.root.id] ?? "", onChange: (event) => setReplyDrafts((current) => ({
44
+ ...current,
45
+ [thread.root.id]: event.currentTarget.value,
46
+ })), placeholder: "Reply...", className: "h-8 min-w-0 flex-1 rounded-md border border-input bg-background px-3 text-sm outline-none focus:ring-2 focus:ring-ring" }), _jsx("button", { type: "submit", disabled: !replyDrafts[thread.root.id]?.trim() ||
47
+ replyComment.isPending, className: "inline-flex h-8 w-8 items-center justify-center rounded-md border border-input hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50", "aria-label": "Reply", children: _jsx(IconSend, { className: "h-3.5 w-3.5" }) }), thread.root.status !== "resolved" ? (_jsx("button", { type: "button", className: "inline-flex h-8 w-8 items-center justify-center rounded-md border border-input hover:bg-accent", "aria-label": "Resolve thread", onClick: () => resolveThread.mutate({
48
+ resourceType,
49
+ resourceId,
50
+ threadId: thread.root.threadId,
51
+ }), children: _jsx(IconCircleCheck, { className: "h-3.5 w-3.5" }) })) : null, _jsx("button", { type: "button", className: "inline-flex h-8 w-8 items-center justify-center rounded-md border border-input text-muted-foreground hover:bg-accent", "aria-label": "Delete comment", onClick: () => deleteComment.mutate({
52
+ resourceType,
53
+ resourceId,
54
+ commentId: thread.root.id,
55
+ }), children: _jsx(IconTrash, { className: "h-3.5 w-3.5" }) })] })] }, thread.root.threadId)))) : (_jsx("div", { className: "px-4 py-6 text-sm text-muted-foreground", children: emptyState })) })] }));
56
+ }
57
+ export function buildReviewThreads(comments) {
58
+ const roots = [];
59
+ const replies = new Map();
60
+ for (const comment of comments) {
61
+ if (!comment.parentCommentId || comment.parentCommentId === comment.id) {
62
+ roots.push(comment);
63
+ continue;
64
+ }
65
+ const list = replies.get(comment.threadId) ?? [];
66
+ list.push(comment);
67
+ replies.set(comment.threadId, list);
68
+ }
69
+ return roots.map((root) => ({
70
+ root,
71
+ replies: replies.get(root.threadId) ?? [],
72
+ }));
73
+ }
74
+ function CommentBubble({ comment, compact = false, }) {
75
+ return (_jsxs("div", { className: compact ? "text-sm" : "", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("span", { className: "text-sm font-medium", children: comment.authorName ?? comment.authorEmail ?? "Reviewer" }), _jsx("span", { className: "text-xs text-muted-foreground", children: formatCommentDate(comment.createdAt) }), comment.status === "resolved" ? (_jsx("span", { className: "rounded-full bg-emerald-50 px-2 py-0.5 text-xs text-emerald-700", children: "Resolved" })) : null] }), _jsx("p", { className: "mt-1 whitespace-pre-wrap text-sm text-foreground", children: comment.body })] }));
76
+ }
77
+ function formatCommentDate(value) {
78
+ const date = new Date(value);
79
+ if (Number.isNaN(date.getTime())) {
80
+ return value;
81
+ }
82
+ return date.toLocaleString();
83
+ }
84
+ //# sourceMappingURL=ReviewThreadPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReviewThreadPanel.js","sourceRoot":"","sources":["../../../src/client/review/ReviewThreadPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n IconMessageCircle,\n IconPlus,\n IconSend,\n IconTrash,\n IconCircleCheck,\n} from \"@tabler/icons-react\";\nimport { useMemo, useState } from \"react\";\n\nimport type { ReviewComment } from \"../../review/types.js\";\nimport { cn } from \"../utils.js\";\nimport { ReviewStatusBadge } from \"./ReviewStatusBadge.js\";\nimport {\n useCreateReviewComment,\n useDeleteReviewComment,\n useReplyReviewComment,\n useResolveReviewThread,\n useReviewComments,\n} from \"./use-review.js\";\n\nexport interface ReviewThread {\n root: ReviewComment;\n replies: ReviewComment[];\n}\n\nexport interface ReviewThreadPanelProps {\n resourceType: string;\n resourceId: string;\n targetId?: string | null;\n title?: string;\n className?: string;\n includeResolved?: boolean;\n showComposer?: boolean;\n placeholder?: string;\n emptyState?: string;\n onSelectThread?: (thread: ReviewThread) => void;\n}\n\nexport function ReviewThreadPanel({\n resourceType,\n resourceId,\n targetId,\n title = \"Review\",\n className,\n includeResolved = true,\n showComposer = true,\n placeholder = \"Add a comment...\",\n emptyState = \"No review comments yet.\",\n onSelectThread,\n}: ReviewThreadPanelProps) {\n const [draft, setDraft] = useState(\"\");\n const [replyDrafts, setReplyDrafts] = useState<Record<string, string>>({});\n const comments = useReviewComments({\n resourceType,\n resourceId,\n targetId,\n includeResolved,\n });\n const createComment = useCreateReviewComment();\n const replyComment = useReplyReviewComment();\n const resolveThread = useResolveReviewThread();\n const deleteComment = useDeleteReviewComment();\n const threads = useMemo(\n () => buildReviewThreads(comments.data?.comments ?? []),\n [comments.data?.comments],\n );\n\n return (\n <section\n className={cn(\n \"rounded-lg border border-border bg-card text-card-foreground\",\n className,\n )}\n >\n <div className=\"flex items-center justify-between gap-3 border-b border-border px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <IconMessageCircle className=\"h-4 w-4 text-muted-foreground\" />\n <h2 className=\"text-sm font-medium\">{title}</h2>\n </div>\n <ReviewStatusBadge status={comments.data?.reviewStatus?.status} />\n </div>\n\n {showComposer ? (\n <form\n className=\"border-b border-border p-3\"\n onSubmit={(event) => {\n event.preventDefault();\n const body = draft.trim();\n if (!body) return;\n createComment.mutate(\n { resourceType, resourceId, targetId, body },\n { onSuccess: () => setDraft(\"\") },\n );\n }}\n >\n <textarea\n value={draft}\n onChange={(event) => setDraft(event.currentTarget.value)}\n placeholder={placeholder}\n className=\"min-h-20 w-full resize-y rounded-md border border-input bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-ring\"\n />\n <div className=\"mt-2 flex justify-end\">\n <button\n type=\"submit\"\n disabled={!draft.trim() || createComment.isPending}\n className=\"inline-flex h-8 items-center gap-1.5 rounded-md bg-primary px-3 text-xs font-medium text-primary-foreground hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <IconPlus className=\"h-3.5 w-3.5\" />\n Comment\n </button>\n </div>\n </form>\n ) : null}\n\n <div className=\"divide-y divide-border\">\n {comments.isLoading ? (\n <div className=\"px-4 py-6 text-sm text-muted-foreground\">\n Loading comments...\n </div>\n ) : threads.length ? (\n threads.map((thread) => (\n <article\n key={thread.root.threadId}\n className=\"px-4 py-3\"\n onClick={() => onSelectThread?.(thread)}\n >\n <CommentBubble comment={thread.root} />\n {thread.replies.length ? (\n <div className=\"mt-3 space-y-3 border-l border-border pl-4\">\n {thread.replies.map((reply) => (\n <CommentBubble key={reply.id} comment={reply} compact />\n ))}\n </div>\n ) : null}\n <form\n className=\"mt-3 flex gap-2\"\n onSubmit={(event) => {\n event.preventDefault();\n const body = replyDrafts[thread.root.id]?.trim();\n if (!body) return;\n replyComment.mutate(\n {\n resourceType,\n resourceId,\n commentId: thread.root.id,\n body,\n },\n {\n onSuccess: () =>\n setReplyDrafts((current) => ({\n ...current,\n [thread.root.id]: \"\",\n })),\n },\n );\n }}\n >\n <input\n value={replyDrafts[thread.root.id] ?? \"\"}\n onChange={(event) =>\n setReplyDrafts((current) => ({\n ...current,\n [thread.root.id]: event.currentTarget.value,\n }))\n }\n placeholder=\"Reply...\"\n className=\"h-8 min-w-0 flex-1 rounded-md border border-input bg-background px-3 text-sm outline-none focus:ring-2 focus:ring-ring\"\n />\n <button\n type=\"submit\"\n disabled={\n !replyDrafts[thread.root.id]?.trim() ||\n replyComment.isPending\n }\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md border border-input hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label=\"Reply\"\n >\n <IconSend className=\"h-3.5 w-3.5\" />\n </button>\n {thread.root.status !== \"resolved\" ? (\n <button\n type=\"button\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md border border-input hover:bg-accent\"\n aria-label=\"Resolve thread\"\n onClick={() =>\n resolveThread.mutate({\n resourceType,\n resourceId,\n threadId: thread.root.threadId,\n })\n }\n >\n <IconCircleCheck className=\"h-3.5 w-3.5\" />\n </button>\n ) : null}\n <button\n type=\"button\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded-md border border-input text-muted-foreground hover:bg-accent\"\n aria-label=\"Delete comment\"\n onClick={() =>\n deleteComment.mutate({\n resourceType,\n resourceId,\n commentId: thread.root.id,\n })\n }\n >\n <IconTrash className=\"h-3.5 w-3.5\" />\n </button>\n </form>\n </article>\n ))\n ) : (\n <div className=\"px-4 py-6 text-sm text-muted-foreground\">\n {emptyState}\n </div>\n )}\n </div>\n </section>\n );\n}\n\nexport function buildReviewThreads(comments: ReviewComment[]): ReviewThread[] {\n const roots: ReviewComment[] = [];\n const replies = new Map<string, ReviewComment[]>();\n\n for (const comment of comments) {\n if (!comment.parentCommentId || comment.parentCommentId === comment.id) {\n roots.push(comment);\n continue;\n }\n const list = replies.get(comment.threadId) ?? [];\n list.push(comment);\n replies.set(comment.threadId, list);\n }\n\n return roots.map((root) => ({\n root,\n replies: replies.get(root.threadId) ?? [],\n }));\n}\n\nfunction CommentBubble({\n comment,\n compact = false,\n}: {\n comment: ReviewComment;\n compact?: boolean;\n}) {\n return (\n <div className={compact ? \"text-sm\" : \"\"}>\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm font-medium\">\n {comment.authorName ?? comment.authorEmail ?? \"Reviewer\"}\n </span>\n <span className=\"text-xs text-muted-foreground\">\n {formatCommentDate(comment.createdAt)}\n </span>\n {comment.status === \"resolved\" ? (\n <span className=\"rounded-full bg-emerald-50 px-2 py-0.5 text-xs text-emerald-700\">\n Resolved\n </span>\n ) : null}\n </div>\n <p className=\"mt-1 whitespace-pre-wrap text-sm text-foreground\">\n {comment.body}\n </p>\n </div>\n );\n}\n\nfunction formatCommentDate(value: string): string {\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) {\n return value;\n }\n return date.toLocaleString();\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export { ReviewStatusBadge, type ReviewStatusBadgeProps, } from "./ReviewStatusBadge.js";
2
+ export { ReviewThreadPanel, buildReviewThreads, type ReviewThread, type ReviewThreadPanelProps, } from "./ReviewThreadPanel.js";
3
+ export { useConsumeReviewFeedback, useCreateReviewComment, useDeleteReviewComment, useReplyReviewComment, useResolveReviewThread, useReviewComments, useReviewFeedback, useSetReviewStatus, type ConsumeReviewFeedbackInput, type CreateReviewCommentInput, type DeleteReviewCommentInput, type GetReviewFeedbackParams, type GetReviewFeedbackResult, type ListReviewCommentsParams, type ListReviewCommentsResult, type ReplyReviewCommentInput, type ResolveReviewThreadInput, type SetReviewStatusInput, } from "./use-review.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { ReviewStatusBadge, } from "./ReviewStatusBadge.js";
2
+ export { ReviewThreadPanel, buildReviewThreads, } from "./ReviewThreadPanel.js";
3
+ export { useConsumeReviewFeedback, useCreateReviewComment, useDeleteReviewComment, useReplyReviewComment, useResolveReviewThread, useReviewComments, useReviewFeedback, useSetReviewStatus, } from "./use-review.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/review/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GAWnB,MAAM,iBAAiB,CAAC","sourcesContent":["export {\n ReviewStatusBadge,\n type ReviewStatusBadgeProps,\n} from \"./ReviewStatusBadge.js\";\nexport {\n ReviewThreadPanel,\n buildReviewThreads,\n type ReviewThread,\n type ReviewThreadPanelProps,\n} from \"./ReviewThreadPanel.js\";\nexport {\n useConsumeReviewFeedback,\n useCreateReviewComment,\n useDeleteReviewComment,\n useReplyReviewComment,\n useResolveReviewThread,\n useReviewComments,\n useReviewFeedback,\n useSetReviewStatus,\n type ConsumeReviewFeedbackInput,\n type CreateReviewCommentInput,\n type DeleteReviewCommentInput,\n type GetReviewFeedbackParams,\n type GetReviewFeedbackResult,\n type ListReviewCommentsParams,\n type ListReviewCommentsResult,\n type ReplyReviewCommentInput,\n type ResolveReviewThreadInput,\n type SetReviewStatusInput,\n} from \"./use-review.js\";\n"]}
@@ -0,0 +1,91 @@
1
+ import type { ReviewComment, ReviewCommentKind, ReviewMention, ReviewResolutionTarget, ReviewStatus, ReviewStatusEntry } from "../../review/types.js";
2
+ export interface ListReviewCommentsParams {
3
+ resourceType: string;
4
+ resourceId: string;
5
+ includeResolved?: boolean;
6
+ includeDeleted?: boolean;
7
+ targetId?: string | null;
8
+ limit?: number;
9
+ }
10
+ export interface ListReviewCommentsResult {
11
+ comments: ReviewComment[];
12
+ reviewStatus: ReviewStatusEntry | null;
13
+ }
14
+ export interface GetReviewFeedbackParams {
15
+ resourceType: string;
16
+ resourceId: string;
17
+ includeHumanTargeted?: boolean;
18
+ limit?: number;
19
+ }
20
+ export interface GetReviewFeedbackResult {
21
+ comments: ReviewComment[];
22
+ }
23
+ export interface CreateReviewCommentInput {
24
+ resourceType: string;
25
+ resourceId: string;
26
+ targetId?: string | null;
27
+ kind?: ReviewCommentKind;
28
+ anchor?: unknown | null;
29
+ body: string;
30
+ authorName?: string | null;
31
+ resolutionTarget?: ReviewResolutionTarget | null;
32
+ mentions?: ReviewMention[];
33
+ metadata?: Record<string, unknown>;
34
+ }
35
+ export interface ReplyReviewCommentInput {
36
+ resourceType: string;
37
+ resourceId: string;
38
+ commentId: string;
39
+ body: string;
40
+ authorName?: string | null;
41
+ resolutionTarget?: ReviewResolutionTarget | null;
42
+ mentions?: ReviewMention[];
43
+ metadata?: Record<string, unknown>;
44
+ }
45
+ export interface ResolveReviewThreadInput {
46
+ resourceType: string;
47
+ resourceId: string;
48
+ threadId?: string;
49
+ commentId?: string;
50
+ }
51
+ export interface DeleteReviewCommentInput {
52
+ resourceType: string;
53
+ resourceId: string;
54
+ commentId: string;
55
+ }
56
+ export interface ConsumeReviewFeedbackInput {
57
+ resourceType: string;
58
+ resourceId: string;
59
+ commentIds: string[];
60
+ }
61
+ export interface SetReviewStatusInput {
62
+ resourceType: string;
63
+ resourceId: string;
64
+ status: ReviewStatus;
65
+ note?: string | null;
66
+ metadata?: Record<string, unknown>;
67
+ }
68
+ export declare function useReviewComments(params: ListReviewCommentsParams, options?: {
69
+ enabled?: boolean;
70
+ }): import("@tanstack/react-query").UseQueryResult<NoInfer<ListReviewCommentsResult>, Error>;
71
+ export declare function useReviewFeedback(params: GetReviewFeedbackParams, options?: {
72
+ enabled?: boolean;
73
+ }): import("@tanstack/react-query").UseQueryResult<NoInfer<GetReviewFeedbackResult>, Error>;
74
+ export declare function useCreateReviewComment(): import("@tanstack/react-query").UseMutationResult<ReviewComment, Error, CreateReviewCommentInput, unknown>;
75
+ export declare function useReplyReviewComment(): import("@tanstack/react-query").UseMutationResult<ReviewComment, Error, ReplyReviewCommentInput, unknown>;
76
+ export declare function useResolveReviewThread(): import("@tanstack/react-query").UseMutationResult<{
77
+ threadId: string;
78
+ resolved: true;
79
+ updatedCount: number;
80
+ }, Error, ResolveReviewThreadInput, unknown>;
81
+ export declare function useDeleteReviewComment(): import("@tanstack/react-query").UseMutationResult<{
82
+ commentId: string;
83
+ deleted: true;
84
+ updatedCount: number;
85
+ }, Error, DeleteReviewCommentInput, unknown>;
86
+ export declare function useConsumeReviewFeedback(): import("@tanstack/react-query").UseMutationResult<{
87
+ consumedCommentIds: string[];
88
+ updatedCount: number;
89
+ }, Error, ConsumeReviewFeedbackInput, unknown>;
90
+ export declare function useSetReviewStatus(): import("@tanstack/react-query").UseMutationResult<ReviewStatusEntry, Error, SetReviewStatusInput, unknown>;
91
+ //# sourceMappingURL=use-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-review.d.ts","sourceRoot":"","sources":["../../../src/client/review/use-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { useActionMutation, useActionQuery } from "../use-action.js";
2
+ export function useReviewComments(params, options) {
3
+ return useActionQuery("list-review-comments", params, {
4
+ enabled: options?.enabled ?? Boolean(params.resourceType && params.resourceId),
5
+ });
6
+ }
7
+ export function useReviewFeedback(params, options) {
8
+ return useActionQuery("get-review-feedback", params, {
9
+ enabled: options?.enabled ?? Boolean(params.resourceType && params.resourceId),
10
+ });
11
+ }
12
+ export function useCreateReviewComment() {
13
+ return useActionMutation("create-review-comment");
14
+ }
15
+ export function useReplyReviewComment() {
16
+ return useActionMutation("reply-review-comment");
17
+ }
18
+ export function useResolveReviewThread() {
19
+ return useActionMutation("resolve-review-thread");
20
+ }
21
+ export function useDeleteReviewComment() {
22
+ return useActionMutation("delete-review-comment");
23
+ }
24
+ export function useConsumeReviewFeedback() {
25
+ return useActionMutation("consume-review-feedback");
26
+ }
27
+ export function useSetReviewStatus() {
28
+ return useActionMutation("set-review-status");
29
+ }
30
+ //# sourceMappingURL=use-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-review.js","sourceRoot":"","sources":["../../../src/client/review/use-review.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA8ErE,MAAM,UAAU,iBAAiB,CAC/B,MAAgC,EAChC,OAA+B;IAE/B,OAAO,cAAc,CACnB,sBAAsB,EACtB,MAAM,EACN;QACE,OAAO,EACL,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC;KACxE,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAA+B,EAC/B,OAA+B;IAE/B,OAAO,cAAc,CACnB,qBAAqB,EACrB,MAAM,EACN;QACE,OAAO,EACL,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC;KACxE,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,iBAAiB,CACtB,uBAAuB,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,iBAAiB,CACtB,sBAAsB,CACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,iBAAiB,CAGtB,uBAAuB,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,iBAAiB,CAGtB,uBAAuB,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,iBAAiB,CAGtB,yBAAyB,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,iBAAiB,CACtB,mBAAmB,CACpB,CAAC;AACJ,CAAC","sourcesContent":["import type {\n ReviewComment,\n ReviewCommentKind,\n ReviewMention,\n ReviewResolutionTarget,\n ReviewStatus,\n ReviewStatusEntry,\n} from \"../../review/types.js\";\nimport { useActionMutation, useActionQuery } from \"../use-action.js\";\n\nexport interface ListReviewCommentsParams {\n resourceType: string;\n resourceId: string;\n includeResolved?: boolean;\n includeDeleted?: boolean;\n targetId?: string | null;\n limit?: number;\n}\n\nexport interface ListReviewCommentsResult {\n comments: ReviewComment[];\n reviewStatus: ReviewStatusEntry | null;\n}\n\nexport interface GetReviewFeedbackParams {\n resourceType: string;\n resourceId: string;\n includeHumanTargeted?: boolean;\n limit?: number;\n}\n\nexport interface GetReviewFeedbackResult {\n comments: ReviewComment[];\n}\n\nexport interface CreateReviewCommentInput {\n resourceType: string;\n resourceId: string;\n targetId?: string | null;\n kind?: ReviewCommentKind;\n anchor?: unknown | null;\n body: string;\n authorName?: string | null;\n resolutionTarget?: ReviewResolutionTarget | null;\n mentions?: ReviewMention[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ReplyReviewCommentInput {\n resourceType: string;\n resourceId: string;\n commentId: string;\n body: string;\n authorName?: string | null;\n resolutionTarget?: ReviewResolutionTarget | null;\n mentions?: ReviewMention[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface ResolveReviewThreadInput {\n resourceType: string;\n resourceId: string;\n threadId?: string;\n commentId?: string;\n}\n\nexport interface DeleteReviewCommentInput {\n resourceType: string;\n resourceId: string;\n commentId: string;\n}\n\nexport interface ConsumeReviewFeedbackInput {\n resourceType: string;\n resourceId: string;\n commentIds: string[];\n}\n\nexport interface SetReviewStatusInput {\n resourceType: string;\n resourceId: string;\n status: ReviewStatus;\n note?: string | null;\n metadata?: Record<string, unknown>;\n}\n\nexport function useReviewComments(\n params: ListReviewCommentsParams,\n options?: { enabled?: boolean },\n) {\n return useActionQuery<ListReviewCommentsResult>(\n \"list-review-comments\",\n params,\n {\n enabled:\n options?.enabled ?? Boolean(params.resourceType && params.resourceId),\n },\n );\n}\n\nexport function useReviewFeedback(\n params: GetReviewFeedbackParams,\n options?: { enabled?: boolean },\n) {\n return useActionQuery<GetReviewFeedbackResult>(\n \"get-review-feedback\",\n params,\n {\n enabled:\n options?.enabled ?? Boolean(params.resourceType && params.resourceId),\n },\n );\n}\n\nexport function useCreateReviewComment() {\n return useActionMutation<ReviewComment, CreateReviewCommentInput>(\n \"create-review-comment\",\n );\n}\n\nexport function useReplyReviewComment() {\n return useActionMutation<ReviewComment, ReplyReviewCommentInput>(\n \"reply-review-comment\",\n );\n}\n\nexport function useResolveReviewThread() {\n return useActionMutation<\n { threadId: string; resolved: true; updatedCount: number },\n ResolveReviewThreadInput\n >(\"resolve-review-thread\");\n}\n\nexport function useDeleteReviewComment() {\n return useActionMutation<\n { commentId: string; deleted: true; updatedCount: number },\n DeleteReviewCommentInput\n >(\"delete-review-comment\");\n}\n\nexport function useConsumeReviewFeedback() {\n return useActionMutation<\n { consumedCommentIds: string[]; updatedCount: number },\n ConsumeReviewFeedbackInput\n >(\"consume-review-feedback\");\n}\n\nexport function useSetReviewStatus() {\n return useActionMutation<ReviewStatusEntry, SetReviewStatusInput>(\n \"set-review-status\",\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  export { SettingsPanel, useAgentSettingsTabs, type SettingsPanelProps, } from "./SettingsPanel.js";
2
2
  export { SettingsTabsPage, type SettingsTabItem, type SettingsTabsPageProps, } from "./SettingsTabsPage.js";
3
- export { useBuilderStatus } from "./useBuilderStatus.js";
3
+ export { openBuilderConnectPopup, useBuilderConnectFlow, useBuilderStatus, withBuilderConnectTrackingParams, type BuilderConnectFlow, type BuilderConnectFlowOptions, type BuilderConnectStartOptions, type BuilderStatus, type OpenBuilderConnectPopupOptions, } from "./useBuilderStatus.js";
4
4
  export { SecretsSection, type SecretsSectionProps } from "./SecretsSection.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,gCAAgC,EAChC,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAClB,KAAK,8BAA8B,GACpC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { SettingsPanel, useAgentSettingsTabs, } from "./SettingsPanel.js";
2
2
  export { SettingsTabsPage, } from "./SettingsTabsPage.js";
3
- export { useBuilderStatus } from "./useBuilderStatus.js";
3
+ export { openBuilderConnectPopup, useBuilderConnectFlow, useBuilderStatus, withBuilderConnectTrackingParams, } from "./useBuilderStatus.js";
4
4
  export { SecretsSection } from "./SecretsSection.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC","sourcesContent":["export {\n SettingsPanel,\n useAgentSettingsTabs,\n type SettingsPanelProps,\n} from \"./SettingsPanel.js\";\nexport {\n SettingsTabsPage,\n type SettingsTabItem,\n type SettingsTabsPageProps,\n} from \"./SettingsTabsPage.js\";\nexport { useBuilderStatus } from \"./useBuilderStatus.js\";\nexport { SecretsSection, type SecretsSectionProps } from \"./SecretsSection.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,gCAAgC,GAMjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC","sourcesContent":["export {\n SettingsPanel,\n useAgentSettingsTabs,\n type SettingsPanelProps,\n} from \"./SettingsPanel.js\";\nexport {\n SettingsTabsPage,\n type SettingsTabItem,\n type SettingsTabsPageProps,\n} from \"./SettingsTabsPage.js\";\nexport {\n openBuilderConnectPopup,\n useBuilderConnectFlow,\n useBuilderStatus,\n withBuilderConnectTrackingParams,\n type BuilderConnectFlow,\n type BuilderConnectFlowOptions,\n type BuilderConnectStartOptions,\n type BuilderStatus,\n type OpenBuilderConnectPopupOptions,\n} from \"./useBuilderStatus.js\";\nexport { SecretsSection, type SecretsSectionProps } from \"./SecretsSection.js\";\n"]}
@@ -0,0 +1,9 @@
1
+ export interface BuilderConnectCardProps {
2
+ title?: string;
3
+ description?: string;
4
+ trackingSource?: string;
5
+ className?: string;
6
+ onConnected?: (orgName: string | null) => void;
7
+ }
8
+ export declare function BuilderConnectCard({ title, description, trackingSource, className, onConnected, }: BuilderConnectCardProps): import("react").JSX.Element;
9
+ //# sourceMappingURL=BuilderConnectCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuilderConnectCard.d.ts","sourceRoot":"","sources":["../../../src/client/setup-connections/BuilderConnectCard.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,kBAAkB,CAAC,EACjC,KAAyB,EACzB,WAAqG,EACrG,cAAyC,EACzC,SAAS,EACT,WAAW,GACZ,EAAE,uBAAuB,+BA0EzB"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IconCheck, IconLoader2, IconPlugConnected } from "@tabler/icons-react";
3
+ import { useBuilderConnectFlow } from "../settings/useBuilderStatus.js";
4
+ import { cn } from "../utils.js";
5
+ export function BuilderConnectCard({ title = "Builder connect", description = "Connect Builder for managed model access, browser automation, and workspace identity.", trackingSource = "setup_connections_page", className, onConnected, }) {
6
+ const flow = useBuilderConnectFlow({
7
+ trackingSource,
8
+ onConnected: ({ orgName }) => onConnected?.(orgName),
9
+ });
10
+ const connectedLabel = flow.orgName
11
+ ? `Connected to ${flow.orgName}`
12
+ : "Connected";
13
+ const statusLabel = !flow.hasFetchedStatus
14
+ ? "Checking"
15
+ : flow.configured
16
+ ? connectedLabel
17
+ : flow.builderEnabled
18
+ ? "Ready to connect"
19
+ : "Project not configured";
20
+ return (_jsx("section", { className: cn("rounded-lg border border-border bg-background p-4 shadow-sm", className), children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("span", { className: cn("mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-md border", flow.configured
21
+ ? "border-emerald-500/30 bg-emerald-500/10 text-emerald-600"
22
+ : "border-border bg-muted text-muted-foreground"), children: flow.configured ? (_jsx(IconCheck, { className: "size-4" })) : (_jsx(IconPlugConnected, { className: "size-4" })) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("h2", { className: "text-sm font-semibold text-foreground", children: title }), _jsx("span", { className: "rounded-md border border-border bg-muted px-1.5 py-0.5 text-[11px] font-medium text-muted-foreground", children: statusLabel })] }), _jsx("p", { className: "mt-1 text-sm leading-5 text-muted-foreground", children: description }), flow.error ? (_jsx("p", { className: "mt-2 text-xs text-destructive", children: flow.error })) : null, !flow.configured ? (_jsxs("button", { type: "button", onClick: () => flow.start(), disabled: flow.connecting ||
23
+ (!flow.builderEnabled && flow.hasFetchedStatus), className: "mt-3 inline-flex h-8 items-center gap-2 rounded-md border border-border bg-foreground px-3 text-xs font-medium text-background transition-colors hover:bg-foreground/90 disabled:cursor-not-allowed disabled:opacity-60", children: [flow.connecting ? (_jsx(IconLoader2, { className: "size-3.5 animate-spin" })) : (_jsx(IconPlugConnected, { className: "size-3.5" })), "Connect Builder"] })) : null] })] }) }));
24
+ }
25
+ //# sourceMappingURL=BuilderConnectCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuilderConnectCard.js","sourceRoot":"","sources":["../../../src/client/setup-connections/BuilderConnectCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAUjC,MAAM,UAAU,kBAAkB,CAAC,EACjC,KAAK,GAAG,iBAAiB,EACzB,WAAW,GAAG,uFAAuF,EACrG,cAAc,GAAG,wBAAwB,EACzC,SAAS,EACT,WAAW,GACa;IACxB,MAAM,IAAI,GAAG,qBAAqB,CAAC;QACjC,cAAc;QACd,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;KACrD,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO;QACjC,CAAC,CAAC,gBAAgB,IAAI,CAAC,OAAO,EAAE;QAChC,CAAC,CAAC,WAAW,CAAC;IAChB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,gBAAgB;QACxC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,IAAI,CAAC,UAAU;YACf,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,IAAI,CAAC,cAAc;gBACnB,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,wBAAwB,CAAC;IAEjC,OAAO,CACL,kBACE,SAAS,EAAE,EAAE,CACX,6DAA6D,EAC7D,SAAS,CACV,YAED,eAAK,SAAS,EAAC,wBAAwB,aACrC,eACE,SAAS,EAAE,EAAE,CACX,2EAA2E,EAC3E,IAAI,CAAC,UAAU;wBACb,CAAC,CAAC,0DAA0D;wBAC5D,CAAC,CAAC,8CAA8C,CACnD,YAEA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACjB,KAAC,SAAS,IAAC,SAAS,EAAC,QAAQ,GAAG,CACjC,CAAC,CAAC,CAAC,CACF,KAAC,iBAAiB,IAAC,SAAS,EAAC,QAAQ,GAAG,CACzC,GACI,EACP,eAAK,SAAS,EAAC,gBAAgB,aAC7B,eAAK,SAAS,EAAC,mCAAmC,aAChD,aAAI,SAAS,EAAC,uCAAuC,YAAE,KAAK,GAAM,EAClE,eAAM,SAAS,EAAC,sGAAsG,YACnH,WAAW,GACP,IACH,EACN,YAAG,SAAS,EAAC,8CAA8C,YACxD,WAAW,GACV,EACH,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACZ,YAAG,SAAS,EAAC,+BAA+B,YAAE,IAAI,CAAC,KAAK,GAAK,CAC9D,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAClB,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAC3B,QAAQ,EACN,IAAI,CAAC,UAAU;gCACf,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAEjD,SAAS,EAAC,yNAAyN,aAElO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CACjB,KAAC,WAAW,IAAC,SAAS,EAAC,uBAAuB,GAAG,CAClD,CAAC,CAAC,CAAC,CACF,KAAC,iBAAiB,IAAC,SAAS,EAAC,UAAU,GAAG,CAC3C,uBAEM,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,IACF,GACE,CACX,CAAC;AACJ,CAAC","sourcesContent":["import { IconCheck, IconLoader2, IconPlugConnected } from \"@tabler/icons-react\";\n\nimport { useBuilderConnectFlow } from \"../settings/useBuilderStatus.js\";\nimport { cn } from \"../utils.js\";\n\nexport interface BuilderConnectCardProps {\n title?: string;\n description?: string;\n trackingSource?: string;\n className?: string;\n onConnected?: (orgName: string | null) => void;\n}\n\nexport function BuilderConnectCard({\n title = \"Builder connect\",\n description = \"Connect Builder for managed model access, browser automation, and workspace identity.\",\n trackingSource = \"setup_connections_page\",\n className,\n onConnected,\n}: BuilderConnectCardProps) {\n const flow = useBuilderConnectFlow({\n trackingSource,\n onConnected: ({ orgName }) => onConnected?.(orgName),\n });\n\n const connectedLabel = flow.orgName\n ? `Connected to ${flow.orgName}`\n : \"Connected\";\n const statusLabel = !flow.hasFetchedStatus\n ? \"Checking\"\n : flow.configured\n ? connectedLabel\n : flow.builderEnabled\n ? \"Ready to connect\"\n : \"Project not configured\";\n\n return (\n <section\n className={cn(\n \"rounded-lg border border-border bg-background p-4 shadow-sm\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3\">\n <span\n className={cn(\n \"mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-md border\",\n flow.configured\n ? \"border-emerald-500/30 bg-emerald-500/10 text-emerald-600\"\n : \"border-border bg-muted text-muted-foreground\",\n )}\n >\n {flow.configured ? (\n <IconCheck className=\"size-4\" />\n ) : (\n <IconPlugConnected className=\"size-4\" />\n )}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <h2 className=\"text-sm font-semibold text-foreground\">{title}</h2>\n <span className=\"rounded-md border border-border bg-muted px-1.5 py-0.5 text-[11px] font-medium text-muted-foreground\">\n {statusLabel}\n </span>\n </div>\n <p className=\"mt-1 text-sm leading-5 text-muted-foreground\">\n {description}\n </p>\n {flow.error ? (\n <p className=\"mt-2 text-xs text-destructive\">{flow.error}</p>\n ) : null}\n {!flow.configured ? (\n <button\n type=\"button\"\n onClick={() => flow.start()}\n disabled={\n flow.connecting ||\n (!flow.builderEnabled && flow.hasFetchedStatus)\n }\n className=\"mt-3 inline-flex h-8 items-center gap-2 rounded-md border border-border bg-foreground px-3 text-xs font-medium text-background transition-colors hover:bg-foreground/90 disabled:cursor-not-allowed disabled:opacity-60\"\n >\n {flow.connecting ? (\n <IconLoader2 className=\"size-3.5 animate-spin\" />\n ) : (\n <IconPlugConnected className=\"size-3.5\" />\n )}\n Connect Builder\n </button>\n ) : null}\n </div>\n </div>\n </section>\n );\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { WorkspaceConnectionProviderReadinessStatus } from "../../workspace-connections/index.js";
2
+ export interface ProviderReadinessBadgeProps {
3
+ status: WorkspaceConnectionProviderReadinessStatus;
4
+ label?: string;
5
+ className?: string;
6
+ }
7
+ export declare function ProviderReadinessBadge({ status, label, className, }: ProviderReadinessBadgeProps): import("react").JSX.Element;
8
+ //# sourceMappingURL=ProviderReadinessBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderReadinessBadge.d.ts","sourceRoot":"","sources":["../../../src/client/setup-connections/ProviderReadinessBadge.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,sCAAsC,CAAC;AA0CvG,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,0CAA0C,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,MAAM,EACN,KAAK,EACL,SAAS,GACV,EAAE,2BAA2B,+BAa7B"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IconAlertCircle, IconCheck, IconClock, IconKey, } from "@tabler/icons-react";
3
+ import { cn } from "../utils.js";
4
+ const STATUS_LABELS = {
5
+ ready: "Ready",
6
+ checking: "Checking",
7
+ needs_credentials: "Needs credentials",
8
+ needs_attention: "Needs attention",
9
+ disabled: "Disabled",
10
+ not_configured: "Not configured",
11
+ };
12
+ const STATUS_STYLES = {
13
+ ready: "border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300",
14
+ checking: "border-blue-500/30 bg-blue-500/10 text-blue-700 dark:text-blue-300",
15
+ needs_credentials: "border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300",
16
+ needs_attention: "border-red-500/30 bg-red-500/10 text-red-700 dark:text-red-300",
17
+ disabled: "border-border bg-muted text-muted-foreground",
18
+ not_configured: "border-border bg-muted text-muted-foreground",
19
+ };
20
+ function StatusIcon({ status, }) {
21
+ if (status === "ready")
22
+ return _jsx(IconCheck, { className: "size-3.5" });
23
+ if (status === "checking")
24
+ return _jsx(IconClock, { className: "size-3.5" });
25
+ if (status === "needs_credentials")
26
+ return _jsx(IconKey, { className: "size-3.5" });
27
+ return _jsx(IconAlertCircle, { className: "size-3.5" });
28
+ }
29
+ export function ProviderReadinessBadge({ status, label, className, }) {
30
+ return (_jsxs("span", { className: cn("inline-flex min-h-6 items-center gap-1.5 rounded-md border px-2 text-xs font-medium", STATUS_STYLES[status], className), children: [_jsx(StatusIcon, { status: status }), label ?? STATUS_LABELS[status]] }));
31
+ }
32
+ //# sourceMappingURL=ProviderReadinessBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderReadinessBadge.js","sourceRoot":"","sources":["../../../src/client/setup-connections/ProviderReadinessBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,eAAe,EACf,SAAS,EACT,SAAS,EACT,OAAO,GACR,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,MAAM,aAAa,GAGf;IACF,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,QAAQ,EAAE,UAAU;IACpB,cAAc,EAAE,gBAAgB;CACjC,CAAC;AAEF,MAAM,aAAa,GAGf;IACF,KAAK,EACH,gFAAgF;IAClF,QAAQ,EACN,oEAAoE;IACtE,iBAAiB,EACf,wEAAwE;IAC1E,eAAe,EACb,gEAAgE;IAClE,QAAQ,EAAE,8CAA8C;IACxD,cAAc,EAAE,8CAA8C;CAC/D,CAAC;AAEF,SAAS,UAAU,CAAC,EAClB,MAAM,GAGP;IACC,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,KAAC,SAAS,IAAC,SAAS,EAAC,UAAU,GAAG,CAAC;IAClE,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,KAAC,SAAS,IAAC,SAAS,EAAC,UAAU,GAAG,CAAC;IACrE,IAAI,MAAM,KAAK,mBAAmB;QAAE,OAAO,KAAC,OAAO,IAAC,SAAS,EAAC,UAAU,GAAG,CAAC;IAC5E,OAAO,KAAC,eAAe,IAAC,SAAS,EAAC,UAAU,GAAG,CAAC;AAClD,CAAC;AAQD,MAAM,UAAU,sBAAsB,CAAC,EACrC,MAAM,EACN,KAAK,EACL,SAAS,GACmB;IAC5B,OAAO,CACL,gBACE,SAAS,EAAE,EAAE,CACX,qFAAqF,EACrF,aAAa,CAAC,MAAM,CAAC,EACrB,SAAS,CACV,aAED,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,GAAI,EAC7B,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,IAC1B,CACR,CAAC;AACJ,CAAC","sourcesContent":["import {\n IconAlertCircle,\n IconCheck,\n IconClock,\n IconKey,\n} from \"@tabler/icons-react\";\n\nimport type { WorkspaceConnectionProviderReadinessStatus } from \"../../workspace-connections/index.js\";\nimport { cn } from \"../utils.js\";\n\nconst STATUS_LABELS: Record<\n WorkspaceConnectionProviderReadinessStatus,\n string\n> = {\n ready: \"Ready\",\n checking: \"Checking\",\n needs_credentials: \"Needs credentials\",\n needs_attention: \"Needs attention\",\n disabled: \"Disabled\",\n not_configured: \"Not configured\",\n};\n\nconst STATUS_STYLES: Record<\n WorkspaceConnectionProviderReadinessStatus,\n string\n> = {\n ready:\n \"border-emerald-500/30 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300\",\n checking:\n \"border-blue-500/30 bg-blue-500/10 text-blue-700 dark:text-blue-300\",\n needs_credentials:\n \"border-amber-500/30 bg-amber-500/10 text-amber-700 dark:text-amber-300\",\n needs_attention:\n \"border-red-500/30 bg-red-500/10 text-red-700 dark:text-red-300\",\n disabled: \"border-border bg-muted text-muted-foreground\",\n not_configured: \"border-border bg-muted text-muted-foreground\",\n};\n\nfunction StatusIcon({\n status,\n}: {\n status: WorkspaceConnectionProviderReadinessStatus;\n}) {\n if (status === \"ready\") return <IconCheck className=\"size-3.5\" />;\n if (status === \"checking\") return <IconClock className=\"size-3.5\" />;\n if (status === \"needs_credentials\") return <IconKey className=\"size-3.5\" />;\n return <IconAlertCircle className=\"size-3.5\" />;\n}\n\nexport interface ProviderReadinessBadgeProps {\n status: WorkspaceConnectionProviderReadinessStatus;\n label?: string;\n className?: string;\n}\n\nexport function ProviderReadinessBadge({\n status,\n label,\n className,\n}: ProviderReadinessBadgeProps) {\n return (\n <span\n className={cn(\n \"inline-flex min-h-6 items-center gap-1.5 rounded-md border px-2 text-xs font-medium\",\n STATUS_STYLES[status],\n className,\n )}\n >\n <StatusIcon status={status} />\n {label ?? STATUS_LABELS[status]}\n </span>\n );\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from "react";
2
+ export interface SetupConnectionsPageProps {
3
+ title?: string;
4
+ description?: string;
5
+ onboardingTitle?: string;
6
+ focusSecretKey?: string;
7
+ providerReadiness?: ReactNode;
8
+ workspaceConnections?: ReactNode;
9
+ children?: ReactNode;
10
+ showOnboarding?: boolean;
11
+ showBuilderConnect?: boolean;
12
+ showSecrets?: boolean;
13
+ showIntegrations?: boolean;
14
+ className?: string;
15
+ }
16
+ export declare function SetupConnectionsPage({ title, description, onboardingTitle, focusSecretKey, providerReadiness, workspaceConnections, children, showOnboarding, showBuilderConnect, showSecrets, showIntegrations, className, }: SetupConnectionsPageProps): import("react").JSX.Element;
17
+ //# sourceMappingURL=SetupConnectionsPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetupConnectionsPage.d.ts","sourceRoot":"","sources":["../../../src/client/setup-connections/SetupConnectionsPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,oBAAoB,CAAC,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAA6B,EAC7B,WAAuH,EACvH,eAAmC,EACnC,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,cAAqB,EACrB,kBAAyB,EACzB,WAAkB,EAClB,gBAAwB,EACxB,SAAS,GACV,EAAE,yBAAyB,+BAyD3B"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IntegrationsPanel } from "../integrations/IntegrationsPanel.js";
3
+ import { OnboardingPanel } from "../onboarding/OnboardingPanel.js";
4
+ import { SecretsSection } from "../settings/SecretsSection.js";
5
+ import { cn } from "../utils.js";
6
+ import { BuilderConnectCard } from "./BuilderConnectCard.js";
7
+ export function SetupConnectionsPage({ title = "Setup & connections", description = "Manage setup status, Builder connect, app secrets, and workspace connections from one standard surface.", onboardingTitle = "Setup checklist", focusSecretKey, providerReadiness, workspaceConnections, children, showOnboarding = true, showBuilderConnect = true, showSecrets = true, showIntegrations = false, className, }) {
8
+ return (_jsx("div", { className: cn("min-h-full bg-background p-4 sm:p-6", className), children: _jsxs("div", { className: "mx-auto flex w-full max-w-6xl flex-col gap-5", children: [_jsxs("header", { className: "space-y-1", children: [_jsx("h1", { className: "text-2xl font-semibold tracking-normal text-foreground", children: title }), _jsx("p", { className: "max-w-3xl text-sm leading-6 text-muted-foreground", children: description })] }), _jsxs("div", { className: "grid gap-4 lg:grid-cols-[minmax(0,1fr)_360px]", children: [_jsxs("main", { className: "flex min-w-0 flex-col gap-4", children: [showOnboarding ? (_jsx(OnboardingPanel, { title: onboardingTitle })) : null, workspaceConnections ? (_jsx("section", { className: "rounded-lg border border-border bg-background p-4 shadow-sm", children: workspaceConnections })) : null, providerReadiness ? (_jsx("section", { className: "rounded-lg border border-border bg-background p-4 shadow-sm", children: providerReadiness })) : null, children] }), _jsxs("aside", { className: "flex min-w-0 flex-col gap-4", children: [showBuilderConnect ? _jsx(BuilderConnectCard, {}) : null, showSecrets ? (_jsxs("section", { className: "rounded-lg border border-border bg-background p-4 shadow-sm", children: [_jsxs("div", { className: "mb-3", children: [_jsx("h2", { className: "text-sm font-semibold text-foreground", children: "Secrets" }), _jsx("p", { className: "mt-1 text-xs leading-5 text-muted-foreground", children: "Registered keys and OAuth credentials are stored in the scoped secrets store." })] }), _jsx(SecretsSection, { focusKey: focusSecretKey })] })) : null, showIntegrations ? (_jsx("section", { className: "rounded-lg border border-border bg-background p-4 shadow-sm", children: _jsx(IntegrationsPanel, {}) })) : null] })] })] }) }));
9
+ }
10
+ //# sourceMappingURL=SetupConnectionsPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetupConnectionsPage.js","sourceRoot":"","sources":["../../../src/client/setup-connections/SetupConnectionsPage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAiB7D,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,GAAG,qBAAqB,EAC7B,WAAW,GAAG,yGAAyG,EACvH,eAAe,GAAG,iBAAiB,EACnC,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,cAAc,GAAG,IAAI,EACrB,kBAAkB,GAAG,IAAI,EACzB,WAAW,GAAG,IAAI,EAClB,gBAAgB,GAAG,KAAK,EACxB,SAAS,GACiB;IAC1B,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,SAAS,CAAC,YAClE,eAAK,SAAS,EAAC,8CAA8C,aAC3D,kBAAQ,SAAS,EAAC,WAAW,aAC3B,aAAI,SAAS,EAAC,wDAAwD,YACnE,KAAK,GACH,EACL,YAAG,SAAS,EAAC,mDAAmD,YAC7D,WAAW,GACV,IACG,EAET,eAAK,SAAS,EAAC,+CAA+C,aAC5D,gBAAM,SAAS,EAAC,6BAA6B,aAC1C,cAAc,CAAC,CAAC,CAAC,CAChB,KAAC,eAAe,IAAC,KAAK,EAAE,eAAe,GAAI,CAC5C,CAAC,CAAC,CAAC,IAAI,EACP,oBAAoB,CAAC,CAAC,CAAC,CACtB,kBAAS,SAAS,EAAC,6DAA6D,YAC7E,oBAAoB,GACb,CACX,CAAC,CAAC,CAAC,IAAI,EACP,iBAAiB,CAAC,CAAC,CAAC,CACnB,kBAAS,SAAS,EAAC,6DAA6D,YAC7E,iBAAiB,GACV,CACX,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,IACJ,EAEP,iBAAO,SAAS,EAAC,6BAA6B,aAC3C,kBAAkB,CAAC,CAAC,CAAC,KAAC,kBAAkB,KAAG,CAAC,CAAC,CAAC,IAAI,EAClD,WAAW,CAAC,CAAC,CAAC,CACb,mBAAS,SAAS,EAAC,6DAA6D,aAC9E,eAAK,SAAS,EAAC,MAAM,aACnB,aAAI,SAAS,EAAC,uCAAuC,wBAEhD,EACL,YAAG,SAAS,EAAC,8CAA8C,8FAGvD,IACA,EACN,KAAC,cAAc,IAAC,QAAQ,EAAE,cAAc,GAAI,IACpC,CACX,CAAC,CAAC,CAAC,IAAI,EACP,gBAAgB,CAAC,CAAC,CAAC,CAClB,kBAAS,SAAS,EAAC,6DAA6D,YAC9E,KAAC,iBAAiB,KAAG,GACb,CACX,CAAC,CAAC,CAAC,IAAI,IACF,IACJ,IACF,GACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["import type { ReactNode } from \"react\";\n\nimport { IntegrationsPanel } from \"../integrations/IntegrationsPanel.js\";\nimport { OnboardingPanel } from \"../onboarding/OnboardingPanel.js\";\nimport { SecretsSection } from \"../settings/SecretsSection.js\";\nimport { cn } from \"../utils.js\";\nimport { BuilderConnectCard } from \"./BuilderConnectCard.js\";\n\nexport interface SetupConnectionsPageProps {\n title?: string;\n description?: string;\n onboardingTitle?: string;\n focusSecretKey?: string;\n providerReadiness?: ReactNode;\n workspaceConnections?: ReactNode;\n children?: ReactNode;\n showOnboarding?: boolean;\n showBuilderConnect?: boolean;\n showSecrets?: boolean;\n showIntegrations?: boolean;\n className?: string;\n}\n\nexport function SetupConnectionsPage({\n title = \"Setup & connections\",\n description = \"Manage setup status, Builder connect, app secrets, and workspace connections from one standard surface.\",\n onboardingTitle = \"Setup checklist\",\n focusSecretKey,\n providerReadiness,\n workspaceConnections,\n children,\n showOnboarding = true,\n showBuilderConnect = true,\n showSecrets = true,\n showIntegrations = false,\n className,\n}: SetupConnectionsPageProps) {\n return (\n <div className={cn(\"min-h-full bg-background p-4 sm:p-6\", className)}>\n <div className=\"mx-auto flex w-full max-w-6xl flex-col gap-5\">\n <header className=\"space-y-1\">\n <h1 className=\"text-2xl font-semibold tracking-normal text-foreground\">\n {title}\n </h1>\n <p className=\"max-w-3xl text-sm leading-6 text-muted-foreground\">\n {description}\n </p>\n </header>\n\n <div className=\"grid gap-4 lg:grid-cols-[minmax(0,1fr)_360px]\">\n <main className=\"flex min-w-0 flex-col gap-4\">\n {showOnboarding ? (\n <OnboardingPanel title={onboardingTitle} />\n ) : null}\n {workspaceConnections ? (\n <section className=\"rounded-lg border border-border bg-background p-4 shadow-sm\">\n {workspaceConnections}\n </section>\n ) : null}\n {providerReadiness ? (\n <section className=\"rounded-lg border border-border bg-background p-4 shadow-sm\">\n {providerReadiness}\n </section>\n ) : null}\n {children}\n </main>\n\n <aside className=\"flex min-w-0 flex-col gap-4\">\n {showBuilderConnect ? <BuilderConnectCard /> : null}\n {showSecrets ? (\n <section className=\"rounded-lg border border-border bg-background p-4 shadow-sm\">\n <div className=\"mb-3\">\n <h2 className=\"text-sm font-semibold text-foreground\">\n Secrets\n </h2>\n <p className=\"mt-1 text-xs leading-5 text-muted-foreground\">\n Registered keys and OAuth credentials are stored in the\n scoped secrets store.\n </p>\n </div>\n <SecretsSection focusKey={focusSecretKey} />\n </section>\n ) : null}\n {showIntegrations ? (\n <section className=\"rounded-lg border border-border bg-background p-4 shadow-sm\">\n <IntegrationsPanel />\n </section>\n ) : null}\n </aside>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export { BuilderConnectCard, type BuilderConnectCardProps, } from "./BuilderConnectCard.js";
2
+ export { ProviderReadinessBadge, type ProviderReadinessBadgeProps, } from "./ProviderReadinessBadge.js";
3
+ export { SetupConnectionsPage, type SetupConnectionsPageProps, } from "./SetupConnectionsPage.js";
4
+ export { OnboardingBanner, OnboardingPanel, SetupButton, useOnboarding, useOnboardingPreviewMode, type OnboardingFormField, type OnboardingMethod, type OnboardingMethodBadge, type OnboardingStep, type OnboardingStepStatus, type UseOnboardingResult, } from "../onboarding/index.js";
5
+ export { SecretsSection, SettingsPanel, SettingsTabsPage, openBuilderConnectPopup, useBuilderConnectFlow, useBuilderStatus, type BuilderConnectFlow, type BuilderConnectFlowOptions, type BuilderStatus, type OpenBuilderConnectPopupOptions, type SecretsSectionProps, type SettingsPanelProps, type SettingsTabItem, type SettingsTabsPageProps, } from "../settings/index.js";
6
+ export { IntegrationsPanel, useIntegrationStatus, type IntegrationStatus, } from "../integrations/index.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/setup-connections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,GACjC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,aAAa,EACb,wBAAwB,EACxB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,8BAA8B,EACnC,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { BuilderConnectCard, } from "./BuilderConnectCard.js";
2
+ export { ProviderReadinessBadge, } from "./ProviderReadinessBadge.js";
3
+ export { SetupConnectionsPage, } from "./SetupConnectionsPage.js";
4
+ export { OnboardingBanner, OnboardingPanel, SetupButton, useOnboarding, useOnboardingPreviewMode, } from "../onboarding/index.js";
5
+ export { SecretsSection, SettingsPanel, SettingsTabsPage, openBuilderConnectPopup, useBuilderConnectFlow, useBuilderStatus, } from "../settings/index.js";
6
+ export { IntegrationsPanel, useIntegrationStatus, } from "../integrations/index.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/setup-connections/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,sBAAsB,GAEvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,aAAa,EACb,wBAAwB,GAOzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GASjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,0BAA0B,CAAC","sourcesContent":["export {\n BuilderConnectCard,\n type BuilderConnectCardProps,\n} from \"./BuilderConnectCard.js\";\nexport {\n ProviderReadinessBadge,\n type ProviderReadinessBadgeProps,\n} from \"./ProviderReadinessBadge.js\";\nexport {\n SetupConnectionsPage,\n type SetupConnectionsPageProps,\n} from \"./SetupConnectionsPage.js\";\nexport {\n OnboardingBanner,\n OnboardingPanel,\n SetupButton,\n useOnboarding,\n useOnboardingPreviewMode,\n type OnboardingFormField,\n type OnboardingMethod,\n type OnboardingMethodBadge,\n type OnboardingStep,\n type OnboardingStepStatus,\n type UseOnboardingResult,\n} from \"../onboarding/index.js\";\nexport {\n SecretsSection,\n SettingsPanel,\n SettingsTabsPage,\n openBuilderConnectPopup,\n useBuilderConnectFlow,\n useBuilderStatus,\n type BuilderConnectFlow,\n type BuilderConnectFlowOptions,\n type BuilderStatus,\n type OpenBuilderConnectPopupOptions,\n type SecretsSectionProps,\n type SettingsPanelProps,\n type SettingsTabItem,\n type SettingsTabsPageProps,\n} from \"../settings/index.js\";\nexport {\n IntegrationsPanel,\n useIntegrationStatus,\n type IntegrationStatus,\n} from \"../integrations/index.js\";\n"]}