ComponentUpdated in v15

Timeline

A list of events in order, vertical or horizontal.

Installation

Import the class, and @use the entry point in your global styles: without it the component renders unstyled.

import { Component } from '@angular/core';
import { WrTimeline, WrTimelineItem } from 'ngwr/timeline';

@Component({ imports: [WrTimeline, WrTimelineItem] })
export class MyComponent {}

Vertical

<wr-timeline>
  <wr-timeline-item title="Created" time="2026-05-01">Initial commit.</wr-timeline-item>
  <wr-timeline-item title="Archived" time="2026-05-02" color="neutral">Branch deleted.</wr-timeline-item>
  <wr-timeline-item title="Deployed" time="2026-05-03" color="success">Live.</wr-timeline-item>
</wr-timeline>
2026-05-01
Created
Initial commit.
2026-05-02
Reviewed
Three changes requested.
2026-05-03
Merged
Squashed and merged.
2026-05-04
Archived
Branch deleted.
2026-05-05
Deployed
Live in production.

Horizontal

<wr-timeline orientation="horizontal">
  <wr-timeline-item title="Plan" time="Q1">Scope agreed.</wr-timeline-item>
  <wr-timeline-item title="Ship" time="Q3" color="success">Released.</wr-timeline-item>
</wr-timeline>
Q1
Plan
Scope agreed.
Q2
Build
In progress.
Q3
Ship
Released.

API

<wr-timeline> inputs.

NameDescriptionTypeDefault
orientationLayout direction.'vertical' | 'horizontal''vertical'

Item API

<wr-timeline-item> inputs.

NameDescriptionTypeDefault
titleBold event title.string''
timeMuted timestamp shown above the title.string''
colorDot colour; each has its own shape too. neutral is a hollow ring.'primary' | 'success' | 'warning' | 'danger' | 'neutral''primary'

CSS variables

Set these on the component's selector or a wrapper, not on :root: the defaults are declared on ngwr/timeline's own element.

VariableDefaultDeclared on
--wr-timeline-font-familyvar(--wr-font-family-base).wr-timeline
--wr-timeline-gapvar(--wr-space-xl).wr-timeline +1 variant override
--wr-timeline-item-body-margin-topvar(--wr-space-sm).wr-timeline-item
--wr-timeline-item-connectorvar(--wr-border-base).wr-timeline-item
--wr-timeline-item-content-font-sizevar(--wr-text-sm).wr-timeline-item__content
--wr-timeline-item-content-line-heightvar(--wr-leading-relaxed).wr-timeline-item__content
--wr-timeline-item-content-margin-topvar(--wr-space-xs).wr-timeline-item__content
--wr-timeline-item-gapvar(--wr-space-md).wr-timeline-item
--wr-timeline-item-padding-bottomvar(--wr-space-sm).wr-timeline-item
--wr-timeline-item-time-font-sizevar(--wr-text-xs).wr-timeline-item__time
--wr-timeline-item-time-font-weightvar(--wr-font-weight-medium).wr-timeline-item__time
--wr-timeline-item-time-line-heightvar(--wr-text-xs-leading).wr-timeline-item__time
--wr-timeline-item-time-margin-bottomvar(--wr-space-xs).wr-timeline-item__time
--wr-timeline-item-title-font-sizevar(--wr-text-sm).wr-timeline-item__title
--wr-timeline-item-title-font-weightvar(--wr-font-weight-semibold).wr-timeline-item__title
--wr-timeline-item-title-line-heightvar(--wr-leading-snug).wr-timeline-item__title

See also