@assistant-ui/react 0.14.28 → 0.15.0

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 (190) hide show
  1. package/dist/client/ExternalThread.d.ts +11 -1
  2. package/dist/client/ExternalThread.d.ts.map +1 -1
  3. package/dist/client/ExternalThread.js +762 -516
  4. package/dist/client/ExternalThread.js.map +1 -1
  5. package/dist/client/InMemoryThreadList.js +3 -3
  6. package/dist/client/InMemoryThreadList.js.map +1 -1
  7. package/dist/context/index.d.ts +1 -8
  8. package/dist/context/index.js +1 -8
  9. package/dist/index.d.ts +1 -8
  10. package/dist/index.js +1 -8
  11. package/dist/legacy-runtime/cloud/auiV0.d.ts +12 -1
  12. package/dist/legacy-runtime/cloud/auiV0.d.ts.map +1 -1
  13. package/dist/legacy-runtime/cloud/auiV0.js +2 -1
  14. package/dist/legacy-runtime/cloud/auiV0.js.map +1 -1
  15. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts +1 -1
  16. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js +7 -6
  17. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js.map +1 -1
  18. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts.map +1 -1
  19. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js +30 -15
  20. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +1 -1
  21. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -1
  22. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +11 -7
  23. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -1
  24. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js +1 -0
  25. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js.map +1 -1
  26. package/dist/mcp-apps/McpAppRenderer.js +1 -1
  27. package/dist/mcp-apps/McpAppRenderer.js.map +1 -1
  28. package/dist/model-context/makeAssistantVisible.js +26 -25
  29. package/dist/model-context/makeAssistantVisible.js.map +1 -1
  30. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +3 -3
  31. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  32. package/dist/primitives/actionBar/ActionBarRoot.js +3 -3
  33. package/dist/primitives/actionBar/ActionBarRoot.js.map +1 -1
  34. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts +7 -6
  35. package/dist/primitives/actionBar/useActionBarFloatStatus.d.ts.map +1 -1
  36. package/dist/primitives/actionBar/useActionBarFloatStatus.js +10 -11
  37. package/dist/primitives/actionBar/useActionBarFloatStatus.js.map +1 -1
  38. package/dist/primitives/attachment/AttachmentRemove.js +4 -3
  39. package/dist/primitives/attachment/AttachmentRemove.js.map +1 -1
  40. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +4 -3
  41. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js.map +1 -1
  42. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  43. package/dist/primitives/composer/ComposerAddAttachment.js +11 -5
  44. package/dist/primitives/composer/ComposerAddAttachment.js.map +1 -1
  45. package/dist/primitives/composer/ComposerAttachmentDropzone.d.ts.map +1 -1
  46. package/dist/primitives/composer/ComposerAttachmentDropzone.js +2 -4
  47. package/dist/primitives/composer/ComposerAttachmentDropzone.js.map +1 -1
  48. package/dist/primitives/composer/ComposerInput.js +18 -16
  49. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  50. package/dist/primitives/composer/ComposerQuote.js +1 -1
  51. package/dist/primitives/composer/ComposerQuote.js.map +1 -1
  52. package/dist/primitives/composer/ComposerSend.js +1 -0
  53. package/dist/primitives/composer/ComposerSend.js.map +1 -1
  54. package/dist/primitives/composer/ComposerStopDictation.js +4 -3
  55. package/dist/primitives/composer/ComposerStopDictation.js.map +1 -1
  56. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  57. package/dist/primitives/composer/trigger/triggerSelectionResource.js +3 -3
  58. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
  59. package/dist/primitives/message/MessagePartsGrouped.d.ts.map +1 -1
  60. package/dist/primitives/message/MessagePartsGrouped.js +67 -89
  61. package/dist/primitives/message/MessagePartsGrouped.js.map +1 -1
  62. package/dist/primitives/message/MessageRoot.js +3 -3
  63. package/dist/primitives/message/MessageRoot.js.map +1 -1
  64. package/dist/primitives/queueItem/QueueItemRemove.js +4 -3
  65. package/dist/primitives/queueItem/QueueItemRemove.js.map +1 -1
  66. package/dist/primitives/queueItem/QueueItemSteer.js +4 -3
  67. package/dist/primitives/queueItem/QueueItemSteer.js.map +1 -1
  68. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +1 -1
  69. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js.map +1 -1
  70. package/dist/primitives/suggestion/SuggestionTrigger.js +17 -15
  71. package/dist/primitives/suggestion/SuggestionTrigger.js.map +1 -1
  72. package/dist/primitives/thread/ThreadScrollToBottom.js +1 -0
  73. package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -1
  74. package/dist/unstable/useComposerInput.js +2 -2
  75. package/dist/unstable/useComposerInput.js.map +1 -1
  76. package/dist/unstable/useComposerInputHistory.js +6 -6
  77. package/dist/unstable/useComposerInputHistory.js.map +1 -1
  78. package/dist/unstable/useMentionAdapter.js +1 -1
  79. package/dist/unstable/useMentionAdapter.js.map +1 -1
  80. package/dist/utils/hooks/useOnResizeContent.js +1 -0
  81. package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
  82. package/dist/utils/hooks/useSizeHandle.js +1 -0
  83. package/dist/utils/hooks/useSizeHandle.js.map +1 -1
  84. package/dist/utils/smooth/SmoothContext.js +3 -3
  85. package/dist/utils/smooth/SmoothContext.js.map +1 -1
  86. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  87. package/dist/utils/smooth/useSmooth.js +3 -3
  88. package/dist/utils/smooth/useSmooth.js.map +1 -1
  89. package/package.json +9 -9
  90. package/src/client/ExternalThread.ts +345 -56
  91. package/src/client/InMemoryThreadList.ts +3 -3
  92. package/src/context/index.ts +0 -44
  93. package/src/legacy-runtime/cloud/auiV0.ts +14 -0
  94. package/src/legacy-runtime/runtime-cores/assistant-transport/commandQueue.ts +4 -1
  95. package/src/legacy-runtime/runtime-cores/assistant-transport/runManager.ts +37 -10
  96. package/src/legacy-runtime/runtime-cores/assistant-transport/transport-delivery.test.tsx +79 -0
  97. package/src/legacy-runtime/runtime-cores/assistant-transport/transport-parentid.test.tsx +97 -0
  98. package/src/legacy-runtime/runtime-cores/assistant-transport/transport-scheduling.test.ts +113 -2
  99. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransport.spec.md +10 -2
  100. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.test.tsx +185 -0
  101. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.ts +21 -5
  102. package/src/mcp-apps/McpAppRenderer.tsx +1 -1
  103. package/src/model-context/makeAssistantVisible.test.tsx +1 -1
  104. package/src/model-context/makeAssistantVisible.tsx +1 -1
  105. package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +1 -1
  106. package/src/primitives/actionBar/useActionBarFloatStatus.ts +7 -5
  107. package/src/primitives/attachment/AttachmentRemove.ts +1 -1
  108. package/src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.ts +1 -1
  109. package/src/primitives/composer/ComposerAddAttachment.test.tsx +108 -0
  110. package/src/primitives/composer/ComposerAddAttachment.ts +11 -5
  111. package/src/primitives/composer/ComposerAttachmentDropzone.test.tsx +5 -4
  112. package/src/primitives/composer/ComposerAttachmentDropzone.tsx +4 -3
  113. package/src/primitives/composer/ComposerInput.test.tsx +104 -7
  114. package/src/primitives/composer/ComposerInput.tsx +22 -20
  115. package/src/primitives/composer/ComposerQuote.tsx +1 -1
  116. package/src/primitives/composer/ComposerStopDictation.ts +1 -1
  117. package/src/primitives/composer/trigger/triggerSelectionResource.ts +7 -9
  118. package/src/primitives/message/MessagePartsGrouped.tsx +6 -8
  119. package/src/primitives/message/MessageRoot.tsx +1 -1
  120. package/src/primitives/queueItem/QueueItemRemove.ts +1 -1
  121. package/src/primitives/queueItem/QueueItemSteer.ts +1 -1
  122. package/src/primitives/selectionToolbar/SelectionToolbarQuote.tsx +1 -1
  123. package/src/primitives/suggestion/SuggestionTrigger.ts +9 -9
  124. package/src/tests/DataRenderers.test.tsx +212 -0
  125. package/src/tests/RemoteThreadListRuntime.adapterProvider.test.tsx +1 -11
  126. package/src/tests/RemoteThreadListRuntime.deferredProvider.test.tsx +3 -3
  127. package/src/tests/external-thread-attachments.test.tsx +300 -11
  128. package/src/tests/external-thread-branches.test.tsx +10 -10
  129. package/src/tests/external-thread-parity.test.tsx +230 -0
  130. package/src/tests/generative-ui.test.tsx +1 -46
  131. package/src/tests/local-runtime-queue.test.tsx +29 -34
  132. package/src/tests/messagePartSwitchRace.test.tsx +46 -15
  133. package/src/tests/messagePartTypeMismatch.test.tsx +2 -2
  134. package/src/tests/threadMessageById.test.tsx +0 -7
  135. package/src/unstable/useComposerInput.test.tsx +2 -2
  136. package/src/unstable/useComposerInput.ts +2 -2
  137. package/src/unstable/useComposerInputHistory.test.tsx +3 -3
  138. package/src/unstable/useComposerInputHistory.ts +6 -6
  139. package/src/unstable/useMentionAdapter.ts +1 -1
  140. package/src/utils/smooth/SmoothContext.tsx +1 -1
  141. package/src/utils/smooth/useSmooth.test.tsx +1 -1
  142. package/src/utils/smooth/useSmooth.ts +8 -5
  143. package/dist/context/react/utils/createStateHookForRuntime.d.ts +0 -34
  144. package/dist/context/react/utils/createStateHookForRuntime.d.ts.map +0 -1
  145. package/dist/context/react/utils/createStateHookForRuntime.js +0 -21
  146. package/dist/context/react/utils/createStateHookForRuntime.js.map +0 -1
  147. package/dist/legacy-runtime/hooks/AssistantContext.d.ts +0 -74
  148. package/dist/legacy-runtime/hooks/AssistantContext.d.ts.map +0 -1
  149. package/dist/legacy-runtime/hooks/AssistantContext.js +0 -29
  150. package/dist/legacy-runtime/hooks/AssistantContext.js.map +0 -1
  151. package/dist/legacy-runtime/hooks/AttachmentContext.d.ts +0 -1007
  152. package/dist/legacy-runtime/hooks/AttachmentContext.d.ts.map +0 -1
  153. package/dist/legacy-runtime/hooks/AttachmentContext.js +0 -47
  154. package/dist/legacy-runtime/hooks/AttachmentContext.js.map +0 -1
  155. package/dist/legacy-runtime/hooks/ComposerContext.d.ts +0 -141
  156. package/dist/legacy-runtime/hooks/ComposerContext.d.ts.map +0 -1
  157. package/dist/legacy-runtime/hooks/ComposerContext.js +0 -65
  158. package/dist/legacy-runtime/hooks/ComposerContext.js.map +0 -1
  159. package/dist/legacy-runtime/hooks/MessageContext.d.ts +0 -155
  160. package/dist/legacy-runtime/hooks/MessageContext.d.ts.map +0 -1
  161. package/dist/legacy-runtime/hooks/MessageContext.js +0 -68
  162. package/dist/legacy-runtime/hooks/MessageContext.js.map +0 -1
  163. package/dist/legacy-runtime/hooks/MessagePartContext.d.ts +0 -44
  164. package/dist/legacy-runtime/hooks/MessagePartContext.d.ts.map +0 -1
  165. package/dist/legacy-runtime/hooks/MessagePartContext.js +0 -26
  166. package/dist/legacy-runtime/hooks/MessagePartContext.js.map +0 -1
  167. package/dist/legacy-runtime/hooks/ThreadContext.d.ts +0 -139
  168. package/dist/legacy-runtime/hooks/ThreadContext.d.ts.map +0 -1
  169. package/dist/legacy-runtime/hooks/ThreadContext.js +0 -84
  170. package/dist/legacy-runtime/hooks/ThreadContext.js.map +0 -1
  171. package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts +0 -44
  172. package/dist/legacy-runtime/hooks/ThreadListItemContext.d.ts.map +0 -1
  173. package/dist/legacy-runtime/hooks/ThreadListItemContext.js +0 -26
  174. package/dist/legacy-runtime/hooks/ThreadListItemContext.js.map +0 -1
  175. package/src/context/react/utils/createStateHookForRuntime.ts +0 -82
  176. package/src/legacy-runtime/hooks/AssistantContext.ts +0 -67
  177. package/src/legacy-runtime/hooks/AttachmentContext.ts +0 -99
  178. package/src/legacy-runtime/hooks/ComposerContext.ts +0 -131
  179. package/src/legacy-runtime/hooks/MessageContext.ts +0 -127
  180. package/src/legacy-runtime/hooks/MessagePartContext.ts +0 -32
  181. package/src/legacy-runtime/hooks/ThreadContext.ts +0 -120
  182. package/src/legacy-runtime/hooks/ThreadListItemContext.ts +0 -36
  183. package/src/tests/BaseComposerRuntimeCore.test.ts +0 -621
  184. package/src/tests/BaseSubscribable.test.ts +0 -54
  185. package/src/tests/DataRenderers.test.ts +0 -355
  186. package/src/tests/ExternalStoreThreadRuntimeCore.test.ts +0 -685
  187. package/src/tests/LocalThreadRuntimeCore.test.ts +0 -324
  188. package/src/tests/auiV0Encode.test.ts +0 -188
  189. package/src/tests/external-message-converter.test.ts +0 -346
  190. package/src/tests/shouldContinue.test.ts +0 -122
@@ -1 +1 @@
1
- {"version":3,"file":"makeAssistantVisible.js","names":["c","_c","useEffect","useRef","forwardRef","ComponentType","ForwardedRef","PropsWithoutRef","useId","createContext","useContext","useAui","useComposedRefs","tool","click","parameters","type","properties","clickId","required","execute","escapedClickId","CSS","escape","el","document","querySelector","HTMLElement","Promise","resolve","setTimeout","setNativeValue","element","HTMLInputElement","HTMLTextAreaElement","value","prototype","setter","Object","getOwnPropertyDescriptor","set","call","edit","editId","escapedEditId","dispatchEvent","Event","bubbles","ReadableContext","makeAssistantVisible","Component","T","config","clickable","editable","ReadableComponent","props","outerRef","$","isNestedReadable","componentRef","aui","t0","Symbol","for","t1","t2","modelContext","register","getModelContext","tools","system","current","outerHTML","undefined","ref","t3","t4","t5","t6","displayName"],"sources":["../../src/model-context/makeAssistantVisible.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useRef,\n forwardRef,\n type ComponentType,\n type ForwardedRef,\n type PropsWithoutRef,\n useId,\n createContext,\n useContext,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { tool } from \"@assistant-ui/core\";\n\nconst click = tool({\n parameters: {\n type: \"object\",\n properties: {\n clickId: {\n type: \"string\",\n },\n },\n required: [\"clickId\"],\n },\n execute: async ({ clickId }: { clickId: string }) => {\n const escapedClickId = CSS.escape(clickId);\n const el = document.querySelector(`[data-click-id='${escapedClickId}']`);\n if (el instanceof HTMLElement) {\n el.click();\n\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst setNativeValue = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value: string,\n) => {\n const prototype =\n element instanceof HTMLInputElement\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype;\n const setter = Object.getOwnPropertyDescriptor(prototype, \"value\")?.set;\n\n if (setter) {\n setter.call(element, value);\n } else {\n element.value = value;\n }\n};\n\nconst edit = tool({\n parameters: {\n type: \"object\",\n properties: {\n editId: {\n type: \"string\",\n },\n value: {\n type: \"string\",\n },\n },\n required: [\"editId\", \"value\"],\n },\n execute: async ({ editId, value }: { editId: string; value: string }) => {\n const escapedEditId = CSS.escape(editId);\n const el = document.querySelector(`[data-edit-id='${escapedEditId}']`);\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n setNativeValue(el, value);\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n el.dispatchEvent(new Event(\"change\", { bubbles: true }));\n\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst ReadableContext = createContext<boolean>(false);\n\nexport const makeAssistantVisible = <T extends ComponentType<any>>(\n Component: T,\n config?: { clickable?: boolean | undefined; editable?: boolean | undefined },\n) => {\n const ReadableComponent = forwardRef(\n (props: PropsWithoutRef<T>, outerRef: ForwardedRef<any>) => {\n const isNestedReadable = useContext(ReadableContext);\n\n const clickId = useId();\n const componentRef = useRef<HTMLElement>(null);\n\n const aui = useAui();\n\n const { clickable, editable } = config ?? {};\n useEffect(() => {\n return aui.modelContext().register({\n getModelContext: () => {\n return {\n tools: {\n ...(clickable ? { click } : {}),\n ...(editable ? { edit } : {}),\n },\n system: !isNestedReadable // only pass content if this readable isn't nested in another readable\n ? componentRef.current?.outerHTML\n : undefined,\n };\n },\n });\n }, [isNestedReadable, aui, clickable, editable]);\n\n const ref = useComposedRefs(componentRef, outerRef);\n\n return (\n <ReadableContext.Provider value={true}>\n <Component\n {...(props as any)}\n {...(config?.clickable ? { \"data-click-id\": clickId } : {})}\n {...(config?.editable ? { \"data-edit-id\": clickId } : {})}\n ref={ref}\n />\n </ReadableContext.Provider>\n );\n },\n );\n\n ReadableComponent.displayName = Component.displayName;\n\n return ReadableComponent as unknown as T;\n};\n\nexport default makeAssistantVisible;\n"],"mappings":"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"}
1
+ {"version":3,"file":"makeAssistantVisible.js","names":["c","_c","useEffect","useRef","forwardRef","ComponentType","ForwardedRef","PropsWithoutRef","useId","createContext","useContext","useAui","useComposedRefs","tool","click","parameters","type","properties","clickId","required","execute","escapedClickId","CSS","escape","el","document","querySelector","HTMLElement","Promise","resolve","setTimeout","setNativeValue","element","HTMLInputElement","HTMLTextAreaElement","value","prototype","setter","Object","getOwnPropertyDescriptor","set","call","edit","editId","escapedEditId","dispatchEvent","Event","bubbles","ReadableContext","makeAssistantVisible","Component","T","config","clickable","editable","ReadableComponent","props","outerRef","$","isNestedReadable","componentRef","aui","t0","Symbol","for","t1","modelContext","register","getModelContext","tools","system","current","outerHTML","undefined","t2","ref","t3","t4","t5","t6","displayName"],"sources":["../../src/model-context/makeAssistantVisible.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useEffect,\n useRef,\n forwardRef,\n type ComponentType,\n type ForwardedRef,\n type PropsWithoutRef,\n useId,\n createContext,\n useContext,\n} from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { tool } from \"@assistant-ui/core\";\n\nconst click = tool({\n parameters: {\n type: \"object\",\n properties: {\n clickId: {\n type: \"string\",\n },\n },\n required: [\"clickId\"],\n },\n execute: async ({ clickId }: { clickId: string }) => {\n const escapedClickId = CSS.escape(clickId);\n const el = document.querySelector(`[data-click-id='${escapedClickId}']`);\n if (el instanceof HTMLElement) {\n el.click();\n\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst setNativeValue = (\n element: HTMLInputElement | HTMLTextAreaElement,\n value: string,\n) => {\n const prototype =\n element instanceof HTMLInputElement\n ? HTMLInputElement.prototype\n : HTMLTextAreaElement.prototype;\n const setter = Object.getOwnPropertyDescriptor(prototype, \"value\")?.set;\n\n if (setter) {\n setter.call(element, value);\n } else {\n element.value = value;\n }\n};\n\nconst edit = tool({\n parameters: {\n type: \"object\",\n properties: {\n editId: {\n type: \"string\",\n },\n value: {\n type: \"string\",\n },\n },\n required: [\"editId\", \"value\"],\n },\n execute: async ({ editId, value }: { editId: string; value: string }) => {\n const escapedEditId = CSS.escape(editId);\n const el = document.querySelector(`[data-edit-id='${escapedEditId}']`);\n if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n setNativeValue(el, value);\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n el.dispatchEvent(new Event(\"change\", { bubbles: true }));\n\n // todo make adjustable\n await new Promise((resolve) => setTimeout(resolve, 2000));\n return {};\n } else {\n return \"Element not found\";\n }\n },\n});\n\nconst ReadableContext = createContext<boolean>(false);\n\nexport const makeAssistantVisible = <T extends ComponentType<any>>(\n Component: T,\n config?: { clickable?: boolean | undefined; editable?: boolean | undefined },\n) => {\n const ReadableComponent = forwardRef(\n (props: PropsWithoutRef<T>, outerRef: ForwardedRef<any>) => {\n const isNestedReadable = useContext(ReadableContext);\n\n const clickId = useId();\n const componentRef = useRef<HTMLElement>(null);\n\n const aui = useAui();\n\n const { clickable, editable } = config ?? {};\n useEffect(() => {\n return aui.modelContext.register({\n getModelContext: () => {\n return {\n tools: {\n ...(clickable ? { click } : {}),\n ...(editable ? { edit } : {}),\n },\n system: !isNestedReadable // only pass content if this readable isn't nested in another readable\n ? componentRef.current?.outerHTML\n : undefined,\n };\n },\n });\n }, [isNestedReadable, aui, clickable, editable]);\n\n const ref = useComposedRefs(componentRef, outerRef);\n\n return (\n <ReadableContext.Provider value={true}>\n <Component\n {...(props as any)}\n {...(config?.clickable ? { \"data-click-id\": clickId } : {})}\n {...(config?.editable ? { \"data-edit-id\": clickId } : {})}\n ref={ref}\n />\n </ReadableContext.Provider>\n );\n },\n );\n\n ReadableComponent.displayName = Component.displayName;\n\n return ReadableComponent as unknown as T;\n};\n\nexport default makeAssistantVisible;\n"],"mappings":"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"}
@@ -18,9 +18,9 @@ const useActionBarExportMarkdown = (t0) => {
18
18
  const aui = useAui();
19
19
  const hasExportableContent = useAuiState(_temp2);
20
20
  let t2;
21
- if ($[2] !== aui || $[3] !== filename || $[4] !== onExport) {
21
+ if ($[2] !== aui.message || $[3] !== filename || $[4] !== onExport) {
22
22
  t2 = async () => {
23
- const content = aui.message().getCopyText();
23
+ const content = aui.message.getCopyText();
24
24
  if (!content) return;
25
25
  if (onExport) {
26
26
  await onExport(content);
@@ -34,7 +34,7 @@ const useActionBarExportMarkdown = (t0) => {
34
34
  a.click();
35
35
  URL.revokeObjectURL(url);
36
36
  };
37
- $[2] = aui;
37
+ $[2] = aui.message;
38
38
  $[3] = filename;
39
39
  $[4] = onExport;
40
40
  $[5] = t2;
@@ -1 +1 @@
1
- {"version":3,"file":"ActionBarExportMarkdown.js","names":["c","_c","forwardRef","useCallback","ActionButtonProps","composeEventHandlers","Primitive","useAuiState","useAui","useActionBarExportMarkdown","t0","$","t1","undefined","filename","onExport","aui","hasExportableContent","_temp2","t2","content","message","getCopyText","blob","Blob","type","url","URL","createObjectURL","a","document","createElement","href","download","Date","now","click","revokeObjectURL","callback","ActionBarPrimitiveExportMarkdown","Element","HTMLButtonElement","Props","forwardedRef","disabled","onClick","props","t3","t4","t5","displayName","_temp","text","length","s","role","status","parts","some"],"sources":["../../../src/primitives/actionBar/ActionBarExportMarkdown.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useCallback } from \"react\";\nimport type { ActionButtonProps } from \"../../utils/createActionButton\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport { useAuiState, useAui } from \"@assistant-ui/store\";\n\nconst useActionBarExportMarkdown = ({\n filename,\n onExport,\n}: {\n filename?: string | undefined;\n onExport?: ((content: string) => void | Promise<void>) | undefined;\n} = {}) => {\n const aui = useAui();\n const hasExportableContent = useAuiState((s) => {\n return (\n (s.message.role !== \"assistant\" ||\n s.message.status?.type !== \"running\") &&\n s.message.parts.some((c) => c.type === \"text\" && c.text.length > 0)\n );\n });\n\n const callback = useCallback(async () => {\n const content = aui.message().getCopyText();\n if (!content) return;\n\n if (onExport) {\n await onExport(content);\n return;\n }\n\n const blob = new Blob([content], { type: \"text/markdown\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename ?? `message-${Date.now()}.md`;\n a.click();\n URL.revokeObjectURL(url);\n }, [aui, filename, onExport]);\n\n if (!hasExportableContent) return null;\n return callback;\n};\n\nexport namespace ActionBarPrimitiveExportMarkdown {\n export type Element = HTMLButtonElement;\n export type Props = ActionButtonProps<typeof useActionBarExportMarkdown>;\n}\n\nexport const ActionBarPrimitiveExportMarkdown = forwardRef<\n ActionBarPrimitiveExportMarkdown.Element,\n ActionBarPrimitiveExportMarkdown.Props\n>(({ filename, onExport, onClick, disabled, ...props }, forwardedRef) => {\n const callback = useActionBarExportMarkdown({ filename, onExport });\n return (\n <Primitive.button\n type=\"button\"\n {...props}\n ref={forwardedRef}\n disabled={disabled || !callback}\n onClick={composeEventHandlers(onClick, () => {\n callback?.();\n })}\n />\n );\n});\n\nActionBarPrimitiveExportMarkdown.displayName =\n \"ActionBarPrimitive.ExportMarkdown\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"ActionBarExportMarkdown.js","names":["c","_c","forwardRef","useCallback","ActionButtonProps","composeEventHandlers","Primitive","useAuiState","useAui","useActionBarExportMarkdown","t0","$","t1","undefined","filename","onExport","aui","hasExportableContent","_temp2","t2","message","content","getCopyText","blob","Blob","type","url","URL","createObjectURL","a","document","createElement","href","download","Date","now","click","revokeObjectURL","callback","ActionBarPrimitiveExportMarkdown","Element","HTMLButtonElement","Props","forwardedRef","disabled","onClick","props","t3","t4","t5","displayName","_temp","text","length","s","role","status","parts","some"],"sources":["../../../src/primitives/actionBar/ActionBarExportMarkdown.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useCallback } from \"react\";\nimport type { ActionButtonProps } from \"../../utils/createActionButton\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive } from \"../../utils/Primitive\";\nimport { useAuiState, useAui } from \"@assistant-ui/store\";\n\nconst useActionBarExportMarkdown = ({\n filename,\n onExport,\n}: {\n filename?: string | undefined;\n onExport?: ((content: string) => void | Promise<void>) | undefined;\n} = {}) => {\n const aui = useAui();\n const hasExportableContent = useAuiState((s) => {\n return (\n (s.message.role !== \"assistant\" ||\n s.message.status?.type !== \"running\") &&\n s.message.parts.some((c) => c.type === \"text\" && c.text.length > 0)\n );\n });\n\n const callback = useCallback(async () => {\n const content = aui.message.getCopyText();\n if (!content) return;\n\n if (onExport) {\n await onExport(content);\n return;\n }\n\n const blob = new Blob([content], { type: \"text/markdown\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename ?? `message-${Date.now()}.md`;\n a.click();\n URL.revokeObjectURL(url);\n }, [aui, filename, onExport]);\n\n if (!hasExportableContent) return null;\n return callback;\n};\n\nexport namespace ActionBarPrimitiveExportMarkdown {\n export type Element = HTMLButtonElement;\n export type Props = ActionButtonProps<typeof useActionBarExportMarkdown>;\n}\n\nexport const ActionBarPrimitiveExportMarkdown = forwardRef<\n ActionBarPrimitiveExportMarkdown.Element,\n ActionBarPrimitiveExportMarkdown.Props\n>(({ filename, onExport, onClick, disabled, ...props }, forwardedRef) => {\n const callback = useActionBarExportMarkdown({ filename, onExport });\n return (\n <Primitive.button\n type=\"button\"\n {...props}\n ref={forwardedRef}\n disabled={disabled || !callback}\n onClick={composeEventHandlers(onClick, () => {\n callback?.();\n })}\n />\n );\n});\n\nActionBarPrimitiveExportMarkdown.displayName =\n \"ActionBarPrimitive.ExportMarkdown\";\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { Primitive } from "../../utils/Primitive.js";
3
- import { useActionBarFloatStatus } from "./useActionBarFloatStatus.js";
3
+ import { HideAndFloatStatus, useActionBarFloatStatus } from "./useActionBarFloatStatus.js";
4
4
  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";
@@ -82,10 +82,10 @@ const ActionBarPrimitiveRoot = forwardRef((t0, ref) => {
82
82
  $[11] = t4;
83
83
  } else t4 = $[11];
84
84
  const hideAndfloatStatus = useActionBarFloatStatus(t4);
85
- if (hideAndfloatStatus === "hidden") return null;
85
+ if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;
86
86
  let t5;
87
87
  if ($[12] !== hideAndfloatStatus) {
88
- t5 = hideAndfloatStatus === "floating" ? { "data-floating": "true" } : null;
88
+ t5 = hideAndfloatStatus === HideAndFloatStatus.Floating ? { "data-floating": "true" } : null;
89
89
  $[12] = hideAndfloatStatus;
90
90
  $[13] = t5;
91
91
  } else t5 = $[13];
@@ -1 +1 @@
1
- {"version":3,"file":"ActionBarRoot.js","names":["c","_c","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","useCallback","useMemo","useState","useActionBarFloatStatus","HideAndFloatStatus","ActionBarInteractionContext","PrimitiveDivProps","div","ActionBarPrimitiveRoot","Element","Props","hideWhenRunning","autohide","autohideFloat","t0","ref","$","rest","interactionCount","setInteractionCount","t1","Symbol","for","released","_temp","_temp2","acquireInteractionLock","t2","interactionContext","t3","t4","forceVisible","hideAndfloatStatus","Hidden","t5","Floating","t6","displayName","count","count_0","Math","max"],"sources":["../../../src/primitives/actionBar/ActionBarRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport {\n useActionBarFloatStatus,\n HideAndFloatStatus,\n} from \"./useActionBarFloatStatus\";\nimport { ActionBarInteractionContext } from \"./ActionBarInteractionContext\";\n\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport namespace ActionBarPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = PrimitiveDivProps & {\n /**\n * Whether to hide the action bar when the thread is running.\n * @default false\n */\n hideWhenRunning?: boolean | undefined;\n /**\n * Controls when the action bar should automatically hide.\n * - \"always\": Always hide unless hovered\n * - \"not-last\": Hide unless this is the last message\n * - \"never\": Never auto-hide\n * @default \"never\"\n */\n autohide?: \"always\" | \"not-last\" | \"never\" | undefined;\n /**\n * Controls floating behavior when auto-hidden.\n * - \"always\": Always float when hidden\n * - \"single-branch\": Float only for single-branch messages\n * - \"never\": Never float\n * @default \"never\"\n */\n autohideFloat?: \"always\" | \"single-branch\" | \"never\" | undefined;\n };\n}\n\n/**\n * The root container for action bar components.\n *\n * This component provides intelligent visibility and floating behavior for action bars,\n * automatically hiding and showing based on message state, hover status, and configuration.\n * It supports floating mode for better UX when space is limited.\n *\n * @example\n * ```tsx\n * <ActionBarPrimitive.Root\n * hideWhenRunning={true}\n * autohide=\"not-last\"\n * autohideFloat=\"single-branch\"\n * >\n * <ActionBarPrimitive.Copy />\n * <ActionBarPrimitive.Edit />\n * <ActionBarPrimitive.Reload />\n * </ActionBarPrimitive.Root>\n * ```\n */\nexport const ActionBarPrimitiveRoot = forwardRef<\n ActionBarPrimitiveRoot.Element,\n ActionBarPrimitiveRoot.Props\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const [interactionCount, setInteractionCount] = useState(0);\n\n const acquireInteractionLock = useCallback(() => {\n let released = false;\n\n setInteractionCount((count) => count + 1);\n\n return () => {\n if (released) return;\n released = true;\n setInteractionCount((count) => Math.max(0, count - 1));\n };\n }, []);\n\n const interactionContext = useMemo(\n () => ({ acquireInteractionLock }),\n [acquireInteractionLock],\n );\n\n const hideAndfloatStatus = useActionBarFloatStatus({\n hideWhenRunning,\n autohide,\n autohideFloat,\n forceVisible: interactionCount > 0,\n });\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <ActionBarInteractionContext.Provider value={interactionContext}>\n <Primitive.div\n {...(hideAndfloatStatus === HideAndFloatStatus.Floating\n ? { \"data-floating\": \"true\" }\n : null)}\n {...rest}\n ref={ref}\n />\n </ActionBarInteractionContext.Provider>\n );\n});\n\nActionBarPrimitiveRoot.displayName = \"ActionBarPrimitive.Root\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEA,MAAac,yBAAyBV,YAGpCgB,IAAAC,QAAA;CAAA,MAAAC,IAAArB,EAAA,EAAA;CAAA,IAAAiB;CAAA,IAAAC;CAAA,IAAAF;CAAA,IAAAM;CAAA,IAAAD,EAAA,OAAAF,IAAA;EAAC,CAAA,CAAAH,iBAAAC,UAAAC,kBAAAI,QAAAH;EAAqDE,EAAA,KAAAF;EAAAE,EAAA,KAAAJ;EAAAI,EAAA,KAAAH;EAAAG,EAAA,KAAAL;EAAAK,EAAA,KAAAC;CAAA,OAAA;EAAAL,WAAAI,EAAA;EAAAH,gBAAAG,EAAA;EAAAL,kBAAAK,EAAA;EAAAC,OAAAD,EAAA;CAAA;CACtD,MAAA,CAAAE,kBAAAC,uBAAgDjB,SAAS,CAAC;CAAE,IAAAkB;CAAA,IAAAJ,EAAA,OAAAK,OAAAC,IAAA,2BAAA,GAAA;EAEjBF,WAAA;GACzC,IAAAG,WAAe;GAEfJ,oBAAoBK,KAAoB;GAAC,aAElC;IACL,IAAID,UAAQ;IACZA,WAAWA;IACXJ,oBAAoBM,MAAiC;GAAC;EACvD;EACFT,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAVD,MAAAU,yBAA+BN;CAUxB,IAAAO;CAAA,IAAAX,EAAA,OAAAK,OAAAC,IAAA,2BAAA,GAAA;EAGEK,KAAA,EAAAD,uBAAyB;EAACV,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CADnC,MAAAY,qBACSD;CAQO,MAAAE,KAAAX,mBAAmB;CAAC,IAAAY;CAAA,IAAAd,EAAA,OAAAJ,YAAAI,EAAA,OAAAH,iBAAAG,EAAA,OAAAL,mBAAAK,EAAA,QAAAa,IAAA;EAJeC,KAAA;GAAAnB;GAAAC;GAAAC;GAAAkB,cAInCF;EAChB;EAACb,EAAA,KAAAJ;EAAAI,EAAA,KAAAH;EAAAG,EAAA,KAAAL;EAAAK,EAAA,MAAAa;EAAAb,EAAA,MAAAc;CAAA,OAAAA,KAAAd,EAAA;CALD,MAAAgB,qBAA2B7B,wBAAwB2B,EAKlD;CAED,IAAIE,uBAAAA,UAAgD,OAAS;CAAK,IAAAE;CAAA,IAAAlB,EAAA,QAAAgB,oBAAA;EAKvDE,KAAAF,uBAAAA,aAAA,EAAA,iBACkB,OAChB,IAFF;EAEGhB,EAAA,MAAAgB;EAAAhB,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAoB;CAAA,IAAApB,EAAA,QAAAD,OAAAC,EAAA,QAAAC,QAAAD,EAAA,QAAAkB,IAAA;EAJZE,KAAA,oBAAA,4BAAA,UAAA;GAA6CR,OAAAA;GAC3C,UAAA,oBAAA,UAAA,KAAA;IAAA,GACOM;IAEG,GACJjB;IACCF;GAAG,CAAA;EAEZ,CAAA;EAAuCC,EAAA,MAAAD;EAAAC,EAAA,MAAAC;EAAAD,EAAA,MAAAkB;EAAAlB,EAAA,MAAAoB;CAAA,OAAAA,KAAApB,EAAA;CAAA,OARvCoB;AAQuC,CAE1C;AAED5B,uBAAuB6B,cAAc;AA1CnC,SAAAb,MAAAc,OAAA;CAAA,OAMiCA,QAAQ;AAAC;AAN1C,SAAAb,OAAAc,SAAA;CAAA,OAWmCC,KAAIC,IAAK,GAAGH,UAAQ,CAAC;AAAC"}
1
+ {"version":3,"file":"ActionBarRoot.js","names":["c","_c","Primitive","ComponentRef","forwardRef","ComponentPropsWithoutRef","useCallback","useMemo","useState","useActionBarFloatStatus","HideAndFloatStatus","ActionBarInteractionContext","PrimitiveDivProps","div","ActionBarPrimitiveRoot","Element","Props","hideWhenRunning","autohide","autohideFloat","t0","ref","$","rest","interactionCount","setInteractionCount","t1","Symbol","for","released","_temp","_temp2","acquireInteractionLock","t2","interactionContext","t3","t4","forceVisible","hideAndfloatStatus","Hidden","t5","Floating","t6","displayName","count","count_0","Math","max"],"sources":["../../../src/primitives/actionBar/ActionBarRoot.tsx"],"sourcesContent":["\"use client\";\n\nimport { Primitive } from \"../../utils/Primitive\";\nimport {\n type ComponentRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n useCallback,\n useMemo,\n useState,\n} from \"react\";\nimport {\n useActionBarFloatStatus,\n HideAndFloatStatus,\n} from \"./useActionBarFloatStatus\";\nimport { ActionBarInteractionContext } from \"./ActionBarInteractionContext\";\n\ntype PrimitiveDivProps = ComponentPropsWithoutRef<typeof Primitive.div>;\n\nexport namespace ActionBarPrimitiveRoot {\n export type Element = ComponentRef<typeof Primitive.div>;\n export type Props = PrimitiveDivProps & {\n /**\n * Whether to hide the action bar when the thread is running.\n * @default false\n */\n hideWhenRunning?: boolean | undefined;\n /**\n * Controls when the action bar should automatically hide.\n * - \"always\": Always hide unless hovered\n * - \"not-last\": Hide unless this is the last message\n * - \"never\": Never auto-hide\n * @default \"never\"\n */\n autohide?: \"always\" | \"not-last\" | \"never\" | undefined;\n /**\n * Controls floating behavior when auto-hidden.\n * - \"always\": Always float when hidden\n * - \"single-branch\": Float only for single-branch messages\n * - \"never\": Never float\n * @default \"never\"\n */\n autohideFloat?: \"always\" | \"single-branch\" | \"never\" | undefined;\n };\n}\n\n/**\n * The root container for action bar components.\n *\n * This component provides intelligent visibility and floating behavior for action bars,\n * automatically hiding and showing based on message state, hover status, and configuration.\n * It supports floating mode for better UX when space is limited.\n *\n * @example\n * ```tsx\n * <ActionBarPrimitive.Root\n * hideWhenRunning={true}\n * autohide=\"not-last\"\n * autohideFloat=\"single-branch\"\n * >\n * <ActionBarPrimitive.Copy />\n * <ActionBarPrimitive.Edit />\n * <ActionBarPrimitive.Reload />\n * </ActionBarPrimitive.Root>\n * ```\n */\nexport const ActionBarPrimitiveRoot = forwardRef<\n ActionBarPrimitiveRoot.Element,\n ActionBarPrimitiveRoot.Props\n>(({ hideWhenRunning, autohide, autohideFloat, ...rest }, ref) => {\n const [interactionCount, setInteractionCount] = useState(0);\n\n const acquireInteractionLock = useCallback(() => {\n let released = false;\n\n setInteractionCount((count) => count + 1);\n\n return () => {\n if (released) return;\n released = true;\n setInteractionCount((count) => Math.max(0, count - 1));\n };\n }, []);\n\n const interactionContext = useMemo(\n () => ({ acquireInteractionLock }),\n [acquireInteractionLock],\n );\n\n const hideAndfloatStatus = useActionBarFloatStatus({\n hideWhenRunning,\n autohide,\n autohideFloat,\n forceVisible: interactionCount > 0,\n });\n\n if (hideAndfloatStatus === HideAndFloatStatus.Hidden) return null;\n\n return (\n <ActionBarInteractionContext.Provider value={interactionContext}>\n <Primitive.div\n {...(hideAndfloatStatus === HideAndFloatStatus.Floating\n ? { \"data-floating\": \"true\" }\n : null)}\n {...rest}\n ref={ref}\n />\n </ActionBarInteractionContext.Provider>\n );\n});\n\nActionBarPrimitiveRoot.displayName = \"ActionBarPrimitive.Root\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkEA,MAAac,yBAAyBV,YAGpCgB,IAAAC,QAAA;CAAA,MAAAC,IAAArB,EAAA,EAAA;CAAA,IAAAiB;CAAA,IAAAC;CAAA,IAAAF;CAAA,IAAAM;CAAA,IAAAD,EAAA,OAAAF,IAAA;EAAC,CAAA,CAAAH,iBAAAC,UAAAC,kBAAAI,QAAAH;EAAqDE,EAAA,KAAAF;EAAAE,EAAA,KAAAJ;EAAAI,EAAA,KAAAH;EAAAG,EAAA,KAAAL;EAAAK,EAAA,KAAAC;CAAA,OAAA;EAAAL,WAAAI,EAAA;EAAAH,gBAAAG,EAAA;EAAAL,kBAAAK,EAAA;EAAAC,OAAAD,EAAA;CAAA;CACtD,MAAA,CAAAE,kBAAAC,uBAAgDjB,SAAS,CAAC;CAAE,IAAAkB;CAAA,IAAAJ,EAAA,OAAAK,OAAAC,IAAA,2BAAA,GAAA;EAEjBF,WAAA;GACzC,IAAAG,WAAe;GAEfJ,oBAAoBK,KAAoB;GAAC,aAElC;IACL,IAAID,UAAQ;IACZA,WAAWA;IACXJ,oBAAoBM,MAAiC;GAAC;EACvD;EACFT,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAVD,MAAAU,yBAA+BN;CAUxB,IAAAO;CAAA,IAAAX,EAAA,OAAAK,OAAAC,IAAA,2BAAA,GAAA;EAGEK,KAAA,EAAAD,uBAAyB;EAACV,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CADnC,MAAAY,qBACSD;CAQO,MAAAE,KAAAX,mBAAmB;CAAC,IAAAY;CAAA,IAAAd,EAAA,OAAAJ,YAAAI,EAAA,OAAAH,iBAAAG,EAAA,OAAAL,mBAAAK,EAAA,QAAAa,IAAA;EAJeC,KAAA;GAAAnB;GAAAC;GAAAC;GAAAkB,cAInCF;EAChB;EAACb,EAAA,KAAAJ;EAAAI,EAAA,KAAAH;EAAAG,EAAA,KAAAL;EAAAK,EAAA,MAAAa;EAAAb,EAAA,MAAAc;CAAA,OAAAA,KAAAd,EAAA;CALD,MAAAgB,qBAA2B7B,wBAAwB2B,EAKlD;CAED,IAAIE,uBAAuB5B,mBAAkB6B,QAAO,OAAS;CAAK,IAAAC;CAAA,IAAAlB,EAAA,QAAAgB,oBAAA;EAKvDE,KAAAF,uBAAuB5B,mBAAkB+B,WAAzC,EAAA,iBACkB,OAChB,IAFF;EAEGnB,EAAA,MAAAgB;EAAAhB,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAoB;CAAA,IAAApB,EAAA,QAAAD,OAAAC,EAAA,QAAAC,QAAAD,EAAA,QAAAkB,IAAA;EAJZE,KAAA,oBAAA,4BAAA,UAAA;GAA6CR,OAAAA;GAC3C,UAAA,oBAAA,UAAA,KAAA;IAAA,GACOM;IAEG,GACJjB;IACCF;GAAG,CAAA;EAEZ,CAAA;EAAuCC,EAAA,MAAAD;EAAAC,EAAA,MAAAC;EAAAD,EAAA,MAAAkB;EAAAlB,EAAA,MAAAoB;CAAA,OAAAA,KAAApB,EAAA;CAAA,OARvCoB;AAQuC,CAE1C;AAED5B,uBAAuB6B,cAAc;AA1CnC,SAAAb,MAAAc,OAAA;CAAA,OAMiCA,QAAQ;AAAC;AAN1C,SAAAb,OAAAc,SAAA;CAAA,OAWmCC,KAAIC,IAAK,GAAGH,UAAQ,CAAC;AAAC"}
@@ -1,16 +1,17 @@
1
1
  //#region src/primitives/actionBar/useActionBarFloatStatus.d.ts
2
- declare enum HideAndFloatStatus {
3
- Hidden = "hidden",
4
- Floating = "floating",
5
- Normal = "normal"
6
- }
2
+ declare const HideAndFloatStatus: {
3
+ readonly Hidden: "hidden";
4
+ readonly Floating: "floating";
5
+ readonly Normal: "normal";
6
+ };
7
+ type HideAndFloatStatus = (typeof HideAndFloatStatus)[keyof typeof HideAndFloatStatus];
7
8
  type UseActionBarFloatStatusProps = {
8
9
  hideWhenRunning?: boolean | undefined;
9
10
  autohide?: "always" | "not-last" | "never" | undefined;
10
11
  autohideFloat?: "always" | "single-branch" | "never" | undefined;
11
12
  forceVisible?: boolean | undefined;
12
13
  };
13
- declare const useActionBarFloatStatus: ({ hideWhenRunning, autohide, autohideFloat, forceVisible }: UseActionBarFloatStatusProps) => HideAndFloatStatus;
14
+ declare const useActionBarFloatStatus: ({ hideWhenRunning, autohide, autohideFloat, forceVisible }: UseActionBarFloatStatusProps) => "hidden" | "floating" | "normal";
14
15
  //#endregion
15
16
  export { HideAndFloatStatus, UseActionBarFloatStatusProps, useActionBarFloatStatus };
16
17
  //# sourceMappingURL=useActionBarFloatStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useActionBarFloatStatus.d.ts","names":[],"sources":["../../../src/primitives/actionBar/useActionBarFloatStatus.ts"],"mappings":";aAIY;EACV;EACA;EACA;;KAGU;EACV;EACA;EACA;EACA;;cAGW,4BAA2B,iBAAA,UAAA,eAAA,gBAKrC,iCAA4B"}
1
+ {"version":3,"file":"useActionBarFloatStatus.d.ts","names":[],"sources":["../../../src/primitives/actionBar/useActionBarFloatStatus.ts"],"mappings":";cAIa;;;;;KAKD,6BACF,iCAAiC;KAE/B;EACV;EACA;EACA;EACA;;cAGW,4BAA2B,iBAAA,UAAA,eAAA,gBAKrC"}
@@ -2,25 +2,24 @@
2
2
  import { useAuiState } from "@assistant-ui/store";
3
3
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
4
4
  //#region src/primitives/actionBar/useActionBarFloatStatus.ts
5
- let HideAndFloatStatus = /* @__PURE__ */ function(HideAndFloatStatus) {
6
- HideAndFloatStatus["Hidden"] = "hidden";
7
- HideAndFloatStatus["Floating"] = "floating";
8
- HideAndFloatStatus["Normal"] = "normal";
9
- return HideAndFloatStatus;
10
- }({});
5
+ const HideAndFloatStatus = {
6
+ Hidden: "hidden",
7
+ Floating: "floating",
8
+ Normal: "normal"
9
+ };
11
10
  const useActionBarFloatStatus = (t0) => {
12
11
  const $ = c(5);
13
12
  const { hideWhenRunning, autohide, autohideFloat, forceVisible } = t0;
14
13
  let t1;
15
14
  if ($[0] !== autohide || $[1] !== autohideFloat || $[2] !== forceVisible || $[3] !== hideWhenRunning) {
16
15
  t1 = (s) => {
17
- if (hideWhenRunning && s.thread.isRunning) return "hidden";
16
+ if (hideWhenRunning && s.thread.isRunning) return HideAndFloatStatus.Hidden;
18
17
  const autohideEnabled = autohide === "always" || autohide === "not-last" && !s.message.isLast;
19
18
  const isVisibleByInteraction = forceVisible || s.message.isHovering;
20
- if (!autohideEnabled) return "normal";
21
- if (!isVisibleByInteraction) return "hidden";
22
- if (autohideFloat === "always" || autohideFloat === "single-branch" && s.message.branchCount <= 1) return "floating";
23
- return "normal";
19
+ if (!autohideEnabled) return HideAndFloatStatus.Normal;
20
+ if (!isVisibleByInteraction) return HideAndFloatStatus.Hidden;
21
+ if (autohideFloat === "always" || autohideFloat === "single-branch" && s.message.branchCount <= 1) return HideAndFloatStatus.Floating;
22
+ return HideAndFloatStatus.Normal;
24
23
  };
25
24
  $[0] = autohide;
26
25
  $[1] = autohideFloat;
@@ -1 +1 @@
1
- {"version":3,"file":"useActionBarFloatStatus.js","names":["c","_c","useAuiState","HideAndFloatStatus","Hidden","Floating","Normal","UseActionBarFloatStatusProps","hideWhenRunning","autohide","autohideFloat","forceVisible","useActionBarFloatStatus","t0","$","t1","s","thread","isRunning","autohideEnabled","message","isLast","isVisibleByInteraction","isHovering","branchCount"],"sources":["../../../src/primitives/actionBar/useActionBarFloatStatus.ts"],"sourcesContent":["\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/store\";\n\nexport enum HideAndFloatStatus {\n Hidden = \"hidden\",\n Floating = \"floating\",\n Normal = \"normal\",\n}\n\nexport type UseActionBarFloatStatusProps = {\n hideWhenRunning?: boolean | undefined;\n autohide?: \"always\" | \"not-last\" | \"never\" | undefined;\n autohideFloat?: \"always\" | \"single-branch\" | \"never\" | undefined;\n forceVisible?: boolean | undefined;\n};\n\nexport const useActionBarFloatStatus = ({\n hideWhenRunning,\n autohide,\n autohideFloat,\n forceVisible,\n}: UseActionBarFloatStatusProps) => {\n return useAuiState((s) => {\n if (hideWhenRunning && s.thread.isRunning) return HideAndFloatStatus.Hidden;\n\n const autohideEnabled =\n autohide === \"always\" || (autohide === \"not-last\" && !s.message.isLast);\n const isVisibleByInteraction = forceVisible || s.message.isHovering;\n\n // normal status\n if (!autohideEnabled) return HideAndFloatStatus.Normal;\n\n // hidden status\n if (!isVisibleByInteraction) return HideAndFloatStatus.Hidden;\n\n // floating status\n if (\n autohideFloat === \"always\" ||\n (autohideFloat === \"single-branch\" && s.message.branchCount <= 1)\n )\n return HideAndFloatStatus.Floating;\n\n return HideAndFloatStatus.Normal;\n });\n};\n"],"mappings":";;;;AAIA,IAAYG,qBAAL,yBAAA,oBAAA;CACLC,mBAAAA,YAAAA;CACAC,mBAAAA,cAAAA;CACAC,mBAAAA,YAAAA;;AACF,EAAA,CAAA,CAAA;AASA,MAAaM,2BAA0BC,OAAA;CAAA,MAAAC,IAAAb,EAAA,CAAA;CAAC,MAAA,EAAAO,iBAAAC,UAAAC,eAAAC,iBAAAE;CAKT,IAAAE;CAAA,IAAAD,EAAA,OAAAL,YAAAK,EAAA,OAAAJ,iBAAAI,EAAA,OAAAH,gBAAAG,EAAA,OAAAN,iBAAA;EACVO,MAAAC,MAAA;GACjB,IAAIR,mBAAmBQ,EAACC,OAAOC,WAAU,OAAA;GAEzC,MAAAC,kBACEV,aAAa,YAAaA,aAAa,cAAb,CAA4BO,EAACI,QAAQC;GACjE,MAAAC,yBAA+BX,gBAAgBK,EAACI,QAAQG;GAGxD,IAAI,CAACJ,iBAAe,OAAA;GAGpB,IAAI,CAACG,wBAAsB,OAAA;GAG3B,IACEZ,kBAAkB,YACjBA,kBAAkB,mBAAmBM,EAACI,QAAQI,eAAgB,GAAE,OAAA;GAE9B,OAAA;EAEL;EACjCV,EAAA,KAAAL;EAAAK,EAAA,KAAAJ;EAAAI,EAAA,KAAAH;EAAAG,EAAA,KAAAN;EAAAM,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAAA,OArBMZ,YAAYa,EAqBlB;AAAC"}
1
+ {"version":3,"file":"useActionBarFloatStatus.js","names":["c","_c","useAuiState","HideAndFloatStatus","Hidden","Floating","Normal","const","UseActionBarFloatStatusProps","hideWhenRunning","autohide","autohideFloat","forceVisible","useActionBarFloatStatus","t0","$","t1","s","thread","isRunning","autohideEnabled","message","isLast","isVisibleByInteraction","isHovering","branchCount"],"sources":["../../../src/primitives/actionBar/useActionBarFloatStatus.ts"],"sourcesContent":["\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/store\";\n\nexport const HideAndFloatStatus = {\n Hidden: \"hidden\",\n Floating: \"floating\",\n Normal: \"normal\",\n} as const;\nexport type HideAndFloatStatus =\n (typeof HideAndFloatStatus)[keyof typeof HideAndFloatStatus];\n\nexport type UseActionBarFloatStatusProps = {\n hideWhenRunning?: boolean | undefined;\n autohide?: \"always\" | \"not-last\" | \"never\" | undefined;\n autohideFloat?: \"always\" | \"single-branch\" | \"never\" | undefined;\n forceVisible?: boolean | undefined;\n};\n\nexport const useActionBarFloatStatus = ({\n hideWhenRunning,\n autohide,\n autohideFloat,\n forceVisible,\n}: UseActionBarFloatStatusProps) => {\n return useAuiState((s) => {\n if (hideWhenRunning && s.thread.isRunning) return HideAndFloatStatus.Hidden;\n\n const autohideEnabled =\n autohide === \"always\" || (autohide === \"not-last\" && !s.message.isLast);\n const isVisibleByInteraction = forceVisible || s.message.isHovering;\n\n // normal status\n if (!autohideEnabled) return HideAndFloatStatus.Normal;\n\n // hidden status\n if (!isVisibleByInteraction) return HideAndFloatStatus.Hidden;\n\n // floating status\n if (\n autohideFloat === \"always\" ||\n (autohideFloat === \"single-branch\" && s.message.branchCount <= 1)\n )\n return HideAndFloatStatus.Floating;\n\n return HideAndFloatStatus.Normal;\n });\n};\n"],"mappings":";;;;AAIA,MAAaG,qBAAqB;CAChCC,QAAQ;CACRC,UAAU;CACVC,QAAQ;AACV;AAWA,MAAaO,2BAA0BC,OAAA;CAAA,MAAAC,IAAAd,EAAA,CAAA;CAAC,MAAA,EAAAQ,iBAAAC,UAAAC,eAAAC,iBAAAE;CAKT,IAAAE;CAAA,IAAAD,EAAA,OAAAL,YAAAK,EAAA,OAAAJ,iBAAAI,EAAA,OAAAH,gBAAAG,EAAA,OAAAN,iBAAA;EACVO,MAAAC,MAAA;GACjB,IAAIR,mBAAmBQ,EAACC,OAAOC,WAAU,OAAShB,mBAAkBC;GAEpE,MAAAgB,kBACEV,aAAa,YAAaA,aAAa,cAAb,CAA4BO,EAACI,QAAQC;GACjE,MAAAC,yBAA+BX,gBAAgBK,EAACI,QAAQG;GAGxD,IAAI,CAACJ,iBAAe,OAASjB,mBAAkBG;GAG/C,IAAI,CAACiB,wBAAsB,OAASpB,mBAAkBC;GAGtD,IACEO,kBAAkB,YACjBA,kBAAkB,mBAAmBM,EAACI,QAAQI,eAAgB,GAAE,OAE1DtB,mBAAkBE;GAAU,OAE9BF,mBAAkBG;EAAO;EACjCS,EAAA,KAAAL;EAAAK,EAAA,KAAAJ;EAAAI,EAAA,KAAAH;EAAAG,EAAA,KAAAN;EAAAM,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAAA,OArBMb,YAAYc,EAqBlB;AAAC"}
@@ -2,16 +2,17 @@
2
2
  import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useAui } from "@assistant-ui/store";
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
+ import "@assistant-ui/tap/react-shim";
5
6
  //#region src/primitives/attachment/AttachmentRemove.ts
6
7
  const useAttachmentRemove = () => {
7
8
  const $ = c(2);
8
9
  const aui = useAui();
9
10
  let t0;
10
- if ($[0] !== aui) {
11
+ if ($[0] !== aui.attachment) {
11
12
  t0 = () => {
12
- aui.attachment().remove();
13
+ aui.attachment.remove();
13
14
  };
14
- $[0] = aui;
15
+ $[0] = aui.attachment;
15
16
  $[1] = t0;
16
17
  } else t0 = $[1];
17
18
  return t0;
@@ -1 +1 @@
1
- {"version":3,"file":"AttachmentRemove.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useCallback","useAui","useAttachmentRemove","$","aui","t0","attachment","remove","handleRemoveAttachment","AttachmentPrimitiveRemove","Element","Props"],"sources":["../../../src/primitives/attachment/AttachmentRemove.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useCallback } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\n\nconst useAttachmentRemove = () => {\n const aui = useAui();\n\n const handleRemoveAttachment = useCallback(() => {\n aui.attachment().remove();\n }, [aui]);\n\n return handleRemoveAttachment;\n};\n\nexport namespace AttachmentPrimitiveRemove {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useAttachmentRemove>;\n}\n\nexport const AttachmentPrimitiveRemove = createActionButton(\n \"AttachmentPrimitive.Remove\",\n useAttachmentRemove,\n);\n"],"mappings":";;;;;AAUA,MAAMO,4BAAsB;CAAA,MAAAC,IAAAP,EAAA,CAAA;CAC1B,MAAAQ,MAAYH,OAAO;CAAE,IAAAI;CAAA,IAAAF,EAAA,OAAAC,KAAA;EAEsBC,WAAA;GACzCD,IAAGE,WAAY,CAAC,CAAAC,OAAQ;EAAC;EAC1BJ,EAAA,KAAAC;EAAAD,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAS,OAEHK;AAAsB;AAQ/B,MAAaC,4BAA4BV,mBACvC,8BACAG,mBACF"}
1
+ {"version":3,"file":"AttachmentRemove.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useCallback","useAui","useAttachmentRemove","$","aui","t0","attachment","remove","handleRemoveAttachment","AttachmentPrimitiveRemove","Element","Props"],"sources":["../../../src/primitives/attachment/AttachmentRemove.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useCallback } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\n\nconst useAttachmentRemove = () => {\n const aui = useAui();\n\n const handleRemoveAttachment = useCallback(() => {\n aui.attachment.remove();\n }, [aui]);\n\n return handleRemoveAttachment;\n};\n\nexport namespace AttachmentPrimitiveRemove {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useAttachmentRemove>;\n}\n\nexport const AttachmentPrimitiveRemove = createActionButton(\n \"AttachmentPrimitive.Remove\",\n useAttachmentRemove,\n);\n"],"mappings":";;;;;;AAUA,MAAMO,4BAAsB;CAAA,MAAAC,IAAAP,EAAA,CAAA;CAC1B,MAAAQ,MAAYH,OAAO;CAAE,IAAAI;CAAA,IAAAF,EAAA,OAAAC,IAAAE,YAAA;EAEsBD,WAAA;GACzCD,IAAGE,WAAWC,OAAQ;EAAC;EACxBJ,EAAA,KAAAC,IAAAE;EAAAH,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAS,OAEHK;AAAsB;AAQ/B,MAAaC,4BAA4BV,mBACvC,8BACAG,mBACF"}
@@ -2,17 +2,18 @@
2
2
  import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useAui, useAuiState } from "@assistant-ui/store";
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
+ import "@assistant-ui/tap/react-shim";
5
6
  //#region src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.ts
6
7
  const useChainOfThoughtAccordionTrigger = () => {
7
8
  const $ = c(3);
8
9
  const aui = useAui();
9
10
  const collapsed = useAuiState(_temp);
10
11
  let t0;
11
- if ($[0] !== aui || $[1] !== collapsed) {
12
+ if ($[0] !== aui.chainOfThought || $[1] !== collapsed) {
12
13
  t0 = () => {
13
- aui.chainOfThought().setCollapsed(!collapsed);
14
+ aui.chainOfThought.setCollapsed(!collapsed);
14
15
  };
15
- $[0] = aui;
16
+ $[0] = aui.chainOfThought;
16
17
  $[1] = collapsed;
17
18
  $[2] = t0;
18
19
  } else t0 = $[2];
@@ -1 +1 @@
1
- {"version":3,"file":"ChainOfThoughtAccordionTrigger.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useCallback","useAuiState","useAui","useChainOfThoughtAccordionTrigger","$","aui","collapsed","_temp","t0","chainOfThought","setCollapsed","callback","ChainOfThoughtPrimitiveAccordionTrigger","Element","Props","s"],"sources":["../../../src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useCallback } from \"react\";\nimport { useAuiState, useAui } from \"@assistant-ui/store\";\n\nconst useChainOfThoughtAccordionTrigger = () => {\n const aui = useAui();\n const collapsed = useAuiState((s) => s.chainOfThought.collapsed);\n\n const callback = useCallback(() => {\n aui.chainOfThought().setCollapsed(!collapsed);\n }, [aui, collapsed]);\n\n return callback;\n};\n\nexport namespace ChainOfThoughtPrimitiveAccordionTrigger {\n export type Element = ActionButtonElement;\n /**\n * Props for the ChainOfThoughtPrimitive.AccordionTrigger component.\n * Inherits all button element props and action button functionality.\n */\n export type Props = ActionButtonProps<\n typeof useChainOfThoughtAccordionTrigger\n >;\n}\n\n/**\n * A button component that toggles the collapsed state of the chain of thought accordion.\n *\n * This component automatically handles the toggle functionality, expanding or collapsing\n * the chain of thought parts when clicked.\n *\n * @example\n * ```tsx\n * <ChainOfThoughtPrimitive.AccordionTrigger>\n * Toggle Reasoning\n * </ChainOfThoughtPrimitive.AccordionTrigger>\n * ```\n */\nexport const ChainOfThoughtPrimitiveAccordionTrigger = createActionButton(\n \"ChainOfThoughtPrimitive.AccordionTrigger\",\n useChainOfThoughtAccordionTrigger,\n);\n"],"mappings":";;;;;AAUA,MAAMQ,0CAAoC;CAAA,MAAAC,IAAAR,EAAA,CAAA;CACxC,MAAAS,MAAYH,OAAO;CACnB,MAAAI,YAAkBL,YAAYM,KAAiC;CAAE,IAAAC;CAAA,IAAAJ,EAAA,OAAAC,OAAAD,EAAA,OAAAE,WAAA;EAEpCE,WAAA;GAC3BH,IAAGI,eAAgB,CAAC,CAAAC,aAAc,CAACJ,SAAS;EAAC;EAC9CF,EAAA,KAAAC;EAAAD,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAoB,OAEdO;AAAQ;;;;;;;;;;;;;;AA2BjB,MAAaC,0CAA0Cb,mBACrD,4CACAI,iCACF;AAtC0C,SAAAI,MAAAQ,GAAA;CAAA,OAEHA,EAACN,eAAeH;AAAU"}
1
+ {"version":3,"file":"ChainOfThoughtAccordionTrigger.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useCallback","useAuiState","useAui","useChainOfThoughtAccordionTrigger","$","aui","collapsed","_temp","t0","chainOfThought","setCollapsed","callback","ChainOfThoughtPrimitiveAccordionTrigger","Element","Props","s"],"sources":["../../../src/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useCallback } from \"react\";\nimport { useAuiState, useAui } from \"@assistant-ui/store\";\n\nconst useChainOfThoughtAccordionTrigger = () => {\n const aui = useAui();\n const collapsed = useAuiState((s) => s.chainOfThought.collapsed);\n\n const callback = useCallback(() => {\n aui.chainOfThought.setCollapsed(!collapsed);\n }, [aui, collapsed]);\n\n return callback;\n};\n\nexport namespace ChainOfThoughtPrimitiveAccordionTrigger {\n export type Element = ActionButtonElement;\n /**\n * Props for the ChainOfThoughtPrimitive.AccordionTrigger component.\n * Inherits all button element props and action button functionality.\n */\n export type Props = ActionButtonProps<\n typeof useChainOfThoughtAccordionTrigger\n >;\n}\n\n/**\n * A button component that toggles the collapsed state of the chain of thought accordion.\n *\n * This component automatically handles the toggle functionality, expanding or collapsing\n * the chain of thought parts when clicked.\n *\n * @example\n * ```tsx\n * <ChainOfThoughtPrimitive.AccordionTrigger>\n * Toggle Reasoning\n * </ChainOfThoughtPrimitive.AccordionTrigger>\n * ```\n */\nexport const ChainOfThoughtPrimitiveAccordionTrigger = createActionButton(\n \"ChainOfThoughtPrimitive.AccordionTrigger\",\n useChainOfThoughtAccordionTrigger,\n);\n"],"mappings":";;;;;;AAUA,MAAMQ,0CAAoC;CAAA,MAAAC,IAAAR,EAAA,CAAA;CACxC,MAAAS,MAAYH,OAAO;CACnB,MAAAI,YAAkBL,YAAYM,KAAiC;CAAE,IAAAC;CAAA,IAAAJ,EAAA,OAAAC,IAAAI,kBAAAL,EAAA,OAAAE,WAAA;EAEpCE,WAAA;GAC3BH,IAAGI,eAAeC,aAAc,CAACJ,SAAS;EAAC;EAC5CF,EAAA,KAAAC,IAAAI;EAAAL,EAAA,KAAAE;EAAAF,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAAoB,OAEdO;AAAQ;;;;;;;;;;;;;;AA2BjB,MAAaC,0CAA0Cb,mBACrD,4CACAI,iCACF;AAtC0C,SAAAI,MAAAQ,GAAA;CAAA,OAEHA,EAACN,eAAeH;AAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerAddAttachment.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerAddAttachment.ts"],"mappings":";;cAWM,6BAA4B;;EAIhC;;kBAyCe;OACH,UAAU;OACV,QAAQ,yBAAyB;;cAGlC,gDAA8B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;;;EA9C9B;oBAkDZ,cAAA"}
1
+ {"version":3,"file":"ComposerAddAttachment.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerAddAttachment.ts"],"mappings":";;cAWM,6BAA4B;;EAIhC;;kBA+Ce;OACH,UAAU;OACV,QAAQ,yBAAyB;;cAGlC,gDAA8B,0BAAA,KAAA,qBAAA,gBAAA,qCAAA,qBAAA;;;;;;EApD9B;oBAwDZ,cAAA"}
@@ -3,6 +3,7 @@ import { createActionButton } from "../../utils/createActionButton.js";
3
3
  import { useAui } from "@assistant-ui/store";
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  import { useComposerAddAttachment } from "@assistant-ui/core/react";
6
+ import "@assistant-ui/tap/react-shim";
6
7
  //#region src/primitives/composer/ComposerAddAttachment.ts
7
8
  const useComposerAddAttachment$1 = (t0) => {
8
9
  const $ = c(6);
@@ -17,20 +18,25 @@ const useComposerAddAttachment$1 = (t0) => {
17
18
  const { disabled, addAttachment } = useComposerAddAttachment();
18
19
  const aui = useAui();
19
20
  let t3;
20
- if ($[2] !== addAttachment || $[3] !== aui || $[4] !== multiple) {
21
+ if ($[2] !== addAttachment || $[3] !== aui.composer || $[4] !== multiple) {
21
22
  t3 = () => {
22
23
  const input = document.createElement("input");
23
24
  input.type = "file";
24
25
  input.multiple = multiple;
25
26
  input.hidden = true;
26
- const attachmentAccept = aui.composer().getState().attachmentAccept;
27
+ const attachmentAccept = aui.composer.getState().attachmentAccept;
27
28
  if (attachmentAccept !== "*") input.accept = attachmentAccept;
28
29
  document.body.appendChild(input);
29
- input.onchange = (e) => {
30
+ input.onchange = async (e) => {
30
31
  const fileList = e.target.files;
31
32
  if (!fileList) return;
32
- for (const file of fileList) addAttachment(file);
33
+ const attachmentPromises = Array.from(fileList, async (file) => {
34
+ try {
35
+ await addAttachment(file);
36
+ } catch {}
37
+ });
33
38
  document.body.removeChild(input);
39
+ await Promise.all(attachmentPromises);
34
40
  };
35
41
  input.oncancel = () => {
36
42
  if (!input.files || input.files.length === 0) document.body.removeChild(input);
@@ -38,7 +44,7 @@ const useComposerAddAttachment$1 = (t0) => {
38
44
  input.click();
39
45
  };
40
46
  $[2] = addAttachment;
41
- $[3] = aui;
47
+ $[3] = aui.composer;
42
48
  $[4] = multiple;
43
49
  $[5] = t3;
44
50
  } else t3 = $[5];
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerAddAttachment.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useCallback","useAui","useComposerAddAttachment","useComposerAddAttachmentBehavior","t0","$","t1","undefined","multiple","t2","disabled","addAttachment","aui","t3","input","document","createElement","type","hidden","attachmentAccept","composer","getState","accept","body","appendChild","onchange","e","fileList","target","HTMLInputElement","files","file","removeChild","oncancel","length","click","callback","ComposerPrimitiveAddAttachment","Element","Props"],"sources":["../../../src/primitives/composer/ComposerAddAttachment.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useCallback } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useComposerAddAttachment as useComposerAddAttachmentBehavior } from \"@assistant-ui/core/react\";\n\nconst useComposerAddAttachment = ({\n multiple = true,\n}: {\n /** allow selecting multiple files */\n multiple?: boolean | undefined;\n} = {}) => {\n const { disabled, addAttachment } = useComposerAddAttachmentBehavior();\n const aui = useAui();\n\n const callback = useCallback(() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.multiple = multiple;\n input.hidden = true;\n\n const attachmentAccept = aui.composer().getState().attachmentAccept;\n if (attachmentAccept !== \"*\") {\n input.accept = attachmentAccept;\n }\n\n document.body.appendChild(input);\n\n input.onchange = (e) => {\n const fileList = (e.target as HTMLInputElement).files;\n if (!fileList) return;\n for (const file of fileList) {\n addAttachment(file);\n }\n\n document.body.removeChild(input);\n };\n\n input.oncancel = () => {\n if (!input.files || input.files.length === 0) {\n document.body.removeChild(input);\n }\n };\n\n input.click();\n }, [aui, multiple, addAttachment]);\n\n if (disabled) return null;\n return callback;\n};\n\nexport namespace ComposerPrimitiveAddAttachment {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useComposerAddAttachment>;\n}\n\nexport const ComposerPrimitiveAddAttachment = createActionButton(\n \"ComposerPrimitive.AddAttachment\",\n useComposerAddAttachment,\n [\"multiple\"],\n);\n"],"mappings":";;;;;;AAWA,MAAMO,8BAA2BE,OAAA;CAAA,MAAAC,IAAAT,EAAA,CAAA;CAAA,IAAAU;CAAA,IAAAD,EAAA,OAAAD,IAAA;EAACE,KAAAF,OAAAG,KAAAA,IAAA,CAK7B,IAL6BH;EAK5BC,EAAA,KAAAD;EAAAC,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAL4B,MAAA,EAAAG,UAAAC,OAAAH;CAChC,MAAAE,WAAAC,OAAAF,KAAAA,IAAA,OAAAE;CAKA,MAAA,EAAAC,UAAAC,kBAAoCR,yBAAiC;CACrE,MAAAS,MAAYX,OAAO;CAAE,IAAAY;CAAA,IAAAR,EAAA,OAAAM,iBAAAN,EAAA,OAAAO,OAAAP,EAAA,OAAAG,UAAA;EAEQK,WAAA;GAC3B,MAAAC,QAAcC,SAAQC,cAAe,OAAO;GAC5CF,MAAKG,OAAQ;GACbH,MAAKN,WAAYA;GACjBM,MAAKI,SAAU;GAEf,MAAAC,mBAAyBP,IAAGQ,SAAU,CAAC,CAAAC,SAAU,CAAC,CAAAF;GAClD,IAAIA,qBAAqB,KACvBL,MAAKQ,SAAUH;GAGjBJ,SAAQQ,KAAKC,YAAaV,KAAK;GAE/BA,MAAKW,YAAYC,MAAA;IACf,MAAAC,WAAkBD,EAACE,OAA2BE;IAC9C,IAAI,CAACH,UAAQ;IACb,KAAK,MAAAI,QAAcJ,UACjBhB,cAAcoB,IAAI;IAGpBhB,SAAQQ,KAAKS,YAAalB,KAAK;GAAC;GAGlCA,MAAKmB,iBAAY;IACf,IAAI,CAACnB,MAAKgB,SAAUhB,MAAKgB,MAAMI,WAAY,GACzCnB,SAAQQ,KAAKS,YAAalB,KAAK;GAChC;GAGHA,MAAKqB,MAAO;EAAC;EACd9B,EAAA,KAAAM;EAAAN,EAAA,KAAAO;EAAAP,EAAA,KAAAG;EAAAH,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CA9BD,MAAA+B,WAAiBvB;CAgCjB,IAAIH,UAAQ,OAAS;CAAK,OACnB0B;AAAQ;AAQjB,MAAaC,iCAAiCtC,mBAC5C,mCACAG,4BACA,CAAC,UAAU,CACb"}
1
+ {"version":3,"file":"ComposerAddAttachment.js","names":["c","_c","ActionButtonElement","ActionButtonProps","createActionButton","useCallback","useAui","useComposerAddAttachment","useComposerAddAttachmentBehavior","t0","$","t1","undefined","multiple","t2","disabled","addAttachment","aui","t3","composer","input","document","createElement","type","hidden","attachmentAccept","getState","accept","body","appendChild","onchange","e","fileList","target","HTMLInputElement","files","attachmentPromises","Array","from","file","removeChild","Promise","all","oncancel","length","click","callback","ComposerPrimitiveAddAttachment","Element","Props"],"sources":["../../../src/primitives/composer/ComposerAddAttachment.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type ActionButtonElement,\n type ActionButtonProps,\n createActionButton,\n} from \"../../utils/createActionButton\";\nimport { useCallback } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { useComposerAddAttachment as useComposerAddAttachmentBehavior } from \"@assistant-ui/core/react\";\n\nconst useComposerAddAttachment = ({\n multiple = true,\n}: {\n /** allow selecting multiple files */\n multiple?: boolean | undefined;\n} = {}) => {\n const { disabled, addAttachment } = useComposerAddAttachmentBehavior();\n const aui = useAui();\n\n const callback = useCallback(() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.multiple = multiple;\n input.hidden = true;\n\n const attachmentAccept = aui.composer.getState().attachmentAccept;\n if (attachmentAccept !== \"*\") {\n input.accept = attachmentAccept;\n }\n\n document.body.appendChild(input);\n\n input.onchange = async (e) => {\n const fileList = (e.target as HTMLInputElement).files;\n if (!fileList) return;\n\n const attachmentPromises = Array.from(fileList, async (file) => {\n try {\n await addAttachment(file);\n } catch {\n // The composer runtime emits composer.attachmentAddError before rejecting.\n }\n });\n\n document.body.removeChild(input);\n await Promise.all(attachmentPromises);\n };\n\n input.oncancel = () => {\n if (!input.files || input.files.length === 0) {\n document.body.removeChild(input);\n }\n };\n\n input.click();\n }, [aui, multiple, addAttachment]);\n\n if (disabled) return null;\n return callback;\n};\n\nexport namespace ComposerPrimitiveAddAttachment {\n export type Element = ActionButtonElement;\n export type Props = ActionButtonProps<typeof useComposerAddAttachment>;\n}\n\nexport const ComposerPrimitiveAddAttachment = createActionButton(\n \"ComposerPrimitive.AddAttachment\",\n useComposerAddAttachment,\n [\"multiple\"],\n);\n"],"mappings":";;;;;;;AAWA,MAAMO,8BAA2BE,OAAA;CAAA,MAAAC,IAAAT,EAAA,CAAA;CAAA,IAAAU;CAAA,IAAAD,EAAA,OAAAD,IAAA;EAACE,KAAAF,OAAAG,KAAAA,IAAA,CAK7B,IAL6BH;EAK5BC,EAAA,KAAAD;EAAAC,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAL4B,MAAA,EAAAG,UAAAC,OAAAH;CAChC,MAAAE,WAAAC,OAAAF,KAAAA,IAAA,OAAAE;CAKA,MAAA,EAAAC,UAAAC,kBAAoCR,yBAAiC;CACrE,MAAAS,MAAYX,OAAO;CAAE,IAAAY;CAAA,IAAAR,EAAA,OAAAM,iBAAAN,EAAA,OAAAO,IAAAE,YAAAT,EAAA,OAAAG,UAAA;EAEQK,WAAA;GAC3B,MAAAE,QAAcC,SAAQC,cAAe,OAAO;GAC5CF,MAAKG,OAAQ;GACbH,MAAKP,WAAYA;GACjBO,MAAKI,SAAU;GAEf,MAAAC,mBAAyBR,IAAGE,SAASO,SAAU,CAAC,CAAAD;GAChD,IAAIA,qBAAqB,KACvBL,MAAKO,SAAUF;GAGjBJ,SAAQO,KAAKC,YAAaT,KAAK;GAE/BA,MAAKU,WAAY,OAAAC,MAAA;IACf,MAAAC,WAAkBD,EAACE,OAA2BE;IAC9C,IAAI,CAACH,UAAQ;IAEb,MAAAI,qBAA2BC,MAAKC,KAAMN,UAAU,OAAAO,SAAA;KAC9C,IAAA;MACE,MAAMvB,cAAcuB,IAAI;KAAC,QAAA,CAAA;IAG1B,CACF;IAEDlB,SAAQO,KAAKY,YAAapB,KAAK;IAC/B,MAAMqB,QAAOC,IAAKN,kBAAkB;GAAC;GAGvChB,MAAKuB,iBAAY;IACf,IAAI,CAACvB,MAAKe,SAAUf,MAAKe,MAAMS,WAAY,GACzCvB,SAAQO,KAAKY,YAAapB,KAAK;GAChC;GAGHA,MAAKyB,MAAO;EAAC;EACdnC,EAAA,KAAAM;EAAAN,EAAA,KAAAO,IAAAE;EAAAT,EAAA,KAAAG;EAAAH,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CApCD,MAAAoC,WAAiB5B;CAsCjB,IAAIH,UAAQ,OAAS;CAAK,OACnB+B;AAAQ;AAQjB,MAAaC,iCAAiC3C,mBAC5C,mCACAG,4BACA,CAAC,UAAU,CACb"}
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerAttachmentDropzone.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerAttachmentDropzone.tsx"],"mappings":";;kBAgBiB;OACH,UAAU;OACV,QAAQ,MAAM,eAAe;IACvC;IACA,SAAS;IACT;;;cAIS,qCAAmC,MAAA,0BAAA,MAAA,eAAA;EANlC;EACD,SAAA;EACE;IA8Fb,MAAA,cAAA"}
1
+ {"version":3,"file":"ComposerAttachmentDropzone.d.ts","names":[],"sources":["../../../src/primitives/composer/ComposerAttachmentDropzone.tsx"],"mappings":";;kBAgBiB;OACH,UAAU;OACV,QAAQ,MAAM,eAAe;IACvC;IACA,SAAS;IACT;;;cAIS,qCAAmC,MAAA,0BAAA,MAAA,eAAA;EANlC;EACD,SAAA;EACE;IA+Fb,MAAA,cAAA"}
@@ -57,10 +57,8 @@ const ComposerPrimitiveAttachmentDropzone = forwardRef((t0, ref) => {
57
57
  const files = Array.from(e_2.dataTransfer.files);
58
58
  await Promise.all(files.map(async (file) => {
59
59
  try {
60
- await aui.composer().addAttachment(file);
61
- } catch (t6) {
62
- console.error("Failed to add attachment:", t6);
63
- }
60
+ await aui.composer.addAttachment(file);
61
+ } catch {}
64
62
  }));
65
63
  };
66
64
  $[7] = aui;
@@ -1 +1 @@
1
- {"version":3,"file":"ComposerAttachmentDropzone.js","names":["c","_c","forwardRef","useCallback","useState","ReactElement","cloneElement","isValidElement","composeEventHandlers","Slot","React","useAui","ComposerPrimitiveAttachmentDropzone","Element","HTMLDivElement","Props","HTMLAttributes","asChild","render","disabled","t0","ref","$","t1","children","rest","undefined","isDragging","setIsDragging","aui","t2","e","preventDefault","handleDragEnterCapture","t3","e_0","handleDragOverCapture","t4","e_1","next","relatedTarget","Node","currentTarget","contains","handleDragLeaveCapture","t5","e_2","files","Array","from","dataTransfer","Promise","all","map","file","composer","addAttachment","t6","error","console","handleDrop","t7","onDragEnterCapture","t8","onDragOverCapture","t9","onDragLeaveCapture","t10","onDropCapture","t11","mergedProps","renderChildren","props","Record","t12","ReactNode","t13","t14","Comp","Root","displayName"],"sources":["../../../src/primitives/composer/ComposerAttachmentDropzone.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n forwardRef,\n useCallback,\n useState,\n type ReactElement,\n cloneElement,\n isValidElement,\n} from \"react\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Slot } from \"radix-ui\";\nimport type React from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\n\nexport namespace ComposerPrimitiveAttachmentDropzone {\n export type Element = HTMLDivElement;\n export type Props = React.HTMLAttributes<HTMLDivElement> & {\n asChild?: boolean | undefined;\n render?: ReactElement | undefined;\n disabled?: boolean | undefined;\n };\n}\n\nexport const ComposerPrimitiveAttachmentDropzone = forwardRef<\n HTMLDivElement,\n ComposerPrimitiveAttachmentDropzone.Props\n>(({ disabled, asChild = false, render, children, ...rest }, ref) => {\n const [isDragging, setIsDragging] = useState(false);\n const aui = useAui();\n\n const handleDragEnterCapture = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(true);\n },\n [disabled],\n );\n\n const handleDragOverCapture = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n if (!isDragging) setIsDragging(true);\n },\n [disabled, isDragging],\n );\n\n const handleDragLeaveCapture = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n const next = e.relatedTarget as Node | null;\n if (next && e.currentTarget.contains(next)) {\n return;\n }\n setIsDragging(false);\n },\n [disabled],\n );\n\n const handleDrop = useCallback(\n async (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(false);\n const files = Array.from(e.dataTransfer.files);\n await Promise.all(\n files.map(async (file) => {\n try {\n await aui.composer().addAttachment(file);\n } catch (error) {\n console.error(\"Failed to add attachment:\", error);\n }\n }),\n );\n },\n [disabled, aui],\n );\n\n const mergedProps = {\n ...(isDragging ? { \"data-dragging\": \"true\" } : null),\n ...rest,\n onDragEnterCapture: composeEventHandlers(\n rest.onDragEnterCapture,\n handleDragEnterCapture,\n ),\n onDragOverCapture: composeEventHandlers(\n rest.onDragOverCapture,\n handleDragOverCapture,\n ),\n onDragLeaveCapture: composeEventHandlers(\n rest.onDragLeaveCapture,\n handleDragLeaveCapture,\n ),\n onDropCapture: composeEventHandlers(rest.onDropCapture, handleDrop),\n ref,\n };\n\n if (render && isValidElement(render)) {\n const renderChildren =\n children !== undefined\n ? children\n : (render.props as Record<string, unknown>).children;\n return (\n <Slot.Root {...mergedProps}>\n {cloneElement(render, undefined, renderChildren as React.ReactNode)}\n </Slot.Root>\n );\n }\n\n const Comp = asChild ? Slot.Root : \"div\";\n return <Comp {...mergedProps}>{children}</Comp>;\n});\n\nComposerPrimitiveAttachmentDropzone.displayName =\n \"ComposerPrimitive.AttachmentDropzone\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"ComposerAttachmentDropzone.js","names":["c","_c","forwardRef","useCallback","useState","ReactElement","cloneElement","isValidElement","composeEventHandlers","Slot","React","useAui","ComposerPrimitiveAttachmentDropzone","Element","HTMLDivElement","Props","HTMLAttributes","asChild","render","disabled","t0","ref","$","t1","children","rest","undefined","isDragging","setIsDragging","aui","t2","e","preventDefault","handleDragEnterCapture","t3","e_0","handleDragOverCapture","t4","e_1","next","relatedTarget","Node","currentTarget","contains","handleDragLeaveCapture","t5","e_2","files","Array","from","dataTransfer","Promise","all","map","file","composer","addAttachment","handleDrop","t6","t7","onDragEnterCapture","t8","onDragOverCapture","t9","onDragLeaveCapture","t10","onDropCapture","t11","mergedProps","renderChildren","props","Record","t12","ReactNode","t13","t14","Comp","Root","displayName"],"sources":["../../../src/primitives/composer/ComposerAttachmentDropzone.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n forwardRef,\n useCallback,\n useState,\n type ReactElement,\n cloneElement,\n isValidElement,\n} from \"react\";\n\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Slot } from \"radix-ui\";\nimport type React from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\n\nexport namespace ComposerPrimitiveAttachmentDropzone {\n export type Element = HTMLDivElement;\n export type Props = React.HTMLAttributes<HTMLDivElement> & {\n asChild?: boolean | undefined;\n render?: ReactElement | undefined;\n disabled?: boolean | undefined;\n };\n}\n\nexport const ComposerPrimitiveAttachmentDropzone = forwardRef<\n HTMLDivElement,\n ComposerPrimitiveAttachmentDropzone.Props\n>(({ disabled, asChild = false, render, children, ...rest }, ref) => {\n const [isDragging, setIsDragging] = useState(false);\n const aui = useAui();\n\n const handleDragEnterCapture = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(true);\n },\n [disabled],\n );\n\n const handleDragOverCapture = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n if (!isDragging) setIsDragging(true);\n },\n [disabled, isDragging],\n );\n\n const handleDragLeaveCapture = useCallback(\n (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n const next = e.relatedTarget as Node | null;\n if (next && e.currentTarget.contains(next)) {\n return;\n }\n setIsDragging(false);\n },\n [disabled],\n );\n\n const handleDrop = useCallback(\n async (e: React.DragEvent) => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(false);\n const files = Array.from(e.dataTransfer.files);\n await Promise.all(\n files.map(async (file) => {\n try {\n await aui.composer.addAttachment(file);\n } catch {\n // The composer runtime emits composer.attachmentAddError before rejecting;\n // the readonly and empty-thread stubs only throw.\n }\n }),\n );\n },\n [disabled, aui],\n );\n\n const mergedProps = {\n ...(isDragging ? { \"data-dragging\": \"true\" } : null),\n ...rest,\n onDragEnterCapture: composeEventHandlers(\n rest.onDragEnterCapture,\n handleDragEnterCapture,\n ),\n onDragOverCapture: composeEventHandlers(\n rest.onDragOverCapture,\n handleDragOverCapture,\n ),\n onDragLeaveCapture: composeEventHandlers(\n rest.onDragLeaveCapture,\n handleDragLeaveCapture,\n ),\n onDropCapture: composeEventHandlers(rest.onDropCapture, handleDrop),\n ref,\n };\n\n if (render && isValidElement(render)) {\n const renderChildren =\n children !== undefined\n ? children\n : (render.props as Record<string, unknown>).children;\n return (\n <Slot.Root {...mergedProps}>\n {cloneElement(render, undefined, renderChildren as React.ReactNode)}\n </Slot.Root>\n );\n }\n\n const Comp = asChild ? Slot.Root : \"div\";\n return <Comp {...mergedProps}>{children}</Comp>;\n});\n\nComposerPrimitiveAttachmentDropzone.displayName =\n \"ComposerPrimitive.AttachmentDropzone\";\n"],"mappings":"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"}
@@ -67,7 +67,7 @@ const ComposerPrimitiveInput = forwardRef(({ autoFocus = false, asChild, render,
67
67
  for (const plugin of pluginRegistry.getPlugins()) if (plugin.handleKeyDown(e)) return;
68
68
  }
69
69
  if (!cancelOnEscape) return;
70
- const composer = aui.composer();
70
+ const composer = aui.composer;
71
71
  if (composer.getState().canCancel) {
72
72
  composer.cancel();
73
73
  e.preventDefault();
@@ -80,11 +80,11 @@ const ComposerPrimitiveInput = forwardRef(({ autoFocus = false, asChild, render,
80
80
  for (const plugin_0 of pluginRegistry.getPlugins()) if (plugin_0.handleKeyDown(e_0)) return;
81
81
  }
82
82
  if (e_0.key === "Enter") {
83
- const threadState = aui.thread().getState();
83
+ const threadState = aui.thread.getState();
84
84
  const hasQueue = threadState.capabilities.queue;
85
- if (e_0.shiftKey && (e_0.ctrlKey || e_0.metaKey) && hasQueue && declaredSubmitMode !== "none" && aui.composer().getState().canSend) {
85
+ if (e_0.shiftKey && (e_0.ctrlKey || e_0.metaKey) && hasQueue && declaredSubmitMode !== "none" && aui.composer.getState().canSend) {
86
86
  e_0.preventDefault();
87
- aui.composer().send({ steer: true });
87
+ aui.composer.send({ steer: true });
88
88
  return;
89
89
  }
90
90
  if (e_0.shiftKey) return;
@@ -100,13 +100,15 @@ const ComposerPrimitiveInput = forwardRef(({ autoFocus = false, asChild, render,
100
100
  };
101
101
  const handlePaste = async (e_1) => {
102
102
  if (!addAttachmentOnPaste) return;
103
- const threadCapabilities = aui.thread().getState().capabilities;
103
+ const threadCapabilities = aui.thread.getState().capabilities;
104
104
  const files = Array.from(e_1.clipboardData?.files || []);
105
- if (threadCapabilities.attachments && files.length > 0) try {
105
+ if (threadCapabilities.attachments && files.length > 0) {
106
106
  e_1.preventDefault();
107
- await Promise.all(files.map((file) => aui.composer().addAttachment(file)));
108
- } catch (error) {
109
- console.error("Error adding attachment:", error);
107
+ await Promise.all(files.map(async (file) => {
108
+ try {
109
+ await aui.composer.addAttachment(file);
110
+ } catch {}
111
+ }));
110
112
  }
111
113
  };
112
114
  const handleHeightChange = (height, meta) => {
@@ -127,10 +129,10 @@ const ComposerPrimitiveInput = forwardRef(({ autoFocus = false, asChild, render,
127
129
  }, [autoFocusEnabled]);
128
130
  useEffect(() => focus(), [focus]);
129
131
  useOnScrollToBottom(() => {
130
- if (aui.composer().getState().type === "thread" && unstable_focusOnScrollToBottom) focus();
132
+ if (aui.composer.getState().type === "thread" && unstable_focusOnScrollToBottom) focus();
131
133
  });
132
134
  useEffect(() => {
133
- if (aui.composer().getState().type !== "thread" || !unstable_focusOnRunStart) return void 0;
135
+ if (aui.composer.getState().type !== "thread" || !unstable_focusOnRunStart) return void 0;
134
136
  return aui.on("thread.runStart", focus);
135
137
  }, [
136
138
  unstable_focusOnRunStart,
@@ -138,7 +140,7 @@ const ComposerPrimitiveInput = forwardRef(({ autoFocus = false, asChild, render,
138
140
  aui
139
141
  ]);
140
142
  useEffect(() => {
141
- if (aui.composer().getState().type !== "thread" || !unstable_focusOnThreadSwitched) return void 0;
143
+ if (aui.composer.getState().type !== "thread" || !unstable_focusOnThreadSwitched) return void 0;
142
144
  return aui.on("threadListItem.switchedTo", focus);
143
145
  }, [
144
146
  unstable_focusOnThreadSwitched,
@@ -157,12 +159,12 @@ const ComposerPrimitiveInput = forwardRef(({ autoFocus = false, asChild, render,
157
159
  ref,
158
160
  disabled: isDisabled,
159
161
  onChange: composeEventHandlers(onChange, (e_2) => {
160
- if (!aui.composer().getState().isEditing) return;
162
+ if (!aui.composer.getState().isEditing) return;
161
163
  const nativeIsComposing = e_2.nativeEvent.isComposing === true;
162
164
  if (compositionRef.current && !nativeIsComposing) compositionRef.current = false;
163
165
  const isComposing = nativeIsComposing || compositionRef.current;
164
166
  flushTapSync(() => {
165
- aui.composer().setText(e_2.target.value);
167
+ aui.composer.setText(e_2.target.value);
166
168
  });
167
169
  if (isComposing) return;
168
170
  const pos = e_2.target.selectionStart ?? e_2.target.value.length;
@@ -174,10 +176,10 @@ const ComposerPrimitiveInput = forwardRef(({ autoFocus = false, asChild, render,
174
176
  }),
175
177
  onCompositionEnd: composeEventHandlers(rest.onCompositionEnd, (e_3) => {
176
178
  compositionRef.current = false;
177
- if (!aui.composer().getState().isEditing) return;
179
+ if (!aui.composer.getState().isEditing) return;
178
180
  const target = e_3.target;
179
181
  flushTapSync(() => {
180
- aui.composer().setText(target.value);
182
+ aui.composer.setText(target.value);
181
183
  });
182
184
  const pos_0 = target.selectionStart ?? target.value.length;
183
185
  if (pluginRegistry) for (const plugin_2 of pluginRegistry.getPlugins()) plugin_2.setCursorPosition(pos_0);