UI Embed Skill
Instructions
- •
Build component
- •Create React chat panel (
ChatbotPanel.tsx) with:- •Message list
- •Input field
- •Mode toggle (RAG vs Selected Text)
- •Source list display
- •Handle streaming responses (EventSource/fetch reader)
- •Include loading and error UI states
- •Create React chat panel (
- •
API client
- •Create fetch helpers for
/queryand/query/selected - •Include page metadata (module/week/title) for logging
- •Debounce/trim inputs; enforce max length
- •Create fetch helpers for
- •
Integration
- •Add to
src/theme/Layoutor dedicatedChatpage - •Optionally show floating button
- •Provide MDX shortcode to drop chat in specific chapters
- •Add to
- •
UX and accessibility
- •Basic console logging for failures
- •Friendly fallback messages
- •Focus management, keyboard submit
- •Readable contrast
Examples
tsx
// ChatbotPanel.tsx
import React, { useState } from 'react';
export function ChatbotPanel({ apiUrl }: { apiUrl: string }) {
const [messages, setMessages] = useState([]);
const [input, setInput] = useState('');
const [mode, setMode] = useState<'rag' | 'selected'>('rag');
// ... implementation
}
mdx
{/* In any MDX page */}
import { ChatbotPanel } from '@site/src/components/ChatbotPanel';
<ChatbotPanel apiUrl={process.env.API_URL} />
Definition of Done
- •Widget renders in Docusaurus dev build; can query backend
- •Selected-text path sends provided text and returns grounded answer
- •Error/loading states visible; minimal styling but responsive
- •Integration steps documented for future pages