Naming, taxonomy, component rules, and extraction status live in
component-library.md and companion docs.
Figma components, every state.
Variant x state boards for Figma component sets, with the interaction contract under each board. Canonical source now lives in standalone HTML/CSS components; React references are legacy context while the demo app is paused.
Standalone HTML/CSS first
The component library is a framework-free working surface. It is designed for designer-friendly preview, Figma import, and later engineering extraction.
components/<Name>/<Name>.html and its own local
.css. Overview owners can share CSS, but directly placeable variants
also get their own source folders such as ButtonPrimary or
MetricCard. Shared decisions belong in
components/tokens.css.
components/html-component-preview.html imports every individual
component into one browsable HTML preview, so reviewers can test states without
opening each file manually.
demo/pulse-react/src can still explain older behavior, but it is not
the current implementation target and should not block HTML/CSS updates.
tokens.css.
Ship the owner board and any directly placeable slice files, add them to
components/html-component-preview.html, then mirror stable states
here for Figma handoff.
Mark unfinished items as Needs extraction,
Token candidate, or Interaction pending instead of
letting one-off controls spread.
Reusable pieces are maintained as standalone component files with shared tokens, states, and interaction behavior.
html-component-preview.html is the browsable review surface for
every source component and its state slices.
This file mirrors stable component states for Figma iteration. It is not the engineering source.
Category coverage
Use mature systems as a category checklist only. Pulse keeps its own tonal hierarchy, spacing-led grouping, and calm vertical reading rhythm.
Data entry
Field owns Input, Textarea, Select, and CheckboxField basics; DateRangeControl owns calendar ranges. Normalize Combobox, Radio, Switch, single-value DateTimeField, TagInput, and Upload before more page-local forms appear.
Priority / HighFeedback / overlays
Modal, Popover, ConfirmBar, and FeedbackState are sourced; unify Toast, Banner, Drawer, Tooltip, and page-level confirmations next.
Priority / HighData display
DataList, MetricBlock, ChartShell, Timeline, and MediaPreview now source rows, metric atoms, chart framing, event rhythm, and media frames; focus next on page adoption and chart-specific specimens.
Priority / HighField
Figma: Component/Field - labelled native controls for dense operational
forms. Source: components/Field/Field.html. Business surfaces own layout;
Field owns label, help/error, focus, disabled, readonly, and native control styling.
Segmented tabs
Figma: Component/SegmentedTabs - 2-5 items. Local filters only, inside
the module toolbar. One label spec across every variant: 13px / 600; variants may
differ in width, padding, and thumb - never in type.
Pills and badges
Metadata, never decoration. Tags are static; platform badges are fixed icon squares.
Source: components/PlatformBadge/PlatformBadge.html.
Status and severity
Figma: Component/StatusPill. Status tags come in two outlined sizes —
default for cards/heros/popovers and compact for dense rows — on one outlined pill
scale: green means positive/active/live/approved, blue means suggested action or
scheduled, amber means risk/negative/on hold, cyan means ready, purple means in
progress. Generation status uses the same compact, dot-led process ladder: queued
gray, scheduled blue, in progress purple, ready cyan, live/published green, and
blocked/failed/on hold amber. Within StatusPill, red is reserved for declining data.
Source: components/StatusPill/StatusPill.html.
Content and data cards
Surface rule: cards should clarify a real object or interaction, not become the default way to divide every layer. Prefer tone, spacing, and vertical reading rhythm before adding another framed surface.
Figma: Component/Card -white, ink, action, metric, media. One ink anchor
per page; zero or one saturated action card.
Widen the range or add campaign posts.
Add a product frame or creator clip.
CommandSummary + CampaignRow
Figma: Pattern/CommandSummary, Pattern/CampaignRow,
Component/PostChip. CommandSummary sets the single next move before the
campaign row/pipeline detail. Sources: components/CommandSummary/ and
components/PostChip/PostChip.html.
Prove the look in real life before asking shoppers to buy.
Prove the look in real life before asking shoppers to buy.
components/NodeGenerationMap/NodeGenerationMap.html.
components/PlatformPreview/PlatformPreview.html.
CalendarPostBlock
Calendar scheduling block with StatusPill, PlatformBadge, compact slot states, drag
state, and drop preview. Source:
components/CalendarPostBlock/CalendarPostBlock.html.
SignalRow and TrendCard
Queue rows carry severity; trend cards carry a heat score ladder. Source:
components/SignalRow/SignalRow.html.
Report module
Sentiment header, KPI strip, channel mix, readiness donut, and callouts -restrained data surfaces, cyan only for the active series.
ConfirmBar, popover, and modal
Inline decisions show their motion states; Calendar Create/Detail popovers anchor to their trigger; confirm dialogs sit on a scrim.
Report frequency
How often should the daily report regenerate?
Shell and navigation
SectionHeader with handoff and Sidebar rail states. Sidebar buckets are Brand, Workspace, and Recent chat; the full chat thread remains an AI panel component.
Action Items
Posts to review, publish, or route today.
#ai.
AI panel states
Figma: Pattern/AIPanel. A floating inset card on the right that
compresses the main view. Source: components/AIPanel/AIPanel.html. The
assistant has no separate "Ask Pulse" launcher — the dialog is the assistant itself
(you message Pulse directly; app entry is the dock + Sidebar recent chat).
Icon set
components/Icon - 16px frames, 1.6 stroke, rounded joins, currentColor. Decorative by default; aria-label opt-in.