import { useState, useEffect, useCallback } from 'react' import { MizanProvider, useMizan, useMizanStatus } from '@rythazhur/mizan' // ─── System Info ──────────────────────────────────────────────────────────── function SystemInfo() { const { call } = useMizan() const [info, setInfo] = useState | null>(null) useEffect(() => { call('system_info').then(setInfo).catch(() => {}) }, [call]) if (!info) return
Loading system info...
return (

System

{Object.entries(info).map(([k, v]) => ( ))}
{k} {String(v)}
) } // ─── Connection Status ────────────────────────────────────────────────────── function StatusBar() { const status = useMizanStatus() return (
{status}
) } // ─── Notes ────────────────────────────────────────────────────────────────── type Note = { id: number; title: string; content: string; pinned: boolean; updated_at: string } function Notes() { const { call } = useMizan() const [notes, setNotes] = useState([]) const [selected, setSelected] = useState(null) const [title, setTitle] = useState('') const [content, setContent] = useState('') const refresh = useCallback(() => { call<{ notes: Note[] }>('list_notes').then(d => setNotes(d.notes)).catch(() => {}) }, [call]) useEffect(() => { refresh() }, [refresh]) const create = async () => { if (!title.trim()) return await call('create_note', { title, content }) setTitle('') setContent('') refresh() } const save = async () => { if (!selected) return await call('update_note', { id: selected.id, title, content }) setSelected(null) setTitle('') setContent('') refresh() } const remove = async (id: number) => { await call('delete_note', { id }) if (selected?.id === id) { setSelected(null); setTitle(''); setContent('') } refresh() } const select = (n: Note) => { setSelected(n) setTitle(n.title) setContent(n.content) } return (

Notes ({notes.length})

{notes.map(n => (
select(n)} style={{ ...styles.noteItem, borderLeft: selected?.id === n.id ? '3px solid #6cf' : '3px solid transparent', }} > {n.pinned ? '\u{1f4cc} ' : ''}{n.title}
))} {notes.length === 0 &&
No notes yet
}
setTitle(e.target.value)} placeholder="Title" style={styles.input} />