import React, { useState } from 'react';
import AlertModal, { AlertModalVariant } from '../components/ui/alert/AlertModal';
import { Modal } from '../components/ui/modal';
import Button from '../components/ui/button/Button';
import { Dropdown } from '../components/ui/dropdown/Dropdown';
import { DropdownItem } from '../components/ui/dropdown/DropdownItem';
import { Pagination } from '../components/ui/pagination/Pagination';
import { Card, CardImage, CardTitle, CardDescription, CardAction, CardIcon } from '../components/ui/card/Card';
import ChartTab from '../components/common/ChartTab';
import PageMeta from '../components/common/PageMeta';
export default function Components() {
// Alert modals state
const [alertModal, setAlertModal] = useState<{
isOpen: boolean;
variant: AlertModalVariant;
}>({
isOpen: false,
variant: 'info',
});
// Regular modals state
const [defaultModal, setDefaultModal] = useState(false);
const [centeredModal, setCenteredModal] = useState(false);
const [formModal, setFormModal] = useState(false);
const [fullScreenModal, setFullScreenModal] = useState(false);
const openAlertModal = (variant: AlertModalVariant) => {
setAlertModal({ isOpen: true, variant });
};
const alertMessages = {
success: {
title: 'Well Done!',
message: 'Lorem ipsum dolor sit amet consectetur. Feugiat ipsum libero tempor felis risus nisi non. Quisque eu ut tempor curabitur.',
},
info: {
title: 'Information Alert!',
message: 'Lorem ipsum dolor sit amet consectetur. Feugiat ipsum libero tempor felis risus nisi non. Quisque eu ut tempor curabitur.',
},
warning: {
title: 'Warning Alert!',
message: 'Lorem ipsum dolor sit amet consectetur. Feugiat ipsum libero tempor felis risus nisi non. Quisque eu ut tempor curabitur.',
},
danger: {
title: 'Danger Alert!',
message: 'Lorem ipsum dolor sit amet consectetur. Feugiat ipsum libero tempor felis risus nisi non. Quisque eu ut tempor curabitur.',
},
};
return (
<>
{/* Default Modal Card */}
Default Modal
setDefaultModal(true)}
>
Open Modal
{/* Vertically Centered Modal Card */}
Vertically Centered Modal
setCenteredModal(true)}
>
Open Modal
{/* Form In Modal Card */}
Form In Modal
setFormModal(true)}
>
Open Modal
{/* Full Screen Modal Card */}
Full Screen Modal
setFullScreenModal(true)}
>
Open Modal
{/* Modal Based Alerts Card */}
Modal Based Alerts
openAlertModal('success')}
className="px-4 py-3 text-sm font-medium text-white rounded-lg bg-success-500 shadow-theme-xs hover:bg-success-600 transition-colors"
>
Success Alert
openAlertModal('info')}
className="px-4 py-3 text-sm font-medium text-white rounded-lg bg-blue-light-500 shadow-theme-xs hover:bg-blue-light-600 transition-colors"
>
Info Alert
openAlertModal('warning')}
className="px-4 py-3 text-sm font-medium text-white rounded-lg bg-warning-500 shadow-theme-xs hover:bg-warning-600 transition-colors"
>
Warning Alert
openAlertModal('danger')}
className="px-4 py-3 text-sm font-medium text-white rounded-lg bg-error-500 shadow-theme-xs hover:bg-error-600 transition-colors"
>
Danger Alert
{/* Dropdowns, Buttons Group, Ribbons, Spinners, Tabs, Tooltips, Pagination, Cards */}
{/* Alert Modals */}
setAlertModal({ ...alertModal, isOpen: false })}
title={alertMessages[alertModal.variant].title}
message={alertMessages[alertModal.variant].message}
variant={alertModal.variant}
/>
{/* Default Modal */}
setDefaultModal(false)}
className="max-w-md"
>
Modal Heading
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque
euismod est quis mauris lacinia pharetra.
setDefaultModal(false)}>
Close
setDefaultModal(false)}>
Save Changes
{/* Vertically Centered Modal */}
setCenteredModal(false)}
className="max-w-md"
>
Vertically Centered Modal
This modal is centered vertically on the screen. Lorem ipsum dolor sit
amet, consectetur adipiscing elit.
setCenteredModal(false)}>
Close
setCenteredModal(false)}>
Save Changes
{/* Form In Modal */}
setFormModal(false)}
className="max-w-2xl"
>
{/* Full Screen Modal */}
setFullScreenModal(false)}
className="max-w-4xl"
isFullscreen={false}
>
Full Screen Modal
This is a larger modal that takes up more screen space. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Pellentesque euismod est
quis mauris lacinia pharetra.
setFullScreenModal(false)}>
Close
setFullScreenModal(false)}>
Save Changes
>
);
}
// Dropdowns Showcase Component
function DropdownsShowcase() {
const [dropdown1, setDropdown1] = useState(false);
const [dropdown2, setDropdown2] = useState(false);
const [dropdown3, setDropdown3] = useState(false);
return (
Dropdowns
{/* Default Dropdown */}
setDropdown1(!dropdown1)}
className="dropdown-toggle inline-flex px-4 py-3 text-sm font-medium text-white rounded-lg bg-brand-500 shadow-theme-xs hover:bg-brand-600"
>
Dropdown Default
setDropdown1(false)} className="w-48 p-2 mt-2">
setDropdown1(false)} className="flex items-center gap-3 px-3 py-2 font-medium text-gray-700 rounded-lg text-theme-sm hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300">
Edit
setDropdown1(false)} className="flex items-center gap-3 px-3 py-2 font-medium text-gray-700 rounded-lg text-theme-sm hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300">
Delete
{/* Dropdown with Divider */}
setDropdown2(!dropdown2)}
className="dropdown-toggle inline-flex px-4 py-3 text-sm font-medium text-white rounded-lg bg-brand-500 shadow-theme-xs hover:bg-brand-600"
>
Dropdown with Divider
setDropdown2(false)} className="w-48 p-2 mt-2">
setDropdown2(false)} className="flex items-center gap-3 px-3 py-2 font-medium text-gray-700 rounded-lg text-theme-sm hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300">
Edit
setDropdown2(false)} className="flex items-center gap-3 px-3 py-2 font-medium text-gray-700 rounded-lg text-theme-sm hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300">
View
setDropdown2(false)} className="flex items-center gap-3 px-3 py-2 font-medium text-gray-700 rounded-lg text-theme-sm hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300">
Delete
{/* Dropdown with Icon */}
setDropdown3(!dropdown3)}
className="dropdown-toggle inline-flex px-4 py-3 text-sm font-medium text-white rounded-lg bg-brand-500 shadow-theme-xs hover:bg-brand-600"
>
Dropdown with Icon
setDropdown3(false)} className="w-48 p-2 mt-2">
setDropdown3(false)} className="flex items-center gap-3 px-3 py-2 font-medium text-gray-700 rounded-lg text-theme-sm hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300">
Edit
setDropdown3(false)} className="flex items-center gap-3 px-3 py-2 font-medium text-gray-700 rounded-lg text-theme-sm hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300">
View
setDropdown3(false)} className="flex items-center gap-3 px-3 py-2 font-medium text-red-600 rounded-lg text-theme-sm hover:bg-red-50 hover:text-red-700 dark:text-red-400 dark:hover:bg-red-900/20 dark:hover:text-red-300">
Delete
);
}
// Button Groups Showcase Component
function ButtonGroupsShowcase() {
return (
Button Groups
{/* Default Button Group */}
Left
Center
Right
{/* Icon Button Group */}
);
}
// Ribbons Showcase Component
function RibbonsShowcase() {
return (
{/* Rounded Ribbon */}
Rounded Ribbon
Popular
Lorem ipsum dolor sit amet consectetur. Eget nulla suscipit arcu rutrum amet vel nec fringilla vulputate.
{/* Filled Ribbon */}
Filled Ribbon
New
Lorem ipsum dolor sit amet consectetur. Eget nulla suscipit arcu rutrum amet vel nec fringilla vulputate.
);
}
// Spinners Showcase Component
function SpinnersShowcase() {
return (
Spinners
{/* Default Spinner */}
{/* Small Spinner */}
{/* Large Spinner */}
{/* Colored Spinners */}
);
}
// Tabs Showcase Component
function TabsShowcase() {
return (
);
}
// Tooltips Showcase Component
function TooltipsShowcase() {
return (
Tooltips
Tooltip Top
Tooltip Top
Tooltip Right
Tooltip Right
);
}
// Pagination Showcase Component
function PaginationShowcase() {
const [page1, setPage1] = useState(1);
const [page2, setPage2] = useState(1);
const [page3, setPage3] = useState(1);
return (
{/* Pagination with Text */}
{/* Pagination with Text and Icon */}
Pagination with Text and Icon
{/* Pagination with Icon */}
);
}
// Cards Showcase Component
function CardsShowcase() {
return (
{/* Basic Card */}
Basic Card
Card Title
This is a basic card with title and description.
{/* Card with Icon */}
Card with Icon
Card with Icon
This card includes an icon at the top.
Learn More
);
}