import type { CSSProperties, VNodeChild } from 'vue'; import type { ExtractThemeOverrides } from '../../_mixins/use-theme'; import type { DropdownTheme } from '../../dropdown/styles'; import type { ImageProps } from '../../image'; import type { MenuOption as BaseMenuOption, Key, MenuDividerOption, MenuGroupOption } from '../../menu/src/interface'; import type { TabsProps } from '../../tabs'; export interface HeaderProps { menuOptions?: HeaderMenuOption[]; langOptions?: LangOption[]; defaultLang?: string | number; menuPlacement?: HeaderMenuPlacement; menuTrigger?: HeaderMenuTrigger; menuValue?: string | number | null; activeMenuKey?: string | number | null; menuTabsProps?: HeaderMenuTabsProps; menuCardMinColumnWidth?: string | number; logoSrc?: string; logoAlt?: string; logoProps?: Partial; responsive?: boolean; isMobile?: boolean; mobileMenuType?: 'drawer' | 'dropdown'; mobileActionsCollapse?: boolean; mobileShowFooterActions?: boolean; mobilePrimaryActionText?: string; mobileSecondaryActionText?: string; mobileShowHeaderActions?: boolean; actionsProps?: Partial; onSearch?: HeaderSearchHandler; onUpdateMenuValue: (value: string | number | null) => void; onUpdateActiveMenuKey?: (value: string | number | null) => void; } export interface HeaderActionsProps { langOptions?: LangOption[]; currentLang?: LangOption; mergedClsPrefix: string; responsive?: boolean; isMobile?: boolean; mobileActionsCollapse?: boolean; actionsVisibility?: ActionsVisibility; cssVars?: CSSProperties; langDropdownThemeOverrides?: ExtractThemeOverrides; onSearch: HeaderSearchHandler; onPreview: VoidFunction; onLogout: VoidFunction; onLanguageSelect: (key: string | number) => void; onSearchResultSelect: (result: HeaderSearchResult) => void; } export interface ActionsVisibility { lang?: boolean; search?: boolean; accessibility?: boolean; logout?: boolean; } export interface HeaderMenuColumnOption { type: 'column'; key?: Key; children?: HeaderMenuChildOption[]; } export interface LangOption { label: string | (() => VNodeChild); key: string | number; icon?: () => VNodeChild; } export interface HeaderSearchResult { key: string | number; label: string; description?: string; icon?: () => VNodeChild; extra?: string; onClick?: () => void; disabled?: boolean; } export type HeaderMenuGroupOption = MenuGroupOption & { onClick?: () => void; }; export type HeaderMenuDividerOption = MenuDividerOption; export type HeaderSearchHandler = (query: string) => Promise | HeaderSearchResult[]; export type HeaderMenuChildOption = HeaderMenuColumnOption | HeaderMenuGroupOption | HeaderMenuDividerOption | HeaderMenuOption; export type HeaderMenuOption = Omit & { key?: string | number | null; children?: HeaderMenuChildOption[]; hide?: boolean; onClick?: () => void; }; export type HeaderMenuPlacement = 'horizontal' | 'vertical' | 'top' | 'bottom' | 'left' | 'right'; export type HeaderMenuTrigger = 'click' | 'hover'; export type HeaderMenuTabsProps = Partial;