@assistant-ui/react-native 0.1.29 → 0.1.31

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 (133) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/primitives/actionBar/ActionBarCopy.d.ts +1 -8
  3. package/dist/primitives/actionBar/ActionBarCopy.d.ts.map +1 -1
  4. package/dist/primitives/actionBar/ActionBarCopy.js.map +1 -1
  5. package/dist/primitives/actionBar/ActionBarEdit.d.ts +1 -6
  6. package/dist/primitives/actionBar/ActionBarEdit.d.ts.map +1 -1
  7. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts +1 -5
  8. package/dist/primitives/actionBar/ActionBarFeedbackNegative.d.ts.map +1 -1
  9. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js.map +1 -1
  10. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts +1 -5
  11. package/dist/primitives/actionBar/ActionBarFeedbackPositive.d.ts.map +1 -1
  12. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js.map +1 -1
  13. package/dist/primitives/actionBar/ActionBarReload.d.ts +1 -6
  14. package/dist/primitives/actionBar/ActionBarReload.d.ts.map +1 -1
  15. package/dist/primitives/actionBar.d.ts +0 -2
  16. package/dist/primitives/attachment/AttachmentName.d.ts +0 -1
  17. package/dist/primitives/attachment/AttachmentName.d.ts.map +1 -1
  18. package/dist/primitives/attachment/AttachmentName.js.map +1 -1
  19. package/dist/primitives/attachment/AttachmentRemove.d.ts +1 -5
  20. package/dist/primitives/attachment/AttachmentRemove.d.ts.map +1 -1
  21. package/dist/primitives/attachment/AttachmentRoot.d.ts +1 -5
  22. package/dist/primitives/attachment/AttachmentRoot.d.ts.map +1 -1
  23. package/dist/primitives/attachment/AttachmentThumb.d.ts +0 -1
  24. package/dist/primitives/attachment/AttachmentThumb.d.ts.map +1 -1
  25. package/dist/primitives/attachment/AttachmentThumb.js.map +1 -1
  26. package/dist/primitives/attachment.d.ts +0 -2
  27. package/dist/primitives/branchPicker/BranchPickerCount.d.ts +0 -1
  28. package/dist/primitives/branchPicker/BranchPickerCount.d.ts.map +1 -1
  29. package/dist/primitives/branchPicker/BranchPickerCount.js.map +1 -1
  30. package/dist/primitives/branchPicker/BranchPickerNext.d.ts +1 -6
  31. package/dist/primitives/branchPicker/BranchPickerNext.d.ts.map +1 -1
  32. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts +0 -1
  33. package/dist/primitives/branchPicker/BranchPickerNumber.d.ts.map +1 -1
  34. package/dist/primitives/branchPicker/BranchPickerNumber.js.map +1 -1
  35. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts +1 -6
  36. package/dist/primitives/branchPicker/BranchPickerPrevious.d.ts.map +1 -1
  37. package/dist/primitives/branchPicker.d.ts +0 -2
  38. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts +1 -5
  39. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.d.ts.map +1 -1
  40. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts +1 -5
  41. package/dist/primitives/chainOfThought/ChainOfThoughtRoot.d.ts.map +1 -1
  42. package/dist/primitives/chainOfThought.d.ts +0 -2
  43. package/dist/primitives/composer/ComposerAddAttachment.d.ts +1 -6
  44. package/dist/primitives/composer/ComposerAddAttachment.d.ts.map +1 -1
  45. package/dist/primitives/composer/ComposerAttachments.d.ts +3 -16
  46. package/dist/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  47. package/dist/primitives/composer/ComposerAttachments.js.map +1 -1
  48. package/dist/primitives/composer/ComposerCancel.d.ts +1 -6
  49. package/dist/primitives/composer/ComposerCancel.d.ts.map +1 -1
  50. package/dist/primitives/composer/ComposerInput.d.ts +1 -8
  51. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  52. package/dist/primitives/composer/ComposerInput.js +15 -2
  53. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  54. package/dist/primitives/composer/ComposerRoot.d.ts +1 -5
  55. package/dist/primitives/composer/ComposerRoot.d.ts.map +1 -1
  56. package/dist/primitives/composer/ComposerSend.d.ts +1 -6
  57. package/dist/primitives/composer/ComposerSend.d.ts.map +1 -1
  58. package/dist/primitives/composer.d.ts +3 -5
  59. package/dist/primitives/composer.js.map +1 -1
  60. package/dist/primitives/error/ErrorMessage.d.ts +1 -5
  61. package/dist/primitives/error/ErrorMessage.d.ts.map +1 -1
  62. package/dist/primitives/error/ErrorMessage.js.map +1 -1
  63. package/dist/primitives/error/ErrorRoot.d.ts +1 -5
  64. package/dist/primitives/error/ErrorRoot.d.ts.map +1 -1
  65. package/dist/primitives/error/index.d.ts +0 -2
  66. package/dist/primitives/message/MessageAttachments.d.ts +2 -9
  67. package/dist/primitives/message/MessageAttachments.d.ts.map +1 -1
  68. package/dist/primitives/message/MessageAttachments.js.map +1 -1
  69. package/dist/primitives/message/MessageContent.d.ts +1 -10
  70. package/dist/primitives/message/MessageContent.d.ts.map +1 -1
  71. package/dist/primitives/message/MessageIf.d.ts +1 -8
  72. package/dist/primitives/message/MessageIf.d.ts.map +1 -1
  73. package/dist/primitives/message/MessageIf.js.map +1 -1
  74. package/dist/primitives/message/MessageParts.d.ts +0 -1
  75. package/dist/primitives/message/MessageParts.d.ts.map +1 -1
  76. package/dist/primitives/message/MessageRoot.d.ts +1 -5
  77. package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
  78. package/dist/primitives/message.d.ts +3 -5
  79. package/dist/primitives/message.js.map +1 -1
  80. package/dist/primitives/suggestion/SuggestionDescription.d.ts +1 -5
  81. package/dist/primitives/suggestion/SuggestionDescription.d.ts.map +1 -1
  82. package/dist/primitives/suggestion/SuggestionDescription.js.map +1 -1
  83. package/dist/primitives/suggestion/SuggestionTitle.d.ts +1 -5
  84. package/dist/primitives/suggestion/SuggestionTitle.d.ts.map +1 -1
  85. package/dist/primitives/suggestion/SuggestionTitle.js.map +1 -1
  86. package/dist/primitives/suggestion/SuggestionTrigger.d.ts +1 -8
  87. package/dist/primitives/suggestion/SuggestionTrigger.d.ts.map +1 -1
  88. package/dist/primitives/suggestion.d.ts +0 -2
  89. package/dist/primitives/thread/ThreadEmpty.d.ts +1 -4
  90. package/dist/primitives/thread/ThreadEmpty.d.ts.map +1 -1
  91. package/dist/primitives/thread/ThreadIf.d.ts +1 -6
  92. package/dist/primitives/thread/ThreadIf.d.ts.map +1 -1
  93. package/dist/primitives/thread/ThreadIf.js.map +1 -1
  94. package/dist/primitives/thread/ThreadMessages.d.ts +14 -12
  95. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -1
  96. package/dist/primitives/thread/ThreadMessages.js +376 -33
  97. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  98. package/dist/primitives/thread/ThreadRoot.d.ts +1 -5
  99. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  100. package/dist/primitives/thread/ThreadSuggestion.d.ts +3 -10
  101. package/dist/primitives/thread/ThreadSuggestion.d.ts.map +1 -1
  102. package/dist/primitives/thread.d.ts +3 -5
  103. package/dist/primitives/thread.js +3 -2
  104. package/dist/primitives/thread.js.map +1 -1
  105. package/dist/primitives/threadList/ThreadListItems.d.ts +1 -5
  106. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  107. package/dist/primitives/threadList/ThreadListNew.d.ts +1 -5
  108. package/dist/primitives/threadList/ThreadListNew.d.ts.map +1 -1
  109. package/dist/primitives/threadList/ThreadListRoot.d.ts +1 -5
  110. package/dist/primitives/threadList/ThreadListRoot.d.ts.map +1 -1
  111. package/dist/primitives/threadList.d.ts +0 -2
  112. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts +1 -5
  113. package/dist/primitives/threadListItem/ThreadListItemArchive.d.ts.map +1 -1
  114. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts +1 -5
  115. package/dist/primitives/threadListItem/ThreadListItemDelete.d.ts.map +1 -1
  116. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts +1 -5
  117. package/dist/primitives/threadListItem/ThreadListItemRoot.d.ts.map +1 -1
  118. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts +1 -5
  119. package/dist/primitives/threadListItem/ThreadListItemTrigger.d.ts.map +1 -1
  120. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts +1 -5
  121. package/dist/primitives/threadListItem/ThreadListItemUnarchive.d.ts.map +1 -1
  122. package/dist/primitives/threadListItem.d.ts +0 -2
  123. package/package.json +9 -9
  124. package/src/index.ts +2 -0
  125. package/src/primitives/composer/ComposerAttachments.tsx +3 -15
  126. package/src/primitives/composer/ComposerInput.test.tsx +106 -8
  127. package/src/primitives/composer/ComposerInput.tsx +21 -2
  128. package/src/primitives/composer.ts +2 -0
  129. package/src/primitives/message/MessageAttachments.tsx +3 -8
  130. package/src/primitives/message.ts +2 -0
  131. package/src/primitives/thread/ThreadMessages.test.tsx +444 -10
  132. package/src/primitives/thread/ThreadMessages.tsx +320 -29
  133. package/src/primitives/thread.ts +2 -0
@@ -1,7 +1,6 @@
1
1
  import { MessageState, ThreadMessage } from "@assistant-ui/core";
2
- import { FlatListProps } from "react-native";
2
+ import { FlatList, FlatListProps } from "react-native";
3
3
  import { ComponentType, ReactNode } from "react";
4
-
5
4
  //#region src/primitives/thread/ThreadMessages.d.ts
6
5
  type MessageComponents = {
7
6
  Message: ComponentType;
@@ -23,7 +22,8 @@ type MessageComponents = {
23
22
  SystemMessage?: ComponentType | undefined;
24
23
  };
25
24
  type MessagesContent = {
26
- /** @deprecated Use the children render function instead. */components: MessageComponents;
25
+ /** @deprecated Use the children render function instead. */
26
+ components: MessageComponents;
27
27
  children?: never;
28
28
  } | {
29
29
  children: (value: {
@@ -31,15 +31,17 @@ type MessagesContent = {
31
31
  }) => ReactNode;
32
32
  components?: never;
33
33
  };
34
- type ThreadMessagesProps = Omit<FlatListProps<ThreadMessage>, "data" | "renderItem" | "children"> & MessagesContent;
35
- declare const ThreadMessages: {
36
- ({
37
- components,
38
- children,
39
- ...flatListProps
40
- }: ThreadMessagesProps): import("react").JSX.Element;
41
- displayName: string;
34
+ type ThreadMessagesFlatListProps = Omit<FlatListProps<ThreadMessage>, "data" | "renderItem" | "children"> & MessagesContent & {
35
+ autoScroll?: boolean | undefined;
36
+ scrollToBottomOnRunStart?: boolean | undefined;
37
+ scrollToBottomOnInitialize?: boolean | undefined;
38
+ scrollToBottomOnThreadSwitch?: boolean | undefined;
42
39
  };
40
+ /** @deprecated Use ThreadMessagesFlatListProps instead. */
41
+ type ThreadMessagesProps = ThreadMessagesFlatListProps;
42
+ declare const ThreadMessagesFlatList: import("react").ForwardRefExoticComponent<ThreadMessagesFlatListProps & import("react").RefAttributes<FlatList<ThreadMessage>>>;
43
+ /** @deprecated Use ThreadPrimitive.MessagesFlatList instead. */
44
+ declare const ThreadMessages: import("react").ForwardRefExoticComponent<ThreadMessagesFlatListProps & import("react").RefAttributes<FlatList<ThreadMessage>>>;
43
45
  //#endregion
44
- export { ThreadMessages, ThreadMessagesProps };
46
+ export { ThreadMessages, ThreadMessagesFlatList, ThreadMessagesFlatListProps, ThreadMessagesProps };
45
47
  //# sourceMappingURL=ThreadMessages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadMessages.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadMessages.tsx"],"mappings":";;;;;KAYK,iBAAA;EAEC,OAAA,EAAS,aAAA;EACT,YAAA,GAAe,aAAA;EACf,gBAAA,GAAmB,aAAA;EACnB,qBAAA,GAAwB,aAAA;EACxB,kBAAA,GAAqB,aAAA;EACrB,WAAA,GAAc,aAAA;EACd,gBAAA,GAAmB,aAAA;EACnB,aAAA,GAAgB,aAAA;AAAA;EAGhB,OAAA,GAAU,aAAA;EACV,YAAA,GAAe,aAAA;EACf,gBAAA,GAAmB,aAAA;EACnB,qBAAA,GAAwB,aAAA;EACxB,kBAAA,GAAqB,aAAA;EACrB,WAAA,EAAa,aAAA;EACb,gBAAA,EAAkB,aAAA;EAClB,aAAA,GAAgB,aAAA;AAAA;AAAA,KAGjB,eAAA;EAHiB,4DAMhB,UAAA,EAAY,iBAAA;EACZ,QAAA;AAAA;EAGA,QAAA,GAAW,KAAA;IAAS,OAAA,EAAS,YAAA;EAAA,MAAmB,SAAA;EAChD,UAAA;AAAA;AAAA,KAGM,mBAAA,GAAsB,IAAA,CAChC,aAAA,CAAc,aAAA,yCAGd,eAAA;AAAA,cA2GW,cAAA;EAAA;;;;KAIV,mBAAA,mBAAmB,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"ThreadMessages.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadMessages.tsx"],"mappings":";;;;KA2BK;EAEC,SAAS;EACT,eAAe;EACf,mBAAmB;EACnB,wBAAwB;EACxB,qBAAqB;EACrB,cAAc;EACd,mBAAmB;EACnB,gBAAgB;;EAGhB,UAAU;EACV,eAAe;EACf,mBAAmB;EACnB,wBAAwB;EACxB,qBAAqB;EACrB,aAAa;EACb,kBAAkB;EAClB,gBAAgB;;KAGjB;;EAGC,YAAY;EACZ;;EAGA,WAAW;IAAS,SAAS;QAAmB;EAChD;;KAGM,8BAA8B,KACxC,cAAc,sDAGd;EACE;EACA;EACA;EACA;;;KAIQ,sBAAsB;cAmRrB,wCAAsB,0BAAA,8CAAA,cAAA,SAAA;;cA4GtB,gCAAc,0BAAA,8CAAA,cAAA,SAAA"}
@@ -1,11 +1,12 @@
1
- import { RenderChildrenWithAccessor, useAuiState } from "@assistant-ui/store";
1
+ import { RenderChildrenWithAccessor, useAuiEvent, useAuiState } from "@assistant-ui/store";
2
2
  import { MessageByIndexProvider } from "@assistant-ui/core/react";
3
3
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
4
4
  import { FlatList } from "react-native";
5
5
  import { jsx } from "react/jsx-runtime";
6
- import { memo } from "@assistant-ui/tap/react-shim";
6
+ import { forwardRef, memo, useEffect, useRef } from "@assistant-ui/tap/react-shim";
7
7
  //#region src/primitives/thread/ThreadMessages.tsx
8
8
  const DEFAULT_SYSTEM_MESSAGE = () => null;
9
+ const AT_BOTTOM_THRESHOLD = 4;
9
10
  const getComponent = (components, role, isEditing) => {
10
11
  switch (role) {
11
12
  case "user": if (isEditing) return components.UserEditComposer ?? components.EditComposer ?? components.UserMessage ?? components.Message;
@@ -73,27 +74,260 @@ const ThreadMessageByChildren = memo(({ index, children }) => {
73
74
  });
74
75
  }, (prev, next) => prev.index === next.index && prev.children === next.children);
75
76
  ThreadMessageByChildren.displayName = "ThreadPrimitive.MessageByChildren";
76
- const ThreadMessages = (t0) => {
77
- const $ = c(11);
77
+ const setForwardedRef = (ref, value) => {
78
+ if (typeof ref === "function") ref(value);
79
+ else if (ref) ref.current = value;
80
+ };
81
+ const useComposedFlatListRef = (forwardedRef) => {
82
+ const $ = c(4);
83
+ const flatListRef = useRef(null);
84
+ let t0;
85
+ if ($[0] !== forwardedRef) {
86
+ t0 = (node) => {
87
+ flatListRef.current = node;
88
+ setForwardedRef(forwardedRef, node);
89
+ };
90
+ $[0] = forwardedRef;
91
+ $[1] = t0;
92
+ } else t0 = $[1];
93
+ const setFlatListRef = t0;
94
+ let t1;
95
+ if ($[2] !== setFlatListRef) {
96
+ t1 = [flatListRef, setFlatListRef];
97
+ $[2] = setFlatListRef;
98
+ $[3] = t1;
99
+ } else t1 = $[3];
100
+ return t1;
101
+ };
102
+ const useThreadMessagesFlatListAutoScroll = (t0) => {
103
+ const $ = c(22);
104
+ const { flatListRef, hasMessages, autoScroll: t1, scrollToBottomOnRunStart: t2, scrollToBottomOnInitialize: t3, scrollToBottomOnThreadSwitch: t4 } = t0;
105
+ const autoScroll = t1 === void 0 ? true : t1;
106
+ const scrollToBottomOnRunStart = t2 === void 0 ? true : t2;
107
+ const scrollToBottomOnInitialize = t3 === void 0 ? true : t3;
108
+ const scrollToBottomOnThreadSwitch = t4 === void 0 ? true : t4;
109
+ let t5;
110
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
111
+ t5 = {
112
+ contentHeight: 0,
113
+ viewportHeight: 0,
114
+ scrollY: 0
115
+ };
116
+ $[0] = t5;
117
+ } else t5 = $[0];
118
+ const metricsRef = useRef(t5);
119
+ const isAtBottomRef = useRef(true);
120
+ const lastScrollEventYRef = useRef(0);
121
+ const initializeScrollRequestedRef = useRef(false);
122
+ const pendingScrollToBottomRef = useRef(false);
123
+ let t6;
124
+ if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
125
+ t6 = () => {
126
+ const { contentHeight, scrollY, viewportHeight } = metricsRef.current;
127
+ isAtBottomRef.current = contentHeight <= viewportHeight || contentHeight - scrollY - viewportHeight <= AT_BOTTOM_THRESHOLD;
128
+ };
129
+ $[1] = t6;
130
+ } else t6 = $[1];
131
+ const updateIsAtBottom = t6;
132
+ let t7;
133
+ if ($[2] !== flatListRef) {
134
+ t7 = (animated) => {
135
+ const { contentHeight: contentHeight_0, viewportHeight: viewportHeight_0 } = metricsRef.current;
136
+ metricsRef.current.scrollY = Math.max(0, contentHeight_0 - viewportHeight_0);
137
+ isAtBottomRef.current = true;
138
+ flatListRef.current?.scrollToEnd({ animated });
139
+ };
140
+ $[2] = flatListRef;
141
+ $[3] = t7;
142
+ } else t7 = $[3];
143
+ const scrollToBottom = t7;
144
+ let t8;
145
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
146
+ t8 = (event) => {
147
+ metricsRef.current.viewportHeight = event.nativeEvent.layout.height;
148
+ updateIsAtBottom();
149
+ };
150
+ $[4] = t8;
151
+ } else t8 = $[4];
152
+ const handleLayout = t8;
153
+ let t9;
154
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
155
+ t9 = (event_0) => {
156
+ const { contentOffset, contentSize, layoutMeasurement } = event_0.nativeEvent;
157
+ const previousEventY = lastScrollEventYRef.current;
158
+ const wasPinnedToBottom = isAtBottomRef.current;
159
+ lastScrollEventYRef.current = contentOffset.y;
160
+ metricsRef.current = {
161
+ contentHeight: contentSize.height,
162
+ viewportHeight: layoutMeasurement.height,
163
+ scrollY: contentOffset.y
164
+ };
165
+ updateIsAtBottom();
166
+ const upwardMove = contentOffset.y < previousEventY;
167
+ if (wasPinnedToBottom && !upwardMove) isAtBottomRef.current = true;
168
+ if (!isAtBottomRef.current && upwardMove) pendingScrollToBottomRef.current = false;
169
+ };
170
+ $[5] = t9;
171
+ } else t9 = $[5];
172
+ const handleScroll = t9;
173
+ let t10;
174
+ if ($[6] !== autoScroll || $[7] !== scrollToBottom) {
175
+ t10 = (_width, height) => {
176
+ const metrics = metricsRef.current;
177
+ const previousContentHeight = metrics.contentHeight;
178
+ const wasAtBottom = isAtBottomRef.current;
179
+ metrics.contentHeight = height;
180
+ updateIsAtBottom();
181
+ const pendingScroll = pendingScrollToBottomRef.current;
182
+ if (pendingScroll) {
183
+ pendingScrollToBottomRef.current = false;
184
+ scrollToBottom(pendingScroll.animated);
185
+ return;
186
+ }
187
+ if (!autoScroll) return;
188
+ if (!wasAtBottom) return;
189
+ if (previousContentHeight === 0) return;
190
+ if (height <= previousContentHeight) return;
191
+ scrollToBottom(false);
192
+ };
193
+ $[6] = autoScroll;
194
+ $[7] = scrollToBottom;
195
+ $[8] = t10;
196
+ } else t10 = $[8];
197
+ const handleContentSizeChange = t10;
198
+ let t11;
199
+ let t12;
200
+ if ($[9] !== hasMessages || $[10] !== scrollToBottom || $[11] !== scrollToBottomOnInitialize) {
201
+ t11 = () => {
202
+ if (!scrollToBottomOnInitialize) return;
203
+ if (!hasMessages) {
204
+ initializeScrollRequestedRef.current = false;
205
+ return;
206
+ }
207
+ if (initializeScrollRequestedRef.current) return;
208
+ initializeScrollRequestedRef.current = true;
209
+ pendingScrollToBottomRef.current = { animated: false };
210
+ scrollToBottom(false);
211
+ };
212
+ t12 = [
213
+ hasMessages,
214
+ scrollToBottom,
215
+ scrollToBottomOnInitialize
216
+ ];
217
+ $[9] = hasMessages;
218
+ $[10] = scrollToBottom;
219
+ $[11] = scrollToBottomOnInitialize;
220
+ $[12] = t11;
221
+ $[13] = t12;
222
+ } else {
223
+ t11 = $[12];
224
+ t12 = $[13];
225
+ }
226
+ useEffect(t11, t12);
227
+ let t13;
228
+ if ($[14] !== scrollToBottom || $[15] !== scrollToBottomOnRunStart) {
229
+ t13 = () => {
230
+ if (!scrollToBottomOnRunStart) return;
231
+ pendingScrollToBottomRef.current = { animated: true };
232
+ scrollToBottom(true);
233
+ };
234
+ $[14] = scrollToBottom;
235
+ $[15] = scrollToBottomOnRunStart;
236
+ $[16] = t13;
237
+ } else t13 = $[16];
238
+ useAuiEvent("thread.runStart", t13);
239
+ let t14;
240
+ if ($[17] !== scrollToBottom || $[18] !== scrollToBottomOnThreadSwitch) {
241
+ t14 = () => {
242
+ if (!scrollToBottomOnThreadSwitch) return;
243
+ initializeScrollRequestedRef.current = false;
244
+ lastScrollEventYRef.current = 0;
245
+ pendingScrollToBottomRef.current = { animated: false };
246
+ scrollToBottom(false);
247
+ };
248
+ $[17] = scrollToBottom;
249
+ $[18] = scrollToBottomOnThreadSwitch;
250
+ $[19] = t14;
251
+ } else t14 = $[19];
252
+ useAuiEvent("threadListItem.switchedTo", t14);
253
+ let t15;
254
+ if ($[20] !== handleContentSizeChange) {
255
+ t15 = {
256
+ handleLayout,
257
+ handleScroll,
258
+ handleContentSizeChange
259
+ };
260
+ $[20] = handleContentSizeChange;
261
+ $[21] = t15;
262
+ } else t15 = $[21];
263
+ return t15;
264
+ };
265
+ const ThreadMessagesFlatList = forwardRef((t0, forwardedRef) => {
266
+ const $ = c(46);
267
+ let autoScroll;
78
268
  let children;
79
269
  let components;
80
270
  let flatListProps;
271
+ let onContentSizeChange;
272
+ let onLayout;
273
+ let onScroll;
274
+ let scrollEventThrottle;
275
+ let scrollToBottomOnInitialize;
276
+ let scrollToBottomOnRunStart;
277
+ let scrollToBottomOnThreadSwitch;
81
278
  if ($[0] !== t0) {
82
- ({components, children, ...flatListProps} = t0);
279
+ ({autoScroll, components, children, onContentSizeChange, onLayout, onScroll, scrollEventThrottle, scrollToBottomOnInitialize, scrollToBottomOnRunStart, scrollToBottomOnThreadSwitch, ...flatListProps} = t0);
83
280
  $[0] = t0;
84
- $[1] = children;
85
- $[2] = components;
86
- $[3] = flatListProps;
281
+ $[1] = autoScroll;
282
+ $[2] = children;
283
+ $[3] = components;
284
+ $[4] = flatListProps;
285
+ $[5] = onContentSizeChange;
286
+ $[6] = onLayout;
287
+ $[7] = onScroll;
288
+ $[8] = scrollEventThrottle;
289
+ $[9] = scrollToBottomOnInitialize;
290
+ $[10] = scrollToBottomOnRunStart;
291
+ $[11] = scrollToBottomOnThreadSwitch;
87
292
  } else {
88
- children = $[1];
89
- components = $[2];
90
- flatListProps = $[3];
293
+ autoScroll = $[1];
294
+ children = $[2];
295
+ components = $[3];
296
+ flatListProps = $[4];
297
+ onContentSizeChange = $[5];
298
+ onLayout = $[6];
299
+ onScroll = $[7];
300
+ scrollEventThrottle = $[8];
301
+ scrollToBottomOnInitialize = $[9];
302
+ scrollToBottomOnRunStart = $[10];
303
+ scrollToBottomOnThreadSwitch = $[11];
91
304
  }
92
305
  const messages = useAuiState(_temp3);
93
- let t1;
94
- if ($[4] !== children || $[5] !== components) {
95
- t1 = (t2) => {
96
- const { index } = t2;
306
+ const [flatListRef, setFlatListRef] = useComposedFlatListRef(forwardedRef);
307
+ const t1 = messages.length > 0;
308
+ let t2;
309
+ if ($[12] !== autoScroll || $[13] !== flatListRef || $[14] !== scrollToBottomOnInitialize || $[15] !== scrollToBottomOnRunStart || $[16] !== scrollToBottomOnThreadSwitch || $[17] !== t1) {
310
+ t2 = {
311
+ flatListRef,
312
+ hasMessages: t1,
313
+ autoScroll,
314
+ scrollToBottomOnInitialize,
315
+ scrollToBottomOnRunStart,
316
+ scrollToBottomOnThreadSwitch
317
+ };
318
+ $[12] = autoScroll;
319
+ $[13] = flatListRef;
320
+ $[14] = scrollToBottomOnInitialize;
321
+ $[15] = scrollToBottomOnRunStart;
322
+ $[16] = scrollToBottomOnThreadSwitch;
323
+ $[17] = t1;
324
+ $[18] = t2;
325
+ } else t2 = $[18];
326
+ const { handleContentSizeChange: handleAutoScrollContentSizeChange, handleLayout: handleAutoScrollLayout, handleScroll: handleAutoScrollScroll } = useThreadMessagesFlatListAutoScroll(t2);
327
+ let t3;
328
+ if ($[19] !== children || $[20] !== components) {
329
+ t3 = (t4) => {
330
+ const { index } = t4;
97
331
  if (children) return /* @__PURE__ */ jsx(ThreadMessageByChildren, {
98
332
  index,
99
333
  children
@@ -103,28 +337,137 @@ const ThreadMessages = (t0) => {
103
337
  components
104
338
  });
105
339
  };
106
- $[4] = children;
107
- $[5] = components;
108
- $[6] = t1;
109
- } else t1 = $[6];
110
- const renderItem = t1;
340
+ $[19] = children;
341
+ $[20] = components;
342
+ $[21] = t3;
343
+ } else t3 = $[21];
344
+ const renderItem = t3;
111
345
  const keyExtractor = _temp4;
112
- const t2 = messages;
113
- let t3;
114
- if ($[7] !== flatListProps || $[8] !== renderItem || $[9] !== t2) {
115
- t3 = /* @__PURE__ */ jsx(FlatList, {
116
- data: t2,
346
+ const scrollTracking = (autoScroll ?? true) || (scrollToBottomOnInitialize ?? true) || (scrollToBottomOnRunStart ?? true) || (scrollToBottomOnThreadSwitch ?? true);
347
+ let t4;
348
+ if ($[22] !== handleAutoScrollLayout || $[23] !== onLayout) {
349
+ t4 = (event) => {
350
+ handleAutoScrollLayout(event);
351
+ onLayout?.(event);
352
+ };
353
+ $[22] = handleAutoScrollLayout;
354
+ $[23] = onLayout;
355
+ $[24] = t4;
356
+ } else t4 = $[24];
357
+ const handleLayout = t4;
358
+ let t5;
359
+ if ($[25] !== handleAutoScrollScroll || $[26] !== onScroll) {
360
+ t5 = (event_0) => {
361
+ handleAutoScrollScroll(event_0);
362
+ onScroll?.(event_0);
363
+ };
364
+ $[25] = handleAutoScrollScroll;
365
+ $[26] = onScroll;
366
+ $[27] = t5;
367
+ } else t5 = $[27];
368
+ const handleScroll = t5;
369
+ let t6;
370
+ if ($[28] !== handleAutoScrollContentSizeChange || $[29] !== onContentSizeChange) {
371
+ t6 = (width, height) => {
372
+ handleAutoScrollContentSizeChange(width, height);
373
+ onContentSizeChange?.(width, height);
374
+ };
375
+ $[28] = handleAutoScrollContentSizeChange;
376
+ $[29] = onContentSizeChange;
377
+ $[30] = t6;
378
+ } else t6 = $[30];
379
+ const handleContentSizeChange = t6;
380
+ const t7 = messages;
381
+ let t8;
382
+ if ($[31] !== handleContentSizeChange || $[32] !== handleLayout || $[33] !== handleScroll || $[34] !== onContentSizeChange || $[35] !== onLayout || $[36] !== onScroll || $[37] !== scrollEventThrottle || $[38] !== scrollTracking) {
383
+ t8 = scrollTracking ? {
384
+ onContentSizeChange: handleContentSizeChange,
385
+ onLayout: handleLayout,
386
+ onScroll: handleScroll,
387
+ scrollEventThrottle: scrollEventThrottle ?? 16
388
+ } : {
389
+ ...onContentSizeChange && { onContentSizeChange },
390
+ ...onLayout && { onLayout },
391
+ ...onScroll && { onScroll },
392
+ ...scrollEventThrottle !== void 0 && { scrollEventThrottle }
393
+ };
394
+ $[31] = handleContentSizeChange;
395
+ $[32] = handleLayout;
396
+ $[33] = handleScroll;
397
+ $[34] = onContentSizeChange;
398
+ $[35] = onLayout;
399
+ $[36] = onScroll;
400
+ $[37] = scrollEventThrottle;
401
+ $[38] = scrollTracking;
402
+ $[39] = t8;
403
+ } else t8 = $[39];
404
+ let t9;
405
+ if ($[40] !== flatListProps || $[41] !== renderItem || $[42] !== setFlatListRef || $[43] !== t7 || $[44] !== t8) {
406
+ t9 = /* @__PURE__ */ jsx(FlatList, {
407
+ ref: setFlatListRef,
408
+ data: t7,
117
409
  renderItem,
118
410
  keyExtractor,
411
+ ...t8,
119
412
  ...flatListProps
120
413
  });
121
- $[7] = flatListProps;
122
- $[8] = renderItem;
123
- $[9] = t2;
124
- $[10] = t3;
125
- } else t3 = $[10];
126
- return t3;
127
- };
414
+ $[40] = flatListProps;
415
+ $[41] = renderItem;
416
+ $[42] = setFlatListRef;
417
+ $[43] = t7;
418
+ $[44] = t8;
419
+ $[45] = t9;
420
+ } else t9 = $[45];
421
+ return t9;
422
+ });
423
+ ThreadMessagesFlatList.displayName = "ThreadPrimitive.MessagesFlatList";
424
+ /** @deprecated Use ThreadPrimitive.MessagesFlatList instead. */
425
+ const ThreadMessages = forwardRef((t0, ref) => {
426
+ const $ = c(13);
427
+ let props;
428
+ let t1;
429
+ let t2;
430
+ let t3;
431
+ let t4;
432
+ if ($[0] !== t0) {
433
+ ({autoScroll: t1, scrollToBottomOnInitialize: t2, scrollToBottomOnRunStart: t3, scrollToBottomOnThreadSwitch: t4, ...props} = t0);
434
+ $[0] = t0;
435
+ $[1] = props;
436
+ $[2] = t1;
437
+ $[3] = t2;
438
+ $[4] = t3;
439
+ $[5] = t4;
440
+ } else {
441
+ props = $[1];
442
+ t1 = $[2];
443
+ t2 = $[3];
444
+ t3 = $[4];
445
+ t4 = $[5];
446
+ }
447
+ const autoScroll = t1 === void 0 ? false : t1;
448
+ const scrollToBottomOnInitialize = t2 === void 0 ? false : t2;
449
+ const scrollToBottomOnRunStart = t3 === void 0 ? false : t3;
450
+ const scrollToBottomOnThreadSwitch = t4 === void 0 ? false : t4;
451
+ let t5;
452
+ if ($[6] !== autoScroll || $[7] !== props || $[8] !== ref || $[9] !== scrollToBottomOnInitialize || $[10] !== scrollToBottomOnRunStart || $[11] !== scrollToBottomOnThreadSwitch) {
453
+ t5 = /* @__PURE__ */ jsx(ThreadMessagesFlatList, {
454
+ ref,
455
+ autoScroll,
456
+ scrollToBottomOnInitialize,
457
+ scrollToBottomOnRunStart,
458
+ scrollToBottomOnThreadSwitch,
459
+ ...props
460
+ });
461
+ $[6] = autoScroll;
462
+ $[7] = props;
463
+ $[8] = ref;
464
+ $[9] = scrollToBottomOnInitialize;
465
+ $[10] = scrollToBottomOnRunStart;
466
+ $[11] = scrollToBottomOnThreadSwitch;
467
+ $[12] = t5;
468
+ } else t5 = $[12];
469
+ return t5;
470
+ });
128
471
  ThreadMessages.displayName = "ThreadPrimitive.Messages";
129
472
  function _temp(s) {
130
473
  return s.message.role;
@@ -139,6 +482,6 @@ function _temp4(item) {
139
482
  return item.id;
140
483
  }
141
484
  //#endregion
142
- export { ThreadMessages };
485
+ export { ThreadMessages, ThreadMessagesFlatList };
143
486
 
144
487
  //# sourceMappingURL=ThreadMessages.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadMessages.js","names":["ComponentType","FC","ReactNode","memo","useCallback","FlatList","FlatListProps","MessageState","ThreadMessage","RenderChildrenWithAccessor","useAuiState","MessageByIndexProvider","MessageComponents","Message","EditComposer","UserEditComposer","AssistantEditComposer","SystemEditComposer","UserMessage","AssistantMessage","SystemMessage","MessagesContent","components","children","value","message","ThreadMessagesProps","Omit","DEFAULT_SYSTEM_MESSAGE","getComponent","role","isEditing","_exhaustiveCheck","Error","ThreadMessageComponent","t0","$","_c","_temp","_temp2","t1","Component","t2","ThreadMessageByIndex","index","prev","next","displayName","ThreadMessageByChildren","aui","thread","getState","getItem","ThreadMessages","flatListProps","messages","_temp3","renderItem","keyExtractor","_temp4","t3","s","s_0","composer","item","id"],"sources":["../../../src/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["import {\n type ComponentType,\n type FC,\n type ReactNode,\n memo,\n useCallback,\n} from \"react\";\nimport { FlatList, type FlatListProps } from \"react-native\";\nimport type { MessageState, ThreadMessage } from \"@assistant-ui/core\";\nimport { RenderChildrenWithAccessor, useAuiState } from \"@assistant-ui/store\";\nimport { MessageByIndexProvider } from \"@assistant-ui/core/react\";\n\ntype MessageComponents =\n | {\n Message: ComponentType;\n EditComposer?: ComponentType | undefined;\n UserEditComposer?: ComponentType | undefined;\n AssistantEditComposer?: ComponentType | undefined;\n SystemEditComposer?: ComponentType | undefined;\n UserMessage?: ComponentType | undefined;\n AssistantMessage?: ComponentType | undefined;\n SystemMessage?: ComponentType | undefined;\n }\n | {\n Message?: ComponentType | undefined;\n EditComposer?: ComponentType | undefined;\n UserEditComposer?: ComponentType | undefined;\n AssistantEditComposer?: ComponentType | undefined;\n SystemEditComposer?: ComponentType | undefined;\n UserMessage: ComponentType;\n AssistantMessage: ComponentType;\n SystemMessage?: ComponentType | undefined;\n };\n\ntype MessagesContent =\n | {\n /** @deprecated Use the children render function instead. */\n components: MessageComponents;\n children?: never;\n }\n | {\n children: (value: { message: MessageState }) => ReactNode;\n components?: never;\n };\n\nexport type ThreadMessagesProps = Omit<\n FlatListProps<ThreadMessage>,\n \"data\" | \"renderItem\" | \"children\"\n> &\n MessagesContent;\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\n\nconst getComponent = (\n components: MessageComponents,\n role: ThreadMessage[\"role\"],\n isEditing: boolean,\n) => {\n switch (role) {\n case \"user\":\n if (isEditing) {\n return (\n components.UserEditComposer ??\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.UserMessage ?? (components.Message as ComponentType);\n }\n case \"assistant\":\n if (isEditing) {\n return (\n components.AssistantEditComposer ??\n components.EditComposer ??\n components.AssistantMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.AssistantMessage ?? (components.Message as ComponentType)\n );\n }\n case \"system\":\n if (isEditing) {\n return (\n components.SystemEditComposer ??\n components.EditComposer ??\n components.SystemMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.SystemMessage ??\n (components.Message as ComponentType) ??\n DEFAULT_SYSTEM_MESSAGE\n );\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unknown message role: ${_exhaustiveCheck}`);\n }\n }\n};\n\nconst ThreadMessageComponent: FC<{ components: MessageComponents }> = ({\n components,\n}) => {\n const role = useAuiState((s) => s.message.role);\n const isEditing = useAuiState((s) => s.message.composer.isEditing);\n const Component = getComponent(components, role, isEditing);\n\n return <Component />;\n};\n\nconst ThreadMessageByIndex = memo(\n ({ index, components }: { index: number; components: MessageComponents }) => {\n return (\n <MessageByIndexProvider index={index}>\n <ThreadMessageComponent components={components} />\n </MessageByIndexProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index && prev.components === next.components,\n);\nThreadMessageByIndex.displayName = \"ThreadPrimitive.MessageByIndex\";\n\nconst ThreadMessageByChildren = memo(\n ({\n index,\n children,\n }: {\n index: number;\n children: (value: { message: MessageState }) => ReactNode;\n }) => {\n return (\n <MessageByIndexProvider index={index}>\n <RenderChildrenWithAccessor\n getItemState={(aui) => aui.thread().message({ index }).getState()}\n >\n {(getItem) =>\n children({\n get message() {\n return getItem();\n },\n })\n }\n </RenderChildrenWithAccessor>\n </MessageByIndexProvider>\n );\n },\n (prev, next) => prev.index === next.index && prev.children === next.children,\n);\nThreadMessageByChildren.displayName = \"ThreadPrimitive.MessageByChildren\";\n\nexport const ThreadMessages = ({\n components,\n children,\n ...flatListProps\n}: ThreadMessagesProps) => {\n const messages = useAuiState((s) => s.thread.messages);\n\n const renderItem = useCallback(\n ({ index }: { item: ThreadMessage; index: number }) => {\n if (children) {\n return (\n <ThreadMessageByChildren index={index}>\n {children}\n </ThreadMessageByChildren>\n );\n }\n return <ThreadMessageByIndex index={index} components={components!} />;\n },\n [components, children],\n );\n\n const keyExtractor = useCallback((item: ThreadMessage) => item.id, []);\n\n return (\n <FlatList\n data={messages as unknown as ThreadMessage[]}\n renderItem={renderItem}\n keyExtractor={keyExtractor}\n {...flatListProps}\n />\n );\n};\nThreadMessages.displayName = \"ThreadPrimitive.Messages\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"ThreadMessages.js","names":["ComponentType","FC","ForwardedRef","ReactNode","RefObject","forwardRef","memo","useCallback","useEffect","useRef","FlatList","FlatListProps","LayoutChangeEvent","NativeScrollEvent","NativeSyntheticEvent","MessageState","ThreadMessage","RenderChildrenWithAccessor","useAuiEvent","useAuiState","MessageByIndexProvider","MessageComponents","Message","EditComposer","UserEditComposer","AssistantEditComposer","SystemEditComposer","UserMessage","AssistantMessage","SystemMessage","MessagesContent","components","children","value","message","ThreadMessagesFlatListProps","Omit","autoScroll","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","ThreadMessagesProps","DEFAULT_SYSTEM_MESSAGE","AT_BOTTOM_THRESHOLD","getComponent","role","isEditing","_exhaustiveCheck","Error","ThreadMessageComponent","t0","$","_c","_temp","_temp2","t1","Component","t2","ThreadMessageByIndex","index","prev","next","displayName","ThreadMessageByChildren","aui","thread","getState","getItem","setForwardedRef","ref","T","current","useComposedFlatListRef","forwardedRef","flatListRef","node","setFlatListRef","const","useThreadMessagesFlatListAutoScroll","hasMessages","t3","t4","undefined","t5","Symbol","for","contentHeight","viewportHeight","scrollY","metricsRef","isAtBottomRef","lastScrollEventYRef","initializeScrollRequestedRef","pendingScrollToBottomRef","t6","updateIsAtBottom","t7","animated","contentHeight_0","viewportHeight_0","Math","max","scrollToEnd","scrollToBottom","t8","event","nativeEvent","layout","height","handleLayout","t9","event_0","contentOffset","contentSize","layoutMeasurement","previousEventY","wasPinnedToBottom","y","upwardMove","handleScroll","t10","_width","metrics","previousContentHeight","wasAtBottom","pendingScroll","handleContentSizeChange","t11","t12","t13","t14","t15","ThreadMessagesFlatList","flatListProps","onContentSizeChange","onLayout","onScroll","scrollEventThrottle","messages","_temp3","length","handleAutoScrollContentSizeChange","handleAutoScrollLayout","handleAutoScrollScroll","renderItem","keyExtractor","_temp4","scrollTracking","width","ThreadMessages","props","s","s_0","composer","item","id"],"sources":["../../../src/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["import {\n type ComponentType,\n type FC,\n type ForwardedRef,\n type ReactNode,\n type RefObject,\n forwardRef,\n memo,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport {\n FlatList,\n type FlatListProps,\n type LayoutChangeEvent,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n} from \"react-native\";\nimport type { MessageState, ThreadMessage } from \"@assistant-ui/core\";\nimport {\n RenderChildrenWithAccessor,\n useAuiEvent,\n useAuiState,\n} from \"@assistant-ui/store\";\nimport { MessageByIndexProvider } from \"@assistant-ui/core/react\";\n\ntype MessageComponents =\n | {\n Message: ComponentType;\n EditComposer?: ComponentType | undefined;\n UserEditComposer?: ComponentType | undefined;\n AssistantEditComposer?: ComponentType | undefined;\n SystemEditComposer?: ComponentType | undefined;\n UserMessage?: ComponentType | undefined;\n AssistantMessage?: ComponentType | undefined;\n SystemMessage?: ComponentType | undefined;\n }\n | {\n Message?: ComponentType | undefined;\n EditComposer?: ComponentType | undefined;\n UserEditComposer?: ComponentType | undefined;\n AssistantEditComposer?: ComponentType | undefined;\n SystemEditComposer?: ComponentType | undefined;\n UserMessage: ComponentType;\n AssistantMessage: ComponentType;\n SystemMessage?: ComponentType | undefined;\n };\n\ntype MessagesContent =\n | {\n /** @deprecated Use the children render function instead. */\n components: MessageComponents;\n children?: never;\n }\n | {\n children: (value: { message: MessageState }) => ReactNode;\n components?: never;\n };\n\nexport type ThreadMessagesFlatListProps = Omit<\n FlatListProps<ThreadMessage>,\n \"data\" | \"renderItem\" | \"children\"\n> &\n MessagesContent & {\n autoScroll?: boolean | undefined;\n scrollToBottomOnRunStart?: boolean | undefined;\n scrollToBottomOnInitialize?: boolean | undefined;\n scrollToBottomOnThreadSwitch?: boolean | undefined;\n };\n\n/** @deprecated Use ThreadMessagesFlatListProps instead. */\nexport type ThreadMessagesProps = ThreadMessagesFlatListProps;\n\nconst DEFAULT_SYSTEM_MESSAGE = () => null;\nconst AT_BOTTOM_THRESHOLD = 4;\n\nconst getComponent = (\n components: MessageComponents,\n role: ThreadMessage[\"role\"],\n isEditing: boolean,\n) => {\n switch (role) {\n case \"user\":\n if (isEditing) {\n return (\n components.UserEditComposer ??\n components.EditComposer ??\n components.UserMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return components.UserMessage ?? (components.Message as ComponentType);\n }\n case \"assistant\":\n if (isEditing) {\n return (\n components.AssistantEditComposer ??\n components.EditComposer ??\n components.AssistantMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.AssistantMessage ?? (components.Message as ComponentType)\n );\n }\n case \"system\":\n if (isEditing) {\n return (\n components.SystemEditComposer ??\n components.EditComposer ??\n components.SystemMessage ??\n (components.Message as ComponentType)\n );\n } else {\n return (\n components.SystemMessage ??\n (components.Message as ComponentType) ??\n DEFAULT_SYSTEM_MESSAGE\n );\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unknown message role: ${_exhaustiveCheck}`);\n }\n }\n};\n\nconst ThreadMessageComponent: FC<{ components: MessageComponents }> = ({\n components,\n}) => {\n const role = useAuiState((s) => s.message.role);\n const isEditing = useAuiState((s) => s.message.composer.isEditing);\n const Component = getComponent(components, role, isEditing);\n\n return <Component />;\n};\n\nconst ThreadMessageByIndex = memo(\n ({ index, components }: { index: number; components: MessageComponents }) => {\n return (\n <MessageByIndexProvider index={index}>\n <ThreadMessageComponent components={components} />\n </MessageByIndexProvider>\n );\n },\n (prev, next) =>\n prev.index === next.index && prev.components === next.components,\n);\nThreadMessageByIndex.displayName = \"ThreadPrimitive.MessageByIndex\";\n\nconst ThreadMessageByChildren = memo(\n ({\n index,\n children,\n }: {\n index: number;\n children: (value: { message: MessageState }) => ReactNode;\n }) => {\n return (\n <MessageByIndexProvider index={index}>\n <RenderChildrenWithAccessor\n getItemState={(aui) => aui.thread().message({ index }).getState()}\n >\n {(getItem) =>\n children({\n get message() {\n return getItem();\n },\n })\n }\n </RenderChildrenWithAccessor>\n </MessageByIndexProvider>\n );\n },\n (prev, next) => prev.index === next.index && prev.children === next.children,\n);\nThreadMessageByChildren.displayName = \"ThreadPrimitive.MessageByChildren\";\n\nconst setForwardedRef = <T,>(ref: ForwardedRef<T>, value: T | null) => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n};\n\nconst useComposedFlatListRef = (\n forwardedRef: ForwardedRef<FlatList<ThreadMessage>>,\n) => {\n const flatListRef = useRef<FlatList<ThreadMessage> | null>(null);\n\n const setFlatListRef = useCallback(\n (node: FlatList<ThreadMessage> | null) => {\n flatListRef.current = node;\n setForwardedRef(forwardedRef, node);\n },\n [forwardedRef],\n );\n\n return [flatListRef, setFlatListRef] as const;\n};\n\nconst useThreadMessagesFlatListAutoScroll = ({\n flatListRef,\n hasMessages,\n autoScroll = true,\n scrollToBottomOnRunStart = true,\n scrollToBottomOnInitialize = true,\n scrollToBottomOnThreadSwitch = true,\n}: {\n flatListRef: RefObject<FlatList<ThreadMessage> | null>;\n hasMessages: boolean;\n autoScroll?: boolean | undefined;\n scrollToBottomOnRunStart?: boolean | undefined;\n scrollToBottomOnInitialize?: boolean | undefined;\n scrollToBottomOnThreadSwitch?: boolean | undefined;\n}) => {\n const metricsRef = useRef({\n contentHeight: 0,\n viewportHeight: 0,\n scrollY: 0,\n });\n const isAtBottomRef = useRef(true);\n const lastScrollEventYRef = useRef(0);\n const initializeScrollRequestedRef = useRef(false);\n const pendingScrollToBottomRef = useRef<false | { animated: boolean }>(false);\n\n const updateIsAtBottom = useCallback(() => {\n const { contentHeight, scrollY, viewportHeight } = metricsRef.current;\n isAtBottomRef.current =\n contentHeight <= viewportHeight ||\n contentHeight - scrollY - viewportHeight <= AT_BOTTOM_THRESHOLD;\n }, []);\n\n // Commanding a scroll records the intended position immediately; the\n // native scroll echo is bridged and throttled, so waiting for it lets a\n // fast stream observe stale metrics and drop out of following.\n const scrollToBottom = useCallback(\n (animated: boolean) => {\n const { contentHeight, viewportHeight } = metricsRef.current;\n metricsRef.current.scrollY = Math.max(0, contentHeight - viewportHeight);\n isAtBottomRef.current = true;\n flatListRef.current?.scrollToEnd({ animated });\n },\n [flatListRef],\n );\n\n const handleLayout = useCallback(\n (event: LayoutChangeEvent) => {\n metricsRef.current.viewportHeight = event.nativeEvent.layout.height;\n updateIsAtBottom();\n },\n [updateIsAtBottom],\n );\n\n const handleScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const { contentOffset, contentSize, layoutMeasurement } =\n event.nativeEvent;\n const previousEventY = lastScrollEventYRef.current;\n const wasPinnedToBottom = isAtBottomRef.current;\n lastScrollEventYRef.current = contentOffset.y;\n metricsRef.current = {\n contentHeight: contentSize.height,\n viewportHeight: layoutMeasurement.height,\n scrollY: contentOffset.y,\n };\n updateIsAtBottom();\n const upwardMove = contentOffset.y < previousEventY;\n // Only a deliberate upward move unpins or cancels a pending scroll.\n // Gestures are detected echo-to-echo because a commanded scroll\n // optimistically moves the tracked position ahead of its ascending\n // animation echoes, and those echoes must not unpin mid-flight.\n if (wasPinnedToBottom && !upwardMove) {\n isAtBottomRef.current = true;\n }\n if (!isAtBottomRef.current && upwardMove) {\n pendingScrollToBottomRef.current = false;\n }\n },\n [updateIsAtBottom],\n );\n\n const handleContentSizeChange = useCallback(\n (_width: number, height: number) => {\n const metrics = metricsRef.current;\n const previousContentHeight = metrics.contentHeight;\n const wasAtBottom = isAtBottomRef.current;\n metrics.contentHeight = height;\n updateIsAtBottom();\n\n // FlatList.scrollToEnd is a no-op before the list has measured, so the\n // initialize and thread-switch scrolls land on the next content-size\n // event, once real metrics exist.\n const pendingScroll = pendingScrollToBottomRef.current;\n if (pendingScroll) {\n pendingScrollToBottomRef.current = false;\n scrollToBottom(pendingScroll.animated);\n return;\n }\n\n if (!autoScroll) return;\n if (!wasAtBottom) return;\n if (previousContentHeight === 0) return;\n if (height <= previousContentHeight) return;\n\n scrollToBottom(false);\n },\n [autoScroll, scrollToBottom, updateIsAtBottom],\n );\n\n useEffect(() => {\n if (!scrollToBottomOnInitialize) return;\n if (!hasMessages) {\n initializeScrollRequestedRef.current = false;\n return;\n }\n if (initializeScrollRequestedRef.current) return;\n\n initializeScrollRequestedRef.current = true;\n pendingScrollToBottomRef.current = { animated: false };\n scrollToBottom(false);\n }, [hasMessages, scrollToBottom, scrollToBottomOnInitialize]);\n\n useAuiEvent(\"thread.runStart\", () => {\n if (!scrollToBottomOnRunStart) return;\n pendingScrollToBottomRef.current = { animated: true };\n scrollToBottom(true);\n });\n\n useAuiEvent(\"threadListItem.switchedTo\", () => {\n if (!scrollToBottomOnThreadSwitch) return;\n initializeScrollRequestedRef.current = false;\n lastScrollEventYRef.current = 0;\n pendingScrollToBottomRef.current = { animated: false };\n scrollToBottom(false);\n });\n\n return {\n handleLayout,\n handleScroll,\n handleContentSizeChange,\n };\n};\n\nexport const ThreadMessagesFlatList = forwardRef<\n FlatList<ThreadMessage>,\n ThreadMessagesFlatListProps\n>(\n (\n {\n autoScroll,\n components,\n children,\n onContentSizeChange,\n onLayout,\n onScroll,\n scrollEventThrottle,\n scrollToBottomOnInitialize,\n scrollToBottomOnRunStart,\n scrollToBottomOnThreadSwitch,\n ...flatListProps\n },\n forwardedRef,\n ) => {\n const messages = useAuiState((s) => s.thread.messages);\n const [flatListRef, setFlatListRef] = useComposedFlatListRef(forwardedRef);\n const {\n handleContentSizeChange: handleAutoScrollContentSizeChange,\n handleLayout: handleAutoScrollLayout,\n handleScroll: handleAutoScrollScroll,\n } = useThreadMessagesFlatListAutoScroll({\n flatListRef,\n hasMessages: messages.length > 0,\n autoScroll,\n scrollToBottomOnInitialize,\n scrollToBottomOnRunStart,\n scrollToBottomOnThreadSwitch,\n });\n\n const renderItem = useCallback(\n ({ index }: { item: ThreadMessage; index: number }) => {\n if (children) {\n return (\n <ThreadMessageByChildren index={index}>\n {children}\n </ThreadMessageByChildren>\n );\n }\n return <ThreadMessageByIndex index={index} components={components!} />;\n },\n [components, children],\n );\n\n const keyExtractor = useCallback((item: ThreadMessage) => item.id, []);\n\n const scrollTracking =\n (autoScroll ?? true) ||\n (scrollToBottomOnInitialize ?? true) ||\n (scrollToBottomOnRunStart ?? true) ||\n (scrollToBottomOnThreadSwitch ?? true);\n\n const handleLayout = useCallback(\n (event: LayoutChangeEvent) => {\n handleAutoScrollLayout(event);\n onLayout?.(event);\n },\n [handleAutoScrollLayout, onLayout],\n );\n\n const handleScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n handleAutoScrollScroll(event);\n onScroll?.(event);\n },\n [handleAutoScrollScroll, onScroll],\n );\n\n const handleContentSizeChange = useCallback(\n (width: number, height: number) => {\n handleAutoScrollContentSizeChange(width, height);\n onContentSizeChange?.(width, height);\n },\n [handleAutoScrollContentSizeChange, onContentSizeChange],\n );\n\n return (\n <FlatList\n ref={setFlatListRef}\n data={messages as unknown as ThreadMessage[]}\n renderItem={renderItem}\n keyExtractor={keyExtractor}\n {...(scrollTracking\n ? {\n onContentSizeChange: handleContentSizeChange,\n onLayout: handleLayout,\n onScroll: handleScroll,\n scrollEventThrottle: scrollEventThrottle ?? 16,\n }\n : {\n ...(onContentSizeChange && { onContentSizeChange }),\n ...(onLayout && { onLayout }),\n ...(onScroll && { onScroll }),\n ...(scrollEventThrottle !== undefined && { scrollEventThrottle }),\n })}\n {...flatListProps}\n />\n );\n },\n);\nThreadMessagesFlatList.displayName = \"ThreadPrimitive.MessagesFlatList\";\n\n/** @deprecated Use ThreadPrimitive.MessagesFlatList instead. */\nexport const ThreadMessages = forwardRef<\n FlatList<ThreadMessage>,\n ThreadMessagesProps\n>(\n (\n {\n autoScroll = false,\n scrollToBottomOnInitialize = false,\n scrollToBottomOnRunStart = false,\n scrollToBottomOnThreadSwitch = false,\n ...props\n },\n ref,\n ) => (\n <ThreadMessagesFlatList\n ref={ref}\n autoScroll={autoScroll}\n scrollToBottomOnInitialize={scrollToBottomOnInitialize}\n scrollToBottomOnRunStart={scrollToBottomOnRunStart}\n scrollToBottomOnThreadSwitch={scrollToBottomOnThreadSwitch}\n {...props}\n />\n ),\n);\nThreadMessages.displayName = \"ThreadPrimitive.Messages\";\n"],"mappings":"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"}
@@ -1,14 +1,10 @@
1
1
  import { ViewProps } from "react-native";
2
2
  import { ReactNode } from "react";
3
-
4
3
  //#region src/primitives/thread/ThreadRoot.d.ts
5
4
  type ThreadRootProps = ViewProps & {
6
5
  children: ReactNode;
7
6
  };
8
- declare const ThreadRoot: ({
9
- children,
10
- ...viewProps
11
- }: ThreadRootProps) => import("react").JSX.Element;
7
+ declare const ThreadRoot: ({ children, ...viewProps }: ThreadRootProps) => import("react").JSX.Element;
12
8
  //#endregion
13
9
  export { ThreadRoot, ThreadRootProps };
14
10
  //# sourceMappingURL=ThreadRoot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadRoot.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadRoot.tsx"],"mappings":";;;;KAGY,eAAA,GAAkB,SAAA;EAC5B,QAAA,EAAU,SAAS;AAAA;AAAA,cAGR,UAAA;EAAc,QAAA;EAAA,GAAA;AAAA,GAA4B,eAAe,qBAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"ThreadRoot.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadRoot.tsx"],"mappings":";;;KAGY,kBAAkB;EAC5B,UAAU;;cAGC,eAAc,aAAA,aAA4B,oCAAe,IAAA"}
@@ -1,9 +1,9 @@
1
1
  import { PressableProps } from "react-native";
2
2
  import { ReactNode } from "react";
3
-
4
3
  //#region src/primitives/thread/ThreadSuggestion.d.ts
5
4
  type ThreadSuggestionProps = Omit<PressableProps, "onPress"> & {
6
- children: ReactNode; /** The suggestion prompt. */
5
+ children: ReactNode;
6
+ /** The suggestion prompt. */
7
7
  prompt: string;
8
8
  /**
9
9
  * When true, automatically sends the message.
@@ -17,14 +17,7 @@ type ThreadSuggestionProps = Omit<PressableProps, "onPress"> & {
17
17
  */
18
18
  clearComposer?: boolean | undefined;
19
19
  };
20
- declare const ThreadSuggestion: ({
21
- children,
22
- prompt,
23
- send,
24
- clearComposer,
25
- disabled: disabledProp,
26
- ...pressableProps
27
- }: ThreadSuggestionProps) => import("react").JSX.Element;
20
+ declare const ThreadSuggestion: ({ children, prompt, send, clearComposer, disabled: disabledProp, ...pressableProps }: ThreadSuggestionProps) => import("react").JSX.Element;
28
21
  //#endregion
29
22
  export { ThreadSuggestion, ThreadSuggestionProps };
30
23
  //# sourceMappingURL=ThreadSuggestion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadSuggestion.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadSuggestion.tsx"],"mappings":";;;;KAIY,qBAAA,GAAwB,IAAA,CAAK,cAAA;EACvC,QAAA,EAAU,SAAA,EADA;EAGV,MAAA;;;;;EAKA,IAAA;EAPmB;;;;;EAanB,aAAA;AAAA;AAAA,cAGW,gBAAA;EAAoB,QAAA;EAAA,MAAA;EAAA,IAAA;EAAA,aAAA;EAAA,QAAA,EAAA,YAAA;EAAA,GAAA;AAAA,GAO9B,qBAAA,qBAAqB,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"ThreadSuggestion.d.ts","names":[],"sources":["../../../src/primitives/thread/ThreadSuggestion.tsx"],"mappings":";;;KAIY,wBAAwB,KAAK;EACvC,UAAU;;EAEV;;;;;EAKA;;;;;;EAMA;;cAGW,qBAAoB,UAAA,QAAA,MAAA,eAAA,UAAA,iBAAA,kBAO9B,0CAAqB,IAAA"}