import { Sizes } from '@m4l/styles';
import { ContentComponentSlots, ContentGroupsSlots, HeaderSidebarSlots, SideBarDesktopSlots, SideBarFooterSlots, SideBarMobileSlots } from './slots/SideBarEnum';
import { SIDEBAR_KEY_COMPONENT } from './constants';
import { Theme } from '@mui/material/styles';
import { M4LOverridesStyleRules } from '../../@types/augmentations';
import { ReactElement } from 'react';
/**
 * define la estructura de datos para un elemento de menú en la barra lateral.
 */
export interface MenuDataType extends Record<string, any> {
    title: string;
    iconUrl?: string;
    moduleId?: string;
    path?: string;
    debugPort?: number;
    children?: Array<MenuDataType>;
}
/**
 * Propiedades para el componente SideBar.
 */
export interface SideBarProps {
    /**
     * Datos del menú de la barra lateral.
     */
    menuData?: Array<MenuDataType>;
    /**
     * Indica si la barra lateral está anclada en desktop
     */
    anchored: boolean;
    /**
     * Indica si la barra lateral está visible en mobile.
     */
    visible: boolean;
    /**
     * Url del logo que está en la parte superior con el titulo en el sidebar
     */
    companyLogoSmallUrl?: string;
    /**
     * Url del logo que está en el footer del sidebar
     */
    companyLogoUrl?: string;
    /**
     * Ancho de la barra lateral cuando está expandida
     */
    expandedWidth?: string | number;
    /**
     * Nombre de la empresa
     */
    companyName?: string;
    /**
     * Slogan de la empresa
     */
    companySlogan?: string;
    moduleSelectedId?: string | undefined;
    onMenuItemClick: (item: MenuDataType) => void;
    /**
     * Función para alternar el estado colapsado de la barra lateral.
     */
    onToggleAnchored: (anchored: boolean) => void;
    /**
     *  Función para alternar la visibilidad de la barra lateral.
     */
    onToggleVisible: (visible: boolean) => void;
    /**
     * Tamaño del componente, puede ser uno de los valores definidos en 'small' , 'medium'
     */
    size?: Extract<Sizes, 'small' | 'medium'>;
    /**
     * Prefijo de la url de los iconos
     */
    urlIconPrefix?: string;
    /**
     * Variación del componente, puede ser uno de los valores definidos en 'variantDefault' , 'variantComercial'
     */
    variant?: SidebarVariants;
    /**
     * Componente que se renderiza en el encabezado del sidebar
     */
    headerComponent?: ReactElement;
    /**
     * Componente que se renderiza en el pie de página del sidebar
     */
    footerComponent?: ReactElement;
}
export type SidebarVariants = 'host' | 'microfrontend';
/**
 * Interface que representa el estado de un elemento de menú en la barra lateral.
 */
export interface IMenuDataWithState extends MenuDataType {
    active?: boolean;
    itemInTreeActive?: boolean;
    children?: Array<IMenuDataWithState>;
}
/**
 * OwnerState con las propiedades de estado del sideBar
 */
export type SideBarSlotsType = SideBarDesktopSlots | ContentGroupsSlots | HeaderSidebarSlots | SideBarFooterSlots | SideBarMobileSlots | ContentComponentSlots;
export type SideBarOwnerState = Pick<IMenuDataWithState, 'active' | 'itemInTreeActive'> & {
    [key: string]: any;
};
export type SideBarStyles = M4LOverridesStyleRules<SideBarSlotsType, typeof SIDEBAR_KEY_COMPONENT, Theme>;
export type SideBarDesktopStyles = M4LOverridesStyleRules<SideBarDesktopSlots, typeof SIDEBAR_KEY_COMPONENT, Theme>;
export type ContentGroupsStyles = M4LOverridesStyleRules<ContentGroupsSlots, typeof SIDEBAR_KEY_COMPONENT, Theme>;
export type HeaderComponentStyles = M4LOverridesStyleRules<HeaderSidebarSlots, typeof SIDEBAR_KEY_COMPONENT, Theme>;
export type SideBarFooterStyles = M4LOverridesStyleRules<SideBarFooterSlots, typeof SIDEBAR_KEY_COMPONENT, Theme>;
export type SideBarMobileStyles = M4LOverridesStyleRules<SideBarMobileSlots, typeof SIDEBAR_KEY_COMPONENT, Theme>;
export type ContentComponentStyles = M4LOverridesStyleRules<ContentComponentSlots, typeof SIDEBAR_KEY_COMPONENT, Theme>;
//# sourceMappingURL=types.d.ts.map