components / 21

marked separator

a divider can pause, group, label, or point. the stroke should say which one before the layout does.

shadcnnpx shadcn@latest add berkantay/cheez/marked-separator
live

playground

horizontal · wavy
01

digital words feel too finished.

the interface arrives before a person has left a trace.

02

draw the intention back in.

one imperfect line can make the hierarchy feel human.

orientation
stroke
label
spacing
character
ink
<MarkedSeparator
  orientation="horizontal"
  variant="wavy"
  label="next chapter"
  labelPosition="center"
  spacing="normal"
  tone="orange"
  character="rushed"
/>
voice

five kinds of pause

same boundary, different sentence
linea quiet division
doublea firm boundary
wavya soft turn
zigzaga hard shift
directionalcontinue this way
chapters

labels live inside the line

start, center, or end
rails

vertical is drawn vertically

no rotated horizontal asset
researchlisten

collect the language people already use.

designmark

make the intended hierarchy impossible to miss.

releaseshare

let real use put pressure on every decision.

direction

a divider can become a route

arrow belongs to one segment
01install
02compose
03ship
the same path can point home
composition

editorial hierarchy

structure without boxes
dispatch 021

the page should show where the hand changed its mind.

most component libraries erase every trace of process. useful interfaces still need clarity, but clarity does not require sterility.

cheez keeps the semantic primitive ordinary and lets the annotation carry the personality. remove the ink and the structure still makes sense.

reference

api

one Base UI separator root
proptypedefaultpurpose
orientation"horizontal" | "vertical""horizontal"native separator orientation
variant"line" | "double" | "wavy" | "zigzag" | "directional""line"stroke vocabulary
direction"forward" | "backward""forward"directional arrow placement
labelReactNodevisible content between two strokes
labelPosition"start" | "center" | "end""center"label position along the axis
markLabelbooleantruemarker wash behind the label
labelMarkCheezType"marker-swipe"label drawing override
labelColorstringseparator colorlabel ink override
decorativebooleanlabel-awarepresentation or structural semantics
aria-labelstringstring labelname for a structural separator
toneMarkedSeparatorTone"neutral"built-in ink palette
colorstringtone colorcustom stroke override
markCheezTypevariant-awarehorizontal stroke override
characterCheezCharacter"rushed"drawing personality
thicknessnumber1pen weight
spacing"compact" | "normal" | "loose""normal"cross-axis breathing room
lengthCSS widthcontainerhorizontal width or vertical height

behavior notes

  • Base UI provides the separator role, orientation state, and render composition
  • unlabelled rules are decorative by default and stay out of the accessibility tree
  • a visible string label makes the separator structural and supplies its accessible name
  • vertical variants use dedicated path definitions so pen pressure travels down the rail
  • directional labels draw the arrow on one segment only
  • spacing changes empty cross-axis space, not the thickness of the stroke