Skip to content

Pulse Line

A live line whose newest point is the only hot thing on screen.

$149 once · every Pro piece

Customize

Points arrive on an interval and the line scrolls left under a head that never leaves the plot: in glide it runs at the stream’s own pace about one point behind the newest, like a seismograph; in step it eases one point left as each lands. The y scale eases and axis ticks fade rather than jump, and the head breathes like a pilot light while points keep coming and goes ash and still when they stop. The newest stretch carries a heat trail that cools with age. A crosshair glides between points under the pointer, a finger or the arrow keys, reaching every point from the first to the newest; while you read, the picture holds on a real point and catches up in one swell when you let go, and the header rolls to the value and how long ago it was. Optional extras: dashed min, max, average and median lines that either glide with the visible window or ease once per point, with pills that never overlap; a threshold past which the line runs hot over a hatched zone, draggable along the axis or with the arrow keys; a stream that holds while you read it; a floating tooltip; dotted or hatched backgrounds; and loading and empty states. It pauses off screen and in hidden tabs and steps without motion under reduced motion.

Install

npx shadcn@latest add @obsyde/pulse-line

Needs your licence key · Get Pro

Usage

Import it from where the CLI puts it, or copy the files below by hand.

import { PulseLine } from '@/components/obsyde/ember/pulse-line/PulseLine';

export function Example() {
  return (
    <PulseLine live />
  );
}

Files

What you get with Pro: plain React, TypeScript and CSS, with no dependencies.

  • ember/pulse-line/PulseLine.tsxcomponent
  • ember/pulse-line/pulse-line.cssstyles
  • ember/pulse-line/PulseLineDemo.tsxdemo
  • ember/viz-kit/viz-kit.cssshared
  • ember/viz-kit/Tooltip.tsxshared
  • ember/viz-kit/focus.tsshared
  • ember/viz-kit/patterns.tsxshared
  • ember/viz-kit/roll.tsshared
  • ember/shared/rolling-number.cssshared
  • ember/shared/spring.tsshared
  • ember/shared/accent.tsshared
  • ember/viz-kit/scale.tsshared
  • ember/viz-kit/motion.tsshared
  • ember/viz-kit/chart.tsxshared
  • ember/shared/ember.cssshared
  • ember/viz-kit/touch.tsshared
  • ember/viz-kit/keyboard.tsshared
  • ember/viz-kit/size.tsshared
  • ember/viz-kit/States.tsxshared
  • ember/viz-kit/shape.tsshared
  • ember/viz-kit/series.tsxshared
  • ember/viz-kit/Grid.tsxshared
  • ember/viz-kit/Axis.tsxshared
  • ember/viz-kit/annotations.tsxshared

API

PropTypeDefault
accentAccent'ember' | 'volt' | 'arc''ember'
labelLabelstring'Signal'
unitUnitstring—
liveLivebooleantrue
intervalMsInterval (ms)number1000
motionMotion'glide' | 'step''glide'
heatHeat trailbooleantrue
fillFill'gradient' | 'none''gradient'
refLinesReference lines'none' | 'min-max' | 'avg' | 'median' | 'all''none'
refMotionReference motion'fixed' | 'live''fixed'
thresholdThreshold'none' | 'above' | 'below''none'
thresholdValueThreshold valuenumber45
pauseOnScrubPause on scrubbooleanfalse
showAxisAxisbooleantrue
tooltipTooltip'none' | 'panel''none'
crosshairCrosshair'solid' | 'dashed' | 'gradient' | 'none''solid'
dotsDots'halo' | 'ring' | 'none''halo'
backgroundBackground'grid' | 'dots' | 'hatch' | 'none''grid'
curveCurve'monotone' | 'linear' | 'catmull' | 'step''monotone'
revealReveal'sweep' | 'cool' | 'rise' | 'fade' | 'none''sweep'
statusStatus'ready' | 'loading' | 'empty''ready'
heightHeightnumber240
pointsPointsnumber60
seedSeednumber7