import type { HTMLAttributes } from 'vue'; import type { FloatingOptions } from '../_utils/floating'; import type { ButtonProps } from '../button/interface'; export type TourAllowedButton = 'next' | 'previous' | 'close'; export type TourSide = 'left' | 'right' | 'top' | 'bottom' | 'over'; export type TourAlignment = 'start' | 'center' | 'end'; export type TourButtonKind = 'previous' | 'next' | 'done' | 'close'; export type TourButtonProps = Partial>; export type TourPopoverDom = { wrapper: HTMLElement | null; arrow: HTMLElement | null; title: HTMLElement | null; description: HTMLElement | null; footer: HTMLElement | null; previousButton: HTMLElement | null; nextButton: HTMLElement | null; closeButton: HTMLElement | null; footerButtons: HTMLElement | null; progress: HTMLElement | null; }; export type TourStepHookOptions = { config: TourConfig; state: TourState; controller: TourController; }; export type TourStepHook = (element: Element | undefined, step: TourStep | undefined, options: TourStepHookOptions) => void; export type TourPopoverRenderHook = (popover: TourPopoverDom, options: TourStepHookOptions) => void; export type TourOverlayClickBehavior = 'close' | 'nextStep' | TourStepHook; export type TourPopover = { title?: string; description?: string; side?: TourSide; align?: TourAlignment; showButtons?: TourAllowedButton[]; disableButtons?: TourAllowedButton[]; showProgress?: boolean; nextBtnText?: string; prevBtnText?: string; doneBtnText?: string; progressText?: string; popoverClass?: string; onNextClick?: TourStepHook; onPrevClick?: TourStepHook; onCloseClick?: TourStepHook; onPopoverRender?: TourPopoverRenderHook; buttonProps?: TourButtonProps; contentClass?: HTMLAttributes['class']; contentStyle?: HTMLAttributes['style']; titleProps?: HTMLAttributes; descriptionProps?: HTMLAttributes; footerProps?: HTMLAttributes; floatingOptions?: FloatingOptions; }; export type TourStep = { element?: string | Element | (() => Element | null | undefined) | null; popover?: TourPopover; disableActiveInteraction?: boolean; onHighlightStarted?: TourStepHook; onHighlighted?: TourStepHook; onDeselected?: TourStepHook; }; export type TourState = { isInitialized?: boolean; activeIndex?: number; activeStep?: TourStep; activeElement?: Element | null; previousStep?: TourStep; previousElement?: Element | null; popover?: TourPopoverDom; }; export type TourConfig = { animate?: boolean; allowClose?: boolean; allowKeyboardControl?: boolean; overlayClickBehavior?: TourOverlayClickBehavior; overlayOpacity?: number; overlayColor?: string; smoothScroll?: boolean; disableActiveInteraction?: boolean; showProgress?: boolean; stagePadding?: number; stageRadius?: number; popoverOffset?: number; floatingOptions?: FloatingOptions; showButtons?: TourAllowedButton[]; disableButtons?: TourAllowedButton[]; prevBtnText?: string; nextBtnText?: string; doneBtnText?: string; progressText?: string; popoverClass?: string; buttonProps?: TourButtonProps; onHighlightStarted?: TourStepHook; onHighlighted?: TourStepHook; onDeselected?: TourStepHook; onDestroyed?: TourStepHook; onDestroyStarted?: TourStepHook; onPopoverRender?: TourPopoverRenderHook; onNextClick?: TourStepHook; onPrevClick?: TourStepHook; onCloseClick?: TourStepHook; }; export type TourController = { isActive: () => boolean; refresh: () => void; drive: (stepIndex?: number) => void; setConfig: (config: TourConfig) => void; setSteps: (steps: TourStep[]) => void; getConfig: () => TourConfig; getState: () => TourState; getActiveIndex: () => number | undefined; isFirstStep: () => boolean; isLastStep: () => boolean; getActiveStep: () => TourStep | undefined; getActiveElement: () => Element | null; getPreviousElement: () => Element | null; getPreviousStep: () => TourStep | undefined; moveNext: () => void; movePrevious: () => void; moveTo: (stepIndex: number) => void; hasNextStep: () => boolean; hasPreviousStep: () => boolean; highlight: (step: TourStep) => void; destroy: () => void; }; export type TourExpose = { drive: (stepIndex?: number) => Promise; moveNext: () => void; movePrevious: () => void; moveTo: (stepIndex: number) => void; highlight: (step: TourStep) => void; destroy: () => void; refresh: () => void; isActive: () => boolean; getController: () => TourController | null; getState: () => TourState | undefined; }; export type TourBaseProps = { visible?: boolean; defaultVisible?: boolean; current?: number; defaultCurrent?: number; steps?: TourStep[]; zIndex?: number; }; export type TourProps = TourBaseProps & TourConfig;