@decky/ui 4.15.1 → 4.16.1

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.
Files changed (173) hide show
  1. package/dist/components/Dropdown.d.ts +2 -2
  2. package/dist/components/FooterLegend.d.ts +8 -2
  3. package/dist/components/FooterLegend.js +7 -0
  4. package/dist/components/Menu.d.ts +5 -9
  5. package/dist/components/Modal.d.ts +3 -2
  6. package/dist/globals/index.d.ts +47 -2
  7. package/dist/globals/index.js +3 -2
  8. package/dist/globals/shared/cm.d.ts +112 -0
  9. package/dist/globals/shared/enums.d.ts +80 -0
  10. package/dist/globals/shared/enums.js +85 -0
  11. package/dist/globals/shared/history.d.ts +12 -0
  12. package/dist/globals/shared/history.js +1 -0
  13. package/dist/globals/shared/index.d.ts +5 -0
  14. package/dist/globals/shared/index.js +5 -0
  15. package/dist/globals/shared/interfaces.d.ts +54 -0
  16. package/dist/globals/shared/interfaces.js +1 -0
  17. package/dist/globals/shared/navigation.d.ts +14 -0
  18. package/dist/globals/shared/navigation.js +10 -0
  19. package/dist/globals/shared/steamid.d.ts +36 -0
  20. package/dist/globals/shared/steamid.js +15 -0
  21. package/dist/globals/shared/storage.d.ts +27 -0
  22. package/dist/globals/shared/storage.js +11 -0
  23. package/dist/globals/steam-client/App.d.ts +1 -1
  24. package/dist/globals/steam-client/Auth.d.ts +1 -1
  25. package/dist/globals/steam-client/ClientNotifications.d.ts +1 -1
  26. package/dist/globals/steam-client/Overlay.d.ts +3 -2
  27. package/dist/globals/steam-client/Settings.d.ts +1 -1
  28. package/dist/globals/steam-client/SharedConnection.d.ts +2 -1
  29. package/dist/globals/steam-client/UI.d.ts +17 -6
  30. package/dist/globals/steam-client/UI.js +11 -0
  31. package/dist/globals/steam-client/User.d.ts +13 -0
  32. package/dist/globals/steam-client/User.js +7 -0
  33. package/dist/globals/steam-client/WebChat.d.ts +5 -4
  34. package/dist/globals/steam-client/shared.d.ts +0 -29
  35. package/dist/globals/steam-client/shared.js +0 -24
  36. package/dist/globals/stores/app.d.ts +35 -0
  37. package/dist/globals/stores/app.js +1 -0
  38. package/dist/globals/stores/appdetailsstore.d.ts +86 -0
  39. package/dist/globals/stores/appdetailsstore.js +1 -0
  40. package/dist/globals/stores/appinfostore.d.ts +56 -0
  41. package/dist/globals/stores/appinfostore.js +1 -0
  42. package/dist/globals/stores/appstore.d.ts +77 -0
  43. package/dist/globals/stores/appstore.js +1 -0
  44. package/dist/globals/stores/badgestore.d.ts +52 -0
  45. package/dist/globals/stores/badgestore.js +1 -0
  46. package/dist/globals/stores/collectionstore.d.ts +313 -0
  47. package/dist/globals/stores/collectionstore.js +143 -0
  48. package/dist/globals/stores/consolestore.d.ts +20 -0
  49. package/dist/globals/stores/consolestore.js +1 -0
  50. package/dist/globals/stores/focusnavcontroller.d.ts +383 -0
  51. package/dist/globals/stores/focusnavcontroller.js +29 -0
  52. package/dist/globals/stores/friendstore/clanstore.d.ts +75 -0
  53. package/dist/globals/stores/friendstore/clanstore.js +19 -0
  54. package/dist/globals/stores/friendstore/friendchat.d.ts +374 -0
  55. package/dist/globals/stores/friendstore/friendchat.js +56 -0
  56. package/dist/globals/stores/friendstore/friendgroupstore.d.ts +98 -0
  57. package/dist/globals/stores/friendstore/friendgroupstore.js +8 -0
  58. package/dist/globals/stores/friendstore/friendingamenotificationstore.d.ts +2 -0
  59. package/dist/globals/stores/friendstore/friendingamenotificationstore.js +1 -0
  60. package/dist/globals/stores/friendstore/friendslistfavoritesstore.d.ts +22 -0
  61. package/dist/globals/stores/friendstore/friendslistfavoritesstore.js +1 -0
  62. package/dist/globals/stores/friendstore/friendsuifriendstore.d.ts +125 -0
  63. package/dist/globals/stores/friendstore/friendsuifriendstore.js +1 -0
  64. package/dist/globals/stores/friendstore/index.d.ts +25 -0
  65. package/dist/globals/stores/friendstore/index.js +1 -0
  66. package/dist/globals/stores/friendstore/shared.d.ts +207 -0
  67. package/dist/globals/stores/friendstore/shared.js +41 -0
  68. package/dist/globals/stores/gamerecordingstore.d.ts +263 -0
  69. package/dist/globals/stores/gamerecordingstore.js +1 -0
  70. package/dist/globals/stores/index.d.ts +18 -0
  71. package/dist/globals/stores/index.js +18 -0
  72. package/dist/globals/stores/libraryuistore.d.ts +179 -0
  73. package/dist/globals/stores/libraryuistore.js +56 -0
  74. package/dist/globals/stores/localizationmanager.d.ts +18 -0
  75. package/dist/globals/stores/localizationmanager.js +1 -0
  76. package/dist/globals/stores/mainwindowbrowsermanager.d.ts +62 -0
  77. package/dist/globals/stores/mainwindowbrowsermanager.js +1 -0
  78. package/dist/globals/stores/notificationstore.d.ts +242 -0
  79. package/dist/globals/stores/notificationstore.js +20 -0
  80. package/dist/globals/stores/popupmanager.d.ts +128 -0
  81. package/dist/globals/stores/popupmanager.js +1 -0
  82. package/dist/globals/stores/securitystore.d.ts +35 -0
  83. package/dist/globals/stores/securitystore.js +1 -0
  84. package/dist/globals/stores/settingsstore.d.ts +86 -0
  85. package/dist/globals/stores/settingsstore.js +19 -0
  86. package/dist/globals/stores/steamuistore/gamepadbrowserview.d.ts +143 -0
  87. package/dist/globals/stores/steamuistore/gamepadbrowserview.js +9 -0
  88. package/dist/globals/stores/steamuistore/gamepaduiaudio.d.ts +36 -0
  89. package/dist/globals/stores/steamuistore/gamepaduiaudio.js +1 -0
  90. package/dist/globals/stores/steamuistore/index.d.ts +132 -0
  91. package/dist/globals/stores/steamuistore/index.js +14 -0
  92. package/dist/globals/stores/steamuistore/menu.d.ts +39 -0
  93. package/dist/globals/stores/steamuistore/menu.js +19 -0
  94. package/dist/globals/stores/steamuistore/window.d.ts +206 -0
  95. package/dist/globals/stores/steamuistore/window.js +6 -0
  96. package/dist/globals/stores/storeitemcache.d.ts +319 -0
  97. package/dist/globals/stores/storeitemcache.js +17 -0
  98. package/dist/globals/stores/urlstore.d.ts +57 -0
  99. package/dist/globals/stores/urlstore.js +1 -0
  100. package/dist/modules/Router.d.ts +3 -56
  101. package/dist/modules/Router.js +2 -20
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/dist/utils/index.d.ts +0 -1
  104. package/dist/utils/react/fc.js +4 -2
  105. package/dist/utils/react/react.js +2 -2
  106. package/dist/utils/react/treepatcher.js +1 -1
  107. package/package.json +1 -1
  108. package/src/components/Dropdown.tsx +2 -2
  109. package/src/components/FooterLegend.ts +10 -2
  110. package/src/components/Menu.ts +11 -21
  111. package/src/components/Modal.ts +40 -8
  112. package/src/globals/index.ts +68 -2
  113. package/src/globals/shared/cm.ts +158 -0
  114. package/src/globals/shared/enums.ts +97 -0
  115. package/src/globals/shared/history.ts +15 -0
  116. package/src/globals/shared/index.ts +5 -0
  117. package/src/globals/shared/interfaces.ts +147 -0
  118. package/src/globals/shared/navigation.ts +15 -0
  119. package/src/globals/shared/steamid.ts +49 -0
  120. package/src/globals/shared/storage.ts +62 -0
  121. package/src/globals/steam-client/App.ts +2 -2
  122. package/src/globals/steam-client/Auth.ts +2 -2
  123. package/src/globals/steam-client/ClientNotifications.ts +1 -1
  124. package/src/globals/steam-client/Overlay.ts +3 -2
  125. package/src/globals/steam-client/Settings.ts +1 -1
  126. package/src/globals/steam-client/SharedConnection.ts +2 -1
  127. package/src/globals/steam-client/UI.ts +18 -9
  128. package/src/globals/steam-client/User.ts +20 -0
  129. package/src/globals/steam-client/WebChat.ts +5 -4
  130. package/src/globals/steam-client/shared.ts +0 -69
  131. package/src/globals/stores/app.ts +102 -0
  132. package/src/globals/stores/appdetailsstore.ts +235 -0
  133. package/src/globals/stores/appinfostore.ts +65 -0
  134. package/src/globals/stores/appstore.ts +166 -0
  135. package/src/globals/stores/badgestore.ts +87 -0
  136. package/src/globals/stores/collectionstore.ts +544 -0
  137. package/src/globals/stores/consolestore.ts +54 -0
  138. package/src/globals/stores/focusnavcontroller.ts +522 -0
  139. package/src/globals/stores/friendstore/clanstore.ts +89 -0
  140. package/src/globals/stores/friendstore/friendchat.ts +646 -0
  141. package/src/globals/stores/friendstore/friendgroupstore.ts +187 -0
  142. package/src/globals/stores/friendstore/friendingamenotificationstore.ts +1 -0
  143. package/src/globals/stores/friendstore/friendslistfavoritesstore.ts +37 -0
  144. package/src/globals/stores/friendstore/friendsuifriendstore.ts +274 -0
  145. package/src/globals/stores/friendstore/index.ts +58 -0
  146. package/src/globals/stores/friendstore/shared.ts +318 -0
  147. package/src/globals/stores/gamerecordingstore.ts +367 -0
  148. package/src/globals/stores/index.ts +18 -0
  149. package/src/globals/stores/libraryuistore.ts +395 -0
  150. package/src/globals/stores/localizationmanager.ts +56 -0
  151. package/src/globals/stores/mainwindowbrowsermanager.ts +135 -0
  152. package/src/globals/stores/notificationstore.ts +298 -0
  153. package/src/globals/stores/popupmanager.ts +352 -0
  154. package/src/globals/stores/securitystore.ts +36 -0
  155. package/src/globals/stores/settingsstore.ts +134 -0
  156. package/src/globals/stores/steamuistore/gamepadbrowserview.ts +172 -0
  157. package/src/globals/stores/steamuistore/gamepaduiaudio.ts +117 -0
  158. package/src/globals/stores/steamuistore/index.ts +217 -0
  159. package/src/globals/stores/steamuistore/menu.ts +89 -0
  160. package/src/globals/stores/steamuistore/window.ts +466 -0
  161. package/src/globals/stores/storeitemcache.ts +347 -0
  162. package/src/globals/stores/urlstore.ts +150 -0
  163. package/src/modules/Router.ts +9 -75
  164. package/src/utils/index.ts +0 -1
  165. package/src/utils/react/fc.ts +4 -2
  166. package/src/utils/react/react.ts +2 -2
  167. package/src/utils/react/treepatcher.ts +1 -1
  168. package/dist/globals/SteamClient.d.ts +0 -5
  169. package/dist/globals/SteamClient.js +0 -1
  170. package/dist/globals/stores.d.ts +0 -70
  171. package/src/globals/SteamClient.ts +0 -6
  172. package/src/globals/stores.ts +0 -74
  173. /package/dist/globals/{stores.js → shared/cm.js} +0 -0
@@ -0,0 +1,522 @@
1
+ import type ReactDOM from 'react-dom';
2
+
3
+ import type {
4
+ ActionDescriptionMap,
5
+ EFocusSource,
6
+ FooterLegendProps,
7
+ GamepadButton,
8
+ GamepadEvent,
9
+ GamepadEventDetail,
10
+ } from '../../components/FooterLegend';
11
+ import type {
12
+ CCallbackList,
13
+ CScheduledFunc,
14
+ MappedSubscribableValue,
15
+ SubscribableValue,
16
+ Unsubscribable,
17
+ } from '../shared';
18
+ import type { ENavigationSourceType, NavigationSource } from '../shared/navigation';
19
+ import type { CGamepadBrowserView } from './steamuistore/gamepadbrowserview';
20
+
21
+ // This entire file is essentially unconfirmed, as I don't have a deck on me :P
22
+
23
+ export type FlowChildrenLayout_t = 'column' | 'column-reverse' | 'geometric' | 'grid' | 'row' | 'row-reverse';
24
+
25
+ // to replace for later
26
+ type FocusRing_t = any;
27
+
28
+ // valve having the same thing as a string type and enum, cool
29
+ enum EFlowChildrenLayout {
30
+ NONE,
31
+ COLUMN,
32
+ ROW,
33
+ COLUMN_REVERSE,
34
+ ROW_REVERSE,
35
+ GRID,
36
+ GEOMETRIC,
37
+ }
38
+
39
+ enum EFocusDirection {
40
+ INVALID,
41
+ FORWARD,
42
+ BACKWARD,
43
+ }
44
+
45
+ enum EGamepadInputRepeatOnAxis {
46
+ None,
47
+ Horizontal,
48
+ Vertical,
49
+ }
50
+
51
+ enum EScrollIntoViewType {
52
+ Standard,
53
+ NoTransform,
54
+ NoTransformSparseContent,
55
+ }
56
+
57
+ interface GamepadInputRepeatConfig_t {
58
+ inputsThatRepeat: Set<GamepadButton>;
59
+ firstRepeatInterval_ms: number;
60
+ repeatInterval_ms: number;
61
+ }
62
+
63
+ declare class CGamepadInputRepeatGenerator {
64
+ m_ActiveInputId: GamepadButton | undefined;
65
+ m_ActiveInputTimeout: number | undefined;
66
+ m_config: GamepadInputRepeatConfig_t;
67
+
68
+ Reset(): void;
69
+ HandleInputButtonDown(button: GamepadButton, param1: () => void): void;
70
+ }
71
+
72
+ declare class CGamepadInputRepeatHandler {
73
+ m_config: GamepadInputRepeatConfig_t;
74
+ m_fnRepeatAllowed: () => boolean;
75
+ m_inputRepeatGenerator: CGamepadInputRepeatGenerator;
76
+ m_repeatOnAxis: EGamepadInputRepeatOnAxis;
77
+
78
+ Reset(): void;
79
+ SetRepeatAllowed(value: boolean): void;
80
+ HandleInputButtonDown(button: GamepadButton, param1: () => void, param2: () => void): void;
81
+ HandleInputButtonUp(button: GamepadButton): void;
82
+ }
83
+
84
+ declare class CGamepadInputSource {
85
+ m_OnGamepadDetectedCallbacks: CCallbackList;
86
+ m_ButtonDownCallbacks: CCallbackList<[GamepadButton, ENavigationSourceType, number, boolean]>;
87
+ m_ButtonRepeatHandler: CGamepadInputRepeatHandler;
88
+ m_ButtonUpCallbacks: CCallbackList<[GamepadButton, ENavigationSourceType, number]>;
89
+ m_AnalogCallbacks: CCallbackList<[button: GamepadButton, param1: number, param2: number, index: number | undefined]>;
90
+ m_NavigationTypeChangeCallbacks: CCallbackList<[ENavigationSourceType]>;
91
+ m_eNavigationSourceType: ENavigationSourceType;
92
+ m_fLastActiveTime: number;
93
+ m_nLastActiveControllerIndex: number;
94
+
95
+ DispatchButtonDown(button: GamepadButton, param1: boolean): void;
96
+ GetActiveControllerIndex(): number;
97
+ GetActiveControllerTime(): number;
98
+ GetSourceType(): ENavigationSourceType;
99
+ OnAnalogPad(button: GamepadButton, param1: number, param2: number, index: number): void;
100
+ OnButtonDown(button: GamepadButton, param1: number | undefined): void;
101
+ OnButtonUp(button: GamepadButton, param1: number | undefined): void;
102
+ OnGamepadDetected(): void;
103
+ OnNavigationTypeChanged(navType: ENavigationSourceType): void;
104
+ RegisterForGamepadDetected(callback: () => void): void;
105
+ RegisterForGamepadButtonDown(
106
+ callback: (button: GamepadButton, navType: ENavigationSourceType, param2: number, param3: boolean) => void,
107
+ ): void;
108
+ RegisterForGamepadButtonUp(
109
+ callback: (button: GamepadButton, navType: ENavigationSourceType, index: number) => void,
110
+ ): void;
111
+ RegisterForAnalog(
112
+ callback: (button: GamepadButton, param1: number, param2: number, index: number | undefined) => void,
113
+ ): void;
114
+ RegisterForNavigationTypeChange(callback: (navType: ENavigationSourceType) => void): void;
115
+ SetControllerActive(nLastActiveControllerIndex: number): void;
116
+ SetRepeatAllowed(value: boolean): void;
117
+ SetSourceType(value: ENavigationSourceType): void;
118
+ }
119
+
120
+ interface DeferredFocusTarget {
121
+ bFocusDescendant: boolean;
122
+ node: CNavigationTreeNode;
123
+ }
124
+
125
+ declare class CNavigationTreeDeferredFocus {
126
+ m_bSuppressed: boolean;
127
+ // seems unused lol
128
+ m_interval: any | undefined;
129
+ m_schExecuteQueuedFocus: CScheduledFunc;
130
+ m_target: DeferredFocusTarget | undefined;
131
+ m_tree: CNavigationTree;
132
+
133
+ BHasQueuedFocusNode(): boolean;
134
+ BIsQueuedFocusNode(node: CNavigationTreeNode): boolean;
135
+ ClearInterval(): void;
136
+ ExecuteQueuedFocus(): void;
137
+ RequestFocus(node: CNavigationTreeNode, target: DeferredFocusTarget): void;
138
+ Reset(): void;
139
+ SuppressFocus(): void;
140
+ }
141
+
142
+ declare class CTreeNodeMovementRect {
143
+ m_element: Element | undefined;
144
+ m_rect: DOMRect | undefined;
145
+
146
+ GetRect(): DOMRect;
147
+ Reset(): void;
148
+ SetNode(value: Element | undefined): void;
149
+ }
150
+
151
+ // TODO: oh my god bruh, maybe merge with FooterLegendProps/FocusableProps ?
152
+ // they do seem to be used for <Focusable>, though
153
+ interface TreeNodeNavigationProps extends FooterLegendProps {
154
+ autoFocus: boolean;
155
+ childFocusDisabled: boolean;
156
+ disableNavSounds: boolean;
157
+ fnCanTakeFocus(node: CNavigationTreeNode): boolean;
158
+ // or void?
159
+ fnScrollIntoViewHandler: () => boolean;
160
+ focusable: boolean;
161
+ focusableIfEmpty: boolean;
162
+ layout: EFlowChildrenLayout;
163
+ navKey: string;
164
+ // React.RefObject<T>
165
+ navRef: any;
166
+ noFocusRing: boolean;
167
+ onFocusWithin(param0: boolean): void;
168
+ onMoveDown(eventDetails: GamepadEventDetail, node: CNavigationTreeNode): boolean;
169
+ onMoveLeft(eventDetails: GamepadEventDetail, node: CNavigationTreeNode): boolean;
170
+ onMoveRight(eventDetails: GamepadEventDetail, node: CNavigationTreeNode): boolean;
171
+ onMoveUp(eventDetails: GamepadEventDetail, node: CNavigationTreeNode): boolean;
172
+ resetNavOnEntry: boolean;
173
+ scrollIntoViewType: EScrollIntoViewType;
174
+ scrollIntoViewWhenChildFocused: boolean;
175
+ }
176
+
177
+ declare class CNavigationTreeNode {
178
+ m_Tree: CNavigationTree;
179
+ m_Parent: CNavigationTreeNode;
180
+ m_ActiveChild: CNavigationTreeNode | undefined;
181
+ m_iLastActiveChildIndex: boolean;
182
+ m_Properties: Partial<TreeNodeNavigationProps>;
183
+ m_element: Element | undefined;
184
+ m_FocusRing: FocusRing_t;
185
+ m_bChildrenSorted: boolean;
186
+ m_bAutoFocusChild: boolean;
187
+ m_bMounted: boolean;
188
+ m_nDepth: number;
189
+ m_Focused: SubscribableValue<boolean>;
190
+ m_FocusWithin: SubscribableValue<boolean>;
191
+ m_ActionDescriptionsChangedCallbackList: CCallbackList;
192
+ m_FocusableIfEmptyAncestor: CNavigationTreeNode | null;
193
+ m_rgChildren: CNavigationTreeNode[];
194
+ m_rgNavigationHandlers: (() => void)[];
195
+ m_rgFocusHandlers: (() => void)[];
196
+
197
+ AdvanceIndex(idx: number, dir: EFocusDirection): number;
198
+ AddChild(node: CNavigationTreeNode): void;
199
+ // only top/right/bottom/left tho
200
+ AdjustRectForLastMovementOnTangentAxis(rect: DOMRect, axis: 'x' | 'y'): DOMRect;
201
+ BChildTakeFocus(focusSource: EFocusSource, button: GamepadButton): boolean;
202
+ BHasFocus(): boolean;
203
+ BFocusWithin(): boolean;
204
+ BFocusFirstChild(focusSource: EFocusSource): boolean;
205
+ BFocusLastChild(focusSource: EFocusSource): boolean;
206
+ BTakeFocus(focusSource: EFocusSource, button: GamepadButton): void;
207
+ BTryInternalNavigation(button: GamepadButton, t: boolean): boolean;
208
+ BuildConsolidatedActionDescriptionMap(value: ActionDescriptionMap): ActionDescriptionMap;
209
+ BVisibleChildTakeFocus(focusSource: EFocusSource): boolean;
210
+ BWantsAutoFocus(): boolean;
211
+ BWantsPreferredFocus(): boolean;
212
+ BWantsFocusRing(): boolean;
213
+ ComputeRelativeDirection(button: GamepadButton, layout: EFlowChildrenLayout): EFocusDirection;
214
+ CreateHandle(): FocusRing_t;
215
+ EnsureChildrenSorted(e?: boolean): void;
216
+ FindClosetChildInDirection(
217
+ axis: 'x' | 'y',
218
+ rect: DOMRect,
219
+ dir: EFocusDirection,
220
+ button: GamepadButton,
221
+ ): CNavigationTreeNode | null;
222
+ FindClosestChildInNextAxiallyAlignedSet(
223
+ axis: 'x' | 'y',
224
+ dir: EFocusDirection,
225
+ button: GamepadButton,
226
+ rect: DOMRect,
227
+ i?: number,
228
+ rect2?: DOMRect,
229
+ ): CNavigationTreeNode | null;
230
+ FindClosestFocusableNodeToRect(button: GamepadButton, rect: DOMRect): CNavigationTreeNode;
231
+ FindFocusableDescendant(button: GamepadButton, param1: boolean): CNavigationTreeNode | null;
232
+ FindFocusableNode(button: GamepadButton, rect?: DOMRect): CNavigationTreeNode | null;
233
+ FindNextFocusableChildGeometric(dir: EFocusDirection, button: GamepadButton): CNavigationTreeNode | null;
234
+ FindNextFocusableChildInDirection(
235
+ idx: number,
236
+ dir: EFocusDirection,
237
+ button: GamepadButton,
238
+ ): CNavigationTreeNode | null;
239
+ FindNextFocusableChildInGrid(idx: number, dir: EFocusDirection, button: GamepadButton): CNavigationTreeNode | null;
240
+ ForceMeasureFocusRing(): void;
241
+ GetActiveActionDescriptions(): ActionDescriptionMap;
242
+ GetActiveChild(): CNavigationTreeNode | null;
243
+ GetActiveChildIndex(): number;
244
+ GetActiveDescendant(): CNavigationTreeNode;
245
+ GetBoundingRect(): DOMRect | undefined;
246
+ GetChildren(): [CNavigationTreeNode[], number];
247
+ GetDepth(): number;
248
+ GetFocusable(): 'children' | 'none' | 'self';
249
+ GetLastFocusElement(): Element;
250
+ GetLayout(): EFlowChildrenLayout;
251
+ GetRelativeDirection(button: GamepadButton): EFocusDirection;
252
+ GetScrollIntoViewType(): EScrollIntoViewType;
253
+ InternalFocusDescendant(node: CNavigationTreeNode | null, focusSource: EFocusSource, button: GamepadButton): void;
254
+ IsValidChildIndex(idx: number): CNavigationTreeNode;
255
+ OnDOMBlur(e: any): void;
256
+ // e = false by default
257
+ OnDOMFocus(e: any): void;
258
+ OnFocusedDecendantRemoved(e: any): void;
259
+ OnMount(el: Element): void;
260
+ OnNavigationEvent(ev: GamepadEvent): void;
261
+ OnUnmount(): void;
262
+ PropagateFocusableIfEmptyAncestorToDescendants(node: CNavigationTreeNode): void;
263
+ RegisterDOMEvents(): void;
264
+ RemoveChild(node: CNavigationTreeNode): void;
265
+ ScanChildren(e: number, dir: EFocusDirection, callback: (child: CNavigationTreeNode) => void): void;
266
+ SetActiveChild(nodeOrIndex: CNavigationTreeNode | number): void;
267
+ SetDOMFocusAndScroll(focusSource: EFocusSource, param1: any): void;
268
+ SetFocusableIfEmptyAncestor(node: CNavigationTreeNode): void;
269
+ SetFocusWithin(value: boolean): void;
270
+ SetHasFocus(value: boolean): void;
271
+ SetProperties(props: TreeNodeNavigationProps): void;
272
+ UnregisterDOMEvents(): void;
273
+ UpdateParentActiveChild(): void;
274
+
275
+ get ActionDescriptionChangedCallbackList(): CCallbackList;
276
+ get Tree(): CNavigationTree;
277
+ get NavKey(): string | undefined;
278
+ get Element(): Element | undefined;
279
+ get Parent(): CNavigationTreeNode;
280
+ get SubscribableFocusWithin(): SubscribableValue<boolean>;
281
+ get SubscribableHasFocus(): SubscribableValue<boolean>;
282
+ }
283
+
284
+ declare class CNavigationTree {
285
+ m_Controller: CFocusNavController;
286
+ m_DeferredFocus: CNavigationTreeDeferredFocus;
287
+ m_ID: string;
288
+ m_ParentNavTree: CNavigationTree | undefined;
289
+ m_Root: CNavigationTreeNode;
290
+ m_bIsEmbeddedInLegacyTree: boolean;
291
+ m_bIsEnabled: boolean;
292
+ m_bIsMounted: boolean;
293
+ m_bModal: boolean;
294
+ m_bVirtualFocus: boolean;
295
+ m_bWasActiveForLastFocusChange: boolean;
296
+ m_context: CFocusNavigationContext;
297
+ m_lastFocusNode: CNavigationTreeNode;
298
+ m_lastFocusNodeXMovement: CTreeNodeMovementRect;
299
+ m_lastFocusNodeYMovement: CTreeNodeMovementRect;
300
+ m_onActivateCallbacks: CCallbackList<[CNavigationTree]>;
301
+ m_onActiveFocusStateChangedCallbacks: CCallbackList<[boolean, CNavigationTree]>;
302
+ m_onChildTreesChanged: CCallbackList<['add' | 'remove', CNavigationTree]>;
303
+ m_onDeactivateCallbacks: CCallbackList<[CNavigationTree, CNavigationTree]>;
304
+ m_onGlobalButtonDown: ((ev: GamepadEvent) => void) | undefined;
305
+ m_onUnhandledButton: ((ev: GamepadEvent) => void) | undefined;
306
+ m_rgChildNavTrees: CNavigationTree[];
307
+ m_tsLastActivated: number;
308
+ m_window: Window;
309
+
310
+ Activate(param0?: boolean): void;
311
+ AddChildNavTree(tree: CNavigationTree): () => void;
312
+ BIsActive(): boolean;
313
+ BIsActiveFocus(): boolean;
314
+ BIsActiveWithinContext(): boolean;
315
+ BIsContextActive(): boolean;
316
+ BIsEnabled(): boolean;
317
+ BIsModal(): boolean;
318
+ BUseVirtualFocus(): boolean;
319
+ CreateNode(parent: CNavigationTreeNode, focusRing: FocusRing_t): CNavigationTreeNode;
320
+ Deactivate(): void;
321
+ FindModalDescendant(): CNavigationTree;
322
+ GetParentEmbeddedNavTree(): CNavigationTree | undefined;
323
+ GetTimeLastActivated(): number;
324
+ GetLastFocusedNode(): CNavigationTreeNode;
325
+ GetLastFocusedMovementRect(e: string): DOMRect | undefined;
326
+ HandleButtonDownEventAsLogicalEvent(ev: Event): boolean;
327
+ IsActiveFocusNavTree(): boolean;
328
+ OnActivate(tree: CNavigationTree): void;
329
+ OnChildActivated(source: EFocusSource): void;
330
+ OnContextActiveStateChanged(e: boolean): void;
331
+ OnDeactivate(tree: CNavigationTree): void;
332
+ OnRootButtonDown(ev: Event): boolean;
333
+ MountNavTree(wnd: Window): () => void;
334
+ RegisterNavigationItem(ctx: CFocusNavigationContext, wnd: Window): () => void;
335
+ SetIsEnabled(value: boolean): void;
336
+ SetIsEmbeddedInLegacyTree(value: boolean): void;
337
+ SetModal(value: boolean): void;
338
+ SetOnUnhandledButtonCallback(value: (ev: GamepadEvent) => void): void;
339
+ SetOnGlobalButtonDown(value: (ev: GamepadEvent) => void): void;
340
+ SetUseVirtualFocus(value: boolean): void;
341
+ TakeFocus(focusSource: EFocusSource, t?: boolean): void;
342
+ TransferFocus(
343
+ focusSource: EFocusSource,
344
+ focusedNode: CNavigationTreeNode | null,
345
+ blurredNode: CNavigationTreeNode,
346
+ ): void;
347
+ TransferFocusInternal(
348
+ focusSource: EFocusSource,
349
+ focusedNode: CNavigationTreeNode | null,
350
+ blurredNode: CNavigationTreeNode,
351
+ ): void;
352
+
353
+ get ChildTrees(): CNavigationTree[];
354
+ get Controller(): CFocusNavController;
355
+ get DeferredFocus(): CNavigationTreeDeferredFocus;
356
+ get OnActivateCallbacks(): CCallbackList;
357
+ get OnActiveStateChangedCallbacks(): CCallbackList;
358
+ get OnChildTreesChangedCallbacks(): CCallbackList;
359
+ get OnDeactivateCallbacks(): CCallbackList;
360
+ get Parent(): CNavigationTree | undefined;
361
+ get Root(): CNavigationTreeNode;
362
+ get Window(): Window;
363
+ get WindowContext(): CFocusNavigationContext;
364
+ get id(): string;
365
+ }
366
+
367
+ interface ActiveFocusChange {
368
+ source: EFocusSource;
369
+ from: CNavigationTreeNode | undefined;
370
+ to: CNavigationTree;
371
+ }
372
+
373
+ export declare class CFocusNavigationContext {
374
+ m_ActiveFocusChange: ActiveFocusChange | undefined;
375
+ // ActiveFocusChange [source, from, to] args
376
+ m_FocusChangedCallbacks: CCallbackList<[EFocusSource, CNavigationTreeNode | undefined, CNavigationTree]>;
377
+ m_LastActiveFocusNavTree: CNavigationTree | undefined;
378
+ m_LastActiveNavTree: CNavigationTree | undefined;
379
+ m_activeBrowserView: CGamepadBrowserView | undefined;
380
+ m_activeWindow: Window;
381
+ m_bIsGamepadInputSuppressed: false;
382
+ m_bMounted: boolean;
383
+ m_controller: CFocusNavController;
384
+ m_iFocusChangeStack: number;
385
+ m_rgGamepadNavigationTrees: CNavigationTree[];
386
+ m_rootWindow: Window;
387
+ m_schDeferredActivate: CScheduledFunc;
388
+ m_valueIsActive: SubscribableValue<boolean>;
389
+
390
+ AddNavTree(tree: CNavigationTree): void;
391
+ BIsActive(): boolean;
392
+ BIsGamepadInputSuppressed(): boolean;
393
+ BlurNavTree(tree: CNavigationTree): void;
394
+ Destroy(wnd: Window): void;
395
+ FindNavTreeInFocusedWindow(): CNavigationTree | undefined;
396
+ FindNavTreeToActivate(): CNavigationTree | undefined;
397
+ LogName(info?: { name: string }): string;
398
+
399
+ // #region Events
400
+ OnActivate(activeWindow: Window): void;
401
+ OnActivateBrowserView(activeWindow: Window, activeBrowserView?: CGamepadBrowserView): void;
402
+ OnDeactivate(activeWindow: Window): void;
403
+ OnDeactivateBrowserView(activeWindow: Window, activeBrowserView?: CGamepadBrowserView): void;
404
+ OnFocusChangeComplete(e: number): void;
405
+ OnFocusChangeStart(
406
+ source: EFocusSource,
407
+ tree: CNavigationTree,
408
+ from: CNavigationTreeNode | undefined,
409
+ to: CNavigationTree,
410
+ ): void;
411
+ OnMount(wnd: Window): void;
412
+ // #endregion
413
+
414
+ SetActive(isActive: boolean, activeWindow: Window, activeBrowserView?: CGamepadBrowserView): void;
415
+ SetActiveNavTree(tree: CNavigationTree | undefined, t: boolean): void;
416
+ UnregisterGamepadNavigationTree(tree: CNavigationTree): void;
417
+
418
+ get ActiveWindow(): Window;
419
+ get FocusChangedCallbacks(): CCallbackList<[EFocusSource, CNavigationTreeNode | undefined, CNavigationTree]>;
420
+ get IsActive(): SubscribableValue<boolean>;
421
+ get RootWindow(): Window;
422
+ }
423
+
424
+ export declare class CFocusNavController {
425
+ m_ActiveContext: CFocusNavigationContext | undefined;
426
+ m_DefaultContext: CFocusNavigationContext | undefined;
427
+ m_LastActiveContext: CFocusNavigationContext;
428
+ m_UnhandledButtonEventsCallbacks: CCallbackList<[GamepadButton]>;
429
+ m_bRestoringHistory: boolean;
430
+ m_bShowDebugFocusRing: SubscribableValue<boolean>;
431
+ m_fnCatchAllGamepadInput: ((button?: GamepadButton) => boolean) | null;
432
+ m_fnGamepadEventUpdateBatcher: typeof ReactDOM.unstable_batchedUpdates;
433
+ m_navigationSource: SubscribableValue<NavigationSource>;
434
+ m_navigationSourceSupportsFocus: MappedSubscribableValue<boolean>;
435
+ m_rgAllContexts: CFocusNavigationContext[];
436
+ m_rgGamepadInputSources: CGamepadInputSource[];
437
+
438
+ BGlobalGamepadButton(button: GamepadButton): boolean;
439
+ BIsInActiveContext(context: CFocusNavigationContext | undefined): boolean;
440
+ BIsRestoringHistory(): boolean;
441
+ BatchedUpdate(callback: typeof ReactDOM.unstable_batchedUpdates): void;
442
+ BlurNavTree(tree: CNavigationTree): void;
443
+ ChangeNavigationSource(eActivationSourceType: ENavigationSourceType, nActiveGamepadIndex: number): boolean;
444
+ CreateContext(wnd: Window, bIsGamepadInputSuppressed: boolean): CFocusNavigationContext;
445
+ DestroyContext(ctx: CFocusNavigationContext): void;
446
+ DispatchVirtualButtonClick(focusSource: EFocusSource, element: Element | null): void;
447
+ DispatchVirtualGamepad(param0: 'vgp_onbuttondown' | 'vgp_onbuttonup', param1: boolean): void;
448
+ FindAnActiveContext(): CFocusNavigationContext;
449
+ FireUnhandledGamepadEventCallbacks(ev: GamepadEvent): boolean;
450
+ GetActiveContext(): CFocusNavigationContext | undefined;
451
+ GetDefaultContext(): CFocusNavigationContext;
452
+ GetEventTarget(
453
+ focusSource: EFocusSource,
454
+ sourceType: ENavigationSourceType,
455
+ // false by default
456
+ takeFocus?: boolean,
457
+ ): [Element | null, CFocusNavigationContext];
458
+ GetShowDebugFocusRing(): SubscribableValue<boolean>;
459
+ IsActiveFocusNavTree(tree: CNavigationTree | undefined): boolean;
460
+ IsActiveNavTree(tree: CNavigationTree | undefined): boolean;
461
+ NewGamepadNavigationTree(
462
+ controller: CFocusNavController,
463
+ context: CFocusNavigationContext,
464
+ id: string,
465
+ ): CNavigationTree;
466
+
467
+ // #region Events
468
+ OnButtonActionInternal(
469
+ bTakeFocus: boolean,
470
+ eButton: GamepadButton,
471
+ eFocusSource: EFocusSource,
472
+ nActiveGamepadIndex: number,
473
+ bIsRepeat: boolean,
474
+ element: Element | null,
475
+ ctx: CFocusNavigationContext | null,
476
+ bSuppressGamepadInput: boolean,
477
+ ): void;
478
+ OnButtonDown(
479
+ eButton: GamepadButton,
480
+ eFocusSource: EFocusSource,
481
+ nActiveGamepadIndex: number,
482
+ bIsRepeat: boolean,
483
+ element: Element | null,
484
+ ctx: CFocusNavigationContext | null,
485
+ bSuppressGamepadInput: boolean,
486
+ ): void;
487
+ OnButtonUp(
488
+ eButton: GamepadButton,
489
+ eFocusSource: EFocusSource,
490
+ nActiveGamepadIndex: number,
491
+ bIsRepeat: boolean,
492
+ element: Element | null,
493
+ ctx: CFocusNavigationContext | null,
494
+ bSuppressGamepadInput: boolean,
495
+ ): void;
496
+ OnContextActivated(ctx: CFocusNavigationContext): void;
497
+ OnContextDeactivated(ctx: CFocusNavigationContext, param1: boolean): void;
498
+ OnGamepadNavigationTreeActivated(tree: CNavigationTree, param1: boolean): void;
499
+ OnGamepadNavigationTreeFocused(tree: CNavigationTree, focusSource: EFocusSource, param2?: boolean): void;
500
+ // #endregion
501
+
502
+ RegisterForUnhandledButtonDownEvents(callback: (ev: GamepadEvent) => void): Unsubscribable;
503
+ /**
504
+ * @returns an unregistration callback.
505
+ */
506
+ RegisterGamepadNavigationTree(tree: CNavigationTree, wnd: Window): () => void;
507
+ /**
508
+ * @returns an unregistration callback.
509
+ */
510
+ RegisterInputSource(value: CGamepadInputSource): () => void;
511
+ RestoreHistoryTransaction(callback: () => Promise<void>): Promise<void>;
512
+ SetCatchAllGamepadInput(callback: (button?: GamepadButton) => boolean): void;
513
+ SetGamepadEventUpdateBatcher(value: typeof ReactDOM.unstable_batchedUpdates): void;
514
+ SetShowDebugFocusRing(value: boolean): void;
515
+ SetSuppressGamepadInput(value: boolean): void;
516
+ TakeFocusChangingIFrame(): void;
517
+ // param0 = false by default
518
+ UpdateSourceToGamepad(param0?: boolean): void;
519
+
520
+ get NavigationSource(): SubscribableValue<NavigationSource>;
521
+ get NavigationSourceSupportsFocus(): MappedSubscribableValue<boolean>;
522
+ }
@@ -0,0 +1,89 @@
1
+ import type { BrowserContext, CSteamID } from '../../shared';
2
+ import type { CFriendStore } from '.';
3
+
4
+ export enum EClanAccountFlags {
5
+ None,
6
+ TrustedPress = 1 << 0,
7
+ AllowClanImages = 1 << 1,
8
+ AllowRSSFeed = 1 << 2,
9
+ AllowPartnerEventEditor = 1 << 3,
10
+ }
11
+
12
+ export enum EClanRelationship {
13
+ None,
14
+ Blocked,
15
+ Invited,
16
+ Member,
17
+ Kicked,
18
+ KickAcknowledged,
19
+ PendingApproval,
20
+ RequestDenied,
21
+ }
22
+
23
+ export interface CClan {
24
+ m_bChatRoomPrivate: boolean | undefined;
25
+ m_bGotInitialState: boolean;
26
+ m_bInitialized: boolean;
27
+ m_bPersonaStateDesired: boolean;
28
+ m_bPersonaStateLoadRequested: boolean;
29
+ m_cChatRoomMembers: number;
30
+ m_cMemberCount: number;
31
+ m_cUsersInGame: number;
32
+ m_cUsersOnline: number;
33
+ /** @see {@link EClanAccountFlags} */
34
+ m_eClanAccountFlags: number;
35
+ m_eClanRelationship: EClanRelationship;
36
+ m_steamid: CSteamID;
37
+ m_strAvatarHash: string;
38
+ m_strClanName: string;
39
+ m_strClanTag: string;
40
+ m_ulChatRoomGroupID: string | undefined;
41
+ m_unOGGAppID: number | undefined;
42
+
43
+ BIsInvite(): boolean;
44
+ BIsMember(): boolean;
45
+ BIsOGG(): boolean;
46
+ BMatchesSearchString(s: string): boolean;
47
+ BNeedsToLoadPersonaStateData(): boolean;
48
+ BPersonaStateDesired(): boolean;
49
+ GetChatGroupIDIfLoaded(): CClan['m_ulChatRoomGroupID'];
50
+ GetChatRoomGroupID(): Promise<CClan['m_ulChatRoomGroupID'] | null>;
51
+ GetOGGAppID(): CClan['m_unOGGAppID'];
52
+ OpenChatDialog(browser?: BrowserContext, param1?: boolean): Promise<string | null>;
53
+
54
+ get avatar_url(): string;
55
+ get avatar_url_medium(): string;
56
+ get avatar_url_full(): string;
57
+ get chat_room_private(): boolean;
58
+ get clanid(): number;
59
+ get count_chat_room_members(): number;
60
+ get member_count(): number;
61
+ get name(): string;
62
+ get steamid(): CSteamID;
63
+ get users_ingame(): number;
64
+ get users_online(): number;
65
+ }
66
+
67
+ export declare class CClanStore {
68
+ m_FriendStore: CFriendStore;
69
+ m_iIntervalLoadClanData: number | undefined;
70
+ m_mapClans: Map<number, CClan>;
71
+
72
+ EnsureInitialStateForClanInvites(): void;
73
+ GetClan(id: number): CClan;
74
+ GetOrCreateClan(steamid: number | CSteamID, eClanRelationship: EClanRelationship): CClan;
75
+ JoinClanChatRoom(browser: BrowserContext, relationship: EClanRelationship): Promise<void>;
76
+ LoadClanPersonaIfNeeded(persona: CClan): void;
77
+ LoadMissingClanPersonas(): void;
78
+
79
+ /**
80
+ * @returns a boolean indicating whether the operation was successful.
81
+ */
82
+ RespondToClanInvite(steamid: CSteamID, accept: boolean): Promise<boolean>;
83
+
84
+ ScheduleLoadMissingClanPersonas(): void;
85
+ SetClanChatGroupID(clanID: number, groupID: string): string;
86
+
87
+ get clan_invite_count(): number;
88
+ get clan_invites(): CClan[];
89
+ }