import { isWeb } from 'tamagui' import { Toast, toast, useToastItem, type ToastPosition, type ToastT, } from '@tamagui/toast/v2' import { ArrowDown, ArrowDownLeft, ArrowDownRight, ArrowUp, ArrowUpLeft, ArrowUpRight, } from '@tamagui/lucide-icons-2' import { useRef, useState } from 'react' import { Button, Label, SizableText, Slider, XStack, YStack } from 'tamagui' export const ToastDemo = () => { const [position, setPosition] = useState('bottom-right') const [gap, setGap] = useState(14) const [visibleToasts, setVisibleToasts] = useState(4) const [duration, setDuration] = useState(4000) const count = useRef(0) const showToast = (newPosition: ToastPosition) => { setPosition(newPosition) count.current++ toast(`Toast #${count.current}`, { description: 'Swipe to dismiss or wait for auto-close.', }) } return ( ( )} /> {/* Position buttons */} {/* Controls */} `${(v / 1000).toFixed(1)}s`} /> ) } function ToastContent({ toast: t }: { toast: ToastT }) { const { handleClose } = useToastItem() const title = typeof t.title === 'function' ? t.title() : t.title const description = typeof t.description === 'function' ? t.description() : t.description return ( <> {title && ( {title} )} {description && ( {description} )} {isWeb && ( )} ) } function DemoSlider({ label, value, min, max, step, onChange, format, }: { label: string value: number min: number max: number step?: number onChange: (v: number) => void format?: (v: number) => string }) { return ( onChange(v)} > {format ? format(value) : Math.round(value)} ) } const PositionButton = ({ position, current, onPress, Icon, testID, }: { position: ToastPosition current: ToastPosition onPress: (p: ToastPosition) => void Icon: any testID?: string }) => { const isActive = position === current return (