'use client' import type { ComponentProps, RefObject } from 'react' import type { StepByStepTourTaskId, StepByStepTourTaskView } from './types' import { Button } from '@langgenius/dify-ui/button' import { cn } from '@langgenius/dify-ui/cn' import { IconButton } from '@langgenius/dify-ui/icon-button' import { PopoverDescription, PopoverTitle } from '@langgenius/dify-ui/popover' import { useEffect } from 'react' export type FloatingChecklistProps = { className?: string title: string duration: string progress: { ariaValueText: string completed: number total: number } completionPrompt?: { description: string dismissLabel: string label: string onDismiss: () => void title: string } tasks: StepByStepTourTaskView[] closeButtonRef: RefObject skipLabel: string minimizeLabel: string getTaskCompleteLabel: (taskTitle: string) => string getTaskIncompleteLabel: (taskTitle: string) => string onMinimize: () => void onSkip: () => void onCompleteTask: (taskId: StepByStepTourTaskId) => void onStartTask: (taskId: StepByStepTourTaskId) => void onUncompleteTask: (taskId: StepByStepTourTaskId) => void } export function FloatingChecklist({ className, title, duration, progress, completionPrompt, tasks, closeButtonRef, skipLabel, minimizeLabel, getTaskCompleteLabel, getTaskIncompleteLabel, onMinimize, onSkip, onCompleteTask, onStartTask, onUncompleteTask, }: FloatingChecklistProps) { return (
{title} {duration}
{!completionPrompt && ( <> )}
{tasks.map((task) => ( ))} {completionPrompt && ( )}
) } function TourCompletionPrompt({ description, dismissLabel, label, onDismiss, title, closeButtonRef, }: NonNullable & { closeButtonRef: RefObject }) { useEffect(() => { closeButtonRef.current?.focus({ preventScroll: true }) }, [closeButtonRef]) return (

{title}

{description}

) } export function MinimizedTourPill({ title, progress, className, ...props }: { title: string progress: FloatingChecklistProps['progress'] } & ComponentProps<'button'>) { return ( ) } function TourProgress({ ariaValueText, completed, total, }: { ariaValueText: string completed: number total: number }) { return ( <>