@assistant-ui/react
Version:
Typescript/React library for AI Chat
40 lines • 1.34 kB
JavaScript
"use client";
import { jsx } from "react/jsx-runtime";
import { useEffect, useState } from "react";
import { makeThreadViewportStore } from "../stores/ThreadViewport";
import {
ThreadViewportContext,
useThreadViewportStore
} from "../react/ThreadViewportContext";
import { writableStore } from "../ReadonlyStore";
const useThreadViewportStoreValue = () => {
const outerViewport = useThreadViewportStore({ optional: true });
const [store] = useState(() => makeThreadViewportStore());
useEffect(() => {
return outerViewport?.getState().onScrollToBottom(() => {
store.getState().scrollToBottom();
});
}, [outerViewport, store]);
useEffect(() => {
if (!outerViewport) return;
return store.subscribe((state) => {
if (outerViewport.getState().isAtBottom !== state.isAtBottom) {
writableStore(outerViewport).setState({ isAtBottom: state.isAtBottom });
}
});
}, [store, outerViewport]);
return store;
};
const ThreadViewportProvider = ({ children }) => {
const useThreadViewport = useThreadViewportStoreValue();
const [context] = useState(() => {
return {
useThreadViewport
};
});
return /* @__PURE__ */ jsx(ThreadViewportContext.Provider, { value: context, children });
};
export {
ThreadViewportProvider
};
//# sourceMappingURL=ThreadViewportProvider.js.map