Files
Khalid Abdi 929bec8f31 feat: AI-added records save with placeholders + "Added by AI" provenance
Stop blocking AI imports/proposals on missing non-critical fields. Records
the chat agent drafts now save with safe placeholders, auto-generated file
numbers, and a source="ai" marker that surfaces an "Added by AI" badge so a
clinician can review/edit them later.

Backend:
- add `source` (manual|ai) column to patients/appointments/prescriptions
  (migration 0014) + canonical types, services, validation schemas
- relax patient/appointment validation: empty file number allowed, demographic
  + type/provider/initials fall back to placeholders (initials derived from name)
- patients.generateFileNumber() auto-assigns an MRN when one is missing
- proposeAppointment accepts a name when no file number resolves; AI commits +
  /api/ai/import stamp source="ai"

Frontend:
- `source` on Appointment/Patient/Prescription types; AI commits send source="ai"
- reusable <AiBadge> shown on the Patients table/detail and prescriptions list

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 19:27:17 +03:00

3.1 KiB

Terminal

Display streaming console output with full ANSI color support.

The Terminal component displays console output with ANSI color support, streaming indicators, and auto-scroll functionality.

See scripts/terminal.tsx for this example.

Installation

npx ai-elements@latest add terminal

Features

  • Full ANSI color support (256 colors, bold, italic, underline)
  • Streaming mode with cursor animation
  • Auto-scroll to latest output
  • Copy output to clipboard
  • Clear button support
  • Dark terminal theme

ANSI Support

The Terminal uses ansi-to-react to parse ANSI escape codes:

\x1b[32m✓\x1b[0m Success    # Green checkmark
\x1b[31m✗\x1b[0m Error      # Red X
\x1b[33mwarn\x1b[0m Warning   # Yellow text
\x1b[1mBold\x1b[0m           # Bold text

Examples

Basic Usage

See scripts/terminal-basic.tsx for this example.

Streaming Mode

See scripts/terminal-streaming.tsx for this example.

With Clear Button

See scripts/terminal-clear.tsx for this example.

Props

<Terminal />

Prop Type Default Description
output string - Terminal output text (supports ANSI codes).
isStreaming boolean false Show streaming indicator.
autoScroll boolean true Auto-scroll to bottom on new output.
onClear () => void - Callback to clear output (enables clear button).
className string - Additional CSS classes.

<TerminalCopyButton />

Prop Type Default Description
onCopy () => void - Callback after successful copy.
onError (error: Error) => void - Callback if copying fails.
timeout number 2000 Duration to show copied state (ms).

<TerminalHeader />

Prop Type Default Description
...props React.HTMLAttributes<HTMLDivElement> - Any other props are spread to the div element.

<TerminalTitle />

Prop Type Default Description
...props React.HTMLAttributes<HTMLDivElement> - Any other props are spread to the div element.

<TerminalStatus />

Prop Type Default Description
...props React.HTMLAttributes<HTMLDivElement> - Any other props are spread to the div element.

<TerminalActions />

Prop Type Default Description
...props React.HTMLAttributes<HTMLDivElement> - Any other props are spread to the div element.

<TerminalClearButton />

Prop Type Default Description
...props React.ComponentProps<typeof Button> - Any other props are spread to the Button component.

<TerminalContent />

Prop Type Default Description
...props React.HTMLAttributes<HTMLDivElement> - Any other props are spread to the div element.