@assistant-ui/react 0.15.31 → 0.15.33

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 (228) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -2
  2. package/dist/adapters/GeminiLiveVoiceAdapter.d.ts +26 -0
  3. package/dist/adapters/GeminiLiveVoiceAdapter.d.ts.map +1 -0
  4. package/dist/adapters/GeminiLiveVoiceAdapter.js +346 -0
  5. package/dist/adapters/GeminiLiveVoiceAdapter.js.map +1 -0
  6. package/dist/adapters/OpenAIRealtimeVoiceAdapter.js +1 -2
  7. package/dist/adapters/gemini-live/audio.d.ts +27 -0
  8. package/dist/adapters/gemini-live/audio.d.ts.map +1 -0
  9. package/dist/adapters/gemini-live/audio.js +291 -0
  10. package/dist/adapters/gemini-live/audio.js.map +1 -0
  11. package/dist/assistant-transport.js +1 -2
  12. package/dist/cloud-renderer/CloudRendererHost.js +1 -2
  13. package/dist/context/ReadonlyStore.js +1 -2
  14. package/dist/context/providers/MessageProvider.js +1 -2
  15. package/dist/context/providers/ThreadViewportProvider.js +1 -2
  16. package/dist/context/react/ThreadViewportContext.js +1 -2
  17. package/dist/context/react/utils/createContextHook.js +1 -2
  18. package/dist/context/react/utils/createContextStoreHook.js +1 -2
  19. package/dist/context/stores/ThreadViewport.js +2 -3
  20. package/dist/devtools/DevToolsHooks.js +1 -2
  21. package/dist/hooks/useMessageQuote.js +1 -2
  22. package/dist/hooks/useMessageTiming.js +1 -2
  23. package/dist/hooks/useToolCallElapsed.js +1 -2
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -1
  27. package/dist/internal.js +2 -3
  28. package/dist/legacy-runtime/AssistantRuntimeProvider.js +1 -2
  29. package/dist/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  30. package/dist/mcp-apps/McpAppRenderer.js +4 -4
  31. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  32. package/dist/mcp-apps/McpAppsRemoteHost.js +1 -2
  33. package/dist/mcp-apps/app-frame.js +2 -3
  34. package/dist/mcp-apps/bridge.js +1 -2
  35. package/dist/mcp-apps/csp.js +1 -2
  36. package/dist/mcp-apps/types.js +1 -2
  37. package/dist/mcp-apps/utils.js +1 -2
  38. package/dist/model-context/frame/useAssistantFrameHost.js +1 -2
  39. package/dist/model-context/makeAssistantVisible.js +1 -2
  40. package/dist/primitives/actionBar/ActionBarCopy.js +1 -2
  41. package/dist/primitives/actionBar/ActionBarEdit.js +1 -2
  42. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +1 -2
  43. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +1 -2
  44. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +1 -2
  45. package/dist/primitives/actionBar/ActionBarInteractionContext.js +1 -2
  46. package/dist/primitives/actionBar/ActionBarReload.js +1 -2
  47. package/dist/primitives/actionBar/ActionBarRoot.js +1 -2
  48. package/dist/primitives/actionBar/ActionBarSpeak.js +1 -2
  49. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +1 -2
  50. package/dist/primitives/actionBar/useActionBarFloatStatus.js +1 -2
  51. package/dist/primitives/actionBar.js +1 -2
  52. package/dist/primitives/actionBarMore/ActionBarMoreContent.js +1 -2
  53. package/dist/primitives/actionBarMore/ActionBarMoreItem.js +1 -2
  54. package/dist/primitives/actionBarMore/ActionBarMoreRoot.js +1 -2
  55. package/dist/primitives/actionBarMore/ActionBarMoreSeparator.js +1 -2
  56. package/dist/primitives/actionBarMore/ActionBarMoreTrigger.js +1 -2
  57. package/dist/primitives/actionBarMore/scope.js +1 -2
  58. package/dist/primitives/actionBarMore.js +1 -2
  59. package/dist/primitives/assistantModal/AssistantModalAnchor.js +1 -2
  60. package/dist/primitives/assistantModal/AssistantModalContent.js +1 -2
  61. package/dist/primitives/assistantModal/AssistantModalRoot.js +1 -2
  62. package/dist/primitives/assistantModal/AssistantModalTrigger.js +1 -2
  63. package/dist/primitives/assistantModal/popoverRenderPrimitives.js +1 -2
  64. package/dist/primitives/assistantModal/scope.js +1 -2
  65. package/dist/primitives/assistantModal.js +1 -2
  66. package/dist/primitives/attachment/AttachmentName.js +1 -2
  67. package/dist/primitives/attachment/AttachmentRemove.js +1 -2
  68. package/dist/primitives/attachment/AttachmentRoot.js +1 -2
  69. package/dist/primitives/attachment/AttachmentThumb.js +1 -2
  70. package/dist/primitives/attachment.js +1 -2
  71. package/dist/primitives/branchPicker/BranchPickerCount.js +1 -2
  72. package/dist/primitives/branchPicker/BranchPickerNext.js +1 -2
  73. package/dist/primitives/branchPicker/BranchPickerNumber.js +1 -2
  74. package/dist/primitives/branchPicker/BranchPickerPrevious.js +1 -2
  75. package/dist/primitives/branchPicker/BranchPickerRoot.js +1 -2
  76. package/dist/primitives/branchPicker.js +1 -2
  77. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +5 -4
  78. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  79. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +57 -20
  80. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  81. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.js +1 -2
  82. package/dist/primitives/chainOfThought.js +1 -2
  83. package/dist/primitives/composer/ComposerAddAttachment.js +1 -2
  84. package/dist/primitives/composer/ComposerAttachmentDropzone.js +1 -2
  85. package/dist/primitives/composer/ComposerCancel.js +1 -2
  86. package/dist/primitives/composer/ComposerCompactContext.js +1 -2
  87. package/dist/primitives/composer/ComposerDictate.js +1 -2
  88. package/dist/primitives/composer/ComposerDictationTranscript.js +1 -2
  89. package/dist/primitives/composer/ComposerInput.js +1 -2
  90. package/dist/primitives/composer/ComposerInputPluginContext.js +1 -2
  91. package/dist/primitives/composer/ComposerQuote.js +1 -2
  92. package/dist/primitives/composer/ComposerResume.js +1 -2
  93. package/dist/primitives/composer/ComposerRoot.js +1 -2
  94. package/dist/primitives/composer/ComposerSend.js +1 -2
  95. package/dist/primitives/composer/ComposerStopDictation.js +1 -2
  96. package/dist/primitives/composer/composerInputSelector.js +1 -2
  97. package/dist/primitives/composer/trigger/TriggerPopover.js +1 -2
  98. package/dist/primitives/composer/trigger/TriggerPopoverAction.js +1 -2
  99. package/dist/primitives/composer/trigger/TriggerPopoverBack.js +1 -2
  100. package/dist/primitives/composer/trigger/TriggerPopoverCategories.js +1 -2
  101. package/dist/primitives/composer/trigger/TriggerPopoverDirective.js +1 -2
  102. package/dist/primitives/composer/trigger/TriggerPopoverItems.js +1 -2
  103. package/dist/primitives/composer/trigger/TriggerPopoverResource.js +1 -2
  104. package/dist/primitives/composer/trigger/TriggerPopoverRootContext.js +1 -2
  105. package/dist/primitives/composer/trigger/detectTrigger.js +1 -2
  106. package/dist/primitives/composer/trigger/index.js +1 -2
  107. package/dist/primitives/composer/trigger/matchesTriggerItemQuery.js +1 -2
  108. package/dist/primitives/composer/trigger/triggerDetectionResource.js +1 -2
  109. package/dist/primitives/composer/trigger/triggerKeyboardResource.js +1 -2
  110. package/dist/primitives/composer/trigger/triggerNavigationResource.js +1 -2
  111. package/dist/primitives/composer/trigger/triggerSelectionResource.js +1 -2
  112. package/dist/primitives/composer/useComposerCancelWithFocus.js +1 -2
  113. package/dist/primitives/composer/useComposerInputState.js +1 -2
  114. package/dist/primitives/composer.js +1 -2
  115. package/dist/primitives/dropdownMenuRenderPrimitives.js +1 -2
  116. package/dist/primitives/error/ErrorMessage.js +1 -2
  117. package/dist/primitives/error/ErrorRoot.js +1 -2
  118. package/dist/primitives/error.js +1 -2
  119. package/dist/primitives/message/MessageError.js +1 -2
  120. package/dist/primitives/message/MessageIf.js +1 -2
  121. package/dist/primitives/message/MessageParts.js +1 -2
  122. package/dist/primitives/message/MessagePartsGrouped.js +2 -3
  123. package/dist/primitives/message/MessageRoot.js +1 -2
  124. package/dist/primitives/message.js +1 -2
  125. package/dist/primitives/messagePart/MessagePartImage.js +1 -2
  126. package/dist/primitives/messagePart/MessagePartText.js +1 -2
  127. package/dist/primitives/messagePart/useMessagePartData.js +1 -2
  128. package/dist/primitives/messagePart/useMessagePartFile.js +1 -2
  129. package/dist/primitives/messagePart/useMessagePartImage.js +1 -2
  130. package/dist/primitives/messagePart/useMessagePartReasoning.js +1 -2
  131. package/dist/primitives/messagePart/useMessagePartSource.js +1 -2
  132. package/dist/primitives/messagePart/useMessagePartText.js +1 -2
  133. package/dist/primitives/messagePart.js +1 -2
  134. package/dist/primitives/queueItem/QueueItemRemove.js +1 -2
  135. package/dist/primitives/queueItem/QueueItemSteer.js +1 -2
  136. package/dist/primitives/queueItem/QueueItemText.js +1 -2
  137. package/dist/primitives/queueItem.js +1 -2
  138. package/dist/primitives/reasoning/useScrollLock.d.ts.map +1 -1
  139. package/dist/primitives/reasoning/useScrollLock.js +41 -25
  140. package/dist/primitives/reasoning/useScrollLock.js.map +1 -1
  141. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +1 -2
  142. package/dist/primitives/selectionToolbar/SelectionToolbarRoot.js +1 -2
  143. package/dist/primitives/selectionToolbar.js +1 -2
  144. package/dist/primitives/suggestion/SuggestionDescription.js +1 -2
  145. package/dist/primitives/suggestion/SuggestionTitle.js +1 -2
  146. package/dist/primitives/suggestion/SuggestionTrigger.js +1 -2
  147. package/dist/primitives/suggestion.js +1 -2
  148. package/dist/primitives/thread/ThreadEmpty.js +1 -2
  149. package/dist/primitives/thread/ThreadIf.js +1 -2
  150. package/dist/primitives/thread/ThreadLoadEarlier.js +1 -2
  151. package/dist/primitives/thread/ThreadRoot.js +1 -2
  152. package/dist/primitives/thread/ThreadRootElementContext.js +1 -2
  153. package/dist/primitives/thread/ThreadScrollToBottom.js +1 -2
  154. package/dist/primitives/thread/ThreadSuggestion.js +1 -2
  155. package/dist/primitives/thread/ThreadViewport.js +1 -2
  156. package/dist/primitives/thread/ThreadViewportFooter.js +1 -2
  157. package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js +1 -2
  158. package/dist/primitives/thread/topAnchor/createReserveObservers.js +1 -2
  159. package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +1 -2
  160. package/dist/primitives/thread/topAnchor/topAnchorTurn.js +1 -2
  161. package/dist/primitives/thread/topAnchor/topAnchorUtils.js +1 -2
  162. package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +1 -2
  163. package/dist/primitives/thread/useThreadViewportAutoScroll.js +1 -2
  164. package/dist/primitives/thread.js +1 -2
  165. package/dist/primitives/threadList/ThreadListLoadMore.js +1 -2
  166. package/dist/primitives/threadList/ThreadListNew.js +1 -2
  167. package/dist/primitives/threadList/ThreadListRoot.js +1 -2
  168. package/dist/primitives/threadList.js +1 -2
  169. package/dist/primitives/threadListFocusGroup.js +1 -2
  170. package/dist/primitives/threadListItem/ThreadListItemArchive.js +1 -2
  171. package/dist/primitives/threadListItem/ThreadListItemDelete.js +1 -2
  172. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  173. package/dist/primitives/threadListItem/ThreadListItemRoot.js +2 -3
  174. package/dist/primitives/threadListItem/ThreadListItemRoot.js.map +1 -1
  175. package/dist/primitives/threadListItem/ThreadListItemTrigger.js +1 -2
  176. package/dist/primitives/threadListItem/ThreadListItemUnarchive.js +1 -2
  177. package/dist/primitives/threadListItem.js +1 -2
  178. package/dist/primitives/threadListItemMore/ThreadListItemMoreContent.js +1 -2
  179. package/dist/primitives/threadListItemMore/ThreadListItemMoreItem.js +1 -2
  180. package/dist/primitives/threadListItemMore/ThreadListItemMoreRoot.js +1 -2
  181. package/dist/primitives/threadListItemMore/ThreadListItemMoreSeparator.js +1 -2
  182. package/dist/primitives/threadListItemMore/ThreadListItemMoreTrigger.js +1 -2
  183. package/dist/primitives/threadListItemMore/scope.js +1 -2
  184. package/dist/primitives/threadListItemMore.js +1 -2
  185. package/dist/sandbox-host/SandboxHost.js +2 -3
  186. package/dist/unstable/useComposerInput.js +1 -2
  187. package/dist/unstable/useComposerInputHistory.js +2 -3
  188. package/dist/unstable/useLiveCompletionAdapter.js +1 -2
  189. package/dist/unstable/useMentionAdapter.js +1 -2
  190. package/dist/unstable/useMessageStallDetection.js +1 -2
  191. package/dist/unstable/useModelContextSnapshot.js +1 -2
  192. package/dist/unstable/useSlashCommandAdapter.js +1 -2
  193. package/dist/unstable/webmcp/WebMcpRegistrationResource.js +1 -2
  194. package/dist/unstable/webmcp/convertTools.js +1 -2
  195. package/dist/unstable/webmcp/useWebMcpProvider.js +1 -2
  196. package/dist/unstable/webmcp/webmcp-host.js +1 -2
  197. package/dist/utils/Primitive.js +1 -2
  198. package/dist/utils/createActionButton.js +1 -2
  199. package/dist/utils/getSelectionMessageId.js +1 -2
  200. package/dist/utils/hooks/useManagedRef.js +1 -2
  201. package/dist/utils/hooks/useMediaQuery.js +1 -2
  202. package/dist/utils/hooks/useOnScrollToBottom.js +1 -2
  203. package/dist/utils/hooks/useSizeHandle.js +1 -2
  204. package/dist/utils/isCompositionKey.js +1 -2
  205. package/dist/utils/smooth/SmoothContext.js +1 -2
  206. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  207. package/dist/utils/smooth/useSmooth.js +11 -4
  208. package/dist/utils/smooth/useSmooth.js.map +1 -1
  209. package/dist/utils/useIsomorphicLayoutEffect.js +0 -1
  210. package/package.json +8 -8
  211. package/src/adapters/GeminiLiveVoiceAdapter.test.ts +992 -0
  212. package/src/adapters/GeminiLiveVoiceAdapter.ts +454 -0
  213. package/src/adapters/gemini-live/audio.test.ts +880 -0
  214. package/src/adapters/gemini-live/audio.ts +333 -0
  215. package/src/index.test.ts +34 -0
  216. package/src/index.ts +4 -0
  217. package/src/mcp-apps/McpAppRenderer.composer.test.tsx +111 -0
  218. package/src/mcp-apps/McpAppRenderer.test.tsx +24 -23
  219. package/src/mcp-apps/McpAppRenderer.tsx +9 -1
  220. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.test.tsx +91 -0
  221. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.tsx +54 -0
  222. package/src/primitives/reasoning/useScrollLock.test.tsx +71 -2
  223. package/src/primitives/reasoning/useScrollLock.ts +78 -51
  224. package/src/primitives/threadListItem/ThreadListItemRoot.tsx +4 -1
  225. package/src/primitives/threadListItem/ThreadListKeyboardNav.test.tsx +25 -0
  226. package/src/utils/smooth/useSmooth.test.tsx +113 -4
  227. package/src/utils/smooth/useSmooth.ts +16 -2
  228. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.ts +0 -49
package/dist/internal.js CHANGED
@@ -2,9 +2,9 @@ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import { useComposerInputPluginRegistryOptional } from "./primitives/composer/ComposerInputPluginContext.js";
3
3
  import { useSmoothStatus, withSmoothContextProvider } from "./utils/smooth/SmoothContext.js";
4
4
  import { useSmooth } from "./utils/smooth/useSmooth.js";
5
- import { splitLocalRuntimeOptions } from "@assistant-ui/core/react";
6
5
  import { AssistantRuntimeImpl, BaseAssistantRuntimeCore, CompositeContextProvider, DefaultThreadComposerRuntimeCore, MessageRepository, ThreadRuntimeImpl, getAutoStatus } from "@assistant-ui/core/internal";
7
- //#region src/internal.ts
6
+ import { splitLocalRuntimeOptions } from "@assistant-ui/core/react";
7
+ // src/internal.ts
8
8
  var internal_exports = /* @__PURE__ */ __exportAll({
9
9
  AssistantRuntimeImpl: () => AssistantRuntimeImpl,
10
10
  BaseAssistantRuntimeCore: () => BaseAssistantRuntimeCore,
@@ -19,7 +19,6 @@ var internal_exports = /* @__PURE__ */ __exportAll({
19
19
  useSmoothStatus: () => useSmoothStatus,
20
20
  withSmoothContextProvider: () => withSmoothContextProvider
21
21
  });
22
- //#endregion
23
22
  export { AssistantRuntimeImpl, BaseAssistantRuntimeCore, CompositeContextProvider, DefaultThreadComposerRuntimeCore, MessageRepository, ThreadRuntimeImpl, getAutoStatus, internal_exports, splitLocalRuntimeOptions, useComposerInputPluginRegistryOptional, useSmooth, useSmoothStatus, withSmoothContextProvider };
24
23
 
25
24
  //# sourceMappingURL=internal.js.map
@@ -6,7 +6,7 @@ import { AssistantProviderBase } from "@assistant-ui/core/react";
6
6
  import { memo, useEffect } from "@assistant-ui/tap/react-shim";
7
7
  import { useAui } from "@assistant-ui/store";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
- //#region src/legacy-runtime/AssistantRuntimeProvider.tsx
9
+ // src/legacy-runtime/AssistantRuntimeProvider.tsx
10
10
  const DevToolsRegistration = () => {
11
11
  const $ = c(3);
12
12
  const aui = useAui();
@@ -60,7 +60,6 @@ const AssistantRuntimeProviderImpl = (t0) => {
60
60
  return t4;
61
61
  };
62
62
  const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);
63
- //#endregion
64
63
  export { AssistantRuntimeProvider, AssistantRuntimeProviderImpl };
65
64
 
66
65
  //# sourceMappingURL=AssistantRuntimeProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpAppRenderer.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/McpAppRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7E,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,4BAA4B,EAE7B,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EAEd,mBAAmB,EACnB,WAAW,EACZ,mBAAgB;AAIjB;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uEAAuE;IACvE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,2GAA2G;IAC3G,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,IAAI,CACb,oBAAoB,EACpB,UAAU,GAAG,cAAc,GAAG,eAAe,CAC9C,CAAC;IACF,wGAAwG;IACxG,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sEAAsE;IACtE,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,uEAAuE;IACvE,aAAa,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACtD;;;;OAIG;IACH,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACnC;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,iBAAiB,CAAC;CAC5D,CAAC;AAySF,eAAO,MAAM,cAAc;qBA3BL,4BAA4B;oCA2BO,CAAC"}
1
+ {"version":3,"file":"McpAppRenderer.d.ts","sourceRoot":"","sources":["../../src/mcp-apps/McpAppRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7E,OAAO,KAAK,EAGV,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,4BAA4B,EAE7B,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEhF,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EAEd,mBAAmB,EACnB,WAAW,EACZ,mBAAgB;AAIjB;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,uEAAuE;IACvE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,2GAA2G;IAC3G,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,IAAI,CACb,oBAAoB,EACpB,UAAU,GAAG,cAAc,GAAG,eAAe,CAC9C,CAAC;IACF,wGAAwG;IACxG,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sEAAsE;IACtE,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,uEAAuE;IACvE,aAAa,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACtD;;;;OAIG;IACH,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACnC;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,iBAAiB,CAAC;CAC5D,CAAC;AAiTF,eAAO,MAAM,cAAc;qBA3BL,4BAA4B;oCA2BO,CAAC"}
@@ -2,13 +2,13 @@
2
2
  import { useIsomorphicLayoutEffect } from "../utils/useIsomorphicLayoutEffect.js";
3
3
  import { McpAppFrame } from "./app-frame.js";
4
4
  import { getMcpAppFromToolPart } from "./utils.js";
5
+ import { isRecord } from "@assistant-ui/core/internal";
5
6
  import { useEffect, useMemo, useRef, useState } from "@assistant-ui/tap/react-shim";
6
7
  import { useAui } from "@assistant-ui/store";
7
8
  import { resource, useResource } from "@assistant-ui/tap";
8
9
  import { create } from "zustand";
9
- import { isRecord } from "@assistant-ui/core/internal";
10
10
  import { Fragment, jsx } from "react/jsx-runtime";
11
- //#region src/mcp-apps/McpAppRenderer.tsx
11
+ // src/mcp-apps/McpAppRenderer.tsx
12
12
  const isSameOptions = (a, b) => {
13
13
  const aKeys = Object.keys(a).filter((key) => key !== "host");
14
14
  const bKeys = Object.keys(b).filter((key) => key !== "host");
@@ -123,7 +123,8 @@ function InlineRenderer({ part, useRendererStore }) {
123
123
  ok: false,
124
124
  reason: result.reason
125
125
  };
126
- aui.thread.append({ content: result.content });
126
+ const composer = aui.thread.composer();
127
+ composer.setText([composer.getState().text, result.content.map((part_0) => part_0.text).join("\n")].filter((part_1) => part_1.trim()).join(" "));
127
128
  return { ok: true };
128
129
  }),
129
130
  callTool: (params_0) => useRendererStore.getState().host.callTool({
@@ -205,7 +206,6 @@ const useMcpAppRenderer = (options) => {
205
206
  }, [useRendererStore]) };
206
207
  };
207
208
  const McpAppRenderer = resource(useMcpAppRenderer);
208
- //#endregion
209
209
  export { McpAppRenderer };
210
210
 
211
211
  //# sourceMappingURL=McpAppRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpAppRenderer.js","names":["useEffect","useMemo","useRef","useState","ReactNode","useIsomorphicLayoutEffect","McpAppMetadata","TextMessagePart","ToolCallMessagePart","ToolCallMessagePartComponent","ToolCallMessagePartProps","useAui","create","StoreApi","UseBoundStore","useResource","resource","ResourceElement","McpAppFrame","McpAppBridgeHandlers","McpAppHostContext","McpAppHostInfo","McpAppResource","McpAppSandboxConfig","McpAppsHost","getMcpAppFromToolPart","isRecord","McpAppPartOptions","sandbox","maxHeight","hostInfo","hostContext","handlers","Omit","fallback","loadingFallback","errorFallback","error","Error","McpAppRendererOptions","host","forPart","part","LoadedResourceState","resourceUri","serverId","RendererState","options","UseRendererStore","isSameOptions","a","b","aKeys","Object","keys","filter","key","bKeys","length","aValues","Record","bValues","every","hasOwn","is","getInput","status","type","argsText","args","undefined","defaultOpenLink","url","window","open","extractSendMessageTexts","params","obj","content","Array","isArray","index","Number","isInteger","String","map","block","text","extractSendMessageContent","reason","texts","resolvePartOptions","overrides","InlineRenderer","useRendererStore","aui","rendererOptions","state","opts","app","cachedAppRef","current","appForRender","loadedResource","setLoadedResource","callerHandlers","cancelled","targetHost","targetUri","targetServerId","loadResource","Promise","resolve","getState","res","uri","bridgeHandlers","openLink","sendMessage","result","isError","ok","thread","append","callTool","readResource","listResources","loadedResourceForApp","appResource","useMcpAppRenderer","render","setState","prev","Render","props","displayName","McpAppRenderer"],"sources":["../../src/mcp-apps/McpAppRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport type {\n McpAppMetadata,\n TextMessagePart,\n ToolCallMessagePart,\n} from \"@assistant-ui/core\";\nimport type {\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from \"@assistant-ui/core/react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { create, type StoreApi, type UseBoundStore } from \"zustand\";\n\nimport { useResource, resource, type ResourceElement } from \"@assistant-ui/tap\";\nimport { McpAppFrame } from \"./app-frame\";\nimport type {\n McpAppBridgeHandlers,\n McpAppHostContext,\n McpAppHostInfo,\n McpAppResource,\n McpAppSandboxConfig,\n McpAppsHost,\n} from \"./types\";\nimport { getMcpAppFromToolPart } from \"./utils\";\nimport { isRecord } from \"@assistant-ui/core/internal\";\n\n/**\n * Options that apply to a single MCP app. `McpAppRenderer` takes them as\n * thread-wide defaults, and its `forPart` resolver overrides them for one part.\n */\nexport type McpAppPartOptions = {\n /** Sandbox + container styling. Passes through to SafeContentFrame. */\n sandbox?: McpAppSandboxConfig;\n /**\n * Upper bound (in pixels) applied to the widget-driven auto-resize height.\n * Defaults to 800.\n */\n maxHeight?: number;\n /** Identifies the host to the widget in the `ui/initialize` response. */\n hostInfo?: McpAppHostInfo;\n /** Delivered to the widget on initialize and pushed via `notifications/host_context/changed` on change. */\n hostContext?: McpAppHostContext;\n /**\n * Optional widget interaction and lifecycle handlers. Data-plane handlers\n * (`callTool`, `readResource`, `listResources`) always use `host`.\n *\n * Which handlers a widget may call is captured when its frame mounts, so a\n * `forPart` resolver returns the same handler keys for a part on every\n * render even when the implementations change.\n */\n handlers?: Omit<\n McpAppBridgeHandlers,\n \"callTool\" | \"readResource\" | \"listResources\"\n >;\n /** Rendered when no MCP app is on the part, or while load is in flight / failed (unless overridden). */\n fallback?: ReactNode;\n /** Rendered while the resource is loading. Defaults to `fallback`. */\n loadingFallback?: ReactNode;\n /** Rendered when the resource load rejects. Defaults to `fallback`. */\n errorFallback?: ReactNode | ((error: Error) => ReactNode);\n};\n\nexport type McpAppRendererOptions = McpAppPartOptions & {\n /**\n * Provides the data-plane operations the widget can request\n * (`loadResource`, `callTool`, `readResource`, `listResources`). Use\n * `McpAppsRemoteHost({ url })` for the default HTTP-route convention.\n */\n host: ResourceElement<McpAppsHost>;\n /**\n * Resolves the options for one part. Each returned value replaces the\n * thread-wide option of the same name, so a host can give every MCP app its\n * own display mode and answer `requestDisplayMode` for the part that asked.\n *\n * `handlers` is the exception and merges per key. Its keys are capabilities\n * negotiated with the widget rather than data, so replacing the whole bag to\n * add one handler would withdraw the others from that part's widget with\n * nothing to observe it by.\n */\n forPart?: (part: ToolCallMessagePart) => McpAppPartOptions;\n};\n\ntype LoadedResourceState = {\n host: McpAppsHost;\n resourceUri: string;\n serverId?: string;\n resource?: McpAppResource;\n error?: Error;\n};\n\ntype RendererState = {\n host: McpAppsHost;\n options: McpAppRendererOptions;\n};\n\ntype UseRendererStore = UseBoundStore<StoreApi<RendererState>>;\n\n// Callers pass options as an object literal, so the resource hands this a fresh\n// identity on every run; comparing the values keeps an unchanged run from\n// re-rendering every mounted part. `host` is excluded because it is an element\n// rebuilt on every run, and the store carries the resolved host separately.\nconst isSameOptions = (\n a: McpAppRendererOptions,\n b: McpAppRendererOptions,\n): boolean => {\n const aKeys = Object.keys(a).filter((key) => key !== \"host\");\n const bKeys = Object.keys(b).filter((key) => key !== \"host\");\n if (aKeys.length !== bKeys.length) return false;\n const aValues = a as Record<string, unknown>;\n const bValues = b as Record<string, unknown>;\n return aKeys.every(\n (key) =>\n Object.hasOwn(bValues, key) && Object.is(aValues[key], bValues[key]),\n );\n};\n\nfunction getInput(part: {\n status: { type: string };\n argsText: string;\n args: unknown;\n}): unknown {\n if (\n part.status.type === \"running\" &&\n (part.argsText === \"\" || part.argsText === \"{}\")\n ) {\n return undefined;\n }\n return part.args;\n}\n\nconst defaultOpenLink = ({ url }: { url: string }) => {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n};\n\nfunction extractSendMessageTexts(params: unknown): string[] | undefined {\n if (typeof params === \"string\") return [params];\n if (!params || typeof params !== \"object\") return undefined;\n const obj = params as Record<string, unknown>;\n if (typeof obj[\"prompt\"] === \"string\") return [obj[\"prompt\"]];\n if (typeof obj[\"text\"] === \"string\") return [obj[\"text\"]];\n if (typeof obj[\"message\"] === \"string\") return [obj[\"message\"]];\n const content = obj[\"content\"];\n if (Array.isArray(content)) {\n return Object.keys(content)\n .filter((key) => {\n const index = Number(key);\n return (\n Number.isInteger(index) &&\n index >= 0 &&\n index < content.length &&\n String(index) === key\n );\n })\n .map((key) => content[Number(key)])\n .filter(\n (block): block is { type: \"text\"; text: string } =>\n isRecord(block) &&\n block[\"type\"] === \"text\" &&\n typeof block[\"text\"] === \"string\",\n )\n .map((block) => block.text);\n }\n return undefined;\n}\n\nfunction extractSendMessageContent(\n params: unknown,\n): { content: TextMessagePart[] } | { reason: string } {\n const texts = extractSendMessageTexts(params);\n if (!texts) return { reason: \"unrecognised params shape\" };\n const content = texts\n .filter((text) => text !== \"\")\n .map((text): TextMessagePart => ({ type: \"text\", text }));\n if (content.length === 0) {\n return { reason: \"no text content to append\" };\n }\n return { content };\n}\n\nfunction resolvePartOptions(\n options: McpAppRendererOptions,\n part: ToolCallMessagePartProps,\n): McpAppRendererOptions {\n const overrides = options.forPart?.(part);\n if (!overrides) return options;\n const handlers =\n options.handlers && overrides.handlers\n ? { ...options.handlers, ...overrides.handlers }\n : (overrides.handlers ?? options.handlers);\n return {\n ...options,\n ...overrides,\n ...(handlers === undefined ? {} : { handlers }),\n };\n}\n\nfunction InlineRenderer({\n part,\n useRendererStore,\n}: {\n part: ToolCallMessagePartProps;\n useRendererStore: UseRendererStore;\n}) {\n const aui = useAui();\n const rendererOptions = useRendererStore((state) => state.options);\n const opts = resolvePartOptions(rendererOptions, part);\n const app = getMcpAppFromToolPart(part);\n const cachedAppRef = useRef<McpAppMetadata | undefined>(undefined);\n useIsomorphicLayoutEffect(() => {\n if (app != null) cachedAppRef.current = app;\n }, [app]);\n const appForRender = app ?? cachedAppRef.current;\n\n const [loadedResource, setLoadedResource] = useState<LoadedResourceState>();\n\n const host = useRendererStore((state) => state.host);\n const resourceUri = appForRender?.resourceUri;\n const serverId = appForRender?.serverId;\n const callerHandlers = opts.handlers;\n useEffect(() => {\n if (resourceUri == null) return;\n let cancelled = false;\n const targetHost = host;\n const targetUri = resourceUri;\n const targetServerId = serverId;\n\n // Host changes are published later in this passive flush. Defer until that\n // publication lands, then verify this effect still owns the current host.\n const loadResource = async () => {\n await Promise.resolve();\n if (cancelled || useRendererStore.getState().host !== targetHost) return;\n try {\n const res = await targetHost.loadResource({\n uri: targetUri,\n ...(targetServerId ? { serverId: targetServerId } : {}),\n });\n if (!cancelled)\n setLoadedResource({\n host: targetHost,\n resourceUri: targetUri,\n ...(targetServerId !== undefined\n ? { serverId: targetServerId }\n : {}),\n resource: res,\n });\n } catch (error: unknown) {\n if (!cancelled) {\n setLoadedResource({\n host: targetHost,\n resourceUri: targetUri,\n ...(targetServerId !== undefined\n ? { serverId: targetServerId }\n : {}),\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n };\n void loadResource();\n\n return () => {\n cancelled = true;\n };\n }, [host, resourceUri, serverId, useRendererStore]);\n\n const bridgeHandlers = useMemo<McpAppBridgeHandlers>(\n () => ({\n ...callerHandlers,\n openLink: callerHandlers?.openLink ?? defaultOpenLink,\n sendMessage:\n callerHandlers?.sendMessage ??\n ((params) => {\n const result = extractSendMessageContent(params);\n if (\"reason\" in result) {\n return { isError: true, ok: false, reason: result.reason };\n }\n aui.thread.append({ content: result.content });\n return { ok: true };\n }),\n callTool: (params) =>\n useRendererStore.getState().host.callTool({\n ...params,\n ...(serverId ? { serverId } : {}),\n }),\n readResource: (params) =>\n useRendererStore.getState().host.readResource({\n ...params,\n ...(serverId ? { serverId } : {}),\n }),\n listResources: (params) => {\n if (!serverId) {\n return useRendererStore.getState().host.listResources(params);\n }\n return useRendererStore.getState().host.listResources({\n ...(isRecord(params) ? params : {}),\n serverId,\n });\n },\n }),\n [aui, callerHandlers, serverId, useRendererStore],\n );\n\n const loadedResourceForApp =\n loadedResource?.host === host &&\n loadedResource?.resourceUri === appForRender?.resourceUri &&\n loadedResource?.serverId === appForRender?.serverId\n ? loadedResource\n : undefined;\n const appResource = loadedResourceForApp?.resource;\n const error = loadedResourceForApp?.error;\n\n const fallback = opts.fallback ?? null;\n if (appForRender == null) {\n return <>{fallback}</>;\n }\n if (error != null) {\n const errorFallback = opts.errorFallback;\n if (errorFallback === undefined) return <>{fallback}</>;\n if (typeof errorFallback === \"function\") return <>{errorFallback(error)}</>;\n return <>{errorFallback}</>;\n }\n if (appResource == null) {\n return <>{opts.loadingFallback ?? fallback}</>;\n }\n\n return (\n <McpAppFrame\n app={appForRender}\n resource={appResource}\n input={getInput(part)}\n output={part.result}\n sandbox={opts.sandbox}\n handlers={bridgeHandlers}\n hostInfo={opts.hostInfo}\n hostContext={opts.hostContext}\n maxHeight={opts.maxHeight}\n />\n );\n}\n\n/**\n * Creates a tool-call renderer for MCP Apps embedded in assistant messages.\n *\n * Compose this into the `Tools` resource through its `mcpApp` option. When a\n * tool-call part carries `mcp.app` metadata for a `ui://` resource, the\n * renderer loads that resource from the configured host and displays it in a\n * sandboxed frame.\n */\nconst useMcpAppRenderer = (\n options: McpAppRendererOptions,\n): { readonly render: ToolCallMessagePartComponent } => {\n const host = useResource(options.host);\n\n // The rendered component identity has to stay stable, or every part remounts\n // its frame; options reach the parts through the store instead of props.\n const [useRendererStore] = useState(() =>\n create<RendererState>(() => ({ host, options })),\n );\n useEffect(() => {\n useRendererStore.setState((prev) =>\n prev.host === host && isSameOptions(prev.options, options)\n ? prev\n : { host, options },\n );\n }, [host, options, useRendererStore]);\n\n const render = useMemo((): ToolCallMessagePartComponent => {\n const Render: ToolCallMessagePartComponent = (props) => (\n <InlineRenderer part={props} useRendererStore={useRendererStore} />\n );\n Render.displayName = \"McpAppRenderer\";\n return Render;\n }, [useRendererStore]);\n\n return { render };\n};\n\nexport const McpAppRenderer = resource(useMcpAppRenderer);\n"],"mappings":"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"}
1
+ {"version":3,"file":"McpAppRenderer.js","names":["useEffect","useMemo","useRef","useState","ReactNode","useIsomorphicLayoutEffect","McpAppMetadata","TextMessagePart","ToolCallMessagePart","ToolCallMessagePartComponent","ToolCallMessagePartProps","useAui","create","StoreApi","UseBoundStore","useResource","resource","ResourceElement","McpAppFrame","McpAppBridgeHandlers","McpAppHostContext","McpAppHostInfo","McpAppResource","McpAppSandboxConfig","McpAppsHost","getMcpAppFromToolPart","isRecord","McpAppPartOptions","sandbox","maxHeight","hostInfo","hostContext","handlers","Omit","fallback","loadingFallback","errorFallback","error","Error","McpAppRendererOptions","host","forPart","part","LoadedResourceState","resourceUri","serverId","RendererState","options","UseRendererStore","isSameOptions","a","b","aKeys","Object","keys","filter","key","bKeys","length","aValues","Record","bValues","every","hasOwn","is","getInput","status","type","argsText","args","undefined","defaultOpenLink","url","window","open","extractSendMessageTexts","params","obj","content","Array","isArray","index","Number","isInteger","String","map","block","text","extractSendMessageContent","reason","texts","resolvePartOptions","overrides","InlineRenderer","useRendererStore","aui","rendererOptions","state","opts","app","cachedAppRef","current","appForRender","loadedResource","setLoadedResource","callerHandlers","cancelled","targetHost","targetUri","targetServerId","loadResource","Promise","resolve","getState","res","uri","bridgeHandlers","openLink","sendMessage","result","isError","ok","composer","thread","setText","join","trim","callTool","readResource","listResources","loadedResourceForApp","appResource","useMcpAppRenderer","render","setState","prev","Render","props","displayName","McpAppRenderer"],"sources":["../../src/mcp-apps/McpAppRenderer.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { useIsomorphicLayoutEffect } from \"../utils/useIsomorphicLayoutEffect\";\nimport type {\n McpAppMetadata,\n TextMessagePart,\n ToolCallMessagePart,\n} from \"@assistant-ui/core\";\nimport type {\n ToolCallMessagePartComponent,\n ToolCallMessagePartProps,\n} from \"@assistant-ui/core/react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { create, type StoreApi, type UseBoundStore } from \"zustand\";\n\nimport { useResource, resource, type ResourceElement } from \"@assistant-ui/tap\";\nimport { McpAppFrame } from \"./app-frame\";\nimport type {\n McpAppBridgeHandlers,\n McpAppHostContext,\n McpAppHostInfo,\n McpAppResource,\n McpAppSandboxConfig,\n McpAppsHost,\n} from \"./types\";\nimport { getMcpAppFromToolPart } from \"./utils\";\nimport { isRecord } from \"@assistant-ui/core/internal\";\n\n/**\n * Options that apply to a single MCP app. `McpAppRenderer` takes them as\n * thread-wide defaults, and its `forPart` resolver overrides them for one part.\n */\nexport type McpAppPartOptions = {\n /** Sandbox + container styling. Passes through to SafeContentFrame. */\n sandbox?: McpAppSandboxConfig;\n /**\n * Upper bound (in pixels) applied to the widget-driven auto-resize height.\n * Defaults to 800.\n */\n maxHeight?: number;\n /** Identifies the host to the widget in the `ui/initialize` response. */\n hostInfo?: McpAppHostInfo;\n /** Delivered to the widget on initialize and pushed via `notifications/host_context/changed` on change. */\n hostContext?: McpAppHostContext;\n /**\n * Optional widget interaction and lifecycle handlers. Data-plane handlers\n * (`callTool`, `readResource`, `listResources`) always use `host`.\n *\n * Which handlers a widget may call is captured when its frame mounts, so a\n * `forPart` resolver returns the same handler keys for a part on every\n * render even when the implementations change.\n */\n handlers?: Omit<\n McpAppBridgeHandlers,\n \"callTool\" | \"readResource\" | \"listResources\"\n >;\n /** Rendered when no MCP app is on the part, or while load is in flight / failed (unless overridden). */\n fallback?: ReactNode;\n /** Rendered while the resource is loading. Defaults to `fallback`. */\n loadingFallback?: ReactNode;\n /** Rendered when the resource load rejects. Defaults to `fallback`. */\n errorFallback?: ReactNode | ((error: Error) => ReactNode);\n};\n\nexport type McpAppRendererOptions = McpAppPartOptions & {\n /**\n * Provides the data-plane operations the widget can request\n * (`loadResource`, `callTool`, `readResource`, `listResources`). Use\n * `McpAppsRemoteHost({ url })` for the default HTTP-route convention.\n */\n host: ResourceElement<McpAppsHost>;\n /**\n * Resolves the options for one part. Each returned value replaces the\n * thread-wide option of the same name, so a host can give every MCP app its\n * own display mode and answer `requestDisplayMode` for the part that asked.\n *\n * `handlers` is the exception and merges per key. Its keys are capabilities\n * negotiated with the widget rather than data, so replacing the whole bag to\n * add one handler would withdraw the others from that part's widget with\n * nothing to observe it by.\n */\n forPart?: (part: ToolCallMessagePart) => McpAppPartOptions;\n};\n\ntype LoadedResourceState = {\n host: McpAppsHost;\n resourceUri: string;\n serverId?: string;\n resource?: McpAppResource;\n error?: Error;\n};\n\ntype RendererState = {\n host: McpAppsHost;\n options: McpAppRendererOptions;\n};\n\ntype UseRendererStore = UseBoundStore<StoreApi<RendererState>>;\n\n// Callers pass options as an object literal, so the resource hands this a fresh\n// identity on every run; comparing the values keeps an unchanged run from\n// re-rendering every mounted part. `host` is excluded because it is an element\n// rebuilt on every run, and the store carries the resolved host separately.\nconst isSameOptions = (\n a: McpAppRendererOptions,\n b: McpAppRendererOptions,\n): boolean => {\n const aKeys = Object.keys(a).filter((key) => key !== \"host\");\n const bKeys = Object.keys(b).filter((key) => key !== \"host\");\n if (aKeys.length !== bKeys.length) return false;\n const aValues = a as Record<string, unknown>;\n const bValues = b as Record<string, unknown>;\n return aKeys.every(\n (key) =>\n Object.hasOwn(bValues, key) && Object.is(aValues[key], bValues[key]),\n );\n};\n\nfunction getInput(part: {\n status: { type: string };\n argsText: string;\n args: unknown;\n}): unknown {\n if (\n part.status.type === \"running\" &&\n (part.argsText === \"\" || part.argsText === \"{}\")\n ) {\n return undefined;\n }\n return part.args;\n}\n\nconst defaultOpenLink = ({ url }: { url: string }) => {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n};\n\nfunction extractSendMessageTexts(params: unknown): string[] | undefined {\n if (typeof params === \"string\") return [params];\n if (!params || typeof params !== \"object\") return undefined;\n const obj = params as Record<string, unknown>;\n if (typeof obj[\"prompt\"] === \"string\") return [obj[\"prompt\"]];\n if (typeof obj[\"text\"] === \"string\") return [obj[\"text\"]];\n if (typeof obj[\"message\"] === \"string\") return [obj[\"message\"]];\n const content = obj[\"content\"];\n if (Array.isArray(content)) {\n return Object.keys(content)\n .filter((key) => {\n const index = Number(key);\n return (\n Number.isInteger(index) &&\n index >= 0 &&\n index < content.length &&\n String(index) === key\n );\n })\n .map((key) => content[Number(key)])\n .filter(\n (block): block is { type: \"text\"; text: string } =>\n isRecord(block) &&\n block[\"type\"] === \"text\" &&\n typeof block[\"text\"] === \"string\",\n )\n .map((block) => block.text);\n }\n return undefined;\n}\n\nfunction extractSendMessageContent(\n params: unknown,\n): { content: TextMessagePart[] } | { reason: string } {\n const texts = extractSendMessageTexts(params);\n if (!texts) return { reason: \"unrecognised params shape\" };\n const content = texts\n .filter((text) => text !== \"\")\n .map((text): TextMessagePart => ({ type: \"text\", text }));\n if (content.length === 0) {\n return { reason: \"no text content to append\" };\n }\n return { content };\n}\n\nfunction resolvePartOptions(\n options: McpAppRendererOptions,\n part: ToolCallMessagePartProps,\n): McpAppRendererOptions {\n const overrides = options.forPart?.(part);\n if (!overrides) return options;\n const handlers =\n options.handlers && overrides.handlers\n ? { ...options.handlers, ...overrides.handlers }\n : (overrides.handlers ?? options.handlers);\n return {\n ...options,\n ...overrides,\n ...(handlers === undefined ? {} : { handlers }),\n };\n}\n\nfunction InlineRenderer({\n part,\n useRendererStore,\n}: {\n part: ToolCallMessagePartProps;\n useRendererStore: UseRendererStore;\n}) {\n const aui = useAui();\n const rendererOptions = useRendererStore((state) => state.options);\n const opts = resolvePartOptions(rendererOptions, part);\n const app = getMcpAppFromToolPart(part);\n const cachedAppRef = useRef<McpAppMetadata | undefined>(undefined);\n useIsomorphicLayoutEffect(() => {\n if (app != null) cachedAppRef.current = app;\n }, [app]);\n const appForRender = app ?? cachedAppRef.current;\n\n const [loadedResource, setLoadedResource] = useState<LoadedResourceState>();\n\n const host = useRendererStore((state) => state.host);\n const resourceUri = appForRender?.resourceUri;\n const serverId = appForRender?.serverId;\n const callerHandlers = opts.handlers;\n useEffect(() => {\n if (resourceUri == null) return;\n let cancelled = false;\n const targetHost = host;\n const targetUri = resourceUri;\n const targetServerId = serverId;\n\n // Host changes are published later in this passive flush. Defer until that\n // publication lands, then verify this effect still owns the current host.\n const loadResource = async () => {\n await Promise.resolve();\n if (cancelled || useRendererStore.getState().host !== targetHost) return;\n try {\n const res = await targetHost.loadResource({\n uri: targetUri,\n ...(targetServerId ? { serverId: targetServerId } : {}),\n });\n if (!cancelled)\n setLoadedResource({\n host: targetHost,\n resourceUri: targetUri,\n ...(targetServerId !== undefined\n ? { serverId: targetServerId }\n : {}),\n resource: res,\n });\n } catch (error: unknown) {\n if (!cancelled) {\n setLoadedResource({\n host: targetHost,\n resourceUri: targetUri,\n ...(targetServerId !== undefined\n ? { serverId: targetServerId }\n : {}),\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n };\n void loadResource();\n\n return () => {\n cancelled = true;\n };\n }, [host, resourceUri, serverId, useRendererStore]);\n\n const bridgeHandlers = useMemo<McpAppBridgeHandlers>(\n () => ({\n ...callerHandlers,\n openLink: callerHandlers?.openLink ?? defaultOpenLink,\n sendMessage:\n callerHandlers?.sendMessage ??\n ((params) => {\n const result = extractSendMessageContent(params);\n if (\"reason\" in result) {\n return { isError: true, ok: false, reason: result.reason };\n }\n const composer = aui.thread.composer();\n composer.setText(\n [\n composer.getState().text,\n result.content.map((part) => part.text).join(\"\\n\"),\n ]\n .filter((part) => part.trim())\n .join(\" \"),\n );\n return { ok: true };\n }),\n callTool: (params) =>\n useRendererStore.getState().host.callTool({\n ...params,\n ...(serverId ? { serverId } : {}),\n }),\n readResource: (params) =>\n useRendererStore.getState().host.readResource({\n ...params,\n ...(serverId ? { serverId } : {}),\n }),\n listResources: (params) => {\n if (!serverId) {\n return useRendererStore.getState().host.listResources(params);\n }\n return useRendererStore.getState().host.listResources({\n ...(isRecord(params) ? params : {}),\n serverId,\n });\n },\n }),\n [aui, callerHandlers, serverId, useRendererStore],\n );\n\n const loadedResourceForApp =\n loadedResource?.host === host &&\n loadedResource?.resourceUri === appForRender?.resourceUri &&\n loadedResource?.serverId === appForRender?.serverId\n ? loadedResource\n : undefined;\n const appResource = loadedResourceForApp?.resource;\n const error = loadedResourceForApp?.error;\n\n const fallback = opts.fallback ?? null;\n if (appForRender == null) {\n return <>{fallback}</>;\n }\n if (error != null) {\n const errorFallback = opts.errorFallback;\n if (errorFallback === undefined) return <>{fallback}</>;\n if (typeof errorFallback === \"function\") return <>{errorFallback(error)}</>;\n return <>{errorFallback}</>;\n }\n if (appResource == null) {\n return <>{opts.loadingFallback ?? fallback}</>;\n }\n\n return (\n <McpAppFrame\n app={appForRender}\n resource={appResource}\n input={getInput(part)}\n output={part.result}\n sandbox={opts.sandbox}\n handlers={bridgeHandlers}\n hostInfo={opts.hostInfo}\n hostContext={opts.hostContext}\n maxHeight={opts.maxHeight}\n />\n );\n}\n\n/**\n * Creates a tool-call renderer for MCP Apps embedded in assistant messages.\n *\n * Compose this into the `Tools` resource through its `mcpApp` option. When a\n * tool-call part carries `mcp.app` metadata for a `ui://` resource, the\n * renderer loads that resource from the configured host and displays it in a\n * sandboxed frame.\n */\nconst useMcpAppRenderer = (\n options: McpAppRendererOptions,\n): { readonly render: ToolCallMessagePartComponent } => {\n const host = useResource(options.host);\n\n // The rendered component identity has to stay stable, or every part remounts\n // its frame; options reach the parts through the store instead of props.\n const [useRendererStore] = useState(() =>\n create<RendererState>(() => ({ host, options })),\n );\n useEffect(() => {\n useRendererStore.setState((prev) =>\n prev.host === host && isSameOptions(prev.options, options)\n ? prev\n : { host, options },\n );\n }, [host, options, useRendererStore]);\n\n const render = useMemo((): ToolCallMessagePartComponent => {\n const Render: ToolCallMessagePartComponent = (props) => (\n <InlineRenderer part={props} useRendererStore={useRendererStore} />\n );\n Render.displayName = \"McpAppRenderer\";\n return Render;\n }, [useRendererStore]);\n\n return { render };\n};\n\nexport const McpAppRenderer = resource(useMcpAppRenderer);\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { useEffect, useMemo, useRef } from "@assistant-ui/tap/react-shim";
2
2
  import { resource } from "@assistant-ui/tap";
3
- //#region src/mcp-apps/McpAppsRemoteHost.ts
3
+ // src/mcp-apps/McpAppsRemoteHost.ts
4
4
  const truncateBody = (body) => body.length > 500 ? `${body.slice(0, 500)}...` : body;
5
5
  const extractErrorBody = (body) => {
6
6
  const trimmed = body.trim();
@@ -97,7 +97,6 @@ const useMcpAppsRemoteHost = (options) => {
97
97
  return hostState.host;
98
98
  };
99
99
  const McpAppsRemoteHost = resource(useMcpAppsRemoteHost);
100
- //#endregion
101
100
  export { McpAppsRemoteHost };
102
101
 
103
102
  //# sourceMappingURL=McpAppsRemoteHost.js.map
@@ -3,11 +3,11 @@ import { useIsomorphicLayoutEffect } from "../utils/useIsomorphicLayoutEffect.js
3
3
  import { createMcpAppBridge } from "./bridge.js";
4
4
  import { SandboxHost } from "../sandbox-host/SandboxHost.js";
5
5
  import { applyMcpAppCsp } from "./csp.js";
6
+ import { isRecord } from "@assistant-ui/core/internal";
6
7
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
7
8
  import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
8
- import { isRecord } from "@assistant-ui/core/internal";
9
9
  import { jsx } from "react/jsx-runtime";
10
- //#region src/mcp-apps/app-frame.tsx
10
+ // src/mcp-apps/app-frame.tsx
11
11
  const DEFAULT_PRODUCT = "assistant-ui-mcp-app";
12
12
  const INIT_TIMEOUT_MS = 5e3;
13
13
  const DEFAULT_MAX_HEIGHT = 800;
@@ -305,7 +305,6 @@ function _temp2(b_1, v_0) {
305
305
  function _temp(b_0, v) {
306
306
  return b_0.notifyToolInput(v);
307
307
  }
308
- //#endregion
309
308
  export { McpAppFrame };
310
309
 
311
310
  //# sourceMappingURL=app-frame.js.map
@@ -1,6 +1,6 @@
1
1
  import "./types.js";
2
2
  import { invokeUserCallback, isRecord } from "@assistant-ui/core/internal";
3
- //#region src/mcp-apps/bridge.ts
3
+ // src/mcp-apps/bridge.ts
4
4
  const VALID_DISPLAY_MODES = [
5
5
  "inline",
6
6
  "fullscreen",
@@ -314,7 +314,6 @@ function createMcpAppBridge(opts) {
314
314
  }
315
315
  };
316
316
  }
317
- //#endregion
318
317
  export { createMcpAppBridge };
319
318
 
320
319
  //# sourceMappingURL=bridge.js.map
@@ -1,4 +1,4 @@
1
- //#region src/mcp-apps/csp.ts
1
+ // src/mcp-apps/csp.ts
2
2
  const isAllowedOrigin = (value, allowWebSocket) => {
3
3
  if (!(allowWebSocket ? /^(?:https?|wss?):\/\//i : /^https?:\/\//i).test(value) || /[\s;'"`,]/.test(value)) return false;
4
4
  try {
@@ -87,7 +87,6 @@ const applyMcpAppCsp = (html, csp) => {
87
87
  const insertionPoint = findDoctypeEnd(normalizedHtml);
88
88
  return `${normalizedHtml.slice(0, insertionPoint)}${meta}${normalizedHtml.slice(insertionPoint)}`;
89
89
  };
90
- //#endregion
91
90
  export { applyMcpAppCsp, buildMcpAppCsp };
92
91
 
93
92
  //# sourceMappingURL=csp.js.map
@@ -1,7 +1,6 @@
1
- //#region src/mcp-apps/types.ts
1
+ // src/mcp-apps/types.ts
2
2
  const MCP_APP_MIME_TYPE = "text/html;profile=mcp-app";
3
3
  const MCP_APP_PROTOCOL_VERSION = "0.1";
4
- //#endregion
5
4
  export { MCP_APP_MIME_TYPE, MCP_APP_PROTOCOL_VERSION };
6
5
 
7
6
  //# sourceMappingURL=types.js.map
@@ -1,5 +1,5 @@
1
1
  import { isMcpAppUri } from "@assistant-ui/core";
2
- //#region src/mcp-apps/utils.ts
2
+ // src/mcp-apps/utils.ts
3
3
  /**
4
4
  * Returns MCP app metadata for a tool-call part that points at a `ui://`
5
5
  * resource.
@@ -13,7 +13,6 @@ function getMcpAppFromToolPart(part) {
13
13
  if (!isMcpAppUri(app.resourceUri)) return void 0;
14
14
  return app;
15
15
  }
16
- //#endregion
17
16
  export { getMcpAppFromToolPart };
18
17
 
19
18
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { AssistantFrameHost } from "@assistant-ui/core";
3
3
  import { useEffect } from "@assistant-ui/tap/react-shim";
4
- //#region src/model-context/frame/useAssistantFrameHost.ts
4
+ // src/model-context/frame/useAssistantFrameHost.ts
5
5
  /**
6
6
  * React hook that manages the lifecycle of an AssistantFrameHost and its binding to the current AssistantRuntime.
7
7
  *
@@ -91,7 +91,6 @@ const useAssistantFrameHost = ({ iframeRef, targetOrigin, register }) => {
91
91
  register
92
92
  ]);
93
93
  };
94
- //#endregion
95
94
  export { useAssistantFrameHost };
96
95
 
97
96
  //# sourceMappingURL=useAssistantFrameHost.js.map
@@ -5,7 +5,7 @@ import { createContext, forwardRef, useContext, useEffect, useId, useRef } from
5
5
  import { useAui } from "@assistant-ui/store";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { useComposedRefs } from "radix-ui/internal";
8
- //#region src/model-context/makeAssistantVisible.tsx
8
+ // src/model-context/makeAssistantVisible.tsx
9
9
  const DEFAULT_ACTION_SETTLE_DELAY_MS = 2e3;
10
10
  const MAX_ACTION_SETTLE_DELAY_MS = 2147483647;
11
11
  const waitForSettle = async (settleDelayMs) => {
@@ -144,7 +144,6 @@ const makeAssistantVisible = (Component, config) => {
144
144
  ReadableComponent.displayName = Component.displayName;
145
145
  return ReadableComponent;
146
146
  };
147
- //#endregion
148
147
  export { makeAssistantVisible as default, makeAssistantVisible };
149
148
 
150
149
  //# sourceMappingURL=makeAssistantVisible.js.map
@@ -6,7 +6,7 @@ import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { useAuiState } from "@assistant-ui/store";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { composeEventHandlers } from "radix-ui/internal";
9
- //#region src/primitives/actionBar/ActionBarCopy.tsx
9
+ // src/primitives/actionBar/ActionBarCopy.tsx
10
10
  /**
11
11
  * Hook that provides copy functionality for action bar buttons.
12
12
  *
@@ -144,7 +144,6 @@ function _temp(text) {
144
144
  function _temp2(s) {
145
145
  return s.message.isCopied;
146
146
  }
147
- //#endregion
148
147
  export { ActionBarPrimitiveCopy };
149
148
 
150
149
  //# sourceMappingURL=ActionBarCopy.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useActionBarEdit } from "@assistant-ui/core/react";
4
- //#region src/primitives/actionBar/ActionBarEdit.ts
4
+ // src/primitives/actionBar/ActionBarEdit.ts
5
5
  /**
6
6
  * Hook that provides edit functionality for action bar buttons.
7
7
  *
@@ -42,7 +42,6 @@ const useActionBarEdit$1 = () => {
42
42
  * ```
43
43
  */
44
44
  const ActionBarPrimitiveEdit = createActionButton("ActionBarPrimitive.Edit", useActionBarEdit$1);
45
- //#endregion
46
45
  export { ActionBarPrimitiveEdit };
47
46
 
48
47
  //# sourceMappingURL=ActionBarEdit.js.map
@@ -5,7 +5,7 @@ import { forwardRef } from "@assistant-ui/tap/react-shim";
5
5
  import { useAui, useAuiState } from "@assistant-ui/store";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { composeEventHandlers } from "radix-ui/internal";
8
- //#region src/primitives/actionBar/ActionBarExportMarkdown.tsx
8
+ // src/primitives/actionBar/ActionBarExportMarkdown.tsx
9
9
  const useActionBarExportMarkdown = (t0) => {
10
10
  const $ = c(6);
11
11
  let t1;
@@ -122,7 +122,6 @@ function _temp2(s) {
122
122
  function _temp3(error) {
123
123
  console.error("[assistant-ui] markdown export failed:", error);
124
124
  }
125
- //#endregion
126
125
  export { ActionBarPrimitiveExportMarkdown };
127
126
 
128
127
  //# sourceMappingURL=ActionBarExportMarkdown.js.map
@@ -6,7 +6,7 @@ import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { useAuiState } from "@assistant-ui/store";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { composeEventHandlers } from "radix-ui/internal";
9
- //#region src/primitives/actionBar/ActionBarFeedbackNegative.tsx
9
+ // src/primitives/actionBar/ActionBarFeedbackNegative.tsx
10
10
  const useActionBarFeedbackNegative$1 = () => {
11
11
  const { submit } = useActionBarFeedbackNegative();
12
12
  return submit;
@@ -76,7 +76,6 @@ ActionBarPrimitiveFeedbackNegative.displayName = "ActionBarPrimitive.FeedbackNeg
76
76
  function _temp(s) {
77
77
  return s.message.metadata.submittedFeedback?.type === "negative";
78
78
  }
79
- //#endregion
80
79
  export { ActionBarPrimitiveFeedbackNegative };
81
80
 
82
81
  //# sourceMappingURL=ActionBarFeedbackNegative.js.map
@@ -6,7 +6,7 @@ import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { useAuiState } from "@assistant-ui/store";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { composeEventHandlers } from "radix-ui/internal";
9
- //#region src/primitives/actionBar/ActionBarFeedbackPositive.tsx
9
+ // src/primitives/actionBar/ActionBarFeedbackPositive.tsx
10
10
  const useActionBarFeedbackPositive$1 = () => {
11
11
  const { submit } = useActionBarFeedbackPositive();
12
12
  return submit;
@@ -76,7 +76,6 @@ ActionBarPrimitiveFeedbackPositive.displayName = "ActionBarPrimitive.FeedbackPos
76
76
  function _temp(s) {
77
77
  return s.message.metadata.submittedFeedback?.type === "positive";
78
78
  }
79
- //#endregion
80
79
  export { ActionBarPrimitiveFeedbackPositive };
81
80
 
82
81
  //# sourceMappingURL=ActionBarFeedbackPositive.js.map
@@ -1,11 +1,10 @@
1
1
  "use client";
2
2
  import { createContext, useContext } from "@assistant-ui/tap/react-shim";
3
- //#region src/primitives/actionBar/ActionBarInteractionContext.ts
3
+ // src/primitives/actionBar/ActionBarInteractionContext.ts
4
4
  const ActionBarInteractionContext = createContext(null);
5
5
  const useActionBarInteractionContext = () => {
6
6
  return useContext(ActionBarInteractionContext);
7
7
  };
8
- //#endregion
9
8
  export { ActionBarInteractionContext, useActionBarInteractionContext };
10
9
 
11
10
  //# sourceMappingURL=ActionBarInteractionContext.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useActionBarReload } from "@assistant-ui/core/react";
4
- //#region src/primitives/actionBar/ActionBarReload.ts
4
+ // src/primitives/actionBar/ActionBarReload.ts
5
5
  /**
6
6
  * Hook that provides reload functionality for action bar buttons.
7
7
  *
@@ -43,7 +43,6 @@ const useActionBarReload$1 = () => {
43
43
  * ```
44
44
  */
45
45
  const ActionBarPrimitiveReload = createActionButton("ActionBarPrimitive.Reload", useActionBarReload$1);
46
- //#endregion
47
46
  export { ActionBarPrimitiveReload };
48
47
 
49
48
  //# sourceMappingURL=ActionBarReload.js.map
@@ -5,7 +5,7 @@ import { ActionBarInteractionContext } from "./ActionBarInteractionContext.js";
5
5
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
6
  import { forwardRef, useState } from "@assistant-ui/tap/react-shim";
7
7
  import { jsx } from "react/jsx-runtime";
8
- //#region src/primitives/actionBar/ActionBarRoot.tsx
8
+ // src/primitives/actionBar/ActionBarRoot.tsx
9
9
  /**
10
10
  * The root container for action bar components.
11
11
  *
@@ -113,7 +113,6 @@ function _temp(count) {
113
113
  function _temp2(count_0) {
114
114
  return Math.max(0, count_0 - 1);
115
115
  }
116
- //#endregion
117
116
  export { ActionBarPrimitiveRoot };
118
117
 
119
118
  //# sourceMappingURL=ActionBarRoot.js.map
@@ -1,14 +1,13 @@
1
1
  "use client";
2
2
  import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useActionBarSpeak } from "@assistant-ui/core/react";
4
- //#region src/primitives/actionBar/ActionBarSpeak.ts
4
+ // src/primitives/actionBar/ActionBarSpeak.ts
5
5
  const useActionBarSpeak$1 = () => {
6
6
  const { disabled, speak } = useActionBarSpeak();
7
7
  if (disabled) return null;
8
8
  return speak;
9
9
  };
10
10
  const ActionBarPrimitiveSpeak = createActionButton("ActionBarPrimitive.Speak", useActionBarSpeak$1);
11
- //#endregion
12
11
  export { ActionBarPrimitiveSpeak };
13
12
 
14
13
  //# sourceMappingURL=ActionBarSpeak.js.map
@@ -5,7 +5,7 @@ import { useActionBarStopSpeaking } from "@assistant-ui/core/react";
5
5
  import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { composeEventHandlers } from "radix-ui/internal";
8
- //#region src/primitives/actionBar/ActionBarStopSpeaking.tsx
8
+ // src/primitives/actionBar/ActionBarStopSpeaking.tsx
9
9
  const useActionBarStopSpeaking$1 = () => {
10
10
  const { disabled, stopSpeaking } = useActionBarStopSpeaking();
11
11
  if (disabled) return null;
@@ -48,7 +48,6 @@ const ActionBarPrimitiveStopSpeaking = forwardRef((props, ref) => {
48
48
  return t3;
49
49
  });
50
50
  ActionBarPrimitiveStopSpeaking.displayName = "ActionBarPrimitive.StopSpeaking";
51
- //#endregion
52
51
  export { ActionBarPrimitiveStopSpeaking };
53
52
 
54
53
  //# sourceMappingURL=ActionBarStopSpeaking.js.map
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
3
  import { useAuiState } from "@assistant-ui/store";
4
- //#region src/primitives/actionBar/useActionBarFloatStatus.ts
4
+ // src/primitives/actionBar/useActionBarFloatStatus.ts
5
5
  const HideAndFloatStatus = {
6
6
  Hidden: "hidden",
7
7
  Floating: "floating",
@@ -29,7 +29,6 @@ const useActionBarFloatStatus = (t0) => {
29
29
  } else t1 = $[4];
30
30
  return useAuiState(t1);
31
31
  };
32
- //#endregion
33
32
  export { HideAndFloatStatus, useActionBarFloatStatus };
34
33
 
35
34
  //# sourceMappingURL=useActionBarFloatStatus.js.map
@@ -8,7 +8,7 @@ import { ActionBarPrimitiveStopSpeaking } from "./actionBar/ActionBarStopSpeakin
8
8
  import { ActionBarPrimitiveFeedbackPositive } from "./actionBar/ActionBarFeedbackPositive.js";
9
9
  import { ActionBarPrimitiveFeedbackNegative } from "./actionBar/ActionBarFeedbackNegative.js";
10
10
  import { ActionBarPrimitiveExportMarkdown } from "./actionBar/ActionBarExportMarkdown.js";
11
- //#region src/primitives/actionBar.ts
11
+ // src/primitives/actionBar.ts
12
12
  var actionBar_exports = /* @__PURE__ */ __exportAll({
13
13
  Copy: () => ActionBarPrimitiveCopy,
14
14
  Edit: () => ActionBarPrimitiveEdit,
@@ -20,7 +20,6 @@ var actionBar_exports = /* @__PURE__ */ __exportAll({
20
20
  Speak: () => ActionBarPrimitiveSpeak,
21
21
  StopSpeaking: () => ActionBarPrimitiveStopSpeaking
22
22
  });
23
- //#endregion
24
23
  export { ActionBarPrimitiveCopy as Copy, ActionBarPrimitiveEdit as Edit, ActionBarPrimitiveExportMarkdown as ExportMarkdown, ActionBarPrimitiveFeedbackNegative as FeedbackNegative, ActionBarPrimitiveFeedbackPositive as FeedbackPositive, ActionBarPrimitiveReload as Reload, ActionBarPrimitiveRoot as Root, ActionBarPrimitiveSpeak as Speak, ActionBarPrimitiveStopSpeaking as StopSpeaking, actionBar_exports };
25
24
 
26
25
  //# sourceMappingURL=actionBar.js.map
@@ -5,7 +5,7 @@ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { DropdownMenu } from "radix-ui";
8
- //#region src/primitives/actionBarMore/ActionBarMoreContent.tsx
8
+ // src/primitives/actionBarMore/ActionBarMoreContent.tsx
9
9
  const ActionBarMorePrimitiveContent = forwardRef((t0, forwardedRef) => {
10
10
  const $ = c(14);
11
11
  let __scopeActionBarMore;
@@ -56,7 +56,6 @@ const ActionBarMorePrimitiveContent = forwardRef((t0, forwardedRef) => {
56
56
  return t3;
57
57
  });
58
58
  ActionBarMorePrimitiveContent.displayName = "ActionBarMorePrimitive.Content";
59
- //#endregion
60
59
  export { ActionBarMorePrimitiveContent };
61
60
 
62
61
  //# sourceMappingURL=ActionBarMoreContent.js.map
@@ -4,7 +4,7 @@ import { DropdownMenuRenderItem } from "../dropdownMenuRenderPrimitives.js";
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { jsx } from "react/jsx-runtime";
7
- //#region src/primitives/actionBarMore/ActionBarMoreItem.tsx
7
+ // src/primitives/actionBarMore/ActionBarMoreItem.tsx
8
8
  const ActionBarMorePrimitiveItem = forwardRef((t0, ref) => {
9
9
  const $ = c(7);
10
10
  let __scopeActionBarMore;
@@ -34,7 +34,6 @@ const ActionBarMorePrimitiveItem = forwardRef((t0, ref) => {
34
34
  return t1;
35
35
  });
36
36
  ActionBarMorePrimitiveItem.displayName = "ActionBarMorePrimitive.Item";
37
- //#endregion
38
37
  export { ActionBarMorePrimitiveItem };
39
38
 
40
39
  //# sourceMappingURL=ActionBarMoreItem.js.map
@@ -5,7 +5,7 @@ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { DropdownMenu } from "radix-ui";
8
- //#region src/primitives/actionBarMore/ActionBarMoreRoot.tsx
8
+ // src/primitives/actionBarMore/ActionBarMoreRoot.tsx
9
9
  const ActionBarMorePrimitiveRoot = (t0) => {
10
10
  const $ = c(25);
11
11
  let __scopeActionBarMore;
@@ -116,7 +116,6 @@ const ActionBarMorePrimitiveRoot = (t0) => {
116
116
  return t8;
117
117
  };
118
118
  ActionBarMorePrimitiveRoot.displayName = "ActionBarMorePrimitive.Root";
119
- //#endregion
120
119
  export { ActionBarMorePrimitiveRoot };
121
120
 
122
121
  //# sourceMappingURL=ActionBarMoreRoot.js.map
@@ -4,7 +4,7 @@ import { DropdownMenuRenderSeparator } from "../dropdownMenuRenderPrimitives.js"
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { jsx } from "react/jsx-runtime";
7
- //#region src/primitives/actionBarMore/ActionBarMoreSeparator.tsx
7
+ // src/primitives/actionBarMore/ActionBarMoreSeparator.tsx
8
8
  const ActionBarMorePrimitiveSeparator = forwardRef((t0, ref) => {
9
9
  const $ = c(7);
10
10
  let __scopeActionBarMore;
@@ -34,7 +34,6 @@ const ActionBarMorePrimitiveSeparator = forwardRef((t0, ref) => {
34
34
  return t1;
35
35
  });
36
36
  ActionBarMorePrimitiveSeparator.displayName = "ActionBarMorePrimitive.Separator";
37
- //#endregion
38
37
  export { ActionBarMorePrimitiveSeparator };
39
38
 
40
39
  //# sourceMappingURL=ActionBarMoreSeparator.js.map
@@ -4,7 +4,7 @@ import { DropdownMenuRenderTrigger } from "../dropdownMenuRenderPrimitives.js";
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  import { forwardRef } from "@assistant-ui/tap/react-shim";
6
6
  import { jsx } from "react/jsx-runtime";
7
- //#region src/primitives/actionBarMore/ActionBarMoreTrigger.tsx
7
+ // src/primitives/actionBarMore/ActionBarMoreTrigger.tsx
8
8
  const ActionBarMorePrimitiveTrigger = forwardRef((t0, ref) => {
9
9
  const $ = c(7);
10
10
  let __scopeActionBarMore;
@@ -34,7 +34,6 @@ const ActionBarMorePrimitiveTrigger = forwardRef((t0, ref) => {
34
34
  return t1;
35
35
  });
36
36
  ActionBarMorePrimitiveTrigger.displayName = "ActionBarMorePrimitive.Trigger";
37
- //#endregion
38
37
  export { ActionBarMorePrimitiveTrigger };
39
38
 
40
39
  //# sourceMappingURL=ActionBarMoreTrigger.js.map
@@ -1,7 +1,6 @@
1
1
  import { DropdownMenu } from "radix-ui";
2
- //#region src/primitives/actionBarMore/scope.ts
2
+ // src/primitives/actionBarMore/scope.ts
3
3
  const useDropdownMenuScope = DropdownMenu.createDropdownMenuScope();
4
- //#endregion
5
4
  export { useDropdownMenuScope };
6
5
 
7
6
  //# sourceMappingURL=scope.js.map