ede064cc11
- Create global styles and theme management - Implement app shell layout with sidebar navigation - Add authentication layout and pages for login and registration - Develop dashboard page with placeholder content - Introduce routing guards for guest-only and authenticated routes - Set up Zustand for state management of authentication and theme - Create API types and structures for CRM entities - Configure Vite with PWA support and Tailwind CSS
25 lines
850 B
TypeScript
25 lines
850 B
TypeScript
import { Fragment } from 'react'
|
|
|
|
import { Toast, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport } from '@/components/ui/toast'
|
|
import { useToast } from '@/components/ui/use-toast'
|
|
|
|
export const Toaster = () => {
|
|
const { toasts, dismiss } = useToast()
|
|
|
|
return (
|
|
<ToastProvider swipeDirection="right">
|
|
<ToastViewport />
|
|
{toasts.map(({ id, title, description, action, ...toast }) => (
|
|
<Toast key={id} onOpenChange={(open) => !open && dismiss(id)} {...toast}>
|
|
<div className="grid gap-1">
|
|
{title ? <ToastTitle>{title}</ToastTitle> : null}
|
|
{description ? <ToastDescription>{description}</ToastDescription> : null}
|
|
</div>
|
|
{action ? <Fragment>{action}</Fragment> : null}
|
|
<ToastClose />
|
|
</Toast>
|
|
))}
|
|
</ToastProvider>
|
|
)
|
|
}
|