diff --git a/src/api/HeaderBar.tsx b/src/api/HeaderBar.tsx index 04d740f8c..db5c66186 100644 --- a/src/api/HeaderBar.tsx +++ b/src/api/HeaderBar.tsx @@ -5,11 +5,21 @@ */ import ErrorBoundary from "@components/ErrorBoundary"; +import { Logger } from "@utils/Logger"; +import { findComponentByCodeLazy } from "@webpack"; import { useEffect, useState } from "@webpack/common"; -import type { JSX } from "react"; +import type { ComponentType, JSX, MouseEventHandler, ReactNode, RefObject } from "react"; + +const logger = new Logger("HeaderBarAPI"); export type HeaderBarButtonFactory = () => JSX.Element | null; +export interface HeaderBarButtonData { + render: HeaderBarButtonFactory; + icon: ComponentType; + priority?: number; +} + interface HeaderBarButton { render: HeaderBarButtonFactory; priority: number; @@ -19,6 +29,23 @@ export const buttons = new Map(); const listeners = new Set<() => void>(); +export interface HeaderBarButtonProps { + icon: ComponentType; + tooltip: ReactNode; + onClick?: MouseEventHandler; + onContextMenu?: MouseEventHandler; + className?: string; + iconClassName?: string; + position?: "top" | "bottom" | "left" | "right"; + selected?: boolean; + disabled?: boolean; + showBadge?: boolean; + badgePosition?: "top" | "bottom"; + ref?: RefObject; +} + +export const HeaderBarButton = findComponentByCodeLazy(".HEADER_BAR_BADGE_TOP:", '.iconBadge,"top"') as ComponentType; + /** * Add a button to the header bar. * @param id Unique identifier for the button. @@ -51,7 +78,7 @@ function HeaderBarButtons() { const sorted = Array.from(buttons).sort(([, a], [, b]) => a.priority - b.priority); return sorted.map(([id, { render: Button }]) => ( - + logger.error(`Failed to render ${id}`, e.error)}>