Skip to content

Built-in Components

11 components covering the common conversational UI patterns. Import them all with defaultComponents.

Ts
1import { defaultComponents } from "wireai-rn/components";
2// or
3import { defaultComponents } from "wireai-rn";
4
5<WireAIProvider llm={config} components={defaultComponents}>

Component selection guide

Use caseComponent
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 descriptionContentSelectCard
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 / itineraryStepList
Yes/no or confirm an actionConfirmPrompt
Offer 1โ€“3 next-step choicesActionCard
Show success / error / info outcomeStatusCard
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

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

PropTypeReq.Description
titlestringโœ“Card heading
bodystring?โ€”Optional description below the title
primaryLabelstringโœ“Primary button text
primaryActionstringโœ“Action key emitted when primary is pressed
secondaryLabelstring?โ€”Second button text
secondaryActionstring?โ€”Action key for second button
tertiaryLabelstring?โ€”Third button text
tertiaryActionstring?โ€”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

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

PropTypeReq.Description
titlestringโœ“Card heading
chipsstring[]โœ“Array of chip labels
multiSelectboolean?โ€”Allow selecting multiple chips (default: false)
maxSelectionsnumber?โ€”Maximum chips that can be selected
submitLabelstring?โ€”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

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

PropTypeReq.Description
questionstringโœ“The question to ask
confirmLabelstring?โ€”Confirm button text (default: 'Yes')
cancelLabelstring?โ€”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

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

PropTypeReq.Description
titlestringโœ“Card heading
items{ id: string; title: string; description: string }[]โœ“Items to display
multiSelectboolean?โ€”Allow multiple selection (default: false)
submitLabelstring?โ€”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

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

PropTypeReq.Description
titlestringโœ“Card heading
items{ label: string; value: string }[]โœ“Key-value pairs
continueLabelstring?โ€”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

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

PropTypeReq.Description
labelstringโœ“Input label
minnumberโœ“Minimum value
maxnumberโœ“Maximum value
defaultValuenumber?โ€”Starting value (default: min)
unitstring?โ€”Unit shown after the number (e.g. 'days', '/ 10')
submitLabelstring?โ€”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

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

PropTypeReq.Description
titlestringโœ“Card heading
optionsstring[] | {value:string;label:string}[]โœ“Options (strings are auto-converted)
submitLabelstring?โ€”Submit button text (default: 'Continue')
multiSelectboolean?โ€”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

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

PropTypeReq.Description
status'success' | 'error' | 'info'โœ“Visual variant
titlestringโœ“Status heading
messagestringโœ“Status body text
ctaLabelstringโœ“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

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

PropTypeReq.Description
titlestringโœ“List heading
steps{ title: string; description: string }[]โœ“Steps to display
ctaLabelstringโœ“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

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

PropTypeReq.Description
labelstringโœ“Input label
placeholderstring?โ€”Placeholder text
submitLabelstring?โ€”Submit button text (default: 'Submit')
multilineboolean?โ€”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

Json
1{
2  "action": "render",
3  "component": "MessageBubble",
4  "props": {
5    "text": "Great choice! Let me put together your plan."
6  }
7}

Props

PropTypeReq.Description
textstringโœ“The message text to display