@archieai/ui 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +879 -75
- package/dist/Search-BGRkl1S5.js +2460 -0
- package/dist/Search-BGRkl1S5.js.map +1 -0
- package/dist/Search-DXvng049.cjs +2 -0
- package/dist/Search-DXvng049.cjs.map +1 -0
- package/dist/components/atoms/Avatar/Avatar.d.ts +19 -0
- package/dist/components/atoms/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/atoms/Avatar/Avatar.styles.d.ts +9 -0
- package/dist/components/atoms/Avatar/Avatar.styles.d.ts.map +1 -0
- package/dist/components/atoms/StatusIndicator/StatusIndicator.d.ts +8 -0
- package/dist/components/atoms/StatusIndicator/StatusIndicator.d.ts.map +1 -0
- package/dist/components/atoms/StatusIndicator/StatusIndicator.styles.d.ts +10 -0
- package/dist/components/atoms/StatusIndicator/StatusIndicator.styles.d.ts.map +1 -0
- package/dist/components/atoms/Typography/Typography.d.ts +4 -3
- package/dist/components/atoms/Typography/Typography.d.ts.map +1 -1
- package/dist/components/atoms/icons/Check.d.ts +1 -0
- package/dist/components/atoms/icons/Check.d.ts.map +1 -1
- package/dist/components/atoms/icons/Search.d.ts +7 -0
- package/dist/components/atoms/icons/Search.d.ts.map +1 -0
- package/dist/components/atoms/icons/Textile.d.ts +7 -0
- package/dist/components/atoms/icons/Textile.d.ts.map +1 -0
- package/dist/components/atoms/icons/TextileIcon.d.ts +7 -0
- package/dist/components/atoms/icons/TextileIcon.d.ts.map +1 -0
- package/dist/components/atoms/icons/X.d.ts +1 -0
- package/dist/components/atoms/icons/X.d.ts.map +1 -1
- package/dist/components/atoms/icons/index.d.ts +3 -1
- package/dist/components/atoms/icons/index.d.ts.map +1 -1
- package/dist/components/atoms/logos/FullLogo.d.ts +8 -0
- package/dist/components/atoms/logos/FullLogo.d.ts.map +1 -0
- package/dist/components/atoms/logos/LogoA.d.ts +8 -0
- package/dist/components/atoms/logos/LogoA.d.ts.map +1 -0
- package/dist/components/atoms/logos/SignatureA.d.ts +11 -0
- package/dist/components/atoms/logos/SignatureA.d.ts.map +1 -0
- package/dist/components/atoms/logos/index.d.ts +7 -0
- package/dist/components/atoms/logos/index.d.ts.map +1 -0
- package/dist/components/molecules/ArtifactCard/ArtifactCard.d.ts +3 -0
- package/dist/components/molecules/ArtifactCard/ArtifactCard.d.ts.map +1 -0
- package/dist/components/molecules/ArtifactCard/ArtifactCard.styles.d.ts +27 -0
- package/dist/components/molecules/ArtifactCard/ArtifactCard.styles.d.ts.map +1 -0
- package/dist/components/molecules/ArtifactCard/ArtifactCard.types.d.ts +23 -0
- package/dist/components/molecules/ArtifactCard/ArtifactCard.types.d.ts.map +1 -0
- package/dist/components/molecules/ArtifactCard/index.d.ts +3 -0
- package/dist/components/molecules/ArtifactCard/index.d.ts.map +1 -0
- package/dist/components/molecules/Button/Button.d.ts +1 -1
- package/dist/components/molecules/Button/Button.d.ts.map +1 -1
- package/dist/components/molecules/Button/Button.styles.d.ts +2 -2
- package/dist/components/molecules/Button/Button.styles.d.ts.map +1 -1
- package/dist/components/molecules/ChatFile/ChatFile.styles.d.ts +4 -4
- package/dist/components/molecules/Dropdown/Dropdown.d.ts +41 -0
- package/dist/components/molecules/Dropdown/Dropdown.d.ts.map +1 -0
- package/dist/components/molecules/Dropdown/Dropdown.styles.d.ts +11 -0
- package/dist/components/molecules/Dropdown/Dropdown.styles.d.ts.map +1 -0
- package/dist/components/molecules/Input/Input.styles.d.ts +5 -5
- package/dist/components/molecules/MessageBubble/MessageBubble.d.ts +26 -0
- package/dist/components/molecules/MessageBubble/MessageBubble.d.ts.map +1 -0
- package/dist/components/molecules/MessageBubble/MessageBubble.styles.d.ts +32 -0
- package/dist/components/molecules/MessageBubble/MessageBubble.styles.d.ts.map +1 -0
- package/dist/components/molecules/ProgressBar/ProgressBar.d.ts +37 -0
- package/dist/components/molecules/ProgressBar/ProgressBar.d.ts.map +1 -0
- package/dist/components/molecules/ProgressBar/ProgressBar.styles.d.ts +10 -0
- package/dist/components/molecules/ProgressBar/ProgressBar.styles.d.ts.map +1 -0
- package/dist/components/molecules/RangeInput/RangeInput.d.ts +7 -0
- package/dist/components/molecules/RangeInput/RangeInput.d.ts.map +1 -0
- package/dist/components/molecules/RangeInput/RangeInput.styles.d.ts +5 -0
- package/dist/components/molecules/RangeInput/RangeInput.styles.d.ts.map +1 -0
- package/dist/components/molecules/SidebarItem/SidebarItem.d.ts +17 -0
- package/dist/components/molecules/SidebarItem/SidebarItem.d.ts.map +1 -0
- package/dist/components/molecules/SidebarItem/SidebarItem.styles.d.ts +13 -0
- package/dist/components/molecules/SidebarItem/SidebarItem.styles.d.ts.map +1 -0
- package/dist/components/molecules/StatusMessage/StatusMessage.d.ts +7 -0
- package/dist/components/molecules/StatusMessage/StatusMessage.d.ts.map +1 -0
- package/dist/components/molecules/StatusMessage/StatusMessage.styles.d.ts +8 -0
- package/dist/components/molecules/StatusMessage/StatusMessage.styles.d.ts.map +1 -0
- package/dist/components/molecules/Tag/Tag.d.ts +1 -0
- package/dist/components/molecules/Tag/Tag.d.ts.map +1 -1
- package/dist/components/molecules/TextArea/TextArea.d.ts +8 -0
- package/dist/components/molecules/TextArea/TextArea.d.ts.map +1 -0
- package/dist/components/molecules/TextArea/TextArea.styles.d.ts +9 -0
- package/dist/components/molecules/TextArea/TextArea.styles.d.ts.map +1 -0
- package/dist/components/molecules/Timestamp/Timestamp.d.ts +18 -0
- package/dist/components/molecules/Timestamp/Timestamp.d.ts.map +1 -0
- package/dist/components/molecules/Timestamp/Timestamp.styles.d.ts +8 -0
- package/dist/components/molecules/Timestamp/Timestamp.styles.d.ts.map +1 -0
- package/dist/components/molecules/Toast/Toast.styles.d.ts +3 -3
- package/dist/components/molecules/Toggle/Toggle.d.ts +8 -0
- package/dist/components/molecules/Toggle/Toggle.d.ts.map +1 -0
- package/dist/components/molecules/Toggle/Toggle.styles.d.ts +9 -0
- package/dist/components/molecules/Toggle/Toggle.styles.d.ts.map +1 -0
- package/dist/components/molecules/Tooltip/Tooltip.d.ts +5 -1
- package/dist/components/molecules/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/molecules/Tooltip/Tooltip.styles.d.ts +4 -2
- package/dist/components/molecules/Tooltip/Tooltip.styles.d.ts.map +1 -1
- package/dist/components/organisms/ChatInput/ChatInput.d.ts +38 -5
- package/dist/components/organisms/ChatInput/ChatInput.d.ts.map +1 -1
- package/dist/components/organisms/ChatInput/ChatInput.styles.d.ts +20 -1
- package/dist/components/organisms/ChatInput/ChatInput.styles.d.ts.map +1 -1
- package/dist/components/organisms/ConversationHeader/ConversationHeader.d.ts +27 -0
- package/dist/components/organisms/ConversationHeader/ConversationHeader.d.ts.map +1 -0
- package/dist/components/organisms/ConversationHeader/ConversationHeader.styles.d.ts +7 -0
- package/dist/components/organisms/ConversationHeader/ConversationHeader.styles.d.ts.map +1 -0
- package/dist/components/organisms/Modal/Modal.d.ts +6 -0
- package/dist/components/organisms/Modal/Modal.d.ts.map +1 -0
- package/dist/components/organisms/Modal/Modal.styles.d.ts +14 -0
- package/dist/components/organisms/Modal/Modal.styles.d.ts.map +1 -0
- package/dist/components/organisms/Modal/Modal.types.d.ts +54 -0
- package/dist/components/organisms/Modal/Modal.types.d.ts.map +1 -0
- package/dist/components/organisms/Modal/index.d.ts +3 -0
- package/dist/components/organisms/Modal/index.d.ts.map +1 -0
- package/dist/components/renderers/MarkdownRenderer/MarkdownRenderer.d.ts +22 -0
- package/dist/components/renderers/MarkdownRenderer/MarkdownRenderer.d.ts.map +1 -0
- package/dist/components/renderers/MarkdownRenderer/MarkdownRenderer.styles.d.ts +5 -0
- package/dist/components/renderers/MarkdownRenderer/MarkdownRenderer.styles.d.ts.map +1 -0
- package/dist/hooks/useClickOutside.d.ts +5 -0
- package/dist/hooks/useClickOutside.d.ts.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +296 -301
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +334 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +35 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17142 -1427
- package/dist/index.js.map +1 -1
- package/dist/logos/Full Logo.svg +14 -0
- package/dist/logos/Logo A.svg +4 -0
- package/dist/logos/Signature A.svg +4 -0
- package/dist/ui.css +1 -1
- package/package.json +18 -12
- package/dist/WhiteboardView-BWupryzA.cjs +0 -2
- package/dist/WhiteboardView-BWupryzA.cjs.map +0 -1
- package/dist/WhiteboardView-BceDPBkS.js +0 -2360
- package/dist/WhiteboardView-BceDPBkS.js.map +0 -1
- package/dist/components/organisms/Navbar/Navbar.d.ts +0 -15
- package/dist/components/organisms/Navbar/Navbar.d.ts.map +0 -1
- package/dist/components/organisms/Navbar/Navbar.styles.d.ts +0 -8
- package/dist/components/organisms/Navbar/Navbar.styles.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -3,19 +3,21 @@
|
|
|
3
3
|
A comprehensive React component library built with TypeScript, featuring 287+ custom icons and production-ready components.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@archieai/ui)
|
|
6
|
-
[](https://github.com/
|
|
6
|
+
[](https://github.com/heyarchie-ai/Archie-UI)
|
|
7
7
|
|
|
8
|
-
## Features
|
|
8
|
+
## ✨ Features
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
- 🎨 **287+ Custom Icons** - Beautiful SVG icons with customizable size and color
|
|
11
|
+
- 🧩 **Production-Ready Components** - Button, Input, Checkbox, Toast, Tabs, and more
|
|
12
|
+
- 💬 **Chat Components** - MessageBubble, ChatInput, MarkdownRenderer for AI/chat UIs
|
|
13
|
+
- 🎯 **TypeScript First** - Fully typed components with excellent IntelliSense
|
|
14
|
+
- 🎨 **Modern Design System** - Built with Tailwind CSS v4 and CSS variables
|
|
15
|
+
- ♿ **Accessible** - Built with Radix UI primitives following WCAG guidelines
|
|
16
|
+
- 🎭 **Animated** - Smooth animations powered by Framer Motion
|
|
17
|
+
- 📦 **Tree-Shakeable** - Optimized bundle size with separate entry points
|
|
18
|
+
- 🔧 **Class Variance Authority** - Powerful variant management system
|
|
17
19
|
|
|
18
|
-
## Installation
|
|
20
|
+
## 📦 Installation
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
23
|
npm install @archieai/ui
|
|
@@ -25,163 +27,965 @@ pnpm add @archieai/ui
|
|
|
25
27
|
yarn add @archieai/ui
|
|
26
28
|
```
|
|
27
29
|
|
|
28
|
-
### Peer Dependencies
|
|
29
|
-
|
|
30
|
-
Install the required peer dependencies:
|
|
30
|
+
### Required Peer Dependencies
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
33
|
npm install react react-dom framer-motion sonner @radix-ui/react-tabs @radix-ui/react-tooltip
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Or if using pnpm:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pnpm add react react-dom framer-motion sonner @radix-ui/react-tabs @radix-ui/react-tooltip
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 🚀 Quick Start
|
|
37
43
|
|
|
38
44
|
### 1. Import Styles
|
|
39
45
|
|
|
40
|
-
|
|
46
|
+
Add the component styles to your app's entry point (`main.tsx`, `App.tsx`, or `_app.tsx`):
|
|
41
47
|
|
|
42
48
|
```tsx
|
|
43
|
-
// Import the component styles
|
|
44
49
|
import '@archieai/ui/styles';
|
|
45
50
|
```
|
|
46
51
|
|
|
47
|
-
### 2.
|
|
52
|
+
### 2. Start Using Components
|
|
48
53
|
|
|
49
54
|
```tsx
|
|
50
|
-
import { Button, Input,
|
|
55
|
+
import { Button, Input, MessageBubble, MarkdownRenderer } from '@archieai/ui';
|
|
56
|
+
import { Star, Send } from '@archieai/ui/icons';
|
|
51
57
|
|
|
52
58
|
function App() {
|
|
53
59
|
return (
|
|
54
60
|
<div>
|
|
55
|
-
<Input placeholder="Enter your
|
|
61
|
+
<Input placeholder="Enter your message" />
|
|
56
62
|
|
|
57
|
-
<Button
|
|
58
|
-
|
|
59
|
-
>
|
|
60
|
-
Click Me
|
|
63
|
+
<Button variant="primary" startIcon={<Star size={16} />}>
|
|
64
|
+
Save
|
|
61
65
|
</Button>
|
|
62
66
|
|
|
63
|
-
<
|
|
67
|
+
<MessageBubble variant="assistant">
|
|
68
|
+
<MarkdownRenderer content="Hello! How can I **help** you today?" />
|
|
69
|
+
</MessageBubble>
|
|
64
70
|
</div>
|
|
65
71
|
);
|
|
66
72
|
}
|
|
67
73
|
```
|
|
68
74
|
|
|
69
|
-
## Available Components
|
|
75
|
+
## 📚 Available Components
|
|
76
|
+
|
|
77
|
+
### Atoms
|
|
78
|
+
|
|
79
|
+
#### Avatar
|
|
70
80
|
|
|
71
|
-
|
|
81
|
+
User avatar component with text initials or image support.
|
|
72
82
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
```tsx
|
|
84
|
+
import { Avatar } from '@archieai/ui';
|
|
85
|
+
|
|
86
|
+
// Text avatar with initials
|
|
87
|
+
<Avatar type="text" initials="JD" />
|
|
88
|
+
|
|
89
|
+
// Image avatar
|
|
90
|
+
<Avatar type="image" src="/path/to/image.jpg" alt="John Doe" />
|
|
91
|
+
|
|
92
|
+
// Different shapes
|
|
93
|
+
<Avatar type="text" initials="AR" shape="circular" />
|
|
94
|
+
<Avatar type="text" initials="AR" shape="square" />
|
|
95
|
+
|
|
96
|
+
// Different sizes
|
|
97
|
+
<Avatar type="text" initials="AR" size="small" />
|
|
98
|
+
<Avatar type="text" initials="AR" size="big" />
|
|
99
|
+
|
|
100
|
+
// With fallback when image fails to load
|
|
101
|
+
<Avatar
|
|
102
|
+
type="image"
|
|
103
|
+
src="/invalid-image.jpg"
|
|
104
|
+
fallbackInitials="JD"
|
|
105
|
+
/>
|
|
106
|
+
```
|
|
84
107
|
|
|
85
|
-
|
|
108
|
+
**Props:**
|
|
86
109
|
|
|
87
|
-
|
|
110
|
+
- `type`: `'text'` | `'image'`
|
|
111
|
+
- `shape`: `'circular'` | `'square'`
|
|
112
|
+
- `size`: `'small'` | `'big'`
|
|
113
|
+
- `initials`: String for text avatar
|
|
114
|
+
- `src`: Image URL for image avatar
|
|
115
|
+
- `alt`: Alt text for accessibility
|
|
116
|
+
- `fallbackInitials`: Initials to show when image fails
|
|
117
|
+
|
|
118
|
+
#### StatusIndicator
|
|
119
|
+
|
|
120
|
+
Visual status indicator dot with optional animation.
|
|
88
121
|
|
|
89
122
|
```tsx
|
|
90
|
-
|
|
91
|
-
import { Home, Settings, User, Mail, Star } from '@archieai/ui/icons';
|
|
123
|
+
import { StatusIndicator } from '@archieai/ui';
|
|
92
124
|
|
|
93
|
-
|
|
94
|
-
|
|
125
|
+
<StatusIndicator variant="success" />
|
|
126
|
+
<StatusIndicator variant="warning" />
|
|
127
|
+
<StatusIndicator variant="error" />
|
|
128
|
+
<StatusIndicator variant="info" />
|
|
129
|
+
<StatusIndicator variant="neutral" />
|
|
95
130
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
131
|
+
// With animation
|
|
132
|
+
<StatusIndicator variant="success" animated />
|
|
133
|
+
|
|
134
|
+
// Different sizes
|
|
135
|
+
<StatusIndicator variant="info" size="small" />
|
|
136
|
+
<StatusIndicator variant="info" size="medium" />
|
|
137
|
+
<StatusIndicator variant="info" size="large" />
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Props:**
|
|
141
|
+
|
|
142
|
+
- `variant`: `'success'` | `'warning'` | `'error'` | `'info'` | `'neutral'`
|
|
143
|
+
- `size`: `'small'` | `'medium'` | `'large'`
|
|
144
|
+
- `animated`: Boolean for pulsing animation
|
|
145
|
+
|
|
146
|
+
#### Typography
|
|
147
|
+
|
|
148
|
+
Text components with semantic HTML.
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
import { Typography } from '@archieai/ui';
|
|
152
|
+
|
|
153
|
+
<Typography variant="h1">Heading 1</Typography>
|
|
154
|
+
<Typography variant="h2">Heading 2</Typography>
|
|
155
|
+
<Typography variant="body1">Body text</Typography>
|
|
156
|
+
<Typography variant="caption">Caption text</Typography>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
#### Logos
|
|
160
|
+
|
|
161
|
+
Archie brand logos with customizable colors and animations.
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
import { LogoA, SignatureA, FullLogo } from '@archieai/ui';
|
|
165
|
+
|
|
166
|
+
// Logo A (icon mark)
|
|
167
|
+
<LogoA size={32} colorVariant="lightTeal" />
|
|
168
|
+
<LogoA size={32} colorVariant="darkTeal" />
|
|
169
|
+
|
|
170
|
+
// Animated Signature
|
|
171
|
+
<SignatureA size={40} colorVariant="orange" animated animationDuration={2} />
|
|
172
|
+
|
|
173
|
+
// Full Logo
|
|
174
|
+
<FullLogo width={120} />
|
|
99
175
|
```
|
|
100
176
|
|
|
101
|
-
|
|
177
|
+
#### Icons (287+)
|
|
102
178
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
179
|
+
All icons are available as React components. Import from the dedicated `/icons` entry point for better tree-shaking:
|
|
180
|
+
|
|
181
|
+
```tsx
|
|
182
|
+
// Recommended: Import from /icons entry point
|
|
183
|
+
import {
|
|
184
|
+
Home, Settings, User, Mail, Star, Check, X,
|
|
185
|
+
Plus, Minus, Search, Filter, Edit, Trash,
|
|
186
|
+
ArrowLeft, ArrowRight, ChevronDown, ChevronUp,
|
|
187
|
+
Heart, Bell, Calendar, Clock, Download, Upload,
|
|
188
|
+
Clipboard, ThumbsUp, ThumbsDown, FileText
|
|
189
|
+
} from '@archieai/ui/icons';
|
|
190
|
+
|
|
191
|
+
// All icons support size and color props
|
|
192
|
+
<Home size={24} color="#8C92AF" />
|
|
193
|
+
<Settings size={20} color="var(--color-blue-800)" />
|
|
194
|
+
<Star size={16} />
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Icon Props:**
|
|
198
|
+
|
|
199
|
+
- `size`: Number (default: 24)
|
|
200
|
+
- `color`: String (CSS color value)
|
|
201
|
+
- `className`: String for additional styling
|
|
202
|
+
|
|
203
|
+
---
|
|
106
204
|
|
|
107
|
-
|
|
205
|
+
### Molecules
|
|
108
206
|
|
|
109
|
-
|
|
207
|
+
#### Button
|
|
208
|
+
|
|
209
|
+
Flexible button component with multiple variants, sizes, and icon support.
|
|
110
210
|
|
|
111
211
|
```tsx
|
|
112
212
|
import { Button } from '@archieai/ui';
|
|
113
213
|
import { Star } from '@archieai/ui/icons';
|
|
114
214
|
|
|
115
|
-
|
|
215
|
+
// Basic button
|
|
216
|
+
<Button onClick={handleClick}>Click me</Button>
|
|
217
|
+
|
|
218
|
+
// With variants
|
|
219
|
+
<Button variant="primary" tone="brand" size="large">Primary</Button>
|
|
220
|
+
<Button variant="secondary" tone="neutral">Secondary</Button>
|
|
221
|
+
<Button variant="tertiary">Tertiary</Button>
|
|
222
|
+
|
|
223
|
+
// With icons
|
|
224
|
+
<Button startIcon={<Star size={16} />}>Favorite</Button>
|
|
225
|
+
<Button endIcon={<Star size={16} />}>Continue</Button>
|
|
226
|
+
|
|
227
|
+
// Disabled state
|
|
228
|
+
<Button disabled>Disabled</Button>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
**Props:**
|
|
232
|
+
|
|
233
|
+
- `variant`: `'primary'` | `'secondary'` | `'tertiary'`
|
|
234
|
+
- `tone`: `'brand'` | `'neutral'`
|
|
235
|
+
- `size`: `'small'` | `'medium'` | `'large'`
|
|
236
|
+
- `startIcon`: React node for leading icon
|
|
237
|
+
- `endIcon`: React node for trailing icon
|
|
238
|
+
- All standard button HTML attributes
|
|
239
|
+
|
|
240
|
+
#### Input
|
|
241
|
+
|
|
242
|
+
Text input component with icon support and validation states.
|
|
243
|
+
|
|
244
|
+
```tsx
|
|
245
|
+
import { Input } from '@archieai/ui';
|
|
246
|
+
import { Search } from '@archieai/ui/icons';
|
|
247
|
+
|
|
248
|
+
<Input placeholder="Search..." />
|
|
249
|
+
<Input type="email" placeholder="Email" />
|
|
250
|
+
<Input
|
|
251
|
+
startIcon={<Search size={16} />}
|
|
252
|
+
placeholder="Search..."
|
|
253
|
+
/>
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
**Props:**
|
|
116
257
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
258
|
+
- `startIcon`: React node for leading icon
|
|
259
|
+
- `endIcon`: React node for trailing icon
|
|
260
|
+
- All standard input HTML attributes
|
|
261
|
+
|
|
262
|
+
#### Checkbox
|
|
263
|
+
|
|
264
|
+
Styled checkbox component with label support.
|
|
265
|
+
|
|
266
|
+
```tsx
|
|
267
|
+
import { Checkbox } from '@archieai/ui';
|
|
268
|
+
|
|
269
|
+
<Checkbox id="terms" label="I agree to the terms" />
|
|
270
|
+
<Checkbox id="newsletter" label="Subscribe to newsletter" defaultChecked />
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Props:**
|
|
274
|
+
|
|
275
|
+
- `label`: String or React node for checkbox label
|
|
276
|
+
- `id`: Required for accessibility
|
|
277
|
+
- All standard checkbox HTML attributes
|
|
278
|
+
|
|
279
|
+
#### MessageBubble
|
|
280
|
+
|
|
281
|
+
Chat message bubble component for user, assistant, and system messages.
|
|
282
|
+
|
|
283
|
+
```tsx
|
|
284
|
+
import { MessageBubble, MarkdownRenderer } from '@archieai/ui';
|
|
285
|
+
|
|
286
|
+
// User message
|
|
287
|
+
<MessageBubble variant="user">
|
|
288
|
+
What is the weather today?
|
|
289
|
+
</MessageBubble>
|
|
290
|
+
|
|
291
|
+
// Assistant message with avatar
|
|
292
|
+
<MessageBubble variant="assistant">
|
|
293
|
+
<MarkdownRenderer content="The weather is **sunny** with a high of 72°F." />
|
|
294
|
+
</MessageBubble>
|
|
295
|
+
|
|
296
|
+
// Initial prompt (centered)
|
|
297
|
+
<MessageBubble variant="user" isInitialPrompt>
|
|
298
|
+
Help me write a poem about nature
|
|
299
|
+
</MessageBubble>
|
|
300
|
+
|
|
301
|
+
// System message
|
|
302
|
+
<MessageBubble variant="system">
|
|
303
|
+
Connected to the assistant
|
|
304
|
+
</MessageBubble>
|
|
305
|
+
|
|
306
|
+
// Loading state
|
|
307
|
+
<MessageBubble variant="loader" />
|
|
308
|
+
|
|
309
|
+
// With action handlers
|
|
310
|
+
<MessageBubble
|
|
311
|
+
variant="assistant"
|
|
312
|
+
onCopy={() => console.log('Copied')}
|
|
313
|
+
onHelpful={() => console.log('Helpful')}
|
|
314
|
+
onUnhelpful={() => console.log('Not helpful')}
|
|
315
|
+
>
|
|
316
|
+
Here's my response...
|
|
317
|
+
</MessageBubble>
|
|
318
|
+
|
|
319
|
+
// Sticky mode (no action controls, adds shadow)
|
|
320
|
+
<MessageBubble variant="assistant" isSticky>
|
|
321
|
+
Pinned message
|
|
322
|
+
</MessageBubble>
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Props:**
|
|
326
|
+
|
|
327
|
+
- `variant`: `'user'` | `'assistant'` | `'system'` | `'loader'`
|
|
328
|
+
- `heading`: Optional heading text (assistant only)
|
|
329
|
+
- `isLoading`: Shows loading animation
|
|
330
|
+
- `showAvatar`: Show Archie logo (defaults to true for assistant)
|
|
331
|
+
- `showTimestamp`: Show timestamp (default: false)
|
|
332
|
+
- `timestamp`: Date or string for timestamp
|
|
333
|
+
- `isSticky`: Sticky mode with shadow
|
|
334
|
+
- `isInitialPrompt`: Center align (user variant only)
|
|
335
|
+
- `alignment`: `'left'` | `'center'` | `'right'`
|
|
336
|
+
- `onCopy`, `onEdit`, `onHelpful`, `onUnhelpful`: Action callbacks
|
|
337
|
+
|
|
338
|
+
#### ChatFile
|
|
339
|
+
|
|
340
|
+
File attachment component with upload progress states.
|
|
341
|
+
|
|
342
|
+
```tsx
|
|
343
|
+
import { ChatFile, FileStatus } from '@archieai/ui';
|
|
344
|
+
|
|
345
|
+
// Completed file
|
|
346
|
+
<ChatFile filename="document.pdf" status={FileStatus.Done} />
|
|
347
|
+
|
|
348
|
+
// Uploading with progress
|
|
349
|
+
<ChatFile
|
|
350
|
+
filename="report.xlsx"
|
|
351
|
+
status={FileStatus.Uploading}
|
|
352
|
+
progress={45}
|
|
353
|
+
/>
|
|
354
|
+
|
|
355
|
+
// Processing
|
|
356
|
+
<ChatFile filename="image.png" status={FileStatus.Processing} progress={80} />
|
|
357
|
+
|
|
358
|
+
// Error state
|
|
359
|
+
<ChatFile filename="failed.doc" status={FileStatus.Error} />
|
|
360
|
+
|
|
361
|
+
// With delete handler
|
|
362
|
+
<ChatFile
|
|
363
|
+
filename="attachment.pdf"
|
|
364
|
+
status={FileStatus.Done}
|
|
365
|
+
onDelete={() => console.log('Delete file')}
|
|
366
|
+
/>
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
**Props:**
|
|
370
|
+
|
|
371
|
+
- `filename`: File name to display
|
|
372
|
+
- `status`: `FileStatus.Uploading` | `FileStatus.Processing` | `FileStatus.Done` | `FileStatus.Error`
|
|
373
|
+
- `progress`: Number (0-100) for upload progress
|
|
374
|
+
- `onDelete`: Callback when delete is clicked
|
|
375
|
+
|
|
376
|
+
#### Dropdown
|
|
377
|
+
|
|
378
|
+
Dropdown menu component with animation support.
|
|
379
|
+
|
|
380
|
+
```tsx
|
|
381
|
+
import {
|
|
382
|
+
Dropdown,
|
|
383
|
+
DropdownTrigger,
|
|
384
|
+
DropdownContent,
|
|
385
|
+
DropdownItem,
|
|
386
|
+
} from '@archieai/ui';
|
|
387
|
+
import { Button } from '@archieai/ui';
|
|
388
|
+
|
|
389
|
+
<Dropdown>
|
|
390
|
+
<DropdownTrigger>
|
|
391
|
+
<Button>Open Menu</Button>
|
|
392
|
+
</DropdownTrigger>
|
|
393
|
+
<DropdownContent align="start">
|
|
394
|
+
<DropdownItem onClick={() => console.log('Edit')}>Edit</DropdownItem>
|
|
395
|
+
<DropdownItem onClick={() => console.log('Duplicate')}>
|
|
396
|
+
Duplicate
|
|
397
|
+
</DropdownItem>
|
|
398
|
+
<DropdownItem variant="destructive" onClick={() => console.log('Delete')}>
|
|
399
|
+
Delete
|
|
400
|
+
</DropdownItem>
|
|
401
|
+
</DropdownContent>
|
|
402
|
+
</Dropdown>;
|
|
403
|
+
|
|
404
|
+
// Controlled dropdown
|
|
405
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
406
|
+
<Dropdown open={isOpen} onOpenChange={setIsOpen}>
|
|
407
|
+
...
|
|
408
|
+
</Dropdown>;
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**Props:**
|
|
412
|
+
|
|
413
|
+
- `Dropdown`: `defaultOpen`, `open`, `onOpenChange`
|
|
414
|
+
- `DropdownContent`: `align` (`'start'` | `'end'` | `'center'`), `attached`
|
|
415
|
+
- `DropdownItem`: `active`, `variant` (`'default'` | `'destructive'`), `closeOnSelect`
|
|
416
|
+
|
|
417
|
+
#### ProgressBar
|
|
418
|
+
|
|
419
|
+
Progress indicator component with labels and variants.
|
|
420
|
+
|
|
421
|
+
```tsx
|
|
422
|
+
import { ProgressBar } from '@archieai/ui';
|
|
423
|
+
|
|
424
|
+
// Basic progress
|
|
425
|
+
<ProgressBar value={60} />
|
|
426
|
+
|
|
427
|
+
// With label and value display
|
|
428
|
+
<ProgressBar value={75} max={100} label="Uploading..." showValueLabel />
|
|
429
|
+
|
|
430
|
+
// Different variants
|
|
431
|
+
<ProgressBar value={100} variant="success" />
|
|
432
|
+
<ProgressBar value={30} variant="warning" />
|
|
433
|
+
<ProgressBar value={15} variant="error" />
|
|
434
|
+
|
|
435
|
+
// Different sizes
|
|
436
|
+
<ProgressBar value={50} size="small" />
|
|
437
|
+
<ProgressBar value={50} size="medium" />
|
|
438
|
+
<ProgressBar value={50} size="large" />
|
|
439
|
+
|
|
440
|
+
// Custom value formatter
|
|
441
|
+
<ProgressBar
|
|
442
|
+
value={750}
|
|
443
|
+
max={1000}
|
|
444
|
+
showValueLabel
|
|
445
|
+
valueFormatter={(value, max) => `${value}/${max} items`}
|
|
446
|
+
/>
|
|
120
447
|
```
|
|
121
448
|
|
|
122
|
-
|
|
449
|
+
**Props:**
|
|
450
|
+
|
|
451
|
+
- `value`: Current progress value
|
|
452
|
+
- `max`: Maximum value (default: 100)
|
|
453
|
+
- `variant`: `'default'` | `'success'` | `'error'` | `'warning'`
|
|
454
|
+
- `size`: `'small'` | `'medium'` | `'large'`
|
|
455
|
+
- `showValueLabel`: Show percentage/value label
|
|
456
|
+
- `label`: Custom label text
|
|
457
|
+
- `valueFormatter`: Custom value formatting function
|
|
458
|
+
|
|
459
|
+
#### StatusMessage
|
|
460
|
+
|
|
461
|
+
Status message component with icon and indicator.
|
|
462
|
+
|
|
463
|
+
```tsx
|
|
464
|
+
import { StatusMessage } from '@archieai/ui';
|
|
465
|
+
|
|
466
|
+
<StatusMessage status="success" message="Operation completed successfully" />
|
|
467
|
+
<StatusMessage status="warning" message="Please review your changes" />
|
|
468
|
+
<StatusMessage status="error" message="An error occurred" />
|
|
469
|
+
<StatusMessage status="info" message="Processing your request" />
|
|
470
|
+
<StatusMessage status="loading" message="Loading data..." />
|
|
471
|
+
<StatusMessage status="neutral" message="No updates available" />
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
**Props:**
|
|
475
|
+
|
|
476
|
+
- `status`: `'success'` | `'warning'` | `'error'` | `'info'` | `'neutral'` | `'loading'`
|
|
477
|
+
- `message`: Message text to display
|
|
478
|
+
|
|
479
|
+
#### SidebarItem
|
|
480
|
+
|
|
481
|
+
Navigation sidebar item component.
|
|
482
|
+
|
|
483
|
+
```tsx
|
|
484
|
+
import { SidebarItem } from '@archieai/ui';
|
|
485
|
+
import { Home, Settings, User } from '@archieai/ui/icons';
|
|
486
|
+
|
|
487
|
+
// Basic item
|
|
488
|
+
<SidebarItem icon={<Home size={20} />} label="Home" onClick={() => navigate('/')} />
|
|
489
|
+
|
|
490
|
+
// Active state
|
|
491
|
+
<SidebarItem icon={<Settings size={20} />} label="Settings" isActive />
|
|
492
|
+
|
|
493
|
+
// Brand variant
|
|
494
|
+
<SidebarItem icon={<User size={20} />} label="Profile" variant="brand" />
|
|
495
|
+
|
|
496
|
+
// Collapsed mode (icon only)
|
|
497
|
+
<SidebarItem icon={<Home size={20} />} label="Home" isCollapsed />
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
**Props:**
|
|
501
|
+
|
|
502
|
+
- `icon`: React node for the icon
|
|
503
|
+
- `label`: Label text
|
|
504
|
+
- `isCollapsed`: Collapsed mode (icon only)
|
|
505
|
+
- `isActive`: Active/selected state
|
|
506
|
+
- `variant`: `'default'` | `'brand'`
|
|
507
|
+
- `onClick`: Click handler
|
|
508
|
+
|
|
509
|
+
#### Timestamp
|
|
510
|
+
|
|
511
|
+
Formatted timestamp component with relative time support.
|
|
512
|
+
|
|
513
|
+
```tsx
|
|
514
|
+
import { Timestamp } from '@archieai/ui';
|
|
515
|
+
|
|
516
|
+
// Relative time (default)
|
|
517
|
+
<Timestamp date={new Date()} /> // "just now"
|
|
518
|
+
<Timestamp date={Date.now() - 3600000} /> // "1 hour ago"
|
|
519
|
+
|
|
520
|
+
// Different formats
|
|
521
|
+
<Timestamp date={new Date()} format="relative" /> // "just now"
|
|
522
|
+
<Timestamp date={new Date()} format="short" /> // "Nov 26, 2024"
|
|
523
|
+
<Timestamp date={new Date()} format="long" /> // "November 26, 2024"
|
|
524
|
+
<Timestamp date={new Date()} format="time" /> // "3:45 PM"
|
|
525
|
+
<Timestamp date={new Date()} format="datetime" /> // "Nov 26, 2024, 3:45 PM"
|
|
526
|
+
|
|
527
|
+
// With icon
|
|
528
|
+
<Timestamp date={new Date()} showIcon />
|
|
529
|
+
|
|
530
|
+
// Different sizes and variants
|
|
531
|
+
<Timestamp date={new Date()} size="small" variant="muted" />
|
|
532
|
+
<Timestamp date={new Date()} size="large" variant="primary" />
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
**Props:**
|
|
536
|
+
|
|
537
|
+
- `date`: Date object, timestamp number, or ISO string
|
|
538
|
+
- `format`: `'relative'` | `'short'` | `'long'` | `'time'` | `'datetime'`
|
|
539
|
+
- `size`: `'small'` | `'medium'` | `'large'`
|
|
540
|
+
- `variant`: `'default'` | `'primary'` | `'muted'`
|
|
541
|
+
- `showIcon`: Show clock icon
|
|
542
|
+
- `locale`: Locale string (default: 'en-US')
|
|
543
|
+
|
|
544
|
+
#### Toast
|
|
545
|
+
|
|
546
|
+
Toast notification system with multiple variants.
|
|
123
547
|
|
|
124
548
|
```tsx
|
|
125
549
|
import { showToast, ToastContainer } from '@archieai/ui';
|
|
126
550
|
|
|
551
|
+
// Add ToastContainer once at your app root
|
|
552
|
+
<ToastContainer />;
|
|
553
|
+
|
|
554
|
+
// Show notifications
|
|
127
555
|
showToast.success('Success!', 'Your changes have been saved.');
|
|
128
556
|
showToast.error('Error!', 'Something went wrong.');
|
|
557
|
+
showToast.info('Info', 'Please check your email.');
|
|
558
|
+
showToast.warning('Warning', 'Are you sure?');
|
|
129
559
|
|
|
130
|
-
//
|
|
131
|
-
|
|
560
|
+
// With custom duration
|
|
561
|
+
showToast.success('Success!', 'Saved', { duration: 5000 });
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
#### Tooltip
|
|
565
|
+
|
|
566
|
+
Hover tooltips with customizable positioning.
|
|
567
|
+
|
|
568
|
+
```tsx
|
|
569
|
+
import { Tooltip } from '@archieai/ui';
|
|
570
|
+
import { Info } from '@archieai/ui/icons';
|
|
571
|
+
|
|
572
|
+
<Tooltip content="This is a tooltip">
|
|
573
|
+
<button>Hover me</button>
|
|
574
|
+
</Tooltip>
|
|
575
|
+
|
|
576
|
+
<Tooltip content="Help information" side="right">
|
|
577
|
+
<Info size={16} />
|
|
578
|
+
</Tooltip>
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
**Props:**
|
|
582
|
+
|
|
583
|
+
- `content`: String or React node for tooltip content
|
|
584
|
+
- `side`: `'top'` | `'right'` | `'bottom'` | `'left'`
|
|
585
|
+
- `delayDuration`: Number (milliseconds)
|
|
586
|
+
|
|
587
|
+
#### Tabs
|
|
588
|
+
|
|
589
|
+
Tab navigation component with badge support.
|
|
590
|
+
|
|
591
|
+
```tsx
|
|
592
|
+
import { Tabs } from '@archieai/ui';
|
|
593
|
+
|
|
594
|
+
const tabs = [
|
|
595
|
+
{ id: 'overview', label: 'Overview' },
|
|
596
|
+
{ id: 'analytics', label: 'Analytics', badge: '12' },
|
|
597
|
+
{ id: 'settings', label: 'Settings' },
|
|
598
|
+
];
|
|
599
|
+
|
|
600
|
+
<Tabs
|
|
601
|
+
tabs={tabs}
|
|
602
|
+
defaultValue="overview"
|
|
603
|
+
onValueChange={(value) => console.log(value)}
|
|
604
|
+
>
|
|
605
|
+
<Tabs.Content value="overview">Overview content</Tabs.Content>
|
|
606
|
+
<Tabs.Content value="analytics">Analytics content</Tabs.Content>
|
|
607
|
+
<Tabs.Content value="settings">Settings content</Tabs.Content>
|
|
608
|
+
</Tabs>;
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
#### Tag
|
|
612
|
+
|
|
613
|
+
Label and badge component with avatar support.
|
|
614
|
+
|
|
615
|
+
```tsx
|
|
616
|
+
import { Tag } from '@archieai/ui';
|
|
617
|
+
|
|
618
|
+
<Tag>Default Tag</Tag>
|
|
619
|
+
<Tag variant="success">Success</Tag>
|
|
620
|
+
<Tag variant="error">Error</Tag>
|
|
621
|
+
<Tag onRemove={() => console.log('removed')}>Removable</Tag>
|
|
132
622
|
```
|
|
133
623
|
|
|
134
|
-
|
|
624
|
+
#### Breadcrumbs
|
|
625
|
+
|
|
626
|
+
Navigation breadcrumb component.
|
|
135
627
|
|
|
136
628
|
```tsx
|
|
137
629
|
import { Breadcrumbs } from '@archieai/ui';
|
|
138
630
|
import { Home, Settings } from '@archieai/ui/icons';
|
|
139
631
|
|
|
140
632
|
const items = [
|
|
141
|
-
{
|
|
142
|
-
|
|
633
|
+
{
|
|
634
|
+
label: 'Home',
|
|
635
|
+
href: '/',
|
|
636
|
+
icon: <Home size={16} />,
|
|
637
|
+
onClick: () => navigate('/'),
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
label: 'Settings',
|
|
641
|
+
href: '/settings',
|
|
642
|
+
icon: <Settings size={16} />,
|
|
643
|
+
},
|
|
143
644
|
{ label: 'Profile' },
|
|
144
645
|
];
|
|
145
646
|
|
|
146
647
|
<Breadcrumbs items={items} />;
|
|
147
648
|
```
|
|
148
649
|
|
|
149
|
-
|
|
650
|
+
#### LoadingSpinner
|
|
150
651
|
|
|
151
|
-
|
|
652
|
+
Loading indicator component.
|
|
152
653
|
|
|
153
654
|
```tsx
|
|
154
|
-
import
|
|
655
|
+
import { LoadingSpinner } from '@archieai/ui';
|
|
656
|
+
|
|
657
|
+
<LoadingSpinner />
|
|
658
|
+
<LoadingSpinner size="small" />
|
|
659
|
+
<LoadingSpinner size="large" />
|
|
155
660
|
```
|
|
156
661
|
|
|
157
|
-
|
|
662
|
+
---
|
|
663
|
+
|
|
664
|
+
### Organisms
|
|
665
|
+
|
|
666
|
+
#### ChatInput
|
|
667
|
+
|
|
668
|
+
Rich chat input with file upload support.
|
|
669
|
+
|
|
670
|
+
```tsx
|
|
671
|
+
import { ChatInput } from '@archieai/ui';
|
|
672
|
+
|
|
673
|
+
<ChatInput
|
|
674
|
+
placeholder="Type a message..."
|
|
675
|
+
onSend={(message, files) => {
|
|
676
|
+
console.log('Message:', message);
|
|
677
|
+
console.log('Files:', files);
|
|
678
|
+
}}
|
|
679
|
+
onFileSelect={(files) => console.log('Files selected:', files)}
|
|
680
|
+
/>;
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
**Props:**
|
|
684
|
+
|
|
685
|
+
- `placeholder`: Input placeholder text
|
|
686
|
+
- `onSend`: Callback with message and files
|
|
687
|
+
- `onFileSelect`: Callback when files are selected
|
|
688
|
+
- All standard textarea HTML attributes
|
|
689
|
+
|
|
690
|
+
#### ConversationHeader
|
|
691
|
+
|
|
692
|
+
Header component for chat conversations with breadcrumbs, tags, and collaborators.
|
|
693
|
+
|
|
694
|
+
```tsx
|
|
695
|
+
import { ConversationHeader } from '@archieai/ui';
|
|
696
|
+
import { Home, MessageSquare } from '@archieai/ui/icons';
|
|
697
|
+
|
|
698
|
+
const breadcrumbs = [
|
|
699
|
+
{ label: 'Conversations', icon: <Home size={16} />, onClick: () => {} },
|
|
700
|
+
{ label: 'Project Discussion', icon: <MessageSquare size={16} /> },
|
|
701
|
+
];
|
|
702
|
+
|
|
703
|
+
const tags = [
|
|
704
|
+
{ id: '1', label: 'Design' },
|
|
705
|
+
{ id: '2', label: 'Urgent' },
|
|
706
|
+
];
|
|
707
|
+
|
|
708
|
+
const collaborators = [
|
|
709
|
+
{ id: '1', name: 'John Doe', src: '/avatar1.jpg' },
|
|
710
|
+
{ id: '2', name: 'Jane Smith', src: '/avatar2.jpg' },
|
|
711
|
+
];
|
|
712
|
+
|
|
713
|
+
<ConversationHeader
|
|
714
|
+
breadcrumbs={breadcrumbs}
|
|
715
|
+
tags={tags}
|
|
716
|
+
collaborators={collaborators}
|
|
717
|
+
onAddTag={() => console.log('Add tag')}
|
|
718
|
+
onAddCollaborator={() => console.log('Add collaborator')}
|
|
719
|
+
tagsOverflowCount={3}
|
|
720
|
+
/>;
|
|
721
|
+
```
|
|
722
|
+
|
|
723
|
+
**Props:**
|
|
724
|
+
|
|
725
|
+
- `breadcrumbs`: Array of breadcrumb items
|
|
726
|
+
- `tags`: Array of tag objects with `id` and `label`
|
|
727
|
+
- `collaborators`: Array of collaborator objects with `id`, `name`, and optional `src`
|
|
728
|
+
- `onAddTag`: Callback for adding a tag
|
|
729
|
+
- `onAddCollaborator`: Callback for adding a collaborator
|
|
730
|
+
- `tagsOverflowCount`: Number showing additional hidden tags
|
|
731
|
+
|
|
732
|
+
---
|
|
733
|
+
|
|
734
|
+
### Renderers
|
|
735
|
+
|
|
736
|
+
#### MarkdownRenderer
|
|
737
|
+
|
|
738
|
+
Markdown content renderer with support for headings, lists, code blocks, tables, math (LaTeX), and more.
|
|
739
|
+
|
|
740
|
+
```tsx
|
|
741
|
+
import { MarkdownRenderer } from '@archieai/ui';
|
|
742
|
+
|
|
743
|
+
// Basic markdown
|
|
744
|
+
<MarkdownRenderer content="# Hello World\n\nThis is **bold** and *italic* text." />
|
|
745
|
+
|
|
746
|
+
// With code blocks
|
|
747
|
+
<MarkdownRenderer
|
|
748
|
+
content={`
|
|
749
|
+
## Code Example
|
|
750
|
+
|
|
751
|
+
\`\`\`javascript
|
|
752
|
+
const greeting = 'Hello, World!';
|
|
753
|
+
console.log(greeting);
|
|
754
|
+
\`\`\`
|
|
755
|
+
|
|
756
|
+
Inline \`code\` also works!
|
|
757
|
+
`}
|
|
758
|
+
/>
|
|
759
|
+
|
|
760
|
+
// With tables
|
|
761
|
+
<MarkdownRenderer
|
|
762
|
+
content={`
|
|
763
|
+
| Feature | Status |
|
|
764
|
+
|---------|--------|
|
|
765
|
+
| Tables | ✅ |
|
|
766
|
+
| Lists | ✅ |
|
|
767
|
+
| Code | ✅ |
|
|
768
|
+
`}
|
|
769
|
+
/>
|
|
770
|
+
|
|
771
|
+
// With math (LaTeX)
|
|
772
|
+
<MarkdownRenderer
|
|
773
|
+
content={`
|
|
774
|
+
The quadratic formula: $x = \\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}$
|
|
775
|
+
|
|
776
|
+
Block math:
|
|
777
|
+
$$
|
|
778
|
+
\\int_0^\\infty e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2}
|
|
779
|
+
$$
|
|
780
|
+
`}
|
|
781
|
+
/>
|
|
782
|
+
|
|
783
|
+
// Custom renderers
|
|
784
|
+
<MarkdownRenderer
|
|
785
|
+
content="Check `this code` and [this link](https://example.com)"
|
|
786
|
+
renderCodeBlock={(code, language) => (
|
|
787
|
+
<SyntaxHighlighter language={language}>{code}</SyntaxHighlighter>
|
|
788
|
+
)}
|
|
789
|
+
renderLink={(href, text) => (
|
|
790
|
+
<CustomLink href={href}>{text}</CustomLink>
|
|
791
|
+
)}
|
|
792
|
+
/>
|
|
793
|
+
|
|
794
|
+
// Size and variant
|
|
795
|
+
<MarkdownRenderer content="# Title" size="small" variant="muted" />
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
**Props:**
|
|
799
|
+
|
|
800
|
+
- `content`: Markdown string to render
|
|
801
|
+
- `size`: `'small'` | `'medium'` | `'large'`
|
|
802
|
+
- `variant`: `'default'` | `'muted'` | `'primary'`
|
|
803
|
+
- `renderCodeBlock`: Custom code block renderer
|
|
804
|
+
- `renderInlineCode`: Custom inline code renderer
|
|
805
|
+
- `renderMathBlock`: Custom math block renderer (LaTeX)
|
|
806
|
+
- `renderInlineMath`: Custom inline math renderer
|
|
807
|
+
- `renderLink`: Custom link renderer
|
|
808
|
+
|
|
809
|
+
**Supported Markdown Features:**
|
|
810
|
+
|
|
811
|
+
- Headings (H1-H6)
|
|
812
|
+
- Bold, italic, strikethrough
|
|
813
|
+
- Links
|
|
814
|
+
- Inline code and code blocks with language support
|
|
815
|
+
- Ordered and unordered lists
|
|
816
|
+
- Blockquotes
|
|
817
|
+
- Tables with alignment
|
|
818
|
+
- Horizontal rules
|
|
819
|
+
- Math/LaTeX (inline with `$...$`, block with `$$...$$`)
|
|
820
|
+
|
|
821
|
+
---
|
|
822
|
+
|
|
823
|
+
## 🎨 Theming
|
|
824
|
+
|
|
825
|
+
The library uses CSS custom properties for theming. You can customize colors by overriding these variables:
|
|
826
|
+
|
|
827
|
+
```css
|
|
828
|
+
:root {
|
|
829
|
+
/* Primary Colors */
|
|
830
|
+
--color-white: #ffffff;
|
|
831
|
+
--color-blue-1000: #022e40;
|
|
832
|
+
--color-blue-800: #15b1cd;
|
|
833
|
+
--color-blue-400: #6aeafd;
|
|
834
|
+
--color-blue-200: #d6f4ff;
|
|
835
|
+
|
|
836
|
+
/* Orange Colors */
|
|
837
|
+
--color-orange-1000: #e15713;
|
|
838
|
+
--color-orange-800: #ff6f00;
|
|
839
|
+
--color-orange-200: #fff2e2;
|
|
840
|
+
|
|
841
|
+
/* Neutral Colors */
|
|
842
|
+
--color-gray-1000: #000626;
|
|
843
|
+
--color-gray-800: #595f7a;
|
|
844
|
+
--color-gray-600: #8c92af;
|
|
845
|
+
--color-gray-200: #e5e7f0;
|
|
846
|
+
--color-gray-100: #f5f6fa;
|
|
847
|
+
--color-gray-50: #fafafc;
|
|
848
|
+
|
|
849
|
+
/* System Colors */
|
|
850
|
+
--color-red-1000: #fb6060;
|
|
851
|
+
--color-red-200: #ffecec;
|
|
852
|
+
--color-green-1000: #71d481;
|
|
853
|
+
--color-green-200: #e2f7e5;
|
|
854
|
+
--color-amber-1000: #8f6c1a;
|
|
855
|
+
}
|
|
856
|
+
```
|
|
857
|
+
|
|
858
|
+
## 📘 TypeScript Support
|
|
859
|
+
|
|
860
|
+
All components are fully typed with TypeScript:
|
|
861
|
+
|
|
862
|
+
```tsx
|
|
863
|
+
import type {
|
|
864
|
+
ButtonProps,
|
|
865
|
+
InputProps,
|
|
866
|
+
CheckboxProps,
|
|
867
|
+
ToastProps,
|
|
868
|
+
TabsProps,
|
|
869
|
+
BreadcrumbsProps,
|
|
870
|
+
MessageBubbleProps,
|
|
871
|
+
ChatFileProps,
|
|
872
|
+
DropdownProps,
|
|
873
|
+
ProgressBarProps,
|
|
874
|
+
StatusMessageProps,
|
|
875
|
+
SidebarItemProps,
|
|
876
|
+
TimestampProps,
|
|
877
|
+
AvatarProps,
|
|
878
|
+
StatusIndicatorProps,
|
|
879
|
+
ConversationHeaderProps,
|
|
880
|
+
MarkdownRendererProps,
|
|
881
|
+
} from '@archieai/ui';
|
|
882
|
+
|
|
883
|
+
// Use types in your components
|
|
884
|
+
const MyButton: React.FC<ButtonProps> = (props) => {
|
|
885
|
+
return <Button {...props} />;
|
|
886
|
+
};
|
|
887
|
+
```
|
|
888
|
+
|
|
889
|
+
## 🌐 Browser Support
|
|
158
890
|
|
|
159
891
|
- Chrome (latest)
|
|
160
892
|
- Firefox (latest)
|
|
161
893
|
- Safari (latest)
|
|
162
894
|
- Edge (latest)
|
|
163
895
|
|
|
164
|
-
## Tech Stack
|
|
896
|
+
## 🛠️ Tech Stack
|
|
165
897
|
|
|
166
898
|
- **React** 18.3+ - UI library
|
|
167
899
|
- **TypeScript** - Type safety
|
|
168
|
-
- **Tailwind CSS** - Utility-first styling
|
|
900
|
+
- **Tailwind CSS v4** - Utility-first styling
|
|
169
901
|
- **Framer Motion** - Animations
|
|
170
902
|
- **Radix UI** - Accessible primitives
|
|
903
|
+
- **KaTeX** - Math/LaTeX rendering
|
|
171
904
|
- **Class Variance Authority** - Variant management
|
|
905
|
+
- **Vite** - Build tool
|
|
906
|
+
|
|
907
|
+
## 📦 Bundle Size
|
|
908
|
+
|
|
909
|
+
The library is optimized for minimal bundle size:
|
|
910
|
+
|
|
911
|
+
- **Separate entry points** for icons and styles
|
|
912
|
+
- **Tree-shakeable** - only import what you use
|
|
913
|
+
- **CSS**: ~50 KB (minified)
|
|
914
|
+
- **JS**: ~49 KB (minified, gzipped)
|
|
915
|
+
|
|
916
|
+
```tsx
|
|
917
|
+
// Import only what you need
|
|
918
|
+
import { Button, Input, MessageBubble } from '@archieai/ui'; // Main components
|
|
919
|
+
import { Home, Star } from '@archieai/ui/icons'; // Icons separately
|
|
920
|
+
import '@archieai/ui/styles'; // Styles
|
|
921
|
+
```
|
|
922
|
+
|
|
923
|
+
## 📝 Development
|
|
924
|
+
|
|
925
|
+
### Running Locally
|
|
926
|
+
|
|
927
|
+
```bash
|
|
928
|
+
# Install dependencies
|
|
929
|
+
pnpm install
|
|
930
|
+
|
|
931
|
+
# Start development server
|
|
932
|
+
pnpm dev
|
|
933
|
+
|
|
934
|
+
# Run tests
|
|
935
|
+
pnpm test
|
|
936
|
+
|
|
937
|
+
# Build library
|
|
938
|
+
pnpm build:lib
|
|
939
|
+
|
|
940
|
+
# Run Storybook
|
|
941
|
+
pnpm storybook
|
|
942
|
+
```
|
|
943
|
+
|
|
944
|
+
### Building
|
|
945
|
+
|
|
946
|
+
```bash
|
|
947
|
+
# Build the library for production
|
|
948
|
+
pnpm build:lib
|
|
949
|
+
|
|
950
|
+
# This generates:
|
|
951
|
+
# - dist/index.js (ESM)
|
|
952
|
+
# - dist/index.cjs (CommonJS)
|
|
953
|
+
# - dist/index.d.ts (TypeScript declarations)
|
|
954
|
+
# - dist/icons.js (Icons ESM)
|
|
955
|
+
# - dist/icons.cjs (Icons CommonJS)
|
|
956
|
+
# - dist/styles.js (Styles entry point)
|
|
957
|
+
# - dist/ui.css (Compiled CSS)
|
|
958
|
+
```
|
|
959
|
+
|
|
960
|
+
## 📄 License
|
|
961
|
+
|
|
962
|
+
MIT License - See LICENSE file for details.
|
|
963
|
+
|
|
964
|
+
## 🤝 Contributing
|
|
965
|
+
|
|
966
|
+
This package is maintained by the Archie AI team. For internal contributors:
|
|
172
967
|
|
|
173
|
-
|
|
968
|
+
1. Follow the component creation standards in `.cursor/rules/component-creation.mdc`
|
|
969
|
+
2. Ensure all components have:
|
|
970
|
+
- Main component file (`.tsx`)
|
|
971
|
+
- Styles file (`.styles.ts`)
|
|
972
|
+
- Stories file (`.stories.tsx`)
|
|
973
|
+
- Test file (`.test.tsx`)
|
|
974
|
+
3. Run tests before committing
|
|
975
|
+
4. Update CHANGELOG.md for significant changes
|
|
174
976
|
|
|
175
|
-
|
|
977
|
+
## 📞 Support
|
|
176
978
|
|
|
177
|
-
|
|
979
|
+
For issues and questions:
|
|
178
980
|
|
|
179
|
-
|
|
981
|
+
- Internal team: Contact the Archie AI development team
|
|
982
|
+
- GitHub Issues: [https://github.com/heyarchie-ai/Archie-UI/issues](https://github.com/heyarchie-ai/Archie-UI/issues)
|
|
180
983
|
|
|
181
|
-
##
|
|
984
|
+
## 📚 Additional Resources
|
|
182
985
|
|
|
183
|
-
|
|
986
|
+
- [Changelog](./CHANGELOG.md) - Version history and updates
|
|
987
|
+
- [Figma Design System](https://www.figma.com/design/lXoDTTuMaUscHm9sG86eh8/Archie-Design-System) - Design specifications
|
|
184
988
|
|
|
185
989
|
---
|
|
186
990
|
|
|
187
|
-
Made with ❤️ by the Archie Team
|
|
991
|
+
Made with ❤️ by the Archie AI Team
|