@assistant-ui/vue 0.0.0-stage → 0.0.1

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 (231) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +90 -2
  3. package/dist/AuiIf.d.ts +27 -0
  4. package/dist/AuiIf.d.ts.map +1 -0
  5. package/dist/AuiIf.js +30 -0
  6. package/dist/AuiIf.js.map +1 -0
  7. package/dist/AuiProvider.d.ts +41 -0
  8. package/dist/AuiProvider.d.ts.map +1 -0
  9. package/dist/AuiProvider.js +61 -0
  10. package/dist/AuiProvider.js.map +1 -0
  11. package/dist/context.d.ts +10 -0
  12. package/dist/context.d.ts.map +1 -0
  13. package/dist/context.js +17 -0
  14. package/dist/context.js.map +1 -0
  15. package/dist/index.d.ts +34 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +35 -0
  18. package/dist/primitives/AttachmentByIndexProvider.d.ts +30 -0
  19. package/dist/primitives/AttachmentByIndexProvider.d.ts.map +1 -0
  20. package/dist/primitives/AttachmentByIndexProvider.js +63 -0
  21. package/dist/primitives/AttachmentByIndexProvider.js.map +1 -0
  22. package/dist/primitives/ChainOfThoughtPrimitiveAccordionTrigger.d.ts +11 -0
  23. package/dist/primitives/ChainOfThoughtPrimitiveAccordionTrigger.d.ts.map +1 -0
  24. package/dist/primitives/ChainOfThoughtPrimitiveAccordionTrigger.js +31 -0
  25. package/dist/primitives/ChainOfThoughtPrimitiveAccordionTrigger.js.map +1 -0
  26. package/dist/primitives/ChainOfThoughtPrimitiveParts.d.ts +19 -0
  27. package/dist/primitives/ChainOfThoughtPrimitiveParts.d.ts.map +1 -0
  28. package/dist/primitives/ChainOfThoughtPrimitiveParts.js +85 -0
  29. package/dist/primitives/ChainOfThoughtPrimitiveParts.js.map +1 -0
  30. package/dist/primitives/ComposerPrimitiveCancel.d.ts +12 -0
  31. package/dist/primitives/ComposerPrimitiveCancel.d.ts.map +1 -0
  32. package/dist/primitives/ComposerPrimitiveCancel.js +33 -0
  33. package/dist/primitives/ComposerPrimitiveCancel.js.map +1 -0
  34. package/dist/primitives/ComposerPrimitiveInput.d.ts +26 -0
  35. package/dist/primitives/ComposerPrimitiveInput.d.ts.map +1 -0
  36. package/dist/primitives/ComposerPrimitiveInput.js +57 -0
  37. package/dist/primitives/ComposerPrimitiveInput.js.map +1 -0
  38. package/dist/primitives/ComposerPrimitiveSend.d.ts +13 -0
  39. package/dist/primitives/ComposerPrimitiveSend.d.ts.map +1 -0
  40. package/dist/primitives/ComposerPrimitiveSend.js +31 -0
  41. package/dist/primitives/ComposerPrimitiveSend.js.map +1 -0
  42. package/dist/primitives/MessageByIdProvider.d.ts +23 -0
  43. package/dist/primitives/MessageByIdProvider.d.ts.map +1 -0
  44. package/dist/primitives/MessageByIdProvider.js +70 -0
  45. package/dist/primitives/MessageByIdProvider.js.map +1 -0
  46. package/dist/primitives/MessagePrimitiveParts.d.ts +50 -0
  47. package/dist/primitives/MessagePrimitiveParts.d.ts.map +1 -0
  48. package/dist/primitives/MessagePrimitiveParts.js +93 -0
  49. package/dist/primitives/MessagePrimitiveParts.js.map +1 -0
  50. package/dist/primitives/PartByIndexProvider.d.ts +21 -0
  51. package/dist/primitives/PartByIndexProvider.d.ts.map +1 -0
  52. package/dist/primitives/PartByIndexProvider.js +50 -0
  53. package/dist/primitives/PartByIndexProvider.js.map +1 -0
  54. package/dist/primitives/ThreadListItemPrimitiveRoot.d.ts +7 -0
  55. package/dist/primitives/ThreadListItemPrimitiveRoot.d.ts.map +1 -0
  56. package/dist/primitives/ThreadListItemPrimitiveRoot.js +36 -0
  57. package/dist/primitives/ThreadListItemPrimitiveRoot.js.map +1 -0
  58. package/dist/primitives/ThreadListItemPrimitiveTrigger.d.ts +14 -0
  59. package/dist/primitives/ThreadListItemPrimitiveTrigger.d.ts.map +1 -0
  60. package/dist/primitives/ThreadListItemPrimitiveTrigger.js +58 -0
  61. package/dist/primitives/ThreadListItemPrimitiveTrigger.js.map +1 -0
  62. package/dist/primitives/ThreadListPrimitiveRoot.d.ts +7 -0
  63. package/dist/primitives/ThreadListPrimitiveRoot.d.ts.map +1 -0
  64. package/dist/primitives/ThreadListPrimitiveRoot.js +16 -0
  65. package/dist/primitives/ThreadListPrimitiveRoot.js.map +1 -0
  66. package/dist/primitives/ThreadPrimitiveMessages.d.ts +23 -0
  67. package/dist/primitives/ThreadPrimitiveMessages.d.ts.map +1 -0
  68. package/dist/primitives/ThreadPrimitiveMessages.js +37 -0
  69. package/dist/primitives/ThreadPrimitiveMessages.js.map +1 -0
  70. package/dist/primitives/ThreadPrimitiveScrollToBottom.d.ts +25 -0
  71. package/dist/primitives/ThreadPrimitiveScrollToBottom.d.ts.map +1 -0
  72. package/dist/primitives/ThreadPrimitiveScrollToBottom.js +43 -0
  73. package/dist/primitives/ThreadPrimitiveScrollToBottom.js.map +1 -0
  74. package/dist/primitives/ThreadPrimitiveViewport.d.ts +57 -0
  75. package/dist/primitives/ThreadPrimitiveViewport.d.ts.map +1 -0
  76. package/dist/primitives/ThreadPrimitiveViewport.js +174 -0
  77. package/dist/primitives/ThreadPrimitiveViewport.js.map +1 -0
  78. package/dist/primitives/ThreadPrimitiveViewportFooter.d.ts +13 -0
  79. package/dist/primitives/ThreadPrimitiveViewportFooter.d.ts.map +1 -0
  80. package/dist/primitives/ThreadPrimitiveViewportFooter.js +46 -0
  81. package/dist/primitives/ThreadPrimitiveViewportFooter.js.map +1 -0
  82. package/dist/primitives/actionBar.d.ts +41 -0
  83. package/dist/primitives/actionBar.d.ts.map +1 -0
  84. package/dist/primitives/actionBar.js +110 -0
  85. package/dist/primitives/actionBar.js.map +1 -0
  86. package/dist/primitives/attachment.d.ts +27 -0
  87. package/dist/primitives/attachment.d.ts.map +1 -0
  88. package/dist/primitives/attachment.js +63 -0
  89. package/dist/primitives/attachment.js.map +1 -0
  90. package/dist/primitives/attrDisabled.d.ts +2 -0
  91. package/dist/primitives/attrDisabled.d.ts.map +1 -0
  92. package/dist/primitives/attrDisabled.js +6 -0
  93. package/dist/primitives/attrDisabled.js.map +1 -0
  94. package/dist/primitives/branchPicker.d.ts +18 -0
  95. package/dist/primitives/branchPicker.d.ts.map +1 -0
  96. package/dist/primitives/branchPicker.js +48 -0
  97. package/dist/primitives/branchPicker.js.map +1 -0
  98. package/dist/primitives/composerAttachments.d.ts +57 -0
  99. package/dist/primitives/composerAttachments.d.ts.map +1 -0
  100. package/dist/primitives/composerAttachments.js +132 -0
  101. package/dist/primitives/composerAttachments.js.map +1 -0
  102. package/dist/primitives/error.d.ts +15 -0
  103. package/dist/primitives/error.d.ts.map +1 -0
  104. package/dist/primitives/error.js +29 -0
  105. package/dist/primitives/error.js.map +1 -0
  106. package/dist/primitives/lastValidCache.d.ts +6 -0
  107. package/dist/primitives/lastValidCache.d.ts.map +1 -0
  108. package/dist/primitives/lastValidCache.js +9 -0
  109. package/dist/primitives/lastValidCache.js.map +1 -0
  110. package/dist/primitives/message.d.ts +12 -0
  111. package/dist/primitives/message.d.ts.map +1 -0
  112. package/dist/primitives/message.js +44 -0
  113. package/dist/primitives/message.js.map +1 -0
  114. package/dist/primitives/messageAttachments.d.ts +12 -0
  115. package/dist/primitives/messageAttachments.d.ts.map +1 -0
  116. package/dist/primitives/messageAttachments.js +27 -0
  117. package/dist/primitives/messageAttachments.js.map +1 -0
  118. package/dist/primitives/stableKeys.d.ts +5 -0
  119. package/dist/primitives/stableKeys.d.ts.map +1 -0
  120. package/dist/primitives/stableKeys.js +14 -0
  121. package/dist/primitives/stableKeys.js.map +1 -0
  122. package/dist/primitives/suggestions.d.ts +66 -0
  123. package/dist/primitives/suggestions.d.ts.map +1 -0
  124. package/dist/primitives/suggestions.js +137 -0
  125. package/dist/primitives/suggestions.js.map +1 -0
  126. package/dist/primitives/thread.d.ts +11 -0
  127. package/dist/primitives/thread.d.ts.map +1 -0
  128. package/dist/primitives/thread.js +37 -0
  129. package/dist/primitives/thread.js.map +1 -0
  130. package/dist/primitives/threadList.d.ts +82 -0
  131. package/dist/primitives/threadList.d.ts.map +1 -0
  132. package/dist/primitives/threadList.js +128 -0
  133. package/dist/primitives/threadList.js.map +1 -0
  134. package/dist/primitives/threadListFocusGroup.d.ts +14 -0
  135. package/dist/primitives/threadListFocusGroup.d.ts.map +1 -0
  136. package/dist/primitives/threadListFocusGroup.js +32 -0
  137. package/dist/primitives/threadListFocusGroup.js.map +1 -0
  138. package/dist/primitives/threadListStructural.d.ts +29 -0
  139. package/dist/primitives/threadListStructural.d.ts.map +1 -0
  140. package/dist/primitives/threadListStructural.js +55 -0
  141. package/dist/primitives/threadListStructural.js.map +1 -0
  142. package/dist/primitives/useComposerSendState.d.ts +6 -0
  143. package/dist/primitives/useComposerSendState.d.ts.map +1 -0
  144. package/dist/primitives/useComposerSendState.js +15 -0
  145. package/dist/primitives/useComposerSendState.js.map +1 -0
  146. package/dist/primitives/viewportContext.d.ts +12 -0
  147. package/dist/primitives/viewportContext.d.ts.map +1 -0
  148. package/dist/primitives/viewportContext.js +6 -0
  149. package/dist/primitives/viewportContext.js.map +1 -0
  150. package/dist/useAui.d.ts +15 -0
  151. package/dist/useAui.d.ts.map +1 -0
  152. package/dist/useAui.js +21 -0
  153. package/dist/useAui.js.map +1 -0
  154. package/dist/useAuiEvent.d.ts +17 -0
  155. package/dist/useAuiEvent.d.ts.map +1 -0
  156. package/dist/useAuiEvent.js +52 -0
  157. package/dist/useAuiEvent.js.map +1 -0
  158. package/dist/useAuiState.d.ts +23 -0
  159. package/dist/useAuiState.d.ts.map +1 -0
  160. package/dist/useAuiState.js +42 -0
  161. package/dist/useAuiState.js.map +1 -0
  162. package/dist/useScrollLock.d.ts +3 -0
  163. package/dist/useScrollLock.d.ts.map +1 -0
  164. package/dist/useScrollLock.js +53 -0
  165. package/dist/useScrollLock.js.map +1 -0
  166. package/package.json +64 -3
  167. package/src/AuiIf.ts +34 -0
  168. package/src/AuiProvider.ts +90 -0
  169. package/src/__tests__/AuiIf.test.ts +54 -0
  170. package/src/__tests__/AuiProvider.test.ts +266 -0
  171. package/src/__tests__/byindex-shrink-race.test.ts +411 -0
  172. package/src/__tests__/dist-graph.test.ts +49 -0
  173. package/src/__tests__/fixtures.ts +51 -0
  174. package/src/__tests__/primitives-actionbar.test.ts +469 -0
  175. package/src/__tests__/primitives-attachment.test.ts +493 -0
  176. package/src/__tests__/primitives-content.test.ts +749 -0
  177. package/src/__tests__/primitives-keyed-items.test.ts +270 -0
  178. package/src/__tests__/primitives-keyed-messages.test.ts +264 -0
  179. package/src/__tests__/primitives-structural.test.ts +573 -0
  180. package/src/__tests__/primitives-suggestions.test.ts +374 -0
  181. package/src/__tests__/primitives-threadlist.test.ts +443 -0
  182. package/src/__tests__/primitives-tool-ui.test.ts +579 -0
  183. package/src/__tests__/primitives.test.ts +361 -0
  184. package/src/__tests__/useAuiEvent.test.ts +159 -0
  185. package/src/__tests__/useAuiState.test.ts +124 -0
  186. package/src/context.ts +31 -0
  187. package/src/index.ts +87 -0
  188. package/src/primitives/AttachmentByIndexProvider.ts +88 -0
  189. package/src/primitives/ChainOfThoughtPrimitiveAccordionTrigger.test.ts +105 -0
  190. package/src/primitives/ChainOfThoughtPrimitiveAccordionTrigger.ts +38 -0
  191. package/src/primitives/ChainOfThoughtPrimitiveParts.test.ts +254 -0
  192. package/src/primitives/ChainOfThoughtPrimitiveParts.ts +112 -0
  193. package/src/primitives/ComposerPrimitiveCancel.ts +41 -0
  194. package/src/primitives/ComposerPrimitiveInput.ts +64 -0
  195. package/src/primitives/ComposerPrimitiveSend.ts +39 -0
  196. package/src/primitives/MessageByIdProvider.ts +89 -0
  197. package/src/primitives/MessagePrimitiveParts.tool-interaction.test.ts +88 -0
  198. package/src/primitives/MessagePrimitiveParts.ts +166 -0
  199. package/src/primitives/PartByIndexProvider.ts +62 -0
  200. package/src/primitives/ThreadListItemPrimitiveRoot.ts +57 -0
  201. package/src/primitives/ThreadListItemPrimitiveTrigger.ts +74 -0
  202. package/src/primitives/ThreadListKeyboardNav.test.ts +298 -0
  203. package/src/primitives/ThreadListPrimitiveRoot.ts +18 -0
  204. package/src/primitives/ThreadPrimitiveMessages.ts +40 -0
  205. package/src/primitives/ThreadPrimitiveScrollToBottom.ts +65 -0
  206. package/src/primitives/ThreadPrimitiveViewport.ts +233 -0
  207. package/src/primitives/ThreadPrimitiveViewportFooter.test.ts +305 -0
  208. package/src/primitives/ThreadPrimitiveViewportFooter.ts +60 -0
  209. package/src/primitives/actionBar.ts +159 -0
  210. package/src/primitives/attachment.ts +76 -0
  211. package/src/primitives/attrDisabled.ts +6 -0
  212. package/src/primitives/branchPicker.ts +77 -0
  213. package/src/primitives/composerAttachments.ts +181 -0
  214. package/src/primitives/error.ts +36 -0
  215. package/src/primitives/lastValidCache.ts +12 -0
  216. package/src/primitives/message.ts +54 -0
  217. package/src/primitives/messageAttachments.ts +32 -0
  218. package/src/primitives/stableKeys.test.ts +19 -0
  219. package/src/primitives/stableKeys.ts +21 -0
  220. package/src/primitives/suggestions.ts +179 -0
  221. package/src/primitives/thread.ts +46 -0
  222. package/src/primitives/threadList.ts +163 -0
  223. package/src/primitives/threadListFocusGroup.ts +56 -0
  224. package/src/primitives/threadListStructural.ts +86 -0
  225. package/src/primitives/useComposerSendState.ts +13 -0
  226. package/src/primitives/viewportContext.ts +16 -0
  227. package/src/useAui.ts +18 -0
  228. package/src/useAuiEvent.ts +64 -0
  229. package/src/useAuiState.ts +55 -0
  230. package/src/useScrollLock.test.ts +207 -0
  231. package/src/useScrollLock.ts +79 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 AgentbaseAI Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,91 @@
1
- # Temporary Holding Version
1
+ # `@assistant-ui/vue`
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![npm version](https://img.shields.io/npm/v/@assistant-ui/vue)](https://www.npmjs.com/package/@assistant-ui/vue)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@assistant-ui/vue)](https://www.npmjs.com/package/@assistant-ui/vue)
5
+ [![GitHub stars](https://img.shields.io/github/stars/assistant-ui/assistant-ui)](https://github.com/assistant-ui/assistant-ui)
6
+ ![License](https://img.shields.io/npm/l/@assistant-ui/vue)
7
+
8
+ Vue bindings for assistant-ui. A provider, composables, and unstyled primitives for streaming AI chat in Vue and Nuxt, running the same runtime as `@assistant-ui/react`.
9
+
10
+ ## Installation
11
+
12
+ Requires Vue 3.5 or newer.
13
+
14
+ ```bash
15
+ npm install @assistant-ui/vue @assistant-ui/ai-sdk ai react
16
+ ```
17
+
18
+ `@assistant-ui/ai-sdk` connects the [AI SDK](https://ai-sdk.dev). It runs the AI SDK's chat state on the shared runtime, so it needs `react` installed even though React renders nothing.
19
+
20
+ ## Usage
21
+
22
+ ```vue
23
+ <!-- app/components/Assistant.client.vue -->
24
+ <script setup lang="ts">
25
+ import {
26
+ AuiConfig,
27
+ AuiProvider,
28
+ ComposerPrimitiveInput,
29
+ ComposerPrimitiveSend,
30
+ MessagePrimitiveParts,
31
+ ThreadPrimitiveMessages,
32
+ ThreadPrimitiveViewport,
33
+ } from "@assistant-ui/vue";
34
+ import { AISDKChat } from "@assistant-ui/ai-sdk";
35
+
36
+ const config = AuiConfig({ threads: AISDKChat() });
37
+ </script>
38
+
39
+ <template>
40
+ <AuiProvider :config="config">
41
+ <ThreadPrimitiveViewport class="h-dvh overflow-y-auto">
42
+ <ThreadPrimitiveMessages>
43
+ <MessagePrimitiveParts />
44
+ </ThreadPrimitiveMessages>
45
+ </ThreadPrimitiveViewport>
46
+ <ComposerPrimitiveInput placeholder="Message..." />
47
+ <ComposerPrimitiveSend>Send</ComposerPrimitiveSend>
48
+ </AuiProvider>
49
+ </template>
50
+ ```
51
+
52
+ `AISDKChat()` posts to `/api/chat`, a route that returns `streamText(...).toUIMessageStreamResponse()`. Mount the provider client-only, as a `.client.vue` component in Nuxt: Vue's server renderer never disposes effect scopes, so a provider rendered on the server would keep one runtime per request.
53
+
54
+ Styled components (thread, messages, reasoning, tool calls, thread list) install from the assistant-ui registry; the [quickstart](https://www.assistant-ui.com/docs/vue/quickstart) walks through them.
55
+
56
+ ## API
57
+
58
+ - `AuiProvider` owns an assistant client built from an `AuiConfig`; `AuiIf` renders its slot while a state selector returns true.
59
+ - `useAui()` returns a stable client whose scope accessors resolve to the provider's current client. `useAuiState(selector)` returns a computed ref that updates when the selected slice changes. `useAuiEvent(event, callback)` subscribes for the lifetime of the current effect scope.
60
+ - Primitives cover threads (`ThreadPrimitiveRoot`, `Messages`, `Viewport`, `ViewportFooter`, `ScrollToBottom`, `Suggestions`), messages (`MessagePrimitiveRoot`, `Parts`, `Attachments`), composers (`ComposerPrimitiveInput`, `Send`, `Cancel`, `Attachments`, `AddAttachment`, `AttachmentDropzone`), attachments, branch pickers, action bars, suggestions, errors, chain of thought, and thread lists, each exported under its full name such as `ThreadPrimitiveMessages`.
61
+ - Tool calls render through Vue components registered with `Tools({ toolkit })` or `aui.tools.setToolUI`, which receive a single `tool` prop typed `ToolUIProps`; a React renderer from a toolkit shared with a React app does not render in Vue.
62
+
63
+ ## Without the AI SDK
64
+
65
+ To run a runtime that does not need React, such as one mounted with `RuntimeAdapter` from `@assistant-ui/core/store`, alias `react` to `@assistant-ui/tap/standalone-shim` so the shared runtime code resolves without React installed:
66
+
67
+ ```ts
68
+ // vite.config.ts
69
+ export default defineConfig({
70
+ resolve: {
71
+ alias: {
72
+ "react/compiler-runtime": "@assistant-ui/tap/standalone-shim/compiler-runtime",
73
+ react: "@assistant-ui/tap/standalone-shim",
74
+ },
75
+ },
76
+ });
77
+ ```
78
+
79
+ ## Documentation
80
+
81
+ - [Getting Started](https://www.assistant-ui.com/docs/vue)
82
+ - [Quickstart](https://www.assistant-ui.com/docs/vue/quickstart)
83
+ - [Runtimes](https://www.assistant-ui.com/docs/vue/runtimes)
84
+ - [Server rendering](https://www.assistant-ui.com/docs/vue/ssr)
85
+ - [Tool UI](https://www.assistant-ui.com/docs/vue/tool-ui)
86
+
87
+ ## For other platforms
88
+
89
+ - Web with React: [`@assistant-ui/react`](https://www.npmjs.com/package/@assistant-ui/react)
90
+ - React Native: [`@assistant-ui/react-native`](https://www.npmjs.com/package/@assistant-ui/react-native)
91
+ - Terminal: [`@assistant-ui/react-ink`](https://www.npmjs.com/package/@assistant-ui/react-ink)
@@ -0,0 +1,27 @@
1
+ import { type PropType, type SlotsType, type VNodeChild } from "vue";
2
+ import type { AssistantState } from "@assistant-ui/store/client";
3
+ /**
4
+ * Renders the default slot while `condition` selects `true` from the
5
+ * assistant state.
6
+ *
7
+ * @example
8
+ * ```html
9
+ * <AuiIf :condition="(s) => s.thread.isRunning">
10
+ * <StopButton />
11
+ * </AuiIf>
12
+ * ```
13
+ */
14
+ export declare const AuiIf: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
15
+ condition: {
16
+ type: PropType<(state: AssistantState) => boolean>;
17
+ required: true;
18
+ };
19
+ }>, () => VNodeChild[] | null | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
20
+ condition: {
21
+ type: PropType<(state: AssistantState) => boolean>;
22
+ required: true;
23
+ };
24
+ }>> & Readonly<{}>, {}, SlotsType<{
25
+ default?: () => VNodeChild[];
26
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
27
+ //# sourceMappingURL=AuiIf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuiIf.d.ts","sourceRoot":"","sources":["../src/AuiIf.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AACb,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAGjE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,KAAK;;cAIM,QAAQ,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC;;;;;cAA5C,QAAQ,CAAC,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC;;;;cAI3B,MAAM,UAAU,EAAE;yEAKzD,CAAC"}
package/dist/AuiIf.js ADDED
@@ -0,0 +1,30 @@
1
+ import { useAuiState } from "./useAuiState.js";
2
+ import { defineComponent } from "vue";
3
+ //#region src/AuiIf.ts
4
+ /**
5
+ * Renders the default slot while `condition` selects `true` from the
6
+ * assistant state.
7
+ *
8
+ * @example
9
+ * ```html
10
+ * <AuiIf :condition="(s) => s.thread.isRunning">
11
+ * <StopButton />
12
+ * </AuiIf>
13
+ * ```
14
+ */
15
+ const AuiIf = defineComponent({
16
+ name: "AuiIf",
17
+ props: { condition: {
18
+ type: Function,
19
+ required: true
20
+ } },
21
+ slots: Object,
22
+ setup(props, { slots }) {
23
+ const active = useAuiState((state) => props.condition(state));
24
+ return () => active.value ? slots.default?.() : null;
25
+ }
26
+ });
27
+ //#endregion
28
+ export { AuiIf };
29
+
30
+ //# sourceMappingURL=AuiIf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuiIf.js","names":[],"sources":["../src/AuiIf.ts"],"sourcesContent":["import {\n defineComponent,\n type PropType,\n type SlotsType,\n type VNodeChild,\n} from \"vue\";\nimport type { AssistantState } from \"@assistant-ui/store/client\";\nimport { useAuiState } from \"./useAuiState\";\n\n/**\n * Renders the default slot while `condition` selects `true` from the\n * assistant state.\n *\n * @example\n * ```html\n * <AuiIf :condition=\"(s) => s.thread.isRunning\">\n * <StopButton />\n * </AuiIf>\n * ```\n */\nexport const AuiIf = defineComponent({\n name: \"AuiIf\",\n props: {\n condition: {\n type: Function as PropType<(state: AssistantState) => boolean>,\n required: true,\n },\n },\n slots: Object as SlotsType<{ default?: () => VNodeChild[] }>,\n setup(props, { slots }) {\n const active = useAuiState((state) => props.condition(state));\n return () => (active.value ? slots.default?.() : null);\n },\n});\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAa,QAAQ,gBAAgB;CACnC,MAAM;CACN,OAAO,EACL,WAAW;EACT,MAAM;EACN,UAAU;CACZ,EACF;CACA,OAAO;CACP,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,SAAS,aAAa,UAAU,MAAM,UAAU,KAAK,CAAC;EAC5D,aAAc,OAAO,QAAQ,MAAM,UAAU,IAAI;CACnD;AACF,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type PropType, type SlotsType, type VNodeChild } from "vue";
2
+ import { type AssistantClient, type AuiConfig } from "@assistant-ui/store/client";
3
+ /**
4
+ * Creates an `AssistantClient` from the given config and provides it to the
5
+ * subtree.
6
+ *
7
+ * At the top level, `config` alone creates this subtree's own client. Under a
8
+ * parent provider, `extends` is mandatory: pass `:extends="aui"` to extend the
9
+ * parent client or `:extends="null"` to isolate from it (enforced with a dev
10
+ * error).
11
+ *
12
+ * The `config` prop is live: passing a new config object updates element args
13
+ * in place (scopes keep their state) and mounts or unmounts added and removed
14
+ * scopes. Pass a computed config to derive it from reactive inputs. `extends`
15
+ * is captured when the provider mounts; remount (for example with a `key`) to
16
+ * change the parent.
17
+ */
18
+ export declare const AuiProvider: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
19
+ config: {
20
+ type: PropType<AuiConfig>;
21
+ required: true;
22
+ };
23
+ extends: {
24
+ type: PropType<AssistantClient | null>;
25
+ default: undefined;
26
+ };
27
+ }>, () => VNodeChild[] | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
28
+ config: {
29
+ type: PropType<AuiConfig>;
30
+ required: true;
31
+ };
32
+ extends: {
33
+ type: PropType<AssistantClient | null>;
34
+ default: undefined;
35
+ };
36
+ }>> & Readonly<{}>, {
37
+ extends: AssistantClient | null;
38
+ }, SlotsType<{
39
+ default?: () => VNodeChild[];
40
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
41
+ //# sourceMappingURL=AuiProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuiProvider.d.ts","sourceRoot":"","sources":["../src/AuiProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AACb,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,SAAS,EACf,MAAM,4BAA4B,CAAC;AAIpC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW;;cAIF,QAAQ,CAAC,SAAS,CAAC;;;;cAInB,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;;;;;cAJhC,QAAQ,CAAC,SAAS,CAAC;;;;cAInB,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;;;;;;cAIb,MAAM,UAAU,EAAE;yEA4CzD,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { auiInjectionKey, createClientFacade } from "./context.js";
2
+ import { defineComponent, inject, onScopeDispose, provide, watch } from "vue";
3
+ import { createAssistantClient } from "@assistant-ui/store/client";
4
+ import { isDevelopment } from "@assistant-ui/core/store/internal";
5
+ //#region src/AuiProvider.ts
6
+ /**
7
+ * Creates an `AssistantClient` from the given config and provides it to the
8
+ * subtree.
9
+ *
10
+ * At the top level, `config` alone creates this subtree's own client. Under a
11
+ * parent provider, `extends` is mandatory: pass `:extends="aui"` to extend the
12
+ * parent client or `:extends="null"` to isolate from it (enforced with a dev
13
+ * error).
14
+ *
15
+ * The `config` prop is live: passing a new config object updates element args
16
+ * in place (scopes keep their state) and mounts or unmounts added and removed
17
+ * scopes. Pass a computed config to derive it from reactive inputs. `extends`
18
+ * is captured when the provider mounts; remount (for example with a `key`) to
19
+ * change the parent.
20
+ */
21
+ const AuiProvider = defineComponent({
22
+ name: "AuiProvider",
23
+ props: {
24
+ config: {
25
+ type: Object,
26
+ required: true
27
+ },
28
+ extends: {
29
+ type: Object,
30
+ default: void 0
31
+ }
32
+ },
33
+ slots: Object,
34
+ setup(props, { slots }) {
35
+ const injected = inject(auiInjectionKey, null);
36
+ const hasExtends = props.extends !== void 0;
37
+ if (isDevelopment) {
38
+ if (injected && !hasExtends) throw new Error("A parent AuiProvider exists. Pass :extends=\"aui\" to inherit it or :extends=\"null\" to isolate.");
39
+ }
40
+ const parent = !hasExtends ? injected?.source : props.extends === null ? void 0 : injected && props.extends === injected.aui ? injected.source : props.extends;
41
+ const handle = createAssistantClient({
42
+ getConfig: () => props.config,
43
+ subscribe: (listener) => watch(() => props.config, listener)
44
+ }, parent ? { parent } : void 0);
45
+ const release = handle.subscribe(() => {});
46
+ onScopeDispose(release);
47
+ const source = {
48
+ getClient: handle.getClient,
49
+ subscribe: handle.subscribe
50
+ };
51
+ provide(auiInjectionKey, {
52
+ source,
53
+ aui: createClientFacade(source)
54
+ });
55
+ return () => slots.default?.();
56
+ }
57
+ });
58
+ //#endregion
59
+ export { AuiProvider };
60
+
61
+ //# sourceMappingURL=AuiProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuiProvider.js","names":[],"sources":["../src/AuiProvider.ts"],"sourcesContent":["import {\n defineComponent,\n inject,\n onScopeDispose,\n provide,\n watch,\n type PropType,\n type SlotsType,\n type VNodeChild,\n} from \"vue\";\nimport {\n createAssistantClient,\n type AssistantClient,\n type AuiConfig,\n} from \"@assistant-ui/store/client\";\nimport { auiInjectionKey, createClientFacade } from \"./context\";\nimport { isDevelopment } from \"@assistant-ui/core/store/internal\";\n\n/**\n * Creates an `AssistantClient` from the given config and provides it to the\n * subtree.\n *\n * At the top level, `config` alone creates this subtree's own client. Under a\n * parent provider, `extends` is mandatory: pass `:extends=\"aui\"` to extend the\n * parent client or `:extends=\"null\"` to isolate from it (enforced with a dev\n * error).\n *\n * The `config` prop is live: passing a new config object updates element args\n * in place (scopes keep their state) and mounts or unmounts added and removed\n * scopes. Pass a computed config to derive it from reactive inputs. `extends`\n * is captured when the provider mounts; remount (for example with a `key`) to\n * change the parent.\n */\nexport const AuiProvider = defineComponent({\n name: \"AuiProvider\",\n props: {\n config: {\n type: Object as PropType<AuiConfig>,\n required: true,\n },\n extends: {\n type: Object as PropType<AssistantClient | null>,\n default: undefined,\n },\n },\n slots: Object as SlotsType<{ default?: () => VNodeChild[] }>,\n setup(props, { slots }) {\n const injected = inject(auiInjectionKey, null);\n const hasExtends = props.extends !== undefined;\n\n if (isDevelopment) {\n if (injected && !hasExtends) {\n throw new Error(\n 'A parent AuiProvider exists. Pass :extends=\"aui\" to inherit it or :extends=\"null\" to isolate.',\n );\n }\n }\n\n const parent = !hasExtends\n ? injected?.source\n : props.extends === null\n ? undefined\n : injected && props.extends === injected.aui\n ? injected.source\n : props.extends;\n\n const handle = createAssistantClient(\n {\n getConfig: () => props.config,\n subscribe: (listener) => watch(() => props.config, listener),\n },\n parent ? { parent } : undefined,\n );\n // The provider holds the lifetime subscription that keeps the client\n // mounted while descendants come and go\n const release = handle.subscribe(() => {});\n onScopeDispose(release);\n\n const source = {\n getClient: handle.getClient,\n subscribe: handle.subscribe,\n };\n provide(auiInjectionKey, {\n source,\n aui: createClientFacade(source),\n });\n\n return () => slots.default?.();\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAiCA,MAAa,cAAc,gBAAgB;CACzC,MAAM;CACN,OAAO;EACL,QAAQ;GACN,MAAM;GACN,UAAU;EACZ;EACA,SAAS;GACP,MAAM;GACN,SAAS,KAAA;EACX;CACF;CACA,OAAO;CACP,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,WAAW,OAAO,iBAAiB,IAAI;EAC7C,MAAM,aAAa,MAAM,YAAY,KAAA;EAErC,IAAI,eACE;OAAA,YAAY,CAAC,YACf,MAAM,IAAI,MACR,mGACF;EAAA;EAIJ,MAAM,SAAS,CAAC,aACZ,UAAU,SACV,MAAM,YAAY,OAChB,KAAA,IACA,YAAY,MAAM,YAAY,SAAS,MACrC,SAAS,SACT,MAAM;EAEd,MAAM,SAAS,sBACb;GACE,iBAAiB,MAAM;GACvB,YAAY,aAAa,YAAY,MAAM,QAAQ,QAAQ;EAC7D,GACA,SAAS,EAAE,OAAO,IAAI,KAAA,CACxB;EAGA,MAAM,UAAU,OAAO,gBAAgB,CAAC,CAAC;EACzC,eAAe,OAAO;EAEtB,MAAM,SAAS;GACb,WAAW,OAAO;GAClB,WAAW,OAAO;EACpB;EACA,QAAQ,iBAAiB;GACvB;GACA,KAAK,mBAAmB,MAAM;EAChC,CAAC;EAED,aAAa,MAAM,UAAU;CAC/B;AACF,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type InjectionKey } from "vue";
2
+ import { createClientFacade, type AssistantClient, type AssistantClientSource } from "@assistant-ui/store/client";
3
+ export type AuiContext = {
4
+ source: AssistantClientSource;
5
+ aui: AssistantClient;
6
+ };
7
+ export declare const auiInjectionKey: InjectionKey<AuiContext>;
8
+ export declare const useAuiContext: () => AuiContext;
9
+ export { createClientFacade };
10
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,KAAK,CAAC;AAChD,OAAO,EACL,kBAAkB,EAElB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,GAAG,EAAE,eAAe,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,UAAU,CAEpD,CAAC;AAYF,eAAO,MAAM,aAAa,QAAO,UACQ,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { inject } from "vue";
2
+ import { DefaultAssistantClient, createClientFacade } from "@assistant-ui/store/client";
3
+ //#region src/context.ts
4
+ const auiInjectionKey = Symbol("assistant-ui.vue.aui");
5
+ const NO_OP_SUBSCRIBE = () => () => {};
6
+ const defaultContext = {
7
+ source: {
8
+ getClient: () => DefaultAssistantClient,
9
+ subscribe: NO_OP_SUBSCRIBE
10
+ },
11
+ aui: DefaultAssistantClient
12
+ };
13
+ const useAuiContext = () => inject(auiInjectionKey, defaultContext);
14
+ //#endregion
15
+ export { auiInjectionKey, createClientFacade, useAuiContext };
16
+
17
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../src/context.ts"],"sourcesContent":["import { inject, type InjectionKey } from \"vue\";\nimport {\n createClientFacade,\n DefaultAssistantClient,\n type AssistantClient,\n type AssistantClientSource,\n} from \"@assistant-ui/store/client\";\n\nexport type AuiContext = {\n source: AssistantClientSource;\n aui: AssistantClient;\n};\n\nexport const auiInjectionKey: InjectionKey<AuiContext> = Symbol(\n \"assistant-ui.vue.aui\",\n);\n\nconst NO_OP_SUBSCRIBE = () => () => {};\n\nconst defaultContext: AuiContext = {\n source: {\n getClient: () => DefaultAssistantClient,\n subscribe: NO_OP_SUBSCRIBE,\n },\n aui: DefaultAssistantClient,\n};\n\nexport const useAuiContext = (): AuiContext =>\n inject(auiInjectionKey, defaultContext);\n\nexport { createClientFacade };\n"],"mappings":";;;AAaA,MAAa,kBAA4C,OACvD,sBACF;AAEA,MAAM,8BAA8B,CAAC;AAErC,MAAM,iBAA6B;CACjC,QAAQ;EACN,iBAAiB;EACjB,WAAW;CACb;CACA,KAAK;AACP;AAEA,MAAa,sBACX,OAAO,iBAAiB,cAAc"}
@@ -0,0 +1,34 @@
1
+ export { AuiProvider } from "./AuiProvider.js";
2
+ export { AuiIf } from "./AuiIf.js";
3
+ export { useAui } from "./useAui.js";
4
+ export { useAuiState } from "./useAuiState.js";
5
+ export { useAuiEvent } from "./useAuiEvent.js";
6
+ export { useScrollLock } from "./useScrollLock.js";
7
+ export { MessageByIdProvider } from "./primitives/MessageByIdProvider.js";
8
+ export { PartByIndexProvider } from "./primitives/PartByIndexProvider.js";
9
+ export { ThreadPrimitiveMessages } from "./primitives/ThreadPrimitiveMessages.js";
10
+ export { ThreadPrimitiveViewport } from "./primitives/ThreadPrimitiveViewport.js";
11
+ export { ThreadPrimitiveViewportFooter } from "./primitives/ThreadPrimitiveViewportFooter.js";
12
+ export { ThreadPrimitiveScrollToBottom } from "./primitives/ThreadPrimitiveScrollToBottom.js";
13
+ export { MessagePrimitiveParts, type DataUIProps, type ToolUIProps, } from "./primitives/MessagePrimitiveParts.js";
14
+ export { ChainOfThoughtPrimitiveParts } from "./primitives/ChainOfThoughtPrimitiveParts.js";
15
+ export { ChainOfThoughtPrimitiveAccordionTrigger } from "./primitives/ChainOfThoughtPrimitiveAccordionTrigger.js";
16
+ export { ComposerPrimitiveInput } from "./primitives/ComposerPrimitiveInput.js";
17
+ export { ComposerPrimitiveSend } from "./primitives/ComposerPrimitiveSend.js";
18
+ export { ComposerPrimitiveCancel } from "./primitives/ComposerPrimitiveCancel.js";
19
+ export { BranchPickerPrimitivePrevious, BranchPickerPrimitiveNext, BranchPickerPrimitiveNumber, BranchPickerPrimitiveCount, } from "./primitives/branchPicker.js";
20
+ export { ActionBarPrimitiveEdit, ActionBarPrimitiveReload, ActionBarPrimitiveCopy, } from "./primitives/actionBar.js";
21
+ export { SuggestionByIndexProvider, ThreadPrimitiveSuggestions, SuggestionPrimitiveTrigger, SuggestionPrimitiveTitle, SuggestionPrimitiveDescription, } from "./primitives/suggestions.js";
22
+ export { ThreadListItemByIndexProvider, ThreadListPrimitiveItems, ThreadListPrimitiveNew, ThreadListItemPrimitiveTitle, ThreadListItemPrimitiveTrigger, } from "./primitives/threadList.js";
23
+ export { ThreadListPrimitiveRoot } from "./primitives/ThreadListPrimitiveRoot.js";
24
+ export { ThreadListItemPrimitiveRoot } from "./primitives/ThreadListItemPrimitiveRoot.js";
25
+ export { AttachmentByIndexProvider } from "./primitives/AttachmentByIndexProvider.js";
26
+ export { AttachmentPrimitiveRoot, AttachmentPrimitiveName, AttachmentPrimitiveThumb, AttachmentPrimitiveRemove, } from "./primitives/attachment.js";
27
+ export { ComposerPrimitiveAttachments, ComposerPrimitiveAddAttachment, ComposerPrimitiveAttachmentDropzone, } from "./primitives/composerAttachments.js";
28
+ export { MessagePrimitiveAttachments } from "./primitives/messageAttachments.js";
29
+ export { ErrorPrimitiveRoot, ErrorPrimitiveMessage } from "./primitives/error.js";
30
+ export { ThreadPrimitiveRoot } from "./primitives/thread.js";
31
+ export { MessagePrimitiveRoot } from "./primitives/message.js";
32
+ export { ThreadListPrimitiveLoadMore, ThreadListItemPrimitiveArchive, ThreadListItemPrimitiveUnarchive, ThreadListItemPrimitiveDelete, } from "./primitives/threadListStructural.js";
33
+ export { AuiConfig, Derived, createAssistantClient, type AssistantClient, type AssistantClientHandle, type AssistantClientSource, type AssistantConfigSource, type AssistantState, type AssistantEventCallback, type AssistantEventName, type AssistantEventSelector, type Unsubscribe, } from "@assistant-ui/store/client";
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,KAAK,EAAE,mBAAgB;AAChC,OAAO,EAAE,MAAM,EAAE,oBAAiB;AAClC,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAEhD,OAAO,EAAE,mBAAmB,EAAE,4CAAyC;AACvE,OAAO,EAAE,mBAAmB,EAAE,4CAAyC;AACvE,OAAO,EAAE,uBAAuB,EAAE,gDAA6C;AAC/E,OAAO,EAAE,uBAAuB,EAAE,gDAA6C;AAC/E,OAAO,EAAE,6BAA6B,EAAE,sDAAmD;AAC3F,OAAO,EAAE,6BAA6B,EAAE,sDAAmD;AAC3F,OAAO,EACL,qBAAqB,EACrB,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,8CAA2C;AAC5C,OAAO,EAAE,4BAA4B,EAAE,qDAAkD;AACzF,OAAO,EAAE,uCAAuC,EAAE,gEAA6D;AAC/G,OAAO,EAAE,sBAAsB,EAAE,+CAA4C;AAC7E,OAAO,EAAE,qBAAqB,EAAE,8CAA2C;AAC3E,OAAO,EAAE,uBAAuB,EAAE,gDAA6C;AAC/E,OAAO,EACL,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,GAC3B,qCAAkC;AACnC,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GACvB,kCAA+B;AAChC,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,GAC/B,oCAAiC;AAClC,OAAO,EACL,6BAA6B,EAC7B,wBAAwB,EACxB,sBAAsB,EACtB,4BAA4B,EAC5B,8BAA8B,GAC/B,mCAAgC;AACjC,OAAO,EAAE,uBAAuB,EAAE,gDAA6C;AAC/E,OAAO,EAAE,2BAA2B,EAAE,oDAAiD;AACvF,OAAO,EAAE,yBAAyB,EAAE,kDAA+C;AACnF,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,GAC1B,mCAAgC;AACjC,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,mCAAmC,GACpC,4CAAyC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,2CAAwC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,8BAA2B;AAC/E,OAAO,EAAE,mBAAmB,EAAE,+BAA4B;AAC1D,OAAO,EAAE,oBAAoB,EAAE,gCAA6B;AAC5D,OAAO,EACL,2BAA2B,EAC3B,8BAA8B,EAC9B,gCAAgC,EAChC,6BAA6B,GAC9B,6CAA0C;AAE3C,OAAO,EACL,SAAS,EACT,OAAO,EACP,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,GACjB,MAAM,4BAA4B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ import { useAuiState } from "./useAuiState.js";
2
+ import { AuiIf } from "./AuiIf.js";
3
+ import { AuiProvider } from "./AuiProvider.js";
4
+ import { useAui } from "./useAui.js";
5
+ import { useAuiEvent } from "./useAuiEvent.js";
6
+ import { useScrollLock } from "./useScrollLock.js";
7
+ import { MessageByIdProvider } from "./primitives/MessageByIdProvider.js";
8
+ import { PartByIndexProvider } from "./primitives/PartByIndexProvider.js";
9
+ import { ThreadPrimitiveMessages } from "./primitives/ThreadPrimitiveMessages.js";
10
+ import { ThreadPrimitiveViewport } from "./primitives/ThreadPrimitiveViewport.js";
11
+ import { ThreadPrimitiveViewportFooter } from "./primitives/ThreadPrimitiveViewportFooter.js";
12
+ import { ThreadPrimitiveScrollToBottom } from "./primitives/ThreadPrimitiveScrollToBottom.js";
13
+ import { MessagePrimitiveParts } from "./primitives/MessagePrimitiveParts.js";
14
+ import { ChainOfThoughtPrimitiveParts } from "./primitives/ChainOfThoughtPrimitiveParts.js";
15
+ import { ChainOfThoughtPrimitiveAccordionTrigger } from "./primitives/ChainOfThoughtPrimitiveAccordionTrigger.js";
16
+ import { ComposerPrimitiveInput } from "./primitives/ComposerPrimitiveInput.js";
17
+ import { ComposerPrimitiveSend } from "./primitives/ComposerPrimitiveSend.js";
18
+ import { ComposerPrimitiveCancel } from "./primitives/ComposerPrimitiveCancel.js";
19
+ import { BranchPickerPrimitiveCount, BranchPickerPrimitiveNext, BranchPickerPrimitiveNumber, BranchPickerPrimitivePrevious } from "./primitives/branchPicker.js";
20
+ import { ActionBarPrimitiveCopy, ActionBarPrimitiveEdit, ActionBarPrimitiveReload } from "./primitives/actionBar.js";
21
+ import { SuggestionByIndexProvider, SuggestionPrimitiveDescription, SuggestionPrimitiveTitle, SuggestionPrimitiveTrigger, ThreadPrimitiveSuggestions } from "./primitives/suggestions.js";
22
+ import { ThreadListItemPrimitiveTrigger } from "./primitives/ThreadListItemPrimitiveTrigger.js";
23
+ import { ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListPrimitiveItems, ThreadListPrimitiveNew } from "./primitives/threadList.js";
24
+ import { ThreadListPrimitiveRoot } from "./primitives/ThreadListPrimitiveRoot.js";
25
+ import { ThreadListItemPrimitiveRoot } from "./primitives/ThreadListItemPrimitiveRoot.js";
26
+ import { AttachmentByIndexProvider } from "./primitives/AttachmentByIndexProvider.js";
27
+ import { AttachmentPrimitiveName, AttachmentPrimitiveRemove, AttachmentPrimitiveRoot, AttachmentPrimitiveThumb } from "./primitives/attachment.js";
28
+ import { ComposerPrimitiveAddAttachment, ComposerPrimitiveAttachmentDropzone, ComposerPrimitiveAttachments } from "./primitives/composerAttachments.js";
29
+ import { MessagePrimitiveAttachments } from "./primitives/messageAttachments.js";
30
+ import { ErrorPrimitiveMessage, ErrorPrimitiveRoot } from "./primitives/error.js";
31
+ import { ThreadPrimitiveRoot } from "./primitives/thread.js";
32
+ import { MessagePrimitiveRoot } from "./primitives/message.js";
33
+ import { ThreadListItemPrimitiveArchive, ThreadListItemPrimitiveDelete, ThreadListItemPrimitiveUnarchive, ThreadListPrimitiveLoadMore } from "./primitives/threadListStructural.js";
34
+ import { AuiConfig, Derived, createAssistantClient } from "@assistant-ui/store/client";
35
+ export { ActionBarPrimitiveCopy, ActionBarPrimitiveEdit, ActionBarPrimitiveReload, AttachmentByIndexProvider, AttachmentPrimitiveName, AttachmentPrimitiveRemove, AttachmentPrimitiveRoot, AttachmentPrimitiveThumb, AuiConfig, AuiIf, AuiProvider, BranchPickerPrimitiveCount, BranchPickerPrimitiveNext, BranchPickerPrimitiveNumber, BranchPickerPrimitivePrevious, ChainOfThoughtPrimitiveAccordionTrigger, ChainOfThoughtPrimitiveParts, ComposerPrimitiveAddAttachment, ComposerPrimitiveAttachmentDropzone, ComposerPrimitiveAttachments, ComposerPrimitiveCancel, ComposerPrimitiveInput, ComposerPrimitiveSend, Derived, ErrorPrimitiveMessage, ErrorPrimitiveRoot, MessageByIdProvider, MessagePrimitiveAttachments, MessagePrimitiveParts, MessagePrimitiveRoot, PartByIndexProvider, SuggestionByIndexProvider, SuggestionPrimitiveDescription, SuggestionPrimitiveTitle, SuggestionPrimitiveTrigger, ThreadListItemByIndexProvider, ThreadListItemPrimitiveArchive, ThreadListItemPrimitiveDelete, ThreadListItemPrimitiveRoot, ThreadListItemPrimitiveTitle, ThreadListItemPrimitiveTrigger, ThreadListItemPrimitiveUnarchive, ThreadListPrimitiveItems, ThreadListPrimitiveLoadMore, ThreadListPrimitiveNew, ThreadListPrimitiveRoot, ThreadPrimitiveMessages, ThreadPrimitiveRoot, ThreadPrimitiveScrollToBottom, ThreadPrimitiveSuggestions, ThreadPrimitiveViewport, ThreadPrimitiveViewportFooter, createAssistantClient, useAui, useAuiEvent, useAuiState, useScrollLock };
@@ -0,0 +1,30 @@
1
+ import { type PropType, type SlotsType, type VNodeChild } from "vue";
2
+ /**
3
+ * Scopes the subtree to the attachment at `index` of `source` (the composer's
4
+ * pending attachments or the current message's attachments): descendants read
5
+ * the attachment through `s.attachment`.
6
+ */
7
+ export declare const AttachmentByIndexProvider: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
8
+ source: {
9
+ type: PropType<"composer" | "message">;
10
+ required: true;
11
+ };
12
+ index: {
13
+ type: NumberConstructor;
14
+ required: true;
15
+ };
16
+ }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
17
+ [key: string]: any;
18
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
19
+ source: {
20
+ type: PropType<"composer" | "message">;
21
+ required: true;
22
+ };
23
+ index: {
24
+ type: NumberConstructor;
25
+ required: true;
26
+ };
27
+ }>> & Readonly<{}>, {}, SlotsType<{
28
+ default?: () => VNodeChild[];
29
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
30
+ //# sourceMappingURL=AttachmentByIndexProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentByIndexProvider.d.ts","sourceRoot":"","sources":["../../src/primitives/AttachmentByIndexProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AAyBb;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;cAIhB,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;;;;;;;;;;;cAAhC,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC;;;;;;;;cAQb,MAAM,UAAU,EAAE;yEAqCzD,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { AuiProvider } from "../AuiProvider.js";
2
+ import { useAui } from "../useAui.js";
3
+ import { createLastValidCache as createLastValidCache$1, createStaleReporter } from "./lastValidCache.js";
4
+ import { computed, defineComponent, h, onScopeDispose } from "vue";
5
+ import { AuiConfig, Derived } from "@assistant-ui/store/client";
6
+ //#region src/primitives/AttachmentByIndexProvider.ts
7
+ const attachmentSourceOf = (aui, source) => source === "composer" ? aui.composer : aui.message;
8
+ const attachmentCountOf = (aui, source) => {
9
+ const state = attachmentSourceOf(aui, source).getState();
10
+ return (source === "message" ? state.submission?.attachments ?? state.attachments : state.attachments)?.length ?? 0;
11
+ };
12
+ /**
13
+ * Scopes the subtree to the attachment at `index` of `source` (the composer's
14
+ * pending attachments or the current message's attachments): descendants read
15
+ * the attachment through `s.attachment`.
16
+ */
17
+ const AttachmentByIndexProvider = defineComponent({
18
+ name: "AttachmentByIndexProvider",
19
+ props: {
20
+ source: {
21
+ type: String,
22
+ required: true
23
+ },
24
+ index: {
25
+ type: Number,
26
+ required: true
27
+ }
28
+ },
29
+ slots: Object,
30
+ setup(props, { slots }) {
31
+ const aui = useAui();
32
+ let disposed = false;
33
+ onScopeDispose(() => {
34
+ disposed = true;
35
+ });
36
+ const config = computed(() => {
37
+ const source = props.source;
38
+ const index = props.index;
39
+ const cache = createLastValidCache$1(createStaleReporter({
40
+ name: "AttachmentByIndexProvider",
41
+ index,
42
+ isCurrent: () => !disposed && index === props.index && source === props.source,
43
+ isValid: () => index < attachmentCountOf(aui, source)
44
+ }));
45
+ return AuiConfig({ attachment: Derived({
46
+ source,
47
+ query: {
48
+ type: "index",
49
+ index
50
+ },
51
+ get: (aui) => cache.resolve(index < attachmentCountOf(aui, source), () => attachmentSourceOf(aui, source).attachment({ index }))
52
+ }) });
53
+ });
54
+ return () => h(AuiProvider, {
55
+ config: config.value,
56
+ extends: aui
57
+ }, { default: () => slots.default?.() });
58
+ }
59
+ });
60
+ //#endregion
61
+ export { AttachmentByIndexProvider };
62
+
63
+ //# sourceMappingURL=AttachmentByIndexProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentByIndexProvider.js","names":["createLastValidCache"],"sources":["../../src/primitives/AttachmentByIndexProvider.ts"],"sourcesContent":["import {\n computed,\n defineComponent,\n h,\n onScopeDispose,\n type PropType,\n type SlotsType,\n type VNodeChild,\n} from \"vue\";\nimport { AuiConfig, Derived } from \"@assistant-ui/store/client\";\nimport type { AssistantClient } from \"@assistant-ui/store/client\";\nimport type { AttachmentMethods, MessageState } from \"@assistant-ui/core/store\";\nimport { AuiProvider } from \"../AuiProvider\";\nimport { useAui } from \"../useAui\";\nimport { createLastValidCache, createStaleReporter } from \"./lastValidCache\";\n\nconst attachmentSourceOf = (\n aui: AssistantClient,\n source: \"composer\" | \"message\",\n) => (source === \"composer\" ? aui.composer : aui.message);\n\nconst attachmentCountOf = (\n aui: AssistantClient,\n source: \"composer\" | \"message\",\n) => {\n const state = attachmentSourceOf(aui, source).getState();\n const attachments =\n source === \"message\"\n ? ((state as MessageState).submission?.attachments ?? state.attachments)\n : state.attachments;\n return attachments?.length ?? 0;\n};\n\n/**\n * Scopes the subtree to the attachment at `index` of `source` (the composer's\n * pending attachments or the current message's attachments): descendants read\n * the attachment through `s.attachment`.\n */\nexport const AttachmentByIndexProvider = defineComponent({\n name: \"AttachmentByIndexProvider\",\n props: {\n source: {\n type: String as PropType<\"composer\" | \"message\">,\n required: true,\n },\n index: {\n type: Number,\n required: true,\n },\n },\n slots: Object as SlotsType<{ default?: () => VNodeChild[] }>,\n setup(props, { slots }) {\n const aui = useAui();\n let disposed = false;\n onScopeDispose(() => {\n disposed = true;\n });\n const config = computed(() => {\n const source = props.source;\n const index = props.index;\n const cache = createLastValidCache<AttachmentMethods>(\n createStaleReporter({\n name: \"AttachmentByIndexProvider\",\n index,\n isCurrent: () =>\n !disposed && index === props.index && source === props.source,\n isValid: () => index < attachmentCountOf(aui, source),\n }),\n );\n return AuiConfig({\n attachment: Derived({\n source,\n query: { type: \"index\", index },\n get: (aui) =>\n cache.resolve(index < attachmentCountOf(aui, source), () =>\n attachmentSourceOf(aui, source).attachment({ index }),\n ),\n }),\n });\n });\n return () =>\n h(\n AuiProvider,\n { config: config.value, extends: aui },\n { default: () => slots.default?.() },\n );\n },\n});\n"],"mappings":";;;;;;AAgBA,MAAM,sBACJ,KACA,WACI,WAAW,aAAa,IAAI,WAAW,IAAI;AAEjD,MAAM,qBACJ,KACA,WACG;CACH,MAAM,QAAQ,mBAAmB,KAAK,MAAM,CAAC,CAAC,SAAS;CAKvD,QAHE,WAAW,YACL,MAAuB,YAAY,eAAe,MAAM,cAC1D,MAAM,YAAA,EACQ,UAAU;AAChC;;;;;;AAOA,MAAa,4BAA4B,gBAAgB;CACvD,MAAM;CACN,OAAO;EACL,QAAQ;GACN,MAAM;GACN,UAAU;EACZ;EACA,OAAO;GACL,MAAM;GACN,UAAU;EACZ;CACF;CACA,OAAO;CACP,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,MAAM,OAAO;EACnB,IAAI,WAAW;EACf,qBAAqB;GACnB,WAAW;EACb,CAAC;EACD,MAAM,SAAS,eAAe;GAC5B,MAAM,SAAS,MAAM;GACrB,MAAM,QAAQ,MAAM;GACpB,MAAM,QAAQA,uBACZ,oBAAoB;IAClB,MAAM;IACN;IACA,iBACE,CAAC,YAAY,UAAU,MAAM,SAAS,WAAW,MAAM;IACzD,eAAe,QAAQ,kBAAkB,KAAK,MAAM;GACtD,CAAC,CACH;GACA,OAAO,UAAU,EACf,YAAY,QAAQ;IAClB;IACA,OAAO;KAAE,MAAM;KAAS;IAAM;IAC9B,MAAM,QACJ,MAAM,QAAQ,QAAQ,kBAAkB,KAAK,MAAM,SACjD,mBAAmB,KAAK,MAAM,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CACtD;GACJ,CAAC,EACH,CAAC;EACH,CAAC;EACD,aACE,EACE,aACA;GAAE,QAAQ,OAAO;GAAO,SAAS;EAAI,GACrC,EAAE,eAAe,MAAM,UAAU,EAAE,CACrC;CACJ;AACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type SlotsType, type VNodeChild } from "vue";
2
+ /**
3
+ * A button that toggles the collapsed state of the chain of thought accordion.
4
+ * Caller listeners run first and can veto the toggle via `preventDefault`.
5
+ */
6
+ export declare const ChainOfThoughtPrimitiveAccordionTrigger: import("vue").DefineComponent<{}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
7
+ [key: string]: any;
8
+ }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, SlotsType<{
9
+ default?: () => VNodeChild[];
10
+ }>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
11
+ //# sourceMappingURL=ChainOfThoughtPrimitiveAccordionTrigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainOfThoughtPrimitiveAccordionTrigger.d.ts","sourceRoot":"","sources":["../../src/primitives/ChainOfThoughtPrimitiveAccordionTrigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AAKb;;;GAGG;AACH,eAAO,MAAM,uCAAuC;;;cAGX,MAAM,UAAU,EAAE;yEAmBzD,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { useAuiState } from "../useAuiState.js";
2
+ import { useAui } from "../useAui.js";
3
+ import { isAttrDisabled } from "./attrDisabled.js";
4
+ import { defineComponent, h, mergeProps } from "vue";
5
+ //#region src/primitives/ChainOfThoughtPrimitiveAccordionTrigger.ts
6
+ /**
7
+ * A button that toggles the collapsed state of the chain of thought accordion.
8
+ * Caller listeners run first and can veto the toggle via `preventDefault`.
9
+ */
10
+ const ChainOfThoughtPrimitiveAccordionTrigger = defineComponent({
11
+ name: "ChainOfThoughtPrimitiveAccordionTrigger",
12
+ inheritAttrs: false,
13
+ slots: Object,
14
+ setup(_, { attrs, slots }) {
15
+ const aui = useAui();
16
+ const collapsed = useAuiState((s) => s.chainOfThought.collapsed);
17
+ const onClick = (event) => {
18
+ if (event.defaultPrevented || isAttrDisabled(attrs)) return;
19
+ aui.chainOfThought.setCollapsed(!collapsed.value);
20
+ };
21
+ return () => h("button", mergeProps(attrs, {
22
+ type: "button",
23
+ disabled: isAttrDisabled(attrs),
24
+ onClick
25
+ }), slots.default?.());
26
+ }
27
+ });
28
+ //#endregion
29
+ export { ChainOfThoughtPrimitiveAccordionTrigger };
30
+
31
+ //# sourceMappingURL=ChainOfThoughtPrimitiveAccordionTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainOfThoughtPrimitiveAccordionTrigger.js","names":[],"sources":["../../src/primitives/ChainOfThoughtPrimitiveAccordionTrigger.ts"],"sourcesContent":["import {\n defineComponent,\n h,\n mergeProps,\n type SlotsType,\n type VNodeChild,\n} from \"vue\";\nimport { useAui } from \"../useAui\";\nimport { useAuiState } from \"../useAuiState\";\nimport { isAttrDisabled } from \"./attrDisabled\";\n\n/**\n * A button that toggles the collapsed state of the chain of thought accordion.\n * Caller listeners run first and can veto the toggle via `preventDefault`.\n */\nexport const ChainOfThoughtPrimitiveAccordionTrigger = defineComponent({\n name: \"ChainOfThoughtPrimitiveAccordionTrigger\",\n inheritAttrs: false,\n slots: Object as SlotsType<{ default?: () => VNodeChild[] }>,\n setup(_, { attrs, slots }) {\n const aui = useAui();\n const collapsed = useAuiState((s) => s.chainOfThought.collapsed);\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented || isAttrDisabled(attrs)) return;\n aui.chainOfThought.setCollapsed(!collapsed.value);\n };\n return () =>\n h(\n \"button\",\n mergeProps(attrs, {\n type: \"button\",\n disabled: isAttrDisabled(attrs),\n onClick,\n }),\n slots.default?.(),\n );\n },\n});\n"],"mappings":";;;;;;;;;AAeA,MAAa,0CAA0C,gBAAgB;CACrE,MAAM;CACN,cAAc;CACd,OAAO;CACP,MAAM,GAAG,EAAE,OAAO,SAAS;EACzB,MAAM,MAAM,OAAO;EACnB,MAAM,YAAY,aAAa,MAAM,EAAE,eAAe,SAAS;EAC/D,MAAM,WAAW,UAAsB;GACrC,IAAI,MAAM,oBAAoB,eAAe,KAAK,GAAG;GACrD,IAAI,eAAe,aAAa,CAAC,UAAU,KAAK;EAClD;EACA,aACE,EACE,UACA,WAAW,OAAO;GAChB,MAAM;GACN,UAAU,eAAe,KAAK;GAC9B;EACF,CAAC,GACD,MAAM,UAAU,CAClB;CACJ;AACF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { type SlotsType, type VNodeChild } from "vue";
2
+ import type { PartState } from "@assistant-ui/core/store";
3
+ type ChainOfThoughtPartsSlots = {
4
+ default?: (props: {
5
+ part: PartState;
6
+ }) => VNodeChild[];
7
+ };
8
+ /**
9
+ * Renders the parts within a chain of thought through the default slot, one
10
+ * invocation per entry of `s.chainOfThought.parts`.
11
+ *
12
+ * Rendering is not gated on `s.chainOfThought.collapsed`; gate visibility in
13
+ * the caller (for example with `AuiIf`), matching the React primitive.
14
+ */
15
+ export declare const ChainOfThoughtPrimitiveParts: import("vue").DefineComponent<{}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
16
+ [key: string]: any;
17
+ }>[], {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, SlotsType<ChainOfThoughtPartsSlots>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
18
+ export {};
19
+ //# sourceMappingURL=ChainOfThoughtPrimitiveParts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChainOfThoughtPrimitiveParts.d.ts","sourceRoot":"","sources":["../../src/primitives/ChainOfThoughtPrimitiveParts.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,KAAK,CAAC;AACb,OAAO,KAAK,EAAe,SAAS,EAAE,MAAM,0BAA0B,CAAC;AASvE,KAAK,wBAAwB,GAAG;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,KAAK,UAAU,EAAE,CAAC;CACxD,CAAC;AAmEF;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B;;8QAkBvC,CAAC"}