TourKit
API Reference

@tour-kit/react API

API reference for @tour-kit/react: Tour, TourCard, TourStep, headless components, router adapters, and style hooks

@tour-kit/react API Reference

Complete API reference for the React package. This package provides styled and headless React components for tours.

This package re-exports all of @tour-kit/core. Import everything from @tour-kit/react to avoid duplicate dependencies.


Styled Components

Tour

Wrapper component for declarative tour definition.

import { Tour } from '@tour-kit/react';

<Tour
  id="my-tour"
  autoStart={false}
  startAt={0}
  config={tourConfig}
  onStart={() => {}}
  onComplete={() => {}}
  onSkip={(stepIndex) => {}}
  onStepChange={(step, index) => {}}
>
  {children}
</Tour>

TourStep

Declarative step definition (must be child of Tour).

import { TourStep } from '@tour-kit/react';

<TourStep
  target="#element"
  title="Step Title"
  content="Step description"
  placement="bottom"
  offset={[0, 12]}
  spotlightPadding={8}
  spotlightRadius={4}
  interactive={false}
  showNavigation={true}
  showProgress={true}
  showClose={true}
/>

TourCard (Compound)

Main tooltip card with compound components.

import {
  TourCard,
  TourCardHeader,
  TourCardContent,
  TourCardFooter,
} from '@tour-kit/react';

<TourCard size="default" className="w-80">
  <TourCardHeader showClose>
    <TourClose />
  </TourCardHeader>
  <TourCardContent spacing="default" />
  <TourCardFooter>
    <TourProgress variant="dots" />
    <TourNavigation />
  </TourCardFooter>
</TourCard>
ComponentProps
TourCardsize?: 'default' | 'sm' | 'lg' | 'auto', className?, asChild?
TourCardHeaderspacing?: 'default' | 'compact', showClose?, title?, titleId?
TourCardContentspacing?: 'default' | 'compact' | 'none', content?
TourCardFooterjustify?: 'between' | 'end' | 'start', spacing?: 'default' | 'compact' | 'none'

TourOverlay

Spotlight overlay with cutout.

import { TourOverlay } from '@tour-kit/react';

<TourOverlay
  zIndex="default"
  className="custom-overlay"
  onClick={() => skip()}
/>
PropTypeDefaultDescription
zIndex'default' | 'high''default'z-index level
classNamestring-Custom CSS class
onClick() => void-Click handler

TourNavigation

Navigation buttons component.

import { TourNavigation } from '@tour-kit/react';

<TourNavigation
  prevLabel="Back"
  nextLabel="Next"
  finishLabel="Done"
  skipLabel="Skip"
  prevVariant="outline"
  nextVariant="default"
/>

TourProgress

Progress indicator component.

import { TourProgress } from '@tour-kit/react';

<TourProgress variant="dots" />
<TourProgress variant="bar" />
<TourProgress variant="text" />

TourClose

Close/skip button.

import { TourClose } from '@tour-kit/react';

<TourClose asChild>
  <button>Custom Close</button>
</TourClose>

TourPortal

Portal component for rendering to document.body.

import { TourPortal } from '@tour-kit/react';

<TourPortal className="portal-container">
  {children}
</TourPortal>

TourArrow

Arrow component for tooltips (floating-ui).

import { TourArrow } from '@tour-kit/react';

<TourArrow ref={arrowRef} context={floatingContext} />

Headless Components

Import from @tour-kit/react/headless:

TourCardHeadless

import { TourCardHeadless } from '@tour-kit/react/headless';

<TourCardHeadless
  render={({
    isActive,
    currentStep,
    currentStepIndex,
    totalSteps,
    isFirstStep,
    isLastStep,
    next,
    prev,
    skip,
    floatingStyles,
    refs,
    arrowRef,
    context,
  }) => (
    <div ref={refs.setFloating} style={floatingStyles}>
      {/* Custom UI */}
    </div>
  )}
/>

TourOverlayHeadless

import { TourOverlayHeadless } from '@tour-kit/react/headless';

<TourOverlayHeadless
  render={({
    isActive,
    overlayStyle,
    cutoutStyle,
    targetRect,
    interactive,
  }) => (
    <div style={overlayStyle}>
      {targetRect && <div style={cutoutStyle} />}
    </div>
  )}
/>

TourNavigationHeadless

import { TourNavigationHeadless } from '@tour-kit/react/headless';

<TourNavigationHeadless
  isFirstStep={isFirstStep}
  isLastStep={isLastStep}
  onPrev={prev}
  onNext={next}
  onSkip={skip}
  render={({ isFirstStep, isLastStep, onPrev, onNext, onSkip }) => (
    // Custom navigation UI
  )}
/>

TourProgressHeadless

import { TourProgressHeadless } from '@tour-kit/react/headless';

<TourProgressHeadless
  current={currentStepIndex + 1}
  total={totalSteps}
  render={({ current, total }) => (
    <div>{current} / {total}</div>
  )}
/>

TourCloseHeadless

import { TourCloseHeadless } from '@tour-kit/react/headless';

<TourCloseHeadless
  render={(props) => (
    <button {...props}>Close</button>
  )}
/>

Provider Components

MultiTourKitProvider

Provider for managing multiple tours.

import { MultiTourKitProvider } from '@tour-kit/react';

<MultiTourKitProvider
  config={tourKitConfig}
  router={router}
  routePersistence={{ enabled: true }}
  autoNavigate={false}
  onNavigationRequired={(route) => {}}
  onTourStart={(tourId) => {}}
  onTourComplete={(tourId) => {}}
  onTourSkip={(tourId, stepIndex) => {}}
  onStepView={(tourId, stepId, stepIndex) => {}}
>
  {children}
</MultiTourKitProvider>

Hooks

useTours

Access all registered tours.

import { useTours } from '@tour-kit/react';

const {
  tours,           // TourInfo[]
  activeTourId,    // string | null
  isAnyTourActive, // boolean
  completedTours,  // string[]
  skippedTours,    // string[]
  isTourCompleted, // (id: string) => boolean
  isTourSkipped,   // (id: string) => boolean
  getTour,         // (id: string) => TourInfo | undefined
} = useTours();

useTourRoute

Route-aware tour control.

import { useTourRoute } from '@tour-kit/react';

const {
  isStepOnCurrentRoute, // boolean
  currentStepRoute,     // string | undefined
  currentRoute,         // string
  isNavigating,         // boolean
  goToStepRoute,        // () => Promise<void>
  isOnRoute,            // (route: string) => boolean
} = useTourRoute({ router, tourId? });

Router Adapters

Next.js App Router

import { useNextAppRouter, createNextAppRouterAdapter } from '@tour-kit/react';

// Hook (uses dynamic require)
const router = useNextAppRouter();

// Factory (for custom setup)
import { usePathname, useRouter } from 'next/navigation';
const createRouter = createNextAppRouterAdapter(usePathname, useRouter);
const router = createRouter();

Next.js Pages Router

import { useNextPagesRouter, createNextPagesRouterAdapter } from '@tour-kit/react';

// Hook
const router = useNextPagesRouter();

// Factory
import { useRouter } from 'next/router';
const createRouter = createNextPagesRouterAdapter(useRouter);

React Router

import { useReactRouter, createReactRouterAdapter } from '@tour-kit/react';

// Hook
const router = useReactRouter();

// Factory
import { useNavigate, useLocation } from 'react-router-dom';
const createRouter = createReactRouterAdapter(useNavigate, useLocation);

UI Variants

CVA variant exports for customization:

import {
  // Button
  tourButtonVariants,

  // Card
  tourCardVariants,
  tourCardHeaderVariants,
  tourCardContentVariants,
  tourCardFooterVariants,

  // Progress
  tourProgressVariants,
  tourProgressDotVariants,

  // Overlay
  tourOverlayVariants,
} from '@tour-kit/react';

Utilities

cn

Class name utility (clsx + tailwind-merge).

import { cn } from '@tour-kit/react';

cn('base-class', condition && 'conditional', className);

Slot Components

import { Slot, Slottable, UnifiedSlot } from '@tour-kit/react';

// Radix-style slot
<Slot {...props}>{children}</Slot>

// Unified for both Radix and Base UI
<UnifiedSlot {...props}>{children}</UnifiedSlot>

UI Library Context

import { UILibraryProvider, useUILibrary } from '@tour-kit/react';

<UILibraryProvider library="radix">
  {children}
</UILibraryProvider>

const library = useUILibrary(); // 'radix' | 'base-ui'

Re-exports from @tour-kit/core

All exports from @tour-kit/core are available:

// Providers
export { TourContext, TourProvider, TourKitContext, TourKitProvider } from '@tour-kit/react';

// Hooks
export {
  useTour,
  useStep,
  useSpotlight,
  useElementPosition,
  useKeyboardNavigation,
  useFocusTrap,
  usePersistence,
  useRoutePersistence,
  useMediaQuery,
  usePrefersReducedMotion,
} from '@tour-kit/react';

// Utilities
export {
  createTour,
  createStep,
  waitForElement,
  isElementVisible,
  getScrollParent,
  scrollIntoView,
  generateId,
  announce,
  prefersReducedMotion,
  getStepAnnouncement,
  createStorageAdapter,
  createPrefixedStorage,
  safeJSONParse,
  calculatePosition,
} from '@tour-kit/react';

// Configs
export {
  defaultSpotlightConfig,
  defaultKeyboardConfig,
  defaultPersistenceConfig,
  defaultA11yConfig,
  defaultScrollConfig,
} from '@tour-kit/react';

// Types
export type {
  Placement,
  TourStep,
  Tour,
  TourState,
  TourKitConfig,
  RouterAdapter,
  // ... and more
} from '@tour-kit/react';

For detailed documentation on each component, see the individual pages in the @tour-kit/react section.

On this page