Layout
<AppilotsChat /> ships four layout modes. Pick the one that fits the
host app's flow. See SDK → Chat component for
the full props reference.
bubble (default)
Floating action button in a corner; tapping it slides up a bottom-sheet modal. Fits most consumer apps.
<AppilotsChat mode="bubble" position="bottom-right" />
position accepts bottom-right (default), bottom-left,
top-right, top-left.
fullscreen
No FAB; the chat takes over the entire screen when opened (controlled). Good for dedicated "support" or "AI assistant" entry points in a navigation tab.
const [open, setOpen] = useState(false);
<>
<Button title="Abrir assistente" onPress={() => setOpen(true)} />
<AppilotsChat mode="fullscreen" visible={open} onClose={() => setOpen(false)} />
</>;
sidebar
Half-width modal pinned to the right (becomes a full-width sheet on narrow phones, where a 50% sliver would be unusable). Best for tablets and desktop-class layouts.
<AppilotsChat mode="sidebar" />
inline
Renders in place — no modal, no FAB. Drop it inside any layout you want, e.g. as a permanent panel in a settings page.
<View style={{ flex: 1, flexDirection: 'row' }}>
<View style={{ flex: 2 }}>{/* main content */}</View>
<View style={{ flex: 1, borderLeftWidth: 1, borderLeftColor: '#eee' }}>
<AppilotsChat mode="inline" />
</View>
</View>
Custom trigger button
The default FAB is a circular button in theme.colors.primary with a
speech-bubble glyph (ChatIcon) in the middle. Three ways to customize
it, from lightest to heaviest:
1. Recolor and/or swap the icon for an image — keeps the default shape/size, no need to rebuild the button:
<AppilotsChat
triggerButtonColor="#000000"
triggerButtonImage="https://acme.com/logo.png" // or a require()'d local image
/>
Same fields as the dashboard's Personalização tab (triggerButtonColor,
triggerButtonImageUrl there) — and the dashboard values apply
automatically when these props are left unset (prop → dashboard →
default; see Overview). Empty color falls back to
theme.colors.primary; empty image falls back to the default glyph.
2. Replace only the icon (any React node), keeping the default button shape/background:
<AppilotsChat triggerIcon={<Icon name="sparkles" color="#fff" />} />
3. Replace the entire button:
<AppilotsChat
mode="bubble"
triggerButton={
<View style={{ padding: 12, borderRadius: 24, backgroundColor: '#000' }}>
<Icon name="sparkles" color="#fff" />
</View>
}
/>
If both triggerIcon and triggerButtonImage are set, triggerIcon
wins. triggerButtonColor/triggerButtonImage are ignored once
triggerButton is set to a node (the whole button is replaced anyway).
triggerButton="none" hides the trigger entirely — useful when you're
controlling visibility from elsewhere (e.g. a header button) via the
visible prop.
Controlled vs uncontrolled
By default the chat manages its own visibility. Pass visible and
onClose to take control — works in any mode except inline (which
is always visible).