// PURPOSE: Standalone demo of @crema/knowledge-ui over MockKnowledgeTransport. // Drop into a consuming app's route (e.g. routes/knowledge-demo.tsx) to // exercise every surface with fixtures and no running service. // =========================================================================== import { useEffect, useState } from "react"; import { CollectionForm, CollectionList, MockKnowledgeTransport, type Collection, type CollectionInput, type CollectionPatch, type KnowledgeTransport, } from "../src/index"; const transport: KnowledgeTransport = new MockKnowledgeTransport(); export default function KnowledgeDemo() { const [collections, setCollections] = useState([]); const [pending, setPending] = useState>({}); const [creating, setCreating] = useState(null); const [editing, setEditing] = useState(null); const [busy, setBusy] = useState(false); async function refresh() { const page = await transport.listCollections(); setCollections(page.collections); const queue = await transport.reviewQueue(); const counts: Record = {}; for (const c of queue) counts[c.collection] = (counts[c.collection] ?? 0) + 1; setPending(counts); } useEffect(() => { void refresh(); }, []); async function onCreate(value: CollectionInput | CollectionPatch) { setBusy(true); await transport.createCollection(value as CollectionInput); setBusy(false); setCreating(null); void refresh(); } async function onEdit(value: CollectionInput | CollectionPatch) { if (!editing) return; setBusy(true); await transport.updateCollection(editing.slug, value as CollectionPatch); setBusy(false); setEditing(null); void refresh(); } return (

Knowledge

Your corpuses — browse, organise, and review.

{creating && (

New corpus

setCreating(null)} />
)} {editing && (

Corpus settings

setEditing(null)} />
)} setCreating(owner)} onOpen={(c) => setEditing(c)} />
); }