import type { Animated, LayoutRectangle, NativeMethods, ViewStyle, } from 'react-native'; export type WalktroughedComponent = NativeMethods & React.ComponentType; export interface Step { name: string; order: number; visible: boolean; // wrapperRef can be null while the ref is not yet attached wrapperRef: React.RefObject; measure: () => Promise; text: React.ReactElement | string; } export interface TourContext { registerStep: (step: Step) => void; unregisterStep: (name: string) => void; getCurrentStep: () => Step | undefined; } export interface ValueXY { x: number; y: number; } export type SvgMaskPathFunction = (args: { size: Animated.ValueXY; position: Animated.ValueXY; canvasSize: ValueXY; step: Step; }) => string; export type StepsMap = Record; export type EasingFunction = (value: number) => number; export type Labels = Partial< Record<'skip' | 'previous' | 'next' | 'finish', string> >; export interface TooltipProps { labels: Labels; goToNext?: () => Promise; goToPrev?: () => Promise; stop?: () => Promise; currentStep?: Step; isFirstStep?: boolean; isLastStep?: boolean; } export interface StepNumberProps { currentStepNumber?: number; } export interface MaskProps { size: ValueXY; position: ValueXY; style: ViewStyle; easing?: EasingFunction; animationDuration: number; animated: boolean; backdropColor: string; svgMaskPath?: SvgMaskPathFunction; layout: { width: number; height: number; }; onClick?: () => any; currentStep: Step; } export interface TourModalHandle { animateMove: (obj: LayoutRectangle) => Promise; } export interface TourOptions { easing?: ((value: number) => number) | undefined; overlay?: 'svg' | 'view'; animationDuration?: number; tooltipComponent?: React.ComponentType; tooltipStyle?: ViewStyle; stepNumberComponent?: React.ComponentType; animated?: boolean; labels?: Labels; androidStatusBarVisible?: boolean; svgMaskPath?: SvgMaskPathFunction; verticalOffset?: number; arrowColor?: string; arrowSize?: number; margin?: number; stopOnOutsideClick?: boolean; backdropColor?: string; }