Stay Updated!

Get the latest posts and insights delivered directly to your inbox

Skip to content

VMark: Hand-Drawn Annotations for Presentations

Published: at 

VMark: Hand-Drawn Annotations

Add emphasis to your presentations with animated hand-drawn marks


The Problem#

Static text in presentations lacks emphasis.

We want this to stand out.

VMark creates a “live drawing” effect that grabs attention and guides your audience’s focus.


Getting Started#

Import VMark from the presentation feature:

import { VMark } from "@features/presentation";

Basic usage wraps text in the component:

<VMark>text to emphasize</VMark>

The default is underline, and it animates on click.


Annotation Types: Underline & Circle#

Underline is the default. Use it for general emphasis.

Circle draws attention to key terms or important words.

<VMark type="underline">emphasis</VMark>
<VMark type="circle" color="red">key term</VMark>

Annotation Types: Box & Highlight#

Box frames content like code or definitions.

Highlight creates a marker effect. It uses 40% opacity so text stays readable.

<VMark type="box" color="green">boxed</VMark>
<VMark type="highlight" color="yellow">highlighted</VMark>

Annotation Types: Strike-through & Crossed-off#

Use these for corrections or showing what to avoid:

This approach is wrong Don’t do this

Common pattern: show the wrong approach, then reveal the correct one.


Annotation Type: Bracket#

Brackets emphasize entire phrases or sentences

The brackets prop controls direction:

<VMark type="bracket" brackets={['left', 'right']}>
  phrase
</VMark>

Options: left, right, top, bottom


Color Presets#

VMark includes 24 color presets:

red | blue | green | yellow | purple | orange

cyan | teal | pink | indigo | lime | amber

Custom CSS colors also work: #ff6b6b, rgb(100, 200, 150), rgba(255, 0, 0, 0.5)


Controlling Timing: Sequential#

By default, VMark annotations appear sequentially with each click.

This one appears second.

And this one third.

Just place VMark components in order. Each one advances the click counter.


Controlling Timing: Explicit#

Use at to specify an exact click number:

Third (at=3) First (at=1) Second (at=2)
<VMark at={3}>appears on click 3</VMark>
<VMark at={1}>appears on click 1</VMark>

Advanced Timing: Relative & Ranges#

Relative positioning with +N:

+1 from previous

Ranges show content only during a window:

Visible from click 3 to 4
<VMark at="+1">offset from previous</VMark>
<VMark at={[2, 5]}>visible during clicks 2-4</VMark>

Under the Hood#

VMark is built on the rough-notation library.

Key behaviors:


Summary#

Import from @features/presentation

7 annotation types: underline, circle, box, highlight, strike-through, crossed-off, bracket

24 color presets plus custom CSS colors

Full click system integration with at prop for timing control

Press Escape to exit presentation mode.

Press Esc or click outside to close

Stay Updated!

Subscribe to my newsletter for more TypeScript, Vue, and web dev insights directly in your inbox.

  • Background information about the articles
  • Weekly Summary of all the interesting blog posts that I read
  • Small tips and trick
Subscribe Now