UNPKG

trellis

Version:

Agentic State Engine — event-sourced causal graph with branching, decision traces, and realtime sync for AI-native applications

49 lines (47 loc) 1.05 kB
// src/react/realtime.ts import { useEffect, useState, useSyncExternalStore } from "react"; function useSignal(signal) { return useSyncExternalStore( (onStoreChange) => signal.subscribe(() => onStoreChange()), () => signal.peek(), () => signal.peek() ); } function useRoom(create, deps = []) { const [room, setRoom] = useState(null); const [presence, setPresence] = useState([]); useEffect(() => { const r = create(); setRoom(r); const unsub = r.presenceSignal.subscribe(setPresence); return () => { unsub(); r.leave(); setRoom(null); setPresence([]); }; }, deps); return { room, presence, others: presence.filter((p) => !p.self) }; } function usePresence(room) { const [presence, setPresence] = useState( () => room?.getPresence() ?? [] ); useEffect(() => { if (!room) { setPresence([]); return; } return room.presenceSignal.subscribe(setPresence); }, [room]); return presence; } export { useSignal, useRoom, usePresence };