Guide
A bidirectional in-app help system: a non-modal help panel, contextual hints, UI↔guide links, and an opt-in guided tour — all over one headless engine.
Billing
- Plan
- Pro — $29/mo
- Seats
- 5 of 10 used
01 Setup
Mount one GuideProvider near your app root. It instantiates a GuideController and shares it with every Guide surface via context. Mark any UI
element a topic with data-guide="<id>"; tours, hints, markers, and mentions
all resolve through that one namespace.
Provider + controller + a topic
02 Contextual hints
A GuideHint waits at the right element instead of interrupting. Show it on mount,
or drive it from your own route/condition with trigger="manual" and open. It persists "seen" so it appears once, and steps aside while a modal or tour
is open.
A waiting hint
03 Guided tour & beacon
The guided tour is the deliberately opt-in, intrusive surface: a spotlight that dims everything
but the current step's target, plus an anchored bubble. A GuideBeacon is the gentle entry
point — a waiting hotspot that starts the tour on click, the opposite of an auto-start.
Beacon-launched tour
Dashboard
Tours survive client-side navigation: the controller lives in the layout's provider, an
unresolved target renders centered over the full scrim, and the bubble re-anchors as soon as
the new route's data-guide element appears. The library never navigates itself —
the app does, in onStep. Keep Guide mounted in the layout (a
route-local renderer unmounts on navigation and ends the tour), and prefer stopTour() only when navigation invalidates the tour (e.g. logout) — it tears down
without marking the tour seen.
Cross-route tour (app-driven navigation)
04 Analytics
The real value of a tour is its funnel and drop-off signal. A GuideTour carries
three optional hooks fired from the engine, so they trigger no matter which surface drives the
tour. They are invoked defensively — a throwing handler never corrupts tour state. See GuideStepEvent / GuideEndEvent in the API reference for the payloads.
Wiring tour analytics
05 The data-guide namespace
Every guide target is identified by a string id. There are two ways to register one — both feed the same registry, so a tour step, a hint, a marker, and a mention can all point at the same id.
Two ways to mark a target
direction makes the bidirectional link a deliberate choice: 'to-ui' makes a GuideMarker inert (UI → guide off), 'to-guide' degrades a GuideMention to plain text (guide → UI off), and 'both' (the default) enables
both. In DEV, a target id referenced but not found in the DOM logs a warning instead of failing silently.
06 Accessibility
Keyboard parity
Markers and mentions are real <button>s. A mention highlights its
target on focus as well as hover, so the bidirectional link works without a mouse.
The tour bubble takes focus on open; → / ← step, Esc skips. An interactive step joins its spotlit target to the bubble in one Tab cycle.
Announcements & focus
The tour announces each step through a polite aria-live region (so the
arrow-key path is never silent), and the hint announces itself with role="status". The tour returns focus to wherever it was when the tour ends.
Non-modal by design
The help panel has no focus trap and no backdrop — it coexists with the app (that is what
lets a mention highlight a field behind it). Escape only closes it while focus is inside,
so a foreground dialog keeps priority. Motion (panel slide, beacon pulse, step fade)
honors prefers-reduced-motion.
07 Customization
Every surface supports unstyled, per-slot slotClasses, and named presets. Two tokens tune the tour's spotlight scrim and the additive highlight
ring.
Tokens & slot overrides
08 API Reference
Guide (tour renderer)
Mount once inside GuideProvider; renders nothing until a tour starts.
No matching properties |
GuideController
The headless engine. Create one and pass it to the provider for programmatic control.
No matching properties |
GuideTour
The tour definition you pass to startTour — lives in your app, not the library.
No matching properties |
GuideStep
No matching properties |
GuideStepEvent / GuideEndEvent
The payloads passed to the analytics hooks.
No matching properties |
GuideProvider
Context root — wires every surface to one GuideController.
No matching properties |
GuidePanel
The callable, non-modal help panel (D1).
No matching properties |
GuideArticle
A structured help article inside the panel.
No matching properties |
GuideMarker
Direction A — the discreet "ⓘ" trigger that opens the panel at an article.
No matching properties |
GuideMention
Direction B — inline article→UI reference that highlights the element.
No matching properties |
GuideHint
Contextual, waiting hint anchored to a data-guide element.
No matching properties |
GuideBeacon
Waiting, pulsing hotspot that starts an opt-in tour.
No matching properties |