Built-in Components
11 components covering the common conversational UI patterns. Import them all with defaultComponents.
1import { defaultComponents } from "wireai-rn/components";
2// or
3import { defaultComponents } from "wireai-rn";
4
5<WireAIProvider llm={config} components={defaultComponents}>Component selection guide
| Use case | Component |
|---|---|
| Pick one from a short list (< 6 options, longer labels) | SelectionCard |
| Pick one or many from compact labels (seasons, tags, activities) | ChipSelectCard |
| Selectable list where each item has a description | ContentSelectCard |
| Pick a number (days, people, budget, rating) | NumberStepperCard |
| Collect free text (name, destination, notes) | TextInputCard |
| Read-only key-value summary (no selection) | InfoList |
| Ordered steps / action plan / itinerary | StepList |
| Yes/no or confirm an action | ConfirmPrompt |
| Offer 1โ3 next-step choices | ActionCard |
| Show success / error / info outcome | StatusCard |
| Plain text message (use sparingly) | MessageBubble |
Component reference
Offers 1โ3 next-step action buttons. Use after InfoList, StepList, or StatusCard.
When to use: Use when the user says 'Continue.' or after any read-only display component.
LLM JSON
1{
2 "action": "render",
3 "component": "ActionCard",
4 "props": {
5 "title": "What would you like to do next?",
6 "body": "Here are some options:",
7 "primaryLabel": "Plan another trip",
8 "primaryAction": "new_trip",
9 "secondaryLabel": "Save my itinerary",
10 "secondaryAction": "save",
11 "tertiaryLabel": "Start over",
12 "tertiaryAction": "restart"
13 }
14}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| title | string | โ | Card heading |
| body | string? | โ | Optional description below the title |
| primaryLabel | string | โ | Primary button text |
| primaryAction | string | โ | Action key emitted when primary is pressed |
| secondaryLabel | string? | โ | Second button text |
| secondaryAction | string? | โ | Action key for second button |
| tertiaryLabel | string? | โ | Third button text |
| tertiaryAction | string? | โ | Action key for third button |
Compact multi-toggle for short labels: tags, categories, activities, seasons.
When to use: Use when options are short (1โ3 words) and multiple can be selected simultaneously.
LLM JSON
1{
2 "action": "render",
3 "component": "ChipSelectCard",
4 "props": {
5 "title": "What activities do you enjoy?",
6 "chips": ["Beach", "Hiking", "Culture", "Food", "Shopping"],
7 "multiSelect": true,
8 "maxSelections": 3,
9 "submitLabel": "These are my interests"
10 }
11}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| title | string | โ | Card heading |
| chips | string[] | โ | Array of chip labels |
| multiSelect | boolean? | โ | Allow selecting multiple chips (default: false) |
| maxSelections | number? | โ | Maximum chips that can be selected |
| submitLabel | string? | โ | Submit button text (default: 'Continue') |
Yes/no confirmation. Use for destructive actions, saving data, or any binary decision.
When to use: Use before saving, deleting, or any irreversible action.
LLM JSON
1{
2 "action": "render",
3 "component": "ConfirmPrompt",
4 "props": {
5 "question": "Save this to your journal?",
6 "confirmLabel": "Yes, save it",
7 "cancelLabel": "No, skip"
8 }
9}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| question | string | โ | The question to ask |
| confirmLabel | string? | โ | Confirm button text (default: 'Yes') |
| cancelLabel | string? | โ | Cancel button text (default: 'No') |
Selectable list where each item has a title and description. For items that need explanation.
When to use: Use for techniques, recipes, destinations, recommendations: anything with a description.
LLM JSON
1{
2 "action": "render",
3 "component": "ContentSelectCard",
4 "props": {
5 "title": "Choose a technique",
6 "items": [
7 { "id": "box", "title": "Box Breathing", "description": "4-4-4-4 pattern, calms in 2 minutes" },
8 { "id": "478", "title": "4-7-8 Breathing", "description": "Inhale 4s, hold 7s, exhale 8s" }
9 ],
10 "multiSelect": false,
11 "submitLabel": "Try this one"
12 }
13}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| title | string | โ | Card heading |
| items | { id: string; title: string; description: string }[] | โ | Items to display |
| multiSelect | boolean? | โ | Allow multiple selection (default: false) |
| submitLabel | string? | โ | Submit button text (default: 'Continue') |
Read-only key-value summary. For booking details, trip summaries, check-in recaps.
When to use: Use ONLY for read-only display. For selectable lists, use ContentSelectCard.
LLM JSON
1{
2 "action": "render",
3 "component": "InfoList",
4 "props": {
5 "title": "Your Trip Summary",
6 "items": [
7 { "label": "Destination", "value": "Tokyo, Japan" },
8 { "label": "Duration", "value": "7 days" },
9 { "label": "Travellers", "value": "2 people" }
10 ],
11 "continueLabel": "Looks good, continue โ"
12 }
13}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| title | string | โ | Card heading |
| items | { label: string; value: string }[] | โ | Key-value pairs |
| continueLabel | string? | โ | CTA button text (default: 'Continue') |
Numeric input with +/โ buttons. Use for integers with known bounds.
When to use: Use for days, people, budget steps, ratings, or any bounded integer.
LLM JSON
1{
2 "action": "render",
3 "component": "NumberStepperCard",
4 "props": {
5 "label": "How many days?",
6 "min": 1,
7 "max": 30,
8 "defaultValue": 7,
9 "unit": "days",
10 "submitLabel": "That's my trip length"
11 }
12}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| label | string | โ | Input label |
| min | number | โ | Minimum value |
| max | number | โ | Maximum value |
| defaultValue | number? | โ | Starting value (default: min) |
| unit | string? | โ | Unit shown after the number (e.g. 'days', '/ 10') |
| submitLabel | string? | โ | Submit button text (default: 'Continue') |
Single or multi-choice row selector. For 2โ8 options with longer labels.
When to use: Use when options need to stand out as rows. For compact chips, use ChipSelectCard.
LLM JSON
1{
2 "action": "render",
3 "component": "SelectionCard",
4 "props": {
5 "title": "What's weighing on you most?",
6 "options": [
7 "I feel overwhelmed and don't know where to start",
8 "I'm struggling to stay motivated",
9 "I keep putting off something important"
10 ],
11 "submitLabel": "That's my challenge"
12 }
13}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| title | string | โ | Card heading |
| options | string[] | {value:string;label:string}[] | โ | Options (strings are auto-converted) |
| submitLabel | string? | โ | Submit button text (default: 'Continue') |
| multiSelect | boolean? | โ | Allow multiple selection (default: false) |
Success, error, or info status with a CTA. For real outcomes, not acknowledgments.
When to use: Use ONLY for real outcomes: saved data, completed actions, confirmed bookings.
LLM JSON
1{
2 "action": "render",
3 "component": "StatusCard",
4 "props": {
5 "status": "success",
6 "title": "Check-in Complete",
7 "message": "Well done for showing up for yourself today.",
8 "ctaLabel": "What would you like to do next?"
9 }
10}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| status | 'success' | 'error' | 'info' | โ | Visual variant |
| title | string | โ | Status heading |
| message | string | โ | Status body text |
| ctaLabel | string | โ | CTA button text. Always required to keep conversation alive |
Ordered list of steps with titles and descriptions. For plans, itineraries, instructions.
When to use: Use for action plans, recipes, how-to guides. Always set ctaLabel.
LLM JSON
1{
2 "action": "render",
3 "component": "StepList",
4 "props": {
5 "title": "Your Box Breathing Practice",
6 "steps": [
7 { "title": "Find a quiet spot", "description": "Sit comfortably" },
8 { "title": "Inhale for 4 counts", "description": "Breathe in through your nose" },
9 { "title": "Hold for 4 counts", "description": "Hold gently, no tension" },
10 { "title": "Exhale for 4 counts", "description": "Release slowly through your mouth" }
11 ],
12 "ctaLabel": "I'm done. What's next?"
13 }
14}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| title | string | โ | List heading |
| steps | { title: string; description: string }[] | โ | Steps to display |
| ctaLabel | string | โ | CTA button text. Always required |
Free-text input field. For names, destinations, open-ended answers, notes.
When to use: Use when you need free-form text input from the user.
LLM JSON
1{
2 "action": "render",
3 "component": "TextInputCard",
4 "props": {
5 "label": "Tell me more about what's going on",
6 "placeholder": "Describe what's on your mind",
7 "submitLabel": "That's what's happening",
8 "multiline": true
9 }
10}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| label | string | โ | Input label |
| placeholder | string? | โ | Placeholder text |
| submitLabel | string? | โ | Submit button text (default: 'Submit') |
| multiline | boolean? | โ | Enable multiline input (default: false) |
Plain text message bubble. Use sparingly. Prefer the 'message' field on render responses.
When to use: Use only when a text message is the only output. Otherwise, add a 'message' field to a render response.
LLM JSON
1{
2 "action": "render",
3 "component": "MessageBubble",
4 "props": {
5 "text": "Great choice! Let me put together your plan."
6 }
7}Props
| Prop | Type | Req. | Description |
|---|---|---|---|
| text | string | โ | The message text to display |