TourKit
API Reference

@tour-kit/announcements API

API reference for @tour-kit/announcements: Modal, Toast, Banner, Slideout, Spotlight, queue hooks, and provider config

@tour-kit/announcements API Reference

Complete API reference for the announcements package. This package provides multi-variant product announcements.


Providers

AnnouncementsProvider

Provider for announcements.

import { AnnouncementsProvider } from '@tour-kit/announcements';

<AnnouncementsProvider
  announcements={announcements}
  userId="user-123"
  userProperties={{ plan: 'pro' }}
  onShow={(id) => console.log('Shown:', id)}
  onDismiss={(id, reason) => console.log('Dismissed:', id, reason)}
>
  {children}
</AnnouncementsProvider>
PropTypeDescription
announcementsAnnouncementConfig[]Array of announcement configs
userIdstringUser identifier
userPropertiesRecord<string, unknown>User properties for targeting
onShow(id: string) => voidCalled when announcement shown
onDismiss(id: string, reason: DismissalReason) => voidCalled on dismiss

Hooks

useAnnouncement

Hook for single announcement control.

import { useAnnouncement } from '@tour-kit/announcements';

const {
  announcement,
  isVisible,
  show,
  dismiss,
  complete,
} = useAnnouncement('announcement-id');
ReturnTypeDescription
announcementAnnouncementConfig | undefinedAnnouncement config
isVisiblebooleanWhether currently visible
show() => voidShow the announcement
dismiss(reason?: DismissalReason) => voidDismiss the announcement
complete() => voidMark as completed

useAnnouncements

Hook for all announcements.

import { useAnnouncements } from '@tour-kit/announcements';

const {
  announcements,
  visible,
  showAnnouncement,
  dismissAnnouncement,
} = useAnnouncements();

useAnnouncementQueue

Hook for queue management.

import { useAnnouncementQueue } from '@tour-kit/announcements';

const {
  queue,
  current,
  next,
  clear,
} = useAnnouncementQueue();

Components

AnnouncementModal

Centered dialog variant.

import { AnnouncementModal } from '@tour-kit/announcements';

<AnnouncementModal id="welcome-modal" />
PropTypeDescription
idstringAnnouncement ID
size'sm' | 'md' | 'lg'Modal size
closeOnOverlaybooleanClose when clicking overlay

AnnouncementSlideout

Side panel variant.

import { AnnouncementSlideout } from '@tour-kit/announcements';

<AnnouncementSlideout id="feature-slideout" />
PropTypeDescription
idstringAnnouncement ID
position'left' | 'right'Slide from direction
widthstringPanel width

AnnouncementBanner

Top/bottom strip variant.

import { AnnouncementBanner } from '@tour-kit/announcements';

<AnnouncementBanner id="maintenance-banner" />
PropTypeDescription
idstringAnnouncement ID
position'top' | 'bottom'Banner position
dismissiblebooleanShow close button

AnnouncementToast

Corner notification variant.

import { AnnouncementToast } from '@tour-kit/announcements';

<AnnouncementToast id="update-toast" />
PropTypeDescription
idstringAnnouncement ID
positionstringToast position
durationnumberAuto-dismiss duration (ms)

AnnouncementSpotlight

Element highlight with overlay.

import { AnnouncementSpotlight } from '@tour-kit/announcements';

<AnnouncementSpotlight id="feature-spotlight" />
PropTypeDescription
idstringAnnouncement ID
targetstringCSS selector for target
placementPlacementTooltip placement

Shared Components

import {
  AnnouncementOverlay,
  AnnouncementClose,
  AnnouncementContent,
  AnnouncementActions,
} from '@tour-kit/announcements';

Headless Components

import {
  HeadlessModal,
  HeadlessSlideout,
  HeadlessBanner,
  HeadlessToast,
  HeadlessSpotlight,
} from '@tour-kit/announcements/headless';

<HeadlessModal id="my-modal">
  {({ isVisible, dismiss, announcement }) => (
    <CustomModal />
  )}
</HeadlessModal>

Configuration

Frequency Rules

// Show only once ever
frequency: 'once'

// Show once per session
frequency: 'session'

// Show every time conditions met
frequency: 'always'

// Show N times total
frequency: { type: 'times', count: 3 }

// Show every N days
frequency: { type: 'interval', days: 7 }

Audience Targeting

audience: [
  { property: 'plan', operator: 'equals', value: 'pro' },
  { property: 'signupDate', operator: 'before', value: '2024-01-01' },
  { property: 'features', operator: 'contains', value: 'beta' },
]
OperatorDescription
equalsExact match
not_equalsNot equal
containsArray contains value
not_containsArray doesn't contain
inValue in array
not_inValue not in array
existsProperty exists
not_existsProperty doesn't exist

Priority

priority: 'low' | 'normal' | 'high' | 'critical'

Types

AnnouncementConfig

interface AnnouncementConfig {
  id: string;
  variant: 'modal' | 'slideout' | 'banner' | 'toast' | 'spotlight';
  priority?: 'low' | 'normal' | 'high' | 'critical';
  title?: string;
  description?: string | ReactNode;
  media?: AnnouncementMedia;
  primaryAction?: AnnouncementAction;
  secondaryAction?: AnnouncementAction;
  frequency?: FrequencyRule;
  schedule?: Schedule;
  audience?: AudienceCondition[];
  modalOptions?: ModalOptions;
  slideoutOptions?: SlideoutOptions;
  bannerOptions?: BannerOptions;
  toastOptions?: ToastOptions;
  spotlightOptions?: SpotlightOptions;
  onShow?: () => void;
  onDismiss?: (reason: DismissalReason) => void;
  onComplete?: () => void;
}

DismissalReason

type DismissalReason =
  | 'close_button'
  | 'overlay_click'
  | 'escape_key'
  | 'primary_action'
  | 'secondary_action'
  | 'auto_dismiss'
  | 'programmatic';

AnnouncementState

interface AnnouncementState {
  id: string;
  isActive: boolean;
  isVisible: boolean;
  isDismissed: boolean;
  viewCount: number;
  lastViewedAt: Date | null;
  dismissedAt: Date | null;
  dismissalReason: DismissalReason | null;
  completedAt: Date | null;
}

On this page