Rost
← All components
component

Projects

One row in the project list: number, name, and industry, type and period on the right.

In codeContract: reviewGuidance: agreedContract on GitHubFigma 100:185

Hover, press or tab to one to see the other 3 states.

When to use

  • Used as a list of projects or items, one row each, where the row links to the details.

When not to use

  • A grid with pictures. That's Thumbs.
  • Long names. At 40px, a name past three words pushes the details off the row.

Behaviour

A number and a big name on the left, industry, type and period on the right, an arrow at the end, and a line underneath. On hover and press the content slides 16px right, the name goes green, and the line turns green (2px on hover). Locked puts a green lock after the name and turns the dots green, for work behind a password. Disabled fades everything but the badge, which says "Coming soon".

Accessibility

  • Element: an <a>. Disabled drops the href and sets aria-disabled="true".
  • Name: the name, then the details. Pass aria-label if that reads badly.
  • Keyboard: Tab to it, Enter opens it.
  • Focus: a 2px ring, 4px outside the row, on :focus-visible only.
  • Colour: Locked says it with the lock icon, which has its own text for screen readers.

Content

The name is the client or the product, as people know it. Details are a word or two each.

Props

PropTypeValuesDefault
numberslot
nameslot
industryslot
typeslot
periodslot
showNumberbooleantrue
showNamebooleantrue
showIndustrybooleantrue
showTypebooleantrue
showPeriodbooleantrue
showActionbooleantrue
showDividerbooleantrue
badgeslot

States: Default, Hover, Pressed, Focus, Disabled, Locked.

Where it's used

Where code differs on purpose

Values

Straight from the contract. Each value sits next to its token, because six tokens here all come out as #3a3a3a and the colour alone can't tell you which one is right.

Never changes

PartPropertyValueToken
rootdisplayflexlayout
rootalign-itemscenterlayout
rootpositionrelativelayout
rootgap40pxspacing/gap/2xlarge
rootpadding-top24pxspacing/gap/large
rootpadding-bottom24pxspacing/gap/large
rootpadding-left0pxspacing/gap/none
rootpadding-right0pxspacing/gap/none
roottext-decorationnoneFigma frame size
rootcolorinheritFigma frame size
rootoutlinenoneFigma frame size
rootwidth976pxFigma frame size
outlinepositionabsolutelayout
outlineleft0no token yet
outlineright0no token yet
outlinebottom0no token yet
outlinepointer-eventsnoneFigma frame size
leftdisplayflexlayout
leftalign-itemscenterlayout
leftflex1 0 0layout
leftmin-width1pxFigma frame size
leftgap40pxspacing/gap/2xlarge
leftwhite-spacenowraplayout
numberflex-shrink0layout
numberfont-family'General Sans Variable'font-family/base
numberfont-weight400typography/label/font-weight/regular
numberline-height14pxtypography/label/line-height
numberfont-size12pxtypography/label/font-size
numberletter-spacing0pxtypography/label/letter-spacing
textflex-shrink0layout
textfont-family'General Sans Variable'font-family/base
textfont-weight500typography/sub-headline/font-weight/medium
textline-height48pxtypography/sub-headline/line-height
textfont-size40pxtypography/sub-headline/font-size
textletter-spacing0pxtypography/sub-headline/letter-spacing
icons-lockdisplayblocklayout
icons-lockflex-shrink0layout
icons-lockwidth24pxspacing/size/small
icons-lockheight24pxspacing/size/small
icons-lockbackground#00d669project/lock/icon
icons-lockmaskurl(./icon-lock.svg) center / contain no-repeaton purpose: The icon file itself.
badgedisplayflexlayout
badgeflex-shrink0layout
rightdisplayflexlayout
rightalign-itemscenterlayout
rightjustify-contentflex-endlayout
rightalign-selfstretchlayout
rightgap16pxspacing/gap/medium
detailflex-shrink0layout
detailwhite-spacenowraplayout
detailfont-family'General Sans Variable'font-family/base
detailfont-weight400typography/label/font-weight/regular
detailline-height14pxtypography/label/line-height
detailfont-size12pxtypography/label/font-size
detailletter-spacing0pxtypography/label/letter-spacing
icons-dotdisplayflexlayout
icons-dotalign-itemscenterlayout
icons-dotjustify-contentcenterlayout
icons-dotflex-shrink0layout
icons-dotwidth12pxspacing/size/3xsmall
icons-dotheight12pxspacing/size/3xsmall
dotwidth3pxon purpose: The dot's own size inside the icon.
dotheight3pxon purpose: The dot's own size inside the icon.
dotborder-radius10000pxspacing/radius/full
dotbackground#747573project/default/icon
actionsdisplayflexlayout
actionsalign-itemscenterlayout
actionsjustify-contentcenterlayout
actionsflex-shrink0layout
actionswidth32pxspacing/size/small-medium
actionsheight32pxspacing/size/small-medium
actionsborder-radius10000pxspacing/radius/full
icons-arrowdisplayblocklayout
icons-arrowwidth16pxspacing/size/2xsmall
icons-arrowheight16pxspacing/size/2xsmall
icons-arrowbackground#00d669actions/borderless/default/icon
icons-arrowmaskurl(./icon-up-right.svg) center / contain no-repeaton purpose: The icon file itself.
focus-ringdisplaynonelayout
focus-ringpositionabsolutelayout
focus-ringinsetcalc(-1 * var(--spacing-gap-2xsmall))layout
focus-ringborder-stylesolidno token yet
focus-ringborder-width2pxspacing/outline/medium
focus-ringborder-color#999project/focus/focus-ring
focus-ringpointer-eventsnoneFigma frame size

Changes by variant

actions.opacity1
state=Disabled0.24opacity/gentle
detail.color6
state=Default#999project/default/sub-label
state=Hover#edededproject/hover/sub-label
state=Pressed#c2c7c3project/pressed/sub-label
state=Focus#999project/focus/sub-label
state=Disabled#999project/disabled/sub-label
state=Locked#999project/lock/sub-label
dot.background3
state=Hover#edededproject/hover/icon
state=Pressed#c2c7c3project/pressed/icon
state=Locked#00d669project/lock/icon
focus-ring.display1
state=Focusblocklayout
number.color6
state=Default#999project/default/sub-label
state=Hover#00d669project/hover/label
state=Pressed#00d669project/pressed/label
state=Focus#999project/default/sub-label
state=Disabled#999project/default/sub-label
state=Locked#999project/lock/sub-label
number.opacity1
state=Disabled0.24opacity/gentle
outline.background6
state=Default#3a3a3aproject/default/outline
state=Hover#00d669project/hover/outline
state=Pressed#10ffa4project/pressed/outline
state=Focus#3a3a3aproject/focus/outline
state=Disabled#3a3a3aproject/disabled/outline
state=Locked#3a3a3aproject/lock/outline
outline.height6
state=Default1pxspacing/outline/small
state=Hover2pxspacing/outline/medium
state=Pressed1pxspacing/outline/small
state=Focus1pxspacing/outline/small
state=Disabled1pxspacing/outline/small
state=Locked1pxspacing/outline/small
outline.opacity1
state=Disabled0.24opacity/gentle
right.opacity1
state=Disabled0.24opacity/gentle
root.cursor1
state=DisableddefaultFigma frame size
root.padding-left2
state=Hover16pxspacing/gap/medium
state=Pressed16pxspacing/gap/medium
text.color6
state=Default#d3d9d5project/default/label
state=Hover#00d669project/hover/label
state=Pressed#00d669project/pressed/label
state=Focus#d3d9d5project/default/label
state=Disabled#d3d9d5project/default/label
state=Locked#d3d9d5project/lock/label
text.opacity1
state=Disabled0.24opacity/gentle