88 * TransportProvider,
99 * useClientTransport,
1010 * useView,
11- * useSend,
1211 * useActiveTurns,
1312 * } = createTransportHooks<UIMessageChunk, UIMessage>();
1413 *
1716 * <Chat />
1817 * </TransportProvider>
1918 *
20- * // In Chat — no type params needed:
21- * const transport = useClientTransport('ai:demo');
22- * const { nodes } = useView(transport, { limit: 30 });
23- * const send = useSend(transport);
19+ * // In Chat — no type params needed, transport is implicit from nearest provider:
20+ * const { nodes } = useView({ limit: 30 });
21+ * const turns = useActiveTurns();
2422 */
2523
2624import type * as Ably from 'ably' ;
2725import type { ComponentType } from 'react' ;
2826
29- import type { ActiveTurn , ClientTransport , SendOptions } from '../core/transport/types.js' ;
27+ import type { ClientTransport , View } from '../core/transport/types.js' ;
3028import type { TransportProviderProps } from './contexts/transport-provider.js' ;
3129import { TransportProvider as _TransportProvider } from './contexts/transport-provider.js' ;
3230import { useAblyMessages as _useAblyMessages } from './use-ably-messages.js' ;
3331import { useActiveTurns as _useActiveTurns } from './use-active-turns.js' ;
3432import { useClientTransport as _useClientTransport } from './use-client-transport.js' ;
35- import { useEdit as _useEdit } from './use-edit.js' ;
36- import { useRegenerate as _useRegenerate } from './use-regenerate.js' ;
37- import { useSend as _useSend } from './use-send.js' ;
33+ import { useCreateView as _useCreateView } from './use-create-view.js' ;
3834import type { TreeHandle } from './use-tree.js' ;
3935import { useTree as _useTree } from './use-tree.js' ;
40- import type { ViewHandle , ViewOptions } from './use-view.js' ;
36+ import type { ViewHandle } from './use-view.js' ;
4137import { useView as _useView } from './use-view.js' ;
4238
4339/**
@@ -58,53 +54,52 @@ export interface TransportHooks<TEvent, TMessage> {
5854 */
5955 useClientTransport : ( channelName : string ) => ClientTransport < TEvent , TMessage > ;
6056 /**
61- * Subscribe to the transport's view and return the visible node list with pagination.
62- * @param transport - The transport to read from.
63- * @param options - When provided, auto-loads the first page on mount.
57+ * Subscribe to the nearest transport's view and return the visible node list with pagination.
58+ * Pass ` transport` to use a transport's default view, `view` to subscribe to a specific view
59+ * directly. Pass `limit` to auto-load on mount.
6460 */
65- useView : (
66- transport : ClientTransport < TEvent , TMessage > | null | undefined ,
67- options ?: ViewOptions | null ,
68- ) => ViewHandle < TMessage > ;
69- /**
70- * Return a stable `send` callback.
71- * The returned function sends messages and returns an {@link ActiveTurn} handle.
72- * @param transport - The transport to send through.
73- */
74- useSend : (
75- transport : ClientTransport < TEvent , TMessage > ,
76- ) => ( messages : TMessage [ ] , options ?: SendOptions ) => Promise < ActiveTurn < TEvent > > ;
61+ useView : ( props ?: {
62+ /** Client transport whose default view to subscribe to; defaults to the nearest {@link TransportProvider}. */
63+ transport ?: ClientTransport < TEvent , TMessage > | null ;
64+ /** A specific {@link View} to subscribe to directly. Takes priority over `transport`. */
65+ view ?: View < TEvent , TMessage > | null ;
66+ /** When provided, auto-loads the first page on mount. */
67+ limit ?: number ;
68+ } ) => ViewHandle < TEvent , TMessage > ;
7769 /**
7870 * Track active turns across all clients on the channel.
79- * @param transport - The transport to observe .
71+ * Pass ` transport` to override; defaults to the nearest { @link TransportProvider} .
8072 */
81- useActiveTurns : ( transport : ClientTransport < TEvent , TMessage > | null | undefined ) => Map < string , Set < string > > ;
73+ useActiveTurns : ( props ?: {
74+ /** Override transport; defaults to the nearest {@link TransportProvider}. */
75+ transport ?: ClientTransport < TEvent , TMessage > | null ;
76+ } ) => Map < string , Set < string > > ;
8277 /**
8378 * Navigate conversation branches in the transport tree.
84- * @param transport - The transport to read from.
85- */
86- useTree : ( transport : ClientTransport < TEvent , TMessage > ) => TreeHandle < TMessage > ;
87- /**
88- * Return a stable `regenerate` callback.
89- * The returned function regenerates the given message and returns an {@link ActiveTurn} handle.
90- * @param transport - The transport to send through.
79+ * Pass `transport` to override; defaults to the nearest {@link TransportProvider}.
9180 */
92- useRegenerate : (
93- transport : ClientTransport < TEvent , TMessage > ,
94- ) => ( messageId : string , options ?: SendOptions ) => Promise < ActiveTurn < TEvent > > ;
81+ useTree : ( props ?: {
82+ /** Override transport; defaults to the nearest {@link TransportProvider}. */
83+ transport ?: ClientTransport < TEvent , TMessage > ;
84+ } ) => TreeHandle < TMessage > ;
9585 /**
96- * Return a stable `edit` callback.
97- * The returned function edits the given message and returns an {@link ActiveTurn} handle.
98- * @param transport - The transport to send through.
86+ * Subscribe to raw Ably messages on the transport channel.
87+ * Pass `transport` to override; defaults to the nearest {@link TransportProvider}.
9988 */
100- useEdit : (
101- transport : ClientTransport < TEvent , TMessage > ,
102- ) => ( messageId : string , newMessages : TMessage | TMessage [ ] , options ?: SendOptions ) => Promise < ActiveTurn < TEvent > > ;
89+ useAblyMessages : ( props ?: {
90+ /** Override transport; defaults to the nearest {@link TransportProvider}. */
91+ transport ?: ClientTransport < TEvent , TMessage > ;
92+ } ) => Ably . InboundMessage [ ] ;
10393 /**
104- * Subscribe to raw Ably messages on the transport channel .
105- * @param transport - The transport to observe .
94+ * Create an independent view over the same tree .
95+ * Pass ` transport` to override; defaults to the nearest { @link TransportProvider} .
10696 */
107- useAblyMessages : ( transport : ClientTransport < TEvent , TMessage > ) => Ably . InboundMessage [ ] ;
97+ useCreateView : ( props ?: {
98+ /** Override transport; defaults to the nearest {@link TransportProvider}. */
99+ transport ?: ClientTransport < TEvent , TMessage > | null ;
100+ /** When provided, auto-loads the first page on mount. */
101+ limit ?: number ;
102+ } ) => ViewHandle < TEvent , TMessage > ;
108103}
109104
110105/**
@@ -119,11 +114,9 @@ export const createTransportHooks = <TEvent, TMessage>(): TransportHooks<TEvent,
119114 // CAST: TransportProvider is generic; factory narrows it to TEvent/TMessage.
120115 TransportProvider : _TransportProvider as ComponentType < TransportProviderProps < TEvent , TMessage > > ,
121116 useClientTransport : ( channelName : string ) => _useClientTransport < TEvent , TMessage > ( channelName ) ,
122- useView : ( transport , options ) => _useView ( transport , options ) ,
123- useSend : ( transport ) => _useSend ( transport ) ,
124- useActiveTurns : ( transport ) => _useActiveTurns ( transport ) ,
125- useTree : ( transport ) => _useTree ( transport ) ,
126- useRegenerate : ( transport ) => _useRegenerate ( transport ) ,
127- useEdit : ( transport ) => _useEdit ( transport ) ,
128- useAblyMessages : ( transport ) => _useAblyMessages ( transport ) ,
117+ useView : ( props ) => _useView < TEvent , TMessage > ( props ?? { } ) ,
118+ useActiveTurns : ( props ) => _useActiveTurns < TEvent , TMessage > ( props ?? { } ) ,
119+ useTree : ( props ) => _useTree < TEvent , TMessage > ( props ?? { } ) ,
120+ useAblyMessages : ( props ) => _useAblyMessages < TEvent , TMessage > ( props ?? { } ) ,
121+ useCreateView : ( props ) => _useCreateView < TEvent , TMessage > ( props ?? { } ) ,
129122} ) ;
0 commit comments