Tour

Multi-step onboarding tour with element spotlight, positioned tooltip, progress dots, and keyboard-accessible navigation.

Setup with Provider

tsx
import { Tour, TourProvider, useTour } from 'fxui-core';

// Wrap your app
<TourProvider>
  <App />
</TourProvider>

// Inside any child:
function Navbar() {
  const { start } = useTour();
  return <Button onClick={start}>Take a Tour</Button>;
}

// Render Tour once at layout level:
const steps = [
  { target: '#sidebar', title: 'Navigation', content: 'Browse all components here.', placement: 'right' },
  { target: '#preview', title: 'Live Preview', content: 'See the component in action.', placement: 'bottom' },
  { title: 'Done!', content: 'You\'re all set.' },  // no target = centered
];

<Tour steps={steps} showProgress showSkip />

Controlled Mode

tsx
const [open, setOpen] = React.useState(false);

<Tour
  steps={steps}
  open={open}
  onOpenChange={setOpen}
  onComplete={() => markTourSeen()}
/>

TourStep Type

ts
interface TourStep {
  target?: string;        // CSS selector — omit for centered modal
  title: string;
  content: React.ReactNode;
  placement?: 'top' | 'bottom' | 'left' | 'right';
}

Props

TourProvider

No props — provides useTour() context to children.

useTour()

ts
const { start, stop, isOpen } = useTour();

Tour

| Prop | Type | Default | |------|------|---------| | steps | TourStep[] | required | | open | boolean | — | | onOpenChange | (open: boolean) => void | — | | onComplete | () => void | — | | showProgress | boolean | true | | showSkip | boolean | true | | spotlightPadding | number | 8 |