Skip to content
kerfjsGitHub

Following

Wraps a surface that follows another person's view. Scroll or Esc stops it.

SourcePackage @kerf-js/veneer

Preview

tsx
import { state } from '@kerf-js/core'import {  Card,  Following,  Heading,  PresenceStack,  Row,  Stack,  Text} from '@kerf-js/veneer'import type { Peer } from '@kerf-js/veneer'export function FollowingPeer() {  const peer = state<Peer | null>(null)  return (    <Stack gap="related">      <Row justify="between">        <Text subtle>          Press an avatar to follow them.        </Text>        <PresenceStack          peers={IN_CHANNEL}          following={peer.value?.id}          onFollow={(p) => (peer.value = p)}        />      </Row>      <Following        peer={peer.value}        onStop={() => (peer.value = null)}      >        <Card>          <Stack gap="related">            <Heading level={3}>Rollback runbook</Heading>            <Text subtle>              When a deploy fails its health check, roll              back first and read the logs second. A              failed deploy never blocks the next one.            </Text>          </Stack>        </Card>      </Following>    </Stack>  )}const PEOPLE = [  {    id: 'mara',    name: 'Mara Lindqvist',    email: 'mara@kerf.dev',    role: 'Owner',    team: 'Platform',    initials: 'ML',  },  {    id: 'jun',    name: 'Jun Tanaka',    email: 'jun@kerf.dev',    role: 'Admin',    team: 'Platform',    initials: 'JT',  },  {    id: 'priya',    name: 'Priya Raman',    email: 'priya@kerf.dev',    role: 'Member',    team: 'Web',    initials: 'PR',  },  {    id: 'tomas',    name: 'Tomás Oliveira',    email: 'tomas@kerf.dev',    role: 'Member',    team: 'Web',    initials: 'TO',  },  {    id: 'lena',    name: 'Lena Fischer',    email: 'lena@kerf.dev',    role: 'Member',    team: 'Data',    initials: 'LF',  },  {    id: 'noor',    name: 'Noor Haddad',    email: 'noor@kerf.dev',    role: 'Viewer',    team: 'Data',    initials: 'NH',  },  {    id: 'sam',    name: 'Sam Okafor',    email: 'sam@kerf.dev',    role: 'Member',    team: 'Mobile',    initials: 'SO',  },  {    id: 'ines',    name: 'Inés Vidal',    email: 'ines@kerf.dev',    role: 'Viewer',    team: 'Mobile',    initials: 'IV',  },]const PEERS: Peer[] = PEOPLE.map((p, i) => ({  id: p.id,  name: p.name,  color: i + 1,}))const [  MARA,  JUN,  PRIYA,  TOMAS,  LENA,  NOOR,  SAM,  INES,] = PEERS as [  Peer,  Peer,  Peer,  Peer,  Peer,  Peer,  Peer,  Peer,]const IN_CHANNEL = [SAM, JUN, LENA]

Installation

npm install @kerf-js/veneer

Usage

tsx
import { Following } from '@kerf-js/veneer'

Accessibility

Esc
Stops following

API Reference

PropTypeDefaultDescription
peerPeer | null—Who is followed, or null.
topnumber—Their viewport's top, from 0 to 1.
childrenunknown—What it contains.
EventTypeDefaultDescription
onStop() => void—Called on a scroll or Esc.

RelatedPresence stackAuto track