@assistant-ui/react
Version:
Open-source TypeScript/React library for building production-grade AI chat experiences
92 lines (91 loc) • 2.47 kB
JavaScript
"use client";
import { makeThreadViewportStore } from "../stores/ThreadViewport.js";
import { ThreadViewportContext, useThreadViewportStore } from "../react/ThreadViewportContext.js";
import { writableStore } from "../ReadonlyStore.js";
import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
import { useEffect, useState } from "@assistant-ui/tap/react-shim";
import { jsx } from "react/jsx-runtime";
// src/context/providers/ThreadViewportProvider.tsx
const useThreadViewportStoreValue = (options) => {
const $ = c(11);
let t0;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t0 = { optional: true };
$[0] = t0;
} else t0 = $[0];
const outerViewport = useThreadViewportStore(t0);
let t1;
if ($[1] !== options) {
t1 = () => makeThreadViewportStore(options);
$[1] = options;
$[2] = t1;
} else t1 = $[2];
const [store] = useState(t1);
let t2;
let t3;
if ($[3] !== outerViewport || $[4] !== store) {
t2 = () => outerViewport?.getState().onScrollToBottom((config) => {
store.getState().scrollToBottom(config);
});
t3 = [outerViewport, store];
$[3] = outerViewport;
$[4] = store;
$[5] = t2;
$[6] = t3;
} else {
t2 = $[5];
t3 = $[6];
}
useEffect(t2, t3);
let t4;
let t5;
if ($[7] !== outerViewport || $[8] !== store) {
t4 = () => {
if (!outerViewport) return;
return store.subscribe((state) => {
if (outerViewport.getState().isAtBottom !== state.isAtBottom) writableStore(outerViewport).setState({ isAtBottom: state.isAtBottom });
});
};
t5 = [store, outerViewport];
$[7] = outerViewport;
$[8] = store;
$[9] = t4;
$[10] = t5;
} else {
t4 = $[9];
t5 = $[10];
}
useEffect(t4, t5);
return store;
};
const ThreadPrimitiveViewportProvider = (t0) => {
const $ = c(7);
const { children, options: t1 } = t0;
let t2;
if ($[0] !== t1) {
t2 = t1 === void 0 ? {} : t1;
$[0] = t1;
$[1] = t2;
} else t2 = $[1];
const useThreadViewport = useThreadViewportStoreValue(t2);
let t3;
if ($[2] !== useThreadViewport) {
t3 = () => ({ useThreadViewport });
$[2] = useThreadViewport;
$[3] = t3;
} else t3 = $[3];
const [context] = useState(t3);
let t4;
if ($[4] !== children || $[5] !== context) {
t4 = /* @__PURE__ */ jsx(ThreadViewportContext.Provider, {
value: context,
children
});
$[4] = children;
$[5] = context;
$[6] = t4;
} else t4 = $[6];
return t4;
};
export { ThreadPrimitiveViewportProvider };
//# sourceMappingURL=ThreadViewportProvider.js.map