From 7a737bc138841dfd447eebd8145fd552a0f9d9e2 Mon Sep 17 00:00:00 2001 From: prism Date: Sat, 6 Dec 2025 06:18:27 +0100 Subject: [PATCH] feat(HeaderBarAPI): improvements & fixes (#538) * feat(HeaderBarAPI): improvements & fixes * t * lint * unused * Update index.tsx * Changelog: add for settings v2 --------- Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com> --- src/api/HeaderBar.tsx | 31 +++++++++++++++++-- src/api/PluginManager.ts | 12 +++---- .../settings/tabs/changelog/index.tsx | 2 +- .../settings/tabs/sync/CloudTab.tsx | 27 ++++++++-------- src/equicordplugins/equicordToolbox/index.tsx | 21 +++++-------- .../equicordToolbox/styles.css | 15 +-------- src/equicordplugins/holyNotes/index.tsx | 12 ++++--- .../components/LogsButton.tsx | 6 ++-- .../messageLoggerEnhanced/index.tsx | 12 ++++--- .../questCompleter.discordDesktop/index.tsx | 9 ++++-- src/equicordplugins/sidebarChat/index.tsx | 14 +++------ src/equicordplugins/soggy/index.tsx | 21 ++++++++++--- .../components/SoundBoardLog.tsx | 6 ++-- .../soundBoardLogger/index.tsx | 7 ++++- src/plugins/_core/settings.tsx | 8 ++++- src/utils/types.ts | 4 +-- 16 files changed, 122 insertions(+), 85 deletions(-) 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)}>