import React, { ReactElement, Dispatch, SetStateAction, HTMLAttributeAnchorTarget, ReactNode } from 'react'; import { NextPage } from 'next'; import type { Demo } from './demo'; import { Toast } from 'primereact/toast'; /* Next & Layout Types */ type Page

= NextPage

& { getLayout?: (page: ReactElement) => ReactNode; }; /* Exported types */ export type MenuMode = 'static' | 'overlay' | 'horizontal' | 'slim' | 'slim-plus' | 'reveal' | 'drawer'; export type ColorScheme = 'light' | 'dark' | 'dim'; /* Breadcrumb Types */ export interface AppBreadcrumbProps { className?: string; } export interface Breadcrumb { labels?: string[]; to?: string; } export interface BreadcrumbItem { label?: string; to?: string; items?: BreadcrumbItem[]; } /* Context Types */ export type LayoutState = { staticMenuDesktopInactive: boolean; overlayMenuActive: boolean; rightMenuVisible: boolean; overlaySubmenuActive: boolean; configSidebarVisible: boolean; staticMenuMobileActive: boolean; menuHoverActive: boolean; searchBarActive: boolean; resetMenu: boolean; sidebarActive: boolean; anchored: boolean; rightMenuActive: boolean; }; export type LayoutConfig = { ripple: boolean; inputStyle: string; menuMode: MenuMode; colorScheme: ColorScheme; theme: string; scale: number; }; export interface LayoutContextProps { layoutConfig: LayoutConfig; setLayoutConfig: Dispatch>; layoutState: LayoutState; setLayoutState: Dispatch>; showRightSidebar: () => void; onMenuToggle: (event: React.MouseEvent) => void; isSlimPlus: () => boolean; isSlim: () => boolean; isHorizontal: () => boolean; isDesktop: () => boolean; breadcrumbs?: Breadcrumb[]; setBreadcrumbs: Dispatch>; onSearchHide: (event: React.KeyboardEvent) => void; toggleSearch: (event: React.MouseEvent) => void; showConfigSidebar: () => void; showSidebar: () => void; } export interface MailContextProps { mails: Demo.Mail[]; toastRef: React.RefObject; updateMails: (data: Demo.Mail[]) => void; clearMailActions: (mail: Demo.Mail) => void; onStar: (id: number) => void; onArchive: (id: number) => void; onBookmark: (id: number) => void; onDelete: (id: number) => void; onDeleteMultiple: (mailArray: Demo.Mail[]) => void; onArchiveMultiple: (mailArray: Demo.Mail[]) => void; onSpamMultiple: (mailArray: Demo.Mail[]) => void; onTrash: (id: number) => void; onSend: (mail: Demo.Mail) => void; } export interface MenuContextProps { activeMenu: string; setActiveMenu: Dispatch>; } export interface ChatContextProps { users: Demo.User[]; setUsers: Dispatch>; activeUser: Demo.User; setActiveUser: Dispatch>; getChatData: () => Promise; changeActiveChat: (user: Demo.User) => void; sendMessage: (message: Demo.Message) => void; } export interface TaskContextProps { dialogConfig: Demo.DialogConfig; selectedTask: Demo.Task | null; tasks: Demo.Task[]; members: Demo.Member[]; setTasks: Dispatch>; setMembers: Dispatch>; setDialogConfig: Dispatch>; setSelectedTask: Dispatch>; getTasks: () => Promise; getMembers: () => Promise; addTask: (task: Demo.Task) => void; editTask: (task: Demo.Task) => void; removeTask: (id: number) => void; onTaskSelect: (task: Demo.Task) => void; markAsCompleted: (task: Demo.Task) => void; showDialog: (header: string, newTask: boolean) => void; closeDialog: () => void; } /* AppConfig Types */ export interface AppConfigProps { minimal?: boolean; } /* AppTopbar Types */ export type NodeRef = MutableRefObject; export interface AppTopbarRef { menubutton?: HTMLButtonElement | null; topbarmenu?: HTMLDivElement | null; topbarmenubutton?: HTMLButtonElement | null; } /* AppMenu Types */ type CommandProps = { originalEvent: React.MouseEvent; item: MenuModalItem; }; export interface MenuProps { model: MenuModal[]; } export interface MenuModal { label?: string; icon?: string; items?: MenuModal[]; to?: string; url?: string; target?: HTMLAttributeAnchorTarget; separator?: boolean; requiredRoles?: import('./auth').UserRole[]; requiredPermissions?: string[]; } export interface UseSubmenuOverlayPositionProps { target: HTMLElement | null; overlay: HTMLElement | null; container: HTMLElement | null; when?: any; } export interface AppMenuItem extends MenuModal { items?: AppMenuItem[]; badgeClass?: string; class?: string; preventExact?: boolean; visible?: boolean; disabled?: boolean; replaceUrl?: boolean; command?: ({ originalEvent, item }: CommandProps) => void; } export interface AppMenuItemProps { item?: AppMenuItem; parentKey?: string; index?: number; root?: boolean; className?: string; }