@decky/ui 4.16.0 → 4.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,25 @@
1
1
  import type { SteamClient } from './steam-client';
2
2
  import type { CApp, CAppDetailsStore, CAppStore, CBadgeStore, CCollectionStore, CConsoleStore, CFocusNavController, CFriendStore, CGameRecordingStore, CLibraryUIStore, CLocalizationManager, CMainWindowBrowserManager, CNotificationStore, CPopupManager, CSecurityStore, CSettingsStore, CSteamUIStore, CURLStore } from './stores';
3
3
  declare global {
4
+ var App: CApp;
5
+ var appStore: CAppStore;
6
+ var appDetailsStore: CAppDetailsStore;
7
+ var badgeStore: CBadgeStore;
8
+ var collectionStore: CCollectionStore;
9
+ var ConsoleStore: CConsoleStore;
10
+ var FocusNavController: CFocusNavController;
11
+ var friendStore: CFriendStore;
12
+ var g_GRS: CGameRecordingStore;
13
+ var g_PopupManager: CPopupManager;
14
+ var LocalizationManager: CLocalizationManager;
15
+ var MainWindowBrowserManager: CMainWindowBrowserManager;
16
+ var NotificationStore: CNotificationStore;
17
+ var securitystore: CSecurityStore;
18
+ var settingsStore: CSettingsStore;
19
+ var SteamClient: SteamClient;
20
+ var SteamUIStore: CSteamUIStore;
21
+ var uiStore: CLibraryUIStore;
22
+ var urlStore: CURLStore;
4
23
  interface Window {
5
24
  App: CApp;
6
25
  appStore: CAppStore;
@@ -23,3 +42,6 @@ declare global {
23
42
  urlStore: CURLStore;
24
43
  }
25
44
  }
45
+ export * from "./shared";
46
+ export * from "./steam-client";
47
+ export * from "./stores";
@@ -1 +1,3 @@
1
- export {};
1
+ export * from "./shared";
2
+ export * from "./steam-client";
3
+ export * from "./stores";
@@ -3,7 +3,7 @@ import type { EMsg_t } from './cm';
3
3
  import type { EBrowserType, EUIMode } from './enums';
4
4
  export interface BrowserContext {
5
5
  m_eBrowserType?: EBrowserType;
6
- m_eUIMode: EUIMode;
6
+ m_UIMode: EUIMode;
7
7
  m_gameID?: string;
8
8
  m_nBrowserID: number;
9
9
  m_unAppID?: number;
@@ -34,7 +34,7 @@ export interface ActivateOverlayRequest {
34
34
  export interface OverlayBrowserInfo {
35
35
  appID: number;
36
36
  eBrowserType: EBrowserType;
37
- eUIMode: EUIMode;
37
+ EUIMode: EUIMode;
38
38
  flDisplayScale?: number;
39
39
  gameID: string;
40
40
  nBrowserID: number;
@@ -112,12 +112,12 @@ export interface TrayNotification {
112
112
  notifications: SteamNotification[];
113
113
  }
114
114
  export interface NotificationTarget {
115
- eFeature: EParentalFeature;
116
- fnNotificationResolved: () => void;
117
- fnShowModal: () => void;
118
- fnTray: (target: NotificationTarget, notificationsInTray: TrayNotification[]) => void;
119
- nRemoveFromTraySec: number;
120
- toastDurationMS: number;
115
+ eFeature?: EParentalFeature;
116
+ fnNotificationResolved?: () => void;
117
+ fnShowModal?: () => void;
118
+ fnTray?: (target: NotificationTarget, notificationsInTray: TrayNotification[]) => void;
119
+ nRemoveFromTraySec?: number;
120
+ toastDurationMS?: number;
121
121
  type: EClientNotificationType;
122
122
  }
123
123
  export interface CNotificationStore {
@@ -30,7 +30,7 @@ export interface CSteamUIStore {
30
30
  m_bStreamingRemotePlayTogether: boolean;
31
31
  m_eErrorCondition: ERefreshLoginReason;
32
32
  m_eErrorConditionResult: EResult;
33
- m_mainInstanceUIMode: EUIMode;
33
+ m_mainInstancUIMode: EUIMode;
34
34
  m_nResumeStreamingInputTimeoutHandle: number;
35
35
  m_navigationSource: NavigationSource;
36
36
  m_runningAppIDs: number[];
@@ -113,7 +113,7 @@ export interface CSteamUIStore {
113
113
  get ErrorConditionResult(): EResult;
114
114
  get ForceBetaSectionVisible(): boolean;
115
115
  get GamepadUIAudio(): CGamepadUIAudioStore;
116
- get MainInstanceUIMode(): EUIMode;
116
+ get MainInstancUIMode(): EUIMode;
117
117
  get MainRunningApp(): SteamAppOverview | undefined;
118
118
  get MainRunningAppID(): number | undefined;
119
119
  get MostRecentlyActiveController(): ControllerInfo;
@@ -126,4 +126,7 @@ export interface CSteamUIStore {
126
126
  get TextFilterStore(): any;
127
127
  get WindowStore(): CWindowStore;
128
128
  }
129
- export {};
129
+ export * from "./gamepadbrowserview";
130
+ export * from "./gamepaduiaudio";
131
+ export * from "./menu";
132
+ export * from "./window";
@@ -8,4 +8,7 @@ var ENavigationMode;
8
8
  ENavigationMode[ENavigationMode["Digital"] = 0] = "Digital";
9
9
  ENavigationMode[ENavigationMode["Cursor"] = 1] = "Cursor";
10
10
  })(ENavigationMode || (ENavigationMode = {}));
11
- export {};
11
+ export * from "./gamepadbrowserview";
12
+ export * from "./gamepaduiaudio";
13
+ export * from "./menu";
14
+ export * from "./window";
@@ -1,4 +1,4 @@
1
- export declare enum EQuickAccessTab {
1
+ export declare enum QuickAccessTab {
2
2
  Notifications = 0,
3
3
  RemotePlayTogetherControls = 1,
4
4
  VoiceChat = 2,
@@ -10,7 +10,7 @@ export declare enum EQuickAccessTab {
10
10
  VRBatteries = 8,
11
11
  Decky = 999
12
12
  }
13
- export declare enum ESideMenu {
13
+ export declare enum SideMenu {
14
14
  None = 0,
15
15
  Main = 1,
16
16
  QuickAccess = 2
@@ -19,21 +19,21 @@ export declare class CMenuStore {
19
19
  m_MainMenuStore: any;
20
20
  m_cSideMenuExtendedVisibilityRequests: number;
21
21
  m_cSuppressRequests: number;
22
- m_eLastRequestedSideMenu: ESideMenu;
23
- m_eOpenSideMenu: ESideMenu;
24
- m_eQuickAccessTab: EQuickAccessTab;
22
+ m_eLastRequestedSideMenu: SideMenu;
23
+ m_eOpenSideMenu: SideMenu;
24
+ m_QuickAccessTab: QuickAccessTab;
25
25
  ClearLastRequestedSideMenu(): void;
26
26
  CloseSideMenus(): void;
27
- GetLastRequestedSideMenu(): ESideMenu;
28
- GetOpenSideMenu(): ESideMenu;
29
- GetQuickAccessTab(): EQuickAccessTab;
27
+ GetLastRequestedSideMenu(): SideMenu;
28
+ GetOpenSideMenu(): SideMenu;
29
+ GetQuickAccessTab(): QuickAccessTab;
30
30
  IsAnySideMenuVisible(): boolean;
31
31
  IsSideMenuInteractable(): boolean;
32
- IsSideMenuVisible(menu: ESideMenu): boolean;
33
- OpenSideMenu(menu: ESideMenu): void;
34
- OpenQuickAccessMenu(tab?: EQuickAccessTab): void;
32
+ IsSideMenuVisible(menu: SideMenu): boolean;
33
+ OpenSideMenu(menu: SideMenu): void;
34
+ OpenQuickAccessMenu(tab?: QuickAccessTab): void;
35
35
  OpenMainMenu(): void;
36
36
  RequestExtendSideMenuVisibility(): () => void;
37
37
  SetSuppressMenus(): () => void;
38
- ToggleSideMenu(menu: ESideMenu): void;
38
+ ToggleSideMenu(menu: SideMenu): void;
39
39
  }
@@ -1,19 +1,19 @@
1
- export var EQuickAccessTab;
2
- (function (EQuickAccessTab) {
3
- EQuickAccessTab[EQuickAccessTab["Notifications"] = 0] = "Notifications";
4
- EQuickAccessTab[EQuickAccessTab["RemotePlayTogetherControls"] = 1] = "RemotePlayTogetherControls";
5
- EQuickAccessTab[EQuickAccessTab["VoiceChat"] = 2] = "VoiceChat";
6
- EQuickAccessTab[EQuickAccessTab["Friends"] = 3] = "Friends";
7
- EQuickAccessTab[EQuickAccessTab["Settings"] = 4] = "Settings";
8
- EQuickAccessTab[EQuickAccessTab["Perf"] = 5] = "Perf";
9
- EQuickAccessTab[EQuickAccessTab["Help"] = 6] = "Help";
10
- EQuickAccessTab[EQuickAccessTab["Soundtrack"] = 7] = "Soundtrack";
11
- EQuickAccessTab[EQuickAccessTab["VRBatteries"] = 8] = "VRBatteries";
12
- EQuickAccessTab[EQuickAccessTab["Decky"] = 999] = "Decky";
13
- })(EQuickAccessTab || (EQuickAccessTab = {}));
14
- export var ESideMenu;
15
- (function (ESideMenu) {
16
- ESideMenu[ESideMenu["None"] = 0] = "None";
17
- ESideMenu[ESideMenu["Main"] = 1] = "Main";
18
- ESideMenu[ESideMenu["QuickAccess"] = 2] = "QuickAccess";
19
- })(ESideMenu || (ESideMenu = {}));
1
+ export var QuickAccessTab;
2
+ (function (QuickAccessTab) {
3
+ QuickAccessTab[QuickAccessTab["Notifications"] = 0] = "Notifications";
4
+ QuickAccessTab[QuickAccessTab["RemotePlayTogetherControls"] = 1] = "RemotePlayTogetherControls";
5
+ QuickAccessTab[QuickAccessTab["VoiceChat"] = 2] = "VoiceChat";
6
+ QuickAccessTab[QuickAccessTab["Friends"] = 3] = "Friends";
7
+ QuickAccessTab[QuickAccessTab["Settings"] = 4] = "Settings";
8
+ QuickAccessTab[QuickAccessTab["Perf"] = 5] = "Perf";
9
+ QuickAccessTab[QuickAccessTab["Help"] = 6] = "Help";
10
+ QuickAccessTab[QuickAccessTab["Soundtrack"] = 7] = "Soundtrack";
11
+ QuickAccessTab[QuickAccessTab["VRBatteries"] = 8] = "VRBatteries";
12
+ QuickAccessTab[QuickAccessTab["Decky"] = 999] = "Decky";
13
+ })(QuickAccessTab || (QuickAccessTab = {}));
14
+ export var SideMenu;
15
+ (function (SideMenu) {
16
+ SideMenu[SideMenu["None"] = 0] = "None";
17
+ SideMenu[SideMenu["Main"] = 1] = "Main";
18
+ SideMenu[SideMenu["QuickAccess"] = 2] = "QuickAccess";
19
+ })(SideMenu || (SideMenu = {}));
@@ -1,5 +1,5 @@
1
1
  import type { CSteamUIStore } from "../globals/stores/steamuistore";
2
- import type { EQuickAccessTab, ESideMenu } from "../globals/stores/steamuistore/menu";
2
+ import type { QuickAccessTab, SideMenu } from "../globals/stores/steamuistore/menu";
3
3
  export declare const Router: CSteamUIStore;
4
4
  export interface Navigation {
5
5
  Navigate(path: string): void;
@@ -11,8 +11,8 @@ export interface Navigation {
11
11
  NavigateToLibraryTab(): void;
12
12
  NavigateToLayoutPreview(e: unknown): void;
13
13
  NavigateToSteamWeb(url: string): void;
14
- OpenSideMenu(sideMenu: ESideMenu): void;
15
- OpenQuickAccessMenu(quickAccessTab?: EQuickAccessTab): void;
14
+ OpenSideMenu(sideMenu: SideMenu): void;
15
+ OpenQuickAccessMenu(quickAccessTab?: QuickAccessTab): void;
16
16
  OpenMainMenu(): void;
17
17
  OpenPowerMenu(unknown?: any): void;
18
18
  CloseSideMenus(): void;
@@ -1,7 +1,7 @@
1
1
  import { createElement } from 'react';
2
2
  import { applyHookStubs, removeHookStubs } from './react';
3
3
  import Logger from '../../logger';
4
- let loggingEnabled = false;
4
+ let loggingEnabled = true;
5
5
  export function setFCTrampolineLoggingEnabled(value = true) { loggingEnabled = value; }
6
6
  ;
7
7
  let logger = new Logger('FCTrampoline');
@@ -13,7 +13,9 @@ export function injectFCTrampoline(component, customHooks) {
13
13
  const userComponent = { component: newComponent };
14
14
  component.prototype.render = function (...args) {
15
15
  loggingEnabled && logger.debug("rendering trampoline", args, this);
16
- return createElement(userComponent.component, this.props, this.props.children);
16
+ const ret = createElement(userComponent.component, this.props, this.props.children);
17
+ loggingEnabled && logger.debug("trampoline", ret);
18
+ return ret;
17
19
  };
18
20
  component.prototype.isReactComponent = true;
19
21
  let stubsApplied = false;
@@ -30,9 +30,9 @@ export function applyHookStubs(customHooks = {}) {
30
30
  hooks.useCallback = (cb) => cb;
31
31
  hooks.useContext = (cb) => cb?._currentValue;
32
32
  hooks.useLayoutEffect = (_) => { };
33
- hooks.useMemo = (cb, _) => cb;
33
+ hooks.useMemo = (_, __) => ({});
34
34
  hooks.useEffect = (_) => { };
35
- hooks.useRef = (val) => ({ current: val || {} });
35
+ hooks.useRef = (val) => ({ current: val || void 0 });
36
36
  hooks.useState = (v) => {
37
37
  let val = v;
38
38
  return [val, (n) => (val = n)];
@@ -1,7 +1,7 @@
1
1
  import Logger from '../../logger';
2
2
  import { afterPatch } from '../patcher';
3
3
  import { wrapReactClass, wrapReactType } from './react';
4
- let loggingEnabled = false;
4
+ let loggingEnabled = true;
5
5
  let perfLoggingEnabled = false;
6
6
  export function setReactPatcherLoggingEnabled(value = true) { loggingEnabled = value; }
7
7
  ;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decky/ui",
3
- "version": "4.16.0",
3
+ "version": "4.16.2",
4
4
  "description": "A library for interacting with the Steam frontend in Decky plugins and elsewhere.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,6 +21,25 @@ import type {
21
21
  } from './stores';
22
22
 
23
23
  declare global {
24
+ var App: CApp;
25
+ var appStore: CAppStore;
26
+ var appDetailsStore: CAppDetailsStore;
27
+ var badgeStore: CBadgeStore;
28
+ var collectionStore: CCollectionStore;
29
+ var ConsoleStore: CConsoleStore;
30
+ var FocusNavController: CFocusNavController;
31
+ var friendStore: CFriendStore;
32
+ var g_GRS: CGameRecordingStore;
33
+ var g_PopupManager: CPopupManager;
34
+ var LocalizationManager: CLocalizationManager;
35
+ var MainWindowBrowserManager: CMainWindowBrowserManager;
36
+ var NotificationStore: CNotificationStore;
37
+ var securitystore: CSecurityStore;
38
+ var settingsStore: CSettingsStore;
39
+ var SteamClient: SteamClient;
40
+ var SteamUIStore: CSteamUIStore;
41
+ var uiStore: CLibraryUIStore;
42
+ var urlStore: CURLStore;
24
43
  interface Window {
25
44
  App: CApp;
26
45
  appStore: CAppStore;
@@ -43,3 +62,7 @@ declare global {
43
62
  urlStore: CURLStore;
44
63
  }
45
64
  }
65
+
66
+ export * from "./shared";
67
+ export * from "./steam-client";
68
+ export * from "./stores";
@@ -11,7 +11,7 @@ export interface BrowserContext {
11
11
  /**
12
12
  * The UI mode in use.
13
13
  */
14
- m_eUIMode: EUIMode;
14
+ m_UIMode: EUIMode;
15
15
 
16
16
  /**
17
17
  * If overlay, game's app ID, otherwise doesn't appear.
@@ -143,7 +143,7 @@ export interface ActivateOverlayRequest {
143
143
  export interface OverlayBrowserInfo {
144
144
  appID: number;
145
145
  eBrowserType: EBrowserType;
146
- eUIMode: EUIMode;
146
+ EUIMode: EUIMode;
147
147
  flDisplayScale?: number;
148
148
  gameID: string;
149
149
  nBrowserID: number;
@@ -131,12 +131,12 @@ export interface TrayNotification {
131
131
  }
132
132
 
133
133
  export interface NotificationTarget {
134
- eFeature: EParentalFeature;
135
- fnNotificationResolved: () => void;
136
- fnShowModal: () => void;
137
- fnTray: (target: NotificationTarget, notificationsInTray: TrayNotification[]) => void;
138
- nRemoveFromTraySec: number;
139
- toastDurationMS: number;
134
+ eFeature?: EParentalFeature;
135
+ fnNotificationResolved?: () => void;
136
+ fnShowModal?: () => void;
137
+ fnTray?: (target: NotificationTarget, notificationsInTray: TrayNotification[]) => void;
138
+ nRemoveFromTraySec?: number;
139
+ toastDurationMS?: number;
140
140
  type: EClientNotificationType;
141
141
  }
142
142
 
@@ -34,7 +34,7 @@ export interface CSteamUIStore {
34
34
  m_bStreamingRemotePlayTogether: boolean;
35
35
  m_eErrorCondition: ERefreshLoginReason;
36
36
  m_eErrorConditionResult: EResult;
37
- m_mainInstanceUIMode: EUIMode;
37
+ m_mainInstancUIMode: EUIMode;
38
38
  m_nResumeStreamingInputTimeoutHandle: number;
39
39
  m_navigationSource: NavigationSource;
40
40
  m_runningAppIDs: number[];
@@ -197,7 +197,7 @@ export interface CSteamUIStore {
197
197
  get ErrorConditionResult(): EResult;
198
198
  get ForceBetaSectionVisible(): boolean;
199
199
  get GamepadUIAudio(): CGamepadUIAudioStore;
200
- get MainInstanceUIMode(): EUIMode;
200
+ get MainInstancUIMode(): EUIMode;
201
201
  get MainRunningApp(): SteamAppOverview | undefined;
202
202
  get MainRunningAppID(): number | undefined;
203
203
  get MostRecentlyActiveController(): ControllerInfo;
@@ -210,3 +210,8 @@ export interface CSteamUIStore {
210
210
  get TextFilterStore(): any;
211
211
  get WindowStore(): CWindowStore;
212
212
  }
213
+
214
+ export * from "./gamepadbrowserview";
215
+ export * from "./gamepaduiaudio";
216
+ export * from "./menu";
217
+ export * from "./window";
@@ -1,4 +1,4 @@
1
- export enum EQuickAccessTab {
1
+ export enum QuickAccessTab {
2
2
  Notifications,
3
3
  RemotePlayTogetherControls,
4
4
  VoiceChat,
@@ -11,7 +11,7 @@ export enum EQuickAccessTab {
11
11
  Decky = 999,
12
12
  }
13
13
 
14
- export enum ESideMenu {
14
+ export enum SideMenu {
15
15
  None,
16
16
  Main,
17
17
  QuickAccess,
@@ -21,9 +21,9 @@ export declare class CMenuStore {
21
21
  m_MainMenuStore: any;
22
22
  m_cSideMenuExtendedVisibilityRequests: number;
23
23
  m_cSuppressRequests: number;
24
- m_eLastRequestedSideMenu: ESideMenu;
25
- m_eOpenSideMenu: ESideMenu;
26
- m_eQuickAccessTab: EQuickAccessTab;
24
+ m_eLastRequestedSideMenu: SideMenu;
25
+ m_eOpenSideMenu: SideMenu;
26
+ m_QuickAccessTab: QuickAccessTab;
27
27
 
28
28
  ClearLastRequestedSideMenu(): void;
29
29
 
@@ -32,44 +32,44 @@ export declare class CMenuStore {
32
32
  */
33
33
  CloseSideMenus(): void;
34
34
 
35
- GetLastRequestedSideMenu(): ESideMenu;
35
+ GetLastRequestedSideMenu(): SideMenu;
36
36
 
37
37
  /**
38
38
  * @returns the currently opened side menu.
39
39
  */
40
- GetOpenSideMenu(): ESideMenu;
40
+ GetOpenSideMenu(): SideMenu;
41
41
 
42
42
  /**
43
43
  * @returns the currently opened quick access menu tab.
44
44
  */
45
- GetQuickAccessTab(): EQuickAccessTab;
45
+ GetQuickAccessTab(): QuickAccessTab;
46
46
 
47
47
  /**
48
48
  * @returns `true` if any of the side menus is visible.
49
49
  */
50
50
  IsAnySideMenuVisible(): boolean;
51
51
 
52
- // same as above but instead checks if ESideMenu isn't ESideMenu.None ???
52
+ // same as above but instead checks if SideMenu isn't SideMenu.None ???
53
53
  IsSideMenuInteractable(): boolean;
54
54
 
55
55
  /**
56
56
  * @returns `true` if the provided side menu is visible.
57
57
  */
58
- IsSideMenuVisible(menu: ESideMenu): boolean;
58
+ IsSideMenuVisible(menu: SideMenu): boolean;
59
59
 
60
60
  /**
61
61
  * Opens a provided side menu.
62
62
  *
63
63
  * @param menu The menu to open.
64
64
  */
65
- OpenSideMenu(menu: ESideMenu): void;
65
+ OpenSideMenu(menu: SideMenu): void;
66
66
 
67
67
  /**
68
68
  * Opens the quick access menu.
69
69
  *
70
70
  * @param tab The tab to open.
71
71
  */
72
- OpenQuickAccessMenu(tab?: EQuickAccessTab): void;
72
+ OpenQuickAccessMenu(tab?: QuickAccessTab): void;
73
73
 
74
74
  /**
75
75
  * Opens the main side menu.
@@ -85,5 +85,5 @@ export declare class CMenuStore {
85
85
  *
86
86
  * @param menu The side menu to close/open.
87
87
  */
88
- ToggleSideMenu(menu: ESideMenu): void;
88
+ ToggleSideMenu(menu: SideMenu): void;
89
89
  }
@@ -1,5 +1,5 @@
1
1
  import type { CSteamUIStore } from "../globals/stores/steamuistore";
2
- import type { EQuickAccessTab, ESideMenu } from "../globals/stores/steamuistore/menu";
2
+ import type { QuickAccessTab, SideMenu } from "../globals/stores/steamuistore/menu";
3
3
  import type { SteamUIWindowInstance } from "../globals/stores/steamuistore/window";
4
4
  import Logger from "../logger";
5
5
  import { type Export, findModuleExport } from "../webpack";
@@ -18,8 +18,8 @@ export interface Navigation {
18
18
  NavigateToLibraryTab(): void;
19
19
  NavigateToLayoutPreview(e: unknown): void;
20
20
  NavigateToSteamWeb(url: string): void;
21
- OpenSideMenu(sideMenu: ESideMenu): void;
22
- OpenQuickAccessMenu(quickAccessTab?: EQuickAccessTab): void;
21
+ OpenSideMenu(sideMenu: SideMenu): void;
22
+ OpenQuickAccessMenu(quickAccessTab?: QuickAccessTab): void;
23
23
  OpenMainMenu(): void;
24
24
  OpenPowerMenu(unknown?: any): void;
25
25
  /** if calling this to perform navigation, call it after Navigate to prevent a race condition in desktop Big Picture mode that hides the overlay unintentionally */
@@ -7,7 +7,7 @@ export interface FCTrampoline {
7
7
  component: FC
8
8
  }
9
9
 
10
- let loggingEnabled = false;
10
+ let loggingEnabled = true;
11
11
 
12
12
  export function setFCTrampolineLoggingEnabled(value: boolean = true) { loggingEnabled = value };
13
13
 
@@ -38,7 +38,9 @@ export function injectFCTrampoline(component: FC, customHooks?: any): FCTrampoli
38
38
  component.prototype.render = function (...args: any[]) {
39
39
  loggingEnabled && logger.debug("rendering trampoline", args, this);
40
40
  // Pass through rendering via creating the component as a child so React can use function component logic instead of class component logic (setting up the hooks)
41
- return createElement(userComponent.component, this.props, this.props.children);
41
+ const ret = createElement(userComponent.component, this.props, this.props.children);
42
+ loggingEnabled && logger.debug("trampoline", ret);
43
+ return ret;
42
44
  };
43
45
  component.prototype.isReactComponent = true;
44
46
  let stubsApplied = false;
@@ -58,9 +58,9 @@ export function applyHookStubs(customHooks: any = {}): any {
58
58
  hooks.useCallback = (cb: Function) => cb;
59
59
  hooks.useContext = (cb: any) => cb?._currentValue;
60
60
  hooks.useLayoutEffect = (_: Function) => {}; //cb();
61
- hooks.useMemo = (cb: Function, _: any[]) => cb;
61
+ hooks.useMemo = (_: Function, __: any[]) => ({}); //cb()
62
62
  hooks.useEffect = (_: Function) => {}; //cb();
63
- hooks.useRef = (val: any) => ({ current: val || {} });
63
+ hooks.useRef = (val: any) => ({ current: val || void 0 });
64
64
  hooks.useState = (v: any) => {
65
65
  let val = v;
66
66
 
@@ -12,7 +12,7 @@ export type NodeStep = GenericNodeStep;
12
12
  export type ReactPatchHandler = GenericPatchHandler;
13
13
 
14
14
  // These will get *very* spammy.
15
- let loggingEnabled = false;
15
+ let loggingEnabled = true;
16
16
  let perfLoggingEnabled = false;
17
17
 
18
18
  export function setReactPatcherLoggingEnabled(value: boolean = true) { loggingEnabled = value };