packages/anvil2-rn/CHANGELOG.md.
0.2.5
Patch Changes
- #3000
2b10cd1Thanks @rollsroyc3! - [Card] Remove the border, matching the current design spec, reversing its layout impact (auto-sizedCardshrinks, fixed-sizeCardregains the padding)
0.2.4
Patch Changes
-
#3045
e71cb3aThanks @rollsroyc3! - [ActionLog] An untitled step no longer renders a blank title line: its description takes the marker’s line, as on web, and its details toggle is named by its position (“Show details for step 3”) -
#3064
3e36538Thanks @rollsroyc3! - [Tokens] Addtext.highlight.backgroundFallback, a solid stand-in fortext.highlight.background(web’s gradient) on React Native, Swift, and Kotlin, which cannot render it. [Text] ConsumebackgroundFallbackfor thehighlightedprop’s background instead of a hardcodedrgba(188, 226, 234, 0.4)literal. -
#3060
6155a3fThanks @rollsroyc3! - [AgentThinking] A longlabelwraps within the indicator’s container and truncates after two lines, instead of running past the screen edge -
Updated dependencies [
3e36538]:- @servicetitan/carto-tokens@0.4.7
- @servicetitan/anvil2-icons@0.1.10
0.2.3
Minor Changes
-
#2997
37d5944Thanks @rollsroyc3! - [MarkdownTable, MarkdownTableCell, MarkdownTableHeaderCell, MarkdownTableRow] Add components for rendering markdown-sourced tables -
#2992
cd90d00Thanks @rollsroyc3! - [VoiceModeFab] AddisUserTalking, an orange presence glow for the caller
Patch Changes
-
#2992
cd90d00Thanks @rollsroyc3! - [VoiceModeFab] Fix the collapsed circle’s waveform glyph to blue200 -
Updated dependencies [
60a7a12]:- @servicetitan/anvil2-icons@0.1.9
0.2.2
Patch Changes
- Updated dependencies [
5a21d98,5a21d98,65336ab]:- @servicetitan/carto-tokens@0.4.6
- @servicetitan/anvil2-icons@0.1.8
0.2.1
Minor Changes
-
#2897
b628c84Thanks @rollsroyc3! - [VoiceModeFab] Addstatusto the expanded strip — the leading indicator now reflects talking, thinking or listening. The strip’s waveform moves to a 16pt box inprimitive/color/blue/200to match design’s.Talking Indicator, so callers that omitstatuswill see it smaller and blue rather than 20pt and inverse.
Patch Changes
-
#2899
ad50448Thanks @rollsroyc3! - [PromptBar] Match the heights design draws —promptBar.paddingis the horizontal inset, paired withcondensedvertically, and the inline controls are 48 with the voice row’s exit at 64. Every row built on the bar’s surface loses 16pt: the text bar and the voice-mode row land at 64, and the listening and transcribing rows at 56, since their controls are unchanged. -
#2902
56a0758Thanks @rollsroyc3! - [Button, ButtonToggle] FixButton/ButtonTogglerendering a drop shadow andsecondarydrawing a 1px border in every state, matching the web kit’s flat, borderless look;secondaryis now 2pt narrower and shorter since its border no longer adds to the box. -
#2897
b628c84Thanks @rollsroyc3! - [VoiceModeFab] Fade the presence halo on turn changes and pulse it whileisAgentSpeaking, instead of snapping it on and off.
0.2.0
Major Changes
- #2868
0347522Thanks @rollsroyc3! - [PromptBar] Withhold the send action at rest, show it disabled once the editor is focused, and enable it on a draft.
Minor Changes
-
#2862
dc20f1dThanks @rollsroyc3! - [Button] Add thelargesize and thedanger-secondaryvariant to the React Native kit, with thecritical-subduedsemantic intents behind them. -
#2866
8410327Thanks @rollsroyc3! - [VoiceModeFab] AddisAgentSpeaking— the presence glow now marks Atlas holding the floor rather than the call being open.
Patch Changes
-
#2860
b6d7c34Thanks @rollsroyc3! - [VoiceModeFab] Restore the spec’dred.700stop glyph and aliasforeground.color.criticalfor the muted-mic tint. -
#2866
8410327Thanks @rollsroyc3! - [VoiceModeFab] Let the host align the expanded strip — it no longer pins its ownalignSelf. -
Updated dependencies [
dc20f1d]:- @servicetitan/carto-tokens@0.4.5
- @servicetitan/anvil2-icons@0.1.7
0.1.10
Minor Changes
-
#2848
fcd48c7Thanks @rollsroyc3! - [PromptBar] AddisVoiceModeActiveto collapse the bar to a single exit-to-typing control during a live voice conversation. -
#2847
48560b1Thanks @rollsroyc3! - [VoiceModeFab] Add the floating voice-mode control — an idle circle, an active circle with a presence glow, and an expanded strip with mic-mute, stop, and collapse.
Patch Changes
- Updated dependencies [
6e236a2]:- @servicetitan/anvil2-icons@0.1.6
0.1.9
Minor Changes
- #2826
cba0245Thanks @rollsroyc3! - [AgentMessage] AddshowToolbarto omit the timestamp + action row for a host with no copy/feedback surface of its own. Defaults totrue, matching current behavior.
Patch Changes
-
#2828
24c1d47Thanks @w-a-t-s-o-n! - [Button] Use fully rounded corners at every size. -
Updated dependencies [
24c1d47]:- @servicetitan/carto-tokens@0.4.4
- @servicetitan/anvil2-icons@0.1.5
0.1.8
Minor Changes
- #2803
f655a8dThanks @rollsroyc3! - [Checkbox] Add a React Native checkbox, porting the AI Kit web component’s API (isSelected/defaultSelected/isIndeterminate/isDisabled, and the labelled vsaria-label/aria-labelledbyunion).
Patch Changes
-
#2807
d1ecabcThanks @rollsroyc3! - [ActionLog, PromptBar] Stop the decorativeActivityIndicatorfrom being announced as a second, unnamed progress indicator beside the labelled status. -
#2794
49857b1Thanks @rollsroyc3! - [MessageToolbar] Size the action buttons 40x40 for touch and tighten their grouping -
Updated dependencies [
64cea5c]:- @servicetitan/carto-tokens@0.4.3
- @servicetitan/anvil2-icons@0.1.4
0.1.7
Patch Changes
- #2783
5848c75Thanks @rollsroyc3! - [MessageToolbar] Order assistant actions before the timestamp, matching the web kit
0.1.6
Patch Changes
-
#2729
84ff49aThanks @jpex! - [Suggestion] Restyle the chip surface to match Card — standard fill, 1px standard border, and hover-only ambient elevation -
Updated dependencies [
84ff49a]:- @servicetitan/carto-tokens@0.4.2
- @servicetitan/anvil2-icons@0.1.3
0.1.5
Patch Changes
- Updated dependencies [
2ef0653]:- @servicetitan/anvil2-icons@0.1.2
0.1.4
Minor Changes
- #2711
4b85324Thanks @ericag1985! - [Icons] Consume@servicetitan/anvil2-icons/react-nativefor the shared allowlist
Patch Changes
0.1.3
Patch Changes
- #2686
feadc16Thanks @rollsroyc3! - [BottomSheet] Centre the header title and subheader. No API change.
0.1.2
Minor Changes
-
#2669
21efe99Thanks @w-a-t-s-o-n! - Publish Carto’s React Native component kit from the Hammer monorepo as@servicetitan/anvil2-rn. Formerly@servicetitan/carto-rn-kit.
Patch Changes
0.1.1
Minor Changes
-
#297
396df2dThanks @rollsroyc3! - [BottomSheet] Drag the handle down to dismiss. The grip is now an interactive control: dragging it down past a quarter of the sheet’s height, or on a fast downward flick, dismisses; a shorter drag settles back open. The drag drives the same enter/exit value, so the surface slides and the scrim fades together. Only active whenisDismissable; the handle stays hidden from assistive tech (a drag can’t be performed there — the header X, or the scrim when it’s hidden, remains the dismiss affordance). This is drag-to-dismiss, still not drag-to-resize detents. -
#290
08d85daThanks @rollsroyc3! - [BottomSheet] Add a React Native bottom sheet — a bottom-anchored modal surface with a drag handle, header (title + optional subheader + close), and a scrolling body region. Mirrors the web sheet’s configuration-first API (title,subheader,content,trigger,showCloseButton,isDismissable, controlled/uncontrolled open state) and Dialog’s motion. Drag-to-resize detents are not included in this version. -
#296
6bb7888Thanks @rollsroyc3! - [ButtonToggle] Add a React Native toggle button — a persistent on/off control (bold/italic toolbar buttons, view-mode switches) built onButton’s ownsecondaryvisual system plus an informative selected treatment, matching the web kit’s border-reservation trick so toggling selection never resizes the button. Selection is controlled (isSelected/onChange) or uncontrolled (defaultSelected/onChange), same split as the web kit’sToggleButton. Uses RN’s dedicatedaccessibilityRole="togglebutton"+accessibilityState.checked, since plain"button"has no ARIA-legal state for a toggle’s value and RN’sAccessibilityStatehas nopressedkey.
0.1.0
Major Changes
-
#288
aa78524Thanks @w-a-t-s-o-n! - Do not use the previous version in this package’s changelog. For packages versioned in #287, that entry was merged tomainbut never successfully published (@servicetitan/anvil2-charts-kit@0.0.2,@servicetitan/anvil2-rn-charts-kit@0.1.0,@servicetitan/anvil2-ai-kit@0.8.4,@servicetitan/anvil2-rn@0.0.10). Several of those numbers (and other unpublished builds) are permanently reserved after a security-related npm unpublish and cannot be republished. Bump package versions past the reserved numbers. Upgrade to the versions from this release; do not pin to the removed or unpublished ones. -
#283
debb29fThanks @ericag1985! - [Dependencies] Raise thereact-nativepeer floor to 0.81, matching Expo SDK 54 — the version whose default architecture resolves the percentage transforms the chart tooltip positions itself with
Minor Changes
- #283
debb29fThanks @ericag1985! - [TooltipSurface] Add the tooltip pill and caret as a standalone visual, for cases where the caller already knows what to explain and where — a chart overlay labelling the point under the finger, say. Also exports theTooltipCaretDirectionandTooltipSurfacePropstypes
Patch Changes
0.0.10
Minor Changes
-
#280
334c709Thanks @rollsroyc3! - [Dialog] Animate open/close — the scrim fades and the surface slides up fromspacing.expansivewhile fading in, on the layer-entry motion tokens (emphasisin,transitionout), matching the web Dialog. Honors the OS “Reduce motion” setting (instant), and defers the Modal’s unmount so the exit actually plays. Built onreact-native-reanimated(already a peer dependency of the kit). -
#281
3746762Thanks @rollsroyc3! - [Disclosure] Animate the chevron rotation (0°↔180°) on expand/collapse instead of snapping, on thesemantic.motion.transitioncurve — matching the web Disclosure’stransition: transform. Uses built-in RNAnimated(native driver, no new dependency) and snaps under the OS “Reduce motion” setting. Visible inActionLog, which composesDisclosure. -
#279
e74b382Thanks @rollsroyc3! - [PromptBar] Animate the inline↔stacked reflow with react-native-reanimated Layout Animations — the RN counterpart to the web PromptBar’s Framerlayouttransition. Every persistent element (bar, editor, controls) shares one token-driven curve (semantic.motion.duration.transition+easing.transition) so the bar expands as a single linked motion, and it honors the OS “Reduce motion” setting. Addsreact-native-reanimated(>=3.16.0 <5) as a peer dependency (install + native rebuild + addreact-native-reanimated/pluginlast in your babel plugins). -
#278
ad1fd44Thanks @rollsroyc3! - [PromptBar] Render the listening state as a live scrolling audio waveform instead of a flat level-meter fill. The bars floor at a resting pill (so the row reads as “listening” at silence), scale symmetrically from center offaudioLevel, and scroll left as new levels arrive — mirroring the web kit’s internalWaveform. Built on RN’s built-inAnimated(noreact-native-reanimateddependency); under the OS “reduce motion” setting the scroll stops but the bars stay responsive to the live level. Purely visual — the meter track announces the listening status via itslisteningLabel+ a polite live region (the misleadingprogressbarrole, which exposed no value, is dropped).
0.0.9
Minor Changes
-
#272
4330d0cThanks @rollsroyc3! - [PromptBar] Add label-override props for every voice/send control.sendLabel(default"Send"),stopLabel(default"Stop"),startVoiceLabel(default"Start voice input"),acceptVoiceLabel(default"Accept voice input"), andcancelVoiceLabel(default"Cancel voice input") mirror the existinglisteningLabel/transcribingLabelpattern — the kit has no i18n layer of its own, so a localized host now has an override for every accessible name PromptBar renders, not just two of them. Found while an early adopter’s chat input (with translated en/es/fr labels) swapped onto PromptBar and lost localization on these five controls. -
#275
7c06845Thanks @rollsroyc3! - [PromptBar] Reflow to a stacked layout on any draft, matching the webPromptInput. An empty editor stays a compact inline row ([text] [mic] [send]); with content, the editor moves onto its own row above a right-aligned[mic] [send]row. Driven byvalue— no new prop, no API change. Note: the bar is taller once there’s a draft (its height was already dynamic; this adds a step at the first character), so account for it in any fixed-offset /KeyboardAvoidingViewpositioning. The transition is not yet animated (LayoutAnimationis unreliable under Fabric; a reanimated-based follow-up is tracked).
0.0.8
Minor Changes
-
#270
a2655d6Thanks @rollsroyc3! - [PromptBar] Add voice-capture states.onStartVoicealready surfaced a mic; the host can now drive a controlledvoiceState("idle" | "listening" | "transcribing") so the bar renders the full voice flow, not just the mic."listening"swaps the editor for a discard / live level-meter (audioLevel) / accept row (onCancelVoice/onAcceptVoice);"transcribing"shows a busy row with the interimtranscript. Still transport-agnostic — the host owns the recorder/STT. This unblocks consumers whose chat input drives on-device speech-to-text from adopting PromptBar without regressing voice. Both user-facing strings are overridable for localization:transcribingLabel(default"Transcribing…"— the interim-transcript fallback and the row’s accessible label) andlisteningLabel(default"Recording"— the polite live-region status announced while capturing).
Patch Changes
-
#269
5dcb3fcThanks @rollsroyc3! - [Card] Render the card border token. ANV-5318 flattened Card to a bordered, no-shadow surface and thecomponent.card.bordertoken was added, butCard.styles.tsnever applied it — so the card had no edge and was invisible on a same-color background (its fill is the standard neutral background). The border is now drawn in every state. Upgrade note:borderWidthparticipates in RN layout, so this is a visual and layout change — the card grows by2 × border.width(or its content box shrinks by the same), and any consumer who wrappedCardin their own bordered surface to work around the missing edge will now see a double border. If that’s you, remove your own wrapper.
0.0.7
Minor Changes
- #252
6656ed9Thanks @rollsroyc3! - [AgentMessage, UserMessage, Card, ActionLog] Adopt theCartoTelemetryProvidertelemetry seam. Each gains an optionalanalyticsId; when it’s set and a provider is mounted, the component emits aCartoInteractionEventbefore its own handler runs —AgentMessage/UserMessagetoolbar actions emitpresswithmeta.action(copy|like|dislike|retry),Card’s button variant emitspress, andActionLogemitstogglefor its steps and per-step-details disclosures withmeta.section(steps|details),meta.expanded, and — fordetails—meta.stepIdidentifying which step was toggled. AddstoggletoCartoInteractionTypeandAgentMessage/UserMessage/Card/ActionLogtoCartoInteractionComponent. Fully back-compatible: untagged, or with no provider, these components emit nothing and pay zero cost.
0.0.6
Minor Changes
-
#249
4db26fbThanks @rollsroyc3! - [Card] AddCardcomponent — a static or button-interactive surface. Content flows through thecontentprop (a bare string is wrapped inTextfor you), with apaddingscale (snug|base|relaxed, defaultbase). PassingonPress+labelmakes the whole card a button, optionallyisDisabled. -
#247
afa28d2Thanks @jonathanackerson! - [Button, CartoTelemetryProvider, Dialog, PromptBar, SuggestionList] Add an opt-in telemetry seam. Wrap an app (or subtree) in the newCartoTelemetryProviderwith anonInteractionhandler and instrumented components emit a semanticCartoInteractionEvent(component+type+ optional structuralmeta) on each interaction — no per-component handler wrapping. The context value is stable for the provider’s lifetime (the handler is read through a ref), so an inlineonInteractionnever re-renders instrumented consumers. A new optionalanalyticsIdprop tags an instance and threads throughButton(press),SuggestionList(select,meta.index),PromptBar(submit,meta.length), andDialog(pressfor the confirm action;dismissfor the X, cancel, or scrim); a component emits only when tagged and a provider is mounted, so Carto’s own internal chrome stays silent. Fully back-compatible: with no provider, components emit nothing and pay zero cost. Privacy:metacarries structural values only (an index, a length) — never typed text or user content. Also exports theCartoInteractionComponent,CartoInteractionEvent,CartoInteractionHandler,CartoInteractionMeta, andCartoInteractionTypetypes. -
#249
4db26fbThanks @rollsroyc3! - [ActionLog] AddActionLogcomponent — a collapsible vertical timeline of agent steps. Steps are supplied as a typedstepsarray (id,title, optionaldescription,status, anddetails), each rendering a status marker (not-started|in-progress|success|error) and an optional per-step details disclosure. Expansion is uncontrolled by default (defaultExpanded) or controllable viaexpanded+onExpandedChange.
Patch Changes
- Updated dependencies [
ced2173,ced2173,ced2173,ced2173,ced2173,ced2173]:- @servicetitan/carto-tokens@0.3.0
0.0.5
Patch Changes
- Updated dependencies [
15a46a4]:- @servicetitan/carto-tokens@0.2.4
0.0.4
Minor Changes
-
#226
875b0c5Thanks @rollsroyc3! - [MessageToolbar] Fill the selected feedback thumb so the chosen state reads visually (parity with the web filled-thumb variant). lucide ships no filled thumb glyph, so the outline glyph is filled with the ghostButton’s resting foreground — the same color it paints the icon stroke — yielding a clean solid thumb; the unselected thumb stays outline. The accessible label (“Remove like”/“Remove dislike”) still conveys the state. Surfaces throughAgentMessage(currentFeedback). -
#227
f05b9ebThanks @rollsroyc3! - [PromptBar] Add a React Native chat prompt bar — the text-first slice of the webPromptBar: a controlled, auto-growing editor (value/onChange, grows tomaxRowsthen scrolls) with a send action (onSend, gated bycanSendwhich defaults to any non-whitespace draft) and an optional fine-printdisclaimer. When a response is streaming in (isSending), sending is withheld; wireonStoptoo and the send button becomes a Stop that cancels the in-flight response. WireonStartVoiceto surface a mic button that hands voice capture off to the host (the kit owns no recorder/STT); the mic is withheld whiledisabledorisSending. Controls are vertically centered so a single line of text sits level with the buttons. Prop names mirror the web component so attachments / the transcription waveform can be added later without reshaping the API; send is button-driven (Enter inserts a newline on mobile keyboards).
0.0.3
Minor Changes
- #223
dbdc1fdThanks @rollsroyc3! - [Text] Add boundedcolor(semantic foreground role) andalignprops. RN has no CSS color inheritance like the webText, socolor(standard | subtle | informative | critical | inverse, mapped tosemantic.foreground.color) is the constrained way to pick a non-default foreground without a rawstyle;align(start | center | end) covers multi-line alignment.
0.0.2
Minor Changes
-
#221
63b6e32Thanks @rollsroyc3! - [AgentThinking] Add a React Native agent thinking indicator (animated Atlas logo + optional status label) -
#213
d0df353Thanks @rollsroyc3! - [AtlasLogo] Add a React Native Atlas logo component -
#218
a28f694Thanks @rollsroyc3! - [Dialog] Add a React Native modal dialog component -
#219
43acfc6Thanks @rollsroyc3! - [UserMessage, AgentMessage] Add React Native chat message components with a shared message toolbar (copy + retry / copy + feedback) -
#214
477e0dcThanks @rollsroyc3! - [Suggestion] Add React NativeSuggestionandSuggestionListcomponents -
#220
9295949Thanks @rollsroyc3! - [Text] Add a React Native typographic Text component (headline / body / eyebrow)
0.0.1
Minor Changes
-
#203
b4a6c06Thanks @ericag1985! - AddCartoThemeProvider+useCartoThemeand drive component styling from@servicetitan/carto-tokens’ React Nativelight/darkbundles —Buttonnow renders real token values (colors, spacing, radius, typography, elevation) instead of placeholders. -
#201
36f3b3eThanks @ericag1985! - [Button] Add the initial@servicetitan/anvil2-rnReact Native component kit with aButtoncomponent (primary,secondary,ghost,dangervariants;medium,small,xsmallsizes; icon and icon-only support).