ComponentsData display

Result Card

Shows something an agent made or did in chat. It names the apps used, shows a live status, and offers one action, such as opening the result in a canvas. ResultAppActions lists what each app did.

KindState

Investor pitch

FileSaved in Google Slides

Local sample. Nothing is opened or sent.

Usage

A saved presentationTSX
import { ResultCard } from "@tulipfarm/sprout/result-card";

<ResultCard
  title="Investor pitch"
  kind="File"
  status="Saved in Google Slides"
  state="success"
  apps={[
    {
      brand: "google-slides",
      name: "Google Slides",
      actions: [
        { label: "Created the investor pitch presentation", state: "completed" },
        { label: "Added the two pitch slides", state: "completed" },
      ],
    },
  ]}
  action={{ label: "View slides", onClick: openInCanvas }}
/>

  • kind: "File", "Plan","Workflow", "Action","Calendar", "Table","Activity", "Agent", or"Skill". It shows before the status and names the card “Kind: title”.
  • status: short text, such as “Waiting for review” or “Action not confirmed”.
  • action: one outline button. It sits beside the text when the card is at least 28rem wide, and below it when narrower. Passdisabled to turn it off.
  • icon: shown in a tile when apps is empty, such as a file, table, plan, or workflow icon.
  • children: extra content under the header, such as plan progress and controls.

States

StatesThe same file result through each state

Default

Investor pitch

FileReady for review

Loading

Investor pitch

FileChecking save status

Running

Investor pitch

FileSaving to Google Slides

Unavailable

Investor pitch

FileAccess unavailable

Error

Investor pitch

FileSave not confirmed

Success

Investor pitch

FileSaved in Google Slides

Local sample. Nothing is opened or sent.

  • "default": a muted status.
  • "loading": a spinner and aria-busy; the action is disabled while the card checks.
  • "running": a spinner and aria-busy; the action stays available.
  • "disabled": the action and app tiles are disabled.
  • "error": a red status with a warning icon.
  • "success": a green status with a check.

Apps used

Apps usedHover or focus a tile, then press Enter, to list its actions

One app

Investor pitch

FileSaved in Google Slides

Two apps

Prepare the investor update

PlanPresentation saved and email sent

Five apps fold into +3

Weekly team update

WorkflowUpdate posted and emailed

Repeated app merges into one tile

Supplier follow-up

Activity2 of 2 actions completed

Apps without a brand

Ticket triage

ActivitySome outcomes are unconfirmed

No recorded actions

GitHub changes

ActionPrivate details unavailable

No apps, icon tile

Supplier price sheet.xlsx

FileSaved in Files

No apps, no icon, no action

Quarterly planning notes with a long title that wraps onto a second line in narrow chats

FileSaved in Files

Local sample. Nothing is opened or sent.

Each app is a tile. Entries with the same brand (or the same name when brand is null) merge into one tile. Two tiles show; the rest fold into a “+N” tile. A tile opens its actions after 800ms of hover, or on click, Enter, or Space. An app with brand: null shows a plug icon.

Actions by app

Actions by appResultAppActions in a canvas panel, and without app names

Actions by app

Google Slides

  • Completed:Created the investor pitch presentation
  • Pending:Send the investor update email
  • In progress:Saving the weekly update document
  • Failed:Post to #investors

Google Sheets

  • Unconfirmed:Append rows to Q4 forecast
  • Blocked:Reply in the supplier thread
  • Cancelled:Delete the draft event
  • Skipped:Notify the on-call channel

Connected apps

No action details were recorded.

Slack actions

  • Completed:Posted the weekly update
  • Pending:Reply to a thread
Detail panelTSX
import { ResultAppActions } from "@tulipfarm/sprout/result-card";

<h3>Actions by app</h3>
<ResultAppActions apps={result.apps} />

// One app, without its name above the list
<ResultAppActions apps={[slackApp]} showAppNames={false} />

A check marks "completed". Other states are spelled out: “Pending:”, “In progress:”, “Failed:” (red), “Unconfirmed:”, “Blocked:”, “Cancelled:”, and “Skipped:”. An app with no actions says “No action details were recorded.”

In TulipFarm

Each sample below uses local data shaped like a TulipFarm screen. Pick an outcome to see how its status, state, and app actions change.

Slack actionagents/slack-action · chat card and review canvas

Chat card

Slack reply

ActionWaiting for review

Review canvas, no action

Slack reply

ActionWaiting for review

Destination #ops-weekly, thread 1718035200.000100 · Posts as your Slack account.

Local sample. Nothing is opened or sent.

Atlassian write reviewatlassian/operations · no action button

Create issue on Acme Jira

ActionWaiting for review

These saved fields cannot be edited. Approval authorizes only this exact action.

Recorded activitychat/activity-result-card · inline details without a canvas

Recorded activity

Activity2 of 3 actions completed · Needs attention
Calendar readchat/calendar-canvas

Calendar read · 3 events

CalendarSaved read · Not a pending action

Calendar result unavailable

CalendarResult unavailable

Local sample. Nothing is opened or sent.

Created filechat/file-mentions

Price comparison.xlsx

FileSaved in Files

Local sample. Nothing is opened or sent.

GitHub changeschat/github-batches

GitHub changes

Action1 of 3 actions confirmed

Local sample. Nothing is opened or sent.

Plan referencechat/plans · children for progress and controls

Prepare the board summary

PlanWorking

2 of 4 tasks done

Local sample. Nothing is opened or sent.

Table resultschat/records-canvas

Supplier contacts

Table12 rows returned.

Supplier contacts

Table1 row added and 3 rows updated in Supplier contacts.

Local sample. Nothing is opened or sent.

Results in chat with a detail panelchat/result-cards-mock

1 app

Investor pitch

FileSaved in Google Slides

2 apps

Prepare the investor update

PlanPresentation saved and email sent

5 apps

Weekly team update

WorkflowUpdate posted and emailed

Open a result to see its actions by app.

Workflow referenceschat/workflow-canvas

Weekly team update

WorkflowSaved definition · Not a completed run

Weekly team update

WorkflowDraft · Not saved yet

Weekly team update

WorkflowRun details available

Local sample. Nothing is opened or sent.

Google actiongoogle/result-card · Action and Calendar kinds

Investor pitch

ActionWaiting for review

Local sample. Nothing is opened or sent.

Workflow viewer headerworkflows/workflow-viewer · no action, step states

Weekly team update

WorkflowRun in progress

Revision 4 · Definition only. A saved workflow does not confirm a run or delivery.

Accessibility

The card is a section named “Kind: title”, with the title as anh3. The status is a live status, so changes are announced. Busy cards set aria-busy. App tiles sit in a group named “Apps used”; each is a button named “Slack actions” or “3 more apps”. Opening one by keyboard moves focus into the panel; Escape closes it and returns focus. Icons are hidden from assistive tech, and completed actions read “Completed:”.

On touch screens the action button and tiles grow to 44px. Status colors fade in 180ms; with reduced motion the fade and spinner stop.

Theme tokens

The card uses --sprout-surface,--sprout-input for its border, --sprout-muted,--sprout-success, and --sprout-danger. App tiles use the Brand Icon tokens.