ArcaneJaspr Codex
Documentation
ArcaneTimeline
Display chronological events with multiple layout options
Live Demo
Layout
Order Placed Jan 15, 2024
Your order #12345 has been received
Processing Jan 16, 2024
Items are being prepared for shipping
Shipped Jan 17, 2024
Your package is on its way
Delivered Jan 19, 2024
Expected delivery

ArcaneTimeline#

A timeline component for displaying chronological events or process steps. Supports vertical, horizontal, and alternating layouts.

Aliases: ArcaneTimeline, ATimeline

Basic Usage#

ArcaneTimeline(
  items: [
    ArcaneTimelineItem(
      title: 'Step 1',
      description: 'First step completed',
      status: TimelineStatus.complete,
    ),
    ArcaneTimelineItem(
      title: 'Step 2',
      description: 'Currently in progress',
      status: TimelineStatus.current,
    ),
    ArcaneTimelineItem(
      title: 'Step 3',
      description: 'Coming soon',
      status: TimelineStatus.pending,
    ),
  ],
)

Properties#

PropertyTypeDefaultDescription
items List<ArcaneTimelineItem> required Timeline items
layout TimelineLayout vertical Layout type
size TimelineSize md Component size
showConnectors bool true Show connector lines

ArcaneTimelineItem Properties#

PropertyTypeDefaultDescription
titleStringrequiredItem title
subtitle String? null Subtitle text
description String? null Description text
date String? null Date/time string
icon Component? null Custom icon
status TimelineStatus default_ Item status
content Component? null Custom content

Layouts#

Vertical (Default)#

ArcaneTimeline.vertical(
  items: [
    ArcaneTimelineItem(
      title: 'Order Placed',
      description: 'Your order has been received',
      date: 'Jan 15, 2024',
      status: TimelineStatus.complete,
    ),
    ArcaneTimelineItem(
      title: 'Processing',
      description: 'Items are being prepared',
      date: 'Jan 16, 2024',
      status: TimelineStatus.current,
    ),
    ArcaneTimelineItem(
      title: 'Shipped',
      description: 'Package will be sent',
      status: TimelineStatus.pending,
    ),
  ],
)

Horizontal#

ArcaneTimeline.horizontal(
  items: [
    ArcaneTimelineItem(
      title: 'Q1 2024',
      description: 'Planning phase',
      status: TimelineStatus.complete,
    ),
    ArcaneTimelineItem(
      title: 'Q2 2024',
      description: 'Development',
      status: TimelineStatus.current,
    ),
    ArcaneTimelineItem(
      title: 'Q3 2024',
      description: 'Testing',
      status: TimelineStatus.pending,
    ),
    ArcaneTimelineItem(
      title: 'Q4 2024',
      description: 'Launch',
      status: TimelineStatus.pending,
    ),
  ],
)

Alternating#

Content alternates between left and right sides:

ArcaneTimeline.alternating(
  items: [
    ArcaneTimelineItem(
      title: 'Project Started',
      description: 'Initial planning and setup',
      date: 'Jan 1, 2024',
      status: TimelineStatus.complete,
    ),
    ArcaneTimelineItem(
      title: 'Design Complete',
      description: 'UI/UX finalized',
      date: 'Jan 15, 2024',
      status: TimelineStatus.complete,
    ),
    ArcaneTimelineItem(
      title: 'Development',
      description: 'Building the application',
      date: 'Feb 1, 2024',
      status: TimelineStatus.current,
    ),
    ArcaneTimelineItem(
      title: 'Launch',
      description: 'Go live',
      date: 'Mar 1, 2024',
      status: TimelineStatus.pending,
    ),
  ],
)

Status Types#

// Default (neutral)
ArcaneTimelineItem(title: 'Event', status: TimelineStatus.default_)

// Complete (green checkmark)
ArcaneTimelineItem(title: 'Done', status: TimelineStatus.complete)

// Current (accent color, pulsing dot)
ArcaneTimelineItem(title: 'In Progress', status: TimelineStatus.current)

// Pending (muted, empty)
ArcaneTimelineItem(title: 'Upcoming', status: TimelineStatus.pending)

// Error (red X)
ArcaneTimelineItem(title: 'Failed', status: TimelineStatus.error)

Sizes#

// Small
ArcaneTimeline(size: TimelineSize.sm, items: [...])

// Medium (default)
ArcaneTimeline(size: TimelineSize.md, items: [...])

// Large
ArcaneTimeline(size: TimelineSize.lg, items: [...])

Custom Icons#

ArcaneTimeline(
  items: [
    ArcaneTimelineItem(
      title: 'Order Confirmed',
      icon: ArcaneIcon.check(),
      status: TimelineStatus.complete,
    ),
    ArcaneTimelineItem(
      title: 'Shipped',
      icon: ArcaneIcon.truck(),
      status: TimelineStatus.current,
    ),
    ArcaneTimelineItem(
      title: 'Delivered',
      icon: ArcaneIcon.home(),
      status: TimelineStatus.pending,
    ),
  ],
)

With Custom Content#

ArcaneTimeline(
  items: [
    ArcaneTimelineItem(
      title: 'v2.0.0 Released',
      date: 'Jan 20, 2024',
      content: ArcaneCard(
        child: ArcaneColumn(
          gapSize: Gap.sm,
          children: [
            ArcaneBadge('Major Release', style: BadgeStyle.success),
            ArcaneText('Complete redesign with new components'),
          ],
        ),
      ),
    ),
  ],
)

Examples#

Order Tracking#

ArcaneCard(
  child: ArcaneColumn(
    gapSize: Gap.md,
    children: [
      ArcaneHeading(text: 'Order Status'),
      ArcaneTimeline(
        items: [
          ArcaneTimelineItem(
            title: 'Order Confirmed',
            description: 'Order #12345 confirmed',
            date: 'Jan 15, 10:30 AM',
            status: TimelineStatus.complete,
          ),
          ArcaneTimelineItem(
            title: 'Processing',
            description: 'Preparing your items',
            date: 'Jan 15, 11:00 AM',
            status: TimelineStatus.complete,
          ),
          ArcaneTimelineItem(
            title: 'Shipped',
            description: 'Package on its way',
            date: 'Jan 16, 2:00 PM',
            status: TimelineStatus.current,
          ),
          ArcaneTimelineItem(
            title: 'Delivered',
            description: 'Expected Jan 18',
            status: TimelineStatus.pending,
          ),
        ],
      ),
    ],
  ),
)

Activity Feed#

ArcaneTimeline(
  items: [
    ArcaneTimelineItem(
      title: 'John updated the document',
      date: '5 minutes ago',
      icon: ArcaneAvatar(initials: 'JD', size: AvatarSize.xs),
    ),
    ArcaneTimelineItem(
      title: 'Sarah commented',
      date: '1 hour ago',
      icon: ArcaneAvatar(initials: 'SA', size: AvatarSize.xs),
    ),
    ArcaneTimelineItem(
      title: 'File uploaded',
      date: '2 hours ago',
      icon: ArcaneIcon.file(),
    ),
  ],
)