Compare commits

..

5 Commits

Author SHA1 Message Date
semantic-release-bot
7e5c7b5ac3 chore(release): 3.19.2 [CI SKIP] 2023-03-07 23:48:45 +00:00
Beebles
f71e4dedc8 Merge pull request #71 from doZennn/patch-1
fix(Item): add highlightOnFocus prop
2023-03-07 16:48:10 -07:00
semantic-release-bot
86f33de2c0 chore(release): 3.19.1 [CI SKIP] 2023-02-23 02:57:40 +00:00
AAGaming
0b6dc24c0d fix(*): refactoring to fix for feb 22 2023 beta 2023-02-22 21:56:46 -05:00
Jozen Blue Martinez
c53f87b4a9 fix(Item): add highlightOnFocus prop 2022-12-29 15:36:08 +08:00
9 changed files with 112 additions and 88 deletions

View File

@@ -1,3 +1,17 @@
## [3.19.2](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.19.1...v3.19.2) (2023-03-07)
### Bug Fixes
* **Item:** add highlightOnFocus prop ([c53f87b](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/c53f87b4a9273b377853bfff1d27474ebd6e564a))
## [3.19.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.19.0...v3.19.1) (2023-02-23)
### Bug Fixes
* refactoring to fix for feb 22 2023 beta ([0b6dc24](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/0b6dc24c0da2d7644e185425e975787657f8bba1))
# [3.19.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.11...v3.19.0) (2023-02-22) # [3.19.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.18.11...v3.19.0) (2023-02-22)

View File

@@ -1,6 +1,6 @@
{ {
"name": "decky-frontend-lib", "name": "decky-frontend-lib",
"version": "3.19.0", "version": "3.19.2",
"description": "A library for building decky plugins", "description": "A library for building decky plugins",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",

View File

@@ -1,14 +1,13 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
declare global { import { getFocusNavController } from '../utils';
var FocusNavController: any;
}
function getQuickAccessWindow(): Window | null { function getQuickAccessWindow(): Window | null {
try { try {
const context = FocusNavController?.m_ActiveContext || FocusNavController?.m_LastActiveContext; const navTrees = getFocusNavController()?.m_rgGamepadNavigationTrees;
const navTrees = context?.m_rgGamepadNavigationTrees || FocusNavController?.m_rgGamepadNavigationTrees; return (
return navTrees?.find((tree: any) => tree?.id === "QuickAccess-NA")?.m_Root?.m_element?.ownerDocument.defaultView ?? null; navTrees?.find((tree: any) => tree?.id === 'QuickAccess-NA')?.m_Root?.m_element?.ownerDocument.defaultView ?? null
);
} catch (error) { } catch (error) {
console.error(error); console.error(error);
return null; return null;

View File

@@ -7,9 +7,10 @@ export interface ButtonItemProps extends ItemProps {
onClick?(e: MouseEvent): void; onClick?(e: MouseEvent): void;
disabled?: boolean; disabled?: boolean;
} }
export const ButtonItem =
export const ButtonItem = Object.values(CommonUIModule).find( CommonUIModule.ButtonField ||
(mod: any) => (Object.values(CommonUIModule).find(
mod?.render?.toString()?.includes('"highlightOnFocus","childrenContainerWidth"') || (mod: any) =>
mod?.render?.toString()?.includes('childrenContainerWidth:"min"'), mod?.render?.toString()?.includes('"highlightOnFocus","childrenContainerWidth"') ||
) as FC<ButtonItemProps>; mod?.render?.toString()?.includes('childrenContainerWidth:"min"'),
) as FC<ButtonItemProps>);

View File

@@ -8,4 +8,5 @@ export interface ItemProps {
bottomSeparator?: 'standard' | 'thick' | 'none'; bottomSeparator?: 'standard' | 'thick' | 'none';
indentLevel?: number; indentLevel?: number;
tooltip?: string; tooltip?: string;
highlightOnFocus?: boolean;
} }

View File

@@ -5,7 +5,7 @@ import { findModuleChild } from '../webpack';
export interface PanelSectionProps { export interface PanelSectionProps {
title?: string; title?: string;
spinner?: boolean; spinner?: boolean;
children?: ReactNode children?: ReactNode;
} }
const [panelSection, mod] = findModuleChild((mod: any) => { const [panelSection, mod] = findModuleChild((mod: any) => {
@@ -20,9 +20,9 @@ const [panelSection, mod] = findModuleChild((mod: any) => {
export const PanelSection = panelSection as FC<PanelSectionProps>; export const PanelSection = panelSection as FC<PanelSectionProps>;
export interface PanelSectionRowProps { export interface PanelSectionRowProps {
children?: ReactNode children?: ReactNode;
} }
// New as of Feb 22 2023 Beta || Old
export const PanelSectionRow = Object.values(mod).filter( export const PanelSectionRow =
(exp: any) => !exp?.toString()?.includes('.PanelSection'), mod.PanelSectionRow ||
)[0] as FC<PanelSectionRowProps>; (Object.values(mod).filter((exp: any) => !exp?.toString()?.includes('.PanelSection'))[0] as FC<PanelSectionRowProps>);

View File

@@ -77,7 +77,6 @@ export interface WindowRouter {
NavigateToChat(): void; NavigateToChat(): void;
NavigateToSteamWeb(url: string): void; NavigateToSteamWeb(url: string): void;
NavigateBack(): void; NavigateBack(): void;
NavigateToWebRoute(unknown?: any, unknown2?: any): void;
} }
export interface WindowStore { export interface WindowStore {
@@ -118,7 +117,6 @@ export interface Navigation {
NavigateToLibraryTab(): void; NavigateToLibraryTab(): void;
NavigateToLayoutPreview(e: unknown): void; NavigateToLayoutPreview(e: unknown): void;
NavigateToSteamWeb(url: string): void; NavigateToSteamWeb(url: string): void;
NavigateToWebRoute(unknown?: any, unknown2?: any): void;
OpenSideMenu(sideMenu: SideMenu): void; OpenSideMenu(sideMenu: SideMenu): void;
OpenQuickAccessMenu(quickAccessTab?: QuickAccessTab): void; OpenQuickAccessMenu(quickAccessTab?: QuickAccessTab): void;
OpenMainMenu(): void; OpenMainMenu(): void;
@@ -154,33 +152,30 @@ try {
} }
} }
const newNavigation = { const newNavigation = {
Navigate: Router.Navigate.bind(Router), Navigate: Router.Navigate?.bind(Router),
NavigateBack: Router.WindowStore?.GamepadUIMainWindowInstance?.NavigateBack.bind( NavigateBack: Router.WindowStore?.GamepadUIMainWindowInstance?.NavigateBack?.bind(
Router.WindowStore.GamepadUIMainWindowInstance, Router.WindowStore.GamepadUIMainWindowInstance,
), ),
NavigateToAppProperties: InternalNavigators?.AppProperties || Router.NavigateToAppProperties.bind(Router), NavigateToAppProperties: InternalNavigators?.AppProperties || Router.NavigateToAppProperties?.bind(Router),
NavigateToExternalWeb: InternalNavigators?.ExternalWeb || Router.NavigateToExternalWeb.bind(Router), NavigateToExternalWeb: InternalNavigators?.ExternalWeb || Router.NavigateToExternalWeb?.bind(Router),
NavigateToInvites: InternalNavigators?.Invites || Router.NavigateToInvites.bind(Router), NavigateToInvites: InternalNavigators?.Invites || Router.NavigateToInvites?.bind(Router),
NavigateToChat: Router.NavigateToChat.bind(Router), NavigateToChat: Router.NavigateToChat?.bind(Router),
NavigateToLibraryTab: InternalNavigators?.LibraryTab || Router.NavigateToLibraryTab.bind(Router), NavigateToLibraryTab: InternalNavigators?.LibraryTab || Router.NavigateToLibraryTab?.bind(Router),
NavigateToLayoutPreview: Router.NavigateToLayoutPreview.bind(Router), NavigateToLayoutPreview: Router.NavigateToLayoutPreview?.bind(Router),
NavigateToSteamWeb: Router.WindowStore?.GamepadUIMainWindowInstance?.NavigateToSteamWeb.bind( NavigateToSteamWeb: Router.WindowStore?.GamepadUIMainWindowInstance?.NavigateToSteamWeb?.bind(
Router.WindowStore.GamepadUIMainWindowInstance, Router.WindowStore.GamepadUIMainWindowInstance,
), ),
NavigateToWebRoute: Router.WindowStore?.GamepadUIMainWindowInstance?.NavigateToWebRoute.bind( OpenSideMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenSideMenu?.bind(
Router.WindowStore.GamepadUIMainWindowInstance,
),
OpenSideMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenSideMenu.bind(
Router.WindowStore.GamepadUIMainWindowInstance.MenuStore, Router.WindowStore.GamepadUIMainWindowInstance.MenuStore,
), ),
OpenQuickAccessMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenQuickAccessMenu.bind( OpenQuickAccessMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenQuickAccessMenu?.bind(
Router.WindowStore.GamepadUIMainWindowInstance.MenuStore, Router.WindowStore.GamepadUIMainWindowInstance.MenuStore,
), ),
OpenMainMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenMainMenu.bind( OpenMainMenu: Router.WindowStore?.GamepadUIMainWindowInstance?.MenuStore.OpenMainMenu?.bind(
Router.WindowStore.GamepadUIMainWindowInstance.MenuStore, Router.WindowStore.GamepadUIMainWindowInstance.MenuStore,
), ),
CloseSideMenus: Router.CloseSideMenus.bind(Router), CloseSideMenus: Router.CloseSideMenus?.bind(Router),
OpenPowerMenu: Router.OpenPowerMenu.bind(Router), OpenPowerMenu: Router.OpenPowerMenu?.bind(Router),
} as Navigation; } as Navigation;
Object.assign(Navigation, newNavigation); Object.assign(Navigation, newNavigation);

View File

@@ -26,55 +26,56 @@ export * from './Toggle';
export * from './ToggleField'; export * from './ToggleField';
export * from './SteamClient'; export * from './SteamClient';
import { SteamClient, SteamAppOverview, LogoPosition } from './SteamClient'; import { AppDetails, LogoPosition, SteamAppOverview, SteamClient } from './SteamClient';
declare global { declare global {
var SteamClient: SteamClient; var SteamClient: SteamClient;
interface Window { interface Window {
LocalizationManager: { LocalizationManager: {
m_mapTokens: Map<string, string>; m_mapTokens: Map<string, string>;
m_mapFallbackTokens: Map<string, string>; m_mapFallbackTokens: Map<string, string>;
m_rgLocalesToUse: string[]; m_rgLocalesToUse: string[];
};
App: {
m_CurrentUser: {
bIsLimited: boolean;
bIsOfflineMode: boolean;
bSupportAlertActive: boolean;
bCanInviteFriends: boolean;
NotificationCounts: {
comments: number;
inventory_items: number;
invites: number;
gifts: number;
offline_messages: number;
trade_offers: number;
async_game_updates: number;
moderator_messages: number;
help_request_replies: number;
}; };
App: { strAccountBalance: string;
m_CurrentUser: { strAccountName: string;
bIsLimited: boolean; strSteamID: string;
bIsOfflineMode: boolean; };
bSupportAlertActive: boolean; };
bCanInviteFriends: boolean; appStore: {
NotificationCounts: { GetAppOverviewByAppID: (appId: number) => SteamAppOverview | null;
comments: number; GetCustomVerticalCapsuleURLs: (app: SteamAppOverview) => string[];
inventory_items: number; GetCustomLandcapeImageURLs: (app: SteamAppOverview) => string[];
invites: number; GetCustomHeroImageURLs: (app: SteamAppOverview) => string[];
gifts: number; GetCustomLogoImageURLs: (app: SteamAppOverview) => string[];
offline_messages: number; GetLandscapeImageURLForApp: (app: SteamAppOverview) => string;
trade_offers: number; GetVerticalCapsuleURLForApp: (app: SteamAppOverview) => string;
async_game_updates: number; GetCachedLandscapeImageURLForApp: (app: SteamAppOverview) => string;
moderator_messages: number; GetCachedVerticalImageURLForApp: (app: SteamAppOverview) => string;
help_request_replies: number; GetPregeneratedVerticalCapsuleForApp: (app: SteamAppOverview) => string;
}; GetIconURLForApp: (app: SteamAppOverview) => string;
strAccountBalance: string; };
strAccountName: string; appDetailsStore: {
strSteamID: string; GetAppDetails: (appId: number) => AppDetails | null;
}; GetCustomLogoPosition: (app: SteamAppOverview) => LogoPosition | null;
}; SaveCustomLogoPosition: (app: SteamAppOverview, logoPositions: LogoPosition) => any;
appStore: { };
GetAppOverviewByAppID: (appId: number) => SteamAppOverview | null; }
GetCustomVerticalCapsuleURLs: (app: SteamAppOverview) => string[];
GetCustomLandcapeImageURLs: (app: SteamAppOverview) => string[];
GetCustomHeroImageURLs: (app: SteamAppOverview) => string[];
GetCustomLogoImageURLs: (app: SteamAppOverview) => string[];
GetLandscapeImageURLForApp: (app: SteamAppOverview) => string;
GetVerticalCapsuleURLForApp: (app: SteamAppOverview) => string;
GetCachedLandscapeImageURLForApp: (app: SteamAppOverview) => string;
GetCachedVerticalImageURLForApp: (app: SteamAppOverview) => string;
GetPregeneratedVerticalCapsuleForApp: (app: SteamAppOverview) => string;
GetIconURLForApp: (app: SteamAppOverview) => string;
};
appDetailsStore: {
GetCustomLogoPosition: (app: SteamAppOverview) => LogoPosition | null;
SaveCustomLogoPosition: (app: SteamAppOverview, logoPositions: LogoPosition) => any;
}
}
} }

View File

@@ -1,6 +1,11 @@
export * from './patcher'; export * from './patcher';
export * from './react'; export * from './react';
declare global {
var FocusNavController: any;
var GamepadNavTree: any;
}
export function joinClassNames(...classes: string[]): string { export function joinClassNames(...classes: string[]): string {
return classes.join(' '); return classes.join(' ');
} }
@@ -16,7 +21,15 @@ export function findSP(): Window {
// old (SP as host) // old (SP as host)
if (document.title == 'SP') return window; if (document.title == 'SP') return window;
// new (SP as popup) // new (SP as popup)
const context = FocusNavController.m_ActiveContext || FocusNavController.m_LastActiveContext; const focusNav = getFocusNavController();
return context.m_rgGamepadNavigationTrees.find((x: any) => x.m_ID == 'root_1_').Root const context = focusNav.m_ActiveContext || focusNav.m_LastActiveContext;
.Element.ownerDocument.defaultView; return context.m_rgGamepadNavigationTrees.find((x: any) => x.m_ID == 'root_1_').Root.Element.ownerDocument
.defaultView;
}
/**
* Gets the correct FocusNavController, as the Feb 22 2023 beta has two for some reason.
*/
export function getFocusNavController(): any {
return window.GamepadNavTree?.m_context?.m_controller || window.FocusNavController;
} }