@decky/ui 3.26.0

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 (147) hide show
  1. package/LICENSE +504 -0
  2. package/README.md +30 -0
  3. package/dist/class-mapper.d.ts +7 -0
  4. package/dist/class-mapper.js +26 -0
  5. package/dist/components/Button.d.ts +5 -0
  6. package/dist/components/Button.js +2 -0
  7. package/dist/components/ButtonItem.d.ts +7 -0
  8. package/dist/components/ButtonItem.js +5 -0
  9. package/dist/components/Carousel.d.ts +19 -0
  10. package/dist/components/Carousel.js +2 -0
  11. package/dist/components/ControlsList.d.ts +7 -0
  12. package/dist/components/ControlsList.js +2 -0
  13. package/dist/components/Dialog.d.ts +33 -0
  14. package/dist/components/Dialog.js +24 -0
  15. package/dist/components/DialogCheckbox.d.ts +17 -0
  16. package/dist/components/DialogCheckbox.js +14 -0
  17. package/dist/components/Dropdown.d.ts +34 -0
  18. package/dist/components/Dropdown.js +5 -0
  19. package/dist/components/Field.d.ts +23 -0
  20. package/dist/components/Field.js +2 -0
  21. package/dist/components/FocusRing.d.ts +9 -0
  22. package/dist/components/FocusRing.js +2 -0
  23. package/dist/components/Focusable.d.ts +12 -0
  24. package/dist/components/Focusable.js +4 -0
  25. package/dist/components/FooterLegend.d.ts +66 -0
  26. package/dist/components/FooterLegend.js +32 -0
  27. package/dist/components/Item.d.ts +12 -0
  28. package/dist/components/Item.js +1 -0
  29. package/dist/components/Marquee.d.ts +14 -0
  30. package/dist/components/Marquee.js +2 -0
  31. package/dist/components/Menu.d.ts +29 -0
  32. package/dist/components/Menu.js +9 -0
  33. package/dist/components/Modal.d.ts +52 -0
  34. package/dist/components/Modal.js +29 -0
  35. package/dist/components/Panel.d.ts +11 -0
  36. package/dist/components/Panel.js +4 -0
  37. package/dist/components/ProgressBar.d.ts +21 -0
  38. package/dist/components/ProgressBar.js +6 -0
  39. package/dist/components/Scroll.d.ts +7 -0
  40. package/dist/components/Scroll.js +5 -0
  41. package/dist/components/SidebarNavigation.d.ts +21 -0
  42. package/dist/components/SidebarNavigation.js +4 -0
  43. package/dist/components/SliderField.d.ts +26 -0
  44. package/dist/components/SliderField.js +2 -0
  45. package/dist/components/Spinner.d.ts +2 -0
  46. package/dist/components/Spinner.js +2 -0
  47. package/dist/components/SteamSpinner.d.ts +2 -0
  48. package/dist/components/SteamSpinner.js +2 -0
  49. package/dist/components/Tabs.d.ts +16 -0
  50. package/dist/components/Tabs.js +48 -0
  51. package/dist/components/TextField.d.ts +22 -0
  52. package/dist/components/TextField.js +2 -0
  53. package/dist/components/Toggle.d.ts +8 -0
  54. package/dist/components/Toggle.js +2 -0
  55. package/dist/components/ToggleField.d.ts +9 -0
  56. package/dist/components/ToggleField.js +2 -0
  57. package/dist/components/index.d.ts +25 -0
  58. package/dist/components/index.js +25 -0
  59. package/dist/custom-components/ColorPickerModal.d.ts +12 -0
  60. package/dist/custom-components/ColorPickerModal.js +87 -0
  61. package/dist/custom-components/ReorderableList.d.ts +26 -0
  62. package/dist/custom-components/ReorderableList.js +84 -0
  63. package/dist/custom-components/SuspensefulImage.d.ts +7 -0
  64. package/dist/custom-components/SuspensefulImage.js +27 -0
  65. package/dist/custom-components/index.d.ts +3 -0
  66. package/dist/custom-components/index.js +3 -0
  67. package/dist/custom-hooks/index.d.ts +1 -0
  68. package/dist/custom-hooks/index.js +1 -0
  69. package/dist/custom-hooks/useQuickAccessVisible.d.ts +1 -0
  70. package/dist/custom-hooks/useQuickAccessVisible.js +22 -0
  71. package/dist/deck-hooks/index.d.ts +1 -0
  72. package/dist/deck-hooks/index.js +1 -0
  73. package/dist/deck-hooks/useParams.d.ts +1 -0
  74. package/dist/deck-hooks/useParams.js +2 -0
  75. package/dist/globals/SteamClient.d.ts +307 -0
  76. package/dist/globals/SteamClient.js +1 -0
  77. package/dist/globals/index.d.ts +2 -0
  78. package/dist/globals/index.js +2 -0
  79. package/dist/globals/stores.d.ts +50 -0
  80. package/dist/globals/stores.js +1 -0
  81. package/dist/index.d.ts +10 -0
  82. package/dist/index.js +14 -0
  83. package/dist/logger.d.ts +17 -0
  84. package/dist/logger.js +46 -0
  85. package/dist/modules/Router.d.ts +110 -0
  86. package/dist/modules/Router.js +102 -0
  87. package/dist/modules/index.d.ts +1 -0
  88. package/dist/modules/index.js +1 -0
  89. package/dist/utils/index.d.ts +12 -0
  90. package/dist/utils/index.js +23 -0
  91. package/dist/utils/patcher.d.ts +18 -0
  92. package/dist/utils/patcher.js +103 -0
  93. package/dist/utils/react.d.ts +19 -0
  94. package/dist/utils/react.js +89 -0
  95. package/dist/utils/static-classes.d.ts +52 -0
  96. package/dist/utils/static-classes.js +28 -0
  97. package/dist/webpack.d.ts +21 -0
  98. package/dist/webpack.js +102 -0
  99. package/package.json +89 -0
  100. package/src/class-mapper.ts +34 -0
  101. package/src/components/Button.ts +8 -0
  102. package/src/components/ButtonItem.ts +16 -0
  103. package/src/components/Carousel.ts +25 -0
  104. package/src/components/ControlsList.ts +14 -0
  105. package/src/components/Dialog.ts +90 -0
  106. package/src/components/DialogCheckbox.ts +36 -0
  107. package/src/components/Dropdown.ts +51 -0
  108. package/src/components/Field.ts +29 -0
  109. package/src/components/FocusRing.ts +15 -0
  110. package/src/components/Focusable.ts +21 -0
  111. package/src/components/FooterLegend.ts +67 -0
  112. package/src/components/Item.ts +13 -0
  113. package/src/components/Marquee.ts +20 -0
  114. package/src/components/Menu.ts +58 -0
  115. package/src/components/Modal.ts +119 -0
  116. package/src/components/Panel.ts +26 -0
  117. package/src/components/ProgressBar.ts +37 -0
  118. package/src/components/Scroll.ts +15 -0
  119. package/src/components/SidebarNavigation.ts +30 -0
  120. package/src/components/SliderField.ts +33 -0
  121. package/src/components/Spinner.ts +8 -0
  122. package/src/components/SteamSpinner.ts +7 -0
  123. package/src/components/Tabs.tsx +127 -0
  124. package/src/components/TextField.ts +28 -0
  125. package/src/components/Toggle.ts +14 -0
  126. package/src/components/ToggleField.ts +15 -0
  127. package/src/components/index.ts +25 -0
  128. package/src/custom-components/ColorPickerModal.tsx +132 -0
  129. package/src/custom-components/ReorderableList.tsx +183 -0
  130. package/src/custom-components/SuspensefulImage.tsx +44 -0
  131. package/src/custom-components/index.ts +3 -0
  132. package/src/custom-hooks/index.ts +1 -0
  133. package/src/custom-hooks/useQuickAccessVisible.ts +63 -0
  134. package/src/deck-hooks/index.ts +1 -0
  135. package/src/deck-hooks/useParams.ts +15 -0
  136. package/src/globals/SteamClient.ts +321 -0
  137. package/src/globals/index.ts +2 -0
  138. package/src/globals/stores.ts +50 -0
  139. package/src/index.ts +20 -0
  140. package/src/logger.ts +77 -0
  141. package/src/modules/Router.ts +174 -0
  142. package/src/modules/index.ts +1 -0
  143. package/src/utils/index.ts +43 -0
  144. package/src/utils/patcher.ts +160 -0
  145. package/src/utils/react.ts +141 -0
  146. package/src/utils/static-classes.ts +1104 -0
  147. package/src/webpack.ts +136 -0
package/src/webpack.ts ADDED
@@ -0,0 +1,136 @@
1
+ import Logger from './logger';
2
+
3
+ declare global {
4
+ interface Window {
5
+ webpackChunksteamui: any;
6
+ }
7
+ }
8
+
9
+ const logger = new Logger('Webpack');
10
+
11
+ // In most case an object with getters for each property. Look for the first call to r.d in the module, usually near or at the top.
12
+ export type Module = any;
13
+ export type Export = any;
14
+ type FilterFn = (module: any) => boolean;
15
+ type ExportFilterFn = (moduleExport: any, exportName?: any) => boolean;
16
+ type FindFn = (module: any) => any;
17
+
18
+ export let modules: any = [];
19
+
20
+ function initModuleCache() {
21
+ const startTime = performance.now();
22
+ logger.group('Webpack Module Init');
23
+ // Webpack 5, currently on beta
24
+ // Generate a fake module ID
25
+ const id = Math.random(); // really should be an int and not a float but who cares
26
+ let webpackRequire!: ((id: any) => Module) & { m: object };
27
+ // Insert our module in a new chunk.
28
+ // The module will then be called with webpack's internal require function as its first argument
29
+ window.webpackChunksteamui.push([
30
+ [id],
31
+ {},
32
+ (r: any) => {
33
+ webpackRequire = r;
34
+ },
35
+ ]);
36
+
37
+ logger.log(
38
+ 'Initializing all modules. Errors here likely do not matter, as they are usually just failing module side effects.',
39
+ );
40
+
41
+ // Loop over every module ID
42
+ for (let i of Object.keys(webpackRequire.m)) {
43
+ try {
44
+ const module = webpackRequire(i);
45
+ if (module) {
46
+ modules.push(module);
47
+ }
48
+ } catch (e) {
49
+ logger.debug('Ignoring require error for module', i, e);
50
+ }
51
+ }
52
+
53
+ logger.groupEnd(`Modules initialized in ${performance.now() - startTime}ms...`);
54
+ }
55
+
56
+ initModuleCache();
57
+
58
+ export const findModule = (filter: FilterFn) => {
59
+ for (const m of modules) {
60
+ if (m.default && filter(m.default)) return m.default;
61
+ if (filter(m)) return m;
62
+ }
63
+ };
64
+
65
+ export const findModuleDetailsByExport = (
66
+ filter: ExportFilterFn,
67
+ minExports?: number,
68
+ ): [module: Module | undefined, moduleExport: any, exportName: any] => {
69
+ for (const m of modules) {
70
+ if (!m) continue;
71
+ for (const mod of [m.default, m]) {
72
+ if (typeof mod !== 'object') continue;
73
+ if (minExports && Object.keys(mod).length < minExports) continue;
74
+ for (let exportName in mod) {
75
+ if (mod?.[exportName]) {
76
+ const filterRes = filter(mod[exportName], exportName);
77
+ if (filterRes) {
78
+ return [mod, mod[exportName], exportName];
79
+ } else {
80
+ continue;
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return [undefined, undefined, undefined];
87
+ };
88
+
89
+ export const findModuleByExport = (filter: ExportFilterFn, minExports?: number) => {
90
+ return findModuleDetailsByExport(filter, minExports)?.[0];
91
+ };
92
+
93
+ export const findModuleExport = (filter: ExportFilterFn, minExports?: number) => {
94
+ return findModuleDetailsByExport(filter, minExports)?.[1];
95
+ };
96
+
97
+ /**
98
+ * @deprecated use findModuleExport instead
99
+ */
100
+ export const findModuleChild = (filter: FindFn) => {
101
+ for (const m of modules) {
102
+ for (const mod of [m.default, m]) {
103
+ const filterRes = filter(mod);
104
+ if (filterRes) {
105
+ return filterRes;
106
+ } else {
107
+ continue;
108
+ }
109
+ }
110
+ }
111
+ };
112
+
113
+ export const findAllModules = (filter: FilterFn) => {
114
+ const out = [];
115
+
116
+ for (const m of modules) {
117
+ if (m.default && filter(m.default)) out.push(m.default);
118
+ if (filter(m)) out.push(m);
119
+ }
120
+
121
+ return out;
122
+ };
123
+
124
+ export const CommonUIModule = modules.find((m: Module) => {
125
+ if (typeof m !== 'object') return false;
126
+ for (let prop in m) {
127
+ if (m[prop]?.contextType?._currentValue && Object.keys(m).length > 60) return true;
128
+ }
129
+ return false;
130
+ });
131
+
132
+ export const IconsModule = findModuleByExport(
133
+ (e) => e?.toString && /Spinner\)}\)?,.\.createElement\(\"path\",{d:\"M18 /.test(e.toString()),
134
+ );
135
+
136
+ export const ReactRouter = findModuleByExport((e) => e.computeRootMatch);