@assistant-ui/react-native 0.1.45 → 0.1.46

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 (33) hide show
  1. package/dist/index.d.ts +4 -3
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +3 -3
  4. package/dist/primitives/message.d.ts +1 -0
  5. package/dist/primitives/message.d.ts.map +1 -1
  6. package/dist/primitives/message.js +3 -2
  7. package/dist/primitives/message.js.map +1 -1
  8. package/dist/primitives/thread/ThreadMessages.d.ts +7 -5
  9. package/dist/primitives/thread/ThreadMessages.d.ts.map +1 -1
  10. package/dist/primitives/thread/ThreadMessages.js +109 -376
  11. package/dist/primitives/thread/ThreadMessages.js.map +1 -1
  12. package/dist/primitives/thread/ThreadRowsFlatList.d.ts +29 -0
  13. package/dist/primitives/thread/ThreadRowsFlatList.d.ts.map +1 -0
  14. package/dist/primitives/thread/ThreadRowsFlatList.js +226 -0
  15. package/dist/primitives/thread/ThreadRowsFlatList.js.map +1 -0
  16. package/dist/primitives/thread/flatListScroll.d.ts +52 -0
  17. package/dist/primitives/thread/flatListScroll.d.ts.map +1 -0
  18. package/dist/primitives/thread/flatListScroll.js +380 -0
  19. package/dist/primitives/thread/flatListScroll.js.map +1 -0
  20. package/dist/primitives/thread.d.ts +2 -0
  21. package/dist/primitives/thread.d.ts.map +1 -1
  22. package/dist/primitives/thread.js +5 -2
  23. package/dist/primitives/thread.js.map +1 -1
  24. package/package.json +4 -3
  25. package/src/index.ts +18 -1
  26. package/src/primitives/message.test.tsx +74 -0
  27. package/src/primitives/message.ts +1 -0
  28. package/src/primitives/thread/ThreadMessages.test.tsx +28 -1
  29. package/src/primitives/thread/ThreadMessages.tsx +49 -343
  30. package/src/primitives/thread/ThreadRowsFlatList.test.tsx +253 -0
  31. package/src/primitives/thread/ThreadRowsFlatList.tsx +159 -0
  32. package/src/primitives/thread/flatListScroll.ts +467 -0
  33. package/src/primitives/thread.ts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadMessages.js","names":["ComponentType","FC","ForwardedRef","ReactNode","RefObject","forwardRef","memo","useCallback","useEffect","useRef","FlatList","FlatListProps","LayoutChangeEvent","NativeScrollEvent","NativeSyntheticEvent","ThreadMessage","MessageState","RenderChildrenWithAccessor","useAuiEvent","useAuiState","MessageByIndexProvider","MessageComponents","Message","EditComposer","UserEditComposer","AssistantEditComposer","SystemEditComposer","UserMessage","AssistantMessage","SystemMessage","MessagesContent","components","children","value","message","ThreadMessagesFlatListProps","Omit","autoScroll","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","history","hasMore","isLoadingMore","loadMore","ThreadMessagesProps","DEFAULT_SYSTEM_MESSAGE","AT_BOTTOM_THRESHOLD","useHistoryLoad","onStartReached","loadRequestedRef","current","handleStartReached","NonNullable","info","error","canLoadMore","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","useComposedFlatListRef","forwardedRef","flatListRef","node","setFlatListRef","const","useThreadMessagesFlatListAutoScroll","hasMessages","horizontal","t3","t4","t5","undefined","t6","Symbol","for","contentHeight","viewportHeight","scrollY","metricsRef","isAtBottomRef","lastScrollEventOffsetRef","initializeScrollRequestedRef","contentSizeVersionRef","pendingScrollToBottomRef","t7","updateIsAtBottom","t8","animated","contentHeight_0","viewportHeight_0","offset","Math","max","scrollToOffset","scrollToBottom","t9","event","wasAtBottom","previousViewportHeight","viewportHeight_1","nativeEvent","layout","width","height","pending","minimumContentSizeVersion","handleLayout","t10","event_0","contentOffset","contentSize","layoutMeasurement","scrollOffset","x","y","previousEventOffset","wasPinnedToBottom","upwardMove","handleScroll","t11","metrics","contentHeight_1","previousContentHeight","wasAtBottom_0","pendingScroll","handleContentSizeChange","t12","t13","t14","t15","t16","ThreadMessagesFlatList","flatListProps","onContentSizeChange","onLayout","onScroll","onStartReachedThreshold","scrollEventThrottle","messages","_temp3","length","handleAutoScrollContentSizeChange","handleAutoScrollLayout","handleAutoScrollScroll","renderItem","keyExtractor","_temp4","scrollTracking","minIndexForVisible","ThreadMessages","props","s","s_0","composer","item","id","_exhaustiveCheck","_c"],"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 { ThreadMessage } from \"@assistant-ui/core\";\nimport type { MessageState } from \"@assistant-ui/core/store\";\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 history?:\n | {\n hasMore: boolean;\n isLoadingMore: boolean;\n loadMore: () => void;\n }\n | 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 useHistoryLoad = (\n history: ThreadMessagesFlatListProps[\"history\"],\n onStartReached: FlatListProps<ThreadMessage>[\"onStartReached\"],\n) => {\n const loadRequestedRef = useRef(false);\n const hasMore = history?.hasMore ?? false;\n const isLoadingMore = history?.isLoadingMore ?? false;\n\n // The latch is scoped to one commit so a no-op load cannot disable paging.\n useEffect(() => {\n loadRequestedRef.current = isLoadingMore;\n });\n\n const handleStartReached = useCallback<\n NonNullable<FlatListProps<ThreadMessage>[\"onStartReached\"]>\n >(\n (info) => {\n onStartReached?.(info);\n if (loadRequestedRef.current) return;\n loadRequestedRef.current = true;\n try {\n history?.loadMore();\n } catch (error) {\n loadRequestedRef.current = false;\n throw error;\n }\n },\n [history, onStartReached],\n );\n\n return {\n canLoadMore: hasMore && !isLoadingMore,\n handleStartReached,\n };\n};\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 DEFAULT_SYSTEM_MESSAGE\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 horizontal = false,\n autoScroll = true,\n scrollToBottomOnRunStart = true,\n scrollToBottomOnInitialize = true,\n scrollToBottomOnThreadSwitch = true,\n}: {\n flatListRef: RefObject<FlatList<ThreadMessage> | null>;\n hasMessages: boolean;\n horizontal?: boolean | null | undefined;\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 lastScrollEventOffsetRef = useRef(0);\n const initializeScrollRequestedRef = useRef(false);\n const contentSizeVersionRef = useRef(0);\n const pendingScrollToBottomRef = useRef<\n | false\n | {\n animated: boolean;\n minimumContentSizeVersion: number;\n }\n >(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 const offset = Math.max(0, contentHeight - viewportHeight);\n metricsRef.current.scrollY = offset;\n isAtBottomRef.current = true;\n flatListRef.current?.scrollToOffset({ offset, animated });\n },\n [flatListRef],\n );\n\n const handleLayout = useCallback(\n (event: LayoutChangeEvent) => {\n const wasAtBottom = isAtBottomRef.current;\n const previousViewportHeight = metricsRef.current.viewportHeight;\n const viewportHeight = horizontal\n ? event.nativeEvent.layout.width\n : event.nativeEvent.layout.height;\n metricsRef.current.viewportHeight = viewportHeight;\n updateIsAtBottom();\n const pending = pendingScrollToBottomRef.current;\n if (\n pending &&\n contentSizeVersionRef.current >= pending.minimumContentSizeVersion &&\n viewportHeight > 0\n ) {\n pendingScrollToBottomRef.current = false;\n scrollToBottom(pending.animated);\n return;\n }\n if (!wasAtBottom) return;\n // Layout changes are never user gestures, so they must not unpin. Past\n // the first measurement, a viewport change while pinned re-commands the\n // bottom position, since no content-size event follows a bare keyboard\n // open or close.\n if (\n autoScroll &&\n previousViewportHeight !== 0 &&\n viewportHeight !== previousViewportHeight\n ) {\n scrollToBottom(pending ? pending.animated : false);\n } else {\n isAtBottomRef.current = true;\n }\n },\n [autoScroll, horizontal, scrollToBottom, updateIsAtBottom],\n );\n\n const handleScroll = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n const { contentOffset, contentSize, layoutMeasurement } =\n event.nativeEvent;\n const scrollOffset = horizontal ? contentOffset.x : contentOffset.y;\n const previousEventOffset = lastScrollEventOffsetRef.current;\n const wasPinnedToBottom = isAtBottomRef.current;\n lastScrollEventOffsetRef.current = scrollOffset;\n metricsRef.current = {\n contentHeight: horizontal ? contentSize.width : contentSize.height,\n viewportHeight: horizontal\n ? layoutMeasurement.width\n : layoutMeasurement.height,\n scrollY: scrollOffset,\n };\n updateIsAtBottom();\n const upwardMove = scrollOffset < previousEventOffset;\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 [horizontal, updateIsAtBottom],\n );\n\n const handleContentSizeChange = useCallback(\n (width: number, height: number) => {\n const metrics = metricsRef.current;\n const contentHeight = horizontal ? width : height;\n const previousContentHeight = metrics.contentHeight;\n const wasAtBottom = isAtBottomRef.current;\n if (contentHeight > 0) contentSizeVersionRef.current += 1;\n metrics.contentHeight = contentHeight;\n updateIsAtBottom();\n\n // Initialize and thread-switch requests are repeated after the list has\n // measured so the explicit bottom offset uses real content metrics.\n const pendingScroll = pendingScrollToBottomRef.current;\n if (\n pendingScroll &&\n contentSizeVersionRef.current >=\n pendingScroll.minimumContentSizeVersion &&\n metrics.viewportHeight > 0\n ) {\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 (contentHeight <= previousContentHeight) return;\n\n scrollToBottom(false);\n },\n [autoScroll, horizontal, 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 = {\n animated: false,\n minimumContentSizeVersion: Math.max(1, contentSizeVersionRef.current),\n };\n scrollToBottom(false);\n }, [hasMessages, scrollToBottom, scrollToBottomOnInitialize]);\n\n useAuiEvent(\"thread.runStart\", () => {\n if (!scrollToBottomOnRunStart) return;\n pendingScrollToBottomRef.current = {\n animated: true,\n minimumContentSizeVersion: contentSizeVersionRef.current + 1,\n };\n scrollToBottom(true);\n });\n\n useAuiEvent(\"threads.selectionChanged\", () => {\n if (!scrollToBottomOnThreadSwitch) return;\n initializeScrollRequestedRef.current = false;\n lastScrollEventOffsetRef.current = 0;\n pendingScrollToBottomRef.current = {\n animated: false,\n minimumContentSizeVersion: contentSizeVersionRef.current + 1,\n };\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 onStartReached,\n onStartReachedThreshold,\n scrollEventThrottle,\n scrollToBottomOnInitialize,\n scrollToBottomOnRunStart,\n scrollToBottomOnThreadSwitch,\n history,\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 horizontal: flatListProps.horizontal,\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 const { canLoadMore, handleStartReached } = useHistoryLoad(\n history,\n onStartReached,\n );\n\n return (\n <FlatList\n ref={setFlatListRef}\n data={messages as unknown as ThreadMessage[]}\n renderItem={renderItem}\n keyExtractor={keyExtractor}\n maintainVisibleContentPosition={{ minIndexForVisible: 0 }}\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 {...(history\n ? {\n ...(canLoadMore\n ? { onStartReached: handleStartReached }\n : onStartReached\n ? { onStartReached }\n : {}),\n onStartReachedThreshold: onStartReachedThreshold ?? 1,\n }\n : {\n ...(onStartReached && { onStartReached }),\n ...(onStartReachedThreshold !== undefined && {\n onStartReachedThreshold,\n }),\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
+ {"version":3,"file":"ThreadMessages.js","names":["ComponentType","FC","ReactNode","forwardRef","memo","useCallback","FlatList","FlatListProps","ThreadMessage","MessageState","RenderChildrenWithAccessor","useAuiState","MessageByIndexProvider","FlatListHistory","getFlatListPagingProps","useComposedFlatListRef","useFlatListAutoScroll","useFlatListScrollProps","useHistoryLoad","useThreadHistory","MessageComponents","Message","EditComposer","UserEditComposer","AssistantEditComposer","SystemEditComposer","UserMessage","AssistantMessage","SystemMessage","MessagesContent","components","children","value","message","ThreadMessagesFlatListProps","Omit","autoScroll","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","history","ThreadMessagesProps","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","ThreadMessagesFlatList","forwardedRef","flatListProps","onContentSizeChange","onEndReached","onEndReachedThreshold","onLayout","onScroll","onStartReached","onStartReachedThreshold","scrollEventThrottle","messages","_temp3","effectiveHistory","flatListRef","setFlatListRef","length","horizontal","hasMessages","handleContentSizeChange","handleAutoScrollContentSizeChange","handleLayout","handleAutoScrollLayout","handleScroll","handleAutoScrollScroll","t3","t4","renderItem","keyExtractor","_temp4","scrollProps","canLoadMore","handleReached","t5","pagingProps","t6","t7","Symbol","for","minIndexForVisible","t8","ThreadMessages","ref","props","undefined","s","s_0","composer","item","id","_exhaustiveCheck","_c"],"sources":["../../../src/primitives/thread/ThreadMessages.tsx"],"sourcesContent":["import {\n type ComponentType,\n type FC,\n type ReactNode,\n forwardRef,\n memo,\n useCallback,\n} from \"react\";\nimport { FlatList, type FlatListProps } from \"react-native\";\nimport type { ThreadMessage } from \"@assistant-ui/core\";\nimport type { MessageState } from \"@assistant-ui/core/store\";\nimport { RenderChildrenWithAccessor, useAuiState } from \"@assistant-ui/store\";\nimport { MessageByIndexProvider } from \"@assistant-ui/core/react\";\nimport {\n type FlatListHistory,\n getFlatListPagingProps,\n useComposedFlatListRef,\n useFlatListAutoScroll,\n useFlatListScrollProps,\n useHistoryLoad,\n useThreadHistory,\n} from \"./flatListScroll\";\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 * Pages older messages in when the list nears its start. Defaults to the\n * runtime's `thread.hasEarlier` / `isLoadingEarlier` / `loadEarlier()`;\n * pass it to drive paging from app state instead.\n */\n history?: FlatListHistory | undefined;\n };\n\n/** @deprecated Use ThreadMessagesFlatListProps instead. */\nexport type ThreadMessagesProps = ThreadMessagesFlatListProps;\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 DEFAULT_SYSTEM_MESSAGE\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 ThreadMessagesFlatList = forwardRef<\n FlatList<ThreadMessage>,\n ThreadMessagesFlatListProps\n>(\n (\n {\n autoScroll,\n components,\n children,\n onContentSizeChange,\n onLayout,\n onScroll,\n onStartReached,\n onStartReachedThreshold,\n onEndReached,\n onEndReachedThreshold,\n scrollEventThrottle,\n scrollToBottomOnInitialize,\n scrollToBottomOnRunStart,\n scrollToBottomOnThreadSwitch,\n history,\n ...flatListProps\n },\n forwardedRef,\n ) => {\n const messages = useAuiState((s) => s.thread.messages);\n const effectiveHistory = useThreadHistory(history);\n const [flatListRef, setFlatListRef] = useComposedFlatListRef(forwardedRef);\n const {\n handleContentSizeChange: handleAutoScrollContentSizeChange,\n handleLayout: handleAutoScrollLayout,\n handleScroll: handleAutoScrollScroll,\n } = useFlatListAutoScroll({\n flatListRef,\n hasMessages: messages.length > 0,\n horizontal: flatListProps.horizontal,\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 scrollProps = useFlatListScrollProps({\n autoScroll,\n scrollToBottomOnInitialize,\n scrollToBottomOnRunStart,\n scrollToBottomOnThreadSwitch,\n onContentSizeChange,\n onLayout,\n onScroll,\n scrollEventThrottle,\n handleAutoScrollContentSizeChange,\n handleAutoScrollLayout,\n handleAutoScrollScroll,\n });\n\n const { canLoadMore, handleReached } = useHistoryLoad(\n effectiveHistory,\n onStartReached,\n );\n const pagingProps = getFlatListPagingProps(\n \"start\",\n effectiveHistory,\n canLoadMore,\n handleReached,\n {\n onStartReached,\n onStartReachedThreshold,\n onEndReached,\n onEndReachedThreshold,\n },\n );\n\n return (\n <FlatList\n ref={setFlatListRef}\n data={messages as unknown as ThreadMessage[]}\n renderItem={renderItem}\n keyExtractor={keyExtractor}\n maintainVisibleContentPosition={{ minIndexForVisible: 0 }}\n {...scrollProps}\n {...pagingProps}\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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"}
@@ -0,0 +1,29 @@
1
+ import { FlatList, type FlatListProps } from "react-native";
2
+ import { ThreadPrimitiveRow, type ThreadRow, type ThreadRowsOptions } from "@assistant-ui/core/react";
3
+ import { type FlatListHistory } from "./flatListScroll.js";
4
+ export type ThreadRowsFlatListProps = Omit<FlatListProps<ThreadRow>, "data" | "renderItem" | "children" | "keyExtractor"> & {
5
+ /** Same contract as `MessagePrimitive.GroupedParts`; keep a stable identity (module scope or `useCallback`) or every row cache rebuilds and re-renders. */
6
+ groupBy?: ThreadRowsOptions["groupBy"];
7
+ /** Renders each row through `ThreadPrimitive.Row`. */
8
+ children: ThreadPrimitiveRow.Props["children"];
9
+ autoScroll?: boolean | undefined;
10
+ scrollToBottomOnRunStart?: boolean | undefined;
11
+ scrollToBottomOnInitialize?: boolean | undefined;
12
+ scrollToBottomOnThreadSwitch?: boolean | undefined;
13
+ /** Pages older messages from app state or the runtime when the list nears its history edge. */
14
+ history?: FlatListHistory | undefined;
15
+ };
16
+ /** Virtualizes flattened thread rows while keeping the visible row anchored. */
17
+ export declare const ThreadRowsFlatList: import("react").ForwardRefExoticComponent<Omit<FlatListProps<ThreadRow>, "children" | "data" | "renderItem" | "keyExtractor"> & {
18
+ /** Same contract as `MessagePrimitive.GroupedParts`; keep a stable identity (module scope or `useCallback`) or every row cache rebuilds and re-renders. */
19
+ groupBy?: ThreadRowsOptions["groupBy"];
20
+ /** Renders each row through `ThreadPrimitive.Row`. */
21
+ children: ThreadPrimitiveRow.Props["children"];
22
+ autoScroll?: boolean | undefined;
23
+ scrollToBottomOnRunStart?: boolean | undefined;
24
+ scrollToBottomOnInitialize?: boolean | undefined;
25
+ scrollToBottomOnThreadSwitch?: boolean | undefined;
26
+ /** Pages older messages from app state or the runtime when the list nears its history edge. */
27
+ history?: FlatListHistory | undefined;
28
+ } & import("react").RefAttributes<FlatList<ThreadRow>>>;
29
+ //# sourceMappingURL=ThreadRowsFlatList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadRowsFlatList.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/ThreadRowsFlatList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAEL,kBAAkB,EAClB,KAAK,SAAS,EACd,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,KAAK,eAAe,EAOrB,4BAAyB;AAE1B,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,aAAa,CAAC,SAAS,CAAC,EACxB,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,cAAc,CACpD,GAAG;IACF,2JAA2J;IAC3J,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACvC,sDAAsD;IACtD,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/C,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjC,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/C,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACjD,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnD,+FAA+F;IAC/F,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,kBAAkB;IAb7B,2JAA2J;cACjJ,iBAAiB,CAAC,SAAS,CAAC;IACtC,sDAAsD;cAC5C,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;iBACjC,OAAO,GAAG,SAAS;+BACL,OAAO,GAAG,SAAS;iCACjB,OAAO,GAAG,SAAS;mCACjB,OAAO,GAAG,SAAS;IAClD,+FAA+F;cACrF,eAAe,GAAG,SAAS;uDA6HtC,CAAC"}
@@ -0,0 +1,226 @@
1
+ import { getFlatListPagingProps, useComposedFlatListRef, useFlatListAutoScroll, useFlatListScrollProps, useHistoryLoad, useThreadHistory } from "./flatListScroll.js";
2
+ import { ThreadPrimitiveRow, createThreadRowsSelector } from "@assistant-ui/core/react";
3
+ import { useAuiState } from "@assistant-ui/store";
4
+ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
+ import { FlatList } from "react-native";
6
+ import { jsx } from "react/jsx-runtime";
7
+ import { forwardRef } from "@assistant-ui/tap/react-shim";
8
+ //#region src/primitives/thread/ThreadRowsFlatList.tsx
9
+ /** Virtualizes flattened thread rows while keeping the visible row anchored. */
10
+ const ThreadRowsFlatList = forwardRef((t0, forwardedRef) => {
11
+ const $ = c(70);
12
+ let autoScroll;
13
+ let children;
14
+ let flatListProps;
15
+ let groupBy;
16
+ let history;
17
+ let onContentSizeChange;
18
+ let onEndReached;
19
+ let onEndReachedThreshold;
20
+ let onLayout;
21
+ let onScroll;
22
+ let onStartReached;
23
+ let onStartReachedThreshold;
24
+ let scrollEventThrottle;
25
+ let scrollToBottomOnInitialize;
26
+ let scrollToBottomOnRunStart;
27
+ let scrollToBottomOnThreadSwitch;
28
+ let t1;
29
+ if ($[0] !== t0) {
30
+ ({groupBy, children, inverted: t1, autoScroll, scrollToBottomOnInitialize, scrollToBottomOnRunStart, scrollToBottomOnThreadSwitch, history, onContentSizeChange, onLayout, onScroll, onStartReached, onStartReachedThreshold, onEndReached, onEndReachedThreshold, scrollEventThrottle, ...flatListProps} = t0);
31
+ $[0] = t0;
32
+ $[1] = autoScroll;
33
+ $[2] = children;
34
+ $[3] = flatListProps;
35
+ $[4] = groupBy;
36
+ $[5] = history;
37
+ $[6] = onContentSizeChange;
38
+ $[7] = onEndReached;
39
+ $[8] = onEndReachedThreshold;
40
+ $[9] = onLayout;
41
+ $[10] = onScroll;
42
+ $[11] = onStartReached;
43
+ $[12] = onStartReachedThreshold;
44
+ $[13] = scrollEventThrottle;
45
+ $[14] = scrollToBottomOnInitialize;
46
+ $[15] = scrollToBottomOnRunStart;
47
+ $[16] = scrollToBottomOnThreadSwitch;
48
+ $[17] = t1;
49
+ } else {
50
+ autoScroll = $[1];
51
+ children = $[2];
52
+ flatListProps = $[3];
53
+ groupBy = $[4];
54
+ history = $[5];
55
+ onContentSizeChange = $[6];
56
+ onEndReached = $[7];
57
+ onEndReachedThreshold = $[8];
58
+ onLayout = $[9];
59
+ onScroll = $[10];
60
+ onStartReached = $[11];
61
+ onStartReachedThreshold = $[12];
62
+ scrollEventThrottle = $[13];
63
+ scrollToBottomOnInitialize = $[14];
64
+ scrollToBottomOnRunStart = $[15];
65
+ scrollToBottomOnThreadSwitch = $[16];
66
+ t1 = $[17];
67
+ }
68
+ const inverted = t1 === void 0 ? false : t1;
69
+ let t2;
70
+ if ($[18] !== groupBy) {
71
+ t2 = createThreadRowsSelector({ groupBy });
72
+ $[18] = groupBy;
73
+ $[19] = t2;
74
+ } else t2 = $[19];
75
+ const rows = useAuiState(t2);
76
+ let t3;
77
+ if ($[20] !== inverted || $[21] !== rows) {
78
+ t3 = inverted ? [...rows].reverse() : rows;
79
+ $[20] = inverted;
80
+ $[21] = rows;
81
+ $[22] = t3;
82
+ } else t3 = $[22];
83
+ const data = t3;
84
+ const effectiveHistory = useThreadHistory(history);
85
+ const [flatListRef, setFlatListRef] = useComposedFlatListRef(forwardedRef);
86
+ const t4 = rows.length > 0;
87
+ let t5;
88
+ if ($[23] !== autoScroll || $[24] !== flatListProps.horizontal || $[25] !== flatListRef || $[26] !== inverted || $[27] !== scrollToBottomOnInitialize || $[28] !== scrollToBottomOnRunStart || $[29] !== scrollToBottomOnThreadSwitch || $[30] !== t4) {
89
+ t5 = {
90
+ flatListRef,
91
+ hasMessages: t4,
92
+ inverted,
93
+ horizontal: flatListProps.horizontal,
94
+ autoScroll,
95
+ scrollToBottomOnInitialize,
96
+ scrollToBottomOnRunStart,
97
+ scrollToBottomOnThreadSwitch
98
+ };
99
+ $[23] = autoScroll;
100
+ $[24] = flatListProps.horizontal;
101
+ $[25] = flatListRef;
102
+ $[26] = inverted;
103
+ $[27] = scrollToBottomOnInitialize;
104
+ $[28] = scrollToBottomOnRunStart;
105
+ $[29] = scrollToBottomOnThreadSwitch;
106
+ $[30] = t4;
107
+ $[31] = t5;
108
+ } else t5 = $[31];
109
+ const { handleContentSizeChange: handleAutoScrollContentSizeChange, handleLayout: handleAutoScrollLayout, handleScroll: handleAutoScrollScroll } = useFlatListAutoScroll(t5);
110
+ let t6;
111
+ if ($[32] !== children) {
112
+ t6 = (t7) => {
113
+ const { item } = t7;
114
+ return /* @__PURE__ */ jsx(ThreadPrimitiveRow, {
115
+ row: item,
116
+ children
117
+ });
118
+ };
119
+ $[32] = children;
120
+ $[33] = t6;
121
+ } else t6 = $[33];
122
+ const renderItem = t6;
123
+ const keyExtractor = _temp;
124
+ let t7;
125
+ if ($[34] !== autoScroll || $[35] !== handleAutoScrollContentSizeChange || $[36] !== handleAutoScrollLayout || $[37] !== handleAutoScrollScroll || $[38] !== onContentSizeChange || $[39] !== onLayout || $[40] !== onScroll || $[41] !== scrollEventThrottle || $[42] !== scrollToBottomOnInitialize || $[43] !== scrollToBottomOnRunStart || $[44] !== scrollToBottomOnThreadSwitch) {
126
+ t7 = {
127
+ autoScroll,
128
+ scrollToBottomOnInitialize,
129
+ scrollToBottomOnRunStart,
130
+ scrollToBottomOnThreadSwitch,
131
+ onContentSizeChange,
132
+ onLayout,
133
+ onScroll,
134
+ scrollEventThrottle,
135
+ handleAutoScrollContentSizeChange,
136
+ handleAutoScrollLayout,
137
+ handleAutoScrollScroll
138
+ };
139
+ $[34] = autoScroll;
140
+ $[35] = handleAutoScrollContentSizeChange;
141
+ $[36] = handleAutoScrollLayout;
142
+ $[37] = handleAutoScrollScroll;
143
+ $[38] = onContentSizeChange;
144
+ $[39] = onLayout;
145
+ $[40] = onScroll;
146
+ $[41] = scrollEventThrottle;
147
+ $[42] = scrollToBottomOnInitialize;
148
+ $[43] = scrollToBottomOnRunStart;
149
+ $[44] = scrollToBottomOnThreadSwitch;
150
+ $[45] = t7;
151
+ } else t7 = $[45];
152
+ const scrollProps = useFlatListScrollProps(t7);
153
+ let t8;
154
+ if ($[46] !== inverted || $[47] !== onEndReached || $[48] !== onStartReached) {
155
+ t8 = (info) => {
156
+ if (inverted) onEndReached?.(info);
157
+ else onStartReached?.(info);
158
+ };
159
+ $[46] = inverted;
160
+ $[47] = onEndReached;
161
+ $[48] = onStartReached;
162
+ $[49] = t8;
163
+ } else t8 = $[49];
164
+ const { canLoadMore, handleReached } = useHistoryLoad(effectiveHistory, t8);
165
+ const t9 = inverted ? "end" : "start";
166
+ let t10;
167
+ if ($[50] !== canLoadMore || $[51] !== effectiveHistory || $[52] !== handleReached || $[53] !== onEndReached || $[54] !== onEndReachedThreshold || $[55] !== onStartReached || $[56] !== onStartReachedThreshold || $[57] !== t9) {
168
+ t10 = getFlatListPagingProps(t9, effectiveHistory, canLoadMore, handleReached, {
169
+ onStartReached,
170
+ onStartReachedThreshold,
171
+ onEndReached,
172
+ onEndReachedThreshold
173
+ });
174
+ $[50] = canLoadMore;
175
+ $[51] = effectiveHistory;
176
+ $[52] = handleReached;
177
+ $[53] = onEndReached;
178
+ $[54] = onEndReachedThreshold;
179
+ $[55] = onStartReached;
180
+ $[56] = onStartReachedThreshold;
181
+ $[57] = t9;
182
+ $[58] = t10;
183
+ } else t10 = $[58];
184
+ const pagingProps = t10;
185
+ let t11;
186
+ if ($[59] !== inverted) {
187
+ t11 = inverted ? {
188
+ minIndexForVisible: 0,
189
+ autoscrollToTopThreshold: 4
190
+ } : { minIndexForVisible: 0 };
191
+ $[59] = inverted;
192
+ $[60] = t11;
193
+ } else t11 = $[60];
194
+ let t12;
195
+ if ($[61] !== data || $[62] !== flatListProps || $[63] !== inverted || $[64] !== pagingProps || $[65] !== renderItem || $[66] !== scrollProps || $[67] !== setFlatListRef || $[68] !== t11) {
196
+ t12 = /* @__PURE__ */ jsx(FlatList, {
197
+ ref: setFlatListRef,
198
+ data,
199
+ renderItem,
200
+ keyExtractor,
201
+ inverted,
202
+ maintainVisibleContentPosition: t11,
203
+ ...scrollProps,
204
+ ...pagingProps,
205
+ ...flatListProps
206
+ });
207
+ $[61] = data;
208
+ $[62] = flatListProps;
209
+ $[63] = inverted;
210
+ $[64] = pagingProps;
211
+ $[65] = renderItem;
212
+ $[66] = scrollProps;
213
+ $[67] = setFlatListRef;
214
+ $[68] = t11;
215
+ $[69] = t12;
216
+ } else t12 = $[69];
217
+ return t12;
218
+ });
219
+ ThreadRowsFlatList.displayName = "ThreadPrimitive.RowsFlatList";
220
+ function _temp(row) {
221
+ return row.key;
222
+ }
223
+ //#endregion
224
+ export { ThreadRowsFlatList };
225
+
226
+ //# sourceMappingURL=ThreadRowsFlatList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadRowsFlatList.js","names":["forwardRef","useCallback","useMemo","FlatList","FlatListProps","createThreadRowsSelector","ThreadPrimitiveRow","ThreadRow","ThreadRowsOptions","useAuiState","FlatListHistory","getFlatListPagingProps","useComposedFlatListRef","useFlatListAutoScroll","useFlatListScrollProps","useHistoryLoad","useThreadHistory","ThreadRowsFlatListProps","Omit","groupBy","children","Props","autoScroll","scrollToBottomOnRunStart","scrollToBottomOnInitialize","scrollToBottomOnThreadSwitch","history","ThreadRowsFlatList","t0","forwardedRef","$","_c","flatListProps","onContentSizeChange","onEndReached","onEndReachedThreshold","onLayout","onScroll","onStartReached","onStartReachedThreshold","scrollEventThrottle","t1","inverted","undefined","t2","selectRows","rows","t3","reverse","data","effectiveHistory","flatListRef","setFlatListRef","t4","length","t5","horizontal","hasMessages","handleContentSizeChange","handleAutoScrollContentSizeChange","handleLayout","handleAutoScrollLayout","handleScroll","handleAutoScrollScroll","t6","t7","item","renderItem","keyExtractor","_temp","scrollProps","t8","info","EndInfo","StartInfo","onHistoryReached","canLoadMore","handleReached","t9","t10","pagingProps","t11","minIndexForVisible","autoscrollToTopThreshold","t12","displayName","row","key","_c","selectRows","onHistoryReached"],"sources":["../../../src/primitives/thread/ThreadRowsFlatList.tsx"],"sourcesContent":["import { forwardRef, useCallback, useMemo } from \"react\";\nimport { FlatList, type FlatListProps } from \"react-native\";\nimport {\n createThreadRowsSelector,\n ThreadPrimitiveRow,\n type ThreadRow,\n type ThreadRowsOptions,\n} from \"@assistant-ui/core/react\";\nimport { useAuiState } from \"@assistant-ui/store\";\nimport {\n type FlatListHistory,\n getFlatListPagingProps,\n useComposedFlatListRef,\n useFlatListAutoScroll,\n useFlatListScrollProps,\n useHistoryLoad,\n useThreadHistory,\n} from \"./flatListScroll\";\n\nexport type ThreadRowsFlatListProps = Omit<\n FlatListProps<ThreadRow>,\n \"data\" | \"renderItem\" | \"children\" | \"keyExtractor\"\n> & {\n /** Same contract as `MessagePrimitive.GroupedParts`; keep a stable identity (module scope or `useCallback`) or every row cache rebuilds and re-renders. */\n groupBy?: ThreadRowsOptions[\"groupBy\"];\n /** Renders each row through `ThreadPrimitive.Row`. */\n children: ThreadPrimitiveRow.Props[\"children\"];\n autoScroll?: boolean | undefined;\n scrollToBottomOnRunStart?: boolean | undefined;\n scrollToBottomOnInitialize?: boolean | undefined;\n scrollToBottomOnThreadSwitch?: boolean | undefined;\n /** Pages older messages from app state or the runtime when the list nears its history edge. */\n history?: FlatListHistory | undefined;\n};\n\n/** Virtualizes flattened thread rows while keeping the visible row anchored. */\nexport const ThreadRowsFlatList = forwardRef<\n FlatList<ThreadRow>,\n ThreadRowsFlatListProps\n>(\n (\n {\n groupBy,\n children,\n inverted = false,\n autoScroll,\n scrollToBottomOnInitialize,\n scrollToBottomOnRunStart,\n scrollToBottomOnThreadSwitch,\n history,\n onContentSizeChange,\n onLayout,\n onScroll,\n onStartReached,\n onStartReachedThreshold,\n onEndReached,\n onEndReachedThreshold,\n scrollEventThrottle,\n ...flatListProps\n },\n forwardedRef,\n ) => {\n const selectRows = useMemo(\n () => createThreadRowsSelector({ groupBy }),\n [groupBy],\n );\n const rows = useAuiState(selectRows);\n const data = useMemo(\n () => (inverted ? [...rows].reverse() : rows) as ThreadRow[],\n [inverted, rows],\n );\n const effectiveHistory = useThreadHistory(history);\n const [flatListRef, setFlatListRef] = useComposedFlatListRef(forwardedRef);\n const {\n handleContentSizeChange: handleAutoScrollContentSizeChange,\n handleLayout: handleAutoScrollLayout,\n handleScroll: handleAutoScrollScroll,\n } = useFlatListAutoScroll({\n flatListRef,\n hasMessages: rows.length > 0,\n inverted,\n horizontal: flatListProps.horizontal,\n autoScroll,\n scrollToBottomOnInitialize,\n scrollToBottomOnRunStart,\n scrollToBottomOnThreadSwitch,\n });\n\n const renderItem = useCallback(\n ({ item }: { item: ThreadRow }) => (\n <ThreadPrimitiveRow row={item}>{children}</ThreadPrimitiveRow>\n ),\n [children],\n );\n const keyExtractor = useCallback((row: ThreadRow) => row.key, []);\n\n const scrollProps = useFlatListScrollProps({\n autoScroll,\n scrollToBottomOnInitialize,\n scrollToBottomOnRunStart,\n scrollToBottomOnThreadSwitch,\n onContentSizeChange,\n onLayout,\n onScroll,\n scrollEventThrottle,\n handleAutoScrollContentSizeChange,\n handleAutoScrollLayout,\n handleAutoScrollScroll,\n });\n type StartInfo = Parameters<\n NonNullable<FlatListProps<ThreadRow>[\"onStartReached\"]>\n >[0];\n type EndInfo = Parameters<\n NonNullable<FlatListProps<ThreadRow>[\"onEndReached\"]>\n >[0];\n const onHistoryReached = useCallback(\n (info: StartInfo | EndInfo) => {\n if (inverted) onEndReached?.(info as EndInfo);\n else onStartReached?.(info as StartInfo);\n },\n [inverted, onEndReached, onStartReached],\n );\n const { canLoadMore, handleReached } = useHistoryLoad<StartInfo | EndInfo>(\n effectiveHistory,\n onHistoryReached,\n );\n const pagingProps = getFlatListPagingProps(\n inverted ? \"end\" : \"start\",\n effectiveHistory,\n canLoadMore,\n handleReached,\n {\n onStartReached,\n onStartReachedThreshold,\n onEndReached,\n onEndReachedThreshold,\n },\n );\n\n return (\n <FlatList\n ref={setFlatListRef}\n data={data}\n renderItem={renderItem}\n keyExtractor={keyExtractor}\n inverted={inverted}\n maintainVisibleContentPosition={\n inverted\n ? { minIndexForVisible: 0, autoscrollToTopThreshold: 4 }\n : { minIndexForVisible: 0 }\n }\n {...scrollProps}\n {...pagingProps}\n {...flatListProps}\n />\n );\n },\n);\nThreadRowsFlatList.displayName = \"ThreadPrimitive.RowsFlatList\";\n"],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { type ForwardedRef, type RefObject } from "react";
2
+ import { type FlatList, type FlatListProps, type LayoutChangeEvent, type NativeScrollEvent, type NativeSyntheticEvent } from "react-native";
3
+ export type FlatListHistory = {
4
+ hasMore: boolean;
5
+ isLoadingMore: boolean;
6
+ loadMore: () => void;
7
+ };
8
+ /** `history` when given, else the runtime's earlier-message paging. */
9
+ export declare const useThreadHistory: (history: FlatListHistory | undefined) => FlatListHistory | undefined;
10
+ export declare const useHistoryLoad: <TInfo>(history: FlatListHistory | undefined, onReached: ((info: TInfo) => void) | undefined) => {
11
+ canLoadMore: boolean;
12
+ handleReached: (info: TInfo) => void;
13
+ };
14
+ type ScrollProps = Pick<FlatListProps<unknown>, "onLayout" | "onScroll" | "onContentSizeChange" | "scrollEventThrottle">;
15
+ export declare const useFlatListScrollProps: ({ autoScroll, scrollToBottomOnInitialize, scrollToBottomOnRunStart, scrollToBottomOnThreadSwitch, onLayout, onScroll, onContentSizeChange, scrollEventThrottle, handleAutoScrollLayout, handleAutoScrollScroll, handleAutoScrollContentSizeChange, }: ScrollProps & {
16
+ autoScroll: boolean | undefined;
17
+ scrollToBottomOnInitialize: boolean | undefined;
18
+ scrollToBottomOnRunStart: boolean | undefined;
19
+ scrollToBottomOnThreadSwitch: boolean | undefined;
20
+ handleAutoScrollLayout: NonNullable<ScrollProps["onLayout"]>;
21
+ handleAutoScrollScroll: NonNullable<ScrollProps["onScroll"]>;
22
+ handleAutoScrollContentSizeChange: NonNullable<ScrollProps["onContentSizeChange"]>;
23
+ }) => {
24
+ scrollEventThrottle?: number;
25
+ onScroll?: (event: import("react-native").ScrollEvent) => void;
26
+ onLayout?: (event: LayoutChangeEvent) => unknown;
27
+ onContentSizeChange?: (contentWidth: number, contentHeight: number) => void;
28
+ };
29
+ type PagingProps<T> = Pick<FlatListProps<T>, "onStartReached" | "onStartReachedThreshold" | "onEndReached" | "onEndReachedThreshold">;
30
+ type StartReached = NonNullable<FlatListProps<unknown>["onStartReached"]>;
31
+ type EndReached = NonNullable<FlatListProps<unknown>["onEndReached"]>;
32
+ export declare function getFlatListPagingProps<T>(edge: "start", history: FlatListHistory | undefined, canLoadMore: boolean, handleReached: StartReached, userProps: PagingProps<T>): PagingProps<T>;
33
+ export declare function getFlatListPagingProps<T>(edge: "end", history: FlatListHistory | undefined, canLoadMore: boolean, handleReached: EndReached, userProps: PagingProps<T>): PagingProps<T>;
34
+ export declare function getFlatListPagingProps<T>(edge: "start" | "end", history: FlatListHistory | undefined, canLoadMore: boolean, handleReached: StartReached & EndReached, userProps: PagingProps<T>): PagingProps<T>;
35
+ export declare const setForwardedRef: <T>(ref: ForwardedRef<T>, value: T | null) => void;
36
+ export declare const useComposedFlatListRef: <T>(forwardedRef: ForwardedRef<FlatList<T>>) => readonly [RefObject<FlatList<T> | null>, (node: FlatList<T> | null) => void];
37
+ export declare const useFlatListAutoScroll: <T>({ flatListRef, hasMessages, inverted, horizontal, autoScroll, scrollToBottomOnRunStart, scrollToBottomOnInitialize, scrollToBottomOnThreadSwitch, }: {
38
+ flatListRef: RefObject<FlatList<T> | null>;
39
+ hasMessages: boolean;
40
+ inverted?: boolean | undefined;
41
+ horizontal?: boolean | null | undefined;
42
+ autoScroll?: boolean | undefined;
43
+ scrollToBottomOnRunStart?: boolean | undefined;
44
+ scrollToBottomOnInitialize?: boolean | undefined;
45
+ scrollToBottomOnThreadSwitch?: boolean | undefined;
46
+ }) => {
47
+ handleLayout: (event: LayoutChangeEvent) => void;
48
+ handleScroll: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
49
+ handleContentSizeChange: (width: number, height: number) => void;
50
+ };
51
+ export {};
52
+ //# sourceMappingURL=flatListScroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatListScroll.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/flatListScroll.ts"],"names":[],"mappings":"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"}