@assistant-ui/react 0.12.28 → 0.14.0
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.
- package/dist/client/ExternalThread.d.ts.map +1 -1
- package/dist/client/ExternalThread.js +0 -2
- package/dist/client/ExternalThread.js.map +1 -1
- package/dist/client/InMemoryThreadList.d.ts.map +1 -1
- package/dist/client/InMemoryThreadList.js +3 -0
- package/dist/client/InMemoryThreadList.js.map +1 -1
- package/dist/client/SingleThreadList.d.ts.map +1 -1
- package/dist/client/SingleThreadList.js +3 -0
- package/dist/client/SingleThreadList.js.map +1 -1
- package/dist/context/providers/ThreadViewportProvider.d.ts.map +1 -1
- package/dist/context/providers/ThreadViewportProvider.js +2 -10
- package/dist/context/providers/ThreadViewportProvider.js.map +1 -1
- package/dist/context/stores/ThreadViewport.d.ts +46 -4
- package/dist/context/stores/ThreadViewport.d.ts.map +1 -1
- package/dist/context/stores/ThreadViewport.js +51 -7
- package/dist/context/stores/ThreadViewport.js.map +1 -1
- package/dist/index.d.ts +1 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -28
- package/dist/index.js.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.d.ts +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.d.ts.map +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.js +1 -1
- package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.js.map +1 -1
- package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
- package/dist/primitives/composer/ComposerInput.js +9 -4
- package/dist/primitives/composer/ComposerInput.js.map +1 -1
- package/dist/primitives/message/MessageRoot.d.ts +6 -30
- package/dist/primitives/message/MessageRoot.d.ts.map +1 -1
- package/dist/primitives/message/MessageRoot.js +68 -25
- package/dist/primitives/message/MessageRoot.js.map +1 -1
- package/dist/primitives/thread/ThreadViewport.d.ts +38 -0
- package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadViewport.js +53 -5
- package/dist/primitives/thread/ThreadViewport.js.map +1 -1
- package/dist/primitives/thread/ThreadViewportFooter.d.ts +2 -1
- package/dist/primitives/thread/ThreadViewportFooter.d.ts.map +1 -1
- package/dist/primitives/thread/ThreadViewportFooter.js +2 -1
- package/dist/primitives/thread/ThreadViewportFooter.js.map +1 -1
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts +22 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js +53 -0
- package/dist/primitives/thread/topAnchor/computeTopAnchorSlack.js.map +1 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts +5 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.js +38 -0
- package/dist/primitives/thread/topAnchor/createReserveObservers.js.map +1 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts +22 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js +75 -0
- package/dist/primitives/thread/topAnchor/mountTopAnchorReserve.js.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts +15 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.js +13 -0
- package/dist/primitives/thread/topAnchor/topAnchorTurn.js.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts +15 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.js +51 -0
- package/dist/primitives/thread/topAnchor/topAnchorUtils.js.map +1 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts +7 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.d.ts.map +1 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js +18 -0
- package/dist/primitives/thread/topAnchor/useTopAnchorReserve.js.map +1 -0
- package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
- package/dist/primitives/thread/useThreadViewportAutoScroll.js +13 -1
- package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
- package/dist/primitives/thread.d.ts +0 -1
- package/dist/primitives/thread.d.ts.map +1 -1
- package/dist/primitives/thread.js +0 -1
- package/dist/primitives/thread.js.map +1 -1
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts +13 -0
- package/dist/primitives/threadList/ThreadListLoadMore.d.ts.map +1 -0
- package/dist/primitives/threadList/ThreadListLoadMore.js +11 -0
- package/dist/primitives/threadList/ThreadListLoadMore.js.map +1 -0
- package/dist/primitives/threadList.d.ts +1 -0
- package/dist/primitives/threadList.d.ts.map +1 -1
- package/dist/primitives/threadList.js +1 -0
- package/dist/primitives/threadList.js.map +1 -1
- package/dist/utils/hooks/useManagedRef.d.ts.map +1 -1
- package/dist/utils/hooks/useManagedRef.js +1 -0
- package/dist/utils/hooks/useManagedRef.js.map +1 -1
- package/dist/utils/hooks/useOnResizeContent.d.ts.map +1 -1
- package/dist/utils/hooks/useOnResizeContent.js +1 -2
- package/dist/utils/hooks/useOnResizeContent.js.map +1 -1
- package/package.json +10 -10
- package/src/client/ExternalThread.ts +0 -2
- package/src/client/InMemoryThreadList.ts +3 -0
- package/src/client/SingleThreadList.ts +3 -0
- package/src/context/providers/ThreadViewportProvider.tsx +2 -12
- package/src/context/stores/ThreadViewport.ts +111 -11
- package/src/index.ts +0 -35
- package/src/legacy-runtime/runtime-cores/assistant-transport/utils.ts +1 -5
- package/src/primitives/composer/ComposerInput.test.tsx +232 -0
- package/src/primitives/composer/ComposerInput.tsx +9 -4
- package/src/primitives/message/MessageRoot.tsx +135 -57
- package/src/primitives/thread/ThreadViewport.tsx +95 -4
- package/src/primitives/thread/ThreadViewportFooter.tsx +2 -1
- package/src/primitives/thread/topAnchor/computeTopAnchorSlack.test.ts +131 -0
- package/src/primitives/thread/topAnchor/computeTopAnchorSlack.ts +94 -0
- package/src/primitives/thread/topAnchor/createReserveObservers.ts +50 -0
- package/src/primitives/thread/topAnchor/mountTopAnchorReserve.test.ts +131 -0
- package/src/primitives/thread/topAnchor/mountTopAnchorReserve.ts +127 -0
- package/src/primitives/thread/topAnchor/topAnchorTurn.test.ts +46 -0
- package/src/primitives/thread/topAnchor/topAnchorTurn.ts +30 -0
- package/src/primitives/thread/topAnchor/topAnchorUtils.ts +58 -0
- package/src/primitives/thread/topAnchor/useTopAnchorReserve.ts +19 -0
- package/src/primitives/thread/useThreadViewportAutoScroll.ts +15 -1
- package/src/primitives/thread.ts +0 -1
- package/src/primitives/threadList/ThreadListLoadMore.tsx +24 -0
- package/src/primitives/threadList.ts +1 -0
- package/src/tests/RemoteThreadListRuntime.adapterProvider.test.tsx +138 -0
- package/src/tests/RemoteThreadListRuntime.deferredProvider.test.tsx +28 -17
- package/src/utils/hooks/useManagedRef.ts +1 -0
- package/src/utils/hooks/useOnResizeContent.ts +1 -2
- package/dist/legacy-runtime/runtime-cores/external-store/getExternalStoreMessage.d.ts +0 -3
- package/dist/legacy-runtime/runtime-cores/external-store/getExternalStoreMessage.d.ts.map +0 -1
- package/dist/legacy-runtime/runtime-cores/external-store/getExternalStoreMessage.js +0 -3
- package/dist/legacy-runtime/runtime-cores/external-store/getExternalStoreMessage.js.map +0 -1
- package/dist/primitives/thread/ThreadViewportSlack.d.ts +0 -20
- package/dist/primitives/thread/ThreadViewportSlack.d.ts.map +0 -1
- package/dist/primitives/thread/ThreadViewportSlack.js +0 -80
- package/dist/primitives/thread/ThreadViewportSlack.js.map +0 -1
- package/src/legacy-runtime/runtime-cores/external-store/getExternalStoreMessage.ts +0 -6
- package/src/primitives/thread/ThreadViewportSlack.tsx +0 -116
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal slice of `ThreadViewportStore` that the top-anchor reserve needs.
|
|
3
|
+
* Decoupling from the full store keeps `mountTopAnchorReserve` testable in
|
|
4
|
+
* isolation and re-usable from any consumer that can adapt to this shape.
|
|
5
|
+
*/
|
|
6
|
+
export type TopAnchorStore = {
|
|
7
|
+
getState(): {
|
|
8
|
+
turnAnchor: "top" | "bottom";
|
|
9
|
+
element: {
|
|
10
|
+
viewport: HTMLElement | null;
|
|
11
|
+
anchor: HTMLElement | null;
|
|
12
|
+
target: HTMLElement | null;
|
|
13
|
+
};
|
|
14
|
+
targetConfig: {
|
|
15
|
+
tallerThan: number;
|
|
16
|
+
visibleHeight: number;
|
|
17
|
+
} | null;
|
|
18
|
+
};
|
|
19
|
+
subscribe(fn: () => void): () => void;
|
|
20
|
+
};
|
|
21
|
+
export declare const mountTopAnchorReserve: (store: TopAnchorStore) => () => void;
|
|
22
|
+
//# sourceMappingURL=mountTopAnchorReserve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mountTopAnchorReserve.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,IAAI;QACV,UAAU,EAAE,KAAK,GAAG,QAAQ,CAAC;QAC7B,OAAO,EAAE;YACP,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC;YAC7B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;YAC3B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;SAC5B,CAAC;QACF,YAAY,EAAE;YACZ,UAAU,EAAE,MAAM,CAAC;YACnB,aAAa,EAAE,MAAM,CAAC;SACvB,GAAG,IAAI,CAAC;KACV,CAAC;IACF,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CACvC,CAAC;AAsBF,eAAO,MAAM,qBAAqB,GAAI,OAAO,cAAc,eAuE1D,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { computeTopAnchorReserve, computeTopAnchorTargetScrollTop, } from "./computeTopAnchorSlack.js";
|
|
3
|
+
import { createReserveObservers } from "./createReserveObservers.js";
|
|
4
|
+
import { createReserveElement, getAnchorId, setReserveHeight, snapScrollTop, } from "./topAnchorUtils.js";
|
|
5
|
+
const createFrameScheduler = (fn) => {
|
|
6
|
+
let frame = null;
|
|
7
|
+
return {
|
|
8
|
+
schedule: () => {
|
|
9
|
+
if (frame !== null)
|
|
10
|
+
return;
|
|
11
|
+
frame = requestAnimationFrame(() => {
|
|
12
|
+
frame = null;
|
|
13
|
+
fn();
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
cancel: () => {
|
|
17
|
+
if (frame !== null) {
|
|
18
|
+
cancelAnimationFrame(frame);
|
|
19
|
+
frame = null;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export const mountTopAnchorReserve = (store) => {
|
|
25
|
+
let reserve = null;
|
|
26
|
+
let lastScrolledAnchorId;
|
|
27
|
+
function apply() {
|
|
28
|
+
const state = store.getState();
|
|
29
|
+
const { viewport, anchor, target } = state.element;
|
|
30
|
+
const clamp = state.targetConfig;
|
|
31
|
+
if (state.turnAnchor !== "top" ||
|
|
32
|
+
!viewport ||
|
|
33
|
+
!anchor ||
|
|
34
|
+
!target ||
|
|
35
|
+
!clamp) {
|
|
36
|
+
observers.disconnect();
|
|
37
|
+
if (reserve) {
|
|
38
|
+
setReserveHeight(reserve, 0);
|
|
39
|
+
reserve.remove();
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
reserve ??= createReserveElement();
|
|
44
|
+
if (reserve.parentElement !== target.parentElement ||
|
|
45
|
+
reserve.previousElementSibling !== target) {
|
|
46
|
+
target.after(reserve);
|
|
47
|
+
}
|
|
48
|
+
observers.target(viewport, anchor, target);
|
|
49
|
+
const reserveChanged = setReserveHeight(reserve, computeTopAnchorReserve({ viewport, anchor, reserve, ...clamp }));
|
|
50
|
+
if (reserveChanged) {
|
|
51
|
+
scheduler.schedule();
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const anchorId = getAnchorId(anchor);
|
|
55
|
+
if (anchorId !== undefined && lastScrolledAnchorId === anchorId)
|
|
56
|
+
return;
|
|
57
|
+
const targetScrollTop = snapScrollTop(computeTopAnchorTargetScrollTop({ viewport, anchor, ...clamp }));
|
|
58
|
+
if (Math.abs(viewport.scrollTop - targetScrollTop) > 1) {
|
|
59
|
+
viewport.scrollTo({ top: targetScrollTop, behavior: "smooth" });
|
|
60
|
+
}
|
|
61
|
+
if (anchorId !== undefined)
|
|
62
|
+
lastScrolledAnchorId = anchorId;
|
|
63
|
+
}
|
|
64
|
+
const scheduler = createFrameScheduler(apply);
|
|
65
|
+
const observers = createReserveObservers(scheduler.schedule);
|
|
66
|
+
scheduler.schedule();
|
|
67
|
+
const unsubscribe = store.subscribe(scheduler.schedule);
|
|
68
|
+
return () => {
|
|
69
|
+
scheduler.cancel();
|
|
70
|
+
unsubscribe();
|
|
71
|
+
observers.disconnect();
|
|
72
|
+
reserve?.remove();
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=mountTopAnchorReserve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mountTopAnchorReserve.js","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/mountTopAnchorReserve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type TopAnchorTurnMessage = {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly role: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const getActiveTopAnchorTurn: ({ isRunning, messages, }: {
|
|
6
|
+
readonly isRunning: boolean;
|
|
7
|
+
readonly messages: readonly TopAnchorTurnMessage[];
|
|
8
|
+
}) => {
|
|
9
|
+
anchorId: string;
|
|
10
|
+
targetId: string;
|
|
11
|
+
} | null;
|
|
12
|
+
export declare const getActiveTopAnchorAnchorId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
|
|
13
|
+
export declare const getActiveTopAnchorTargetId: (options: Parameters<typeof getActiveTopAnchorTurn>[0]) => string | undefined;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=topAnchorTurn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topAnchorTurn.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/topAnchorTurn.ts"],"names":[],"mappings":"AAEA,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,0BAGpC;IACD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACpD;;;QAQA,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,SAAS,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,uBACT,CAAC;AAE/C,eAAO,MAAM,0BAA0B,GACrC,SAAS,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,uBACT,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
export const getActiveTopAnchorTurn = ({ isRunning, messages, }) => {
|
|
3
|
+
if (!isRunning)
|
|
4
|
+
return null;
|
|
5
|
+
const target = messages.at(-1);
|
|
6
|
+
const anchor = messages.at(-2);
|
|
7
|
+
if (anchor?.role !== "user" || target?.role !== "assistant")
|
|
8
|
+
return null;
|
|
9
|
+
return { anchorId: anchor.id, targetId: target.id };
|
|
10
|
+
};
|
|
11
|
+
export const getActiveTopAnchorAnchorId = (options) => getActiveTopAnchorTurn(options)?.anchorId;
|
|
12
|
+
export const getActiveTopAnchorTargetId = (options) => getActiveTopAnchorTurn(options)?.targetId;
|
|
13
|
+
//# sourceMappingURL=topAnchorTurn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topAnchorTurn.js","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/topAnchorTurn.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAOb,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EACrC,SAAS,EACT,QAAQ,GAIT,EAAE,EAAE;IACH,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,EAAE,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAqD,EACrD,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;AAE/C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAqD,EACrD,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a supported CSS length string (`px`, `em`, `rem`) into pixels,
|
|
3
|
+
* resolving font-relative units against the supplied element's computed style.
|
|
4
|
+
* Unsupported or malformed values disable the tall-message clamp.
|
|
5
|
+
*
|
|
6
|
+
* Part of the top-anchor package's public input contract: consumers may pass
|
|
7
|
+
* clamp configuration as supported CSS-length strings, and this function is the
|
|
8
|
+
* single place that converts them into the pixel values the package operates on.
|
|
9
|
+
*/
|
|
10
|
+
export declare const parseCssLength: (value: string, element: HTMLElement) => number;
|
|
11
|
+
export declare const getAnchorId: (anchor: HTMLElement) => string | undefined;
|
|
12
|
+
export declare const createReserveElement: () => HTMLDivElement;
|
|
13
|
+
export declare const setReserveHeight: (reserve: HTMLElement, height: number) => boolean;
|
|
14
|
+
export declare const snapScrollTop: (top: number) => number;
|
|
15
|
+
//# sourceMappingURL=topAnchorUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topAnchorUtils.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/topAnchorUtils.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,SAAS,WAAW,KAAG,MAkBpE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,QAAQ,WAAW,uBAA6B,CAAC;AAE7E,eAAO,MAAM,oBAAoB,sBAShC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,EAAE,QAAQ,MAAM,YAQpE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,WAGxC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
/**
|
|
3
|
+
* Convert a supported CSS length string (`px`, `em`, `rem`) into pixels,
|
|
4
|
+
* resolving font-relative units against the supplied element's computed style.
|
|
5
|
+
* Unsupported or malformed values disable the tall-message clamp.
|
|
6
|
+
*
|
|
7
|
+
* Part of the top-anchor package's public input contract: consumers may pass
|
|
8
|
+
* clamp configuration as supported CSS-length strings, and this function is the
|
|
9
|
+
* single place that converts them into the pixel values the package operates on.
|
|
10
|
+
*/
|
|
11
|
+
export const parseCssLength = (value, element) => {
|
|
12
|
+
const match = value.trim().match(/^(\d+(?:\.\d+)?|\.\d+)(em|px|rem)$/);
|
|
13
|
+
if (!match)
|
|
14
|
+
return Number.POSITIVE_INFINITY;
|
|
15
|
+
const num = Number(match[1]);
|
|
16
|
+
const unit = match[2];
|
|
17
|
+
if (unit === "px")
|
|
18
|
+
return num;
|
|
19
|
+
if (unit === "em") {
|
|
20
|
+
const fontSize = parseFloat(getComputedStyle(element).fontSize) || 16;
|
|
21
|
+
return num * fontSize;
|
|
22
|
+
}
|
|
23
|
+
if (unit === "rem") {
|
|
24
|
+
const rootFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;
|
|
25
|
+
return num * rootFontSize;
|
|
26
|
+
}
|
|
27
|
+
return Number.POSITIVE_INFINITY;
|
|
28
|
+
};
|
|
29
|
+
export const getAnchorId = (anchor) => anchor.dataset.messageId;
|
|
30
|
+
export const createReserveElement = () => {
|
|
31
|
+
const reserve = document.createElement("div");
|
|
32
|
+
reserve.dataset.auiTopAnchorReserve = "";
|
|
33
|
+
reserve.style.height = "0px";
|
|
34
|
+
reserve.style.flexShrink = "0";
|
|
35
|
+
reserve.style.pointerEvents = "none";
|
|
36
|
+
reserve.setAttribute("aria-hidden", "true");
|
|
37
|
+
return reserve;
|
|
38
|
+
};
|
|
39
|
+
export const setReserveHeight = (reserve, height) => {
|
|
40
|
+
const nextHeight = `${height}px`;
|
|
41
|
+
if (reserve.style.height !== nextHeight) {
|
|
42
|
+
reserve.style.height = nextHeight;
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
};
|
|
47
|
+
export const snapScrollTop = (top) => {
|
|
48
|
+
const pixelRatio = window.devicePixelRatio || 1;
|
|
49
|
+
return Math.round(top * pixelRatio) / pixelRatio;
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=topAnchorUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topAnchorUtils.js","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/topAnchorUtils.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,OAAoB,EAAU,EAAE;IAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACvE,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAE5C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAC9B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtE,OAAO,GAAG,GAAG,QAAQ,CAAC;IACxB,CAAC;IACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,YAAY,GAChB,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxE,OAAO,GAAG,GAAG,YAAY,CAAC;IAC5B,CAAC;IACD,OAAO,MAAM,CAAC,iBAAiB,CAAC;AAClC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAmB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AAE7E,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CAAC,OAAO,CAAC,mBAAmB,GAAG,EAAE,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;IACrC,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAE5C,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAoB,EAAE,MAAc,EAAE,EAAE;IACvE,MAAM,UAAU,GAAG,GAAG,MAAM,IAAI,CAAC;IACjC,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,EAAE;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC;AACnD,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mounts the top-turn-anchor reserve element against the active
|
|
3
|
+
* `ThreadViewport` store. Call this from inside the scrollable viewport so
|
|
4
|
+
* the reserve `<div>` is appended next to the streaming assistant message.
|
|
5
|
+
*/
|
|
6
|
+
export declare const useTopAnchorReserve: (enabled: boolean) => void;
|
|
7
|
+
//# sourceMappingURL=useTopAnchorReserve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTopAnchorReserve.d.ts","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/useTopAnchorReserve.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,OAAO,SAOnD,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useLayoutEffect } from "react";
|
|
3
|
+
import { useThreadViewportStore } from "../../../context/react/ThreadViewportContext.js";
|
|
4
|
+
import { mountTopAnchorReserve } from "./mountTopAnchorReserve.js";
|
|
5
|
+
/**
|
|
6
|
+
* Mounts the top-turn-anchor reserve element against the active
|
|
7
|
+
* `ThreadViewport` store. Call this from inside the scrollable viewport so
|
|
8
|
+
* the reserve `<div>` is appended next to the streaming assistant message.
|
|
9
|
+
*/
|
|
10
|
+
export const useTopAnchorReserve = (enabled) => {
|
|
11
|
+
const threadViewportStore = useThreadViewportStore();
|
|
12
|
+
useLayoutEffect(() => {
|
|
13
|
+
if (!enabled)
|
|
14
|
+
return;
|
|
15
|
+
return mountTopAnchorReserve(threadViewportStore);
|
|
16
|
+
}, [enabled, threadViewportStore]);
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=useTopAnchorReserve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTopAnchorReserve.js","sourceRoot":"","sources":["../../../../src/primitives/thread/topAnchor/useTopAnchorReserve.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,wDAAqD;AACtF,OAAO,EAAE,qBAAqB,EAAE,mCAAgC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,EAAE;IACtD,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;IAErD,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThreadViewportAutoScroll.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,OAAO,CAAC;AAQ9D,yBAAiB,2BAA2B,CAAC;IAC3C,KAAY,OAAO,GAAG;QACpB;;;;;WAKG;QACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjC;;;;WAIG;QACH,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAE/C;;;;WAIG;QACH,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjD;;;;WAIG;QACH,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KACpD,CAAC;CACH;AAED,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS,WAAW,EAAE,qGAKvE,2BAA2B,CAAC,OAAO,KAAG,WAAW,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"useThreadViewportAutoScroll.d.ts","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,OAAO,CAAC;AAQ9D,yBAAiB,2BAA2B,CAAC;IAC3C,KAAY,OAAO,GAAG;QACpB;;;;;WAKG;QACH,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjC;;;;WAIG;QACH,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAE/C;;;;WAIG;QACH,0BAA0B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;QAEjD;;;;WAIG;QACH,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KACpD,CAAC;CACH;AAED,eAAO,MAAM,2BAA2B,GAAI,QAAQ,SAAS,WAAW,EAAE,qGAKvE,2BAA2B,CAAC,OAAO,KAAG,WAAW,CAAC,QAAQ,CAqH5D,CAAC"}
|
|
@@ -25,6 +25,12 @@ export const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunSta
|
|
|
25
25
|
scrollingToBottomBehaviorRef.current = behavior;
|
|
26
26
|
div.scrollTo({ top: div.scrollHeight, behavior });
|
|
27
27
|
}, []);
|
|
28
|
+
const hasActiveTopAnchor = useCallback(() => {
|
|
29
|
+
const state = threadViewportStore.getState();
|
|
30
|
+
return (state.turnAnchor === "top" &&
|
|
31
|
+
state.element.viewport === divRef.current &&
|
|
32
|
+
state.element.anchor !== null);
|
|
33
|
+
}, [threadViewportStore]);
|
|
28
34
|
const handleScroll = () => {
|
|
29
35
|
const div = divRef.current;
|
|
30
36
|
if (!div)
|
|
@@ -50,7 +56,11 @@ export const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunSta
|
|
|
50
56
|
};
|
|
51
57
|
const resizeRef = useOnResizeContent(() => {
|
|
52
58
|
const scrollBehavior = scrollingToBottomBehaviorRef.current;
|
|
53
|
-
if (scrollBehavior) {
|
|
59
|
+
if (scrollBehavior && hasActiveTopAnchor()) {
|
|
60
|
+
// Let the top-anchor reserve own scrolling while a run starts to avoid a bottom-scroll race.
|
|
61
|
+
scrollingToBottomBehaviorRef.current = null;
|
|
62
|
+
}
|
|
63
|
+
else if (scrollBehavior) {
|
|
54
64
|
scrollToBottom(scrollBehavior);
|
|
55
65
|
}
|
|
56
66
|
else if (autoScroll && threadViewportStore.getState().isAtBottom) {
|
|
@@ -71,6 +81,8 @@ export const useThreadViewportAutoScroll = ({ autoScroll, scrollToBottomOnRunSta
|
|
|
71
81
|
useAuiEvent("thread.runStart", () => {
|
|
72
82
|
if (!scrollToBottomOnRunStart)
|
|
73
83
|
return;
|
|
84
|
+
if (threadViewportStore.getState().turnAnchor === "top")
|
|
85
|
+
return;
|
|
74
86
|
scrollingToBottomBehaviorRef.current = "auto";
|
|
75
87
|
requestAnimationFrame(() => {
|
|
76
88
|
scrollToBottom("auto");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useThreadViewportAutoScroll.js","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,EAAoB,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,gDAA6C;AAC1E,OAAO,EAAE,mBAAmB,EAAE,iDAA8C;AAC5E,OAAO,EAAE,aAAa,EAAE,2CAAwC;AAChE,OAAO,EAAE,aAAa,EAAE,uCAAoC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,qDAAkD;AAmCnF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAA+B,EACxE,UAAU,EACV,wBAAwB,GAAG,IAAI,EAC/B,0BAA0B,GAAG,IAAI,EACjC,4BAA4B,GAAG,IAAI,GACC,EAAyB,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAW,IAAI,CAAC,CAAC;IAEtC,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;IACrD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,KAAK,KAAK,CAAC;IACnE,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAS,CAAC,CAAC,CAAC;IAExC,iFAAiF;IACjF,uDAAuD;IACvD,sFAAsF;IACtF,MAAM,4BAA4B,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAEzE,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,QAAwB,EAAE,EAAE;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,4BAA4B,CAAC,OAAO,GAAG,QAAQ,CAAC;QAChD,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC;QAC7D,MAAM,aAAa,GACjB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC;YACjE,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,YAAY,CAAC;QAEvC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;YAC5D,qBAAqB;QACvB,CAAC;aAAM,CAAC;YACN,IAAI,aAAa,EAAE,CAAC;gBAClB,4BAA4B,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9C,CAAC;YAED,MAAM,YAAY,GAChB,aAAa,IAAI,4BAA4B,CAAC,OAAO,KAAK,IAAI,CAAC;YAEjE,IAAI,YAAY,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;gBACjD,aAAa,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC;oBAC1C,UAAU,EAAE,aAAa;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,aAAa,CAAC,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,EAAE;QACxC,MAAM,cAAc,GAAG,4BAA4B,CAAC,OAAO,CAAC;QAC5D,IAAI,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useThreadViewportAutoScroll.js","sourceRoot":"","sources":["../../../src/primitives/thread/useThreadViewportAutoScroll.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ export { ThreadPrimitiveIf as If } from "./thread/ThreadIf.js";
|
|
|
4
4
|
export { ThreadPrimitiveViewport as Viewport } from "./thread/ThreadViewport.js";
|
|
5
5
|
export { ThreadPrimitiveViewportProvider as ViewportProvider } from "../context/providers/ThreadViewportProvider.js";
|
|
6
6
|
export { ThreadPrimitiveViewportFooter as ViewportFooter } from "./thread/ThreadViewportFooter.js";
|
|
7
|
-
export { ThreadPrimitiveViewportSlack as ViewportSlack } from "./thread/ThreadViewportSlack.js";
|
|
8
7
|
export { ThreadPrimitiveMessages as Messages } from "./thread/ThreadMessages.js";
|
|
9
8
|
export { ThreadPrimitiveMessageByIndex as MessageByIndex } from "./thread/ThreadMessages.js";
|
|
10
9
|
export { ThreadPrimitiveScrollToBottom as ScrollToBottom } from "./thread/ThreadScrollToBottom.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../src/primitives/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,IAAI,EAAE,+BAA4B;AAClE,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAE,gCAA6B;AACrE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,6BAA0B;AAC5D,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,+BAA+B,IAAI,gBAAgB,EAAE,uDAAoD;AAClH,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../src/primitives/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,IAAI,EAAE,+BAA4B;AAClE,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAE,gCAA6B;AACrE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,6BAA0B;AAC5D,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,+BAA+B,IAAI,gBAAgB,EAAE,uDAAoD;AAClH,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,mCAAgC;AAC1F,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,yBAAyB,IAAI,UAAU,EAAE,qCAAkC;AACpF,OAAO,EACL,0BAA0B,IAAI,WAAW,EACzC,gCAAgC,IAAI,iBAAiB,GACtD,sCAAmC"}
|
|
@@ -4,7 +4,6 @@ export { ThreadPrimitiveIf as If } from "./thread/ThreadIf.js";
|
|
|
4
4
|
export { ThreadPrimitiveViewport as Viewport } from "./thread/ThreadViewport.js";
|
|
5
5
|
export { ThreadPrimitiveViewportProvider as ViewportProvider } from "../context/providers/ThreadViewportProvider.js";
|
|
6
6
|
export { ThreadPrimitiveViewportFooter as ViewportFooter } from "./thread/ThreadViewportFooter.js";
|
|
7
|
-
export { ThreadPrimitiveViewportSlack as ViewportSlack } from "./thread/ThreadViewportSlack.js";
|
|
8
7
|
export { ThreadPrimitiveMessages as Messages } from "./thread/ThreadMessages.js";
|
|
9
8
|
export { ThreadPrimitiveMessageByIndex as MessageByIndex } from "./thread/ThreadMessages.js";
|
|
10
9
|
export { ThreadPrimitiveScrollToBottom as ScrollToBottom } from "./thread/ThreadScrollToBottom.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../../src/primitives/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,IAAI,EAAE,+BAA4B;AAClE,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAE,gCAA6B;AACrE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,6BAA0B;AAC5D,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,+BAA+B,IAAI,gBAAgB,EAAE,uDAAoD;AAClH,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../../src/primitives/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,IAAI,IAAI,EAAE,+BAA4B;AAClE,OAAO,EAAE,oBAAoB,IAAI,KAAK,EAAE,gCAA6B;AACrE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,6BAA0B;AAC5D,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,+BAA+B,IAAI,gBAAgB,EAAE,uDAAoD;AAClH,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,uBAAuB,IAAI,QAAQ,EAAE,mCAAgC;AAC9E,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,mCAAgC;AAC1F,OAAO,EAAE,6BAA6B,IAAI,cAAc,EAAE,yCAAsC;AAChG,OAAO,EAAE,yBAAyB,IAAI,UAAU,EAAE,qCAAkC;AACpF,OAAO,EACL,0BAA0B,IAAI,WAAW,EACzC,gCAAgC,IAAI,iBAAiB,GACtD,sCAAmC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ActionButtonElement, type ActionButtonProps } from "../../utils/createActionButton.js";
|
|
2
|
+
declare const useThreadListLoadMore: () => (() => void) | null;
|
|
3
|
+
export declare namespace ThreadListPrimitiveLoadMore {
|
|
4
|
+
type Element = ActionButtonElement;
|
|
5
|
+
type Props = ActionButtonProps<typeof useThreadListLoadMore>;
|
|
6
|
+
}
|
|
7
|
+
export declare const ThreadListPrimitiveLoadMore: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
8
|
+
asChild?: boolean;
|
|
9
|
+
}, "ref"> & {
|
|
10
|
+
render?: import("react").ReactElement | undefined;
|
|
11
|
+
} & import("react").RefAttributes<HTMLButtonElement>, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ThreadListLoadMore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadListLoadMore.d.ts","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListLoadMore.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EAEvB,0CAAuC;AAGxC,QAAA,MAAM,qBAAqB,2BAI1B,CAAC;AAEF,yBAAiB,2BAA2B,CAAC;IAC3C,KAAY,OAAO,GAAG,mBAAmB,CAAC;IAC1C,KAAY,KAAK,GAAG,iBAAiB,CAAC,OAAO,qBAAqB,CAAC,CAAC;CACrE;AAED,eAAO,MAAM,2BAA2B;;;;gHAGvC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { createActionButton, } from "../../utils/createActionButton.js";
|
|
3
|
+
import { useThreadListLoadMore as useThreadListLoadMoreBehavior } from "@assistant-ui/core/react";
|
|
4
|
+
const useThreadListLoadMore = () => {
|
|
5
|
+
const { loadMore, disabled } = useThreadListLoadMoreBehavior();
|
|
6
|
+
if (disabled)
|
|
7
|
+
return null;
|
|
8
|
+
return loadMore;
|
|
9
|
+
};
|
|
10
|
+
export const ThreadListPrimitiveLoadMore = createActionButton("ThreadListPrimitive.LoadMore", useThreadListLoadMore);
|
|
11
|
+
//# sourceMappingURL=ThreadListLoadMore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadListLoadMore.js","sourceRoot":"","sources":["../../../src/primitives/threadList/ThreadListLoadMore.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAGL,kBAAkB,GACnB,0CAAuC;AACxC,OAAO,EAAE,qBAAqB,IAAI,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAElG,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACjC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,6BAA6B,EAAE,CAAC;IAC/D,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAC3D,8BAA8B,EAC9B,qBAAqB,CACtB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { ThreadListPrimitiveNew as New } from "./threadList/ThreadListNew.js";
|
|
2
2
|
export { ThreadListPrimitiveItems as Items } from "./threadList/ThreadListItems.js";
|
|
3
3
|
export { ThreadListPrimitiveItemByIndex as ItemByIndex } from "./threadList/ThreadListItems.js";
|
|
4
|
+
export { ThreadListPrimitiveLoadMore as LoadMore } from "./threadList/ThreadListLoadMore.js";
|
|
4
5
|
export { ThreadListPrimitiveRoot as Root } from "./threadList/ThreadListRoot.js";
|
|
5
6
|
//# sourceMappingURL=threadList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threadList.d.ts","sourceRoot":"","sources":["../../src/primitives/threadList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,GAAG,EAAE,sCAAmC;AAC3E,OAAO,EAAE,wBAAwB,IAAI,KAAK,EAAE,wCAAqC;AACjF,OAAO,EAAE,8BAA8B,IAAI,WAAW,EAAE,wCAAqC;AAC7F,OAAO,EAAE,uBAAuB,IAAI,IAAI,EAAE,uCAAoC"}
|
|
1
|
+
{"version":3,"file":"threadList.d.ts","sourceRoot":"","sources":["../../src/primitives/threadList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,GAAG,EAAE,sCAAmC;AAC3E,OAAO,EAAE,wBAAwB,IAAI,KAAK,EAAE,wCAAqC;AACjF,OAAO,EAAE,8BAA8B,IAAI,WAAW,EAAE,wCAAqC;AAC7F,OAAO,EAAE,2BAA2B,IAAI,QAAQ,EAAE,2CAAwC;AAC1F,OAAO,EAAE,uBAAuB,IAAI,IAAI,EAAE,uCAAoC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { ThreadListPrimitiveNew as New } from "./threadList/ThreadListNew.js";
|
|
2
2
|
export { ThreadListPrimitiveItems as Items } from "./threadList/ThreadListItems.js";
|
|
3
3
|
export { ThreadListPrimitiveItemByIndex as ItemByIndex } from "./threadList/ThreadListItems.js";
|
|
4
|
+
export { ThreadListPrimitiveLoadMore as LoadMore } from "./threadList/ThreadListLoadMore.js";
|
|
4
5
|
export { ThreadListPrimitiveRoot as Root } from "./threadList/ThreadListRoot.js";
|
|
5
6
|
//# sourceMappingURL=threadList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threadList.js","sourceRoot":"","sources":["../../src/primitives/threadList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,GAAG,EAAE,sCAAmC;AAC3E,OAAO,EAAE,wBAAwB,IAAI,KAAK,EAAE,wCAAqC;AACjF,OAAO,EAAE,8BAA8B,IAAI,WAAW,EAAE,wCAAqC;AAC7F,OAAO,EAAE,uBAAuB,IAAI,IAAI,EAAE,uCAAoC"}
|
|
1
|
+
{"version":3,"file":"threadList.js","sourceRoot":"","sources":["../../src/primitives/threadList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,IAAI,GAAG,EAAE,sCAAmC;AAC3E,OAAO,EAAE,wBAAwB,IAAI,KAAK,EAAE,wCAAqC;AACjF,OAAO,EAAE,8BAA8B,IAAI,WAAW,EAAE,wCAAqC;AAC7F,OAAO,EAAE,2BAA2B,IAAI,QAAQ,EAAE,2CAAwC;AAC1F,OAAO,EAAE,uBAAuB,IAAI,IAAI,EAAE,uCAAoC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useManagedRef.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useManagedRef.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,GAAI,KAAK,EACjC,UAAU,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,UAK5C,KAAK,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"useManagedRef.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useManagedRef.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,GAAI,KAAK,EACjC,UAAU,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,UAK5C,KAAK,GAAG,IAAI,SAgBpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useManagedRef.js","sourceRoot":"","sources":["../../../src/utils/hooks/useManagedRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAmD,EACnD,EAAE;IACF,MAAM,UAAU,GAAG,MAAM,CAA2B,SAAS,CAAC,CAAC;IAE/D,MAAM,GAAG,GAAG,WAAW,CACrB,CAAC,EAAgB,EAAE,EAAE;QACnB,qCAAqC;QACrC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,UAAU,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"useManagedRef.js","sourceRoot":"","sources":["../../../src/utils/hooks/useManagedRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAmD,EACnD,EAAE;IACF,MAAM,UAAU,GAAG,MAAM,CAA2B,SAAS,CAAC,CAAC;IAE/D,MAAM,GAAG,GAAG,WAAW,CACrB,CAAC,EAAgB,EAAE,EAAE;QACnB,qCAAqC;QACrC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,UAAU,CAAC,OAAO,EAAE,CAAC;YACrB,UAAU,CAAC,OAAO,GAAG,SAAS,CAAC;QACjC,CAAC;QAED,uDAAuD;QACvD,IAAI,EAAE,EAAE,CAAC;YACP,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOnResizeContent.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useOnResizeContent.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"useOnResizeContent.d.ts","sourceRoot":"","sources":["../../../src/utils/hooks/useOnResizeContent.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,IAAI,qCAqCtD,CAAC"}
|
|
@@ -9,8 +9,7 @@ export const useOnResizeContent = (callback) => {
|
|
|
9
9
|
});
|
|
10
10
|
const mutationObserver = new MutationObserver((mutations) => {
|
|
11
11
|
// Filter out style-only attribute mutations to prevent feedback loops
|
|
12
|
-
// with
|
|
13
|
-
// to viewport changes
|
|
12
|
+
// with code paths that write styles in response to viewport changes.
|
|
14
13
|
const hasRelevantMutation = mutations.some((m) => m.type !== "attributes" || m.attributeName !== "style");
|
|
15
14
|
if (hasRelevantMutation) {
|
|
16
15
|
callbackRef();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOnResizeContent.js","sourceRoot":"","sources":["../../../src/utils/hooks/useOnResizeContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAEhD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAoB,EAAE,EAAE;IACzD,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,EAAe,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YAC7C,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;YAC1D,sEAAsE;YACtE,
|
|
1
|
+
{"version":3,"file":"useOnResizeContent.js","sourceRoot":"","sources":["../../../src/utils/hooks/useOnResizeContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAEhD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAoB,EAAE,EAAE;IACzD,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,EAAe,EAAE,EAAE;QAClB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YAC7C,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;YAC1D,sEAAsE;YACtE,qEAAqE;YACrE,MAAM,mBAAmB,GAAG,SAAS,CAAC,IAAI,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,aAAa,KAAK,OAAO,CAC9D,CAAC;YACF,IAAI,mBAAmB,EAAE,CAAC;gBACxB,WAAW,EAAE,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3B,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE;YAC3B,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,UAAU,EAAE,CAAC;YAC5B,gBAAgB,CAAC,UAAU,EAAE,CAAC;QAChC,CAAC,CAAC;IACJ,CAAC,EACD,CAAC,WAAW,CAAC,CACd,CAAC;IAEF,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "TypeScript/React library for AI Chat",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"radix-ui",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
],
|
|
49
49
|
"sideEffects": false,
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@assistant-ui/core": "^0.
|
|
52
|
-
"@assistant-ui/store": "^0.2.
|
|
53
|
-
"@assistant-ui/tap": "^0.5.
|
|
51
|
+
"@assistant-ui/core": "^0.2.0",
|
|
52
|
+
"@assistant-ui/store": "^0.2.10",
|
|
53
|
+
"@assistant-ui/tap": "^0.5.11",
|
|
54
54
|
"@radix-ui/primitive": "^1.1.3",
|
|
55
55
|
"@radix-ui/react-compose-refs": "^1.1.2",
|
|
56
56
|
"@radix-ui/react-context": "^1.1.3",
|
|
@@ -58,12 +58,12 @@
|
|
|
58
58
|
"@radix-ui/react-use-callback-ref": "^1.1.1",
|
|
59
59
|
"@radix-ui/react-use-escape-keydown": "^1.1.1",
|
|
60
60
|
"assistant-cloud": "^0.1.27",
|
|
61
|
-
"assistant-stream": "^0.3.
|
|
62
|
-
"nanoid": "^5.1.
|
|
61
|
+
"assistant-stream": "^0.3.13",
|
|
62
|
+
"nanoid": "^5.1.11",
|
|
63
63
|
"radix-ui": "^1.4.3",
|
|
64
64
|
"react-textarea-autosize": "^8.5.9",
|
|
65
|
-
"zod": "^4.3
|
|
66
|
-
"zustand": "^5.0.
|
|
65
|
+
"zod": "^4.4.3",
|
|
66
|
+
"zustand": "^5.0.13"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
69
|
"@types/react": "*",
|
|
@@ -85,11 +85,11 @@
|
|
|
85
85
|
"@types/node": "^25.6.0",
|
|
86
86
|
"@types/react": "^19.2.14",
|
|
87
87
|
"@types/react-dom": "^19.2.3",
|
|
88
|
-
"jsdom": "^29.1.
|
|
88
|
+
"jsdom": "^29.1.1",
|
|
89
89
|
"react": "^19.2.5",
|
|
90
90
|
"react-dom": "^19.2.5",
|
|
91
91
|
"vitest": "^4.1.5",
|
|
92
|
-
"@assistant-ui/x-buildutils": "0.0.
|
|
92
|
+
"@assistant-ui/x-buildutils": "0.0.7"
|
|
93
93
|
},
|
|
94
94
|
"publishConfig": {
|
|
95
95
|
"access": "public",
|
|
@@ -146,7 +146,6 @@ const MessageClient = resource(
|
|
|
146
146
|
branchNumber: 1,
|
|
147
147
|
branchCount: 1,
|
|
148
148
|
speech: undefined,
|
|
149
|
-
submittedFeedback: undefined,
|
|
150
149
|
parts: partClients.state,
|
|
151
150
|
isCopied,
|
|
152
151
|
isHovering,
|
|
@@ -589,7 +588,6 @@ export const ExternalThread = resource(
|
|
|
589
588
|
onStartRun?.();
|
|
590
589
|
},
|
|
591
590
|
resumeRun: () => {},
|
|
592
|
-
unstable_resumeRun: () => {},
|
|
593
591
|
cancelRun: handleCancelRun,
|
|
594
592
|
getModelContext: () => ({ tools: {}, config: {} }),
|
|
595
593
|
export: () => ({ messages: [] }),
|
|
@@ -142,6 +142,8 @@ export const InMemoryThreadList = resource(
|
|
|
142
142
|
mainThreadId,
|
|
143
143
|
newThreadId: null,
|
|
144
144
|
isLoading: false,
|
|
145
|
+
isLoadingMore: false,
|
|
146
|
+
hasMore: false,
|
|
145
147
|
threadIds: regularThreads.map((t) => t.id),
|
|
146
148
|
archivedThreadIds: archivedThreads.map((t) => t.id),
|
|
147
149
|
threadItems: threadListItems.state,
|
|
@@ -155,6 +157,7 @@ export const InMemoryThreadList = resource(
|
|
|
155
157
|
switchToNewThread: handleSwitchToNewThread,
|
|
156
158
|
getLoadThreadsPromise: () => RESOLVED_PROMISE,
|
|
157
159
|
reload: () => RESOLVED_PROMISE,
|
|
160
|
+
loadMore: () => RESOLVED_PROMISE,
|
|
158
161
|
item: (selector) => {
|
|
159
162
|
if (selector === "main") {
|
|
160
163
|
const index = threads.findIndex((t) => t.id === mainThreadId);
|
|
@@ -47,6 +47,8 @@ export const SingleThreadList = resource(
|
|
|
47
47
|
mainThreadId: THREAD_ID,
|
|
48
48
|
newThreadId: null,
|
|
49
49
|
isLoading: false,
|
|
50
|
+
isLoadingMore: false,
|
|
51
|
+
hasMore: false,
|
|
50
52
|
threadIds: [THREAD_ID],
|
|
51
53
|
archivedThreadIds: [],
|
|
52
54
|
threadItems: [itemClient.state],
|
|
@@ -65,6 +67,7 @@ export const SingleThreadList = resource(
|
|
|
65
67
|
},
|
|
66
68
|
getLoadThreadsPromise: () => RESOLVED_PROMISE,
|
|
67
69
|
reload: () => RESOLVED_PROMISE,
|
|
70
|
+
loadMore: () => RESOLVED_PROMISE,
|
|
68
71
|
item: (selector) => {
|
|
69
72
|
if (
|
|
70
73
|
selector !== "main" &&
|
|
@@ -19,6 +19,8 @@ export type ThreadViewportProviderProps = PropsWithChildren<{
|
|
|
19
19
|
|
|
20
20
|
const useThreadViewportStoreValue = (options: ThreadViewportStoreOptions) => {
|
|
21
21
|
const outerViewport = useThreadViewportStore({ optional: true });
|
|
22
|
+
// Viewport options are initial configuration. Keeping them non-reactive avoids
|
|
23
|
+
// fanout through every message in long threads when anchoring config changes.
|
|
22
24
|
const [store] = useState(() => makeThreadViewportStore(options));
|
|
23
25
|
|
|
24
26
|
// Forward scrollToBottom from outer viewport to inner viewport
|
|
@@ -37,18 +39,6 @@ const useThreadViewportStoreValue = (options: ThreadViewportStoreOptions) => {
|
|
|
37
39
|
});
|
|
38
40
|
}, [store, outerViewport]);
|
|
39
41
|
|
|
40
|
-
// Sync options to store when they change
|
|
41
|
-
useEffect(() => {
|
|
42
|
-
const nextState = {
|
|
43
|
-
turnAnchor: options.turnAnchor ?? "bottom",
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const currentState = store.getState();
|
|
47
|
-
if (currentState.turnAnchor !== nextState.turnAnchor) {
|
|
48
|
-
writableStore(store).setState(nextState);
|
|
49
|
-
}
|
|
50
|
-
}, [store, options.turnAnchor]);
|
|
51
|
-
|
|
52
42
|
return store;
|
|
53
43
|
};
|
|
54
44
|
|