API reference

Every export.

@cairnkit/core

Framework-free engine. Zero runtime dependencies.

PropTypeDefaultDescription
defineAnchors(registry)<T>(T) => TDeclares the anchor registry. Identity at runtime; exists for type inference.
anchor(id)(id) => propsProps object to spread onto an element.
anchorSelector(id)(id) => stringThe CSS selector for an anchor, escaped.
resolveAnchor(id, doc?)(id) => HTMLElement | nullFinds the visible element for an anchor. Returns null on the server.
defineFlow(flow)(TourFlow) => TourFlowDeclares a flow.
createFlowRegistry(flows)(TourFlow[]) => RegistryBuilds an id → flow map.
getFlow(registry, id)(...) => TourFlow | nullLooks a flow up by id.
resolveResumeStep(flow, path, i)(...) => number | nullWhere to resume when the user is ahead. Pure, testable.
decideForRoute(flow, path, i)(...) => RouteDecisionhandoff / pause / resume / none, in that order.
createTourStore(options)(...) => TourStoreObservable store, useSyncExternalStore-ready.
localStoragePersist(key?)(key?) => PersistAdapterDefault persistence. Progress must survive a page transition.
emitTourEvent(name)(name) => voidSignal from your app that a step is waiting on.
onTourEvent(name, fn)(...) => () => voidSubscribe. Returns an unsubscribe.
readRect / rectsEqualhelpersMeasure and compare a target rect.
watchForAnchor(id, ms, cb)(...) => () => voidWait for a late-mounting anchor.
scrollAnchorIntoView(el)(el) => voidReduced-motion aware.

Key types

TourFlow · TourStep · AdvanceRule · Placement · AnchorId
CairnRegister · RegisteredAnchor · RegisteredFlowId · RegisteredEvent
CairnEvent · CairnEventHandler · TargetRect · TourStore · PersistAdapter

@cairnkit/react

Headless bindings. No styling.

PropTypeDefaultDescription
<CairnProvider>componentMounts the runtime. Props: flows, router, translate, onEvent, onNotice, store, mobileBreakpoint.
useTour()hookThe controller — flow, step, rect, element, status, advance, back, skip, start, stop.
useTourState(selector)hookSubscribe to a slice of store state.
useStepCopy(flow, step)hookResolves title and body, inline or via translate.
useTourDeepLink(param?)hookStarts a flow from ?tour=. Each value honoured once.
useCairn()hookRaw context — flows, router, store.
<TourAnchor id>componentEscape hatch for components that swallow props.

@cairnkit/ui

Prebuilt overlay. Plain prefixed CSS, light and dark.

PropTypeDefaultDescription
<CairnOverlay>componentSpotlight plus tooltip card. Props: labels, mobileBreakpoint, onNotice.
<TourLauncher>componentThe launcher. Props: flowId, label, position, pulse, icon, className.
<Spotlight>componentScrim and cutout only.
<StepCard>componentThe card only.
<Launcher>componentPresentational launcher, unbound to a flow.
<ProgressRail>componentSegmented step progress.
@cairnkit/ui/styles.cssstylesheetImport once. Required for the prebuilt components.

@cairnkit/next

PropTypeDefaultDescription
useAppRouterAdapter()hookApp Router adapter.
usePagesRouterAdapter()hookPages Router adapter.

@cairnkit/cli

PropTypeDefaultDescription
cairn check <dir>commandStatic drift check. Exits 1 on any finding.
auditFlow(page, opts)functionDrives one flow in a browser and reports per-step.
auditFlows(page, list)functionSeveral flows; throws one readable error if any fail.