components / 13

marked popover

a pinned working note. it stays close to its subject while giving the user enough room to actually do something.

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

playground

closed
size
side
align
character
frame
pin
frame ink
pin ink
mode
<MarkedPopover
  size="medium"
  character="rushed"
  frameMark="corner-box"
  pinMark="asterisk"
>
  <MarkedPopoverTrigger>add note</MarkedPopoverTrigger>
  <MarkedPopoverContent side="bottom" align="center">
    <MarkedPopoverTitle>leave a note</MarkedPopoverTitle>
    <MarkedPopoverDescription>
      write context without leaving the page.
    </MarkedPopoverDescription>
  </MarkedPopoverContent>
</MarkedPopover>
behavior

states

every card is interactive
default
compact
large
opens on hover
modal backdrop
unattached note
composition

mark inspector

interactive controls in context
this matters more

select the sentence, then tune the gesture beside it.

reference

api

compound parts, focused responsibility
partproptypedefaultpurpose
Rootopenbooleancontrolled open state
RootdefaultOpenbooleanfalseuncontrolled initial state
RootonOpenChangefunctionstate callback with reason
Rootmodalboolean | "trap-focus"falseoutside interaction and focus model
Rootsize"small" | "medium" | "large""medium"working surface scale
RootframeMarkCheezType"corner-box"drawn note boundary
RootframeColorstring"#8f74ff"frame ink
RootpinMarkCheezType"asterisk"corner pin glyph
RootpinColorstring"#b7ff3c"pin ink
RootarrowMarkCheezType"pointer"anchor pointer
RootarrowColorstringframe colorpointer ink
RoottitleMarkCheezType"underline"title emphasis
RoottitleColorstring"#35d9ff"title ink
Rootcharacter"calm" | "rushed" | "chaotic""rushed"drawing personality
TriggeropenOnHoverbooleanfalsealso open from hover
Triggerdelaynumber300hover opening delay
TriggercloseDelaynumber0hover closing delay
TriggermarkCheezType"rounded-box"local trigger mark
Contentside"top" | "right" | "bottom" | "left""bottom"preferred placement
Contentalign"start" | "center" | "end""center"cross-axis alignment
ContentsideOffsetnumber16distance from trigger
ContentinitialFocusboolean | ref | functiontrueopening focus target
ContentfinalFocusboolean | ref | functiontrueclosing focus target
Contentbackdropbooleanfalseplain modal backdrop
ContentshowPinbooleantruecorner pin glyph
ContentshowArrowbooleantrueanchor pointer
ContentshowClosebooleantruecorner close glyph

behavior notes

  • clicking the trigger toggles the working surface
  • focus moves inside and returns to the trigger after closing
  • Escape and outside press dismiss non-modal popovers
  • placement shifts or flips before leaving the viewport
  • hover-open content remains reachable by the pointer
  • use a dialog when the task must interrupt the whole page