Component Library
Reusable React components for IfAI.
Layout Components
Header
Application header with navigation.
typescript
import { Header } from '@/components/layout/Header'
<Header
title="My Project"
onBack={() => history.back()}
/>Props:
title(string): Page titleonBack(function): Back button handler
Sidebar
Collapsible sidebar component.
typescript
import { Sidebar } from '@/components/layout/Sidebar'
<Sidebar
collapsed={false}
onToggle={() => setCollapsed(!collapsed)}
>
<Sidebar.Item icon="folder">Projects</Sidebar.Item>
<Sidebar.Item icon="settings">Settings</Sidebar.Item>
</Sidebar>Props:
collapsed(boolean): Collapse stateonToggle(function): Toggle handlerchildren(ReactNode): Sidebar items
Editor Components
MonacoEditor
Monaco Editor wrapper.
typescript
import { MonacoEditor } from '@/components/editor/MonacoEditor'
<MonacoEditor
value={code}
language="typescript"
onChange={setCode}
theme="vs-dark"
options={{
minimap: { enabled: false },
fontSize: 14
}}
/>Props:
value(string): Editor contentlanguage(string): Programming languageonChange(function): Change handlertheme(string): Editor themeoptions(object): Monaco options
MiniMap
Code minimap component.
typescript
import { MiniMap } from '@/components/editor/MiniMap'
<MiniMap
editor={editorRef}
position="right"
/>Props:
editor(object): Monaco editor instanceposition(string): Position (left/right)
AI Components
ChatPanel
AI chat interface.
typescript
import { ChatPanel } from '@/components/AIChat/ChatPanel'
<ChatPanel
messages={messages}
onSend={(message) => addMessage(message)}
onClear={() => clearMessages()}
/>Props:
messages(Message[]): Chat historyonSend(function): Send message handleronClear(function): Clear chat handler
MessageList
Display chat messages.
typescript
import { MessageList } from '@/components/AIChat/MessageList'
<MessageList
messages={messages}
onRetry={(index) => retryMessage(index)}
/>Props:
messages(Message[]): Messages to displayonRetry(function): Retry message handler
CodeBlock
Display code with syntax highlighting.
typescript
import { CodeBlock } from '@/components/AIChat/CodeBlock'
<CodeBlock
code="function test() { return true; }"
language="typescript"
onInsert={(code) => insertCode(code)}
/>Props:
code(string): Code to displaylanguage(string): Programming languageonInsert(function): Insert code handler
File Components
FileTree
Project file browser.
typescript
import { FileTree } from '@/components/FileTree/FileTree'
<FileTree
root="/path/to/project"
onFileSelect={(file) => openFile(file)}
onFolderToggle={(folder) => toggleFolder(folder)}
/>Props:
root(string): Project root pathonFileSelect(function): File selection handleronFolderToggle(function): Folder toggle handler
TreeNode
Individual tree node.
typescript
import { TreeNode } from '@/components/FileTree/TreeNode'
<TreeNode
name="src"
type="folder"
expanded={true}
children={[...]}
/>Props:
name(string): Node nametype(string): Node type (folder/file)expanded(boolean): Expanded statechildren(ReactNode): Child nodes
Terminal Components
Terminal
Integrated terminal.
typescript
import { Terminal } from '@/components/Terminal/Terminal'
<Terminal
shell="/bin/zsh"
cwd="/path/to/project"
onCommandComplete={(output) => handleOutput(output)}
/>Props:
shell(string): Shell programcwd(string): Working directoryonCommandComplete(function): Command completion handler
Common Components
Button
Styled button component.
typescript
import { Button } from '@/components/common/Button'
<Button
variant="primary"
size="medium"
onClick={handleClick}
>
Click me
</Button>Props:
variant(string): Button style (primary/secondary/ghost)size(string): Button size (small/medium/large)disabled(boolean): Disabled stateonClick(function): Click handlerchildren(ReactNode): Button content
Input
Text input component.
typescript
import { Input } from '@/components/common/Input'
<Input
type="text"
placeholder="Enter text..."
value={text}
onChange={(e) => setText(e.target.value)}
/>Props:
type(string): Input typeplaceholder(string): Placeholder textvalue(string): Input valueonChange(function): Change handlerdisabled(boolean): Disabled state
Modal
Dialog/modal component.
typescript
import { Modal } from '@/components/common/Modal'
<Modal
isOpen={isOpen}
onClose={() => setIsOpen(false)}
title="Dialog Title"
>
<p>Modal content</p>
</Modal>Props:
isOpen(boolean): Open stateonClose(function): Close handlertitle(string): Modal titlechildren(ReactNode): Modal content
Composer Components
Composer
Multi-file editing interface.
typescript
import { Composer } from '@/components/Composer/Composer'
<Composer
changes={proposedChanges}
onApply={(selected) => applyChanges(selected)}
onReject={(selected) => rejectChanges(selected)}
/>Props:
changes(Change[]): Proposed changesonApply(function): Apply selected changesonReject(function): Reject selected changes
DiffView
Show code diff.
typescript
import { DiffView } from '@/components/Composer/DiffView'
<DiffView
original={originalCode}
modified={modifiedCode}
language="typescript"
/>Props:
original(string): Original codemodified(string): Modified codelanguage(string): Programming language
Styling
All components use Tailwind CSS. Theme colors:
typescript
// colors.ts
export const colors = {
primary: '#3b82f6',
secondary: '#6b7280',
success: '#10b981',
warning: '#f59e0b',
error: '#ef4444',
}Next Steps
- Frontend Guide - Using components
- State Management - Component state
- API Reference - Component integration