@vertisanpro/flowbite-react
Version:
Non-Official React components built for Flowbite and Tailwind CSS
33 lines (32 loc) • 1.37 kB
JavaScript
'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,
});