Skip to content

Company

Sections about the people and the answers behind the product: the story so far, the team, the open roles and an FAQ.

Installation & usage

npx @youj/cli add marketing-about

Also installs button, counter, icon-compass, icon-heart, icon-leaf, icon-lightbulb, icon-play, icon-refresh, reveal, stagger, use-controllable-state, use-visible, youj-core, youj-presets, youj-ui-core.

The CLI copies the block to blocks/marketing/about.tsx with every component it uses, so it’s yours to edit.

Every prop is optional and falls back to the demo, so it renders as you see it until you pass your own. Give it your data, rewrite or translate its strings through copy, and connect its actions:

about-view.tsx
'use client'

import { About, type AboutProps } from '@/blocks/marketing/about'

export function AboutView({ milestones, metrics, values }: Pick<AboutProps, 'milestones' | 'metrics' | 'values'>) {
  return (
    <About
      milestones={milestones}
      metrics={metrics}
      values={values}
      copy={{ eyebrow: 'About us' }}
      onValueChange={(value) => {
        // your code
      }}
    />
  )
}

Reference

Props12 props, 3 types

Props

About props
PropType
themeThemeInput

Default: the theme around it. The showcase passes the chosen preset here.

–
embeddedboolean

A section inside another page: the host lays it out (no page background, section padding or max width).

default false

false
milestonesAboutMilestone[]

The story's chapters, oldest first; [] hides the timeline.

default the demo's seven years

the demo's seven years
metricsAboutMetric[]

The numbers the story is told in, each milestone giving its figure.

default people, teams and regions

people, teams and regions
valuesAboutValue[]

The values; [] hides the part.

default the demo's four

the demo's four
valuestring

The milestone shown (its id, or its label), controlled.

–
defaultValuestring

The milestone shown first, uncontrolled. Default: the first while the story plays, else the last.

–
onValueChange(value: string) => void

Called with the milestone's id when someone picks one or the story moves on.

–
autoAdvanceboolean

Play through the years once, in view.

default true

true
localestring

The locale the figures are written in. Default: the YoujProvider's.

–
copyPartial<AboutCopy>

Any of the block's strings, to rewrite or translate.

–
headingLevelHeadingLevel
123

The section heading's level; the parts' headings sit one below.

default 2

2

AboutMetric

AboutMetric props
PropType
idRequiredstring–
labelRequiredstring–
formatIntl.NumberFormatOptions

How the number is written (Intl.NumberFormatOptions).

–
suffixstring–
chartboolean

Draw this one as the growth line under the years. The first metric that says so is drawn; default the second.

–

AboutMilestone

AboutMilestone props
PropType
idstring

A stable id, the milestone's value. Default: its label.

–
labelRequiredstring

The year on the rail: "2021", "Today".

–
titleRequiredstring–
descriptionRequiredstring–
figuresRequiredRecord<string, number>

Each metric's value then, by the metric's id.

–

AboutValue

AboutValue props
PropType
titleRequiredstring–
descriptionRequiredstring–
iconReactNode

A 16px glyph beside its number.

–
Strings9 keys for copy

Strings

copy takes any of these keys; the rest keep their defaults. A key whose text holds a value (a count, a name) takes a function.

eyebrowmissiondescriptiontimelinemilestoneNamepauseplayreplayvaluesTitle
Built from4 components

Built from

Accessibilitylandmarks, headings, tabs, disclosures, live counts

Accessibility

Each section is a <section> named by its own heading (aria-labelledby); the heading is an h2 by default and headingLevel changes it, with every part's heading a level below.

About's years are a tab list: the arrows, Home and End move along the rail and pick a year, and its chapter is the tab panel. Each figure ends on the same text a screen reader gets, and the tour holds while keyboard focus is in it, with a button to pause, play or replay it. The growth line is decorative; the figures carry its meaning.

Team's people are articles named for them. The name is a disclosure button (aria-expanded) that pins the bio open, and Escape lets it go; a bio's links only join the tab order while it's open. Local times are written out in full for screen readers, with day or night named.

Careers' rows are single links named with the role, its place and its kind; the team tabs are a labeled group, the search a search field (Escape clears it) and the count a polite status.

FAQ is the kit's Accordion, so every question is a heading button that reports aria-expanded; answers stay in the page for find-in-page. The search is a search field whose count sits in it, Escape clears it and ↓ moves to the first question; the topics are a labeled group. “Was this helpful?” is a labeled group and its thanks a status. Links and buttons are real a and button elements with the kit's focus ring.