UNPKG

@vertisanpro/flowbite-react

Version:

Non-Official React components built for Flowbite and Tailwind CSS

33 lines (32 loc) 1.37 kB
'use client'; import { twMerge } from '@vertisanpro/tailwind-merge'; import React, { useState } from 'react'; import { mergeDeep } from '../../helpers/merge-deep'; import { getTheme } from '../../theme-store'; import { ToastContext } from './ToastContext'; import { ToastToggle } from './ToastToggle'; const durationClasses = { 75: 'duration-75', 100: 'duration-100', 150: 'duration-150', 200: 'duration-200', 300: 'duration-300', 500: 'duration-500', 700: 'duration-700', 1000: 'duration-1000', }; const ToastComponent = ({ children, className, duration = 300, theme: customTheme = {}, ...props }) => { const [isClosed, setIsClosed] = useState(false); const [isRemoved, setIsRemoved] = useState(false); const theme = mergeDeep(getTheme().toast, customTheme); if (isRemoved) { return null; } return (React.createElement(ToastContext.Provider, { value: { theme, duration, isClosed, isRemoved, setIsClosed, setIsRemoved } }, React.createElement("div", { "data-testid": "flowbite-toast", role: "alert", className: twMerge(theme.root.base, durationClasses[duration], isClosed && theme.root.closed, className), ...props }, children))); }; ToastComponent.displayName = 'Toast'; ToastToggle.displayName = 'Toast.Toggle'; export const Toast = Object.assign(ToastComponent, { Toggle: ToastToggle, });