TourKit
API Reference

@tour-kit/checklists API

API reference for @tour-kit/checklists: Checklist, ChecklistTask, useChecklist, useTask, and progress utilities

@tour-kit/checklists API Reference

Complete API reference for the checklists package. This package provides interactive checklists with task dependencies.


Providers

ChecklistProvider

Provider for checklists.

import { ChecklistProvider } from '@tour-kit/checklists';

<ChecklistProvider
  checklists={[onboarding, setup]}
  onTaskComplete={(checklistId, taskId) => {}}
  onChecklistComplete={(checklistId) => {}}
>
  {children}
</ChecklistProvider>
PropTypeDescription
checklistsChecklistConfig[]Array of checklist configs
onTaskComplete(checklistId, taskId) => voidCalled when task completes
onChecklistComplete(checklistId) => voidCalled when checklist completes

Hooks

useChecklist

Hook for single checklist control.

import { useChecklist } from '@tour-kit/checklists';

const {
  checklist,
  tasks,
  visibleTasks,
  progress,
  completeTask,
  executeAction,
  dismiss,
  reset,
} = useChecklist('onboarding');
ReturnTypeDescription
checklistChecklistStateChecklist state
tasksChecklistTaskState[]All tasks
visibleTasksChecklistTaskState[]Visible tasks (passing when condition)
progress{ completed, total, percentage }Progress stats
completeTask(taskId: string) => voidMark task complete
executeAction(taskId: string) => voidExecute task action
dismiss() => voidDismiss checklist
reset() => voidReset checklist

useTask

Hook for single task control.

import { useTask } from '@tour-kit/checklists';

const {
  task,
  isCompleted,
  isLocked,
  dependencies,
  complete,
  execute,
} = useTask('onboarding', 'profile');
ReturnTypeDescription
taskChecklistTaskStateTask state
isCompletedbooleanWhether task is complete
isLockedbooleanWhether blocked by dependencies
dependenciesstring[]IDs of blocking tasks
complete() => voidMark task complete
execute() => voidExecute task action

useChecklistPersistence

Hook for persistence control.

import { useChecklistPersistence } from '@tour-kit/checklists';

const { save, load, clear } = useChecklistPersistence('onboarding');

useChecklistsProgress

Hook for all checklists progress.

import { useChecklistsProgress } from '@tour-kit/checklists';

const progress = useChecklistsProgress();
// [{ id, title, completed, total, percentage }]

Components

Checklist

Container component for checklist.

import { Checklist } from '@tour-kit/checklists';

<Checklist id="onboarding" className="custom-class">
  <ChecklistProgress />
  {tasks.map(task => (
    <ChecklistTask key={task.id} taskId={task.id} />
  ))}
</Checklist>

ChecklistTask

Individual task item.

import { ChecklistTask } from '@tour-kit/checklists';

<ChecklistTask
  taskId="profile"
  checklistId="onboarding"
  showIcon
  showDescription
/>
PropTypeDescription
taskIdstringTask ID
checklistIdstringParent checklist ID
showIconbooleanShow task icon
showDescriptionbooleanShow task description

ChecklistProgress

Progress bar/indicator.

import { ChecklistProgress } from '@tour-kit/checklists';

<ChecklistProgress
  checklistId="onboarding"
  showPercentage
  showCount
/>

ChecklistLauncher

Button to launch checklist.

import { ChecklistLauncher } from '@tour-kit/checklists';

<ChecklistLauncher checklistId="onboarding">
  <button>Open Checklist</button>
</ChecklistLauncher>

ChecklistPanel

Full panel UI with all features.

import { ChecklistPanel } from '@tour-kit/checklists';

<ChecklistPanel
  checklistId="onboarding"
  position="bottom-right"
  collapsible
  defaultExpanded={true}
/>
PropTypeDescription
checklistIdstringChecklist ID
positionstringPanel position
collapsiblebooleanAllow collapse
defaultExpandedbooleanStart expanded

Headless Components

import { ChecklistHeadless, TaskHeadless } from '@tour-kit/checklists/headless';

<ChecklistHeadless id="onboarding">
  {({ checklist, tasks, progress, completeTask }) => (
    <CustomChecklist />
  )}
</ChecklistHeadless>

<TaskHeadless checklistId="onboarding" taskId="profile">
  {({ task, isCompleted, isLocked, complete, execute }) => (
    <CustomTask />
  )}
</TaskHeadless>

Utilities

createChecklist

Factory function for checklist creation.

import { createChecklist } from '@tour-kit/checklists';

const checklist = createChecklist({
  id: 'onboarding',
  title: 'Get Started',
  tasks: [/* ... */],
});

createTask

Factory function for task creation.

import { createTask } from '@tour-kit/checklists';

const task = createTask({
  id: 'profile',
  title: 'Complete profile',
  action: { type: 'navigate', url: '/settings' },
});

calculateProgress

Calculate progress from state.

import { calculateProgress } from '@tour-kit/checklists';

const { completed, total, percentage, remaining } = calculateProgress(state);

getNextTask

Get first incomplete unlocked task.

import { getNextTask } from '@tour-kit/checklists';

const next = getNextTask(state);

getLockedTasks

Get tasks blocked by dependencies.

import { getLockedTasks } from '@tour-kit/checklists';

const locked = getLockedTasks(state);

canCompleteTask

Check if task dependencies are met.

import { canCompleteTask } from '@tour-kit/checklists';

const canComplete = canCompleteTask('task-id', state);

resolveTaskDependencies

Get topological sort of tasks.

import { resolveTaskDependencies } from '@tour-kit/checklists';

const order = resolveTaskDependencies(tasks);

hasCircularDependency

Detect circular dependencies.

import { hasCircularDependency } from '@tour-kit/checklists';

const hasCircular = hasCircularDependency(tasks);

Types

ChecklistConfig

interface ChecklistConfig {
  id: string;
  title: string;
  description?: string;
  icon?: string | ReactNode;
  tasks: ChecklistTaskConfig[];
  onComplete?: () => void;
  onDismiss?: () => void;
  dismissible?: boolean;
  hideOnComplete?: boolean;
  meta?: Record<string, unknown>;
}

ChecklistTaskConfig

interface ChecklistTaskConfig {
  id: string;
  title: string;
  description?: string;
  icon?: string | ReactNode;
  action?: TaskAction;
  dependsOn?: string[];
  when?: (context: ChecklistContext) => boolean;
  completedWhen?: TaskCompletionCondition;
  manualComplete?: boolean;
  meta?: Record<string, unknown>;
}

TaskAction

type TaskAction =
  | { type: 'navigate'; url: string; external?: boolean }
  | { type: 'callback'; handler: () => void | Promise<void> }
  | { type: 'tour'; tourId: string }
  | { type: 'modal'; modalId: string }
  | { type: 'custom'; data: unknown };

TaskCompletionCondition

type TaskCompletionCondition =
  | { event: string }
  | { selector: string }
  | { custom: (ctx: ChecklistContext) => boolean };

ChecklistProgress

interface ChecklistProgress {
  completed: number;
  total: number;
  percentage: number;
  remaining: number;
}

On this page